diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9d6e35622..609d4ea86 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,8 +6,8 @@ - [ ] The pull request is done against the latest development branch - [ ] Only relevant files were touched - [ ] Only one feature/fix was added per PR and the code change compiles without warnings - - [ ] The code change is tested and works on Tasmota core ESP8266 V.2.7.4.9 - - [ ] The code change is tested and works with core ESP32 V.1.0.6 + - [ ] The code change is tested and works with Tasmota core ESP8266 V.2.7.4.9 + - [ ] The code change is tested and works with Tasmota core ESP32 V.1.0.7.4 - [ ] I accept the [CLA](https://github.com/arendst/Tasmota/blob/development/CONTRIBUTING.md#contributor-license-agreement-cla). _NOTE: The code change must pass CI tests. **Your PR cannot be merged unless tests pass**_ diff --git a/.github/workflows/CI_github.yml b/.github/workflows/CI_github.yml index c5e37b063..84017f6f4 100644 --- a/.github/workflows/CI_github.yml +++ b/.github/workflows/CI_github.yml @@ -7,7 +7,7 @@ jobs: tasmota: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -26,7 +26,7 @@ jobs: tasmota-minimal: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -45,7 +45,7 @@ jobs: tasmota-lite: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -64,7 +64,7 @@ jobs: tasmota-knx: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -83,7 +83,7 @@ jobs: tasmota-sensors: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -102,7 +102,7 @@ jobs: tasmota-display: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -121,7 +121,7 @@ jobs: tasmota-ir: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -140,7 +140,7 @@ jobs: tasmota-zbbridge: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -159,7 +159,7 @@ jobs: tasmota-zigbee: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -178,7 +178,7 @@ jobs: tasmota-AF: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -197,7 +197,7 @@ jobs: tasmota-BG: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -216,7 +216,7 @@ jobs: tasmota-BR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -235,7 +235,7 @@ jobs: tasmota-CN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -254,7 +254,7 @@ jobs: tasmota-CZ: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -273,7 +273,7 @@ jobs: tasmota-DE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -292,7 +292,7 @@ jobs: tasmota-ES: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -311,7 +311,7 @@ jobs: tasmota-FR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -330,7 +330,7 @@ jobs: tasmota-FY: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -349,7 +349,7 @@ jobs: tasmota-GR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -368,7 +368,7 @@ jobs: tasmota-HE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -387,7 +387,7 @@ jobs: tasmota-HU: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -406,7 +406,7 @@ jobs: tasmota-IT: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -425,7 +425,7 @@ jobs: tasmota-KO: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -444,7 +444,7 @@ jobs: tasmota-NL: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -463,7 +463,7 @@ jobs: tasmota-PL: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -482,7 +482,7 @@ jobs: tasmota-PT: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -501,7 +501,7 @@ jobs: tasmota-RO: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -520,7 +520,7 @@ jobs: tasmota-RU: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -539,7 +539,7 @@ jobs: tasmota-SE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -558,7 +558,7 @@ jobs: tasmota-SK: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -577,7 +577,7 @@ jobs: tasmota-TR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -596,7 +596,7 @@ jobs: tasmota-TW: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -615,7 +615,7 @@ jobs: tasmota-UK: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -634,7 +634,7 @@ jobs: tasmota-VN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies diff --git a/.github/workflows/CI_github_ESP32.yml b/.github/workflows/CI_github_ESP32.yml index 25c761f11..b01c6af2c 100644 --- a/.github/workflows/CI_github_ESP32.yml +++ b/.github/workflows/CI_github_ESP32.yml @@ -7,7 +7,7 @@ jobs: tasmota32: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -27,7 +27,7 @@ jobs: tasmota32solo1: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -47,7 +47,7 @@ jobs: tasmota32-webcam: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -67,7 +67,7 @@ jobs: tasmota32-odroidgo: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -87,7 +87,7 @@ jobs: tasmota32-core2: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -107,7 +107,7 @@ jobs: tasmota32-bluetooth: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -127,7 +127,7 @@ jobs: tasmota32-display: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -144,10 +144,30 @@ jobs: name: firmware path: ./build_output + tasmota32-lvgl: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -U platformio + platformio upgrade --dev + platformio update + - name: Run PlatformIO + run: | + platformio run -e tasmota32-lvgl + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + tasmota32-ir: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -167,7 +187,7 @@ jobs: tasmota32-AF: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -187,7 +207,7 @@ jobs: tasmota32-BG: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -207,7 +227,7 @@ jobs: tasmota32-BR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -227,7 +247,7 @@ jobs: tasmota32-CN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -247,7 +267,7 @@ jobs: tasmota32-CZ: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -267,7 +287,7 @@ jobs: tasmota32-DE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -287,7 +307,7 @@ jobs: tasmota32-ES: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -307,7 +327,7 @@ jobs: tasmota32-FR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -327,7 +347,7 @@ jobs: tasmota32-FY: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -347,7 +367,7 @@ jobs: tasmota32-GR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -367,7 +387,7 @@ jobs: tasmota32-HE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -387,7 +407,7 @@ jobs: tasmota32-HU: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -407,7 +427,7 @@ jobs: tasmota32-IT: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -427,7 +447,7 @@ jobs: tasmota32-KO: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -447,7 +467,7 @@ jobs: tasmota32-NL: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -467,7 +487,7 @@ jobs: tasmota32-PL: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -487,7 +507,7 @@ jobs: tasmota32-PT: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -507,7 +527,7 @@ jobs: tasmota32-RO: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -527,7 +547,7 @@ jobs: tasmota32-RU: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -547,7 +567,7 @@ jobs: tasmota32-SE: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -567,7 +587,7 @@ jobs: tasmota32-SK: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -587,7 +607,7 @@ jobs: tasmota32-TR: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -607,7 +627,7 @@ jobs: tasmota32-TW: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -627,7 +647,7 @@ jobs: tasmota32-UK: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -647,7 +667,7 @@ jobs: tasmota32-VN: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies diff --git a/.github/workflows/Tasmota_build.yml b/.github/workflows/Tasmota_build_development.yml similarity index 83% rename from .github/workflows/Tasmota_build.yml rename to .github/workflows/Tasmota_build_development.yml index 85a887fad..045437dfa 100644 --- a/.github/workflows/Tasmota_build.yml +++ b/.github/workflows/Tasmota_build_development.yml @@ -1,35 +1,20 @@ -name: Build_firmware +name: Build_firmware_development on: + workflow_dispatch: # Manually start a workflow push: branches: development + paths-ignore: + - '.github/**' # Ignore changes towards the .github directory + - '**.md' # Do no build if *.md files changes jobs: - tasmota_pull: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Use latest Tasmota development - run: | - git config --local user.name "Platformio BUILD" - git switch -c work - git remote add -f Tasmota "https://github.com/arendst/Tasmota.git" - git merge Tasmota/development --allow-unrelated-histories - - name: Push Tasmota # Push updates of latest Tasmota development to repo - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: 'development' - force: true - tasmota: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -45,11 +30,10 @@ jobs: tasmota-minimal: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -65,11 +49,10 @@ jobs: tasmota-lite: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -85,11 +68,10 @@ jobs: tasmota-knx: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -105,11 +87,10 @@ jobs: tasmota-sensors: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -125,11 +106,10 @@ jobs: tasmota-display: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -145,11 +125,10 @@ jobs: tasmota-ir: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -164,32 +143,11 @@ jobs: path: ./build_output - tasmota-ircustom: - needs: tasmota_pull - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota-ircustom - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota-zbbridge: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -205,11 +163,10 @@ jobs: tasmota-zigbee: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -225,11 +182,10 @@ jobs: tasmota-AF: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -245,11 +201,10 @@ jobs: tasmota-BG: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -265,11 +220,10 @@ jobs: tasmota-BR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -285,11 +239,10 @@ jobs: tasmota-CN: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -305,11 +258,10 @@ jobs: tasmota-CZ: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -325,11 +277,10 @@ jobs: tasmota-DE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -345,11 +296,10 @@ jobs: tasmota-ES: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -365,11 +315,10 @@ jobs: tasmota-FR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -385,11 +334,10 @@ jobs: tasmota-FY: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -405,11 +353,10 @@ jobs: tasmota-GR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -425,11 +372,10 @@ jobs: tasmota-HE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -445,11 +391,10 @@ jobs: tasmota-HU: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -465,11 +410,10 @@ jobs: tasmota-IT: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -485,11 +429,10 @@ jobs: tasmota-KO: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -505,11 +448,10 @@ jobs: tasmota-NL: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -525,11 +467,10 @@ jobs: tasmota-PL: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -545,11 +486,10 @@ jobs: tasmota-PT: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -565,11 +505,10 @@ jobs: tasmota-RO: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -585,11 +524,10 @@ jobs: tasmota-RU: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -605,11 +543,10 @@ jobs: tasmota-SE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -625,11 +562,10 @@ jobs: tasmota-SK: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -645,11 +581,10 @@ jobs: tasmota-TR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -665,11 +600,10 @@ jobs: tasmota-TW: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -685,11 +619,10 @@ jobs: tasmota-UK: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -705,11 +638,10 @@ jobs: tasmota-VN: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -725,11 +657,10 @@ jobs: tasmota32: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -745,11 +676,10 @@ jobs: tasmota32solo1: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -765,11 +695,10 @@ jobs: tasmota32-webcam: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -785,11 +714,10 @@ jobs: tasmota32-odroidgo: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -805,11 +733,10 @@ jobs: tasmota32-core2: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -825,11 +752,10 @@ jobs: tasmota32-bluetooth: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -845,11 +771,10 @@ jobs: tasmota32-display: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -864,12 +789,30 @@ jobs: path: ./build_output - tasmota32-ir: - needs: tasmota_pull + tasmota32-lvgl: runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: | + platformio run -e tasmota32-lvgl + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + + tasmota32-ir: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -884,32 +827,11 @@ jobs: path: ./build_output - tasmota32-ircustom: - needs: tasmota_pull - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-ircustom - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota32-AF: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -925,11 +847,10 @@ jobs: tasmota32-BG: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -945,11 +866,10 @@ jobs: tasmota32-BR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -965,11 +885,10 @@ jobs: tasmota32-CN: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -985,11 +904,10 @@ jobs: tasmota32-CZ: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1005,11 +923,10 @@ jobs: tasmota32-DE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1025,11 +942,10 @@ jobs: tasmota32-ES: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1045,11 +961,10 @@ jobs: tasmota32-FR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1065,11 +980,10 @@ jobs: tasmota32-FY: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1085,11 +999,10 @@ jobs: tasmota32-GR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1105,11 +1018,10 @@ jobs: tasmota32-HE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1125,11 +1037,10 @@ jobs: tasmota32-HU: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1145,11 +1056,10 @@ jobs: tasmota32-IT: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1165,11 +1075,10 @@ jobs: tasmota32-KO: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1185,11 +1094,10 @@ jobs: tasmota32-NL: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1205,11 +1113,10 @@ jobs: tasmota32-PL: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1225,11 +1132,10 @@ jobs: tasmota32-PT: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1245,11 +1151,10 @@ jobs: tasmota32-RO: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1265,11 +1170,10 @@ jobs: tasmota32-RU: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1285,11 +1189,10 @@ jobs: tasmota32-SE: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1305,11 +1208,10 @@ jobs: tasmota32-SK: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1325,11 +1227,10 @@ jobs: tasmota32-TR: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1345,11 +1246,10 @@ jobs: tasmota32-TW: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1365,11 +1265,10 @@ jobs: tasmota32-UK: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1385,11 +1284,10 @@ jobs: tasmota32-VN: - needs: tasmota_pull runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 - name: Install dependencies @@ -1405,11 +1303,10 @@ jobs: Upload: - needs: [tasmota-VN, tasmota32-ircustom, tasmota32-VN, tasmota32-TW, tasmota32-TR] + needs: [tasmota-VN, tasmota32-VN, tasmota32-TW, tasmota32-TR] runs-on: ubuntu-latest continue-on-error: true steps: - - uses: actions/checkout@v1 - uses: actions/download-artifact@v2 with: name: firmware @@ -1421,8 +1318,6 @@ jobs: run: | mkdir -p ./firmware/tasmota/languages mkdir -p ./firmware/tasmota32/languages - mkdir -p ./firmware/tasmota32/ESP32_needed_files/ - mkdir -p ./firmware/tasmota32/Odroid_go_and_core2_needed_files/ mkdir -p ./firmware/map [ ! -f ./mv_firmware/map/* ] || mv ./mv_firmware/map/* ./firmware/map/ [ ! -f ./mv_firmware/firmware/tasmota.* ] || mv ./mv_firmware/firmware/tasmota.* ./firmware/tasmota/ @@ -1438,25 +1333,35 @@ jobs: [ ! -f ./mv_firmware/firmware/tasmota32solo1*.* ] || mv ./mv_firmware/firmware/tasmota32solo1*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-ir*.* ] || mv ./mv_firmware/firmware/tasmota32-ir*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-display.* ] || mv ./mv_firmware/firmware/tasmota32-display.* ./firmware/tasmota32/ + [ ! -f ./mv_firmware/firmware/tasmota32-lvgl.* ] || mv ./mv_firmware/firmware/tasmota32-lvgl.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/languages/ [ ! -f ./mv_firmware/firmware/* ] || mv ./mv_firmware/firmware/* ./firmware/tasmota/languages/ - [ ! -f ./tools/Esptool/ESP32/*.* ] || mv ./tools/Esptool/ESP32/*.* ./firmware/tasmota32/ESP32_needed_files/ - [ ! -f ./tools/Esptool/Odroid_go_and_core2/*.* ] || mv ./tools/Esptool/Odroid_go_and_core2/*.* ./firmware/tasmota32/Odroid_go_and_core2_needed_files/ - [ ! -f ./FIRMWARE.md ] || mv -f ./FIRMWARE.md ./README.md - - name: Commit files # transfer the new binaries back into the repository - run: | - git config --local user.name "Platformio BUILD" - git rm -r --cached . - git add ./README.md - git add -f ./firmware/*.* - git commit -m "Tasmota ESP Binaries http://tasmota.com" - - name: Push changes # push the firmware files to branch firmware - uses: ad-m/github-push-action@master + - name: Display files to transfer + run: ls -R ./* + - name: Push Firmware files to https://github.com/arendst/Tasmota-firmware + uses: dmnemec/copy_file_to_another_repo_action@main + env: + API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: 'firmware' - force: true + source_file: 'firmware' + destination_repo: 'arendst/Tasmota-firmware' + user_email: 'github-actions@github.com' + user_name: 'github-actions' + - name: Creat trigger.txt + run: | + echo ${GITHUB_SHA} &> trigger.txt + echo "$( trigger.txt + echo "$(``, ``EnergyToday`` and ``EnergyYesterday`` to (re)set energy values +- Commands ``EnergyUsage`` and ``EnergyExport`` to (re)set energy usage and export values +- Berry add module ``import persist`` +- Support for BL0942 energy monitor (#13259) +- Support for HM330X SeedStudio Grove Particule sensor (#13250) + +### Breaking Changed +- ESP32 LVGL updated to v8.0.2 + +### Changed +- Removed command ``EnergyReset`` as it is replaced by new commands +- Files starting with underscore in file system are no more hidden +- ESP32 Memory display to exclude IRAM (i.e. less by 40-50KB) (#13294) + +## [9.5.0.8] 20210927 +### Added +- Command ``WebGetConfig `` if ``#define USE_WEBGETCONFIG`` is enabled to restore/init configuration from external webserver (#13034) +- Berry class ``webclient`` for HTTP/HTTPS requests +- Support for ESP32S2 GPIOs +- ESP32 add GPIO 6/7/8/11 to template and remove GPIO 28-31 (remapping so backwards compatible) +- Crash recorder ``Status 12`` for ESP32/ESP32S2/ESP32C3, supporting Esp-idf 3.3/4.4 +- Support for ESP32/ESP32S2 DAC gpio via Berry +- Berry support for Serial +- Support for Sensirion SCD40/SCD41 CO2 sensor (#13139) +- Support for BL0939 energy monitor as used in ESP32 based Sonoff Dual R3 V2 Pow (#13195) +- Command ``WebQuery GET|POST|PUT|PATCH [] `` to extent HTTP requests (#13209) +- Berry print stack trace when exception, more detailed with line numbers if `#define USE_BERRY_DEBUG` + +### Changed +- M5 Stack Core2 uses UNIVERSAL_DISPLAY with enabled LVGL as default now +- ``DisplayDimmer`` has now range 0..100 instead of 0..15 +- Minimum PWM Frequency lowered to 2Hz on ESP32 (#13123) +- Use Tasmota Arduino Core32 1.0.7.4 for ESP32 builds (#13154) +- Shrinked Webcam build, uses now `USE_TASMOTA_DISCOVERY` (#13148) +- Berry revamped ``energy`` module to expose all C variables to Berry (read/write) + +### Fixed +- OpenTherm invalid JSON (#13028) +- ESP32 crash when PSRAM is absent and ``BOARD_HAS_PSRAM`` set (#13037) +- MQTT TLS related connection timing errors (#13033) + +## [9.5.0.7] 20210901 +### Added +- Turn HTTP API (command ``SetOption128 1``) default on for backward compatibility +- Support for IEM3155 Wattmeter (#12940) +- Berry support for vararg +- Command ``Subscribe2 ...`` to subscribe to a MQTT topic without appended "/#" (#12858) +- Support for Hydreon RG-15 Solid State Rain sensor (#12974) +- Support for IKEA VINDRIKTNING particle concentration sensor (#12976) +- Berry support for Curve 25519 EC crypto +- Command ``SetOption2 1`` to enable display of global temperature/humidity/pressure info to JSON sensor message + +### Changed +- Shelly EM template needs to use GPIO ADE7953_IRQ_2 +- IRremoteESP8266 library from v2.7.19 to v2.7.20 + +### Fixed +- WDT reset on shutters with stepper motors during deceleration (#12849) +- Shelly 2.5 negative power values on relay 1 regression from 9.5.0.5 +- Wiegand support for keypad zero key in single key mode using ``SetOption124 1`` (#12960) +- Hass and Tasmota discovery prefix topic notifications (#12972) +- Unable to disable MusicSync mode on Sonoff L1 Lite regression from 9.3.0 (#12930) +- Shelly Dimmer 2 Energy usage (#12815) +- Sonoff L1 (lite) smoother color transitions + +## [9.5.0.6] 20210820 +### Added +- Version bump to monitor possible HTTP issues releated to ``SetOption128`` + +### Changed +- Berry now compiling in ``strict`` mode to catch more bugs + +### Fixed +- Fixed PWM5 on ESP32C3 + +## [9.5.0.5] 20210815 +### Added +- Inital support for Wi-Fi extender (#12784) +- Neopool commands ``NPPHRes``, ``NPCLRes`` and ``NPIonRes`` (#12813) +- Support for (Yeelight) Mi Desk Pro using binary tasmota32solo1.bin +- Initial support for influxdb using ``#define USE_INFLUXDB`` and several ``Ifx`` commands +- Command ``SetOption128 1`` disabling web referer check default blocking HTTP web commands (#12828) + +### Changed +- NeoPixelBus library from v2.6.3 to v2.6.7 +- Make Sonoff L1 MusicSync persistent (#12008) +- Relax NTP poll if no ntpserver can be resolved by DNS +- Move firmware binaries to https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware +- Default disable CORS for enhanced security and provide user compile option ``#define USE_CORS`` (#12827) +- Prometheus: All metrics are prefixed with ``tasmota_`` (#12842) + Memory metrics have been cleaned up to work consistently between ESP8266 and ESP32 + The device name is reported as an info metric + +### Fixed +- Neopool communication error (#12813) +- Negative power values for ADE7953 based devices like Shelly EM (#12874) + +## [9.5.0.4] 20210801 +### Added +- Support for second DNS server +- Optional IP filter to command ``TCPStart`` (#12806) + +### Changed +- ESP8266Audio library from v1.5.0 to v1.9.2 + +## [9.5.0.3] 20210729 +### Added +- Command ``SetSensor1..127 0|1`` to globally disable individual sensor driver +- Support for CAN bus and Freedom Won Battery Management System by Marius Bezuidenhout (#12651) +- Berry ESP32 support for I2S audio mp3 playback +- Berry add module ``introspect`` +- Berry add ``tasmota.wifi()`` and ``tasmota.eth()`` +- LVGL new widget ``lv_wifi_bars`` + +### Changed +- ESP32 core library from v1.0.7.1 to v1.0.7.3 +- Disable PSRAM on unsupported hardware +- Replace spaces by hyphens in final hostname (#12710) +- Message ``Upload buffer miscompare`` into ``Not enough space`` +- ESP32 remove GPIO initialization to INPUT from not used GPIOs to allow JTAG support + +### Fixed +- Discovery fails when using ``%hostname%`` in a topic (#12710) +- ESP32-Solo OTA upgrade +- ESP32 buzzer in PWM mode exception (#12717) + +## [9.5.0.2] 20210714 +### Added +- Initial support for Tasmota Mesh (TasMesh) providing node/broker communication using ESP-NOW (#11939) +- MQTT minimum password length restriction in GUI (#12553) +- Command ``SetOption127 1`` to force Wi-Fi in no-sleep mode even if ``Sleep 0`` is not enabled +- Support for Technoline WS2300-15 Anemometer (#12573) +- Support for Telaire T6700 Series CO2 sensor by Alexander Savchenko (#12618) + +### Changed +- ESP32 core library from v1.0.7 to v1.0.7.1 +- IRremoteESP8266 library from v2.7.18 to v2.7.19 +- ESP32 Ethernet Phy Type information to IDF v3+ +- Allow buttons to work in AP normal mode (#12518) +- Enable Ping and rule features for any device compiled with more than 1M flash size (#12539) +- ESP32 internal sensor driver id moved from 87 to 127 +- Extended supported sensor driver range to 128 + +### Fixed +- ESP32-C3 settings layout for configuration backup and restore +- ESP32 core v2.0.0 setting hostname +- Berry button handlers and error messages (#12521) +- Scripter and Display MQTT errors due to MQTT_DATA move to String (#12525) +- Scripter moving average and sml input validation (#12541) +- Zigbee Hue angle encoding (#12545) +- AM2320 value reporting (#12552) +- Exception 28 when unable to send MQTT message and a topic name without a slash '/' (#12555) +- Wi-Fi initial setup workaround for 11n only routers (#12566) +- ESP32 do not use chip temperature sensor as global temperature if external temperature sensor is used (#12630) + +## [9.5.0.1] 20210701 +### Added +- Berry ESP32 partition manager (#12465) +- Rule event support as JSON payload (#12496) +- Support for AM2320 Temperature and Humidity Sensor by Lars Wessels (#12485) + +### Changed +- ESP32 core library from v1.0.6 to v1.0.7 +- Speed up initial GUI console refresh +- Enable UFILESYS, GUI_TRASH_FILE and GUI_EDIT_FILE for any device compiled with more than 1M flash size +- Simplified configuration for ir-full and removal of tasmota-ircustom +- Refactor platformio (#12442) + +### Fixed +- ESP32 Webcam add boundary marker before sending mjpeg image (#12376) +- DDS238-2 wrong reactive power value (#12283) +- NO VALID JSON regression from may 4th (#12440) +- Telegram response decoding stopped working after 20210621 and exception on long result message (#12451) +- Neopool compile error on DEBUG_TASMOTA_SENSOR (#12464) + ## [9.5.0] 20210617 - Release Michael (Rossi) @@ -916,7 +1098,7 @@ All notable changes to this project will be documented in this file. ## [8.1.0.6] - 20200205 ### Added - Support for sensors DS18x20 and DHT family on Shelly 1 and Shelly 1PM using Shelly Add-On adapter (#7469) -- Commands ``SwitchMode 11`` PushHoldMulti and ``SwitchMode 12`` PushHoldInverted (#7603) +- Commands ``SwitchMode 11`` PushHoldMulti and ``SwitchMode 12`` PushHoldMultiInverted (#7603) - Command ``Buzzer -1`` for infinite mode and command ``Buzzer -2`` for following led mode (#7623) - Support for MI-BLE sensors using HM-10 Bluetooth 4.0 module by Christian Staars (#7683) - BootCount Reset Time as BCResetTime to ``Status 1`` diff --git a/FIRMWARE.md b/FIRMWARE.md index cc03ba3a8..7262450aa 100644 --- a/FIRMWARE.md +++ b/FIRMWARE.md @@ -27,7 +27,7 @@ See [CHANGELOG.md](https://github.com/arendst/Tasmota/blob/development/tasmota/C Unless your Tasmota powered device exhibits a problem or you need to make use of a feature that is not available in the Tasmota version currently installed on your device, leave your device alone - it works so don't make unnecessary changes! If the release version (i.e., the master branch) exhibits unexpected behaviour for your device and configuration, you should upgrade to the latest development version instead to see if your problem is resolved as some bugs in previous releases or development builds may already have been resolved. -If new commits have been merged and they compile successfuly, new binary files for every variant will be placed here https://github.com/arendst/Tasmota/tree/firmware/firmware (this URL address can NOT be used for OTA updates) It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted. +If new commits have been merged and they compile successfuly, new binary files for every variant will be placed here https://github.com/arendst/Tasmota-firmware/tree/main/firmware (this URL address can NOT be used for OTA updates) It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted. Note that there is a chance, as with any upgrade, that the device may not function as expected. You must always account for the possibility that you may need to flash the device via the serial programming interface if the OTA upgrade fails. Even with the master release, you should always attempt to test the device or a similar prototype before upgrading a device which is in production or is hard to reach. And, as always, make a backup of the device configuration before beginning any firmware update. @@ -40,5 +40,5 @@ If your device connects to mains electricity (AC power) there is danger of elect We don't take any responsibility nor liability for using this software nor for the installation or any tips, advice, videos, etc. given by any member of this site or any related site. ## Quick Install -Download one of the binaries https://github.com/arendst/Tasmota/tree/firmware/firmware and flash it to your hardware [using our installation guide](https://tasmota.github.io/docs/Getting-Started). +Download one of the binaries https://github.com/arendst/Tasmota-firmware/tree/main/firmware and flash it to your hardware [using our installation guide](https://tasmota.github.io/docs/Getting-Started). diff --git a/I2CDEVICES.md b/I2CDEVICES.md index 84dac460b..07094954b 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -92,4 +92,8 @@ Index | Define | Driver | Device | Address(es) | Description 56 | USE_SEESAW_SOIL | xsns_81 | SEESOIL | 0x36 - 0x39 | Adafruit seesaw soil moisture sensor 57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | Time-of-flight (ToF) distance sensor 58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stack - 59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack \ No newline at end of file + 59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack + 60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor + 61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor + 62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41 + 63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor diff --git a/MODULES.md b/MODULES.md index 116c7e454..7bfdfe922 100644 --- a/MODULES.md +++ b/MODULES.md @@ -94,4 +94,4 @@ Module | LCode | Description 06 TTGO Watch | x | TTGO Watch 07 M5Stack Core2 | x | M5Stack Core2 -Over 2000 additional devices are supported using [templates](TEMPLATES.md). +Over 2100 additional devices are supported using [templates](TEMPLATES.md). diff --git a/README.md b/README.md index 949e788a7..0cb882529 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ See [RELEASENOTES.md](https://github.com/arendst/Tasmota/blob/master/RELEASENOTE Firmware binaries can be downloaded from http://ota.tasmota.com/tasmota/release/ or http://ota.tasmota.com/tasmota32/release/ for ESP32 binaries. +Easy initial installation of Tasmota can be performed using the [Tasmota WebInstaller](https://arendst.github.io/Tasmota-firmware/). + ## Development [![Dev Version](https://img.shields.io/badge/development%20version-v9.5.x.x-blue.svg)](https://github.com/arendst/Tasmota) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 612b156ac..ba907e1b2 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -38,6 +38,10 @@ In addition to TLS using fingerprints now also user supplied CA certs, AWS IoT a For initial configuration this release supports Webserver based **WifiManager** or **Serial** based command interface only. Support for **WPS** and **SmartConfig** has been removed. +## Initial installation + +Easy initial installation of Tasmota can be performed using the [Tasmota WebInstaller](https://arendst.github.io/Tasmota-firmware/). + ## Provided Binary Downloads ### ESP8266 or ESP8285 based @@ -52,21 +56,20 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support for 1M+ flash. - **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version for 2M+ flash. - **tasmota-zigbee.bin** = The dedicated cc25xx Zigbee Bridge version for 4M+ flash. -- **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter for 1M+ flash. This version **should NOT be used for initial installation**. Above binaries are also available as gzipped version allowing faster uploads. Latest released binaries can be downloaded from -- https://github.com/arendst/Tasmota/tree/release-firmware +- https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware - http://ota.tasmota.com/tasmota/release Historical binaries can be downloaded from -- http://ota.tasmota.com/tasmota/release-9.5.0 +- http://ota.tasmota.com/tasmota/release-9.6.0 The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz`` ### ESP32 based -The following binary downloads have been compiled with ESP32/Arduino library core version **1.0.6**. +The following binary downloads have been compiled with ESP32/Arduino library core version **1.0.7.4**. - **tasmota32.bin** = The Tasmota version with most drivers including additional sensors and KNX for 4M+ flash. **RECOMMENDED RELEASE BINARY** - **tasmota32_8M.bin** = The Tasmota version with most drivers including additional sensors and KNX for 8M+ flash. @@ -81,11 +84,11 @@ The following binary downloads have been compiled with ESP32/Arduino library cor - **tasmota32-core2.bin** = The Core2 version is specifically tailored to M5Stack Core2 hardware for 8M+ flash. Latest released binaries can be downloaded from -- https://github.com/arendst/Tasmota/tree/release-firmware +- https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware - http://ota.tasmota.com/tasmota32/release Historical binaries can be downloaded from -- http://ota.tasmota.com/tasmota32/release-9.5.0 +- http://ota.tasmota.com/tasmota32/release-9.6.0 The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota32/release/tasmota32.bin`` @@ -95,70 +98,113 @@ The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmo [Complete list](BUILDS.md) of available feature and sensors. -## Changelog v9.5.0 Michael (Rossi) +## Changelog v9.6.0 Norman ### Added -- Command ``Status0`` providing all status information on a single line -- Command ``TuyaSend5`` for hex string [#12211](https://github.com/arendst/Tasmota/issues/12211) -- Command ``MqttWifiTimeout 100..20000`` to control MQTT Wi-Fi connection timeout default set to 200 mS [#12222](https://github.com/arendst/Tasmota/issues/12222) -- Commands ``Color2`` and ``Dimmer4`` to allow retaining brightness ratio between white and color channels when setting dimmer for linked lights [#12072](https://github.com/arendst/Tasmota/issues/12072) -- Extend command ``Wifi`` with Wi-Fi Mode Control [#12292](https://github.com/arendst/Tasmota/issues/12292) -- Defines ``USER_RULE1``, ``USER_RULE2`` and ``USER_RULE3`` to store rules at compile time -- Define ``USER_BACKLOG`` to store commands at compile time to be executed at firmware load or when executing command ``reset`` -- Support for optional ``Template`` JSON fieldpair ``"CMND":"||..."`` [#11788](https://github.com/arendst/Tasmota/issues/11788) -- ESP32 pulldown buttons ``Button_d`` and ``Button_id`` and switches ``Switch_d`` [#10814](https://github.com/arendst/Tasmota/issues/10814) -- Support for MQTT using Azure IoT Hub by Kevin Saye [#11906](https://github.com/arendst/Tasmota/issues/11906) -- Make Telegram command ``TmState`` persistent [#11965](https://github.com/arendst/Tasmota/issues/11965) -- Zigbee binary supporting cc25xx hardware on ESP8266 4M flash hardware [#11872](https://github.com/arendst/Tasmota/issues/11872) -- Zigbee firmware for Tube's Zigbee coordinator based on EFR32 and ESP32 -- Zigbee firmware 6.7.9 for Sonoff ZBBridge -- LVGL support for 3 buttons as rotary encoder [#12035](https://github.com/arendst/Tasmota/issues/12035) -- LVGL support for touchscreen [#12039](https://github.com/arendst/Tasmota/issues/12039) -- LVGL support for PSRAM [#12062](https://github.com/arendst/Tasmota/issues/12062) -- LVGL support for TrueType fonts via FreeType library [#12087](https://github.com/arendst/Tasmota/issues/12087) -- LVGL support for PNG images [#12148](https://github.com/arendst/Tasmota/issues/12148) -- Allow Home Assistant discovery of MCP2300xx output as relay [#12037](https://github.com/arendst/Tasmota/issues/12037) -- Preliminary support for Esp32C3 - RiscV based -- Support for voltage and current monitoring when using Shelly dimmer 2 hardware [#11988](https://github.com/arendst/Tasmota/issues/11988) -- Support for Azure Device Provisioning Service for IoT Hub [#12056](https://github.com/arendst/Tasmota/issues/12056) -- Show new IP after the Wi-Fi Initial Config [#12091](https://github.com/arendst/Tasmota/issues/12091) -- Update Sugar Valley Neopool driver [#12171](https://github.com/arendst/Tasmota/issues/12171) -- Acer projector support [#12190](https://github.com/arendst/Tasmota/issues/12190) -- I2S and Interrupt GPIO types [#12192](https://github.com/arendst/Tasmota/issues/12192) -- Update OpenTherm driver [#12195](https://github.com/arendst/Tasmota/issues/12195) -- Support for BM8563 RTC chip (I2C) found in M5Stack Core2 and M5StickC [#12199](https://github.com/arendst/Tasmota/issues/12199) +- Release of [Tasmota WebInstaller](https://arendst.github.io/Tasmota-firmware/) +- Command ``SetOption2 1`` to enable display of global temperature/humidity/pressure info to JSON sensor message +- Command ``SetOption127 1`` to force Wi-Fi in no-sleep mode even if ``Sleep 0`` is not enabled +- Command ``SetOption128 0|1`` web referer check disabling HTTP API commands if set to 0. Default set to 1 for backward compatibility [#12828](https://github.com/arendst/Tasmota/issues/12828) +- Command ``SetOption129 1`` to enable split total energy results [#13030](https://github.com/arendst/Tasmota/issues/13030) +- Command ``SetOption130 1`` adding heap size (and ESP32 fragmentation) to logging timestamp for debugging +- Command ``SetSensor1..127 0|1`` to globally disable individual sensor driver +- Command ``Subscribe2 ...`` to subscribe to a MQTT topic without appended "/#" [#12858](https://github.com/arendst/Tasmota/issues/12858) +- Command ``WebGetConfig `` if ``#define USE_WEBGETCONFIG`` is enabled to restore/init configuration from external webserver [#13034](https://github.com/arendst/Tasmota/issues/13034) +- Command ``WebQuery GET|POST|PUT|PATCH [] `` to extent HTTP requests [#13209](https://github.com/arendst/Tasmota/issues/13209) +- Commands ``EnergyTotal``, ``EnergyToday`` and ``EnergyYesterday`` to (re)set energy values +- Commands ``EnergyUsage`` and ``EnergyExport`` to (re)set energy usage and export values +- Optional IP filter to command ``TCPStart`` [#12806](https://github.com/arendst/Tasmota/issues/12806) +- Neopool commands ``NPPHRes``, ``NPCLRes`` and ``NPIonRes`` [#12813](https://github.com/arendst/Tasmota/issues/12813) +- Support for second DNS server +- Support for influxdb using ``#define USE_INFLUXDB`` and several ``Ifx`` commands +- Support for AM2320 Temperature and Humidity Sensor by Lars Wessels [#12485](https://github.com/arendst/Tasmota/issues/12485) +- Support for Technoline WS2300-15 Anemometer [#12573](https://github.com/arendst/Tasmota/issues/12573) +- Support for Telaire T6700 Series CO2 sensor by Alexander Savchenko [#12618](https://github.com/arendst/Tasmota/issues/12618) +- Support for CAN bus and Freedom Won Battery Management System by Marius Bezuidenhout [#12651](https://github.com/arendst/Tasmota/issues/12651) +- Support for IEM3155 Wattmeter [#12940](https://github.com/arendst/Tasmota/issues/12940) +- Support for Hydreon RG-15 Solid State Rain sensor [#12974](https://github.com/arendst/Tasmota/issues/12974) +- Support for IKEA VINDRIKTNING particle concentration sensor [#12976](https://github.com/arendst/Tasmota/issues/12976) +- Support for Sensirion SCD40/SCD41 CO2 sensor [#13139](https://github.com/arendst/Tasmota/issues/13139) +- Support for BL0939 energy monitor as used in ESP32 based Sonoff Dual R3 V2 Pow [#13195](https://github.com/arendst/Tasmota/issues/13195) +- Support for BL0942 energy monitor [#13259](https://github.com/arendst/Tasmota/issues/13259) +- Support for HM330X SeedStudio Grove Particule sensor [#13250](https://github.com/arendst/Tasmota/issues/13250) +- Initial support for Tasmota Mesh (TasMesh) providing node/broker communication using ESP-NOW [#11939](https://github.com/arendst/Tasmota/issues/11939) +- Initial support for Wi-Fi extender [#12784](https://github.com/arendst/Tasmota/issues/12784) +- Rule event support as JSON payload [#12496](https://github.com/arendst/Tasmota/issues/12496) +- MQTT minimum password length restriction in GUI [#12553](https://github.com/arendst/Tasmota/issues/12553) +- ESP32 Berry partition manager [#12465](https://github.com/arendst/Tasmota/issues/12465) +- ESP32 Berry class ``webclient`` for HTTP/HTTPS requests +- ESP32 Berry support for I2S audio mp3 playback +- ESP32 Berry support for vararg +- ESP32 Berry support for Curve 25519 EC crypto +- ESP32 Berry support for ESP32/ESP32S2 DAC gpio +- ESP32 Berry support for Serial +- ESP32 Berry print stack trace when exception, more detailed with line numbers if `#define USE_BERRY_DEBUG` +- ESP32 support for (Yeelight) Mi Desk Pro using binary tasmota32solo1.bin +- ESP32-S2 support for GPIOs +- ESP32 add GPIO 6/7/8/11 to template and remove GPIO 28-31 (remapping so backwards compatible) +- ESP32 crash recorder ``Status 12`` for ESP32/ESP32-S2/ESP32-C3, supporting Esp-idf 3.3/4.4 + +### Breaking Changed +- ESP32 LVGL updated to v8.0.2 ### Changed -- IRremoteESP8266 library from v2.7.16 to v2.7.18 -- NeoPixelBus library from v2.6.1.4 to v2.6.3 stage -- Shelly Dimmer 1 and 2 stm32 firmware from v51.5 to v51.6 -- Allow longer MQTT response messages by removing fixed memory buffer with size 1040 to heap allocated buffer -- Command ``Timers`` layout of JSON message changed to single line -- Command ``Gpio`` layout of JSON message changed to single line -- Command ``Modules`` layout of JSON message changed to single line -- ESP32 increase log buffer from 4k to 6k to support longer messages -- Move Settings from DRAM to heap -- Refactor platformio configurations by Jason2866 -- WifiManager save Wi-Fi configuration from settings, do it only once [#12242](https://github.com/arendst/Tasmota/issues/12242) -- Improving SI7021 reading reliability by adjusting timers [#12256](https://github.com/arendst/Tasmota/issues/12256) -- Refactor ESP32 partition selection, now via boards [#12257](https://github.com/arendst/Tasmota/issues/12257) -- Use correct template for Home Assistant light [#12317](https://github.com/arendst/Tasmota/issues/12317) +- Move firmware binaries to https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware +- Removed command ``EnergyReset`` as it is replaced by new commands +- IRremoteESP8266 library from v2.7.18 to v2.7.20 +- NeoPixelBus library from v2.6.3 to v2.6.7 +- Message ``Upload buffer miscompare`` into ``Not enough space`` +- Command ``DisplayDimmer`` has now range 0..100 instead of 0..15 +- Speed up initial GUI console refresh +- Enable UFILESYS, GUI_TRASH_FILE and GUI_EDIT_FILE for any device compiled with more than 1M flash size +- Supported sensor driver range extended from 96 to 128 +- Relax NTP poll if no ntpserver can be resolved by DNS +- Shelly EM template needs to use GPIO ``ADE7953_IRQ 2`` +- Make Sonoff L1 MusicSync persistent [#12008](https://github.com/arendst/Tasmota/issues/12008) +- Simplified configuration for ir-full and removal of tasmota-ircustom [#12428](https://github.com/arendst/Tasmota/issues/12428) +- Refactor platformio [#12442](https://github.com/arendst/Tasmota/issues/12442) +- Allow buttons to work in AP normal mode [#12518](https://github.com/arendst/Tasmota/issues/12518) +- Enable Ping and rule features for any device compiled with more than 1M flash size [#12539](https://github.com/arendst/Tasmota/issues/12539) +- Replace spaces by hyphens in final hostname [#12710](https://github.com/arendst/Tasmota/issues/12710) +- Default disable CORS for enhanced security and provide user compile option ``#define USE_CORS`` [#12827](https://github.com/arendst/Tasmota/issues/12827) +- Prometheus: All metrics are prefixed with ``tasmota_`` [#12842](https://github.com/arendst/Tasmota/issues/12842) + Memory metrics have been cleaned up to work consistently between ESP8266 and ESP32 + The device name is reported as an info metric +- ESP32 core library from v1.0.6 to v1.0.7.4 +- ESP32 Ethernet Phy Type information to IDF v3+ +- ESP32 internal sensor driver id moved from 87 to 127 +- ESP32 disable PSRAM on unsupported hardware +- ESP32 remove GPIO initialization to INPUT from not used GPIOs to allow JTAG support +- ESP32 M5 Stack Core2 uses UNIVERSAL_DISPLAY with enabled LVGL as default now +- ESP32 minimum PWM Frequency lowered to 2Hz [#13123](https://github.com/arendst/Tasmota/issues/13123) +- ESP32 shrinked Webcam build, uses now `USE_TASMOTA_DISCOVERY` [#13148](https://github.com/arendst/Tasmota/issues/13148) +- ESP32 Memory display to exclude IRAM (i.e. less by 40-50KB) [#13294](https://github.com/arendst/Tasmota/issues/13294) ### Fixed -- Wrong flash size detection when saving Zigbee device information on ESP8266 [#11870](https://github.com/arendst/Tasmota/issues/11870) -- Prometheus metrics parse error on DS18x20 [#11931](https://github.com/arendst/Tasmota/issues/11931) -- DS18x20 name search id [#11958](https://github.com/arendst/Tasmota/issues/11958) -- Avoid erasing of Zigbee data if zigbee is not started [#11961](https://github.com/arendst/Tasmota/issues/11961) -- Zigbee XModem retries [#11967](https://github.com/arendst/Tasmota/issues/11967) -- Teleinfo standard mode and blacklist feature crash [#11991](https://github.com/arendst/Tasmota/issues/11991) -- ESP32 Hue light [#12005](https://github.com/arendst/Tasmota/issues/12005) -- Map received CCT channels back in DevGroups [#12044](https://github.com/arendst/Tasmota/issues/12044) -- Increase TLS minimum stack thunk to 3800 bytes [#12063](https://github.com/arendst/Tasmota/issues/12063) -- Delay discovery of PZEM sensors [#12076](https://github.com/arendst/Tasmota/issues/12076) -- PING race condition breaks JSON in rule [#12106](https://github.com/arendst/Tasmota/issues/12106) -- Support Tuya powermeter >6500W [#12115](https://github.com/arendst/Tasmota/issues/12115) -- Zigbee max end-device [#12159](https://github.com/arendst/Tasmota/issues/12159) -- Prevent keep state MCP230xx output fast toggle on reboot [#12264](https://github.com/arendst/Tasmota/issues/12264) -- Tuya data type 2 read as 32 bit integer (instead of 16 bit) [#12282](https://github.com/arendst/Tasmota/issues/12282) - -### Noted -- ESP32 single core **tasmota32solo1.bin** binary can only be uploaded using the GUI as OTA upload will trigger the watchdog timer +- Sonoff L1 (lite) smoother color transitions +- DDS238-2 wrong reactive power value [#12283](https://github.com/arendst/Tasmota/issues/12283) +- NO VALID JSON regression from may 4th [#12440](https://github.com/arendst/Tasmota/issues/12440) +- Telegram response decoding stopped working after 20210621 and exception on long result message [#12451](https://github.com/arendst/Tasmota/issues/12451) +- Neopool compile error on DEBUG_TASMOTA_SENSOR [#12464](https://github.com/arendst/Tasmota/issues/12464) +- Scripter and Display MQTT errors due to MQTT_DATA move to String [#12525](https://github.com/arendst/Tasmota/issues/12525) +- Scripter moving average and sml input validation [#12541](https://github.com/arendst/Tasmota/issues/12541) +- Zigbee Hue angle encoding [#12545](https://github.com/arendst/Tasmota/issues/12545) +- Exception 28 when unable to send MQTT message and a topic name without a slash '/' [#12555](https://github.com/arendst/Tasmota/issues/12555) +- Wi-Fi initial setup workaround for 11n only routers [#12566](https://github.com/arendst/Tasmota/issues/12566) +- Discovery fails when using ``%hostname%`` in a topic [#12710](https://github.com/arendst/Tasmota/issues/12710) +- Neopool communication error [#12813](https://github.com/arendst/Tasmota/issues/12813) +- Shelly Dimmer 2 Energy usage [#12815](https://github.com/arendst/Tasmota/issues/12815) +- WDT reset on shutters with stepper motors during deceleration [#12849](https://github.com/arendst/Tasmota/issues/12849) +- Negative power values for ADE7953 based devices like Shelly EM [#12874](https://github.com/arendst/Tasmota/issues/12874) +- Unable to disable MusicSync mode on Sonoff L1 Lite regression from 9.3.0 [#12930](https://github.com/arendst/Tasmota/issues/12930) +- Wiegand support for keypad zero key in single key mode using ``SetOption124 1`` [#12960](https://github.com/arendst/Tasmota/issues/12960) +- Hass and Tasmota discovery prefix topic notifications [#12972](https://github.com/arendst/Tasmota/issues/12972) +- OpenTherm invalid JSON [#13028](https://github.com/arendst/Tasmota/issues/13028) +- MQTT TLS related connection timing errors [#13033](https://github.com/arendst/Tasmota/issues/13033) +- ESP32 core v2.0.0 setting hostname +- ESP32-C3 settings layout for configuration backup and restore +- ESP32-Solo OTA upgrade +- ESP32 Webcam add boundary marker before sending mjpeg image [#12376](https://github.com/arendst/Tasmota/issues/12376) +- ESP32 Berry button handlers and error messages [#12521](https://github.com/arendst/Tasmota/issues/12521) +- ESP32 do not use chip temperature sensor as global temperature if external temperature sensor is used [#12630](https://github.com/arendst/Tasmota/issues/12630) +- ESP32 buzzer in PWM mode exception [#12717](https://github.com/arendst/Tasmota/issues/12717) +- ESP32 crash when PSRAM is absent and ``BOARD_HAS_PSRAM`` set [#13037](https://github.com/arendst/Tasmota/issues/13037) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..f0a8de1ed --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +Please report security issues to https://sidweb.nl/cms3/en/contact diff --git a/TEMPLATES.md b/TEMPLATES.md index 11c37d715..cea550f41 100644 --- a/TEMPLATES.md +++ b/TEMPLATES.md @@ -2,7 +2,7 @@ # Templates -Find below the available templates as of June 2021. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) +Find below the available templates as of October 2021. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) ## Addressable LED Controller ``` @@ -14,7 +14,7 @@ SP501E WS2812B {"NAME":"SP501E","GPIO":[0,32,0,1376,0,0,0,0,0,0,0, ## Aroma Diffuser ``` -Asakuki 500ml {"NAME":"Oil Diffuser","GPIO":[1,1,1,1,1,1,0,0,1,1,1,224,225,0],"FLAG":0,"BASE":18} +Asakuki 500ml {"NAME":"Asakuki","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 12,11 | TuyaMCU 21,111 | TuyaMCU 24,108 | TuyaMCU 61,103 | TuyaMCU 62,110"} BlitzWolf 400ml {"NAME":"BW-FUN3","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Brilex 400ml {"NAME":"BrilexDiffuser","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Essential Oil 400ml {"NAME":"XD800W","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} @@ -54,6 +54,7 @@ Calex G125 7,5W 1055lm {"NAME":"Calex G125 E27","GPIO":[0,0,0,0,0,2912,0,0 Calex G125 7.5W 1055lm Globe {"NAME":"Calex G125 E27","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Connect SmartHome 10W {"NAME":"CSH-B22WW10W","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Connect SmartHome 10W {"NAME":"CSH-E27WW10W","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} +Connect SmartHome 5W {"NAME":"CSH-E14WW5W","GPIO":[0,0,0,0,416,417,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Connect SmartHome 5W {"NAME":"Connect CSH-GU10WW5W","GPIO":[0,0,0,0,416,417,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Connect SmartHome GU5.3 5W {"NAME":"Connect CSH-GU53WW5W","GPIO":[0,0,0,0,416,417,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Deltaco SH-LE14W 470lm {"NAME":"SH-LE14W","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} @@ -101,16 +102,19 @@ Mirabella Genio G95 5W 470lm {"NAME":"Genio Filament","GPIO":[0,0,0,0,0,0,0,0,4 Mirabella Genio SES 5.5W 470lm {"NAME":"Mirabella Candle","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis A60 5.5W 350lm Twisted Filament {"NAME":"WIFILT10GDA60","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis A60 800lm {"NAME":"WIFILW10WTE27","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} +Nedis A60 9W 800lm {"NAME":"WIFILW10WTB22","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} +Nedis A60 9W 800lm {"NAME":"WIFILW30WTE27","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis C10 350lm {"NAME":"WIFILW10WTE14","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Nedis G125 5.5W 350lm Twisted Filament {"NAME":"WIFILF10GDG125","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis PAR16 330lm {"NAME":"Nedis WIFILW30","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} +Nedis PAR16 4,5W 380lm {"NAME":"Nedis WIFILW10WTGU10","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis PAR16 4.5W 330lm 110 {"NAME":"WIFILW30","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Philips Zhirui Candle 250lm {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,417,0,0,416,0,0],"FLAG":0,"BASE":48} Phillips Zhirui 450lm {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,417,0,0,416,0,0],"FLAG":0,"BASE":48} Polux ST64 5.5W 470lm {"NAME":"basic","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Prokord 10W 1050lm {"NAME":"PSH-E2745-CCT","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,4704],"FLAG":0,"BASE":18} Prokord 5W 1050lm {"NAME":"Prokord-PSH-GU1045-CCT","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} -Shelly DUO 800lm {"NAME":"Shelly DUO","GPIO":[0,0,0,0,417,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Shelly Duo 800lm {"NAME":"Shelly DUO","GPIO":[0,0,0,0,417,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} SmartDGM L-WT9W1 9W 800lm {"NAME":"L-WT9W1","GPIO":[0,0,0,0,0,416,0,0,160,417,0,0,0,0],"FLAG":0,"BASE":18} Smitch 10W {"NAME":"Smitch SB0310 - B22","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Solimo 12W 1080lm {"NAME":"Solimo WCCT 12","GPIO":[0,0,0,0,160,416,0,0,161,417,162,0,0,0],"FLAG":0,"BASE":18} @@ -134,12 +138,14 @@ Wireles Tag DIY Kit {"NAME":"WT-ESP32-CAM","GPIO":[4992,1,1,1,1,5088,0, ``` BAZZ 14" RGBCCT {"NAME":"WF19129W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} BlitzWolf 24W {"NAME":"BW-LT20","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,1],"FLAG":0,"BASE":18} +BlitzWolf RGB Atmosphere and CCT {"NAME":"BW-CLT1","GPIO":[0,0,0,0,419,0,0,0,418,420,417,416,0,0],"FLAG":0,"BASE":18,"CMND":"SO37 128"} BrilliantSmart 12W 290mm Salisbury CCT {"NAME":"Brilliant Smart Salisbury","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":18} BrilliantSmart 24W 410mm Salisbury CCT {"NAME":"Salisbury","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":48} BrilliantSmart Cordia 24W CCT {"NAME":"Cordia","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Calex 429250 {"NAME":"Calex_LED","GPIO":[0,0,0,0,0,0,0,0,0,449,416,0,0,0],"FLAG":0,"BASE":18} Fcmila 48W RGBCCT {"NAME":"XDD-48W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Hama Glitter Effect, 27cm Square {"NAME":"Hama LED Ceiling Light","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,1],"FLAG":0,"BASE":18} +HeyLight Plafoniera 30W CCT {"NAME":"HeyLight Ceiling Light","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} LE lampUX 15W RGBCCT {"NAME":"LE lampUX 15W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Lohas ZN026CL10 RGBCCT {"NAME":"Lohas LED Lamp","GPIO":[0,0,0,0,417,416,0,0,419,418,420,0,0,0],"FLAG":0,"BASE":18} LOLAsmart Uranus White 70 cm {"NAME":"lola smart","GPIO":[0,0,0,1088,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -153,11 +159,12 @@ Spectrum Smart Nymphea 36W CCT {"NAME":"Nymphea_36w","GPIO":[0,0,0,0,0,416,0,0, Taloya 12" 24W CCT Main and RGB Ambient {"NAME":"Taloya GA300-24W-AI-WEMG","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Utorch 24W 2000lm CCT {"NAME":"Utorch PZE-911","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":1} Utorch 24W 2000lm CCT {"NAME":"Utorch UT40","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":1} +Verve 24W Cream Fabric Shade CCT {"NAME":"Verve ACL603HA","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,20 | TuyaMCU 21,22 | TuyaMCU 23,23 | DimmerRange 0,1000"} Verve Design Angie 18W RGB Ring {"NAME":"ACL12HA Light","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Verve Design Charlie 22W CCT {"NAME":"Verve ACL01HA","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":48} Verve Design Hana 24W CCT {"NAME":"Verve ACL03HA","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":48} +Verve Design Hana 36W CCT {"NAME":"Verve ACL04HA","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":48} Yeelight Jiaoyue 260mm 10W CCT {"NAME":"Yeelight LED Ceiling Light 260","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417,0,416,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} -Yeelight Meteorite {"NAME":"Yeelight Meteorite","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,0,419,0,0,0,0,417,418,0,0,0,0,0,416,0,0,0,0,0,0],"FLAG":0,"BASE":1} ``` ## Contact Sensor @@ -186,21 +193,23 @@ Currydouble {"NAME":"Currydouble","GPIO":[260,258,576,0,0,224,0 Etersky WF-CS01 {"NAME":"Etersky","GPIO":[544,0,289,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Homecube {"NAME":"Jinvoo Curtain","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-C {"NAME":"Jinvoo Curtain","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} +KingArt {"NAME":"KING-Q4","GPIO":[544,0,0,162,0,32,0,0,33,225,290,224,0,0],"FLAG":0,"BASE":18} Konesky {"NAME":"KingArt","GPIO":[544,0,289,162,226,32,0,0,33,225,290,224,288,0],"FLAG":0,"BASE":18} -LoraTap SC400W-EU {"NAME":"Loratap SC400W","GPIO":[0,0,0,34,0,32,0,0,33,225,0,224,0,0],"FLAG":0,"BASE":18} +LoraTap SC400W-EU {"NAME":"Loratap SC400W","GPIO":[544,0,0,34,0,32,0,0,33,225,0,224,0,0],"FLAG":0,"BASE":18} LoraTap SC411WSC-EU RF Remote {"NAME":"Loratap","GPIO":[0,0,0,34,226,32,0,0,33,225,0,224,0,0],"FLAG":0,"BASE":18} Maxcio WF-CS01 {"NAME":"Maxcio","GPIO":[544,0,289,162,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} SCS86-03AJAI {"NAME":"ESE86-03AJAI","GPIO":[544,227,289,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Teekar SYS-CS 01 {"NAME":"Teekar-Tag","GPIO":[320,0,544,33,225,162,0,0,0,224,321,258,32,0],"FLAG":0,"BASE":18} Teepao {"NAME":"Teepao","GPIO":[576,322,226,33,225,34,0,0,320,224,321,0,32,0],"FLAG":0,"BASE":18} -WF-CS01 {"NAME":"Tuya Shutter","GPIO":[544,0,290,161,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} +WF-CS01 {"NAME":"ShutterSwitch","GPIO":[544,227,289,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18,"CMND":"Rule1 1"} WF-CS02 {"NAME":"WF-CS02 Tuya","GPIO":[544,0,289,162,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Zemismart {"NAME":"Zemismart","GPIO":[544,0,0,162,290,161,0,0,160,224,226,225,0,0],"FLAG":0,"BASE":18} ``` ## DIN Relay ``` -Hoch Circuit Breaker 1P {"NAME":"HOCH ZJSB9","GPIO":[32,1,1,1,1,1,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} +EARU DIN Circuit Breaker 1P 32A/50A {"NAME":"RDCBC-1P","GPIO":[320,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} +Hoch Circuit Breaker 1P {"NAME":"HOCH ZJSB9","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} OpenEnergyMonitor WiFi MQTT Thermostat {"NAME":"MQTT-RELAY","GPIO":[32,0,1,0,0,224,0,0,0,0,0,0,320,0],"FLAG":0,"BASE":18} Sinotimer {"NAME":"TM608","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} Sinotimer {"NAME":"Sinotimer TM60","GPIO":[0,0,0,0,0,288,0,0,224,160,0,0,0,0],"FLAG":0,"BASE":18} @@ -218,10 +227,11 @@ Vacplus 50 Pint {"NAME":"VacPlus Dehumidifier","GPIO":[0,0,0,0,0,0, ``` Adafruit HUZZAH {"NAME":"Huzzah","GPIO":[32,0,320,0,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":18} AZ-Envy Environmental Sensor {"NAME":"AZ Envy","GPIO":[32,0,320,0,640,608,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18} -ESP32 Lite V1.0.0. {"NAME":"ESP32 Lite V1.0.0","GPIO":[1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0],"FLAG":0,"BASE":1} +ESP32 Lite V1.0.0 {"NAME":"ESP32 Lite V1.0.0","GPIO":[1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0],"FLAG":0,"BASE":1} +LC Technology MicroPython Maker {"NAME":"LC-ESP-Python","GPIO":[1,1,544,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} LilyGO TTGO T-Internet-POE {"NAME":"LilyGO T-Internet-POE","GPIO":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,5600,1,0,1,1,5568,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} M5Stack Atom Lite ESP32 {"NAME":"M5Stack Atom Lite","GPIO":[1,1,1,1,1,1,1,1,1056,1,1,1,1,1,1,1,0,1,1,1,0,1,640,1376,0,0,0,0,608,1,1,1,1,0,0,32],"FLAG":0,"BASE":1} -Olimex ESP32-POE {"NAME":"Olimex ESP32-PoE","GPIO":[1,1,1,1,1,1,0,0,5536,1,1,1,1,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} +Olimex ESP32-POE Ethernet {"NAME":"Olimex ESP32-PoE","GPIO":[1,1,1,1,1,1,0,0,5536,1,1,1,1,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} QuinLED 2 Channel {"NAME":"QuinLED 2 channel","GPIO":[416,0,417,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Silicognition wESP32 {"NAME":"wESP32","GPIO":[0,0,1,0,1,1,0,0,1,1,1,1,5568,5600,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} TZT ESP8266 Weather Station Kit {"NAME":"TZT Weather Station","GPIO":[32,0,640,0,1,1184,0,0,1,1,608,1,1,1],"FLAG":0,"BASE":18} @@ -229,6 +239,7 @@ WifInfo - Teleinfo Server {"NAME":"WifInfo","GPIO":[1376,1,1,5152,640,608,1,1 Wireless Tag ESP32 Ethernet {"NAME":"WT32-ETH01","GPIO":[1,1,1,1,1,1,0,0,1,0,1,1,3840,576,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1],"FLAG":0,"BASE":1} Witty Cloud {"NAME":"Witty Cloud","GPIO":[1,1,320,1,32,1,0,0,417,418,1,416,1,4704],"FLAG":0,"BASE":32} Yison ESP-01/ESP-202 {"NAME":"Yison Dev Board","GPIO":[259,544,258,1,260,261,1,1,416,418,257,417,256,1],"FLAG":0,"BASE":18} +ZiGate-Ethernet {"NAME":"ZIGATE-ETH","GPIO":[1,1,1,1,1,1,0,0,1,0,1,1,3840,576,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1],"FLAG":0,"BASE":18,"CMND":"EthClockMode 3 | EthAddress 1"} ``` ## Dimmable @@ -241,6 +252,7 @@ Arlec Smart 4W 380lm Candle {"NAME":"Arlec Bulb 4W","GPIO":[0,0,0,0,0,0,0,0,0,0 Arlec Smart 9W 950lm 4000K {"NAME":"Arlec-GLD124HA","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Avatar 5W Candle {"NAME":"AVATAR","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} AZzardo ES111 Black 3000K 15W {"NAME":"Azzardo WiFi ES111 DIMM","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} +Bright A19 10W 800lm {"NAME":"Bright Smart Bulbs","GPIO":[0,0,0,0,0,416,0,0,0,160,0,0,0,0],"FLAG":0,"BASE":66} BrilliantSmart 8.5W 900lm 3000k {"NAME":"Brilliant20889","GPIO":[0,0,0,0,0,0,0,0,416,0,0,0,0,0],"FLAG":0,"BASE":18} Cleverio 51396 800lm {"NAME":"Cleverio E27","GPIO":[0,0,0,0,0,0,0,0,0,0,448,0,0,0],"FLAG":0,"BASE":18} Digma DiLight E27 W1 {"NAME":"DiLight E27 W1","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} @@ -250,11 +262,13 @@ Feit Electric 800lm {"NAME":" Feit P_A800_2","GPIO":[0,0,0,0,0,416,0,0, Feit Electric 8.8W 800lm Vintage {"NAME":"FEIT A1960CL","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Feit Electric BR30 650lm {"NAME":"Feit BR30 WW","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Feit Electric BR30 650lm {"NAME":"Feit BR30 CW","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Feit Electric Chandelier Flame Tip Soft White {"NAME":"FEIT CFC40","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} +Feit Electric ST19 Soft White {"NAME":"FEIT A1960FILAG","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Geeni LUX 800 {"NAME":"Geeni GN-BW902-999","GPIO":[0,0,0,0,416,0,0,0,0,160,0,0,0,0],"FLAG":0,"BASE":18} Geeni LUX 800 {"NAME":"Geeni-LUX-800","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Geeni LUX Edison {"NAME":"Geeni-Edison","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Globe A19 10W 800lm {"NAME":"Globe WW 800lm","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} -Gosund A19 8W 2700K {"NAME":"Gosund Wifi Dimmable Bulb","GPIO":[0,0,0,0,416,0,0,0,0,288,0,0,0,0],"FLAG":0,"BASE":18} +Gosund NiteBird A19 8W 2700K {"NAME":"NiteBird LB1","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Hama 7W 900lm Filament {"NAME":"Hama Filament","GPIO":[1,1,1,1,1,1,1,1,1,1,448,1,1,1],"FLAG":0,"BASE":18} Jetstream 9W 800lm {"NAME":"Jetstream MA19WH","GPIO":[0,0,0,0,416,0,0,0,0,288,0,0,0,0],"FLAG":0,"BASE":18} KMC 70113 A19 7.5W {"NAME":"Generic","GPIO":[0,0,0,0,0,0,416,417,0,0,0,0,0,1],"FLAG":0,"BASE":18} @@ -263,7 +277,7 @@ Krisbow Bohlam 14W {"NAME":"Krisbow SmartL","GPIO":[0,0,0,0,0,416,0,0, LeDesign 8W ST21 Filament {"NAME":"Edison Bulb","GPIO":[0,0,0,0,0,0,0,0,0,416,0,0,0,0],"FLAG":0,"BASE":18} Lohas LZN127 G25 800lm {"NAME":"Lohas Globe","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Lohas ZN014 550lm {"NAME":"Lohas MR16","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} -Lohas ZN121 8W 720lm 2700k {"NAME":"Lohas LED A60","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} +Lohas ZN121 8W 720lm {"NAME":"Lohas LED A60","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Lohas ZN124 980lm {"NAME":"Lohas LH-ZN124","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} LSC Filament A60 {"NAME":"LSC Filam E27","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} LSC Filament C35 {"NAME":"LSC Filam E14","GPIO":[0,1,0,1,0,0,0,0,417,0,416,0,0,1],"FLAG":0,"BASE":18} @@ -289,11 +303,11 @@ Mirabella Genio 9W 800lm WW {"NAME":"Genio WW","GPIO":[0,0,0,0,0,0,0,0,0,416,0, Mirabella Genio A70 1400lm {"NAME":"GenioB_CW2744","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis A60 5W 500lm {"NAME":"WIFILF11WTA60","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis A60 Filament {"NAME":"WIFILF10WTA60","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} +Nedis A60 W 800lm Warm White {"NAME":"WIFILW31WTE27","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis A60 Warm White 9W 800lm {"NAME":"WIFILW11WTE27","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis G125 Filament {"NAME":"WIFILF10GDG125","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis PAR16 330lm {"NAME":"Nedis WIFILW31","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Nedis ST64 5W 500lm Filament {"NAME":"WIFILF10GDST64","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} -NiteBird 8W 800lm 2700k {"NAME":"Nitebird-smart28k","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Positivo Smart Lampada Retro {"NAME":"POSITIVO SMART LAMPADA RETRO","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Sealight Vintage Edison A19 {"NAME":"SealightEdison","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Shelly Vintage 4W 260lm 2700k {"NAME":"Shelly Vintage","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} @@ -341,11 +355,12 @@ Zemismart KS-7011 {"NAME":"KS-7011 Dimmer","GPIO":[1,2272,1,2304,1,1, ``` Armtronix AC Dimmer 1-Triac {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} Armtronix AC Dimmer 2-Triac {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} -BrilliantSmart D350W {"NAME":"Generic","GPIO":[1,2272,1,2304,1,1,0,0,1,0,1,0,1,0],"FLAG":0,"BASE":54} +BrilliantSmart D350W {"NAME":"D350W","GPIO":[1,2272,1,2304,1,1,0,0,1,0,1,0,1,0],"FLAG":0,"BASE":54} BrilliantSmart Jupiter {"NAME":"BrSm Jupiter","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} EX-Store 2 Kanal RS232 V4 {"NAME":"EXS Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,4128,0,0,0,0],"FLAG":0,"BASE":72} +Moes 2 Gang {"NAME":"WM-105","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 21,2 | TuyaMCU 12,7 | TuyaMCU 22,8 | DimmerRange 0,1003"} Moes MS-105-1 v2 {"NAME":"MS-105","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} -QS-WiFi-D01-TRIAC 150W {"NAME":"WiFi-Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,352,416,0,0,0],"FLAG":0,"BASE":18} +QS-WiFi-D01-TRIAC 150W {"NAME":"QS-WiFi-D01-TRIAC","GPIO":[0,3200,0,3232,0,0,0,0,0,352,416,0,0],"FLAG":0,"BASE":18} RJWF-02A {"NAME":"RJWF-02A","GPIO":[32,2272,0,2304,0,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":54} Shelly Dimmer {"NAME":"Shelly Dimmer 1","GPIO":[0,3200,0,3232,5568,5600,0,0,192,0,193,288,0,4736],"FLAG":0,"BASE":18} Shelly Dimmer 2 {"NAME":"Shelly Dimmer 2","GPIO":[0,3200,0,3232,5568,5600,0,0,193,0,192,0,320,4736],"FLAG":0,"BASE":18} @@ -354,15 +369,16 @@ Sonoff D1 {"NAME":"Sonoff D1","GPIO":[1,3200,0,3232,0,0,0,0,0 ## Display ``` +Heltec WiFi Kit 32 {"NAME":"WiFi Kit 32","GPIO":[1,1,1,1,640,1,1,1,1,1,1,608,3840,1,1,1,0,1,1,1,0,224,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} Heltec WiFi Kit 8 {"NAME":"HTIT-W8266","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18} LilyGO TTGO ESP8266 0.91 inch OLED SSD1306 {"NAME":"TTGO-0.91","GPIO":[1,1,640,1,1024,0,0,0,1,1,608,1,0,1],"FLAG":0,"BASE":18} -LilyGO TTGO T-Camera {"NAME":"TasmotaCAM","GPIO":[1,1,1,1,4992,5120,1,1,1,5089,5090,64,1,1,5024,65,0,640,608,5056,0,5184,1,5152,0,0,0,0,1,1,5088,5091,5095,5094,5093,5092],"FLAG":0,"BASE":1} +LilyGO TTGO T-Camera {"NAME":"T-Camera","GPIO":[1,1,1,1,4992,5120,1,1,1,5089,5090,64,1,1,5024,65,0,640,608,5056,0,5184,1,5152,0,0,0,0,1,1,5088,5091,5095,5094,5093,5092],"FLAG":0,"BASE":1} LilyGO TTGO T-Display 1.14in {"NAME":"ESP32-ttgo-display","GPIO":[0,1,1,1,992,6592,1,1,1,1,1,1,6624,1,896,864,0,1,1,1024,0,1,1,1,0,0,0,0,1,1,1,33,1,0,0,1],"FLAG":0,"BASE":1} LilyGO TTGO T-Watcher {"NAME":"TTGO T4 v1.3","GPIO":[35,1,672,1,992,1024,1,1,832,768,736,704,1,1,896,0,0,640,608,864,0,0,1,928,0,0,0,0,960,1,1,4704,1,32,33,34],"FLAG":0,"BASE":1} LilyGO TTGO TO ESP8266 OLED SH1106 Weather Station {"NAME":"TTGO T12","GPIO":[1,1,1,1,608,640,0,0,32,34,33,1,1,1],"FLAG":0,"BASE":18} -M5Stack Core2 {"NAME":"M5Stack Core2","GPIO":[1,1,1,1,6720,6368,0,0,0,1,1,6400,0,0,736,1,0,0,0,704,0,1,1,1,0,0,0,0,640,608,1,1,1,0,672,0],"FLAG":0,"BASE":7} -M5Stack M5StickC {"NAME":"M5StickC","GPIO":[1,0,0,0,0,768,1056,576,0,736,0,704,0,0,1024,0,0,0,0,800,0,0,1,0,0,0,0,0,640,608,1,0,1,32,6210,33],"FLAG":0,"BASE":7} -ODROID-GO Game Kit {"NAME":"Odroid","GPIO":[0,1,0,1,1,768,1,1,1,0,416,1,1,1,736,672,0,800,1,704,0,1,1,0,0,0,0,0,0,0,4704,3329,4866,0,0,0],"FLAG":0,"BASE":1} +M5Stack Core2 {"NAME":"M5Stack Core 2","GPIO":[6210,1,1,1,6720,768,0,0,0,1,1,800,0,0,736,1,0,641,609,704,0,0,0,1,0,0,0,0,640,608,1,1,1,0,672,0],"FLAG":0,"BASE":1} +M5Stack M5StickC {"NAME":"M5StickC","GPIO":[1,0,0,0,0,768,1056,576,0,736,0,704,0,0,1024,0,0,641,609,800,0,0,1,0,0,0,0,0,640,608,1,0,1,32,6210,33],"FLAG":0,"BASE":1} +ODROID-GO Game Kit {"NAME":"ODROID-GO","GPIO":[32,3200,544,3232,608,768,0,0,6210,33,416,640,1,1,736,672,0,800,6720,704,0,0,0,34,0,0,0,0,164,165,3328,3329,4866,0,0,35],"FLAG":0,"BASE":3} OLED Display Module 0.66" for Wemos D1 Mini {"NAME":"OLED 64x48","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18} TTGO ESP32 {"NAME":"TTGO T-Journal ESP32 Camera","GPIO":[4928,1,1,1,1,5091,1,1,1,608,640,4960,1,5088,5093,5095,0,5184,5120,5056,0,5024,5152,4992,0,0,0,0,1,1,5090,5089,5094,0,0,5092],"FLAG":0,"BASE":1} ``` @@ -373,6 +389,7 @@ TTGO ESP32 {"NAME":"TTGO T-Journal ESP32 Camera","GPIO":[4928, Arlec Smart 9W CCT {"NAME":"Arlec ALD092CHA","GPIO":[0,0,0,0,416,417,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 9W RGB+CCT {"NAME":"Arlec ALD092RHA","GPIO":[0,0,0,0,419,420,0,0,416,418,417,0,0,0],"FLAG":0,"BASE":18} Atom 10W RGBCCT {"NAME":"Atom AT9017/WH/WIZ/TR","GPIO":[0,0,420,0,419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,416,417,418,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} +Atom 11W RGBCCT {"NAME":"Atom AT9012/WH/WIZ","GPIO":[0,0,420,0,419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,416,417,418,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} BrilliantSmart Prism 10W RGBCCT {"NAME":"Prism","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} BrilliantSmart Trilogy 9W CCT {"NAME":"SmartCCTDwnLgt","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":48} Connect SmartHome RGB {"NAME":"CSH-240RGB10W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -388,7 +405,7 @@ LEDLite CCT 10W Fire Rated {"NAME":"LEDLite-LTTD10Wifi","GPIO":[0,0,0,0,0,0,0, Mirabella Genio 9W CCT {"NAME":"GenioDLightCCT","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":48} Mirabella Genio 9W RGBCCT {"NAME":"GenioDLightCCT","GPIO":[0,0,0,0,0,0,0,0,4032,0,4064,0,0,0],"FLAG":0,"BASE":18} Moes 7W RGBCCT {"NAME":"Moes Downlight","GPIO":[0,0,0,0,419,420,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} -Philips 200lm 3000 - 5700k CCT {"NAME":"xiaomi.philips.downlight","GPIO":[0,0,0,0,0,0,0,0,416,0,0,417,0,0],"FLAG":0,"BASE":18} +Philips 200lm 3000k-5700k CCT {"NAME":"xiaomi.philips.downlight","GPIO":[0,0,0,0,0,0,0,0,416,0,0,417,0,0],"FLAG":0,"BASE":18} Philips 5/6 in. RGBCCT {"NAME":"Philips","GPIO":[0,0,0,0,419,0,0,0,416,420,418,417,0,0],"FLAG":0,"BASE":48} Seed Alarm 11W RGBW {"NAME":"Seed Alarm Downlight","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Zemismart 4" 10W RGBCCT {"NAME":"ZemiDownLight4","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -406,23 +423,30 @@ ZMAi-90 Digital {"NAME":"ZMAi-90","GPIO":[0,3200,0,3232,0,0,0,0,224 ## Fan ``` Anko HEGSM40 {"NAME":"Anko HEGSM40","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -Arlec Smart 45cm Smart DC Wall {"NAME":"Arlec 45cm Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -BrilliantSmart {"NAME":"Brilliant Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} -Geek Aire AF1s {"NAME":"Geek Aire Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Arlec Smart 45cm Smart DC Wall {"NAME":"Arlec 45cm Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 61,2 | TuyaMCU 64,3 | TuyaMCU 99,6 | TuyaMCU 12,101"} +Geek Aire 3D Oscillating Desktop {"NAME":"Geek Aire Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 12,4 | TuyaMCU 13,5"} Goldair SleepSmart GCPF315 {"NAME":"Goldair Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} Lucci Connect Remote Control {"NAME":"Lucci Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} Sichler Haushaltsgeraete Column {"NAME":"Sichler Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} -Sonoff IFan02 {"NAME":"Sonoff iFan02","GPIO":[32,1,0,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":44} -Sonoff IFan03 {"NAME":"SonoffiFan03","GPIO":[32,3200,0,3232,0,0,256,512,226,320,225,227,0,0],"FLAG":0,"BASE":71} -Technical Pro {"NAME":"FXA16 Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Technical Pro {"NAME":"FXA16 Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 12,8"} Zemismart Bladeless {"NAME":"Bladeless Fan","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` +## Fan Controller +``` +BrilliantSmart Light and {"NAME":"Brilliant Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Qiachip 110V/220V Light and {"NAME":"Qiachip FLC","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 12,9 | TuyaMCU 81,7"} +Sonoff iFan02 Light and Ceiling {"NAME":"Sonoff iFan02","GPIO":[32,1,0,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":44} +Sonoff iFan03 220V Light and Ceiling {"NAME":"SonoffiFan03","GPIO":[32,3200,0,3232,0,0,256,512,226,320,225,227,0,0],"FLAG":0,"BASE":71} +Sonoff iFan04-L 110V Light and Ceiling {"NAME":"iFan04-L","GPIO":[32,3200,0,3232,0,0,256,512,226,320,225,227,0,0],"FLAG":0,"BASE":71} +``` + ## Fan Switch ``` Avatto Light and {"NAME":"AVATTO SYS-FL01","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Deta Light and {"NAME":"Deta Fan Speed and Light Controller","GPIO":[33,0,0,576,226,34,0,0,0,225,224,227,32,0],"FLAG":0,"BASE":18} iSwitch Light and {"NAME":"iSwitchOZ Light Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Treatlife Ceiling {"NAME":"DS02F","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1|SO97 1|SO68 0"} ``` ## Garage Door Opener @@ -442,12 +466,11 @@ Natural Gas (CH4) Alarm {"NAME":"PA-210WYS","GPIO":[1,2272,1,2304,1,1,0,0,1 Devola Designer Glass Panel {"NAME":"Devola Heater","GPIO":[0,0,0,0,224,1,0,0,0,1824,0,1792,0,0],"FLAG":0,"BASE":18} Klarstein Bornholm Smart 2000W {"NAME":"Klarstein Bornholm","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Kogan 1500W Panel {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -SmartMi Electric Air {"NAME":"ZNNFJ07ZM","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,3200,3232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} ``` ## Humidifier ``` -Duux Beam {"NAME":"Duux Beam","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Duux Beam {"NAME":"Duux Beam","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 12,5 | TuyaMCU 13,21 | TuyaMCU 71,14 | TuyaMCU 74,15 | TuyaMCU 73,16"} Proscenic {"NAME":"Generic","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` @@ -458,12 +481,14 @@ AI Universal Remote {"NAME":"YTF IR Controller","GPIO":[1,1,1,1,320,108 Alfawise KS1 {"NAME":"KS1","GPIO":[1,1792,32,1824,32,1088,0,0,320,0,1056,0,0,4704],"FLAG":0,"BASE":62} Antsig Universal Remote Controller {"NAME":"Antsig Smart Wi-Fi IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} auvisio S06 {"NAME":"NX-4519-675","GPIO":[0,0,0,0,288,1088,0,0,0,0,1056,0,0,0],"FLAG":0,"BASE":18} +Avatto Temperature and Humidity Sensor and {"NAME":"S08Pro","GPIO":[0,640,0,608,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-RC1 {"NAME":"BW-RC1","GPIO":[0,0,0,0,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Connect SmartHome Universal Remote {"NAME":"CSH IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Cusam CS-IRC-1 {"NAME":"YTF IR Controller","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Eachen IR DC6 {"NAME":"Eachen IR","GPIO":[0,0,0,0,320,1088,0,0,1,32,1056,0,0,0],"FLAG":0,"BASE":18} Frankever Smart Remote {"NAME":"FK-UFO-R4","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Geeklink GK01 {"NAME":"GL IR Blaster","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} +HIPER IoT IR2 {"NAME":"hiper_HI-IR2","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Jinvoo AC/TV Box {"NAME":"Jinvoo IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} JS-IR1 Universal Remote {"NAME":"JS-IR1","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":18} Lenovo SE-741C {"NAME":"Lenovo IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} @@ -473,10 +498,10 @@ NEO Coolcam Remote Controller {"NAME":"Neo Coolcam IR","GPIO":[1,3200,1,3232,57 Orvibo Magic Cube {"NAME":"Orvibo CT10W","GPIO":[0,0,0,0,32,1088,0,0,288,0,1056,289,0,0],"FLAG":0,"BASE":18} Remote Control {"NAME":"DC-QRA2","GPIO":[0,0,0,0,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} RM mini {"NAME":"RM mini","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} +Smartpoint Smart Remote {"NAME":"Smartpoint SPCNTRL-WM","GPIO":[0,0,0,0,288,1088,0,0,0,0,1056,0,0,0],"FLAG":0,"BASE":18} STITCH {"NAME":"Stitch 35753","GPIO":[0,0,0,0,288,1088,0,0,0,64,1056,0,0,0],"FLAG":0,"BASE":18} SZMDLX IR Remote Controller {"NAME":"SZMDLX WiFi IR","GPIO":[0,0,0,0,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Tuya Smart Remote {"NAME":"IR Controller","GPIO":[1,1,1,1,1,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} -TY-IR-01 {"NAME":"TY-IR-01 IR Controller","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} YTF Universal Remote {"NAME":"YTF IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} ``` @@ -508,7 +533,7 @@ CIN-03 96W RGB {"NAME":"CIN03-03 Strip","GPIO":[0,0,0,0,417,0,0,0, DD001-MINI(G)-IR-V03 {"NAME":"WIFI-RGB","GPIO":[32,0,0,0,0,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":40} DD001-MINI(G)-IR-V08 {"NAME":"WIFI-RGB","GPIO":[0,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Electrodragon ESP LED Strip Board, Mosfet Drive {"NAME":"LEDBoard RGBW","GPIO":[0,0,0,0,0,0,0,0,418,417,419,416,288,0],"FLAG":0,"BASE":18} -H801 {"NAME":"H801","GPIO":[0,288,0,0,420,321,0,0,418,417,419,416,0,0],"FLAG":0,"BASE":20} +H801 {"NAME":"H801","GPIO":[1,288,1,1,420,321,0,0,418,417,419,416,0,0],"FLAG":0,"BASE":20} Holman Garden Light RGB {"NAME":"Holman RGB","GPIO":[0,0,0,0,0,0,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18} Jinvoo SM-WA104 RGB {"NAME":"Jinvoo LED Controller","GPIO":[0,0,0,0,256,418,0,0,416,32,417,0,257,0],"FLAG":0,"BASE":18} Konesky 12V RGB {"NAME":"RGBwifi","GPIO":[0,0,0,0,416,0,0,0,417,320,418,0,0,0],"FLAG":0,"BASE":18} @@ -552,9 +577,9 @@ electriQ 3m RGBCCT {"NAME":"ElectricQ wifiRGBWLEDSTR","GPIO":[0,0,0,0, Elfeland 10m RGB {"NAME":"Elfeland RGB","GPIO":[0,0,0,0,0,417,0,0,418,1088,0,416,0,0],"FLAG":0,"BASE":18} Energizer Multi-Color 6.5ft {"NAME":"Energizer","GPIO":[0,0,0,0,0,417,0,0,418,0,0,416,0,0],"FLAG":0,"BASE":18} Geeni Prisma Plus {"NAME":"Geeni Prisma Plus Strip","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Gosund 32.8ft RGB {"NAME":"Gosund SL3 LED Strip","GPIO":[0,0,32,0,417,0,0,0,416,418,4768,0,0,0],"FLAG":0,"BASE":18} -Gosund RGB {"NAME":"Gosund LED Strip","GPIO":[0,0,0,0,32,417,0,0,416,418,0,0,0,4768],"FLAG":0,"BASE":18} -Gosund SL2 5m RGB {"NAME":"gosund SL2","GPIO":[1,1,1,1,99,417,1,1,416,418,1,1,1,1],"FLAG":0,"BASE":18} +Gosund NiteBird 32.8ft RGB {"NAME":"Gosund SL3","GPIO":[0,0,32,0,417,0,0,0,416,418,4768,0,0,0],"FLAG":0,"BASE":18} +Gosund NiteBird 5m RGB {"NAME":"gosund SL2","GPIO":[1,1,1,1,99,417,1,1,416,418,1,1,1,1],"FLAG":0,"BASE":18} +Gosund NiteBird RGB {"NAME":"Gosund LED Strip","GPIO":[0,0,0,0,32,417,0,0,416,418,0,0,0,4768],"FLAG":0,"BASE":18} HitLights L1012V-MC1 {"NAME":"HitLights RBG","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} HomeMate 10m RGB {"NAME":"Homemate Strip","GPIO":[0,0,0,0,0,416,0,0,418,32,417,0,0,0],"FLAG":0,"BASE":18} Hykker 3m RGB {"NAME":"HYKKER Strip","GPIO":[0,0,0,0,0,416,0,0,418,32,417,0,0,0],"FLAG":0,"BASE":18} @@ -566,6 +591,7 @@ LE LampUX 5m RGB {"NAME":"LampUX","GPIO":[32,0,0,0,0,417,0,0,418,0,0 LE LampUX 5m RGB {"NAME":"LE LampUx","GPIO":[0,0,0,0,0,417,0,0,418,0,0,416,0,0],"FLAG":0,"BASE":34} LE lampUX 5m RGBW {"NAME":"LampUX","GPIO":[0,0,32,0,0,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18} Lenovo 5m RGBW {"NAME":"Lenovo LED Strip 5m","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +LePower 32.8ft RGB {"NAME":"LePower","GPIO":[0,0,0,0,0,417,0,0,418,0,0,416,0,0],"FLAG":0,"BASE":18} Lohas ZN022 5m RGBW {"NAME":"LOHAS M5-022","GPIO":[0,0,0,0,417,416,0,0,32,418,0,0,0,0],"FLAG":0,"BASE":18} LSC RGBW {"NAME":"LSC RGBW Strip","GPIO":[1088,0,0,0,416,0,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} Lumary RGBCCT {"NAME":"Lumary LED","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -574,7 +600,6 @@ Maxonar Lightstrip Pro XS-SLD001 {"NAME":"Maxonar LED","GPIO":[0,0,0,0,0,416,0, Merkury Innovations MI-EW003-999W {"NAME":"MI-EW003-999W ","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio RGB+CW {"NAME":"MirabellaStrip","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Monster Smart IlluminEssence {"NAME":"MI-EW003-999W ","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -NiteBird 9.2ft RGB TV Backlight {"NAME":"NiteBird Smart LED Light Strip","GPIO":[32,0,0,0,0,0,0,0,416,418,417,0,0,0],"FLAG":0,"BASE":18} Polux RGB+NW 2m {"NAME":"Polux Wi-Fi SM","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":37} Polux RGBCCT 20W 1700lm 5m {"NAME":"Polux LED 5m","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Powertech 5m RGBW {"NAME":"Jaycar ST3992 LED Strip","GPIO":[0,0,0,0,416,419,0,0,418,420,417,0,0,0],"FLAG":0,"BASE":18} @@ -589,8 +614,10 @@ Teckin SL07 32.8ft RGB {"NAME":"WIFI RGB","GPIO":[1088,0,0,0,416,0,0,0,417 Teopek Spider Z RGB {"NAME":"Sonoff L1","GPIO":[0,3200,0,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":70} TORCHSTAR CCT 30W Lighting Kit {"NAME":"Torchstar CCT ","GPIO":[0,0,0,0,288,417,0,0,0,32,0,416,289,0],"FLAG":0,"BASE":18} Torchstar Safe Lighting Kit {"NAME":"Torchstar","GPIO":[0,0,0,0,288,0,0,0,0,0,0,416,289,4704],"FLAG":0,"BASE":18} +WiZ 2m Starter Kit {"NAME":"WiZ LED Strip","GPIO":[0,0,420,0,419,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,416,417,418,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} WOOX 5m RGBW {"NAME":"GardenLedstrip1","GPIO":[0,0,0,0,0,417,0,0,418,160,416,0,0,0],"FLAG":0,"BASE":18} -Yeelight Lightstrip 1S {"NAME":"Yeelight Lightstrip 1S","GPIO":[0,0,0,0,0,418,0,0,0,416,417,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} +WOOX 5m RGBW {"NAME":"Woox R5093","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +Yeelight Lightstrip 1S {"NAME":"Yeelight Lightstrip 1S","GPIO":[0,0,0,0,0,418,0,0,0,416,417,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"`SO37 128 | SO92 1"} Zemismart 3m Extendable RGBW {"NAME":"Zemismart LED","GPIO":[0,0,0,0,417,416,0,0,0,418,419,0,0,0],"FLAG":0,"BASE":18} ``` @@ -611,7 +638,8 @@ BrilliantSmart RGB Garden Kit {"NAME":"Brilliant Gard","GPIO":[0,0,0,0,416,0,0, Connect SmartHome CSH-FSTN12 {"NAME":"CSH-FSTN12","GPIO":[0,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Deta 18W 1900lm T8 Tube {"NAME":"DETA Smart LED","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} electriQ MOODL Ambiance Lamp {"NAME":"ElectriQ MOODL","GPIO":[0,4640,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} -Hugoai Table Lamp {"NAME":"HG02","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} +Hama Wall Light Square, 10 cm, IP 44 {"NAME":"Hama Wifi Wall Light","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,1],"FLAG":0,"BASE":18} +Hugoai Table Lamp {"NAME":"HG02","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,20 | TuyaMCU 26,21 | TuyaMCU 21,22 | TuyaMCU 23,23 | TuyaMCU 24,24 | DimmerRange 34,1000"} Iwoole Table Lamp {"NAME":"GLOBELAMP","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Lumary 18W RGBCCT Recessed Panel {"NAME":"LumaryDLghtRGB","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Mi LED Desk Lamp {"NAME":"Mi Desk Lamp","GPIO":[0,0,32,0,416,417,0,0,3264,3296,0,0,0,0],"FLAG":0,"BASE":66} @@ -622,40 +650,61 @@ MiraBella Genio Colour 6 LED 30mm Stainless Steel Deck {"NAME":"Genio RGB Deck Mirabella Genio Rechargable LED Portable Lamp {"NAME":"MirabellaPortableLamp","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Novostella UT88835 20W Flood {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Novostella UT88836 20W Flood {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Nue Vision Care Desk Lamp {"NAME":"Nue Vision Desk Lamp VC18","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,1 | TuyaMCU 21,3 | TuyaMCU 23,4"} Sonoff BN-SZ01 {"NAME":"Sonoff BN-SZ","GPIO":[0,0,0,0,0,0,0,0,416,320,0,0,0,0],"FLAG":0,"BASE":22} Spotlight 9cm RGB+W 7W {"NAME":"Spotlight RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} TCP WPAN Square 600X600mm 36W CCT Panel {"NAME":"TCPsmart LED Panel","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":18} Teckin FL41 {"NAME":"Teckin FL41","GPIO":[0,0,0,0,0,32,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Wipro Next Smart Batten 20W CCT {"NAME":"WIPROBatten","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,4704],"FLAG":0,"BASE":18} +Xiaomi Mi Desk Lamp Pro {"NAME":"Mi Desk Lamp Pro","GPIO":[6212,0,416,0,417,0,0,0,3840,0,0,0,160,640,608,0,0,0,0,0,0,0,3296,3264,0,0,0,0,0,32,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"DimmerRange 30,100"} +Yeelight Crystal Pendant {"NAME":"Yeelight Meteorite","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,0,419,0,0,0,0,417,418,0,0,0,0,0,416,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"`SO37 128 | SO92 1"} Zemismart Moonlamp {"NAME":"Zemismart Moonlamp","GPIO":[1,1,1,1,416,419,1,1,417,420,418,1,1,1],"FLAG":0,"BASE":18} ``` ## Miscellaneous ``` Alfawise Air Purifier {"NAME":"alfawise P2","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} -BlitzWolf Air Fryer {"NAME":"Bw-AF1","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} -Blitzwolf UV Pet Water Fountain {"NAME":"BW-SPF1","GPIO":[0,0,0,0,224,416,0,0,0,32,0,0,576,0],"FLAG":0,"BASE":18} +BlitzWolf Air Fryer {"NAME":"BW-AF1","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,111 | TuyaMCU 12,101 | TuyaMCU 71,104 | TuyaMCU 81,106 | TempRes 0"} +Blitzwolf UV Pet Water Fountain {"NAME":"BW-SPF1","GPIO":[0,0,0,0,224,416,0,0,0,32,160,0,576,0],"FLAG":0,"BASE":18} Dealdig Robvaccum 8 Vacuum {"NAME":"WhiteVacuum","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Digital Body Fat Scale {"NAME":"TuyaScale","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Dual-Pump Automatic Watering System {"NAME":"WD-01ADE","GPIO":[32,0,0,0,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} EaryKong Doorbell {"NAME":"Doorbell","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +electriQ 10000 BTU Wall Mounted Heat Pump Air Conditioner {"NAME":"electriQ IQOOL-SMART12HP","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} +Eufy RoboVac C30 Robot Vacuum {"NAME":"Eufy Robovac","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,2 | TuyaMCU 12,101 | TuyaMCU 13,103"} iLONDA Fish Feeder {"NAME":"Feeder","GPIO":[0,0,0,0,32,320,0,0,352,0,224,0,0,0],"FLAG":0,"BASE":18} Kogan 4.1kW Portable Air Conditioner (Reverse Cycle) {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} Kogan Pet Fountain {"NAME":"Pet Fountain","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} LED Starry Sky Projector Light {"NAME":"STAR PROJECTOR","GPIO":[0,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +Liectroux C30B Robot Vacuum {"NAME":"Liectroux C30B","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Mosquito Killer Lamp {"NAME":"MosquitoKiller","GPIO":[32,0,0,0,0,0,0,0,416,320,0,0,0,0],"FLAG":0,"BASE":18} NEO Coolcam Mouse Trap {"NAME":"Neo Mouse Trap","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} PCI-e Desktop PC Remote Control {"NAME":"PC-Switch-01","GPIO":[32,0,0,0,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":18} Proscenic T21 Air Fryer {"NAME":"Proscenic T21","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +RainPoint Indoor Water Pump {"NAME":"RainPoint","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 81,107|TuyaMCU 12,109|TuyaMCU 11,1|TuyaMCU 82,104"} +Xystec USB3.0 4 Port Hub {"NAME":"Xystec USB Hub","GPIO":[0,0,0,0,224,0,0,0,226,227,225,0,0,0],"FLAG":0,"BASE":18} ``` ## Module ``` -ESP-01 {"NAME":"ESP01","GPIO":[1,1,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Ai Thinker ESP-C3-12F ESP-12 Compatible "Not available" +DT-Light ESP8285 Lighting {"NAME":"DMP-L1","GPIO":[1,1,0,1,1,1,0,0,1,1,1,1,1,1],"FLAG":0,"BASE":18} ESP-01D {"NAME":"ESP-01D","GPIO":[1,1,0,1,1,0,0,0,1,0,1,0,0,0],"FLAG":0,"BASE":18} +ESP-01M "Not available" +ESP-01N V1.0 "Not available" +ESP-01S {"NAME":"ESP-01","GPIO":[1,1,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +ESP-07 "Not available" +ESP-12E / ESP-12F / ESP-12S "Not available" ESP-15F {"NAME":"ESP-15F","GPIO":[1,1,0,1,1,1,0,0,0,544,0,0,0,0],"FLAG":0,"BASE":18} +ESP-M2 {"NAME":"ESP-M2","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,0,1],"FLAG":0,"BASE":18} ESP-M3 {"NAME":"ESP-M3","GPIO":[1,1,1,1,1,0,0,0,0,1,1,0,1,0],"FLAG":0,"BASE":18} +ESP-M4 {"NAME":"ESP-M4","GPIO":[1,1,0,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":18} LC Technology PSF-B04 Ewelink 4 Channel Switch {"NAME":"LC-EWL-B04-MB","GPIO":[1,1,1,1,1,1,0,0,1,288,1,1,0,0],"FLAG":0,"BASE":18} -Shelly UNI {"NAME":"Shelly Uni","GPIO":[320,0,0,0,225,1216,0,0,192,193,0,224,0,4864],"FLAG":0,"BASE":18} +MTools 16 Channel ESP32 Relay Driver 5V DC {"NAME":"16ch Board","GPIO":[1,1,237,1,232,1,1,1,228,231,1,1,233,230,234,235,0,238,239,236,0,224,227,226,0,0,0,0,229,225,1,1,1,0,0,1],"FLAG":0,"BASE":1} +Shelly Universal Input/Output {"NAME":"Shelly Uni","GPIO":[320,0,0,0,225,1216,0,0,192,193,0,224,0,4864],"FLAG":0,"BASE":18} +Sinilink MODBUS Interface {"NAME":"XY-WFPOW","GPIO":[0,1,0,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Wireless Tag ESP32-C3 ESP-12 Compatible "Not available" +Wireless Tag WT32C3-01N "Not available" ``` ## Motion Sensor @@ -687,7 +736,7 @@ Aicliv 3 Outlet {"NAME":"AICLIV SOP03US","GPIO":[0,0,0,226,321,0,0, Albohes PC-1606 {"NAME":"Albohes PC1606","GPIO":[32,0,0,0,0,225,33,0,224,0,0,0,0,4704],"FLAG":0,"BASE":39} Albohes PS-1602 {"NAME":"Albohes PC1606","GPIO":[32,0,0,0,0,225,33,0,224,0,0,0,0,4704],"FLAG":0,"BASE":39} Amzdest Dual {"NAME":"Amzdest c158","GPIO":[0,32,0,225,2720,2656,0,0,224,2624,0,0,0,0],"FLAG":0,"BASE":18} -Amzdest IP55 {"NAME":"C168 Outdoor","GPIO":[0,0,0,2592,2720,2656,0,0,224,320,225,226,32,0],"FLAG":0,"BASE":18} +Amzdest IP55 {"NAME":"C168 Outdoor","GPIO":[0,0,0,2624,2720,2656,0,0,224,320,225,226,32,0],"FLAG":0,"BASE":18} Aoycocr X13 {"NAME":"Aoycocr X13","GPIO":[0,0,320,0,0,0,0,0,225,32,0,224,0,0],"FLAG":0,"BASE":18} Atomi {"NAME":"AtomiSmartPlug","GPIO":[0,0,0,0,320,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Blitzwolf 16A IP44 Dual {"NAME":"Blitzwolf BW-SHP14","GPIO":[0,320,0,32,0,321,0,0,224,0,225,0,0,0],"FLAG":0,"BASE":18} @@ -697,11 +746,13 @@ C119 {"NAME":"Subosi C119","GPIO":[0,0,0,0,225,320,0,0,2 C137 IP55 {"NAME":"C137 Outdoor","GPIO":[0,32,0,320,2720,2656,0,0,224,2624,225,0,0,1],"FLAG":0,"BASE":18} C168 IP64 {"NAME":"C188","GPIO":[320,0,321,0,33,0,0,0,224,32,544,225,0,0],"FLAG":0,"BASE":18} ECF-SOP03 {"NAME":"Outdoor3Outlet","GPIO":[0,0,0,226,320,0,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} -Ecoolbuy 4 socket {"NAME":"ECCOLBUY 4","GPIO":[0,0,0,0,225,226,0,0,224,321,32,0,227,0],"FLAG":0,"BASE":18} +Ecoolbuy 4 Socket IP44 {"NAME":"ECCOLBUY 4","GPIO":[0,0,0,0,225,226,0,0,224,321,32,0,227,0],"FLAG":0,"BASE":18} Edimax 2AC {"NAME":"EDI SP-1122WTO","GPIO":[0,0,0,0,225,576,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Emax IP44 {"NAME":"Emax Smart Socket","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +Energizer 2AC Weather Resistant {"NAME":"Energizer EOX3-1001-BLK","GPIO":[0,0,0,0,320,321,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Etekcity {"NAME":"ES015-TB","GPIO":[0,0,0,0,224,225,288,0,2656,2688,32,2592,289,0],"FLAG":0,"BASE":18} Feit Electric PLUG/WIFI/WP {"NAME":"Prime Smart ou","GPIO":[0,1,0,1,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Forrinx IP44 {"NAME":"SH-18","GPIO":[0,0,0,0,320,321,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} Forrinx SH-18EU-A {"NAME":"SH-18EU-A","GPIO":[0,0,0,0,225,288,224,321,32,0,0,0,0,0],"FLAG":0,"BASE":18} Foxnovo IP44 Dual {"NAME":"SOP06-US","GPIO":[0,0,0,0,320,321,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} Geeni Outdoor DUO Dual Outlet {"NAME":"Geeni Dual Out","GPIO":[32,0,0,0,0,321,0,0,0,320,224,0,225,0],"FLAG":0,"BASE":18} @@ -716,7 +767,6 @@ King-Link C128 {"NAME":"King-Link C128","GPIO":[0,0,322,0,225,320, Kogan Energy Meter IP44 {"NAME":"Kogan Smart Sw IP44","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} Konyks Pluviose 16A IP55 {"NAME":"Konyks Pluviose","GPIO":[32,0,0,0,0,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":18} Koolertron {"NAME":"C168 Outdoor","GPIO":[0,32,0,320,2720,2656,0,0,224,2624,225,226,0,0],"FLAG":0,"BASE":18} -LEPOWER {"NAME":"LEPOWER Outdoo","GPIO":[1,1,1,1,320,321,0,0,224,32,225,1,1,0],"FLAG":0,"BASE":18} Luminea 2 Outlet {"NAME":"Luminea","GPIO":[0,0,0,0,225,320,0,0,224,321,32,0,0,1],"FLAG":0,"BASE":18} Luminea NX-4458 {"NAME":"Luminea NX4458","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":65} Maxcio EOP03-EU {"NAME":"Maxcio EOP03-EU","GPIO":[0,0,0,0,225,321,0,0,224,288,32,0,322,0],"FLAG":0,"BASE":18} @@ -742,7 +792,9 @@ Teckin SS42 {"NAME":"Teckin SS42","GPIO":[0,0,0,0,320,321,0,0,2 Top-Max PS-1602 {"NAME":"PS-1602","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":29} Torchstar LITEdge 2-in-1 {"NAME":"LITEdge Plug","GPIO":[0,0,0,0,320,321,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} Treatlife Dimmer {"NAME":"DP10 Dimmer","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} -Ucomen PA-GEBA-01SWP {"NAME":"PA-GEBA-01SWP","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Ucomen {"NAME":"PA-GEBA-01SWP","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Ucomen {"NAME":"PA-GEH-01SW2","GPIO":[0,0,0,32,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} +WiOn Yard Stake {"NAME":"WiOn 50053","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} WOOX R4051 {"NAME":"WOOX R4051","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} WOOX R4052 {"NAME":"WOOX R4052","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Wyze {"NAME":"Wyze Plug Outdoor","GPIO":[0,0,0,0,0,576,0,0,0,0,0,224,320,0,0,320,0,0,0,0,0,2624,2656,2720,0,0,0,0,225,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} @@ -793,7 +845,7 @@ Arlec Smart {"NAME":"PC399HA","GPIO":[0,0,0,32,2720,2656,0,0,26 Arlec Smart 2.1A USB Charger {"NAME":"Arlec Single","GPIO":[0,0,0,0,321,0,0,0,224,0,64,0,0,0],"FLAG":0,"BASE":18} Arlec Smart PC189HA {"NAME":"Arlec Single","GPIO":[0,0,0,0,321,0,0,0,224,0,64,0,0,0],"FLAG":0,"BASE":18} Arlec Twin PC288HA {"NAME":"Arlec Twin","GPIO":[0,32,0,225,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} -Athom 16A {"NAME":"Athom PG01EU16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} +Athom 16A {"NAME":"Athom Power Monitoring Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,1],"FLAG":0,"BASE":18} Athom 16A AU {"NAME":"Athom PG05-IT16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} Athom 16A Brazil {"NAME":"Athom PG05-BR16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} Athom 16A Israel {"NAME":"Athom PG05-IL16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} @@ -828,10 +880,12 @@ Bakibo Mini {"NAME":"SM300","GPIO":[320,0,576,0,0,2720,0,0,2624 Bakibo TP22Y {"NAME":"Bakibo TP22Y","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52} Bardi 16A {"NAME":"BARDI","GPIO":[320,0,0,0,0,2720,0,0,224,32,2656,321,2624,0],"FLAG":0,"BASE":18} Bauhn ASPU-1019 {"NAME":"Bauhn Smart Pl","GPIO":[0,0,0,0,224,225,0,0,0,320,32,0,0,0],"FLAG":0,"BASE":18} +BAW {"NAME":"BAW TPSWIFI-10","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Be HiTech 16A {"NAME":"Be HiTech","GPIO":[0,0,0,288,0,2720,0,0,2624,32,2656,224,0],"FLAG":0,"BASE":18} Bearware 303492 3AC+2USB {"NAME":"Bearware 30349","GPIO":[0,320,0,32,225,226,0,0,227,224,544,0,0,0],"FLAG":0,"BASE":18} Bestek MRJ1011 {"NAME":"BestekMRJ1011","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} BlitzWolf 1200W Dual {"NAME":"BlitzWolf SHP3","GPIO":[320,0,321,0,225,2720,0,0,2624,33,2656,224,32,0],"FLAG":0,"BASE":45} +BlitzWolf 16A Dual {"NAME":"SHP7 v2","GPIO":[33,576,320,2624,2720,2656,0,0,32,321,224,0,225,0],"FLAG":0,"BASE":45} BlitzWolf BW-SHP10 {"NAME":"BW-SHP10","GPIO":[0,0,0,0,544,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SHP10-P {"NAME":"BW-SHP10 PM","GPIO":[0,3200,0,5056,576,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SHP2 {"NAME":"BlitzWolf SHP","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} @@ -840,7 +894,6 @@ BlitzWolf BW-SHP4 {"NAME":"BlitzWolf SHP","GPIO":[321,1,320,1,0,2720, BlitzWolf BW-SHP5 {"NAME":"SHP5","GPIO":[321,3072,320,3104,0,225,0,0,0,0,224,0,32,0],"FLAG":0,"BASE":18} BlitzWolf BW-SHP6 10A {"NAME":"BW-SHP6 10A","GPIO":[576,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} BlitzWolf BW-SHP6 15A {"NAME":"BlitzWolf SHP6","GPIO":[320,1,576,1,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45} -BlitzWolf BW-SHP7 {"NAME":"SHP7","GPIO":[32,576,321,2624,2720,2656,0,0,33,320,224,0,225,0],"FLAG":0,"BASE":45} BlitzWolf SHP1 {"NAME":"BlitzWolf-SHP1","GPIO":[320,0,321,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Blitzwolf SHP11 16A {"NAME":"BlitzWolf-SHP11","GPIO":[320,0,0,2624,0,2720,0,0,0,32,2656,224,0,0],"FLAG":0,"BASE":18} Bluemyth 16A {"NAME":"SWA11","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} @@ -870,6 +923,7 @@ Calex Powerplug UK {"NAME":"Calex UK Plug","GPIO":[0,0,0,0,320,321,0,0 CE Smart Home {"NAME":"LITESUN LA-WF7","GPIO":[0,320,0,32,2720,2656,0,0,2624,321,224,0,0,0],"FLAG":0,"BASE":18} CE Smart Home LA-WF3 {"NAME":"CE LA-WF3","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Cloudfree Runs Tasmota {"NAME":"CloudFree 1","GPIO":[1,1,320,1,1,1,0,0,1,32,1,224,1,0],"FLAG":0,"BASE":18} +CloudFree Smart Plug 2 {"NAME":"CloudFree P2","GPIO":[320,0,576,0,224,2720,0,0,2624,32,2656,0,0,0],"FLAG":0,"BASE":45} Conico SM-PW70 {"NAME":"Conico SM-PW70","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} Connect SmartHome Dual USB {"NAME":"CSH-PLGUSB","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":52} Connex CC-P1000 {"NAME":"Connex Smart T","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -910,9 +964,11 @@ Elehot 16A {"NAME":"ELEHOT AWP16L","GPIO":[0,0,320,0,0,2720,0, EleLight {"NAME":"EleLight PE1004T","GPIO":[0,0,0,0,288,289,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} EletecPro 2 {"NAME":"EletecPro-2","GPIO":[1,1,1,1,32,1,0,0,289,288,224,1,1,4704],"FLAG":0,"BASE":18} Emporia {"NAME":"Emporia EMS01","GPIO":[0,0,0,289,224,2720,0,0,2624,32,2656,288,0,0],"FLAG":0,"BASE":18} +Emporia 15A {"NAME":"Emporia EMS02","GPIO":[320,0,321,0,224,2720,0,0,2624,32,2656,0,0,0],"FLAG":0,"BASE":18} Ener-J {"NAME":"ENER-J SHA5264","GPIO":[32,0,0,0,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} Energeeks {"NAME":"EG-EW003MC","GPIO":[0,0,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":52} Energeeks 2 USB {"NAME":"EG-EW005MC","GPIO":[544,1,288,1,1,225,1,1,2592,1,224,1,32,0],"FLAG":0,"BASE":18} +Energizer {"NAME":"Energizer EIE3-1001-WHT","GPIO":[32,0,448,0,2688,2656,0,0,2624,450,224,0,449,0],"FLAG":0,"BASE":18} Energizer Smart Plug {"NAME":"Energizer Smart Plug","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Epicka {"NAME":"Epicka","GPIO":[1,1,1,1,321,320,0,0,224,32,1,1,1,4704],"FLAG":0,"BASE":18} Esicoo JSM-WF02 {"NAME":"Esicoo Plug","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -974,6 +1030,7 @@ Hama Basic 10A {"NAME":"Hama 176567","GPIO":[0,0,0,0,320,321,0,0,2 Hauppauge 01647 {"NAME":"SL-1642","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} HBN 13A {"NAME":"BNC-50/E75T","GPIO":[0,0,0,0,576,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} HBN BNC-60/U152T {"NAME":"BNC-60/U152T","GPIO":[0,0,0,0,320,0,1,1,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Heygo 02 {"NAME":"Heygo 02","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} HiHome WPP-10S1 {"NAME":"HIhome WPP-10S","GPIO":[320,0,576,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":49} HiHome WPP-10S2 {"NAME":"HiHome WPP-10S","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} HiHome WPP-16S {"NAME":"HIhome WPP-16S","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} @@ -1022,6 +1079,7 @@ Jules.V NX-SP203 {"NAME":"NX-SP203","GPIO":[288,0,0,0,32,2720,1,1,22 JuoYou 16A {"NAME":"Juoyou ZY-OYD","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} JVMAC-EU01 {"NAME":"JVMAC","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Kaforto KW-US-801 {"NAME":"Kaforto US-801","GPIO":[32,576,0,227,2720,2656,0,0,2624,225,224,226,0,0],"FLAG":0,"BASE":18} +Kauf esphome {"NAME":"KAUF Plug","GPIO":[576,0,320,0,224,2720,0,0,2624,32,2656,0,0,0],"FLAG":0,"BASE":18} Kimire S12 {"NAME":"Kimire S12","GPIO":[1,1,1,32,1,1,0,0,1,320,224,1,1,0],"FLAG":0,"BASE":18} King-Link KL-US-WF002 {"NAME":"Kinglink-plug","GPIO":[0,0,0,0,0,224,0,0,288,32,0,0,0,0],"FLAG":0,"BASE":18} Kisslink SP200 {"NAME":"Kisslink SP200","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} @@ -1048,6 +1106,7 @@ Lenovo SE-341A {"NAME":"Lenovo SE-341A","GPIO":[0,0,0,0,32,224,0,0 LESHP KS-501 {"NAME":"LESHP KS-501","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Lighting Arena {"NAME":"Lighting Arena Smart Plug","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Lloyd's {"NAME":"Lloyds LC-1193","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +Local Bytes (UK) {"NAME":"LocalBytes PM","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} LogiLink {"NAME":"LogilinkPA0199","GPIO":[0,0,0,64,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} LogiLink PA0200 {"NAME":"LogilinkPA0200","GPIO":[0,0,0,64,0,0,0,0,0,320,224,0,0,4896],"FLAG":0,"BASE":18} Lohas Nightlight + USB {"NAME":"Lohas LED Mini Plug","GPIO":[0,321,0,288,322,226,1,1,224,32,225,0,544,0],"FLAG":0,"BASE":18} @@ -1058,7 +1117,7 @@ Lumiman LM650 {"NAME":"Lumiman LM650","GPIO":[0,0,0,0,320,0,0,0,2 Luminea NX-4491 {"NAME":"Luminea NX-449","GPIO":[320,0,576,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Luminea NX-4541 {"NAME":"NX-4451","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":55} Luminea ZX-2820 {"NAME":"ZX2820-675","GPIO":[0,0,0,32,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":65} -Luminea ZX-2858 {"NAME":"Luminea SF-200","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} +Luminea ZX-2858 {"NAME":"ZX2858-675","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":65} Lunvon {"NAME":"Lunvon Smart Plug","GPIO":[32,0,0,0,0,0,288,224,0,0,0,0,0,0],"FLAG":0,"BASE":18} Martin Jerry V01 {"NAME":"MJ V01","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Martin Jerry XS-SSA01 {"NAME":"MJ_XS-SSA01","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -1094,11 +1153,12 @@ Nedis P110 {"NAME":"Nedis WIFIP110","GPIO":[32,0,0,0,2720,2656 Nedis P130 {"NAME":"WIFIP130FWT","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Nedis Schuko Type F 16A {"NAME":"WIFIP120FWT","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} NEO Coolcam 10A {"NAME":"Neo Coolcam 10","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} -NEO Coolcam 16A {"NAME":"Lonsonho NAS-WR07W-16A","GPIO":[32,0,0,0,0,0,1,1,0,320,224,0,0,1],"FLAG":0,"BASE":18} +NEO Coolcam 16A {"NAME":"NEO Coolcam NAS-WR07W-16A","GPIO":[32,0,0,0,2720,2656,1,1,2624,320,224,0,0,1],"FLAG":0,"BASE":18} NEO Coolcam NAS-WR01W {"NAME":"NAS-WR01W","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} NEO Coolcam NAS-WR01W 16A {"NAME":"Neo Coolcam 16","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} Nestler-matho {"NAME":"N-m 485-1","GPIO":[0,0,0,32,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} NETVIP XS-SSA01 {"NAME":"XS-SSA01","GPIO":[0,0,0,0,0,0,0,0,320,32,0,224,0,0],"FLAG":0,"BASE":18} +NGS Loop Track 16A {"NAME":"LOOP","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Nightlight and AC Outlet {"NAME":"SWN03","GPIO":[32,0,0,0,0,0,1,1,416,0,0,224,0,0],"FLAG":0,"BASE":18} Nishica SM-PW701I {"NAME":"SM-PW701I","GPIO":[1,1,1,1,1,1,1,1,224,288,32,1,1,1],"FLAG":0,"BASE":18} Nivian {"NAME":"Nivian Smart Socket","GPIO":[0,0,320,0,0,2688,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18} @@ -1154,6 +1214,7 @@ Shelly Plug US {"NAME":"Shelly Plug US","GPIO":[288,0,321,0,224,27 SilentNight {"NAME":"SilentNightPlug","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Silvergear Slimme Stekker {"NAME":"Silvergear SmartHomePlug","GPIO":[0,0,0,96,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} SimpleHome {"NAME":"SimpleHome","GPIO":[289,0,0,0,0,0,0,0,224,320,32,0,0,0],"FLAG":0,"BASE":1} +SimpleHome 2 USB {"NAME":"SimpleHome","GPIO":[289,0,0,0,2656,2624,0,0,224,2688,32,0,0,0],"FLAG":0,"BASE":1} Slitinto NX-SM110 {"NAME":"Slitinto SM110","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Slitinto NX-SM112 {"NAME":"NX-SM112","GPIO":[576,0,0,2624,0,2720,0,0,0,32,2656,224,0,0],"FLAG":0,"BASE":45} Slitinto NX-SM112 v2 {"NAME":"Slitinto NX SM","GPIO":[320,1,576,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} @@ -1163,13 +1224,16 @@ Slitinto NX-SP201 Mini 2 in 1 {"NAME":"Slitinto Dual ","GPIO":[576,0,0,2624,64, Slitinto NX-SP202 {"NAME":"Slitinto SP202","GPIO":[32,0,0,0,2720,2656,0,0,2624,288,225,224,65,0],"FLAG":0,"BASE":64} SM-PW701K {"NAME":"SM-PW701K","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Smaho {"NAME":"SMAHO WiFi P.","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} +Smart 15A {"NAME":"JH-G09U","GPIO":[0,0,0,0,224,32,0,0,288,0,0,0,0,0],"FLAG":0,"BASE":18} SmartDGM PP-W162 {"NAME":"SmartDGM Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} SmartGrade AC 5008 {"NAME":"SmartGrade AC","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} +SmartVU Home {"NAME":"SHWSP1","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52} Smitch 16A {"NAME":"Smitch SP0602","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Smitch 6A {"NAME":"Smitch SP0601","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Sonoff S20 {"NAME":"Sonoff S20","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":8} Sonoff S22 TH {"NAME":"Sonoff S22","GPIO":[32,1,0,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":4} Sonoff S26 {"NAME":"Sonoff S26","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":8} +Sonoff S26 R2 {"NAME":"Sonoff S26R2","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":8} Sonoff S31 {"NAME":"Sonoff S31","GPIO":[32,3072,0,3104,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":41} Sonoff S31 Lite {"NAME":"Sonoff S31","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":41} SP10 {"NAME":"Bilikay SP10","GPIO":[0,416,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -1183,16 +1247,18 @@ Steren {"NAME":"SHOME-135","GPIO":[0,288,0,32,2720,2656,0, STITCH {"NAME":"Stitch 27937","GPIO":[32,0,320,0,2688,2656,0,0,2624,0,224,0,321,0],"FLAG":0,"BASE":18} STITCH {"NAME":"Stitch 35511","GPIO":[320,0,321,0,0,2688,0,0,0,32,2656,224,2624,0],"FLAG":0,"BASE":18} STITCH 15A In-Line {"NAME":"Stitch 39047","GPIO":[0,288,0,32,2688,2656,0,0,2624,0,224,0,0,0],"FLAG":0,"BASE":18} +STITCH Mini 10A {"NAME":"STITCH 41730","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} SuperNight Dual {"NAME":"SuperNight Dua","GPIO":[1,32,1,224,2656,2688,0,0,225,2592,322,1,1,4704],"FLAG":0,"BASE":18} SWA1 {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} SWA1 FR {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} SWA1 UK {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} SWA11 16A {"NAME":"SWA11","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} -SWA5 {"NAME":"Lingan SWA5","GPIO":[320,0,0,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} +SWA5 {"NAME":"Linganzh SWA5","GPIO":[320,0,321,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} SWA9 {"NAME":"SWA9","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} SwissTone {"NAME":"SwissTone","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Sygonix SY-4276902 {"NAME":"SYGONIX","GPIO":[0,0,0,32,2688,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} Szshining {"NAME":"Szshining ITSP10-2","GPIO":[0,225,0,32,2720,2656,0,0,2624,0,224,0,0,0],"FLAG":0,"BASE":18} +Takida Smart Power {"NAME":"Takida Smart Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} Talo 10A {"NAME":"Talo smart plug","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} TanTan WP2 {"NAME":"TanTan WP2","GPIO":[321,320,576,1,224,2720,1,1,2624,32,2656,225,33,1],"FLAG":0,"BASE":18} TanTan WP3 {"NAME":"TanTan WP3","GPIO":[0,0,320,0,32,0,0,0,321,0,224,0,0,0],"FLAG":0,"BASE":18} @@ -1221,6 +1287,7 @@ Torchstar LITEdge Smart {"NAME":"LITEdge Plug","GPIO":[0,32,0,0,0,0,0,0,0,2 TOVA Dual {"NAME":"TOVA","GPIO":[320,0,0,2624,33,2720,0,0,0,32,2656,225,224,0],"FLAG":0,"BASE":45} TP20 {"NAME":"TP20","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} TP24 {"NAME":"TP24","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} +Treatlife Dimmable {"NAME":"DP20","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 21,2 | SO20 1 | SO54 1"} U10 Series {"NAME":"WIFI-Socket","GPIO":[1,32,1,1,1,1,1,1,1,320,224,1,1,4704],"FLAG":0,"BASE":18} Ultralink UL-P01W {"NAME":"UL-P01W","GPIO":[0,288,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} Upstone {"NAME":"UPSTONE","GPIO":[1,1,544,1,320,1,0,0,224,32,1,1,1,1],"FLAG":0,"BASE":18} @@ -1241,7 +1308,8 @@ WAZA JH-G01B {"NAME":"Teckin SP27","GPIO":[1,1,1,1,289,1,0,0,224 WAZA JH-G01E 10A {"NAME":"Waza JH-G01E","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} Waza JH-G01E 16A {"NAME":"Waza JH-G01E 2","GPIO":[0,0,0,0,0,0,0,0,32,288,224,0,0,4704],"FLAG":0,"BASE":18} Wily Electronics {"NAME":"VC Plug","GPIO":[544,0,0,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} -WiOn 50055 {"NAME":"WiOn","GPIO":[1,0,288,0,0,0,0,0,1,32,0,224,0,0],"FLAG":0,"BASE":17} +WiOn {"NAME":"WiOn","GPIO":[1,0,288,0,0,0,0,0,1,32,0,224,0,0],"FLAG":0,"BASE":17} +Wipro 16A {"NAME":"Wip-DSP1160","GPIO":[0,0,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":52} Wisdom ZY_ACU02 {"NAME":"ZY-ACU02","GPIO":[0,0,0,544,225,224,0,0,320,32,321,0,0,0],"FLAG":0,"BASE":18} WL-SC01 {"NAME":"WL-SC01","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":1} WOOX R4026 {"NAME":"WOOX R4026","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -1249,11 +1317,12 @@ WOOX R4785 {"NAME":"WOOXR4785","GPIO":[0,0,0,0,288,224,0,0,0,3 WOOX R5024 {"NAME":"WOOX5024","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} WP211 {"NAME":"YUNTAB WP211","GPIO":[320,0,576,0,225,0,0,0,0,33,0,224,32,0],"FLAG":0,"BASE":18} WP5 {"NAME":"WP5","GPIO":[321,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} +Wsiiroon {"NAME":"Wsiiroon Smart Plug","GPIO":[0,0,0,0,32,320,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} Wyze {"NAME":"WyzePlugWLPP1","GPIO":[0,0,0,0,0,320,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Wyze {"NAME":"Wyze Plug ESP32","GPIO":[0,0,0,0,0,576,0,0,0,0,0,32,224,0,0,320,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} Xenon {"NAME":"SM-PW702","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} -Xenon 10A {"NAME":"Cooligg","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,4736],"FLAG":0,"BASE":18} -Xiaomi IMILAB ZNCZ05CM {"NAME":"Mi Smart Plug","GPIO":[32,0,0,0,320,224,0,0,0,576,0,0,0,0],"FLAG":0,"BASE":18} +Xenon 10A {"NAME":"Cooligg","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Xiaomi IMILAB {"NAME":"Mi Smart Plug","GPIO":[32,0,0,0,320,224,0,0,0,576,0,0,0,0],"FLAG":0,"BASE":18} XS-A11 {"NAME":"THRUMM XS-A11","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} XS-A12 {"NAME":"XS-A12","GPIO":[416,0,418,0,417,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} XS-A14 {"NAME":"NETVIP XS-A14","GPIO":[416,0,417,0,0,32,0,0,418,224,0,0,0,0],"FLAG":0,"BASE":18} @@ -1276,6 +1345,7 @@ YX-DE01 {"NAME":"YX-DE01","GPIO":[0,32,0,0,0,0,0,0,0,320,22 YX-WS02 {"NAME":"Amysen YX-WS02","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,4704],"FLAG":0,"BASE":18} ZBR-001 {"NAME":"ZBR-001","GPIO":[32,1,1,1,2688,2656,0,0,2592,320,224,1,321,4704],"FLAG":0,"BASE":18} ZettaGuard {"NAME":"ZettaGuard S25","GPIO":[0,0,0,0,289,224,0,0,288,0,32,0,0,0],"FLAG":0,"BASE":18} +Zhilde Dual USB {"NAME":"ZLD-12USA-W","GPIO":[0,0,0,0,320,321,0,0,224,225,32,0,0,0],"FLAG":0,"BASE":18} ZooZee SA101 {"NAME":"ZooZee","GPIO":[321,1,320,1,1,1,0,0,1,32,1,224,1,0],"FLAG":0,"BASE":18} ZooZee SA102 {"NAME":"ZooZee","GPIO":[321,1,320,1,224,2688,0,0,2624,32,2656,1,1,0],"FLAG":0,"BASE":18} ZooZee SE131 {"NAME":"ZOOZEE_SF131","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} @@ -1289,6 +1359,7 @@ Acenx 3AC+3USB {"NAME":"ACENX 3-Outlet","GPIO":[320,291,290,289,0, AHRise 4+4AC+4USB {"NAME":"AHRise-083","GPIO":[0,0,0,0,320,32,0,0,225,224,226,227,0,0],"FLAG":0,"BASE":18} AHRise AHR-085 {"NAME":"AHRise AHR-085","GPIO":[0,0,0,0,32,320,0,0,225,226,224,0,0,0],"FLAG":0,"BASE":18} Aicliv 4AC 3USB {"NAME":"Aicliv WiFi","GPIO":[0,0,0,227,226,576,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} +Ailink 4AC 4USB {"NAME":"Ailink","GPIO":[288,321,0,289,256,32,0,0,258,257,259,0,228,0],"FLAG":0,"BASE":4} Anncoe 4AC 4USB {"NAME":"P-EU4U4S","GPIO":[288,0,0,0,226,227,0,0,0,0,225,224,0,0],"FLAG":0,"BASE":18} Annhome 3AC + 2USB {"NAME":"1200W WiFi SPS","GPIO":[259,0,0,0,321,288,0,0,224,32,225,226,260,0],"FLAG":0,"BASE":18} AOFO 3AC+4USB {"NAME":"AOFO","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,4704],"FLAG":0,"BASE":18} @@ -1304,7 +1375,7 @@ Bauhn ASPBU-1019 {"NAME":"Bauhn 3AC+3USB","GPIO":[0,544,0,0,225,224, BlitzWolf BW-SHP9 {"NAME":"BlitzWolf SHP9","GPIO":[576,1,0,1,0,226,0,0,224,32,225,227,0,0],"FLAG":0,"BASE":45} Brennenstuhl Connect Eco-Line {"NAME":"WS EL01 DE","GPIO":[34,33,0,32,224,225,0,0,288,0,0,289,576,0],"FLAG":0,"BASE":18} Brennenstuhl Connect Premium-Line {"NAME":"WS PL01 DE","GPIO":[34,33,0,32,224,225,0,0,288,0,35,289,576,0],"FLAG":0,"BASE":18} -BrilliantSmart 20691 Powerboard with USB Chargers {"NAME":"B_WiFi-4","GPIO":[320,0,0,321,256,32,0,0,258,257,259,0,228,4704],"FLAG":0,"BASE":18} +BrilliantSmart Powerboard with USB Chargers {"NAME":"B_WiFi-4","GPIO":[320,0,0,321,256,32,0,0,258,257,259,0,228,4704],"FLAG":0,"BASE":18} CE Smart Home {"NAME":"CE Power Strip","GPIO":[288,0,0,0,225,224,0,0,227,226,228,229,32,0],"FLAG":0,"BASE":18} CE Smart Home Garden Stake {"NAME":"CE Power Stake","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} CRST LTS-4G-W {"NAME":"CRST LTS-4G-W","GPIO":[0,0,0,0,227,0,0,0,225,226,224,0,0,0],"FLAG":0,"BASE":18} @@ -1314,7 +1385,6 @@ Digoo DG-PS01 {"NAME":"Digoo DG-PS01","GPIO":[0,320,0,32,226,225, Ener-J Extension Box with USB {"NAME":"ENER-J SHA5207","GPIO":[544,0,0,321,225,322,1,1,320,224,227,226,32,1],"FLAG":0,"BASE":18} Forrinx 3AC 4USB {"NAME":"SH-20","GPIO":[0,320,0,321,225,224,0,0,32,226,227,0,0,0],"FLAG":0,"BASE":18} Geekbes 4AC+4USB {"NAME":"Geekbes 4xStri","GPIO":[0,320,0,32,225,224,0,0,226,227,228,0,0,4704],"FLAG":0,"BASE":18} -Geeni Surge {"NAME":"Geeni GNCSW003","GPIO":[288,0,0,0,225,224,0,0,227,228,226,229,32,0],"FLAG":0,"BASE":18} Geeni Surge + Charge 2 USB {"NAME":"Geeni GN-SW023","GPIO":[288,0,0,0,225,224,0,0,226,227,228,0,32,0],"FLAG":0,"BASE":18} Geeni SURGE 6-Outlet Surge Protector {"NAME":"Geeni 6 Strip","GPIO":[320,0,0,0,225,224,0,0,227,228,226,229,32,0],"FLAG":0,"BASE":18} Geeni Surge Mini {"NAME":"Geeni-GN-SW004","GPIO":[320,0,0,32,0,0,0,0,225,224,226,0,0,1],"FLAG":0,"BASE":18} @@ -1342,6 +1412,7 @@ Konesky Type 1 {"NAME":"Konesky","GPIO":[0,0,0,0,228,225,0,0,227,3 Koogeek KLOE4 {"NAME":"Koogeek KLOE4","GPIO":[0,320,0,32,225,224,0,0,226,227,228,0,0,4704],"FLAG":0,"BASE":18} Larkkey 4AC 4USB {"NAME":"LARKKEY Strip","GPIO":[0,544,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} LeFun SK2 {"NAME":"LeFun SK2","GPIO":[0,0,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} +LITEdge Smart Power Strip {"NAME":"LITEEdge Power Strip","GPIO":[227,0,0,0,288,289,0,0,224,32,225,226,228,0],"FLAG":0,"BASE":18} Luminea 3AC+4USB 16A {"NAME":"Luminea-NX4473","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,0],"FLAG":0,"BASE":18} Maxcio ZLD-34EU-W {"NAME":"MAXCIO","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,4704],"FLAG":0,"BASE":18} Merkury Innovations SmartSurge {"NAME":"Merkury MI-SW001","GPIO":[288,0,289,0,228,32,0,0,225,224,226,0,227,0],"FLAG":0,"BASE":18} @@ -1411,7 +1482,7 @@ MoKo YX-L01C-E27 810lm {"NAME":"MOKO","GPIO":[32,0,0,0,3008,3040,0,0,0,0,0 muvit IO miobulb001 600lm {"NAME":"miobulb001","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,1],"FLAG":0,"BASE":18} Oobest ZN93028 11W {"NAME":"RGB Bulb 11W","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,4704],"FLAG":0,"BASE":18} SuperBrightLEDs 3W 70lm 12V {"NAME":"G4-RGB3W","GPIO":[0,0,0,0,417,0,0,0,418,0,416,0,0,0],"FLAG":0,"BASE":18} -V-Tac P45 4.5W 300lm {"NAME":"V-TAC VT-5154","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} +V-Tac P45 4.5W 300lm {"NAME":"V-TAC VT-5154","GPIO":[0,0,0,0,0,0,0,0,4065,0,4032,0,0,0],"FLAG":0,"BASE":18} Wipro Garnet NS7001 480lm {"NAME":"WiproSmartBulb","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} ``` @@ -1424,7 +1495,7 @@ Aoycocr JL81 5W 400lm {"NAME":"AoycocrJLB1","GPIO":[0,0,0,0,418,0,0,0,417 Aoycocr Q10CWM BR30 9W 720lm {"NAME":"AoycocrBR30","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,0],"FLAG":0,"BASE":18} Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Athom 15W 1400lm {"NAME":"Athom LB017W","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":1} +Athom 15W 1400lm {"NAME":"Athom LB017W","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":1,"CMND":"SO92 1 | DimmerRange 24,100"} Athom 4.5W 700lm {"NAME":"Athom LB10-5W-TAS","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Athom 7W 600lm {"NAME":"Athom LB017W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":1} Aunics 7W 600lm {"NAME":"Aunics RGBW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -1434,7 +1505,9 @@ Avatar ALS18L A60 800lm {"NAME":"Avatar E14 7W","GPIO":[0,0,0,0,417,416,0,0 B.K. Licht 5.5W 350lm {"NAME":"BKL1262","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} B.K. Licht 9W 806lm {"NAME":"BKL1253","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Bakibo TB95 9W 1000lm {"NAME":"Bakibo A19 9W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Bardi 9W 900lm {"NAME":"Bardi 9W RGBWW","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":20} BAZZ BR30 650lm {"NAME":"BAZZrgb","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Beghelli dom-E 14W 1400lm {"NAME":"Beghelli Smart Bulb","GPIO":[0,0,0,0,416,417,0,0,418,419,420,0,0,0],"FLAG":3,"BASE":18,"CMND":"SO37 13"} BlitzWolf w/ remote 850lm {"NAME":"BW-LT27","GPIO":[0,0,0,0,420,417,0,0,418,1088,419,416,0,0],"FLAG":0,"BASE":18} BNETA 8.5W 800lm {"NAME":"BNETA IO-WIFI60-E27P","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} BNETA 8.5W 800lm {"NAME":"OM60/RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -1464,7 +1537,7 @@ Feit Electric A19 800lm {"NAME":"FE-OM60-15K-AG","GPIO":[0,0,0,0,2944,2912, Feit Electric BR30 700lm {"NAME":"Feit BR30/RGBW","GPIO":[0,0,0,417,2944,2912,0,0,0,2976,416,0,0,0],"FLAG":0,"BASE":18} Feit Electric OM60/RGBW/CA/AG A19 800lm {"NAME":"OM60/RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} Feit OM60/RGBW/CA/AG(P) 9W 800lm {"NAME":"OM60/RGBW/CA/AG/P","GPIO":[0,0,0,0,2944,2912,0,0,416,2976,417,0,0,0],"FLAG":0,"BASE":18} -Fitop 10W {"NAME":"Fitop 10W RGBCW","GPIO":[0,0,0,0,0,0,0,0,0,4032,4064,0,0,0],"FLAG":0,"BASE":18} +Fitop 10W {"NAME":"Fitop 10W RGBCW","GPIO":[0,0,0,0,0,0,0,0,0,4032,4064,0,0,0],"FLAG":0,"BASE":18,"CMND":"SetOption37 6"} Fitop 9W {"NAME":"E27RGBCCT9w","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,1],"FLAG":0,"BASE":18} Fulighture 9W 810lm {"NAME":"Fulighture 9W","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Geeni Prisma 10W 1050lm {"NAME":"Geeni Prisma 1050 RGB","GPIO":[0,0,0,0,2944,2912,0,416,417,2976,0,0,0,0],"FLAG":0,"BASE":18} @@ -1483,7 +1556,8 @@ Infray 9W 900LM {"NAME":"InfrayRGBCCT","GPIO":[0,0,0,0,416,419,0,0, iQtech 9W 800lm {"NAME":"iQ-Tech RGBCCT 9W 800LM","GPIO":[0,0,0,0,4032,0,0,0,0,0,4065,0,0,0],"FLAG":0,"BASE":18} Jeeo TF-QPZ13 800lm {"NAME":"Jeeo","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} Julun JL-021 5W Candle {"NAME":"E14 RGBCCT","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} -KHSUIN BR30 13W 1300lm {"NAME":"KHSUIN","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Kauf esphome 10W {"NAME":"Kauf Bulb","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +KHSUIN BR30 13W 1300lm {"NAME":"KHSUIN 13W BR30","GPIO":[0,0,0,0,416,420,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} Kogan 10W 1050lm {"NAME":"Kogan RGB+CCT","GPIO":[1,1,1,0,416,419,1,1,417,452,418,1,1,1],"FLAG":0,"BASE":18} Kohree 600lm {"NAME":"Kohree VHP560","GPIO":[0,0,0,0,416,420,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} Lasco 9W 700lm {"NAME":"Lasco 7W","GPIO":[0,0,0,0,2912,416,0,0,0,0,2944,0,0,0],"FLAG":0,"BASE":1} @@ -1519,6 +1593,7 @@ LVWIT BR30 8.5W 650lm {"NAME":"LVWIT BR30 8.5W","GPIO":[0,0,0,0,416,419,0 LVWIT G45 5W 470Lm {"NAME":"LVWIT E14 5W G45 RGBWCCT","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Lyhope 7W 650lm {"NAME":"Lyhope 014BB06","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} MagicHome 7W {"NAME":"MagicHome E27","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Makion 7W 600lm {"NAME":"Makion Smart LED Bulb","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio 5W 450lm Candle {"NAME":"MiraBellaGenio","GPIO":[0,0,0,0,0,0,0,0,4068,0,4032,0,0,0],"FLAG":0,"BASE":18} Moes 9W 800lm {"NAME":"Moes 9w","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Nishica JBT 9W 806lm {"NAME":"Nishica","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} @@ -1542,6 +1617,7 @@ Powertech SL225X 800lm {"NAME":"Jaycar SL225X","GPIO":[0,0,0,0,416,419,0,0 Qualitel ALS08L 1100lm {"NAME":"Qualitel ALS08","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Reafoo A26 9W {"NAME":"ReaFooE26","GPIO":[0,0,0,0,420,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18} Reafoo A27 9W 810lm {"NAME":"ReaFooE27","GPIO":[0,0,0,0,420,419,0,0,416,0,418,417,0,0],"FLAG":0,"BASE":18} +Ruihai 9W 800lm {"NAME":"Ruihai SB50","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} RYE 5W 450LM Candle {"NAME":"RYE Candlebra","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Saudio A19 7W 700lm {"NAME":"X002BU0DOL","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Sealight A19 9W 810lm {"NAME":"DGO/SEASTAR","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} @@ -1558,6 +1634,7 @@ Steren 10W 800lm {"NAME":"Steren_SHOME-120_RGBCCT","GPIO":[0,0,0,0,4 Sunco G25 5W 450lm {"NAME":"Sunco G25","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Sunco PAR20 5W 400lm {"NAME":"Sunco PAR20","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Sunco PAR38 13W 1050lm {"NAME":"Sunco PAR38 RGBCCT","GPIO":[0,0,0,0,417,416,0,0,419,418,420,0,0,0],"FLAG":0,"BASE":18} +Sunlit Smart A60 10W 810lm {"NAME":"Sunlit A60","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO37 31"} Techlux A19 9W 806lm {"NAME":"TECHLUX A19 RGBCW 806lm 9w","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Teckin SB50 v3 A19 800lm {"NAME":"Teckin SB50v3","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Teckin SB53 1300lm {"NAME":"Teckin SB53","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -1632,8 +1709,8 @@ Fulighture RGBW 15W {"NAME":"Fulighture RGBW 15W","GPIO":[0,0,0,0,0,0,0 Garsent 10W {"NAME":"Garsent 10W RGBW-Bulb","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,4704],"FLAG":0,"BASE":18} Geeni Prisma Drop BR30 700lm {"NAME":"GN-BW906-999","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18} Generic GU10 5W 450lm {"NAME":"RGBCW GU10","GPIO":[0,1,0,1,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":3} -Gosund 800lm {"NAME":"Gosund WB4","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,420,0],"FLAG":0,"BASE":18} Gosund 8W 800lm {"NAME":"Gosund RGBW 8W","GPIO":[0,0,0,0,420,419,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} +Gosund NiteBird 8W 800lm {"NAME":"Gosund WB4","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,420,0],"FLAG":0,"BASE":18} Gosund WB3 8W 800lm {"NAME":"Gosund WB3","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} Hama 10W 1050lm {"NAME":"Hama Bulb RGBW","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18} Hama 10W 806lm {"NAME":"Hama Smart WiF","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} @@ -1642,6 +1719,7 @@ Hiiten A19 7W 650lm {"NAME":"Hiiten Bulb","GPIO":[416,0,0,0,2912,417,0, Hikenri 7W 640lm {"NAME":"HIKENRI E27 RGB","GPIO":[32,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Hombli 4.5W 380lm Candle {"NAME":"Hombli E14 RGB","GPIO":[0,0,0,0,2944,2912,0,0,0,2976,416,0,0,0],"FLAG":0,"BASE":18} Hykker SL-0492 810lm {"NAME":"Hykker RBGW 9W","GPIO":[0,0,0,0,0,419,0,0,416,0,418,417,0,0],"FLAG":0,"BASE":18} +iGET Security {"NAME":"iGET DP23","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,420,0],"FLAG":0,"BASE":18} Jetstream 9W 800lm {"NAME":"Jetstream MA19CL","GPIO":[0,0,0,0,416,0,0,0,2944,2976,2912,0,0,0],"FLAG":0,"BASE":18} Kainsy 600lm {"NAME":"KAINSY","GPIO":[32,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27} Kkmoon 9W 800lm {"NAME":"KKMOON V21","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} @@ -1651,6 +1729,8 @@ Kogan 4.5W 330lm 110 {"NAME":"Kogan_GU10","GPIO":[0,0,0,0,418,419,0,0,41 Kogan Ambient Candle {"NAME":"Kogan_E14","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Kuled 800lm {"NAME":"KULED 60W RGB","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,4704],"FLAG":0,"BASE":18} Laideyi 7W {"NAME":"7W-E14-RGBW-La","GPIO":[0,0,0,0,417,416,0,0,418,0,419,0,0,0],"FLAG":0,"BASE":18} +Lanberg 9W {"NAME":"Lanberg E27 9W RGBW","GPIO":[0,0,0,0,1,419,0,0,416,0,418,417,0,0],"FLAG":0,"BASE":18} +Laser 5W 430lm {"NAME":"LaserSmartHomeGU10","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} LE LampUX BR30 9.5W 750lm {"NAME":"LE RGBCCT 9.5W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} LeCardio 10W 980lm {"NAME":"LeCardio RGBW","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} LEDLite 10W 800lm {"NAME":"LEDLite","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -1700,7 +1780,6 @@ Nedis 6W 470lm {"NAME":"nedis Bulb","GPIO":[0,0,0,0,416,419,0,0,41 Nedis A60 800lm {"NAME":"Nedis RGBW","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,4704],"FLAG":0,"BASE":18} Nedis C10 350lm {"NAME":"Nedis WIFILC10","GPIO":[0,0,0,0,418,416,0,0,419,417,420,0,0,4704],"FLAG":0,"BASE":18} Nedis PAR16 330lm {"NAME":"Nedis GU10","GPIO":[0,0,0,0,418,416,0,0,419,417,420,0,0,0],"FLAG":0,"BASE":18} -NiteBird TT-WB4 800lm {"NAME":"NiteBird TT-WB","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} Novostella UT55506 10W 1050lm {"NAME":"Novostella 10W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Onforu 7W 700lm {"NAME":"Onforu RGBW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Orbecco 5W 400lm {"NAME":"Orbecco Bulb","GPIO":[0,0,0,0,0,0,0,0,3008,0,3040,0,0,0],"FLAG":0,"BASE":27} @@ -1710,6 +1789,7 @@ REPSN G45 5W 500lm {"NAME":"REPSN RGBW E14","GPIO":[0,0,0,0,0,0,0,0,40 Riversong Juno 10W {"NAME":"Juno10","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18} Rogoei EBE-QPZ04 6.5W 450lm {"NAME":"EBE-QPZ04","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18} Saudio 7W 700lm {"NAME":"X002BU0DOL","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Shelly Duo RGBW 9W 800lm {"NAME":"Shelly Duo RGBW","GPIO":[0,0,0,0,0,419,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18} Smart 810lm {"NAME":"OOOLED 60W RGB","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,4704],"FLAG":0,"BASE":18} SmartLED 9W 400lm {"NAME":"SmartLED RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Smartyfi 600lm {"NAME":"SMARTYFI 9W","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} @@ -1733,12 +1813,14 @@ Utorch LE7 600lm {"NAME":"Utorch LE7","GPIO":[0,0,0,0,0,417,0,0,418, V-Tac A60 11W 1055lm {"NAME":"V-TAC LED A60 ","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18} V-Tac A66 15W 1300lm {"NAME":"V-TAC VT-5117","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18} V-TAC A95 18W 1350lm {"NAME":"V-TAC VT-5021","GPIO":[0,0,0,0,416,420,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} +V-TAC G45 4.5W 300lm {"NAME":"V-TAC VT-5124","GPIO":[0,0,0,0,0,0,0,0,4065,0,4032,0,0,0],"FLAG":0,"BASE":18} Wallfire WF-05 {"NAME":"Wallfire E27","GPIO":[32,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Wixann C37 5W 450lm {"NAME":"WIXANNE12","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Woopower 460lm {"NAME":"Woopower E14","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} +WOOX 4W 350lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} WOOX R4553 650lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} -WOOX R5076 4W 350lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} WOOX R5077 {"NAME":"WOOX R5077","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} +Wyze Bulb Color {"NAME":"Wyze Bulb Color","GPIO":[0,0,0,0,0,0,0,0,0,418,416,419,0,0,0,0,0,0,0,224,0,0,417,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} Zemismart 5W {"NAME":"Zemismart_GU10","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Zemismart 5W 480lm {"NAME":"Zemismart-E14-RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Zemismart A19 10W {"NAME":"Zemism_E27_A19","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} @@ -1748,6 +1830,7 @@ Zilotek A19 800lm {"NAME":"Zilotek RGBW","GPIO":[0,0,0,0,2912,416,0,0 ## Relay Board ``` Anmbest 2 Channel Inching Self-locking Switch Module {"NAME":"Generic","GPIO":[32,1,1,1,1,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} +Armtronix Quad {"NAME":"Armtronix Wifi Four Relay Board","GPIO":[1,0,0,0,224,1,0,0,225,226,227,0,1,0],"FLAG":0,"BASE":7} Athom 1Ch Inching/Self-locking {"NAME":"Athom R01","GPIO":[1,1,1,1,1,224,1,1,1,1,1,1,576,0],"FLAG":0,"BASE":18} Athom 8Ch Inching/Self-locking 10A {"NAME":"Athom R08","GPIO":[229,1,1,1,230,231,1,1,226,227,225,228,224,0],"FLAG":0,"BASE":18} Claudy 5V {"NAME":"CLAUDY","GPIO":[0,0,225,0,0,0,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} @@ -1759,28 +1842,39 @@ Electrodragon Board SPDT {"NAME":"ED Relay Board","GPIO":[1,1,1,1,1,1,0,0,22 Electrodragon ESP8266 {"NAME":"ElectroDragon","GPIO":[33,1,32,1,1,1,0,0,225,224,1,1,288,4704],"FLAG":0,"BASE":15} ESP-01 Relay V4.0 {"NAME":"ESP01v4","GPIO":[256,320,0,32,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} ESP-01S 5V Relay Module V1.0 {"NAME":"ESP-01S Relay","GPIO":[256,288,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} -ESP-12F 2 Channel {"NAME":"ESP12F_Relay_X2","GPIO":[1,1,1,1,224,225,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} -ESP-12F 4 Channel {"NAME":"ESP12F_Relay_X4","GPIO":[1,1,1,1,1,1,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18} -ESP-12F 8 Channel {"NAME":"ESP12F_Relay_X8","GPIO":[229,1,1,1,230,231,0,0,226,227,225,228,224,1],"FLAG":0,"BASE":18} -ESP12F 220V 10A 7V-30V DC {"NAME":"Yunshan 10A","GPIO":[32,1,288,1,224,161,0,0,225,0,0,0,0,0],"FLAG":0,"BASE":18} +ESP-12F 5V/7-28V 1 Channel 30A {"NAME":"Aideepen","GPIO":[0,0,0,0,0,288,0,0,0,0,0,0,224,0],"FLAG":0,"BASE":18} +ESP-12F 5V/7-28V 4 Channel 30A {"NAME":"ESP12F_Relay_30A_X4","GPIO":[1,1,1,1,32,1,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18} +ESP-12F 5V/7-28V 8 Channel {"NAME":"ESP12F_Relay_X8","GPIO":[229,1,1,1,230,231,0,0,226,227,225,228,224,1],"FLAG":0,"BASE":18} +ESP-12F 5V/7-30V/220V 4 Channel {"NAME":"ESP12F_Relay_X4","GPIO":[1,1,320,1,1,321,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18} +ESP-12F 5V/8-80V 2 Channel {"NAME":"LC-Relay-ESP12-2R-D8","GPIO":[1,1,1,1,224,225,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} +ESP32 4 Channel {"NAME":"RobotDyn ESP32R4","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,224,225,1,227,226,32,33,34,35],"FLAG":0,"BASE":1} eWeLink PSF-B04 5V 7-32V 4 Channel {"NAME":"eWeLink 4CH","GPIO":[160,0,0,0,226,225,161,162,224,288,163,227,0,0],"FLAG":0,"BASE":18} Geekcreit 5V DIY 4 Channel Jog Inching Self-Locking {"NAME":"Geekcreit-4ch","GPIO":[160,0,0,0,226,225,161,162,224,288,163,227,0,0],"FLAG":0,"BASE":18} Geekcreit Module 220V 10A {"NAME":"DIY ESP8266 Re","GPIO":[0,0,544,0,224,32,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} HW-622 ESP8266 {"NAME":"HW-622","GPIO":[0,0,544,0,224,32,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Kincony IR+RF 4 Channel {"NAME":"KC868-A4","GPIO":[32,0,227,0,224,225,0,0,0,1312,1,226,0,0,480,1152,0,1120,1056,1088,0,1,1,1,0,0,0,0,4706,4707,4704,4705,1,0,0,1],"FLAG":0,"BASE":1} LC Technology 12V 4 Channel {"NAME":"LC Technology 4CH Relay","GPIO":[224,0,225,0,226,227,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} LC Technology 5V 2 Channel {"NAME":"LC-ESP01-2R-5V","GPIO":[0,3200,0,3232,0,0,0,0,224,225,0,0,0,0],"FLAG":0,"BASE":18} LC Technology 5V 4 Channel {"NAME":"LC-Tech_4CH ","GPIO":[288,1,32,1,0,0,0,0,224,225,226,227,0,0],"FLAG":0,"BASE":18} -LC Technology AC/DC 1 Channel ESP-12F Dev Board {"NAME":"LC-ESP12-1R-MV","GPIO":[1,1,544,1,1,224,1,1,1,1,1,1,321,1],"FLAG":0,"BASE":18} -LC Technology DC8V-80V/5V 1 Channel ESP-12F Dev Board {"NAME":"LC Relay-ESP12-1R-D8","GPIO":[1,1,544,1,1,224,1,1,1,1,1,1,321,1],"FLAG":0,"BASE":18} +LC Technology 5V/8-80V 1 Channel {"NAME":"LC-Relay-ESP12-1R-MV","GPIO":[1,1,544,1,1,224,1,1,1,1,1,1,321,1],"FLAG":0,"BASE":18} +LC Technology 5V/8-80V 1 Channel {"NAME":"LC-Relay-ESP12-1R-D8","GPIO":[1,1,544,1,1,224,1,1,1,1,1,1,321,1],"FLAG":0,"BASE":18} LC Technology ESP8266 5V {"NAME":"ESP8266-01S","GPIO":[224,3200,0,3232,0,0,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18} LinkNode R4 {"NAME":"LinkNode R4","GPIO":[0,0,0,0,0,0,0,0,224,225,226,0,227,0],"FLAG":0,"BASE":18} LinkNode R8 {"NAME":"LinkNode R8","GPIO":[0,0,0,0,228,229,0,231,226,227,225,230,224,0],"FLAG":0,"BASE":18} Mhcozy 5V {"NAME":"Portail","GPIO":[160,0,0,0,0,0,0,0,224,320,0,0,0,4704],"FLAG":0,"BASE":18} -Sinilink DC6V-36V Module {"NAME":"Sinilink XY-WF5V","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} -Sinilink MOS {"NAME":"Sinilink MOS","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} +Sinilink DC5V Module {"NAME":"Sinilink XY-WF5V","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} +Sinilink DC6-36V Module {"NAME":"Sinilink XY-WF5V","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} +Sinilink MOS {"NAME":"Sinilink MOS","GPIO":[0,0,576,0,224,1,0,0,32,288,0,0,0,0],"FLAG":0,"BASE":18} Sonoff 1 Channel Inching/Self-Locking {"NAME":"1 Channel","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":12} Sonoff RE5V1C 5V Inching/Selflock {"NAME":"Sonoff RE5V1C","GPIO":[32,1,1,1,1,1,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Sonoff SV {"NAME":"Sonoff SV","GPIO":[32,1,0,1,1,1,0,0,224,320,1,0,0,4704],"FLAG":0,"BASE":3} +Yunshan 7-30V 10A {"NAME":"Yunshan 10A","GPIO":[32,1,288,1,224,161,0,0,225,0,0,0,0,0],"FLAG":0,"BASE":18} +``` + +## Relay Module +``` +PPA Contatto Wi-Fi {"NAME":"PPA Contatto","GPIO":[0,0,32,0,224,162,0,0,288,225,0,0,0,0],"FLAG":0,"BASE":18} +Shelly Plus 1 {"NAME":"Shelly Plus 1 ","GPIO":[0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} ``` ## Siren @@ -1791,7 +1885,7 @@ NEO Coolcam Temperature and Humidity 3in1 Alarm {"NAME":"Neo Siren 3in1","GPIO" ## Smoke Sensor ``` -Nedis Smoke Detector {"NAME":"Nedis Smoke","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Nedis Smoke Detector {"NAME":"Nedis WIFIDS10WT","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Smoke Alarm {"NAME":"YG400A","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} VisorTech {"NAME":"VisorTech RWM-200","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} ``` @@ -1807,7 +1901,7 @@ SmartBase E0260 {"NAME":"SmartBaseE0260","GPIO":[0,0,0,0,320,0,0,0, ## Switch ``` 3 Way Smart Light {"NAME":"Nexete KS-602F 3-Way","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} -3A Smart Home {"NAME":"3A Smart Home ","GPIO":[288,0,291,33,225,34,0,0,32,224,290,226,289,0],"FLAG":0,"BASE":18} +3A Smart Home {"NAME":"3A Smart Home ","GPIO":[544,0,290,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} AGL 2 Gang {"NAME":"AGL WiFi 02","GPIO":[0,0,544,0,0,33,0,0,225,224,0,0,32,0],"FLAG":0,"BASE":18} AGL 3 Gang {"NAME":"AGL WiFi 03","GPIO":[0,0,544,0,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":18} Aoycocr SW1 {"NAME":"Aoycocr SW1","GPIO":[576,1,321,1,1,1,1,1,320,32,1,224,1,1],"FLAG":0,"BASE":18} @@ -1824,13 +1918,13 @@ Athom 4 Gang Touch {"NAME":"Athom SW03-TAS-4US","GPIO":[576,0,0,33,225 Athom 4 Gang Touch {"NAME":"Athom SW11-TAS-4EU","GPIO":[576,0,0,33,225,34,0,0,32,224,227,226,35,0],"FLAG":0,"BASE":18} Athom US Key Switch 1 Gang {"NAME":"Athom SW13","GPIO":[576,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} Avatto 1 Gang {"NAME":"AVATTO 1 Gang","GPIO":[0,320,576,0,0,32,0,0,320,0,0,224,0,0],"FLAG":0,"BASE":18} -Avatto 2 Gang {"NAME":"Avatto Wifi - ","GPIO":[0,0,288,0,0,32,0,0,224,225,0,0,33,0],"FLAG":0,"BASE":18} -Avatto 3 Gang {"NAME":"AVATTO 3 Gang","GPIO":[0,321,576,34,226,33,0,0,320,224,322,225,32,0],"FLAG":0,"BASE":18} +Avatto 2 Gang {"NAME":"Avatto KS-601","GPIO":[0,0,288,0,0,32,0,0,224,225,0,0,33,0],"FLAG":0,"BASE":18} +Avatto 3 Gang {"NAME":"AVATTO 2 Gang","GPIO":[0,0,576,32,225,0,0,0,321,224,320,0,33,0],"FLAG":0,"BASE":18} Avatto 4 Gang {"NAME":"AVATTO 4 Gang","GPIO":[576,0,0,32,224,33,0,0,34,226,227,225,35,0],"FLAG":0,"BASE":18} Bakeey 10A RGB Scene {"NAME":"RGB Switch","GPIO":[0,0,320,0,417,418,0,0,289,32,416,224,0,0],"FLAG":0,"BASE":18} -Bardi Smart Wallswitch 1 {"NAME":"Bardi 1 Gang","GPIO":[321,320,544,0,0,32,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} -Bardi Smart Wallswitch 2 {"NAME":"BARDI 2 Gang","GPIO":[320,0,544,33,225,0,0,0,288,224,321,0,32,0],"FLAG":0,"BASE":18} -Bardi Smart Wallswitch 3 {"NAME":"BARDI 3 Gang","GPIO":[320,321,544,34,226,33,0,0,288,224,322,225,32,0],"FLAG":0,"BASE":18} +Bardi Smart Wallswitch 1 Gang {"NAME":"Bardi 1 Gang","GPIO":[321,320,544,0,0,32,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} +Bardi Smart Wallswitch 2 Gang {"NAME":"BARDI 2 Gang","GPIO":[320,0,544,33,225,0,0,0,288,224,321,0,32,0],"FLAG":0,"BASE":18} +Bardi Smart Wallswitch 3 Gang {"NAME":"BARDI 3 Gang","GPIO":[320,321,544,34,226,33,0,0,288,224,322,225,32,0],"FLAG":0,"BASE":18} BAZZ SWTCHWFW1 {"NAME":"BAZZ KS-602S","GPIO":[32,0,0,0,0,0,224,288,256,320,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SS3 1 Gang {"NAME":"BW-SS3-1G-EU","GPIO":[288,0,0,32,0,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SS3 2 Gang {"NAME":"BW-SS3-2G-EU","GPIO":[544,1,1,1,225,33,1,1,32,224,1,1,1,1],"FLAG":0,"BASE":18} @@ -1858,8 +1952,9 @@ DS-121 2 Gang No Neutral {"NAME":"2 Gang Switch","GPIO":[576,321,0,32,225,33 DS-121 4 Gang No Neutral {"NAME":"2 Gang Switch","GPIO":[576,321,0,32,225,33,0,0,0,224,320,0,0,0],"FLAG":0,"BASE":18} Eachen CD303 3 Gang {"NAME":"ID Components","GPIO":[544,289,0,162,224,161,0,0,160,225,290,226,288,1],"FLAG":0,"BASE":18} Eachen SWT-2Gang {"NAME":"ID Components","GPIO":[544,1,1,1,1,161,1,1,160,224,289,225,288,1],"FLAG":0,"BASE":18} +Earda 3-Way {"NAME":"ESW-1WAA-US","GPIO":[160,0,0,0,320,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18} Enjowi WF-SK301 {"NAME":"Tuya 3 Channel","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,544,0],"FLAG":0,"BASE":18} -Esmlfe 3 Gang {"NAME":"Esmlfe DS-122","GPIO":[321,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":18} +Esooli 2 Gang 1 Way {"NAME":"Esooli 2 gang","GPIO":[0,288,0,32,33,0,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":1} Etekcity ESWL01 {"NAME":"EtekCityESWL01","GPIO":[0,1,0,1,288,289,0,0,0,224,96,0,0,4704],"FLAG":0,"BASE":18} Etekcity ESWL03 3-way {"NAME":"Etekcity 3Way","GPIO":[0,0,0,0,226,256,0,0,192,225,161,0,0,0],"FLAG":0,"BASE":18} Eva Logik 3-Way {"NAME":"WF30 Switch","GPIO":[0,0,0,0,33,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} @@ -1879,10 +1974,9 @@ Girier RF433 3 Gang No Neutral {"NAME":"W603","GPIO":[0,0,0,0,226,33,0,0,32,224 GoKlug Glass Touch 1 Gang {"NAME":"GoKlug 1x","GPIO":[320,321,0,0,0,160,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} GoKlug Glass Touch 2 Gang {"NAME":"GoKlug 2x","GPIO":[576,0,0,193,224,0,0,0,320,225,321,0,192,1],"FLAG":0,"BASE":18} Gosund 2 Gang {"NAME":"GosundSW9","GPIO":[160,0,0,0,0,161,0,0,225,288,224,0,0,0],"FLAG":0,"BASE":18} -Gosund KS-602S {"NAME":"Gosund KS-602S-v2","GPIO":[32,0,321,0,0,0,0,0,0,0,224,0,288,0],"FLAG":0,"BASE":18} +Gosund Single Pole {"NAME":"Gosund SW1","GPIO":[32,0,321,0,0,0,0,0,0,0,224,0,320,0],"FLAG":0,"BASE":18} Gosund Single Pole {"NAME":"Gosund SW5","GPIO":[32,0,320,0,0,0,0,0,0,0,224,0,576,0],"FLAG":0,"BASE":18} -Gosund SW1 {"NAME":"Gosund SW1","GPIO":[32,0,321,0,0,0,0,0,0,0,224,0,320,0],"FLAG":0,"BASE":18} -Gosund SW6 3-Way {"NAME":"Gosund SW6","GPIO":[32,0,320,0,160,0,0,0,0,0,225,224,576,0],"FLAG":0,"BASE":18} +Gosund SW6 3-Way {"NAME":"Gosund SW6","GPIO":[161,0,320,0,160,0,0,0,0,226,225,224,576,0],"FLAG":0,"BASE":18} Hama Flush-mounted 2 Gang {"NAME":"Hama WiFiTouch","GPIO":[544,0,0,0,0,33,0,0,32,225,0,224,0,0],"FLAG":0,"BASE":45} HBN Wall-Mounted Timer {"NAME":"HBN Timer Switch","GPIO":[0,0,0,0,290,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Innens 1 Gang 1 Way {"NAME":"Innens 1 Gang 1 Way","GPIO":[0,0,0,32,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18} @@ -1890,7 +1984,7 @@ Innens RF433 2 Gang 1 Way {"NAME":"Innens Light Switch 2G","GPIO":[0,0,289,0, Jinvoo SM-SW101-1 {"NAME":"SM-SW101-1","GPIO":[288,0,0,33,0,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-2 {"NAME":"SM-SW101-2","GPIO":[288,0,0,33,225,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-3 {"NAME":"Jinvoo Wall Sw","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} -KingArt 1 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +KingArt 1 Gang {"NAME":"KING-L1","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} KMC 70008 {"NAME":"KMC 70008","GPIO":[32,1,1,0,0,1,0,0,0,320,224,1,1,0],"FLAG":0,"BASE":18} Koaanw CD302-EU-1 {"NAME":"CD302-EU-1","GPIO":[0,0,0,0,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Koaanw CD302-EU-2 {"NAME":"CD302-EU-2","GPIO":[544,0,0,0,0,33,0,0,32,224,321,225,320,0],"FLAG":0,"BASE":18} @@ -1909,9 +2003,11 @@ LCARE Modular 2 Gang {"NAME":"2SW1-In","GPIO":[32,1,1,1,0,225,33,0,224,3 LerLink 1 Gang No Neutral {"NAME":"LerLink X801-L","GPIO":[0,0,0,0,32,0,0,0,224,320,0,0,0,1],"FLAG":0,"BASE":18} Lerlink 2 Gang {"NAME":"Lerlink X802A","GPIO":[0,0,0,33,32,0,0,0,224,288,225,0,0,0],"FLAG":0,"BASE":18} LerLink 2 Gang No Neutral {"NAME":"Lonsonho 2gang","GPIO":[0,0,0,33,32,0,0,0,224,288,225,0,0,0],"FLAG":0,"BASE":18} -Lerlink 3 Gang {"NAME":"X803A","GPIO":[0,0,320,33,32,34,0,0,224,0,225,226,0,0],"FLAG":0,"BASE":18} +Lerlink 3 Gang {"NAME":"X803A","GPIO":[0,0,0,33,32,34,0,0,224,259,225,226,288,0],"FLAG":0,"BASE":18} +Lerlink 3 Gang {"NAME":"X803A","GPIO":[0,0,0,33,32,34,0,0,224,288,225,226,0,0],"FLAG":0,"BASE":18} Lerlink 3 Gang No Neutral {"NAME":"X803K-L 3 Gang","GPIO":[0,0,320,0,32,34,33,0,224,0,225,226,0,0],"FLAG":0,"BASE":18} Lightstory WT02S {"NAME":"WT02S","GPIO":[0,0,0,0,321,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":50} +Linkind 2-Way Single Pole {"NAME":"Linkind WS240010008","GPIO":[0,0,0,0,0,224,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,576,321,0,0,0,0,0,33,32,0,0,0,0,0,0],"FLAG":0,"BASE":1} Lonsonho SK3-01 {"NAME":"Tuya 1 Channel","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} Lonsonho SK3-02 {"NAME":"Tuya 2 Channel","GPIO":[0,0,0,0,225,0,0,0,32,224,33,0,288,0],"FLAG":0,"BASE":18} Lonsonho SK3-03 {"NAME":"Tuya 3-ch v2","GPIO":[544,322,0,33,225,34,0,0,32,224,321,226,320,0],"FLAG":0,"BASE":18} @@ -1926,7 +2022,12 @@ Martin Jerry S01 15A {"NAME":"MJ-S01 Switch","GPIO":[0,0,0,0,320,321,0,0 Martin Jerry ST01 3 Way {"NAME":"MJ 3Way Switch","GPIO":[1,1,1,1,288,289,0,0,224,160,544,1,0,0],"FLAG":0,"BASE":18} Merkury MI-WW107-199W {"NAME":"MI-WW107-199W","GPIO":[288,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} Micmi K38 {"NAME":"KS-605","GPIO":[32,0,0,0,0,0,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18} +Milfra {"NAME":"Milfra KS-602H","GPIO":[32,0,0,0,0,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":18} +Milfra 1 Gang {"NAME":"Milfra TB21","GPIO":[288,322,1,1,1,1,0,0,1,224,1,0,32,0],"FLAG":0,"BASE":8} +Milfra 2 Gang {"NAME":"Milfra TB12","GPIO":[576,320,289,290,34,33,0,0,225,224,480,0,32,0],"FLAG":0,"BASE":18} Milfra 3 Gang {"NAME":"Milfra TB23","GPIO":[320,320,289,290,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":8} +Milfra Mini Smart {"NAME":"Milfra TB31","GPIO":[1,1,1,1,1,32,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} +Milfra Vibration Touch {"NAME":"Milfra MFA01","GPIO":[160,0,0,0,288,0,0,0,224,544,480,0,0,0],"FLAG":0,"BASE":18} Minitiger 1 Gang {"NAME":"minitiger 1 Gang","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Minitiger 1 Gang v2 {"NAME":"MiniTiger1BandNoNeutral","GPIO":[0,320,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} Minitiger 2 Gang {"NAME":"minitiger 2 Gang","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} @@ -1939,10 +2040,10 @@ Moes 2-Way Multi-Control 1 Gang {"NAME":"Moes WS-EU-SK1-W","GPIO":[544,0,0,32,2 Moes 3 Gang {"NAME":"Moes WS-EU3-W","GPIO":[544,0,290,33,225,34,0,0,32,224,289,226,288,1],"FLAG":0,"BASE":18} Moes 3-Way {"NAME":"Moes 3-Way","GPIO":[1,1,1,1,224,321,0,0,257,161,160,1,1,0],"FLAG":0,"BASE":18} Moes BS-US-W Boiler {"NAME":"BS-US-W","GPIO":[290,0,0,32,224,0,0,0,0,0,288,0,291,0],"FLAG":0,"BASE":18} +Moes Light and Fan {"NAME":"Moes WF-FL01","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes RF433 2 Gang Switch {"NAME":"WS-EUB2-WR","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes RF433 3 Gang {"NAME":"WS-EUB3-WR","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes SS01S-1 {"NAME":"Moes Switch","GPIO":[1,1,1,1,320,0,0,0,224,32,1,1,1,0],"FLAG":0,"BASE":18} -Moes WF-FL01 Light and Fan {"NAME":"Moes WF-FL01","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes WS-EU1-LB 1 Gang No Neutral {"NAME":"Moes WS-EU1-LB","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,544,0],"FLAG":0,"BASE":18} Moes WS-EU2-LW 2 Gang No Neutral {"NAME":"Tuya 2 Channel","GPIO":[0,0,0,0,225,0,0,0,32,224,33,0,544,0],"FLAG":0,"BASE":18} Moes WS-EU3-LW 3 Gang No Neutral {"NAME":"Tuya 3 Channel","GPIO":[0,0,0,0,224,34,0,0,33,225,32,226,544,0],"FLAG":0,"BASE":18} @@ -1953,13 +2054,15 @@ Moes WS-US1-W 1 Gang {"NAME":"WS-US1-W","GPIO":[290,0,0,32,224,0,0,0,0,0 Moes WS-US2-W 2 Gang {"NAME":"WS-US2-W ","GPIO":[288,0,289,0,0,33,0,0,32,224,0,225,290,0],"FLAG":0,"BASE":18} Moes WS-US3-W 3 Gang {"NAME":"Tuya Moes 3 Ch","GPIO":[544,0,290,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} Moes WT02S {"NAME":"Moes WT02S","GPIO":[0,0,0,0,320,576,0,0,224,160,0,0,0,1],"FLAG":0,"BASE":18} +MoKo 2 Gang {"NAME":"Moko2CH","GPIO":[544,0,289,0,0,33,0,0,32,224,0,225,288,0],"FLAG":0,"BASE":18} MoKo Scene Life {"NAME":"Moko Smart Swi","GPIO":[576,0,0,0,418,417,0,0,320,32,416,224,0,0],"FLAG":0,"BASE":18} MoKo Smart Life {"NAME":"Moko Switch (Single)","GPIO":[544,0,0,32,224,0,0,0,0,0,320,0,0,0],"FLAG":0,"BASE":59} NaamaSmart KS602 {"NAME":"KS-602","GPIO":[32,0,0,0,0,0,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18} Nedis Dual {"NAME":"SM-SW102U-2","GPIO":[576,0,0,33,225,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Nexete DS-123 {"NAME":"DS-123","GPIO":[544,321,1,32,224,33,0,0,1,225,320,1,1,0],"FLAG":0,"BASE":18} Nexete DS-123 Single {"NAME":"DS-123","GPIO":[544,0,1,33,0,32,0,0,1,224,320,1,1,0],"FLAG":0,"BASE":18} -Novadigital Interruptor Touch Led 1 Boto {"NAME":"Nova Digital Switch 1 Gang","GPIO":[544,0,0,32,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18} +Novadigital Interruptor Touch Led 1 Bot�o {"NAME":"Nova Digital Switch 1 Gang","GPIO":[544,0,0,32,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18} +Push Button 1/2/3/4 Gang {"NAME":"DS-122","GPIO":[321,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":18} Q-touch 1 Gang {"NAME":"Qtouch","GPIO":[289,0,0,32,0,0,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":1} Qualitel 1 Gang {"NAME":"Qualitel 1 Gang","GPIO":[544,0,0,160,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18} Qualitel 2-Gang {"NAME":"Qualitel 2 Gang","GPIO":[544,0,289,0,0,161,0,0,160,224,0,225,288,0],"FLAG":0,"BASE":18} @@ -1972,7 +2075,7 @@ SANA SW02-02 {"NAME":"SW02-02","GPIO":[258,1,1,33,225,0,0,0,32,2 SANA SW02-03 {"NAME":"SW02-03","GPIO":[320,1,1,34,226,33,0,0,32,224,1,225,1,0],"FLAG":0,"BASE":18} SavEnergy 3 Gang {"NAME":"SavEnergy 3-sw","GPIO":[291,544,290,33,226,34,1,1,32,225,289,224,288,1],"FLAG":0,"BASE":18} Semicom LM-HP/GEVD-W {"NAME":"WaterHeater","GPIO":[576,320,0,0,0,32,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} -Sesoo WIFI-EU-SK3-01 {"NAME":"Sensoo SK3-01","GPIO":[1,1,321,1,1,32,0,0,1,1,1,224,288,0],"FLAG":0,"BASE":18} +Sesoo WIFI-EU-SK3-01 {"NAME":"Sensoo SK3-01","GPIO":[0,0,321,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} Sesoo WIFI-EU-SK3-02 {"NAME":"Sesoo SK3-02","GPIO":[0,0,321,0,225,0,0,0,32,224,33,0,288,0],"FLAG":0,"BASE":18} Sesoo WIFI-US-SK3-04 {"NAME":"Tuya 4 Channel","GPIO":[288,1,1,34,226,32,0,0,35,227,225,224,33,0],"FLAG":0,"BASE":18} Shawader 1Ch Touch Light {"NAME":"ShawaderTuya1C","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} @@ -1981,6 +2084,8 @@ SK-A801-01-US 1 Gang {"NAME":"jsankou US Switch 1 Gang","GPIO":[544,0,0, SK-W803-01-US 3 Gang {"NAME":"jsankou US Switch 3 Gang","GPIO":[544,0,0,33,257,34,0,0,32,256,0,258,0,0],"FLAG":0,"BASE":18} Smartlife Opard CD302 {"NAME":"CD302","GPIO":[0,0,0,0,288,321,0,0,256,32,0,0,0,0],"FLAG":0,"BASE":18} SmartPlex 3 Gang {"NAME":"Tuya 3 Channel","GPIO":[1,1,1,1,224,33,0,0,34,226,32,225,1,0],"FLAG":0,"BASE":18} +Smatrul 1 Gang RF No Neutral {"NAME":"SMATRUL 1 GANG","GPIO":[0,544,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} +Smatrul 2 Gang RF No Neutral {"NAME":"SMATRUL 2 GANG","GPIO":[0,544,0,32,33,0,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":18} Smatrul 5A RF433Mhz 1 Gang Touch {"NAME":"TMC01-EU","GPIO":[0,320,0,0,0,160,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} Smatrul 5A RF433Mhz 4 Gang Touch {"NAME":"TMW4-01(EU)","GPIO":[0,0,0,33,35,32,0,0,34,224,225,226,227,0],"FLAG":0,"BASE":18} Sonoff IW101 {"NAME":"Sonoff IW101","GPIO":[32,3072,0,3104,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":41} @@ -2025,6 +2130,7 @@ Teepao Smart-Rollladen-Schalter {"NAME":"Teepao","GPIO":[576,322,226,33,225,34, Tellur 1 Port 1800W 10A {"NAME":"Tellur 1CH","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,544,0],"FLAG":0,"BASE":18} Tellur 2 Ports 1800W 10A {"NAME":"Tellur 2CH","GPIO":[0,0,0,0,225,0,0,0,32,224,33,0,544,0],"FLAG":0,"BASE":18} Tonbux AMZ180648-2 {"NAME":"Tonbux","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} +TopGreener Scene Controller {"NAME":"TGWF15RM","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} TopGreener TGWF15S {"NAME":"TopGreener-Switch","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} Touch 3 Gang {"NAME":"Switch 3-Gang","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,544,0],"FLAG":0,"BASE":18} Touch Light Switch 1 Gang {"NAME":"Smart Touch Light Switch ","GPIO":[0,0,0,0,0,32,1,1,0,0,0,224,320,0],"FLAG":0,"BASE":18} @@ -2049,7 +2155,7 @@ WiFi Smart Switch 3 Gang {"NAME":"KingArt-3CH","GPIO":[32,1,0,1,226,225,33,3 WS-US-03 {"NAME":"WS-US-03","GPIO":[32,1,1,1,226,225,33,34,224,320,0,0,0,0],"FLAG":0,"BASE":30} Xenon SM-SW102U 2 Gang {"NAME":"SM-SW102U-2","GPIO":[288,0,0,33,225,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Xenon SM-SW202 {"NAME":"SM-SW202","GPIO":[0,0,0,32,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18} -Yagusmart 2 Gang {"NAME":"DS-101 2 gang","GPIO":[576,289,0,32,225,33,0,0,0,224,288,0,0],"FLAG":0,"BASE":1} +Yagusmart 2 Gang Wall Light {"NAME":"DS-101 2 Gang","GPIO":[544,321,0,64,225,65,0,0,0,224,320,0,0,0],"FLAG":0,"BASE":18} Yagusmart 3 Gang {"NAME":"DS-101 3 gang","GPIO":[576,290,0,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} Yapmor 1-gang {"NAME":"YAPMOR 1CH","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Youngzuth 2in1 {"NAME":"SW02 2W","GPIO":[288,0,0,32,224,0,0,0,33,225,0,0,0,0],"FLAG":0,"BASE":18} @@ -2074,6 +2180,7 @@ AGL Modulo Relay 01 Canal {"NAME":"AGL-Basic","GPIO":[0,1,0,0,224,32,0,0,0,0, Albohes 2 Channel {"NAME":"Albohes SH-08","GPIO":[0,3200,33,3232,321,320,0,0,224,544,32,0,225,1],"FLAG":0,"BASE":18} Athom 10A {"NAME":"Athom CB0110A","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} Athom 2Ch Inching/Self-locking {"NAME":"Athom R02","GPIO":[1,1,1,1,225,224,1,1,1,1,1,1,576,0],"FLAG":0,"BASE":18} +Athom 3-Way Mini Relay {"NAME":"RS01-TAS-1","GPIO":[0,0,0,32,576,0,0,0,0,224,160,0,0,0],"FLAG":0,"BASE":18} Athom 4Ch Inching/Self-locking 10A {"NAME":"Athom R04","GPIO":[1,1,1,1,32,576,1,1,226,227,225,1,224,0],"FLAG":0,"BASE":18} Athom 4Ch Inching/Self-locking 30A {"NAME":"Athom R04-30A","GPIO":[1,1,1,1,32,576,1,1,226,227,225,1,224,0],"FLAG":0,"BASE":18} ATMS1601 230VAC DIN Timer/Switch {"NAME":"ATMS1601","GPIO":[1,1,1,1,544,320,1,1,224,32,1,1,1,1],"FLAG":0,"BASE":18} @@ -2086,6 +2193,7 @@ Canwing CW-001 {"NAME":"Canwing CW-001","GPIO":[32,1,0,1,0,0,0,0,2 Century Aoke Smart Switch {"NAME":"CenturyAoke","GPIO":[0,1,0,1,224,0,0,0,32,320,1,0,0,0],"FLAG":0,"BASE":18} Deta 6000HA Smart Inline Switch {"NAME":"DETA-6000HA","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} dewenwils Outdoor Timer Box {"NAME":"Dewenwils50054","GPIO":[0,0,290,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} +EDM Low Voltage {"NAME":"HVAC Switch","GPIO":[0,0,0,0,288,321,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} eMylo 2 Channel {"NAME":"eMylo XL9252WI","GPIO":[0,1,0,0,320,225,0,0,224,0,163,0,0,0],"FLAG":0,"BASE":18} eMylo Single Channel Switch {"NAME":"eMylo XL9251WI","GPIO":[0,1,0,0,320,0,0,0,224,0,35,0,0,0],"FLAG":0,"BASE":18} eMylo SS-8839-02 {"NAME":"SS-8839-02","GPIO":[0,1,0,1,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} @@ -2094,7 +2202,6 @@ Ener-J Outdoor Switch {"NAME":"Ener-J Smart WiFi Outdoor Relay","GPIO":[3 eWelink No Neutral {"NAME":"SA-018","GPIO":[0,0,0,0,160,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":18} EX Store 2 Kanal V5 {"NAME":"EXS Relay V5","GPIO":[1,1,1,1,1,1,0,0,224,225,258,288,259,0],"FLAG":0,"BASE":16} Geekcreit 2 Channel AC 85V-250V {"NAME":"Geekcreit 2ch","GPIO":[32,0,0,0,0,225,33,0,224,288,0,0,0,4704],"FLAG":0,"BASE":18} -Gocomma Wi-Fi Smart Switch {"NAME":"GoCommaSmartSw","GPIO":[32,1,1,1,224,0,0,0,1,320,0,0,0,0],"FLAG":0,"BASE":18} HomeMate 4 Node In-wall {"NAME":"HomeMate Wifi 4N ","GPIO":[1,1,1,160,224,163,1,1,161,225,226,227,162,1],"FLAG":0,"BASE":18} L-5A01 {"NAME":"L-5A01","GPIO":[32,1,0,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} LoraTap 10A {"NAME":"LoraTap RR400W","GPIO":[0,0,0,0,544,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} @@ -2102,7 +2209,7 @@ LoraTap RR500W {"NAME":"LoraTap RR500W","GPIO":[544,0,0,0,160,0,0, LoveAnna AC85-250V 10A {"NAME":"2xSwitch No RF LoveAnna","GPIO":[32,0,0,0,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Luani HVIO {"NAME":"Luani HVIO","GPIO":[0,1,1,1,224,225,0,0,160,161,1,288,0,4704],"FLAG":0,"BASE":35} Milfra Smart {"NAME":"Milfra Smart Module TB41","GPIO":[576,0,0,225,2688,2656,0,0,2592,193,480,224,192,0],"FLAG":0,"BASE":18} -Moes MS-104B-1 {"NAME":"Moes MS-104B","GPIO":[0,0,32,0,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} +Moes {"NAME":"Moes MS-104B","GPIO":[0,0,32,0,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} Nova Digital Basic 1 MS101 {"NAME":"NovaDigBasic1","GPIO":[0,1,0,1,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} PS-1604 16A {"NAME":"PS-1604 16A","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} QS-WIFI-S03 {"NAME":"QS-WIFI-S03","GPIO":[32,1,1,1,1,0,0,0,192,224,0,0,0,0],"FLAG":0,"BASE":1} @@ -2114,22 +2221,26 @@ Shelly 1PM {"NAME":"Shelly 1PM","GPIO":[320,0,0,0,192,2720,0,0 Shelly 2 {"NAME":"Shelly 2","GPIO":[0,2752,0,2784,224,225,0,0,160,0,161,2816,0,0],"FLAG":0,"BASE":47} Shelly 2.5 {"NAME":"Shelly 2.5","GPIO":[320,0,32,0,224,193,0,0,640,192,608,225,3456,4736],"FLAG":0,"BASE":18} Shelly EM {"NAME":"Shelly EM","GPIO":[0,0,0,0,0,0,0,0,640,3456,608,224,0,1],"FLAG":0,"BASE":18} -Shelly i3 Action and Scenes Activation Device {"NAME":"Shelly i3","GPIO":[0,0,0,0,0,0,0,0,193,194,192,0,0,4736],"FLAG":0,"BASE":18} +Shelly i3 Action and Scenes Activation Device {"NAME":"Shelly i3","GPIO":[0,0,0,0,0,320,0,0,193,194,192,0,0,4736],"FLAG":0,"BASE":18} Sinilink USB {"NAME":"XY-WFUSB","GPIO":[1,1,0,1,32,224,0,0,0,0,320,0,544,0],"FLAG":0,"BASE":18} Smart Home SS-8839-01 {"NAME":"SS-8839-01","GPIO":[0,1,0,1,224,0,0,0,32,321,0,320,0,0],"FLAG":0,"BASE":18} Sonoff 4CH (R2) {"NAME":"Sonoff 4CH","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":7} Sonoff 4CH Pro (R2) {"NAME":"Sonoff 4CH Pro","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":23} Sonoff 4CHPROR3 {"NAME":"Sonoff 4CHPROR3","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":23} Sonoff 4CHR3 {"NAME":"Sonoff 4CHR3","GPIO":[32,1,1,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":7} -Sonoff Basic {"NAME":"Sonoff Basic","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} -Sonoff Basic R3 {"NAME":"Basic R3","GPIO":[32,1,0,1,1,0,1,1,224,320,0,0,1,0],"FLAG":0,"BASE":1} +Sonoff Basic {"NAME":"Sonoff Basic","GPIO":[32,1,0,1,0,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} +Sonoff Basic R2 {"NAME":"Sonoff BASICR2","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} +Sonoff Basic R3 {"NAME":"Basic R3","GPIO":[32,1,0,1,0,0,1,1,224,320,0,0,1,0],"FLAG":0,"BASE":1} Sonoff Dual {"NAME":"Sonoff Dual","GPIO":[0,3200,0,3232,1,0,0,0,0,320,1,0,0,0],"FLAG":0,"BASE":5} Sonoff Dual R2 {"NAME":"Sonoff Dual R2","GPIO":[1,1,0,1,0,225,1,32,224,320,0,0,0,0],"FLAG":0,"BASE":39} -Sonoff DUALR3 {"NAME":"Sonoff Dual R3","GPIO":[32,0,0,0,0,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,7296,7328,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} +Sonoff Dual R3 {"NAME":"Sonoff Dual R3","GPIO":[32,0,0,0,0,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,7296,7328,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} +Sonoff Dual R3 Lite {"NAME":"Sonoff Dual R3 Lite","GPIO":[32,0,0,0,0,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} +Sonoff Dual R3 v2 {"NAME":"Sonoff Dual R3 v2","GPIO":[32,0,0,0,0,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,3200,8128,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} Sonoff Mini {"NAME":"Sonoff Mini","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,1,0],"FLAG":0,"BASE":1} -Sonoff MINIR2 {"NAME":"Sonoff MINIR2","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} +Sonoff Mini R2 {"NAME":"Sonoff MINIR2","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Sonoff Pow {"NAME":"Sonoff Pow","GPIO":[32,0,0,0,0,2592,0,0,224,2656,2688,288,0,0],"FLAG":0,"BASE":6} Sonoff Pow R2 {"NAME":"Sonoff Pow R2","GPIO":[32,3072,0,3104,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":43} +Sonoff POW R3 25A 5500W {"NAME":"Sonoff POWR3","GPIO":[32,3072,0,3104,0,0,0,0,256,320,0,1,1,1],"FLAG":0,"BASE":43} Sonoff RF {"NAME":"Sonoff RF","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":2} Sonoff TH10/TH16 {"NAME":"Sonoff TH","GPIO":[32,1,0,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":4} Splatura USB Device Power Switch {"NAME":"Splatura USB","GPIO":[0,0,288,0,0,0,0,0,0,224,0,96,0,0],"FLAG":0,"BASE":18} @@ -2138,6 +2249,7 @@ SS311KWS RF Kinetic Switch and WiFi {"NAME":"SS311KWS","GPIO":[0,0,0,0,288,0,0, SUPLA inCan by Espablo {"NAME":"Supla Espablo","GPIO":[0,1,1312,1,32,224,0,0,1,225,1,0,288,4704],"FLAG":0,"BASE":31} SW-R03 {"NAME":"SW-R03","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Switch Module 2x5A {"NAME":"QS-WIFI-S04-2C","GPIO":[1,1,32,1,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} +Tinxy Single Node 7A {"NAME":"Tnxy07A","GPIO":[32,0,0,0,160,224,0,0,288,0,0,0,0,0],"FLAG":0,"BASE":18} WL-SW01_10 {"NAME":"WL-SW01_10","GPIO":[32,3232,0,3200,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Woox Integrational Switch {"NAME":"WOOXR4967","GPIO":[0,0,0,1,320,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} Yuntong Smart {"NAME":"Yuntong Smart","GPIO":[0,0,0,0,224,0,0,0,96,320,0,576,0,0],"FLAG":0,"BASE":1} @@ -2178,8 +2290,10 @@ BSEED Smart Socket {"NAME":"BSEED Socket","GPIO":[0,0,0,0,544,288,0,0, CE Smart Home {"NAME":"CE Smart Wall","GPIO":[1,1,1,1,544,32,0,0,224,1,1,1,1,1],"FLAG":0,"BASE":18} CE Smart Home LQ-2-W3 {"NAME":"LITESUN","GPIO":[0,0,0,0,544,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} ChilITec Pilota Casa IP44 {"NAME":"Outdoor IP44","GPIO":[0,0,0,0,0,224,0,0,0,288,32,0,0,0],"FLAG":0,"BASE":18} -Deta 6922HA {"NAME":"DETA 2G GPO","GPIO":[0,0,0,0,544,0,0,0,65,224,225,0,64,0],"FLAG":0,"BASE":18} +Deta Double Power Point {"NAME":"DETA 2G GPO","GPIO":[0,0,0,0,544,0,0,0,65,224,225,0,64,0],"FLAG":0,"BASE":18} +Deta Single Power Point {"NAME":"DETA 2G GPO USB","GPIO":[0,0,0,2720,64,576,0,0,65,224,225,0,0,0],"FLAG":0,"BASE":18} Ener-J 13A Twin Wall Sockets with USB {"NAME":"Ener-J 2-Gang ","GPIO":[32,0,0,0,0,224,33,0,225,320,0,0,0,0],"FLAG":0,"BASE":18} +Gosund {"NAME":"Gosund WO1","GPIO":[320,0,576,0,2656,2720,0,0,2624,321,225,224,0,4704],"FLAG":0,"BASE":18} Kapok T16 {"NAME":"tiltech-t16","GPIO":[0,320,0,32,192,0,0,0,224,225,0,0,0,0],"FLAG":0,"BASE":18} Kesen KS-604 {"NAME":"KS-604","GPIO":[1,1,288,1,1,33,0,0,225,224,1,1,32,0],"FLAG":0,"BASE":18} Kesen KS-604S {"NAME":"KS-604S","GPIO":[1,1,258,1,1,33,0,0,225,224,1,1,32,4704],"FLAG":0,"BASE":18} @@ -2201,12 +2315,7 @@ TopGreener Dual USB {"NAME":"TGWF215U2A","GPIO":[0,320,0,32,2720,2656,0 TopGreener TGWF15RM {"NAME":"TGWF15RM","GPIO":[0,320,0,32,2720,2656,0,0,2624,321,224,0,0,0],"FLAG":0,"BASE":55} Vigica VGSPK00815 {"NAME":"VIGICA outlet","GPIO":[32,1,1,1,1,225,33,1,224,1,1,1,1,4704],"FLAG":0,"BASE":18} Woox Dual {"NAME":"Woox R4053","GPIO":[33,0,0,0,0,224,32,0,225,320,0,0,0,0],"FLAG":0,"BASE":18} -Xenon 2AC 1USB {"NAME":"Xenon SM-PW801-U1","GPIO":[0,0,0,0,288,32,0,0,224,0,225,0,0,0],"FLAG":0,"BASE":18} -``` - -## Wall Switch -``` -TopGreener Scene Controller {"NAME":"TGWF15RM","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Xenon 2AC 1USB {"NAME":"Xenon SM-PW801-U1","GPIO":[0,0,0,0,288,32,0,0,224,0,225,0,226,0],"FLAG":0,"BASE":18} ``` ## Water Sensor @@ -2217,6 +2326,7 @@ Y09 {"NAME":"Y09","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0 ## Zigbee Gateway ``` +Eachen eWeLink ZbBridge Pro Ethernet {"NAME":"ZB-GW03-V1.2","GPIO":[0,0,3552,0,3584,0,0,0,5793,5792,320,544,5536,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,608,640,32,0,0,0,0,0],"FLAG":0,"BASE":1} Sonoff ZBBridge {"NAME":"Sonoff ZbBridge","GPIO":[320,3552,0,3584,5312,0,0,0,640,576,608,0,32,0],"FLAG":0,"BASE":75} Tube's CC2652P2 Ethernet {"NAME":"Tube ZB CC2652","GPIO":[0,0,0,3840,0,3584,0,0,0,0,0,0,5536,3552,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,3840,5792,0,0,0,0,0,0],"FLAG":0,"BASE":1} Tube's EFR32 Ethernet {"NAME":"Tube ZB EFR32","GPIO":[0,0,0,3840,0,3552,1,0,0,0,0,0,5536,3584,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,5793,5792,0,0,0,0,0,0],"FLAG":0,"BASE":1} diff --git a/boards/esp32-cam.json b/boards/esp32-cam.json index b49fb0d4d..fc3fc4f1f 100644 --- a/boards/esp32-cam.json +++ b/boards/esp32-cam.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue", + "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DHAS_PSRAM_FIX -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw", "f_cpu": "240000000L", "f_flash": "80000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "esp32", "partitions": "esp32_partition_app1856k_spiffs320k.csv" @@ -19,7 +19,7 @@ "can" ], "debug": { - "openocd_board": "esp-wroom-32.cfg" + "openocd_target": "esp32.cfg" }, "frameworks": [ "arduino", diff --git a/boards/esp32-m5core2.json b/boards/esp32-m5core2.json index 99d42a6ab..0170649fa 100644 --- a/boards/esp32-m5core2.json +++ b/boards/esp32-m5core2.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_M5STACK_Core2 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue", + "extra_flags": "-DARDUINO_M5STACK_Core2 -DBOARD_HAS_PSRAM", "f_cpu": "240000000L", "f_flash": "80000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "m5stack_core2", "partitions": "esp32_partition_app2944k_spiffs10M.csv" @@ -18,6 +18,9 @@ "ethernet", "can" ], + "debug": { + "openocd_target": "esp32.cfg" + }, "frameworks": [ "arduino", "espidf" diff --git a/boards/esp32-odroid.json b/boards/esp32-odroid.json index ea782c034..10bb8bf4d 100644 --- a/boards/esp32-odroid.json +++ b/boards/esp32-odroid.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_ODROID_ESP32 -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue", + "extra_flags": "-DARDUINO_ODROID_ESP32 -DBOARD_HAS_PSRAM -DHAS_PSRAM_FIX -mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-strategy=memw", "f_cpu": "240000000L", "f_flash": "80000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "odroid_esp32", "partitions": "esp32_partition_app2944k_spiffs10M.csv" @@ -18,6 +18,9 @@ "ethernet", "can" ], + "debug": { + "openocd_target": "esp32.cfg" + }, "frameworks": [ "arduino", "espidf" diff --git a/boards/esp32_16M.json b/boards/esp32_16M.json index 24eb490a7..69abb9a09 100644 --- a/boards/esp32_16M.json +++ b/boards/esp32_16M.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_ESP32_DEV", + "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DESP32_16M", "f_cpu": "80000000L", "f_flash": "40000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "esp32", "partitions": "esp32_partition_app2944k_spiffs10M.csv" @@ -19,7 +19,7 @@ "can" ], "debug": { - "openocd_board": "esp-wroom-32.cfg" + "openocd_target": "esp32.cfg" }, "frameworks": [ "arduino", diff --git a/boards/esp32_4M.json b/boards/esp32_4M.json index 53afbd219..f43be6848 100644 --- a/boards/esp32_4M.json +++ b/boards/esp32_4M.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_ESP32_DEV", + "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DESP32_4M", "f_cpu": "80000000L", "f_flash": "40000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "esp32", "partitions": "esp32_partition_app1856k_spiffs320k.csv" @@ -19,7 +19,7 @@ "can" ], "debug": { - "openocd_board": "esp-wroom-32.cfg" + "openocd_target": "esp32.cfg" }, "frameworks": [ "arduino", diff --git a/boards/esp32_8M.json b/boards/esp32_8M.json index b390ebdf5..adcd0caaa 100644 --- a/boards/esp32_8M.json +++ b/boards/esp32_8M.json @@ -4,10 +4,10 @@ "ldscript": "esp32_out.ld" }, "core": "esp32", - "extra_flags": "-DARDUINO_ESP32_DEV", + "extra_flags": "-DARDUINO_ESP32_DEV -DBOARD_HAS_PSRAM -DESP32_8M", "f_cpu": "80000000L", "f_flash": "40000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32", "variant": "esp32", "partitions": "esp32_partition_app2944k_spiffs2M.csv" @@ -19,7 +19,7 @@ "can" ], "debug": { - "openocd_board": "esp-wroom-32.cfg" + "openocd_target": "esp32.cfg" }, "frameworks": [ "arduino", diff --git a/boards/esp32_solo1_4M.json b/boards/esp32_solo1_4M.json new file mode 100644 index 000000000..64759d331 --- /dev/null +++ b/boards/esp32_solo1_4M.json @@ -0,0 +1,38 @@ +{ + "build": { + "arduino":{ + "ldscript": "esp32_out.ld" + }, + "core": "esp32", + "extra_flags": "-DARDUINO_ESP32_DEV -DESP32_4M", + "f_cpu": "80000000L", + "f_flash": "40000000L", + "flash_mode": "dout", + "mcu": "esp32", + "variant": "esp32", + "partitions": "esp32_partition_app1856k_spiffs320k.csv" + }, + "connectivity": [ + "wifi", + "bluetooth", + "ethernet", + "can" + ], + "debug": { + "openocd_target": "esp32-solo-1.cfg" + }, + "frameworks": [ + "arduino", + "espidf" + ], + "name": "Espressif Generic ESP32 4M Flash, Tasmota 1856k Code/OTA, 320k SPIFFS", + "upload": { + "flash_size": "4MB", + "maximum_ram_size": 327680, + "maximum_size": 4194304, + "require_upload_port": true, + "speed": 460800 + }, + "url": "https://en.wikipedia.org/wiki/ESP32", + "vendor": "Espressif" +} diff --git a/boards/esp32c3.json b/boards/esp32c3.json index 9e75d1d96..cedcf1500 100644 --- a/boards/esp32c3.json +++ b/boards/esp32c3.json @@ -6,7 +6,7 @@ "core": "esp32", "f_cpu": "160000000L", "f_flash": "80000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32c3", "variant": "esp32c3", "partitions": "esp32_partition_app1856k_spiffs320k.csv" @@ -14,8 +14,12 @@ "connectivity": [ "wifi" ], + "debug": { + "openocd_target": "esp32c3.cfg" + }, "frameworks": [ - "arduino" + "arduino", + "espidf" ], "name": "Espressif Generic ESP32-C3 4M Flash, Tasmota 1856k Code/OTA, 320k SPIFFS", "upload": { @@ -25,6 +29,6 @@ "require_upload_port": true, "speed": 460800 }, - "url": "https://docs.espressif.com/projects/esp-idf/en/latest", + "url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html", "vendor": "Espressif" } diff --git a/boards/esp32s2.json b/boards/esp32s2.json index 7a714892a..e18a2339c 100644 --- a/boards/esp32s2.json +++ b/boards/esp32s2.json @@ -4,9 +4,10 @@ "ldscript": "esp32s2_out.ld" }, "core": "esp32", + "extra_flags": "-DBOARD_HAS_PSRAM", "f_cpu": "240000000L", "f_flash": "80000000L", - "flash_mode": "dio", + "flash_mode": "dout", "mcu": "esp32s2", "variant": "esp32s2", "partitions": "esp32_partition_app1856k_spiffs320k.csv" diff --git a/boards/esp8266_1M.json b/boards/esp8266_1M.json index 6c2287c6a..bc5b1f49b 100644 --- a/boards/esp8266_1M.json +++ b/boards/esp8266_1M.json @@ -4,7 +4,7 @@ "ldscript": "eagle.flash.1m.ld" }, "core": "esp8266", - "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_1M", "f_cpu": "80000000L", "f_flash": "40000000L", "flash_mode": "dout", diff --git a/boards/esp8266_2M1M.json b/boards/esp8266_2M1M.json index e659a3f90..e3a675373 100644 --- a/boards/esp8266_2M1M.json +++ b/boards/esp8266_2M1M.json @@ -4,7 +4,7 @@ "ldscript": "eagle.flash.2m1m.ld" }, "core": "esp8266", - "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_2M -DESP8266_2M1M", "f_cpu": "80000000L", "f_flash": "40000000L", "flash_mode": "dout", diff --git a/boards/esp8266_2M256.json b/boards/esp8266_2M256.json index 24a3ced47..734f62537 100644 --- a/boards/esp8266_2M256.json +++ b/boards/esp8266_2M256.json @@ -4,7 +4,7 @@ "ldscript": "eagle.flash.2m256.ld" }, "core": "esp8266", - "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_2M -DESP8266_2M256", "f_cpu": "80000000L", "f_flash": "40000000L", "flash_mode": "dout", diff --git a/boards/esp8266_4M2M.json b/boards/esp8266_4M2M.json index 616384b40..873c84f24 100644 --- a/boards/esp8266_4M2M.json +++ b/boards/esp8266_4M2M.json @@ -4,7 +4,7 @@ "ldscript": "eagle.flash.4m2m.ld" }, "core": "esp8266", - "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_4M -DESP8266_4M2M", "f_cpu": "80000000L", "f_flash": "40000000L", "flash_mode": "dout", diff --git a/boards/esp8266_4M3M.json b/boards/esp8266_4M3M.json index efca2d7e2..c845d6e96 100644 --- a/boards/esp8266_4M3M.json +++ b/boards/esp8266_4M3M.json @@ -4,7 +4,7 @@ "ldscript": "eagle.flash.4m3m.ld" }, "core": "esp8266", - "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_4M -DESP8266_4M3M", "f_cpu": "80000000L", "f_flash": "40000000L", "flash_mode": "dout", diff --git a/boards/esp8266_zbbridge.json b/boards/esp8266_zbbridge.json new file mode 100644 index 000000000..975c1bc8c --- /dev/null +++ b/boards/esp8266_zbbridge.json @@ -0,0 +1,32 @@ +{ + "build": { + "arduino": { + "ldscript": "eagle.flash.2m256.ld" + }, + "core": "esp8266", + "extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01", + "f_cpu": "160000000L", + "f_flash": "40000000L", + "flash_mode": "dout", + "mcu": "esp8266", + "variant": "generic" + }, + "connectivity": [ + "wifi" + ], + "frameworks": [ + "arduino", + "esp8266-rtos-sdk", + "esp8266-nonos-sdk" + ], + "name": "Sonoff ZbBridge Tasmota 1M sketch 772k OTA 256k SPIFFS", + "upload": { + "maximum_ram_size": 81920, + "maximum_size": 995326, + "require_upload_port": true, + "resetmethod": "ck", + "speed": 115200 + }, + "url": "https://templates.blakadder.com/sonoff_ZBBridge.html", + "vendor": "Espressif" +} diff --git a/include/esp32x_fixes.h b/include/esp32x_fixes.h index dbf512a6a..047a343c8 100644 --- a/include/esp32x_fixes.h +++ b/include/esp32x_fixes.h @@ -20,12 +20,12 @@ /* * Xtensa toolchain declares `int32_t` as `int` but RISC-V toolchain * declares `int32_t` as `long int` which causes compilation errors. - * + * * See: * https://github.com/espressif/esp-idf/issues/6906 * https://github.com/espressif/arduino-esp32/issues/5086 - * - * You need to add the following lines in `build_flags`: + * + * You need to add the following lines in `build_flags`: * -I$PROJECT_DIR/include * -include "esp32x_fixes.h" */ @@ -39,16 +39,27 @@ #endif // __riscv -// fix a bug in esp-idf 4.4 for esp32c3 -#ifndef REG_SPI_BASE -#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 ))) -#endif +//alias, deprecated for the chips after esp32s2 +#ifdef CONFIG_IDF_TARGET_ESP32 +#define SPI_HOST SPI1_HOST +#define HSPI_HOST SPI2_HOST +#define VSPI_HOST SPI3_HOST -#if CONFIG_IDF_TARGET_ESP32C3 -// SPI_MOSI_DLEN_REG is not defined anymore in esp32c3, instead use SPI_MS_DLEN_REG -#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x) -//alias for different chips, deprecated for the chips after esp32s2 +#elif CONFIG_IDF_TARGET_ESP32S2 +// SPI_HOST (SPI1_HOST) is not supported by the SPI Master and SPI Slave driver on ESP32-S2 and later +#define SPI_HOST SPI1_HOST +#define FSPI_HOST SPI2_HOST +#define HSPI_HOST SPI3_HOST +#define VSPI_HOST SPI3_HOST + +#elif CONFIG_IDF_TARGET_ESP32C3 #define SPI_HOST SPI1_HOST #define HSPI_HOST SPI2_HOST #define VSPI_HOST SPI2_HOST /* No SPI3_host on C3 */ -#endif +// fix a bug in esp-idf 4.4 for esp32c3 +#ifndef REG_SPI_BASE +#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 ))) +// SPI_MOSI_DLEN_REG is not defined anymore in esp32c3, instead use SPI_MS_DLEN_REG +#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x) +#endif // REG_SPI_BASE +#endif // TARGET diff --git a/info/xdrv_57_tasmesh.md b/info/xdrv_57_tasmesh.md new file mode 100644 index 000000000..47dc918ed --- /dev/null +++ b/info/xdrv_57_tasmesh.md @@ -0,0 +1,51 @@ +# TASMESH + +This driver provides the ability to move TASMOTA-devices out of the WLAN by using ESP-NOW to communicate bidirectional with an internal protocol. + +Thus the workload for the WLAN-router is reduced and with the reduced overhead the local 2.4-GHz-band will be freed of some traffic. Power consumption of the nodes will be reduced significantly allowing better battery powered projects with TASMOTA. +Automatic payload encryption is applied using the WiFi-password1 as the key. A maximum of 32 bytes of this password is used for the ChaCha20Poly1305 authenticated encryption as the key. + +As ACK/NACK messages seem to be not reliable on both ESP-platforms, the method "send-and-pray" is used. + + +## Working priciple + +An ESP32 is needed as gateway/broker to connect the nodes (typically an ESP8266) to the WLAN. The ESP32 will receive the MQTT-topic of every node and subscribe to it as a proxy. +If a MQTT-message in the form of 'cmnd/node_topic/...' is received, the broker will automatically send this to the referring node via ESP-NOW. +The broker will automatically send time messages to all nodes. + +The nodes will send their MQTT-messages back to the broker via ESP-NOW. + +## Enabling the driver + +Add ``#define USE_TASMESH`` to your file ``user_config_override.h`` before compilation. + +## Commands + +``MeshBroker`` - starts the broker on the ESP32, printing out the MAC and used WiFi-channel to the log. Must be called after WiFi is initialized!! Example 'Rule1 on system#boot do meshbroker endon' + +``MeshChannel 1..13`` - changes the WiFi-channel (on the node) to n (1-13) according to the channel of the (ESP32-)broker. + +``MeshNode AA:BB:CC:DD:EE:FF`` - starts a node and connects the the broker with the given MAC-address, will automatically send MQTT-topic to the broker + +``MeshPeer AA:BB:CC:DD:EE:FF`` - usable to add a known node to another node to be able to send data via the mesh to the broker, that may be out of reach + +``MeshInterval 2..200`` - changes the interval between mesh messages default set to 50 ms + +## Rules + +Rules examples: + +- The broker must be started after wifi is up!!
``rule1 on system#boot do meshbroker endon`` +- The node may be started as soon as possible. Once started wifi and webserver are disabled by design
``rule1 on system#init do meshnode 98:F4:AB:6D:2D:B5 endon`` +- Add a known peer (another node in the mesh) after the node has initialized
``rule3 on mesh#node=1 do meshpeer 2cf4323cdb33 endon`` + +## Limitations + +The following limitations apply: +- An ESP32 is only supported as a broker +- An ESP8266 is only supported as a node +- No command persistence is implemented so use rules to start a broker or a node +- Although node send queues are implemented there is no node receive queue so MQTT commands send to the node need to be as small as possible limited to a maximum of around 160 characters including the topic +- Although broker receive queues are implemented there is no broker send queue so MQTT commands send to the node need to be as small as possible limited to a maximum of around 160 characters including the topic +- As there is no direct connection from the node to the MQTT broker it will signal the node as LWT Offline diff --git a/lib/lib_i2c/LinkedList-1.2.3/LICENSE.txt b/lib/default/LinkedList-1.2.3/LICENSE.txt similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/LICENSE.txt rename to lib/default/LinkedList-1.2.3/LICENSE.txt diff --git a/lib/lib_i2c/LinkedList-1.2.3/LinkedList.h b/lib/default/LinkedList-1.2.3/LinkedList.h similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/LinkedList.h rename to lib/default/LinkedList-1.2.3/LinkedList.h diff --git a/lib/lib_i2c/LinkedList-1.2.3/README.md b/lib/default/LinkedList-1.2.3/README.md similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/README.md rename to lib/default/LinkedList-1.2.3/README.md diff --git a/lib/lib_i2c/LinkedList-1.2.3/examples/ClassList/ClassList.pde b/lib/default/LinkedList-1.2.3/examples/ClassList/ClassList.pde similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/examples/ClassList/ClassList.pde rename to lib/default/LinkedList-1.2.3/examples/ClassList/ClassList.pde diff --git a/lib/lib_i2c/LinkedList-1.2.3/examples/SimpleIntegerList/SimpleIntegerList.pde b/lib/default/LinkedList-1.2.3/examples/SimpleIntegerList/SimpleIntegerList.pde similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/examples/SimpleIntegerList/SimpleIntegerList.pde rename to lib/default/LinkedList-1.2.3/examples/SimpleIntegerList/SimpleIntegerList.pde diff --git a/lib/lib_i2c/LinkedList-1.2.3/keywords.txt b/lib/default/LinkedList-1.2.3/keywords.txt similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/keywords.txt rename to lib/default/LinkedList-1.2.3/keywords.txt diff --git a/lib/lib_i2c/LinkedList-1.2.3/library.json b/lib/default/LinkedList-1.2.3/library.json similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/library.json rename to lib/default/LinkedList-1.2.3/library.json diff --git a/lib/lib_i2c/LinkedList-1.2.3/library.properties b/lib/default/LinkedList-1.2.3/library.properties similarity index 100% rename from lib/lib_i2c/LinkedList-1.2.3/library.properties rename to lib/default/LinkedList-1.2.3/library.properties diff --git a/lib/lib_audio/ESP8266Audio/README.md b/lib/lib_audio/ESP8266Audio/README.md index c8c92ff67..f243db52a 100644 --- a/lib/lib_audio/ESP8266Audio/README.md +++ b/lib/lib_audio/ESP8266Audio/README.md @@ -1,4 +1,4 @@ -# ESP8266Audio - supports ESP8266 & ESP32 [![Gitter](https://badges.gitter.im/ESP8266Audio/community.svg)](https://gitter.im/ESP8266Audio/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +# ESP8266Audio - supports ESP8266 & ESP32 & Raspberry Pi RP2040[![Gitter](https://badges.gitter.im/ESP8266Audio/community.svg)](https://gitter.im/ESP8266Audio/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) Arduino library for parsing and decoding MOD, WAV, MP3, FLAC, MIDI, AAC, and RTTL files and playing them on an I2S DAC or even using a software-simulated delta-sigma DAC with dynamic 32x-128x oversampling. ESP8266 is fully supported and most mature, but ESP32 is also mostly there with built-in DAC as well as external ones. diff --git a/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromFunction/PlayWAVFromFunction.ino b/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromFunction/PlayWAVFromFunction.ino new file mode 100644 index 000000000..fe0cc896d --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromFunction/PlayWAVFromFunction.ino @@ -0,0 +1,78 @@ +#include +#include "AudioFileSourceFunction.h" +#include "AudioGeneratorWAV.h" +#include "AudioOutputI2SNoDAC.h" + +float hz = 440.f; + +// pre-defined function can also be used to generate the wave +float sine_wave(const float time) { + float v = sin(TWO_PI * hz * time); // C + v *= fmod(time, 1.f); // change linear + v *= 0.5; // scale + return v; +}; + +AudioGeneratorWAV* wav; +AudioFileSourceFunction* file; +AudioOutputI2SNoDAC* out; + +void setup() { + Serial.begin(115200); + delay(1000); + + // ===== create instance with length of song in [sec] ===== + file = new AudioFileSourceFunction(8.); + // + // you can set (sec, channels, hz, bit/sample) but you should care about + // the trade-off between performance and the audio quality + // + // file = new AudioFileSourceFunction(sec, channels, hz, bit/sample); + // channels : default = 1 + // hz : default = 8000 (8000, 11025, 22050, 44100, 48000, etc.) + // bit/sample : default = 16 (8, 16, 32) + + // ===== set your sound function ===== + file->addAudioGenerators([&](const float time) { + float v = sin(TWO_PI * hz * time); // generate sine wave + v *= fmod(time, 1.f); // change linear + v *= 0.5; // scale + return v; + }); + // + // sound function should have one argument(float) and one return(float) + // param : float (current time [sec] of the song) + // return : float (the amplitude of sound which varies from -1.f to +1.f) + // + // sound function can be registerd only one or the same number with channels + // if the channels > 1 && the number of function == 1, + // same function are used to generate the sound in every channel + // + // file = new AudioFileSourceFunction(8., 2); + // file->addAudioGenerators( + // // L (channel 0) + // [](const float time) { + // return 0.25 * sin(TWO_PI * 440.f * time) * fmod(time, 1.f); // C + // }, + // // R (channel 1) + // [](const float time) { + // return 0.25 * sin(TWO_PI * 550.f * time) * fmod(time, 1.f); // E + // } + // ); + // + // you can also use the pre-defined function + // file->addAudioGenerators(sine_wave); + + out = new AudioOutputI2SNoDAC(); + wav = new AudioGeneratorWAV(); + wav->begin(file, out); +} + +void loop() { + if (wav->isRunning()) { + if (!wav->loop()) wav->stop(); + } else { + Serial.println("function done!"); + delay(1000); + } +} diff --git a/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromPROGMEM/PlayWAVFromPROGMEM.ino b/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromPROGMEM/PlayWAVFromPROGMEM.ino index 5221c913c..cb488f1c3 100644 --- a/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromPROGMEM/PlayWAVFromPROGMEM.ino +++ b/lib/lib_audio/ESP8266Audio/examples/PlayWAVFromPROGMEM/PlayWAVFromPROGMEM.ino @@ -1,9 +1,4 @@ #include -#ifdef ESP32 - #include -#else - #include -#endif #include "AudioFileSourcePROGMEM.h" #include "AudioGeneratorWAV.h" @@ -18,7 +13,6 @@ AudioOutputI2SNoDAC *out; void setup() { - WiFi.mode(WIFI_OFF); Serial.begin(115200); delay(1000); Serial.printf("WAV start\n"); diff --git a/lib/lib_audio/ESP8266Audio/examples/StreamMP3FromHTTP/StreamMP3FromHTTP.ino b/lib/lib_audio/ESP8266Audio/examples/StreamMP3FromHTTP/StreamMP3FromHTTP.ino index 8ea451576..84d7d5b37 100644 --- a/lib/lib_audio/ESP8266Audio/examples/StreamMP3FromHTTP/StreamMP3FromHTTP.ino +++ b/lib/lib_audio/ESP8266Audio/examples/StreamMP3FromHTTP/StreamMP3FromHTTP.ino @@ -22,7 +22,7 @@ const char* ssid = STASSID; const char* password = STAPSK; // Randomly picked URL -const char *URL="http://streaming.shoutcast.com/80sPlanet?lang=en-US"; +const char *URL="http://kvbstreams.dyndns.org:8000/wkvi-am"; AudioGeneratorMP3 *mp3; AudioFileSourceICYStream *file; diff --git a/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputLinuxDSP.h b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputLinuxDSP.h new file mode 100644 index 000000000..743410e84 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputLinuxDSP.h @@ -0,0 +1,118 @@ +/* + AudioOutput + Base class of an audio output player + + Copyright (C) 2017 Earle F. Philhower, III + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _AUDIOOUTPUTNULLSLOW_H +#define _AUDIOOUTPUTNULLSLOW_H + +#include +#include +#include +#include +#include +#include +#include + +#include "AudioOutput.h" + +class AudioOutputNullSlow : public AudioOutput +{ + public: + AudioOutputNullSlow() { }; + ~AudioOutputNullSlow() {}; + virtual bool begin() { samples = 0; startms = millis(); return true; } + + virtual bool ConsumeSample(int16_t sample[2]) { + + if (fd < 0) { + fd = open("/dev/dsp", O_RDWR); + if (fd < 0) { + perror("open of /dev/dsp failed (Try with 'padsp this-exec')"); + exit(1); + } + } + + if (channels && lastchannels != channels) { + Serial.printf("CHANNELS=%d\n", channels); + int arg = channels; /* mono or stereo */ + int status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg); + if (status == -1) { + perror("SOUND_PCM_WRITE_CHANNELS ioctl failed"); + exit(1); + } else if (arg != channels) { + perror("unable to set number of channels"); + exit(1); + } + lastchannels = channels; + } + + if (lastchannels > 0 && hertz && lasthertz != hertz) { + Serial.printf("FREQ=%d\n", hertz); + int arg = hertz*4/lastchannels; /* sampling rate */ + int status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg); + if (status == -1) { + perror("SOUND_PCM_WRITE_RATE ioctl failed"); + exit(1); + } + lasthertz = hertz; + } + + if (bps && lastbps != bps) { + Serial.printf("BPS=%d\n", bps); + int arg = bps; /* sample size */ + int status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg); + if (status == -1) { + perror("SOUND_PCM_WRITE_BITS ioctl failed"); + exit(1); + } else if (arg != bps) { + perror("unable to set sample size"); + exit(1); + } + lastbps = bps; + } + + if ((++samples & ((1<<9)-1)) == 0) { + // let the main loop a chance to run + return false; + } + + if (write(fd, sample, sizeof(sample)) != sizeof(sample)) { + perror("doing sound"); + exit(1); + } + + return true; + } + + virtual bool stop() { endms = millis(); return true; }; + unsigned long GetMilliseconds() { return endms - startms; } + int GetSamples() { return samples; } + int GetFrequency() { return hertz; } + + protected: + unsigned long startms; + unsigned long endms; + int samples; + int lastchannels = -1; + int lasthertz = -1; + int lastbps = -1; + int fd = -1; +}; + +#endif diff --git a/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputNullSlow.h b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputNullSlow.h new file mode 100644 index 000000000..e85cd9ee9 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/AudioOutputNullSlow.h @@ -0,0 +1,57 @@ +/* + AudioOutput + Base class of an audio output player + + Copyright (C) 2017 Earle F. Philhower, III + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _AUDIOOUTPUTNULLSLOW_H +#define _AUDIOOUTPUTNULLSLOW_H + +#include "AudioOutput.h" + +class AudioOutputNullSlow : public AudioOutput +{ + public: + AudioOutputNullSlow() { }; + ~AudioOutputNullSlow() {}; + virtual bool begin() { samples = 0; startms = millis(); return true; } + virtual bool ConsumeSample(int16_t sample[2]) { + // return false (= output buffer full) + // sometimes to let the main loop running + constexpr int everylog2 = 10; + if ((++samples & ((1< 0) { + // simulate real time + delay(1000/(hertz >> everylog2)); + } + return false; + } + return true; + } + virtual bool stop() { endms = millis(); return true; }; + unsigned long GetMilliseconds() { return endms - startms; } + int GetSamples() { return samples; } + int GetFrequency() { return hertz; } + + protected: + unsigned long startms; + unsigned long endms; + int samples; +}; + +#endif + diff --git a/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/StreamOnHost.ino b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/StreamOnHost.ino new file mode 100644 index 000000000..876562d1b --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/StreamOnHost.ino @@ -0,0 +1,118 @@ +#include + +#ifdef ESP32 + #include +#else + #include +#endif +#include "AudioFileSourceICYStream.h" +#include "AudioFileSourceBuffer.h" +#include "AudioGeneratorMP3.h" +#if AUDIO +#pragma message("Outputting audio") +#include "AudioOutputLinuxDSP.h" +#else +#pragma message("No audio") +#include "AudioOutputNullSlow.h" +#endif + +// To run, set your ESP8266 build to 160MHz, update the SSID info, and upload. + +// Enter your WiFi setup here: +#ifndef STASSID +#define STASSID "your-ssid" +#define STAPSK "your-password" +#endif + +const char* ssid = STASSID; +const char* password = STAPSK; + +// Randomly picked URL +//const char *URL="http://kvbstreams.dyndns.org:8000/wkvi-am"; +//const char *URL="http://stream2.pvpjamz.com:8706/stream"; +// that one is not well decoded: +const char *URL="http://icecast.radiofrance.fr/franceinter-lofi.mp3"; + +AudioGeneratorMP3 *mp3; +AudioFileSourceICYStream *file; +AudioFileSourceBuffer *buff; +AudioOutputNullSlow *out; + +// Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc. +void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string) +{ + const char *ptr = reinterpret_cast(cbData); + (void) isUnicode; // Punt this ball for now + // Note that the type and string may be in PROGMEM, so copy them to RAM for printf + char s1[32], s2[64]; + strncpy_P(s1, type, sizeof(s1)); + s1[sizeof(s1)-1]=0; + strncpy_P(s2, string, sizeof(s2)); + s2[sizeof(s2)-1]=0; + Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2); + Serial.flush(); +} + +// Called when there's a warning or error (like a buffer underflow or decode hiccup) +void StatusCallback(void *cbData, int code, const char *string) +{ + const char *ptr = reinterpret_cast(cbData); + // Note that the string may be in PROGMEM, so copy it to RAM for printf + char s1[64]; + strncpy_P(s1, string, sizeof(s1)); + s1[sizeof(s1)-1]=0; + Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1); + Serial.flush(); +} + + +void setup() +{ + Serial.begin(115200); + delay(1000); + Serial.println("Connecting to WiFi"); + + WiFi.disconnect(); + WiFi.softAPdisconnect(true); + WiFi.mode(WIFI_STA); + + WiFi.begin(ssid, password); + + // Try forever + while (WiFi.status() != WL_CONNECTED) { + Serial.println("...Connecting to WiFi"); + delay(1000); + } + Serial.println("Connected"); + + audioLogger = &Serial; + file = new AudioFileSourceICYStream(); + file->RegisterMetadataCB(MDCallback, (void*)"ICY"); + file->useHTTP10(); + file->open(URL); + buff = new AudioFileSourceBuffer(file, 2048); + buff->RegisterStatusCB(StatusCallback, (void*)"buffer"); + out = new AudioOutputNullSlow(); + mp3 = new AudioGeneratorMP3(); + mp3->RegisterStatusCB(StatusCallback, (void*)"mp3"); + mp3->begin(buff, out); +} + + +void loop() +{ + static int lastms = 0; + + if (mp3->isRunning()) { + if (millis()-lastms > 1000) { + lastms = millis(); + Serial.printf("Running for %d ms...\n", lastms); + Serial.flush(); + } + if (!mp3->loop()) mp3->stop(); + } else { + Serial.printf("MP3 done\n"); + delay(1000); + } +} + diff --git a/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/onHost b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/onHost new file mode 100755 index 000000000..014845692 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/examples/StreamOnHost/onHost @@ -0,0 +1,66 @@ +#!/bin/bash + +ino=${PWD##*/} + +if [ ! -d "${ESP8266ARDUINO}/tests/host" ]; then + echo "\${ESP8266ARDUINO} should point to ESP8266 Arduino core directory" + exit 1 +fi + +THISLIB=$(pwd)/../.. +MAD=$(ls ${THISLIB}/src/libmad/*.c) +PAGER=${PAGER:-less} + +cd ${ESP8266ARDUINO}/tests/host + +if [ "$1" = "clean" ]; then + make clean + cd ${THISLIB} + rm -f src/*.o src/libmad/*.o + exit 0 +elif [ "$1" = diff ]; then + cd ${THISLIB}/examples + diff -u StreamMP3FromHTTP/StreamMP3FromHTTP.ino ${ino}/${ino}.ino | ${PAGER} + exit 0 +else + echo "" + echo "usage:" + echo " $0" + echo " $0 clean" + echo " $0 diff" + echo " AUDIO=a VALGRIND=v FORCE32=f $0" + echo " a=1 play sound (use padsp, open /dev/dsp)" + echo " v=1 run in native mode (FORCE32=0) with valgrind" + echo " f=1 run in 32 bits mode (if gcc-multilib is installed)" + echo "variable ESP8266ARDUINO must point to esp8266 Arduino core directory" + echo "" + [ "$1" = "-h" ] && exit 0 + sleep 1 +fi + +run="" + +[ -z "${FORCE32}" ] && FORCE32=0 +[ -z "${AUDIO}" ] && AUDIO=1 + +if [ "${AUDIO}" = 1 ]; then + run="${run} padsp" +fi + +if [ "${VALGRIND}" = 1 ]; then + FORCE32=0 + run="$run valgrind" +fi + +touch ${THISLIB}/examples/${ino}/${ino}.ino # rebuild + +eval make FORCE32=${FORCE32} -j \ + USERCSOURCES=\"${MAD}\" \ + USERCXXSOURCES=\"${THISLIB}/src/AudioFileSourceBuffer.cpp ${THISLIB}/src/AudioLogger.cpp ${THISLIB}/src/AudioGeneratorMP3.cpp ${THISLIB}/src/AudioFileSourceICYStream.cpp ${THISLIB}/src/AudioFileSourceHTTPStream.cpp\" \ + USERCFLAGS=\"-I${THISLIB}/src/ -DAUDIO=${AUDIO}\" \ + ${THISLIB}/examples/${ino}/${ino} + +set -x + +$run ./bin/${ino}/${ino} "$@" +stty sane diff --git a/lib/lib_audio/ESP8266Audio/keywords.txt b/lib/lib_audio/ESP8266Audio/keywords.txt index 251f431e3..75b11139c 100644 --- a/lib/lib_audio/ESP8266Audio/keywords.txt +++ b/lib/lib_audio/ESP8266Audio/keywords.txt @@ -22,6 +22,7 @@ AudioGeneratorWAV KEYWORD1 AudioOutput KEYWORD1 AudioOutputI2S KEYWORD1 AudioOutputI2SNoDAC KEYWORD1 +AudioOutputI2SClass KEYWORD1 AudioOutputNull KEYWORD1 AudioOutputBuffer KEYWORD1 AudioOutputSerialWAV KEYWORD1 diff --git a/lib/lib_audio/ESP8266Audio/library.json b/lib/lib_audio/ESP8266Audio/library.json index 5986c2a41..139291880 100644 --- a/lib/lib_audio/ESP8266Audio/library.json +++ b/lib/lib_audio/ESP8266Audio/library.json @@ -1,6 +1,6 @@ { "name": "ESP8266Audio", - "description": "Audio file format and I2S DAC library", + "description": "Audio file format and I2S DAC library for ESP8266, ESP32, and Raspberry Pi Pico RP2040", "keywords": "ESP8266, ESP32, MP3, AAC, WAV, MOD, FLAC, RTTTL, MIDI, I2S, DAC, Delta-Sigma, TTS", "authors": [ { @@ -14,13 +14,9 @@ "type": "git", "url": "https://github.com/earlephilhower/ESP8266Audio" }, - "version": "1.5.0", + "version": "1.9.2", "homepage": "https://github.com/earlephilhower/ESP8266Audio", - "dependencies": { - "SPI": "1.0" - }, "frameworks": "Arduino", - "platforms": ["espressif8266", "espressif32"], "examples": [ "examples/*/*.ino" ] diff --git a/lib/lib_audio/ESP8266Audio/library.properties b/lib/lib_audio/ESP8266Audio/library.properties index 0eb36bee2..111915c1c 100644 --- a/lib/lib_audio/ESP8266Audio/library.properties +++ b/lib/lib_audio/ESP8266Audio/library.properties @@ -1,9 +1,9 @@ name=ESP8266Audio -version=1.5.0 +version=1.9.2 author=Earle F. Philhower, III maintainer=Earle F. Philhower, III -sentence=Audio file and I2S sound playing routines. +sentence=Audio file and I2S sound playing routines for ESP8266, ESP32, and Raspberry Pi Pico RP2040 paragraph=Decode compressed MP3, AAC, FLAC, Screamtracker MOD, MIDI, RTTL, TI Talkie, and WAV and play on an I2S DAC or a software-driven delta-sigma DAC and 1-transistor amplifier. category=Signal Input/Output url=https://github.com/earlephilhower/ESP8266Audio -architectures=esp8266,esp32 +architectures=esp8266,esp32,rp2040 diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFS.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFS.h index fea34c29e..4e1cb8ec0 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFS.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFS.h @@ -29,8 +29,8 @@ class AudioFileSourceFS : public AudioFileSource { public: - AudioFileSourceFS(FS &fs) { filesystem = &fs; } - AudioFileSourceFS(FS &fs, const char *filename); + AudioFileSourceFS(fs::FS &fs) { filesystem = &fs; } + AudioFileSourceFS(fs::FS &fs, const char *filename); virtual ~AudioFileSourceFS() override; virtual bool open(const char *filename) override; @@ -42,8 +42,8 @@ class AudioFileSourceFS : public AudioFileSource virtual uint32_t getPos() override { if (!f) return 0; else return f.position(); }; private: - FS *filesystem; - File f; + fs::FS *filesystem; + fs::File f; }; diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.cpp b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.cpp new file mode 100644 index 000000000..9e86eff21 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.cpp @@ -0,0 +1,148 @@ +/* + AudioFileSourceFunction + Audio ouptut generator which can generate WAV file data from function + + Copyright (C) 2021 Hideaki Tai + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "AudioFileSourceFunction.h" + +AudioFileSourceFunction::AudioFileSourceFunction(float sec, uint16_t channels, uint32_t sample_per_sec, uint16_t bits_per_sample) { + uint32_t bytes_per_sec = sample_per_sec * channels * bits_per_sample / 8; + uint32_t len = uint32_t(sec * (float)bytes_per_sec); + + // RIFF chunk + strncpy(wav_header.riff.chunk_id, "RIFF", 4); + wav_header.riff.chunk_size = 4 // size of riff chunk w/o chunk_id and chunk_size + + 8 + 16 // size of format chunk + + 8 + len; // size of data chunk + strncpy(wav_header.riff.format, "WAVE", 4); + + // format chunk + strncpy(wav_header.format.chunk_id, "fmt ", 4); + wav_header.format.chunk_size = 16; + wav_header.format.format_tag = 0x0001; // PCM + wav_header.format.channels = channels; + wav_header.format.sample_per_sec = sample_per_sec; + wav_header.format.avg_bytes_per_sec = bytes_per_sec; + wav_header.format.block_align = channels * bits_per_sample / 8; + wav_header.format.bits_per_sample = bits_per_sample; + + // data chunk + strncpy(wav_header.data.chunk_id, "data", 4); + wav_header.data.chunk_size = len; + + funcs.reserve(channels); + pos = 0; + size = sizeof(WavHeader) + len; + is_ready = false; + is_unique = false; +} + +AudioFileSourceFunction::~AudioFileSourceFunction() { + close(); +} + +uint32_t AudioFileSourceFunction::read(void* data, uint32_t len) { + // callback size must be 1 or equal to channels + if (!is_ready) + return 0; + + uint8_t* d = reinterpret_cast(data); + uint32_t i = 0; + while (i < len) { + uint32_t p = pos + i; + if (p < sizeof(WavHeader)) { + // header bytes + d[i] = wav_header.bytes[p]; + i += 1; + } else { + // data bytes + float time = (float)(p - sizeof(WavHeader)) / (float)wav_header.format.avg_bytes_per_sec; + float v = funcs[0](time); + for (size_t ch = 0; ch < wav_header.format.channels; ++ch) { + if (!is_unique && ch > 0) + v = funcs[ch](time); + + switch (wav_header.format.bits_per_sample) { + case 8: { + Uint8AndInt8 vs {int8_t(v * (float)0x7F)}; + d[i] = vs.u; + break; + } + case 32: { + Uint8AndInt32 vs {int32_t(v * (float)0x7FFFFFFF)}; + d[i + 0] = vs.u[0]; + d[i + 1] = vs.u[1]; + d[i + 2] = vs.u[2]; + d[i + 3] = vs.u[3]; + break; + } + case 16: + default: { + Uint8AndInt16 vs {int16_t(v * (float)0x7FFF)}; + d[i + 0] = vs.u[0]; + d[i + 1] = vs.u[1]; + break; + } + } + } + i += wav_header.format.block_align; + } + } + pos += i; + return (pos >= size) ? 0 : i; +} + +bool AudioFileSourceFunction::seek(int32_t pos, int dir) { + if (dir == SEEK_SET) { + if (pos < 0 || (uint32_t)pos >= size) + return false; + this->pos = pos; + } else if (dir == SEEK_CUR) { + int32_t p = (int32_t)this->pos + pos; + if (p < 0 || (uint32_t)p >= size) + return false; + this->pos = p; + } else { + int32_t p = (int32_t)this->size + pos; + if (p < 0 || (uint32_t)p >= size) + return false; + this->pos = p; + } + return true; +} + +bool AudioFileSourceFunction::close() { + funcs.clear(); + pos = 0; + size = 0; + is_ready = false; + is_unique = false; + return true; +} + +bool AudioFileSourceFunction::isOpen() { + return is_ready; +} + +uint32_t AudioFileSourceFunction::getSize() { + return size; +} + +uint32_t AudioFileSourceFunction::getPos() { + return pos; +} diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.h new file mode 100644 index 000000000..6c41229ae --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceFunction.h @@ -0,0 +1,119 @@ +/* + AudioFileSourceFunction + Audio ouptut generator which can generate WAV file data from function + + Copyright (C) 2021 Hideaki Tai + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _AUDIOFILESOURCEFUNCTION_H +#define _AUDIOFILESOURCEFUNCTION_H + +#include +#include +#include + +#include "AudioFileSource.h" + +class AudioFileSourceFunction : public AudioFileSource { + union WavHeader { + struct { + // RIFF chunk + struct { + char chunk_id[4]; // "RIFF" + uint32_t chunk_size; // 4 + (8 + sizeof(format_chunk)(16)) + (8 + sizeof(data_chunk)) + char format[4]; // "WAVE" + } riff; + // format chunk + struct { + char chunk_id[4]; // "fmt " + uint32_t chunk_size; // 16 + uint16_t format_tag; // 1: PCM + uint16_t channels; // 1: MONO, 2: STEREO + uint32_t sample_per_sec; // 8000, 11025, 22050, 44100, 48000 + uint32_t avg_bytes_per_sec; // sample_per_sec * channels * bits_per_sample / 8 + uint16_t block_align; // channels * bits_per_sample / 8 + uint16_t bits_per_sample; // 8, 16, 32 + } format; + // data chunk + struct { + char chunk_id[4]; // "data" + uint32_t chunk_size; // num_samples * channels * bytes_per_sample + // audio data follows here... + } data; + }; + uint8_t bytes[44]; + } wav_header; + + union Uint8AndInt8 { + int8_t i; + uint8_t u; + }; + + union Uint8AndInt16 { + int16_t i; + uint8_t u[2]; + }; + + union Uint8AndInt32 { + int32_t i; + uint8_t u[4]; + }; + + using callback_t = std::function; + std::vector funcs; + uint32_t pos; + uint32_t size; + bool is_ready; + bool is_unique; + +public: + AudioFileSourceFunction(float sec, uint16_t channels = 1, uint32_t sample_per_sec = 8000, uint16_t bits_per_sample = 16); + virtual ~AudioFileSourceFunction() override; + + template + bool addAudioGenerators(const F& f, Fs&&... fs) { + funcs.emplace_back(f); + return addAudioGenerators(std::forward(fs)...); + } + bool addAudioGenerators() { + funcs.shrink_to_fit(); + if (funcs.size() == 1) { + is_ready = true; + is_unique = true; + return true; + } else if (funcs.size() == wav_header.format.channels) { + is_ready = true; + is_unique = false; + return true; + } else { + is_ready = false; + is_unique = false; + funcs.clear(); + return false; + } + } + + virtual uint32_t read(void* data, uint32_t len) override; + virtual bool seek(int32_t pos, int dir) override; + + virtual bool close() override; + virtual bool isOpen() override; + + virtual uint32_t getSize() override; + virtual uint32_t getPos() override; +}; + +#endif // _AUDIOFILESOURCEFUNCTION_H diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.cpp b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.cpp index c07eb0944..c5d0b8334 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.cpp @@ -18,6 +18,8 @@ along with this program. If not, see . */ +#if defined(ESP32) || defined(ESP8266) + #include "AudioFileSourceHTTPStream.h" AudioFileSourceHTTPStream::AudioFileSourceHTTPStream() @@ -40,7 +42,7 @@ bool AudioFileSourceHTTPStream::open(const char *url) http.begin(client, url); http.setReuse(true); #ifndef ESP32 - http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); + http.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS); #endif int code = http.GET(); if (code != HTTP_CODE_OK) { @@ -84,7 +86,7 @@ retry: cb.st(STATUS_DISCONNECTED, PSTR("Stream disconnected")); http.end(); for (int i = 0; i < reconnectTries; i++) { - char buff[32]; + char buff[64]; sprintf_P(buff, PSTR("Attempting to reconnect, try %d"), i); cb.st(STATUS_RECONNECTING, buff); delay(reconnectDelayMs); @@ -152,3 +154,5 @@ uint32_t AudioFileSourceHTTPStream::getPos() { return pos; } + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.h index e764b45d8..34e54663d 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceHTTPStream.h @@ -1,7 +1,7 @@ /* AudioFileSourceHTTPStream Connect to a HTTP based streaming service - + Copyright (C) 2017 Earle F. Philhower, III This program is free software: you can redistribute it and/or modify @@ -18,14 +18,13 @@ along with this program. If not, see . */ -#ifndef _AUDIOFILESOURCEHTTPSTREAM_H -#define _AUDIOFILESOURCEHTTPSTREAM_H +#if defined(ESP32) || defined(ESP8266) +#pragma once #include #ifdef ESP32 #include #else - #include #include #endif #include "AudioFileSource.h" @@ -38,7 +37,7 @@ class AudioFileSourceHTTPStream : public AudioFileSource AudioFileSourceHTTPStream(); AudioFileSourceHTTPStream(const char *url); virtual ~AudioFileSourceHTTPStream() override; - + virtual bool open(const char *url) override; virtual uint32_t read(void *data, uint32_t len) override; virtual uint32_t readNonBlock(void *data, uint32_t len) override; @@ -48,6 +47,7 @@ class AudioFileSourceHTTPStream : public AudioFileSource virtual uint32_t getSize() override; virtual uint32_t getPos() override; bool SetReconnect(int tries, int delayms) { reconnectTries = tries; reconnectDelayMs = delayms; return true; } + void useHTTP10 () { http.useHTTP10(true); } enum { STATUS_HTTPFAIL=2, STATUS_DISCONNECTED, STATUS_RECONNECTING, STATUS_RECONNECTED, STATUS_NODATA }; @@ -64,3 +64,4 @@ class AudioFileSourceHTTPStream : public AudioFileSource #endif + diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.cpp b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.cpp index cc7cc5e27..63c84f328 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.cpp @@ -17,6 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + +#if defined(ESP32) || defined(ESP8266) + #define _GNU_SOURCE #include "AudioFileSourceICYStream.h" @@ -83,12 +86,16 @@ AudioFileSourceICYStream::~AudioFileSourceICYStream() uint32_t AudioFileSourceICYStream::readInternal(void *data, uint32_t len, bool nonBlock) { + // Ensure we can't possibly read 2 ICY headers in a single go #355 + if (icyMetaInt > 1) { + len = std::min((int)(icyMetaInt >> 1), (int)len); + } retry: if (!http.connected()) { cb.st(STATUS_DISCONNECTED, PSTR("Stream disconnected")); http.end(); for (int i = 0; i < reconnectTries; i++) { - char buff[32]; + char buff[64]; sprintf_P(buff, PSTR("Attempting to reconnect, try %d"), i); cb.st(STATUS_RECONNECTING, buff); delay(reconnectDelayMs); @@ -211,3 +218,5 @@ retry: icyByteCount += ret; return read; } + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.h index dacbf7efd..97688a57d 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceICYStream.h @@ -1,7 +1,7 @@ /* AudioFileSourceHTTPStream Connect to a HTTP based streaming service - + Copyright (C) 2017 Earle F. Philhower, III This program is free software: you can redistribute it and/or modify @@ -18,8 +18,8 @@ along with this program. If not, see . */ -#ifndef _AUDIOFILESOURCEICYSTREAM_H -#define _AUDIOFILESOURCEICYSTREAM_H +#if defined(ESP32) || defined(ESP8266) +#pragma once #include #ifdef ESP32 @@ -36,7 +36,7 @@ class AudioFileSourceICYStream : public AudioFileSourceHTTPStream AudioFileSourceICYStream(); AudioFileSourceICYStream(const char *url); virtual ~AudioFileSourceICYStream() override; - + virtual bool open(const char *url) override; private: @@ -45,5 +45,4 @@ class AudioFileSourceICYStream : public AudioFileSourceHTTPStream int icyByteCount; }; - #endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceID3.cpp b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceID3.cpp index 1723b8d4d..2a22bb180 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceID3.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceID3.cpp @@ -143,6 +143,7 @@ uint32_t AudioFileSourceID3::read(void *data, uint32_t len) if (ret<10) return ret; if ((buff[0]!='I') || (buff[1]!='D') || (buff[2]!='3') || (buff[3]>0x04) || (buff[3]<0x02) || (buff[4]!=0)) { + cb.md("eof", false, "id3"); return 10 + src->read(buff+10, len-10); } @@ -212,9 +213,9 @@ uint32_t AudioFileSourceID3::read(void *data, uint32_t len) // Read the value and send to callback char value[64]; - uint16_t i; + uint32_t i; bool isUnicode = (id3.getByte()==1) ? true : false; - for (i=0; iread(data, len); } diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSD.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSD.h index 3eb079bce..eacd99188 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSD.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSD.h @@ -1,7 +1,7 @@ /* AudioFileSourceSPIFFS Input SD card "file" to be used by AudioGenerator - + Copyright (C) 2017 Earle F. Philhower, III This program is free software: you can redistribute it and/or modify @@ -22,10 +22,6 @@ #define _AUDIOFILESOURCESD_H #include "AudioFileSource.h" -#ifdef ESP8266 -#include -#include -#endif #include @@ -35,7 +31,7 @@ class AudioFileSourceSD : public AudioFileSource AudioFileSourceSD(); AudioFileSourceSD(const char *filename); virtual ~AudioFileSourceSD() override; - + virtual bool open(const char *filename) override; virtual uint32_t read(void *data, uint32_t len) override; virtual bool seek(int32_t pos, int dir) override; @@ -50,3 +46,4 @@ class AudioFileSourceSD : public AudioFileSource #endif + diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.cpp b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.cpp index fafadcea8..2c9eb3b96 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.cpp @@ -22,6 +22,8 @@ along with this program. If not, see . */ +#if defined(ESP32) || defined(ESP8266) + #include #include "AudioFileSourceSPIRAMBuffer.h" @@ -165,3 +167,5 @@ bool AudioFileSourceSPIRAMBuffer::loop() } return true; } + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.h b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.h index 19d915f1a..d8c05540b 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioFileSourceSPIRAMBuffer.h @@ -19,8 +19,8 @@ along with this program. If not, see . */ -#ifndef _AUDIOFILESOURCESPIRAMBUFFER_H -#define _AUDIOFILESOURCESPIRAMBUFFER_H +#if defined(ESP32) || defined(ESP8266) +#pragma once #include "AudioFileSource.h" #include diff --git a/lib/lib_audio/ESP8266Audio/src/AudioGenerator.h b/lib/lib_audio/ESP8266Audio/src/AudioGenerator.h index 889b2285c..6d974876a 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioGenerator.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioGenerator.h @@ -35,6 +35,7 @@ class AudioGenerator virtual bool loop() { return false; }; virtual bool stop() { return false; }; virtual bool isRunning() { return false;}; + virtual void desync () { }; public: virtual bool RegisterMetadataCB(AudioStatus::metadataCBFn fn, void *data) { return cb.RegisterMetadataCB(fn, data); } diff --git a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorAAC.cpp b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorAAC.cpp index 98f720786..c7568676a 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorAAC.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorAAC.cpp @@ -144,8 +144,13 @@ bool AudioGeneratorAAC::loop() // If we've got data, try and pump it out... while (validSamples) { - lastSample[0] = outSample[curSample*2]; - lastSample[1] = outSample[curSample*2 + 1]; + if (lastChannels == 1) { + lastSample[0] = outSample[curSample]; + lastSample[1] = outSample[curSample]; + } else { + lastSample[0] = outSample[curSample*2]; + lastSample[1] = outSample[curSample*2 + 1]; + } if (!output->ConsumeSample(lastSample)) goto done; // Can't send, but no error detected validSamples--; curSample++; diff --git a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorFLAC.cpp b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorFLAC.cpp index 1af00ce3a..bd6e801c9 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorFLAC.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorFLAC.cpp @@ -177,9 +177,9 @@ FLAC__StreamDecoderWriteStatus AudioGeneratorFLAC::write_cb(const FLAC__StreamDe // Hackish warning here. FLAC sends the buffer but doesn't free it until the next call to decode_frame, so we stash // the pointers here and use it in our loop() instead of memcpy()'ing into yet another buffer. buffLen = frame->header.blocksize; - buff[0] = buffer[0]; - if (frame->header.channels>1) buff[1] = buffer[1]; - else buff[1] = buffer[0]; + buff[0] = (const int *)buffer[0]; + if (frame->header.channels>1) buff[1] = (const int *)buffer[1]; + else buff[1] = (const int *)buffer[0]; buffPtr = 0; return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } diff --git a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.cpp b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.cpp index 2979a5848..d962c9e0b 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.cpp @@ -1,7 +1,7 @@ /* AudioGeneratorMP3 Wrap libmad MP3 library to play audio - + Copyright (C) 2017 Earle F. Philhower, III This program is free software: you can redistribute it and/or modify @@ -29,11 +29,23 @@ AudioGeneratorMP3::AudioGeneratorMP3() buff = NULL; nsCountMax = 1152/32; madInitted = false; - preallocateSpace = NULL; - preallocateSize = 0; } -AudioGeneratorMP3::AudioGeneratorMP3(void *space, int size) +AudioGeneratorMP3::AudioGeneratorMP3(void *space, int size): preallocateSpace(space), preallocateSize(size) +{ + running = false; + file = NULL; + output = NULL; + buff = NULL; + nsCountMax = 1152/32; + madInitted = false; +} + +AudioGeneratorMP3::AudioGeneratorMP3(void *buff, int buffSize, void *stream, int streamSize, void *frame, int frameSize, void *synth, int synthSize): + preallocateSpace(buff), preallocateSize(buffSize), + preallocateStreamSpace(stream), preallocateStreamSize(streamSize), + preallocateFrameSpace(frame), preallocateFrameSize(frameSize), + preallocateSynthSpace(synth), preallocateSynthSize(synthSize) { running = false; file = NULL; @@ -41,8 +53,6 @@ AudioGeneratorMP3::AudioGeneratorMP3(void *space, int size) buff = NULL; nsCountMax = 1152/32; madInitted = false; - preallocateSpace = space; - preallocateSize = size; } AudioGeneratorMP3::~AudioGeneratorMP3() @@ -52,7 +62,7 @@ AudioGeneratorMP3::~AudioGeneratorMP3() free(synth); free(frame); free(stream); - } + } } @@ -109,7 +119,12 @@ enum mad_flow AudioGeneratorMP3::Input() if (stream->next_frame) { unused = lastBuffLen - (stream->next_frame - buff); - memmove(buff, stream->next_frame, unused); + if (unused < 0) { + desync(); + unused = 0; + } else { + memmove(buff, stream->next_frame, unused); + } stream->next_frame = NULL; } @@ -125,6 +140,10 @@ enum mad_flow AudioGeneratorMP3::Input() // Can't read any from the file, and we don't have anything left. It's done.... return MAD_FLOW_STOP; } + if (len < 0) { + desync(); + unused = 0; + } lastBuffLen = len + unused; mad_stream_buffer(stream, buff, lastBuffLen); @@ -132,6 +151,16 @@ enum mad_flow AudioGeneratorMP3::Input() return MAD_FLOW_CONTINUE; } +void AudioGeneratorMP3::desync () +{ + audioLogger->printf_P(PSTR("MP3:desync\n")); + if (stream) { + stream->next_frame = nullptr; + stream->this_frame = nullptr; + stream->sync = 0; + } + lastBuffLen = 0; +} bool AudioGeneratorMP3::DecodeNextFrame() { @@ -153,7 +182,7 @@ bool AudioGeneratorMP3::GetOneSample(int16_t sample[2]) output->SetChannels(synth->pcm.channels); lastChannels = synth->pcm.channels; } - + // If we're here, we have one decoded frame and sent 0 or more samples out if (samplePtr < synth->pcm.length) { sample[AudioOutput::LEFTCHANNEL ] = synth->pcm.samples[0][samplePtr]; @@ -161,7 +190,7 @@ bool AudioGeneratorMP3::GetOneSample(int16_t sample[2]) samplePtr++; } else { samplePtr = 0; - + switch ( mad_synth_frame_onens(synth, frame, nsCount++) ) { case MAD_FLOW_STOP: case MAD_FLOW_BREAK: audioLogger->printf_P(PSTR("msf1ns failed\n")); @@ -196,6 +225,18 @@ retry: } if (!DecodeNextFrame()) { + if (stream->error == MAD_ERROR_BUFLEN) { + // randomly seeking can lead to endless + // and unrecoverable "MAD_ERROR_BUFLEN" loop + audioLogger->printf_P(PSTR("MP3:ERROR_BUFLEN %d\n"), unrecoverable); + if (++unrecoverable >= 3) { + unrecoverable = 0; + stop(); + return running; + } + } else { + unrecoverable = 0; + } goto retry; } samplePtr = 9999; @@ -229,6 +270,9 @@ bool AudioGeneratorMP3::begin(AudioFileSource *source, AudioOutput *output) return false; // Error } + // Reset error count from previous file + unrecoverable = 0; + output->SetBitsPerSample(16); // Constant for MP3 decoder output->SetChannels(2); @@ -243,16 +287,32 @@ bool AudioGeneratorMP3::begin(AudioFileSource *source, AudioOutput *output) lastBuffLen = 0; // Allocate all large memory chunks - if (preallocateSpace) { + if (preallocateStreamSize + preallocateFrameSize + preallocateSynthSize) { + if (preallocateSize >= preAllocBuffSize() && + preallocateStreamSize >= preAllocStreamSize() && + preallocateFrameSize >= preAllocFrameSize() && + preallocateSynthSize >= preAllocSynthSize()) { + buff = reinterpret_cast(preallocateSpace); + stream = reinterpret_cast(preallocateStreamSpace); + frame = reinterpret_cast(preallocateFrameSpace); + synth = reinterpret_cast(preallocateSynthSpace); + } + else { + audioLogger->printf_P("OOM error in MP3: Want %d/%d/%d/%d bytes, have %d/%d/%d/%d bytes preallocated.\n", + preAllocBuffSize(), preAllocStreamSize(), preAllocFrameSize(), preAllocSynthSize(), + preallocateSize, preallocateStreamSize, preallocateFrameSize, preallocateSynthSize); + return false; + } + } else if (preallocateSpace) { uint8_t *p = reinterpret_cast(preallocateSpace); buff = reinterpret_cast(p); - p += (buffLen+7) & ~7; + p += preAllocBuffSize(); stream = reinterpret_cast(p); - p += (sizeof(struct mad_stream)+7) & ~7; + p += preAllocStreamSize(); frame = reinterpret_cast(p); - p += (sizeof(struct mad_frame)+7) & ~7; + p += preAllocFrameSize(); synth = reinterpret_cast(p); - p += (sizeof(struct mad_synth)+7) & ~7; + p += preAllocSynthSize(); int neededBytes = p - reinterpret_cast(preallocateSpace); if (neededBytes > preallocateSize) { audioLogger->printf_P("OOM error in MP3: Want %d bytes, have %d bytes preallocated.\n", neededBytes, preallocateSize); @@ -272,19 +332,17 @@ bool AudioGeneratorMP3::begin(AudioFileSource *source, AudioOutput *output) stream = NULL; frame = NULL; synth = NULL; - uint32_t size = buffLen + sizeof(struct mad_stream) + sizeof(struct mad_frame) + sizeof(struct mad_synth); - audioLogger->printf_P("OOM error in MP3: Want %d bytes\n", size); return false; } } - + mad_stream_init(stream); mad_frame_init(frame); mad_synth_init(synth); synth->pcm.length = 0; mad_stream_options(stream, 0); // TODO - add options support madInitted = true; - + running = true; return true; } @@ -304,7 +362,7 @@ extern "C" { { return 8192; } -#elif defined(ESP8266) +#elif defined(ESP8266) && !defined(CORE_MOCK) #include extern cont_t g_cont; @@ -351,3 +409,4 @@ extern "C" { } #endif } + diff --git a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.h b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.h index 750cecaca..0f4e439e9 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioGeneratorMP3.h @@ -30,17 +30,31 @@ class AudioGeneratorMP3 : public AudioGenerator public: AudioGeneratorMP3(); AudioGeneratorMP3(void *preallocateSpace, int preallocateSize); + AudioGeneratorMP3(void *buff, int buffSize, void *stream, int streamSize, void *frame, int frameSize, void *synth, int synthSize); virtual ~AudioGeneratorMP3() override; virtual bool begin(AudioFileSource *source, AudioOutput *output) override; virtual bool loop() override; virtual bool stop() override; virtual bool isRunning() override; - - protected: - void *preallocateSpace; - int preallocateSize; + virtual void desync () override; - const int buffLen = 0x600; // Slightly larger than largest MP3 frame + static constexpr int preAllocSize () { return preAllocBuffSize() + preAllocStreamSize() + preAllocFrameSize() + preAllocSynthSize(); } + static constexpr int preAllocBuffSize () { return ((buffLen + 7) & ~7); } + static constexpr int preAllocStreamSize () { return ((sizeof(struct mad_stream) + 7) & ~7); } + static constexpr int preAllocFrameSize () { return (sizeof(struct mad_frame) + 7) & ~7; } + static constexpr int preAllocSynthSize () { return (sizeof(struct mad_synth) + 7) & ~7; } + + protected: + void *preallocateSpace = nullptr; + int preallocateSize = 0; + void *preallocateStreamSpace = nullptr; + int preallocateStreamSize = 0; + void *preallocateFrameSpace = nullptr; + int preallocateFrameSize = 0; + void *preallocateSynthSpace = nullptr; + int preallocateSynthSize = 0; + + static constexpr int buffLen = 0x600; // Slightly larger than largest MP3 frame unsigned char *buff; int lastReadPos; int lastBuffLen; @@ -62,6 +76,8 @@ class AudioGeneratorMP3 : public AudioGenerator bool DecodeNextFrame(); bool GetOneSample(int16_t sample[2]); + private: + int unrecoverable = 0; }; #endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.cpp b/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.cpp new file mode 100644 index 000000000..5c8af8e5c --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.cpp @@ -0,0 +1,245 @@ +/* + AudioOutputFilterBiquad + Implements a Biquad filter + + Copyright (C) 2012 Nigel Redmon + Copyright (C) 2021 William Bérubé + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "AudioOutputFilterBiquad.h" + +AudioOutputFilterBiquad::AudioOutputFilterBiquad(AudioOutput *sink) +{ + this->sink = sink; + + type = bq_type_lowpass; + a0 = 1.0; + a1 = a2 = b1 = b2 = 0.0; + Fc = 0.50; + Q = 0.707; + peakGain = 0.0; + z1 = z2 = 0.0; +} + +AudioOutputFilterBiquad::AudioOutputFilterBiquad(int type, float Fc, float Q, float peakGain, AudioOutput *sink) +{ + this->sink = sink; + + SetBiquad(type, Fc, Q, peakGain); + z1 = z2 = 0.0; +} + +AudioOutputFilterBiquad::~AudioOutputFilterBiquad() {} + +bool AudioOutputFilterBiquad::SetRate(int hz) +{ + return sink->SetRate(hz); +} + +bool AudioOutputFilterBiquad::SetBitsPerSample(int bits) +{ + return sink->SetBitsPerSample(bits); +} + +bool AudioOutputFilterBiquad::SetChannels(int channels) +{ + return sink->SetChannels(channels); +} + +bool AudioOutputFilterBiquad::SetGain(float gain) +{ + return sink->SetGain(gain); +} + +void AudioOutputFilterBiquad::SetType(int type) +{ + this->type = type; + CalcBiquad(); +} + +void AudioOutputFilterBiquad::SetFc(float Fc) +{ + this->Fc = Fc; + CalcBiquad(); +} + +void AudioOutputFilterBiquad::SetQ(float Q) +{ + this->Q = Q; + CalcBiquad(); +} + +void AudioOutputFilterBiquad::SetPeakGain(float peakGain) +{ + this->peakGain = peakGain; + CalcBiquad(); +} + +void AudioOutputFilterBiquad::SetBiquad(int type, float Fc, float Q, float peakGain) +{ + this->type = type; + this->Fc = Fc; + this->Q = Q; + this->peakGain = peakGain; + CalcBiquad(); +} + +void AudioOutputFilterBiquad::CalcBiquad() +{ + float norm; + float V = pow(10, fabs(peakGain) / 20.0); + float K = tan(M_PI * Fc); + + switch (this->type) { + case bq_type_lowpass: + norm = 1 / (1 + K / Q + K * K); + a0 = K * K * norm; + a1 = 2 * a0; + a2 = a0; + b1 = 2 * (K * K - 1) * norm; + b2 = (1 - K / Q + K * K) * norm; + break; + + case bq_type_highpass: + norm = 1 / (1 + K / Q + K * K); + a0 = 1 * norm; + a1 = -2 * a0; + a2 = a0; + b1 = 2 * (K * K - 1) * norm; + b2 = (1 - K / Q + K * K) * norm; + break; + + case bq_type_bandpass: + norm = 1 / (1 + K / Q + K * K); + a0 = K / Q * norm; + a1 = 0; + a2 = -a0; + b1 = 2 * (K * K - 1) * norm; + b2 = (1 - K / Q + K * K) * norm; + break; + + case bq_type_notch: + norm = 1 / (1 + K / Q + K * K); + a0 = (1 + K * K) * norm; + a1 = 2 * (K * K - 1) * norm; + a2 = a0; + b1 = a1; + b2 = (1 - K / Q + K * K) * norm; + break; + + case bq_type_peak: + if (peakGain >= 0) { // boost + norm = 1 / (1 + 1/Q * K + K * K); + a0 = (1 + V/Q * K + K * K) * norm; + a1 = 2 * (K * K - 1) * norm; + a2 = (1 - V/Q * K + K * K) * norm; + b1 = a1; + b2 = (1 - 1/Q * K + K * K) * norm; + } else { // cut + norm = 1 / (1 + V/Q * K + K * K); + a0 = (1 + 1/Q * K + K * K) * norm; + a1 = 2 * (K * K - 1) * norm; + a2 = (1 - 1/Q * K + K * K) * norm; + b1 = a1; + b2 = (1 - V/Q * K + K * K) * norm; + } + break; + + case bq_type_lowshelf: + if (peakGain >= 0) { // boost + norm = 1 / (1 + sqrt(2) * K + K * K); + a0 = (1 + sqrt(2*V) * K + V * K * K) * norm; + a1 = 2 * (V * K * K - 1) * norm; + a2 = (1 - sqrt(2*V) * K + V * K * K) * norm; + b1 = 2 * (K * K - 1) * norm; + b2 = (1 - sqrt(2) * K + K * K) * norm; + } + else { // cut + norm = 1 / (1 + sqrt(2*V) * K + V * K * K); + a0 = (1 + sqrt(2) * K + K * K) * norm; + a1 = 2 * (K * K - 1) * norm; + a2 = (1 - sqrt(2) * K + K * K) * norm; + b1 = 2 * (V * K * K - 1) * norm; + b2 = (1 - sqrt(2*V) * K + V * K * K) * norm; + } + break; + + case bq_type_highshelf: + if (peakGain >= 0) { // boost + norm = 1 / (1 + sqrt(2) * K + K * K); + a0 = (V + sqrt(2*V) * K + K * K) * norm; + a1 = 2 * (K * K - V) * norm; + a2 = (V - sqrt(2*V) * K + K * K) * norm; + b1 = 2 * (K * K - 1) * norm; + b2 = (1 - sqrt(2) * K + K * K) * norm; + } + else { // cut + norm = 1 / (V + sqrt(2*V) * K + K * K); + a0 = (1 + sqrt(2) * K + K * K) * norm; + a1 = 2 * (K * K - 1) * norm; + a2 = (1 - sqrt(2) * K + K * K) * norm; + b1 = 2 * (K * K - V) * norm; + b2 = (V - sqrt(2*V) * K + K * K) * norm; + } + break; + } + + i_a0 = a0 * BQ_DECAL; + i_a1 = a1 * BQ_DECAL; + i_a2 = a2 * BQ_DECAL; + + i_b1 = b1 * BQ_DECAL; + i_b2 = b2 * BQ_DECAL; + + i_lz1 = i_rz1 = z1 * BQ_DECAL; + i_lz2 = i_rz2 = z2 * BQ_DECAL; + + i_Fc = Fc * BQ_DECAL; + i_Q = Q * BQ_DECAL; + i_peakGain = peakGain * BQ_DECAL; +} + +bool AudioOutputFilterBiquad::begin() +{ + return sink->begin(); +} + +bool AudioOutputFilterBiquad::ConsumeSample(int16_t sample[2]) +{ + + int32_t leftSample = (sample[LEFTCHANNEL] << BQ_SHIFT) / 2; + int32_t rightSample = (sample[RIGHTCHANNEL] << BQ_SHIFT) / 2; + + int64_t leftOutput = ((leftSample * i_a0) >> BQ_SHIFT) + i_lz1; + i_lz1 = ((leftSample * i_a1) >> BQ_SHIFT) + i_lz2 - ((i_b1 * leftOutput) >> BQ_SHIFT); + i_lz2 = ((leftSample * i_a2) >> BQ_SHIFT) - ((i_b2 * leftOutput) >> BQ_SHIFT); + + int64_t rightOutput = ((rightSample * i_a0) >> BQ_SHIFT) + i_rz1; + i_rz1 = ((rightSample * i_a1) >> BQ_SHIFT) + i_rz2 - ((i_b1 * rightOutput) >> BQ_SHIFT); + i_rz2 = ((rightSample * i_a2) >> BQ_SHIFT) - ((i_b2 * rightOutput) >> BQ_SHIFT); + + int16_t out[2]; + out[LEFTCHANNEL] = (int16_t)(leftOutput >> BQ_SHIFT); + out[RIGHTCHANNEL] = (int16_t)(rightOutput >> BQ_SHIFT); + + return sink->ConsumeSample(out); +} + +bool AudioOutputFilterBiquad::stop() +{ + return sink->stop(); +} diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.h b/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.h new file mode 100644 index 000000000..f4dc95f51 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputFilterBiquad.h @@ -0,0 +1,80 @@ +/* + AudioOutputFilterBiquad + Implements a Biquad filter + + Copyright (C) 2012 Nigel Redmon + Copyright (C) 2021 William Bérubé + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _AudioOutputFilterBiquad_H +#define _AudioOutputFilterBiquad_H + +#include "AudioOutput.h" + +#define BQ_SHIFT 16 +#define BQ_DECAL 65536 + +enum { + bq_type_lowpass = 0, + bq_type_highpass, + bq_type_bandpass, + bq_type_notch, + bq_type_peak, + bq_type_lowshelf, + bq_type_highshelf +}; + +class AudioOutputFilterBiquad : public AudioOutput +{ + public: + AudioOutputFilterBiquad(AudioOutput *sink); + AudioOutputFilterBiquad(int type, float Fc, float Q, float peakGain, AudioOutput *sink); + virtual ~AudioOutputFilterBiquad() override; + virtual bool SetRate(int hz) override; + virtual bool SetBitsPerSample(int bits) override; + virtual bool SetChannels(int chan) override; + virtual bool SetGain(float f) override; + virtual bool begin() override; + virtual bool ConsumeSample(int16_t sample[2]) override; + virtual bool stop() override; + + private: + void SetType(int type); + void SetFc(float Fc); + void SetQ(float Q); + void SetPeakGain(float peakGain); + void SetBiquad(int type, float Fc, float Q, float peakGain); + + protected: + AudioOutput *sink; + int buffSize; + int16_t *leftSample; + int16_t *rightSample; + int writePtr; + int readPtr; + bool filled; + int type; + void CalcBiquad(); + int64_t i_a0, i_a1, i_a2, i_b1, i_b2; + int64_t i_Fc, i_Q, i_peakGain; + int64_t i_lz1, i_lz2, i_rz1, i_rz2; + float a0, a1, a2, b1, b2; + float Fc, Q, peakGain; + float z1, z2; +}; + +#endif + diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.cpp b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.cpp index c028df105..5e524894d 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.cpp @@ -21,11 +21,16 @@ #include #ifdef ESP32 #include "driver/i2s.h" -#else - #include +#elif defined(ARDUINO_ARCH_RP2040) || defined(ESP8266) + #ifdef ARDUINO_ESP8266_MAJOR //this define was added in ESP8266 Arduino Core version v3.0.1 + #include "core_esp8266_i2s.h" //for Arduino core >= 3.0.1 + #else + #include "i2s.h" //for Arduino core <= 3.0.0 + #endif #endif #include "AudioOutputI2S.h" +#if defined(ESP32) || defined(ESP8266) AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int use_apll) { this->portNo = port; @@ -35,115 +40,93 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int output_mode = EXTERNAL_I2S; } this->output_mode = output_mode; -#ifdef ESP32 - if (!i2sOn) { - if (use_apll == APLL_AUTO) { - // don't use audio pll on buggy rev0 chips - use_apll = APLL_DISABLE; - esp_chip_info_t out_info; - esp_chip_info(&out_info); - if(out_info.revision > 0) { - use_apll = APLL_ENABLE; - } - } + this->use_apll = use_apll; - i2s_mode_t mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX); -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 - if (output_mode == INTERNAL_DAC) { - mode = (i2s_mode_t)(mode | I2S_MODE_DAC_BUILT_IN); - } else if (output_mode == INTERNAL_PDM) { - mode = (i2s_mode_t)(mode | I2S_MODE_PDM); - } -#endif - - i2s_comm_format_t comm_fmt = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB); - if (output_mode == INTERNAL_DAC) { - comm_fmt = (i2s_comm_format_t)I2S_COMM_FORMAT_I2S_MSB; - } - - i2s_config_t i2s_config_dac = { - .mode = mode, - .sample_rate = 44100, - .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, - .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, - .communication_format = comm_fmt, - .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, // lowest interrupt priority - .dma_buf_count = dma_buf_count, - .dma_buf_len = 64, - .use_apll = use_apll // Use audio PLL - }; - audioLogger->printf("+%d %p\n", portNo, &i2s_config_dac); - if (i2s_driver_install((i2s_port_t)portNo, &i2s_config_dac, 0, NULL) != ESP_OK) { - audioLogger->println("ERROR: Unable to install I2S drives\n"); - } - if (output_mode == INTERNAL_DAC || output_mode == INTERNAL_PDM) { - i2s_set_pin((i2s_port_t)portNo, NULL); - i2s_set_dac_mode(I2S_DAC_CHANNEL_BOTH_EN); - } else { - SetPinout(26, 25, 22); - } - i2s_zero_dma_buffer((i2s_port_t)portNo); - } -#else - (void) dma_buf_count; - (void) use_apll; - if (!i2sOn) { - orig_bck = READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U); - orig_ws = READ_PERI_REG(PERIPHS_IO_MUX_GPIO2_U); - i2s_begin(); - } -#endif - i2sOn = true; + //set defaults mono = false; bps = 16; channels = 2; + hertz = 44100; + bclkPin = 26; + wclkPin = 25; + doutPin = 22; SetGain(1.0); - SetRate(44100); // Default } -AudioOutputI2S::~AudioOutputI2S() +bool AudioOutputI2S::SetPinout() { -#ifdef ESP32 - if (i2sOn) { - audioLogger->printf("UNINSTALL I2S\n"); - i2s_driver_uninstall((i2s_port_t)portNo); //stop & destroy i2s driver - } -#else - if (i2sOn) i2s_end(); -#endif - i2sOn = false; + #ifdef ESP32 + if (output_mode == INTERNAL_DAC || output_mode == INTERNAL_PDM) + return false; // Not allowed + + i2s_pin_config_t pins = { + .bck_io_num = bclkPin, + .ws_io_num = wclkPin, + .data_out_num = doutPin, + .data_in_num = I2S_PIN_NO_CHANGE}; + i2s_set_pin((i2s_port_t)portNo, &pins); + return true; + #else + (void)bclkPin; + (void)wclkPin; + (void)doutPin; + return false; + #endif } bool AudioOutputI2S::SetPinout(int bclk, int wclk, int dout) { -#ifdef ESP32 - if (output_mode == INTERNAL_DAC || output_mode == INTERNAL_PDM) return false; // Not allowed + bclkPin = bclk; + wclkPin = wclk; + doutPin = dout; + if (i2sOn) + return SetPinout(); - i2s_pin_config_t pins = { - .bck_io_num = bclk, - .ws_io_num = wclk, - .data_out_num = dout, - .data_in_num = I2S_PIN_NO_CHANGE - }; - i2s_set_pin((i2s_port_t)portNo, &pins); return true; -#else - (void) bclk; - (void) wclk; - (void) dout; - return false; +} +#elif defined(ARDUINO_ARCH_RP2040) +AudioOutputI2S::AudioOutputI2S(long sampleRate, pin_size_t sck, pin_size_t data) { + i2sOn = false; + mono = false; + bps = 16; + channels = 2; + hertz = sampleRate; + bclkPin = sck; + doutPin = data; + SetGain(1.0); +} #endif + +AudioOutputI2S::~AudioOutputI2S() +{ + #ifdef ESP32 + if (i2sOn) { + audioLogger->printf("UNINSTALL I2S\n"); + i2s_driver_uninstall((i2s_port_t)portNo); //stop & destroy i2s driver + } + #elif defined(ESP8266) + if (i2sOn) + i2s_end(); + #elif defined(ARDUINO_ARCH_RP2040) + stop(); + #endif + i2sOn = false; } bool AudioOutputI2S::SetRate(int hz) { // TODO - have a list of allowable rates from constructor, check them this->hertz = hz; -#ifdef ESP32 - i2s_set_sample_rates((i2s_port_t)portNo, AdjustI2SRate(hz)); -#else - i2s_set_rate(AdjustI2SRate(hz)); -#endif + if (i2sOn) + { + #ifdef ESP32 + i2s_set_sample_rates((i2s_port_t)portNo, AdjustI2SRate(hz)); + #elif defined(ESP8266) + i2s_set_rate(AdjustI2SRate(hz)); + #elif defined(ARDUINO_ARCH_RP2040) + I2S.setFrequency(hz); + #endif + } return true; } @@ -167,13 +150,106 @@ bool AudioOutputI2S::SetOutputModeMono(bool mono) return true; } -bool AudioOutputI2S::begin() +bool AudioOutputI2S::begin(bool txDAC) { + #ifdef ESP32 + if (!i2sOn) + { + if (use_apll == APLL_AUTO) + { + // don't use audio pll on buggy rev0 chips + use_apll = APLL_DISABLE; + esp_chip_info_t out_info; + esp_chip_info(&out_info); + if (out_info.revision > 0) + { + use_apll = APLL_ENABLE; + } + } + + i2s_mode_t mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX); + if (output_mode == INTERNAL_DAC) + { + mode = (i2s_mode_t)(mode | I2S_MODE_DAC_BUILT_IN); + } + else if (output_mode == INTERNAL_PDM) + { + mode = (i2s_mode_t)(mode | I2S_MODE_PDM); + } + + i2s_comm_format_t comm_fmt = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB); + if (output_mode == INTERNAL_DAC) + { + comm_fmt = (i2s_comm_format_t)I2S_COMM_FORMAT_I2S_MSB; + } + + i2s_config_t i2s_config_dac = { + .mode = mode, + .sample_rate = 44100, + .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, + .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, + .communication_format = comm_fmt, + .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, // lowest interrupt priority + .dma_buf_count = dma_buf_count, + .dma_buf_len = 64, + .use_apll = use_apll // Use audio PLL + }; + audioLogger->printf("+%d %p\n", portNo, &i2s_config_dac); + if (i2s_driver_install((i2s_port_t)portNo, &i2s_config_dac, 0, NULL) != ESP_OK) + { + audioLogger->println("ERROR: Unable to install I2S drives\n"); + } + if (output_mode == INTERNAL_DAC || output_mode == INTERNAL_PDM) + { + i2s_set_pin((i2s_port_t)portNo, NULL); + i2s_set_dac_mode(I2S_DAC_CHANNEL_BOTH_EN); + } + else + { + SetPinout(); + } + i2s_zero_dma_buffer((i2s_port_t)portNo); + } + #elif defined(ESP8266) + (void)dma_buf_count; + (void)use_apll; + if (!i2sOn) + { + orig_bck = READ_PERI_REG(PERIPHS_IO_MUX_MTDO_U); + orig_ws = READ_PERI_REG(PERIPHS_IO_MUX_GPIO2_U); + #ifdef I2S_HAS_BEGIN_RXTX_DRIVE_CLOCKS + if (!i2s_rxtxdrive_begin(false, true, false, txDAC)) { + return false; + } + #else + if (!i2s_rxtx_begin(false, true)) { + return false; + } + if (!txDAC) { + audioLogger->printf_P(PSTR("I2SNoDAC: esp8266 arduino core should be upgraded to avoid conflicts with SPI\n")); + } + #endif + } + #elif defined(ARDUINO_ARCH_RP2040) + (void)txDAC; + if (!i2sOn) { + I2S.setBCLK(bclkPin); + I2S.setDOUT(doutPin); + I2S.begin(hertz); + } + #endif + i2sOn = true; + SetRate(hertz); // Default return true; } bool AudioOutputI2S::ConsumeSample(int16_t sample[2]) { + + //return if we haven't called ::begin yet + if (!i2sOn) + return false; + int16_t ms[2]; ms[0] = sample[0]; @@ -185,43 +261,59 @@ bool AudioOutputI2S::ConsumeSample(int16_t sample[2]) int32_t ttl = ms[LEFTCHANNEL] + ms[RIGHTCHANNEL]; ms[LEFTCHANNEL] = ms[RIGHTCHANNEL] = (ttl>>1) & 0xffff; } -#ifdef ESP32 - uint32_t s32; - if (output_mode == INTERNAL_DAC) { - int16_t l = Amplify(ms[LEFTCHANNEL]) + 0x8000; - int16_t r = Amplify(ms[RIGHTCHANNEL]) + 0x8000; - s32 = (r<<16) | (l&0xffff); - } else { - s32 = ((Amplify(ms[RIGHTCHANNEL]))<<16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); - } + #ifdef ESP32 + uint32_t s32; + if (output_mode == INTERNAL_DAC) + { + int16_t l = Amplify(ms[LEFTCHANNEL]) + 0x8000; + int16_t r = Amplify(ms[RIGHTCHANNEL]) + 0x8000; + s32 = (r << 16) | (l & 0xffff); + } + else + { + s32 = ((Amplify(ms[RIGHTCHANNEL])) << 16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); + } // Deprecated. Use i2s_write -// return i2s_write_bytes((i2s_port_t)portNo, (const char*)&s32, sizeof(uint32_t), 0); - size_t bytes_written; - i2s_write((i2s_port_t)portNo, (const char*)&s32, sizeof(uint32_t), &bytes_written, 0); - return bytes_written; -#else - uint32_t s32 = ((Amplify(ms[RIGHTCHANNEL]))<<16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); - return i2s_write_sample_nb(s32); // If we can't store it, return false. OTW true -#endif +// return i2s_write_bytes((i2s_port_t)portNo, (const char *)&s32, sizeof(uint32_t), 0); + size_t bytes_written; + i2s_write((i2s_port_t)portNo, (const char*)&s32, sizeof(uint32_t), &bytes_written, 0); + return bytes_written; + #elif defined(ESP8266) + uint32_t s32 = ((Amplify(ms[RIGHTCHANNEL])) << 16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); + return i2s_write_sample_nb(s32); // If we can't store it, return false. OTW true + #elif defined(ARDUINO_ARCH_RP2040) + return !!I2S.write((void*)ms, 4); + #endif } -void AudioOutputI2S::flush() { -#ifdef ESP32 - // makes sure that all stored DMA samples are consumed / played - int buffersize = 64 * this->dma_buf_count; - int16_t samples[2] = {0x0,0x0}; - for (int i=0;idma_buf_count; + int16_t samples[2] = {0x0, 0x0}; + for (int i = 0; i < buffersize; i++) + { + while (!ConsumeSample(samples)) + { + delay(10); + } } - } -#endif + #elif defined(ARDUINO_ARCH_RP2040) + I2S.flush(); + #endif } bool AudioOutputI2S::stop() { -#ifdef ESP32 - i2s_zero_dma_buffer((i2s_port_t)portNo); -#endif + if (!i2sOn) + return false; + + #ifdef ESP32 + i2s_zero_dma_buffer((i2s_port_t)portNo); + #elif defined(ARDUINO_ARCH_RP2040) + I2S.end(); + #endif + i2sOn = false; return true; } diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.h b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.h index 6070ca4e8..90370dc27 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2S.h @@ -18,41 +18,47 @@ along with this program. If not, see . */ -#ifndef _AUDIOOUTPUTI2S_H -#define _AUDIOOUTPUTI2S_H +#pragma once #include "AudioOutput.h" class AudioOutputI2S : public AudioOutput { public: +#if defined(ESP32) || defined(ESP8266) AudioOutputI2S(int port=0, int output_mode=EXTERNAL_I2S, int dma_buf_count = 8, int use_apll=APLL_DISABLE); - virtual ~AudioOutputI2S() override; bool SetPinout(int bclkPin, int wclkPin, int doutPin); + enum : int { APLL_AUTO = -1, APLL_ENABLE = 1, APLL_DISABLE = 0 }; + enum : int { EXTERNAL_I2S = 0, INTERNAL_DAC = 1, INTERNAL_PDM = 2 }; +#elif defined(ARDUINO_ARCH_RP2040) + AudioOutputI2S(long sampleRate = 44100, pin_size_t sck = 26, pin_size_t data = 28); +#endif + virtual ~AudioOutputI2S() override; virtual bool SetRate(int hz) override; virtual bool SetBitsPerSample(int bits) override; virtual bool SetChannels(int channels) override; - virtual bool begin() override; + virtual bool begin() override { return begin(true); } virtual bool ConsumeSample(int16_t sample[2]) override; virtual void flush() override; virtual bool stop() override; + bool begin(bool txDAC); bool SetOutputModeMono(bool mono); // Force mono output no matter the input - enum : int { APLL_AUTO = -1, APLL_ENABLE = 1, APLL_DISABLE = 0 }; - enum : int { EXTERNAL_I2S = 0, INTERNAL_DAC = 1, INTERNAL_PDM = 2 }; - protected: + bool SetPinout(); virtual int AdjustI2SRate(int hz) { return hz; } uint8_t portNo; int output_mode; bool mono; bool i2sOn; int dma_buf_count; + int use_apll; // We can restore the old values and free up these pins when in NoDAC mode uint32_t orig_bck; uint32_t orig_ws; + + uint8_t bclkPin; + uint8_t wclkPin; + uint8_t doutPin; }; - -#endif - diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.cpp b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.cpp index 4f7b21ff7..116d9ac74 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.cpp @@ -21,8 +21,12 @@ #include #ifdef ESP32 #include "driver/i2s.h" -#else - #include +#elif defined(ARDUINO_ARCH_RP2040) || defined(ESP8266) + #ifdef ARDUINO_ESP8266_MAJOR //this define was added in ESP8266 Arduino Core version v3.0.1 + #include "core_esp8266_i2s.h" //for Arduino core >= 3.0.1 + #else + #include "i2s.h" //for Arduino core <= 3.0.0 + #endif #endif #include "AudioOutputI2SNoDAC.h" @@ -32,7 +36,7 @@ AudioOutputI2SNoDAC::AudioOutputI2SNoDAC(int port) : AudioOutputI2S(port, false) SetOversampling(32); lastSamp = 0; cumErr = 0; -#ifndef ESP32 +#ifdef ESP8266 WRITE_PERI_REG(PERIPHS_IO_MUX_MTDO_U, orig_bck); WRITE_PERI_REG(PERIPHS_IO_MUX_GPIO2_U, orig_ws); #endif @@ -95,19 +99,23 @@ bool AudioOutputI2SNoDAC::ConsumeSample(int16_t sample[2]) // Either send complete pulse stream or nothing #ifdef ESP32 - // Deprecated. Use i2s_write // if (!i2s_write_bytes((i2s_port_t)portNo, (const char *)dsBuff, sizeof(uint32_t) * (oversample/32), 0)) size_t bytes_written; i2s_write((i2s_port_t)portNo, (const char *)dsBuff, sizeof(uint32_t) * (oversample/32), &bytes_written, 0); if (!bytes_written) return false; -#else +#elif defined(ESP8266) if (!i2s_write_sample_nb(dsBuff[0])) return false; // No room at the inn // At this point we've sent in first of possibly 8 32-bits, need to send // remaining ones even if they block. for (int i = 32; i < oversample; i+=32) i2s_write_sample( dsBuff[i / 32]); +#elif defined(ARDUINO_ARCH_RP2040) + int16_t *p = (int16_t *) dsBuff; + for (int i = 0; i < oversample / 16; i++) { + I2S.write(*(p++)); + } #endif return true; } diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.h b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.h index b5f321457..2a6322524 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputI2SNoDAC.h @@ -18,8 +18,7 @@ along with this program. If not, see . */ -#ifndef _AUDIOOUTPUTI2SNODAC_H -#define _AUDIOOUTPUTI2SNODAC_H +#pragma once #include "AudioOutputI2S.h" @@ -28,6 +27,7 @@ class AudioOutputI2SNoDAC : public AudioOutputI2S public: AudioOutputI2SNoDAC(int port = 0); virtual ~AudioOutputI2SNoDAC() override; + virtual bool begin() override { return AudioOutputI2S::begin(false); } virtual bool ConsumeSample(int16_t sample[2]) override; bool SetOversampling(int os); @@ -41,6 +41,3 @@ class AudioOutputI2SNoDAC : public AudioOutputI2S fixed24p8_t lastSamp; // Last sample value fixed24p8_t cumErr; // Running cumulative error since time began }; - -#endif - diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.cpp b/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.cpp index 8c993c5f9..53483d4ac 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.cpp +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.cpp @@ -37,6 +37,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#if defined(ESP32) || defined(ESP8266) #include #if defined(ESP32) @@ -286,3 +287,5 @@ bool AudioOutputSPDIF::stop() frame_num = 0; return true; } + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.h b/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.h index 92a4e46e4..5da160b3d 100644 --- a/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.h +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputSPDIF.h @@ -30,8 +30,8 @@ along with this program. If not, see . */ -#ifndef _AUDIOOUTPUTSPDIF_H -#define _AUDIOOUTPUTSPDIF_H +#if defined(ESP32) || defined(ESP8266) +#pragma once #include "AudioOutput.h" diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.cpp b/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.cpp new file mode 100644 index 000000000..63177e3a1 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.cpp @@ -0,0 +1,262 @@ +/* + AudioOutputULP + Outputs to ESP32 DAC through the ULP, freeing I2S for other uses + + Copyright (C) 2020 Martin Laclaustra, based on bitluni's code + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef ESP32 + +#include "AudioOutputULP.h" +#include +#include +#include +#include +#include + +uint32_t create_I_WR_REG(uint32_t reg, uint32_t low_bit, uint32_t high_bit, uint32_t val){ + typedef union {ulp_insn_t ulp_ins; uint32_t ulp_bin;} ulp_union; + const ulp_insn_t singleinstruction[] = {I_WR_REG(reg, low_bit, high_bit, val)}; + ulp_union recover_ins; + recover_ins.ulp_ins=singleinstruction[0]; + return (uint32_t)(recover_ins.ulp_bin); +} + +uint32_t create_I_BXI(uint32_t imm_pc){ + typedef union {ulp_insn_t ulp_ins; uint32_t ulp_bin;} ulp_union; + const ulp_insn_t singleinstruction[] = {I_BXI(imm_pc)}; + ulp_union recover_ins; + recover_ins.ulp_ins=singleinstruction[0]; + return (uint32_t)(recover_ins.ulp_bin); +} + +bool AudioOutputULP::begin() +{ + if(!stereoOutput){ + waitingOddSample = false; + //totalSampleWords += 512; + //dacTableStart2 = dacTableStart1; + } + + //calculate the actual ULP clock + unsigned long rtc_8md256_period = rtc_clk_cal(RTC_CAL_8MD256, 1000); + unsigned long rtc_fast_freq_hz = 1000000ULL * (1 << RTC_CLK_CAL_FRACT) * 256 / rtc_8md256_period; + + //initialize DACs + if(activeDACs & 1){ + dac_output_enable(DAC_CHANNEL_1); + dac_output_voltage(DAC_CHANNEL_1, 128); + } + if(activeDACs & 2){ + dac_output_enable(DAC_CHANNEL_2); + dac_output_voltage(DAC_CHANNEL_2, 128); + } + + int retAddress1 = 9; + int retAddress2 = 14; + + int loopCycles = 134; + int loopHalfCycles1 = 90; + int loopHalfCycles2 = 44; + + Serial.print("Real RTC clock: "); + Serial.println(rtc_fast_freq_hz); + + uint32_t dt = (rtc_fast_freq_hz / hertz) - loopCycles; + uint32_t dt2 = 0; + if(!stereoOutput){ + dt = (rtc_fast_freq_hz / hertz) - loopHalfCycles1; + dt2 = (rtc_fast_freq_hz / hertz) - loopHalfCycles2; + } + + Serial.print("dt: "); + Serial.println(dt); + + Serial.print("dt2: "); + Serial.println(dt2); + + const ulp_insn_t stereo[] = { + //reset offset register + I_MOVI(R3, 0), + //delay to get the right sampling rate + I_DELAY(dt), // 6 + dt + //reset sample index + I_MOVI(R0, 0), // 6 + //write the index back to memory for the main cpu + I_ST(R0, R3, indexAddress), // 8 + //load the samples + I_LD(R1, R0, bufferStart), // 8 + //mask the lower 8 bits + I_ANDI(R2, R1, 0x00ff), // 6 + //multiply by 2 + I_LSHI(R2, R2, 1), // 6 + //add start position + I_ADDI(R2, R2, dacTableStart1),// 6 + //jump to the dac opcode + I_BXR(R2), // 4 + //back from first dac + //delay between the two samples in mono rendering + I_DELAY(dt2), // 6 + dt2 + //mask the upper 8 bits + I_ANDI(R2, R1, 0xff00), // 6 + //shift the upper bits to right and multiply by 2 + I_RSHI(R2, R2, 8 - 1), // 6 + //add start position of second dac table + I_ADDI(R2, R2, dacTableStart2),// 6 + //jump to the dac opcode + I_BXR(R2), // 4 + //here we get back from writing the second sample + //load 0x8080 as sample + I_MOVI(R1, 0x8080), // 6 + //write 0x8080 in the sample buffer + I_ST(R1, R0, indexAddress), // 8 + //increment the sample index + I_ADDI(R0, R0, 1), // 6 + //if reached end of the buffer, jump relative to index reset + I_BGE(-16, totalSampleWords), // 4 + //wait to get the right sample rate (2 cycles more to compensate the index reset) + I_DELAY((unsigned int)dt + 2), // 8 + dt + //if not, jump absolute to where index is written to memory + I_BXI(3) // 4 + }; + // write io and jump back another 12 + 4 + 12 + 4 + + size_t load_addr = 0; + size_t size = sizeof(stereo)/sizeof(ulp_insn_t); + ulp_process_macros_and_load(load_addr, stereo, &size); + // this is how to get the opcodes + // for(int i = 0; i < size; i++) + // Serial.println(RTC_SLOW_MEM[i], HEX); + + //create DAC opcode tables + switch(activeDACs){ + case 1: + for(int i = 0; i < 256; i++) + { + RTC_SLOW_MEM[dacTableStart1 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC1_REG,19,26,i); //dac1: 0x1D4C0121 | (i << 10) + RTC_SLOW_MEM[dacTableStart1 + 1 + i * 2] = create_I_BXI(retAddress1); // 0x80000000 + retAddress1 * 4 + RTC_SLOW_MEM[dacTableStart2 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC1_REG,19,26,i); //dac2: 0x1D4C0122 | (i << 10) + RTC_SLOW_MEM[dacTableStart2 + 1 + i * 2] = create_I_BXI(retAddress2); // 0x80000000 + retAddress2 * 4 + } + break; + case 2: + for(int i = 0; i < 256; i++) + { + RTC_SLOW_MEM[dacTableStart1 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC2_REG,19,26,i); //dac1: 0x1D4C0121 | (i << 10) + RTC_SLOW_MEM[dacTableStart1 + 1 + i * 2] = create_I_BXI(retAddress1); // 0x80000000 + retAddress1 * 4 + RTC_SLOW_MEM[dacTableStart2 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC2_REG,19,26,i); //dac2: 0x1D4C0122 | (i << 10) + RTC_SLOW_MEM[dacTableStart2 + 1 + i * 2] = create_I_BXI(retAddress2); // 0x80000000 + retAddress2 * 4 + } + break; + case 3: + for(int i = 0; i < 256; i++) + { + RTC_SLOW_MEM[dacTableStart1 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC1_REG,19,26,i); //dac1: 0x1D4C0121 | (i << 10) + RTC_SLOW_MEM[dacTableStart1 + 1 + i * 2] = create_I_BXI(retAddress1); // 0x80000000 + retAddress1 * 4 + RTC_SLOW_MEM[dacTableStart2 + i * 2] = create_I_WR_REG(RTC_IO_PAD_DAC1_REG,19,26,i); //dac2: 0x1D4C0122 | (i << 10) + RTC_SLOW_MEM[dacTableStart2 + 1 + i * 2] = create_I_BXI(retAddress2); // 0x80000000 + retAddress2 * 4 + } + break; + } + + //set all samples to 128 (silence) + for(int i = 0; i < totalSampleWords; i++) + RTC_SLOW_MEM[bufferStart + i] = 0x8080; + + //start + RTC_SLOW_MEM[indexAddress] = 0; + ulp_run(0); + + //wait until ULP starts using samples and the index of output sample advances + while(RTC_SLOW_MEM[indexAddress] == 0) + delay(1); + + return true; +} + +bool AudioOutputULP::ConsumeSample(int16_t sample[2]) +{ + int16_t ms[2]; + ms[0] = sample[0]; + ms[1] = sample[1]; + MakeSampleStereo16( ms ); + + // TODO: needs improvement (counting is different here with respect to ULP code) + int currentSample = RTC_SLOW_MEM[indexAddress] & 0xffff; + int currentWord = currentSample >> 1; + + for (int i=0; i<2; i++) { + ms[i] = ((ms[i] >> 8) + 128) & 0xff; + } + if(!stereoOutput) // mix both channels + ms[0] = (uint16_t)(( (uint32_t)((int32_t)(ms[0]) + (int32_t)(ms[1])) >> 1 ) & 0xff); + + if(waitingOddSample){ // always true for stereo because samples are consumed in pairs + if(lastFilledWord != currentWord) // accept sample if writing index lastFilledWord has not reached index of output sample + { + unsigned int w; + if(stereoOutput){ + w = ms[0]; + w |= ms[1] << 8; + } else { + w = bufferedOddSample; + w |= ms[0] << 8; + bufferedOddSample = 128; + waitingOddSample = false; + } + RTC_SLOW_MEM[bufferStart + lastFilledWord] = w; + lastFilledWord++; + if(lastFilledWord == totalSampleWords) + lastFilledWord = 0; + return true; + } else { + return false; + } + } else { + bufferedOddSample = ms[0]; + waitingOddSample = true; + return true; + } +} + + +bool AudioOutputULP::stop() +{ + audioLogger->printf_P(PSTR("\n\n\nstop\n\n\n")); + const ulp_insn_t stopulp[] = { + //stop the timer + I_END(), + //end the program + I_HALT()}; + + size_t load_addr = 0; + size_t size = sizeof(stopulp)/sizeof(ulp_insn_t); + ulp_process_macros_and_load(load_addr, stopulp, &size); + + //start + ulp_run(0); + + if(activeDACs & 1){ + dac_output_voltage(DAC_CHANNEL_1, 128); + } + if(activeDACs & 2){ + dac_output_voltage(DAC_CHANNEL_2, 128); + } + + return true; +} + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.h b/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.h new file mode 100644 index 000000000..fc4e438c1 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/AudioOutputULP.h @@ -0,0 +1,69 @@ +/* + AudioOutputULP + Outputs to ESP32 DAC through the ULP, freeing I2S for other uses + + Copyright (C) 2020 Martin Laclaustra, based on bitluni's code + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +// Instructions: +// AudioOutputULP out = new AudioOutputULP(); // stereo +// Connect left channel on pin 25 +// Connect right channel on pin 26 +// OR +// Connect mono channel on either of them (stereo samples are downmixed) +// AudioOutputULP out = new AudioOutputULP(1); // mono, only DAC 1 +// OR +// AudioOutputULP out = new AudioOutputULP(2); // mono, only DAC 2 + + +#ifndef _AUDIOOUTPUTULP_H +#define _AUDIOOUTPUTULP_H + +#include "AudioOutput.h" + +#ifdef ESP32 + +class AudioOutputULP : public AudioOutput +{ + public: + AudioOutputULP(int argActiveDACs=3) {if(argActiveDACs<1||argActiveDACs>2)argActiveDACs=3;activeDACs=argActiveDACs;stereoOutput=activeDACs==3;}; + ~AudioOutputULP() {}; + virtual bool begin() override; + virtual bool ConsumeSample(int16_t sample[2]) override; + virtual bool stop() override; + enum : int { DAC1 = 1, DAC2 = 2 }; + private: + int lastFilledWord = 0; + uint8_t bufferedOddSample = 128; + bool waitingOddSample = true; // must be set to false for mono output + int activeDACs = 3; // 1:DAC1; 2:DAC2; 3:both; + bool stereoOutput = true; + const int opcodeCount = 20; + const uint32_t dacTableStart1 = 2048 - 512; + const uint32_t dacTableStart2 = dacTableStart1 - 512; + uint32_t totalSampleWords = 2048 - 512 - 512 - (opcodeCount + 1); // add 512 for mono + const int totalSamples = totalSampleWords * 2; + const uint32_t indexAddress = opcodeCount; + const uint32_t bufferStart = indexAddress + 1; +}; + +#else + +#error Only the ESP32 supports ULP audio output + +#endif + +#endif diff --git a/lib/lib_audio/ESP8266Audio/src/ESP8266Audio.h b/lib/lib_audio/ESP8266Audio/src/ESP8266Audio.h new file mode 100644 index 000000000..eb0acc52a --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/src/ESP8266Audio.h @@ -0,0 +1,50 @@ +// Lazy "include all the things" header for simplicity. +// In general a user should only include the specific headers they need +// to miniimize build times. + +// Input stage +#include "AudioFileSourceBuffer.h" +#include "AudioFileSourceFATFS.h" +#include "AudioFileSourceFS.h" +#include "AudioFileSource.h" +#include "AudioFileSourceHTTPStream.h" +#include "AudioFileSourceICYStream.h" +#include "AudioFileSourceID3.h" +#include "AudioFileSourceLittleFS.h" +#include "AudioFileSourcePROGMEM.h" +#include "AudioFileSourceSD.h" +#include "AudioFileSourceSPIFFS.h" +#include "AudioFileSourceSPIRAMBuffer.h" +#include "AudioFileSourceSTDIO.h" + +// Misc. plumbing +#include "AudioFileStream.h" +#include "AudioLogger.h" +#include "AudioStatus.h" + +// Actual decode/audio generation logic +#include "AudioGeneratorAAC.h" +#include "AudioGeneratorFLAC.h" +#include "AudioGenerator.h" +#include "AudioGeneratorMIDI.h" +#include "AudioGeneratorMOD.h" +#include "AudioGeneratorMP3a.h" +#include "AudioGeneratorMP3.h" +#include "AudioGeneratorOpus.h" +#include "AudioGeneratorRTTTL.h" +#include "AudioGeneratorTalkie.h" +#include "AudioGeneratorWAV.h" + +// Render(output) sounds +#include "AudioOutputBuffer.h" +#include "AudioOutputFilterDecimate.h" +#include "AudioOutput.h" +#include "AudioOutputI2S.h" +#include "AudioOutputI2SNoDAC.h" +#include "AudioOutputMixer.h" +#include "AudioOutputNull.h" +#include "AudioOutputSerialWAV.h" +#include "AudioOutputSPDIF.h" +#include "AudioOutputSPIFFSWAV.h" +#include "AudioOutputSTDIO.h" +#include "AudioOutputULP.h" diff --git a/lib/lib_audio/ESP8266Audio/src/libflac/bitreader.c b/lib/lib_audio/ESP8266Audio/src/libflac/bitreader.c index a64c1ce53..b2a751d40 100644 --- a/lib/lib_audio/ESP8266Audio/src/libflac/bitreader.c +++ b/lib/lib_audio/ESP8266Audio/src/libflac/bitreader.c @@ -121,6 +121,8 @@ struct FLAC__BitReader { void *client_data; }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" static inline void crc16_update_word_(FLAC__BitReader *br, brword word) { unsigned crc = br->read_crc16; @@ -149,6 +151,7 @@ static inline void crc16_update_word_(FLAC__BitReader *br, brword word) #endif br->crc16_align = 0; } +#pragma GCC diagnostic pop static FLAC__bool bitreader_read_from_client_(FLAC__BitReader *br) { @@ -338,6 +341,8 @@ void FLAC__bitreader_reset_read_crc16(FLAC__BitReader *br, FLAC__uint16 seed) br->crc16_align = br->consumed_bits; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br) { FLAC__ASSERT(0 != br); @@ -353,6 +358,7 @@ FLAC__uint16 FLAC__bitreader_get_read_crc16(FLAC__BitReader *br) } return br->read_crc16; } +#pragma GCC diagnostic pop inline FLAC__bool FLAC__bitreader_is_consumed_byte_aligned(const FLAC__BitReader *br) { diff --git a/lib/lib_audio/ESP8266Audio/src/libflac/config.h b/lib/lib_audio/ESP8266Audio/src/libflac/config.h index b6efd1dc8..cf6c07dfe 100644 --- a/lib/lib_audio/ESP8266Audio/src/libflac/config.h +++ b/lib/lib_audio/ESP8266Audio/src/libflac/config.h @@ -2,9 +2,7 @@ #ifdef DEBUG #undef NDEBUG -#endif - -#ifndef NDEBUG +#else #define NDEBUG #endif diff --git a/lib/lib_audio/ESP8266Audio/src/libflac/cpu.c b/lib/lib_audio/ESP8266Audio/src/libflac/cpu.c index efed11b7f..cd650a09c 100644 --- a/lib/lib_audio/ESP8266Audio/src/libflac/cpu.c +++ b/lib/lib_audio/ESP8266Audio/src/libflac/cpu.c @@ -31,7 +31,7 @@ */ //#ifdef HAVE_CONFIG_H -# include +# include "config.h" //#endif #include "private/cpu.h" diff --git a/lib/lib_audio/ESP8266Audio/src/libflac/crc.c b/lib/lib_audio/ESP8266Audio/src/libflac/crc.c index 1b531e3d1..88ef8cfbc 100644 --- a/lib/lib_audio/ESP8266Audio/src/libflac/crc.c +++ b/lib/lib_audio/ESP8266Audio/src/libflac/crc.c @@ -136,7 +136,8 @@ FLAC__uint8 FLAC__crc8(const FLAC__byte *data, unsigned len) return crc; } - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" unsigned FLAC__crc16(const FLAC__byte *data, unsigned len) { unsigned crc = 0; @@ -146,3 +147,4 @@ unsigned FLAC__crc16(const FLAC__byte *data, unsigned len) return crc; } +#pragma GCC diagnostic pop diff --git a/lib/lib_audio/ESP8266Audio/src/libflac/stream_decoder.c b/lib/lib_audio/ESP8266Audio/src/libflac/stream_decoder.c index eabcf092c..ec172fe8d 100644 --- a/lib/lib_audio/ESP8266Audio/src/libflac/stream_decoder.c +++ b/lib/lib_audio/ESP8266Audio/src/libflac/stream_decoder.c @@ -2021,6 +2021,8 @@ FLAC__bool frame_sync_(FLAC__StreamDecoder *decoder) return true; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstrict-aliasing" FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FLAC__bool do_full_decode) { uint32_t channel; @@ -2167,6 +2169,7 @@ FLAC__bool read_frame_(FLAC__StreamDecoder *decoder, FLAC__bool *got_a_frame, FL decoder->protected_->state = FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC; return true; } +#pragma GCC diagnostic pop FLAC__bool read_frame_header_(FLAC__StreamDecoder *decoder) { diff --git a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/assembly.h b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/assembly.h index fc4d76739..595a8fc97 100644 --- a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/assembly.h +++ b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/assembly.h @@ -223,7 +223,7 @@ Word64 MADD64(Word64 sum64, int x, int y); /* toolchain: ARM ADS or RealView * target architecture: ARM v.4 and above (requires 'M' type processor for 32x32->64 multiplier) */ -#elif defined (__arm) && defined (__ARMCC_VERSION) +#elif defined (XXX__arm) && defined (__ARMCC_VERSION) static __inline int MULSHIFT32(int x, int y) { @@ -336,7 +336,7 @@ static __inline Word64 MADD64(Word64 sum64, int x, int y) /* toolchain: ARM gcc * target architecture: ARM v.4 and above (requires 'M' type processor for 32x32->64 multiplier) */ -#elif defined(__GNUC__) && defined(__arm__) +#elif defined(__GNUC__) && defined(XXXX__arm__) static inline int MULSHIFT32(int x, int y) { diff --git a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbr.c b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbr.c index ec046720c..e46391585 100644 --- a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbr.c +++ b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbr.c @@ -44,6 +44,7 @@ **************************************************************************************/ #if defined(USE_DEFAULT_STDLIB) || defined(ARDUINO) +#include #include #else #include "hlxclib/stdlib.h" diff --git a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbrhfgen.c b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbrhfgen.c index 7ebc047af..e5f27eb6d 100644 --- a/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbrhfgen.c +++ b/lib/lib_audio/ESP8266Audio/src/libhelix-aac/sbrhfgen.c @@ -76,7 +76,7 @@ static const int newBWTab[4][4] PROGMEM = { * Notes: this is carefully written to be efficient on ARM * use the assembly code version in sbrcov.s when building for ARM! **************************************************************************************/ -#if (defined (__arm) && defined (__ARMCC_VERSION)) || (defined (_WIN32) && defined (_WIN32_WCE) && defined (ARM)) || (defined(__GNUC__) && defined(__arm__)) +#if (defined (XXXX__arm) && defined (__ARMCC_VERSION)) || (defined (_WIN32) && defined (_WIN32_WCE) && defined (ARM)) || (defined(__GNUC__) && defined(XXXX__arm__)) #ifdef __cplusplus extern "C" #endif @@ -237,7 +237,7 @@ static int CalcCovariance1(int *XBuf, int *p01reN, int *p01imN, int *p12reN, int * Notes: this is carefully written to be efficient on ARM * use the assembly code version in sbrcov.s when building for ARM! **************************************************************************************/ -#if (defined (__arm) && defined (__ARMCC_VERSION)) || (defined (_WIN32) && defined (_WIN32_WCE) && defined (ARM)) || (defined(__GNUC__) && defined(__arm__)) +#if (defined (XXXX__arm) && defined (__ARMCC_VERSION)) || (defined (_WIN32) && defined (_WIN32_WCE) && defined (ARM)) || (defined(__GNUC__) && defined(XXXX__arm__)) #ifdef __cplusplus extern "C" #endif diff --git a/lib/lib_audio/ESP8266Audio/src/libhelix-mp3/assembly.h b/lib/lib_audio/ESP8266Audio/src/libhelix-mp3/assembly.h index 9c10c4da0..b9e46c529 100644 --- a/lib/lib_audio/ESP8266Audio/src/libhelix-mp3/assembly.h +++ b/lib/lib_audio/ESP8266Audio/src/libhelix-mp3/assembly.h @@ -217,7 +217,7 @@ static __inline int CLZ(int x) return numZeros; } -#elif defined ARM_ADS +#elif defined XXXARM_ADS static __inline int MULSHIFT32(int x, int y) { @@ -267,7 +267,7 @@ static __inline int CLZ(int x) return numZeros; } -#elif defined(__GNUC__) && defined(__thumb__) +#elif defined(__GNUC__) && defined(XXXX__thumb__) static __inline int MULSHIFT32(int x, int y) diff --git a/lib/lib_audio/ESP8266Audio/src/libmad/global.h b/lib/lib_audio/ESP8266Audio/src/libmad/global.h index a6debfd8b..a688495f8 100644 --- a/lib/lib_audio/ESP8266Audio/src/libmad/global.h +++ b/lib/lib_audio/ESP8266Audio/src/libmad/global.h @@ -48,6 +48,7 @@ # endif # if !defined(HAVE_ASSERT_H) +# undef assert # if defined(NDEBUG) # define assert(x) /* nothing */ # else diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/celt/celt_decoder.c b/lib/lib_audio/ESP8266Audio/src/libopus/celt/celt_decoder.c index 329b6f6cc..7e7296ed5 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/celt/celt_decoder.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/celt/celt_decoder.c @@ -482,7 +482,7 @@ static int celt_plc_pitch_search(celt_sig *decode_mem[2], int C, int arch) int pitch_index; VARDECL( opus_val16, lp_pitch_buf ); SAVE_STACK; - ALLOC( lp_pitch_buf, DECODE_BUFFER_SIZE>>1, opus_val16 ); + opus_val16 *lp_pitch_buf = (opus_val16*)malloc((DECODE_BUFFER_SIZE>>1) * sizeof(opus_val16)); //ALLOC( lp_pitch_buf, DECODE_BUFFER_SIZE>>1, opus_val16 ); pitch_downsample(decode_mem, lp_pitch_buf, DECODE_BUFFER_SIZE, C, arch); pitch_search(lp_pitch_buf+(PLC_PITCH_LAG_MAX>>1), lp_pitch_buf, @@ -490,6 +490,7 @@ static int celt_plc_pitch_search(celt_sig *decode_mem[2], int C, int arch) PLC_PITCH_LAG_MAX-PLC_PITCH_LAG_MIN, &pitch_index, arch); pitch_index = PLC_PITCH_LAG_MAX-pitch_index; RESTORE_STACK; + free(lp_pitch_buf); return pitch_index; } diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/config.h b/lib/lib_audio/ESP8266Audio/src/libopus/config.h index 3577204b6..dc1ee1e98 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/config.h +++ b/lib/lib_audio/ESP8266Audio/src/libopus/config.h @@ -206,3 +206,5 @@ # define _Restrict # define __restrict__ #endif + +#include diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/repacketizer.c b/lib/lib_audio/ESP8266Audio/src/libopus/repacketizer.c index 5a1eb675e..36732293f 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/repacketizer.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/repacketizer.c @@ -239,21 +239,30 @@ opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len) { - OpusRepacketizer rp; + OpusRepacketizer *rp = (OpusRepacketizer*)malloc(sizeof(OpusRepacketizer)); opus_int32 ret; - if (len < 1) + if (len < 1) { + free(rp); return OPUS_BAD_ARG; - if (len==new_len) + } + if (len==new_len) { + free(rp); return OPUS_OK; - else if (len > new_len) + } + else if (len > new_len) { + free(rp); return OPUS_BAD_ARG; - opus_repacketizer_init(&rp); + } + opus_repacketizer_init(rp); /* Moving payload to the end of the packet so we can do in-place padding */ OPUS_MOVE(data+new_len-len, data, len); - ret = opus_repacketizer_cat(&rp, data+new_len-len, len); - if (ret != OPUS_OK) + ret = opus_repacketizer_cat(rp, data+new_len-len, len); + if (ret != OPUS_OK) { + free(rp); return ret; - ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, new_len, 0, 1); + } + ret = opus_repacketizer_out_range_impl(rp, 0, rp->nb_frames, data, new_len, 0, 1); + free(rp); if (ret > 0) return OPUS_OK; else @@ -262,15 +271,20 @@ int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len) opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len) { - OpusRepacketizer rp; + OpusRepacketizer *rp = (OpusRepacketizer*)malloc(sizeof(OpusRepacketizer)); opus_int32 ret; - if (len < 1) + if (len < 1) { + free(rp); return OPUS_BAD_ARG; - opus_repacketizer_init(&rp); - ret = opus_repacketizer_cat(&rp, data, len); - if (ret < 0) + } + opus_repacketizer_init(rp); + ret = opus_repacketizer_cat(rp, data, len); + if (ret < 0) { + free(rp); return ret; - ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, len, 0, 0); + } + ret = opus_repacketizer_out_range_impl(rp, 0, rp->nb_frames, data, len, 0, 0); + free(rp); celt_assert(ret > 0 && ret <= len); return ret; } @@ -312,12 +326,14 @@ opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, in unsigned char toc; opus_int16 size[48]; opus_int32 packet_offset; - OpusRepacketizer rp; + OpusRepacketizer *rp = (OpusRepacketizer*)malloc(sizeof(OpusRepacketizer)); unsigned char *dst; opus_int32 dst_len; - if (len < 1) + if (len < 1){ + free(rp); return OPUS_BAD_ARG; + } dst = data; dst_len = 0; /* Unpad all frames */ @@ -325,25 +341,34 @@ opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, in { opus_int32 ret; int self_delimited = s!=nb_streams-1; - if (len<=0) + if (len<=0) { + free(rp); return OPUS_INVALID_PACKET; - opus_repacketizer_init(&rp); + } + opus_repacketizer_init(rp); ret = opus_packet_parse_impl(data, len, self_delimited, &toc, NULL, size, NULL, &packet_offset); - if (ret<0) + if (ret<0) { + free(rp); return ret; - ret = opus_repacketizer_cat_impl(&rp, data, packet_offset, self_delimited); - if (ret < 0) + } + ret = opus_repacketizer_cat_impl(rp, data, packet_offset, self_delimited); + if (ret < 0) { + free(rp); return ret; - ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, dst, len, self_delimited, 0); - if (ret < 0) + } + ret = opus_repacketizer_out_range_impl(rp, 0, rp->nb_frames, dst, len, self_delimited, 0); + if (ret < 0) { + free(rp); return ret; + } else dst_len += ret; dst += ret; data += packet_offset; len -= packet_offset; } + free(rp); return dst_len; } diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/silk/NLSF2A.c b/lib/lib_audio/ESP8266Audio/src/libopus/silk/NLSF2A.c index 40718e7a8..2b3e3340d 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/silk/NLSF2A.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/silk/NLSF2A.c @@ -80,10 +80,11 @@ void silk_NLSF2A( }; const unsigned char *ordering; opus_int k, i, dd; - opus_int32 cos_LSF_QA[ SILK_MAX_ORDER_LPC ]; - opus_int32 P[ SILK_MAX_ORDER_LPC / 2 + 1 ], Q[ SILK_MAX_ORDER_LPC / 2 + 1 ]; + opus_int32 *cos_LSF_QA = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC ); + opus_int32 *P = (opus_int32*)malloc(sizeof(opus_int32) * (SILK_MAX_ORDER_LPC / 2 + 1)); + opus_int32 *Q= (opus_int32*)malloc(sizeof(opus_int32) * (SILK_MAX_ORDER_LPC / 2 + 1)); opus_int32 Ptmp, Qtmp, f_int, f_frac, cos_val, delta; - opus_int32 a32_QA1[ SILK_MAX_ORDER_LPC ]; + opus_int32 *a32_QA1 = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC ); silk_assert( LSF_COS_TAB_SZ_FIX == 128 ); celt_assert( d==10 || d==16 ); @@ -137,5 +138,9 @@ void silk_NLSF2A( a_Q12[ k ] = (opus_int16)silk_RSHIFT_ROUND( a32_QA1[ k ], QA + 1 - 12 ); /* QA+1 -> Q12 */ } } + free(cos_LSF_QA); + free(P); + free(Q); + free(a32_QA1); } diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/burg_modified_FIX.c b/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/burg_modified_FIX.c index b4a31d605..dd7862983 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/burg_modified_FIX.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/burg_modified_FIX.c @@ -57,12 +57,12 @@ void silk_burg_modified_c( opus_int k, n, s, lz, rshifts, reached_max_gain; opus_int32 C0, num, nrg, rc_Q31, invGain_Q30, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2; const opus_int16 *x_ptr; - opus_int32 C_first_row[ SILK_MAX_ORDER_LPC ]; - opus_int32 C_last_row[ SILK_MAX_ORDER_LPC ]; - opus_int32 Af_QA[ SILK_MAX_ORDER_LPC ]; - opus_int32 CAf[ SILK_MAX_ORDER_LPC + 1 ]; - opus_int32 CAb[ SILK_MAX_ORDER_LPC + 1 ]; - opus_int32 xcorr[ SILK_MAX_ORDER_LPC ]; + opus_int32 *C_first_row = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC); + opus_int32 *C_last_row = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC); + opus_int32 *Af_QA = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC); + opus_int32 *CAf = (opus_int32*)malloc(sizeof(opus_int32) * (SILK_MAX_ORDER_LPC+1)); + opus_int32 *CAb = (opus_int32*)malloc(sizeof(opus_int32) * (SILK_MAX_ORDER_LPC+1)); + opus_int32 *xcorr = (opus_int32*)malloc(sizeof(opus_int32) * SILK_MAX_ORDER_LPC); opus_int64 C0_64; celt_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE ); @@ -277,4 +277,10 @@ void silk_burg_modified_c( *res_nrg = silk_SMLAWW( nrg, silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ), -tmp1 );/* Q( -rshifts ) */ *res_nrg_Q = -rshifts; } + free(C_first_row); + free(C_last_row); + free(Af_QA); + free(CAf); + free(CAb); + free(xcorr); } diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/warped_autocorrelation_FIX.c b/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/warped_autocorrelation_FIX.c index 7ef3a7efc..9c21f2a9b 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/warped_autocorrelation_FIX.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/silk/fixed/warped_autocorrelation_FIX.c @@ -49,8 +49,8 @@ void silk_warped_autocorrelation_FIX_c( { opus_int n, i, lsh; opus_int32 tmp1_QS, tmp2_QS; - opus_int32 state_QS[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; - opus_int64 corr_QC[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; + opus_int32 *state_QS = (opus_int32*)calloc(MAX_SHAPE_LPC_ORDER + 1, sizeof(opus_int32)); + opus_int64 *corr_QC = (opus_int64*)calloc(MAX_SHAPE_LPC_ORDER + 1, sizeof(opus_int64)); /* Order must be even */ celt_assert( ( order & 1 ) == 0 ); @@ -88,5 +88,7 @@ void silk_warped_autocorrelation_FIX_c( } } silk_assert( corr_QC[ 0 ] >= 0 ); /* If breaking, decrease QC*/ + free(state_QS); + free(corr_QC); } #endif /* OVERRIDE_silk_warped_autocorrelation_FIX_c */ diff --git a/lib/lib_audio/ESP8266Audio/src/libopus/silk/resampler_down2_3.c b/lib/lib_audio/ESP8266Audio/src/libopus/silk/resampler_down2_3.c index d8ce95c68..62aab5682 100644 --- a/lib/lib_audio/ESP8266Audio/src/libopus/silk/resampler_down2_3.c +++ b/lib/lib_audio/ESP8266Audio/src/libopus/silk/resampler_down2_3.c @@ -48,7 +48,8 @@ void silk_resampler_down2_3( opus_int32 *buf_ptr; SAVE_STACK; - ALLOC( buf, RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR, opus_int32 ); +// ALLOC( buf, RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR, opus_int32 ); + opus_int32 *buf = (opus_int32*)malloc((RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR) * sizeof(opus_int32)); /* Copy buffered samples to start of buffer */ silk_memcpy( buf, S, ORDER_FIR * sizeof( opus_int32 ) ); @@ -99,5 +100,6 @@ void silk_resampler_down2_3( /* Copy last part of filtered signal to the state for the next call */ silk_memcpy( S, &buf[ nSamplesIn ], ORDER_FIR * sizeof( opus_int32 ) ); + free(buf); RESTORE_STACK; } diff --git a/lib/lib_audio/ESP8266Audio/src/libtinysoundfont/tsf.h b/lib/lib_audio/ESP8266Audio/src/libtinysoundfont/tsf.h index e1a43221e..4ac232d14 100644 --- a/lib/lib_audio/ESP8266Audio/src/libtinysoundfont/tsf.h +++ b/lib/lib_audio/ESP8266Audio/src/libtinysoundfont/tsf.h @@ -486,16 +486,17 @@ struct tsf_stream_memory { const char* buffer; unsigned int total, pos; }; static int tsf_stream_memory_read(struct tsf_stream_memory* m, void* ptr, unsigned int size) { if (size > m->total - m->pos) size = m->total - m->pos; TSF_MEMCPY(ptr, m->buffer+m->pos, size); m->pos += size; return size; } static int tsf_stream_memory_tell(struct tsf_stream_memory* m) { return m->pos; } static int tsf_stream_memory_size(struct tsf_stream_memory* m) { return m->total; } -static int tsf_stream_memory_skip(struct tsf_stream_memory* m, unsigned int count) { if (m->pos + count > m->total) return 0; m->pos += count; return 1; } +static int tsf_stream_memory_skip(struct tsf_stream_memory* m, unsigned int count) { if (m->pos + count > m->total) count = m->total - m->pos; m->pos += count; return 1; } static int tsf_stream_memory_seek(struct tsf_stream_memory* m, unsigned int pos) { if (pos > m->total) return 0; else m->pos = pos; return 1; } -static int tsf_stream_memory_close(struct tsf_stream_memory* m) { (void)m; return 1; } +static int tsf_stream_memory_close(struct tsf_stream_memory* m) { TSF_FREE(m); return 1; } TSFDEF tsf* tsf_load_memory(const void* buffer, int size) { struct tsf_stream stream = { TSF_NULL, (int(*)(void*,void*,unsigned int))&tsf_stream_memory_read, (int(*)(void*))&tsf_stream_memory_tell, (int(*)(void*,unsigned int))&tsf_stream_memory_skip, (int(*)(void*,unsigned int))&tsf_stream_memory_seek, (int(*)(void*))&tsf_stream_memory_close, (int(*)(void*))&tsf_stream_memory_size }; - struct tsf_stream_memory f = { 0, 0, 0 }; - f.buffer = (const char*)buffer; - f.total = size; - stream.data = &f; + struct tsf_stream_memory* f = (struct tsf_stream_memory*)TSF_MALLOC(sizeof(struct tsf_stream_memory)); + f->pos = 0; + f->buffer = (const char*)buffer; + f->total = size; + stream.data = f; return tsf_load(&stream); } diff --git a/lib/lib_audio/ESP8266Audio/src/opusfile/opusfile.c b/lib/lib_audio/ESP8266Audio/src/opusfile/opusfile.c index bfd3c9e5d..7ffe32f89 100644 --- a/lib/lib_audio/ESP8266Audio/src/opusfile/opusfile.c +++ b/lib/lib_audio/ESP8266Audio/src/opusfile/opusfile.c @@ -90,12 +90,12 @@ int op_test(OpusHead *_head, ogg_sync_init(&oy); data=ogg_sync_buffer(&oy,(long)_initial_bytes); if(data!=NULL){ - ogg_stream_state os; + ogg_stream_state *os = (ogg_stream_state*)malloc(sizeof(ogg_stream_state)); ogg_page og; int ret; memcpy(data,_initial_data,_initial_bytes); ogg_sync_wrote(&oy,(long)_initial_bytes); - ogg_stream_init(&os,-1); + ogg_stream_init(os,-1); err=OP_FALSE; do{ ogg_packet op; @@ -104,11 +104,11 @@ int op_test(OpusHead *_head, if(ret<0)continue; /*Stop if we run out of data.*/ if(!ret)break; - ogg_stream_reset_serialno(&os,ogg_page_serialno(&og)); - ogg_stream_pagein(&os,&og); + ogg_stream_reset_serialno(os,ogg_page_serialno(&og)); + ogg_stream_pagein(os,&og); /*Only process the first packet on this page (if it's a BOS packet, it's required to be the only one).*/ - if(ogg_stream_packetout(&os,&op)==1){ + if(ogg_stream_packetout(os,&op)==1){ if(op.b_o_s){ ret=opus_head_parse(_head,op.packet,op.bytes); /*If this didn't look like Opus, keep going.*/ @@ -122,7 +122,8 @@ int op_test(OpusHead *_head, } } while(err==OP_FALSE); - ogg_stream_clear(&os); + ogg_stream_clear(os); + free(os); } else err=OP_EFAULT; ogg_sync_clear(&oy); @@ -835,7 +836,7 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, ogg_int64_t cur_page_gp; ogg_uint32_t serialno; opus_int32 total_duration; - int durations[255]; + int *durations = (int*)malloc(255 * sizeof(int)); int cur_page_eos; int op_count; int pi; @@ -852,26 +853,31 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, Otherwise there are no audio data packets in the whole logical stream.*/ if(OP_UNLIKELY(page_offset<0)){ /*Fail if there was a read error.*/ - if(page_offsethead.pre_skip>0)return OP_EBADTIMESTAMP; + if(_link->head.pre_skip>0) {free(durations); return OP_EBADTIMESTAMP;} _link->pcm_file_offset=0; /*Set pcm_end and end_offset so we can skip the call to op_find_final_pcm_offset().*/ _link->pcm_start=_link->pcm_end=0; _link->end_offset=_link->data_offset; + free(durations); return 0; } /*Similarly, if we hit the next link in the chain, we've gone too far.*/ if(OP_UNLIKELY(ogg_page_bos(_og))){ - if(_link->head.pre_skip>0)return OP_EBADTIMESTAMP; + if(_link->head.pre_skip>0) { + free(durations); + return OP_EBADTIMESTAMP; + } /*Set pcm_end and end_offset so we can skip the call to op_find_final_pcm_offset().*/ _link->pcm_file_offset=0; _link->pcm_start=_link->pcm_end=0; _link->end_offset=_link->data_offset; /*Tell the caller we've got a buffered page for them.*/ + free(durations); return 1; } /*Ignore pages from other streams (not strictly necessary, because of the @@ -901,7 +907,10 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, cur_page_gp=_of->op[op_count-1].granulepos; /*But getting a packet without a valid granule position on the page is not okay.*/ - if(cur_page_gp==-1)return OP_EBADTIMESTAMP; + if(cur_page_gp==-1) { + free(durations); + return OP_EBADTIMESTAMP; + } cur_page_eos=_of->op[op_count-1].e_o_s; if(OP_LIKELY(!cur_page_eos)){ /*The EOS flag wasn't set. @@ -910,6 +919,7 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, if(OP_UNLIKELY(op_granpos_add(&pcm_start,cur_page_gp,-total_duration)<0)){ /*The starting granule position MUST not be smaller than the amount of audio on the first page with completed packets.*/ + free(durations); return OP_EBADTIMESTAMP; } } @@ -923,6 +933,7 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, /*However, the end-trimming MUST not ask us to trim more samples than exist after applying the pre-skip.*/ if(OP_UNLIKELY(op_granpos_cmp(cur_page_gp,_link->head.pre_skip)<0)){ + free(durations); return OP_EBADTIMESTAMP; } } @@ -957,6 +968,7 @@ static int op_find_initial_pcm_offset(OggOpusFile *_of, _link->pcm_file_offset=0; _of->prev_packet_gp=_link->pcm_start=pcm_start; _of->prev_page_offset=page_offset; + free(durations); return 0; } @@ -1391,32 +1403,34 @@ static int op_open_seekable2_impl(OggOpusFile *_of){ /*64 seek records should be enough for anybody. Actually, with a bisection search in a 63-bit range down to OP_CHUNK_SIZE granularity, much more than enough.*/ - OpusSeekRecord sr[64]; + OpusSeekRecord *sr = (OpusSeekRecord*)malloc(64 * sizeof(OpusSeekRecord)); opus_int64 data_offset; int ret; /*We can seek, so set out learning all about this file.*/ (*_of->callbacks.seek)(_of->stream,0,SEEK_END); _of->offset=_of->end=(*_of->callbacks.tell)(_of->stream); - if(OP_UNLIKELY(_of->end<0))return OP_EREAD; + if(OP_UNLIKELY(_of->end<0)){free(sr); return OP_EREAD;} data_offset=_of->links[0].data_offset; - if(OP_UNLIKELY(_of->endendend, _of->links[0].serialno,_of->serialnos,_of->nserialnos); - if(OP_UNLIKELY(ret<0))return ret; + if(OP_UNLIKELY(ret<0)){free(sr); return ret;} /*If there's any trailing junk, forget about it.*/ _of->end=sr[0].offset+sr[0].size; - if(OP_UNLIKELY(_of->endendserialnos,&_of->nserialnos,&_of->cserialnos); + free(sr); + return ret; } static int op_open_seekable2(OggOpusFile *_of){ ogg_sync_state oy_start; - ogg_stream_state os_start; + ogg_stream_state *os_start = (ogg_stream_state*)malloc(sizeof(ogg_stream_state)); ogg_packet *op_start; opus_int64 prev_page_offset; opus_int64 start_offset; @@ -1435,9 +1449,9 @@ static int op_open_seekable2(OggOpusFile *_of){ start_op_count=_of->op_count; /*This is a bit too large to put on the stack unconditionally.*/ op_start=(ogg_packet *)_ogg_malloc(sizeof(*op_start)*start_op_count); - if(op_start==NULL)return OP_EFAULT; + if(op_start==NULL){free(os_start); return OP_EFAULT;} *&oy_start=_of->oy; - *&os_start=_of->os; + *os_start=_of->os; prev_page_offset=_of->prev_page_offset; start_offset=_of->offset; memcpy(op_start,_of->op,sizeof(*op_start)*start_op_count); @@ -1449,7 +1463,7 @@ static int op_open_seekable2(OggOpusFile *_of){ ogg_stream_clear(&_of->os); ogg_sync_clear(&_of->oy); *&_of->oy=*&oy_start; - *&_of->os=*&os_start; + *&_of->os=*os_start; _of->offset=start_offset; _of->op_count=start_op_count; memcpy(_of->op,op_start,sizeof(*_of->op)*start_op_count); @@ -1457,9 +1471,10 @@ static int op_open_seekable2(OggOpusFile *_of){ _of->prev_packet_gp=_of->links[0].pcm_start; _of->prev_page_offset=prev_page_offset; _of->cur_discard_count=_of->links[0].head.pre_skip; - if(OP_UNLIKELY(ret<0))return ret; + if(OP_UNLIKELY(ret<0)){free(os_start); return ret;} /*And restore the position indicator.*/ ret=(*_of->callbacks.seek)(_of->stream,op_position(_of),SEEK_SET); + free(os_start); return OP_UNLIKELY(ret<0)?OP_EREAD:0; } @@ -1980,7 +1995,7 @@ static int op_fetch_and_process_page(OggOpusFile *_of, ogg_stream_pagein(&_of->os,&og); if(OP_LIKELY(_of->ready_state>=OP_INITSET)){ opus_int32 total_duration; - int durations[255]; + int *durations = (int*)malloc(255 * sizeof(int)); int op_count; int report_hole; report_hole=0; @@ -2037,7 +2052,7 @@ static int op_fetch_and_process_page(OggOpusFile *_of, Proceed to the next link, rather than risk playing back some samples that shouldn't have been played.*/ _of->op_count=0; - if(report_hole)return OP_HOLE; + if(report_hole){ free(durations); return OP_HOLE; } continue; } /*By default discard 80 ms of data after a seek, unless we seek @@ -2145,9 +2160,9 @@ static int op_fetch_and_process_page(OggOpusFile *_of, _of->prev_page_offset=_page_offset; _of->op_count=op_count=pi; } - if(report_hole)return OP_HOLE; + if(report_hole) { free(durations); return OP_HOLE; } /*If end-trimming didn't trim all the packets, we're done.*/ - if(op_count>0)return 0; + if(op_count>0) { free(durations); return 0; } } } } diff --git a/lib/lib_audio/ESP8266Audio/tests/common.sh b/lib/lib_audio/ESP8266Audio/tests/common.sh old mode 100644 new mode 100755 diff --git a/lib/lib_audio/ESP8266Audio/tests/host/Makefile b/lib/lib_audio/ESP8266Audio/tests/host/Makefile index 9a219465e..25156dbcd 100644 --- a/lib/lib_audio/ESP8266Audio/tests/host/Makefile +++ b/lib/lib_audio/ESP8266Audio/tests/host/Makefile @@ -73,12 +73,17 @@ libopus=../../src/libopus/opus_decoder.c ../../src/libopus/opus_projection_decod opusfile=../../src/opusfile/opusfile.c ../../src/opusfile/stream.c ../../src/opusfile/internal.c ../../src/opusfile/info.c -CCOPTS=-g -Wunused-parameter -Wall -m32 -include Arduino.h -CPPOPTS=-g -Wunused-parameter -Wall -std=c++11 -m32 -include Arduino.h +libflac=../../src/libflac/md5.c ../../src/libflac/window.c ../../src/libflac/memory.c ../../src/libflac/cpu.c \ +../../src/libflac/fixed.c ../../src/libflac/format.c ../../src/libflac/lpc.c ../../src/libflac/crc.c \ +../../src/libflac/bitreader.c ../../src/libflac/bitmath.c ../../src/libflac/stream_decoder.c ../../src/libflac/float.c + + +CCOPTS=-g -Wunused-parameter -Wall -m32 -include Arduino.h -Wstack-usage=300 +CPPOPTS=-g -Wunused-parameter -Wall -std=c++11 -m32 -Wstack-usage=300 -include Arduino.h .phony: all -all: mp3 aac wav midi opus +all: mp3 aac wav midi opus flac mp3: FORCE rm -f *.o @@ -94,6 +99,13 @@ aac: FORCE rm -f *.o echo valgrind --leak-check=full --track-origins=yes -v --error-limit=no --show-leak-kinds=all ./aac +flac: FORCE + rm -f *.o + gcc $(CCOPTS) -DUSE_DEFAULT_STDLIB -c $(libflac) -I ../../src/ -I ../../src/libflac -I. + g++ $(CPPOPTS) -o flac flac.cpp Serial.cpp *.o ../../src/AudioFileSourceSTDIO.cpp ../../src/AudioOutputSTDIO.cpp ../../src/AudioFileSourceID3.cpp ../../src/AudioGeneratorFLAC.cpp ../../src/AudioLogger.cpp -I ../../src/ -I. + rm -f *.o + echo valgrind --leak-check=full --track-origins=yes -v --error-limit=no --show-leak-kinds=all ./flac + wav: FORCE rm -f *.o g++ $(CPPOPTS) -o wav wav.cpp Serial.cpp ../../src/AudioFileSourceSTDIO.cpp ../../src/AudioOutputSTDIO.cpp ../../src/AudioGeneratorWAV.cpp ../../src/AudioLogger.cpp -I ../../src/ -I. @@ -116,6 +128,6 @@ opus: FORCE echo valgrind --leak-check=full --track-origins=yes -v --error-limit=no --show-leak-kinds=all ./opus clean: - rm -f mp3 aac wav midi opus *.o + rm -f mp3 aac wav midi opus flac *.o FORCE: diff --git a/lib/lib_audio/ESP8266Audio/tests/host/flac.cpp b/lib/lib_audio/ESP8266Audio/tests/host/flac.cpp new file mode 100644 index 000000000..2d7110da1 --- /dev/null +++ b/lib/lib_audio/ESP8266Audio/tests/host/flac.cpp @@ -0,0 +1,24 @@ +#include +#include "AudioFileSourceSTDIO.h" +#include "AudioOutputSTDIO.h" +#include "AudioGeneratorFLAC.h" + +#define AAC "gs-16b-2c-44100hz.flac" + +int main(int argc, char **argv) +{ + (void) argc; + (void) argv; + AudioFileSourceSTDIO *in = new AudioFileSourceSTDIO(AAC); + AudioOutputSTDIO *out = new AudioOutputSTDIO(); + out->SetFilename("out.flac.wav"); + AudioGeneratorFLAC *flac = new AudioGeneratorFLAC(); + + flac->begin(in, out); + while (flac->loop()) { /*noop*/ } + flac->stop(); + + delete flac; + delete out; + delete in; +} diff --git a/lib/lib_audio/ESP8266Audio/tests/host/gs-16b-2c-44100hz.flac b/lib/lib_audio/ESP8266Audio/tests/host/gs-16b-2c-44100hz.flac new file mode 100644 index 000000000..177132146 Binary files /dev/null and b/lib/lib_audio/ESP8266Audio/tests/host/gs-16b-2c-44100hz.flac differ diff --git a/lib/lib_audio/ESP8266AudioAttention.md b/lib/lib_audio/ESP8266AudioAttention.md new file mode 100644 index 000000000..7077d8211 --- /dev/null +++ b/lib/lib_audio/ESP8266AudioAttention.md @@ -0,0 +1,82 @@ +The current library needs two fixes solving the deprecated ``i2s_write_bytes`` function. + +In file AudioOutputI2S.cpp: + +bool AudioOutputI2S::ConsumeSample(int16_t sample[2]) +{ + + //return if we haven't called ::begin yet + if (!i2sOn) + return false; + + int16_t ms[2]; + + ms[0] = sample[0]; + ms[1] = sample[1]; + MakeSampleStereo16( ms ); + + if (this->mono) { + // Average the two samples and overwrite + int32_t ttl = ms[LEFTCHANNEL] + ms[RIGHTCHANNEL]; + ms[LEFTCHANNEL] = ms[RIGHTCHANNEL] = (ttl>>1) & 0xffff; + } + #ifdef ESP32 + uint32_t s32; + if (output_mode == INTERNAL_DAC) + { + int16_t l = Amplify(ms[LEFTCHANNEL]) + 0x8000; + int16_t r = Amplify(ms[RIGHTCHANNEL]) + 0x8000; + s32 = (r << 16) | (l & 0xffff); + } + else + { + s32 = ((Amplify(ms[RIGHTCHANNEL])) << 16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); + } +// Deprecated. Use i2s_write +// return i2s_write_bytes((i2s_port_t)portNo, (const char *)&s32, sizeof(uint32_t), 0); + size_t bytes_written; + i2s_write((i2s_port_t)portNo, (const char*)&s32, sizeof(uint32_t), &bytes_written, 0); + return bytes_written; + #elif defined(ESP8266) + uint32_t s32 = ((Amplify(ms[RIGHTCHANNEL])) << 16) | (Amplify(ms[LEFTCHANNEL]) & 0xffff); + return i2s_write_sample_nb(s32); // If we can't store it, return false. OTW true + #elif defined(ARDUINO_ARCH_RP2040) + return !!I2S.write((void*)ms, 4); + #endif +} + +In file AudioOutputI2SNoDac.cpp: + +bool AudioOutputI2SNoDAC::ConsumeSample(int16_t sample[2]) +{ + int16_t ms[2]; + ms[0] = sample[0]; + ms[1] = sample[1]; + MakeSampleStereo16( ms ); + + // Make delta-sigma filled buffer + uint32_t dsBuff[8]; + DeltaSigma(ms, dsBuff); + + // Either send complete pulse stream or nothing +#ifdef ESP32 +// Deprecated. Use i2s_write +// if (!i2s_write_bytes((i2s_port_t)portNo, (const char *)dsBuff, sizeof(uint32_t) * (oversample/32), 0)) + size_t bytes_written; + i2s_write((i2s_port_t)portNo, (const char *)dsBuff, sizeof(uint32_t) * (oversample/32), &bytes_written, 0); + if (!bytes_written) + return false; +#elif defined(ESP8266) + if (!i2s_write_sample_nb(dsBuff[0])) return false; // No room at the inn + // At this point we've sent in first of possibly 8 32-bits, need to send + // remaining ones even if they block. + for (int i = 32; i < oversample; i+=32) + i2s_write_sample( dsBuff[i / 32]); +#elif defined(ARDUINO_ARCH_RP2040) + int16_t *p = (int16_t *) dsBuff; + for (int i = 0; i < oversample / 16; i++) { + I2S.write(*(p++)); + } +#endif + return true; +} diff --git a/lib/lib_basic/IRremoteESP8266/.github/CONTRIBUTING.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/CONTRIBUTING.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.github/CONTRIBUTING.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/CONTRIBUTING.md diff --git a/lib/lib_basic/IRremoteESP8266/.github/Contributors.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/Contributors.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.github/Contributors.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/Contributors.md diff --git a/lib/lib_basic/IRremoteESP8266/.github/issue_template.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/issue_template.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.github/issue_template.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.github/issue_template.md diff --git a/lib/lib_basic/IRremoteESP8266/.gitignore b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.gitignore similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.gitignore rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.gitignore diff --git a/lib/lib_basic/IRremoteESP8266/.gitmodules b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.gitmodules similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.gitmodules rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.gitmodules diff --git a/lib/lib_basic/IRremoteESP8266/.style.yapf b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.style.yapf similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.style.yapf rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.style.yapf diff --git a/lib/lib_basic/IRremoteESP8266/.travis.yml b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.travis.yml similarity index 100% rename from lib/lib_basic/IRremoteESP8266/.travis.yml rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/.travis.yml diff --git a/lib/lib_basic/IRremoteESP8266/CPPLINT.cfg b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/CPPLINT.cfg similarity index 100% rename from lib/lib_basic/IRremoteESP8266/CPPLINT.cfg rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/CPPLINT.cfg diff --git a/lib/lib_basic/IRremoteESP8266/Doxyfile b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/Doxyfile similarity index 94% rename from lib/lib_basic/IRremoteESP8266/Doxyfile rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/Doxyfile index 224c07315..8714b0476 100644 --- a/lib/lib_basic/IRremoteESP8266/Doxyfile +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/Doxyfile @@ -13,3 +13,4 @@ GENERATE_LATEX = NO ENABLE_PREPROCESSING = NO QUIET = YES WARN_NO_PARAMDOC = YES +WARN_AS_ERROR = YES diff --git a/lib/lib_basic/IRremoteESP8266/LICENSE.txt b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/LICENSE.txt similarity index 100% rename from lib/lib_basic/IRremoteESP8266/LICENSE.txt rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/LICENSE.txt diff --git a/lib/lib_basic/IRremoteESP8266/README.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README.md similarity index 88% rename from lib/lib_basic/IRremoteESP8266/README.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README.md index 9c21f22e6..5dae9cfd9 100644 --- a/lib/lib_basic/IRremoteESP8266/README.md +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README.md @@ -1,16 +1,17 @@ ![IRremoteESP8266 Library](./assets/images/banner.svg) -[![Build Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) +[![Build Status](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Build.yml/badge.svg)](../../actions/workflows/Build.yml) +[![Code Lint](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Lint.yml/badge.svg)](../../actions/workflows/Lint.yml) +[![Tests](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/UnitTests.yml/badge.svg)](../../actions/workflows/UnitTests.yml) +[![Documentation](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Documentation.yml/badge.svg)](../../actions/workflows/Documentation.yml/badge.svg) [![arduino-library-badge](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Percentage of issues still open") [![GitLicense](https://gitlicense.com/badge/crankyoldgit/IRremoteESP8266)](https://gitlicense.com/license/crankyoldgit/IRremoteESP8266) This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an [ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc. -## v2.7.18 Now Available -Version 2.7.18 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. +## v2.7.20 Now Available +Version 2.7.20 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. #### Upgrading from pre-v2.0 Usage of the library has been slightly changed in v2.0. You will need to change your usage to work with v2.0 and beyond. You can read more about the changes required on our [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/lib_basic/IRremoteESP8266/README_de.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_de.md similarity index 87% rename from lib/lib_basic/IRremoteESP8266/README_de.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_de.md index d666a4a43..51ded0420 100644 --- a/lib/lib_basic/IRremoteESP8266/README_de.md +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_de.md @@ -1,16 +1,18 @@ ![IRremoteESP8266 Library](./assets/images/banner.svg) -[![Build-Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) +[![Build-Status](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Build.yml/badge.svg)](../../actions/workflows/Build.yml/badge.svg) +[![Code-Lint](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Lint.yml/badge.svg)](../../actions/workflows/Lint.yml) +[![Tests](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/UnitTests.yml/badge.svg)](../../ctions/workflows/UnitTests.yml) +[![Dokumentation](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Documentation.yml/badge.svg)](../../actions/workflows/Documentation.yml) +[![arduino-library-badge](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) [![Arduino-Bibliothek-Abzeichen](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) -[![Durchschnittliche Zeit bis zur Problemlösung](http://isitmaintained.com/badge/resolution/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Resolution Time") -[![Prozentsatz der offenen Probleme](http://isitmaintained.com/badge/open/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Open issues") [![Git-Lizenz](https://gitlicense.com/badge/crankyoldgit/IRremoteESP8266)](https://gitlicense.com/license/crankyoldgit/IRremoteESP8266) Diese Programmbibliothek ermöglicht das **Senden _und_ Empfangen** von Infrarotsignalen mit [ESP8266](https://github.com/esp8266/Arduino)- und [ESP32](https://github.com/espressif/arduino-esp32)-Mikrocontrollern mithilfe des [Arduino-Frameworks](https://www.arduino.cc/) und handelsüblichen 940nm Infrarot-LEDs undIR-Empfängermodulen, wie zum Beispiel TSOP{17,22,24,36,38,44,48}*-Demodulatoren. -## v2.7.18 jetzt verfügbar -Version 2.7.18 der Bibliothek ist nun [verfügbar](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Die [Versionshinweise](ReleaseNotes.md) enthalten alle wichtigen Neuerungen. +## v2.7.20 jetzt verfügbar +Version 2.7.20 der Bibliothek ist nun [verfügbar](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Die [Versionshinweise](ReleaseNotes.md) enthalten alle wichtigen Neuerungen. #### Hinweis für Nutzer von Versionen vor v2.0 Die Benutzung der Bibliothek hat sich mit Version 2.0 leicht geändert. Einige Anpassungen im aufrufenden Code werden nötig sein, um mit Version ab 2.0 korrekt zu funktionieren. Mehr zu den Anpassungen finden sich auf unserer [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0)-Seite. diff --git a/lib/lib_basic/IRremoteESP8266/README_fr.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_fr.md similarity index 88% rename from lib/lib_basic/IRremoteESP8266/README_fr.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_fr.md index 7cfe2a58f..fe314c459 100644 --- a/lib/lib_basic/IRremoteESP8266/README_fr.md +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/README_fr.md @@ -1,16 +1,17 @@ ![IRremoteESP8266 Library](./assets/images/banner.svg) -[![Build Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) +[![Construire](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Build.yml/badge.svg)](../../actions/workflows/Build.yml) +[![Charbon de code](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Lint.yml/badge.svg)](../../actions/workflows/Lint.yml) +[![Essais](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/UnitTests.yml/badge.svg)](../../actions/workflows/UnitTests.yml) +[![Documentation](https://github.com/crankyoldgit/IRremoteESP8266/actions/workflows/Documentation.yml/badge.svg)](../../actions/workflows/Documentation.yml) [![arduino-library-badge](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/crankyoldgit/IRremoteESP8266.svg)](http://isitmaintained.com/project/crankyoldgit/IRremoteESP8266 "Percentage of issues still open") -[![GitLicense](https://gitlicense.com/badge/crankyoldgit/IRremoteESP8266)](https://gitlicense.com/license/crankyoldgit/IRremoteESP8266) +[![LicenseGit](https://gitlicense.com/badge/crankyoldgit/IRremoteESP8266)](https://gitlicense.com/license/crankyoldgit/IRremoteESP8266) Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole [ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc. -## v2.7.18 disponible -Version 2.7.18 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. +## v2.7.20 disponible +Version 2.7.20 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. #### mise à jour depuis pre-v2.0 L'utilisation de la librairie à un peu changer depuis la version in v2.0. Si vous voulez l'utiliser vous devrez changer votre utilisation aussi. Vous pouvez vous renseigner sur les précondition d'utilisation ici : [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/lib_basic/IRremoteESP8266/ReleaseNotes.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/ReleaseNotes.md similarity index 93% rename from lib/lib_basic/IRremoteESP8266/ReleaseNotes.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/ReleaseNotes.md index 318790e60..f5bc0f66a 100644 --- a/lib/lib_basic/IRremoteESP8266/ReleaseNotes.md +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/ReleaseNotes.md @@ -1,5 +1,61 @@ # Release Notes +## _v2.7.20 (20210828)_ + +**[Bug Fixes]** +- Make `strToSwingH()` match "Right Max" (#1550 #1551) + +**[Features]** +- Experimental Bose remote support (#1579) +- Added MitsubishiAC VaneLeft (#1572 #1576) +- HAIER_AC176: Add experimental detailed support (#1480 #1571) +- Detailed support for Tornado/Sanyo 88-bit A/C protocol (#1503 #1568) +- Add support for new `TROTEC_3550` A/C protocol (#1563 #1566 #1507) +- SamsungAc: Use `sendExtended()` going forward. (#1484 #1562) +- SamsungAc: Redo/fix checksum calculations. (#1538 #1554) +- LG: Add support for `AKB73757604` model (#1531 #1545) +- Daikin176: Add support for Unit Id. (#1543 #1544) +- Daikin2: Add support for Humidity setting/operation. (#1535 #1540) +- TCL112AC: Add support for quiet/mute setting. (#1528 #1529) +- LG2: Add Fan speed, Swing, & Light support for new `AKB74955603` model (#1513 #1530) +- Add Mitsubishi AC "fan only" mode (#1527) + +**[Misc]** +- Change when some github workflows run (#1583) +- Add/update supported device info (#1580 #1581 #1585) +- Fix pylint issues due to pylint update. (#1569 #1570) +- DAIKIN216: Update supported models. (#1552 #1567) +- IRMQTTServer: Build a minimal OTA image via PlatformIO. (#1513 #1541) +- Reduce memory fragmentation cause by String usage. (#1493 #1536) +- Refactor `decodeMitsubishiAC()` (#1523 #1532) +- Fix incorrect comment. +- Migrate from Travis to GitHub Actions (#1522 #1526) +- Documentation update with additional supported Panasonic AC models (#1525) + + +## _v2.7.19 (20210706)_ + +**[Bug Fixes]** +- Illegal Heap write in rawbuf when the capture has overflowed. (#1516 #1517) +- PANASONIC_AC: Fix Low and High fan speeds (#1515) +- Fix MDNS in IRServer and IRMQTTServer example code (#1498 #1499) +- IRac: Fix off-by-one error in Coolix's sleep setting. (#1500) +- Fix undefined constant (#1490) + +**[Features]** +- Add detailed support for Kelon ACs (#1494) +- Experimental basic support for Teknopoint A/C protocol (#1486 #1504) +- Daikin64: Add support for Heat mode (#1492) +- Basic support for `HAIER_AC176` 176 bit protocol. (#1480 #1481) + +**[Misc]** +- GREE: Update inter-message gap timing (#1508 #1509) +- IRac: Change Coolix to send special messages after a normal message. (#1501 #1502) +- Fix compiler warnings causing Travis failures. (#1491) +- Update supported model info (#1477 #1485 #1488 #1489) +- Add HTML viewport meta tag to IRServer and IRMQTTServer examples (#1467 #1469) + + ## _v2.7.18 (20210420)_ **[Misc]** diff --git a/lib/lib_basic/IRremoteESP8266/SupportedProtocols.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/SupportedProtocols.md similarity index 84% rename from lib/lib_basic/IRremoteESP8266/SupportedProtocols.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/SupportedProtocols.md index f150f8b4d..348a6d641 100644 --- a/lib/lib_basic/IRremoteESP8266/SupportedProtocols.md +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/SupportedProtocols.md @@ -1,6 +1,6 @@ + Last generated: Sat 28 Aug 2021 07:53:10 +0000 ---> # IR Protocols supported by this library | Protocol | Brand | Model | A/C Model | Detailed A/C Support | @@ -9,6 +9,7 @@ | [Aiwa](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Aiwa.cpp) | **Aiwa** | RC-T501 RCU | | - | | [Amcor](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Amcor.cpp) | **[Amcor](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Amcor.h)** | ADR-853H A/C
TAC-444 remote
TAC-495 remote | | Yes | | [Argo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Argo.cpp) | **[Argo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Argo.h)** | Ulisse 13 DCI Mobile Split A/C | | Yes | +| [Bose](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Bose.cpp) | **Bose** | Bose TV Speaker | | - | | [Carrier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Carrier.cpp) | **[Carrier/Surrey](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Carrier.h)** | 42QG5A55970 remote
53NGK009/012 Inverter
619EGX0090E0 A/C
619EGX0120E0 A/C
619EGX0180E0 A/C
619EGX0220E0 A/C | | Yes | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Airwell](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | RC08B remote | | Yes | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Beko](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | BINR 070/071 split-type A/C
RG57K7(B)/BGEF Remote | | Yes | @@ -16,8 +17,9 @@ | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Kaysun](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | Casual CF A/C | | Yes | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | MS12FU-10HRDN1-QRD0GW(B) A/C
MSABAU-07HRFN1-QRD0GW A/C (circa 2016)
RG52D/BGE Remote | | Yes | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Tokio](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | AATOEMF17-12CHR1SW split-type RG51\|50/BGE Remote | | Yes | +| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | RAS-4M27YAV-E A/C
RAS-M10YKV-E A/C
RAS-M13YKV-E A/C
WH-E1YE remote | | Yes | | [Corona](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Corona.cpp) | **[Corona](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Corona.h)** | AR-01 remote
CSH-N2211 A/C
CSH-N2511 A/C
CSH-N2811 A/C
CSH-N4011 A/C | | Yes | -| [Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.cpp) | **[Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.h)** | 17 Series A/C (DAIKIN128)
ARC423A5 remote (DAIKIN160)
ARC433** remote (DAIKIN)
ARC433B69 remote (DAIKIN216)
ARC466A33 remote (DAIKIN)
ARC477A1 remote (DAIKIN2)
ARC480A5 remote (DAIKIN152)
BRC4C151 remote (DAIKIN176)
BRC4C153 remote (DAIKIN176)
BRC52B63 remote (DAIKIN128)
DGS01 remote (DAIKIN64)
FFN-C/FCN-F Series A/C (DAIKIN64)
FFQ35B8V1B A/C (DAIKIN176)
FTE12HV2S A/C
FTXB09AXVJU A/C (DAIKIN128)
FTXB12AXVJU A/C (DAIKIN128)
FTXM-M A/C (DAIKIN)
FTXZ25NV1B A/C (DAIKIN2)
FTXZ35NV1B A/C (DAIKIN2)
FTXZ50NV1B A/C (DAIKIN2)
M Series A/C (DAIKIN) | | Yes | +| [Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.cpp) | **[Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.h)** | 17 Series A/C (DAIKIN128)
ARC423A5 remote (DAIKIN160)
ARC433** remote (DAIKIN)
ARC433B69 remote (DAIKIN216)
ARC466A33 remote (DAIKIN)
ARC477A1 remote (DAIKIN2)
ARC480A5 remote (DAIKIN152)
ARC484A4 remote (DAIKIN216)
BRC4C151 remote (DAIKIN176)
BRC4C153 remote (DAIKIN176)
BRC52B63 remote (DAIKIN128)
DGS01 remote (DAIKIN64)
FFN-C/FCN-F Series A/C (DAIKIN64)
FFQ35B8V1B A/C (DAIKIN176)
FTE12HV2S A/C
FTQ60TV16U2 A/C (DAIKIN216)
FTWX35AXV1 A/C (DAIKIN64)
FTXB09AXVJU A/C (DAIKIN128)
FTXB12AXVJU A/C (DAIKIN128)
FTXM-M A/C (DAIKIN)
FTXZ25NV1B A/C (DAIKIN2)
FTXZ35NV1B A/C (DAIKIN2)
FTXZ50NV1B A/C (DAIKIN2)
M Series A/C (DAIKIN) | | Yes | | [Delonghi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Delonghi.cpp) | **[Delonghi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Delonghi.h)** | PAC A95 | | Yes | | [Denon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Denon.cpp) | **Denon** | AVR-3801 A/V Receiver (probably) | | - | | [Dish](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Dish.cpp) | **DISH NETWORK** | echostar 301 | | - | @@ -25,6 +27,7 @@ | [Ecoclim](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Ecoclim.cpp) | **[EcoClim](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Ecoclim.h)** | HYSFR-P348 remote
ZC200DPO A/C | | Yes | | [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[AUX](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | KFR-35GW/BpNFW=3 A/C
YKR-T/011 remote | | Yes | | [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | Classic INV 17 / AXW12DCS A/C
YKR-M/003E remote | | Yes | +| [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[Frigidaire](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | FGPC102AB1 A/C | | Yes | | [EliteScreens](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_EliteScreens.cpp) | **Elite Screens** | CineTension2 / CineTension3 series
Home2 / Home3 series
Spectrum series
VMAX Plus4 series
VMAX2 / VMAX2 Plus series
ZSP-IR-B / ZSP-IR-W remote | | - | | [EliteScreens](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_EliteScreens.cpp) | **Lumene Screens** | Embassy | | - | | [Epson](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Epson.cpp) | **Epson** | EN-TW9100W Projector | | - | @@ -34,20 +37,23 @@ | [GlobalCache](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GlobalCache.cpp) | **Global Cache** | Control Tower IR DB | | - | | [Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.cpp) | **[Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.h)** | ZH/JT-03 remote | | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Amana](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | PBC093G00CC A/C
YX1FF remote | YAW1F
YBOFB | Yes | +| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Cooper & Hunter](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | CH-S09FTXG A/C
YB1F2 remote | YAW1F
YBOFB | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[EKOKAI](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | A/C | YAW1F
YBOFB | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YAA1FBF remote
YB1F2F remote | YAW1F
YBOFB | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YBOFB remote
YBOFB2 remote | YAW1F
YBOFB | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[RusClimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | EACS/I-09HAR_X/N3 A/C
YAW1F remote | YAW1F
YBOFB | Yes | | [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Ultimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | Heat Pump | YAW1F
YBOFB | Yes | | [Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.cpp) | **[Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.h)** | HSU-09HMC203 A/C (HAIER_AC_YRW02)
HSU07-HEA03 remote (HAIER_AC)
YR-W02 remote (HAIER_AC_YRW02) | | Yes | +| [Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.cpp) | **[Mabe](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.h)** | MMI18HDBWCA6MI8 A/C (HAIER_AC176)
V12843 HJ200223 remote (HAIER_AC176) | | Yes | | [Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.cpp) | **[Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.h)** | KAZE-312KSDP A/C (HITACHI_AC1)
LT0541-HTA remote (HITACHI_AC1)
PC-LH3B (HITACHI_AC3)
R-LT0541-HTA/Y.K.1.1-1 V2.3 remote (HITACHI_AC1)
RAR-8P2 remote (HITACHI_AC424)
RAS-22NK A/C (HITACHI_AC344)
RAS-35THA6 remote
RAS-AJ25H A/C (HITACHI_AC424)
RF11T1 remote (HITACHI_AC344)
Series VI A/C (Circa 2007) (HITACHI_AC1) | | Yes | | [Inax](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Inax.cpp) | **Lixil** | Inax DT-BA283 Toilet | | - | | [JVC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_JVC.cpp) | **JVC** | PTU94023B remote | | - | +| [Kelon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelon.cpp) | **[Kelon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelon.h)** | ON/OFF 9000-12000 | | Yes | | [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | YAPOF3 remote | | Yes | | [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | KSV26CRC A/C
KSV26HRC A/C
KSV35CRC A/C
KSV35HRC A/C
KSV53HRC A/C
KSV62HRC A/C
KSV70CRC A/C
KSV70HRC A/C
KSV80HRC A/C
YALIF Remote | | Yes | | [Kelvinator](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Kelvinator.h)** | A5VEY A/C
YB1FA remote | | Yes | -| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[General Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711AR2853M A/C Remote
AG1BH09AW101 Split A/C | | Yes | -| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711A20083V remote (LG)
AKB74395308 remote (LG2)
AKB75215403 remote (LG2)
S4-W12JA3AA A/C (LG2) | | Yes | +| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[General Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711AR2853M A/C Remote (LG)
AG1BH09AW101 Split A/C (LG) | | Yes | +| [LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.cpp) | **[LG](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_LG.h)** | 6711A20083V remote (LG)
A4UW30GFA2 A/C (LG2 - AKB74955603 & AKB73757604)
AKB73757604 remote (LG2 - AKB73757604)
AKB74395308 remote (LG2)
AKB74955603 remote (LG2 - AKB74955603)
AKB75215403 remote (LG2)
AMNW09GSJA0 A/C (LG2 - AKB74955603)
AMNW24GTPA1 A/C (LG2 - AKB73757604)
S4-W12JA3AA A/C (LG2) | | Yes | | [Lasertag](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lasertag.cpp) | **Lasertag** | Phaser emitters | | - | | [Lego](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lego.cpp) | **LEGO Power Functions** | IR Receiver | | - | | [Lutron](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Lutron.cpp) | **Lutron** | MIR-ITFS remote
MIR-ITFS-F remote
MIR-ITFS-LF remote
SP-HT remote | | - | @@ -61,10 +67,11 @@ | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | FS40-7AR Stand Fan (MIDEA24) | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[MrCool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG57A6/BGEFU1 remote (MIDEA) | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Pioneer System](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG66B6(B)/BGEFU1 remote (MIDEA)
RUBO18GMFILCAD A/C (18K BTU) (MIDEA)
RYBO12GMFILCAD A/C (12K BTU) (MIDEA)
UB018GMFILCFHD A/C (12K BTU) (MIDEA)
WS012GMFI22HLD A/C (12K BTU) (MIDEA)
WS018GMFI22HLD A/C (12K BTU) (MIDEA) | | Yes | +| [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG57H(B)/BGE remote (MIDEA)
TROTEC PAC 3900 X (MIDEA) | | Yes | | [MilesTag2](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MilesTag2.cpp) | **Milestag2** | Various | | - | | [Mirage](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mirage.cpp) | **Mirage** | VLU series A/C | | - | | [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | HC3000 Projector (MITSUBISHI2)
KM14A 0179213 remote
MS-GK24VA A/C
TV (MITSUBISHI) | | Yes | -| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote (MITSUBISHI136)
KPOA remote (MITSUBISHI112)
MLZ-RX5017AS A/C (MITSUBISHI_AC)
MSH-A24WV A/C (MITSUBISHI112)
MSZ-GV2519 A/C (MITSUBISHI_AC)
MUH-A24WV A/C (MITSUBISHI112)
PEAD-RP71JAA Ducted A/C (MITSUBISHI136)
RH151/M21ED6426 remote (MITSUBISHI_AC)
SG153/M21EDF426 remote (MITSUBISHI_AC) | | Yes | +| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote (MITSUBISHI136)
KPOA remote (MITSUBISHI112)
MLZ-RX5017AS A/C (MITSUBISHI_AC)
MSH-A24WV A/C (MITSUBISHI112)
MSZ-GV2519 A/C (MITSUBISHI_AC)
MSZ-SF25VE3 A/C (MITSUBISHI_AC)
MSZ-ZW4017S A/C (MITSUBISHI_AC)
MUH-A24WV A/C (MITSUBISHI112)
PEAD-RP71JAA Ducted A/C (MITSUBISHI136)
RH151/M21ED6426 remote (MITSUBISHI_AC)
SG153/M21EDF426 remote (MITSUBISHI_AC)
SG15D remote (MITSUBISHI_AC) | | Yes | | [MitsubishiHeavy](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.cpp) | **[Mitsubishi Heavy Industries](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.h)** | RKX502A001C remote (88 bit)
RLA502A700B remote (152 bit)
SRKxxZJ-S A/C (88 bit)
SRKxxZM-S A/C (152 bit)
SRKxxZMXA-S A/C (152 bit) | | Yes | | [Multibrackets](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Multibrackets.cpp) | **Multibrackets** | Motorized Swing mount large - 4500 | | - | | [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Aloka](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | SleepyLights LED Lamp | | - | @@ -75,12 +82,12 @@ | [Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.cpp) | **[Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.h)** | NS-09AHTI A/C
ZH/TY-01 remote | | Yes | | [Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.cpp) | **[Soleus Air](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.h)** | TTWM1-10-01 A/C
ZCF/TL-05 remote | | Yes | | [Nikai](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Nikai.cpp) | **Nikai** | Unknown LCD TV | | - | -| [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2295 remote (PANASONIC_AC32)
A75C2311 remote (PANASONIC_AC CKP/5)
A75C2616-1 remote (PANASONIC_AC DKE/3)
A75C3704 remote (PANASONIC_AC DKE/3)
A75C3747 remote (PANASONIC_AC JKE/4)
CKP series A/C (PANASONIC_AC CKP/5)
CS-E7PKR A/C (PANASONIC_AC DKE/2)
CS-E9CKP series A/C (PANASONIC_AC32)
CS-ME10CKPG A/C (PANASONIC_AC CKP/5)
CS-ME12CKPG A/C (PANASONIC_AC CKP/5)
CS-ME14CKPG A/C (PANASONIC_AC CKP/5)
CS-YW9MKD A/C (PANASONIC_AC JKE/4)
CS-Z9RKR A/C (PANASONIC_AC RKR/6)
DKE series A/C (PANASONIC_AC DKE/3)
DKW series A/C (PANASONIC_AC DKE/3)
JKE series A/C (PANASONIC_AC JKE/4)
NKE series A/C (PANASONIC_AC NKE/2)
PKR series A/C (PANASONIC_AC DKE/3)
RKR series A/C (PANASONIC_AC RKR/6)
TV (PANASONIC) | CKP
DKE
JKE
LKE
NKE
RKR | Yes | +| [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2295 remote (PANASONIC_AC32)
A75C2311 remote (PANASONIC_AC CKP/5)
A75C2616-1 remote (PANASONIC_AC DKE/3)
A75C3704 remote (PANASONIC_AC DKE/3)
A75C3747 remote (PANASONIC_AC JKE/4)
A75C4762 remote (PANASONIC_AC RKR/6)
CKP series A/C (PANASONIC_AC CKP/5)
CS-E7PKR A/C (PANASONIC_AC DKE/2)
CS-E9CKP series A/C (PANASONIC_AC32)
CS-ME10CKPG A/C (PANASONIC_AC CKP/5)
CS-ME12CKPG A/C (PANASONIC_AC CKP/5)
CS-ME14CKPG A/C (PANASONIC_AC CKP/5)
CS-YW9MKD A/C (PANASONIC_AC JKE/4)
CS-Z24RKR A/C (PANASONIC_AC RKR/6)
CS-Z9RKR A/C (PANASONIC_AC RKR/6)
DKE series A/C (PANASONIC_AC DKE/3)
DKW series A/C (PANASONIC_AC DKE/3)
JKE series A/C (PANASONIC_AC JKE/4)
NKE series A/C (PANASONIC_AC NKE/2)
PKR series A/C (PANASONIC_AC DKE/3)
RKR series A/C (PANASONIC_AC RKR/6)
TV (PANASONIC) | CKP
DKE
JKE
LKE
NKE
RKR | Yes | | [Pioneer](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pioneer.cpp) | **Pioneer** | AV Receivers
AXD7690 Remote
VSX-324 AV Receiver | | - | | [Pronto](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pronto.cpp) | **Pronto** | Pronto Hex | | - | | [RC5_RC6](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RC5_RC6.cpp) | **Philips** | RC-5X (RC5X)
Standard RC-5 (RC5)
Standard RC-6 (RC6) | | - | | [RCMM](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RCMM.cpp) | **Microsoft** | XBOX 360 | | - | -| [Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.cpp) | **[Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.h)** | AH59-02692E Soundbar remote (SAMSUNG36)
AK59-00167A Bluray remote (SAMSUNG36)
AR09FSSDAWKNFA A/C (SAMSUNG_AC)
AR12HSSDBWKNEU A/C (SAMSUNG_AC)
AR12KSFPEWQNET A/C (SAMSUNG_AC)
AR12NXCXAWKXEU A/C (SAMSUNG_AC)
BN59-01178B TV remote (SAMSUNG)
DB63-03556X003 remote
DB93-16761C remote
HW-J551 Soundbar (SAMSUNG36)
IEC-R03 remote
UA55H6300 TV (SAMSUNG) | | Yes | +| [Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.cpp) | **[Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.h)** | AH59-02692E Soundbar remote (SAMSUNG36)
AK59-00167A Bluray remote (SAMSUNG36)
AR09FSSDAWKNFA A/C (SAMSUNG_AC)
AR09HSFSBWKN A/C (SAMSUNG_AC)
AR12HSSDBWKNEU A/C (SAMSUNG_AC)
AR12KSFPEWQNET A/C (SAMSUNG_AC)
AR12NXCXAWKXEU A/C (SAMSUNG_AC)
BN59-01178B TV remote (SAMSUNG)
DB63-03556X003 remote
DB93-14195A remote (SAMSUNG_AC)
DB93-16761C remote
HW-J551 Soundbar (SAMSUNG36)
IEC-R03 remote
UA55H6300 TV (SAMSUNG) | | Yes | | [Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.cpp) | **[Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.h)** | LC7461 transmitter IC (SANYO_LC7461)
RCS-2HS4E remote (SANYO_AC)
RCS-2S4E remote (SANYO_AC)
SA 8650B - disabled
SAP-K121AHA A/C (SANYO_AC)
SAP-K242AH A/C (SANYO_AC) | | Yes | | [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AH-A12REVP-1 A/C (A903)
AH-AxSAY A/C (A907)
AH-PR13-GL A/C (A903)
AH-XP10NRY A/C (A903)
AY-ZP40KR A/C (A907)
CRMC-820 JBEZ remote (A903)
CRMC-A705 JBEZ remote (A705)
CRMC-A863 JBEZ remote (A903)
CRMC-A903JBEZ remote (A903)
CRMC-A907 JBEZ remote (A907)
LC-52D62U TV | A705
A903
A907 | Yes | | [Sherwood](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sherwood.cpp) | **Sherwood** | RC-138 remote
RD6505(B) Receiver | | - | @@ -91,13 +98,15 @@ | [Symphony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Symphony.cpp) | **Symphony** | Air Cooler 3Di | | - | | [Symphony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Symphony.cpp) | **Westinghouse** | 78095 Remote
Ceiling fan | | - | | [Tcl](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.cpp) | **[Leberg](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.h)** | LBS-TOR07 A/C | | Yes | +| [Tcl](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.cpp) | **[TCL](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.h)** | TAC-09CHSD/XA31I A/C | | Yes | | [Technibel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Technibel.cpp) | **[Technibel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Technibel.h)** | IRO PLUS | | Yes | | [Teco](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.cpp) | **[Alaska](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.h)** | SAC9010QC A/C
SAC9010QC remote | | Yes | +| [Teknopoint](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teknopoint.cpp) | **Teknopoint** | Allegro SSA-09H A/C
GZ-055B-E1 remote | | - | | [Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.cpp) | **[Carrier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.h)** | 42NQV025M2 / 38NYV025M2 A/C
42NQV035M2 / 38NYV035M2 A/C
42NQV050M2 / 38NYV050M2 A/C
42NQV060M2 / 38NYV060M2 A/C | | Yes | | [Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.cpp) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.h)** | Akita EVO II
RAS 18SKP-ES
RAS-2558V A/C
RAS-B13N3KV2
RAS-B13N3KVP-E
WC-L03SE
WH-TA04NE
WH-UB03NJ remote | | Yes | | [Transcold](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Transcold.cpp) | **[Transcold](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Transcold.h)** | M1-F-NO-6 A/C | | Yes | -| [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Duux](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | Blizzard Smart 10K / DXMA04 A/C | | Yes | -| [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | PAC 3200 A/C | | Yes | +| [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Duux](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | Blizzard Smart 10K / DXMA04 A/C (TROTEC) | | Yes | +| [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | PAC 3200 A/C (TROTEC)
PAC 3550 Pro A/C (TROTEC_3550) | | Yes | | [Truma](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Truma.cpp) | **[Truma](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Truma.h)** | 40091-86700 remote
Aventa A/C | | Yes | | [Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.cpp) | **[Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.h)** | BIOX CXP-9 A/C (9K BTU) | | Yes | | [Voltas](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Voltas.cpp) | **[Voltas](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Voltas.h)** | 122LZF 4011252 Window A/C | 122LZF | Yes | @@ -122,6 +131,7 @@ - AIWA_RC_T501 - AMCOR - ARGO +- BOSE - CARRIER_AC - CARRIER_AC40 - CARRIER_AC64 @@ -148,6 +158,7 @@ - GOODWEATHER - GREE - HAIER_AC +- HAIER_AC176 - HAIER_AC_YRW02 - HITACHI_AC - HITACHI_AC1 @@ -157,6 +168,7 @@ - HITACHI_AC424 - INAX - JVC +- KELON - KELVINATOR - LASERTAG - LEGOPF @@ -195,6 +207,7 @@ - SAMSUNG_AC - SANYO - SANYO_AC +- SANYO_AC88 - SANYO_LC7461 - SHARP - SHARP_AC @@ -203,9 +216,11 @@ - TCL112AC - TECHNIBEL_AC - TECO +- TEKNOPOINT - TOSHIBA_AC - TRANSCOLD - TROTEC +- TROTEC_3550 - TRUMA - VESTEL_AC - VOLTAS diff --git a/lib/lib_basic/IRremoteESP8266/assets/images/banner.svg b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/assets/images/banner.svg similarity index 100% rename from lib/lib_basic/IRremoteESP8266/assets/images/banner.svg rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/assets/images/banner.svg diff --git a/lib/lib_basic/IRremoteESP8266/assets/images/logo.svg b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/assets/images/logo.svg similarity index 100% rename from lib/lib_basic/IRremoteESP8266/assets/images/logo.svg rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/assets/images/logo.svg diff --git a/lib/lib_basic/IRremoteESP8266/examples/BlynkIrRemote/BlynkIrRemote.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/BlynkIrRemote/BlynkIrRemote.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/BlynkIrRemote/BlynkIrRemote.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/BlynkIrRemote/BlynkIrRemote.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/BlynkIrRemote/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/BlynkIrRemote/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/BlynkIrRemote/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/BlynkIrRemote/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/CommonAcControl/CommonAcControl.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/CommonAcControl/CommonAcControl.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/CommonAcControl/CommonAcControl.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/CommonAcControl/CommonAcControl.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/CommonAcControl/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/CommonAcControl/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/CommonAcControl/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/CommonAcControl/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/ControlSamsungAC/ControlSamsungAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/ControlSamsungAC/ControlSamsungAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/ControlSamsungAC/ControlSamsungAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/ControlSamsungAC/ControlSamsungAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/ControlSamsungAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/ControlSamsungAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/ControlSamsungAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/ControlSamsungAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/DumbIRRepeater/DumbIRRepeater.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/DumbIRRepeater/DumbIRRepeater.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/DumbIRRepeater/DumbIRRepeater.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/DumbIRRepeater/DumbIRRepeater.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/DumbIRRepeater/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/DumbIRRepeater/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/DumbIRRepeater/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/DumbIRRepeater/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRGCSendDemo/IRGCSendDemo.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCSendDemo/IRGCSendDemo.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRGCSendDemo/IRGCSendDemo.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCSendDemo/IRGCSendDemo.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRGCSendDemo/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCSendDemo/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRGCSendDemo/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCSendDemo/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRGCTCPServer/IRGCTCPServer.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCTCPServer/IRGCTCPServer.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRGCTCPServer/IRGCTCPServer.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCTCPServer/IRGCTCPServer.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRGCTCPServer/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCTCPServer/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRGCTCPServer/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRGCTCPServer/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h similarity index 99% rename from lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h index 29d3320dc..0563ac855 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.h @@ -1,6 +1,6 @@ /* * Send & receive arbitrary IR codes via a web server or MQTT. - * Copyright David Conran 2016, 2017, 2018, 2019, 2020 + * Copyright David Conran 2016-2021 */ #ifndef EXAMPLES_IRMQTTSERVER_IRMQTTSERVER_H_ #define EXAMPLES_IRMQTTSERVER_IRMQTTSERVER_H_ @@ -101,8 +101,9 @@ const IPAddress kSubnetMask = IPAddress(255, 255, 255, 0); // The unset default is 8%. // (Uncomment to enable) // Do you want/need mdns enabled? (https://en.wikipedia.org/wiki/Multicast_DNS) +#ifndef MDNS_ENABLE #define MDNS_ENABLE true // `false` to disable and save ~21k of program space. - +#endif // MDNS_ENABLE // ----------------------- HTTP Related Settings ------------------------------- #define FIRMWARE_OTA true // Allow remote update of the firmware via http. // Less secure if enabled. @@ -197,7 +198,9 @@ const uint16_t kMinUnknownSize = 2 * 10; // can understand the individual settings of the remote. // e.g. Aquire the A/C settings from an actual A/C IR remote and override // any local settings set via MQTT/HTTP etc. +#ifndef USE_DECODED_AC_SETTINGS #define USE_DECODED_AC_SETTINGS true // `false` to disable. `true` to enable. +#endif // USE_DECODED_AC_SETTINGS // Should we allow or ignore an A/C IR remote to override the A/C protocol/model // as set via MQTT or HTTP? // e.g. If `true`, you can use any fully supported A/C remote to control diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino similarity index 99% rename from lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino index 13789eaef..fefd743d8 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/IRMQTTServer.ino @@ -1000,6 +1000,8 @@ String htmlHeader(const String title, const String h1_text) { html += title; html += F("" + "" "

"); if (h1_text.length()) html += h1_text; @@ -2141,6 +2143,8 @@ void setup(void) { if (mdns.begin(Hostname)) { #endif // ESP8266 debug("MDNS responder started"); + // Announce http tcp service on kHttpPort + mdns.addService("http", "tcp", kHttpPort); } #endif // MDNS_ENABLE @@ -2589,6 +2593,9 @@ void sendMQTTDiscovery(const char *topic) { #endif // MQTT_ENABLE void loop(void) { +#if MDNS_ENABLE && defined(ESP8266) + mdns.update(); +#endif // MDNS_ENABLE and ESP8266 server.handleClient(); // Handle any web activity #if MQTT_ENABLE diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/platformio.ini similarity index 67% rename from lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/platformio.ini index 7c110531e..d0ac2b8c8 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/IRMQTTServer/platformio.ini +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRMQTTServer/platformio.ini @@ -50,7 +50,21 @@ lib_deps = ${common_esp32.lib_deps_external} [env:esp01_1m] board = esp01_1m +board_build.ldscript = eagle.flash.1m64.ld +lib_deps = ${common_esp8266.lib_deps_external} + +; This is just to help enable swapping IRMQTTServer via OTA on platforms with +; limited flash space. It doesn't do *ANY* IR stuff. It has almost everything +; turned off except OTA over http. +; Produces a ".bin" file of ~380k. +[env:esp8266_1m_OTA_minimal] +board = esp01_1m +board_build.ldscript = eagle.flash.1m64.ld build_flags = ${env.build_flags} - -Wl,-Teagle.flash.1m64.ld + -DMQTT_ENABLE=false + -D_IR_ENABLE_DEFAULT_=false + -DEXAMPLES_ENABLE=false + -DMDNS_ENABLE=false + -DUSE_DECODED_AC_SETTINGS=false lib_deps = ${common_esp8266.lib_deps_external} diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRServer/IRServer.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRServer/IRServer.ino similarity index 93% rename from lib/lib_basic/IRremoteESP8266/examples/IRServer/IRServer.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRServer/IRServer.ino index 92bcd0302..d811c8ff1 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/IRServer/IRServer.ino +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRServer/IRServer.ino @@ -68,6 +68,9 @@ void handleRoot() { "" HOSTNAME " Demo " \ "" \ + "" \ "" \ "" \ "

Hello from " HOSTNAME ", you can send NEC encoded IR" \ @@ -129,6 +132,8 @@ void setup(void) { if (mdns.begin(HOSTNAME)) { #endif // ESP8266 Serial.println("MDNS responder started"); + // Announce http tcp service on port 80 + mdns.addService("http", "tcp", 80); } server.on("/", handleRoot); @@ -145,5 +150,8 @@ void setup(void) { } void loop(void) { +#if defined(ESP8266) + mdns.update(); +#endif server.handleClient(); } diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRServer/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRServer/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRServer/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRServer/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDemo/IRrecvDemo.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDemo/IRrecvDemo.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDemo/IRrecvDemo.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDemo/IRrecvDemo.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDemo/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDemo/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDemo/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDemo/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDump/IRrecvDump.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDump/IRrecvDump.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDump/IRrecvDump.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDump/IRrecvDump.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDump/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDump/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDump/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDump/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV2/IRrecvDumpV2.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV2/IRrecvDumpV2.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV2/IRrecvDumpV2.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV2/IRrecvDumpV2.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini similarity index 95% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini index a83494ce2..0063a1133 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV2/platformio.ini @@ -58,4 +58,4 @@ build_flags = -D_IR_LOCALE_=zh-CN ; Chinese (Simplified) ; Build the library with all protocols disabled to flush out #if/#ifdef issues & ; any compiler warnings, by turning them into errors. [env:shakedown_no_protocols] -build_flags = -D_IR_ENABLE_DEFAULT_=false -Werror +build_flags = -D_IR_ENABLE_DEFAULT_=false -Werror -Wno-error=switch diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/BaseOTA.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/BaseOTA.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/BaseOTA.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/BaseOTA.h diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/IRrecvDumpV3.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/IRrecvDumpV3.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/IRrecvDumpV3.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/IRrecvDumpV3.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRrecvDumpV3/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRrecvDumpV3/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRsendDemo/IRsendDemo.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendDemo/IRsendDemo.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRsendDemo/IRsendDemo.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendDemo/IRsendDemo.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRsendDemo/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendDemo/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRsendDemo/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendDemo/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRsendProntoDemo/IRsendProntoDemo.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendProntoDemo/IRsendProntoDemo.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRsendProntoDemo/IRsendProntoDemo.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendProntoDemo/IRsendProntoDemo.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/IRsendProntoDemo/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendProntoDemo/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/IRsendProntoDemo/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/IRsendProntoDemo/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/JVCPanasonicSendDemo/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/JVCPanasonicSendDemo/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/JVCPanasonicSendDemo/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/JVCPanasonicSendDemo/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/LGACSend/LGACSend.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/LGACSend/LGACSend.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/LGACSend/LGACSend.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/LGACSend/LGACSend.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/LGACSend/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/LGACSend/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/LGACSend/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/LGACSend/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/SmartIRRepeater/SmartIRRepeater.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/SmartIRRepeater/SmartIRRepeater.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/SmartIRRepeater/SmartIRRepeater.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/SmartIRRepeater/SmartIRRepeater.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini similarity index 97% rename from lib/lib_basic/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini index 0e8f173f7..0db3d6dc8 100644 --- a/lib/lib_basic/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/SmartIRRepeater/platformio.ini @@ -33,4 +33,5 @@ board = nodemcuv2 build_flags = ${env.build_flags} -Werror + -Wno-error=switch -D_IR_ENABLE_DEFAULT_=false diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnArgoAC/TurnOnArgoAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnArgoAC/TurnOnArgoAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnArgoAC/TurnOnArgoAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnArgoAC/TurnOnArgoAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnArgoAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnArgoAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnArgoAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnArgoAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnDaikinAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnDaikinAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnDaikinAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnDaikinAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnFujitsuAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnFujitsuAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnFujitsuAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnFujitsuAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnGreeAC/TurnOnGreeAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnGreeAC/TurnOnGreeAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnGreeAC/TurnOnGreeAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnGreeAC/TurnOnGreeAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnGreeAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnGreeAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnGreeAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnGreeAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnKelvinatorAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnKelvinatorAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnKelvinatorAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnKelvinatorAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnMitsubishiHeavyAc/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnPanasonicAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnPanasonicAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnPanasonicAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnPanasonicAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnToshibaAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnToshibaAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnToshibaAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnToshibaAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/TurnOnTrotecAC/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnTrotecAC/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/TurnOnTrotecAC/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/TurnOnTrotecAC/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/README.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/README.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/README.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/README.md diff --git a/lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.h diff --git a/lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.ino b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.ino similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.ino rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/Web-AC-control.ino diff --git a/lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/printscreen.png b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/printscreen.png similarity index 100% rename from lib/lib_basic/IRremoteESP8266/examples/Web-AC-control/printscreen.png rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/examples/Web-AC-control/printscreen.png diff --git a/lib/lib_basic/IRremoteESP8266/keywords.txt b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/keywords.txt similarity index 94% rename from lib/lib_basic/IRremoteESP8266/keywords.txt rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/keywords.txt index c0da1e286..fefce8d9d 100644 --- a/lib/lib_basic/IRremoteESP8266/keywords.txt +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/keywords.txt @@ -41,12 +41,14 @@ IRFujitsuAC KEYWORD1 IRGoodweatherAc KEYWORD1 IRGreeAC KEYWORD1 IRHaierAC KEYWORD1 +IRHaierAC176 KEYWORD1 IRHaierACYRW02 KEYWORD1 IRHitachiAc KEYWORD1 IRHitachiAc1 KEYWORD1 IRHitachiAc3 KEYWORD1 IRHitachiAc344: KEYWORD1 IRHitachiAc424 KEYWORD1 +IRKelonAc KEYWORD1 IRKelvinatorAC KEYWORD1 IRLgAc KEYWORD1 IRMideaAC KEYWORD1 @@ -60,12 +62,14 @@ IRPanasonicAc KEYWORD1 IRPanasonicAc32 KEYWORD1 IRSamsungAc KEYWORD1 IRSanyoAc KEYWORD1 +IRSanyoAc88 KEYWORD1 IRSharpAc KEYWORD1 IRTcl112Ac KEYWORD1 IRTechnibelAc KEYWORD1 IRTecoAc KEYWORD1 IRToshibaAC KEYWORD1 IRTranscoldAc KEYWORD1 +IRTrotec3550 KEYWORD1 IRTrotecESP KEYWORD1 IRTrumaAc KEYWORD1 IRVestelAc KEYWORD1 @@ -105,6 +109,9 @@ _delayMicroseconds KEYWORD2 _getEconoToggle KEYWORD2 _getTime KEYWORD2 _getTimer KEYWORD2 +_isAKB73757604 KEYWORD2 +_isAKB74955603 KEYWORD2 +_isNormal KEYWORD2 _matchGeneric KEYWORD2 _restoreState KEYWORD2 _sendSony KEYWORD2 @@ -123,6 +130,7 @@ addIntToString KEYWORD2 addLabeledString KEYWORD2 addModeToString KEYWORD2 addModelToString KEYWORD2 +addSignedIntToString KEYWORD2 addSwingHToString KEYWORD2 addSwingVToString KEYWORD2 addTempFloatToString KEYWORD2 @@ -142,6 +150,7 @@ calcRepeatOffset KEYWORD2 calcSecondChecksum KEYWORD2 calcSectionChecksum KEYWORD2 calcUSecPeriod KEYWORD2 +calcVaneSwingV KEYWORD2 calculateChecksum KEYWORD2 calibrate KEYWORD2 cancelOffTimer KEYWORD2 @@ -165,6 +174,7 @@ convertMode KEYWORD2 convertSwing KEYWORD2 convertSwingH KEYWORD2 convertSwingV KEYWORD2 +convertVaneSwingV KEYWORD2 coolix KEYWORD2 copyIrParams KEYWORD2 corona KEYWORD2 @@ -183,6 +193,7 @@ decodeAirwell KEYWORD2 decodeAiwaRCT501 KEYWORD2 decodeAmcor KEYWORD2 decodeArgo KEYWORD2 +decodeBose KEYWORD2 decodeCOOLIX KEYWORD2 decodeCarrierAC KEYWORD2 decodeCarrierAC40 KEYWORD2 @@ -209,6 +220,7 @@ decodeGICable KEYWORD2 decodeGoodweather KEYWORD2 decodeGree KEYWORD2 decodeHaierAC KEYWORD2 +decodeHaierAC176 KEYWORD2 decodeHaierACYRW02 KEYWORD2 decodeHash KEYWORD2 decodeHitachiAC KEYWORD2 @@ -216,6 +228,7 @@ decodeHitachiAc3 KEYWORD2 decodeHitachiAc424 KEYWORD2 decodeInax KEYWORD2 decodeJVC KEYWORD2 +decodeKelon KEYWORD2 decodeKelvinator KEYWORD2 decodeLG KEYWORD2 decodeLasertag KEYWORD2 @@ -250,6 +263,7 @@ decodeSamsung36 KEYWORD2 decodeSamsungAC KEYWORD2 decodeSanyo KEYWORD2 decodeSanyoAc KEYWORD2 +decodeSanyoAc88 KEYWORD2 decodeSanyoLC7461 KEYWORD2 decodeSharp KEYWORD2 decodeSharpAc KEYWORD2 @@ -257,10 +271,12 @@ decodeSony KEYWORD2 decodeSymphony KEYWORD2 decodeTechnibelAc KEYWORD2 decodeTeco KEYWORD2 +decodeTeknopoint KEYWORD2 decodeToState KEYWORD2 decodeToshibaAC KEYWORD2 decodeTranscold KEYWORD2 decodeTrotec KEYWORD2 +decodeTrotec3550 KEYWORD2 decodeTruma KEYWORD2 decodeVestelAc KEYWORD2 decodeVoltas KEYWORD2 @@ -298,6 +314,7 @@ encodeSanyoLC7461 KEYWORD2 encodeSharp KEYWORD2 encodeSony KEYWORD2 encodeTime KEYWORD2 +ensurePower KEYWORD2 fahrenheitToCelsius KEYWORD2 fanspeedToString KEYWORD2 fixChecksum KEYWORD2 @@ -324,6 +341,7 @@ getCurrentDay KEYWORD2 getCurrentTime KEYWORD2 getDisplay KEYWORD2 getDisplayTempSource KEYWORD2 +getDryGrade KEYWORD2 getEcono KEYWORD2 getEconoToggle KEYWORD2 getEnableSensorTemp KEYWORD2 @@ -340,6 +358,7 @@ getFreshAirHigh KEYWORD2 getHealth KEYWORD2 getHold KEYWORD2 getHumid KEYWORD2 +getHumidity KEYWORD2 getIFeel KEYWORD2 getId KEYWORD2 getInternalStateLength KEYWORD2 @@ -386,6 +405,7 @@ getSpeed KEYWORD2 getStartClock KEYWORD2 getStateLength KEYWORD2 getStopClock KEYWORD2 +getSupercool KEYWORD2 getSwing KEYWORD2 getSwingH KEYWORD2 getSwingHChange KEYWORD2 @@ -405,8 +425,11 @@ getTempUnits KEYWORD2 getTime KEYWORD2 getTimer KEYWORD2 getTimerEnabled KEYWORD2 +getTimerMode KEYWORD2 getTimerTime KEYWORD2 getTimerType KEYWORD2 +getTogglePower KEYWORD2 +getToggleSwingVertical KEYWORD2 getTolerance KEYWORD2 getTurbo KEYWORD2 getTurboToggle KEYWORD2 @@ -414,6 +437,9 @@ getType KEYWORD2 getUseCelsius KEYWORD2 getUseFahrenheit KEYWORD2 getVane KEYWORD2 +getVaneCode KEYWORD2 +getVaneLeft KEYWORD2 +getVaneSwingV KEYWORD2 getWeeklyTimerEnable KEYWORD2 getWeeklyTimerEnabled KEYWORD2 getWiFi KEYWORD2 @@ -425,6 +451,7 @@ getiFeel KEYWORD2 goodweather KEYWORD2 gree KEYWORD2 haier KEYWORD2 +haier176 KEYWORD2 haierYrwo2 KEYWORD2 handleSpecialState KEYWORD2 hasACState KEYWORD2 @@ -436,9 +463,11 @@ hitachi344 KEYWORD2 hitachi424 KEYWORD2 htmlEscape KEYWORD2 initState KEYWORD2 +int64ToString KEYWORD2 invertBits KEYWORD2 isEconoToggle KEYWORD2 isLightToggle KEYWORD2 +isOffCommand KEYWORD2 isOffTimerActive KEYWORD2 isOffTimerEnabled KEYWORD2 isOnTimerActive KEYWORD2 @@ -447,12 +476,17 @@ isPowerSpecial KEYWORD2 isProtocolSupported KEYWORD2 isRepeat KEYWORD2 isSpecialState KEYWORD2 +isSwing KEYWORD2 +isSwingH KEYWORD2 +isSwingV KEYWORD2 isSwingVStep KEYWORD2 isSwingVToggle KEYWORD2 isTimeCommand KEYWORD2 isTimerActive KEYWORD2 isTurboToggle KEYWORD2 isValidLgAc KEYWORD2 +isVaneSwingV KEYWORD2 +kelon KEYWORD2 kelvinator KEYWORD2 ledOff KEYWORD2 ledOn KEYWORD2 @@ -500,12 +534,14 @@ resume KEYWORD2 reverseBits KEYWORD2 samsung KEYWORD2 sanyo KEYWORD2 +sanyo88 KEYWORD2 send KEYWORD2 sendAc KEYWORD2 sendAirwell KEYWORD2 sendAiwaRCT501 KEYWORD2 sendAmcor KEYWORD2 sendArgo KEYWORD2 +sendBose KEYWORD2 sendCOOLIX KEYWORD2 sendCarrierAC KEYWORD2 sendCarrierAC40 KEYWORD2 @@ -536,6 +572,7 @@ sendGeneric KEYWORD2 sendGoodweather KEYWORD2 sendGree KEYWORD2 sendHaierAC KEYWORD2 +sendHaierAC176 KEYWORD2 sendHaierACYRW02 KEYWORD2 sendHitachiAC KEYWORD2 sendHitachiAC1 KEYWORD2 @@ -545,6 +582,7 @@ sendHitachiAc344 KEYWORD2 sendHitachiAc424 KEYWORD2 sendInax KEYWORD2 sendJVC KEYWORD2 +sendKelon KEYWORD2 sendKelvinator KEYWORD2 sendLG KEYWORD2 sendLG2 KEYWORD2 @@ -587,6 +625,7 @@ sendSAMSUNG KEYWORD2 sendSamsung36 KEYWORD2 sendSamsungAC KEYWORD2 sendSanyoAc KEYWORD2 +sendSanyoAc88 KEYWORD2 sendSanyoLC7461 KEYWORD2 sendSharp KEYWORD2 sendSharpAc KEYWORD2 @@ -598,9 +637,11 @@ sendSymphony KEYWORD2 sendTcl112Ac KEYWORD2 sendTechnibelAc KEYWORD2 sendTeco KEYWORD2 +sendTeknopoint KEYWORD2 sendToshibaAC KEYWORD2 sendTranscold KEYWORD2 sendTrotec KEYWORD2 +sendTrotec3550 KEYWORD2 sendTruma KEYWORD2 sendVestelAc KEYWORD2 sendVoltas KEYWORD2 @@ -630,6 +671,7 @@ setCurrentDay KEYWORD2 setCurrentTime KEYWORD2 setDisplay KEYWORD2 setDisplayTempSource KEYWORD2 +setDryGrade KEYWORD2 setEcono KEYWORD2 setEconoToggle KEYWORD2 setEnableSensorTemp KEYWORD2 @@ -646,6 +688,7 @@ setFreshAirHigh KEYWORD2 setHealth KEYWORD2 setHold KEYWORD2 setHumid KEYWORD2 +setHumidity KEYWORD2 setIFeel KEYWORD2 setId KEYWORD2 setInvertedStates KEYWORD2 @@ -691,6 +734,7 @@ setStartClock KEYWORD2 setStateLength KEYWORD2 setStopClock KEYWORD2 setSuper KEYWORD2 +setSupercool KEYWORD2 setSwing KEYWORD2 setSwingH KEYWORD2 setSwingHChange KEYWORD2 @@ -707,7 +751,10 @@ setTime KEYWORD2 setTimer KEYWORD2 setTimerActive KEYWORD2 setTimerEnabled KEYWORD2 +setTimerMode KEYWORD2 setTimerType KEYWORD2 +setTogglePower KEYWORD2 +setToggleSwingVertical KEYWORD2 setTolerance KEYWORD2 setTurbo KEYWORD2 setTurboToggle KEYWORD2 @@ -716,6 +763,8 @@ setUnknownThreshold KEYWORD2 setUseCelsius KEYWORD2 setUseFahrenheit KEYWORD2 setVane KEYWORD2 +setVaneLeft KEYWORD2 +setVaneSwingV KEYWORD2 setWeeklyTimerEnable KEYWORD2 setWeeklyTimerEnabled KEYWORD2 setWiFi KEYWORD2 @@ -749,12 +798,14 @@ toggleSwingVert KEYWORD2 toshiba KEYWORD2 transcold KEYWORD2 trotec KEYWORD2 +trotec3550 KEYWORD2 truma KEYWORD2 typeToString KEYWORD2 uint64ToString KEYWORD2 uint8ToBcd KEYWORD2 updateAndSaveState KEYWORD2 updateChecksums KEYWORD2 +updateSwingPrev KEYWORD2 updateUseLongOrShort KEYWORD2 validChecksum KEYWORD2 validSection KEYWORD2 @@ -767,13 +818,14 @@ xorBytes KEYWORD2 # Constants (LITERAL1) ####################################### -// LITERAL1 A705 LITERAL1 A903 LITERAL1 A907 LITERAL1 AIRWELL LITERAL1 AIWA_RC_T501 LITERAL1 AIWA_RC_T501_BITS LITERAL1 +AKB73757604 LITERAL1 +AKB74955603 LITERAL1 AKB75215403 LITERAL1 ALLOW_DELAY_CALLS LITERAL1 AMCOR LITERAL1 @@ -806,6 +858,7 @@ ARRAH2E LITERAL1 ARREB1E LITERAL1 ARREW4E LITERAL1 ARRY4 LITERAL1 +BOSE LITERAL1 CARRIER_AC LITERAL1 CARRIER_AC40 LITERAL1 CARRIER_AC64 LITERAL1 @@ -838,6 +891,7 @@ DECODE_AIRWELL LITERAL1 DECODE_AIWA_RC_T501 LITERAL1 DECODE_AMCOR LITERAL1 DECODE_ARGO LITERAL1 +DECODE_BOSE LITERAL1 DECODE_CARRIER_AC LITERAL1 DECODE_CARRIER_AC40 LITERAL1 DECODE_CARRIER_AC64 LITERAL1 @@ -865,6 +919,7 @@ DECODE_GLOBALCACHE LITERAL1 DECODE_GOODWEATHER LITERAL1 DECODE_GREE LITERAL1 DECODE_HAIER_AC LITERAL1 +DECODE_HAIER_AC176 LITERAL1 DECODE_HAIER_AC_YRW02 LITERAL1 DECODE_HASH LITERAL1 DECODE_HITACHI_AC LITERAL1 @@ -875,6 +930,7 @@ DECODE_HITACHI_AC344 LITERAL1 DECODE_HITACHI_AC424 LITERAL1 DECODE_INAX LITERAL1 DECODE_JVC LITERAL1 +DECODE_KELON LITERAL1 DECODE_KELVINATOR LITERAL1 DECODE_LASERTAG LITERAL1 DECODE_LEGOPF LITERAL1 @@ -910,6 +966,7 @@ DECODE_SAMSUNG36 LITERAL1 DECODE_SAMSUNG_AC LITERAL1 DECODE_SANYO LITERAL1 DECODE_SANYO_AC LITERAL1 +DECODE_SANYO_AC88 LITERAL1 DECODE_SHARP LITERAL1 DECODE_SHARP_AC LITERAL1 DECODE_SHERWOOD LITERAL1 @@ -918,9 +975,11 @@ DECODE_SYMPHONY LITERAL1 DECODE_TCL112AC LITERAL1 DECODE_TECHNIBEL_AC LITERAL1 DECODE_TECO LITERAL1 +DECODE_TEKNOPOINT LITERAL1 DECODE_TOSHIBA_AC LITERAL1 DECODE_TRANSCOLD LITERAL1 DECODE_TROTEC LITERAL1 +DECODE_TROTEC_3550 LITERAL1 DECODE_TRUMA LITERAL1 DECODE_VESTEL_AC LITERAL1 DECODE_VOLTAS LITERAL1 @@ -996,6 +1055,7 @@ GREE_SWING_MIDDLE_UP LITERAL1 GREE_SWING_UP LITERAL1 GREE_SWING_UP_AUTO LITERAL1 HAIER_AC LITERAL1 +HAIER_AC176 LITERAL1 HAIER_AC_AUTO LITERAL1 HAIER_AC_CMD_FAN LITERAL1 HAIER_AC_CMD_HEALTH LITERAL1 @@ -1070,6 +1130,7 @@ ICACHE_RAM_ATTR LITERAL1 INAX LITERAL1 JVC LITERAL1 JVC_BITS LITERAL1 +KELON LITERAL1 KELVINATOR LITERAL1 KELVINATOR_AUTO LITERAL1 KELVINATOR_AUTO_TEMP LITERAL1 @@ -1171,6 +1232,7 @@ SAMSUNG_AC LITERAL1 SAMSUNG_BITS LITERAL1 SANYO LITERAL1 SANYO_AC LITERAL1 +SANYO_AC88 LITERAL1 SANYO_LC7461 LITERAL1 SANYO_LC7461_BITS LITERAL1 SANYO_SA8650B_BITS LITERAL1 @@ -1178,6 +1240,7 @@ SEND_AIRWELL LITERAL1 SEND_AIWA_RC_T501 LITERAL1 SEND_AMCOR LITERAL1 SEND_ARGO LITERAL1 +SEND_BOSE LITERAL1 SEND_CARRIER_AC LITERAL1 SEND_CARRIER_AC40 LITERAL1 SEND_CARRIER_AC64 LITERAL1 @@ -1205,6 +1268,7 @@ SEND_GLOBALCACHE LITERAL1 SEND_GOODWEATHER LITERAL1 SEND_GREE LITERAL1 SEND_HAIER_AC LITERAL1 +SEND_HAIER_AC176 LITERAL1 SEND_HAIER_AC_YRW02 LITERAL1 SEND_HITACHI_AC LITERAL1 SEND_HITACHI_AC1 LITERAL1 @@ -1214,6 +1278,7 @@ SEND_HITACHI_AC344 LITERAL1 SEND_HITACHI_AC424 LITERAL1 SEND_INAX LITERAL1 SEND_JVC LITERAL1 +SEND_KELON LITERAL1 SEND_KELVINATOR LITERAL1 SEND_LASERTAG LITERAL1 SEND_LEGOPF LITERAL1 @@ -1250,6 +1315,7 @@ SEND_SAMSUNG36 LITERAL1 SEND_SAMSUNG_AC LITERAL1 SEND_SANYO LITERAL1 SEND_SANYO_AC LITERAL1 +SEND_SANYO_AC88 LITERAL1 SEND_SHARP LITERAL1 SEND_SHARP_AC LITERAL1 SEND_SHERWOOD LITERAL1 @@ -1258,9 +1324,11 @@ SEND_SYMPHONY LITERAL1 SEND_TCL112AC LITERAL1 SEND_TECHNIBEL_AC LITERAL1 SEND_TECO LITERAL1 +SEND_TEKNOPOINT LITERAL1 SEND_TOSHIBA_AC LITERAL1 SEND_TRANSCOLD LITERAL1 SEND_TROTEC LITERAL1 +SEND_TROTEC_3550 LITERAL1 SEND_TRUMA LITERAL1 SEND_VESTEL_AC LITERAL1 SEND_VOLTAS LITERAL1 @@ -1282,6 +1350,7 @@ SYMPHONY LITERAL1 TCL112AC LITERAL1 TECHNIBEL_AC LITERAL1 TECO LITERAL1 +TEKNOPOINT LITERAL1 TIMEOUT_MS LITERAL1 TOSHIBA_AC LITERAL1 TOSHIBA_AC_AUTO LITERAL1 @@ -1296,6 +1365,7 @@ TOSHIBA_AC_POWER LITERAL1 TOSHIBA_AC_STATE_LENGTH LITERAL1 TRANSCOLD LITERAL1 TROTEC LITERAL1 +TROTEC_3550 LITERAL1 TROTEC_AUTO LITERAL1 TROTEC_COMMAND_LENGTH LITERAL1 TROTEC_COOL LITERAL1 @@ -1432,6 +1502,14 @@ kAutoStr LITERAL1 kAutomaticStr LITERAL1 kBeepStr LITERAL1 kBitsStr LITERAL1 +kBoseBitMark LITERAL1 +kBoseBits LITERAL1 +kBoseFreq LITERAL1 +kBoseGap LITERAL1 +kBoseHdrMark LITERAL1 +kBoseHdrSpace LITERAL1 +kBoseOneSpace LITERAL1 +kBoseZeroSpace LITERAL1 kBottomStr LITERAL1 kBreezeStr LITERAL1 kButtonStr LITERAL1 @@ -1678,6 +1756,14 @@ kDaikin2Freq LITERAL1 kDaikin2Gap LITERAL1 kDaikin2HdrMark LITERAL1 kDaikin2HdrSpace LITERAL1 +kDaikin2HumidityAuto LITERAL1 +kDaikin2HumidityDryHigh LITERAL1 +kDaikin2HumidityDryLow LITERAL1 +kDaikin2HumidityDryMedium LITERAL1 +kDaikin2HumidityHeatHigh LITERAL1 +kDaikin2HumidityHeatLow LITERAL1 +kDaikin2HumidityHeatMedium LITERAL1 +kDaikin2HumidityOff LITERAL1 kDaikin2LeaderMark LITERAL1 kDaikin2LeaderSpace LITERAL1 kDaikin2MinCoolTemp LITERAL1 @@ -1726,6 +1812,7 @@ kDaikin64Freq LITERAL1 kDaikin64Gap LITERAL1 kDaikin64HdrMark LITERAL1 kDaikin64HdrSpace LITERAL1 +kDaikin64Heat LITERAL1 kDaikin64KnownGoodState LITERAL1 kDaikin64LdrMark LITERAL1 kDaikin64LdrSpace LITERAL1 @@ -2068,10 +2155,14 @@ kGreeSwingUp LITERAL1 kGreeSwingUpAuto LITERAL1 kGreeTimerMax LITERAL1 kGreeZeroSpace LITERAL1 +kHaierAC176Bits LITERAL1 +kHaierAC176StateLength LITERAL1 kHaierACBits LITERAL1 kHaierACStateLength LITERAL1 kHaierACYRW02Bits LITERAL1 kHaierACYRW02StateLength LITERAL1 +kHaierAc176DefaultRepeat LITERAL1 +kHaierAc176Prefix LITERAL1 kHaierAcAuto LITERAL1 kHaierAcBitMark LITERAL1 kHaierAcCmdFan LITERAL1 @@ -2127,6 +2218,11 @@ kHaierAcYrw02FanHigh LITERAL1 kHaierAcYrw02FanLow LITERAL1 kHaierAcYrw02FanMed LITERAL1 kHaierAcYrw02Heat LITERAL1 +kHaierAcYrw02NoTimers LITERAL1 +kHaierAcYrw02OffThenOnTimer LITERAL1 +kHaierAcYrw02OffTimer LITERAL1 +kHaierAcYrw02OnThenOffTimer LITERAL1 +kHaierAcYrw02OnTimer LITERAL1 kHaierAcYrw02Prefix LITERAL1 kHaierAcYrw02SwingAuto LITERAL1 kHaierAcYrw02SwingBottom LITERAL1 @@ -2297,6 +2393,27 @@ kJvcRptLengthTicks LITERAL1 kJvcTick LITERAL1 kJvcZeroSpace LITERAL1 kJvcZeroSpaceTicks LITERAL1 +kKelonBitMark LITERAL1 +kKelonBits LITERAL1 +kKelonDryGradeMax LITERAL1 +kKelonDryGradeMin LITERAL1 +kKelonFanAuto LITERAL1 +kKelonFanMax LITERAL1 +kKelonFanMedium LITERAL1 +kKelonFanMin LITERAL1 +kKelonFreq LITERAL1 +kKelonGap LITERAL1 +kKelonHdrMark LITERAL1 +kKelonHdrSpace LITERAL1 +kKelonMaxTemp LITERAL1 +kKelonMinTemp LITERAL1 +kKelonModeCool LITERAL1 +kKelonModeDry LITERAL1 +kKelonModeFan LITERAL1 +kKelonModeHeat LITERAL1 +kKelonModeSmart LITERAL1 +kKelonOneSpace LITERAL1 +kKelonZeroSpace LITERAL1 kKelvinatorAuto LITERAL1 kKelvinatorAutoTemp LITERAL1 kKelvinatorBasicFanMax LITERAL1 @@ -2360,23 +2477,61 @@ kLg32Bits LITERAL1 kLg32HdrMark LITERAL1 kLg32HdrSpace LITERAL1 kLg32RptHdrMark LITERAL1 +kLgAcAKB74955603DetectionMask LITERAL1 kLgAcAuto LITERAL1 +kLgAcChecksumSize LITERAL1 kLgAcCool LITERAL1 kLgAcDry LITERAL1 kLgAcFan LITERAL1 kLgAcFanAuto LITERAL1 +kLgAcFanEntries LITERAL1 kLgAcFanHigh LITERAL1 kLgAcFanLow LITERAL1 +kLgAcFanLowAlt LITERAL1 kLgAcFanLowest LITERAL1 +kLgAcFanMax LITERAL1 kLgAcFanMedium LITERAL1 kLgAcHeat LITERAL1 +kLgAcLightToggle LITERAL1 kLgAcMaxTemp LITERAL1 kLgAcMinTemp LITERAL1 kLgAcOffCommand LITERAL1 kLgAcPowerOff LITERAL1 kLgAcPowerOn LITERAL1 kLgAcSignature LITERAL1 +kLgAcSwingHAuto LITERAL1 +kLgAcSwingHOff LITERAL1 +kLgAcSwingHOffsetSize LITERAL1 +kLgAcSwingHSignature LITERAL1 +kLgAcSwingSignature LITERAL1 +kLgAcSwingVAuto LITERAL1 +kLgAcSwingVAuto_Short LITERAL1 +kLgAcSwingVHigh LITERAL1 +kLgAcSwingVHigh_Short LITERAL1 +kLgAcSwingVHighest LITERAL1 +kLgAcSwingVHighest_Short LITERAL1 +kLgAcSwingVLow LITERAL1 +kLgAcSwingVLow_Short LITERAL1 +kLgAcSwingVLowest LITERAL1 +kLgAcSwingVLowest_Short LITERAL1 +kLgAcSwingVMaxVanes LITERAL1 +kLgAcSwingVMiddle LITERAL1 +kLgAcSwingVMiddle_Short LITERAL1 +kLgAcSwingVOff LITERAL1 +kLgAcSwingVOff_Short LITERAL1 +kLgAcSwingVSwing LITERAL1 +kLgAcSwingVSwing_Short LITERAL1 +kLgAcSwingVUpperMiddle LITERAL1 +kLgAcSwingVUpperMiddle_Short LITERAL1 kLgAcTempAdjust LITERAL1 +kLgAcVaneSwingVBase LITERAL1 +kLgAcVaneSwingVHigh LITERAL1 +kLgAcVaneSwingVHighest LITERAL1 +kLgAcVaneSwingVLow LITERAL1 +kLgAcVaneSwingVLowest LITERAL1 +kLgAcVaneSwingVMiddle LITERAL1 +kLgAcVaneSwingVSize LITERAL1 +kLgAcVaneSwingVUpperMiddle LITERAL1 kLgBitMark LITERAL1 kLgBits LITERAL1 kLgDefaultRepeat LITERAL1 @@ -2591,6 +2746,7 @@ kMitsubishiAcBitMark LITERAL1 kMitsubishiAcCool LITERAL1 kMitsubishiAcDry LITERAL1 kMitsubishiAcExtraTolerance LITERAL1 +kMitsubishiAcFan LITERAL1 kMitsubishiAcFanAuto LITERAL1 kMitsubishiAcFanMax LITERAL1 kMitsubishiAcFanQuiet LITERAL1 @@ -2840,6 +2996,8 @@ kPanasonicAcExcess LITERAL1 kPanasonicAcFan LITERAL1 kPanasonicAcFanAuto LITERAL1 kPanasonicAcFanDelta LITERAL1 +kPanasonicAcFanHigh LITERAL1 +kPanasonicAcFanLow LITERAL1 kPanasonicAcFanMax LITERAL1 kPanasonicAcFanMed LITERAL1 kPanasonicAcFanMin LITERAL1 @@ -3051,6 +3209,29 @@ kSamsungRptSpaceTicks LITERAL1 kSamsungTick LITERAL1 kSamsungZeroSpace LITERAL1 kSamsungZeroSpaceTicks LITERAL1 +kSanyoAc88Auto LITERAL1 +kSanyoAc88BitMark LITERAL1 +kSanyoAc88Bits LITERAL1 +kSanyoAc88Cool LITERAL1 +kSanyoAc88ExtraTolerance LITERAL1 +kSanyoAc88Fan LITERAL1 +kSanyoAc88FanAuto LITERAL1 +kSanyoAc88FanHigh LITERAL1 +kSanyoAc88FanLow LITERAL1 +kSanyoAc88FanMedium LITERAL1 +kSanyoAc88FeelCool LITERAL1 +kSanyoAc88FeelHeat LITERAL1 +kSanyoAc88Freq LITERAL1 +kSanyoAc88Gap LITERAL1 +kSanyoAc88HdrMark LITERAL1 +kSanyoAc88HdrSpace LITERAL1 +kSanyoAc88Heat LITERAL1 +kSanyoAc88MinRepeat LITERAL1 +kSanyoAc88OneSpace LITERAL1 +kSanyoAc88StateLength LITERAL1 +kSanyoAc88TempMax LITERAL1 +kSanyoAc88TempMin LITERAL1 +kSanyoAc88ZeroSpace LITERAL1 kSanyoAcAuto LITERAL1 kSanyoAcBitMark LITERAL1 kSanyoAcBits LITERAL1 @@ -3232,7 +3413,9 @@ kTcl112AcHdrMark LITERAL1 kTcl112AcHdrMarkTolerance LITERAL1 kTcl112AcHdrSpace LITERAL1 kTcl112AcHeat LITERAL1 +kTcl112AcNormal LITERAL1 kTcl112AcOneSpace LITERAL1 +kTcl112AcSpecial LITERAL1 kTcl112AcStateLength LITERAL1 kTcl112AcSwingVOff LITERAL1 kTcl112AcSwingVOn LITERAL1 @@ -3286,11 +3469,21 @@ kTecoMinTemp LITERAL1 kTecoOneSpace LITERAL1 kTecoReset LITERAL1 kTecoZeroSpace LITERAL1 +kTeknopointBitMark LITERAL1 +kTeknopointBits LITERAL1 +kTeknopointExtraTol LITERAL1 +kTeknopointFreq LITERAL1 +kTeknopointHdrMark LITERAL1 +kTeknopointHdrSpace LITERAL1 +kTeknopointOneSpace LITERAL1 +kTeknopointStateLength LITERAL1 +kTeknopointZeroSpace LITERAL1 kTempDownStr LITERAL1 kTempStr LITERAL1 kTempUpStr LITERAL1 kThreeLetterDayOfWeekStr LITERAL1 kTimeoutMs LITERAL1 +kTimerModeStr LITERAL1 kTimerStr LITERAL1 kToggleStr LITERAL1 kTolerance LITERAL1 @@ -3361,6 +3554,16 @@ kTranscoldTempMin LITERAL1 kTranscoldTempSize LITERAL1 kTranscoldUnknown LITERAL1 kTranscoldZeroSpace LITERAL1 +kTrotec3550BitMark LITERAL1 +kTrotec3550HdrMark LITERAL1 +kTrotec3550HdrSpace LITERAL1 +kTrotec3550MaxTempC LITERAL1 +kTrotec3550MaxTempF LITERAL1 +kTrotec3550MinTempC LITERAL1 +kTrotec3550MinTempF LITERAL1 +kTrotec3550OneSpace LITERAL1 +kTrotec3550TimerMax LITERAL1 +kTrotec3550ZeroSpace LITERAL1 kTrotecAuto LITERAL1 kTrotecBitMark LITERAL1 kTrotecBits LITERAL1 @@ -3414,6 +3617,7 @@ kUnknownThreshold LITERAL1 kUpStr LITERAL1 kUpperStr LITERAL1 kUseDefTol LITERAL1 +kVaneStr LITERAL1 kVestelAcAuto LITERAL1 kVestelAcBitMark LITERAL1 kVestelAcBits LITERAL1 diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.json b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.json new file mode 100644 index 000000000..5bce2238e --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.json @@ -0,0 +1,50 @@ +{ + "name": "IRremoteESP8266", + "version": "2.7.20", + "keywords": "infrared, ir, remote, esp8266, esp32", + "description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)", + "repository": + { + "type": "git", + "url": "https://github.com/crankyoldgit/IRremoteESP8266.git" + }, + "authors": [ + { + "name": "David Conran", + "url": "https://plus.google.com/+davidconran", + "maintainer": true + }, + { + "name": "Mark Szabo", + "url": "http://nomartini-noparty.blogspot.com/", + "maintainer": true + }, + { + "name": "Sebastien Warin", + "url": "http://sebastien.warin.fr", + "maintainer": true + }, + { + "name": "Ken Shirriff", + "email": "zetoslab@gmail.com" + }, + { + "name": "Roi Dayan", + "url": "https://github.com/roidayan/", + "maintainer": true + }, + { + "name": "Massimiliano Pinto", + "url": "https://github.com/pintomax/", + "maintainer": true + }, + { + "name": "Christian Nilsson", + "url": "https://github.com/NiKiZe", + "maintainer": true + } + ], + "exclude": [".github", "extras", "docs", "assets"], + "frameworks": "arduino", + "platforms": ["espressif8266", "espressif32"] +} diff --git a/lib/lib_basic/IRremoteESP8266/library.properties b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.properties similarity index 96% rename from lib/lib_basic/IRremoteESP8266/library.properties rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.properties index 55943297d..e4985e2a2 100644 --- a/lib/lib_basic/IRremoteESP8266/library.properties +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/library.properties @@ -1,5 +1,5 @@ name=IRremoteESP8266 -version=2.7.18 +version=2.7.20 author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff maintainer=David Conran, Mark Szabo, Sebastien Warin, Roi Dayan, Massimiliano Pinto, Christian Nilsson sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32) diff --git a/lib/lib_basic/IRremoteESP8266/platformio.ini b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/platformio.ini similarity index 100% rename from lib/lib_basic/IRremoteESP8266/platformio.ini rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/platformio.ini diff --git a/lib/lib_basic/IRremoteESP8266/pylintrc b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/pylintrc similarity index 100% rename from lib/lib_basic/IRremoteESP8266/pylintrc rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/pylintrc diff --git a/lib/lib_basic/IRremoteESP8266/src/CPPLINT.cfg b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/CPPLINT.cfg similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/CPPLINT.cfg rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/CPPLINT.cfg diff --git a/lib/lib_basic/IRremoteESP8266/src/IRac.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.cpp similarity index 92% rename from lib/lib_basic/IRremoteESP8266/src/IRac.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.cpp index f19443054..9b4e10cbd 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRac.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.cpp @@ -28,6 +28,7 @@ #include "ir_Fujitsu.h" #include "ir_Haier.h" #include "ir_Hitachi.h" +#include "ir_Kelon.h" #include "ir_Kelvinator.h" #include "ir_LG.h" #include "ir_Midea.h" @@ -202,6 +203,9 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) { #if SEND_HAIER_AC case decode_type_t::HAIER_AC: #endif +#if SEND_HAIER_AC176 + case decode_type_t::HAIER_AC176: +#endif // SEND_HAIER_AC176 #if SEND_HAIER_AC_YRW02 case decode_type_t::HAIER_AC_YRW02: #endif @@ -217,6 +221,9 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) { #if SEND_HITACHI_AC424 case decode_type_t::HITACHI_AC424: #endif +#if SEND_KELON + case decode_type_t::KELON: +#endif #if SEND_KELVINATOR case decode_type_t::KELVINATOR: #endif @@ -255,6 +262,9 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) { #if SEND_SANYO_AC case decode_type_t::SANYO_AC: #endif +#if SEND_SANYO_AC88 + case decode_type_t::SANYO_AC88: +#endif #if SEND_SHARP_AC case decode_type_t::SHARP_AC: #endif @@ -276,6 +286,9 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) { #if SEND_TROTEC case decode_type_t::TROTEC: #endif +#if SEND_TROTEC_3550 + case decode_type_t::TROTEC_3550: +#endif // SEND_TROTEC_3550 #if SEND_TRUMA case decode_type_t::TRUMA: #endif // SEND_TRUMA @@ -285,16 +298,8 @@ bool IRac::isProtocolSupported(const decode_type_t protocol) { #if SEND_VOLTAS case decode_type_t::VOLTAS: #endif -#if SEND_WHIRLPOOL_AC case decode_type_t::WHIRLPOOL_AC: -#endif -// Note: Compiler Warning is disabled because someone could disable all -// the protocols before this and it is then unreachable. -// "-Wswitch-unreachable" not used as it appears to be an unknown option. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wall" return true; -#pragma GCC diagnostic pop default: return false; } @@ -458,6 +463,13 @@ void IRac::coolix(IRCoolixAC *ac, // No Clock setting available. // No Econo setting available. // No Quiet setting available. + ac->send(); // Send the state, which will also power on the unit. + // The following are all options/settings that create their own special + // messages. Often they only make sense to be sent after the unit is turned + // on. For instance, assuming a person wants to have the a/c on and in turbo + // mode. If we send the turbo message, it is ignored if the unit is off. + // Hence we send the special mode/setting messages after a normal message + // which will turn on the device. if (swingv != stdAc::swingv_t::kOff || swingh != stdAc::swingh_t::kOff) { // Swing has a special command that needs to be sent independently. ac->setSwing(); @@ -468,7 +480,7 @@ void IRac::coolix(IRCoolixAC *ac, ac->setTurbo(); ac->send(); } - if (sleep > 0) { + if (sleep >= 0) { // Sleep has a special command that needs to be sent independently. ac->setSleep(); ac->send(); @@ -483,7 +495,6 @@ void IRac::coolix(IRCoolixAC *ac, ac->setClean(); ac->send(); } - ac->send(); } #endif // SEND_COOLIX @@ -1075,6 +1086,40 @@ void IRac::haier(IRHaierAC *ac, } #endif // SEND_HAIER_AC +#if SEND_HAIER_AC176 +/// Send a Haier 176 bit A/C message with the supplied settings. +/// @param[in, out] ac A Ptr to an IRHaierAC176 object to use. +/// @param[in] on The power setting. +/// @param[in] mode The operation mode setting. +/// @param[in] degrees The temperature setting in degrees. +/// @param[in] fan The speed setting for the fan. +/// @param[in] swingv The vertical swing setting. +/// @param[in] turbo Run the device in turbo/powerful mode. +/// @param[in] filter Turn on the (ion/pollen/etc) filter mode. +/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on. +void IRac::haier176(IRHaierAC176 *ac, + const bool on, const stdAc::opmode_t mode, + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, const bool turbo, + const bool filter, const int16_t sleep) { + ac->begin(); + ac->setMode(ac->convertMode(mode)); + ac->setTemp(degrees); + ac->setFan(ac->convertFan(fan)); + ac->setSwing(ac->convertSwingV(swingv)); + // No Horizontal Swing setting available. + // No Quiet setting available. + ac->setTurbo(turbo); + // No Light setting available. + ac->setHealth(filter); + // No Clean setting available. + // No Beep setting available. + ac->setSleep(sleep >= 0); // Sleep on this A/C is either on or off. + ac->setPower(on); + ac->send(); +} +#endif // SEND_HAIER_AC176 + #if SEND_HAIER_AC_YRW02 /// Send a Haier YRWO2 A/C message with the supplied settings. /// @param[in, out] ac A Ptr to an IRHaierACYRW02 object to use. @@ -1252,6 +1297,37 @@ void IRac::hitachi424(IRHitachiAc424 *ac, } #endif // SEND_HITACHI_AC424 +#if SEND_KELON +/// Send a Kelon A/C message with the supplied settings. +/// @param[in, out] ac A Ptr to an IRKelonAc object to use. +/// @param[in] togglePower Whether to toggle the unit's power +/// @param[in] mode The operation mode setting. +/// @param[in] dryGrade The dehumidification intensity grade +/// @param[in] degrees The temperature setting in degrees. +/// @param[in] fan The speed setting for the fan. +/// @param[in] toggleSwing Whether to toggle the swing setting +/// @param[in] superCool Run the device in Super cooling mode. +/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on +void IRac::kelon(IRKelonAc *ac, const bool togglePower, + const stdAc::opmode_t mode, const int8_t dryGrade, + const float degrees, const stdAc::fanspeed_t fan, + const bool toggleSwing, const bool superCool, + const int16_t sleep) { + ac->begin(); + ac->setMode(IRKelonAc::convertMode(mode)); + ac->setFan(IRKelonAc::convertFan(fan)); + ac->setTemp(static_cast(degrees)); + ac->setSleep(sleep >= 0); + ac->setSupercool(superCool); + ac->setDryGrade(dryGrade); + + ac->setTogglePower(togglePower); + ac->setToggleSwingVertical(toggleSwing); + + ac->send(); +} +#endif // SEND_KELON + #if SEND_KELVINATOR /// Send a Kelvinator A/C message with the supplied settings. /// @param[in, out] ac A Ptr to an IRKelvinatorAC object to use. @@ -1300,20 +1376,31 @@ void IRac::kelvinator(IRKelvinatorAC *ac, /// @param[in] mode The operation mode setting. /// @param[in] degrees The temperature setting in degrees. /// @param[in] fan The speed setting for the fan. +/// @param[in] swingv The vertical swing setting. +/// @param[in] swingv_prev The previous vertical swing setting. +/// @param[in] swingh The horizontal swing setting. +/// @param[in] light Turn on the LED/Display mode. void IRac::lg(IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, - const float degrees, const stdAc::fanspeed_t fan) { + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, const stdAc::swingv_t swingv_prev, + const stdAc::swingh_t swingh, const bool light) { ac->begin(); ac->setModel(model); ac->setPower(on); ac->setMode(ac->convertMode(mode)); ac->setTemp(degrees); ac->setFan(ac->convertFan(fan)); - // No Vertical swing setting available. - // No Horizontal swing setting available. + ac->setSwingV(ac->convertSwingV(swingv_prev)); + ac->updateSwingPrev(); + ac->setSwingV(ac->convertSwingV(swingv)); + const uint8_t pos = ac->convertVaneSwingV(swingv); + for (uint8_t vane = 0; vane < kLgAcSwingVMaxVanes; vane++) + ac->setVaneSwingV(vane, pos); + ac->setSwingH(swingh != stdAc::swingh_t::kOff); // No Quiet setting available. // No Turbo setting available. - // No Light setting available. + ac->setLight(light); // No Filter setting available. // No Clean setting available. // No Beep setting available. @@ -1719,7 +1806,7 @@ void IRac::samsung(IRSamsungAc *ac, #endif // SEND_SAMSUNG_AC #if SEND_SANYO_AC -/// Send a Toshiba A/C message with the supplied settings. +/// Send a Sanyo A/C message with the supplied settings. /// @param[in, out] ac A Ptr to an IRSanyoAc object to use. /// @param[in] on The power setting. /// @param[in] mode The operation mode setting. @@ -1757,6 +1844,44 @@ void IRac::sanyo(IRSanyoAc *ac, } #endif // SEND_SANYO_AC +#if SEND_SANYO_AC88 +/// Send a Sanyo 88-bit A/C message with the supplied settings. +/// @param[in, out] ac A Ptr to an IRSanyoAc88 object to use. +/// @param[in] on The power setting. +/// @param[in] mode The operation mode setting. +/// @param[in] degrees The temperature setting in degrees. +/// @param[in] fan The speed setting for the fan. +/// @param[in] swingv The vertical swing setting. +/// @param[in] turbo Run the device in turbo/powerful mode. +/// @param[in] filter Turn on the (ion/pollen/etc) filter mode. +/// @param[in] sleep Nr. of minutes for sleep mode. -1 is Off, >= 0 is on. +/// @param[in] clock The time in Nr. of mins since midnight. < 0 is ignore. +void IRac::sanyo88(IRSanyoAc88 *ac, + const bool on, const stdAc::opmode_t mode, + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, const bool turbo, + const bool filter, const int16_t sleep, + const int16_t clock) { + ac->begin(); + ac->setPower(on); + ac->setMode(ac->convertMode(mode)); + ac->setTemp(degrees); + ac->setFan(ac->convertFan(fan)); + ac->setSwingV(swingv != stdAc::swingv_t::kOff); + // No Horizontal swing setting available. + // No Quiet setting available. + ac->setTurbo(turbo); + // No Econo setting available. + // No Light setting available. + ac->setFilter(filter); + // No Clean setting available. + // No Beep setting available. + ac->setSleep(sleep >= 0); // Sleep is either on/off, so convert to boolean. + if (clock >= 0) ac->setClock(clock); + ac->send(); +} +#endif // SEND_SANYO_AC88 + #if SEND_SHARP_AC /// Send a Sharp A/C message with the supplied settings. /// @note Multiple IR messages may be generated & sent. @@ -1821,6 +1946,7 @@ void IRac::sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, /// @param[in] fan The speed setting for the fan. /// @param[in] swingv The vertical swing setting. /// @param[in] swingh The horizontal swing setting. +/// @param[in] quiet Run the device in quiet/silent mode. /// @param[in] turbo Run the device in turbo/powerful mode. /// @param[in] light Turn on the LED/Display mode. /// @param[in] econo Run the device in economical mode. @@ -1829,8 +1955,8 @@ void IRac::tcl112(IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, - const bool turbo, const bool light, const bool econo, - const bool filter) { + const bool quiet, const bool turbo, const bool light, + const bool econo, const bool filter) { ac->begin(); ac->setPower(on); ac->setMode(ac->convertMode(mode)); @@ -1838,7 +1964,7 @@ void IRac::tcl112(IRTcl112Ac *ac, ac->setFan(ac->convertFan(fan)); ac->setSwingVertical(swingv != stdAc::swingv_t::kOff); ac->setSwingHorizontal(swingh != stdAc::swingh_t::kOff); - // No Quiet setting available. + ac->setQuiet(quiet); ac->setTurbo(turbo); ac->setLight(light); ac->setEcono(econo); @@ -1986,6 +2112,39 @@ void IRac::trotec(IRTrotecESP *ac, } #endif // SEND_TROTEC +#if SEND_TROTEC_3550 +/// Send a Trotec 3550 A/C message with the supplied settings. +/// @param[in, out] ac A Ptr to an IRTrotecESP object to use. +/// @param[in] on The power setting. +/// @param[in] mode The operation mode setting. +/// @param[in] celsius Temperature units. True is Celsius, False is Fahrenheit. +/// @param[in] degrees The temperature setting in degrees. +/// @param[in] fan The speed setting for the fan. +/// @param[in] swingv The vertical swing setting. +void IRac::trotec3550(IRTrotec3550 *ac, + const bool on, const stdAc::opmode_t mode, + const bool celsius, const float degrees, + const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv) { + ac->begin(); + ac->setPower(on); + ac->setMode(ac->convertMode(mode)); + ac->setTemp(degrees, celsius); + ac->setFan(ac->convertFan(fan)); + ac->setSwingV(swingv != stdAc::swingv_t::kOff); + // No Horizontal swing setting available. + // No Quiet setting available. + // No Turbo setting available. + // No Light setting available. + // No Filter setting available. + // No Clean setting available. + // No Beep setting available. + // No Sleep setting available. + // No Clock setting available. + ac->send(); +} +#endif // SEND_TROTEC_3550 + #if SEND_TRUMA /// Send a Truma A/C message with the supplied settings. /// @param[in, out] ac A Ptr to an IRTrumaAc object to use. @@ -2253,6 +2412,13 @@ stdAc::state_t IRac::handleToggles(const stdAc::state_t desired, else result.swingv = stdAc::swingv_t::kOff; // No change, so no toggle. break; + case decode_type_t::KELON: + if ((desired.swingv == stdAc::swingv_t::kOff) ^ + (prev->swingv == stdAc::swingv_t::kOff)) // It changed, so toggle. + result.swingv = stdAc::swingv_t::kAuto; + else + result.swingv = stdAc::swingv_t::kOff; // No change, so no toggle. + // FALL-THRU case decode_type_t::AIRWELL: case decode_type_t::DAIKIN64: case decode_type_t::PANASONIC_AC32: @@ -2328,7 +2494,11 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { // Construct a pointer-safe previous power state incase prev is NULL/NULLPTR. #if (SEND_HITACHI_AC1 || SEND_SAMSUNG_AC || SEND_SHARP_AC) const bool prev_power = (prev != NULL) ? prev->power : !send.power; -#endif +#endif // (SEND_HITACHI_AC1 || SEND_SAMSUNG_AC || SEND_SHARP_AC) +#if SEND_LG + const stdAc::swingv_t prev_swingv = (prev != NULL) ? prev->swingv + : stdAc::swingv_t::kOff; +#endif // SEND_LG // Per vendor settings & setup. switch (send.protocol) { #if SEND_AIRWELL @@ -2522,6 +2692,15 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { break; } #endif // SEND_HAIER_AC +#if SEND_HAIER_AC176 + case HAIER_AC176: + { + IRHaierAC176 ac(_pin, _inverted, _modulation); + haier176(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv, + send.turbo, send.filter, send.sleep); + break; + } +#endif // SEND_HAIER_AC176 #if SEND_HAIER_AC_YRW02 case HAIER_AC_YRW02: { @@ -2574,6 +2753,14 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { break; } #endif // SEND_HITACHI_AC424 +#if SEND_KELON + case KELON: { + IRKelonAc ac(_pin, _inverted, _modulation); + kelon(&ac, send.power, send.mode, 0, send.degrees, send.fanspeed, + send.swingv != stdAc::swingv_t::kOff, send.turbo, send.sleep); + break; + } +#endif #if SEND_KELVINATOR case KELVINATOR: { @@ -2590,7 +2777,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { { IRLgAc ac(_pin, _inverted, _modulation); lg(&ac, (lg_ac_remote_model_t)send.model, send.power, send.mode, - send.degrees, send.fanspeed); + send.degrees, send.fanspeed, send.swingv, prev_swingv, send.swingh, + send.light); break; } #endif // SEND_LG @@ -2697,6 +2885,15 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { break; } #endif // SEND_SANYO_AC +#if SEND_SANYO_AC88 + case SANYO_AC88: + { + IRSanyoAc88 ac(_pin, _inverted, _modulation); + sanyo88(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv, + send.turbo, send.filter, send.sleep, send.clock); + break; + } +#endif // SEND_SANYO_AC88 #if SEND_SHARP_AC case SHARP_AC: { @@ -2712,7 +2909,8 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { { IRTcl112Ac ac(_pin, _inverted, _modulation); tcl112(&ac, send.power, send.mode, degC, send.fanspeed, send.swingv, - send.swingh, send.turbo, send.light, send.econo, send.filter); + send.swingh, send.quiet, send.turbo, send.light, send.econo, + send.filter); break; } #endif // SEND_TCL112AC @@ -2751,6 +2949,15 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { break; } #endif // SEND_TROTEC +#if SEND_TROTEC_3550 + case TROTEC_3550: + { + IRTrotec3550 ac(_pin, _inverted, _modulation); + trotec3550(&ac, send.power, send.mode, send.celsius, send.degrees, + send.fanspeed, send.swingv); + break; + } +#endif // SEND_TROTEC_3550 #if SEND_TRUMA case TRUMA: { @@ -2801,7 +3008,7 @@ bool IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev) { return false; // Fail, didn't match anything. } return true; // Success. -} +} // NOLINT(readability/fn_size) /// Update the previous state to the current one. void IRac::markAsSent(void) { @@ -2950,10 +3157,10 @@ stdAc::swingh_t IRac::strToSwingH(const char *str, else if (!strcasecmp(str, kOffStr) || !strcasecmp(str, kStopStr)) return stdAc::swingh_t::kOff; - else if (!strcasecmp(str, kLeftMaxStr) || - !strcasecmp(str, D_STR_LEFT " " D_STR_MAX) || - !strcasecmp(str, D_STR_MAX D_STR_LEFT) || - !strcasecmp(str, kMaxLeftStr)) + else if (!strcasecmp(str, kLeftMaxStr) || // "LeftMax" + !strcasecmp(str, D_STR_LEFT " " D_STR_MAX) || // "Left Max" + !strcasecmp(str, D_STR_MAX D_STR_LEFT) || // "MaxLeft" + !strcasecmp(str, kMaxLeftStr)) // "Max Left" return stdAc::swingh_t::kLeftMax; else if (!strcasecmp(str, kLeftStr)) return stdAc::swingh_t::kLeft; @@ -2965,10 +3172,10 @@ stdAc::swingh_t IRac::strToSwingH(const char *str, return stdAc::swingh_t::kMiddle; else if (!strcasecmp(str, kRightStr)) return stdAc::swingh_t::kRight; - else if (!strcasecmp(str, kRightMaxStr) || - !strcasecmp(str, D_STR_MAX " " D_STR_RIGHT) || - !strcasecmp(str, D_STR_MAX D_STR_RIGHT) || - !strcasecmp(str, kMaxRightStr)) + else if (!strcasecmp(str, kRightMaxStr) || // "RightMax" + !strcasecmp(str, D_STR_RIGHT " " D_STR_MAX) || // "Right Max" + !strcasecmp(str, D_STR_MAX D_STR_RIGHT) || // "MaxRight" + !strcasecmp(str, kMaxRightStr)) // "Max Right" return stdAc::swingh_t::kRightMax; else if (!strcasecmp(str, kWideStr)) return stdAc::swingh_t::kWide; @@ -3008,6 +3215,10 @@ int16_t IRac::strToModel(const char *str, const int16_t def) { return lg_ac_remote_model_t::GE6711AR2853M; } else if (!strcasecmp(str, "AKB75215403")) { return lg_ac_remote_model_t::AKB75215403; + } else if (!strcasecmp(str, "AKB74955603")) { + return lg_ac_remote_model_t::AKB74955603; + } else if (!strcasecmp(str, "AKB73757604")) { + return lg_ac_remote_model_t::AKB73757604; // Panasonic A/C families } else if (!strcasecmp(str, "LKE") || !strcasecmp(str, "PANASONICLKE")) { return panasonic_ac_remote_model_t::kPanasonicLke; @@ -3283,6 +3494,13 @@ namespace IRAcUtils { return ac.toString(); } #endif // DECODE_FUJITSU_AC +#if DECODE_KELON + case decode_type_t::KELON: { + IRKelonAc ac(kGpioUnused); + ac.setRaw(result->value); + return ac.toString(); + } +#endif // DECODE_KELON #if DECODE_KELVINATOR case decode_type_t::KELVINATOR: { IRKelvinatorAC ac(kGpioUnused); @@ -3344,6 +3562,13 @@ namespace IRAcUtils { return ac.toString(); } #endif // DECODE_TROTEC +#if DECODE_TROTEC_3550 + case decode_type_t::TROTEC_3550: { + IRTrotec3550 ac(kGpioUnused); + ac.setRaw(result->state); + return ac.toString(); + } +#endif // DECODE_TROTEC_3550 #if DECODE_TRUMA case decode_type_t::TRUMA: { IRTrumaAc ac(kGpioUnused); @@ -3379,6 +3604,13 @@ namespace IRAcUtils { return ac.toString(); } #endif // DECODE_HAIER_AC +#if DECODE_HAIER_AC176 + case decode_type_t::HAIER_AC176: { + IRHaierAC176 ac(kGpioUnused); + ac.setRaw(result->state); + return ac.toString(); + } +#endif // DECODE_HAIER_AC176 #if DECODE_HAIER_AC_YRW02 case decode_type_t::HAIER_AC_YRW02: { IRHaierACYRW02 ac(kGpioUnused); @@ -3400,6 +3632,13 @@ namespace IRAcUtils { return ac.toString(); } #endif // DECODE_SANYO_AC +#if DECODE_SANYO_AC88 + case decode_type_t::SANYO_AC88: { + IRSanyoAc88 ac(kGpioUnused); + ac.setRaw(result->state); + return ac.toString(); + } +#endif // DECODE_SANYO_AC88 #if DECODE_SHARP_AC case decode_type_t::SHARP_AC: { IRSharpAc ac(kGpioUnused); @@ -3516,14 +3755,7 @@ namespace IRAcUtils { case decode_type_t::LG: case decode_type_t::LG2: { IRLgAc ac(kGpioUnused); - ac.setRaw(result->value); // Like Coolix, use value instead of state. - switch (result->decode_type) { - case decode_type_t::LG2: - ac.setModel(lg_ac_remote_model_t::AKB75215403); - break; - default: - ac.setModel(lg_ac_remote_model_t::GE6711AR2853M); - } + ac.setRaw(result->value, result->decode_type); // Use value, not state. return ac.isValidLgAc() ? ac.toString() : ""; } #endif // DECODE_LG @@ -3728,6 +3960,14 @@ namespace IRAcUtils { break; } #endif // DECODE_HAIER_AC +#if DECODE_HAIER_AC176 + case decode_type_t::HAIER_AC176: { + IRHaierAC176 ac(kGpioUnused); + ac.setRaw(decode->state); + *result = ac.toCommon(); + break; + } +#endif // DECODE_HAIER_AC176 #if DECODE_HAIER_AC_YRW02 case decode_type_t::HAIER_AC_YRW02: { IRHaierACYRW02 ac(kGpioUnused); @@ -3768,6 +4008,14 @@ namespace IRAcUtils { break; } #endif // DECODE_HITACHI_AC424 +#if DECODE_KELON + case decode_type_t::KELON: { + IRKelonAc ac(kGpioUnused); + ac.setRaw(decode->value); + *result = ac.toCommon(); + break; + } +#endif // DECODE_KELON #if DECODE_KELVINATOR case decode_type_t::KELVINATOR: { IRKelvinatorAC ac(kGpioUnused); @@ -3780,16 +4028,9 @@ namespace IRAcUtils { case decode_type_t::LG: case decode_type_t::LG2: { IRLgAc ac(kGpioUnused); - ac.setRaw(decode->value); // Uses value instead of state. + ac.setRaw(decode->value, decode->decode_type); // Use value, not state. if (!ac.isValidLgAc()) return false; - switch (decode->decode_type) { - case decode_type_t::LG2: - ac.setModel(lg_ac_remote_model_t::AKB75215403); - break; - default: - ac.setModel(lg_ac_remote_model_t::GE6711AR2853M); - } - *result = ac.toCommon(); + *result = ac.toCommon(prev); break; } #endif // DECODE_LG @@ -3883,6 +4124,14 @@ namespace IRAcUtils { break; } #endif // DECODE_SANYO_AC +#if DECODE_SANYO_AC88 + case decode_type_t::SANYO_AC88: { + IRSanyoAc88 ac(kGpioUnused); + ac.setRaw(decode->state); + *result = ac.toCommon(); + break; + } +#endif // DECODE_SANYO_AC88 #if DECODE_SHARP_AC case decode_type_t::SHARP_AC: { IRSharpAc ac(kGpioUnused); @@ -3895,7 +4144,7 @@ namespace IRAcUtils { case decode_type_t::TCL112AC: { IRTcl112Ac ac(kGpioUnused); ac.setRaw(decode->state); - *result = ac.toCommon(); + *result = ac.toCommon(prev); break; } #endif // DECODE_TCL112AC @@ -3931,6 +4180,14 @@ namespace IRAcUtils { break; } #endif // DECODE_TROTEC +#if DECODE_TROTEC_3550 + case decode_type_t::TROTEC_3550: { + IRTrotec3550 ac(kGpioUnused); + ac.setRaw(decode->state); + *result = ac.toCommon(); + break; + } +#endif // DECODE_TROTEC_3550 #if DECODE_TRUMA case decode_type_t::TRUMA: { IRTrumaAc ac(kGpioUnused); diff --git a/lib/lib_basic/IRremoteESP8266/src/IRac.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.h similarity index 92% rename from lib/lib_basic/IRremoteESP8266/src/IRac.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.h index 9c62f9198..573e7ae7e 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRac.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRac.h @@ -22,6 +22,7 @@ #include "ir_Gree.h" #include "ir_Haier.h" #include "ir_Hitachi.h" +#include "ir_Kelon.h" #include "ir_Kelvinator.h" #include "ir_LG.h" #include "ir_Midea.h" @@ -254,6 +255,14 @@ void electra(IRElectraAc *ac, const bool filter, const int16_t sleep = -1, const int16_t clock = -1); #endif // SEND_HAIER_AC +#if SEND_HAIER_AC176 + void haier176(IRHaierAC176 *ac, + const bool on, const stdAc::opmode_t mode, + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, + const bool turbo, const bool filter, + const int16_t sleep = -1); +#endif // SEND_HAIER_AC176 #if SEND_HAIER_AC_YRW02 void haierYrwo2(IRHaierACYRW02 *ac, const bool on, const stdAc::opmode_t mode, @@ -289,6 +298,12 @@ void electra(IRElectraAc *ac, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv); #endif // SEND_HITACHI_AC424 +#if SEND_KELON + void kelon(IRKelonAc *ac, const bool togglePower, const stdAc::opmode_t mode, + const int8_t dryGrade, const float degrees, + const stdAc::fanspeed_t fan, const bool toggleSwing, + const bool superCool, const int16_t sleep); +#endif // SEND_KELON #if SEND_KELVINATOR void kelvinator(IRKelvinatorAC *ac, const bool on, const stdAc::opmode_t mode, @@ -300,7 +315,9 @@ void electra(IRElectraAc *ac, #if SEND_LG void lg(IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, - const float degrees, const stdAc::fanspeed_t fan); + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, const stdAc::swingv_t swingv_prev, + const stdAc::swingh_t swingh, const bool light); #endif // SEND_LG #if SEND_MIDEA void midea(IRMideaAC *ac, @@ -384,6 +401,14 @@ void electra(IRElectraAc *ac, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep = -1); #endif // SEND_SANYO_AC +#if SEND_SANYO_AC88 + void sanyo88(IRSanyoAc88 *ac, + const bool on, const stdAc::opmode_t mode, + const float degrees, const stdAc::fanspeed_t fan, + const stdAc::swingv_t swingv, const bool turbo, + const bool filter, + const int16_t sleep = -1, const int16_t clock = -1); +#endif // SEND_SANYO_AC88 #if SEND_SHARP_AC void sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, @@ -396,8 +421,8 @@ void electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, - const bool turbo, const bool light, const bool econo, - const bool filter); + const bool quiet, const bool turbo, const bool light, + const bool econo, const bool filter); #endif // SEND_TCL112AC #if SEND_TECHNIBEL_AC void technibel(IRTechnibelAc *ac, @@ -422,6 +447,12 @@ void electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep = -1); #endif // SEND_TROTEC +#if SEND_TROTEC_3550 + void trotec3550(IRTrotec3550 *ac, + const bool on, const stdAc::opmode_t mode, + const bool celsius, const float degrees, + const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv); +#endif // SEND_TROTEC_3550 #if SEND_TRUMA void truma(IRTrumaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, diff --git a/lib/lib_basic/IRremoteESP8266/src/IRrecv.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/IRrecv.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp index 36e0c0e83..9c7519cbd 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRrecv.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.cpp @@ -28,7 +28,11 @@ extern "C" { #ifndef USE_IRAM_ATTR #if defined(ESP8266) +#if defined(IRAM_ATTR) +#define USE_IRAM_ATTR IRAM_ATTR +#else // IRAM_ATTR #define USE_IRAM_ATTR ICACHE_RAM_ATTR +#endif // IRAM_ATTR #endif // ESP8266 #if defined(ESP32) #define USE_IRAM_ATTR IRAM_ATTR @@ -514,7 +518,9 @@ bool IRrecv::decode(decode_results *results, irparams_t *save, // interrupt. decode() is not stored in ICACHE_RAM. // Another better option would be to zero the entire irparams.rawbuf[] on // resume() but that is a much more expensive operation compare to this. - params.rawbuf[params.rawlen] = 0; + // However, don't do this if rawbuf is already full as we stomp over the heap. + // See: https://github.com/crankyoldgit/IRremoteESP8266/issues/1516 + if (!params.overflow) params.rawbuf[params.rawlen] = 0; bool resumed = false; // Flag indicating if we have resumed. @@ -770,6 +776,10 @@ bool IRrecv::decode(decode_results *results, irparams_t *save, DPRINTLN("Attempting Haier AC YR-W02 decode"); if (decodeHaierACYRW02(results, offset)) return true; #endif +#if DECODE_HAIER_AC176 + DPRINTLN("Attempting Haier AC 176 bit decode"); + if (decodeHaierAC176(results, offset)) return true; +#endif // DECODE_HAIER_AC176 #if DECODE_HITACHI_AC424 // HitachiAc424 should be checked before HitachiAC, HitachiAC2, // & HitachiAC184 @@ -889,6 +899,10 @@ bool IRrecv::decode(decode_results *results, irparams_t *save, DPRINTLN("Attempting Trotec decode"); if (decodeTrotec(results, offset)) return true; #endif // DECODE_TROTEC +#if DECODE_TROTEC_3550 + DPRINTLN("Attempting Trotec 3550 decode"); + if (decodeTrotec3550(results, offset)) return true; +#endif // DECODE_TROTEC_3550 #if DECODE_DAIKIN160 DPRINTLN("Attempting Daikin160 decode"); if (decodeDaikin160(results, offset)) return true; @@ -1006,6 +1020,22 @@ bool IRrecv::decode(decode_results *results, irparams_t *save, DPRINTLN("Attempting XMP decode"); if (decodeXmp(results, offset, kXmpBits)) return true; #endif // DECODE_XMP +#if DECODE_TEKNOPOINT + DPRINTLN("Attempting Teknopoint decode"); + if (decodeTeknopoint(results, offset)) return true; +#endif // DECODE_TEKNOPOINT +#if DECODE_KELON + DPRINTLN("Attempting Kelon decode"); + if (decodeKelon(results, offset)) return true; +#endif // DECODE_KELON +#if DECODE_SANYO_AC88 + DPRINTLN("Attempting SanyoAc88 decode"); + if (decodeSanyoAc88(results, offset)) return true; +#endif // DECODE_SANYO_AC88 +#if DECODE_BOSE + DPRINTLN("Attempting Bose decode"); + if (decodeBose(results, offset)) return true; +#endif // DECODE_BOSE // Typically new protocols are added above this line. } #if DECODE_HASH @@ -1866,4 +1896,11 @@ uint16_t IRrecv::matchManchesterData(volatile const uint16_t *data_ptr, *result_ptr = GETBITS64(data, 0, nbits); return offset; } + +#if UNIT_TEST +/// Unit test helper to get access to the params structure. +volatile irparams_t *IRrecv::_getParamsPtr(void) { + return ¶ms; +} +#endif // UNIT_TEST // End of IRrecv class ------------------- diff --git a/lib/lib_basic/IRremoteESP8266/src/IRrecv.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.h similarity index 95% rename from lib/lib_basic/IRremoteESP8266/src/IRrecv.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.h index b0b43aa9b..1a883d509 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRrecv.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRrecv.h @@ -58,10 +58,10 @@ const uint8_t kDefaultESP32Timer = 3; #if DECODE_AC // Hitachi AC is the current largest state size. const uint16_t kStateSizeMax = kHitachiAc2StateLength; -#else -// Just define something -const uint16_t kStateSizeMax = 0; -#endif +#else // DECODE_AC +// Just define something (a uint64_t) +const uint16_t kStateSizeMax = sizeof(uint64_t); +#endif // DECODE_AC // Types @@ -162,6 +162,9 @@ class IRrecv { #if DECODE_HASH uint16_t _unknown_threshold; #endif +#ifdef UNIT_TEST + volatile irparams_t *_getParamsPtr(void); +#endif // UNIT_TEST // These are called by decode uint8_t _validTolerance(const uint8_t percentage); void copyIrParams(volatile irparams_t *src, irparams_t *dst); @@ -305,6 +308,12 @@ class IRrecv { const uint16_t nbits = kSanyoAcBits, const bool strict = true); #endif // DECODE_SANYO_AC +#if DECODE_SANYO_AC88 + bool decodeSanyoAc88(decode_results *results, + uint16_t offset = kStartOffset, + const uint16_t nbits = kSanyoAc88Bits, + const bool strict = true); +#endif // DECODE_SANYO_AC88 #if DECODE_MITSUBISHI bool decodeMitsubishi(decode_results *results, uint16_t offset = kStartOffset, const uint16_t nbits = kMitsubishiBits, @@ -497,6 +506,11 @@ class IRrecv { const uint16_t nbits = kTrotecBits, const bool strict = true); #endif // DECODE_TROTEC +#if DECODE_TROTEC_3550 + bool decodeTrotec3550(decode_results *results, uint16_t offset = kStartOffset, + const uint16_t nbits = kTrotecBits, + const bool strict = true); +#endif // DECODE_TROTEC_3550 #if DECODE_MIDEA bool decodeMidea(decode_results *results, uint16_t offset = kStartOffset, const uint16_t nbits = kMideaBits, @@ -561,6 +575,12 @@ class IRrecv { const uint16_t nbits = kHaierACYRW02Bits, const bool strict = true); #endif +#if DECODE_HAIER_AC176 + bool decodeHaierAC176(decode_results *results, + uint16_t offset = kStartOffset, + const uint16_t nbits = kHaierAC176Bits, + const bool strict = true); +#endif // DECODE_HAIER_AC176 #if (DECODE_HITACHI_AC || DECODE_HITACHI_AC2 || DECODE_HITACHI_AC344) bool decodeHitachiAC(decode_results *results, uint16_t offset = kStartOffset, const uint16_t nbits = kHitachiAcBits, @@ -733,6 +753,19 @@ class IRrecv { bool decodeTruma(decode_results *results, uint16_t offset = kStartOffset, const uint16_t nbits = kTrumaBits, const bool strict = true); #endif // DECODE_TRUMA +#if DECODE_TEKNOPOINT + bool decodeTeknopoint(decode_results *results, uint16_t offset = kStartOffset, + const uint16_t nbits = kTeknopointBits, + const bool strict = true); +#endif // DECODE_TEKNOPOINT +#if DECODE_KELON + bool decodeKelon(decode_results *results, uint16_t offset = kStartOffset, + const uint16_t nbits = kKelonBits, const bool strict = true); +#endif // DECODE_KELON +#if DECODE_BOSE + bool decodeBose(decode_results *results, uint16_t offset = kStartOffset, + const uint16_t nbits = kBoseBits, const bool strict = true); +#endif // DECODE_BOSE }; #endif // IRRECV_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/IRremoteESP8266.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRremoteESP8266.h similarity index 95% rename from lib/lib_basic/IRremoteESP8266/src/IRremoteESP8266.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRremoteESP8266.h index 115e3865b..35b45d958 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRremoteESP8266.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRremoteESP8266.h @@ -37,6 +37,7 @@ * Vestel AC code by Erdem U. Altınyurt * Teco AC code by Fabien Valthier (hcoohb) * Mitsubishi 112 AC Code by kuchel77 + * Kelon AC code by Davide Depau (Depau) * * GPL license, all text above must be included in any redistribution ****************************************************/ @@ -52,7 +53,7 @@ #endif // UNIT_TEST // Library Version -#define _IRREMOTEESP8266_VERSION_ "2.7.18" +#define _IRREMOTEESP8266_VERSION_ "2.7.20" // Set the language & locale for the library. See the `locale` dir for options. #ifndef _IR_LOCALE_ @@ -208,6 +209,13 @@ #define SEND_SANYO_AC _IR_ENABLE_DEFAULT_ #endif // SEND_SANYO_AC +#ifndef DECODE_SANYO_AC88 +#define DECODE_SANYO_AC88 _IR_ENABLE_DEFAULT_ +#endif // DECODE_SANYO_AC88 +#ifndef SEND_SANYO_AC88 +#define SEND_SANYO_AC88 _IR_ENABLE_DEFAULT_ +#endif // SEND_SANYO_AC88 + #ifndef DECODE_MITSUBISHI #define DECODE_MITSUBISHI _IR_ENABLE_DEFAULT_ #endif // DECODE_MITSUBISHI @@ -348,6 +356,13 @@ #define SEND_TROTEC _IR_ENABLE_DEFAULT_ #endif // SEND_TROTEC +#ifndef DECODE_TROTEC_3550 +#define DECODE_TROTEC_3550 _IR_ENABLE_DEFAULT_ +#endif // DECODE_TROTEC_3550 +#ifndef SEND_TROTEC_3550 +#define SEND_TROTEC_3550 _IR_ENABLE_DEFAULT_ +#endif // SEND_TROTEC_3550 + #ifndef DECODE_NIKAI #define DECODE_NIKAI _IR_ENABLE_DEFAULT_ #endif // DECODE_NIKAI @@ -747,6 +762,34 @@ #define SEND_TRUMA _IR_ENABLE_DEFAULT_ #endif // SEND_TRUMA +#ifndef DECODE_HAIER_AC176 +#define DECODE_HAIER_AC176 _IR_ENABLE_DEFAULT_ +#endif // DECODE_HAIER_AC176 +#ifndef SEND_HAIER_AC176 +#define SEND_HAIER_AC176 _IR_ENABLE_DEFAULT_ +#endif // SEND_HAIER_AC176 + +#ifndef DECODE_TEKNOPOINT +#define DECODE_TEKNOPOINT _IR_ENABLE_DEFAULT_ +#endif // DECODE_TEKNOPOINT +#ifndef SEND_TEKNOPOINT +#define SEND_TEKNOPOINT _IR_ENABLE_DEFAULT_ +#endif // SEND_TEKNOPOINT + +#ifndef DECODE_KELON +#define DECODE_KELON _IR_ENABLE_DEFAULT_ +#endif // DECODE_KELON +#ifndef SEND_KELON +#define SEND_KELON _IR_ENABLE_DEFAULT_ +#endif // SEND_KELON + +#ifndef DECODE_BOSE +#define DECODE_BOSE _IR_ENABLE_DEFAULT_ +#endif // DECODE_BOSE +#ifndef SEND_BOSE +#define SEND_BOSE _IR_ENABLE_DEFAULT_ +#endif // SEND_BOSE + #if (DECODE_ARGO || DECODE_DAIKIN || DECODE_FUJITSU_AC || DECODE_GREE || \ DECODE_KELVINATOR || DECODE_MITSUBISHI_AC || DECODE_TOSHIBA_AC || \ DECODE_TROTEC || DECODE_HAIER_AC || DECODE_HITACHI_AC || \ @@ -759,7 +802,10 @@ DECODE_AMCOR || DECODE_DAIKIN152 || DECODE_MITSUBISHI136 || \ DECODE_MITSUBISHI112 || DECODE_HITACHI_AC424 || DECODE_HITACHI_AC3 || \ DECODE_HITACHI_AC344 || DECODE_CORONA_AC || DECODE_SANYO_AC || \ - DECODE_VOLTAS || DECODE_MIRAGE) + DECODE_VOLTAS || DECODE_MIRAGE || DECODE_HAIER_AC176 || \ + DECODE_TEKNOPOINT || DECODE_KELON || DECODE_TROTEC_3550 || \ + DECODE_SANYO_AC88 || \ + false) // Add any DECODE to the above if it uses result->state (see kStateSizeMax) // you might also want to add the protocol to hasACState function #define DECODE_AC true // We need some common infrastructure for decoding A/Cs. @@ -899,8 +945,14 @@ enum decode_type_t { ECOCLIM, XMP, TRUMA, // 100 + HAIER_AC176, + TEKNOPOINT, + KELON, + TROTEC_3550, + SANYO_AC88, // 105 + BOSE, // Add new entries before this one, and update it to point to the last entry. - kLastDecodeType = TRUMA, + kLastDecodeType = BOSE, }; // Message lengths & required repeat values @@ -992,6 +1044,9 @@ const uint16_t kHaierAcDefaultRepeat = kNoRepeat; const uint16_t kHaierACYRW02StateLength = 14; const uint16_t kHaierACYRW02Bits = kHaierACYRW02StateLength * 8; const uint16_t kHaierAcYrw02DefaultRepeat = kNoRepeat; +const uint16_t kHaierAC176StateLength = 22; +const uint16_t kHaierAC176Bits = kHaierAC176StateLength * 8; +const uint16_t kHaierAc176DefaultRepeat = kNoRepeat; const uint16_t kHitachiAcStateLength = 28; const uint16_t kHitachiAcBits = kHitachiAcStateLength * 8; const uint16_t kHitachiAcDefaultRepeat = kNoRepeat; @@ -1010,6 +1065,7 @@ const uint16_t kHitachiAc424Bits = kHitachiAc424StateLength * 8; const uint16_t kInaxBits = 24; const uint16_t kInaxMinRepeat = kSingleRepeat; const uint16_t kJvcBits = 16; +const uint16_t kKelonBits = 48; const uint16_t kKelvinatorStateLength = 16; const uint16_t kKelvinatorBits = kKelvinatorStateLength * 8; const uint16_t kKelvinatorDefaultRepeat = kNoRepeat; @@ -1082,6 +1138,9 @@ const uint16_t kSamsungAcExtendedBits = kSamsungAcExtendedStateLength * 8; const uint16_t kSamsungAcDefaultRepeat = kNoRepeat; const uint16_t kSanyoAcStateLength = 9; const uint16_t kSanyoAcBits = kSanyoAcStateLength * 8; +const uint16_t kSanyoAc88StateLength = 11; +const uint16_t kSanyoAc88Bits = kSanyoAc88StateLength * 8; +const uint16_t kSanyoAc88MinRepeat = 2; const uint16_t kSanyoSA8650BBits = 12; const uint16_t kSanyoLC7461AddressBits = 13; const uint16_t kSanyoLC7461CommandBits = 8; @@ -1107,6 +1166,8 @@ const uint16_t kTcl112AcBits = kTcl112AcStateLength * 8; const uint16_t kTcl112AcDefaultRepeat = kNoRepeat; const uint16_t kTecoBits = 35; const uint16_t kTecoDefaultRepeat = kNoRepeat; +const uint16_t kTeknopointStateLength = 14; +const uint16_t kTeknopointBits = kTeknopointStateLength * 8; const uint16_t kToshibaACStateLength = 9; const uint16_t kToshibaACBits = kToshibaACStateLength * 8; const uint16_t kToshibaACMinRepeat = kSingleRepeat; @@ -1133,6 +1194,7 @@ const uint16_t kVoltasStateLength = 10; const uint16_t kMilesTag2ShotBits = 14; const uint16_t kMilesTag2MsgBits = 24; const uint16_t kMilesMinRepeat = 0; +const uint16_t kBoseBits = 16; // Legacy defines. (Deprecated) diff --git a/lib/lib_basic/IRremoteESP8266/src/IRsend.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.cpp similarity index 97% rename from lib/lib_basic/IRremoteESP8266/src/IRsend.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.cpp index c32eedea4..4814bd431 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRsend.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.cpp @@ -580,6 +580,8 @@ uint16_t IRsend::minRepeats(const decode_type_t protocol) { return kDishMinRepeat; case EPSON: return kEpsonMinRepeat; + case SANYO_AC88: + return kSanyoAc88MinRepeat; case SONY: return kSonyMinRepeat; case SONY_38K: @@ -610,6 +612,7 @@ uint16_t IRsend::defaultBits(const decode_type_t protocol) { case DENON: case SHARP: return 15; + case BOSE: case DISH: case GICABLE: case JVC: @@ -658,6 +661,7 @@ uint16_t IRsend::defaultBits(const decode_type_t protocol) { case SANYO_LC7461: return kSanyoLC7461Bits; // 42 case GOODWEATHER: + case KELON: case MIDEA: case PANASONIC: return 48; @@ -700,6 +704,8 @@ uint16_t IRsend::defaultBits(const decode_type_t protocol) { return kHaierACBits; case HAIER_AC_YRW02: return kHaierACYRW02Bits; + case HAIER_AC176: + return kHaierAC176Bits; case HITACHI_AC: return kHitachiAcBits; case HITACHI_AC1: @@ -736,13 +742,18 @@ uint16_t IRsend::defaultBits(const decode_type_t protocol) { return kSamsungAcBits; case SANYO_AC: return kSanyoAcBits; + case SANYO_AC88: + return kSanyoAc88Bits; case SHARP_AC: return kSharpAcBits; case TCL112AC: return kTcl112AcBits; + case TEKNOPOINT: + return kTeknopointBits; case TOSHIBA_AC: return kToshibaACBits; case TROTEC: + case TROTEC_3550: return kTrotecBits; case VOLTAS: return kVoltasBits; @@ -780,6 +791,11 @@ bool IRsend::send(const decode_type_t type, const uint64_t data, sendAiwaRCT501(data, nbits, min_repeat); break; #endif +#if SEND_BOSE + case BOSE: + sendBose(data, nbits, min_repeat); + break; +#endif // SEND_BOSE #if SEND_CARRIER_AC case CARRIER_AC: sendCarrierAC(data, nbits, min_repeat); @@ -865,6 +881,11 @@ bool IRsend::send(const decode_type_t type, const uint64_t data, sendJVC(data, nbits, min_repeat); break; #endif +#if SEND_KELON + case KELON: + sendKelon(data, nbits, min_repeat); + break; +#endif // SEND_KELON #if SEND_LASERTAG case LASERTAG: sendLasertag(data, nbits, min_repeat); @@ -1143,6 +1164,11 @@ bool IRsend::send(const decode_type_t type, const uint8_t *state, sendHaierACYRW02(state, nbytes); break; #endif // SEND_HAIER_AC_YRW02 +#if SEND_HAIER_AC176 + case HAIER_AC176: + sendHaierAC176(state, nbytes); + break; +#endif // SEND_HAIER_AC176 #if SEND_HITACHI_AC case HITACHI_AC: sendHitachiAC(state, nbytes); @@ -1231,6 +1257,11 @@ bool IRsend::send(const decode_type_t type, const uint8_t *state, sendSanyoAc(state, nbytes); break; #endif // SEND_SANYO_AC +#if SEND_SANYO_AC88 + case SANYO_AC88: + sendSanyoAc88(state, nbytes); + break; +#endif // SEND_SANYO_AC88 #if SEND_SHARP_AC case SHARP_AC: sendSharpAc(state, nbytes); @@ -1241,6 +1272,11 @@ bool IRsend::send(const decode_type_t type, const uint8_t *state, sendTcl112Ac(state, nbytes); break; #endif // SEND_TCL112AC +#if SEND_TEKNOPOINT + case TEKNOPOINT: + sendTeknopoint(state, nbytes); + break; +#endif // SEND_TEKNOPOINT #if SEND_TOSHIBA_AC case TOSHIBA_AC: sendToshibaAC(state, nbytes); @@ -1251,6 +1287,11 @@ bool IRsend::send(const decode_type_t type, const uint8_t *state, sendTrotec(state, nbytes); break; #endif // SEND_TROTEC +#if SEND_TROTEC_3550 + case TROTEC_3550: + sendTrotec3550(state, nbytes); + break; +#endif // SEND_TROTEC_3550 #if SEND_WHIRLPOOL_AC case WHIRLPOOL_AC: sendWhirlpoolAC(state, nbytes); diff --git a/lib/lib_basic/IRremoteESP8266/src/IRsend.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.h similarity index 94% rename from lib/lib_basic/IRremoteESP8266/src/IRsend.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.h index 99b103f8f..c20fc64bc 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRsend.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRsend.h @@ -176,6 +176,8 @@ enum whirlpool_ac_remote_model_t { enum lg_ac_remote_model_t { GE6711AR2853M = 1, // (1) LG 28-bit Protocol (default) AKB75215403, // (2) LG2 28-bit Protocol + AKB74955603, // (3) LG2 28-bit Protocol variant + AKB73757604, // (4) LG2 Variant of AKB74955603 }; @@ -317,6 +319,11 @@ class IRsend { const uint16_t nbytes = kSanyoAcStateLength, const uint16_t repeat = kNoRepeat); #endif // SEND_SANYO_AC +#if SEND_SANYO_AC88 + void sendSanyoAc88(const uint8_t *data, + const uint16_t nbytes = kSanyoAc88StateLength, + const uint16_t repeat = kSanyoAc88MinRepeat); +#endif // SEND_SANYO_AC88 #if SEND_DISH // sendDISH() should typically be called with repeat=3 as DISH devices // expect the code to be sent at least 4 times. (code + 3 repeats = 4 codes) @@ -483,7 +490,12 @@ class IRsend { void sendTrotec(const unsigned char data[], const uint16_t nbytes = kTrotecStateLength, const uint16_t repeat = kTrotecDefaultRepeat); -#endif +#endif // SEND_TROTEC +#if SEND_TROTEC_3550 + void sendTrotec3550(const unsigned char data[], + const uint16_t nbytes = kTrotecStateLength, + const uint16_t repeat = kTrotecDefaultRepeat); +#endif // SEND_TROTEC_3550 #if SEND_NIKAI void sendNikai(uint64_t data, uint16_t nbits = kNikaiBits, uint16_t repeat = kNoRepeat); @@ -522,16 +534,21 @@ class IRsend { void sendCarrierAC64(uint64_t data, uint16_t nbits = kCarrierAc64Bits, uint16_t repeat = kCarrierAc64MinRepeat); #endif -#if (SEND_HAIER_AC || SEND_HAIER_AC_YRW02) +#if (SEND_HAIER_AC || SEND_HAIER_AC_YRW02 || SEND_HAIER_AC176) void sendHaierAC(const unsigned char data[], const uint16_t nbytes = kHaierACStateLength, const uint16_t repeat = kHaierAcDefaultRepeat); -#endif +#endif // (SEND_HAIER_AC || SEND_HAIER_AC_YRW02 || SEND_HAIER_AC176) #if SEND_HAIER_AC_YRW02 void sendHaierACYRW02(const unsigned char data[], const uint16_t nbytes = kHaierACYRW02StateLength, const uint16_t repeat = kHaierAcYrw02DefaultRepeat); -#endif +#endif // SEND_HAIER_AC_YRW02 +#if SEND_HAIER_AC176 + void sendHaierAC176(const unsigned char data[], + const uint16_t nbytes = kHaierAC176StateLength, + const uint16_t repeat = kHaierAc176DefaultRepeat); +#endif // SEND_HAIER_AC176 #if SEND_HITACHI_AC void sendHitachiAC(const unsigned char data[], const uint16_t nbytes = kHitachiAcStateLength, @@ -669,8 +686,8 @@ class IRsend { #endif // SEND_ZEPEAL #if SEND_VOLTAS void sendVoltas(const unsigned char data[], - const uint16_t nbytes = kVoltasStateLength, - const uint16_t repeat = kNoRepeat); + const uint16_t nbytes = kVoltasStateLength, + const uint16_t repeat = kNoRepeat); #endif // SEND_VOLTAS #if SEND_METZ void sendMetz(const uint64_t data, @@ -707,6 +724,19 @@ class IRsend { void sendTruma(const uint64_t data, const uint16_t nbits = kTrumaBits, const uint16_t repeat = kNoRepeat); #endif // SEND_TRUMA +#if SEND_TEKNOPOINT + void sendTeknopoint(const unsigned char data[], + const uint16_t nbytes = kTeknopointStateLength, + const uint16_t repeat = kNoRepeat); +#endif // SEND_TEKNOPOINT +#if SEND_KELON + void sendKelon(const uint64_t data, const uint16_t nbits = kKelonBits, + const uint16_t repeat = kNoRepeat); +#endif // SEND_KELON +#if SEND_BOSE + void sendBose(const uint64_t data, const uint16_t nbits = kBoseBits, + const uint16_t repeat = kNoRepeat); +#endif // SEND_BOSE protected: #ifdef UNIT_TEST diff --git a/lib/lib_basic/IRremoteESP8266/src/IRtext.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.cpp similarity index 96% rename from lib/lib_basic/IRremoteESP8266/src/IRtext.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.cpp index 722074d67..a7bd7de29 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRtext.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.cpp @@ -39,8 +39,9 @@ const PROGMEM char* kMouldStr = D_STR_MOULD; ///< "Mould" const PROGMEM char* kCleanStr = D_STR_CLEAN; ///< "Clean" const PROGMEM char* kPurifyStr = D_STR_PURIFY; ///< "Purify" const PROGMEM char* kTimerStr = D_STR_TIMER; ///< "Timer" -const PROGMEM char* kOnTimerStr = D_STR_ONTIMER; ///< "OnTimer" -const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER; ///< "OffTimer" +const PROGMEM char* kOnTimerStr = D_STR_ONTIMER; ///< "On Timer" +const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER; ///< "Off Timer" +const PROGMEM char* kTimerModeStr = D_STR_TIMERMODE; ///< "Timer Mode" const PROGMEM char* kClockStr = D_STR_CLOCK; ///< "Clock" const PROGMEM char* kCommandStr = D_STR_COMMAND; ///< "Command" const PROGMEM char* kXFanStr = D_STR_XFAN; ///< "XFan" @@ -99,6 +100,7 @@ const PROGMEM char* k6thSenseStr = D_STR_6THSENSE; ///< "6th Sense" const PROGMEM char* kTypeStr = D_STR_TYPE; ///< "Type" const PROGMEM char* kSpecialStr = D_STR_SPECIAL; ///< "Special" const PROGMEM char* kIdStr = D_STR_ID; ///< "Id" / Device Identifier +const PROGMEM char* kVaneStr = D_STR_VANE; ///< "Vane" const PROGMEM char* kAutoStr = D_STR_AUTO; ///< "Auto" const PROGMEM char* kAutomaticStr = D_STR_AUTOMATIC; ///< "Automatic" @@ -285,5 +287,11 @@ const PROGMEM char *kAllProtocolNamesStr = D_STR_ECOCLIM "\x0" D_STR_XMP "\x0" D_STR_TRUMA "\x0" + D_STR_HAIER_AC176 "\x0" + D_STR_TEKNOPOINT "\x0" + D_STR_KELON "\x0" + D_STR_TROTEC_3550 "\x0" + D_STR_SANYO_AC88 "\x0" + D_STR_BOSE "\x0" ///< New protocol strings should be added just above this line. "\x0"; ///< This string requires double null termination. diff --git a/lib/lib_basic/IRremoteESP8266/src/IRtext.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.h similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/IRtext.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.h index d991276cd..55840688d 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRtext.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtext.h @@ -146,6 +146,7 @@ extern const char* kTempDownStr; extern const char* kTempStr; extern const char* kTempUpStr; extern const char* kThreeLetterDayOfWeekStr; +extern const char* kTimerModeStr; extern const char* kTimerStr; extern const char* kToggleStr; extern const char* kTopStr; @@ -156,6 +157,7 @@ extern const char* kTypeStr; extern const char* kUnknownStr; extern const char* kUpperStr; extern const char* kUpStr; +extern const char* kVaneStr; extern const char* kWallStr; extern const char* kWeeklyTimerStr; extern const char* kWideStr; diff --git a/lib/lib_basic/IRremoteESP8266/src/IRtimer.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtimer.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/IRtimer.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtimer.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/IRtimer.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtimer.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/IRtimer.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRtimer.h diff --git a/lib/lib_basic/IRremoteESP8266/src/IRutils.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.cpp similarity index 92% rename from lib/lib_basic/IRremoteESP8266/src/IRutils.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.cpp index 3ec5303e6..f9892d2a4 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRutils.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.cpp @@ -67,6 +67,18 @@ String uint64ToString(uint64_t input, uint8_t base) { return result; } +/// Convert a int64_t (signed long long) to a string. +/// Arduino String/toInt/Serial.print() can't handle printing 64 bit values. +/// @param[in] input The value to print +/// @param[in] base The output base. +/// @returns A String representation of the integer. +String int64ToString(int64_t input, uint8_t base) { + if (input < 0) { + return "-" + uint64ToString(-input, base); + } + return uint64ToString(input, base); +} + #ifdef ARDUINO /// Print a uint64_t/unsigned long long to the Serial port /// Serial.print() can't handle printing long longs. (uint64_t) @@ -104,6 +116,7 @@ decode_type_t strToDecodeType(const char * const str) { /// @return A String containing the protocol name. kUnknownStr if no match. String typeToString(const decode_type_t protocol, const bool isRepeat) { String result = ""; + result.reserve(30); // Size of longest protocol name + " (Repeat)" const char *ptr = kAllProtocolNamesStr; if (protocol > kLastDecodeType || protocol == decode_type_t::UNKNOWN) { result = kUnknownStr; @@ -145,6 +158,7 @@ bool hasACState(const decode_type_t protocol) { case GREE: case HAIER_AC: case HAIER_AC_YRW02: + case HAIER_AC176: case HITACHI_AC: case HITACHI_AC1: case HITACHI_AC2: @@ -163,10 +177,13 @@ bool hasACState(const decode_type_t protocol) { case PANASONIC_AC: case SAMSUNG_AC: case SANYO_AC: + case SANYO_AC88: case SHARP_AC: case TCL112AC: + case TEKNOPOINT: case TOSHIBA_AC: case TROTEC: + case TROTEC_3550: case VOLTAS: case WHIRLPOOL_AC: return true; @@ -195,12 +212,25 @@ uint16_t getCorrectedRawLength(const decode_results * const results) { /// @return A String containing the code-ified result. String resultToSourceCode(const decode_results * const results) { String output = ""; + const uint16_t length = getCorrectedRawLength(results); + const bool hasState = hasACState(results->decode_type); // Reserve some space for the string to reduce heap fragmentation. - output.reserve(1536); // 1.5KB should cover most cases. + // "uint16_t rawData[9999] = {}; // LONGEST_PROTOCOL\n" = ~55 chars. + // "NNNN, " = ~7 chars on average per raw entry + // Protocols with a `state`: + // "uint8_t state[NN] = {};\n" = ~25 chars + // "0xNN, " = 6 chars per byte. + // Protocols without a `state`: + // " DEADBEEFDEADBEEF\n" + // "uint32_t address = 0xDEADBEEF;\n" + // "uint32_t command = 0xDEADBEEF;\n" + // "uint64_t data = 0xDEADBEEFDEADBEEF;" = ~116 chars max. + output.reserve(55 + (length * 7) + hasState ? 25 + (results->bits / 8) * 6 + : 116); // Start declaration output += F("uint16_t "); // variable type output += F("rawData["); // array name - output += uint64ToString(getCorrectedRawLength(results), 10); + output += uint64ToString(length, 10); // array size output += F("] = {"); // Start declaration @@ -228,13 +258,13 @@ String resultToSourceCode(const decode_results * const results) { output += F(" // "); output += typeToString(results->decode_type, results->repeat); // Only display the value if the decode type doesn't have an A/C state. - if (!hasACState(results->decode_type)) + if (!hasState) output += ' ' + uint64ToString(results->value, 16); output += F("\n"); // Now dump "known" codes if (results->decode_type != UNKNOWN) { - if (hasACState(results->decode_type)) { + if (hasState) { #if DECODE_AC uint16_t nbytes = results->bits / 8; output += F("uint8_t state["); @@ -278,7 +308,9 @@ String resultToTimingInfo(const decode_results * const results) { String output = ""; String value = ""; // Reserve some space for the string to reduce heap fragmentation. - output.reserve(2048); // 2KB should cover most cases. + // "Raw Timing[NNNN]:\n\n" = 19 chars + // " +123456, " / "-123456, " = ~12 chars on avg per raw entry. + output.reserve(19 + 12 * results->rawlen); // Should be less than this. value.reserve(6); // Max value should be 2^17 = 131072 output += F("Raw Timing["); output += uint64ToString(results->rawlen - 1, 10); @@ -327,7 +359,9 @@ String resultToHexidecimal(const decode_results * const result) { String resultToHumanReadableBasic(const decode_results * const results) { String output = ""; // Reserve some space for the string to reduce heap fragmentation. - output.reserve(2 * kStateSizeMax + 50); // Should cover most cases. + // "Protocol : LONGEST_PROTOCOL_NAME (Repeat)\n" + // "Code : 0x (NNNN Bits)\n" = 70 chars + output.reserve(2 * kStateSizeMax + 70); // Should cover most cases. // Show Encoding standard output += kProtocolStr; output += F(" : "); @@ -465,6 +499,8 @@ namespace irutils { String addLabeledString(const String value, const String label, const bool precomma) { String result = ""; + // ", " + ": " = 4 chars + result.reserve(4 + value.length() + label.length()); if (precomma) result += kCommaSpaceStr; result += label; result += kColonSpaceStr; @@ -494,6 +530,19 @@ namespace irutils { return addLabeledString(uint64ToString(value), label, precomma); } + /// Create a String with a colon separated labeled Integer suitable for + /// Humans. + /// e.g. "Foo: 23" + /// @param[in] value The value to come after the label. + /// @param[in] label The label to precede the value. + /// @param[in] precomma Should the output string start with ", " or not? + /// @return The resulting String. + String addSignedIntToString(const int16_t value, const String label, + const bool precomma) { + return addLabeledString(int64ToString(value), label, precomma); + } + + /// Generate the model string for a given Protocol/Model pair. /// @param[in] protocol The IR protocol. /// @param[in] model The model number for that protocol. @@ -531,7 +580,9 @@ namespace irutils { case decode_type_t::LG2: switch (model) { case lg_ac_remote_model_t::GE6711AR2853M: return F("GE6711AR2853M"); - case lg_ac_remote_model_t::AKB75215403: return F("AKB75215403"); + case lg_ac_remote_model_t::AKB75215403: return F("AKB75215403"); + case lg_ac_remote_model_t::AKB74955603: return F("AKB74955603"); + case lg_ac_remote_model_t::AKB73757604: return F("AKB73757604"); default: return kUnknownStr; } break; @@ -579,7 +630,10 @@ namespace irutils { /// @return The resulting String. String addModelToString(const decode_type_t protocol, const int16_t model, const bool precomma) { - String result = addIntToString(model, kModelStr, precomma); + String result = ""; + // ", Model: NNN (BlahBlahEtc)" = ~40 chars for longest model name. + result.reserve(40); + result += addIntToString(model, kModelStr, precomma); result += kSpaceLBraceStr; result += modelToStr(protocol, model); return result + ')'; @@ -608,7 +662,9 @@ namespace irutils { /// @return The resulting String. String addTempFloatToString(const float degrees, const bool celsius, const bool precomma) { - String result = addIntToString(degrees, kTempStr, precomma); + String result = ""; + result.reserve(14); // Assuming ", Temp: XXX.5F" is the largest. + result += addIntToString(degrees, kTempStr, precomma); // Is it a half degree? if (((uint16_t)(2 * degrees)) & 1) result += F(".5"); result += celsius ? 'C' : 'F'; @@ -627,7 +683,9 @@ namespace irutils { String addModeToString(const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan) { - String result = addIntToString(mode, kModeStr); + String result = ""; + result.reserve(22); // ", Mode: NNN (UNKNOWN)" + result += addIntToString(mode, kModeStr); result += kSpaceLBraceStr; if (mode == automatic) result += kAutoStr; else if (mode == cool) result += kCoolStr; @@ -649,7 +707,9 @@ namespace irutils { /// @return The resulting String. String addDayToString(const uint8_t day_of_week, const int8_t offset, const bool precomma) { - String result = addIntToString(day_of_week, kDayStr, precomma); + String result = ""; + result.reserve(19); // ", Day: N (UNKNOWN)" + result += addIntToString(day_of_week, kDayStr, precomma); result += kSpaceLBraceStr; if ((uint8_t)(day_of_week + offset) < 7) #if UNIT_TEST @@ -678,7 +738,9 @@ namespace irutils { const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum) { - String result = addIntToString(speed, kFanStr); + String result = ""; + result.reserve(21); // ", Fan: NNN (UNKNOWN)" + result += addIntToString(speed, kFanStr); result += kSpaceLBraceStr; if (speed == high) result += kHighStr; else if (speed == low) result += kLowStr; @@ -713,7 +775,9 @@ namespace irutils { const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide) { - String result = addIntToString(position, kSwingHStr); + String result = ""; + result.reserve(30); // ", Swing(H): NNN (Left Right)" + result += addIntToString(position, kSwingHStr); result += kSpaceLBraceStr; if (position == automatic) { result += kAutoStr; @@ -771,7 +835,9 @@ namespace irutils { const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate) { - String result = addIntToString(position, kSwingVStr); + String result = ""; + result.reserve(31); // ", Swing(V): NNN (Upper Middle)" + result += addIntToString(position, kSwingVStr); result += kSpaceLBraceStr; if (position == automatic) { result += kAutoStr; @@ -853,6 +919,7 @@ namespace irutils { uint8_t seconds = totalseconds % 60; String result = ""; + result.reserve(42); // "99 Days, 23 Hours, 59 Minutes, 59 Seconds" if (days) result += uint64ToString(days) + ' ' + String((days > 1) ? kDaysStr : kDayStr); diff --git a/lib/lib_basic/IRremoteESP8266/src/IRutils.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.h similarity index 97% rename from lib/lib_basic/IRremoteESP8266/src/IRutils.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.h index 8ce04b814..fdda6d7ae 100644 --- a/lib/lib_basic/IRremoteESP8266/src/IRutils.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/IRutils.h @@ -20,6 +20,7 @@ const uint8_t kHighNibble = 4; const uint8_t kModeBitsSize = 3; uint64_t reverseBits(uint64_t input, uint16_t nbits); String uint64ToString(uint64_t input, uint8_t base = 10); +String int64ToString(int64_t input, uint8_t base = 10); String typeToString(const decode_type_t protocol, const bool isRepeat = false); void serialPrintUint64(uint64_t input, uint8_t base = 10); @@ -49,6 +50,8 @@ namespace irutils { const bool precomma = true); String addIntToString(const uint16_t value, const String label, const bool precomma = true); + String addSignedIntToString(const int16_t value, const String label, + const bool precomma = true); String modelToStr(const decode_type_t protocol, const int16_t model); String addModelToString(const decode_type_t protocol, const int16_t model, const bool precomma = true); diff --git a/lib/lib_basic/IRremoteESP8266/src/i18n.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/i18n.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/i18n.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/i18n.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Airwell.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Airwell.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Airwell.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Airwell.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Airwell.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Airwell.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Airwell.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Airwell.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Aiwa.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Aiwa.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Aiwa.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Aiwa.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Amcor.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Amcor.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Amcor.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Amcor.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Amcor.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Amcor.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Amcor.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Amcor.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Argo.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Argo.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Argo.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Argo.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Argo.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Argo.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Argo.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Argo.h diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Bose.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Bose.cpp new file mode 100644 index 000000000..a57d125b3 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Bose.cpp @@ -0,0 +1,69 @@ +// Copyright 2021 parsnip42 +// Copyright 2021 David Conran + +/// @file +/// @brief Support for Bose protocols. +/// @note Currently only tested against Bose TV Speaker. +/// @see https://github.com/crankyoldgit/IRremoteESP8266/pull/1579 + +// Supports: +// Brand: Bose, Model: Bose TV Speaker + +#include "IRrecv.h" +#include "IRsend.h" + +const uint16_t kBoseHdrMark = 1100; +const uint16_t kBoseHdrSpace = 1350; +const uint16_t kBoseBitMark = 555; +const uint16_t kBoseOneSpace = 1435; +const uint16_t kBoseZeroSpace = 500; +const uint32_t kBoseGap = kDefaultMessageGap; +const uint16_t kBoseFreq = 38; + +#if SEND_BOSE +/// Send a Bose formatted message. +/// Status: STABLE / Known working. +/// @param[in] data The message to be sent. +/// @param[in] nbits The number of bits of message to be sent. +/// @param[in] repeat The number of times the command is to be repeated. +void IRsend::sendBose(const uint64_t data, const uint16_t nbits, + const uint16_t repeat) { + sendGeneric(kBoseHdrMark, kBoseHdrSpace, + kBoseBitMark, kBoseOneSpace, + kBoseBitMark, kBoseZeroSpace, + kBoseBitMark, kBoseGap, + data, nbits, kBoseFreq, false, + repeat, kDutyDefault); +} +#endif // SEND_BOSE + +#if DECODE_BOSE +/// Decode the supplied Bose formatted message. +/// Status: STABLE / Known working. +/// @param[in,out] results Ptr to the data to decode & where to store the result +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +bool IRrecv::decodeBose(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (strict && nbits != kBoseBits) return false; + + if (!matchGeneric(results->rawbuf + offset, &(results->value), + results->rawlen - offset, nbits, + kBoseHdrMark, kBoseHdrSpace, + kBoseBitMark, kBoseOneSpace, + kBoseBitMark, kBoseZeroSpace, + kBoseBitMark, kBoseGap, true, + kUseDefTol, 0, false)) { + return false; + } + + // + results->decode_type = decode_type_t::BOSE; + results->bits = nbits; + results->address = 0; + results->command = 0; + return true; +} +#endif // DECODE_BOSE diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Carrier.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Carrier.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Carrier.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Carrier.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Carrier.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Carrier.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Carrier.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Carrier.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Coolix.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Coolix.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Coolix.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Coolix.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Coolix.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Coolix.h similarity index 97% rename from lib/lib_basic/IRremoteESP8266/src/ir_Coolix.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Coolix.h index d9d9fcd60..42a2528d7 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Coolix.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Coolix.h @@ -17,6 +17,10 @@ // Brand: Airwell, Model: RC08B remote // Brand: Kastron, Model: RG57A7/BGEF Inverter remote // Brand: Kaysun, Model: Casual CF A/C +// Brand: Toshiba, Model: RAS-M10YKV-E A/C +// Brand: Toshiba, Model: RAS-M13YKV-E A/C +// Brand: Toshiba, Model: RAS-4M27YAV-E A/C +// Brand: Toshiba, Model: WH-E1YE remote #ifndef IR_COOLIX_H_ #define IR_COOLIX_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Corona.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Corona.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Corona.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Corona.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Corona.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Corona.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Corona.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Corona.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Daikin.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.cpp similarity index 93% rename from lib/lib_basic/IRremoteESP8266/src/ir_Daikin.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.cpp index d3a6bb285..ea11daf78 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Daikin.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.cpp @@ -1,6 +1,6 @@ // Copyright 2016 sillyfrog // Copyright 2017 sillyfrog, crankyoldgit -// Copyright 2018-2020 crankyoldgit +// Copyright 2018-2021 crankyoldgit // Copyright 2019 pasna (IRDaikin160 class / Daikin176 class) /// @file @@ -16,6 +16,7 @@ /// @see Daikin160 https://github.com/crankyoldgit/IRremoteESP8266/issues/731 /// @see Daikin2 https://docs.google.com/spreadsheets/d/1f8EGfIbBUo2B-CzUFdrgKQprWakoYNKM80IKZN4KXQE/edit#gid=236366525&range=B25:D32 /// @see Daikin2 https://github.com/crankyoldgit/IRremoteESP8266/issues/582 +/// @see Daikin2 https://github.com/crankyoldgit/IRremoteESP8266/issues/1535 /// @see Daikin2 https://www.daikin.co.nz/sites/default/files/daikin-split-system-US7-FTXZ25-50NV1B.pdf /// @see Daikin216 https://github.com/crankyoldgit/IRremoteESP8266/issues/689 /// @see Daikin216 https://github.com/danny-source/Arduino_DY_IRDaikin @@ -795,15 +796,11 @@ void IRDaikin2::setPower(const bool on) { /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getPower(void) const { - return _.Power && !_.Power2; -} +bool IRDaikin2::getPower(void) const { return _.Power && !_.Power2; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin2::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin2::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] desired_mode The desired operating mode. @@ -819,6 +816,7 @@ void IRDaikin2::setMode(const uint8_t desired_mode) { _.Mode = mode; // Redo the temp setting as Cool mode has a different min temp. if (mode == kDaikinCool) setTemp(getTemp()); + setHumidity(getHumidity()); // Make sure the humidity is okay for this mode. } /// Set the temperature. @@ -829,6 +827,8 @@ void IRDaikin2::setTemp(const uint8_t desired) { (_.Mode == kDaikinCool) ? kDaikin2MinCoolTemp : kDaikinMinTemp, desired); _.Temp = std::min(kDaikinMaxTemp, temp); + // If the humidity setting is in use, the temp is a fixed value. + if (_.HumidOn) _.Temp = kDaikinMaxTemp; } /// Get the current temperature setting. @@ -880,9 +880,7 @@ void IRDaikin2::setSwingVertical(const uint8_t position) { /// Get the Vertical Swing mode of the A/C. /// @return The native position/mode setting. -uint8_t IRDaikin2::getSwingVertical(void) const { - return _.SwingV; -} +uint8_t IRDaikin2::getSwingVertical(void) const { return _.SwingV; } /// Convert a stdAc::swingv_t enum into it's native setting. /// @param[in] position The enum to be converted. @@ -938,9 +936,7 @@ void IRDaikin2::setCurrentTime(const uint16_t numMins) { /// Get the clock time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin2::getCurrentTime(void) const { - return _.CurrentTime; -} +uint16_t IRDaikin2::getCurrentTime(void) const { return _.CurrentTime; } /// Set the enable status & time of the On Timer. /// @param[in] starttime The number of minutes past midnight. @@ -952,9 +948,7 @@ void IRDaikin2::enableOnTimer(const uint16_t starttime) { } /// Clear the On Timer flag. -void IRDaikin2::clearOnTimerFlag(void) { - _.OnTimer = false; -} +void IRDaikin2::clearOnTimerFlag(void) { _.OnTimer = false; } /// Disable the On timer. void IRDaikin2::disableOnTimer(void) { @@ -965,15 +959,11 @@ void IRDaikin2::disableOnTimer(void) { /// Get the On Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin2::getOnTime(void) const { - return _.OnTime; -} +uint16_t IRDaikin2::getOnTime(void) const { return _.OnTime; } /// Get the enable status of the On Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getOnTimerEnabled(void) const { - return _.OnTimer; -} +bool IRDaikin2::getOnTimerEnabled(void) const { return _.OnTimer; } /// Set the enable status & time of the Off Timer. /// @param[in] endtime The number of minutes past midnight. @@ -992,123 +982,83 @@ void IRDaikin2::disableOffTimer(void) { /// Get the Off Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin2::getOffTime(void) const { - return _.OffTime; -} +uint16_t IRDaikin2::getOffTime(void) const { return _.OffTime; } /// Get the enable status of the Off Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getOffTimerEnabled(void) const { - return _.OffTimer; -} +bool IRDaikin2::getOffTimerEnabled(void) const { return _.OffTimer; } /// Get the Beep status of the A/C. /// @return true, the setting is on. false, the setting is off. -uint8_t IRDaikin2::getBeep(void) const { - return _.Beep; -} +uint8_t IRDaikin2::getBeep(void) const { return _.Beep; } /// Set the Beep mode of the A/C. /// @param[in] beep true, the setting is on. false, the setting is off. -void IRDaikin2::setBeep(const uint8_t beep) { - _.Beep = beep; -} +void IRDaikin2::setBeep(const uint8_t beep) { _.Beep = beep; } /// Get the Light status of the A/C. /// @return true, the setting is on. false, the setting is off. -uint8_t IRDaikin2::getLight(void) const { - return _.Light; -} +uint8_t IRDaikin2::getLight(void) const { return _.Light; } /// Set the Light (LED) mode of the A/C. /// @param[in] light true, the setting is on. false, the setting is off. -void IRDaikin2::setLight(const uint8_t light) { - _.Light = light; -} +void IRDaikin2::setLight(const uint8_t light) { _.Light = light; } /// Set the Mould (filter) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setMold(const bool on) { - _.Mold = on; -} +void IRDaikin2::setMold(const bool on) { _.Mold = on; } /// Get the Mould (filter) mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getMold(void) const { - return _.Mold; -} +bool IRDaikin2::getMold(void) const { return _.Mold; } /// Set the Auto clean mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setClean(const bool on) { - _.Clean = on; -} +void IRDaikin2::setClean(const bool on) { _.Clean = on; } /// Get the Auto Clean mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getClean(void) const { - return _.Clean; -} +bool IRDaikin2::getClean(void) const { return _.Clean; } /// Set the Fresh Air mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setFreshAir(const bool on) { - _.FreshAir = on; -} +void IRDaikin2::setFreshAir(const bool on) { _.FreshAir = on; } /// Get the Fresh Air mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getFreshAir(void) const { - return _.FreshAir; -} +bool IRDaikin2::getFreshAir(void) const { return _.FreshAir; } /// Set the (High) Fresh Air mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setFreshAirHigh(const bool on) { - _.FreshAirHigh = on; -} +void IRDaikin2::setFreshAirHigh(const bool on) { _.FreshAirHigh = on; } /// Get the (High) Fresh Air mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getFreshAirHigh(void) const { - return _.FreshAirHigh; -} +bool IRDaikin2::getFreshAirHigh(void) const { return _.FreshAirHigh; } /// Set the Automatic Eye (Sensor) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setEyeAuto(bool on) { - _.EyeAuto = on; -} +void IRDaikin2::setEyeAuto(bool on) { _.EyeAuto = on; } /// Get the Automaitc Eye (Sensor) mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getEyeAuto(void) const { - return _.EyeAuto; -} +bool IRDaikin2::getEyeAuto(void) const { return _.EyeAuto; } /// Set the Eye (Sensor) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setEye(bool on) { - _.Eye = on; -} +void IRDaikin2::setEye(bool on) { _.Eye = on; } /// Get the Eye (Sensor) mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getEye(void) const { - return _.Eye; -} +bool IRDaikin2::getEye(void) const { return _.Eye; } /// Set the Economy mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setEcono(bool on) { - _.Econo = on; -} +void IRDaikin2::setEcono(bool on) { _.Econo = on; } /// Get the Economical mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getEcono(void) const { - return _.Econo; -} +bool IRDaikin2::getEcono(void) const { return _.Econo; } /// Set the enable status & time of the Sleep Timer. /// @param[in] sleeptime The number of minutes past midnight. @@ -1120,26 +1070,18 @@ void IRDaikin2::enableSleepTimer(const uint16_t sleeptime) { } /// Clear the sleep timer flag. -void IRDaikin2::clearSleepTimerFlag(void) { - _.SleepTimer = false; -} +void IRDaikin2::clearSleepTimerFlag(void) { _.SleepTimer = false; } /// Disable the sleep timer. -void IRDaikin2::disableSleepTimer(void) { - disableOnTimer(); -} +void IRDaikin2::disableSleepTimer(void) { disableOnTimer(); } /// Get the Sleep Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin2::getSleepTime(void) const { - return getOnTime(); -} +uint16_t IRDaikin2::getSleepTime(void) const { return getOnTime(); } /// Get the Sleep timer enabled status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getSleepTimerEnabled(void) const { - return _.SleepTimer; -} +bool IRDaikin2::getSleepTimerEnabled(void) const { return _.SleepTimer; } /// Set the Quiet mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -1151,9 +1093,7 @@ void IRDaikin2::setQuiet(const bool on) { /// Get the Quiet mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getQuiet(void) const { - return _.Quiet; -} +bool IRDaikin2::getQuiet(void) const { return _.Quiet; } /// Set the Powerful (Turbo) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -1165,20 +1105,49 @@ void IRDaikin2::setPowerful(const bool on) { /// Get the Powerful (Turbo) mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getPowerful(void) const { - return _.Powerful; -} +bool IRDaikin2::getPowerful(void) const { return _.Powerful; } /// Set the Purify (Filter) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin2::setPurify(const bool on) { - _.Purify = on; -} +void IRDaikin2::setPurify(const bool on) { _.Purify = on; } /// Get the Purify (Filter) mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin2::getPurify(void) const { - return _.Purify; +bool IRDaikin2::getPurify(void) const { return _.Purify; } + +/// Get the Humidity percentage setting of the A/C. +/// @return The setting percentage. 255 is Automatic. 0 is Off. +uint8_t IRDaikin2::getHumidity(void) const { return _.Humidity; } + +/// Set the Humidity percentage setting of the A/C. +/// @param[in] percent Percentage humidty. 255 is Auto. 0 is Off. +/// @note Only available in Dry & Heat modes, otherwise it is Off. +void IRDaikin2::setHumidity(const uint8_t percent) { + _.Humidity = kDaikin2HumidityOff; // Default to off. + switch (getMode()) { + case kDaikinHeat: + switch (percent) { + case kDaikin2HumidityOff: + case kDaikin2HumidityHeatLow: + case kDaikin2HumidityHeatMedium: + case kDaikin2HumidityHeatHigh: + case kDaikin2HumidityAuto: + _.Humidity = percent; + } + break; + case kDaikinDry: + switch (percent) { + case kDaikin2HumidityOff: + case kDaikin2HumidityDryLow: + case kDaikin2HumidityDryMedium: + case kDaikin2HumidityDryHigh: + case kDaikin2HumidityAuto: + _.Humidity = percent; + } + break; + } + _.HumidOn = (_.Humidity != kDaikin2HumidityOff); // Enabled? + setTemp(getTemp()); // Adjust the temperature if we need to. } /// Convert a stdAc::opmode_t enum into its native mode. @@ -1257,7 +1226,7 @@ stdAc::state_t IRDaikin2::toCommon(void) const { /// @return A human readable string. String IRDaikin2::toString(void) const { String result = ""; - result.reserve(310); // Reserve some heap for the string to reduce fragging. + result.reserve(330); // Reserve some heap for the string to reduce fragging. result += addBoolToString(getPower(), kPowerStr, false); result += addModeToString(_.Mode, kDaikinAuto, kDaikinCool, kDaikinHeat, kDaikinDry, kDaikinFan); @@ -1336,6 +1305,17 @@ String IRDaikin2::toString(void) const { result += addBoolToString(_.Powerful, kPowerfulStr); result += addBoolToString(_.Purify, kPurifyStr); result += addBoolToString(_.Econo, kEconoStr); + result += addIntToString(_.Humidity, kHumidStr); + switch (_.Humidity) { + case kDaikin2HumidityOff: + case kDaikin2HumidityAuto: + result += kSpaceLBraceStr; + result += _.Humidity ? kAutoStr : kOffStr; + result += ')'; + break; + default: + result += '%'; + } return result; } @@ -1513,21 +1493,15 @@ void IRDaikin216::off(void) { setPower(false); } /// Change the power setting. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin216::setPower(const bool on) { - _.Power = on; -} +void IRDaikin216::setPower(const bool on) { _.Power = on; } /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin216::getPower(void) const { - return _.Power; -} +bool IRDaikin216::getPower(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin216::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin216::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -1562,9 +1536,7 @@ void IRDaikin216::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin216::getTemp(void) const { - return _.Temp; -} +uint8_t IRDaikin216::getTemp(void) const { return _.Temp; } /// Set the speed of the fan. /// @param[in] fan The desired setting. @@ -1604,9 +1576,7 @@ void IRDaikin216::setSwingVertical(const bool on) { /// Get the Vertical Swing mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin216::getSwingVertical(void) const { - return _.SwingV; -} +bool IRDaikin216::getSwingVertical(void) const { return _.SwingV; } /// Set the Horizontal Swing mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -1616,9 +1586,7 @@ void IRDaikin216::setSwingHorizontal(const bool on) { /// Get the Horizontal Swing mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin216::getSwingHorizontal(void) const { - return _.SwingH; -} +bool IRDaikin216::getSwingHorizontal(void) const { return _.SwingH; } /// Set the Quiet mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -1636,9 +1604,7 @@ void IRDaikin216::setQuiet(const bool on) { /// Get the Quiet mode status of the A/C. /// @return true, the setting is on. false, the setting is off. /// @note This is a horrible hack till someone works out the quiet mode bit. -bool IRDaikin216::getQuiet(void) const { - return getFan() == kDaikinFanQuiet; -} +bool IRDaikin216::getQuiet(void) const { return getFan() == kDaikinFanQuiet; } /// Set the Powerful (Turbo) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -1650,9 +1616,7 @@ void IRDaikin216::setPowerful(const bool on) { /// Get the Powerful (Turbo) mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin216::getPowerful(void) const { - return _.Powerful; -} +bool IRDaikin216::getPowerful(void) const { return _.Powerful; } /// Convert the current internal state into its stdAc::state_t equivalent. /// @return The stdAc equivalent of the native settings. @@ -1872,21 +1836,15 @@ void IRDaikin160::off(void) { setPower(false); } /// Change the power setting. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin160::setPower(const bool on) { - _.Power = on; -} +void IRDaikin160::setPower(const bool on) { _.Power = on; } /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin160::getPower(void) const { - return _.Power; -} +bool IRDaikin160::getPower(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin160::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin160::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -1920,9 +1878,7 @@ void IRDaikin160::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin160::getTemp(void) const { - return _.Temp + 10; -} +uint8_t IRDaikin160::getTemp(void) const { return _.Temp + 10; } /// Set the speed of the fan. /// @param[in] fan The desired setting. @@ -1979,9 +1935,7 @@ void IRDaikin160::setSwingVertical(const uint8_t position) { /// Get the Vertical Swing mode of the A/C. /// @return The native position/mode setting. -uint8_t IRDaikin160::getSwingVertical(void) const { - return _.SwingV; -} +uint8_t IRDaikin160::getSwingVertical(void) const { return _.SwingV; } /// Convert a stdAc::swingv_t enum into it's native setting. /// @param[in] position The enum to be converted. @@ -2244,15 +2198,11 @@ void IRDaikin176::setPower(const bool on) { /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin176::getPower(void) const { - return _.Power; -} +bool IRDaikin176::getPower(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin176::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin176::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -2320,9 +2270,7 @@ void IRDaikin176::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin176::getTemp(void) const { - return _.Temp + 9; -} +uint8_t IRDaikin176::getTemp(void) const { return _.Temp + 9; } /// Set the speed of the fan. /// @param[in] fan The desired setting. @@ -2342,9 +2290,7 @@ void IRDaikin176::setFan(const uint8_t fan) { /// Get the current fan speed setting. /// @return The current fan speed. -uint8_t IRDaikin176::getFan(void) const { - return _.Fan; -} +uint8_t IRDaikin176::getFan(void) const { return _.Fan; } /// Convert a stdAc::fanspeed_t enum into it's native speed. /// @param[in] speed The enum to be converted. @@ -2371,9 +2317,16 @@ void IRDaikin176::setSwingHorizontal(const uint8_t position) { /// Get the Horizontal Swing mode of the A/C. /// @return The native position/mode setting. -uint8_t IRDaikin176::getSwingHorizontal(void) const { - return _.SwingH; -} +uint8_t IRDaikin176::getSwingHorizontal(void) const { return _.SwingH; } + +/// Get the Unit Id of the A/C. +/// @return The Unit Id the A/C is to use. +uint8_t IRDaikin176::getId(void) const { return _.Id1; } + +/// Set the Unit Id of the A/C. +/// @param[in] num The Unit Id the A/C is to use. +/// @note 0 for Unit A; 1 for Unit B +void IRDaikin176::setId(const uint8_t num) { _.Id1 = _.Id2 = num; } /// Convert a stdAc::swingh_t enum into it's native setting. /// @param[in] position The enum to be converted. @@ -2437,7 +2390,7 @@ stdAc::state_t IRDaikin176::toCommon(void) const { /// @return A human readable string. String IRDaikin176::toString(void) const { String result = ""; - result.reserve(80); // Reserve some heap for the string to reduce fragging. + result.reserve(90); // Reserve some heap for the string to reduce fragging. result += addBoolToString(_.Power, kPowerStr, false); result += addModeToString(_.Mode, kDaikin176Auto, kDaikin176Cool, kDaikin176Heat, kDaikin176Dry, kDaikin176Fan); @@ -2456,6 +2409,7 @@ String IRDaikin176::toString(void) const { kDaikin176SwingHAuto, kDaikin176SwingHAuto, kDaikin176SwingHAuto); + result += addIntToString(_.Id1, kIdStr); return result; } @@ -2622,21 +2576,15 @@ void IRDaikin128::send(const uint16_t repeat) { /// Set the Power toggle setting of the A/C. /// @param[in] toggle true, the setting is on. false, the setting is off. -void IRDaikin128::setPowerToggle(const bool toggle) { - _.Power = toggle; -} +void IRDaikin128::setPowerToggle(const bool toggle) { _.Power = toggle; } /// Get the Power toggle setting of the A/C. /// @return The current operating mode setting. -bool IRDaikin128::getPowerToggle(void) const { - return _.Power; -} +bool IRDaikin128::getPowerToggle(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin128::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin128::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -2693,15 +2641,11 @@ void IRDaikin128::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin128::getTemp(void) const { - return bcdToUint8(_.Temp); -} +uint8_t IRDaikin128::getTemp(void) const { return bcdToUint8(_.Temp); } /// Get the current fan speed setting. /// @return The current fan speed. -uint8_t IRDaikin128::getFan(void) const { - return _.Fan; -} +uint8_t IRDaikin128::getFan(void) const { return _.Fan; } /// Set the speed of the fan. /// @param[in] speed The desired setting. @@ -2755,27 +2699,19 @@ stdAc::fanspeed_t IRDaikin128::toCommonFanSpeed(const uint8_t speed) { /// Set the Vertical Swing mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin128::setSwingVertical(const bool on) { - _.SwingV = on; -} +void IRDaikin128::setSwingVertical(const bool on) { _.SwingV = on; } /// Get the Vertical Swing mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getSwingVertical(void) const { - return _.SwingV; -} +bool IRDaikin128::getSwingVertical(void) const { return _.SwingV; } /// Set the Sleep mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin128::setSleep(const bool on) { - _.Sleep = on; -} +void IRDaikin128::setSleep(const bool on) { _.Sleep = on; } /// Get the Sleep mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getSleep(void) const { - return _.Sleep; -} +bool IRDaikin128::getSleep(void) const { return _.Sleep; } /// Set the Economy mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -2786,9 +2722,7 @@ void IRDaikin128::setEcono(const bool on) { /// Get the Economical mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getEcono(void) const { - return _.Econo; -} +bool IRDaikin128::getEcono(void) const { return _.Econo; } /// Set the Quiet mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -2802,9 +2736,7 @@ void IRDaikin128::setQuiet(const bool on) { /// Get the Quiet mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getQuiet(void) const { - return _.Fan == kDaikin128FanQuiet; -} +bool IRDaikin128::getQuiet(void) const { return _.Fan == kDaikin128FanQuiet; } /// Set the Powerful (Turbo) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -2841,15 +2773,11 @@ uint16_t IRDaikin128::getClock(void) const { /// Set the enable status of the On Timer. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin128::setOnTimerEnabled(const bool on) { - _.OnTimer = on; -} +void IRDaikin128::setOnTimerEnabled(const bool on) { _.OnTimer = on; } /// Get the enable status of the On Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getOnTimerEnabled(void) const { - return _.OnTimer; -} +bool IRDaikin128::getOnTimerEnabled(void) const { return _.OnTimer; } #define SETTIME(x, n) do { \ uint16_t mins = n;\ @@ -2868,21 +2796,15 @@ void IRDaikin128::setOnTimer(const uint16_t mins_since_midnight) { /// Get the On Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin128::getOnTimer(void) const { - return GETTIME(On); -} +uint16_t IRDaikin128::getOnTimer(void) const { return GETTIME(On); } /// Set the enable status of the Off Timer. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin128::setOffTimerEnabled(const bool on) { - _.OffTimer = on; -} +void IRDaikin128::setOffTimerEnabled(const bool on) { _.OffTimer = on; } /// Get the enable status of the Off Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin128::getOffTimerEnabled(void) const { - return _.OffTimer; -} +bool IRDaikin128::getOffTimerEnabled(void) const { return _.OffTimer; } /// Set the Off Timer time for the A/C unit. /// @param[in] mins_since_midnight Nr. of minutes past midnight. @@ -2892,9 +2814,7 @@ void IRDaikin128::setOffTimer(const uint16_t mins_since_midnight) { /// Get the Off Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin128::getOffTimer(void) const { - return GETTIME(Off); -} +uint16_t IRDaikin128::getOffTimer(void) const { return GETTIME(Off); } /// Set the Light toggle setting of the A/C. /// @param[in] unit Device to show the LED (Light) Display info about. @@ -3202,21 +3122,15 @@ void IRDaikin152::off(void) { setPower(false); } /// Change the power setting. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin152::setPower(const bool on) { - _.Power = on; -} +void IRDaikin152::setPower(const bool on) { _.Power = on; } /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getPower(void) const { - return _.Power; -} +bool IRDaikin152::getPower(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin152::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin152::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -3258,9 +3172,7 @@ void IRDaikin152::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin152::getTemp(void) const { - return _.Temp; -} +uint8_t IRDaikin152::getTemp(void) const { return _.Temp; } /// Set the speed of the fan. /// @param[in] fan The desired setting. @@ -3303,9 +3215,7 @@ void IRDaikin152::setSwingV(const bool on) { /// Get the Vertical Swing mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getSwingV(void) const { - return _.SwingV; -} +bool IRDaikin152::getSwingV(void) const { return _.SwingV; } /// Set the Quiet mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3317,9 +3227,7 @@ void IRDaikin152::setQuiet(const bool on) { /// Get the Quiet mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getQuiet(void) const { - return _.Quiet; -} +bool IRDaikin152::getQuiet(void) const { return _.Quiet; } /// Set the Powerful (Turbo) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3335,9 +3243,7 @@ void IRDaikin152::setPowerful(const bool on) { /// Get the Powerful (Turbo) mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getPowerful(void) const { - return _.Powerful; -} +bool IRDaikin152::getPowerful(void) const { return _.Powerful; } /// Set the Economy mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3349,21 +3255,15 @@ void IRDaikin152::setEcono(const bool on) { /// Get the Economical mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getEcono(void) const { - return _.Econo; -} +bool IRDaikin152::getEcono(void) const { return _.Econo; } /// Set the Sensor mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin152::setSensor(const bool on) { - _.Sensor = on; -} +void IRDaikin152::setSensor(const bool on) { _.Sensor = on; } /// Get the Sensor mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getSensor(void) const { - return _.Sensor; -} +bool IRDaikin152::getSensor(void) const { return _.Sensor; } /// Set the Comfort mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3380,9 +3280,7 @@ void IRDaikin152::setComfort(const bool on) { /// Get the Comfort mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin152::getComfort(void) const { - return _.Comfort; -} +bool IRDaikin152::getComfort(void) const { return _.Comfort; } /// Convert the current internal state into its stdAc::state_t equivalent. /// @return The stdAc equivalent of the native settings. @@ -3551,14 +3449,10 @@ bool IRDaikin64::validChecksum(const uint64_t state) { } /// Calculate and set the checksum values for the internal state. -void IRDaikin64::checksum(void) { - _.Sum = calcChecksum(_.raw); -} +void IRDaikin64::checksum(void) { _.Sum = calcChecksum(_.raw); } /// Reset the internal state to a fixed known good state. -void IRDaikin64::stateReset(void) { - _.raw = kDaikin64KnownGoodState; -} +void IRDaikin64::stateReset(void) { _.raw = kDaikin64KnownGoodState; } /// Get a copy of the internal state as a valid code for this protocol. /// @return A valid code for this protocol based on the current internal state. @@ -3573,15 +3467,11 @@ void IRDaikin64::setRaw(const uint64_t new_state) { _.raw = new_state; } /// Set the Power toggle setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin64::setPowerToggle(const bool on) { - _.Power = on; -} +void IRDaikin64::setPowerToggle(const bool on) { _.Power = on; } /// Get the Power toggle setting of the A/C. /// @return The current operating mode setting. -bool IRDaikin64::getPowerToggle(void) const { - return _.Power; -} +bool IRDaikin64::getPowerToggle(void) const { return _.Power; } /// Set the temperature. /// @param[in] temp The temperature in degrees celsius. @@ -3593,15 +3483,11 @@ void IRDaikin64::setTemp(const uint8_t temp) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRDaikin64::getTemp(void) const { - return bcdToUint8(_.Temp); -} +uint8_t IRDaikin64::getTemp(void) const { return bcdToUint8(_.Temp); } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRDaikin64::getMode(void) const { - return _.Mode; -} +uint8_t IRDaikin64::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -3610,6 +3496,7 @@ void IRDaikin64::setMode(const uint8_t mode) { case kDaikin64Fan: case kDaikin64Dry: case kDaikin64Cool: + case kDaikin64Heat: _.Mode = mode; break; default: @@ -3624,7 +3511,8 @@ uint8_t IRDaikin64::convertMode(const stdAc::opmode_t mode) { switch (mode) { case stdAc::opmode_t::kDry: return kDaikin64Dry; case stdAc::opmode_t::kFan: return kDaikin64Fan; - default: return kDaikinCool; + case stdAc::opmode_t::kHeat: return kDaikin64Heat; + default: return kDaikin64Cool; } } @@ -3634,6 +3522,7 @@ uint8_t IRDaikin64::convertMode(const stdAc::opmode_t mode) { stdAc::opmode_t IRDaikin64::toCommonMode(const uint8_t mode) { switch (mode) { case kDaikin64Cool: return stdAc::opmode_t::kCool; + case kDaikin64Heat: return stdAc::opmode_t::kHeat; case kDaikin64Dry: return stdAc::opmode_t::kDry; case kDaikin64Fan: return stdAc::opmode_t::kFan; default: return stdAc::opmode_t::kAuto; @@ -3642,9 +3531,7 @@ stdAc::opmode_t IRDaikin64::toCommonMode(const uint8_t mode) { /// Get the current fan speed setting. /// @return The current fan speed. -uint8_t IRDaikin64::getFan(void) const { - return _.Fan; -} +uint8_t IRDaikin64::getFan(void) const { return _.Fan; } /// Set the speed of the fan. /// @param[in] speed The desired setting. @@ -3693,9 +3580,7 @@ stdAc::fanspeed_t IRDaikin64::toCommonFanSpeed(const uint8_t speed) { /// Get the Turbo (Powerful) mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getTurbo(void) const { - return _.Fan == kDaikin64FanTurbo; -} +bool IRDaikin64::getTurbo(void) const { return _.Fan == kDaikin64FanTurbo; } /// Set the Turbo (Powerful) mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3709,9 +3594,7 @@ void IRDaikin64::setTurbo(const bool on) { /// Get the Quiet mode status of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getQuiet(void) const { - return _.Fan == kDaikin64FanQuiet; -} +bool IRDaikin64::getQuiet(void) const { return _.Fan == kDaikin64FanQuiet; } /// Set the Quiet mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -3725,27 +3608,19 @@ void IRDaikin64::setQuiet(const bool on) { /// Set the Vertical Swing mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin64::setSwingVertical(const bool on) { - _.SwingV = on; -} +void IRDaikin64::setSwingVertical(const bool on) { _.SwingV = on; } /// Get the Vertical Swing mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getSwingVertical(void) const { - return _.SwingV; -} +bool IRDaikin64::getSwingVertical(void) const { return _.SwingV; } /// Set the Sleep mode of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin64::setSleep(const bool on) { - _.Sleep = on; -} +void IRDaikin64::setSleep(const bool on) { _.Sleep = on; } /// Get the Sleep mode of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getSleep(void) const { - return _.Sleep; -} +bool IRDaikin64::getSleep(void) const { return _.Sleep; } /// Set the clock on the A/C unit. /// @param[in] mins_since_midnight Nr. of minutes past midnight. @@ -3764,21 +3639,15 @@ uint16_t IRDaikin64::getClock(void) const { /// Set the enable status of the On Timer. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin64::setOnTimeEnabled(const bool on) { - _.OnTimer = on; -} +void IRDaikin64::setOnTimeEnabled(const bool on) { _.OnTimer = on; } /// Get the enable status of the On Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getOnTimeEnabled(void) const { - return _.OnTimer; -} +bool IRDaikin64::getOnTimeEnabled(void) const { return _.OnTimer; } /// Get the On Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin64::getOnTime(void) const { - return GETTIME(On); -} +uint16_t IRDaikin64::getOnTime(void) const { return GETTIME(On); } /// Set the On Timer time for the A/C unit. /// @param[in] mins_since_midnight Nr. of minutes past midnight. @@ -3788,21 +3657,15 @@ void IRDaikin64::setOnTime(const uint16_t mins_since_midnight) { /// Set the enable status of the Off Timer. /// @param[in] on true, the setting is on. false, the setting is off. -void IRDaikin64::setOffTimeEnabled(const bool on) { - _.OffTimer = on; -} +void IRDaikin64::setOffTimeEnabled(const bool on) { _.OffTimer = on; } /// Get the enable status of the Off Timer. /// @return true, the setting is on. false, the setting is off. -bool IRDaikin64::getOffTimeEnabled(void) const { - return _.OffTimer; -} +bool IRDaikin64::getOffTimeEnabled(void) const { return _.OffTimer; } /// Get the Off Timer time to be sent to the A/C unit. /// @return The number of minutes past midnight. -uint16_t IRDaikin64::getOffTime(void) const { - return GETTIME(Off); -} +uint16_t IRDaikin64::getOffTime(void) const { return GETTIME(Off); } /// Set the Off Timer time for the A/C unit. /// @param[in] mins_since_midnight Nr. of minutes past midnight. @@ -3817,7 +3680,7 @@ String IRDaikin64::toString(void) const { result.reserve(120); // Reserve some heap for the string to reduce fragging. result += addBoolToString(_.Power, kPowerToggleStr, false); result += addModeToString(_.Mode, 0xFF, kDaikin64Cool, - 0xFF, kDaikin64Dry, kDaikin64Fan); + kDaikin64Heat, kDaikin64Dry, kDaikin64Fan); result += addTempToString(getTemp()); if (!getTurbo()) { result += addFanToString(_.Fan, kDaikin64FanHigh, kDaikin64FanLow, diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Daikin.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.h similarity index 95% rename from lib/lib_basic/IRremoteESP8266/src/ir_Daikin.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.h index aa7c601c7..0a12c5b69 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Daikin.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Daikin.h @@ -1,6 +1,6 @@ // Copyright 2016 sillyfrog // Copyright 2017 sillyfrog, crankyoldgit -// Copyright 2018-2020 crankyoldgit +// Copyright 2018-2021 crankyoldgit // Copyright 2019 pasna (IRDaikin160 class / Daikin176 class) /// @file @@ -16,6 +16,7 @@ /// @see Daikin160 https://github.com/crankyoldgit/IRremoteESP8266/issues/731 /// @see Daikin2 https://docs.google.com/spreadsheets/d/1f8EGfIbBUo2B-CzUFdrgKQprWakoYNKM80IKZN4KXQE/edit#gid=236366525&range=B25:D32 /// @see Daikin2 https://github.com/crankyoldgit/IRremoteESP8266/issues/582 +/// @see Daikin2 https://github.com/crankyoldgit/IRremoteESP8266/issues/1535 /// @see Daikin2 https://www.daikin.co.nz/sites/default/files/daikin-split-system-US7-FTXZ25-50NV1B.pdf /// @see Daikin216 https://github.com/crankyoldgit/IRremoteESP8266/issues/689 /// @see Daikin216 https://github.com/danny-source/Arduino_DY_IRDaikin @@ -43,6 +44,9 @@ // Brand: Daikin, Model: M Series A/C (DAIKIN) // Brand: Daikin, Model: FTXM-M A/C (DAIKIN) // Brand: Daikin, Model: ARC466A33 remote (DAIKIN) +// Brand: Daikin, Model: FTWX35AXV1 A/C (DAIKIN64) +// Brand: Daikin, Model: ARC484A4 remote (DAIKIN216) +// Brand: Daikin, Model: FTQ60TV16U2 A/C (DAIKIN216) #ifndef IR_DAIKIN_H_ #define IR_DAIKIN_H_ @@ -226,9 +230,10 @@ union Daikin2Protocol{ uint64_t :1; // Byte 26 uint64_t :1; - uint64_t Temp :7; + uint64_t Temp :6; + uint64_t HumidOn :1; // Byte 27 - uint64_t :8; + uint64_t Humidity :8; // Byte 28 uint64_t :4; uint64_t Fan :4; @@ -298,6 +303,19 @@ const uint8_t kDaikin2SwingHAuto = 0xBE; // A.k.a "Swing" const uint8_t kDaikin2SwingHOff = 0xBF; const uint8_t kDaikin2SwingHSwing = kDaikin2SwingHAuto; +// Ref: +// https://github.com/crankyoldgit/IRremoteESP8266/issues/1535#issuecomment-882092486 +// https://docs.google.com/spreadsheets/d/1kxHgFqiUB9ETXYEkszAIN5gE-t2ykvnPCnOV-sPUE0A/edit?usp=sharing +const uint8_t kDaikin2HumidityOff = 0x00; +const uint8_t kDaikin2HumidityHeatLow = 0x28; // Humidify (Heat) only (40%?) +const uint8_t kDaikin2HumidityHeatMedium = 0x2D; // Humidify (Heat) only (45%?) +const uint8_t kDaikin2HumidityHeatHigh = 0x32; // Humidify (Heat) only (50%?) +const uint8_t kDaikin2HumidityDryLow = 0x32; // Dry only (50%?) +const uint8_t kDaikin2HumidityDryMedium = 0x37; // Dry only (55%?) +const uint8_t kDaikin2HumidityDryHigh = 0x3C; // Dry only (60%?) +const uint8_t kDaikin2HumidityAuto = 0xFF; + + const uint8_t kDaikin2MinCoolTemp = 18; // Min temp (in C) when in Cool mode. /// Native representation of a Daikin216 A/C message. @@ -410,12 +428,28 @@ const uint8_t kDaikin160SwingVAuto = 0xF; union Daikin176Protocol{ uint8_t raw[kDaikin176StateLength]; ///< The state of the IR remote. struct { - // Byte 0~5 - uint8_t pad0[6]; + // Byte 0~2 + uint8_t :8; + uint8_t :8; + uint8_t :8; + // Byte 3 + uint8_t Id1 :1; + uint8_t :7; + // Byte 4 + uint8_t :8; + // Byte 5 + uint8_t :8; // Byte 6 uint8_t Sum1 :8; - // Byte 7~11 - uint8_t pad1[5]; + // Byte 7-9 + uint8_t :8; + uint8_t :8; + uint8_t :8; + // Byte 10 + uint8_t Id2 :1; + uint8_t :7; + // Byte 11 + uint8_t :8; // Byte 12 uint8_t :4; uint8_t AltMode :3; @@ -627,9 +661,10 @@ const uint8_t kDaikin64Overhead = 9; const int8_t kDaikin64ToleranceDelta = 5; // +5% const uint64_t kDaikin64KnownGoodState = 0x7C16161607204216; -const uint8_t kDaikin64Dry = 0b001; -const uint8_t kDaikin64Cool = 0b010; -const uint8_t kDaikin64Fan = 0b100; +const uint8_t kDaikin64Dry = 0b0001; +const uint8_t kDaikin64Cool = 0b0010; +const uint8_t kDaikin64Fan = 0b0100; +const uint8_t kDaikin64Heat = 0b1000; const uint8_t kDaikin64FanAuto = 0b0001; const uint8_t kDaikin64FanLow = 0b1000; const uint8_t kDaikin64FanMed = 0b0100; @@ -803,6 +838,8 @@ class IRDaikin2 { bool getFreshAir(void) const; void setFreshAirHigh(const bool on); bool getFreshAirHigh(void) const; + uint8_t getHumidity(void) const; + void setHumidity(const uint8_t percent); uint8_t* getRaw(void); void setRaw(const uint8_t new_code[]); static bool validChecksum(uint8_t state[], @@ -973,6 +1010,8 @@ class IRDaikin176 { static uint8_t convertFan(const stdAc::fanspeed_t speed); void setSwingHorizontal(const uint8_t position); uint8_t getSwingHorizontal(void) const; + uint8_t getId(void) const; + void setId(const uint8_t num); static uint8_t convertSwingH(const stdAc::swingh_t position); static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); static stdAc::opmode_t toCommonMode(const uint8_t mode); diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Delonghi.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Delonghi.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Delonghi.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Delonghi.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Delonghi.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Delonghi.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Delonghi.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Delonghi.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Denon.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Denon.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Denon.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Denon.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Dish.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Dish.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Dish.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Dish.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Doshisha.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Doshisha.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Doshisha.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Doshisha.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Ecoclim.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Ecoclim.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Ecoclim.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Ecoclim.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Ecoclim.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Ecoclim.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Ecoclim.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Ecoclim.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Electra.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Electra.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Electra.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Electra.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Electra.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Electra.h similarity index 99% rename from lib/lib_basic/IRremoteESP8266/src/ir_Electra.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Electra.h index 43c4b3728..886a92c56 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Electra.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Electra.h @@ -8,6 +8,7 @@ // Brand: AUX, Model: YKR-T/011 remote // Brand: Electra, Model: Classic INV 17 / AXW12DCS A/C // Brand: Electra, Model: YKR-M/003E remote +// Brand: Frigidaire, Model: FGPC102AB1 A/C #ifndef IR_ELECTRA_H_ #define IR_ELECTRA_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_EliteScreens.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_EliteScreens.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_EliteScreens.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_EliteScreens.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Epson.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Epson.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Epson.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Epson.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Fujitsu.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Fujitsu.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Fujitsu.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Fujitsu.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Fujitsu.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Fujitsu.h similarity index 99% rename from lib/lib_basic/IRremoteESP8266/src/ir_Fujitsu.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Fujitsu.h index 2d26f3c9a..994b6f4a3 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Fujitsu.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Fujitsu.h @@ -158,8 +158,8 @@ const uint16_t kFujitsuAcTimerMax = 12 * 60; ///< Minutes. #define FUJITSU_AC_FAN_MED kFujitsuAcFanMed #define FUJITSU_AC_FAN_LOW kFujitsuAcFanLow #define FUJITSU_AC_FAN_QUIET kFujitsuAcFanQuiet -#define FUJITSU_AC_MIN_TEMP kFujitsuAcMinTempC -#define FUJITSU_AC_MAX_TEMP kFujitsuAcMaxTempC +#define FUJITSU_AC_MIN_TEMP kFujitsuAcMinTemp +#define FUJITSU_AC_MAX_TEMP kFujitsuAcMaxTemp #define FUJITSU_AC_SWING_OFF kFujitsuAcSwingOff #define FUJITSU_AC_SWING_VERT kFujitsuAcSwingVert #define FUJITSU_AC_SWING_HORIZ kFujitsuAcSwingHoriz diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_GICable.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_GICable.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_GICable.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_GICable.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_GlobalCache.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_GlobalCache.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_GlobalCache.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_GlobalCache.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Goodweather.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Goodweather.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Goodweather.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Goodweather.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Goodweather.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Goodweather.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Goodweather.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Goodweather.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Gree.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.cpp similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/ir_Gree.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.cpp index 285bb71e1..1d1371b2d 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Gree.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.cpp @@ -4,6 +4,7 @@ /// @file /// @brief Support for Gree A/C protocols. /// @see https://github.com/ToniA/arduino-heatpumpir/blob/master/GreeHeatpumpIR.h +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1508 #include "ir_Gree.h" #include @@ -24,7 +25,7 @@ const uint16_t kGreeHdrSpace = 4500; ///< See #684 & real example in unit tests const uint16_t kGreeBitMark = 620; const uint16_t kGreeOneSpace = 1600; const uint16_t kGreeZeroSpace = 540; -const uint16_t kGreeMsgSpace = 19000; +const uint16_t kGreeMsgSpace = 19980; ///< See #1508, #386, & Kelvinator const uint8_t kGreeBlockFooter = 0b010; const uint8_t kGreeBlockFooterBits = 3; @@ -547,9 +548,9 @@ stdAc::fanspeed_t IRGreeAC::toCommonFanSpeed(const uint8_t speed) { } } -/// Convert a stdAc::swingv_t enum into it's native setting. -/// @param[in] pos The enum to be converted. -/// @return The native equivalent of the enum. +/// Convert a native Vertical Swing into its stdAc equivalent. +/// @param[in] pos The native setting to be converted. +/// @return The stdAc equivalent of the native setting. stdAc::swingv_t IRGreeAC::toCommonSwingV(const uint8_t pos) { switch (pos) { case kGreeSwingUp: return stdAc::swingv_t::kHighest; diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Gree.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.h similarity index 97% rename from lib/lib_basic/IRremoteESP8266/src/ir_Gree.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.h index 9fbb1f88a..4f89fde5c 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Gree.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Gree.h @@ -3,6 +3,7 @@ /// @file /// @brief Support for Gree A/C protocols. /// @see https://github.com/ToniA/arduino-heatpumpir/blob/master/GreeHeatpumpIR.h +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1508 // Supports: // Brand: Ultimate, Model: Heat Pump @@ -15,6 +16,8 @@ // Brand: Gree, Model: YB1F2F remote // Brand: Amana, Model: PBC093G00CC A/C // Brand: Amana, Model: YX1FF remote +// Brand: Cooper & Hunter, Model: YB1F2 remote +// Brand: Cooper & Hunter, Model: CH-S09FTXG A/C #ifndef IR_GREE_H_ #define IR_GREE_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Haier.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.cpp similarity index 77% rename from lib/lib_basic/IRremoteESP8266/src/ir_Haier.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.cpp index 94d1bd1d2..a43e9400d 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Haier.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.cpp @@ -1,4 +1,4 @@ -// Copyright 2018 crankyoldgit +// Copyright 2018-2021 crankyoldgit /// @file /// @brief Support for Haier A/C protocols. /// The specifics of reverse engineering the protocols details: @@ -8,8 +8,10 @@ /// @see https://www.dropbox.com/s/mecyib3lhdxc8c6/IR%20data%20reverse%20engineering.xlsx?dl=0 /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/485 /// @see https://www.dropbox.com/sh/w0bt7egp0fjger5/AADRFV6Wg4wZskJVdFvzb8Z0a?dl=0&preview=haer2.ods +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1480 #include "ir_Haier.h" +#include #include #ifndef UNIT_TEST #include @@ -42,7 +44,7 @@ using irutils::minsToString; _.x##Mins = mins % 60;\ } while (0) -#if (SEND_HAIER_AC || SEND_HAIER_AC_YRW02) +#if (SEND_HAIER_AC || SEND_HAIER_AC_YRW02 || SEND_HAIER_AC176) /// Send a Haier A/C formatted message. (HSU07-HEA03 remote) /// Status: STABLE / Known to be working. /// @param[in] data The message to be sent. @@ -63,11 +65,11 @@ void IRsend::sendHaierAC(const unsigned char data[], const uint16_t nbytes, 50); } } -#endif // (SEND_HAIER_AC || SEND_HAIER_AC_YRW02) +#endif // (SEND_HAIER_AC || SEND_HAIER_AC_YRW02 || SEND_HAIER_AC176) #if SEND_HAIER_AC_YRW02 /// Send a Haier YR-W02 remote A/C formatted message. -/// Status: Alpha / Untested on a real device. +/// Status: STABLE / Known to be working. /// @param[in] data The message to be sent. /// @param[in] nbytes The number of bytes of message to be sent. /// @param[in] repeat The number of times the command is to be repeated. @@ -77,6 +79,18 @@ void IRsend::sendHaierACYRW02(const unsigned char data[], const uint16_t nbytes, } #endif // SEND_HAIER_AC_YRW02 +#if SEND_HAIER_AC176 +/// Send a Haier 176 bit remote A/C formatted message. +/// Status: STABLE / Known to be working. +/// @param[in] data The message to be sent. +/// @param[in] nbytes The number of bytes of message to be sent. +/// @param[in] repeat The number of times the command is to be repeated. +void IRsend::sendHaierAC176(const unsigned char data[], const uint16_t nbytes, + const uint16_t repeat) { + if (nbytes >= kHaierAC176StateLength) sendHaierAC(data, nbytes, repeat); +} +#endif // SEND_HAIER_AC176 + /// Class constructor /// @param[in] pin GPIO to be used when sending. /// @param[in] inverted Is the output signal to be inverted? @@ -524,63 +538,74 @@ String IRHaierAC::toString(void) const { /// @param[in] pin GPIO to be used when sending. /// @param[in] inverted Is the output signal to be inverted? /// @param[in] use_modulation Is frequency modulation to be used? -IRHaierACYRW02::IRHaierACYRW02(const uint16_t pin, const bool inverted, - const bool use_modulation) +IRHaierAC176::IRHaierAC176(const uint16_t pin, const bool inverted, + const bool use_modulation) : _irsend(pin, inverted, use_modulation) { stateReset(); } /// Set up hardware to be able to send a message. -void IRHaierACYRW02::begin(void) { _irsend.begin(); } +void IRHaierAC176::begin(void) { _irsend.begin(); } -#if SEND_HAIER_AC_YRW02 +#if SEND_HAIER_AC176 /// Send the current internal state as an IR message. /// @param[in] repeat Nr. of times the message will be repeated. -void IRHaierACYRW02::send(const uint16_t repeat) { - _irsend.sendHaierACYRW02(getRaw(), kHaierACYRW02StateLength, repeat); +void IRHaierAC176::send(const uint16_t repeat) { + _irsend.sendHaierAC176(getRaw(), kHaierAC176StateLength, repeat); } -#endif // SEND_HAIER_AC_YRW02 +#endif // SEND_HAIER_AC176 /// Calculate and set the checksum values for the internal state. -void IRHaierACYRW02::checksum(void) { +void IRHaierAC176::checksum(void) { _.Sum = sumBytes(_.raw, kHaierACYRW02StateLength - 1); + _.Sum2 = sumBytes(_.raw + kHaierACYRW02StateLength, + kHaierAC176StateLength - kHaierACYRW02StateLength - 1); } /// Verify the checksum is valid for a given state. /// @param[in] state The array to verify the checksum of. /// @param[in] length The length of the state array. /// @return true, if the state has a valid checksum. Otherwise, false. -bool IRHaierACYRW02::validChecksum(uint8_t state[], const uint16_t length) { +bool IRHaierAC176::validChecksum(const uint8_t state[], const uint16_t length) { if (length < 2) return false; // 1 byte of data can't have a checksum. - return (state[length - 1] == sumBytes(state, length - 1)); + if (length < kHaierAC176StateLength) { // Is it too short? + // Then it is just a checksum of the whole thing. + return (state[length - 1] == sumBytes(state, length - 1)); + } else { // It is long enough for two checksums. + return (state[kHaierACYRW02StateLength - 1] == + sumBytes(state, kHaierACYRW02StateLength - 1)) && + (state[length - 1] == + sumBytes(state + kHaierACYRW02StateLength, + length - kHaierACYRW02StateLength - 1)); + } } /// Reset the internal state to a fixed known good state. -void IRHaierACYRW02::stateReset(void) { +void IRHaierAC176::stateReset(void) { std::memset(_.raw, 0, sizeof _.raw); - _.Prefix = kHaierAcYrw02Prefix; + _.Prefix2 = kHaierAc176Prefix; _.Temp = kHaierAcDefTemp - kHaierAcMinTemp; _.Health = true; - _.Fan = kHaierAcYrw02FanAuto; + setFan(kHaierAcYrw02FanAuto); _.Power = true; _.Button = kHaierAcYrw02ButtonPower; } /// Get a PTR to the internal state/code for this protocol. /// @return PTR to a code for this protocol based on the current internal state. -uint8_t* IRHaierACYRW02::getRaw(void) { +uint8_t* IRHaierAC176::getRaw(void) { checksum(); return _.raw; } /// Set the internal state from a valid code for this protocol. /// @param[in] new_code A valid code for this protocol. -void IRHaierACYRW02::setRaw(const uint8_t new_code[]) { - memcpy(_.raw, new_code, kHaierACYRW02StateLength); +void IRHaierAC176::setRaw(const uint8_t new_code[]) { + memcpy(_.raw, new_code, kHaierAC176StateLength); } /// Set the Button/Command setting of the A/C. /// @param[in] button The value of the button/command that was pressed. -void IRHaierACYRW02::setButton(uint8_t button) { +void IRHaierAC176::setButton(uint8_t button) { switch (button) { case kHaierAcYrw02ButtonTempUp: case kHaierAcYrw02ButtonTempDown: @@ -597,13 +622,13 @@ void IRHaierACYRW02::setButton(uint8_t button) { /// Get the Button/Command setting of the A/C. /// @return The value of the button/command that was pressed. -uint8_t IRHaierACYRW02::getButton(void) const { +uint8_t IRHaierAC176::getButton(void) const { return _.Button; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. -void IRHaierACYRW02::setMode(uint8_t mode) { +void IRHaierAC176::setMode(uint8_t mode) { uint8_t new_mode = mode; _.Button = kHaierAcYrw02ButtonMode; switch (mode) { @@ -619,13 +644,13 @@ void IRHaierACYRW02::setMode(uint8_t mode) { /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRHaierACYRW02::getMode(void) const { +uint8_t IRHaierAC176::getMode(void) const { return _.Mode; } /// Set the temperature. /// @param[in] celsius The temperature in degrees celsius. -void IRHaierACYRW02::setTemp(const uint8_t celsius) { +void IRHaierAC176::setTemp(const uint8_t celsius) { uint8_t temp = celsius; if (temp < kHaierAcMinTemp) temp = kHaierAcMinTemp; @@ -643,58 +668,58 @@ void IRHaierACYRW02::setTemp(const uint8_t celsius) { /// Get the current temperature setting. /// @return The current setting for temp. in degrees celsius. -uint8_t IRHaierACYRW02::getTemp(void) const { +uint8_t IRHaierAC176::getTemp(void) const { return _.Temp + kHaierAcMinTemp; } /// Set the Health (filter) setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRHaierACYRW02::setHealth(const bool on) { +void IRHaierAC176::setHealth(const bool on) { _.Button = kHaierAcYrw02ButtonHealth; _.Health = on; } /// Get the Health (filter) setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRHaierACYRW02::getHealth(void) const { +bool IRHaierAC176::getHealth(void) const { return _.Health; } /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRHaierACYRW02::getPower(void) const { +bool IRHaierAC176::getPower(void) const { return _.Power; } /// Change the power setting. /// @param[in] on true, the setting is on. false, the setting is off. -void IRHaierACYRW02::setPower(const bool on) { +void IRHaierAC176::setPower(const bool on) { _.Button = kHaierAcYrw02ButtonPower; _.Power = on; } /// Change the power setting to On. -void IRHaierACYRW02::on(void) { setPower(true); } +void IRHaierAC176::on(void) { setPower(true); } /// Change the power setting to Off. -void IRHaierACYRW02::off(void) { setPower(false); } +void IRHaierAC176::off(void) { setPower(false); } /// Get the Sleep setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRHaierACYRW02::getSleep(void) const { +bool IRHaierAC176::getSleep(void) const { return _.Sleep; } /// Set the Sleep setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRHaierACYRW02::setSleep(const bool on) { +void IRHaierAC176::setSleep(const bool on) { _.Button = kHaierAcYrw02ButtonSleep; _.Sleep = on; } /// Get the Turbo setting of the A/C. /// @return The current turbo speed setting. -uint8_t IRHaierACYRW02::getTurbo(void) const { +uint8_t IRHaierAC176::getTurbo(void) const { return _.Turbo; } @@ -702,7 +727,7 @@ uint8_t IRHaierACYRW02::getTurbo(void) const { /// @param[in] speed The desired turbo speed setting. /// @note Valid speeds are kHaierAcYrw02TurboOff, kHaierAcYrw02TurboLow, & /// kHaierAcYrw02TurboHigh. -void IRHaierACYRW02::setTurbo(uint8_t speed) { +void IRHaierAC176::setTurbo(uint8_t speed) { switch (speed) { case kHaierAcYrw02TurboOff: case kHaierAcYrw02TurboLow: @@ -714,32 +739,31 @@ void IRHaierACYRW02::setTurbo(uint8_t speed) { /// Get the current fan speed setting. /// @return The current fan speed. -uint8_t IRHaierACYRW02::getFan(void) const { +uint8_t IRHaierAC176::getFan(void) const { return _.Fan; } /// Set the speed of the fan. /// @param[in] speed The desired setting. -void IRHaierACYRW02::setFan(uint8_t speed) { +void IRHaierAC176::setFan(uint8_t speed) { switch (speed) { case kHaierAcYrw02FanLow: case kHaierAcYrw02FanMed: case kHaierAcYrw02FanHigh: case kHaierAcYrw02FanAuto: _.Fan = speed; + _.Fan2 = (speed == kHaierAcYrw02FanAuto) ? 0 : speed; _.Button = kHaierAcYrw02ButtonFan; } } /// Get the Vertical Swing position setting of the A/C. /// @return The native position/mode. -uint8_t IRHaierACYRW02::getSwing(void) const { - return _.Swing; -} +uint8_t IRHaierAC176::getSwing(void) const { return _.Swing; } /// Set the Vertical Swing mode of the A/C. /// @param[in] pos The position/mode to set the vanes to. -void IRHaierACYRW02::setSwing(uint8_t pos) { +void IRHaierAC176::setSwing(uint8_t pos) { uint8_t newpos = pos; switch (pos) { case kHaierAcYrw02SwingOff: @@ -759,10 +783,94 @@ void IRHaierACYRW02::setSwing(uint8_t pos) { _.Swing = newpos; } + +/// Set the Timer operating mode. +/// @param[in] mode The timer mode to use. +void IRHaierAC176::setTimerMode(const uint8_t mode) { + _.TimerMode = (mode > kHaierAcYrw02OffThenOnTimer) ? kHaierAcYrw02NoTimers + : mode; + switch (_.TimerMode) { + case kHaierAcYrw02NoTimers: + setOnTimer(0); // Disable the On timer. + setOffTimer(0); // Disable the Off timer. + break; + case kHaierAcYrw02OffTimer: + setOnTimer(0); // Disable the On timer. + break; + case kHaierAcYrw02OnTimer: + setOffTimer(0); // Disable the Off timer. + break; + } +} + +/// Get the Timer operating mode. +/// @return The mode of the timer is currently configured to. +uint8_t IRHaierAC176::getTimerMode(void) const { return _.TimerMode; } + +/// Set the number of minutes of the On Timer setting. +/// @param[in] mins Nr. of Minutes for the Timer. `0` means disable the timer. +void IRHaierAC176::setOnTimer(const uint16_t mins) { + const uint16_t nr_mins = std::min((uint16_t)(23 * 60 + 59), mins); + _.OnTimerHrs = nr_mins / 60; + _.OnTimerMins = nr_mins % 60; + + const bool enabled = (nr_mins > 0); + uint8_t mode = getTimerMode(); + switch (mode) { + case kHaierAcYrw02OffTimer: + mode = enabled ? kHaierAcYrw02OffThenOnTimer : mode; + break; + case kHaierAcYrw02OnThenOffTimer: + case kHaierAcYrw02OffThenOnTimer: + mode = enabled ? kHaierAcYrw02OffThenOnTimer : kHaierAcYrw02OffTimer; + break; + default: + // Enable/Disable the On timer for the simple case. + mode = enabled << 1; + } + _.TimerMode = mode; +} + +/// Get the number of minutes of the On Timer setting. +/// @return Nr of minutes. +uint16_t IRHaierAC176::getOnTimer(void) const { + return _.OnTimerHrs * 60 + _.OnTimerMins; +} + +/// Set the number of minutes of the Off Timer setting. +/// @param[in] mins Nr. of Minutes for the Timer. `0` means disable the timer. +void IRHaierAC176::setOffTimer(const uint16_t mins) { + const uint16_t nr_mins = std::min((uint16_t)(23 * 60 + 59), mins); + _.OffTimerHrs = nr_mins / 60; + _.OffTimerMins = nr_mins % 60; + + const bool enabled = (nr_mins > 0); + uint8_t mode = getTimerMode(); + switch (mode) { + case kHaierAcYrw02OnTimer: + mode = enabled ? kHaierAcYrw02OnThenOffTimer : mode; + break; + case kHaierAcYrw02OnThenOffTimer: + case kHaierAcYrw02OffThenOnTimer: + mode = enabled ? kHaierAcYrw02OnThenOffTimer : kHaierAcYrw02OnTimer; + break; + default: + // Enable/Disable the Off timer for the simple case. + mode = enabled; + } + _.TimerMode = mode; +} + +/// Get the number of minutes of the Off Timer setting. +/// @return Nr of minutes. +uint16_t IRHaierAC176::getOffTimer(void) const { + return _.OffTimerHrs * 60 + _.OffTimerMins; +} + /// Convert a stdAc::opmode_t enum into its native mode. /// @param[in] mode The enum to be converted. /// @return The native equivalent of the enum. -uint8_t IRHaierACYRW02::convertMode(const stdAc::opmode_t mode) { +uint8_t IRHaierAC176::convertMode(const stdAc::opmode_t mode) { switch (mode) { case stdAc::opmode_t::kCool: return kHaierAcYrw02Cool; case stdAc::opmode_t::kHeat: return kHaierAcYrw02Heat; @@ -775,7 +883,7 @@ uint8_t IRHaierACYRW02::convertMode(const stdAc::opmode_t mode) { /// Convert a stdAc::fanspeed_t enum into it's native speed. /// @param[in] speed The enum to be converted. /// @return The native equivalent of the enum. -uint8_t IRHaierACYRW02::convertFan(const stdAc::fanspeed_t speed) { +uint8_t IRHaierAC176::convertFan(const stdAc::fanspeed_t speed) { switch (speed) { case stdAc::fanspeed_t::kMin: case stdAc::fanspeed_t::kLow: return kHaierAcYrw02FanLow; @@ -789,7 +897,7 @@ uint8_t IRHaierACYRW02::convertFan(const stdAc::fanspeed_t speed) { /// Convert a stdAc::swingv_t enum into it's native setting. /// @param[in] position The enum to be converted. /// @return The native equivalent of the enum. -uint8_t IRHaierACYRW02::convertSwingV(const stdAc::swingv_t position) { +uint8_t IRHaierAC176::convertSwingV(const stdAc::swingv_t position) { switch (position) { case stdAc::swingv_t::kHighest: case stdAc::swingv_t::kHigh: return kHaierAcYrw02SwingTop; @@ -804,7 +912,7 @@ uint8_t IRHaierACYRW02::convertSwingV(const stdAc::swingv_t position) { /// Convert a native mode into its stdAc equivalent. /// @param[in] mode The native setting to be converted. /// @return The stdAc equivalent of the native setting. -stdAc::opmode_t IRHaierACYRW02::toCommonMode(const uint8_t mode) { +stdAc::opmode_t IRHaierAC176::toCommonMode(const uint8_t mode) { switch (mode) { case kHaierAcYrw02Cool: return stdAc::opmode_t::kCool; case kHaierAcYrw02Heat: return stdAc::opmode_t::kHeat; @@ -817,7 +925,7 @@ stdAc::opmode_t IRHaierACYRW02::toCommonMode(const uint8_t mode) { /// Convert a native fan speed into its stdAc equivalent. /// @param[in] speed The native setting to be converted. /// @return The stdAc equivalent of the native setting. -stdAc::fanspeed_t IRHaierACYRW02::toCommonFanSpeed(const uint8_t speed) { +stdAc::fanspeed_t IRHaierAC176::toCommonFanSpeed(const uint8_t speed) { switch (speed) { case kHaierAcYrw02FanHigh: return stdAc::fanspeed_t::kMax; case kHaierAcYrw02FanMed: return stdAc::fanspeed_t::kMedium; @@ -829,7 +937,7 @@ stdAc::fanspeed_t IRHaierACYRW02::toCommonFanSpeed(const uint8_t speed) { /// Convert a stdAc::swingv_t enum into it's native setting. /// @param[in] pos The enum to be converted. /// @return The native equivalent of the enum. -stdAc::swingv_t IRHaierACYRW02::toCommonSwingV(const uint8_t pos) { +stdAc::swingv_t IRHaierAC176::toCommonSwingV(const uint8_t pos) { switch (pos) { case kHaierAcYrw02SwingTop: return stdAc::swingv_t::kHighest; case kHaierAcYrw02SwingMiddle: return stdAc::swingv_t::kMiddle; @@ -842,7 +950,7 @@ stdAc::swingv_t IRHaierACYRW02::toCommonSwingV(const uint8_t pos) { /// Convert the current internal state into its stdAc::state_t equivalent. /// @return The stdAc equivalent of the native settings. -stdAc::state_t IRHaierACYRW02::toCommon(void) const { +stdAc::state_t IRHaierAC176::toCommon(void) const { stdAc::state_t result; result.protocol = decode_type_t::HAIER_AC_YRW02; result.model = -1; // No models used. @@ -868,7 +976,7 @@ stdAc::state_t IRHaierACYRW02::toCommon(void) const { /// Convert the current internal state into a human readable string. /// @return A human readable string. -String IRHaierACYRW02::toString(void) const { +String IRHaierAC176::toString(void) const { String result = ""; result.reserve(130); // Reserve some heap for the string to reduce fragging. result += addBoolToString(_.Power, kPowerStr, false); @@ -957,8 +1065,74 @@ String IRHaierACYRW02::toString(void) const { result += ')'; result += addBoolToString(_.Sleep, kSleepStr); result += addBoolToString(_.Health, kHealthStr); + const uint8_t tmode = getTimerMode(); + result += addIntToString(tmode, kTimerModeStr); + result += kSpaceLBraceStr; + switch (tmode) { + case kHaierAcYrw02NoTimers: + result += kNAStr; + break; + case kHaierAcYrw02OnTimer: + result += kOnStr; + break; + case kHaierAcYrw02OffTimer: + result += kOffStr; + break; + case kHaierAcYrw02OnThenOffTimer: + result += kOnStr; + result += '-'; + result += kOffStr; + break; + case kHaierAcYrw02OffThenOnTimer: + result += kOffStr; + result += '-'; + result += kOnStr; + break; + default: + result += kUnknownStr; + } + result += ')'; + result += addLabeledString((tmode != kHaierAcYrw02NoTimers && + tmode != kHaierAcYrw02OffTimer) ? + minsToString(getOnTimer()) : kOffStr, kOnTimerStr); + result += addLabeledString((tmode != kHaierAcYrw02NoTimers && + tmode != kHaierAcYrw02OnTimer) ? + minsToString(getOffTimer()) : kOffStr, kOffTimerStr); return result; } +// End of IRHaierAC176 class. + + +/// Class constructor +/// @param[in] pin GPIO to be used when sending. +/// @param[in] inverted Is the output signal to be inverted? +/// @param[in] use_modulation Is frequency modulation to be used? +IRHaierACYRW02::IRHaierACYRW02(const uint16_t pin, const bool inverted, + const bool use_modulation) + : IRHaierAC176(pin, inverted, use_modulation) { stateReset(); } + +#if SEND_HAIER_AC_YRW02 +/// Send the current internal state as an IR message. +/// @param[in] repeat Nr. of times the message will be repeated. +void IRHaierACYRW02::send(const uint16_t repeat) { + _irsend.sendHaierACYRW02(getRaw(), kHaierACYRW02StateLength, repeat); +} +#endif // SEND_HAIER_AC_YRW02 + +/// Set the internal state from a valid code for this protocol. +/// @param[in] new_code A valid code for this protocol. +void IRHaierACYRW02::setRaw(const uint8_t new_code[]) { + memcpy(_.raw, new_code, kHaierACYRW02StateLength); +} + +/// Verify the checksum is valid for a given state. +/// @param[in] state The array to verify the checksum of. +/// @param[in] length The length of the state array. +/// @return true, if the state has a valid checksum. Otherwise, false. +bool IRHaierACYRW02::validChecksum(const uint8_t state[], + const uint16_t length) { + return IRHaierAC176::validChecksum(state, length); +} // End of IRHaierACYRW02 class. #if (DECODE_HAIER_AC || DECODE_HAIER_AC_YRW02) @@ -1039,3 +1213,36 @@ bool IRrecv::decodeHaierACYRW02(decode_results* results, uint16_t offset, return true; } #endif // DECODE_HAIER_AC_YRW02 + +#if DECODE_HAIER_AC176 +/// Decode the supplied Haier 176 bit remote A/C message. +/// Status: STABLE / Known to be working. +/// @param[in,out] results Ptr to the data to decode & where to store the decode +/// result. +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return A boolean. True if it can decode it, false if it can't. +bool IRrecv::decodeHaierAC176(decode_results* results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (strict) { + if (nbits != kHaierAC176Bits) + return false; // Not strictly a HAIER_AC176 message. + } + + // The protocol is almost exactly the same as HAIER_AC + if (!decodeHaierAC(results, offset, nbits, false)) return false; + + // Compliance + if (strict) { + if (results->state[0] != kHaierAcYrw02Prefix) return false; + if (!IRHaierAC176::validChecksum(results->state, nbits / 8)) return false; + } + + // Success + // It looks correct, but we haven't check the checksum etc. + results->decode_type = HAIER_AC176; + return true; +} +#endif // DECODE_HAIER_AC176 diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Haier.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.h similarity index 78% rename from lib/lib_basic/IRremoteESP8266/src/ir_Haier.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.h index e79292028..2e287cd12 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Haier.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Haier.h @@ -13,6 +13,8 @@ // Brand: Haier, Model: HSU07-HEA03 remote (HAIER_AC) // Brand: Haier, Model: YR-W02 remote (HAIER_AC_YRW02) // Brand: Haier, Model: HSU-09HMC203 A/C (HAIER_AC_YRW02) +// Brand: Mabe, Model: MMI18HDBWCA6MI8 A/C (HAIER_AC176) +// Brand: Mabe, Model: V12843 HJ200223 remote (HAIER_AC176) #ifndef IR_HAIER_H_ #define IR_HAIER_H_ @@ -177,6 +179,7 @@ union HaierYRW02Protocol{ }; const uint8_t kHaierAcYrw02Prefix = 0xA6; +const uint8_t kHaierAc176Prefix = 0xB7; const uint8_t kHaierAcYrw02SwingOff = 0x0; const uint8_t kHaierAcYrw02SwingTop = 0x1; @@ -188,7 +191,7 @@ const uint8_t kHaierAcYrw02SwingAuto = 0xC; // Airflow const uint8_t kHaierAcYrw02FanHigh = 0b001; const uint8_t kHaierAcYrw02FanMed = 0b010; const uint8_t kHaierAcYrw02FanLow = 0b011; -const uint8_t kHaierAcYrw02FanAuto = 0b101; +const uint8_t kHaierAcYrw02FanAuto = 0b101; // HAIER_AC176 uses `0` in Fan2 const uint8_t kHaierAcYrw02TurboOff = 0x0; const uint8_t kHaierAcYrw02TurboHigh = 0x1; @@ -210,6 +213,76 @@ const uint8_t kHaierAcYrw02ButtonHealth = 0x7; const uint8_t kHaierAcYrw02ButtonTurbo = 0x8; const uint8_t kHaierAcYrw02ButtonSleep = 0xB; +const uint8_t kHaierAcYrw02NoTimers = 0b000; +const uint8_t kHaierAcYrw02OffTimer = 0b001; +const uint8_t kHaierAcYrw02OnTimer = 0b010; +const uint8_t kHaierAcYrw02OnThenOffTimer = 0b100; +const uint8_t kHaierAcYrw02OffThenOnTimer = 0b101; + +/// Native representation of a Haier 176 bit A/C message. +union HaierAc176Protocol{ + uint8_t raw[kHaierAC176StateLength]; ///< The state in native form + struct { + // Byte 0 + uint8_t Prefix :8; + // Byte 1 + uint8_t Swing :4; + uint8_t Temp :4; // 16C~30C + // Byte 2 + uint8_t :8; + // Byte 3 + uint8_t :1; + uint8_t Health :1; + uint8_t :3; + uint8_t TimerMode :3; + // Byte 4 + uint8_t :6; + uint8_t Power :1; + uint8_t :1; + // Byte 5 + uint8_t OffTimerHrs :5; + uint8_t Fan :3; + // Byte 6 + uint8_t OffTimerMins:6; + uint8_t Turbo:2; + // Byte 7 + uint8_t OnTimerHrs :5; + uint8_t Mode :3; + // Byte 8 + uint8_t OnTimerMins :6; + uint8_t :1; + uint8_t Sleep :1; + // Byte 9 + uint8_t :8; + // Byte 10 + uint8_t :8; + // Byte 11 + uint8_t :8; + // Byte 12 + uint8_t Button :4; + uint8_t :4; + // Byte 13 + uint8_t Sum :8; + // Byte 14 + uint8_t Prefix2 :8; + // Byte 15 + uint8_t :8; + // Byte 16 + uint8_t :6; + uint8_t Fan2 :2; + // Byte 17 + uint8_t :8; + // Byte 18 + uint8_t :8; + // Byte 19 + uint8_t :8; + // Byte 20 + uint8_t :8; + // Byte 21 + uint8_t Sum2 :8; + }; +}; + // Legacy Haier YRW02 remote defines. #define HAIER_AC_YRW02_SWING_OFF kHaierAcYrw02SwingOff #define HAIER_AC_YRW02_SWING_TOP kHaierAcYrw02SwingTop @@ -254,6 +327,7 @@ class IRHaierAC { int8_t calibrate(void) { return _irsend.calibrate(); } #endif // SEND_HAIER_AC void begin(void); + void stateReset(void); void setCommand(const uint8_t command); uint8_t getCommand(void) const; @@ -306,24 +380,25 @@ class IRHaierAC { /// @endcond #endif HaierProtocol _; - void stateReset(void); void checksum(void); }; -/// Class for handling detailed Haier ACYRW02 A/C messages. -class IRHaierACYRW02 { +/// Class for handling detailed Haier 176 bit A/C messages. +class IRHaierAC176 { + friend class IRHaierACYRW02; public: - explicit IRHaierACYRW02(const uint16_t pin, const bool inverted = false, - const bool use_modulation = true); -#if SEND_HAIER_AC_YRW02 - void send(const uint16_t repeat = kHaierAcYrw02DefaultRepeat); + explicit IRHaierAC176(const uint16_t pin, const bool inverted = false, + const bool use_modulation = true); +#if SEND_HAIER_AC176 + virtual void send(const uint16_t repeat = kHaierAc176DefaultRepeat); /// Run the calibration to calculate uSec timing offsets for this platform. /// @return The uSec timing offset needed per modulation of the IR Led. /// @note This will produce a 65ms IR signal pulse at 38kHz. /// Only ever needs to be run once per object instantiation, if at all. int8_t calibrate(void) { return _irsend.calibrate(); } -#endif // SEND_HAIER_AC_YRW02 +#endif // SEND_HAIER_AC176 void begin(void); + void stateReset(void); void setButton(const uint8_t button); uint8_t getButton(void) const; @@ -353,10 +428,17 @@ class IRHaierACYRW02 { uint8_t getSwing(void) const; void setSwing(const uint8_t pos); + void setTimerMode(const uint8_t setting); + uint8_t getTimerMode(void) const; + void setOnTimer(const uint16_t mins); + uint16_t getOnTimer(void) const; + void setOffTimer(const uint16_t mins); + uint16_t getOffTimer(void) const; + uint8_t* getRaw(void); - void setRaw(const uint8_t new_code[]); - static bool validChecksum(uint8_t state[], - const uint16_t length = kHaierACYRW02StateLength); + virtual void setRaw(const uint8_t new_code[]); + static bool validChecksum(const uint8_t state[], + const uint16_t length = kHaierAC176StateLength); static uint8_t convertMode(const stdAc::opmode_t mode); static uint8_t convertFan(const stdAc::fanspeed_t speed); static uint8_t convertSwingV(const stdAc::swingv_t position); @@ -374,8 +456,26 @@ class IRHaierACYRW02 { IRsendTest _irsend; ///< Instance of the testing IR send class /// @endcond #endif // UNIT_TEST - HaierYRW02Protocol _; - void stateReset(void); + HaierAc176Protocol _; void checksum(void); }; + +/// Class for handling detailed Haier ACYRW02 A/C messages. +class IRHaierACYRW02 : public IRHaierAC176 { + public: + explicit IRHaierACYRW02(const uint16_t pin, const bool inverted = false, + const bool use_modulation = true); +#if SEND_HAIER_AC_YRW02 + void send(const uint16_t repeat = kHaierAcYrw02DefaultRepeat) override; + /// Run the calibration to calculate uSec timing offsets for this platform. + /// @return The uSec timing offset needed per modulation of the IR Led. + /// @note This will produce a 65ms IR signal pulse at 38kHz. + /// Only ever needs to be run once per object instantiation, if at all. + int8_t calibrate(void) { return _irsend.calibrate(); } +#endif // SEND_HAIER_AC_YRW02 + void setRaw(const uint8_t new_code[]) override; + static bool validChecksum( + const uint8_t state[], + const uint16_t length = kHaierACYRW02StateLength); +}; #endif // IR_HAIER_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Hitachi.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Hitachi.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Hitachi.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Hitachi.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Hitachi.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Hitachi.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Hitachi.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Hitachi.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Inax.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Inax.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Inax.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Inax.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_JVC.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_JVC.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_JVC.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_JVC.cpp diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.cpp new file mode 100644 index 000000000..39b61744e --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.cpp @@ -0,0 +1,502 @@ +// Copyright 2021 Davide Depau + +/// @file +/// @brief Support for Kelan AC protocol. +/// Both sending and decoding should be functional for models of series +/// KELON ON/OFF 9000-12000. +/// All features of the standard remote are implemented. +/// +/// @note Unsupported: +/// - Explicit on/off due to AC unit limitations +/// - Explicit swing position due to AC unit limitations +/// - Fahrenheit. + +#include + +#include "ir_Kelon.h" + +#include "IRrecv.h" +#include "IRsend.h" +#include "IRutils.h" +#include "IRtext.h" + + +using irutils::addBoolToString; +using irutils::addIntToString; +using irutils::addSignedIntToString; +using irutils::addModeToString; +using irutils::addFanToString; +using irutils::addTempToString; +using irutils::addLabeledString; +using irutils::minsToString; + +// Constants +const uint16_t kKelonHdrMark = 9000; +const uint16_t kKelonHdrSpace = 4600; +const uint16_t kKelonBitMark = 560; +const uint16_t kKelonOneSpace = 1680; +const uint16_t kKelonZeroSpace = 600; +const uint32_t kKelonGap = 2 * kDefaultMessageGap; +const uint16_t kKelonFreq = 38000; + +#if SEND_KELON + +/// Send a Kelon message. +/// Status: STABLE / Working. +/// @param[in] data The data to be transmitted. +/// @param[in] nbits Nr. of bits of data to be sent. +/// @param[in] repeat The number of times the command is to be repeated. +void IRsend::sendKelon(const uint64_t data, const uint16_t nbits, + const uint16_t repeat) { + sendGeneric(kKelonHdrMark, kKelonHdrSpace, + kKelonBitMark, kKelonOneSpace, + kKelonBitMark, kKelonZeroSpace, + kKelonBitMark, kKelonGap, + data, nbits, kKelonFreq, false, // LSB First. + repeat, 50); +} + +#endif // SEND_KELON + +#if DECODE_KELON +/// Decode the supplied Kelon message. +/// Status: STABLE / Working. +/// @param[in,out] results Ptr to the data to decode & where to store the result +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return True if it can decode it, false if it can't. + +bool IRrecv::decodeKelon(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (strict && nbits != kKelonBits) { + return false; + } + if (!matchGeneric(results->rawbuf + offset, results->state, + results->rawlen - offset, nbits, + kKelonHdrMark, kKelonHdrSpace, + kKelonBitMark, kKelonOneSpace, + kKelonBitMark, kKelonZeroSpace, + kKelonBitMark, 0, false, + _tolerance, 0, false)) { + return false; + } + + results->decode_type = decode_type_t::KELON; + results->bits = nbits; + return true; +} + +#endif // DECODE_KELON + +/// Class constructor +/// @param[in] pin GPIO to be used when sending. +/// @param[in] inverted Is the output signal to be inverted? +/// @param[in] use_modulation Is frequency modulation to be used? +IRKelonAc::IRKelonAc(const uint16_t pin, const bool inverted, + const bool use_modulation) + : _irsend{pin, inverted, use_modulation}, _{} { stateReset(); } + +/// Reset the internals of the object to a known good state. +void IRKelonAc::stateReset() { + _.raw = 0L; + _.preamble[0] = 0b10000011; + _.preamble[1] = 0b00000110; +} + +#if SEND_KELON + +/// Send the current internal state as an IR message. +/// @param[in] repeat Nr. of times the message will be repeated. +void IRKelonAc::send(const uint16_t repeat) { + _irsend.sendKelon(getRaw(), kKelonBits, repeat); + + // Reset toggle flags + _.PowerToggle = false; + _.SwingVToggle = false; + + // Remove the timer time setting + _.TimerHours = 0; + _.TimerHalfHour = 0; +} + +/// Ensures the AC is on or off by exploiting the fact that setting +/// it to "smart" will always turn it on if it's off. +/// This method will send 2 commands to the AC to do the trick +/// @param[in] on Whether to ensure the AC is on or off +void IRKelonAc::ensurePower(bool on) { + // Try to avoid turning on the compressor for this operation. + // "Dry grade", when in "smart" mode, acts as a temperature offset that + // the user can configure if they feel too cold or too hot. By setting it + // to +2 we're setting the temperature to ~28°C, which will effectively + // set the AC to fan mode. + int8_t previousDry = getDryGrade(); + setDryGrade(2); + setMode(kKelonModeSmart); + send(); + + setDryGrade(previousDry); + setMode(_previousMode); + send(); + + // Now we're sure it's on. Turn it back off. The AC seems to turn back on if + // we don't send this separately + if (!on) { + setTogglePower(true); + send(); + } +} + +#endif // SEND_KELON + +/// Set up hardware to be able to send a message. +void IRKelonAc::begin() { + _irsend.begin(); +} + +/// Request toggling power - will be reset to false after sending +/// @param[in] toggle Whether to toggle the power state +void IRKelonAc::setTogglePower(const bool toggle) { + _.PowerToggle = toggle; +} + +/// Get whether toggling power will be requested +/// @return The power toggle state +bool IRKelonAc::getTogglePower() const { + return _.PowerToggle; +} + +/// Set the temperature setting. +/// @param[in] degrees The temperature in degrees celsius. +void IRKelonAc::setTemp(const uint8_t degrees) { + uint8_t temp = std::max(kKelonMinTemp, degrees); + temp = std::min(kKelonMaxTemp, temp); + _previousTemp = _.Temperature; + _.Temperature = temp - kKelonMinTemp; +} + +/// Get the current temperature setting. +/// @return Get current setting for temp. in degrees celsius. +uint8_t IRKelonAc::getTemp() const { + return _.Temperature + kKelonMinTemp; +} + +/// Set the speed of the fan. +/// @param[in] speed 0 is auto, 1-5 is the speed +void IRKelonAc::setFan(const uint8_t speed) { + uint8_t fan = std::min(speed, kKelonFanMax); + + _previousFan = _.Fan; + // Note: Kelon fan speeds are backwards! This code maps the range 0,1:3 to + // 0,3:1 to save the API's user's sanity. + _.Fan = ((static_cast(fan) - 4) * -1) % 4; +} + +/// Get the current fan speed setting. +/// @return The current fan speed. +uint8_t IRKelonAc::getFan() const { + return ((static_cast(_.Fan) - 4) * -1) % 4;; +} + +/// Set the dehumidification intensity. +/// @param[in] grade has to be in the range [-2 : +2] +void IRKelonAc::setDryGrade(const int8_t grade) { + int8_t drygrade = std::max(kKelonDryGradeMin, grade); + drygrade = std::min(kKelonDryGradeMax, drygrade); + + // Two's complement is clearly too bleeding edge for this manufacturer + uint8_t outval; + if (drygrade < 0) { + outval = 0b100 | (-drygrade & 0b011); + } else { + outval = drygrade & 0b011; + } + _.DehumidifierGrade = outval; +} + +/// Get the current dehumidification intensity setting. In smart mode, this +/// controls the temperature adjustment. +/// @return The current dehumidification intensity. +int8_t IRKelonAc::getDryGrade() const { + return static_cast(_.DehumidifierGrade & 0b011) * + ((_.DehumidifierGrade & 0b100) ? -1 : 1); +} + +/// Set the desired operation mode. +/// @param[in] mode The desired operation mode. +void IRKelonAc::setMode(const uint8_t mode) { + if (_.Mode == kKelonModeSmart || _.Mode == kKelonModeFan || + _.Mode == kKelonModeDry) { + _.Temperature = _previousTemp; + } + if (_.SuperCoolEnabled1) { + // Cancel supercool + _.SuperCoolEnabled1 = false; + _.SuperCoolEnabled2 = false; + _.Temperature = _previousTemp; + _.Fan = _previousFan; + } + _previousMode = _.Mode; + + switch (mode) { + case kKelonModeSmart: + setTemp(26); + _.SmartModeEnabled = true; + _.Mode = mode; + break; + case kKelonModeDry: + case kKelonModeFan: + setTemp(25); + // fallthrough + case kKelonModeCool: + case kKelonModeHeat: + _.Mode = mode; + // fallthrough + default: + _.SmartModeEnabled = false; + } +} + +/// Get the current operation mode setting. +/// @return The current operation mode. +uint8_t IRKelonAc::getMode() const { + return _.Mode; +} + +/// Request toggling the vertical swing - will be reset to false after sending +/// @param[in] toggle If true, the swing mode will be toggled when sent. +void IRKelonAc::setToggleSwingVertical(const bool toggle) { + _.SwingVToggle = toggle; +} + +/// Get whether the swing mode is set to be toggled +/// @return Whether the toggle bit is set +bool IRKelonAc::getToggleSwingVertical() const { + return _.SwingVToggle; +} + +/// Control the current sleep (quiet) setting. +/// @param[in] on The desired setting. +void IRKelonAc::setSleep(const bool on) { + _.SleepEnabled = on; +} + +/// Is the sleep setting on? +/// @return The current value. +bool IRKelonAc::getSleep() const { + return _.SleepEnabled; +} + +/// Control the current super cool mode setting. +/// @param[in] on The desired setting. +void IRKelonAc::setSupercool(const bool on) { + if (on) { + setTemp(kKelonMinTemp); + setMode(kKelonModeCool); + setFan(kKelonFanMax); + } else { + // All reverts to previous are handled by setMode as needed + setMode(_previousMode); + } + _.SuperCoolEnabled1 = on; + _.SuperCoolEnabled2 = on; +} + +/// Is the super cool mode setting on? +/// @return The current value. +bool IRKelonAc::getSupercool() const { + return _.SuperCoolEnabled1; +} + +/// Set the timer time and enable it. Timer is an off timer if the unit is on, +/// it is an on timer if the unit is off. +/// Only multiples of 30m are supported for < 10h, then only multiples of 60m +/// @param[in] mins Nr. of minutes +void IRKelonAc::setTimer(uint16_t mins) { + const uint16_t minutes = std::min(static_cast(mins), 24 * 60); + + if (minutes / 60 >= 10) { + uint8_t hours = minutes / 60 + 10; + _.TimerHalfHour = hours & 1; + _.TimerHours = hours >> 1; + } else { + _.TimerHalfHour = (minutes % 60) >= 30 ? 1 : 0; + _.TimerHours = minutes / 60; + } + + setTimerEnabled(true); +} + +/// Get the set timer. Timer set time is deleted once the command is sent, so +/// calling this after send() will return 0. +/// The AC unit will continue keeping track of the remaining time unless it is +/// later disabled. +/// @return The timer set minutes +uint16_t IRKelonAc::getTimer() const { + if (_.TimerHours >= 10) { + return ((uint16_t) ((_.TimerHours << 1) | _.TimerHalfHour) - 10) * 60; + } + return (((uint16_t) _.TimerHours) * 60) + (_.TimerHalfHour ? 30 : 0); +} + +/// Enable or disable the timer. Note that in order to enable the timer the +/// minutes must be set with setTimer(). +/// @param[in] on Whether to enable or disable the timer +void IRKelonAc::setTimerEnabled(bool on) { + _.TimerEnabled = on; +} + +/// Get the current timer status +/// @return Whether the timer is enabled. +bool IRKelonAc::getTimerEnabled() const { + return _.TimerEnabled; +} + + +/// Get the raw state of the object, suitable to be sent with the appropriate +/// IRsend object method. +/// @return A PTR to the internal state. +uint64_t IRKelonAc::getRaw() const { + return _.raw; +} + +/// Set the raw state of the object. +/// @param[in] new_code The raw state from the native IR message. +void IRKelonAc::setRaw(const uint64_t new_code) { + _.raw = new_code; +} + +/// Convert a standard A/C mode (stdAc::opmode_t) into it a native mode. +/// @param[in] mode A stdAc::opmode_t operation mode. +/// @return The native mode equivalent. +uint8_t IRKelonAc::convertMode(const stdAc::opmode_t mode) { + switch (mode) { + case stdAc::opmode_t::kCool: + return kKelonModeCool; + case stdAc::opmode_t::kHeat: + return kKelonModeHeat; + case stdAc::opmode_t::kDry: + return kKelonModeDry; + case stdAc::opmode_t::kFan: + return kKelonModeFan; + default: + return kKelonModeSmart; + } +} + +/// Convert a standard A/C fan speed (stdAc::fanspeed_t) into it a native speed. +/// @param[in] fan A stdAc::fanspeed_t fan speed +/// @return The native speed equivalent. +uint8_t IRKelonAc::convertFan(stdAc::fanspeed_t fan) { + switch (fan) { + case stdAc::fanspeed_t::kMin: + case stdAc::fanspeed_t::kLow: + return kKelonFanMin; + case stdAc::fanspeed_t::kMedium: + return kKelonFanMedium; + case stdAc::fanspeed_t::kHigh: + case stdAc::fanspeed_t::kMax: + return kKelonFanMax; + default: + return kKelonFanAuto; + } +} + +/// Convert a native mode to it's stdAc::opmode_t equivalent. +/// @param[in] mode A native operating mode value. +/// @return The stdAc::opmode_t equivalent. +stdAc::opmode_t IRKelonAc::toCommonMode(const uint8_t mode) { + switch (mode) { + case kKelonModeCool: + return stdAc::opmode_t::kCool; + case kKelonModeHeat: + return stdAc::opmode_t::kHeat; + case kKelonModeDry: + return stdAc::opmode_t::kDry; + case kKelonModeFan: + return stdAc::opmode_t::kFan; + default: + return stdAc::opmode_t::kAuto; + } +} + +/// Convert a native fan speed to it's stdAc::fanspeed_t equivalent. +/// @param[in] speed A native fan speed value. +/// @return The stdAc::fanspeed_t equivalent. +stdAc::fanspeed_t IRKelonAc::toCommonFanSpeed(const uint8_t speed) { + switch (speed) { + case kKelonFanMin: + return stdAc::fanspeed_t::kLow; + case kKelonFanMedium: + return stdAc::fanspeed_t::kMedium; + case kKelonFanMax: + return stdAc::fanspeed_t::kHigh; + default: + return stdAc::fanspeed_t::kAuto; + } +} + +/// Convert the internal A/C object state to it's stdAc::state_t equivalent. +/// @return A stdAc::state_t containing the current settings. +stdAc::state_t IRKelonAc::toCommon(const stdAc::state_t *prev) const { + stdAc::state_t result{}; + result.protocol = decode_type_t::KELON; + result.model = -1; // Unused. + result.mode = toCommonMode(getMode()); + result.celsius = true; + result.degrees = getTemp(); + result.fanspeed = toCommonFanSpeed(getFan()); + result.turbo = getSupercool(); + result.sleep = getSleep() ? 0 : -1; + // Not supported. + // N/A, AC only supports toggling it + result.power = (prev == nullptr || prev->power) ^ _.PowerToggle; + // N/A, AC only supports toggling it + result.swingv = stdAc::swingv_t::kAuto; + if (prev != nullptr && + (prev->swingv != stdAc::swingv_t::kAuto) ^ _.SwingVToggle) { + result.swingv = stdAc::swingv_t::kOff; + } + result.swingh = stdAc::swingh_t::kOff; + result.light = true; + result.beep = true; + result.quiet = false; + result.filter = false; + result.clean = false; + result.econo = false; + result.clock = -1; + return result; +} + +/// Convert the internal settings into a human readable string. +/// @return A String. +String IRKelonAc::toString() const { + String result = ""; + // Reserve some heap for the string to reduce fragging. + result.reserve(160); + result += addTempToString(getTemp(), true, false); + result += addModeToString(_.Mode, kKelonModeSmart, kKelonModeCool, + kKelonModeHeat, kKelonModeDry, kKelonModeFan); + result += addFanToString(_.Fan, kKelonFanMax, kKelonFanMin, kKelonFanAuto, + -1, kKelonFanMedium, kKelonFanMax); + result += addBoolToString(_.SleepEnabled, kSleepStr); + result += addSignedIntToString(getDryGrade(), kDryStr); + result += addLabeledString( + getTimerEnabled() + ? ( + getTimer() > 0 + ? minsToString(getTimer()) + : kOnStr + ) + : kOffStr, + kTimerStr); + result += addBoolToString(getSupercool(), kTurboStr); + if (getTogglePower()) { + result += addBoolToString(true, kPowerToggleStr); + } + if (getToggleSwingVertical()) { + result += addBoolToString(true, kSwingVToggleStr); + } + return result; +} diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.h new file mode 100644 index 000000000..498650623 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelon.h @@ -0,0 +1,170 @@ +// Copyright 2021 Davide Depau + +/// @file +/// @brief Support for Kelan AC protocol. +/// Both sending and decoding should be functional for models of series KELON +/// ON/OFF 9000-12000. +/// All features of the standard remote are implemented. +/// +/// @note Unsupported: +/// - Explicit on/off due to AC unit limitations +/// - Explicit swing position due to AC unit limitations +/// - Fahrenheit. +// Supports: +// Brand: Kelon, Model: ON/OFF 9000-12000 + +#ifndef IR_KELON_H_ +#define IR_KELON_H_ + +#ifdef UNIT_TEST +#include "IRsend_test.h" +#endif + +#include "IRremoteESP8266.h" +#include "IRsend.h" +#include "IRutils.h" + +union KelonProtocol { + uint64_t raw; + + struct { + uint8_t preamble[2]; + uint8_t Fan: 2; + uint8_t PowerToggle: 1; + uint8_t SleepEnabled: 1; + uint8_t DehumidifierGrade: 3; + uint8_t SwingVToggle: 1; + uint8_t Mode: 3; + uint8_t TimerEnabled: 1; + uint8_t Temperature: 4; + uint8_t TimerHalfHour: 1; + uint8_t TimerHours: 6; + uint8_t SmartModeEnabled: 1; + uint8_t pad1: 4; + uint8_t SuperCoolEnabled1: 1; + uint8_t pad2: 2; + uint8_t SuperCoolEnabled2: 1; + }; +}; + +// Constants +const uint8_t kKelonModeHeat = 0; +const uint8_t kKelonModeSmart = 1; // (temp = 26C, but not shown) +const uint8_t kKelonModeCool = 2; +const uint8_t kKelonModeDry = 3; // (temp = 25C, but not shown) +const uint8_t kKelonModeFan = 4; // (temp = 25C, but not shown) +const uint8_t kKelonFanAuto = 0; +// Note! Kelon fan speeds are actually 0:AUTO, 1:MAX, 2:MED, 3:MIN +// Since this is insane, I decided to invert them in the public API, they are +// converted back in setFan/getFan +const uint8_t kKelonFanMin = 1; +const uint8_t kKelonFanMedium = 2; +const uint8_t kKelonFanMax = 3; + +const int8_t kKelonDryGradeMin = -2; +const int8_t kKelonDryGradeMax = +2; +const uint8_t kKelonMinTemp = 18; +const uint8_t kKelonMaxTemp = 32; + + +class IRKelonAc { + public: + explicit IRKelonAc(uint16_t pin, bool inverted = false, + bool use_modulation = true); + + void stateReset(void); + + #if SEND_KELON + + void send(const uint16_t repeat = kNoRepeat); + + /// Run the calibration to calculate uSec timing offsets for this platform. + /// @return The uSec timing offset needed per modulation of the IR Led. + /// @note This will produce a 65ms IR signal pulse at 38kHz. + /// Only ever needs to be run once per object instantiation, if at all. + int8_t calibrate(void) { return _irsend.calibrate(); } + + /// Since the AC does not support actually setting the power state to a known + /// value, this utility allow ensuring the AC is on or off by exploiting + /// the fact that the AC, according to the user manual, will always turn on + /// when setting it to "smart" or "super" mode. + void ensurePower(const bool on); + + #endif + + + void begin(void); + + void setTogglePower(const bool toggle); + + bool getTogglePower(void) const; + + void setTemp(const uint8_t degrees); + + uint8_t getTemp(void) const; + + void setFan(const uint8_t speed); + + uint8_t getFan(void) const; + + void setDryGrade(const int8_t grade); + + int8_t getDryGrade(void) const; + + void setMode(const uint8_t mode); + + uint8_t getMode(void) const; + + void setToggleSwingVertical(const bool toggle); + + bool getToggleSwingVertical(void) const; + + void setSleep(const bool on); + + bool getSleep(void) const; + + void setSupercool(const bool on); + + bool getSupercool(void) const; + + void setTimer(const uint16_t mins); + + uint16_t getTimer(void) const; + + void setTimerEnabled(const bool on); + + bool getTimerEnabled(void) const; + + uint64_t getRaw(void) const; + + void setRaw(const uint64_t new_code); + + static uint8_t convertMode(const stdAc::opmode_t mode); + + static uint8_t convertFan(const stdAc::fanspeed_t fan); + + static stdAc::opmode_t toCommonMode(const uint8_t mode); + + static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); + + stdAc::state_t toCommon(const stdAc::state_t *prev = nullptr) const; + + String toString(void) const; + + private: +#ifndef UNIT_TEST + IRsend _irsend; ///< Instance of the IR send class +#else // UNIT_TEST + /// @cond IGNORE + IRsendTest _irsend; ///< Instance of the testing IR send class + /// @endcond +#endif // UNIT_TEST + KelonProtocol _; + + // Used when exiting supercool mode + uint8_t _previousMode = 0; + uint8_t _previousTemp = kKelonMinTemp; + uint8_t _previousFan = kKelonFanAuto; +}; + +#endif // IR_KELON_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Kelvinator.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelvinator.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Kelvinator.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelvinator.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Kelvinator.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelvinator.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Kelvinator.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Kelvinator.h diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.cpp new file mode 100644 index 000000000..d817fbdb7 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.cpp @@ -0,0 +1,838 @@ +// Copyright 2015 Darryl Smith +// Copyright 2015 cheaplin +// Copyright 2017-2021 David Conran + +/// @file +/// @brief Support for LG protocols. +/// LG decode originally added by Darryl Smith (based on the JVC protocol) +/// LG send originally added by https://github.com/chaeplin +/// @see https://github.com/arendst/Tasmota/blob/54c2eb283a02e4287640a4595e506bc6eadbd7f2/sonoff/xdrv_05_irremote.ino#L327-438 +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1513 + +#include "ir_LG.h" +#include +#include "IRac.h" +#include "IRrecv.h" +#include "IRsend.h" +#include "IRtext.h" +#include "IRutils.h" + +using irutils::addBoolToString; +using irutils::addModeToString; +using irutils::addModelToString; +using irutils::addFanToString; +using irutils::addTempToString; +using irutils::addSwingVToString; +using irutils::addIntToString; + + +// Constants +// Common timings +const uint16_t kLgBitMark = 550; ///< uSeconds. +const uint16_t kLgOneSpace = 1600; ///< uSeconds. +const uint16_t kLgZeroSpace = 550; ///< uSeconds. +const uint16_t kLgRptSpace = 2250; ///< uSeconds. +const uint16_t kLgMinGap = 39750; ///< uSeconds. +const uint32_t kLgMinMessageLength = 108050; ///< uSeconds. +// LG (28 Bit) +const uint16_t kLgHdrMark = 8500; ///< uSeconds. +const uint16_t kLgHdrSpace = 4250; ///< uSeconds. +// LG (32 Bit) +const uint16_t kLg32HdrMark = 4500; ///< uSeconds. +const uint16_t kLg32HdrSpace = 4450; ///< uSeconds. +const uint16_t kLg32RptHdrMark = 8950; ///< uSeconds. +// LG2 (28 Bit) +const uint16_t kLg2HdrMark = 3200; ///< uSeconds. +const uint16_t kLg2HdrSpace = 9900; ///< uSeconds. +const uint16_t kLg2BitMark = 480; ///< uSeconds. + +const uint32_t kLgAcAKB74955603DetectionMask = 0x0000080; +const uint8_t kLgAcChecksumSize = 4; ///< Size in bits. +// Signature has the checksum removed, and another bit to match both Auto & Off. +const uint8_t kLgAcSwingHOffsetSize = kLgAcChecksumSize + 1; +const uint32_t kLgAcSwingHSignature = kLgAcSwingHOff >> kLgAcSwingHOffsetSize; +const uint32_t kLgAcVaneSwingVBase = 0x8813200; + +#ifdef VANESWINGVPOS +#undef VANESWINGVPOS +#endif +#define VANESWINGVPOS(code) (code % kLgAcVaneSwingVSize) + +#if SEND_LG +/// Send an LG formatted message. (LG) +/// Status: Beta / Should be working. +/// @param[in] data The message to be sent. +/// @param[in] nbits The number of bits of message to be sent. +/// Typically kLgBits or kLg32Bits. +/// @param[in] repeat The number of times the command is to be repeated. +/// @note LG has a separate message to indicate a repeat, like NEC does. +void IRsend::sendLG(uint64_t data, uint16_t nbits, uint16_t repeat) { + uint16_t repeatHeaderMark = 0; + uint8_t duty = kDutyDefault; + + if (nbits >= kLg32Bits) { + // LG 32bit protocol is near identical to Samsung except for repeats. + sendSAMSUNG(data, nbits, 0); // Send it as a single Samsung message. + repeatHeaderMark = kLg32RptHdrMark; + duty = 33; + repeat++; + } else { + // LG (28-bit) protocol. + repeatHeaderMark = kLgHdrMark; + sendGeneric(kLgHdrMark, kLgHdrSpace, kLgBitMark, kLgOneSpace, kLgBitMark, + kLgZeroSpace, kLgBitMark, kLgMinGap, kLgMinMessageLength, data, + nbits, 38, true, 0, // Repeats are handled later. + duty); + } + + // Repeat + // Protocol has a mandatory repeat-specific code sent after every command. + if (repeat) + sendGeneric(repeatHeaderMark, kLgRptSpace, 0, 0, 0, 0, // No data is sent. + kLgBitMark, kLgMinGap, kLgMinMessageLength, 0, 0, // No data. + 38, true, repeat - 1, duty); +} + +/// Send an LG Variant-2 formatted message. (LG2) +/// Status: Beta / Should be working. +/// @param[in] data The message to be sent. +/// @param[in] nbits The number of bits of message to be sent. +/// Typically kLgBits or kLg32Bits. +/// @param[in] repeat The number of times the command is to be repeated. +/// @note LG has a separate message to indicate a repeat, like NEC does. +void IRsend::sendLG2(uint64_t data, uint16_t nbits, uint16_t repeat) { + if (nbits >= kLg32Bits) { + // Let the original routine handle it. + sendLG(data, nbits, repeat); // Send it as a single Samsung message. + return; + } + + // LGv2 (28-bit) protocol. + sendGeneric(kLg2HdrMark, kLg2HdrSpace, kLg2BitMark, kLgOneSpace, kLg2BitMark, + kLgZeroSpace, kLg2BitMark, kLgMinGap, kLgMinMessageLength, data, + nbits, 38, true, 0, // Repeats are handled later. + 33); // Use a duty cycle of 33% (Testing) + + // TODO(crackn): Verify the details of what repeat messages look like. + // Repeat + // Protocol has a mandatory repeat-specific code sent after every command. + if (repeat) + sendGeneric(kLg2HdrMark, kLgRptSpace, 0, 0, 0, 0, // No data is sent. + kLgBitMark, kLgMinGap, kLgMinMessageLength, 0, 0, // No data. + 38, true, repeat - 1, 50); +} + +/// Construct a raw 28-bit LG message code from the supplied address & command. +/// Status: STABLE / Works. +/// @param[in] address The address code. +/// @param[in] command The command code. +/// @return A raw 28-bit LG message code suitable for sendLG() etc. +/// @note Sequence of bits = address + command + checksum. +uint32_t IRsend::encodeLG(uint16_t address, uint16_t command) { + return ((address << 20) | (command << kLgAcChecksumSize) | + irutils::sumNibbles(command, 4)); +} +#endif // SEND_LG + +#if DECODE_LG +/// Decode the supplied LG message. +/// Status: STABLE / Working. +/// @param[in,out] results Ptr to the data to decode & where to store the result +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// Typically kLgBits or kLg32Bits. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return True if it can decode it, false if it can't. +/// @note LG protocol has a repeat code which is 4 items long. +/// Even though the protocol has 28/32 bits of data, only 24/28 bits are +/// distinct. +/// In transmission order, the 28/32 bits are constructed as follows: +/// 8/12 bits of address + 16 bits of command + 4 bits of checksum. +/// @note LG 32bit protocol appears near identical to the Samsung protocol. +/// They possibly differ on how they repeat and initial HDR mark. +/// @see https://funembedded.wordpress.com/2014/11/08/ir-remote-control-for-lg-conditioner-using-stm32f302-mcu-on-mbed-platform/ +bool IRrecv::decodeLG(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (nbits >= kLg32Bits) { + if (results->rawlen <= 2 * nbits + 2 * (kHeader + kFooter) - 1 + offset) + return false; // Can't possibly be a valid LG32 message. + } else { + if (results->rawlen <= 2 * nbits + kHeader - 1 + offset) + return false; // Can't possibly be a valid LG message. + } + // Compliance + if (strict && nbits != kLgBits && nbits != kLg32Bits) + return false; // Doesn't comply with expected LG protocol. + + // Header (Mark) + uint32_t kHdrSpace; + if (matchMark(results->rawbuf[offset], kLgHdrMark)) + kHdrSpace = kLgHdrSpace; + else if (matchMark(results->rawbuf[offset], kLg2HdrMark)) + kHdrSpace = kLg2HdrSpace; + else if (matchMark(results->rawbuf[offset], kLg32HdrMark)) + kHdrSpace = kLg32HdrSpace; + else + return false; + offset++; + + // Set up the expected data section values. + const uint16_t kBitmark = (kHdrSpace == kLg2HdrSpace) ? kLg2BitMark + : kLgBitMark; + // Header Space + Data + Footer + uint64_t data = 0; + uint16_t used = matchGeneric(results->rawbuf + offset, &data, + results->rawlen - offset, nbits, + 0, // Already matched the Header mark. + kHdrSpace, + kBitmark, kLgOneSpace, kBitmark, kLgZeroSpace, + kBitmark, kLgMinGap, true, kUseDefTol, 0, true); + if (!used) return false; + offset += used; + + // Repeat + if (nbits >= kLg32Bits) { + // If we are expecting the LG 32-bit protocol, there is always + // a repeat message. So, check for it. + uint64_t unused; + if (!matchGeneric(results->rawbuf + offset, &unused, + results->rawlen - offset, 0, // No Data bits to match. + kLg32RptHdrMark, kLgRptSpace, + kBitmark, kLgOneSpace, kBitmark, kLgZeroSpace, + kBitmark, kLgMinGap, true, kUseDefTol)) return false; + } + + // The 16 bits before the checksum. + uint16_t command = (data >> kLgAcChecksumSize); + + // Compliance + if (strict && (data & 0xF) != irutils::sumNibbles(command, 4)) + return false; // The last 4 bits sent are the expected checksum. + // Success + if (kHdrSpace == kLg2HdrSpace) // Was it an LG2 message? + results->decode_type = LG2; + else + results->decode_type = LG; + results->bits = nbits; + results->value = data; + results->command = command; + results->address = data >> 20; // The bits before the command. + return true; +} +#endif // DECODE_LG + +// LG A/C Class + +/// Class constructor +/// @param[in] pin GPIO to be used when sending. +/// @param[in] inverted Is the output signal to be inverted? +/// @param[in] use_modulation Is frequency modulation to be used? +IRLgAc::IRLgAc(const uint16_t pin, const bool inverted, + const bool use_modulation) + : _irsend(pin, inverted, use_modulation) { stateReset(); } + +/// Reset the internals of the object to a known good state. +void IRLgAc::stateReset(void) { + setRaw(kLgAcOffCommand); + setModel(lg_ac_remote_model_t::GE6711AR2853M); + _light = true; + _swingv = kLgAcSwingVOff; + _swingh = false; + for (uint8_t i = 0; i < kLgAcSwingVMaxVanes; i++) + _vaneswingv[i] = 0; // Reset to an unused value. + updateSwingPrev(); +} + +/// Set up hardware to be able to send a message. +void IRLgAc::begin(void) { _irsend.begin(); } + +#if SEND_LG +/// Send the current internal state as an IR message. +/// @param[in] repeat Nr. of times the message will be repeated. +void IRLgAc::send(const uint16_t repeat) { + if (getPower()) { + _irsend.send(_protocol, getRaw(), kLgBits, repeat); + // Some models have extra/special settings & controls + switch (getModel()) { + case lg_ac_remote_model_t::AKB74955603: + // Only send the swing setting if we need to. + if (_swingv != _swingv_prev) + _irsend.send(_protocol, _swingv, kLgBits, repeat); + // Any "normal" command sent will always turn the light on, thus we only + // send it when we want it off. Must be sent last! + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1513#issuecomment-877283080 + if (!_light) _irsend.send(_protocol, kLgAcLightToggle, kLgBits, repeat); + break; + case lg_ac_remote_model_t::AKB73757604: + // Check if we need to send any vane specific swingv's. + for (uint8_t i = 0; i < kLgAcSwingVMaxVanes; i++) // For all vanes + if (_vaneswingv[i] != _vaneswingv_prev[i]) // Only send if we must. + _irsend.send(_protocol, calcVaneSwingV(i, _vaneswingv[i]), kLgBits, + repeat); + // and if we need to send a swingh message. + if (_swingh != _swingh_prev) + _irsend.send(_protocol, _swingh ? kLgAcSwingHAuto : kLgAcSwingHOff, + kLgBits, repeat); + break; + default: + break; + } + updateSwingPrev(); // Swing changes will have been sent, so make them prev. + } else { + // Always send the special Off command if the power is set to off. + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1008#issuecomment-570763580 + _irsend.send(_protocol, kLgAcOffCommand, kLgBits, repeat); + } +} +#endif // SEND_LG + +/// Is the current message a normal (non-special) message? +/// @return True, if it is a normal message, False, if it is special. +bool IRLgAc::_isNormal(void) const { + switch (_.raw) { + case kLgAcOffCommand: + case kLgAcLightToggle: + return false; + } + if (isSwing()) return false; + return true; +} + +/// Set the model of the A/C to emulate. +/// @param[in] model The enum of the appropriate model. +void IRLgAc::setModel(const lg_ac_remote_model_t model) { + switch (model) { + case lg_ac_remote_model_t::AKB75215403: + case lg_ac_remote_model_t::AKB74955603: + case lg_ac_remote_model_t::AKB73757604: + _protocol = decode_type_t::LG2; + break; + case lg_ac_remote_model_t::GE6711AR2853M: + _protocol = decode_type_t::LG; + break; + default: + return; + } + _model = model; +} + +/// Get the model of the A/C. +/// @return The enum of the compatible model. +lg_ac_remote_model_t IRLgAc::getModel(void) const { + return _model; +} + +/// Check if the stored code must belong to a AKB74955603 model. +/// @return true, if it is AKB74955603 message. Otherwise, false. +/// @note Internal use only. +bool IRLgAc::_isAKB74955603(void) const { + return ((_.raw & kLgAcAKB74955603DetectionMask) && _isNormal()) || + isSwingV() || isLightToggle(); +} + +/// Check if the stored code must belong to a AKB73757604 model. +/// @return true, if it is AKB73757604 message. Otherwise, false. +/// @note Internal use only. +bool IRLgAc::_isAKB73757604(void) const { + return isSwingH() || isVaneSwingV(); +} + +/// Get a copy of the internal state/code for this protocol. +/// @return The code for this protocol based on the current internal state. +uint32_t IRLgAc::getRaw(void) { + checksum(); + return _.raw; +} + +/// Set the internal state from a valid code for this protocol. +/// @param[in] new_code A valid code for this protocol. +/// @param[in] protocol A valid decode protocol type to use. +void IRLgAc::setRaw(const uint32_t new_code, const decode_type_t protocol) { + _.raw = new_code; + // Set the default model for this protocol, if the protocol is supplied. + switch (protocol) { + case decode_type_t::LG: + setModel(lg_ac_remote_model_t::GE6711AR2853M); + break; + case decode_type_t::LG2: + setModel(lg_ac_remote_model_t::AKB75215403); + break; + default: + // Don't change anything if it isn't an expected protocol. + break; + } + // Look for model specific settings/features to improve model detection. + if (_isAKB74955603()) { + setModel(lg_ac_remote_model_t::AKB74955603); + if (isSwingV()) _swingv = new_code; + } + if (_isAKB73757604()) { + setModel(lg_ac_remote_model_t::AKB73757604); + if (isVaneSwingV()) { + // Extract just the vane nr and position part of the message. + const uint32_t vanecode = getVaneCode(_.raw); + _vaneswingv[vanecode / kLgAcVaneSwingVSize] = VANESWINGVPOS(vanecode); + } else if (isSwingH()) { + _swingh = (_.raw == kLgAcSwingHAuto); + } + } + _temp = 15; // Ensure there is a "sane" previous temp. + _temp = getTemp(); +} + +/// Calculate the checksum for a given state. +/// @param[in] state The value to calc the checksum of. +/// @return The calculated checksum value. +uint8_t IRLgAc::calcChecksum(const uint32_t state) { + return irutils::sumNibbles(state >> kLgAcChecksumSize, 4); +} + +/// Verify the checksum is valid for a given state. +/// @param[in] state The value to verify the checksum of. +/// @return true, if the state has a valid checksum. Otherwise, false. +bool IRLgAc::validChecksum(const uint32_t state) { + LGProtocol LGp; + LGp.raw = state; + return calcChecksum(state) == LGp.Sum; +} + +/// Calculate and set the checksum values for the internal state. +void IRLgAc::checksum(void) { + _.Sum = calcChecksum(_.raw); +} + +/// Change the power setting to On. +void IRLgAc::on(void) { setPower(true); } + +/// Change the power setting to Off. +void IRLgAc::off(void) { setPower(false); } + +/// Change the power setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRLgAc::setPower(const bool on) { + _.Power = (on ? kLgAcPowerOn : kLgAcPowerOff); + if (on) + setTemp(_temp); // Reset the temp if we are on. + else + _setTemp(0); // Off clears the temp. +} + +/// Get the value of the current power setting. +/// @return true, the setting is on. false, the setting is off. +bool IRLgAc::getPower(void) const { + return _.Power == kLgAcPowerOn; +} + +/// Is the message a Power Off message? +/// @return true, if it is. false, if not. +bool IRLgAc::isOffCommand(void) const { return _.raw == kLgAcOffCommand; } + +/// Change the light/led/display setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRLgAc::setLight(const bool on) { _light = on; } + +/// Get the value of the current light setting. +/// @return true, the setting is on. false, the setting is off. +bool IRLgAc::getLight(void) const { return _light; } + +/// Is the message a Light Toggle message? +/// @return true, if it is. false, if not. +bool IRLgAc::isLightToggle(void) const { return _.raw == kLgAcLightToggle; } + +/// Set the temperature. +/// @param[in] value The native temperature. +/// @note Internal use only. +inline void IRLgAc::_setTemp(const uint8_t value) { _.Temp = value; } + +/// Set the temperature. +/// @param[in] degrees The temperature in degrees celsius. +void IRLgAc::setTemp(const uint8_t degrees) { + uint8_t temp = std::max(kLgAcMinTemp, degrees); + temp = std::min(kLgAcMaxTemp, temp); + _temp = temp; + _setTemp(temp - kLgAcTempAdjust); +} + +/// Get the current temperature setting. +/// @return The current setting for temp. in degrees celsius. +uint8_t IRLgAc::getTemp(void) const { + return _isNormal() ? _.Temp + kLgAcTempAdjust : _temp; +} + +/// Set the speed of the fan. +/// @param[in] speed The desired setting. +void IRLgAc::setFan(const uint8_t speed) { + uint8_t _speed = speed; + // Only model AKB74955603 has these speeds, so convert if we have to. + if (getModel() != lg_ac_remote_model_t::AKB74955603) { + switch (speed) { + case kLgAcFanLowAlt: + _.Fan = kLgAcFanLow; + return; + case kLgAcFanHigh: + _.Fan = kLgAcFanMax; + return; + } + } + switch (speed) { + case kLgAcFanLow: + case kLgAcFanLowAlt: + _speed = (getModel() != lg_ac_remote_model_t::AKB74955603) + ? kLgAcFanLow : kLgAcFanLowAlt; + break; + case kLgAcFanHigh: + _speed = (getModel() != lg_ac_remote_model_t::AKB74955603) + ? kLgAcFanMax : speed; + break; + case kLgAcFanAuto: + case kLgAcFanLowest: + case kLgAcFanMedium: + case kLgAcFanMax: + _speed = speed; + break; + default: + _speed = kLgAcFanAuto; + } + _.Fan = _speed; +} + +/// Get the current fan speed setting. +/// @return The current fan speed. +uint8_t IRLgAc::getFan(void) const { return _.Fan; } + +/// Get the operating mode setting of the A/C. +/// @return The current operating mode setting. +uint8_t IRLgAc::getMode(void) const { return _.Mode; } + +/// Set the operating mode of the A/C. +/// @param[in] mode The desired operating mode. +void IRLgAc::setMode(const uint8_t mode) { + switch (mode) { + case kLgAcAuto: + case kLgAcDry: + case kLgAcHeat: + case kLgAcCool: + case kLgAcFan: + _.Mode = mode; + break; + default: + _.Mode = kLgAcAuto; + } +} + +/// Check if the stored code is a Swing message. +/// @return true, if it is. Otherwise, false. +bool IRLgAc::isSwing(void) const { + return (_.raw >> 12) == kLgAcSwingSignature; +} + +/// Check if the stored code is a non-vane SwingV message. +/// @return true, if it is. Otherwise, false. +bool IRLgAc::isSwingV(void) const { + const uint32_t code = _.raw >> kLgAcChecksumSize; + return code >= (kLgAcSwingVLowest >> kLgAcChecksumSize) && + code < (kLgAcSwingHAuto >> kLgAcChecksumSize); +} + +/// Check if the stored code is a SwingH message. +/// @return true, if it is. Otherwise, false. +bool IRLgAc::isSwingH(void) const { + return (_.raw >> kLgAcSwingHOffsetSize) == kLgAcSwingHSignature; +} + +/// Get the Horizontal Swing position setting of the A/C. +/// @return true, if it is. Otherwise, false. +bool IRLgAc::getSwingH(void) const { return _swingh; } + +/// Set the Horizontal Swing mode of the A/C. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRLgAc::setSwingH(const bool on) { _swingh = on; } + +/// Check if the stored code is a vane specific SwingV message. +/// @return true, if it is. Otherwise, false. +bool IRLgAc::isVaneSwingV(void) const { + return _.raw > kLgAcVaneSwingVBase && + _.raw < (kLgAcVaneSwingVBase + + ((kLgAcSwingVMaxVanes * + kLgAcVaneSwingVSize) << kLgAcChecksumSize)); +} + +/// Set the Vertical Swing mode of the A/C. +/// @param[in] position The position/mode to set the vanes to. +void IRLgAc::setSwingV(const uint32_t position) { + // Is it a valid position code? + if (position == kLgAcSwingVOff || + toCommonSwingV(position) != stdAc::swingv_t::kOff) { + if (position <= 0xFF) { // It's a short code, convert it. + _swingv = (kLgAcSwingSignature << 8 | position) << kLgAcChecksumSize; + _swingv |= calcChecksum(_swingv); + } else { + _swingv = position; + } + } +} + +// Copy the previous swing settings from the current ones. +void IRLgAc::updateSwingPrev(void) { + _swingv_prev = _swingv; + for (uint8_t i = 0; i < kLgAcSwingVMaxVanes; i++) + _vaneswingv_prev[i] = _vaneswingv[i]; +} + +/// Get the Vertical Swing position setting of the A/C. +/// @return The native position/mode. +uint32_t IRLgAc::getSwingV(void) const { return _swingv; } + +/// Set the per Vane Vertical Swing mode of the A/C. +/// @param[in] vane The nr. of the vane to control. +/// @param[in] position The position/mode to set the vanes to. +void IRLgAc::setVaneSwingV(const uint8_t vane, const uint8_t position) { + if (vane < kLgAcSwingVMaxVanes) // It's a valid vane nr. + if (position && position <= kLgAcVaneSwingVLowest) // Valid position + _vaneswingv[vane] = position; +} + +/// Get the Vertical Swing position for the given vane of the A/C. +/// @return The native position/mode. +uint8_t IRLgAc::getVaneSwingV(const uint8_t vane) const { + return (vane < kLgAcSwingVMaxVanes) ? _vaneswingv[vane] : 0; +} + +/// Get the vane code of a Vane Vertical Swing message. +/// @param[in] raw A raw number representing a native LG message. +/// @return A number containing just the vane nr, and the position. +uint8_t IRLgAc::getVaneCode(const uint32_t raw) { + return (raw - kLgAcVaneSwingVBase) >> kLgAcChecksumSize; +} + +/// Calculate the Vane specific Vertical Swing code for the A/C. +/// @return The native raw code. +uint32_t IRLgAc::calcVaneSwingV(const uint8_t vane, const uint8_t position) { + uint32_t result = kLgAcVaneSwingVBase; + if (vane < kLgAcSwingVMaxVanes) // It's a valid vane nr. + if (position && position <= kLgAcVaneSwingVLowest) // Valid position + result += ((vane * kLgAcVaneSwingVSize + position) << kLgAcChecksumSize); + return result | calcChecksum(result); +} + +/// Convert a stdAc::opmode_t enum into its native mode. +/// @param[in] mode The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRLgAc::convertMode(const stdAc::opmode_t mode) { + switch (mode) { + case stdAc::opmode_t::kCool: return kLgAcCool; + case stdAc::opmode_t::kHeat: return kLgAcHeat; + case stdAc::opmode_t::kFan: return kLgAcFan; + case stdAc::opmode_t::kDry: return kLgAcDry; + default: return kLgAcAuto; + } +} + +/// Convert a native mode into its stdAc equivalent. +/// @param[in] mode The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::opmode_t IRLgAc::toCommonMode(const uint8_t mode) { + switch (mode) { + case kLgAcCool: return stdAc::opmode_t::kCool; + case kLgAcHeat: return stdAc::opmode_t::kHeat; + case kLgAcDry: return stdAc::opmode_t::kDry; + case kLgAcFan: return stdAc::opmode_t::kFan; + default: return stdAc::opmode_t::kAuto; + } +} + +/// Convert a stdAc::fanspeed_t enum into it's native speed. +/// @param[in] speed The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRLgAc::convertFan(const stdAc::fanspeed_t speed) { + switch (speed) { + case stdAc::fanspeed_t::kMin: return kLgAcFanLowest; + case stdAc::fanspeed_t::kLow: return kLgAcFanLow; + case stdAc::fanspeed_t::kMedium: return kLgAcFanMedium; + case stdAc::fanspeed_t::kHigh: return kLgAcFanHigh; + case stdAc::fanspeed_t::kMax: return kLgAcFanMax; + default: return kLgAcFanAuto; + } +} + +/// Convert a native fan speed into its stdAc equivalent. +/// @param[in] speed The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::fanspeed_t IRLgAc::toCommonFanSpeed(const uint8_t speed) { + switch (speed) { + case kLgAcFanMax: return stdAc::fanspeed_t::kMax; + case kLgAcFanHigh: return stdAc::fanspeed_t::kHigh; + case kLgAcFanMedium: return stdAc::fanspeed_t::kMedium; + case kLgAcFanLow: + case kLgAcFanLowAlt: return stdAc::fanspeed_t::kLow; + case kLgAcFanLowest: return stdAc::fanspeed_t::kMin; + default: return stdAc::fanspeed_t::kAuto; + } +} + +/// Convert a stdAc::swingv_t enum into it's native setting. +/// @param[in] swingv The enum to be converted. +/// @return The native equivalent of the enum. +uint32_t IRLgAc::convertSwingV(const stdAc::swingv_t swingv) { + switch (swingv) { + case stdAc::swingv_t::kHighest: return kLgAcSwingVHighest; + case stdAc::swingv_t::kHigh: return kLgAcSwingVHigh; + case stdAc::swingv_t::kMiddle: return kLgAcSwingVMiddle; + case stdAc::swingv_t::kLow: return kLgAcSwingVLow; + case stdAc::swingv_t::kLowest: return kLgAcSwingVLowest; + case stdAc::swingv_t::kAuto: return kLgAcSwingVSwing; + default: return kLgAcSwingVOff; + } +} + +/// Convert a native Vertical Swing into its stdAc equivalent. +/// @param[in] code The native code to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::swingv_t IRLgAc::toCommonSwingV(const uint32_t code) { + switch (code) { + case kLgAcSwingVHighest_Short: + case kLgAcSwingVHighest: return stdAc::swingv_t::kHighest; + case kLgAcSwingVHigh_Short: + case kLgAcSwingVHigh: return stdAc::swingv_t::kHigh; + case kLgAcSwingVUpperMiddle_Short: + case kLgAcSwingVUpperMiddle: + case kLgAcSwingVMiddle_Short: + case kLgAcSwingVMiddle: return stdAc::swingv_t::kMiddle; + case kLgAcSwingVLow_Short: + case kLgAcSwingVLow: return stdAc::swingv_t::kLow; + case kLgAcSwingVLowest_Short: + case kLgAcSwingVLowest: return stdAc::swingv_t::kLowest; + case kLgAcSwingVSwing_Short: + case kLgAcSwingVSwing: return stdAc::swingv_t::kAuto; + default: return stdAc::swingv_t::kOff; + } +} + +/// Convert a native Vane specific Vertical Swing into its stdAc equivalent. +/// @param[in] pos The native position to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::swingv_t IRLgAc::toCommonVaneSwingV(const uint8_t pos) { + switch (pos) { + case kLgAcVaneSwingVHigh: return stdAc::swingv_t::kHigh; + case kLgAcVaneSwingVUpperMiddle: + case kLgAcVaneSwingVMiddle: return stdAc::swingv_t::kMiddle; + case kLgAcVaneSwingVLow: return stdAc::swingv_t::kLow; + case kLgAcVaneSwingVLowest: return stdAc::swingv_t::kLowest; + default: return stdAc::swingv_t::kHighest; + } +} + +/// Convert a stdAc::swingv_t enum into it's native setting. +/// @param[in] swingv The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRLgAc::convertVaneSwingV(const stdAc::swingv_t swingv) { + switch (swingv) { + case stdAc::swingv_t::kHigh: return kLgAcVaneSwingVHigh; + case stdAc::swingv_t::kMiddle: return kLgAcVaneSwingVMiddle; + case stdAc::swingv_t::kLow: return kLgAcVaneSwingVLow; + case stdAc::swingv_t::kLowest: return kLgAcVaneSwingVLowest; + default: return kLgAcVaneSwingVHighest; + } +} + +/// Convert the current internal state into its stdAc::state_t equivalent. +/// @param[in] prev Ptr to the previous state if required. +/// @return The stdAc equivalent of the native settings. +stdAc::state_t IRLgAc::toCommon(const stdAc::state_t *prev) const { + stdAc::state_t result; + // Start with the previous state if given it. + if (prev != NULL) { + result = *prev; + } else { + // Set defaults for non-zero values that are not implicitly set for when + // there is no previous state. + // e.g. Any setting that toggles should probably go here. + result.light = true; + result.swingv = toCommonSwingV(getSwingV()); + } + result.protocol = _protocol; + result.model = getModel(); + result.power = getPower(); + result.mode = toCommonMode(_.Mode); + result.celsius = true; + result.degrees = getTemp(); + result.fanspeed = toCommonFanSpeed(_.Fan); + result.light = isLightToggle() ? !result.light : _light; + if (isSwingV()) result.swingv = toCommonSwingV(getSwingV()); + if (isVaneSwingV()) + result.swingv = toCommonVaneSwingV(VANESWINGVPOS(getVaneCode(_.raw))); + result.swingh = isSwingH() ? stdAc::swingh_t::kAuto : stdAc::swingh_t::kOff; + // Not supported. + result.quiet = false; + result.turbo = false; + result.filter = false; + result.clean = false; + result.econo = false; + result.beep = false; + result.sleep = -1; + result.clock = -1; + return result; +} + +/// Convert the current internal state into a human readable string. +/// @return A human readable string. +String IRLgAc::toString(void) const { + String result = ""; + result.reserve(80); // Reserve some heap for the string to reduce fragging. + result += addModelToString(_protocol, getModel(), false); + if (_isNormal()) { // A "Normal" generic settings message. + result += addBoolToString(getPower(), kPowerStr); + if (getPower()) { // Only display the rest if is in power on state. + result += addModeToString(_.Mode, kLgAcAuto, kLgAcCool, + kLgAcHeat, kLgAcDry, kLgAcFan); + result += addTempToString(getTemp()); + result += addFanToString(_.Fan, kLgAcFanHigh, + _isAKB74955603() ? kLgAcFanLowAlt : kLgAcFanLow, + kLgAcFanAuto, kLgAcFanLowest, kLgAcFanMedium, + kLgAcFanMax); + } + } else { // It must be a special single purpose code. + if (isOffCommand()) { + result += addBoolToString(false, kPowerStr); + } else if (isLightToggle()) { + result += addBoolToString(true, kLightToggleStr); + } else if (isSwingH()) { + result += addBoolToString(_swingh, kSwingHStr); + } else if (isSwingV()) { + result += addSwingVToString((uint8_t)(_swingv >> kLgAcChecksumSize), + 0, // No Auto, See "swing". Unused + kLgAcSwingVHighest_Short, + kLgAcSwingVHigh_Short, + kLgAcSwingVUpperMiddle_Short, + kLgAcSwingVMiddle_Short, + 0, // Unused + kLgAcSwingVLow_Short, + kLgAcSwingVLowest_Short, + kLgAcSwingVOff_Short, + kLgAcSwingVSwing_Short, + 0, 0); + } else if (isVaneSwingV()) { + const uint8_t vane = getVaneCode(_.raw) / kLgAcVaneSwingVSize; + result += addIntToString(vane, kVaneStr); + result += addSwingVToString(_vaneswingv[vane], + 0, // No Auto, See "swing". Unused + kLgAcVaneSwingVHighest, + kLgAcVaneSwingVHigh, + kLgAcVaneSwingVUpperMiddle, + kLgAcVaneSwingVMiddle, + 0, // Unused + kLgAcVaneSwingVLow, + kLgAcVaneSwingVLowest, + // Rest unused + 0, 0, 0, 0); + } + } + return result; +} + +/// Check if the internal state looks like a valid LG A/C message. +/// @return true, the internal state is a valid LG A/C mesg. Otherwise, false. +bool IRLgAc::isValidLgAc(void) const { + return validChecksum(_.raw) && (_.Sign == kLgAcSignature); +} diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.h new file mode 100644 index 000000000..6010282ca --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_LG.h @@ -0,0 +1,196 @@ +// Copyright 2017-2021 David Conran + +/// @file +/// @brief Support for LG protocols. +/// @see https://github.com/arendst/Tasmota/blob/54c2eb283a02e4287640a4595e506bc6eadbd7f2/sonoff/xdrv_05_irremote.ino#L327-438 +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1513 + +// Supports: +// Brand: LG, Model: 6711A20083V remote (LG) +// Brand: LG, Model: AKB74395308 remote (LG2) +// Brand: LG, Model: S4-W12JA3AA A/C (LG2) +// Brand: LG, Model: AKB75215403 remote (LG2) +// Brand: LG, Model: AKB74955603 remote (LG2 - AKB74955603) +// Brand: LG, Model: A4UW30GFA2 A/C (LG2 - AKB74955603 & AKB73757604) +// Brand: LG, Model: AMNW09GSJA0 A/C (LG2 - AKB74955603) +// Brand: LG, Model: AMNW24GTPA1 A/C (LG2 - AKB73757604) +// Brand: LG, Model: AKB73757604 remote (LG2 - AKB73757604) +// Brand: General Electric, Model: AG1BH09AW101 Split A/C (LG) +// Brand: General Electric, Model: 6711AR2853M A/C Remote (LG) + +#ifndef IR_LG_H_ +#define IR_LG_H_ + +#define __STDC_LIMIT_MACROS +#include +#ifndef UNIT_TEST +#include +#endif +#include "IRremoteESP8266.h" +#include "IRsend.h" +#include "IRutils.h" +#ifdef UNIT_TEST +#include "IRsend_test.h" +#endif + +/// Native representation of a LG A/C message. +union LGProtocol{ + uint32_t raw; ///< The state of the IR remote in IR code form. + struct { + uint32_t Sum :4; + uint32_t Fan :4; + uint32_t Temp :4; + uint32_t Mode :3; + uint32_t :3; + uint32_t Power:2; + uint32_t Sign :8; + }; +}; + +const uint8_t kLgAcFanLowest = 0; // 0b0000 +const uint8_t kLgAcFanLow = 1; // 0b0001 +const uint8_t kLgAcFanMedium = 2; // 0b0010 +const uint8_t kLgAcFanMax = 4; // 0b0100 +const uint8_t kLgAcFanAuto = 5; // 0b0101 +const uint8_t kLgAcFanLowAlt = 9; // 0b1001 +const uint8_t kLgAcFanHigh = 10; // 0b1010 +// Nr. of slots in the look-up table +const uint8_t kLgAcFanEntries = kLgAcFanHigh + 1; +const uint8_t kLgAcTempAdjust = 15; +const uint8_t kLgAcMinTemp = 16; // Celsius +const uint8_t kLgAcMaxTemp = 30; // Celsius +const uint8_t kLgAcCool = 0; // 0b000 +const uint8_t kLgAcDry = 1; // 0b001 +const uint8_t kLgAcFan = 2; // 0b010 +const uint8_t kLgAcAuto = 3; // 0b011 +const uint8_t kLgAcHeat = 4; // 0b100 +const uint8_t kLgAcPowerOff = 3; // 0b11 +const uint8_t kLgAcPowerOn = 0; // 0b00 +const uint8_t kLgAcSignature = 0x88; + +const uint32_t kLgAcOffCommand = 0x88C0051; +const uint32_t kLgAcLightToggle = 0x88C00A6; + +const uint32_t kLgAcSwingSignature = 0x8813; +const uint32_t kLgAcSwingVLowest = 0x8813048; +const uint32_t kLgAcSwingVLow = 0x8813059; +const uint32_t kLgAcSwingVMiddle = 0x881306A; +const uint32_t kLgAcSwingVUpperMiddle = 0x881307B; +const uint32_t kLgAcSwingVHigh = 0x881308C; +const uint32_t kLgAcSwingVHighest = 0x881309D; +const uint32_t kLgAcSwingVSwing = 0x8813149; +const uint32_t kLgAcSwingVAuto = kLgAcSwingVSwing; +const uint32_t kLgAcSwingVOff = 0x881315A; +const uint8_t kLgAcSwingVLowest_Short = 0x04; +const uint8_t kLgAcSwingVLow_Short = 0x05; +const uint8_t kLgAcSwingVMiddle_Short = 0x06; +const uint8_t kLgAcSwingVUpperMiddle_Short = 0x07; +const uint8_t kLgAcSwingVHigh_Short = 0x08; +const uint8_t kLgAcSwingVHighest_Short = 0x09; +const uint8_t kLgAcSwingVSwing_Short = 0x14; +const uint8_t kLgAcSwingVAuto_Short = kLgAcSwingVSwing_Short; +const uint8_t kLgAcSwingVOff_Short = 0x15; + +// AKB73757604 Constants +// SwingH +const uint32_t kLgAcSwingHAuto = 0x881316B; +const uint32_t kLgAcSwingHOff = 0x881317C; +// SwingV +const uint8_t kLgAcVaneSwingVHighest = 1; ///< 0b001 +const uint8_t kLgAcVaneSwingVHigh = 2; ///< 0b010 +const uint8_t kLgAcVaneSwingVUpperMiddle = 3; ///< 0b011 +const uint8_t kLgAcVaneSwingVMiddle = 4; ///< 0b100 +const uint8_t kLgAcVaneSwingVLow = 5; ///< 0b101 +const uint8_t kLgAcVaneSwingVLowest = 6; ///< 0b110 +const uint8_t kLgAcVaneSwingVSize = 8; +const uint8_t kLgAcSwingVMaxVanes = 4; ///< Max Nr. of Vanes + +// Classes +/// Class for handling detailed LG A/C messages. +class IRLgAc { + public: + explicit IRLgAc(const uint16_t pin, const bool inverted = false, + const bool use_modulation = true); + void stateReset(void); + static uint8_t calcChecksum(const uint32_t state); + static bool validChecksum(const uint32_t state); + bool isValidLgAc(void) const; +#if SEND_LG + void send(const uint16_t repeat = kLgDefaultRepeat); + /// Run the calibration to calculate uSec timing offsets for this platform. + /// @return The uSec timing offset needed per modulation of the IR Led. + /// @note This will produce a 65ms IR signal pulse at 38kHz. + /// Only ever needs to be run once per object instantiation, if at all. + int8_t calibrate(void) { return _irsend.calibrate(); } +#endif // SEND_LG + void begin(void); + void on(void); + void off(void); + void setPower(const bool on); + bool getPower(void) const; + bool isOffCommand(void) const; + void setTemp(const uint8_t degrees); + uint8_t getTemp(void) const; + void setFan(const uint8_t speed); + uint8_t getFan(void) const; + void setMode(const uint8_t mode); + uint8_t getMode(void) const; + void setLight(const bool on); + bool getLight(void) const; + bool isLightToggle(void) const; + bool isSwing(void) const; + void setSwingH(const bool on); + bool getSwingH(void) const; + bool isSwingV(void) const; + bool isVaneSwingV(void) const; + void setSwingV(const uint32_t position); + uint32_t getSwingV(void) const; + void setVaneSwingV(const uint8_t vane, const uint8_t position); + uint8_t getVaneSwingV(const uint8_t vane) const; + static uint32_t calcVaneSwingV(const uint8_t vane, const uint8_t position); + static uint8_t getVaneCode(const uint32_t raw); + bool isSwingH(void) const; + void updateSwingPrev(void); + uint32_t getRaw(void); + void setRaw(const uint32_t new_code, + const decode_type_t protocol = decode_type_t::UNKNOWN); + static uint8_t convertMode(const stdAc::opmode_t mode); + static stdAc::opmode_t toCommonMode(const uint8_t mode); + static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); + static stdAc::swingv_t toCommonSwingV(const uint32_t code); + static stdAc::swingv_t toCommonVaneSwingV(const uint8_t pos); + static uint8_t convertFan(const stdAc::fanspeed_t speed); + static uint32_t convertSwingV(const stdAc::swingv_t swingv); + static uint8_t convertVaneSwingV(const stdAc::swingv_t swingv); + stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const; + String toString(void) const; + void setModel(const lg_ac_remote_model_t model); + lg_ac_remote_model_t getModel(void) const; +#ifndef UNIT_TEST + + private: + IRsend _irsend; ///< Instance of the IR send class +#else // UNIT_TEST + /// @cond IGNORE + IRsendTest _irsend; ///< Instance of the testing IR send class + /// @endcond +#endif // UNIT_TEST + LGProtocol _; + uint8_t _temp; + bool _light; + uint32_t _swingv; + uint32_t _swingv_prev; + uint8_t _vaneswingv[kLgAcSwingVMaxVanes]; + uint8_t _vaneswingv_prev[kLgAcSwingVMaxVanes]; + bool _swingh; + bool _swingh_prev; + decode_type_t _protocol; ///< Protocol version + lg_ac_remote_model_t _model; ///< Model type + void checksum(void); + void _setTemp(const uint8_t value); + bool _isAKB74955603(void) const; + bool _isAKB73757604(void) const; + bool _isNormal(void) const; +}; + +#endif // IR_LG_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Lasertag.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lasertag.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Lasertag.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lasertag.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Lego.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lego.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Lego.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lego.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Lutron.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lutron.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Lutron.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Lutron.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_MWM.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MWM.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_MWM.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MWM.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Magiquest.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Magiquest.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Magiquest.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Magiquest.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Magiquest.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Magiquest.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Magiquest.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Magiquest.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Metz.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Metz.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Metz.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Metz.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Midea.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Midea.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Midea.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Midea.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Midea.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Midea.h similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/ir_Midea.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Midea.h index d01dcce82..eaeaa04d8 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Midea.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Midea.h @@ -22,6 +22,8 @@ // Brand: Danby, Model: DAC100BGUWDB (MIDEA) // Brand: Danby, Model: DAC120BGUWDB (MIDEA) // Brand: Danby, Model: R09C/BCGE remote (MIDEA) +// Brand: Trotec, Model: TROTEC PAC 3900 X (MIDEA) +// Brand: Trotec, Model: RG57H(B)/BGE remote (MIDEA) #ifndef IR_MIDEA_H_ #define IR_MIDEA_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_MilesTag2.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MilesTag2.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_MilesTag2.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MilesTag2.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Mirage.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mirage.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Mirage.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mirage.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.cpp similarity index 93% rename from lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.cpp index fd415c834..03e562ef5 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.cpp @@ -257,120 +257,49 @@ void IRsend::sendMitsubishiAC(const unsigned char data[], const uint16_t nbytes, bool IRrecv::decodeMitsubishiAC(decode_results *results, uint16_t offset, const uint16_t nbits, const bool strict) { - if (results->rawlen <= ((kMitsubishiACBits * 2) + 2) + offset) { - DPRINTLN("Shorter than shortest possibly expected."); - return false; // Shorter than shortest possibly expected. - } - if (strict && nbits != kMitsubishiACBits) { - DPRINTLN("Request is out of spec."); - return false; // Request is out of spec. - } - for (uint8_t i = 0; i < kMitsubishiACStateLength; i++) results->state[i] = 0; - bool failure = false; - uint8_t rep = 0; - do { - failure = false; - // Header: - // Sometime happens that junk signals arrives before the real message - bool headerFound = false; - while (!headerFound && - offset < (results->rawlen - (kMitsubishiACBits * 2 + 2))) { - headerFound = - matchMark(results->rawbuf[offset], kMitsubishiAcHdrMark) && - matchSpace(results->rawbuf[offset + 1], kMitsubishiAcHdrSpace); - offset += 2; - } - if (!headerFound) { - DPRINTLN("Header mark not found."); - return false; - } - DPRINT("Header mark found at #"); - DPRINTLN(offset - 2); - // Decode byte-by-byte: - match_result_t data_result; - for (uint8_t i = 0; i < kMitsubishiACStateLength && !failure; i++) { - results->state[i] = 0; - data_result = - matchData(&(results->rawbuf[offset]), 8, kMitsubishiAcBitMark, - kMitsubishiAcOneSpace, kMitsubishiAcBitMark, - kMitsubishiAcZeroSpace, - _tolerance + kMitsubishiAcExtraTolerance, 0, false); - if (data_result.success == false) { - failure = true; - DPRINT("Byte decode failed at #"); - DPRINTLN((uint16_t)i); - } else { - results->state[i] = data_result.data; - offset += data_result.used; - DPRINT((uint16_t)results->state[i]); - DPRINT(","); + // Compliance + if (strict && nbits != kMitsubishiACBits) return false; // Out of spec. + // Do we need to look for a repeat? + const uint16_t expected_repeats = strict ? kMitsubishiACMinRepeat : kNoRepeat; + // Enough data? + if (results->rawlen <= (nbits * 2 + kHeader + kFooter) * + (expected_repeats + 1) + offset - 1) return false; + uint16_t save[kStateSizeMax]; + // Handle repeats if we need too. + for (uint16_t r = 0; r <= expected_repeats; r++) { + // Header + Data + Footer + uint16_t used = matchGeneric(results->rawbuf + offset, results->state, + results->rawlen - offset, nbits, + kMitsubishiAcHdrMark, kMitsubishiAcHdrSpace, + kMitsubishiAcBitMark, kMitsubishiAcOneSpace, + kMitsubishiAcBitMark, kMitsubishiAcZeroSpace, + kMitsubishiAcRptMark, kMitsubishiAcRptSpace, + r < expected_repeats, // At least? + _tolerance + kMitsubishiAcExtraTolerance, + 0, false); + if (!used) return false; // No match. + offset += used; + if (r) { // Is this a repeat? + // Repeats are expected to be exactly the same. + if (std::memcmp(save, results->state, nbits / 8) != 0) return false; + } else { // It is the first message. + // Compliance + if (strict) { + // Data signature check. + static const uint8_t signature[5] = {0x23, 0xCB, 0x26, 0x01, 0x00}; + if (std::memcmp(results->state, signature, 5) != 0) return false; + // Checksum verification. + if (!IRMitsubishiAC::validChecksum(results->state)) return false; } - DPRINTLN(""); + // Save a copy of the state to compare with. + std::memcpy(save, results->state, nbits / 8); } - // HEADER validation: - if (failure || results->state[0] != 0x23 || results->state[1] != 0xCB || - results->state[2] != 0x26 || results->state[3] != 0x01 || - results->state[4] != 0x00) { - DPRINTLN("Header mismatch."); - failure = true; - } else { - // DATA part: + } - // FOOTER checksum: - if (!IRMitsubishiAC::validChecksum(results->state)) { - DPRINTLN("Checksum error."); - failure = true; - } - } - if (rep != kMitsubishiACMinRepeat && failure) { - bool repeatMarkFound = false; - while (!repeatMarkFound && - offset < (results->rawlen - (kMitsubishiACBits * 2 + 4))) { - repeatMarkFound = - matchMark(results->rawbuf[offset], kMitsubishiAcRptMark) && - matchSpace(results->rawbuf[offset + 1], kMitsubishiAcRptSpace); - offset += 2; - } - if (!repeatMarkFound) { - DPRINTLN("First attempt failure and repeat mark not found."); - return false; - } - } - rep++; - // Check if the repeat is correct if we need strict decode: - if (strict && !failure) { - DPRINTLN("Strict repeat check enabled."); - // Repeat mark and space: - if (!matchMark(results->rawbuf[offset++], kMitsubishiAcRptMark) || - !matchSpace(results->rawbuf[offset++], kMitsubishiAcRptSpace)) { - DPRINTLN("Repeat mark error."); - return false; - } - // Header mark and space: - if (!matchMark(results->rawbuf[offset++], kMitsubishiAcHdrMark) || - !matchSpace(results->rawbuf[offset++], kMitsubishiAcHdrSpace)) { - DPRINTLN("Repeat header error."); - return false; - } - // Payload: - for (uint8_t i = 0; i < kMitsubishiACStateLength; i++) { - data_result = - matchData(&(results->rawbuf[offset]), 8, kMitsubishiAcBitMark, - kMitsubishiAcOneSpace, kMitsubishiAcBitMark, - kMitsubishiAcZeroSpace, - _tolerance + kMitsubishiAcExtraTolerance, 0, false); - if (data_result.success == false || - data_result.data != results->state[i]) { - DPRINTLN("Repeat payload error."); - return false; - } - offset += data_result.used; - } - } // strict repeat check - } while (failure && rep <= kMitsubishiACMinRepeat); + // Success. results->decode_type = MITSUBISHI_AC; results->bits = nbits; - return !failure; + return true; } #endif // DECODE_MITSUBISHI_AC @@ -516,6 +445,7 @@ void IRMitsubishiAC::setMode(const uint8_t mode) { case kMitsubishiAcCool: _.raw[8] = 0b00110110; break; case kMitsubishiAcDry: _.raw[8] = 0b00110010; break; case kMitsubishiAcHeat: _.raw[8] = 0b00110000; break; + case kMitsubishiAcFan: _.raw[8] = 0b00110111; break; default: _.raw[8] = 0b00110000; _.Mode = kMitsubishiAcAuto; @@ -525,6 +455,7 @@ void IRMitsubishiAC::setMode(const uint8_t mode) { } /// Set the requested vane (Vertical Swing) operation mode of the a/c unit. +/// @note On some models, this represents the Right vertical vane. /// @param[in] position The position/mode to set the vane to. void IRMitsubishiAC::setVane(const uint8_t position) { uint8_t pos = std::min(position, kMitsubishiAcVaneAutoMove); // bounds check @@ -539,6 +470,7 @@ void IRMitsubishiAC::setWideVane(const uint8_t position) { } /// Get the Vane (Vertical Swing) mode of the A/C. +/// @note On some models, this represents the Right vertical vane. /// @return The native position/mode setting. uint8_t IRMitsubishiAC::getVane(void) const { return _.Vane; @@ -550,6 +482,16 @@ uint8_t IRMitsubishiAC::getWideVane(void) const { return _.WideVane; } +/// Set the requested Left Vane (Vertical Swing) operation mode of the a/c unit. +/// @param[in] position The position/mode to set the vane to. +void IRMitsubishiAC::setVaneLeft(const uint8_t position) { + _.VaneLeft = std::min(position, kMitsubishiAcVaneAutoMove); // bounds check +} + +/// Get the Left Vane (Vertical Swing) mode of the A/C. +/// @return The native position/mode setting. +uint8_t IRMitsubishiAC::getVaneLeft(void) const { return _.VaneLeft; } + /// Get the clock time of the A/C unit. /// @return Nr. of 10 minute increments past midnight. /// @note 1 = 1/6 hour (10 minutes). e.g. 4pm = 48. @@ -612,6 +554,7 @@ uint8_t IRMitsubishiAC::convertMode(const stdAc::opmode_t mode) { case stdAc::opmode_t::kCool: return kMitsubishiAcCool; case stdAc::opmode_t::kHeat: return kMitsubishiAcHeat; case stdAc::opmode_t::kDry: return kMitsubishiAcDry; + case stdAc::opmode_t::kFan: return kMitsubishiAcFan; default: return kMitsubishiAcAuto; } } @@ -679,6 +622,7 @@ stdAc::opmode_t IRMitsubishiAC::toCommonMode(const uint8_t mode) { case kMitsubishiAcCool: return stdAc::opmode_t::kCool; case kMitsubishiAcHeat: return stdAc::opmode_t::kHeat; case kMitsubishiAcDry: return stdAc::opmode_t::kDry; + case kMitsubishiAcFan: return stdAc::opmode_t::kFan; default: return stdAc::opmode_t::kAuto; } } @@ -780,7 +724,7 @@ String IRMitsubishiAC::toString(void) const { result += addBoolToString(_.Power, kPowerStr, false); result += addModeToString(_.Mode, kMitsubishiAcAuto, kMitsubishiAcCool, kMitsubishiAcHeat, kMitsubishiAcDry, - kMitsubishiAcAuto); + kMitsubishiAcFan); result += addTempFloatToString(getTemp()); result += addFanToString(getFan(), kMitsubishiAcFanRealMax, kMitsubishiAcFanRealMax - 3, diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.h similarity index 96% rename from lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.h index 6c9e6dcca..1f3a42184 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Mitsubishi.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Mitsubishi.h @@ -31,6 +31,9 @@ // Brand: Mitsubishi Electric, Model: SG153/M21EDF426 remote (MITSUBISHI_AC) // Brand: Mitsubishi Electric, Model: MSZ-GV2519 A/C (MITSUBISHI_AC) // Brand: Mitsubishi Electric, Model: RH151/M21ED6426 remote (MITSUBISHI_AC) +// Brand: Mitsubishi Electric, Model: MSZ-SF25VE3 A/C (MITSUBISHI_AC) +// Brand: Mitsubishi Electric, Model: SG15D remote (MITSUBISHI_AC) +// Brand: Mitsubishi Electric, Model: MSZ-ZW4017S A/C (MITSUBISHI_AC) #ifndef IR_MITSUBISHI_H_ #define IR_MITSUBISHI_H_ @@ -82,8 +85,14 @@ union Mitsubishi144Protocol{ uint8_t Timer :3; uint8_t WeeklyTimer :1; uint8_t :4; - // Byte 14~16 - uint8_t pad1[3]; + // Byte 14 + uint8_t :8; + // Byte 15 + uint8_t :8; + // Byte 16 + uint8_t :3; + uint8_t VaneLeft :3; // SwingV(Left) + uint8_t :2; // Byte 17 uint8_t Sum :8; }; @@ -94,6 +103,7 @@ const uint8_t kMitsubishiAcAuto = 0b100; const uint8_t kMitsubishiAcCool = 0b011; const uint8_t kMitsubishiAcDry = 0b010; const uint8_t kMitsubishiAcHeat = 0b001; +const uint8_t kMitsubishiAcFan = 0b111; const uint8_t kMitsubishiAcFanAuto = 0; const uint8_t kMitsubishiAcFanMax = 5; const uint8_t kMitsubishiAcFanRealMax = 4; @@ -268,6 +278,8 @@ class IRMitsubishiAC { void setWideVane(const uint8_t position); uint8_t getVane(void) const; uint8_t getWideVane(void) const; + void setVaneLeft(const uint8_t position); + uint8_t getVaneLeft(void) const; uint8_t* getRaw(void); void setRaw(const uint8_t* data); uint8_t getClock(void) const; diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MitsubishiHeavy.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_MitsubishiHeavy.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MitsubishiHeavy.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_MitsubishiHeavy.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_MitsubishiHeavy.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Multibrackets.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Multibrackets.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Multibrackets.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Multibrackets.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_NEC.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_NEC.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_NEC.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_NEC.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_NEC.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_NEC.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_NEC.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_NEC.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Neoclima.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Neoclima.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Neoclima.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Neoclima.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Neoclima.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Neoclima.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Neoclima.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Neoclima.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Nikai.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Nikai.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Nikai.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Nikai.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.cpp similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.cpp index 2b45d14d2..e2add03f1 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.cpp @@ -455,7 +455,9 @@ void IRPanasonicAc::setSwingHorizontal(const uint8_t desired_direction) { void IRPanasonicAc::setFan(const uint8_t speed) { switch (speed) { case kPanasonicAcFanMin: + case kPanasonicAcFanLow: case kPanasonicAcFanMed: + case kPanasonicAcFanHigh: case kPanasonicAcFanMax: case kPanasonicAcFanAuto: setBits(&remote_state[16], kHighNibble, kNibbleSize, @@ -668,9 +670,9 @@ uint8_t IRPanasonicAc::convertMode(const stdAc::opmode_t mode) { uint8_t IRPanasonicAc::convertFan(const stdAc::fanspeed_t speed) { switch (speed) { case stdAc::fanspeed_t::kMin: return kPanasonicAcFanMin; - case stdAc::fanspeed_t::kLow: return kPanasonicAcFanMin + 1; - case stdAc::fanspeed_t::kMedium: return kPanasonicAcFanMin + 2; - case stdAc::fanspeed_t::kHigh: return kPanasonicAcFanMin + 3; + case stdAc::fanspeed_t::kLow: return kPanasonicAcFanLow; + case stdAc::fanspeed_t::kMedium: return kPanasonicAcFanMed; + case stdAc::fanspeed_t::kHigh: return kPanasonicAcFanHigh; case stdAc::fanspeed_t::kMax: return kPanasonicAcFanMax; default: return kPanasonicAcFanAuto; } @@ -723,9 +725,9 @@ stdAc::opmode_t IRPanasonicAc::toCommonMode(const uint8_t mode) { stdAc::fanspeed_t IRPanasonicAc::toCommonFanSpeed(const uint8_t spd) { switch (spd) { case kPanasonicAcFanMax: return stdAc::fanspeed_t::kMax; - case kPanasonicAcFanMin + 3: return stdAc::fanspeed_t::kHigh; - case kPanasonicAcFanMin + 2: return stdAc::fanspeed_t::kMedium; - case kPanasonicAcFanMin + 1: return stdAc::fanspeed_t::kLow; + case kPanasonicAcFanHigh: return stdAc::fanspeed_t::kHigh; + case kPanasonicAcFanMed: return stdAc::fanspeed_t::kMedium; + case kPanasonicAcFanLow: return stdAc::fanspeed_t::kLow; case kPanasonicAcFanMin: return stdAc::fanspeed_t::kMin; default: return stdAc::fanspeed_t::kAuto; } @@ -791,9 +793,9 @@ String IRPanasonicAc::toString(void) { result += addModeToString(getMode(), kPanasonicAcAuto, kPanasonicAcCool, kPanasonicAcHeat, kPanasonicAcDry, kPanasonicAcFan); result += addTempToString(getTemp()); - result += addFanToString(getFan(), kPanasonicAcFanMax, kPanasonicAcFanMin, - kPanasonicAcFanAuto, kPanasonicAcFanAuto, - kPanasonicAcFanMed); + result += addFanToString(getFan(), kPanasonicAcFanHigh, kPanasonicAcFanLow, + kPanasonicAcFanAuto, kPanasonicAcFanMin, + kPanasonicAcFanMed, kPanasonicAcFanMax); result += addSwingVToString(getSwingVertical(), kPanasonicAcSwingVAuto, kPanasonicAcSwingVHighest, kPanasonicAcSwingVHigh, diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.h similarity index 98% rename from lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.h index 0535b4693..5668e4a57 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Panasonic.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Panasonic.h @@ -18,6 +18,7 @@ // Brand: Panasonic, Model: CS-ME14CKPG A/C (PANASONIC_AC CKP/5) // Brand: Panasonic, Model: CS-E7PKR A/C (PANASONIC_AC DKE/2) // Brand: Panasonic, Model: CS-Z9RKR A/C (PANASONIC_AC RKR/6) +// Brand: Panasonic, Model: CS-Z24RKR A/C (PANASONIC_AC RKR/6) // Brand: Panasonic, Model: CS-YW9MKD A/C (PANASONIC_AC JKE/4) // Brand: Panasonic, Model: A75C2311 remote (PANASONIC_AC CKP/5) // Brand: Panasonic, Model: A75C2616-1 remote (PANASONIC_AC DKE/3) @@ -25,6 +26,7 @@ // Brand: Panasonic, Model: A75C3747 remote (PANASONIC_AC JKE/4) // Brand: Panasonic, Model: CS-E9CKP series A/C (PANASONIC_AC32) // Brand: Panasonic, Model: A75C2295 remote (PANASONIC_AC32) +// Brand: Panasonic, Model: A75C4762 remote (PANASONIC_AC RKR/6) #ifndef IR_PANASONIC_H_ #define IR_PANASONIC_H_ @@ -52,7 +54,9 @@ const uint8_t kPanasonicAcCool = 3; // 0b011 const uint8_t kPanasonicAcHeat = 4; // 0b010 const uint8_t kPanasonicAcFan = 6; // 0b110 const uint8_t kPanasonicAcFanMin = 0; +const uint8_t kPanasonicAcFanLow = 1; const uint8_t kPanasonicAcFanMed = 2; +const uint8_t kPanasonicAcFanHigh = 3; const uint8_t kPanasonicAcFanMax = 4; const uint8_t kPanasonicAcFanAuto = 7; const uint8_t kPanasonicAcFanDelta = 3; diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Pioneer.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Pioneer.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Pioneer.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Pioneer.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Pronto.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Pronto.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Pronto.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Pronto.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_RC5_RC6.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_RC5_RC6.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_RC5_RC6.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_RC5_RC6.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_RCMM.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_RCMM.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_RCMM.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_RCMM.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Samsung.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.cpp similarity index 88% rename from lib/lib_basic/IRremoteESP8266/src/ir_Samsung.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.cpp index 0adb81170..9e1ad4669 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Samsung.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.cpp @@ -7,6 +7,7 @@ /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/621 /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1062 /// @see http://elektrolab.wz.cz/katalog/samsung_protocol.pdf +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1538 (Checksum) #include "ir_Samsung.h" #include @@ -279,8 +280,8 @@ IRSamsungAc::IRSamsungAc(const uint16_t pin, const bool inverted, /// @param[in] initialPower Set the initial power state. True, on. False, off. void IRSamsungAc::stateReset(const bool forcepower, const bool initialPower) { static const uint8_t kReset[kSamsungAcExtendedStateLength] = { - 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x02, 0xAE, 0x71, 0x00, - 0x15, 0xF0}; + 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, + 0x01, 0x02, 0xAE, 0x71, 0x00, 0x15, 0xF0}; std::memcpy(_.raw, kReset, kSamsungAcExtendedStateLength); _forcepower = forcepower; _lastsentpowerstate = initialPower; @@ -290,23 +291,31 @@ void IRSamsungAc::stateReset(const bool forcepower, const bool initialPower) { /// Set up hardware to be able to send a message. void IRSamsungAc::begin(void) { _irsend.begin(); } -/// Calculate the checksum for a given state. -/// @param[in] state The array to calc the checksum of. -/// @param[in] length The length/size of the array. +/// Get the existing checksum for a given state section. +/// @param[in] section The array to extract the checksum from. +/// @return The existing checksum value. +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1538#issuecomment-894645947 +uint8_t IRSamsungAc::getSectionChecksum(const uint8_t *section) { + return ((GETBITS8(*(section + 2), kLowNibble, kNibbleSize) << kNibbleSize) + + GETBITS8(*(section + 1), kHighNibble, kNibbleSize)); +} + +/// Calculate the checksum for a given state section. +/// @param[in] section The array to calc the checksum of. /// @return The calculated checksum value. -uint8_t IRSamsungAc::calcChecksum(const uint8_t state[], - const uint16_t length) { +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1538#issuecomment-894645947 +uint8_t IRSamsungAc::calcSectionChecksum(const uint8_t *section) { uint8_t sum = 0; - // Safety check so we don't go outside the array. - if (length < 7) return 255; - // Shamelessly inspired by: - // https://github.com/adafruit/Raw-IR-decoder-for-Arduino/pull/3/files - // Count most of the '1' bits after the checksum location. - sum += countBits(state[length - 7], 8); - sum -= countBits(GETBITS8(state[length - 6], kLowNibble, kNibbleSize), 8); - sum += countBits(GETBITS8(state[length - 5], 1, 7), 8); - sum += countBits(state + length - 4, 3); - return GETBITS8(28 - sum, kLowNibble, kNibbleSize); + + sum += countBits(*section, 8); // Include the entire first byte + // The lower half of the second byte. + sum += countBits(GETBITS8(*(section + 1), kLowNibble, kNibbleSize), 8); + // The upper half of the third byte. + sum += countBits(GETBITS8(*(section + 2), kHighNibble, kNibbleSize), 8); + // The next 4 bytes. + sum += countBits(section + 3, 4); + // Bitwise invert the result. + return sum ^ UINT8_MAX; } /// Verify the checksum is valid for a given state. @@ -314,22 +323,29 @@ uint8_t IRSamsungAc::calcChecksum(const uint8_t state[], /// @param[in] length The length/size of the array. /// @return true, if the state has a valid checksum. Otherwise, false. bool IRSamsungAc::validChecksum(const uint8_t state[], const uint16_t length) { - if (length < kSamsungAcStateLength) - return true; // No checksum to compare with. Assume okay. - uint8_t offset = 0; - if (length >= kSamsungAcExtendedStateLength) offset = 7; - return (GETBITS8(state[length - 6], kHighNibble, kNibbleSize) == - IRSamsungAc::calcChecksum(state, length)) && - (GETBITS8(state[length - (13 + offset)], kHighNibble, kNibbleSize) == - IRSamsungAc::calcChecksum(state, length - (7 + offset))); + bool result = true; + const uint16_t maxlength = + (length > kSamsungAcExtendedStateLength) ? kSamsungAcExtendedStateLength + : length; + for (uint16_t offset = 0; + offset + kSamsungAcSectionLength <= maxlength; + offset += kSamsungAcSectionLength) + result &= (getSectionChecksum(state + offset) == + calcSectionChecksum(state + offset)); + return result; } /// Update the checksum for the internal state. -/// @param[in] length The length/size of the internal array to checksum. -void IRSamsungAc::checksum(uint16_t length) { - if (length < 13) return; - _.Sum2 = calcChecksum(_.raw, length); - _.Sum1 = calcChecksum(_.raw, length - 7); +void IRSamsungAc::checksum(void) { + uint8_t sectionsum = calcSectionChecksum(_.raw); + _.Sum1Upper = GETBITS8(sectionsum, kHighNibble, kNibbleSize); + _.Sum1Lower = GETBITS8(sectionsum, kLowNibble, kNibbleSize); + sectionsum = calcSectionChecksum(_.raw + kSamsungAcSectionLength); + _.Sum2Upper = GETBITS8(sectionsum, kHighNibble, kNibbleSize); + _.Sum2Lower = GETBITS8(sectionsum, kLowNibble, kNibbleSize); + sectionsum = calcSectionChecksum(_.raw + kSamsungAcSectionLength * 2); + _.Sum3Upper = GETBITS8(sectionsum, kHighNibble, kNibbleSize); + _.Sum3Lower = GETBITS8(sectionsum, kLowNibble, kNibbleSize); } #if SEND_SAMSUNG_AC @@ -339,18 +355,14 @@ void IRSamsungAc::checksum(uint16_t length) { /// @note Use for most function/mode/settings changes to the unit. /// i.e. When the device is already running. void IRSamsungAc::send(const uint16_t repeat, const bool calcchecksum) { - if (calcchecksum) checksum(); - // Do we need to send a the special power on/off message? - if (getPower() != _lastsentpowerstate || _forcepower) { - _forcepower = false; // It will now been sent, so clear the flag if set. - if (getPower()) { - sendOn(repeat); - } else { - sendOff(repeat); - return; // No point sending anything else if we are turning the unit off. - } + // Do we need to send a the special power on/off message? i.e. An Extended Msg + if (getPower() != _lastsentpowerstate || _forcepower) { // We do. + sendExtended(repeat, calcchecksum); + _forcepower = false; // It has now been sent, so clear the flag if set. + } else { // No, it's just a normal message. + if (calcchecksum) checksum(); + _irsend.sendSamsungAC(_.raw, kSamsungAcStateLength, repeat); } - _irsend.sendSamsungAC(_.raw, kSamsungAcStateLength, repeat); } /// Send the extended current internal state as an IR message. @@ -360,20 +372,24 @@ void IRSamsungAc::send(const uint16_t repeat, const bool calcchecksum) { /// Samsung A/C requires an extended length message when you want to /// change the power operating mode of the A/C unit. void IRSamsungAc::sendExtended(const uint16_t repeat, const bool calcchecksum) { + static const uint8_t extended_middle_section[kSamsungAcSectionLength] = { + 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00}; if (calcchecksum) checksum(); - uint8_t extended_state[kSamsungAcExtendedStateLength] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - // Copy/convert the internal state to an extended state. - for (uint16_t i = 0; i < kSamsungAcSectionLength; i++) - extended_state[i] = _.raw[i]; - for (uint16_t i = kSamsungAcSectionLength; i < kSamsungAcStateLength; i++) - extended_state[i + kSamsungAcSectionLength] = _.raw[i]; - // extended_state[8] seems special. This is a guess on how to calculate it. - extended_state[8] = (extended_state[1] & 0x9F) | 0x40; + // Copy/convert the internal state to an extended state by + // copying the second section to the third section, and inserting the extended + // middle (second) section. + std::memcpy(_.raw + 2 * kSamsungAcSectionLength, + _.raw + kSamsungAcSectionLength, + kSamsungAcSectionLength); + std::memcpy(_.raw + kSamsungAcSectionLength, extended_middle_section, + kSamsungAcSectionLength); // Send it. - _irsend.sendSamsungAC(extended_state, kSamsungAcExtendedStateLength, repeat); + _irsend.sendSamsungAC(_.raw, kSamsungAcExtendedStateLength, repeat); + // Now revert it by copying the third section over the second section. + std::memcpy(_.raw + kSamsungAcSectionLength, + _.raw + 2* kSamsungAcSectionLength, + kSamsungAcSectionLength); + _lastsentpowerstate = getPower(); // Remember the last power state sent. } /// Send the special extended "On" message as the library can't seem to @@ -381,7 +397,7 @@ void IRSamsungAc::sendExtended(const uint16_t repeat, const bool calcchecksum) { /// @param[in] repeat Nr. of times the message will be repeated. /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/604#issuecomment-475020036 void IRSamsungAc::sendOn(const uint16_t repeat) { - const uint8_t extended_state[21] = { + const uint8_t extended_state[kSamsungAcExtendedStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0}; @@ -394,7 +410,7 @@ void IRSamsungAc::sendOn(const uint16_t repeat) { /// @param[in] repeat Nr. of times the message will be repeated. /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/604#issuecomment-475020036 void IRSamsungAc::sendOff(const uint16_t repeat) { - const uint8_t extended_state[21] = { + const uint8_t extended_state[kSamsungAcExtendedStateLength] = { 0x02, 0xB2, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xFF, 0x71, 0x80, 0x11, 0xC0}; diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Samsung.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.h similarity index 80% rename from lib/lib_basic/IRremoteESP8266/src/ir_Samsung.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.h index 7a968cf05..bf9215edc 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Samsung.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Samsung.h @@ -6,6 +6,7 @@ /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/621 /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1062 /// @see http://elektrolab.wz.cz/katalog/samsung_protocol.pdf +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1538 (Checksum) // Supports: // Brand: Samsung, Model: UA55H6300 TV (SAMSUNG) @@ -20,6 +21,8 @@ // Brand: Samsung, Model: AR12KSFPEWQNET A/C (SAMSUNG_AC) // Brand: Samsung, Model: AR12HSSDBWKNEU A/C (SAMSUNG_AC) // Brand: Samsung, Model: AR12NXCXAWKXEU A/C (SAMSUNG_AC) +// Brand: Samsung, Model: AR09HSFSBWKN A/C (SAMSUNG_AC) +// Brand: Samsung, Model: DB93-14195A remote (SAMSUNG_AC) #ifndef IR_SAMSUNG_H_ #define IR_SAMSUNG_H_ @@ -86,19 +89,59 @@ union SamsungProtocol{ uint8_t :6; }; struct { - uint8_t :8; + // 1st Section + // Byte 0 + uint8_t :8; // Byte 1 - uint8_t :4; - uint8_t Sum1 :4; - uint8_t pad1[6]; + uint8_t :4; + uint8_t Sum1Lower :4; + // Byte 2 + uint8_t Sum1Upper :4; + uint8_t :4; + // Byte 3 + uint8_t :8; + // Byte 4 + uint8_t :8; + // Byte 5 + uint8_t :8; + // Byte 6 + uint8_t :8; + // 2nd Section + // Byte 7 + uint8_t :8; // Byte 8 - uint8_t :4; - uint8_t Sum2 :4; - uint8_t :8; + uint8_t :4; + uint8_t Sum2Lower :4; + // Byte 9 + uint8_t Sum2Upper :4; + uint8_t :4; // Byte 10 - uint8_t :1; - uint8_t Breeze :3; // WindFree - uint8_t :4; + uint8_t :1; + uint8_t Breeze :3; // WindFree + uint8_t :4; + // Byte 11 + uint8_t :8; + // Byte 12 + uint8_t :8; + // Byte 13 + uint8_t :8; + // 3rd Section + // Byte 14 + uint8_t :8; + // Byte 15 + uint8_t :4; + uint8_t Sum3Lower :4; + // Byte 16 + uint8_t Sum3Upper :4; + uint8_t :4; + // Byte 17 + uint8_t :8; + // Byte 18 + uint8_t :8; + // Byte 19 + uint8_t :8; + // Byte 20 + uint8_t :8; }; }; @@ -108,8 +151,8 @@ const uint8_t kSamsungAcSwingMove = 0b010; const uint8_t kSamsungAcSwingStop = 0b111; const uint8_t kSamsungAcPowerful10On = 0b011; const uint8_t kSamsungAcBreezeOn = 0b101; -const uint8_t kSamsungAcMinTemp = 16; // C Mask 0b11110000 -const uint8_t kSamsungAcMaxTemp = 30; // C Mask 0b11110000 +const uint8_t kSamsungAcMinTemp = 16; // C Mask 0b11110000 +const uint8_t kSamsungAcMaxTemp = 30; // C Mask 0b11110000 const uint8_t kSamsungAcAutoTemp = 25; // C Mask 0b11110000 const uint8_t kSamsungAcAuto = 0; const uint8_t kSamsungAcCool = 1; @@ -175,10 +218,10 @@ class IRSamsungAc { uint8_t* getRaw(void); void setRaw(const uint8_t new_code[], const uint16_t length = kSamsungAcStateLength); + static uint8_t calcSectionChecksum(const uint8_t *section); + static uint8_t getSectionChecksum(const uint8_t *section); static bool validChecksum(const uint8_t state[], const uint16_t length = kSamsungAcStateLength); - static uint8_t calcChecksum(const uint8_t state[], - const uint16_t length = kSamsungAcStateLength); static uint8_t convertMode(const stdAc::opmode_t mode); static uint8_t convertFan(const stdAc::fanspeed_t speed); static stdAc::opmode_t toCommonMode(const uint8_t mode); @@ -197,7 +240,7 @@ class IRSamsungAc { SamsungProtocol _; bool _forcepower; ///< Hack to know when we need to send a special power mesg bool _lastsentpowerstate; - void checksum(const uint16_t length = kSamsungAcStateLength); + void checksum(void); }; #endif // IR_SAMSUNG_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.cpp similarity index 66% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.cpp index 637d346fb..7dbed5a58 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.cpp @@ -1,6 +1,6 @@ // Copyright 2009 Ken Shirriff // Copyright 2016 marcosamarinho -// Copyright 2017-2020 David Conran +// Copyright 2017-2021 David Conran /// @file /// @brief Support for Sanyo protocols. @@ -13,6 +13,7 @@ /// @see http://slydiman.narod.ru/scr/kb/sanyo.htm /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1211 /// @see https://docs.google.com/spreadsheets/d/1dYfLsnYvpjV-SgO8pdinpfuBIpSzm8Q1R5SabrLeskw/edit?usp=sharing +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1503 #include "ir_Sanyo.h" #include @@ -67,6 +68,15 @@ const uint16_t kSanyoAcZeroSpace = 550; ///< uSeconds const uint32_t kSanyoAcGap = kDefaultMessageGap; ///< uSeconds (Guess only) const uint16_t kSanyoAcFreq = 38000; ///< Hz. (Guess only) +const uint16_t kSanyoAc88HdrMark = 5400; ///< uSeconds +const uint16_t kSanyoAc88HdrSpace = 2000; ///< uSeconds +const uint16_t kSanyoAc88BitMark = 500; ///< uSeconds +const uint16_t kSanyoAc88OneSpace = 1500; ///< uSeconds +const uint16_t kSanyoAc88ZeroSpace = 750; ///< uSeconds +const uint32_t kSanyoAc88Gap = 3675; ///< uSeconds +const uint16_t kSanyoAc88Freq = 38000; ///< Hz. (Guess only) +const uint8_t kSanyoAc88ExtraTolerance = 5; /// (%) Extra tolerance to use. + #if SEND_SANYO /// Construct a Sanyo LC7461 message. /// @param[in] address The 13 bit value of the address(Custom) portion of the @@ -305,8 +315,7 @@ IRSanyoAc::IRSanyoAc(const uint16_t pin, const bool inverted, const bool use_modulation) : _irsend(pin, inverted, use_modulation) { stateReset(); } -/// Reset the state of the remote to a known good state/sequence. -/// @see https://docs.google.com/spreadsheets/d/1dYfLsnYvpjV-SgO8pdinpfuBIpSzm8Q1R5SabrLeskw/edit?ts=5f0190a5#gid=1050142776&range=A2:B2 +/// Reset the state of the remote to a known state/sequence. void IRSanyoAc::stateReset(void) { static const uint8_t kReset[kSanyoAcStateLength] = { 0x6A, 0x6D, 0x51, 0x00, 0x10, 0x45, 0x00, 0x00, 0x33}; @@ -656,3 +665,314 @@ String IRSanyoAc::toString(void) const { kOffTimerStr); return result; } + +#if SEND_SANYO_AC88 +/// Send a SanyoAc88 formatted message. +/// Status: ALPHA / Completely untested. +/// @param[in] data An array of bytes containing the IR command. +/// @warning data's bit order may change. It is not yet confirmed. +/// @param[in] nbytes Nr. of bytes of data in the array. +/// @param[in] repeat Nr. of times the message is to be repeated. +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1503 +void IRsend::sendSanyoAc88(const uint8_t data[], const uint16_t nbytes, + const uint16_t repeat) { + // (Header + Data + Footer) per repeat + sendGeneric(kSanyoAc88HdrMark, kSanyoAc88HdrSpace, + kSanyoAc88BitMark, kSanyoAc88OneSpace, + kSanyoAc88BitMark, kSanyoAc88ZeroSpace, + kSanyoAc88BitMark, kSanyoAc88Gap, + data, nbytes, kSanyoAc88Freq, false, repeat, kDutyDefault); + space(kDefaultMessageGap); // Make a guess at a post message gap. +} +#endif // SEND_SANYO_AC88 + +#if DECODE_SANYO_AC88 +/// Decode the supplied SanyoAc message. +/// Status: ALPHA / Untested. +/// @param[in,out] results Ptr to the data to decode & where to store the decode +/// @warning data's bit order may change. It is not yet confirmed. +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return A boolean. True if it can decode it, false if it can't. +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1503 +bool IRrecv::decodeSanyoAc88(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (strict && nbits != kSanyoAc88Bits) + return false; + + uint16_t used = 0; + // Compliance + const uint16_t expected_repeats = strict ? kSanyoAc88MinRepeat : 0; + + // Handle the expected nr of repeats. + for (uint16_t r = 0; r <= expected_repeats; r++) { + // Header + Data + Footer + used = matchGeneric(results->rawbuf + offset, results->state, + results->rawlen - offset, nbits, + kSanyoAc88HdrMark, kSanyoAc88HdrSpace, + kSanyoAc88BitMark, kSanyoAc88OneSpace, + kSanyoAc88BitMark, kSanyoAc88ZeroSpace, + kSanyoAc88BitMark, + // Expect an inter-message gap, or just the end of msg? + (r < expected_repeats) ? kSanyoAc88Gap + : kDefaultMessageGap, + r == expected_repeats, + _tolerance + kSanyoAc88ExtraTolerance, + kMarkExcess, false); + if (!used) return false; // No match! + offset += used; + } + + // Success + results->decode_type = decode_type_t::SANYO_AC88; + results->bits = nbits; + // No need to record the state as we stored it as we decoded it. + // As we use result->state, we don't record value, address, or command as it + // is a union data type. + return true; +} +#endif // DECODE_SANYO_AC88 + +/// Class constructor +/// @param[in] pin GPIO to be used when sending. +/// @param[in] inverted Is the output signal to be inverted? +/// @param[in] use_modulation Is frequency modulation to be used? +IRSanyoAc88::IRSanyoAc88(const uint16_t pin, const bool inverted, + const bool use_modulation) + : _irsend(pin, inverted, use_modulation) { stateReset(); } + +/// Reset the state of the remote to a known good state/sequence. +/// @see https://docs.google.com/spreadsheets/d/1dYfLsnYvpjV-SgO8pdinpfuBIpSzm8Q1R5SabrLeskw/edit?ts=5f0190a5#gid=1050142776&range=A2:B2 +void IRSanyoAc88::stateReset(void) { + static const uint8_t kReset[kSanyoAc88StateLength] = { + 0xAA, 0x55, 0xA0, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10}; + std::memcpy(_.raw, kReset, kSanyoAc88StateLength); +} + +/// Set up hardware to be able to send a message. +void IRSanyoAc88::begin(void) { _irsend.begin(); } + +#if SEND_SANYO_AC +/// Send the current internal state as IR messages. +/// @param[in] repeat Nr. of times the message will be repeated. +void IRSanyoAc88::send(const uint16_t repeat) { + _irsend.sendSanyoAc88(getRaw(), kSanyoAc88StateLength, repeat); +} +#endif // SEND_SANYO_AC + +/// Get a PTR to the internal state/code for this protocol with all integrity +/// checks passing. +/// @return PTR to a code for this protocol based on the current internal state. +uint8_t* IRSanyoAc88::getRaw(void) { + return _.raw; +} + +/// Set the internal state from a valid code for this protocol. +/// @param[in] newState A valid code for this protocol. +void IRSanyoAc88::setRaw(const uint8_t newState[]) { + std::memcpy(_.raw, newState, kSanyoAc88StateLength); +} + +/// Set the requested power state of the A/C to on. +void IRSanyoAc88::on(void) { setPower(true); } + +/// Set the requested power state of the A/C to off. +void IRSanyoAc88::off(void) { setPower(false); } + +/// Change the power setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRSanyoAc88::setPower(const bool on) { _.Power = on; } + +/// Get the value of the current power setting. +/// @return true, the setting is on. false, the setting is off. +bool IRSanyoAc88::getPower(void) const { return _.Power; } + +/// Get the operating mode setting of the A/C. +/// @return The current operating mode setting. +uint8_t IRSanyoAc88::getMode(void) const { return _.Mode; } + +/// Set the operating mode of the A/C. +/// @param[in] mode The desired operating mode. +/// @note If we get an unexpected mode, default to AUTO. +void IRSanyoAc88::setMode(const uint8_t mode) { + switch (mode) { + case kSanyoAc88Auto: + case kSanyoAc88FeelCool: + case kSanyoAc88Cool: + case kSanyoAc88FeelHeat: + case kSanyoAc88Heat: + case kSanyoAc88Fan: + _.Mode = mode; + break; + default: _.Mode = kSanyoAc88Auto; + } +} + +/// Convert a stdAc::opmode_t enum into its native mode. +/// @param[in] mode The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRSanyoAc88::convertMode(const stdAc::opmode_t mode) { + switch (mode) { + case stdAc::opmode_t::kCool: return kSanyoAc88Cool; + case stdAc::opmode_t::kHeat: return kSanyoAc88Heat; + case stdAc::opmode_t::kFan: return kSanyoAc88Fan; + default: return kSanyoAc88Auto; + } +} + +/// Convert a native mode into its stdAc equivalent. +/// @param[in] mode The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::opmode_t IRSanyoAc88::toCommonMode(const uint8_t mode) { + switch (mode) { + case kSanyoAc88FeelCool: + case kSanyoAc88Cool: + return stdAc::opmode_t::kCool; + case kSanyoAc88FeelHeat: + case kSanyoAc88Heat: + return stdAc::opmode_t::kHeat; + case kSanyoAc88Fan: + return stdAc::opmode_t::kFan; + default: + return stdAc::opmode_t::kAuto; + } +} + +/// Set the desired temperature. +/// @param[in] degrees The temperature in degrees celsius. +void IRSanyoAc88::setTemp(const uint8_t degrees) { + uint8_t temp = std::max((uint8_t)kSanyoAc88TempMin, degrees); + _.Temp = std::min((uint8_t)kSanyoAc88TempMax, temp); +} + +/// Get the current desired temperature setting. +/// @return The current setting for temp. in degrees celsius. +uint8_t IRSanyoAc88::getTemp(void) const { return _.Temp; } + +/// Set the speed of the fan. +/// @param[in] speed The desired setting. +void IRSanyoAc88::setFan(const uint8_t speed) { _.Fan = speed; } + +/// Get the current fan speed setting. +/// @return The current fan speed/mode. +uint8_t IRSanyoAc88::getFan(void) const { return _.Fan; } + +/// Convert a stdAc::fanspeed_t enum into it's native speed. +/// @param[in] speed The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRSanyoAc88::convertFan(const stdAc::fanspeed_t speed) { + switch (speed) { + case stdAc::fanspeed_t::kMin: + case stdAc::fanspeed_t::kLow: return kSanyoAc88FanLow; + case stdAc::fanspeed_t::kMedium: return kSanyoAc88FanMedium; + case stdAc::fanspeed_t::kHigh: + case stdAc::fanspeed_t::kMax: return kSanyoAc88FanHigh; + default: return kSanyoAc88FanAuto; + } +} + +/// Get the current clock time. +/// @return The time as the nr. of minutes past midnight. +uint16_t IRSanyoAc88::getClock(void) const { + return _.ClockHrs * 60 + _.ClockMins; +} + +/// Set the current clock time. +/// @param[in] mins_since_midnight The time as nr. of minutes past midnight. +void IRSanyoAc88::setClock(const uint16_t mins_since_midnight) { + uint16_t mins = std::min(mins_since_midnight, (uint16_t)(23 * 60 + 59)); + _.ClockMins = mins % 60; + _.ClockHrs = mins / 60; + _.ClockSecs = 0; +} + +/// Convert a native fan speed into its stdAc equivalent. +/// @param[in] spd The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::fanspeed_t IRSanyoAc88::toCommonFanSpeed(const uint8_t spd) { + switch (spd) { + case kSanyoAc88FanHigh: return stdAc::fanspeed_t::kHigh; + case kSanyoAc88FanMedium: return stdAc::fanspeed_t::kMedium; + case kSanyoAc88FanLow: return stdAc::fanspeed_t::kLow; + default: return stdAc::fanspeed_t::kAuto; + } +} + +/// Change the SwingV setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRSanyoAc88::setSwingV(const bool on) { _.SwingV = on; } + +/// Get the value of the current SwingV setting. +/// @return true, the setting is on. false, the setting is off. +bool IRSanyoAc88::getSwingV(void) const { return _.SwingV; } + +/// Change the Turbo setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRSanyoAc88::setTurbo(const bool on) { _.Turbo = on; } + +/// Get the value of the current Turbo setting. +/// @return true, the setting is on. false, the setting is off. +bool IRSanyoAc88::getTurbo(void) const { return _.Turbo; } + +/// Change the Filter setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRSanyoAc88::setFilter(const bool on) { _.Filter = on; } + +/// Get the value of the current Filter setting. +/// @return true, the setting is on. false, the setting is off. +bool IRSanyoAc88::getFilter(void) const { return _.Filter; } + +/// Change the Sleep setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRSanyoAc88::setSleep(const bool on) { _.Sleep = on; } + +/// Get the value of the current Sleep setting. +/// @return true, the setting is on. false, the setting is off. +bool IRSanyoAc88::getSleep(void) const { return _.Sleep; } + +/// Convert the current internal state into its stdAc::state_t equivalent. +/// @return The stdAc equivalent of the native settings. +stdAc::state_t IRSanyoAc88::toCommon(void) const { + stdAc::state_t result; + result.protocol = decode_type_t::SANYO_AC88; + result.model = -1; // Not supported. + result.power = getPower(); + result.mode = toCommonMode(_.Mode); + result.celsius = true; + result.degrees = getTemp(); + result.fanspeed = toCommonFanSpeed(_.Fan); + result.swingv = _.SwingV ? stdAc::swingv_t::kAuto : stdAc::swingv_t::kOff; + result.filter = _.Filter; + result.turbo = _.Turbo; + result.sleep = _.Sleep ? 0 : -1; + result.clock = getClock(); + // Not supported. + result.swingh = stdAc::swingh_t::kOff; + result.econo = false; + result.light = false; + result.quiet = false; + result.beep = false; + result.clean = false; + return result; +} + +/// Convert the current internal state into a human readable string. +/// @return A human readable string. +String IRSanyoAc88::toString(void) const { + String result = ""; + result.reserve(115); + result += addBoolToString(getPower(), kPowerStr, false); + result += addModeToString(_.Mode, kSanyoAc88Auto, kSanyoAc88Cool, + kSanyoAc88Heat, kSanyoAc88Auto, kSanyoAc88Fan); + result += addTempToString(getTemp()); + result += addFanToString(_.Fan, kSanyoAc88FanHigh, kSanyoAc88FanLow, + kSanyoAc88FanAuto, kSanyoAc88FanAuto, + kSanyoAc88FanMedium); + result += addBoolToString(_.SwingV, kSwingVStr); + result += addBoolToString(_.Turbo, kTurboStr); + result += addBoolToString(_.Sleep, kSleepStr); + result += addLabeledString(minsToString(getClock()), kClockStr); + return result; +} diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.h similarity index 59% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.h index d02b06c21..66376328f 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Sanyo.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sanyo.h @@ -1,4 +1,4 @@ -// Copyright 2020 David Conran +// Copyright 2020-2021 David Conran /// @file /// @brief Support for Sanyo protocols. @@ -11,6 +11,8 @@ /// @see http://slydiman.narod.ru/scr/kb/sanyo.htm /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1211 /// @see https://docs.google.com/spreadsheets/d/1dYfLsnYvpjV-SgO8pdinpfuBIpSzm8Q1R5SabrLeskw/edit?usp=sharing +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1503 +/// @see https://docs.google.com/spreadsheets/d/1weUmGAsEpfX38gg5rlDN69Uchnbr6gQl9FqHffLBIRk/edit#gid=0 // Supports: // Brand: Sanyo, Model: SA 8650B - disabled @@ -166,4 +168,115 @@ class IRSanyoAc { const uint16_t length = kSanyoAcStateLength); }; +const uint8_t kSanyoAc88Auto = 0; ///< 0b000 +const uint8_t kSanyoAc88FeelCool = 1; ///< 0b001 +const uint8_t kSanyoAc88Cool = 2; ///< 0b010 +const uint8_t kSanyoAc88FeelHeat = 3; ///< 0b011 +const uint8_t kSanyoAc88Heat = 4; ///< 0b100 +const uint8_t kSanyoAc88Fan = 5; ///< 0b101 + +const uint8_t kSanyoAc88TempMin = 10; ///< Celsius +const uint8_t kSanyoAc88TempMax = 30; ///< Celsius + +const uint8_t kSanyoAc88FanAuto = 0; ///< 0b00 +const uint8_t kSanyoAc88FanLow = 1; ///< 0b11 +const uint8_t kSanyoAc88FanMedium = 2; ///< 0b10 +const uint8_t kSanyoAc88FanHigh = 3; ///< 0b11 + +/// Native representation of a Sanyo 88-bit A/C message. +union SanyoAc88Protocol{ + uint8_t raw[kSanyoAc88StateLength]; ///< The state in IR code form. + // Ref: https://docs.google.com/spreadsheets/d/1weUmGAsEpfX38gg5rlDN69Uchnbr6gQl9FqHffLBIRk/edit#gid=0 + struct { + // Byte 0-1 + uint8_t :8; // 0xAA (Fixed?) + uint8_t :8; // 0x55 (Fixed?) + // Byte 2 + uint8_t Fan :2; + uint8_t :2; + uint8_t Mode :3; + uint8_t Power :1; + // Byte 3 + uint8_t Temp :5; + uint8_t Filter :1; + uint8_t SwingV :1; + uint8_t :1; + // Byte 4 + uint8_t ClockSecs :8; // Nr. of Seconds + // Byte 5 + uint8_t ClockMins :8; // Nr. of Minutes + // Byte 6 + uint8_t ClockHrs :8; // Nr. of Hours + // Byte 7-9 (Timer times?) + uint8_t :8; + uint8_t :8; + uint8_t :8; + // Byte 10 + uint8_t :3; + uint8_t Turbo :1; + uint8_t EnableStartTimer :1; + uint8_t EnableStopTimer :1; + uint8_t Sleep :1; + uint8_t :1; + }; +}; + +// Classes +/// Class for handling detailed Sanyo A/C messages. +class IRSanyoAc88 { + public: + explicit IRSanyoAc88(const uint16_t pin, const bool inverted = false, + const bool use_modulation = true); + void stateReset(void); +#if SEND_SANYO_AC88 + void send(const uint16_t repeat = kSanyoAc88MinRepeat); + /// Run the calibration to calculate uSec timing offsets for this platform. + /// @return The uSec timing offset needed per modulation of the IR Led. + /// @note This will produce a 65ms IR signal pulse at 38kHz. + /// Only ever needs to be run once per object instantiation, if at all. + int8_t calibrate(void) { return _irsend.calibrate(); } +#endif // SEND_SANYO_AC88 + void begin(void); + void on(void); + void off(void); + void setPower(const bool on); + bool getPower(void) const; + void setTemp(const uint8_t degrees); + uint8_t getTemp(void) const; + void setFan(const uint8_t speed); + uint8_t getFan(void) const; + void setMode(const uint8_t mode); + uint8_t getMode(void) const; + void setSleep(const bool on); + bool getSleep(void) const; + void setTurbo(const bool on); + bool getTurbo(void) const; + void setFilter(const bool on); + bool getFilter(void) const; + void setSwingV(const bool on); + bool getSwingV(void) const; + uint16_t getClock(void) const; + void setClock(const uint16_t mins_since_midnight); + void setRaw(const uint8_t newState[]); + uint8_t* getRaw(void); + static uint8_t convertMode(const stdAc::opmode_t mode); + static uint8_t convertFan(const stdAc::fanspeed_t speed); + static stdAc::opmode_t toCommonMode(const uint8_t mode); + static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); + stdAc::state_t toCommon(void) const; + String toString(void) const; +#ifndef UNIT_TEST + + private: + IRsend _irsend; ///< Instance of the IR send class +#else // UNIT_TEST + /// @cond IGNORE + IRsendTest _irsend; ///< Instance of the testing IR send class + /// @endcond +#endif // UNIT_TEST + SanyoAc88Protocol _; + void checksum(void); + static uint8_t calcChecksum(const uint8_t state[], + const uint16_t length = kSanyoAcStateLength); +}; #endif // IR_SANYO_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sharp.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sharp.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sharp.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sharp.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sharp.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sharp.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sharp.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sharp.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sherwood.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sherwood.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sherwood.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sherwood.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Sony.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sony.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Sony.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Sony.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Symphony.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Symphony.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Symphony.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Symphony.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Tcl.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.cpp similarity index 70% rename from lib/lib_basic/IRremoteESP8266/src/ir_Tcl.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.cpp index 6ec95220b..cce9d1f4c 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Tcl.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.cpp @@ -1,4 +1,4 @@ -// Copyright 2019 David Conran +// Copyright 2019, 2021 David Conran /// @file /// @brief Support for TCL protocols. @@ -53,6 +53,26 @@ void IRTcl112Ac::begin(void) { _irsend.begin(); } /// Send the current internal state as an IR message. /// @param[in] repeat Nr. of times the message will be repeated. void IRTcl112Ac::send(const uint16_t repeat) { + uint8_t save[kTcl112AcStateLength]; + // Do we need to send the special "quiet" message? + if (_quiet != _quiet_prev) { + // Backup the current state. + std::memcpy(save, _.raw, kTcl112AcStateLength); + const uint8_t quiet_off[kTcl112AcStateLength] = { + 0x23, 0xCB, 0x26, 0x02, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65}; + // Use a known good quiet/mute off/type 2 state for the time being. + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1528#issuecomment-876989044 + setRaw(quiet_off); + setQuiet(_quiet); + // Send it. + _irsend.sendTcl112Ac(getRaw(), kTcl112AcStateLength, repeat); + // Now it's been sent, update the quiet previous state. + _quiet_prev = _quiet; + // Restore the old state. + setRaw(save); + } + // Send the normal (type 1) state. _irsend.sendTcl112Ac(getRaw(), kTcl112AcStateLength, repeat); } #endif // SEND_TCL112AC @@ -62,10 +82,15 @@ void IRTcl112Ac::send(const uint16_t repeat) { /// @param[in] length The length/size of the array. /// @return The calculated checksum value. uint8_t IRTcl112Ac::calcChecksum(uint8_t state[], const uint16_t length) { - if (length) - return sumBytes(state, length - 1); - else + if (length) { + if (length > 4 && state[3] == 0x02) { // Special nessage? + return sumBytes(state, length - 1, 0xF); // Checksum needs an offset. + } else { + return sumBytes(state, length - 1); + } + } else { return 0; + } } /// Calculate & set the checksum for the current internal state of the remote. @@ -91,6 +116,9 @@ void IRTcl112Ac::stateReset(void) { 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03}; std::memcpy(_.raw, reset, kTcl112AcStateLength); + _quiet = false; + _quiet_prev = false; + _quiet_explictly_set = false; } /// Get a PTR to the internal state/code for this protocol. @@ -115,21 +143,15 @@ void IRTcl112Ac::off(void) { setPower(false); } /// Change the power setting. /// @param[in] on true, the setting is on. false, the setting is off. -void IRTcl112Ac::setPower(const bool on) { - _.Power = on; -} +void IRTcl112Ac::setPower(const bool on) { _.Power = on; } /// Get the value of the current power setting. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getPower(void) const { - return _.Power; -} +bool IRTcl112Ac::getPower(void) const { return _.Power; } /// Get the operating mode setting of the A/C. /// @return The current operating mode setting. -uint8_t IRTcl112Ac::getMode(void) const { - return _.Mode; -} +uint8_t IRTcl112Ac::getMode(void) const { return _.Mode; } /// Set the operating mode of the A/C. /// @param[in] mode The desired operating mode. @@ -193,57 +215,39 @@ void IRTcl112Ac::setFan(const uint8_t speed) { /// Get the current fan speed setting. /// @return The current fan speed/mode. -uint8_t IRTcl112Ac::getFan(void) const { - return _.Fan; -} +uint8_t IRTcl112Ac::getFan(void) const { return _.Fan; } /// Set the economy setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRTcl112Ac::setEcono(const bool on) { - _.Econo = on; -} +void IRTcl112Ac::setEcono(const bool on) { _.Econo = on; } /// Get the economy setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getEcono(void) const { - return _.Econo; -} +bool IRTcl112Ac::getEcono(void) const { return _.Econo; } /// Set the Health (Filter) setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRTcl112Ac::setHealth(const bool on) { - _.Health = on; -} +void IRTcl112Ac::setHealth(const bool on) { _.Health = on; } /// Get the Health (Filter) setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getHealth(void) const { - return _.Health; -} +bool IRTcl112Ac::getHealth(void) const { return _.Health; } /// Set the Light (LED/Display) setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRTcl112Ac::setLight(const bool on) { - _.Light = !on; // Cleared when on. -} +void IRTcl112Ac::setLight(const bool on) { _.Light = !on; } // Cleared when on. /// Get the Light (LED/Display) setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getLight(void) const { - return !_.Light; -} +bool IRTcl112Ac::getLight(void) const { return !_.Light; } /// Set the horizontal swing setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. -void IRTcl112Ac::setSwingHorizontal(const bool on) { - _.SwingH = on; -} +void IRTcl112Ac::setSwingHorizontal(const bool on) { _.SwingH = on; } /// Get the horizontal swing setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getSwingHorizontal(void) const { - return _.SwingH; -} +bool IRTcl112Ac::getSwingHorizontal(void) const { return _.SwingH; } /// Set the vertical swing setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -253,9 +257,7 @@ void IRTcl112Ac::setSwingVertical(const bool on) { /// Get the vertical swing setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getSwingVertical(void) const { - return _.SwingV; -} +bool IRTcl112Ac::getSwingVertical(void) const { return _.SwingV; } /// Set the Turbo setting of the A/C. /// @param[in] on true, the setting is on. false, the setting is off. @@ -269,8 +271,24 @@ void IRTcl112Ac::setTurbo(const bool on) { /// Get the Turbo setting of the A/C. /// @return true, the setting is on. false, the setting is off. -bool IRTcl112Ac::getTurbo(void) const { - return _.Turbo; +bool IRTcl112Ac::getTurbo(void) const { return _.Turbo; } + +/// Set the Quiet setting of the A/C. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRTcl112Ac::setQuiet(const bool on) { + _quiet_explictly_set = true; + _quiet = on; + if (_.MsgType == kTcl112AcSpecial) _.Quiet = on; +} + +/// Get the Quiet setting of the A/C. +/// @param[in] def The default value to use if we are not sure. +/// @return true, the setting is on. false, the setting is off. +bool IRTcl112Ac::getQuiet(const bool def) const { + if (_.MsgType == kTcl112AcSpecial) + return _.Quiet; + else + return _quiet_explictly_set ? _quiet : def; } /// Convert a stdAc::opmode_t enum into its native mode. @@ -326,26 +344,30 @@ stdAc::fanspeed_t IRTcl112Ac::toCommonFanSpeed(const uint8_t spd) { } /// Convert the current internal state into its stdAc::state_t equivalent. +/// @param[in] prev Ptr to the previous state if required. /// @return The stdAc equivalent of the native settings. -stdAc::state_t IRTcl112Ac::toCommon(void) const { +stdAc::state_t IRTcl112Ac::toCommon(const stdAc::state_t *prev) const { stdAc::state_t result; + // Start with the previous state if given it. + if (prev != NULL) result = *prev; result.protocol = decode_type_t::TCL112AC; result.model = -1; // Not supported. - result.power = _.Power; - result.mode = toCommonMode(_.Mode); - result.celsius = true; - result.degrees = getTemp(); - result.fanspeed = toCommonFanSpeed(_.Fan); - result.swingv = _.SwingV ? stdAc::swingv_t::kAuto : - stdAc::swingv_t::kOff; - result.swingh = _.SwingH ? stdAc::swingh_t::kAuto : - stdAc::swingh_t::kOff; - result.turbo = _.Turbo; - result.light = getLight(); - result.filter = _.Health; - result.econo = _.Econo; + result.quiet = getQuiet(result.quiet); + // The rest only get updated if it is a "normal" message. + if (_.MsgType == kTcl112AcNormal) { + result.power = _.Power; + result.mode = toCommonMode(_.Mode); + result.celsius = true; + result.degrees = getTemp(); + result.fanspeed = toCommonFanSpeed(_.Fan); + result.swingv = _.SwingV ? stdAc::swingv_t::kAuto : stdAc::swingv_t::kOff; + result.swingh = _.SwingH ? stdAc::swingh_t::kAuto : stdAc::swingh_t::kOff; + result.turbo = _.Turbo; + result.filter = _.Health; + result.econo = _.Econo; + result.light = getLight(); + } // Not supported. - result.quiet = false; result.clean = false; result.beep = false; result.sleep = -1; @@ -357,19 +379,28 @@ stdAc::state_t IRTcl112Ac::toCommon(void) const { /// @return A human readable string. String IRTcl112Ac::toString(void) const { String result = ""; - result.reserve(140); // Reserve some heap for the string to reduce fragging. - result += addBoolToString(_.Power, kPowerStr, false); - result += addModeToString(_.Mode, kTcl112AcAuto, kTcl112AcCool, - kTcl112AcHeat, kTcl112AcDry, kTcl112AcFan); - result += addTempFloatToString(getTemp()); - result += addFanToString(_.Fan, kTcl112AcFanHigh, kTcl112AcFanLow, - kTcl112AcFanAuto, kTcl112AcFanAuto, kTcl112AcFanMed); - result += addBoolToString(_.Econo, kEconoStr); - result += addBoolToString(_.Health, kHealthStr); - result += addBoolToString(getLight(), kLightStr); - result += addBoolToString(_.Turbo, kTurboStr); - result += addBoolToString(_.SwingH, kSwingHStr); - result += addBoolToString(_.SwingV, kSwingVStr); + result.reserve(150); // Reserve some heap for the string to reduce fragging. + result += addIntToString(_.MsgType, D_STR_TYPE, false); + switch (_.MsgType) { + case kTcl112AcNormal: + result += addBoolToString(_.Power, kPowerStr); + result += addModeToString(_.Mode, kTcl112AcAuto, kTcl112AcCool, + kTcl112AcHeat, kTcl112AcDry, kTcl112AcFan); + result += addTempFloatToString(getTemp()); + result += addFanToString(_.Fan, kTcl112AcFanHigh, kTcl112AcFanLow, + kTcl112AcFanAuto, kTcl112AcFanAuto, + kTcl112AcFanMed); + result += addBoolToString(_.Econo, kEconoStr); + result += addBoolToString(_.Health, kHealthStr); + result += addBoolToString(_.Turbo, kTurboStr); + result += addBoolToString(_.SwingH, kSwingHStr); + result += addBoolToString(_.SwingV, kSwingVStr); + result += addBoolToString(getLight(), kLightStr); + break; + case kTcl112AcSpecial: + result += addBoolToString(_.Quiet, kQuietStr); + break; + } return result; } diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Tcl.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.h similarity index 88% rename from lib/lib_basic/IRremoteESP8266/src/ir_Tcl.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.h index fded2fed5..b9f059627 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Tcl.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Tcl.h @@ -1,10 +1,11 @@ -// Copyright 2019 David Conran +// Copyright 2019, 2021 David Conran /// @file /// @brief Support for TCL protocols. // Supports: // Brand: Leberg, Model: LBS-TOR07 A/C +// Brand: TCL, Model: TAC-09CHSD/XA31I A/C #ifndef IR_TCL_H_ #define IR_TCL_H_ @@ -23,12 +24,18 @@ union Tcl112Protocol{ uint8_t raw[kTcl112AcStateLength]; ///< The State in IR code form. struct { - // Byte 0~4 - uint8_t pad0[5]; + // Byte 0~2 + uint8_t pad0[3]; + // Byte 3 + uint8_t MsgType :2; + uint8_t :6; + // Byte 4 + uint8_t :8; // Byte 5 uint8_t :2; uint8_t Power :1; - uint8_t :3; + uint8_t :2; + uint8_t Quiet :1; uint8_t Light :1; uint8_t Econo :1; // Byte 6 @@ -83,6 +90,9 @@ const float kTcl112AcTempMin = 16.0; const uint8_t kTcl112AcSwingVOn = 0b111; const uint8_t kTcl112AcSwingVOff = 0b000; +// MsgType +const uint8_t kTcl112AcNormal = 0b01; +const uint8_t kTcl112AcSpecial = 0b10; // Classes /// Class for handling detailed TCL A/C messages. @@ -129,11 +139,13 @@ class IRTcl112Ac { bool getSwingVertical(void) const; void setTurbo(const bool on); bool getTurbo(void) const; + void setQuiet(const bool on); + bool getQuiet(const bool def = false) const; static uint8_t convertMode(const stdAc::opmode_t mode); static uint8_t convertFan(const stdAc::fanspeed_t speed); static stdAc::opmode_t toCommonMode(const uint8_t mode); static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); - stdAc::state_t toCommon(void) const; + stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const; String toString(void) const; #ifndef UNIT_TEST @@ -145,6 +157,9 @@ class IRTcl112Ac { /// @endcond #endif // UNIT_TEST Tcl112Protocol _; + bool _quiet_prev; + bool _quiet; + bool _quiet_explictly_set; void checksum(const uint16_t length = kTcl112AcStateLength); }; diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Technibel.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Technibel.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Technibel.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Technibel.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Technibel.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Technibel.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Technibel.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Technibel.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Teco.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teco.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Teco.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teco.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Teco.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teco.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Teco.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teco.h diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teknopoint.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teknopoint.cpp new file mode 100644 index 000000000..0feee6d70 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Teknopoint.cpp @@ -0,0 +1,75 @@ +// Copyright 2021 David Conran (crankyoldgit) +/// @file +/// @brief Support for the Teknopoint protocol +/// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1486 + +// Supports: +// Brand: Teknopoint, Model: Allegro SSA-09H A/C +// Brand: Teknopoint, Model: GZ-055B-E1 remote + +#include "IRrecv.h" +#include "IRsend.h" +#include "IRutils.h" + +// Protocol timings +const uint16_t kTeknopointHdrMark = 3600; +const uint16_t kTeknopointBitMark = 477; +const uint16_t kTeknopointHdrSpace = 1600; +const uint16_t kTeknopointOneSpace = 1200; +const uint16_t kTeknopointZeroSpace = 530; +const uint16_t kTeknopointFreq = 38000; // Hz. (Guess Only) +const uint8_t kTeknopointExtraTol = 10; // Extra tolerance percentage. + +#if SEND_TEKNOPOINT +/// Send a Teknopoint formatted message. +/// Status: BETA / Probably works. +/// @param[in] data An array of bytes containing the IR command. +/// @param[in] nbytes Nr. of bytes of data in the array. +/// @param[in] repeat Nr. of times the message is to be repeated. +void IRsend::sendTeknopoint(const uint8_t data[], const uint16_t nbytes, + const uint16_t repeat) { + sendGeneric(kTeknopointHdrMark, kTeknopointHdrSpace, + kTeknopointBitMark, kTeknopointOneSpace, + kTeknopointBitMark, kTeknopointZeroSpace, + kTeknopointBitMark, kDefaultMessageGap, + data, nbytes, // Bytes + kTeknopointFreq, false, repeat, kDutyDefault); +} +#endif // SEND_TEKNOPOINT + +#if DECODE_TEKNOPOINT +/// Decode the supplied Teknopoint message. +/// Status: Alpha / Probably works. +/// @param[in,out] results Ptr to the data to decode & where to store the decode +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return A boolean. True if it can decode it, false if it can't. +bool IRrecv::decodeTeknopoint(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (results->rawlen < 2 * nbits + kHeader + kFooter - 1 - offset) + return false; // Too short a message to match. + if (strict && nbits != kTeknopointBits) + return false; + + if (!matchGeneric(results->rawbuf + offset, results->state, + results->rawlen - offset, nbits, + kTeknopointHdrMark, kTeknopointHdrSpace, + kTeknopointBitMark, kTeknopointOneSpace, + kTeknopointBitMark, kTeknopointZeroSpace, + kTeknopointBitMark, kDefaultMessageGap, + true, _tolerance + kTeknopointExtraTol, + kMarkExcess, false)) return false; + // Compliance + if (strict) { + // Is the checksum valid? + if (sumBytes(results->state, kTeknopointStateLength - 1) != + results->state[kTeknopointStateLength - 1]) return false; + } + // Success + results->decode_type = decode_type_t::TEKNOPOINT; + results->bits = nbits; + return true; +} +#endif // DECODE_TEKNOPOINT diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Toshiba.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Toshiba.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Toshiba.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Toshiba.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Toshiba.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Toshiba.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Toshiba.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Toshiba.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Transcold.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Transcold.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Transcold.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Transcold.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Transcold.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Transcold.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Transcold.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Transcold.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Trotec.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.cpp similarity index 50% rename from lib/lib_basic/IRremoteESP8266/src/ir_Trotec.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.cpp index ffb91bd90..7cd6fff5e 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Trotec.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.cpp @@ -25,12 +25,21 @@ const uint16_t kTrotecZeroSpace = 592; const uint16_t kTrotecGap = 6184; const uint16_t kTrotecGapEnd = 1500; // made up value +const uint16_t kTrotec3550HdrMark = 12000; +const uint16_t kTrotec3550HdrSpace = 5130; +const uint16_t kTrotec3550BitMark = 550; +const uint16_t kTrotec3550OneSpace = 1950; +const uint16_t kTrotec3550ZeroSpace = 500; + +const uint16_t kTrotec3550TimerMax = 8 * 60; ///< 8 hours in Minutes. + using irutils::addBoolToString; using irutils::addFanToString; using irutils::addIntToString; using irutils::addLabeledString; using irutils::addModeToString; using irutils::addTempToString; +using irutils::minsToString; #if SEND_TROTEC /// Send a Trotec message. @@ -338,3 +347,296 @@ bool IRrecv::decodeTrotec(decode_results *results, uint16_t offset, return true; } #endif // DECODE_TROTEC + +#if SEND_TROTEC_3550 +/// Send a Trotec 3550 message. +/// Status: STABLE / Known to be working. +/// @param[in] data The message to be sent. +/// @param[in] nbytes The number of bytes of message to be sent. +/// @param[in] repeat The number of times the command is to be repeated. +void IRsend::sendTrotec3550(const unsigned char data[], const uint16_t nbytes, + const uint16_t repeat) { + sendGeneric(kTrotec3550HdrMark, kTrotec3550HdrSpace, + kTrotec3550BitMark, kTrotec3550OneSpace, + kTrotec3550BitMark, kTrotec3550ZeroSpace, + kTrotec3550BitMark, kDefaultMessageGap, + data, nbytes, 38, true, repeat, kDutyDefault); +} +#endif // SEND_TROTEC_3550 + +#if DECODE_TROTEC_3550 +/// Decode the supplied Trotec 3550 message. +/// Status: STABLE / Known to be working. +/// @param[in,out] results Ptr to the data to decode & where to store the result +/// @param[in] offset The starting index to use when attempting to decode the +/// raw data. Typically/Defaults to kStartOffset. +/// @param[in] nbits The number of data bits to expect. +/// @param[in] strict Flag indicating if we should perform strict matching. +/// @return True if it can decode it, false if it can't. +bool IRrecv::decodeTrotec3550(decode_results *results, uint16_t offset, + const uint16_t nbits, const bool strict) { + if (strict && nbits != kTrotecBits) return false; + + // Header + Data + Footer + if (!matchGeneric(results->rawbuf + offset, results->state, + results->rawlen - offset, nbits, + kTrotec3550HdrMark, kTrotec3550HdrSpace, + kTrotec3550BitMark, kTrotec3550OneSpace, + kTrotec3550BitMark, kTrotec3550ZeroSpace, + kTrotec3550BitMark, kDefaultMessageGap)) return false; + // Compliance + if (strict && !IRTrotec3550::validChecksum(results->state, nbits / 8)) + return false; + // Success + results->decode_type = TROTEC_3550; + results->bits = nbits; + // No need to record the state as we stored it as we decoded it. + // As we use result->state, we don't record value, address, or command as it + // is a union data type. + return true; +} +#endif // DECODE_TROTEC_3550 + +/// Class constructor +/// @param[in] pin GPIO to be used when sending. +/// @param[in] inverted Is the output signal to be inverted? +/// @param[in] use_modulation Is frequency modulation to be used? +IRTrotec3550::IRTrotec3550(const uint16_t pin, const bool inverted, + const bool use_modulation) + : _irsend(pin, inverted, use_modulation) { stateReset(); } + +/// Set up hardware to be able to send a message. +void IRTrotec3550::begin(void) { _irsend.begin(); } + +#if SEND_TROTEC_3550 +/// Send the current internal state as an IR message. +/// @param[in] repeat Nr. of times the message will be repeated. +void IRTrotec3550::send(const uint16_t repeat) { + _irsend.sendTrotec3550(getRaw(), kTrotecStateLength, repeat); +} +#endif // SEND_TROTEC_3550 + +/// Calculate the checksum for a given state. +/// @param[in] state The array to calc the checksum of. +/// @param[in] length The length/size of the array. +/// @return The calculated checksum value. +uint8_t IRTrotec3550::calcChecksum(const uint8_t state[], + const uint16_t length) { + return length ? sumBytes(state, length - 1) : 0; +} + +/// Verify the checksum is valid for a given state. +/// @param[in] state The array to verify the checksum of. +/// @param[in] length The length/size of the array. +/// @return true, if the state has a valid checksum. Otherwise, false. +bool IRTrotec3550::validChecksum(const uint8_t state[], const uint16_t length) { + return state[length - 1] == calcChecksum(state, length); +} + +/// Calculate & set the checksum for the current internal state of the remote. +void IRTrotec3550::checksum(void) { _.Sum = calcChecksum(_.raw); } + +/// Reset the state of the remote to a known good state/sequence. +void IRTrotec3550::stateReset(void) { + static const uint8_t kReset[kTrotecStateLength] = { + 0x55, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x10, 0x88, 0x5A}; + std::memcpy(_.raw, kReset, kTrotecStateLength); +} + +/// Get a PTR to the internal state/code for this protocol. +/// @return PTR to a code for this protocol based on the current internal state. +uint8_t* IRTrotec3550::getRaw(void) { + checksum(); + return _.raw; +} + +/// Set the internal state from a valid code for this protocol. +/// @param[in] state A valid code for this protocol. +void IRTrotec3550::setRaw(const uint8_t state[]) { + memcpy(_.raw, state, kTrotecStateLength); +} + +/// Set the requested power state of the A/C to on. +void IRTrotec3550::on(void) { setPower(true); } + +/// Set the requested power state of the A/C to off. +void IRTrotec3550::off(void) { setPower(false); } + +/// Change the power setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRTrotec3550::setPower(const bool on) { _.Power = on; } + +/// Get the value of the current power setting. +/// @return true, the setting is on. false, the setting is off. +bool IRTrotec3550::getPower(void) const { return _.Power; } + +/// Set the speed of the fan. +/// @param[in] fan The desired setting. +void IRTrotec3550::setFan(const uint8_t fan) { + uint8_t speed = std::min(fan, kTrotecFanHigh); + _.Fan = speed; +} + +/// Get the current fan speed setting. +/// @return The current fan speed/mode. +uint8_t IRTrotec3550::getFan(void) const { return _.Fan; } + +/// Set the operating mode of the A/C. +/// @param[in] mode The desired operating mode. +void IRTrotec3550::setMode(const uint8_t mode) { + _.Mode = (mode > kTrotecFan) ? kTrotecAuto : mode; +} + +/// Get the operating mode setting of the A/C. +/// @return The current operating mode setting. +uint8_t IRTrotec3550::getMode(void) const { return _.Mode; } + +/// Set the temperature. +/// @param[in] degrees The temperature in degrees. +/// @param[in] celsius Use celsius units. True, Celsius; False Fahrenheit. +void IRTrotec3550::setTemp(const uint8_t degrees, const bool celsius) { + setTempUnit(celsius); + uint8_t minTemp = kTrotec3550MinTempC; + uint8_t maxTemp = kTrotec3550MaxTempC; + if (!celsius) { // Fahrenheit? + minTemp = kTrotec3550MinTempF; + maxTemp = kTrotec3550MaxTempF; + } + uint8_t temp = std::max(degrees, minTemp); + temp = std::min(temp, maxTemp); + if (celsius) { + _.TempC = temp - minTemp; + _.TempF = celsiusToFahrenheit(temp) - kTrotec3550MinTempF; + } else { + _.TempF = temp - minTemp; + _.TempC = fahrenheitToCelsius(temp) - kTrotec3550MinTempC; + } +} + +/// Get the current temperature setting. +/// @return The current setting for temp. in degrees. +uint8_t IRTrotec3550::getTemp(void) const { + return getTempUnit() ? _.TempC + kTrotec3550MinTempC + : _.TempF + kTrotec3550MinTempF; +} + +/// Set the temperature unit that the A/C will use.. +/// @param[in] celsius Use celsius units. True, Celsius; False Fahrenheit. +void IRTrotec3550::setTempUnit(const bool celsius) { _.Celsius = celsius; } + +/// Get the current temperature unit setting. +/// @return True, Celsius; False Fahrenheit. +bool IRTrotec3550::getTempUnit(void) const { return _.Celsius; } + +/// Change the Vertical Swing setting. +/// @param[in] on true, the setting is on. false, the setting is off. +void IRTrotec3550::setSwingV(const bool on) { _.SwingV = on; } + +/// Get the value of the current Vertical Swing setting. +/// @return true, the setting is on. false, the setting is off. +bool IRTrotec3550::getSwingV(void) const { return _.SwingV; } + +/// Get the number of minutes of the Timer setting. +/// @return Nr of minutes. +uint16_t IRTrotec3550::getTimer(void) const { return _.TimerHrs * 60; } + +/// Set the number of minutes of the Timer setting. +/// @param[in] mins Nr. of Minutes for the Timer. `0` means disable the timer. +void IRTrotec3550::setTimer(const uint16_t mins) { + _.TimerSet = mins > 0; + _.TimerHrs = (std::min(mins, kTrotec3550TimerMax) / 60); +} + +/// Convert a stdAc::opmode_t enum into its native mode. +/// @param[in] mode The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRTrotec3550::convertMode(const stdAc::opmode_t mode) { + switch (mode) { + case stdAc::opmode_t::kCool: return kTrotecCool; + case stdAc::opmode_t::kDry: return kTrotecDry; + case stdAc::opmode_t::kFan: return kTrotecFan; + // Note: No Heat mode. + default: return kTrotecAuto; + } +} + +/// Convert a stdAc::fanspeed_t enum into it's native speed. +/// @param[in] speed The enum to be converted. +/// @return The native equivalent of the enum. +uint8_t IRTrotec3550::convertFan(const stdAc::fanspeed_t speed) { + switch (speed) { + case stdAc::fanspeed_t::kMin: + case stdAc::fanspeed_t::kLow: return kTrotecFanLow; + case stdAc::fanspeed_t::kMedium: return kTrotecFanMed; + case stdAc::fanspeed_t::kHigh: + case stdAc::fanspeed_t::kMax: return kTrotecFanHigh; + default: return kTrotecFanMed; + } +} + +/// Convert a native mode into its stdAc equivalent. +/// @param[in] mode The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::opmode_t IRTrotec3550::toCommonMode(const uint8_t mode) { + switch (mode) { + case kTrotecCool: return stdAc::opmode_t::kCool; + case kTrotecDry: return stdAc::opmode_t::kDry; + case kTrotecFan: return stdAc::opmode_t::kFan; + default: return stdAc::opmode_t::kAuto; + } +} + +/// Convert a native fan speed into its stdAc equivalent. +/// @param[in] spd The native setting to be converted. +/// @return The stdAc equivalent of the native setting. +stdAc::fanspeed_t IRTrotec3550::toCommonFanSpeed(const uint8_t spd) { + switch (spd) { + case kTrotecFanHigh: return stdAc::fanspeed_t::kMax; + case kTrotecFanMed: return stdAc::fanspeed_t::kMedium; + case kTrotecFanLow: return stdAc::fanspeed_t::kMin; + default: return stdAc::fanspeed_t::kAuto; + } +} + +/// Convert the current internal state into its stdAc::state_t equivalent. +/// @return The stdAc equivalent of the native settings. +stdAc::state_t IRTrotec3550::toCommon(void) const { + stdAc::state_t result; + result.protocol = decode_type_t::TROTEC_3550; + result.power = _.Power; + result.mode = toCommonMode(_.Mode); + result.celsius = getTempUnit(); + result.degrees = getTemp(); + result.fanspeed = toCommonFanSpeed(_.Fan); + result.swingv = _.SwingV ? stdAc::swingv_t::kAuto : stdAc::swingv_t::kOff; + // Not supported. + result.model = -1; + result.swingh = stdAc::swingh_t::kOff; + result.turbo = false; + result.light = false; + result.filter = false; + result.econo = false; + result.quiet = false; + result.clean = false; + result.beep = false; + result.sleep = -1; + result.clock = -1; + return result; +} + +/// Convert the current internal state into a human readable string. +/// @return A human readable string. +String IRTrotec3550::toString(void) const { + String result = ""; + result.reserve(80); // Reserve some heap for the string to reduce fragging. + result += addBoolToString(_.Power, kPowerStr, false); + result += addModeToString(_.Mode, kTrotecAuto, kTrotecCool, kTrotecAuto, + kTrotecDry, kTrotecFan); + result += addTempToString(getTemp(), _.Celsius); + result += addFanToString(_.Fan, kTrotecFanHigh, kTrotecFanLow, + kTrotecFanHigh, kTrotecFanHigh, kTrotecFanMed); + result += addBoolToString(_.SwingV, kSwingVStr); + result += addLabeledString(_.TimerSet ? minsToString(getTimer()) : kOffStr, + kTimerStr); + return result; +} diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Trotec.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.h similarity index 53% rename from lib/lib_basic/IRremoteESP8266/src/ir_Trotec.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.h index 8713a99f1..3381ec3f2 100644 --- a/lib/lib_basic/IRremoteESP8266/src/ir_Trotec.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Trotec.h @@ -7,8 +7,10 @@ /// @see https://github.com/crankyoldgit/IRremoteESP8266/issues/1176 // Supports: -// Brand: Trotec, Model: PAC 3200 A/C -// Brand: Duux, Model: Blizzard Smart 10K / DXMA04 A/C +// Brand: Trotec, Model: PAC 3200 A/C (TROTEC) +// Brand: Trotec, Model: PAC 3550 Pro A/C (TROTEC_3550) +// Brand: Duux, Model: Blizzard Smart 10K / DXMA04 A/C (TROTEC) +// For Trotec Model PAC 3900 X, use the Midea protocol instead. #ifndef IR_TROTEC_H_ #define IR_TROTEC_H_ @@ -74,6 +76,46 @@ const uint8_t kTrotecMaxTemp = 32; const uint8_t kTrotecMaxTimer = 23; +/// Native representation of a Trotec 3550 A/C message. +union Trotec3550Protocol{ + uint8_t raw[kTrotecStateLength]; ///< Remote state in IR code form. + struct { + // Byte 0 + uint8_t Intro: 8; // fixed value (0x55) + // Byte 1 + uint8_t SwingV :1; + uint8_t Power :1; + uint8_t :1; // Unknown + uint8_t TimerSet :1; + uint8_t TempC :4; // Temp + kTrotec3550MinTempC for degC) + // Byte 2 + uint8_t TimerHrs :4; + uint8_t :4; // Unknown + // Byte 3 + uint8_t TempF :5; // Temp + kTrotec3550MinTempF for degF) + uint8_t :3; // Unknown + // Byte 4 + uint8_t :8; // Unknown + // Byte 5 + uint8_t :8; // Unknown + // Byte 6 + uint8_t Mode :2; + uint8_t :2; // Unknown + uint8_t Fan :2; + uint8_t :2; // Unknown + // Byte 7 + uint8_t :7; // Unknown + uint8_t Celsius :1; // DegC or DegF + // Byte 8 + uint8_t Sum :8; + }; +}; + +const uint8_t kTrotec3550MinTempC = 16; +const uint8_t kTrotec3550MaxTempC = 30; +const uint8_t kTrotec3550MinTempF = 59; +const uint8_t kTrotec3550MaxTempF = 86; + // Legacy defines. (Deprecated) #define TROTEC_AUTO kTrotecAuto #define TROTEC_COOL kTrotecCool @@ -130,6 +172,8 @@ class IRTrotecESP { void setRaw(const uint8_t state[]); static bool validChecksum(const uint8_t state[], const uint16_t length = kTrotecStateLength); + static uint8_t calcChecksum(const uint8_t state[], + const uint16_t length = kTrotecStateLength); static uint8_t convertMode(const stdAc::opmode_t mode); static uint8_t convertFan(const stdAc::fanspeed_t speed); static stdAc::opmode_t toCommonMode(const uint8_t mode); @@ -146,9 +190,63 @@ class IRTrotecESP { /// @endcond #endif // UNIT_TEST TrotecProtocol _; - static uint8_t calcChecksum(const uint8_t state[], - const uint16_t length = kTrotecStateLength); void checksum(void); }; +// Class +/// Class for handling detailed Trotec 3550 A/C messages. +class IRTrotec3550 { + public: + explicit IRTrotec3550(const uint16_t pin, const bool inverted = false, + const bool use_modulation = true); +#if SEND_TROTEC_3550 + void send(const uint16_t repeat = kTrotecDefaultRepeat); + /// Run the calibration to calculate uSec timing offsets for this platform. + /// @return The uSec timing offset needed per modulation of the IR Led. + /// @note This will produce a 65ms IR signal pulse at 38kHz. + /// Only ever needs to be run once per object instantiation, if at all. + int8_t calibrate(void) { return _irsend.calibrate(); } +#endif // SEND_TROTEC_3550 + void begin(void); + void stateReset(void); + void on(void); + void off(void); + void setPower(const bool state); + bool getPower(void) const; + void setTemp(const uint8_t degrees, const bool celsius = true); + uint8_t getTemp(void) const; + void setTempUnit(const bool celsius); + bool getTempUnit(void) const; + void setFan(const uint8_t fan); + uint8_t getFan(void) const; + uint8_t getMode(void) const; + void setMode(const uint8_t mode); + bool getSwingV(void) const; + void setSwingV(const bool on); + uint16_t getTimer(void) const; + void setTimer(const uint16_t mins); + uint8_t* getRaw(void); + void setRaw(const uint8_t state[]); + static bool validChecksum(const uint8_t state[], + const uint16_t length = kTrotecStateLength); + static uint8_t calcChecksum(const uint8_t state[], + const uint16_t length = kTrotecStateLength); + static uint8_t convertMode(const stdAc::opmode_t mode); + static uint8_t convertFan(const stdAc::fanspeed_t speed); + static stdAc::opmode_t toCommonMode(const uint8_t mode); + static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); + stdAc::state_t toCommon(void) const; + String toString(void) const; +#ifndef UNIT_TEST + + private: + IRsend _irsend; ///< Instance of the IR send class +#else // UNIT_TEST + /// @cond IGNORE + IRsendTest _irsend; ///< Instance of the testing IR send class + /// @endcond +#endif // UNIT_TEST + Trotec3550Protocol _; + void checksum(void); +}; #endif // IR_TROTEC_H_ diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Truma.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Truma.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Truma.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Truma.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Truma.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Truma.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Truma.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Truma.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Vestel.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Vestel.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Vestel.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Vestel.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Vestel.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Vestel.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Vestel.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Vestel.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Voltas.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Voltas.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Voltas.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Voltas.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Voltas.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Voltas.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Voltas.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Voltas.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Whirlpool.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whirlpool.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Whirlpool.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whirlpool.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Whirlpool.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whirlpool.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Whirlpool.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whirlpool.h diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Whynter.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whynter.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Whynter.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Whynter.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Xmp.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Xmp.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Xmp.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Xmp.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_Zepeal.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Zepeal.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/ir_Zepeal.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/ir_Zepeal.cpp diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/README.md b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/README.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/README.md rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/README.md diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/de-CH.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/de-CH.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/de-CH.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/de-CH.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/de-DE.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/de-DE.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/de-DE.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/de-DE.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/defaults.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/defaults.h similarity index 96% rename from lib/lib_basic/IRremoteESP8266/src/locale/defaults.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/defaults.h index ba29e7895..b55b87abc 100644 --- a/lib/lib_basic/IRremoteESP8266/src/locale/defaults.h +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/defaults.h @@ -90,6 +90,9 @@ #ifndef D_STR_OFFTIMER #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER // Set `D_STR_OFF` first! #endif // D_STR_OFFTIMER +#ifndef D_STR_TIMERMODE +#define D_STR_TIMERMODE D_STR_TIMER " " D_STR_MODE // Set `D_STR_MODE` first! +#endif // D_STR_TIMERMODE #ifndef D_STR_CLOCK #define D_STR_CLOCK "Clock" #endif // D_STR_CLOCK @@ -279,6 +282,9 @@ #ifndef D_STR_ID #define D_STR_ID "Id" #endif // D_STR_ID +#ifndef D_STR_VANE +#define D_STR_VANE "Vane" +#endif // D_STR_VANE #ifndef D_STR_AUTO #define D_STR_AUTO "Auto" @@ -502,6 +508,9 @@ #ifndef D_STR_ARGO #define D_STR_ARGO "ARGO" #endif // D_STR_ARGO +#ifndef D_STR_BOSE +#define D_STR_BOSE "BOSE" +#endif // D_STR_BOSE #ifndef D_STR_CARRIER_AC #define D_STR_CARRIER_AC "CARRIER_AC" #endif // D_STR_CARRIER_AC @@ -586,6 +595,9 @@ #ifndef D_STR_HAIER_AC_YRW02 #define D_STR_HAIER_AC_YRW02 "HAIER_AC_YRW02" #endif // D_STR_HAIER_AC_YRW02 +#ifndef D_STR_HAIER_AC176 +#define D_STR_HAIER_AC176 "HAIER_AC176" +#endif // D_STR_HAIER_AC176 #ifndef D_STR_HITACHI_AC #define D_STR_HITACHI_AC "HITACHI_AC" #endif // D_STR_HITACHI_AC @@ -610,6 +622,9 @@ #ifndef D_STR_JVC #define D_STR_JVC "JVC" #endif // D_STR_JVC +#ifndef D_STR_KELON +#define D_STR_KELON "KELON" +#endif // D_STR_KELON #ifndef D_STR_KELVINATOR #define D_STR_KELVINATOR "KELVINATOR" #endif // D_STR_KELVINATOR @@ -733,6 +748,9 @@ #ifndef D_STR_SANYO_AC #define D_STR_SANYO_AC "SANYO_AC" #endif // D_STR_SANYO_AC +#ifndef D_STR_SANYO_AC88 +#define D_STR_SANYO_AC88 "SANYO_AC88" +#endif // D_STR_SANYO_AC88 #ifndef D_STR_SANYO_LC7461 #define D_STR_SANYO_LC7461 "SANYO_LC7461" #endif // D_STR_SANYO_LC7461 @@ -763,6 +781,9 @@ #ifndef D_STR_TECO #define D_STR_TECO "TECO" #endif // D_STR_TECO +#ifndef D_STR_TEKNOPOINT +#define D_STR_TEKNOPOINT "TEKNOPOINT" +#endif // D_STR_TEKNOPOINT #ifndef D_STR_TOSHIBA_AC #define D_STR_TOSHIBA_AC "TOSHIBA_AC" #endif // D_STR_TOSHIBA_AC @@ -772,6 +793,9 @@ #ifndef D_STR_TROTEC #define D_STR_TROTEC "TROTEC" #endif // D_STR_TROTEC +#ifndef D_STR_TROTEC_3550 +#define D_STR_TROTEC_3550 D_STR_TROTEC "_3550" +#endif // D_STR_TROTEC_3550 #ifndef D_STR_TRUMA #define D_STR_TRUMA "TRUMA" #endif // D_STR_TRUMA diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/en-AU.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-AU.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/en-AU.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-AU.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/en-IE.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-IE.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/en-IE.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-IE.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/en-UK.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-UK.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/en-UK.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-UK.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/en-US.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-US.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/en-US.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/en-US.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/es-ES.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/es-ES.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/es-ES.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/es-ES.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/fr-FR.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/fr-FR.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/fr-FR.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/fr-FR.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/it-IT.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/it-IT.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/it-IT.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/it-IT.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/pt-BR.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/pt-BR.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/pt-BR.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/pt-BR.h diff --git a/lib/lib_basic/IRremoteESP8266/src/locale/zh-CN.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/zh-CN.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/src/locale/zh-CN.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/src/locale/zh-CN.h diff --git a/lib/lib_basic/IRremoteESP8266/test/IRac_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRac_test.cpp similarity index 88% rename from lib/lib_basic/IRremoteESP8266/test/IRac_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRac_test.cpp index abbb9cca1..140e50137 100644 --- a/lib/lib_basic/IRremoteESP8266/test/IRac_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRac_test.cpp @@ -371,7 +371,8 @@ TEST(TestIRac, Daikin176) { IRac irac(kGpioUnused); IRrecv capture(kGpioUnused); char expected[] = - "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 1 (Low), Swing(H): 5 (Auto)"; + "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 1 (Low), Swing(H): 5 (Auto), " + "Id: 0"; ac.begin(); irac.daikin176(&ac, @@ -399,7 +400,8 @@ TEST(TestIRac, Daikin2) { "Swing(V): 14 (Off), Swing(H): 170 (Middle), Clock: 00:00, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 2 (Loud), " "Light: 1 (High), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off"; + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)"; ac.begin(); irac.daikin2(&ac, @@ -781,6 +783,33 @@ TEST(TestIRac, Haier) { ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); } +TEST(TestIRac, Haier176) { + IRHaierAC176 ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + const char expected[] = + "Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 23C, " + "Fan: 2 (Medium), Turbo: 1 (High), Swing: 1 (Highest), Sleep: On, " + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off"; + ac.begin(); + irac.haier176(&ac, + true, // Power + stdAc::opmode_t::kCool, // Mode + 23, // Celsius + stdAc::fanspeed_t::kMedium, // Fan speed + stdAc::swingv_t::kHigh, // Vertical swing + true, // Turbo + true, // Filter + 8 * 60 + 0); // Sleep time + ASSERT_EQ(expected, ac.toString()); + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(HAIER_AC176, ac._irsend.capture.decode_type); + ASSERT_EQ(kHaierAC176Bits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); +} TEST(TestIRac, HaierYrwo2) { IRHaierACYRW02 ac(kGpioUnused); @@ -789,7 +818,7 @@ TEST(TestIRac, HaierYrwo2) { char expected[] = "Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 23C, " "Fan: 2 (Medium), Turbo: 1 (High), Swing: 1 (Highest), Sleep: On, " - "Health: On"; + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off"; ac.begin(); irac.haierYrwo2(&ac, @@ -1013,7 +1042,11 @@ TEST(TestIRac, LG) { true, // Power stdAc::opmode_t::kDry, // Mode 27, // Degrees C - stdAc::fanspeed_t::kMedium); // Fan speed + stdAc::fanspeed_t::kMedium, // Fan speed + stdAc::swingv_t::kLow, // Vertical swing + stdAc::swingv_t::kOff, // Vertical swing (previous) + stdAc::swingh_t::kOff, // Horizontal swing + true); // Light ASSERT_EQ(expected, ac.toString()); ac._irsend.makeDecodeResult(); @@ -1021,10 +1054,171 @@ TEST(TestIRac, LG) { ASSERT_EQ(LG, ac._irsend.capture.decode_type); ASSERT_EQ(kLgBits, ac._irsend.capture.bits); ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + // There should only be a single message. + ASSERT_EQ(61, ac._irsend.capture.rawlen); stdAc::state_t r, p; ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); } +TEST(TestIRac, LG2) { + IRLgAc ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + char expected[] = + "Model: 3 (AKB74955603), " + "Power: On, Mode: 1 (Dry), Temp: 27C, Fan: 9 (Low)"; + + ac.begin(); + irac.lg(&ac, + lg_ac_remote_model_t::AKB74955603, // Model + true, // Power + stdAc::opmode_t::kDry, // Mode + 27, // Degrees C + stdAc::fanspeed_t::kLow, // Fan speed + stdAc::swingv_t::kLow, // Vertical swing + stdAc::swingv_t::kOff, // Vertical swing (previous) + stdAc::swingh_t::kOff, // Horizontal swing + false); // Light + + ASSERT_EQ(expected, ac.toString()); + ac._irsend.makeDecodeResult(); + ASSERT_EQ(181, ac._irsend.capture.rawlen); // We expect three messages. + // Message #1 + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); + // Message #2 - SwingV Low + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(kLgAcSwingVLow, ac._irsend.capture.value); + // Message #3 - Light Toggle + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 121)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(kLgAcLightToggle, ac._irsend.capture.value); +} + +// Ref: +// https://github.com/crankyoldgit/IRremoteESP8266/issues/1513#issuecomment-877960010 +// https://docs.google.com/spreadsheets/d/1zF0FI2ENvbLdk4zaWBY9ZYVM3MB_4oxro9wCM7ETX4Y/edit#gid=348220307&range=A49:C49 +TEST(TestIRac, Issue1513) { + // Simulate sending a state with a SwingV auto, then followed by a SwingV Off. + IRLgAc ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + ac.begin(); + // IRhvac {"Vendor":"LG2", "Model": 3, "Power": "On", "Mode": "Heat", + // "Temp": 26, "FanSpeed": "min", "SwingV": "Auto", "Light": "On"} + ac._irsend.reset(); + irac.lg(&ac, + lg_ac_remote_model_t::AKB74955603, // Model + true, // Power + stdAc::opmode_t::kHeat, // Mode + 26, // Degrees C + stdAc::fanspeed_t::kMin, // Fan speed + stdAc::swingv_t::kAuto, // Vertical swing + stdAc::swingv_t::kHighest, // Vertical swing (previous) + stdAc::swingh_t::kOff, // Horizontal swing + true); // Light + ac._irsend.makeDecodeResult(); + // All sent, we assume the above works. Just need to switch to swing off now. + ac._irsend.reset(); + ac.stateReset(); + ac.send(); + // IRhvac {"Vendor":"LG2", "Model": 3, "Power": "On", "Mode": "Heat", + // "Temp": 26, "FanSpeed": "min", "SwingV": "Off", "Light": "On"} + ac._irsend.makeDecodeResult(); + ac._irsend.reset(); + irac.lg(&ac, + lg_ac_remote_model_t::AKB74955603, // Model + true, // Power + stdAc::opmode_t::kHeat, // Mode + 26, // Degrees C + stdAc::fanspeed_t::kMin, // Fan speed + stdAc::swingv_t::kOff, // Vertical swing + stdAc::swingv_t::kAuto, // Vertical swing (previous) + stdAc::swingh_t::kOff, // Horizontal swing + true); // Light + ac._irsend.makeDecodeResult(); + // There should only be two messages. + EXPECT_EQ(121, ac._irsend.capture.rawlen); + // First message should be normal. + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ( + "Model: 2 (AKB75215403), Power: On, Mode: 4 (Heat), Temp: 26C," + " Fan: 0 (Quiet)", + IRAcUtils::resultAcToString(&ac._irsend.capture)); + // The next should be a SwingV Off. + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + EXPECT_EQ(kLgAcSwingVOff, ac._irsend.capture.value); + ASSERT_EQ("Model: 3 (AKB74955603), Swing(V): 21 (Off)", + IRAcUtils::resultAcToString(&ac._irsend.capture)); +} + +TEST(TestIRac, LG2_AKB73757604) { + IRLgAc ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + char expected[] = + "Model: 2 (AKB75215403), " + "Power: On, Mode: 1 (Dry), Temp: 27C, Fan: 1 (Low)"; + + ac.begin(); + irac.lg(&ac, + lg_ac_remote_model_t::AKB73757604, // Model + true, // Power + stdAc::opmode_t::kDry, // Mode + 27, // Degrees C + stdAc::fanspeed_t::kLow, // Fan speed + stdAc::swingv_t::kLow, // Vertical swing + stdAc::swingv_t::kOff, // Vertical swing (previous) + stdAc::swingh_t::kAuto, // Horizontal swing + true); // Light + + ac._irsend.makeDecodeResult(); + ASSERT_EQ(361, ac._irsend.capture.rawlen); // We expect six messages. + // Message #1 + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); + // Message #2 - Vane 0 SwingV Low + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(0x881325B, ac._irsend.capture.value); + // Message #3 - Vane 1 SwingV Low + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 121)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(0x88132D3, ac._irsend.capture.value); + // Message #4 - Vane 2 SwingV Low + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 181)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(0x881335C, ac._irsend.capture.value); + // Message #5 - Vane 3 SwingV Low + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 241)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(0x88133D4, ac._irsend.capture.value); + // Message #6 - Horizontal swing + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 301)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(kLgAcSwingHAuto, ac._irsend.capture.value); +} + TEST(TestIRac, Midea) { IRMideaAC ac(kGpioUnused); IRac irac(kGpioUnused); @@ -1243,7 +1437,7 @@ TEST(TestIRac, Panasonic) { ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); char expected_dke[] = - "Model: 3 (DKE), Power: On, Mode: 3 (Cool), Temp: 18C, Fan: 4 (High), " + "Model: 3 (DKE), Power: On, Mode: 3 (Cool), Temp: 18C, Fan: 4 (Maximum), " "Swing(V): 2 (High), Swing(H): 6 (Middle), " "Quiet: Off, Powerful: On, Ion: On, " "Clock: 19:17, On Timer: Off, Off Timer: Off"; @@ -1347,14 +1541,9 @@ TEST(TestIRac, Samsung) { ac._irsend.makeDecodeResult(); EXPECT_TRUE(capture.decode(&ac._irsend.capture)); ASSERT_EQ(SAMSUNG_AC, ac._irsend.capture.decode_type); + // We expect an extended state because of `dopower`. ASSERT_EQ(kSamsungAcExtendedBits, ac._irsend.capture.bits); - // However, we expect a plain "on" state as it should be sent before the - // desired state. - char expected_on[] = - "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 0 (Auto), Swing: Off, " - "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " - "Light: On, Ion: Off"; - ASSERT_EQ(expected_on, IRAcUtils::resultAcToString(&ac._irsend.capture)); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); } @@ -1386,6 +1575,35 @@ TEST(TestIRac, Sanyo) { ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); } +TEST(TestIRac, Sanyo88) { + IRSanyoAc88 ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + const char expected[] = + "Power: On, Mode: 2 (Cool), Temp: 28C, Fan: 2 (Medium), Swing(V): On, " + "Turbo: On, Sleep: On, Clock: 11:40"; + + ac.begin(); + irac.sanyo88(&ac, + true, // Power + stdAc::opmode_t::kCool, // Mode + 28, // Celsius + stdAc::fanspeed_t::kMedium, // Fan speed + stdAc::swingv_t::kAuto, // Vertical Swing + true, // Turbo + true, // Filter + 17, // Sleep + 11 * 60 + 40); // Clock + ASSERT_EQ(expected, ac.toString()); + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(SANYO_AC88, ac._irsend.capture.decode_type); + ASSERT_EQ(kSanyoAc88Bits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); +} + TEST(TestIRac, Sharp) { IRSharpAc ac(kGpioUnused); IRac irac(kGpioUnused); @@ -1422,8 +1640,9 @@ TEST(TestIRac, Tcl112) { IRac irac(kGpioUnused); IRrecv capture(kGpioUnused); char expected[] = - "Power: On, Mode: 3 (Cool), Temp: 20C, Fan: 3 (Medium), Econo: On, " - "Health: On, Light: On, Turbo: Off, Swing(H): On, Swing(V): Off"; + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 20C, Fan: 3 (Medium), " + "Econo: On, Health: On, Turbo: Off, Swing(H): On, Swing(V): Off, " + "Light: On"; ac.begin(); irac.tcl112(&ac, @@ -1433,6 +1652,7 @@ TEST(TestIRac, Tcl112) { stdAc::fanspeed_t::kMedium, // Fan speed stdAc::swingv_t::kOff, // Vertical swing stdAc::swingh_t::kAuto, // Horizontal swing + false, // Quiet (aka. Mute) false, // Turbo true, // Light true, // Econo @@ -1445,6 +1665,33 @@ TEST(TestIRac, Tcl112) { ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); stdAc::state_t r, p; ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); + // Test the quiet mode, which should generate two messages. + ac._irsend.reset(); + irac.tcl112(&ac, + true, // Power + stdAc::opmode_t::kCool, // Mode + 20, // Celsius + stdAc::fanspeed_t::kMedium, // Fan speed + stdAc::swingv_t::kOff, // Vertical swing + stdAc::swingh_t::kAuto, // Horizontal swing + true, // Quiet (aka. Mute) + false, // Turbo + true, // Light + true, // Econo + true); // Filter (aka. Health) + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(TCL112AC, ac._irsend.capture.decode_type); + ASSERT_EQ(kTcl112AcBits, ac._irsend.capture.bits); + ASSERT_EQ( + "Type: 2, Quiet: On", + IRAcUtils::resultAcToString(&ac._irsend.capture)); + // TCL112 uses the Mitsubishi112 decoder. + // Skip first message. + EXPECT_TRUE(capture.decodeMitsubishi112(&ac._irsend.capture, 229)); + ASSERT_EQ(TCL112AC, ac._irsend.capture.decode_type); + ASSERT_EQ(kTcl112AcBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); } TEST(TestIRac, Technibel) { @@ -1633,6 +1880,36 @@ TEST(TestIRac, Trotec) { ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); } +TEST(TestIRac, Trotec3550) { + IRTrotec3550 ac(kGpioUnused); + IRac irac(kGpioUnused); + IRrecv capture(kGpioUnused); + char expected[] = + "Power: On, Mode: 1 (Cool), Temp: 18C, Fan: 3 (High), Swing(V): On, " + "Timer: Off"; + ac.begin(); + irac.trotec3550(&ac, + true, // Power + stdAc::opmode_t::kCool, // Mode + true, // Celsius + 18, // Degrees + stdAc::fanspeed_t::kHigh, // Fan speed + stdAc::swingv_t::kAuto); // Vertical Swing + EXPECT_TRUE(ac.getPower()); + EXPECT_EQ(kTrotecCool, ac.getMode()); + EXPECT_EQ(18, ac.getTemp()); + EXPECT_EQ(kTrotecFanHigh, ac.getFan()); + EXPECT_TRUE(ac.getSwingV()); + ASSERT_EQ(expected, ac.toString()); + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(TROTEC_3550, ac._irsend.capture.decode_type); + ASSERT_EQ(kTrotecBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); +} + TEST(TestIRac, Truma) { IRTrumaAc ac(kGpioUnused); IRac irac(kGpioUnused); @@ -2148,51 +2425,58 @@ TEST(TestIRac, Issue821) { result.mode, // Mode result.degrees, // Celsius result.fanspeed, // Fan speed - result.swingv, // Vertical swing - result.swingh, // Horizontal swing - result.turbo, // Turbo - result.light, // Light - result.clean, // Clean - -1); // Sleep + result.swingv, // Vertical swing + result.swingh, // Horizontal swing + result.turbo, // Turbo + result.light, // Light + result.clean, // Clean + -1); // Sleep ac._irsend.makeDecodeResult(); + // We expect a normal state message, followed by the special "light" message. EXPECT_TRUE(capture.decode(&ac._irsend.capture)); ASSERT_EQ(COOLIX, ac._irsend.capture.decode_type); ASSERT_EQ(kCoolixBits, ac._irsend.capture.bits); + ASSERT_EQ("Power: On, Mode: 2 (Auto), Fan: 0 (Auto0), Temp: 24C, " + "Zone Follow: Off, Sensor Temp: Off", + IRAcUtils::resultAcToString(&ac._irsend.capture)); + EXPECT_TRUE(capture.decodeCOOLIX(&ac._irsend.capture, 201)); + ASSERT_EQ(COOLIX, ac._irsend.capture.decode_type); + ASSERT_EQ(kCoolixBits, ac._irsend.capture.bits); ASSERT_EQ("Power: On, Light: Toggle", IRAcUtils::resultAcToString(&ac._irsend.capture)); EXPECT_EQ( "f38000d50" "m4692s4416" - "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" - "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" - "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" - "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" - "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" - "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" "m552s5244" "m4692s4416" - "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" - "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" - "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" - "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" - "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" - "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" "m552s105244" "m4692s4416" - "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" - "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" - "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" - "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" - "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" - "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" "m552s5244" "m4692s4416" - "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" - "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" - "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" - "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" - "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" - "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" "m552s105244", ac._irsend.outputStr()); } diff --git a/lib/lib_basic/IRremoteESP8266/test/IRrecv_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRrecv_test.cpp similarity index 97% rename from lib/lib_basic/IRremoteESP8266/test/IRrecv_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRrecv_test.cpp index 76a0d51d8..2d32847d3 100644 --- a/lib/lib_basic/IRremoteESP8266/test/IRrecv_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRrecv_test.cpp @@ -42,6 +42,49 @@ TEST(TestIRrecv, IRrecvDestructor) { delete irrecv_ptr; } +TEST(TestIRrecv, DecodeHeapOverflow) { + // Check that we handle the rawbuf correctly when we fill it. e.g. overflow. + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1516 + IRrecv irrecv(1); + irrecv.enableIRIn(); + ASSERT_EQ(kRawBuf, irrecv.getBufSize()); + volatile irparams_t *params_ptr = irrecv._getParamsPtr(); + // replace the buffer with a slightly bigger one to see if we go past the end + // accidentally. + params_ptr->rawbuf = new uint16_t[kRawBuf + 10]; + ASSERT_EQ(kRawBuf, irrecv.getBufSize()); // Should not change. + // Fill the raw buffer with canaries + // Values of 100 for the proper buffer size, & values of 99 for the extras + for (uint16_t i = 0; i < irrecv.getBufSize() + 10; i++) { + params_ptr->rawbuf[i] = 100; + if (i >= irrecv.getBufSize()) params_ptr->rawbuf[i]--; + } + ASSERT_EQ(100, params_ptr->rawbuf[kRawBuf - 1]); + EXPECT_EQ(99, params_ptr->rawbuf[kRawBuf]); + EXPECT_EQ(99, params_ptr->rawbuf[kRawBuf + 1]); + ASSERT_EQ(kRawBuf, params_ptr->bufsize); + decode_results results; + // Mock up the rest of params like we've received a message that has used + // all the rawbuf. + params_ptr->rawlen = kRawBuf; + params_ptr->overflow = true; + params_ptr->rcvstate = kStopState; + // Need to tweak results structure too. + results.rawbuf = params_ptr->rawbuf; + results.rawlen = params_ptr->rawlen; + results.overflow = params_ptr->overflow; + + // Do the decode. + ASSERT_TRUE(irrecv.decode(&results)); + // Yay, nothing exploded! Now check everything is as we expect + // w.r.t. the buffer. + ASSERT_EQ(kRawBuf, params_ptr->rawlen); + ASSERT_TRUE(params_ptr->overflow); + ASSERT_EQ(100, params_ptr->rawbuf[params_ptr->rawlen - 1]); + EXPECT_EQ(99, params_ptr->rawbuf[params_ptr->rawlen]); + EXPECT_EQ(99, params_ptr->rawbuf[params_ptr->rawlen + 1]); +} + // Tests for copyIrParams() TEST(TestCopyIrParams, CopyEmpty) { diff --git a/lib/lib_basic/IRremoteESP8266/test/IRrecv_test.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRrecv_test.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/IRrecv_test.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRrecv_test.h diff --git a/lib/lib_basic/IRremoteESP8266/test/IRsend_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRsend_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/IRsend_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRsend_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/IRsend_test.h b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRsend_test.h similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/IRsend_test.h rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRsend_test.h diff --git a/lib/lib_basic/IRremoteESP8266/test/IRutils_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRutils_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/IRutils_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/IRutils_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/Makefile b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/Makefile similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/Makefile rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/Makefile diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Airwell_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Airwell_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Airwell_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Airwell_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Aiwa_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Aiwa_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Aiwa_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Aiwa_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Amcor_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Amcor_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Amcor_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Amcor_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Argo_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Argo_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Argo_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Argo_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Bose_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Bose_test.cpp new file mode 100644 index 000000000..bf3e18c91 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Bose_test.cpp @@ -0,0 +1,108 @@ +// Copyright 2021 parsnip42 +// Copyright 2021 David Conran + +#include "IRac.h" +#include "IRrecv.h" +#include "IRrecv_test.h" +#include "IRsend.h" +#include "IRsend_test.h" +#include "gtest/gtest.h" + + +TEST(TestUtils, Housekeeping) { + ASSERT_EQ("BOSE", typeToString(decode_type_t::BOSE)); + ASSERT_EQ(decode_type_t::BOSE, strToDecodeType("BOSE")); + ASSERT_FALSE(hasACState(decode_type_t::BOSE)); + ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::BOSE)); + ASSERT_EQ(kBoseBits, IRsend::defaultBits(decode_type_t::BOSE)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::BOSE)); +} + +// Tests for sendBose(). + +// Test sending typical data only. +TEST(TestSendBose, SendDataOnly) { + IRsendTest irsend(kGpioUnused); + irsend.begin(); + irsend.sendBose(0xCD32); + EXPECT_EQ("f38000d50" + "m1100s1350m555s500m555s1435m555s500m555s500m555s1435m555s1435" + "m555s500m555s500m555s1435m555s500m555s1435m555s1435m555s500" + "m555s500m555s1435m555s1435m555s100000", + irsend.outputStr()); +} + +// Decode normal Bose messages. +TEST(TestDecodeBose, SyntheticSelfDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + // Synthesised 16-bit Bose message (TV Speaker Power On). + irsend.reset(); + irsend.sendBose(0xCD32); + irsend.makeDecodeResult(); + + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(BOSE, irsend.capture.decode_type); + EXPECT_EQ(kBoseBits, irsend.capture.bits); + EXPECT_EQ(0xCD32, irsend.capture.value); + EXPECT_EQ(0x0, irsend.capture.address); + EXPECT_EQ(0x0, irsend.capture.command); +} + +// Decode normal Bose messages. +TEST(TestDecodeBose, RealMessageDecode1) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + + irsend.begin(); + + // Real-life Bose code from an actual capture/decode (TV Speaker Power On). + irsend.reset(); + + const uint16_t rawData_0[35] = { + 942, 1558, + 442, 558, 442, 1502, 494, 534, 466, 560, 440, 1530, 468, 1532, 466, + 558, 440, 504, 496, 1558, 440, 534, 466, 1556, 442, 1558, 440, 558, + 440, 534, 466, 1556, 442, 1558, 440 + }; + + irsend.sendRaw(rawData_0, 35, 38000); + irsend.makeDecodeResult(); + + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(BOSE, irsend.capture.decode_type); + EXPECT_EQ(kBoseBits, irsend.capture.bits); + EXPECT_EQ(0xCD32, irsend.capture.value); + EXPECT_EQ(0x0, irsend.capture.address); + EXPECT_EQ(0x0, irsend.capture.command); +} + +// Decode normal Bose messages. +TEST(TestDecodeBose, RealMessageDecode2) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + + irsend.begin(); + + // Real-life Bose code from an actual capture/decode (TV Speaker Mute). + irsend.reset(); + + const uint16_t rawData_0[35] = { + 1024, 1504, + 496, 528, 472, 480, 520, 502, 496, 506, 494, 502, 496, 502, 498, + 502, 498, 1500, 498, 1502, 496, 1504, 496, 1502, 496, 1504, 494, + 1472, 524, 1504, 468, 1556, 442, 532, 468, + }; + + irsend.sendRaw(rawData_0, 35, 38000); + irsend.makeDecodeResult(); + + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(BOSE, irsend.capture.decode_type); + EXPECT_EQ(kBoseBits, irsend.capture.bits); + EXPECT_EQ(0x7F80, irsend.capture.value); + EXPECT_EQ(0x0, irsend.capture.address); + EXPECT_EQ(0x0, irsend.capture.command); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Carrier_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Carrier_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Carrier_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Carrier_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Coolix_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Coolix_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Coolix_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Coolix_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Corona_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Corona_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Corona_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Corona_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Daikin_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Daikin_test.cpp similarity index 92% rename from lib/lib_basic/IRremoteESP8266/test/ir_Daikin_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Daikin_test.cpp index 30dae3aa1..783bd4e66 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Daikin_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Daikin_test.cpp @@ -11,7 +11,7 @@ // Test sending typical data only. TEST(TestSendDaikin, SendDataOnly) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); uint8_t daikin_code[kDaikinStateLength] = { @@ -72,7 +72,7 @@ TEST(TestSendDaikin, SendDataOnly) { // Test sending with repeats. TEST(TestSendDaikin, SendWithRepeats) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -237,7 +237,7 @@ TEST(TestSendDaikin, SendUnexpectedSizes) { // Tests for IRDaikinESP class. TEST(TestDaikinClass, Power) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.on(); @@ -254,7 +254,7 @@ TEST(TestDaikinClass, Power) { } TEST(TestDaikinClass, Temperature) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setTemp(0); @@ -289,7 +289,7 @@ TEST(TestDaikinClass, Temperature) { } TEST(TestDaikinClass, OperatingMode) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinAuto); @@ -318,7 +318,7 @@ TEST(TestDaikinClass, OperatingMode) { } TEST(TestDaikinClass, VaneSwing) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setSwingHorizontal(true); @@ -342,7 +342,7 @@ TEST(TestDaikinClass, VaneSwing) { } TEST(TestDaikinClass, QuietMode) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setQuiet(true); @@ -366,7 +366,7 @@ TEST(TestDaikinClass, QuietMode) { } TEST(TestDaikinClass, PowerfulMode) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setPowerful(true); @@ -387,7 +387,7 @@ TEST(TestDaikinClass, PowerfulMode) { } TEST(TestDaikinClass, EconoMode) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setEcono(true); @@ -411,7 +411,7 @@ TEST(TestDaikinClass, EconoMode) { } TEST(TestDaikinClass, FanSpeed) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -453,7 +453,7 @@ TEST(TestDaikinClass, FanSpeed) { } TEST(TestDaikinClass, CurrentTime) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setCurrentTime(0); // 00:00 @@ -467,7 +467,7 @@ TEST(TestDaikinClass, CurrentTime) { } TEST(TestDaikinClass, OnOffTimers) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); // Both timers turned off. @@ -542,7 +542,7 @@ TEST(TestDaikinClass, OnOffTimers) { } TEST(TestDaikinClass, WeeklyTimerEnable) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); // The Weekly Timer Enabled flag is stored in the same byte as Econo mode. @@ -586,7 +586,7 @@ TEST(TestDaikinClass, WeeklyTimerEnable) { // Test Mold mode. TEST(TestDaikinClass, MoldSetting) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setMold(false); @@ -601,7 +601,7 @@ TEST(TestDaikinClass, MoldSetting) { // Test Comfort mode. TEST(TestDaikinClass, ComfortSetting) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setComfort(false); @@ -616,7 +616,7 @@ TEST(TestDaikinClass, ComfortSetting) { // Test Sensor mode. TEST(TestDaikinClass, SensorSetting) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.begin(); ac.setSensor(false); @@ -630,7 +630,7 @@ TEST(TestDaikinClass, SensorSetting) { } TEST(TestDaikinClass, SetAndGetRaw) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); uint8_t shortState[kDaikinStateLengthShort] = { 0x11, 0xDA, 0x27, 0x00, 0x42, 0x00, 0x00, 0x54, 0x11, 0xDA, 0x27, 0x00, 0x00, 0x49, 0x1E, 0x00, 0xB0, 0x00, @@ -688,7 +688,7 @@ TEST(TestDaikinClass, ChecksumValidation) { // Test human readable output. TEST(TestDaikinClass, HumanReadable) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); EXPECT_EQ( "Power: On, Mode: 4 (Heat), Temp: 15C, Fan: 11 (Quiet), " @@ -723,7 +723,7 @@ TEST(TestDaikinClass, HumanReadable) { // Test general message construction after tweaking some settings. TEST(TestDaikinClass, MessageConstuction) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); IRsendTest irsend(4); ac.begin(); irsend.begin(); @@ -796,9 +796,9 @@ TEST(TestDaikinClass, MessageConstuction) { // Test decoding a message captured from a real IR remote. TEST(TestDecodeDaikin, RealExample) { - IRDaikinESP ac(0); - IRsendTest irsend(0); - IRrecv irrecv(0); + IRDaikinESP ac(kGpioUnused); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kDaikinStateLength] = { @@ -875,9 +875,9 @@ TEST(TestDecodeDaikin, RealExample) { // Decoding a message we entirely constructed based solely on a given state. TEST(TestDecodeDaikin, ShortSyntheticExample) { - IRDaikinESP ac(0); - IRsendTest irsend(0); - IRrecv irrecv(0); + IRDaikinESP ac(kGpioUnused); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t shortState[kDaikinStateLengthShort] = { @@ -908,9 +908,9 @@ TEST(TestDecodeDaikin, ShortSyntheticExample) { // Decoding a message we entirely constructed based solely on a given state. TEST(TestDecodeDaikin, LongSyntheticExample) { - IRDaikinESP ac(0); - IRsendTest irsend(0); - IRrecv irrecv(0); + IRDaikinESP ac(kGpioUnused); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kDaikinStateLength] = { @@ -937,8 +937,8 @@ TEST(TestDecodeDaikin, LongSyntheticExample) { // Test decoding a message captured from a real IR remote. TEST(TestDecodeDaikin2, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kDaikin2StateLength] = { @@ -1012,9 +1012,9 @@ TEST(TestDecodeDaikin2, RealExample) { // Decoding a message we entirely constructed based solely on a given state. TEST(TestDecodeDaikin2, SyntheticExample) { - IRDaikin2 ac(0); - IRsendTest irsend(0); - IRrecv irrecv(0); + IRDaikin2 ac(kGpioUnused); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kDaikin2StateLength] = { @@ -1037,12 +1037,12 @@ TEST(TestDecodeDaikin2, SyntheticExample) { "Clock: 14:50, On Timer: Off, Off Timer: Off, Sleep Timer: Off, " "Beep: 1 (Quiet), Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, " "Eye: Off, Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: Off, " - "Econo: Off", + "Econo: Off, Humid: 0 (Off)", ac.toString()); } TEST(TestDaikin2Class, CurrentTime) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setCurrentTime(0); // 00:00 @@ -1056,7 +1056,7 @@ TEST(TestDaikin2Class, CurrentTime) { } TEST(TestDaikin2Class, OnOffTimers) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); // Both timers turned off. @@ -1097,7 +1097,7 @@ TEST(TestDaikin2Class, OnOffTimers) { } TEST(TestDaikin2Class, LightAndBeep) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setLight(kDaikinLightOff); @@ -1113,7 +1113,7 @@ TEST(TestDaikin2Class, LightAndBeep) { } TEST(TestDaikin2Class, FanSpeed) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -1156,7 +1156,7 @@ TEST(TestDaikin2Class, FanSpeed) { // Test Mold mode. TEST(TestDaikin2Class, MoldSetting) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setMold(false); @@ -1171,7 +1171,7 @@ TEST(TestDaikin2Class, MoldSetting) { // Test Auto Clean setting. TEST(TestDaikin2Class, CleanSetting) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setClean(false); @@ -1186,7 +1186,7 @@ TEST(TestDaikin2Class, CleanSetting) { TEST(TestDaikin2Class, Temperature) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinAuto); @@ -1236,7 +1236,7 @@ TEST(TestDaikin2Class, Temperature) { // Test Fresh Air settings. TEST(TestDaikin2Class, FreshAirSettings) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setFreshAir(false); @@ -1263,7 +1263,7 @@ TEST(TestDaikin2Class, FreshAirSettings) { // Test Eye mode. TEST(TestDaikin2Class, EyeSetting) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setEye(false); @@ -1276,7 +1276,7 @@ TEST(TestDaikin2Class, EyeSetting) { // Test Econo setting. TEST(TestDaikin2Class, EconoSetting) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setEcono(false); @@ -1288,7 +1288,7 @@ TEST(TestDaikin2Class, EconoSetting) { } TEST(TestDaikin2Class, SleepTimer) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); // NOTE: On & Sleep timer share the same time location. @@ -1334,7 +1334,7 @@ TEST(TestDaikin2Class, SleepTimer) { // Test Vertical Swing. TEST(TestDaikin2Class, Swing) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); // Vertical @@ -1372,7 +1372,7 @@ TEST(TestDaikin2Class, Swing) { } TEST(TestDaikin2Class, QuietMode) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setQuiet(true); @@ -1390,7 +1390,7 @@ TEST(TestDaikin2Class, QuietMode) { } TEST(TestDaikin2Class, PowerfulMode) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setPowerful(true); @@ -1408,7 +1408,7 @@ TEST(TestDaikin2Class, PowerfulMode) { // Test Purify mode. TEST(TestDaikin2Class, PurifySetting) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setPurify(false); @@ -1420,7 +1420,7 @@ TEST(TestDaikin2Class, PurifySetting) { } TEST(TestDaikin2Class, HumanReadable) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.begin(); ac.setPower(true); ac.setMode(kDaikinCool); @@ -1448,7 +1448,8 @@ TEST(TestDaikin2Class, HumanReadable) { "Swing(V): 15 (Auto), Swing(H): 190 (Auto), Clock: 12:34, " "On Timer: Off, Off Timer: 20:00, Sleep Timer: 04:00, Beep: 2 (Loud), " "Light: 2 (Low), Mould: On, Clean: Off, Fresh: On, Eye: On, " - "Eye Auto: On, Quiet: Off, Powerful: On, Purify: On, Econo: Off", + "Eye Auto: On, Quiet: Off, Powerful: On, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ac.setQuiet(true); ac.setMode(kDaikinHeat); @@ -1463,13 +1464,14 @@ TEST(TestDaikin2Class, HumanReadable) { "Swing(V): 15 (Auto), Swing(H): 190 (Auto), Clock: 23:45, " "On Timer: 09:11, Off Timer: 20:00, Sleep Timer: Off, Beep: 1 (Quiet), " "Light: 1 (High), Mould: On, Clean: Off, Fresh: On, Eye: On, " - "Eye Auto: On, Quiet: On, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: On, Quiet: On, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); } // See if we can construct a known state. TEST(TestDaikin2Class, KnownConstruction) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); uint8_t expectedState[kDaikin2StateLength] = { 0x11, 0xDA, 0x27, 0x00, 0x01, 0x7A, 0xC3, 0x70, 0x28, 0x0C, @@ -1505,7 +1507,7 @@ TEST(TestDaikin2Class, KnownConstruction) { "Clock: 14:50, On Timer: Off, Off Timer: Off, Sleep Timer: Off, " "Beep: 1 (Quiet), Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, " "Eye: Off, Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: Off, " - "Econo: Off", + "Econo: Off, Humid: 0 (Off)", ac.toString()); EXPECT_STATE_EQ(expectedState, ac.getRaw(), kDaikin2Bits); } @@ -1554,7 +1556,7 @@ TEST(TestUtils, Housekeeping) { // https://github.com/crankyoldgit/IRremoteESP8266/issues/582#issuecomment-453863879 TEST(TestDecodeDaikin2, Issue582DeepDecodeExample) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); const uint8_t state[kDaikin2StateLength] = { 0x11, 0xDA, 0x27, 0x00, 0x01, 0x30, 0x42, 0xF0, 0x28, 0x0C, @@ -1571,13 +1573,14 @@ TEST(TestDecodeDaikin2, Issue582DeepDecodeExample) { "Swing(V): 14 (Off), Swing(H): 190 (Auto), Clock: 09:20, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 3 (Off), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: On, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); } // https://docs.google.com/spreadsheets/d/1f8EGfIbBUo2B-CzUFdrgKQprWakoYNKM80IKZN4KXQE/edit?ts=5c317775#gid=1023395743 TEST(TestDecodeDaikin2, Issue582PowerfulEconoFix) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); const uint8_t PowerfulOn[39] = { 0x11, 0xDA, 0x27, 0x00, 0x01, 0x3A, 0x43, 0xF0, 0x28, 0x0C, @@ -1596,7 +1599,8 @@ TEST(TestDecodeDaikin2, Issue582PowerfulEconoFix) { "Swing(V): 14 (Off), Swing(H): 190 (Auto), Clock: 13:46, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 3 (Off), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: On, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: On, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ac.setRaw(PowerfulOff); ASSERT_FALSE(ac.getPowerful()); @@ -1605,7 +1609,8 @@ TEST(TestDecodeDaikin2, Issue582PowerfulEconoFix) { "Swing(V): 14 (Off), Swing(H): 190 (Auto), Clock: 13:46, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 3 (Off), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); const uint8_t EconoOn[39] = { @@ -1625,7 +1630,8 @@ TEST(TestDecodeDaikin2, Issue582PowerfulEconoFix) { "Swing(V): 14 (Off), Swing(H): 190 (Auto), Clock: 13:47, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 3 (Off), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: On", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: On, " + "Humid: 0 (Off)", ac.toString()); ac.setRaw(EconoOff); ASSERT_FALSE(ac.getEcono()); @@ -1634,14 +1640,15 @@ TEST(TestDecodeDaikin2, Issue582PowerfulEconoFix) { "Swing(V): 14 (Off), Swing(H): 190 (Auto), Clock: 13:47, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 3 (Off), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); } // Tests for IRDaikin216 class. TEST(TestDaikin216Class, Power) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); ac.on(); @@ -1658,7 +1665,7 @@ TEST(TestDaikin216Class, Power) { } TEST(TestDaikin216Class, Temperature) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); ac.setTemp(0); @@ -1693,7 +1700,7 @@ TEST(TestDaikin216Class, Temperature) { } TEST(TestDaikin216Class, OperatingMode) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinAuto); @@ -1722,7 +1729,7 @@ TEST(TestDaikin216Class, OperatingMode) { } TEST(TestDaikin216Class, VaneSwing) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); ac.setSwingHorizontal(true); @@ -1746,7 +1753,7 @@ TEST(TestDaikin216Class, VaneSwing) { } TEST(TestDaikin216Class, FanSpeed) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -1788,7 +1795,7 @@ TEST(TestDaikin216Class, FanSpeed) { } TEST(TestDaikin216Class, QuietAndPowerful) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); ac.setQuiet(false); @@ -1821,7 +1828,7 @@ TEST(TestDaikin216Class, QuietAndPowerful) { } TEST(TestDaikin216Class, ExampleStates) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); // https://github.com/crankyoldgit/IRremoteESP8266/pull/690#issuecomment-487770194 uint8_t state[kDaikin216StateLength] = { @@ -1837,7 +1844,7 @@ TEST(TestDaikin216Class, ExampleStates) { } TEST(TestDaikin216Class, ReconstructKnownState) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.begin(); // https://github.com/crankyoldgit/IRremoteESP8266/issues/689#issue-438086949 uint8_t expectedState[kDaikin216StateLength] = { @@ -1862,8 +1869,8 @@ TEST(TestDaikin216Class, ReconstructKnownState) { // https://github.com/crankyoldgit/IRremoteESP8266/issues/689 TEST(TestDecodeDaikin216, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); // https://github.com/crankyoldgit/IRremoteESP8266/issues/689#issue-438086949 uint16_t rawData[439] = { 3402, 1770, 382, 1340, 382, 480, 382, 478, 382, 480, 380, 1342, 382, 478, @@ -1913,7 +1920,7 @@ TEST(TestDecodeDaikin216, RealExample) { ASSERT_EQ(kDaikin216Bits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.setRaw(irsend.capture.state); EXPECT_EQ( "Power: Off, Mode: 0 (Auto), Temp: 19C, Fan: 10 (Auto), " @@ -1924,8 +1931,8 @@ TEST(TestDecodeDaikin216, RealExample) { // https://github.com/crankyoldgit/IRremoteESP8266/issues/689 TEST(TestDecodeDaikin216, SyntheticExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); // https://github.com/crankyoldgit/IRremoteESP8266/issues/689#issue-438086949 uint8_t expectedState[kDaikin216StateLength] = { // 8 bytes @@ -1945,7 +1952,7 @@ TEST(TestDecodeDaikin216, SyntheticExample) { } TEST(TestDaikinClass, toCommon) { - IRDaikinESP ac(0); + IRDaikinESP ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -1979,7 +1986,7 @@ TEST(TestDaikinClass, toCommon) { } TEST(TestDaikin2Class, toCommon) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -2017,7 +2024,7 @@ TEST(TestDaikin2Class, toCommon) { } TEST(TestDaikin216Class, toCommon) { - IRDaikin216 ac(0); + IRDaikin216 ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -2050,8 +2057,8 @@ TEST(TestDaikin216Class, toCommon) { // https://github.com/crankyoldgit/IRremoteESP8266/issues/731 TEST(TestDecodeDaikin160, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint16_t rawData[327] = { 5024, 2144, 342, 1786, 344, 706, 342, 706, 344, 706, 342, 1786, 342, 706, 342, 708, 342, 708, 342, 708, 342, 1786, 342, 708, 342, 1786, 342, 1788, @@ -2093,15 +2100,15 @@ TEST(TestDecodeDaikin160, RealExample) { ASSERT_EQ(DAIKIN160, irsend.capture.decode_type); ASSERT_EQ(kDaikin160Bits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.setRaw(irsend.capture.state); EXPECT_EQ("Power: Off, Mode: 3 (Cool), Temp: 25C, Fan: 10 (Auto), " "Swing(V): 1 (Lowest)", ac.toString()); } TEST(TestDecodeDaikin160, SyntheticExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint8_t expectedState[kDaikin160StateLength] = { // 7 bytes @@ -2121,7 +2128,7 @@ TEST(TestDecodeDaikin160, SyntheticExample) { } TEST(TestDaikin160Class, toCommon) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -2150,7 +2157,7 @@ TEST(TestDaikin160Class, toCommon) { } TEST(TestDaikin160Class, FanSpeed) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -2192,7 +2199,7 @@ TEST(TestDaikin160Class, FanSpeed) { } TEST(TestDaikin160Class, VaneSwing) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.begin(); ac.setSwingVertical(kDaikin160SwingVAuto); @@ -2213,7 +2220,7 @@ TEST(TestDaikin160Class, VaneSwing) { } TEST(TestDaikin160Class, Power) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.begin(); ac.on(); @@ -2230,7 +2237,7 @@ TEST(TestDaikin160Class, Power) { } TEST(TestDaikin160Class, Temperature) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.begin(); ac.setTemp(0); @@ -2265,7 +2272,7 @@ TEST(TestDaikin160Class, Temperature) { } TEST(TestDaikin160Class, OperatingMode) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinAuto); @@ -2294,7 +2301,7 @@ TEST(TestDaikin160Class, OperatingMode) { } TEST(TestDaikin160Class, HumanReadable) { - IRDaikin160 ac(0); + IRDaikin160 ac(kGpioUnused); EXPECT_EQ( "Power: Off, Mode: 3 (Cool), Temp: 25C, Fan: 10 (Auto), " @@ -2312,23 +2319,27 @@ TEST(TestDaikin160Class, HumanReadable) { } TEST(TestDaikin176Class, FanControl) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); EXPECT_EQ( - "Power: Off, Mode: 2 (Cool), Temp: 9C, Fan: 1 (Low), Swing(H): 6 (Off)", + "Power: Off, Mode: 2 (Cool), Temp: 9C, Fan: 1 (Low), Swing(H): 6 (Off), " + "Id: 0", ac.toString()); ac.setFan(kDaikinFanMin); ac.setPower(true); EXPECT_EQ( - "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 1 (Low), Swing(H): 6 (Off)", + "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 1 (Low), Swing(H): 6 (Off), " + "Id: 0", ac.toString()); ac.setFan(kDaikinFanMin + 1); EXPECT_EQ( - "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 3 (High), Swing(H): 6 (Off)", + "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 3 (High), Swing(H): 6 (Off), " + "Id: 0", ac.toString()); ac.setFan(kDaikin176FanMax); EXPECT_EQ( - "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 3 (High), Swing(H): 6 (Off)", + "Power: On, Mode: 2 (Cool), Temp: 9C, Fan: 3 (High), Swing(H): 6 (Off), " + "Id: 0", ac.toString()); // Real state from remote @@ -2340,7 +2351,7 @@ TEST(TestDaikin176Class, FanControl) { ac.setRaw(state); EXPECT_EQ( "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 3 (High), " - "Swing(H): 5 (Auto)", + "Swing(H): 5 (Auto), Id: 0", ac.toString()); } @@ -2357,25 +2368,28 @@ TEST(TestDaikin176Class, convertFan) { } TEST(TestDaikin176Class, SimulateIRacDaikin176) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.setPower(true); ac.setMode(ac.convertMode(stdAc::opmode_t::kCool)); ac.setTemp(26); ac.setFan(ac.convertFan(stdAc::fanspeed_t::kMax)); ac.setSwingHorizontal(kDaikin176SwingHOff); + ac.setId(0); EXPECT_EQ( - "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 3 (High), Swing(H): 6 (Off)", + "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 3 (High), Swing(H): 6 (Off), " + "Id: 0", ac.toString()); ac.setSwingHorizontal(ac.convertSwingH(stdAc::swingh_t::kAuto)); + ac.setId(1); EXPECT_EQ( "Power: On, Mode: 2 (Cool), Temp: 26C, Fan: 3 (High), " - "Swing(H): 5 (Auto)", + "Swing(H): 5 (Auto), Id: 1", ac.toString()); } TEST(TestDaikin176Class, OperatingMode) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikin176Auto); @@ -2404,7 +2418,7 @@ TEST(TestDaikin176Class, OperatingMode) { } TEST(TestDaikin176Class, Temperature) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikin176Auto); ac.setTemp(0); @@ -2455,7 +2469,7 @@ TEST(TestDaikin176Class, Temperature) { } TEST(TestDaikin176Class, Power) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.begin(); ac.on(); @@ -2472,7 +2486,7 @@ TEST(TestDaikin176Class, Power) { } TEST(TestDaikin176Class, VaneSwing) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.begin(); ac.setSwingHorizontal(kDaikin176SwingHAuto); @@ -2496,7 +2510,7 @@ TEST(TestDaikin176Class, VaneSwing) { } TEST(TestDaikin176Class, ReconstructKnownStates) { - IRDaikin176 ac(0); + IRDaikin176 ac(kGpioUnused); ac.begin(); // Data from: // https://github.com/crankyoldgit/IRremoteESP8266/pull/826#issuecomment-513531138 @@ -2543,8 +2557,8 @@ TEST(TestDaikin176Class, ReconstructKnownStates) { // Data from: // https://docs.google.com/spreadsheets/d/1-YJnHyzy6bId5QmjTEZuw8_wSufESoIl-L_VEF-o8lM/edit?usp=sharing TEST(TestDecodeDaikin128, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint16_t rawData[265] = { 9846, 9794, 9848, 9796, 4638, 2512, 348, 382, 352, 954, 352, 956, 352, 382, 352, 956, 352, 384, 352, 382, 352, 386, 352, 382, 352, 954, 352, 384, @@ -2594,8 +2608,8 @@ TEST(TestDecodeDaikin128, RealExample) { // Data from: // https://docs.google.com/spreadsheets/d/1-YJnHyzy6bId5QmjTEZuw8_wSufESoIl-L_VEF-o8lM/edit?usp=sharing TEST(TestDecodeDaikin128, SyntheticSelfDecode) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint8_t expectedState[kDaikin128StateLength] = { // 8 bytes 0x16, 0x12, 0x20, 0x19, 0x47, 0x22, 0x26, 0xAD, @@ -2613,7 +2627,7 @@ TEST(TestDecodeDaikin128, SyntheticSelfDecode) { } TEST(TestDaikin128Class, Checksums) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); uint8_t knownGood[kDaikin128StateLength] = { 0x16, 0x12, 0x20, 0x19, 0x47, 0x22, 0x26, 0xAD, @@ -2629,7 +2643,7 @@ TEST(TestDaikin128Class, Checksums) { } TEST(TestDaikin128Class, PowerToggle) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setPowerToggle(true); @@ -2641,7 +2655,7 @@ TEST(TestDaikin128Class, PowerToggle) { } TEST(TestDaikin128Class, SwingVertical) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setSwingVertical(true); @@ -2653,7 +2667,7 @@ TEST(TestDaikin128Class, SwingVertical) { } TEST(TestDaikin128Class, Sleep) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setSleep(true); @@ -2665,7 +2679,7 @@ TEST(TestDaikin128Class, Sleep) { } TEST(TestDaikin128Class, Econo) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); // Econo works in some modes @@ -2684,7 +2698,7 @@ TEST(TestDaikin128Class, Econo) { } TEST(TestDaikin128Class, FanSpeed) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikin128Cool); @@ -2720,7 +2734,7 @@ TEST(TestDaikin128Class, FanSpeed) { } TEST(TestDaikin128Class, OperatingMode) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setMode(0); @@ -2744,7 +2758,7 @@ TEST(TestDaikin128Class, OperatingMode) { } TEST(TestDaikin128Class, Quiet) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); // Quiet works in some modes @@ -2763,7 +2777,7 @@ TEST(TestDaikin128Class, Quiet) { } TEST(TestDaikin128Class, Powerful) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); // Powerful works in some modes @@ -2782,7 +2796,7 @@ TEST(TestDaikin128Class, Powerful) { } TEST(TestDaikin128Class, Temperature) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setTemp(0); @@ -2818,7 +2832,7 @@ TEST(TestDaikin128Class, Temperature) { // Test human readable output. TEST(TestDaikin128Class, HumanReadable) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.setPowerToggle(false); ac.setMode(kDaikin128Auto); @@ -2859,7 +2873,7 @@ TEST(TestDaikin128Class, HumanReadable) { } TEST(TestDaikin128Class, Clock) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setClock(0); @@ -2873,7 +2887,7 @@ TEST(TestDaikin128Class, Clock) { } TEST(TestDaikin128Class, Timers) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); ac.begin(); ac.setOnTimerEnabled(false); @@ -2906,7 +2920,7 @@ TEST(TestDaikin128Class, Timers) { } TEST(TestDaikin128Class, ReconstructKnownState) { - IRDaikin128 ac(0); + IRDaikin128 ac(kGpioUnused); uint8_t expectedState[kDaikin128StateLength] = { 0x16, 0x12, 0x20, 0x19, 0x47, 0x22, 0x26, 0xAD, @@ -2936,8 +2950,8 @@ TEST(TestDaikin128Class, ReconstructKnownState) { // Data from: // https://github.com/crankyoldgit/IRremoteESP8266/issues/873#issue-485088080 TEST(TestDecodeDaikin152, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint16_t rawData[319] = { 450, 420, 448, 446, 422, 444, 422, 446, 422, 446, 422, 25182, 3492, 1718, 450, 1288, 448, 422, 446, 448, 420, 446, 422, 1290, 448, 422, 446, 446, @@ -2984,8 +2998,8 @@ TEST(TestDecodeDaikin152, RealExample) { // https://github.com/crankyoldgit/IRremoteESP8266/issues/873 TEST(TestDecodeDaikin152, SyntheticExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); uint8_t expectedState[kDaikin152StateLength] = { 0x11, 0xDA, 0x27, 0x00, 0x00, 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xC5, 0x40, 0x00, 0xAB}; @@ -3020,7 +3034,7 @@ TEST(TestDecodeDaikin152, SyntheticExample) { } TEST(TestDaikin2ClassNew, Issue908) { - IRDaikin2 ac(0); + IRDaikin2 ac(kGpioUnused); // https://docs.google.com/spreadsheets/d/1f8EGfIbBUo2B-CzUFdrgKQprWakoYNKM80IKZN4KXQE/edit#gid=236366525&range=I8 uint8_t fanMedium[kDaikin2StateLength] = { 0x11, 0xDA, 0x27, 0x00, 0x01, 0x4A, 0x42, 0xB0, 0x28, 0x0C, 0x80, 0x04, @@ -3033,7 +3047,8 @@ TEST(TestDaikin2ClassNew, Issue908) { "Swing(V): 3 (Upper Middle), Swing(H): 170 (Middle), Clock: 09:46, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 2 (Loud), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ASSERT_EQ(kDaikinFanMed, ac.getFan()); ASSERT_EQ(stdAc::fanspeed_t::kMedium, ac.toCommon().fanspeed); @@ -3051,7 +3066,8 @@ TEST(TestDaikin2ClassNew, Issue908) { "Swing(V): 3 (Upper Middle), Swing(H): 170 (Middle), Clock: 09:57, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 2 (Loud), " "Light: 3 (Off), Mould: On, Clean: On, Fresh: Off, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ASSERT_EQ(3, ac.getSwingVertical()); ASSERT_EQ(stdAc::swingv_t::kMiddle, ac.toCommon().swingv); @@ -3075,7 +3091,7 @@ TEST(TestDaikin2ClassNew, Issue908) { // Tests for IRDaikin152 class. TEST(TestDaikin152Class, Power) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.on(); @@ -3092,7 +3108,7 @@ TEST(TestDaikin152Class, Power) { } TEST(TestDaikin152Class, Temperature) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinHeat); // Heat has the widest temp range. ac.setTemp(0); @@ -3131,7 +3147,7 @@ TEST(TestDaikin152Class, Temperature) { } TEST(TestDaikin152Class, OperatingMode) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikinAuto); @@ -3164,7 +3180,7 @@ TEST(TestDaikin152Class, OperatingMode) { } TEST(TestDaikin152Class, Swing) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setSwingV(false); @@ -3178,7 +3194,7 @@ TEST(TestDaikin152Class, Swing) { } TEST(TestDaikin152Class, QuietMode) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setQuiet(true); @@ -3202,7 +3218,7 @@ TEST(TestDaikin152Class, QuietMode) { } TEST(TestDaikin152Class, PowerfulMode) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setPowerful(true); @@ -3223,7 +3239,7 @@ TEST(TestDaikin152Class, PowerfulMode) { } TEST(TestDaikin152Class, EconoMode) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); ac.setEcono(true); @@ -3247,7 +3263,7 @@ TEST(TestDaikin152Class, EconoMode) { } TEST(TestDaikin152Class, FanSpeed) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -3289,7 +3305,7 @@ TEST(TestDaikin152Class, FanSpeed) { } TEST(TestDaikin152Class, Comfort) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.begin(); // Comfort mode should change these settings. @@ -3311,7 +3327,7 @@ TEST(TestDaikin152Class, Comfort) { } TEST(TestDaikin152Class, toCommon) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -3355,7 +3371,7 @@ TEST(TestDaikin152Class, convertFan) { } TEST(TestDaikin152Class, BuildKnownState) { - IRDaikin152 ac(0); + IRDaikin152 ac(kGpioUnused); ac.setPower(true); ac.setMode(kDaikinCool); ac.setTemp(20); @@ -3396,7 +3412,8 @@ TEST(TestDaikin2Class, Issue1035) { "Swing(V): 1 (Highest), Swing(H): 190 (Auto), Clock: 13:09, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 2 (Loud), " "Light: 1 (High), Mould: On, Clean: On, Fresh: On, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ASSERT_TRUE(ac.toCommon().power); ASSERT_NE(ac.toCommon().mode, stdAc::opmode_t::kOff); @@ -3407,7 +3424,8 @@ TEST(TestDaikin2Class, Issue1035) { "Swing(V): 1 (Highest), Swing(H): 190 (Auto), Clock: 13:09, " "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 2 (Loud), " "Light: 1 (High), Mould: On, Clean: On, Fresh: On, Eye: Off, " - "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off", + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 0 (Off)", ac.toString()); ASSERT_FALSE(ac.toCommon().power); } @@ -3477,7 +3495,7 @@ TEST(TestDaikin64Class, ChecksumAndSetGetRaw) { } TEST(TestDaikin64Class, Temperature) { - IRDaikin64 ac(0); + IRDaikin64 ac(kGpioUnused); ac.begin(); ac.setTemp(0); EXPECT_EQ(kDaikin64MinTemp, ac.getTemp()); @@ -3516,7 +3534,7 @@ TEST(TestDaikin64Class, Temperature) { } TEST(TestDaikin64Class, OperatingMode) { - IRDaikin64 ac(0); + IRDaikin64 ac(kGpioUnused); ac.begin(); ac.setMode(kDaikin64Cool); @@ -3525,6 +3543,9 @@ TEST(TestDaikin64Class, OperatingMode) { ac.setMode(kDaikin64Fan); EXPECT_EQ(kDaikin64Fan, ac.getMode()); + ac.setMode(kDaikin64Heat); + EXPECT_EQ(kDaikin64Heat, ac.getMode()); + ac.setMode(kDaikin64Dry); EXPECT_EQ(kDaikin64Dry, ac.getMode()); @@ -3542,7 +3563,7 @@ TEST(TestDaikin64Class, OperatingMode) { } TEST(TestDaikin64Class, PowerToggle) { - IRDaikin64 ac(0); + IRDaikin64 ac(kGpioUnused); ac.begin(); ac.setPowerToggle(true); @@ -3678,6 +3699,7 @@ TEST(TestDaikin64Class, HumanReadable) { "Turbo: On, Quiet: Off, Swing(V): On, Sleep: Off, " "Clock: 07:20, On Timer: Off, Off Timer: 23:30", ac.toString()); + ac.setMode(kDaikin64Heat); ac.setQuiet(true); ac.setSleep(true); ac.setClock(12 * 60 + 31); @@ -3685,7 +3707,7 @@ TEST(TestDaikin64Class, HumanReadable) { ac.setOnTime(8 * 60 + 59); ac.setOffTimeEnabled(false); EXPECT_EQ( - "Power Toggle: Off, Mode: 4 (Fan), Temp: 30C, Fan: 9 (Quiet), " + "Power Toggle: Off, Mode: 8 (Heat), Temp: 30C, Fan: 9 (Quiet), " "Turbo: Off, Quiet: On, Swing(V): On, Sleep: On, " "Clock: 12:31, On Timer: 08:30, Off Timer: Off", ac.toString()); @@ -3723,3 +3745,137 @@ TEST(TestDecodeDaikin64, Issue1092) { stdAc::state_t result, prev; ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); } + +// Test the humidity modes & settings. +TEST(TestDaikin2Class, Humidity) { + IRDaikin2 ac(kGpioUnused); + + EXPECT_FALSE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityOff, ac.getHumidity()); + EXPECT_NE(kDaikinMaxTemp, ac.getTemp()); + + // Test it can't be changed when NOT in Heat or Dry mode. + EXPECT_NE(kDaikinHeat, ac.getMode()); + EXPECT_NE(kDaikinDry, ac.getMode()); + ac.setHumidity(kDaikin2HumidityAuto); + EXPECT_FALSE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityOff, ac.getHumidity()); + + // Turn on the setting. + ac.setMode(kDaikinHeat); + ac.setHumidity(kDaikin2HumidityAuto); + EXPECT_EQ(kDaikinHeat, ac.getMode()); + EXPECT_TRUE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityAuto, ac._.Humidity); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + + // Check it doesn't allow Dry only percentages. + ac.setHumidity(kDaikin2HumidityDryMedium); // Invalid + EXPECT_EQ(kDaikinHeat, ac.getMode()); + EXPECT_FALSE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityOff, ac.getHumidity()); + + // Now Dry modes/settings. + ac.setMode(kDaikinDry); + ac.setHumidity(kDaikin2HumidityAuto); + EXPECT_EQ(kDaikinDry, ac.getMode()); + EXPECT_TRUE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityAuto, ac.getHumidity()); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + + ac.setHumidity(kDaikin2HumidityDryMedium); // Valid + EXPECT_EQ(kDaikinDry, ac.getMode()); + EXPECT_TRUE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityDryMedium, ac.getHumidity()); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + + // Confirm we can't change the temp while in Humidity mode etc. + ac.setTemp(kDaikinMaxTemp - 1); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + EXPECT_TRUE(ac._.HumidOn); + + // Confirm we can if it's off. + ac.setHumidity(kDaikin2HumidityOff); + ac.setTemp(kDaikinMaxTemp - 1); + EXPECT_EQ(kDaikinMaxTemp -1 , ac.getTemp()); + EXPECT_FALSE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityOff, ac.getHumidity()); + + // Change to a mode that's incompatible + ac.setHumidity(kDaikin2HumidityAuto); + ac.setMode(kDaikinCool); + EXPECT_FALSE(ac._.HumidOn); + EXPECT_EQ(kDaikin2HumidityOff, ac.getHumidity()); + + // Test some real codes. + + // Ref: https://docs.google.com/spreadsheets/d/1kxHgFqiUB9ETXYEkszAIN5gE-t2ykvnPCnOV-sPUE0A/edit#gid=1167536015&range=B7:AN7 + const uint8_t stateHumidAuto[kDaikin2StateLength] = { + 0x11, 0xDA, 0x27, 0x00, 0x01, 0x00, 0x40, 0x50, 0x60, 0x0C, 0x80, 0x04, + 0xB0, 0x16, 0x24, 0x00, 0x00, 0x8B, 0xCE, 0xD6, 0x11, 0xDA, 0x27, 0x00, + 0x00, 0x49, 0xC0, 0xFF, 0xA0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xC1, + 0x90, 0x60, 0xD1}; + ac.stateReset(); + ac.setRaw(stateHumidAuto); + EXPECT_TRUE(ac._.HumidOn); + EXPECT_EQ(kDaikinHeat, ac.getMode()); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + EXPECT_EQ(kDaikin2HumidityAuto, ac.getHumidity()); + EXPECT_EQ( + "Power: On, Mode: 4 (Heat), Temp: 32C, Fan: 10 (Auto), " + "Swing(V): 14 (Off), Swing(H): 139 (UNKNOWN), Clock: 00:00, " + "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 1 (Quiet), " + "Light: 1 (High), Mould: Off, Clean: On, Fresh: Off, Eye: Off, " + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 255 (Auto)", ac.toString()); + + // Ref: https://docs.google.com/spreadsheets/d/1kxHgFqiUB9ETXYEkszAIN5gE-t2ykvnPCnOV-sPUE0A/edit#gid=1966092848&range=B6:AN6 + const uint8_t stateDryStd[kDaikin2StateLength] = { + 0x11, 0xDA, 0x27, 0x00, 0x01, 0x00, 0x40, 0x50, 0x60, 0x0C, 0x80, 0x04, + 0xB0, 0x16, 0x24, 0x00, 0x00, 0x8B, 0xCE, 0xD6, 0x11, 0xDA, 0x27, 0x00, + 0x00, 0x29, 0xC0, 0x37, 0xA0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xC1, + 0x90, 0x60, 0xE9}; + ac.stateReset(); + ac.setRaw(stateDryStd); + EXPECT_TRUE(ac._.HumidOn); + EXPECT_EQ(kDaikinDry, ac.getMode()); + EXPECT_EQ(kDaikinMaxTemp, ac.getTemp()); + EXPECT_EQ(kDaikin2HumidityDryMedium, ac.getHumidity()); + EXPECT_EQ( + "Power: On, Mode: 2 (Dry), Temp: 32C, Fan: 10 (Auto), " + "Swing(V): 14 (Off), Swing(H): 139 (UNKNOWN), Clock: 00:00, " + "On Timer: Off, Off Timer: Off, Sleep Timer: Off, Beep: 1 (Quiet), " + "Light: 1 (High), Mould: Off, Clean: On, Fresh: Off, Eye: Off, " + "Eye Auto: Off, Quiet: Off, Powerful: Off, Purify: On, Econo: Off, " + "Humid: 55%", ac.toString()); +} + +TEST(TestDaikin176Class, UnitId) { + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1543 + IRDaikin176 ac(kGpioUnused); + EXPECT_EQ(0, ac.getId()); + ac.setId(1); + EXPECT_EQ(1, ac.getId()); + ac.setId(0); + EXPECT_EQ(0, ac.getId()); + + // Real example(s) + const uint8_t unita[22] = { + 0x11, 0xDA, 0x17, 0x18, 0x04, 0x00, 0x1E, + 0x11, 0xDA, 0x17, 0x18, 0x00, 0x73, 0x00, + 0x21, 0x00, 0x00, 0x1E, 0x36, 0x00, 0x20, 0x22}; + const uint8_t unitb[22] = { + 0x11, 0xDA, 0x17, 0x19, 0x04, 0x00, 0x1F, + 0x11, 0xDA, 0x17, 0x19, 0x00, 0x73, 0x00, + 0x21, 0x00, 0x00, 0x1E, 0x36, 0x00, 0x20, 0x23}; + ac.setRaw(unitb); + ASSERT_EQ(1, ac.getId()); + EXPECT_STATE_EQ(unitb, ac.getRaw(), kDaikin176Bits); + EXPECT_EQ( + "Power: On, Mode: 2 (Cool), Temp: 24C, Fan: 3 (High), Swing(H): 6 (Off), " + "Id: 1", ac.toString()); + // Check if we can successfully convert to a known-good Unit A message. + ac.setId(0); + ASSERT_EQ(0, ac.getId()); + EXPECT_STATE_EQ(unita, ac.getRaw(), kDaikin176Bits); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Delonghi_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Delonghi_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Delonghi_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Delonghi_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Denon_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Denon_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Denon_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Denon_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Dish_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Dish_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Dish_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Dish_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Doshisha_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Doshisha_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Doshisha_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Doshisha_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Ecoclim_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Ecoclim_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Ecoclim_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Ecoclim_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Electra_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Electra_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Electra_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Electra_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_EliteScreens_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_EliteScreens_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_EliteScreens_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_EliteScreens_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Epson_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Epson_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Epson_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Epson_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Fujitsu_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Fujitsu_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Fujitsu_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Fujitsu_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_GICable_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_GICable_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_GICable_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_GICable_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_GlobalCache_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_GlobalCache_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_GlobalCache_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_GlobalCache_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Goodweather_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Goodweather_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Goodweather_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Goodweather_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Gree_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Gree_test.cpp similarity index 98% rename from lib/lib_basic/IRremoteESP8266/test/ir_Gree_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Gree_test.cpp index 46b1b17b4..597fd3c09 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Gree_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Gree_test.cpp @@ -28,12 +28,12 @@ TEST(TestSendGreeChars, SendData) { "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000", + "m620s19980", irsend.outputStr()); } @@ -51,12 +51,12 @@ TEST(TestSendGreeUint64, SendData) { "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000", + "m620s19980", irsend.outputStr()); } @@ -79,24 +79,24 @@ TEST(TestSendGreeChars, SendWithRepeats) { "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000" + "m620s19980" "m9000s4500" "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540" "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540" "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000", + "m620s19980", irsend.outputStr()); } @@ -114,24 +114,24 @@ TEST(TestSendGreeUint64, SendWithRepeats) { "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000" + "m620s19980" "m9000s4500" "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540" "m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540" "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" - "m620s19000", + "m620s19980", irsend.outputStr()); } @@ -158,13 +158,13 @@ TEST(TestSendGreeChars, SendUnexpectedSizes) { "m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540" "m620s540m620s540m620s540m620s1600m620s1600m620s1600m620s1600m620s540" "m620s540m620s1600m620s540" - "m620s19000" + "m620s19980" "m620s540m620s540m620s540m620s540m620s1600m620s540m620s540m620s1600" "m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540m620s1600" "m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600" "m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600" "m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540" - "m620s19000", + "m620s19980", irsend.outputStr()); } diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Haier_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Haier_test.cpp similarity index 74% rename from lib/lib_basic/IRremoteESP8266/test/ir_Haier_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Haier_test.cpp index 87fe41b47..8b89b1098 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Haier_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Haier_test.cpp @@ -12,7 +12,7 @@ // Test sending typical data only. TEST(TestSendHaierAC, SendDataOnly) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); uint8_t haier_zero[kHaierACStateLength] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -56,7 +56,7 @@ TEST(TestSendHaierAC, SendDataOnly) { // Test sending typical data with repeats. TEST(TestSendHaierAC, SendWithRepeats) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -105,7 +105,7 @@ TEST(TestSendHaierAC, SendWithRepeats) { // Tests for IRHaierAC class. TEST(TestHaierACClass, Command) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setCommand(kHaierAcCmdOff); @@ -145,7 +145,7 @@ TEST(TestHaierACClass, Command) { } TEST(TestHaierACClass, OperatingMode) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setMode(kHaierAcAuto); @@ -177,7 +177,7 @@ TEST(TestHaierACClass, OperatingMode) { } TEST(TestHaierACClass, Temperature) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setTemp(kHaierAcMinTemp); @@ -218,7 +218,7 @@ TEST(TestHaierACClass, Temperature) { } TEST(TestHaierACClass, FanSpeed) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setFan(kHaierAcFanLow); haier.setCommand(kHaierAcCmdOn); @@ -241,7 +241,7 @@ TEST(TestHaierACClass, FanSpeed) { } TEST(TestHaierACClass, Swing) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setFan(kHaierAcFanLow); haier.setCommand(kHaierAcCmdOn); @@ -263,7 +263,7 @@ TEST(TestHaierACClass, Swing) { } TEST(TestHaierACClass, CurrentTime) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); EXPECT_EQ(0, haier.getCurrTime()); @@ -290,7 +290,7 @@ TEST(TestHaierACClass, CurrentTime) { } TEST(TestHaierACClass, Timers) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.begin(); haier.setCommand(kHaierAcCmdOn); @@ -347,7 +347,7 @@ TEST(TestHaierACClass, Timers) { } TEST(TestHaierACClass, MessageConstuction) { - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); EXPECT_EQ( "Command: 1 (On), Mode: 0 (Auto), Temp: 25C, Fan: 1 (Low), " @@ -420,7 +420,7 @@ TEST(TestHaierACClass, MessageConstuction) { // Tests for the IRHaierACYRW02 class. TEST(TestHaierACYRW02Class, Button) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setButton(kHaierAcYrw02ButtonPower); @@ -439,7 +439,7 @@ TEST(TestHaierACYRW02Class, Button) { } TEST(TestHaierACYRW02Class, OperatingMode) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setButton(kHaierAcYrw02ButtonPower); @@ -473,7 +473,7 @@ TEST(TestHaierACYRW02Class, OperatingMode) { } TEST(TestHaierACYRW02Class, Temperature) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setTemp(kHaierAcMinTemp); @@ -514,7 +514,7 @@ TEST(TestHaierACYRW02Class, Temperature) { } TEST(TestHaierACYRW02Class, HealthMode) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setHealth(true); @@ -532,7 +532,7 @@ TEST(TestHaierACYRW02Class, HealthMode) { } TEST(TestHaierACYRW02Class, Power) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setPower(true); @@ -555,7 +555,7 @@ TEST(TestHaierACYRW02Class, Power) { } TEST(TestHaierACYRW02Class, SleepMode) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setSleep(true); @@ -573,7 +573,7 @@ TEST(TestHaierACYRW02Class, SleepMode) { } TEST(TestHaierACYRW02Class, TurboMode) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setTurbo(kHaierAcYrw02TurboOff); @@ -596,7 +596,7 @@ TEST(TestHaierACYRW02Class, TurboMode) { } TEST(TestHaierACYRW02Class, Fan) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setFan(kHaierAcYrw02FanAuto); @@ -625,7 +625,7 @@ TEST(TestHaierACYRW02Class, Fan) { } TEST(TestHaierACYRW02Class, Swing) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.begin(); haier.setSwing(kHaierAcYrw02SwingOff); @@ -670,12 +670,12 @@ TEST(TestHaierACYRW02Class, Swing) { } TEST(TestHaierACYRW02Class, MessageConstuction) { - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); EXPECT_EQ( "Power: On, Button: 5 (Power), Mode: 0 (Auto), Temp: 25C," " Fan: 5 (Auto), Turbo: 0 (Off), Swing: 0 (Off), Sleep: Off," - " Health: On", + " Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); haier.setMode(kHaierAcYrw02Cool); haier.setTemp(21); @@ -683,7 +683,7 @@ TEST(TestHaierACYRW02Class, MessageConstuction) { EXPECT_EQ( "Power: On, Button: 4 (Fan), Mode: 1 (Cool), Temp: 21C," " Fan: 1 (High), Turbo: 0 (Off), Swing: 0 (Off), Sleep: Off," - " Health: On", + " Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); haier.setSwing(kHaierAcYrw02SwingMiddle); @@ -691,9 +691,10 @@ TEST(TestHaierACYRW02Class, MessageConstuction) { haier.setSleep(true); haier.setTurbo(kHaierAcYrw02TurboHigh); EXPECT_EQ( - "Power: On, Button: 8 (Turbo), Mode: 1 (Cool), Temp: 21C," - " Fan: 1 (High), Turbo: 1 (High), Swing: 2 (Middle)," - " Sleep: On, Health: Off", + "Power: On, Button: 8 (Turbo), Mode: 1 (Cool), Temp: 21C, " + "Fan: 1 (High), Turbo: 1 (High), Swing: 2 (Middle), " + "Sleep: On, Health: Off, " + "Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); } @@ -703,12 +704,12 @@ TEST(TestHaierACYRW02Class, RealStates) { 0xA6, 0xE1, 0x00, 0x00, 0x40, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0x6E}; - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.setRaw(expectedState1); EXPECT_EQ( - "Power: On, Button: 7 (Health), Mode: 4 (Heat), Temp: 30C," - " Fan: 1 (High), Turbo: 0 (Off), Swing: 1 (Highest), Sleep: Off," - " Health: Off", + "Power: On, Button: 7 (Health), Mode: 4 (Heat), Temp: 30C, " + "Fan: 1 (High), Turbo: 0 (Off), Swing: 1 (Highest), Sleep: Off, " + "Health: Off, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); uint8_t expectedState2[kHaierACYRW02StateLength] = { @@ -716,9 +717,9 @@ TEST(TestHaierACYRW02Class, RealStates) { 0x80, 0x00, 0x00, 0x00, 0x00, 0x05, 0x75}; haier.setRaw(expectedState2); EXPECT_EQ( - "Power: Off, Button: 5 (Power), Mode: 4 (Heat), Temp: 30C," - " Fan: 1 (High), Turbo: 0 (Off), Swing: 0 (Off), Sleep: Off," - " Health: Off", + "Power: Off, Button: 5 (Power), Mode: 4 (Heat), Temp: 30C, " + "Fan: 1 (High), Turbo: 0 (Off), Swing: 0 (Off), Sleep: Off, " + "Health: Off, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); uint8_t expectedState3[kHaierACYRW02StateLength] = { @@ -726,9 +727,9 @@ TEST(TestHaierACYRW02Class, RealStates) { 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2B}; haier.setRaw(expectedState3); EXPECT_EQ( - "Power: On, Button: 1 (Temp Down), Mode: 1 (Cool), Temp: 16C," - " Fan: 1 (High), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off," - " Health: On", + "Power: On, Button: 1 (Temp Down), Mode: 1 (Cool), Temp: 16C, " + "Fan: 1 (High), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); // cool 25, health, fan auto, swing auto, sleep on @@ -737,9 +738,9 @@ TEST(TestHaierACYRW02Class, RealStates) { 0x20, 0x80, 0x00, 0x00, 0x00, 0x0B, 0xD7}; haier.setRaw(expectedState4); EXPECT_EQ( - "Power: On, Button: 11 (Sleep), Mode: 1 (Cool), Temp: 25C," - " Fan: 5 (Auto), Turbo: 0 (Off), Swing: 12 (Auto), Sleep: On," - " Health: On", + "Power: On, Button: 11 (Sleep), Mode: 1 (Cool), Temp: 25C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 12 (Auto), Sleep: On, " + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); // cool 25, health, fan 3, swing auto, sleep on @@ -748,9 +749,9 @@ TEST(TestHaierACYRW02Class, RealStates) { 0x20, 0x80, 0x00, 0x00, 0x00, 0x04, 0x85}; haier.setRaw(expectedState5); EXPECT_EQ( - "Power: On, Button: 4 (Fan), Mode: 1 (Cool), Temp: 25C," - " Fan: 1 (High), Turbo: 0 (Off), Swing: 12 (Auto), Sleep: On," - " Health: On", + "Power: On, Button: 4 (Fan), Mode: 1 (Cool), Temp: 25C, " + "Fan: 1 (High), Turbo: 0 (Off), Swing: 12 (Auto), Sleep: On, " + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); } @@ -758,8 +759,8 @@ TEST(TestHaierACYRW02Class, RealStates) { // Decode normal "synthetic" messages. TEST(TestDecodeHaierAC, NormalDecodeWithStrict) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kHaierACStateLength] = {0xA5, 0x01, 0x20, 0x01, 0x00, @@ -789,8 +790,8 @@ TEST(TestDecodeHaierAC, NormalDecodeWithStrict) { // Decode a "real" example message. TEST(TestDecodeHaierAC, RealExample1) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -831,8 +832,8 @@ TEST(TestDecodeHaierAC, RealExample1) { // Decode a "real" example message. TEST(TestDecodeHaierAC, RealExample2) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -863,7 +864,7 @@ TEST(TestDecodeHaierAC, RealExample2) { EXPECT_FALSE(irsend.capture.repeat); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.setRaw(irsend.capture.state); EXPECT_EQ( "Command: 6 (Temp Up), Mode: 1 (Cool), Temp: 22C, Fan: 1 (Low), " @@ -874,8 +875,8 @@ TEST(TestDecodeHaierAC, RealExample2) { // Decode a "real" example message. TEST(TestDecodeHaierAC, RealExample3) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -906,7 +907,7 @@ TEST(TestDecodeHaierAC, RealExample3) { EXPECT_FALSE(irsend.capture.repeat); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRHaierAC haier(0); + IRHaierAC haier(kGpioUnused); haier.setRaw(irsend.capture.state); EXPECT_EQ( "Command: 12 (Health), Mode: 1 (Cool), Temp: 30C, Fan: 1 (Low), " @@ -917,8 +918,8 @@ TEST(TestDecodeHaierAC, RealExample3) { // Decode normal "synthetic" messages. TEST(TestDecodeHaierAC_YRW02, NormalDecode) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); uint8_t expectedState[kHaierACYRW02StateLength] = { @@ -937,8 +938,8 @@ TEST(TestDecodeHaierAC_YRW02, NormalDecode) { // Decode a "real" example message. TEST(TestDecodeHaierAC_YRW02, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -976,21 +977,21 @@ TEST(TestDecodeHaierAC_YRW02, RealExample) { EXPECT_FALSE(irsend.capture.repeat); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRHaierACYRW02 haier(0); + IRHaierACYRW02 haier(kGpioUnused); haier.setRaw(irsend.capture.state); EXPECT_EQ( - "Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 17C," - " Fan: 1 (High), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off," - " Health: On", + "Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 17C, " + "Fan: 1 (High), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: On, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", haier.toString()); } // Default state of the remote needed to include hidden data. // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/668 TEST(TestHaierAcIssues, Issue668) { - IRHaierAC ac(0); + IRHaierAC ac(kGpioUnused); IRHaierAC acText(1); - IRrecv irrecv(0); + IRrecv irrecv(kGpioUnused); ac.begin(); // Turn on the AC. @@ -1075,7 +1076,7 @@ TEST(TestHaierAcIssues, Issue668) { } TEST(TestHaierACClass, toCommon) { - IRHaierAC ac(0); + IRHaierAC ac(kGpioUnused); ac.setCommand(kHaierAcCmdOn); ac.setMode(kHaierAcCool); ac.setTemp(20); @@ -1106,7 +1107,7 @@ TEST(TestHaierACClass, toCommon) { } TEST(TestHaierACYRW02Class, toCommon) { - IRHaierACYRW02 ac(0); + IRHaierACYRW02 ac(kGpioUnused); ac.setPower(true); ac.setMode(kHaierAcYrw02Cool); ac.setTemp(20); @@ -1135,3 +1136,243 @@ TEST(TestHaierACYRW02Class, toCommon) { ASSERT_FALSE(ac.toCommon().beep); ASSERT_EQ(-1, ac.toCommon().clock); } + +TEST(TestDecodeHaierAC176, RealExample) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1480 + const uint16_t rawData[357] = { + 3096, 2948, 3048, 4388, 588, 1610, 614, 498, 586, 1612, 612, 500, 612, + 500, 586, 1610, 588, 1612, 612, 502, 586, 1612, 612, 500, 612, 500, 614, + 500, 612, 498, 586, 1610, 586, 1612, 612, 502, 612, 500, 612, 500, 612, + 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, 504, 612, 500, 612, 500, + 612, 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, 502, 614, 498, 586, + 1612, 612, 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, 502, 586, + 1612, 612, 500, 586, 1610, 612, 500, 612, 498, 612, 500, 614, 478, 634, + 502, 612, 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, 498, + 614, 504, 612, 500, 614, 500, 586, 1612, 612, 500, 612, 500, 612, 500, + 612, 500, 612, 502, 612, 500, 612, 500, 612, 500, 612, 500, 612, 500, 612, + 500, 612, 500, 612, 504, 614, 500, 612, 500, 612, 498, 614, 500, 612, 500, + 612, 500, 612, 500, 612, 482, 632, 500, 612, 502, 610, 500, 614, 500, 612, + 500, 612, 500, 612, 480, 632, 504, 612, 480, 632, 500, 612, 500, 612, 480, + 632, 500, 612, 500, 612, 500, 612, 502, 612, 500, 612, 500, 612, 500, 612, + 500, 612, 500, 586, 1612, 612, 500, 586, 1616, 612, 500, 612, 500, 586, + 1610, 588, 1612, 612, 502, 612, 500, 614, 498, 586, 1614, 586, 1612, 612, + 500, 586, 1610, 586, 1592, 632, 498, 586, 1610, 588, 1610, 586, 1614, 614, + 500, 612, 480, 632, 500, 612, 500, 612, 500, 612, 500, 614, 498, 612, 500, + 614, 500, 614, 500, 612, 500, 612, 500, 614, 498, 614, 498, 614, 500, 612, + 504, 612, 500, 612, 500, 612, 500, 612, 498, 612, 502, 612, 500, 614, 498, + 612, 502, 612, 500, 612, 498, 614, 500, 612, 500, 612, 500, 612, 500, 612, + 500, 614, 502, 612, 500, 614, 478, 634, 498, 614, 500, 612, 500, 612, 500, + 612, 500, 612, 482, 634, 500, 612, 500, 612, 500, 612, 500, 614, 498, 614, + 500, 612, 480, 632, 502, 586, 1610, 614, 478, 608, 1610, 588, 1610, 612, + 498, 586, 1610, 588, 1610, 586, 1606, 612}; // UNKNOWN ABFAD961 + + irsend.sendRaw(rawData, 357, 38000); + irsend.makeDecodeResult(); + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + ASSERT_EQ(HAIER_AC176, irsend.capture.decode_type); + EXPECT_EQ(kHaierAC176Bits, irsend.capture.bits); + EXPECT_FALSE(irsend.capture.repeat); + const uint8_t expectedState[kHaierAC176StateLength] = { + 0xA6, 0x86, 0x00, 0x00, 0x40, 0xA0, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x31, + 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7}; + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); +} + +// Decode normal "synthetic" messages. +TEST(TestDecodeHaierAC176, SyntheticDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + const uint8_t expectedState[kHaierAC176StateLength] = { + 0xA6, 0x86, 0x00, 0x00, 0x40, 0xA0, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x31, + 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7}; + + irsend.reset(); + irsend.sendHaierAC176(expectedState); + irsend.makeDecodeResult(); + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(HAIER_AC176, irsend.capture.decode_type); + EXPECT_EQ(kHaierAC176Bits, irsend.capture.bits); + EXPECT_FALSE(irsend.capture.repeat); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "Power: On, Button: 5 (Power), Mode: 1 (Cool), Temp: 24C, Fan: 5 (Auto), " + "Turbo: 0 (Off), Swing: 6 (UNKNOWN), Sleep: Off, Health: Off, " + "Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestUtils, Housekeeping) { + ASSERT_EQ("HAIER_AC", typeToString(decode_type_t::HAIER_AC)); + ASSERT_EQ(decode_type_t::HAIER_AC, strToDecodeType("HAIER_AC")); + ASSERT_TRUE(hasACState(decode_type_t::HAIER_AC)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::HAIER_AC)); + ASSERT_EQ(kHaierACBits, IRsend::defaultBits(decode_type_t::HAIER_AC)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::HAIER_AC)); + + ASSERT_EQ("HAIER_AC_YRW02", typeToString(decode_type_t::HAIER_AC_YRW02)); + ASSERT_EQ(decode_type_t::HAIER_AC_YRW02, strToDecodeType("HAIER_AC_YRW02")); + ASSERT_TRUE(hasACState(decode_type_t::HAIER_AC_YRW02)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::HAIER_AC_YRW02)); + ASSERT_EQ(kHaierACYRW02Bits, + IRsend::defaultBits(decode_type_t::HAIER_AC_YRW02)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::HAIER_AC_YRW02)); + + ASSERT_EQ("HAIER_AC176", typeToString(decode_type_t::HAIER_AC176)); + ASSERT_EQ(decode_type_t::HAIER_AC176, strToDecodeType("HAIER_AC176")); + ASSERT_TRUE(hasACState(decode_type_t::HAIER_AC176)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::HAIER_AC176)); + ASSERT_EQ(kHaierAC176Bits, IRsend::defaultBits(decode_type_t::HAIER_AC176)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::HAIER_AC176)); +} + +TEST(TestHaierAC176Class, BuildKnownState) { + IRHaierAC176 ac(kGpioUnused); + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1480#issuecomment-884920033 + // heat, 24 C, fan max + ac.setTemp(24); + ac.setMode(kHaierAcYrw02Heat); + ac.setFan(kHaierAcYrw02FanHigh); + EXPECT_TRUE(ac.validChecksum(ac.getRaw())); + EXPECT_EQ( + "Power: On, Button: 4 (Fan), Mode: 4 (Heat), Temp: 24C, Fan: 1 (High), " + "Turbo: 0 (Off), Swing: 0 (Off), Sleep: Off, Health: On, " + "Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", + ac.toString()); + /* Disabled pending: + https://github.com/crankyoldgit/IRremoteESP8266/issues/1480#issuecomment-885636790 + const uint8_t expectedState[kHaierAC176StateLength] = { + 0xA6, 0x0A, 0x00, 0x00, 0x40, 0x20, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x94, + 0xB7, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xF7}; + EXPECT_STATE_EQ(expectedState, ac.getRaw(), kHaierAC176StateLength); + */ +} + +TEST(TestHaierAC176Class, Timers) { + IRHaierAC176 ac(kGpioUnused); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ(0, ac.getOnTimer()); + EXPECT_EQ(0, ac.getOffTimer()); + + // On Timer + ac.setOnTimer(1); + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ(1, ac.getOnTimer()); + + ac.setOnTimer(0); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ(0, ac.getOnTimer()); + + ac.setOnTimer(1 * 60); + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ(1 * 60, ac.getOnTimer()); + + ac.setOnTimer(2 * 60 + 37); + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ(2 * 60 + 37, ac.getOnTimer()); + + ac.setOnTimer(23 * 60 + 59); // Max + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ(23 * 60 + 59, ac.getOnTimer()); + + ac.setOnTimer(24 * 60); // Beyond max + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ(23 * 60 + 59, ac.getOnTimer()); // Max + + ac.setOnTimer(0); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ(0, ac.getOnTimer()); + + // Off Timer + ac.setOffTimer(1); + EXPECT_EQ(kHaierAcYrw02OffTimer, ac.getTimerMode()); + EXPECT_EQ(1, ac.getOffTimer()); + + ac.setOffTimer(0); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ(0, ac.getOffTimer()); + + ac.setOffTimer(1 * 60); + EXPECT_EQ(kHaierAcYrw02OffTimer, ac.getTimerMode()); + EXPECT_EQ(1 * 60, ac.getOffTimer()); + + ac.setOffTimer(2 * 60 + 37); + EXPECT_EQ(kHaierAcYrw02OffTimer, ac.getTimerMode()); + ac.setOffTimer(23 * 60 + 59); // Max + EXPECT_EQ(kHaierAcYrw02OffTimer, ac.getTimerMode()); + EXPECT_EQ(23 * 60 + 59, ac.getOffTimer()); + + ac.setOffTimer(24 * 60); // Beyond max + EXPECT_EQ(kHaierAcYrw02OffTimer, ac.getTimerMode()); + EXPECT_EQ(23 * 60 + 59, ac.getOffTimer()); // Max + + ac.setOffTimer(0); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ(0, ac.getOffTimer()); + + // Real data. + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1480#issuecomment-894804106 + const uint8_t timer30m[22] = { + 0xA6, 0x82, 0x00, 0x40, 0x00, 0xA0, 0x00, 0x00, 0x1E, 0x00, 0x00, + 0x00, 0x10, 0x36, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7}; + const uint8_t timeroff[22] = { + 0xA6, 0x82, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x18, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7}; + // https://docs.google.com/spreadsheets/d/1wdOVS08wgK2pEP7hTZLYMmrQ9FZVmLpZF2HjNQaVxlU/edit#gid=0&range=A65 + const uint8_t timeroffthenon[22] = { + 0xA6, 0x82, 0x00, 0xA0, 0x40, 0xA0, 0x1E, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x10, 0xDE, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7}; + ac.setRaw(timer30m); + EXPECT_EQ(kHaierAcYrw02OnTimer, ac.getTimerMode()); + EXPECT_EQ( + "Power: Off, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 2 (On), On Timer: 00:30, Off Timer: Off", + ac.toString()); + ac.setRaw(timeroff); + EXPECT_EQ(kHaierAcYrw02NoTimers, ac.getTimerMode()); + EXPECT_EQ( + "Power: On, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", + ac.toString()); + ac.setRaw(timeroffthenon); + EXPECT_EQ( + "Power: On, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 5 (Off-On), On Timer: 08:00, Off Timer: 00:30", + ac.toString()); + ac.setTimerMode(kHaierAcYrw02OnThenOffTimer); + EXPECT_EQ( + "Power: On, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 4 (On-Off), On Timer: 08:00, Off Timer: 00:30", + ac.toString()); + ac.setTimerMode(kHaierAcYrw02OffTimer); + EXPECT_EQ(0, ac.getOnTimer()); + EXPECT_EQ(30, ac.getOffTimer()); + EXPECT_EQ( + "Power: On, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 1 (Off), On Timer: Off, Off Timer: 00:30", + ac.toString()); + ac.setTimerMode(kHaierAcYrw02NoTimers); + EXPECT_EQ(0, ac.getOnTimer()); + EXPECT_EQ(0, ac.getOffTimer()); + EXPECT_EQ( + "Power: On, Button: 0 (Temp Up), Mode: 0 (Auto), Temp: 24C, " + "Fan: 5 (Auto), Turbo: 0 (Off), Swing: 2 (Middle), Sleep: Off, " + "Health: Off, Timer Mode: 0 (N/A), On Timer: Off, Off Timer: Off", + ac.toString()); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Hitachi_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Hitachi_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Hitachi_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Hitachi_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Inax_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Inax_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Inax_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Inax_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_JVC_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_JVC_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_JVC_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_JVC_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Kelon_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Kelon_test.cpp new file mode 100644 index 000000000..7212d49ee --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Kelon_test.cpp @@ -0,0 +1,428 @@ +// Copyright 2021 Davide Depau + +#include "IRac.h" +#include "IRrecv.h" +#include "IRrecv_test.h" +#include "IRsend.h" +#include "IRsend_test.h" +#include "gtest/gtest.h" + +// Tests for sendKelon(). + +// Test sending typical data only. +TEST(TestSendKelon, SendDataOnly) { + IRsendTest irsend(kGpioUnused); + irsend.begin(); + + // Temp: 26C, Mode: 2 (Cool), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer: Off, + // Turbo: Off + irsend.reset(); + irsend.sendKelon(0x82000683); + EXPECT_EQ( + "f38000d50" + "m9000s4600m560s1680m560s1680m560s600m560s600m560s600m560s600" + "m560s600m560s1680m560s600m560s1680m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s1680m560s600m560s600m560s600m560s600" + "m560s600m560s1680m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s200000", + irsend.outputStr()); + + // Temp: 18C, Mode: 2 (Cool), Fan: 1 (Low), Sleep: Off, Dry: 0, Timer: Off, + // Turbo: On + irsend.reset(); + irsend.sendKelon(0x900002010683); + EXPECT_EQ( + "f38000d50" + "m9000s4600m560s1680m560s1680m560s600m560s600m560s600m560s600m560s600" + "m560s1680m560s600m560s1680m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s1680m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s1680m560s600m560s600m560s1680m560s200000", + irsend.outputStr()); + + // Temp: 23C, Mode: 0 (Heat), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer: Off, + // Turbo: Off, Power Toggle: On + irsend.reset(); + irsend.sendKelon(0x50040683); + EXPECT_EQ( + "f38000d50" + "m9000s4600m560s1680m560s1680m560s600m560s600m560s600m560s600" + "m560s600m560s1680m560s600m560s1680m560s1680m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s1680m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600m560s1680" + "m560s600m560s1680m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s200000", + irsend.outputStr()); + + // Temp: 26C, Mode: 2 (Cool), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer: + // On (9.5h), Turbo: + irsend.reset(); + irsend.sendKelon(0x138A000683); + EXPECT_EQ( + "f38000d50" + "m9000s4600m560s1680m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s1680m560s600m560s1680m560s1680m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s1680" + "m560s600m560s1680m560s600m560s600m560s600m560s1680m560s1680" + "m560s1680m560s600m560s600m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s200000", + irsend.outputStr()); + + // Temp: 26C, Mode: 2 (Cool), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer: + // On (15h), Turbo: Off: + irsend.reset(); + irsend.sendKelon(0x198A000683); + EXPECT_EQ( + "f38000d50" + "m9000s4600m560s1680m560s1680m560s600m560s600m560s600" + "m560s600m560s600m560s1680m560s600m560s1680m560s1680" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s1680m560s600m560s1680m560s600m560s600m560s600m560s1680" + "m560s1680m560s600m560s600m560s1680m560s1680m560s600" + "m560s600m560s600m560s600m560s600m560s600m560s600m560s600" + "m560s600m560s600m560s600m560s200000", + irsend.outputStr()); +} + +// Tests for decodeKelon(). +// Decode normal Kelon messages. +TEST(TestDecodeKelon, Timer12HSmartMode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x1679030683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 25C, Mode: 1 (Auto), Fan: 3 (High), Sleep: Off, Dry: 0, " + "Timer: 12:00, Turbo: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestDecodeKelon, Timer5_5hSuperCoolMode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x100B0A010683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 18C, Mode: 2 (Cool), Fan: 1 (Low), Sleep: Off, Dry: 0, " + "Timer: 05:30, Turbo: On", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestDecodeKelon, ChangeSettingsWithTimerSetHeatMode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x58000683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 23C, Mode: 0 (Heat), Fan: 0 (Auto), Sleep: Off, Dry: 0, " + "Timer: On, Turbo: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestDecodeKelon, TestPowerToggleDryMode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x83040683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 26C, Mode: 3 (Dry), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer:" + " Off, Turbo: Off, Power Toggle: On", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestDecodeKelon, TestSwingToggleDryMode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x83800683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 26C, Mode: 3 (Dry), Fan: 0 (Auto), Sleep: Off, Dry: 0, Timer:" + " Off, Turbo: Off, Swing(V) Toggle: On", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestDecodeKelon, TestDryGradeNegativeValue) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + irsend.sendKelon(0x83600683); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(KELON, irsend.capture.decode_type); + EXPECT_EQ(kKelonBits, irsend.capture.bits); + EXPECT_EQ( + "Temp: 26C, Mode: 3 (Dry), Fan: 0 (Auto), Sleep: Off, Dry: -2," + " Timer: Off, Turbo: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t result, prev; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &result, &prev)); +} + +TEST(TestIRKelonClass, SetAndGetRaw) { + uint64_t rawData = 0x100B0A010683; + IRKelonAc ac(kGpioUnused); + ac.setRaw(rawData); + EXPECT_EQ(rawData, ac.getRaw()); +} + +TEST(TestIRKelonClass, SetAndGetTemp) { + IRKelonAc ac(kGpioUnused); + + for (uint8_t temp = kKelonMinTemp; temp <= kKelonMaxTemp; temp++) { + ac.setTemp(temp); + EXPECT_EQ(temp, ac.getTemp()); + } + + // Check bounds + ac.setTemp(kKelonMinTemp - 1); + EXPECT_EQ(kKelonMinTemp, ac.getTemp()); + ac.setTemp(kKelonMaxTemp + 1); + EXPECT_EQ(kKelonMaxTemp, ac.getTemp()); +} + +TEST(TestIRKelonClass, SetAndGetTimer) { + IRKelonAc ac(kGpioUnused); + + // 0.5h to 10h timers have a granularity of 30 minutes + for (uint16_t minutes = 0; minutes <= 60 * 10; minutes += 30) { + ac.setTimer(minutes); + EXPECT_EQ(minutes, ac.getTimer()); + } + // 10h to 24h timers have a granularity of 1h + for (uint16_t minutes = 600; minutes <= 60 * 24; minutes += 60) { + ac.setTimer(minutes); + EXPECT_EQ(minutes, ac.getTimer()); + } + // For 10h to 24h timers, we expect the minutes to be floored down to the hour + for (uint16_t minutes = 600 + 30; minutes <= 60 * 24; minutes += 60) { + ac.setTimer(minutes); + EXPECT_EQ(minutes - 30, ac.getTimer()); + } +} + +TEST(TestIRKelonClass, CheckToggles) { + IRKelonAc ac(kGpioUnused); + + ac.setTogglePower(true); + EXPECT_TRUE(ac.getTogglePower()); + ac.send(); + EXPECT_FALSE(ac.getTogglePower()); + + ac.setToggleSwingVertical(true); + EXPECT_TRUE(ac.getToggleSwingVertical()); + ac.send(); + EXPECT_FALSE(ac.getToggleSwingVertical()); + + // Known state with a power toggle + ac.setRaw(0x62040683); + EXPECT_TRUE(ac.getTogglePower()); + + // Known state with a swing toggle + ac.setRaw(0x62800683); + EXPECT_TRUE(ac.getToggleSwingVertical()); +} + +TEST(TestIRKelonClass, SetAndGetMode) { + IRKelonAc ac(kGpioUnused); + + uint8_t initial_temp = 20; + ac.setMode(kKelonModeHeat); + ac.setTemp(initial_temp); + + ac.setMode(kKelonModeCool); + EXPECT_EQ(kKelonModeCool, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + + ac.setMode(kKelonModeHeat); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + + ac.setMode(kKelonModeDry); + EXPECT_EQ(kKelonModeDry, ac.getMode()); + EXPECT_EQ(25, ac.getTemp()); + + // Should revert back to previous temp + ac.setMode(kKelonModeHeat); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + + ac.setMode(kKelonModeFan); + EXPECT_EQ(kKelonModeFan, ac.getMode()); + EXPECT_EQ(25, ac.getTemp()); + + // Should revert back to previous temp + ac.setMode(kKelonModeHeat); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + + ac.setMode(kKelonModeSmart); + EXPECT_EQ(kKelonModeSmart, ac.getMode()); + EXPECT_EQ(26, ac.getTemp()); + + // Should revert back to previous temp + ac.setMode(kKelonModeHeat); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); +} + +TEST(TestIRKelonClass, CheckSuperCoolMode) { + IRKelonAc ac(kGpioUnused); + + uint8_t initial_temp = 20; + uint8_t initial_fan = kKelonFanMin; + ac.setMode(kKelonModeHeat); + ac.setTemp(initial_temp); + ac.setFan(initial_fan); + + ac.setSupercool(true); + EXPECT_TRUE(ac.getSupercool()); + EXPECT_EQ(kKelonModeCool, ac.getMode()); + EXPECT_EQ(kKelonMinTemp, ac.getTemp()); + EXPECT_EQ(kKelonFanMax, ac.getFan()); + + // Should revert back to previous temp and mode + ac.setSupercool(false); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + EXPECT_EQ(initial_fan, ac.getFan()); + + ac.setSupercool(true); + EXPECT_TRUE(ac.getSupercool()); + EXPECT_EQ(kKelonModeCool, ac.getMode()); + EXPECT_EQ(kKelonMinTemp, ac.getTemp()); + EXPECT_EQ(kKelonFanMax, ac.getFan()); + + // Setting any mode should cancel supercool + ac.setMode(kKelonModeHeat); + EXPECT_EQ(kKelonModeHeat, ac.getMode()); + EXPECT_EQ(initial_temp, ac.getTemp()); + EXPECT_EQ(initial_fan, ac.getFan()); +} + +TEST(TestIRKelonClass, SetAndGetDryGrade) { + IRKelonAc ac(kGpioUnused); + + for (int i = -2; i <= 2; i++) { + ac.setDryGrade(i); + EXPECT_EQ(i, ac.getDryGrade()); + } + // Check bounds + ac.setDryGrade(3); + EXPECT_EQ(2, ac.getDryGrade()); + ac.setDryGrade(-3); + EXPECT_EQ(-2, ac.getDryGrade()); +} + +TEST(TestIRKelonClass, toCommon) { + IRKelonAc ac(kGpioUnused); + + ac.setSleep(false); + ac.setTemp(23); + ac.setMode(kKelonModeHeat); + ac.setFan(kAmcorFanMed); + auto common = ac.toCommon(); + + EXPECT_EQ(decode_type_t::KELON, common.protocol); + EXPECT_EQ(23, common.degrees); + EXPECT_TRUE(common.celsius); + EXPECT_EQ(stdAc::fanspeed_t::kMedium, common.fanspeed); + EXPECT_FALSE(common.turbo); + EXPECT_EQ(-1, common.sleep); + + ac.setSleep(true); + ac.setSupercool(true); + + common = ac.toCommon(); + EXPECT_EQ(decode_type_t::KELON, common.protocol); + EXPECT_EQ(kKelonMinTemp, common.degrees); + EXPECT_TRUE(common.celsius); + EXPECT_EQ(stdAc::fanspeed_t::kHigh, common.fanspeed); + EXPECT_TRUE(common.turbo); + EXPECT_EQ(0, common.sleep); +} + +TEST(TestIRKelonClass, toCommonToggles) { + IRKelonAc ac(kGpioUnused); + + stdAc::state_t common = ac.toCommon(); + stdAc::state_t prev = common; + + EXPECT_TRUE(common.power); + EXPECT_EQ(stdAc::swingv_t::kAuto, common.swingv); + + ac.setTogglePower(true); + ac.setToggleSwingVertical(true); + + common = ac.toCommon(&prev); + prev = common; + + EXPECT_FALSE(common.power); + EXPECT_EQ(stdAc::swingv_t::kOff, common.swingv); + + ac.setTogglePower(true); + ac.setToggleSwingVertical(true); + + common = ac.toCommon(&prev); + + EXPECT_TRUE(common.power); + EXPECT_EQ(stdAc::swingv_t::kAuto, common.swingv); +} + +TEST(TestUtils, Housekeeping) { + ASSERT_EQ("KELON", typeToString(decode_type_t::KELON)); + ASSERT_EQ(decode_type_t::KELON, strToDecodeType("KELON")); + ASSERT_FALSE(hasACState(decode_type_t::KELON)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::KELON)); + ASSERT_EQ(kKelonBits, IRsend::defaultBits(decode_type_t::KELON)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::KELON)); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Kelvinator_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Kelvinator_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Kelvinator_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Kelvinator_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_LG_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_LG_test.cpp similarity index 74% rename from lib/lib_basic/IRremoteESP8266/test/ir_LG_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_LG_test.cpp index c6ae33dda..808f7b83a 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_LG_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_LG_test.cpp @@ -518,6 +518,7 @@ TEST(TestIRLgAcClass, SetAndGetMode) { TEST(TestIRLgAcClass, SetAndGetFan) { IRLgAc ac(kGpioUnused); + ac.setModel(lg_ac_remote_model_t::AKB74955603); ac.setMode(kLgAcCool); ac.setFan(kLgAcFanAuto); EXPECT_EQ(kLgAcFanAuto, ac.getFan()); @@ -529,6 +530,10 @@ TEST(TestIRLgAcClass, SetAndGetFan) { EXPECT_EQ(kLgAcFanAuto, ac.getFan()); ac.setFan(kLgAcFanLowest - 1); EXPECT_EQ(kLgAcFanAuto, ac.getFan()); + ac.setFan(kLgAcFanMax); + EXPECT_EQ(kLgAcFanMax, ac.getFan()); + ac.setFan(kLgAcFanHigh + 1); + EXPECT_EQ(kLgAcFanAuto, ac.getFan()); } TEST(TestIRLgAcClass, toCommon) { @@ -536,7 +541,7 @@ TEST(TestIRLgAcClass, toCommon) { ac.setPower(true); ac.setMode(kLgAcCool); ac.setTemp(20); - ac.setFan(kLgAcFanHigh); + ac.setFan(kLgAcFanMax); // Now test it. ASSERT_EQ(decode_type_t::LG, ac.toCommon().protocol); ASSERT_EQ(lg_ac_remote_model_t::GE6711AR2853M, ac.toCommon().model); @@ -545,12 +550,12 @@ TEST(TestIRLgAcClass, toCommon) { ASSERT_EQ(20, ac.toCommon().degrees); ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode); ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed); + ASSERT_TRUE(ac.toCommon().light); // Unsupported. ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv); ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh); ASSERT_FALSE(ac.toCommon().turbo); ASSERT_FALSE(ac.toCommon().clean); - ASSERT_FALSE(ac.toCommon().light); ASSERT_FALSE(ac.toCommon().quiet); ASSERT_FALSE(ac.toCommon().econo); ASSERT_FALSE(ac.toCommon().filter); @@ -576,7 +581,7 @@ TEST(TestIRLgAcClass, HumanReadable) { ac.setFan(kLgAcFanHigh); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 4 (Heat), Temp: 30C, Fan: 4 (High)", + "Power: On, Mode: 4 (Heat), Temp: 30C, Fan: 4 (Maximum)", ac.toString()); ac.setMode(kLgAcCool); ac.setFan(kLgAcFanLow); @@ -609,7 +614,7 @@ TEST(TestIRLgAcClass, SetAndGetRaw) { ASSERT_EQ(0x8800A4E, ac.getRaw()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 25C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 25C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x88C0051); @@ -630,7 +635,7 @@ TEST(TestIRLgAcClass, MessageConstruction) { ASSERT_EQ(0x8800A4E, ac.getRaw()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 25C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 25C, Fan: 4 (Maximum)", ac.toString()); } @@ -671,6 +676,23 @@ TEST(TestUtils, Housekeeping) { ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::LG2)); ASSERT_EQ(kLgBits, IRsendTest::defaultBits(decode_type_t::LG2)); ASSERT_EQ(kLgDefaultRepeat, IRsendTest::minRepeats(decode_type_t::LG2)); + + ASSERT_EQ(lg_ac_remote_model_t::GE6711AR2853M, + IRac::strToModel(irutils::modelToStr( + decode_type_t::LG, + lg_ac_remote_model_t::GE6711AR2853M).c_str())); + ASSERT_EQ(lg_ac_remote_model_t::AKB75215403, + IRac::strToModel(irutils::modelToStr( + decode_type_t::LG2, + lg_ac_remote_model_t::AKB75215403).c_str())); + ASSERT_EQ(lg_ac_remote_model_t::AKB74955603, + IRac::strToModel(irutils::modelToStr( + decode_type_t::LG2, + lg_ac_remote_model_t::AKB74955603).c_str())); + ASSERT_EQ(lg_ac_remote_model_t::AKB73757604, + IRac::strToModel(irutils::modelToStr( + decode_type_t::LG2, + lg_ac_remote_model_t::AKB73757604).c_str())); } TEST(TestIRLgAcClass, KnownExamples) { @@ -734,7 +756,7 @@ TEST(TestIRLgAcClass, KnownExamples) { ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 22C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 22C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x8808754); @@ -748,7 +770,7 @@ TEST(TestIRLgAcClass, KnownExamples) { ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 2 (Fan), Temp: 22C, Fan: 4 (High)", + "Power: On, Mode: 2 (Fan), Temp: 22C, Fan: 4 (Maximum)", ac.toString()); // https://github.com/crankyoldgit/IRremoteESP8266/issues/1008#issuecomment-570794029 @@ -756,13 +778,13 @@ TEST(TestIRLgAcClass, KnownExamples) { ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x8808440); ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 19C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 19C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x8800459); ASSERT_TRUE(ac.isValidLgAc()); @@ -774,19 +796,19 @@ TEST(TestIRLgAcClass, KnownExamples) { ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 1 (Dry), Temp: 24C, Fan: 4 (High)", + "Power: On, Mode: 1 (Dry), Temp: 24C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x880A341); ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 2 (Fan), Temp: 18C, Fan: 4 (High)", + "Power: On, Mode: 2 (Fan), Temp: 18C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x8810045); ASSERT_TRUE(ac.isValidLgAc()); EXPECT_EQ( "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 15C, Fan: 4 (High)", + "Power: On, Mode: 0 (Cool), Temp: 15C, Fan: 4 (Maximum)", ac.toString()); ac.setRaw(0x8810056); ASSERT_TRUE(ac.isValidLgAc()); @@ -794,6 +816,20 @@ TEST(TestIRLgAcClass, KnownExamples) { "Model: 1 (GE6711AR2853M), " "Power: On, Mode: 0 (Cool), Temp: 15C, Fan: 5 (Auto)", ac.toString()); + + // https://docs.google.com/spreadsheets/d/17C_Ay7OjsYNSAxxj8uXbh0Vi2jrqyrncwzIyUOGSuNo/edit#gid=0&range=A56:E56 + ac.setRaw(0x881334B); + ASSERT_TRUE(ac.isValidLgAc()); + EXPECT_EQ( + "Model: 4 (AKB73757604), Vane: 2, Swing(V): 4 (Middle)", + ac.toString()); + + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1531#issuecomment-892070033 + ac.setRaw(0x88133B2); + ASSERT_TRUE(ac.isValidLgAc()); + EXPECT_EQ( + "Model: 4 (AKB73757604), Vane: 3, Swing(V): 3 (Upper Middle)", + ac.toString()); } // Verify decoding of LG2 message. @@ -827,7 +863,7 @@ TEST(TestDecodeLG2, Issue1008) { char expected[] = "Model: 2 (AKB75215403), " - "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (High)"; + "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (Maximum)"; ASSERT_EQ(expected, ac.toString()); ac._irsend.makeDecodeResult(); EXPECT_TRUE(capture.decode(&ac._irsend.capture)); @@ -850,7 +886,7 @@ TEST(TestIRLgAcClass, DifferentModels) { char expected1[] = "Model: 1 (GE6711AR2853M), " - "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (High)"; + "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (Maximum)"; ASSERT_EQ(expected1, ac.toString()); ac._irsend.makeDecodeResult(); EXPECT_TRUE(capture.decode(&ac._irsend.capture)); @@ -866,7 +902,7 @@ TEST(TestIRLgAcClass, DifferentModels) { char expected2[] = "Model: 2 (AKB75215403), " - "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (High)"; + "Power: On, Mode: 0 (Cool), Temp: 18C, Fan: 4 (Maximum)"; ASSERT_EQ(expected2, ac.toString()); ac._irsend.makeDecodeResult(); EXPECT_TRUE(capture.decode(&ac._irsend.capture)); @@ -881,6 +917,212 @@ TEST(TestIRLgAcClass, FanSpeedIssue1214) { EXPECT_EQ(kLgAcFanLow, IRLgAc::convertFan(stdAc::fanspeed_t::kLow)); EXPECT_EQ(kLgAcFanMedium, IRLgAc::convertFan(stdAc::fanspeed_t::kMedium)); EXPECT_EQ(kLgAcFanHigh, IRLgAc::convertFan(stdAc::fanspeed_t::kHigh)); - EXPECT_EQ(kLgAcFanHigh, IRLgAc::convertFan(stdAc::fanspeed_t::kMax)); + EXPECT_EQ(kLgAcFanMax, IRLgAc::convertFan(stdAc::fanspeed_t::kMax)); EXPECT_EQ(kLgAcFanAuto, IRLgAc::convertFan(stdAc::fanspeed_t::kAuto)); } + +TEST(TestIRLgAcClass, FanSpeedIssue1513) { + IRLgAc ac(kGpioUnused); + // Test for the new model's extra speed. + ac.setModel(lg_ac_remote_model_t::AKB74955603); + ac.setFan(kLgAcFanHigh); + EXPECT_EQ(kLgAcFanHigh, ac.getFan()); + ac.setFan(kLgAcFanLow); + EXPECT_EQ(kLgAcFanLowAlt, ac.getFan()); + // Check the old model can't do it. + ac.setModel(lg_ac_remote_model_t::AKB75215403); + ac.setFan(kLgAcFanHigh); + EXPECT_EQ(kLgAcFanMax, ac.getFan()); + + // Real examples. + ac.setRaw(0x880A3A7); + EXPECT_EQ(kLgAcFanHigh, ac.getFan()); + ac.setRaw(0x880A396); + EXPECT_EQ(kLgAcFanLowAlt, ac.getFan()); +} + +TEST(TestIRLgAcClass, DetectAKB74955603) { + IRLgAc ac(kGpioUnused); + IRrecv capture(kGpioUnused); + + ac.stateReset(); + ASSERT_NE(lg_ac_remote_model_t::AKB74955603, ac.getModel()); + ac.setRaw(0x880A3A7); + EXPECT_EQ(lg_ac_remote_model_t::AKB74955603, ac.getModel()); + + ac.stateReset(); + // https://docs.google.com/spreadsheets/d/1zF0FI2ENvbLdk4zaWBY9ZYVM3MB_4oxro9wCM7ETX4Y/edit#gid=1319765817&range=A2:C2 + ac.setRaw(0x880A396); + EXPECT_EQ(lg_ac_remote_model_t::AKB74955603, ac.getModel()); + char expected[] = + "Model: 3 (AKB74955603), Power: On, Mode: 2 (Fan), Temp: 18C, " + "Fan: 9 (Low)"; + ASSERT_EQ(expected, ac.toString()); + + ac._irsend.reset(); + ac.send(); + ac._irsend.makeDecodeResult(); + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&ac._irsend.capture, &r, &p)); + + ac.stateReset(); + ac.setRaw(0x881306A); + EXPECT_EQ(lg_ac_remote_model_t::AKB74955603, ac.getModel()); + + ac.stateReset(); + ac.setRaw(kLgAcSwingHOff); + EXPECT_NE(lg_ac_remote_model_t::AKB74955603, ac.getModel()); + + ac.stateReset(); + ac.setRaw(0x8813228); + EXPECT_NE(lg_ac_remote_model_t::AKB74955603, ac.getModel()); +} + +TEST(TestIRLgAcClass, DetectAKB73757604) { + IRLgAc ac(kGpioUnused); + IRrecv capture(kGpioUnused); + + ac.stateReset(); + ASSERT_NE(lg_ac_remote_model_t::AKB73757604, ac.getModel()); + ac.setRaw(0x880A3A7); + EXPECT_NE(lg_ac_remote_model_t::AKB73757604, ac.getModel()); + + // https://docs.google.com/spreadsheets/d/17C_Ay7OjsYNSAxxj8uXbh0Vi2jrqyrncwzIyUOGSuNo/edit?usp=sharing + ac.stateReset(); + ac.setRaw(kLgAcSwingHOff); + EXPECT_EQ(lg_ac_remote_model_t::AKB73757604, ac.getModel()); + + ac.setRaw(0x8813228); + EXPECT_EQ(lg_ac_remote_model_t::AKB73757604, ac.getModel()); + + ac.setRaw(0x881333A); + EXPECT_EQ(lg_ac_remote_model_t::AKB73757604, ac.getModel()); + ASSERT_EQ("Model: 4 (AKB73757604), Vane: 2, Swing(V): 3 (Upper Middle)", + ac.toString()); +} + +TEST(TestIRLgAcClass, Light) { + IRLgAc ac(kGpioUnused); + IRrecv capture(kGpioUnused); + ac.begin(); + + ASSERT_FALSE(ac.isLightToggle()); + EXPECT_TRUE(ac.getLight()); + ac.setLight(false); + EXPECT_FALSE(ac.getLight()); + ac.setLight(true); + EXPECT_TRUE(ac.getLight()); + + ac.setRaw(0x880A396); // A known state. + const char expected[] = + "Model: 3 (AKB74955603), Power: On, Mode: 2 (Fan), Temp: 18C, " + "Fan: 9 (Low)"; + ac.setLight(false); + ac._irsend.reset(); + ac.send(); + ac._irsend.makeDecodeResult(); + // First message should be normal. + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + // The next should be a light toggle. + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ("Model: 3 (AKB74955603), Light Toggle: On", + IRAcUtils::resultAcToString(&ac._irsend.capture)); +} + +TEST(TestIRLgAcClass, SwingV) { + IRLgAc ac(kGpioUnused); + IRrecv capture(kGpioUnused); + ac.begin(); + + EXPECT_EQ(kLgAcSwingVOff, ac.getSwingV()); + + // Ref: https://docs.google.com/spreadsheets/d/1zF0FI2ENvbLdk4zaWBY9ZYVM3MB_4oxro9wCM7ETX4Y/edit#gid=1912869597&range=D2:E9 + ac.setRaw(0x881306A); + EXPECT_TRUE(ac.isSwingV()); + const char expected_middle[] = + "Model: 3 (AKB74955603), Swing(V): 6 (Middle)"; + EXPECT_EQ(expected_middle, ac.toString()); + ac.setSwingV(kLgAcSwingVHigh); + EXPECT_EQ(kLgAcSwingVHigh, ac.getSwingV()); + ac.setSwingV(0x880A396); // Non SwingV code. + EXPECT_EQ(kLgAcSwingVHigh, ac.getSwingV()); // Last setting. + + // Test sending via the class method. + ac.stateReset(); + ac.setRaw(0x880A396); // A known normal state. + const char expected[] = + "Model: 3 (AKB74955603), Power: On, Mode: 2 (Fan), Temp: 18C, " + "Fan: 9 (Low)"; + ac.setSwingV(kLgAcSwingVMiddle_Short); + EXPECT_EQ(kLgAcSwingVMiddle, ac.getSwingV()); + + ac._irsend.reset(); + ac.send(); + ac._irsend.makeDecodeResult(); + // First message should be normal. + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ(expected, IRAcUtils::resultAcToString(&ac._irsend.capture)); + // The next should be a middle swing. + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + EXPECT_EQ(kLgAcSwingVMiddle, ac._irsend.capture.value); + ASSERT_EQ(expected_middle, + IRAcUtils::resultAcToString(&ac._irsend.capture)); +} + +// Ref: +// https://github.com/crankyoldgit/IRremoteESP8266/issues/1513#issuecomment-877960010 +// https://docs.google.com/spreadsheets/d/1zF0FI2ENvbLdk4zaWBY9ZYVM3MB_4oxro9wCM7ETX4Y/edit#gid=348220307&range=A49:C49 +TEST(TestIRLgAcClass, SwingVOffAfterAuto) { + // Simulate sending a state with a SwingV auto, then followed by a SwingV Off. + IRLgAc ac(kGpioUnused); + IRrecv capture(kGpioUnused); + ac.begin(); + // IRhvac {"Vendor":"LG2", "Model": 3, "Power": "On", "Mode": "Heat", + // "Temp": 26, "FanSpeed": "min", "SwingV": "Auto", "Light": "On"} + ac.setModel(lg_ac_remote_model_t::AKB74955603); + ac.setPower(true); + ac.setMode(kLgAcHeat); + ac.setTemp(26); + ac.setFan(kLgAcFanLowest); + ac.setSwingV(ac.convertSwingV(stdAc::swingv_t::kAuto)); + ac.setLight(true); + ac._irsend.reset(); + ac.send(); + // All sent, we assume the above works. Just need to switch to swing off now. + ac._irsend.reset(); + // IRhvac {"Vendor":"LG2", "Model": 3, "Power": "On", "Mode": "Heat", + // "Temp": 26, "FanSpeed": "min", "SwingV": "Off", "Light": "On"} + ac.setSwingV(ac.convertSwingV(stdAc::swingv_t::kOff)); + ac.send(); + ac._irsend.makeDecodeResult(); + // There should only be two messages. + EXPECT_EQ(121, ac._irsend.capture.rawlen); + // First message should be normal. + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + ASSERT_EQ( + "Model: 2 (AKB75215403), Power: On, Mode: 4 (Heat), Temp: 26C," + " Fan: 0 (Quiet)", + IRAcUtils::resultAcToString(&ac._irsend.capture)); + // The next should be a SwingV Off. + EXPECT_TRUE(capture.decodeLG(&ac._irsend.capture, 61)); + ASSERT_EQ(LG2, ac._irsend.capture.decode_type); // Not "LG" + ASSERT_EQ(kLgBits, ac._irsend.capture.bits); + EXPECT_EQ(kLgAcSwingVOff, ac._irsend.capture.value); + ASSERT_EQ("Model: 3 (AKB74955603), Swing(V): 21 (Off)", + IRAcUtils::resultAcToString(&ac._irsend.capture)); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Lasertag_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lasertag_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Lasertag_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lasertag_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Lego_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lego_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Lego_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lego_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Lutron_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lutron_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Lutron_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Lutron_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_MWM_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_MWM_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_MWM_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_MWM_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Magiquest_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Magiquest_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Magiquest_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Magiquest_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Metz_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Metz_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Metz_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Metz_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Midea_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Midea_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Midea_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Midea_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Milestag2_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Milestag2_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Milestag2_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Milestag2_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Mirage_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Mirage_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Mirage_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Mirage_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_MitsubishiHeavy_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_MitsubishiHeavy_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_MitsubishiHeavy_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_MitsubishiHeavy_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Mitsubishi_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Mitsubishi_test.cpp similarity index 89% rename from lib/lib_basic/IRremoteESP8266/test/ir_Mitsubishi_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Mitsubishi_test.cpp index 2b28dc588..28cc04d8e 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Mitsubishi_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Mitsubishi_test.cpp @@ -652,6 +652,26 @@ TEST(TestMitsubishiACClass, VaneMode) { EXPECT_EQ(kMitsubishiAcVaneAutoMove - 1, ac.getVane()); } +TEST(TestMitsubishiACClass, VaneLeft) { + IRMitsubishiAC ac(kGpioUnused); + ac.begin(); + + ac.setVaneLeft(kMitsubishiAcVaneAuto); + EXPECT_EQ(kMitsubishiAcVaneAuto, ac.getVaneLeft()); + + ac.setVaneLeft(kMitsubishiAcVaneAuto + 1); + EXPECT_EQ(kMitsubishiAcVaneAuto + 1, ac.getVaneLeft()); + + ac.setVaneLeft(kMitsubishiAcVaneAutoMove); + EXPECT_EQ(kMitsubishiAcVaneAutoMove, ac.getVaneLeft()); + + ac.setVaneLeft(kMitsubishiAcVaneAutoMove + 1); + EXPECT_EQ(kMitsubishiAcVaneAutoMove, ac.getVaneLeft()); + + ac.setVaneLeft(kMitsubishiAcVaneAutoMove - 1); + EXPECT_EQ(kMitsubishiAcVaneAutoMove - 1, ac.getVaneLeft()); +} + TEST(TestMitsubishiACClass, FanSpeed) { IRMitsubishiAC ac(kGpioUnused); ac.begin(); @@ -697,6 +717,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) { ac.setMode(kMitsubishiAcCool); ac.setTemp(27); ac.setVane(3); + ac.setVaneLeft(2); ac.on(); // Check everything for kicks. @@ -704,6 +725,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) { EXPECT_EQ(kMitsubishiAcCool, ac.getMode()); EXPECT_EQ(27, ac.getTemp()); EXPECT_EQ(3, ac.getVane()); + EXPECT_EQ(2, ac.getVaneLeft()); EXPECT_TRUE(ac.getPower()); irsend.reset(); @@ -727,8 +749,8 @@ TEST(TestMitsubishiACClass, MessageConstuction) { "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" - "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" - "m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420" + "m450s420m450s420m450s420m450s420m450s1300m450s420m450s420m450s420" + "m450s420m450s1300m450s1300m450s1300m450s1300m450s420m450s1300m450s420" "m440s17100" "m3400s1750" "m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420" @@ -747,8 +769,8 @@ TEST(TestMitsubishiACClass, MessageConstuction) { "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" - "m450s420m450s420m450s420m450s420m450s420m450s420m450s420m450s420" - "m450s420m450s1300m450s1300m450s1300m450s420m450s420m450s1300m450s420" + "m450s420m450s420m450s420m450s420m450s1300m450s420m450s420m450s420" + "m450s420m450s1300m450s1300m450s1300m450s1300m450s420m450s1300m450s420" "m440s17100", irsend.outputStr()); } @@ -824,134 +846,6 @@ TEST(TestDecodeMitsubishiAC, DecodeRealExample) { EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits); } -// Tests for decodeMitsubishiAC() when the first payload has an error. -TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeeded) { - IRsendTest irsend(kGpioUnused); - IRrecv irrecv(kGpioUnused); - irsend.begin(); - - irsend.reset(); - // Mitsubishi AC "Power On, 16C, low fan, vane auto move". - uint16_t rawData[583] = { - 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236, - 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394, - 444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392, - 446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390, - 446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446, - 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390, - 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448, - 390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438, - 402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398, - // space 699 is not recognizable: - 440, 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 699, 1260, - 416, 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264, - 422, 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400, - 446, 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438, - 400, 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400, - 448, 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, - 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, - 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440, - 398, 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, - 438, 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, - 398, 438, 1240, 444, 1264, 422, 390, 446, 392, 446, 1260, 414, 1268, 418, - 1264, 422, 12984, 3478, 1708, 418, 1264, 422, 1234, 442, 398, 448, 390, - 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234, 442, 1266, 420, 392, - 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260, 416, 398, 440, 1266, - 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400, 448, 392, 446, 1234, - 440, 398, 450, 390, 446, 392, 444, 394, 444, 394, 442, 396, 442, 398, 440, - 400, 438, 400, 448, 390, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, - 438, 400, 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, - 398, 438, 400, 448, 416, 420, 392, 444, 1234, 440, 1240, 446, 394, 442, - 396, 440, 398, 438, 400, 448, 1232, 444, 396, 440, 1240, 446, 394, 442, - 396, 440, 398, 440, 400, 448, 390, 446, 1232, 444, 1238, 446, 394, 444, - 1236, 448, 1232, 442, 396, 440, 398, 448, 1232, 444, 396, 440, 398, 438, - 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, 442, 396, 440, 398, 438, - 400, 448, 390, 446, 394, 444, 420, 416, 394, 444, 396, 440, 398, 440, 398, - 438, 400, 448, 418, 420, 418, 418, 394, 442, 396, 442, 396, 440, 424, 412, - 400, 448, 390, 446, 392, 446, 420, 418, 420, 416, 396, 440, 398, 440, 424, - 412, 426, 420, 418, 420, 392, 444, 394, 444, 422, 416, 422, 414, 398, 440, - 426, 422, 388, 448, 416, 420, 418, 418, 422, 416, 422, 414, 424, 414, 398, - 438, 426, 422, 418, 420, 390, 446, 418, 418, 420, 416, 396, 440, 424, 412, - 426, 412, 400, 446, 418, 420, 420, 418, 420, 416, 422, 414, 422, 414, 424, - 412, 426, 422, 390, 446, 1232, 442, 1240, 446, 394, 444, 394, 442, 1238, - 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B - - irsend.sendRaw(rawData, 583, 33); - irsend.makeDecodeResult(); - - ASSERT_TRUE(irrecv.decode(&irsend.capture)); - EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type); - EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits); - uint8_t expected[kMitsubishiACStateLength] = { - 0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36, - 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6}; - EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits); -} - -// Tests for decodeMitsubishiAC() when the repeat mark is wrong. -TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatMarkError) { - IRsendTest irsend(kGpioUnused); - IRrecv irrecv(kGpioUnused); - irsend.begin(); - - irsend.reset(); - // Mitsubishi AC "Power On, 16C, low fan, vane auto move". - uint16_t rawData[583] = { - 3476, 1708, 416, 1264, 420, 1260, 414, 400, 448, 390, 446, 392, 444, 1236, - 440, 400, 446, 392, 446, 1234, 440, 1266, 418, 396, 442, 1264, 420, 394, - 444, 394, 442, 1264, 422, 1260, 414, 398, 440, 1266, 418, 1264, 420, 392, - 446, 392, 444, 1264, 422, 392, 446, 392, 446, 1260, 414, 400, 448, 390, - 446, 392, 444, 394, 442, 396, 442, 398, 440, 424, 412, 400, 448, 390, 446, - 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, 448, 390, - 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 440, 400, 438, 400, 448, - 390, 446, 392, 444, 1236, 440, 1266, 418, 394, 442, 396, 440, 398, 438, - 402, 446, 1232, 444, 396, 440, 1268, 418, 394, 442, 396, 440, 398, 440, - 400, 448, 390, 448, 1232, 442, 1266, 420, 394, 444, 1264, 422, 1260, 416, - 396, 440, 398, 450, 1230, 444, 396, 442, 398, 440, 1266, 418, 1264, 422, - 1258, 416, 1266, 418, 394, 442, 396, 440, 398, 440, 398, 438, 400, 446, - 392, 446, 392, 446, 392, 444, 396, 442, 396, 440, 398, 438, 398, 438, 400, - 448, 392, 446, 392, 444, 394, 444, 396, 442, 396, 440, 398, 438, 400, 448, - 390, 448, 392, 444, 394, 444, 394, 442, 396, 442, 396, 440, 398, 438, 400, - 448, 390, 446, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, 438, - 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 440, 398, - 438, 400, 448, 390, 446, 392, 444, 394, 444, 394, 442, 396, 440, 398, 438, - 400, 438, 400, 448, 392, 446, 392, 444, 394, 442, 396, 442, 396, 440, 398, - 438, 1240, 444, 1264, 422, 390, 446, 392, 446, - // Repeat mark (1111) wrong: - 1260, 414, 1268, 418, 1264, 422, 1111, 347, 1708, 418, 1264, 422, 1234, - 442, 398, 448, 390, 446, 392, 446, 1234, 440, 400, 448, 390, 446, 1234, - 442, 1266, 420, 392, 444, 1264, 420, 392, 446, 394, 444, 1236, 448, 1260, - 416, 398, 440, 1266, 418, 1262, 422, 390, 446, 392, 444, 1234, 440, 400, - 448, 392, 446, 1234, 440, 398, 450, 390, 446, 392, 444, 394, 444, 394, - 442, 396, 442, 398, 440, 400, 438, 400, 448, 390, 446, 392, 444, 394, 442, - 396, 442, 396, 440, 398, 438, 400, 448, 390, 446, 392, 446, 392, 444, 394, - 442, 396, 442, 396, 440, 398, 438, 400, 448, 416, 420, 392, 444, 1234, - 440, 1240, 446, 394, 442, 396, 440, 398, 438, 400, 448, 1232, 444, 396, - 440, 1240, 446, 394, 442, 396, 440, 398, 440, 400, 448, 390, 446, 1232, - 444, 1238, 446, 394, 444, 1236, 448, 1232, 442, 396, 440, 398, 448, 1232, - 444, 396, 440, 398, 438, 1242, 444, 1238, 448, 1234, 442, 1240, 444, 394, - 442, 396, 440, 398, 438, 400, 448, 390, 446, 394, 444, 420, 416, 394, 444, - 396, 440, 398, 440, 398, 438, 400, 448, 418, 420, 418, 418, 394, 442, 396, - 442, 396, 440, 424, 412, 400, 448, 390, 446, 392, 446, 420, 418, 420, 416, - 396, 440, 398, 440, 424, 412, 426, 420, 418, 420, 392, 444, 394, 444, 422, - 416, 422, 414, 398, 440, 426, 422, 388, 448, 416, 420, 418, 418, 422, 416, - 422, 414, 424, 414, 398, 438, 426, 422, 418, 420, 390, 446, 418, 418, 420, - 416, 396, 440, 424, 412, 426, 412, 400, 446, 418, 420, 420, 418, 420, 416, - 422, 414, 422, 414, 424, 412, 426, 422, 390, 446, 1232, 442, 1240, 446, - 394, 444, 394, 442, 1238, 446, 1234, 440, 1240, 444}; // UNKNOWN F6FDB82B - - irsend.sendRaw(rawData, 583, 33); - irsend.makeDecodeResult(); - - ASSERT_TRUE(irrecv.decode(&irsend.capture)); - EXPECT_EQ(MITSUBISHI_AC, irsend.capture.decode_type); - EXPECT_EQ(kMitsubishiACBits, irsend.capture.bits); - uint8_t expected[kMitsubishiACStateLength] = { - 0x23, 0xCB, 0x26, 0x01, 0x00, 0x00, 0x18, 0x0A, 0x36, - 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6}; - EXPECT_STATE_EQ(expected, irsend.capture.state, kMitsubishiACBits); -} - // Tests for decodeMitsubishiAC() when first payload has an error and the // repeat mark is wrong. TEST(TestDecodeMitsubishiAC, DecodeRealExampleRepeatNeededButError) { diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Multibrackets_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Multibrackets_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Multibrackets_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Multibrackets_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_NEC_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_NEC_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_NEC_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_NEC_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Neoclima_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Neoclima_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Neoclima_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Neoclima_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Nikai_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Nikai_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Nikai_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Nikai_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Panasonic_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Panasonic_test.cpp similarity index 99% rename from lib/lib_basic/IRremoteESP8266/test/ir_Panasonic_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Panasonic_test.cpp index 633c9e366..3e52cef8b 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Panasonic_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Panasonic_test.cpp @@ -665,16 +665,16 @@ TEST(TestIRPanasonicAcClass, SetAndGetFan) { EXPECT_EQ(kPanasonicAcFanMin, ac.getFan()); ac.setFan(kPanasonicAcFanMin - 1); EXPECT_EQ(kPanasonicAcFanAuto, ac.getFan()); + ac.setFan(kPanasonicAcFanLow); + EXPECT_EQ(kPanasonicAcFanLow, ac.getFan()); ac.setFan(kPanasonicAcFanMed); EXPECT_EQ(kPanasonicAcFanMed, ac.getFan()); - ac.setFan(kPanasonicAcFanMin + 1); - EXPECT_EQ(kPanasonicAcFanAuto, ac.getFan()); + ac.setFan(kPanasonicAcFanHigh); + EXPECT_EQ(kPanasonicAcFanHigh, ac.getFan()); ac.setFan(kPanasonicAcFanMax); EXPECT_EQ(kPanasonicAcFanMax, ac.getFan()); ac.setFan(kPanasonicAcFanMax + 1); EXPECT_EQ(kPanasonicAcFanAuto, ac.getFan()); - ac.setFan(kPanasonicAcFanMax - 1); - EXPECT_EQ(kPanasonicAcFanAuto, ac.getFan()); } TEST(TestIRPanasonicAcClass, SetAndGetSwings) { @@ -788,14 +788,14 @@ TEST(TestIRPanasonicAcClass, HumanReadable) { ac.setPowerful(true); EXPECT_EQ( "Model: 4 (JKE), Power: On, Mode: 4 (Heat), Temp: 30C, " - "Fan: 4 (High), Swing(V): 15 (Auto), Quiet: Off, " + "Fan: 4 (Maximum), Swing(V): 15 (Auto), Quiet: Off, " "Powerful: On, Clock: 00:00, On Timer: Off, Off Timer: Off", ac.toString()); ac.setQuiet(true); ac.setModel(kPanasonicLke); EXPECT_EQ( "Model: 1 (LKE), Power: Off, Mode: 4 (Heat), Temp: 30C, " - "Fan: 4 (High), Swing(V): 15 (Auto), " + "Fan: 4 (Maximum), Swing(V): 15 (Auto), " "Swing(H): 6 (Middle), Quiet: On, Powerful: Off, " "Clock: 00:00, On Timer: 00:00, Off Timer: Off", ac.toString()); @@ -803,7 +803,7 @@ TEST(TestIRPanasonicAcClass, HumanReadable) { ac.setSwingHorizontal(kPanasonicAcSwingHRight); EXPECT_EQ( "Model: 3 (DKE), Power: Off, Mode: 4 (Heat), Temp: 30C, " - "Fan: 4 (High), Swing(V): 15 (Auto), " + "Fan: 4 (Maximum), Swing(V): 15 (Auto), " "Swing(H): 11 (Right), Quiet: On, Powerful: Off, Ion: Off, " "Clock: 00:00, On Timer: Off, Off Timer: Off", ac.toString()); diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Pioneer_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Pioneer_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Pioneer_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Pioneer_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Pronto_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Pronto_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Pronto_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Pronto_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_RC5_RC6_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_RC5_RC6_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_RC5_RC6_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_RC5_RC6_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_RCMM_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_RCMM_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_RCMM_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_RCMM_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Samsung_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Samsung_test.cpp similarity index 87% rename from lib/lib_basic/IRremoteESP8266/test/ir_Samsung_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Samsung_test.cpp index ee8afbaad..a4e0503cd 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Samsung_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Samsung_test.cpp @@ -321,7 +321,7 @@ TEST(TestSamsungAC, Housekeeping) { // Test sending typical data only. TEST(TestSendSamsungAC, SendDataOnly) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); uint8_t data[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, @@ -353,7 +353,7 @@ TEST(TestSendSamsungAC, SendDataOnly) { // Test sending extended data. TEST(TestSendSamsungAC, SendExtendedData) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); // "Off" message. uint8_t data[kSamsungAcExtendedStateLength] = { @@ -400,38 +400,38 @@ TEST(TestIRSamsungAcClass, SetAndGetRaw) { uint8_t expectedState[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0}; - IRSamsungAc samsung(0); - samsung.setRaw(expectedState); - EXPECT_STATE_EQ(expectedState, samsung.getRaw(), kSamsungAcBits); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(expectedState); + EXPECT_STATE_EQ(expectedState, ac.getRaw(), kSamsungAcBits); uint8_t extendedState[kSamsungAcExtendedStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0}; - samsung.setRaw(extendedState, kSamsungAcExtendedStateLength); + ac.setRaw(extendedState, kSamsungAcExtendedStateLength); // We should NOT get the extended state back. - EXPECT_STATE_EQ(expectedState, samsung.getRaw(), kSamsungAcBits); + EXPECT_STATE_EQ(expectedState, ac.getRaw(), kSamsungAcBits); } TEST(TestIRSamsungAcClass, SetAndGetPower) { - IRSamsungAc samsung(0); - samsung.on(); - EXPECT_TRUE(samsung.getPower()); - samsung.off(); - EXPECT_FALSE(samsung.getPower()); - samsung.setPower(true); - EXPECT_TRUE(samsung.getPower()); - samsung.setPower(false); - EXPECT_FALSE(samsung.getPower()); + IRSamsungAc ac(kGpioUnused); + ac.on(); + EXPECT_TRUE(ac.getPower()); + ac.off(); + EXPECT_FALSE(ac.getPower()); + ac.setPower(true); + EXPECT_TRUE(ac.getPower()); + ac.setPower(false); + EXPECT_FALSE(ac.getPower()); } TEST(TestIRSamsungAcClass, SetAndGetSwing) { - IRSamsungAc samsung(0); - samsung.setSwing(true); - EXPECT_TRUE(samsung.getSwing()); - samsung.setSwing(false); - EXPECT_FALSE(samsung.getSwing()); - samsung.setSwing(true); - EXPECT_TRUE(samsung.getSwing()); + IRSamsungAc ac(kGpioUnused); + ac.setSwing(true); + EXPECT_TRUE(ac.getSwing()); + ac.setSwing(false); + EXPECT_FALSE(ac.getSwing()); + ac.setSwing(true); + EXPECT_TRUE(ac.getSwing()); // Real examples from: // https://github.com/crankyoldgit/IRremoteESP8266/issues/505#issuecomment-424036602 @@ -439,35 +439,35 @@ TEST(TestIRSamsungAcClass, SetAndGetSwing) { const uint8_t expected_off[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0}; - samsung.setRaw(expected_off); - EXPECT_FALSE(samsung.getSwing()); + ac.setRaw(expected_off); + EXPECT_FALSE(ac.getSwing()); const uint8_t expected_on[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x02, 0xAF, 0x71, 0x80, 0x11, 0xF0}; - samsung.setRaw(expected_on); - EXPECT_TRUE(samsung.getSwing()); + ac.setRaw(expected_on); + EXPECT_TRUE(ac.getSwing()); } TEST(TestIRSamsungAcClass, SetAndGetClean) { - IRSamsungAc samsung(0); - samsung.setClean(true); - EXPECT_TRUE(samsung.getClean()); - samsung.setClean(false); - EXPECT_FALSE(samsung.getClean()); - samsung.setClean(true); - EXPECT_TRUE(samsung.getClean()); + IRSamsungAc ac(kGpioUnused); + ac.setClean(true); + EXPECT_TRUE(ac.getClean()); + ac.setClean(false); + EXPECT_FALSE(ac.getClean()); + ac.setClean(true); + EXPECT_TRUE(ac.getClean()); } TEST(TestIRSamsungAcClass, SetAndGetBeep) { - IRSamsungAc samsung(0); - samsung.setBeep(false); - EXPECT_FALSE(samsung.getBeep()); - samsung.setBeep(true); - EXPECT_TRUE(samsung.getBeep()); - samsung.setBeep(false); - EXPECT_FALSE(samsung.getBeep()); - samsung.setBeep(true); - EXPECT_TRUE(samsung.getBeep()); + IRSamsungAc ac(kGpioUnused); + ac.setBeep(false); + EXPECT_FALSE(ac.getBeep()); + ac.setBeep(true); + EXPECT_TRUE(ac.getBeep()); + ac.setBeep(false); + EXPECT_FALSE(ac.getBeep()); + ac.setBeep(true); + EXPECT_TRUE(ac.getBeep()); } TEST(TestIRSamsungAcClass, SetAndGetDisplay) { @@ -491,51 +491,51 @@ TEST(TestIRSamsungAcClass, SetAndGetIon) { } TEST(TestIRSamsungAcClass, SetAndGetTemp) { - IRSamsungAc samsung(0); - samsung.setTemp(25); - EXPECT_EQ(25, samsung.getTemp()); - samsung.setTemp(kSamsungAcMinTemp); - EXPECT_EQ(kSamsungAcMinTemp, samsung.getTemp()); - samsung.setTemp(kSamsungAcMinTemp - 1); - EXPECT_EQ(kSamsungAcMinTemp, samsung.getTemp()); - samsung.setTemp(kSamsungAcMaxTemp); - EXPECT_EQ(kSamsungAcMaxTemp, samsung.getTemp()); - samsung.setTemp(kSamsungAcMaxTemp + 1); - EXPECT_EQ(kSamsungAcMaxTemp, samsung.getTemp()); + IRSamsungAc ac(kGpioUnused); + ac.setTemp(25); + EXPECT_EQ(25, ac.getTemp()); + ac.setTemp(kSamsungAcMinTemp); + EXPECT_EQ(kSamsungAcMinTemp, ac.getTemp()); + ac.setTemp(kSamsungAcMinTemp - 1); + EXPECT_EQ(kSamsungAcMinTemp, ac.getTemp()); + ac.setTemp(kSamsungAcMaxTemp); + EXPECT_EQ(kSamsungAcMaxTemp, ac.getTemp()); + ac.setTemp(kSamsungAcMaxTemp + 1); + EXPECT_EQ(kSamsungAcMaxTemp, ac.getTemp()); } TEST(TestIRSamsungAcClass, SetAndGetMode) { - IRSamsungAc samsung(0); - samsung.setMode(kSamsungAcCool); - EXPECT_EQ(kSamsungAcCool, samsung.getMode()); - EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan()); - samsung.setMode(kSamsungAcHeat); - EXPECT_EQ(kSamsungAcHeat, samsung.getMode()); - EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan()); - samsung.setMode(kSamsungAcAuto); - EXPECT_EQ(kSamsungAcAuto, samsung.getMode()); - EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan()); - samsung.setMode(kSamsungAcDry); - EXPECT_EQ(kSamsungAcDry, samsung.getMode()); - EXPECT_NE(kSamsungAcFanAuto2, samsung.getFan()); + IRSamsungAc ac(kGpioUnused); + ac.setMode(kSamsungAcCool); + EXPECT_EQ(kSamsungAcCool, ac.getMode()); + EXPECT_NE(kSamsungAcFanAuto2, ac.getFan()); + ac.setMode(kSamsungAcHeat); + EXPECT_EQ(kSamsungAcHeat, ac.getMode()); + EXPECT_NE(kSamsungAcFanAuto2, ac.getFan()); + ac.setMode(kSamsungAcAuto); + EXPECT_EQ(kSamsungAcAuto, ac.getMode()); + EXPECT_EQ(kSamsungAcFanAuto2, ac.getFan()); + ac.setMode(kSamsungAcDry); + EXPECT_EQ(kSamsungAcDry, ac.getMode()); + EXPECT_NE(kSamsungAcFanAuto2, ac.getFan()); } TEST(TestIRSamsungAcClass, SetAndGetFan) { - IRSamsungAc samsung(0); - samsung.setMode(kSamsungAcCool); // Most fan modes avail in this setting. - samsung.setFan(kSamsungAcFanAuto); - EXPECT_EQ(kSamsungAcFanAuto, samsung.getFan()); - samsung.setFan(kSamsungAcFanLow); - EXPECT_EQ(kSamsungAcFanLow, samsung.getFan()); - samsung.setFan(kSamsungAcFanAuto2); // Not available in Cool mode. - EXPECT_EQ(kSamsungAcFanLow, samsung.getFan()); // Shouldn't change. - samsung.setMode(kSamsungAcAuto); // Has special fan setting. - EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan()); - samsung.setFan(kSamsungAcFanLow); // Shouldn't be available in Auto mode. - EXPECT_EQ(kSamsungAcFanAuto2, samsung.getFan()); - samsung.setMode(kSamsungAcHeat); // Most fan modes avail in this setting. - samsung.setFan(kSamsungAcFanHigh); - EXPECT_EQ(kSamsungAcFanHigh, samsung.getFan()); + IRSamsungAc ac(kGpioUnused); + ac.setMode(kSamsungAcCool); // Most fan modes avail in this setting. + ac.setFan(kSamsungAcFanAuto); + EXPECT_EQ(kSamsungAcFanAuto, ac.getFan()); + ac.setFan(kSamsungAcFanLow); + EXPECT_EQ(kSamsungAcFanLow, ac.getFan()); + ac.setFan(kSamsungAcFanAuto2); // Not available in Cool mode. + EXPECT_EQ(kSamsungAcFanLow, ac.getFan()); // Shouldn't change. + ac.setMode(kSamsungAcAuto); // Has special fan setting. + EXPECT_EQ(kSamsungAcFanAuto2, ac.getFan()); + ac.setFan(kSamsungAcFanLow); // Shouldn't be available in Auto mode. + EXPECT_EQ(kSamsungAcFanAuto2, ac.getFan()); + ac.setMode(kSamsungAcHeat); // Most fan modes avail in this setting. + ac.setFan(kSamsungAcFanHigh); + EXPECT_EQ(kSamsungAcFanHigh, ac.getFan()); } TEST(TestIRSamsungAcClass, SetAndGetQuiet) { @@ -634,7 +634,7 @@ TEST(TestIRSamsungAcClass, QuietAndPowerfulAreMutuallyExclusive) { } TEST(TestIRSamsungAcClass, ChecksumCalculation) { - IRSamsungAc samsung(0); + IRSamsungAc ac(kGpioUnused); const uint8_t originalstate[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, @@ -642,116 +642,108 @@ TEST(TestIRSamsungAcClass, ChecksumCalculation) { uint8_t examplestate[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0}; - const uint8_t extendedstate[kSamsungAcExtendedStateLength] = { 0x02, 0xA9, 0x0F, 0x00, 0x00, 0x00, 0xC0, 0x01, 0xC9, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF9, 0xCE, 0x71, 0xE0, 0x41, 0xC0}; - EXPECT_TRUE(IRSamsungAc::validChecksum(examplestate)); - EXPECT_EQ(0, IRSamsungAc::calcChecksum(examplestate)); examplestate[8] = 0x12; // Set an incorrect checksum. EXPECT_FALSE(IRSamsungAc::validChecksum(examplestate)); - EXPECT_EQ(0, IRSamsungAc::calcChecksum(examplestate)); - samsung.setRaw(examplestate); + ac.setRaw(examplestate); // Extracting the state from the object should have a correct checksum. - EXPECT_TRUE(IRSamsungAc::validChecksum(samsung.getRaw())); - EXPECT_STATE_EQ(originalstate, samsung.getRaw(), kSamsungAcBits); + EXPECT_TRUE(IRSamsungAc::validChecksum(ac.getRaw())); + EXPECT_STATE_EQ(originalstate, ac.getRaw(), kSamsungAcBits); examplestate[8] = 0x02; // Restore old checksum value. // Change the state to force a different checksum. examplestate[11] = 0x01; EXPECT_FALSE(IRSamsungAc::validChecksum(examplestate)); - EXPECT_EQ(0xF, IRSamsungAc::calcChecksum(examplestate)); // Check an extended state is valid. EXPECT_TRUE(IRSamsungAc::validChecksum(extendedstate, 21)); } TEST(TestIRSamsungAcClass, HumanReadable) { - IRSamsungAc samsung(0); + IRSamsungAc ac(kGpioUnused); EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 16C, Fan: 2 (Low), Swing: On, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); - samsung.setTemp(kSamsungAcMaxTemp); - samsung.setMode(kSamsungAcHeat); - samsung.off(); - samsung.setFan(kSamsungAcFanHigh); - samsung.setSwing(false); - samsung.setBeep(true); - samsung.setClean(true); + ac.toString()); + ac.setTemp(kSamsungAcMaxTemp); + ac.setMode(kSamsungAcHeat); + ac.off(); + ac.setFan(kSamsungAcFanHigh); + ac.setSwing(false); + ac.setBeep(true); + ac.setClean(true); EXPECT_EQ( "Power: Off, Mode: 4 (Heat), Temp: 30C, Fan: 5 (High), Swing: Off, " "Beep: On, Clean: On, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); - samsung.setQuiet(true); + ac.toString()); + ac.setQuiet(true); EXPECT_EQ( "Power: Off, Mode: 4 (Heat), Temp: 30C, Fan: 0 (Auto), Swing: Off, " "Beep: On, Clean: On, Quiet: On, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); - samsung.setQuiet(false); - samsung.setPowerful(true); + ac.toString()); + ac.setQuiet(false); + ac.setPowerful(true); EXPECT_EQ( "Power: Off, Mode: 4 (Heat), Temp: 30C, Fan: 7 (Turbo), Swing: Off, " "Beep: On, Clean: On, Quiet: Off, Powerful: On, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); - samsung.setIon(true); - samsung.setDisplay(false); + ac.toString()); + ac.setIon(true); + ac.setDisplay(false); EXPECT_EQ( "Power: Off, Mode: 4 (Heat), Temp: 30C, Fan: 7 (Turbo), Swing: Off, " "Beep: On, Clean: On, Quiet: Off, Powerful: On, Breeze: Off, " "Light: Off, Ion: On", - samsung.toString()); + ac.toString()); } TEST(TestIRSamsungAcClass, GeneralConstruction) { - IRSamsungAc samsung(0); + IRSamsungAc ac(kGpioUnused); uint8_t OnCoolFAutoBOffCOffQOffT20Soff[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0xE2, 0xFE, 0x71, 0x40, 0x11, 0xF0}; - samsung.setPower(true); - samsung.setMode(kSamsungAcCool); - samsung.setFan(kSamsungAcFanAuto); - samsung.setSwing(false); - samsung.setBeep(false); - samsung.setClean(false); - samsung.setQuiet(false); - samsung.setTemp(20); - EXPECT_STATE_EQ(OnCoolFAutoBOffCOffQOffT20Soff, samsung.getRaw(), + ac.setPower(true); + ac.setMode(kSamsungAcCool); + ac.setFan(kSamsungAcFanAuto); + ac.setSwing(false); + ac.setBeep(false); + ac.setClean(false); + ac.setQuiet(false); + ac.setTemp(20); + EXPECT_STATE_EQ(OnCoolFAutoBOffCOffQOffT20Soff, ac.getRaw(), kSamsungAcBits); - /* Disabled until we understand why LSB bit of the swing byte changes. - // TODO(Hollako): Explain why sometimes the LSB of state[9] is a 1. - // e.g. 0xAE or 0XAF for swing move. + uint8_t OnHeatFAutoBOffCOffQOffT17Son[kSamsungAcStateLength] = { 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x01, 0x02, 0xAF, 0x71, 0x10, 0x41, 0xF0}; - samsung.setPower(true); - samsung.setMode(kSamsungAcHeat); - samsung.setFan(kSamsungAcFanAuto); - samsung.setSwing(true); - samsung.setBeep(false); - samsung.setClean(false); - samsung.setQuiet(false); - samsung.setTemp(17); - EXPECT_STATE_EQ(OnHeatFAutoBOffCOffQOffT17Son, samsung.getRaw(), + ac.setPower(true); + ac.setMode(kSamsungAcHeat); + ac.setFan(kSamsungAcFanAuto); + ac.setSwing(true); + ac.setBeep(false); + ac.setClean(false); + ac.setQuiet(false); + ac.setTemp(17); + EXPECT_STATE_EQ(OnHeatFAutoBOffCOffQOffT17Son, ac.getRaw(), kSamsungAcBits); - */ } // Tests for decodeSamsungAC(). // Decode normal SamsungAC messages. TEST(TestDecodeSamsungAC, SyntheticDecode) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); uint8_t expectedState[kSamsungAcStateLength] = { @@ -807,13 +799,13 @@ TEST(TestDecodeSamsungAC, DecodeRealExample) { EXPECT_EQ(kSamsungAcBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state); EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 16C, Fan: 2 (Low), Swing: On, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } // Decode a real Samsung A/C example from Issue #505 @@ -857,20 +849,20 @@ TEST(TestDecodeSamsungAC, DecodeRealExample2) { EXPECT_EQ(kSamsungAcBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state); EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 0 (Auto), Swing: Off, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } // Decode a real Samsung A/C example from: // https://github.com/crankyoldgit/IRremoteESP8266/issues/505#issuecomment-424036602 TEST(TestDecodeSamsungAC, DecodePowerOnSample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -917,20 +909,20 @@ TEST(TestDecodeSamsungAC, DecodePowerOnSample) { EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength); EXPECT_EQ( "Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 0 (Auto), Swing: Off, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } // Decode a real Samsung A/C example from: // https://github.com/crankyoldgit/IRremoteESP8266/issues/505#issuecomment-424036602 TEST(TestDecodeSamsungAC, DecodePowerOffSample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -978,18 +970,18 @@ TEST(TestDecodeSamsungAC, DecodePowerOffSample) { EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength); EXPECT_EQ( "Power: Off, Mode: 1 (Cool), Temp: 24C, Fan: 0 (Auto), Swing: Off, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } TEST(TestDecodeSamsungAC, DecodeHeatSample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1026,18 +1018,18 @@ TEST(TestDecodeSamsungAC, DecodeHeatSample) { EXPECT_EQ(kSamsungAcBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state); EXPECT_EQ( "Power: On, Mode: 4 (Heat), Temp: 17C, Fan: 0 (Auto), Swing: On, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } TEST(TestDecodeSamsungAC, DecodeCoolSample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1083,8 +1075,8 @@ TEST(TestDecodeSamsungAC, DecodeCoolSample) { } TEST(TestDecodeSamsungAC, Issue604DecodeExtended) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1132,17 +1124,17 @@ TEST(TestDecodeSamsungAC, Issue604DecodeExtended) { EXPECT_EQ(kSamsungAcExtendedBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRSamsungAc samsung(0); - samsung.setRaw(irsend.capture.state, irsend.capture.bits / 8); + IRSamsungAc ac(kGpioUnused); + ac.setRaw(irsend.capture.state, irsend.capture.bits / 8); EXPECT_EQ( "Power: Off, Mode: 4 (Heat), Temp: 30C, Fan: 0 (Auto), Swing: Off, " "Beep: Off, Clean: Off, Quiet: Off, Powerful: Off, Breeze: Off, " "Light: On, Ion: Off", - samsung.toString()); + ac.toString()); } TEST(TestSendSamsung36, SendDataOnly) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1183,7 +1175,7 @@ TEST(TestSamsung36, Housekeeping) { // Test sending with different repeats. TEST(TestSendSamsung36, SendWithRepeats) { - IRsendTest irsend(0); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1238,8 +1230,8 @@ TEST(TestSendSamsung36, SendWithRepeats) { } TEST(TestDecodeSamsung36, RealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1262,8 +1254,8 @@ TEST(TestDecodeSamsung36, RealExample) { } TEST(TestDecodeSamsung36, SyntheticExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1278,6 +1270,8 @@ TEST(TestDecodeSamsung36, SyntheticExample) { } // https://github.com/crankyoldgit/IRremoteESP8266/issues/604 +// This has been superceeded in a way by the ability to calculate extended msg +// checksums correctly. See #1484, #1538, & #1554 TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { IRSamsungAc ac(0); ac.begin(); @@ -1285,7 +1279,7 @@ TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { std::string freqduty = "f38000d50"; - std::string poweron = + std::string settings_section1 = "m690s17844" "m3086s8864" "m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436" @@ -1295,36 +1289,8 @@ TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" "m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432" - "m586s2886" - "m3086s8864" - "m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432" - "m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s2886" - "m3086s8864" - "m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432" - "m586s436m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432" - "m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s1432" - "m586s1432m586s436m586s436m586s436m586s1432m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432" - "m586s100000"; - std::string settings = - "m690s17844" - "m3086s8864" - "m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s1432m586s436m586s436m586s1432m586s436m586s436m586s1432" - "m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" - "m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432" - "m586s2886" + "m586s2886"; + std::string settings_section2 = "m3086s8864" "m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436" "m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432" @@ -1334,6 +1300,16 @@ TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { "m586s1432m586s436m586s436m586s1432m586s1432m586s436m586s436m586s436" "m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432" "m586s100000"; + std::string extended_section = + "m3086s8864" + "m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436" + "m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432" + "m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436" + "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" + "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" + "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" + "m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436" + "m586s2886"; std::string text = "Power: On, Mode: 1 (Cool), Temp: 23C, Fan: 4 (Med), " "Swing: On, Beep: Off, Clean: Off, Quiet: Off, " "Powerful: Off, Breeze: Off, Light: On, Ion: Off"; @@ -1344,33 +1320,38 @@ TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { ac.setFan(kSamsungAcFanMed); ac.send(); EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + settings_section2, + ac._irsend.outputStr()); // Ensure the power state is changed by changing it and sending it. ac.off(); ac.send(); ac._irsend.reset(); // Clear the capture buffer. // Now trigger a special power message by using a power method. ac.on(); - ac.send(); // This should result in two messages. 1 x extended + 1 x normal. + ac.send(); // This should result in an extended message. EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + poweron + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + extended_section + settings_section2, + ac._irsend.outputStr()); ac._irsend.reset(); // Clear the capture buffer. // Subsequent sending should be just the "settings" message. ac.send(); EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + settings_section2, + ac._irsend.outputStr()); ac._irsend.reset(); // Clear the capture buffer. ac.setPower(true); // Note: The power state hasn't changed from previous. ac.send(); // This should result in a normal setting message. EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + settings_section2, + ac._irsend.outputStr()); ac._irsend.reset(); // Clear the capture buffer. ac.setPower(false); ac.setPower(true); // Note: The power state hasn't changed from the last sent ac.send(); // This should result in a normal setting message. EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + settings_section2, + ac._irsend.outputStr()); ac.stateReset(); // Normal `stateReset` defaults to send the power message // on first send. @@ -1380,11 +1361,13 @@ TEST(TestIRSamsungAcClass, Issue604SendPowerHack) { ac.setFan(kSamsungAcFanMed); ac.send(); EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + poweron + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + extended_section + settings_section2, + ac._irsend.outputStr()); ac._irsend.reset(); // Clear the capture buffer. ac.send(); // Subsequent send() should just be a settings message. EXPECT_EQ(text, ac.toString()); - EXPECT_EQ(freqduty + settings, ac._irsend.outputStr()); + EXPECT_EQ(freqduty + settings_section1 + settings_section2, + ac._irsend.outputStr()); } TEST(TestIRSamsungAcClass, toCommon) { @@ -1422,8 +1405,8 @@ TEST(TestIRSamsungAcClass, toCommon) { } TEST(TestDecodeSamsungAC, Issue734QuietSetting) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1494,8 +1477,8 @@ TEST(TestDecodeSamsungAC, Issue734QuietSetting) { } TEST(TestDecodeSamsungAC, Issue734PowerfulOff) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -1638,3 +1621,53 @@ TEST(TestDecodeSamsungAC, Issue1227VeryPoorSignal) { stdAc::state_t r, p; ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); } + +TEST(TestIRSamsungAcClass, SectionChecksums) { + // Normal (14 bytes) + const uint8_t on[14] = { + 0x02, 0x82, 0x0F, 0x00, 0x00, 0x20, 0xF0, + 0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0}; + EXPECT_EQ(0xF8, IRSamsungAc::calcSectionChecksum(on)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(on), + IRSamsungAc::calcSectionChecksum(on)); + EXPECT_EQ(0xEF, IRSamsungAc::calcSectionChecksum(on + 7)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(on + 7), + IRSamsungAc::calcSectionChecksum(on + 7)); + const uint8_t off[14] = { + 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, + 0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0}; + EXPECT_EQ(0xF9, IRSamsungAc::calcSectionChecksum(off)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(off), + IRSamsungAc::calcSectionChecksum(off)); + EXPECT_EQ(0xEF, IRSamsungAc::calcSectionChecksum(off + 7)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(off + 7), + IRSamsungAc::calcSectionChecksum(off + 7)); + + // Extended (21 bytes) + const uint8_t extended_on[kSamsungAcExtendedStateLength] = { + 0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0, + 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xE2, 0xFE, 0x71, 0x80, 0x11, 0xF0}; + EXPECT_EQ(0xF9, IRSamsungAc::calcSectionChecksum(extended_on)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_on), + IRSamsungAc::calcSectionChecksum(extended_on)); + EXPECT_EQ(0xFD, IRSamsungAc::calcSectionChecksum(extended_on + 7)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_on + 7), + IRSamsungAc::calcSectionChecksum(extended_on + 7)); + EXPECT_EQ(0xEE, IRSamsungAc::calcSectionChecksum(extended_on + 14)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_on + 14), + IRSamsungAc::calcSectionChecksum(extended_on + 14)); + const uint8_t extended_off[kSamsungAcExtendedStateLength] = { + 0x02, 0xB2, 0x0F, 0x00, 0x00, 0x00, 0xC0, + 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0xFF, 0x71, 0x80, 0x11, 0xC0}; + EXPECT_EQ(0xFB, IRSamsungAc::calcSectionChecksum(extended_off)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_off), + IRSamsungAc::calcSectionChecksum(extended_off)); + EXPECT_EQ(0xFD, IRSamsungAc::calcSectionChecksum(extended_off + 7)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_off + 7), + IRSamsungAc::calcSectionChecksum(extended_off + 7)); + EXPECT_EQ(0xF0, IRSamsungAc::calcSectionChecksum(extended_off + 14)); + EXPECT_EQ(IRSamsungAc::getSectionChecksum(extended_off + 14), + IRSamsungAc::calcSectionChecksum(extended_off + 14)); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Sanyo_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sanyo_test.cpp similarity index 60% rename from lib/lib_basic/IRremoteESP8266/test/ir_Sanyo_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sanyo_test.cpp index c494e87d8..6378e7679 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Sanyo_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sanyo_test.cpp @@ -1,4 +1,4 @@ -// Copyright 2017-2020 David Conran +// Copyright 2017-2021 David Conran #include "ir_Sanyo.h" #include "IRac.h" @@ -11,7 +11,7 @@ // Tests for encodeSanyoLC7461(). TEST(TestEncodeSanyoLC7461, NormalEncoding) { - IRsendTest irsend(4); + IRsendTest irsend(kGpioUnused); EXPECT_EQ(0x1FFF00FF, irsend.encodeSanyoLC7461(0, 0)); EXPECT_EQ(0x3FFE01FE, irsend.encodeSanyoLC7461(1, 1)); EXPECT_EQ(0x3FFE02FD, irsend.encodeSanyoLC7461(1, 2)); @@ -25,7 +25,7 @@ TEST(TestEncodeSanyoLC7461, NormalEncoding) { // Test sending typical data only. TEST(TestEncodeSanyoLC7461, SendDataOnly) { - IRsendTest irsend(4); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -44,7 +44,7 @@ TEST(TestEncodeSanyoLC7461, SendDataOnly) { // Test sending with different repeats. TEST(TestEncodeSanyoLC7461, SendWithRepeats) { - IRsendTest irsend(4); + IRsendTest irsend(kGpioUnused); irsend.begin(); irsend.reset(); @@ -66,8 +66,8 @@ TEST(TestEncodeSanyoLC7461, SendWithRepeats) { // Decode normal Sanyo LC7461 messages. TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); // Normal Sanyo LC7461 42-bit message. @@ -115,8 +115,8 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithStrict) { // Decode normal repeated Sanyo LC7461 messages. TEST(TestDecodeSanyoLC7461, NormalDecodeWithRepeatAndStrict) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); // Normal Sanyo LC7461 16-bit message with 1 repeat. @@ -136,8 +136,8 @@ TEST(TestDecodeSanyoLC7461, NormalDecodeWithRepeatAndStrict) { // Decode unsupported Sanyo LC7461 messages. TEST(TestDecodeSanyoLC7461, DecodeWithNonStrictValues) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -191,8 +191,8 @@ TEST(TestDecodeSanyoLC7461, DecodeWithNonStrictValues) { // Decode (non-standard) 64-bit messages. TEST(TestDecodeSanyoLC7461, Decode64BitMessages) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -211,8 +211,8 @@ TEST(TestDecodeSanyoLC7461, Decode64BitMessages) { // Decode a 'real' example via GlobalCache TEST(TestDecodeSanyoLC7461, DecodeGlobalCacheExample) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -243,8 +243,8 @@ TEST(TestDecodeSanyoLC7461, DecodeGlobalCacheExample) { // Fail to decode a non-Sanyo LC7461 example via GlobalCache TEST(TestDecodeSanyoLC7461, FailToDecodeNonSanyoLC7461Example) { - IRsendTest irsend(4); - IRrecv irrecv(4); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -277,6 +277,13 @@ TEST(TestUtils, Housekeeping) { ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::SANYO_AC)); ASSERT_EQ(kSanyoAcBits, IRsend::defaultBits(decode_type_t::SANYO_AC)); ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::SANYO_AC)); + // Sanyo A/C 88 Bit. + ASSERT_EQ("SANYO_AC88", typeToString(decode_type_t::SANYO_AC88)); + ASSERT_EQ(decode_type_t::SANYO_AC88, strToDecodeType("SANYO_AC88")); + ASSERT_TRUE(hasACState(decode_type_t::SANYO_AC88)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::SANYO_AC88)); + ASSERT_EQ(kSanyoAc88Bits, IRsend::defaultBits(decode_type_t::SANYO_AC88)); + ASSERT_EQ(kSanyoAc88MinRepeat, IRsend::minRepeats(decode_type_t::SANYO_AC88)); } TEST(TestDecodeSanyoAc, DecodeRealExamples) { @@ -530,3 +537,286 @@ TEST(TestSanyoAcClass, Beep) { ac.setRaw(beep_on); EXPECT_TRUE(ac.getBeep()); } + +TEST(TestDecodeSanyoAc88, DecodeRealExamples) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + // Ref: "On" from https://github.com/crankyoldgit/IRremoteESP8266/issues/1503#issuecomment-868450739 + const uint16_t rawData[539] = {5374, 1972, 512, 762, 522, 1510, 498, 780, 578, + 1486, 462, 790, 462, 1550, 544, 708, 510, 1500, 544, 1470, 516, 762, 482, + 770, 516, 1496, 518, 1510, 498, 780, 468, 1544, 466, 786, 466, 786, 466, + 786, 466, 786, 486, 748, 526, 756, 506, 1520, 516, 764, 516, 1492, 518, + 762, 544, 708, 548, 704, 602, 1434, 556, 1456, 524, 726, 552, 700, 554, + 698, 648, 1438, 548, 684, 536, 1478, 568, 682, 568, 682, 578, 702, 568, + 684, 570, 712, 624, 724, 528, 1482, 528, 726, 528, 1482, 526, 724, 546, + 1524, 568, 682, 540, 710, 544, 734, 542, 1516, 492, 762, 488, 744, 546, + 1482, 492, 788, 544, 734, 494, 758, 492, 760, 490, 744, 548, 828, 494, + 760, 494, 758, 494, 758, 494, 786, 492, 760, 494, 758, 494, 742, 508, 746, + 508, 788, 492, 760, 494, 786, 494, 786, 494, 742, 508, 744, 508, 788, 570, + 760, 494, 784, 494, 788, 568, 786, 492, 744, 508, 772, 608, 768, 538, 714, + 490, 786, 628, 728, 494, 786, 494, 758, 494, 742, 508, 1390, 494, 3692, + 5394, 1960, 494, 784, 494, 1516, 494, 760, 494, 1516, 494, 760, 492, 1516, + 494, 760, 492, 1518, 524, 1486, 494, 790, 486, 764, 492, 1524, 538, 1472, + 540, 740, 538, 1546, 546, 728, 524, 726, 526, 728, 524, 728, 526, 728, + 524, 728, 524, 1486, 526, 726, 546, 1464, 550, 702, 550, 728, 552, 702, + 550, 1460, 550, 1460, 550, 702, 552, 728, 550, 702, 550, 1460, 550, 728, + 550, 1464, 548, 704, 546, 704, 548, 732, 546, 704, 548, 704, 548, 730, + 548, 1462, 548, 706, 518, 1492, 546, 706, 518, 1490, 546, 706, 520, 732, + 520, 732, 522, 1492, 518, 760, 518, 732, 546, 1468, 516, 736, 516, 732, + 520, 732, 520, 758, 520, 818, 478, 772, 480, 802, 454, 894, 520, 734, 518, + 734, 518, 760, 518, 734, 518, 734, 518, 718, 506, 746, 480, 818, 488, 790, + 490, 744, 508, 790, 490, 744, 510, 770, 508, 788, 490, 762, 544, 788, 490, + 788, 462, 818, 566, 788, 490, 744, 480, 770, 456, 794, 458, 894, 492, 762, + 492, 760, 490, 744, 508, 1390, 492, 3664, + 5398, 1960, 490, 746, 476, 1552, 492, 742, 508, 1504, 508, 746, 504, 1522, + 494, 786, 492, 1516, 494, 1516, 494, 760, 492, 786, 494, 1520, 490, 1520, + 458, 822, 458, 1554, 510, 788, 494, 784, 494, 760, 492, 742, 508, 770, + 512, 786, 492, 1516, 520, 760, 520, 1488, 520, 734, 520, 760, 518, 734, + 520, 1490, 520, 1494, 516, 734, 518, 732, 520, 762, 516, 762, 488, 1522, + 458, 1554, 506, 774, 506, 744, 508, 774, 508, 770, 510, 742, 506, 746, + 540, 1472, 506, 744, 508, 1522, 488, 764, 488, 1504, 538, 758, 520, 734, + 520, 760, 520, 1490, 518, 734, 520, 734, 520, 1490, 520, 760, 518, 760, + 538, 770, 488, 764, 516, 734, 518, 734, 518, 818, 476, 802, 476, 774, 478, + 904, 538, 734, 520, 762, 516, 818, 510, 748, 476, 772, 458, 794, 458, 792, + 516, 736, 516, 736, 516, 736, 516, 738, 514, 762, 516, 764, 514, 738, 516, + 738, 538, 766, 516, 738, 514, 738, 514, 766, 512, 794, 486, 768, 486, 794, + 486, 766, 512, 738, 488, 1398, 504}; // UNKNOWN ABF4C698 + + const uint8_t expectedState[kSanyoAc88StateLength] = { + 0xAA, 0x59, 0xA0, 0x18, 0x06, 0x2A, 0x12, 0x00, 0x00, 0x00, 0x80}; + irsend.begin(); + irsend.reset(); + irsend.sendRaw(rawData, 539, 38000); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + ASSERT_EQ(SANYO_AC88, irsend.capture.decode_type); + EXPECT_EQ(kSanyoAc88Bits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_FALSE(irsend.capture.repeat); + EXPECT_EQ( + "Power: On, Mode: 2 (Cool), Temp: 24C, Fan: 0 (Auto), Swing(V): Off, " + "Turbo: Off, Sleep: Off, Clock: 18:42", + IRAcUtils::resultAcToString(&irsend.capture)); +} + +TEST(TestDecodeSanyoAc88, SyntheticSelfDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + const uint8_t expectedState[kSanyoAc88StateLength] = { + 0xAA, 0x59, 0xA0, 0x18, 0x06, 0x2A, 0x12, 0x00, 0x00, 0x00, 0x80}; + irsend.begin(); + irsend.reset(); + irsend.sendSanyoAc88(expectedState); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(SANYO_AC88, irsend.capture.decode_type); + EXPECT_EQ(kSanyoAc88Bits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_FALSE(irsend.capture.repeat); + EXPECT_EQ( + "Power: On, Mode: 2 (Cool), Temp: 24C, Fan: 0 (Auto), Swing(V): Off, " + "Turbo: Off, Sleep: Off, Clock: 18:42", + IRAcUtils::resultAcToString(&irsend.capture)); + EXPECT_EQ( + "f38000d50" + "m5400s2000" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s1500" + "m500s1500m500s750m500s750m500s1500m500s1500m500s750m500s1500m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s1500m500s750m500s1500" + "m500s750m500s750m500s750m500s1500m500s1500m500s750m500s750m500s750" + "m500s750m500s1500m500s1500m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s750" + "m500s750m500s1500m500s750m500s750m500s1500m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s1500" + "m500s3675" + "m5400s2000" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s1500" + "m500s1500m500s750m500s750m500s1500m500s1500m500s750m500s1500m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s1500m500s750m500s1500" + "m500s750m500s750m500s750m500s1500m500s1500m500s750m500s750m500s750" + "m500s750m500s1500m500s1500m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s750" + "m500s750m500s1500m500s750m500s750m500s1500m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s1500" + "m500s3675" + "m5400s2000" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s1500" + "m500s1500m500s750m500s750m500s1500m500s1500m500s750m500s1500m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s1500m500s750m500s1500" + "m500s750m500s750m500s750m500s1500m500s1500m500s750m500s750m500s750" + "m500s750m500s1500m500s1500m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s1500m500s750m500s1500m500s750m500s1500m500s750m500s750" + "m500s750m500s1500m500s750m500s750m500s1500m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s750" + "m500s750m500s750m500s750m500s750m500s750m500s750m500s750m500s1500" + "m500s103675", + irsend.outputStr()); +} + +// Tests for IRSanyoAc88 class. + +TEST(TestSanyoAc88Class, Power) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.on(); + EXPECT_TRUE(ac.getPower()); + + ac.off(); + EXPECT_FALSE(ac.getPower()); + + ac.setPower(true); + EXPECT_TRUE(ac.getPower()); + + ac.setPower(false); + EXPECT_FALSE(ac.getPower()); +} + +TEST(TestSanyoAc88Class, FanSpeed) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setFan(kSanyoAc88FanAuto); + EXPECT_EQ(kSanyoAc88FanAuto, ac.getFan()); + + ac.setFan(kSanyoAc88FanHigh); + EXPECT_EQ(kSanyoAc88FanHigh, ac.getFan()); + + ac.setFan(kSanyoAc88FanLow); + EXPECT_EQ(kSanyoAc88FanLow, ac.getFan()); + + ac.setFan(kSanyoAc88FanMedium); + EXPECT_EQ(kSanyoAc88FanMedium, ac.getFan()); +} + +TEST(TestSanyoAc88Class, Sleep) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setSleep(true); + EXPECT_TRUE(ac.getSleep()); + ac.setSleep(false); + EXPECT_FALSE(ac.getSleep()); + ac.setSleep(true); + EXPECT_TRUE(ac.getSleep()); +} + +TEST(TestSanyoAc88Class, SwingV) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setSwingV(true); + EXPECT_TRUE(ac.getSwingV()); + ac.setSwingV(false); + EXPECT_FALSE(ac.getSwingV()); + ac.setSwingV(true); + EXPECT_TRUE(ac.getSwingV()); +} + +TEST(TestSanyoAc88Class, Filter) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setFilter(true); + EXPECT_TRUE(ac.getFilter()); + ac.setFilter(false); + EXPECT_FALSE(ac.getFilter()); + ac.setFilter(true); + EXPECT_TRUE(ac.getFilter()); +} + +TEST(TestSanyoAc88Class, Turbo) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setTurbo(true); + EXPECT_TRUE(ac.getTurbo()); + ac.setTurbo(false); + EXPECT_FALSE(ac.getTurbo()); + ac.setTurbo(true); + EXPECT_TRUE(ac.getTurbo()); +} + +TEST(TestSanyoAc88Class, Temperature) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setTemp(0); + EXPECT_EQ(kSanyoAc88TempMin, ac.getTemp()); + + ac.setTemp(255); + EXPECT_EQ(kSanyoAc88TempMax, ac.getTemp()); + + ac.setTemp(kSanyoAc88TempMin); + EXPECT_EQ(kSanyoAc88TempMin, ac.getTemp()); + + ac.setTemp(kSanyoAc88TempMax); + EXPECT_EQ(kSanyoAc88TempMax, ac.getTemp()); + + ac.setTemp(kSanyoAc88TempMin - 1); + EXPECT_EQ(kSanyoAc88TempMin, ac.getTemp()); + + ac.setTemp(kSanyoAc88TempMax + 1); + EXPECT_EQ(kSanyoAc88TempMax, ac.getTemp()); + + ac.setTemp(17); + EXPECT_EQ(17, ac.getTemp()); + + ac.setTemp(21); + EXPECT_EQ(21, ac.getTemp()); + + ac.setTemp(25); + EXPECT_EQ(25, ac.getTemp()); +} + +TEST(TestSanyoAc88Class, OperatingMode) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + ac.setMode(kSanyoAc88Auto); + EXPECT_EQ(kSanyoAc88Auto, ac.getMode()); + + ac.setMode(kSanyoAc88Cool); + EXPECT_EQ(kSanyoAc88Cool, ac.getMode()); + + ac.setMode(kSanyoAc88Heat); + EXPECT_EQ(kSanyoAc88Heat, ac.getMode()); + + ac.setMode(kSanyoAc88Fan); + EXPECT_EQ(kSanyoAc88Fan, ac.getMode()); + + ac.setMode(kSanyoAc88Fan + 1); + EXPECT_EQ(kSanyoAc88Auto, ac.getMode()); + + ac.setMode(0); + EXPECT_EQ(kSanyoAc88Auto, ac.getMode()); + + ac.setMode(255); + EXPECT_EQ(kSanyoAc88Auto, ac.getMode()); +} + +TEST(TestSanyoAc88Class, Clock) { + IRSanyoAc88 ac(kGpioUnused); + ac.begin(); + + EXPECT_EQ(0, ac.getClock()); + + ac.setClock(21 * 60 + 19); + EXPECT_EQ(21 * 60 + 19, ac.getClock()); + + ac.setClock(0); + EXPECT_EQ(0, ac.getClock()); + + ac.setClock(25 * 60 + 61); + EXPECT_EQ(23 * 60 + 59, ac.getClock()); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Sharp_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sharp_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Sharp_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sharp_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Sherwood_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sherwood_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Sherwood_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sherwood_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Sony_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sony_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Sony_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Sony_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Symphony_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Symphony_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Symphony_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Symphony_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Tcl_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Tcl_test.cpp similarity index 66% rename from lib/lib_basic/IRremoteESP8266/test/ir_Tcl_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Tcl_test.cpp index 99a9e7de7..da3fefc8c 100644 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Tcl_test.cpp +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Tcl_test.cpp @@ -1,6 +1,7 @@ // Copyright 2019 David Conran #include "ir_Tcl.h" +#include "IRac.h" #include "IRrecv.h" #include "IRrecv_test.h" #include "IRsend.h" @@ -17,8 +18,8 @@ TEST(TestTcl112Ac, Housekeeping) { // Decode a real Tcl112Ac A/C example from Issue #619 TEST(TestDecodeTcl112Ac, DecodeRealExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -61,19 +62,17 @@ TEST(TestDecodeTcl112Ac, DecodeRealExample) { ASSERT_EQ(TCL112AC, irsend.capture.decode_type); EXPECT_EQ(kTcl112AcBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - - IRTcl112Ac ac(0); - ac.setRaw(irsend.capture.state); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", - ac.toString()); + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", + IRAcUtils::resultAcToString(&irsend.capture)); } // Decode a synthetic Tcl112Ac A/C example from Issue #619 TEST(TestDecodeTcl112Ac, DecodeSyntheticExample) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -104,26 +103,30 @@ TEST(TestTcl112AcClass, Temperature) { const uint8_t temp31C[kTcl112AcStateLength] = { 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xBC}; - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.setRaw(temp16C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); ac.setRaw(temp16point5C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 16.5C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 16.5C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); ac.setRaw(temp19point5C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 19.5C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 19.5C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); ac.setRaw(temp31C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 31C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 31C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); ac.setTemp(kTcl112AcTempMin); @@ -161,7 +164,7 @@ TEST(TestTcl112AcClass, Temperature) { } TEST(TestTcl112AcClass, OperatingMode) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setMode(kTcl112AcAuto); @@ -203,13 +206,14 @@ TEST(TestTcl112AcClass, OperatingMode) { 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x48}; ac.setRaw(automode); EXPECT_EQ( - "Power: On, Mode: 8 (Auto), Temp: 24C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 8 (Auto), Temp: 24C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); } TEST(TestTcl112AcClass, Power) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setPower(true); @@ -232,8 +236,9 @@ TEST(TestTcl112AcClass, Power) { 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xCB}; ac.setRaw(on); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); const uint8_t off[kTcl112AcStateLength] = { @@ -241,8 +246,9 @@ TEST(TestTcl112AcClass, Power) { 0x07, 0x40, 0x00, 0x00, 0x00, 0x80, 0xCB}; ac.setRaw(off); EXPECT_EQ( - "Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: Off, Mode: 3 (Cool), Temp: 24C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); } @@ -253,17 +259,19 @@ TEST(TestTcl112AcClass, Checksum) { uint8_t temp31C[kTcl112AcStateLength] = { 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xBC}; - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); EXPECT_EQ(0xCB, ac.calcChecksum(temp16C)); ac.setRaw(temp16C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 16C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); ac.setRaw(temp31C); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 31C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 31C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); EXPECT_EQ(0xBC, ac.calcChecksum(temp31C)); @@ -278,7 +286,7 @@ TEST(TestTcl112AcClass, Checksum) { } TEST(TestTcl112AcClass, Econo) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setEcono(true); @@ -290,7 +298,7 @@ TEST(TestTcl112AcClass, Econo) { } TEST(TestTcl112AcClass, Health) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setHealth(true); @@ -302,7 +310,7 @@ TEST(TestTcl112AcClass, Health) { } TEST(TestTcl112AcClass, Light) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setLight(true); @@ -314,7 +322,7 @@ TEST(TestTcl112AcClass, Light) { } TEST(TestTcl112AcClass, SwingHorizontal) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setSwingHorizontal(true); @@ -326,7 +334,7 @@ TEST(TestTcl112AcClass, SwingHorizontal) { } TEST(TestTcl112AcClass, SwingVertical) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setSwingVertical(true); @@ -338,7 +346,7 @@ TEST(TestTcl112AcClass, SwingVertical) { } TEST(TestTcl112AcClass, Turbo) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); ac.setFan(kTcl112AcFanLow); @@ -361,7 +369,7 @@ TEST(TestTcl112AcClass, Turbo) { } TEST(TestTcl112AcClass, FanSpeed) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.begin(); // Unexpected value should default to Auto. @@ -382,9 +390,21 @@ TEST(TestTcl112AcClass, FanSpeed) { EXPECT_EQ(kTcl112AcFanAuto, ac.getFan()); } +TEST(TestTcl112AcClass, Quiet_Mute) { + IRTcl112Ac ac(kGpioUnused); + ac.begin(); + + EXPECT_FALSE(ac.getQuiet()); + EXPECT_FALSE(ac.getQuiet(false)); + EXPECT_TRUE(ac.getQuiet(true)); + ac.setQuiet(true); + EXPECT_TRUE(ac.getQuiet()); + ac.setQuiet(false); + EXPECT_FALSE(ac.getQuiet()); +} TEST(TestTcl112AcClass, toCommon) { - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.setPower(true); ac.setMode(kTcl112AcCool); ac.setTemp(20); @@ -395,6 +415,7 @@ TEST(TestTcl112AcClass, toCommon) { ac.setHealth(true); ac.setEcono(true); ac.setLight(true); + ac.setQuiet(false); // Now test it. ASSERT_EQ(decode_type_t::TCL112AC, ac.toCommon().protocol); ASSERT_EQ(-1, ac.toCommon().model); @@ -409,17 +430,25 @@ TEST(TestTcl112AcClass, toCommon) { ASSERT_TRUE(ac.toCommon().econo); ASSERT_TRUE(ac.toCommon().light); ASSERT_TRUE(ac.toCommon().filter); + ASSERT_FALSE(ac.toCommon().quiet); // Unsupported. ASSERT_FALSE(ac.toCommon().clean); ASSERT_FALSE(ac.toCommon().beep); - ASSERT_FALSE(ac.toCommon().quiet); ASSERT_EQ(-1, ac.toCommon().sleep); ASSERT_EQ(-1, ac.toCommon().clock); + + // Tests for the quiet setting. + stdAc::state_t prev = ac.toCommon(); + prev.quiet = true; + ASSERT_FALSE(ac.toCommon(&prev).quiet); + ac.stateReset(); + // If the current quiet setting hasn't been explicitly set, use the previous. + ASSERT_TRUE(ac.toCommon(&prev).quiet); } TEST(TestDecodeTcl112Ac, Issue744) { - IRsendTest irsend(0); - IRrecv irrecv(0); + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); irsend.begin(); irsend.reset(); @@ -453,10 +482,93 @@ TEST(TestDecodeTcl112Ac, Issue744) { EXPECT_EQ(kTcl112AcBits, irsend.capture.bits); EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - IRTcl112Ac ac(0); + IRTcl112Ac ac(kGpioUnused); ac.setRaw(irsend.capture.state); EXPECT_EQ( - "Power: On, Mode: 3 (Cool), Temp: 23C, Fan: 0 (Auto), Econo: Off, " - "Health: Off, Light: On, Turbo: Off, Swing(H): Off, Swing(V): Off", + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 23C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: On", ac.toString()); } + +TEST(TestDecodeTcl112Ac, Issue1528) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + irsend.reset(); + const uint16_t rawData[227] = { + 3040, 1632, 500, 1084, 502, 1084, 500, 318, 474, 344, 474, 344, 472, 1110, + 474, 344, 474, 344, 472, 1110, 474, 1110, 474, 344, 472, 1112, 474, 344, + 472, 346, 470, 1112, 472, 1112, 472, 346, 470, 1114, 470, 1114, 470, 348, + 468, 348, 468, 1116, 470, 348, 468, 350, 464, 354, 424, 1158, 426, 392, + 424, 394, 424, 394, 424, 392, 424, 392, 424, 394, 424, 392, 424, 392, 424, + 394, 424, 392, 424, 392, 424, 394, 424, 392, 460, 358, 460, 358, 458, 358, + 458, 358, 460, 358, 460, 358, 460, 1124, 460, 1124, 460, 358, 460, 358, + 458, 358, 458, 360, 482, 334, 484, 334, 484, 334, 484, 334, 484, 334, 484, + 334, 484, 334, 486, 332, 484, 334, 484, 332, 484, 334, 484, 332, 484, 334, + 484, 332, 484, 332, 484, 332, 486, 332, 484, 332, 484, 334, 484, 334, 484, + 332, 484, 334, 484, 334, 484, 332, 484, 332, 486, 332, 484, 334, 484, 334, + 484, 334, 484, 334, 484, 334, 484, 334, 484, 334, 484, 334, 482, 334, 482, + 334, 482, 336, 482, 336, 482, 336, 482, 336, 482, 336, 482, 336, 482, 336, + 482, 336, 480, 336, 480, 338, 480, 338, 480, 338, 480, 336, 480, 338, 480, + 338, 480, 338, 480, 338, 478, 1104, 478, 340, 478, 1104, 480, 338, 478, + 340, 478, 340, 476, 340, 476, 1106, 478}; // UNKNOWN 2757C6B2 + + uint8_t expectedState[kTcl112AcStateLength] = { + 0x23, 0xCB, 0x26, 0x02, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85}; + + irsend.sendRaw(rawData, 227, 38000); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + ASSERT_EQ(TCL112AC, irsend.capture.decode_type); + EXPECT_EQ(kTcl112AcBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "Type: 2, Quiet: On", + IRAcUtils::resultAcToString(&irsend.capture)); +} + +// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1528#issuecomment-877640837 +TEST(TestTcl112AcClass, SendingQuiet) { + IRTcl112Ac ac(kGpioUnused); + IRrecv capture(kGpioUnused); + + + ac.begin(); + ac.on(); + ac.setTemp(24); + ac.setLight(false); + ac.setSwingHorizontal(true); + ac.send(); + ac.setSwingHorizontal(false); + EXPECT_FALSE(ac.getQuiet()); + ac.send(); + ac._irsend.reset(); + ac.setQuiet(true); + EXPECT_TRUE(ac.getQuiet()); + ac.send(); + EXPECT_TRUE(ac.getQuiet()); + ac._irsend.makeDecodeResult(); + // We are expecting two messages, confirm we got at least that much data. + EXPECT_EQ(1 + 228 + 228, ac._irsend.capture.rawlen); + // First message. + EXPECT_TRUE(capture.decode(&ac._irsend.capture)); + ASSERT_EQ(TCL112AC, ac._irsend.capture.decode_type); + ASSERT_EQ(kTcl112AcBits, ac._irsend.capture.bits); + ASSERT_EQ( + "Type: 2, Quiet: On", + IRAcUtils::resultAcToString(&ac._irsend.capture)); + // Second message. + // TCL112 uses the Mitsubishi112 decoder. + // Skip first message. + EXPECT_TRUE(capture.decodeMitsubishi112(&ac._irsend.capture, 229)); + ASSERT_EQ(TCL112AC, ac._irsend.capture.decode_type); + ASSERT_EQ(kTcl112AcBits, ac._irsend.capture.bits); + ASSERT_EQ( + "Type: 1, Power: On, Mode: 3 (Cool), Temp: 24C, Fan: 0 (Auto), " + "Econo: Off, Health: Off, Turbo: Off, Swing(H): Off, Swing(V): Off, " + "Light: Off", IRAcUtils::resultAcToString(&ac._irsend.capture)); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Technibel_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Technibel_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Technibel_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Technibel_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Teco_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Teco_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Teco_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Teco_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Teknopoint_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Teknopoint_test.cpp new file mode 100644 index 000000000..009b2a41b --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Teknopoint_test.cpp @@ -0,0 +1,101 @@ +// Copyright 2021 David Conran (crankyoldgit) + +#include "IRac.h" +#include "IRrecv.h" +#include "IRrecv_test.h" +#include "IRsend.h" +#include "IRsend_test.h" +#include "gtest/gtest.h" + +// Tests for decodeTeknopoint(). + +TEST(TestDecodeTeknopoint, RealExample) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + // "On" + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1486#issue-904276382 + const uint16_t rawData[227] = { + 3614, 1610, 474, 1210, 390, 1294, 454, 550, 394, 606, 474, 530, 474, 1186, + 394, 634, 390, 638, 450, 1210, 366, 1318, 450, 554, 394, 1270, 470, 554, + 450, 530, 390, 1318, 450, 1214, 470, 530, 474, 1210, 370, 1294, 474, 550, + 450, 554, 470, 1214, 450, 550, 394, 614, 466, 1218, 450, 550, 370, 634, + 474, 530, 474, 550, 450, 550, 450, 554, 366, 634, 502, 554, 446, 554, 450, + 550, 450, 554, 390, 614, 474, 526, 478, 526, 474, 550, 450, 534, 406, 614, + 390, 1294, 394, 610, 390, 614, 470, 1214, 366, 638, 470, 554, 450, 1214, + 366, 1318, 450, 550, 454, 550, 474, 530, 470, 530, 474, 550, 454, 550, + 450, 1238, 450, 1210, 470, 1214, 454, 1210, 474, 550, 450, 554, 394, 582, + 394, 634, 474, 526, 478, 550, 450, 526, 474, 1214, 474, 550, 454, 550, + 394, 606, 370, 634, 474, 526, 478, 550, 450, 550, 394, 610, 366, 638, 414, + 586, 478, 546, 454, 550, 422, 606, 390, 610, 474, 554, 450, 550, 454, 550, + 450, 530, 410, 614, 478, 526, 474, 550, 450, 550, 454, 550, 390, 614, 474, + 526, 474, 550, 454, 550, 450, 554, 366, 634, 474, 526, 478, 550, 450, 550, + 454, 550, 366, 638, 474, 526, 474, 550, 454, 1210, 414, 1270, 394, 610, + 390, 614, 470, 1214, 366, 638, 470, 1190, 474, 554, 390}; + const uint8_t expectedState[kTeknopointStateLength] = { + 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, + 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x53}; + irsend.begin(); + irsend.reset(); + irsend.sendRaw(rawData, 227, 38); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + ASSERT_EQ(decode_type_t::TEKNOPOINT, irsend.capture.decode_type); + ASSERT_EQ(kTeknopointBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "", + IRAcUtils::resultAcToString(&irsend.capture)); +} + +TEST(TestDecodeTeknopoint, SyntheticExample) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + irsend.reset(); + + // "On" + const uint8_t expectedState[kTeknopointStateLength] = { + 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, + 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x53}; + + irsend.sendTeknopoint(expectedState); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + ASSERT_EQ(decode_type_t::TEKNOPOINT, irsend.capture.decode_type); + ASSERT_EQ(kTeknopointBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "", + IRAcUtils::resultAcToString(&irsend.capture)); + + EXPECT_EQ( + "f38000d50" + "m3600s1600" + "m477s1200m477s1200m477s530m477s530m477s530m477s1200m477s530m477s530" + "m477s1200m477s1200m477s530m477s1200m477s530m477s530m477s1200m477s1200" + "m477s530m477s1200m477s1200m477s530m477s530m477s1200m477s530m477s530" + "m477s1200m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s1200m477s530m477s530m477s1200m477s530m477s530" + "m477s1200m477s1200m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s1200m477s1200m477s1200m477s1200m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s1200m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s530m477s530m477s530m477s530m477s530m477s530m477s530m477s530" + "m477s1200m477s1200m477s530m477s530m477s1200m477s530m477s1200m477s530" + "m477s100000", + irsend.outputStr()); +} + +TEST(TestUtils, Housekeeping) { + ASSERT_EQ("TEKNOPOINT", typeToString(decode_type_t::TEKNOPOINT)); + ASSERT_EQ(decode_type_t::TEKNOPOINT, strToDecodeType("TEKNOPOINT")); + ASSERT_TRUE(hasACState(decode_type_t::TEKNOPOINT)); + ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::TEKNOPOINT)); + ASSERT_EQ(kTeknopointBits, IRsend::defaultBits(decode_type_t::TEKNOPOINT)); + ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::TEKNOPOINT)); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Toshiba_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Toshiba_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Toshiba_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Toshiba_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Transcold_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Transcold_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Transcold_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Transcold_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Trotec_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Trotec_test.cpp new file mode 100644 index 000000000..b6658f3f5 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Trotec_test.cpp @@ -0,0 +1,451 @@ +// Copyright 2019 David Conran +#include "ir_Trotec.h" +#include "IRac.h" +#include "IRrecv.h" +#include "IRrecv_test.h" +#include "IRsend.h" +#include "IRsend_test.h" +#include "gtest/gtest.h" + + +TEST(TestTrotecESPClass, toCommon) { + IRTrotecESP ac(kGpioUnused); + ac.setPower(true); + ac.setMode(kTrotecCool); + ac.setTemp(20); + ac.setSpeed(kTrotecFanHigh); + ac.setSleep(true); + // Now test it. + ASSERT_EQ(decode_type_t::TROTEC, ac.toCommon().protocol); + ASSERT_TRUE(ac.toCommon().power); + ASSERT_TRUE(ac.toCommon().celsius); + ASSERT_EQ(20, ac.toCommon().degrees); + ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode); + ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed); + ASSERT_EQ(0, ac.toCommon().sleep); + // Unsupported. + ASSERT_EQ(-1, ac.toCommon().model); + ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv); + ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh); + ASSERT_FALSE(ac.toCommon().turbo); + ASSERT_FALSE(ac.toCommon().econo); + ASSERT_FALSE(ac.toCommon().light); + ASSERT_FALSE(ac.toCommon().filter); + ASSERT_FALSE(ac.toCommon().clean); + ASSERT_FALSE(ac.toCommon().beep); + ASSERT_FALSE(ac.toCommon().quiet); + ASSERT_EQ(-1, ac.toCommon().clock); +} + +TEST(TestTrotecESPClass, MessageConstructon) { + IRTrotecESP ac(kGpioUnused); + ac.setPower(true); + ac.setTemp(20); + ac.setMode(kTrotecCool); + ac.setSpeed(kTrotecFanMed); + ac.setSleep(true); + + uint8_t expected[kTrotecStateLength] = { + 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; + EXPECT_STATE_EQ(expected, ac.getRaw(), kTrotecBits); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 20C, Fan: 2 (Medium), Sleep: On", + ac.toString()); +} + +// Tests for sendTrotec(). + +// Test sending typical data only. +TEST(TestSendTrotec, SendDataOnly) { + IRsendTest irsend(kGpioUnused); + irsend.begin(); + uint8_t data[kTrotecStateLength] = { + 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; + + irsend.sendTrotec(data); + EXPECT_EQ( + "f36000d50" + "m5952s7364" + "m592s592m592s1560m592s592m592s592m592s1560m592s592m592s592m592s592" + "m592s592m592s592m592s1560m592s592m592s1560m592s1560m592s592m592s592" + "m592s1560m592s592m592s592m592s1560m592s592m592s1560m592s592m592s592" + "m592s592m592s1560m592s592m592s592m592s592m592s592m592s592m592s1560" + "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" + "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" + "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" + "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" + "m592s1560m592s1560m592s592m592s1560m592s592m592s1560m592s592m592s1560" + "m592s6184" + "m592s1500", + irsend.outputStr()); +} + +// Tests for decodeTrotec(). +// Decode normal Trotec messages. + +TEST(TestDecodeTrotec, SyntheticDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + // Synthesised Normal Trotec message. + irsend.reset(); + uint8_t expectedState[kTrotecStateLength] = { + 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; + irsend.sendTrotec(expectedState); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(decode_type_t::TROTEC, irsend.capture.decode_type); + EXPECT_EQ(kTrotecBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 20C, Fan: 2 (Medium), Sleep: On", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); +} + +TEST(TestTrotecESPClass, SetAndGetTemp) { + IRTrotecESP ac(kGpioUnused); + + ac.setTemp(25); + EXPECT_EQ(25, ac.getTemp()); + ac.setTemp(kTrotecMinTemp); + EXPECT_EQ(kTrotecMinTemp, ac.getTemp()); + ac.setTemp(kTrotecMaxTemp); + EXPECT_EQ(kTrotecMaxTemp, ac.getTemp()); + ac.setTemp(kTrotecMinTemp - 1); + EXPECT_EQ(kTrotecMinTemp, ac.getTemp()); + ac.setTemp(kTrotecMaxTemp + 1); + EXPECT_EQ(kTrotecMaxTemp, ac.getTemp()); +} + +TEST(TestTrotecESPClass, SetAndGetMode) { + IRTrotecESP ac(kGpioUnused); + + ac.setMode(kTrotecFan); + EXPECT_EQ(kTrotecFan, ac.getMode()); + ac.setMode(kTrotecCool); + EXPECT_EQ(kTrotecCool, ac.getMode()); + ac.setMode(kTrotecAuto); + EXPECT_EQ(kTrotecAuto, ac.getMode()); + ac.setMode(kTrotecDry); + EXPECT_EQ(kTrotecDry, ac.getMode()); + ac.setMode(255); + EXPECT_EQ(kTrotecAuto, ac.getMode()); +} + +TEST(TestTrotecESPClass, SetAndGetFan) { + IRTrotecESP ac(kGpioUnused); + + ac.setSpeed(kTrotecFanHigh); + EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); + ac.setSpeed(kTrotecFanLow); + EXPECT_EQ(kTrotecFanLow, ac.getSpeed()); + ac.setSpeed(kTrotecFanMed); + EXPECT_EQ(kTrotecFanMed, ac.getSpeed()); + ac.setSpeed(kTrotecFanHigh); + EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); + ASSERT_NE(7, kTrotecFanHigh); + // Now try some unexpected value. + ac.setSpeed(7); + EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); +} + +TEST(TestTrotecESPClass, Sleep) { + IRTrotecESP ac(kGpioUnused); + ac.setSleep(false); + ASSERT_FALSE(ac.getSleep()); + ac.setSleep(true); + ASSERT_TRUE(ac.getSleep()); + ac.setSleep(false); + ASSERT_FALSE(ac.getSleep()); +} + +TEST(TestTrotecESPClass, Power) { + IRTrotecESP ac(kGpioUnused); + ac.setPower(false); + ASSERT_FALSE(ac.getPower()); + ac.setPower(true); + ASSERT_TRUE(ac.getPower()); + ac.setPower(false); + ASSERT_FALSE(ac.getPower()); +} + +TEST(TestUtils, Housekeeping) { + ASSERT_EQ("TROTEC", typeToString(decode_type_t::TROTEC)); + ASSERT_EQ(decode_type_t::TROTEC, strToDecodeType("TROTEC")); + ASSERT_TRUE(hasACState(decode_type_t::TROTEC)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::TROTEC)); + + ASSERT_EQ("TROTEC_3550", typeToString(decode_type_t::TROTEC_3550)); + ASSERT_EQ(decode_type_t::TROTEC_3550, strToDecodeType("TROTEC_3550")); + ASSERT_TRUE(hasACState(decode_type_t::TROTEC_3550)); + ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::TROTEC_3550)); +} + +TEST(TestDecodeTrotec3550, RealDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + // Data from: + // https://docs.google.com/spreadsheets/d/1j4H1TDJ2QRFLPnls_sxkTZ3c9922TWxqIxwyGWwBIn0/edit#gid=2015400244&range=F8:EV8 + const uint16_t rawData[147] = { + 12005, 5130, + 545, 500, 600, 1950, 540, 500, 595, 1950, 545, 500, 595, 1950, 545, 500, + 595, 1950, 550, 495, 545, 495, 595, 1950, 545, 500, 545, 500, 540, 500, + 600, 1950, 590, 1950, 545, 500, 540, 500, 545, 500, 545, 495, 545, 500, + 545, 500, 545, 500, 540, 500, 545, 495, 545, 500, 545, 500, 545, 500, + 540, 500, 595, 1950, 520, 520, 595, 1950, 545, 500, 540, 500, 545, 525, + 515, 500, 545, 520, 520, 525, 520, 500, 540, 525, 520, 500, 540, 500, + 545, 500, 540, 500, 545, 520, 525, 495, 520, 520, 545, 500, 570, 475, + 540, 505, 590, 1950, 595, 1950, 545, 500, 540, 500, 570, 470, 595, 1950, + 570, 1975, 545, 500, 545, 500, 545, 520, 570, 1950, 550, 495, 545, 500, + 545, 495, 570, 470, 550, 495, 595, 1950, 570, 1975, 545, 525, 570, 1950, + 595, 1950, 565, 475, 545}; + const uint8_t expectedState[kTrotecStateLength] = { + 0x55, 0x23, 0x00, 0x05, 0x00, 0x00, 0x31, 0x88, 0x36}; + irsend.reset(); + irsend.sendRaw(rawData, 147, 38000); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(decode_type_t::TROTEC_3550, irsend.capture.decode_type); + EXPECT_EQ(kTrotecBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 18C, Fan: 3 (High), Swing(V): On, " + "Timer: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); +} + +TEST(TestDecodeTrotec3550, SyntheticDecode) { + IRsendTest irsend(kGpioUnused); + IRrecv irrecv(kGpioUnused); + irsend.begin(); + + // Synthesised Normal Trotec message. + irsend.reset(); + const uint8_t expectedState[kTrotecStateLength] = { + 0x55, 0x23, 0x00, 0x05, 0x00, 0x00, 0x31, 0x88, 0x36}; + irsend.sendTrotec3550(expectedState); + irsend.makeDecodeResult(); + EXPECT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(decode_type_t::TROTEC_3550, irsend.capture.decode_type); + EXPECT_EQ(kTrotecBits, irsend.capture.bits); + EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 18C, Fan: 3 (High), Swing(V): On, " + "Timer: Off", + IRAcUtils::resultAcToString(&irsend.capture)); + stdAc::state_t r, p; + ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); +} + +TEST(TestTrotec3550Class, SetAndGetMode) { + IRTrotec3550 ac(kGpioUnused); + + ac.setMode(kTrotecFan); + EXPECT_EQ(kTrotecFan, ac.getMode()); + ac.setMode(kTrotecCool); + EXPECT_EQ(kTrotecCool, ac.getMode()); + ac.setMode(kTrotecAuto); + EXPECT_EQ(kTrotecAuto, ac.getMode()); + ac.setMode(kTrotecDry); + EXPECT_EQ(kTrotecDry, ac.getMode()); + ac.setMode(255); + EXPECT_EQ(kTrotecAuto, ac.getMode()); + const uint8_t fan[9] = {0x55, 0x23, 0x00, 0x05, 0x00, 0x00, 0x23, 0x88, 0x28}; + ac.setRaw(fan); + EXPECT_EQ(kTrotecFan, ac.getMode()); +} + +TEST(TestTrotec3550Class, SetAndGetFan) { + IRTrotec3550 ac(kGpioUnused); + + ac.setFan(kTrotecFanHigh); + EXPECT_EQ(kTrotecFanHigh, ac.getFan()); + ac.setFan(kTrotecFanLow); + EXPECT_EQ(kTrotecFanLow, ac.getFan()); + ac.setFan(kTrotecFanMed); + EXPECT_EQ(kTrotecFanMed, ac.getFan()); + ac.setFan(kTrotecFanHigh); + EXPECT_EQ(kTrotecFanHigh, ac.getFan()); + ASSERT_NE(7, kTrotecFanHigh); + // Now try some unexpected value. + ac.setFan(7); + EXPECT_EQ(kTrotecFanHigh, ac.getFan()); +} + +TEST(TestTrotec3550Class, SetAndGetTemp) { + IRTrotec3550 ac(kGpioUnused); + + // Celsius + ac.setTemp(25); + EXPECT_EQ(25, ac.getTemp()); + EXPECT_TRUE(ac.getTempUnit()); + ac.setTemp(kTrotec3550MinTempC); + EXPECT_EQ(kTrotec3550MinTempC, ac.getTemp()); + ac.setTemp(kTrotec3550MaxTempC); + EXPECT_EQ(kTrotec3550MaxTempC, ac.getTemp()); + ac.setTemp(kTrotec3550MinTempC - 1); + EXPECT_EQ(kTrotec3550MinTempC, ac.getTemp()); + ac.setTemp(kTrotec3550MaxTempC + 1); + EXPECT_EQ(kTrotec3550MaxTempC, ac.getTemp()); + // Fahrenheit + ac.setTemp(72, false); + EXPECT_EQ(72, ac.getTemp()); + EXPECT_FALSE(ac.getTempUnit()); + ac.setTemp(kTrotec3550MinTempF, false); + EXPECT_EQ(kTrotec3550MinTempF, ac.getTemp()); + ac.setTemp(kTrotec3550MaxTempF, false); + EXPECT_EQ(kTrotec3550MaxTempF, ac.getTemp()); + ac.setTemp(kTrotec3550MinTempF - 1, false); + EXPECT_EQ(kTrotec3550MinTempF, ac.getTemp()); + ac.setTemp(kTrotec3550MaxTempF + 1, false); + EXPECT_EQ(kTrotec3550MaxTempF, ac.getTemp()); + // Celsius + ac.setTemp(25, true); + EXPECT_EQ(25, ac.getTemp()); + EXPECT_TRUE(ac.getTempUnit()); + uint8_t deg79F[9] = {0x55, 0xA3, 0x00, 0x14, 0x00, 0x00, 0x31, 0x40, 0x7D}; + ac.setRaw(deg79F); + EXPECT_FALSE(ac.getTempUnit()); // Fahrenheit + EXPECT_EQ(79, ac.getTemp()); +} + +TEST(TestTrotec3550Class, SwingV) { + IRTrotec3550 ac(kGpioUnused); + ac.setSwingV(false); + ASSERT_FALSE(ac.getSwingV()); + ac.setSwingV(true); + ASSERT_TRUE(ac.getSwingV()); + ac.setSwingV(false); + ASSERT_FALSE(ac.getSwingV()); +} + +TEST(TestTrotec3550Class, Power) { + IRTrotec3550 ac(kGpioUnused); + ac.setPower(false); + ASSERT_FALSE(ac.getPower()); + ac.setPower(true); + ASSERT_TRUE(ac.getPower()); + ac.setPower(false); + ASSERT_FALSE(ac.getPower()); +} + +TEST(TestTrotec3550Class, Timer) { + IRTrotec3550 ac(kGpioUnused); + EXPECT_FALSE(ac._.TimerSet); + EXPECT_EQ(0, ac.getTimer()); + + ac.setTimer(1); + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(0, ac.getTimer()); + + ac.setTimer(0); + EXPECT_FALSE(ac._.TimerSet); + EXPECT_EQ(0, ac.getTimer()); + + ac.setTimer(1 * 60); + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(1 * 60, ac.getTimer()); + + ac.setTimer(2 * 60 + 37); + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(2 * 60, ac.getTimer()); + + ac.setTimer(7 * 60 + 59); + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(7 * 60, ac.getTimer()); + + ac.setTimer(8 * 60); // Max + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(8 * 60, ac.getTimer()); // Max + + ac.setTimer(9 * 60); // Beyond max + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(8 * 60, ac.getTimer()); // Max + + ac.setTimer(0); + EXPECT_FALSE(ac._.TimerSet); + EXPECT_EQ(0, ac.getTimer()); + + // Real data. + uint8_t onehour[9] = {0x55, 0xBB, 0x01, 0x15, 0x00, 0x00, 0x31, 0x02, 0x59}; + ac.setRaw(onehour); + EXPECT_TRUE(ac._.TimerSet); + EXPECT_EQ(1 * 60, ac.getTimer()); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 80F, Fan: 3 (High), Swing(V): On, " + "Timer: 01:00", ac.toString()); +} + +TEST(TestTrotec3550Class, HumanReadable) { + IRTrotec3550 ac(kGpioUnused); + EXPECT_EQ( + "Power: Off, Mode: 0 (Auto), Temp: 22C, Fan: 1 (Low), Swing(V): Off, " + "Timer: Off", + ac.toString()); + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1563#issuecomment-898318429 + const uint8_t oncool18f3swing[9] = { + 0x55, 0x23, 0x00, 0x05, 0x00, 0x00, 0x31, 0x88, 0x36}; + ac.setRaw(oncool18f3swing); + EXPECT_EQ( + "Power: On, Mode: 1 (Cool), Temp: 18C, Fan: 3 (High), Swing(V): On, " + "Timer: Off", + ac.toString()); + const uint8_t offcool18f3swing[9] = { + 0x55, 0x21, 0x00, 0x05, 0x00, 0x00, 0x31, 0x88, 0x34}; + ac.setRaw(offcool18f3swing); + EXPECT_EQ( + "Power: Off, Mode: 1 (Cool), Temp: 18C, Fan: 3 (High), Swing(V): On, " + "Timer: Off", + ac.toString()); + const uint8_t modeauto[9] = { + 0x55, 0x60, 0x00, 0x0D, 0x00, 0x00, 0x10, 0x88, 0x5A}; + ac.setRaw(modeauto); + EXPECT_EQ( + "Power: Off, Mode: 0 (Auto), Temp: 22C, Fan: 1 (Low), Swing(V): Off, " + "Timer: Off", + ac.toString()); +} + +TEST(TestTrotec3550Class, Checksums) { + // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1563#issuecomment-898318429 + const uint8_t oncool18f3swing[9] = { + 0x55, 0x23, 0x00, 0x05, 0x00, 0x00, 0x31, 0x88, 0x36}; + EXPECT_EQ(0x36, IRTrotec3550::calcChecksum(oncool18f3swing)); + ASSERT_TRUE(IRTrotec3550::validChecksum(oncool18f3swing)); +} + +TEST(TestTrotec3550Class, toCommon) { + IRTrotec3550 ac(kGpioUnused); + ac.setPower(true); + ac.setMode(kTrotecCool); + ac.setTemp(20); + ac.setFan(kTrotecFanHigh); + ac.setSwingV(true); + // Now test it. + ASSERT_EQ(decode_type_t::TROTEC_3550, ac.toCommon().protocol); + ASSERT_TRUE(ac.toCommon().power); + ASSERT_TRUE(ac.toCommon().celsius); + ASSERT_EQ(20, ac.toCommon().degrees); + ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode); + ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed); + ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv); + // Unsupported. + ASSERT_EQ(-1, ac.toCommon().model); + ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh); + ASSERT_FALSE(ac.toCommon().turbo); + ASSERT_FALSE(ac.toCommon().econo); + ASSERT_FALSE(ac.toCommon().light); + ASSERT_FALSE(ac.toCommon().filter); + ASSERT_FALSE(ac.toCommon().clean); + ASSERT_FALSE(ac.toCommon().beep); + ASSERT_FALSE(ac.toCommon().quiet); + ASSERT_EQ(-1, ac.toCommon().sleep); + ASSERT_EQ(-1, ac.toCommon().clock); +} diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Truma_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Truma_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Truma_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Truma_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Vestel_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Vestel_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Vestel_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Vestel_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Voltas_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Voltas_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Voltas_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Voltas_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Whirlpool_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Whirlpool_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Whirlpool_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Whirlpool_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Whynter_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Whynter_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Whynter_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Whynter_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Xmp_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Xmp_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Xmp_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Xmp_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Zepeal_test.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Zepeal_test.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/test/ir_Zepeal_test.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/test/ir_Zepeal_test.cpp diff --git a/lib/lib_basic/IRremoteESP8266/tools/Makefile b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/Makefile similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/Makefile rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/Makefile diff --git a/lib/lib_basic/IRremoteESP8266/tools/RawToGlobalCache.sh b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/RawToGlobalCache.sh similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/RawToGlobalCache.sh rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/RawToGlobalCache.sh diff --git a/lib/lib_basic/IRremoteESP8266/tools/auto_analyse_raw_data.py b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/auto_analyse_raw_data.py similarity index 99% rename from lib/lib_basic/IRremoteESP8266/tools/auto_analyse_raw_data.py rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/auto_analyse_raw_data.py index 3b22ea12d..aa5c990a9 100755 --- a/lib/lib_basic/IRremoteESP8266/tools/auto_analyse_raw_data.py +++ b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/auto_analyse_raw_data.py @@ -1,9 +1,9 @@ -#!/usr/bin/python +#!/usr/bin/python3 """Attempt an automatic analysis of IRremoteESP8266's Raw data output. Makes suggestions on key values and tried to break down the message into likely chunks.""" # -# Copyright 2018 David Conran +# Copyright 2018-2021 David Conran import argparse import sys @@ -303,9 +303,10 @@ def convert_rawdata(data_str): for timing in [x.strip() for x in data_str.split(',')]: try: results.append(int(timing)) - except ValueError: + except ValueError as non_numeric: raise ValueError( - "Raw Data contains a non-numeric value of '%s'." % timing) + "Raw Data contains a non-numeric value of '%s'." % + timing) from non_numeric return results @@ -723,7 +724,7 @@ def get_rawdata(arg_options): if arg_options.stdin: return sys.stdin.read() if arg_options.file: - with open(arg_options.file) as input_file: + with open(arg_options.file, encoding="utf8") as input_file: return input_file.read() else: return arg_options.rawdata diff --git a/lib/lib_basic/IRremoteESP8266/tools/auto_analyse_raw_data_test.py b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/auto_analyse_raw_data_test.py similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/auto_analyse_raw_data_test.py rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/auto_analyse_raw_data_test.py diff --git a/lib/lib_basic/IRremoteESP8266/tools/gc_decode.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/gc_decode.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/gc_decode.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/gc_decode.cpp diff --git a/lib/lib_basic/IRremoteESP8266/tools/generate_irtext_h.sh b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/generate_irtext_h.sh similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/generate_irtext_h.sh rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/generate_irtext_h.sh diff --git a/lib/lib_basic/IRremoteESP8266/tools/mkkeywords b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/mkkeywords similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/mkkeywords rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/mkkeywords diff --git a/lib/lib_basic/IRremoteESP8266/tools/mode2_decode.cpp b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/mode2_decode.cpp similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/mode2_decode.cpp rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/mode2_decode.cpp diff --git a/lib/lib_basic/IRremoteESP8266/tools/raw_to_pronto_code.py b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/raw_to_pronto_code.py similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/raw_to_pronto_code.py rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/raw_to_pronto_code.py diff --git a/lib/lib_basic/IRremoteESP8266/tools/raw_to_pronto_code_test.py b/lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/raw_to_pronto_code_test.py similarity index 100% rename from lib/lib_basic/IRremoteESP8266/tools/raw_to_pronto_code_test.py rename to lib/lib_basic/IRremoteESP8266/IRremoteESP8266/tools/raw_to_pronto_code_test.py diff --git a/lib/lib_basic/IRremoteESP8266/docs/README.md b/lib/lib_basic/IRremoteESP8266/docs/README.md deleted file mode 100644 index 262e82b62..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# IRremoteESP8266 Library - -This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an -[ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc. - -## Supported Protocols -You can find the details of which protocols & devices are supported -[here](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md). - -## Troubleshooting -Before reporting an issue or asking for help, please try to follow our [Troubleshooting Guide](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Troubleshooting-Guide) first. - -## Frequently Asked Questions -Some common answers to common questions and problems are on our [F.A.Q. wiki page](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Frequently-Asked-Questions). - -## Library API Documentation -This library uses [Doxygen](https://www.doxygen.nl/index.html) to [automatically document](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) the [library's](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) [API](https://en.wikipedia.org/wiki/Application_programming_interface). -You can find it [here](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/). - -## Installation -##### Official releases via the Arduino IDE v1.8+ (Windows & Linux) -1. Click the _"Sketch"_ -> _"Include Library"_ -> _"Manage Libraries..."_ Menu items. -1. Enter `IRremoteESP8266` into the _"Filter your search..."_ top right search box. -1. Click on the IRremoteESP8266 result of the search. -1. Select the version you wish to install and click _"Install"_. - -##### Manual Installation for Windows -1. Click on _"Clone or Download"_ button, then _"[Download ZIP](https://github.com/crankyoldgit/IRremoteESP8266/archive->master.zip)"_ on the page. -1. Extract the contents of the downloaded zip file. -1. Rename the extracted folder to _"IRremoteESP8266"_. -1. Move this folder to your libraries directory. (under windows: `C:\Users\YOURNAME\Documents\Arduino\libraries\`) -1. Restart your Arduino IDE. -1. Check out the examples. - -##### Using Git to install the library ( Linux ) -``` -cd ~/Arduino/libraries -git clone https://github.com/crankyoldgit/IRremoteESP8266.git -``` -###### To update to the latest version of the library -``` -cd ~/Arduino/libraries/IRremoteESP8266 && git pull -``` - -## Contributing -If you want to [contribute](.github/CONTRIBUTING.md#how-can-i-contribute) to this project, consider: -- [Reporting](.github/CONTRIBUTING.md#reporting-bugs) bugs and errors -- Ask for enhancements -- Improve our documentation -- [Creating issues](.github/CONTRIBUTING.md#reporting-bugs) and [pull requests](.github/CONTRIBUTING.md#pull-requests) -- Tell other people about this library - -## Contributors -Available [here](.github/Contributors.md) - -## Library History -This library was originally based on Ken Shirriff's work (https://github.com/shirriff/Arduino-IRremote/) - -[Mark Szabo](https://github.com/crankyoldgit/IRremoteESP8266) has updated the IRsend class to work on ESP8266 and [Sebastien Warin](https://github.com/sebastienwarin/IRremoteESP8266) the receiving & decoding part (IRrecv class). - -As of v2.0, the library was almost entirely re-written with the ESP8266's resources in mind. diff --git a/lib/lib_basic/IRremoteESP8266/docs/README_de.md b/lib/lib_basic/IRremoteESP8266/docs/README_de.md deleted file mode 100644 index 4ef3bccc5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/README_de.md +++ /dev/null @@ -1,59 +0,0 @@ -# IRremoteESP8266 Library - -Diese Programmbibliothek ermöglicht das **Senden _und_ Empfangen** von Infrarot-Signalen mit [ESP8266](https://github.com/esp8266/Arduino)- oder [ESP32](https://github.com/espressif/arduino-esp32)-Mikrocontrollern mithilfe des [Arduino-Frameworks](https://www.arduino.cc/) und handelsüblichen 940nm Infrarot-LEDs und IR-Empfängermodulen, wie zum Beispiel TSOP{17,22,24,36,38,44,48}*-Demodulatoren. - -## Unterstützte Protokolle -Details zu den unterstützten Protokollen und Geräten befinden sich [hier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md). - -## Fehlersuche -Bitte erst den [Troubleshooting Guide](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Troubleshooting-Guide) lesen, bevor Probleme gemeldet werden oder um Hilfe gebeten wird. - -## FAQ - häufige Fragen -Einige Antworten zu häufig gestellten Fragen sind auf unserer [F.A.Q. Wiki-Seite](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Frequently-Asked-Questions) hinterlegt. - -## Library API-Dokumentation -Diese Bibliothek benutzt [Doxygen](https://www.doxygen.nl/index.html) zur [automatischen Dokumentation](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) der [API](https://en.wikipedia.org/wiki/Application_programming_interface) dieser [Bibliothek](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/). -Sie ist [hier](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) zu finden. - -## Installation -##### Installation von offiziellen Releases über die Arduino-IDE v1.8+ (Windows & Linux) -1. Das Untermenü _"Sketch"_ -> _"Bibliothek einbinden"_ -> _"Bibliotheken verwalten..."_ aufrufen. -1. In das Suchfeld oben rechts (_"Grenzen Sie Ihre Suche ein..."_) `IRremoteESP8266` eintragen. -1. Bei den Suchergebnissen IRremoteESP8266 auswählen. -1. Die Version markieren, die installiert werden soll, und dann _"Installieren"_ klicken. - -##### Manuelle Installation (Windows) -1. Auf der Website auf den grünen _"Code"_-Knopf klicken, dann _"[Download ZIP](https://github.com/crankyoldgit/IRremoteESP8266/archive->master.zip)"_ auswählen. -1. Die heruntergeladene Zip-Datei entpacken. -1. Den entpackten Dateiordner in _"IRremoteESP8266"_ umbenennen. -1. Diesen Ordner anschließend in den Bibliotheken-Pfad verschieben. (Unter Windows: `C:\Users\BENUTZER\Dokumente\Arduino\libraries\`) -1. Die Arduino-IDE neu starten. -1. Unter den Beispielen finden sich neue Einträge. - -##### Benutzung von Git für die Installation der Bibliothek (Linux) -``` -cd ~/Arduino/libraries -git clone https://github.com/crankyoldgit/IRremoteESP8266.git -``` -###### Um die neueste Version der Bibliothek zu beziehen -``` -cd ~/Arduino/libraries/IRremoteESP8266 && git pull -``` - -## Mithelfen -Anregungen für die [Mithilfe](.github/CONTRIBUTING.md#how-can-i-contribute) am Projekt: -- Das [Melden](.github/CONTRIBUTING.md#reporting-bugs) von Bugs und Fehlern -- Das Einreichen von Verbesserungs- und Erweiterungsvorschlägen -- Das Erstellen und Verbessern der Dokumentation -- Das [Melden von Problemen](.github/CONTRIBUTING.md#reporting-bugs) und Einreichen von [Pull-Requests](.github/CONTRIBUTING.md#pull-requests) -- Anderen Leuten von dieser Bibliothek erzählen - -## Beitragende -Die Beitragenden sind [hier](.github/Contributors.md) aufgelistet. - -## Historie der Bibliothek -Diese Bibliothek basiert auf Ken Shirriff's Vorarbeit (https://github.com/shirriff/Arduino-IRremote/). - -[Mark Szabo](https://github.com/crankyoldgit/IRremoteESP8266) programmierte die IRsend-Klassen auf ESP8266 und [Sebastien Warin](https://github.com/sebastienwarin/IRremoteESP8266) war verantwortlich für die Empfangs- und Dekodier-Teile (IRrecv-Klassen). - -Die Bibliothek wurde ab Version v2.0 fast komplett neu geschrieben, um besser auf die ESP8266-Ressourcen Rücksicht zu nehmen. diff --git a/lib/lib_basic/IRremoteESP8266/docs/README_fr.md b/lib/lib_basic/IRremoteESP8266/docs/README_fr.md deleted file mode 100644 index 3ff81c5d8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/README_fr.md +++ /dev/null @@ -1,64 +0,0 @@ -# IRremoteESP8266 Library - -Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole -[ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc. - -## Protocoles supportés -Vous pouvez trouver le détails des protocoles et machines supportés -[here](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/SupportedProtocols.md). - -## Dépannage -Avant de reporter un probème ou de demander de l'aide, essayez de suivre notre [guide de dépannage](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Troubleshooting-Guide) first. - -## Questions fréquentes -Les questions les plus fréquentes sont ici, avec des réponses [F.A.Q. wiki page](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Frequently-Asked-Questions). - -## Documentation API de la bibliothèque -Cette bibliothèque utilise [Doxygen](https://www.doxygen.nl/index.html) pour [documenter automatiquement](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) [l'API](https://en.wikipedia.org/wiki/Application_programming_interface) de la [bibliothèque](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/). Vous pouvez le trouver [ici](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/). - -## Installation -##### Officiel releases avec l'Arduino IDE v1.8+ (Windows & Linux) -1. Cliquez sur _"Sketch"_ -> _"Include Library"_ -> _"Manage Libraries..."_ Menu items. -1. Entrez `IRremoteESP8266` dans le _"Filter your search..."_ barre de recherche en haut à droite. -1. Cliquez sur le IRremoteESP8266 pour avoir les résultats de la recherche. -1. Selectionnez la version que vous voulez installer et cliquez sur _"Install"_. - -## Library API Documentation -This library uses [Doxygen](https://www.doxygen.nl/index.html) to [automatically document](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) the [library's](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/) [API](https://en.wikipedia.org/wiki/Application_programming_interface). -You can find it [here](https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/). - -##### Installation manuelle pour Windows -1. cliquez le boutton sur _"Clone or Download"_ , et _"[Download ZIP](https://github.com/crankyoldgit/IRremoteESP8266/archive->master.zip)"_ on the page. -1. Extraire l'archive. -1. renommez le fichier par _"IRremoteESP8266"_. -1. déplacer le fichier dans votre fichier de bibliothèques. (Pour windows : `C:\Users\VOTRE_NOM\Documents\Arduino\libraries\`) -1. Redemarrez arduino IDE. -1. Regardez les exemples. - -##### En utilisant GIT ( Linux ) -``` -cd ~/Arduino/libraries -git clone https://github.com/crankyoldgit/IRremoteESP8266.git -``` -###### Pour se mettre à jour -``` -cd ~/Arduino/libraries/IRremoteESP8266 && git pull -``` - -## Contribution -Si vous voulez [contribuer](.github/CONTRIBUTING.md#how-can-i-contribute) au projet, pour les erreurs: -- [Reporting](.github/CONTRIBUTING.md#reporting-bugs) bug et erreurs -- Demander des améliorations -- Améliorer notre documentation -- [Création d'issues](.github/CONTRIBUTING.md#reporting-bugs) et [pull requests](.github/CONTRIBUTING.md#pull-requests) -- Parlez de cettre librairie à d'autres personnes - -## Contributeurs -disponible [ici](.github/Contributors.md) - -## Historique de la bibliothèque -Elle est basée sur le travail de Shirriff (https://github.com/shirriff/Arduino-IRremote/) - -[Mark Szabo](https://github.com/crankyoldgit/IRremoteESP8266) à mis a jour la IRsend class pour qu'elle soit fonctionnelle sur ESP8266 et [Sebastien Warin](https://github.com/sebastienwarin/IRremoteESP8266) s'est occupé de la partie réception et décodage (IRrecv class). - -Comme pour la version 2.0, la bibliothèque à été completement réécrite avec les ressources sur ESP8266. diff --git a/lib/lib_basic/IRremoteESP8266/docs/_config.yml b/lib/lib_basic/IRremoteESP8266/docs/_config.yml deleted file mode 100644 index c74188174..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-slate \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8cpp.html deleted file mode 100644 index 712ddbf93..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8cpp.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRac.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRac.cpp File Reference
-
-
- - - - - -

-Namespaces

 IRAcUtils
 Common functions for use with all A/Cs supported by the IRac class.
 
- - - - - - - -

-Functions

String IRAcUtils::resultAcToString (const decode_results *const result)
 Display the human readable state of an A/C message if we can. More...
 
bool IRAcUtils::decodeToState (const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
 Convert a valid IR A/C remote message that we understand enough into a Common A/C state. More...
 
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h.html deleted file mode 100644 index 5aec953b6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRac.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRac.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - -

-Classes

class  IRac
 A universal/common/generic interface for controling supported A/Cs. More...
 
- - - - -

-Namespaces

 IRAcUtils
 Common functions for use with all A/Cs supported by the IRac class.
 
- - - - - - - -

-Functions

String IRAcUtils::resultAcToString (const decode_results *const result)
 Display the human readable state of an A/C message if we can. More...
 
bool IRAcUtils::decodeToState (const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
 Convert a valid IR A/C remote message that we understand enough into a Common A/C state. More...
 
- - - - -

-Variables

const int8_t kGpioUnused = -1
 A placeholder for not using an actual GPIO. More...
 
-

Variable Documentation

- -

◆ kGpioUnused

- -
-
- - - - -
const int8_t kGpioUnused = -1
-
- -

A placeholder for not using an actual GPIO.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h_source.html deleted file mode 100644 index 5b3ba1925..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRac_8h_source.html +++ /dev/null @@ -1,736 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRac.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRac.h
-
-
-Go to the documentation of this file.
1 #ifndef IRAC_H_
-
2 #define IRAC_H_
-
3 
-
4 // Copyright 2019 David Conran
-
5 
-
6 #ifndef UNIT_TEST
-
7 #include <Arduino.h>
-
8 #endif
-
9 #include "IRremoteESP8266.h"
-
10 #include "ir_Airwell.h"
-
11 #include "ir_Amcor.h"
-
12 #include "ir_Argo.h"
-
13 #include "ir_Carrier.h"
-
14 #include "ir_Coolix.h"
-
15 #include "ir_Corona.h"
-
16 #include "ir_Daikin.h"
-
17 #include "ir_Delonghi.h"
-
18 #include "ir_Fujitsu.h"
-
19 #include "ir_Ecoclim.h"
-
20 #include "ir_Electra.h"
-
21 #include "ir_Goodweather.h"
-
22 #include "ir_Gree.h"
-
23 #include "ir_Haier.h"
-
24 #include "ir_Hitachi.h"
-
25 #include "ir_Kelvinator.h"
-
26 #include "ir_LG.h"
-
27 #include "ir_Midea.h"
-
28 #include "ir_Mitsubishi.h"
-
29 #include "ir_MitsubishiHeavy.h"
-
30 #include "ir_Neoclima.h"
-
31 #include "ir_Panasonic.h"
-
32 #include "ir_Samsung.h"
-
33 #include "ir_Sanyo.h"
-
34 #include "ir_Sharp.h"
-
35 #include "ir_Tcl.h"
-
36 #include "ir_Technibel.h"
-
37 #include "ir_Teco.h"
-
38 #include "ir_Toshiba.h"
-
39 #include "ir_Transcold.h"
-
40 #include "ir_Trotec.h"
-
41 #include "ir_Truma.h"
-
42 #include "ir_Vestel.h"
-
43 #include "ir_Voltas.h"
-
44 #include "ir_Whirlpool.h"
-
45 
-
46 // Constants
-
47 const int8_t kGpioUnused = -1;
-
48 
-
49 // Class
-
51 class IRac {
-
52  public:
-
53  explicit IRac(const uint16_t pin, const bool inverted = false,
-
54  const bool use_modulation = true);
-
55  static bool isProtocolSupported(const decode_type_t protocol);
-
56  static void initState(stdAc::state_t *state,
-
57  const decode_type_t vendor, const int16_t model,
-
58  const bool power, const stdAc::opmode_t mode,
-
59  const float degrees, const bool celsius,
-
60  const stdAc::fanspeed_t fan,
-
61  const stdAc::swingv_t swingv,
-
62  const stdAc::swingh_t swingh,
-
63  const bool quiet, const bool turbo, const bool econo,
-
64  const bool light, const bool filter, const bool clean,
-
65  const bool beep, const int16_t sleep,
-
66  const int16_t clock);
-
67  static void initState(stdAc::state_t *state);
-
68  void markAsSent(void);
-
69  bool sendAc(void);
-
70  bool sendAc(const stdAc::state_t desired, const stdAc::state_t *prev = NULL);
-
71  bool sendAc(const decode_type_t vendor, const int16_t model,
-
72  const bool power, const stdAc::opmode_t mode, const float degrees,
-
73  const bool celsius, const stdAc::fanspeed_t fan,
-
74  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
75  const bool quiet, const bool turbo, const bool econo,
-
76  const bool light, const bool filter, const bool clean,
-
77  const bool beep, const int16_t sleep = -1,
-
78  const int16_t clock = -1);
-
79  static bool cmpStates(const stdAc::state_t a, const stdAc::state_t b);
-
80  static bool strToBool(const char *str, const bool def = false);
-
81  static int16_t strToModel(const char *str, const int16_t def = -1);
- -
83  const char *str, const stdAc::opmode_t def = stdAc::opmode_t::kAuto);
- -
85  const char *str,
- - -
88  const char *str, const stdAc::swingv_t def = stdAc::swingv_t::kOff);
- -
90  const char *str, const stdAc::swingh_t def = stdAc::swingh_t::kOff);
-
91  static String boolToString(const bool value);
-
92  static String opmodeToString(const stdAc::opmode_t mode);
-
93  static String fanspeedToString(const stdAc::fanspeed_t speed);
-
94  static String swingvToString(const stdAc::swingv_t swingv);
-
95  static String swinghToString(const stdAc::swingh_t swingh);
- - -
98  bool hasStateChanged(void);
- -
100 #ifndef UNIT_TEST
-
101 
-
102  private:
-
103 #endif
-
104  uint16_t _pin;
-
105  bool _inverted;
-
106  bool _modulation;
- -
108 #if SEND_AIRWELL
-
109  void airwell(IRAirwellAc *ac,
-
110  const bool on, const stdAc::opmode_t mode, const float degrees,
-
111  const stdAc::fanspeed_t fan);
-
112 #endif // SEND_AIRWELL
-
113 #if SEND_AMCOR
-
114  void amcor(IRAmcorAc *ac,
-
115  const bool on, const stdAc::opmode_t mode, const float degrees,
-
116  const stdAc::fanspeed_t fan);
-
117 #endif // SEND_AMCOR
-
118 #if SEND_ARGO
-
119  void argo(IRArgoAC *ac,
-
120  const bool on, const stdAc::opmode_t mode, const float degrees,
-
121  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
122  const bool turbo, const int16_t sleep = -1);
-
123 #endif // SEND_ARGO
-
124 #if SEND_CARRIER_AC64
-
125 void carrier64(IRCarrierAc64 *ac,
-
126  const bool on, const stdAc::opmode_t mode,
-
127  const float degrees, const stdAc::fanspeed_t fan,
-
128  const stdAc::swingv_t swingv, const int16_t sleep = -1);
-
129 #endif // SEND_CARRIER_AC64
-
130 #if SEND_COOLIX
-
131  void coolix(IRCoolixAC *ac,
-
132  const bool on, const stdAc::opmode_t mode, const float degrees,
-
133  const stdAc::fanspeed_t fan,
-
134  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
135  const bool turbo, const bool light, const bool clean,
-
136  const int16_t sleep = -1);
-
137 #endif // SEND_COOLIX
-
138 #if SEND_CORONA_AC
-
139  void corona(IRCoronaAc *ac,
-
140  const bool on, const stdAc::opmode_t mode,
-
141  const float degrees, const stdAc::fanspeed_t fan,
-
142  const stdAc::swingv_t swingv, const bool econo);
-
143 #endif // SEND_CORONA_AC
-
144 #if SEND_DAIKIN
-
145  void daikin(IRDaikinESP *ac,
-
146  const bool on, const stdAc::opmode_t mode, const float degrees,
-
147  const stdAc::fanspeed_t fan,
-
148  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
149  const bool quiet, const bool turbo, const bool econo,
-
150  const bool clean);
-
151 #endif // SEND_DAIKIN
-
152 #if SEND_DAIKIN128
-
153  void daikin128(IRDaikin128 *ac,
-
154  const bool on, const stdAc::opmode_t mode,
-
155  const float degrees, const stdAc::fanspeed_t fan,
-
156  const stdAc::swingv_t swingv,
-
157  const bool quiet, const bool turbo, const bool light,
-
158  const bool econo, const int16_t sleep = -1,
-
159  const int16_t clock = -1);
-
160 #endif // SEND_DAIKIN128
-
161 #if SEND_DAIKIN152
-
162  void daikin152(IRDaikin152 *ac,
-
163  const bool on, const stdAc::opmode_t mode,
-
164  const float degrees, const stdAc::fanspeed_t fan,
-
165  const stdAc::swingv_t swingv,
-
166  const bool quiet, const bool turbo, const bool econo);
-
167 #endif // SEND_DAIKIN152
-
168 #if SEND_DAIKIN160
-
169  void daikin160(IRDaikin160 *ac,
-
170  const bool on, const stdAc::opmode_t mode,
-
171  const float degrees, const stdAc::fanspeed_t fan,
-
172  const stdAc::swingv_t swingv);
-
173 #endif // SEND_DAIKIN160
-
174 #if SEND_DAIKIN176
-
175  void daikin176(IRDaikin176 *ac,
-
176  const bool on, const stdAc::opmode_t mode,
-
177  const float degrees, const stdAc::fanspeed_t fan,
-
178  const stdAc::swingh_t swingh);
-
179 #endif // SEND_DAIKIN176
-
180 #if SEND_DAIKIN2
-
181  void daikin2(IRDaikin2 *ac,
-
182  const bool on, const stdAc::opmode_t mode,
-
183  const float degrees, const stdAc::fanspeed_t fan,
-
184  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
185  const bool quiet, const bool turbo, const bool light,
-
186  const bool econo, const bool filter, const bool clean,
-
187  const bool beep, const int16_t sleep = -1,
-
188  const int16_t clock = -1);
-
189 #endif // SEND_DAIKIN2
-
190 #if SEND_DAIKIN216
-
191 void daikin216(IRDaikin216 *ac,
-
192  const bool on, const stdAc::opmode_t mode,
-
193  const float degrees, const stdAc::fanspeed_t fan,
-
194  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
195  const bool quiet, const bool turbo);
-
196 #endif // SEND_DAIKIN216
-
197 #if SEND_DAIKIN64
-
198  void daikin64(IRDaikin64 *ac,
-
199  const bool on, const stdAc::opmode_t mode,
-
200  const float degrees, const stdAc::fanspeed_t fan,
-
201  const stdAc::swingv_t swingv,
-
202  const bool quiet, const bool turbo,
-
203  const int16_t sleep = -1, const int16_t clock = -1);
-
204 #endif // SEND_DAIKIN64
-
205 #if SEND_DELONGHI_AC
-
206  void delonghiac(IRDelonghiAc *ac,
-
207  const bool on, const stdAc::opmode_t mode, const bool celsius,
-
208  const float degrees, const stdAc::fanspeed_t fan,
-
209  const bool turbo, const int16_t sleep = -1);
-
210 #endif // SEND_DELONGHI_AC
-
211 #if SEND_ECOCLIM
-
212 void ecoclim(IREcoclimAc *ac,
-
213  const bool on, const stdAc::opmode_t mode,
-
214  const float degrees, const stdAc::fanspeed_t fan,
-
215  const int16_t sleep = -1, const int16_t clock = -1);
-
216 #endif // SEND_ECOCLIM
-
217 #if SEND_ELECTRA_AC
-
218 void electra(IRElectraAc *ac,
-
219  const bool on, const stdAc::opmode_t mode,
-
220  const float degrees, const stdAc::fanspeed_t fan,
-
221  const stdAc::swingv_t swingv,
-
222  const stdAc::swingh_t swingh, const bool turbo,
-
223  const bool lighttoggle, const bool clean);
-
224 #endif // SEND_ELECTRA_AC
-
225 #if SEND_FUJITSU_AC
-
226  void fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model,
-
227  const bool on, const stdAc::opmode_t mode,
-
228  const bool celsius, const float degrees,
-
229  const stdAc::fanspeed_t fan,
-
230  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
231  const bool quiet, const bool turbo, const bool econo,
-
232  const bool filter, const bool clean, const int16_t sleep = -1);
-
233 #endif // SEND_FUJITSU_AC
-
234 #if SEND_GOODWEATHER
-
235  void goodweather(IRGoodweatherAc *ac,
-
236  const bool on, const stdAc::opmode_t mode,
-
237  const float degrees,
-
238  const stdAc::fanspeed_t fan,
-
239  const stdAc::swingv_t swingv,
-
240  const bool turbo, const bool light,
-
241  const int16_t sleep = -1);
-
242 #endif // SEND_GOODWEATHER
-
243 #if SEND_GREE
-
244  void gree(IRGreeAC *ac, const gree_ac_remote_model_t model,
-
245  const bool on, const stdAc::opmode_t mode, const bool celsius,
-
246  const float degrees, const stdAc::fanspeed_t fan,
-
247  const stdAc::swingv_t swingv, const bool turbo, const bool light,
-
248  const bool clean, const int16_t sleep = -1);
-
249 #endif // SEND_GREE
-
250 #if SEND_HAIER_AC
-
251  void haier(IRHaierAC *ac,
-
252  const bool on, const stdAc::opmode_t mode, const float degrees,
-
253  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
254  const bool filter, const int16_t sleep = -1,
-
255  const int16_t clock = -1);
-
256 #endif // SEND_HAIER_AC
-
257 #if SEND_HAIER_AC_YRW02
-
258  void haierYrwo2(IRHaierACYRW02 *ac,
-
259  const bool on, const stdAc::opmode_t mode,
-
260  const float degrees, const stdAc::fanspeed_t fan,
-
261  const stdAc::swingv_t swingv,
-
262  const bool turbo, const bool filter,
-
263  const int16_t sleep = -1);
-
264 #endif // SEND_HAIER_AC_YRW02
-
265 #if SEND_HITACHI_AC
-
266  void hitachi(IRHitachiAc *ac,
-
267  const bool on, const stdAc::opmode_t mode,
-
268  const float degrees, const stdAc::fanspeed_t fan,
-
269  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh);
-
270 #endif // SEND_HITACHI_AC
-
271 #if SEND_HITACHI_AC1
-
272  void hitachi1(IRHitachiAc1 *ac, const hitachi_ac1_remote_model_t model,
-
273  const bool on, const bool power_toggle,
-
274  const stdAc::opmode_t mode,
-
275  const float degrees, const stdAc::fanspeed_t fan,
-
276  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
277  const bool swing_toggle, const int16_t sleep = -1);
-
278 #endif // SEND_HITACHI_AC1
-
279 #if SEND_HITACHI_AC344
-
280  void hitachi344(IRHitachiAc344 *ac,
-
281  const bool on, const stdAc::opmode_t mode,
-
282  const float degrees, const stdAc::fanspeed_t fan,
-
283  const stdAc::swingv_t swingv,
-
284  const stdAc::swingh_t swingh);
-
285 #endif // SEND_HITACHI_AC344
-
286 #if SEND_HITACHI_AC424
-
287  void hitachi424(IRHitachiAc424 *ac,
-
288  const bool on, const stdAc::opmode_t mode,
-
289  const float degrees, const stdAc::fanspeed_t fan,
-
290  const stdAc::swingv_t swingv);
-
291 #endif // SEND_HITACHI_AC424
-
292 #if SEND_KELVINATOR
-
293  void kelvinator(IRKelvinatorAC *ac,
-
294  const bool on, const stdAc::opmode_t mode,
-
295  const float degrees, const stdAc::fanspeed_t fan,
-
296  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
297  const bool quiet, const bool turbo, const bool light,
-
298  const bool filter, const bool clean);
-
299 #endif // SEND_KELVINATOR
-
300 #if SEND_LG
-
301  void lg(IRLgAc *ac, const lg_ac_remote_model_t model,
-
302  const bool on, const stdAc::opmode_t mode,
-
303  const float degrees, const stdAc::fanspeed_t fan);
-
304 #endif // SEND_LG
-
305 #if SEND_MIDEA
-
306  void midea(IRMideaAC *ac,
-
307  const bool on, const stdAc::opmode_t mode, const bool celsius,
-
308  const float degrees, const stdAc::fanspeed_t fan,
-
309  const stdAc::swingv_t swingv, const bool turbo, const bool econo,
-
310  const bool light, const int16_t sleep = -1);
-
311 #endif // SEND_MIDEA
-
312 #if SEND_MITSUBISHI_AC
-
313  void mitsubishi(IRMitsubishiAC *ac,
-
314  const bool on, const stdAc::opmode_t mode,
-
315  const float degrees,
-
316  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
317  const stdAc::swingh_t swingh,
-
318  const bool quiet, const int16_t clock = -1);
-
319 #endif // SEND_MITSUBISHI_AC
-
320 #if SEND_MITSUBISHI112
- -
322  const bool on, const stdAc::opmode_t mode,
-
323  const float degrees, const stdAc::fanspeed_t fan,
-
324  const stdAc::swingv_t swingv,
-
325  const stdAc::swingh_t swingh,
-
326  const bool quiet);
-
327 #endif // SEND_MITSUBISHI112
-
328 #if SEND_MITSUBISHI136
- -
330  const bool on, const stdAc::opmode_t mode,
-
331  const float degrees, const stdAc::fanspeed_t fan,
-
332  const stdAc::swingv_t swingv, const bool quiet);
-
333 #endif // SEND_MITSUBISHI136
-
334 #if SEND_MITSUBISHIHEAVY
- -
336  const bool on, const stdAc::opmode_t mode,
-
337  const float degrees, const stdAc::fanspeed_t fan,
-
338  const stdAc::swingv_t swingv,
-
339  const stdAc::swingh_t swingh,
-
340  const bool turbo, const bool econo, const bool clean);
- -
342  const bool on, const stdAc::opmode_t mode,
-
343  const float degrees, const stdAc::fanspeed_t fan,
-
344  const stdAc::swingv_t swingv,
-
345  const stdAc::swingh_t swingh,
-
346  const bool quiet, const bool turbo, const bool econo,
-
347  const bool filter, const bool clean,
-
348  const int16_t sleep = -1);
-
349 #endif // SEND_MITSUBISHIHEAVY
-
350 #if SEND_NEOCLIMA
-
351  void neoclima(IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode,
-
352  const bool celsius, const float degrees,
-
353  const stdAc::fanspeed_t fan,
-
354  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
355  const bool turbo, const bool econo, const bool light,
-
356  const bool filter, const int16_t sleep = -1);
-
357 #endif // SEND_NEOCLIMA
-
358 #if SEND_PANASONIC_AC
- -
360  const bool on, const stdAc::opmode_t mode, const float degrees,
-
361  const stdAc::fanspeed_t fan,
-
362  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
363  const bool quiet, const bool turbo, const bool filter,
-
364  const int16_t clock = -1);
-
365 #endif // SEND_PANASONIC_AC
-
366 #if SEND_PANASONIC_AC32
-
367  void panasonic32(IRPanasonicAc32 *ac,
-
368  const bool on, const stdAc::opmode_t mode,
-
369  const float degrees, const stdAc::fanspeed_t fan,
-
370  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh);
-
371 #endif // SEND_PANASONIC_AC32
-
372 #if SEND_SAMSUNG_AC
-
373  void samsung(IRSamsungAc *ac,
-
374  const bool on, const stdAc::opmode_t mode, const float degrees,
-
375  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
376  const bool quiet, const bool turbo, const bool light,
-
377  const bool filter, const bool clean,
-
378  const bool beep, const bool prevpower = true,
-
379  const bool forcepower = true);
-
380 #endif // SEND_SAMSUNG_AC
-
381 #if SEND_SANYO_AC
-
382  void sanyo(IRSanyoAc *ac,
-
383  const bool on, const stdAc::opmode_t mode, const float degrees,
-
384  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
385  const bool beep, const int16_t sleep = -1);
-
386 #endif // SEND_SANYO_AC
-
387 #if SEND_SHARP_AC
-
388  void sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model,
-
389  const bool on, const bool prev_power, const stdAc::opmode_t mode,
-
390  const float degrees, const stdAc::fanspeed_t fan,
-
391  const stdAc::swingv_t swingv, const bool turbo, const bool light,
-
392  const bool filter, const bool clean);
-
393 #endif // SEND_SHARP_AC
-
394 #if SEND_TCL112AC
-
395  void tcl112(IRTcl112Ac *ac,
-
396  const bool on, const stdAc::opmode_t mode, const float degrees,
-
397  const stdAc::fanspeed_t fan,
-
398  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
399  const bool turbo, const bool light, const bool econo,
-
400  const bool filter);
-
401 #endif // SEND_TCL112AC
-
402 #if SEND_TECHNIBEL_AC
-
403  void technibel(IRTechnibelAc *ac,
-
404  const bool on, const stdAc::opmode_t mode, const bool celsius,
-
405  const float degrees, const stdAc::fanspeed_t fan,
-
406  const stdAc::swingv_t swingv, const int16_t sleep = -1);
-
407 #endif // SEND_TECHNIBEL_AC
-
408 #if SEND_TECO
-
409  void teco(IRTecoAc *ac,
-
410  const bool on, const stdAc::opmode_t mode, const float degrees,
-
411  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
412  const bool light, const int16_t sleep = -1);
-
413 #endif // SEND_TECO
-
414 #if SEND_TOSHIBA_AC
-
415  void toshiba(IRToshibaAC *ac,
-
416  const bool on, const stdAc::opmode_t mode, const float degrees,
-
417  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
418  const bool turbo, const bool econo);
-
419 #endif // SEND_TOSHIBA_AC
-
420 #if SEND_TROTEC
-
421  void trotec(IRTrotecESP *ac,
-
422  const bool on, const stdAc::opmode_t mode, const float degrees,
-
423  const stdAc::fanspeed_t fan, const int16_t sleep = -1);
-
424 #endif // SEND_TROTEC
-
425 #if SEND_TRUMA
-
426  void truma(IRTrumaAc *ac,
-
427  const bool on, const stdAc::opmode_t mode, const float degrees,
-
428  const stdAc::fanspeed_t fan, const bool quiet);
-
429 #endif // SEND_TRUMA
-
430 #if SEND_VESTEL_AC
-
431  void vestel(IRVestelAc *ac,
-
432  const bool on, const stdAc::opmode_t mode, const float degrees,
-
433  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
434  const bool turbo, const bool filter,
-
435  const int16_t sleep = -1, const int16_t clock = -1,
-
436  const bool sendNormal = true);
-
437 #endif // SEND_VESTEL_AC
-
438 #if SEND_VOLTAS
-
439  void voltas(IRVoltas *ac, const voltas_ac_remote_model_t model,
-
440  const bool on, const stdAc::opmode_t mode,
-
441  const float degrees, const stdAc::fanspeed_t fan,
-
442  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh,
-
443  const bool turbo, const bool econo, const bool light,
-
444  const int16_t sleep = -1);
-
445 #endif // SEND_VOLTAS
-
446 #if SEND_WHIRLPOOL_AC
- -
448  const bool on, const stdAc::opmode_t mode, const float degrees,
-
449  const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv,
-
450  const bool turbo, const bool light,
-
451  const int16_t sleep = -1, const int16_t clock = -1);
-
452 #endif // SEND_WHIRLPOOL_AC
-
453 #if SEND_TRANSCOLD
-
454  void transcold(IRTranscoldAc *ac,
-
455  const bool on, const stdAc::opmode_t mode, const float degrees,
-
456  const stdAc::fanspeed_t fan,
-
457  const stdAc::swingv_t swingv, const stdAc::swingh_t swingh);
-
458 #endif // SEND_TRANSCOLD
-
459 static stdAc::state_t cleanState(const stdAc::state_t state);
-
460 static stdAc::state_t handleToggles(const stdAc::state_t desired,
-
461  const stdAc::state_t *prev = NULL);
-
462 }; // IRac class
-
463 
-
465 namespace IRAcUtils {
-
466  String resultAcToString(const decode_results * const results);
-
467  bool decodeToState(const decode_results *decode, stdAc::state_t *result,
-
468  const stdAc::state_t *prev = NULL);
-
469 } // namespace IRAcUtils
-
470 #endif // IRAC_H_
-
-
Class for handling detailed Panasonic A/C messages.
Definition: ir_Panasonic.h:100
-
void airwell(IRAirwellAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
Send an Airwell A/C message with the supplied settings.
Definition: IRac.cpp:310
-
Support for Kelvinator A/C protocols.
-
Class for handling detailed Samsung A/C messages.
Definition: ir_Samsung.h:130
-
void hitachi(IRHitachiAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Hitachi A/C message with the supplied settings.
Definition: IRac.cpp:1121
-
Class for handling detailed Toshiba A/C messages.
Definition: ir_Toshiba.h:121
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
stdAc::state_t getStatePrev(void)
Get the previous internal A/C climate state that should have already been sent to the device....
Definition: IRac.cpp:135
-
stdAc::state_t getState(void)
Get the current internal A/C climate state.
Definition: IRac.cpp:130
-
Class for handling detailed Mitsubishi Heavy 152-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:184
-
static stdAc::swingh_t strToSwingH(const char *str, const stdAc::swingh_t def=stdAc::swingh_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2944
-
void sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool filter, const bool clean)
Send a Sharp A/C message with the supplied settings.
Definition: IRac.cpp:1775
-
void hitachi344(IRHitachiAc344 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Hitachi 344-bit A/C message with the supplied settings.
Definition: IRac.cpp:1197
- -
Support for Electra A/C protocols.
-
void ecoclim(IREcoclimAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1, const int16_t clock=-1)
Send an EcoClim A/C message with the supplied settings.
Definition: IRac.cpp:822
-
void markAsSent(void)
Update the previous state to the current one.
Definition: IRac.cpp:2807
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.
-
void daikin2(IRDaikin2 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool econo, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin2 A/C message with the supplied settings.
Definition: IRac.cpp:699
-
Support for Trotec protocols.
-
void sanyo(IRSanyoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep=-1)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1731
-
Class for handling detailed Daikin 280-bit A/C messages.
Definition: ir_Daikin.h:658
-
void lg(IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
Send a LG A/C message with the supplied settings.
Definition: IRac.cpp:1303
-
Class for handling detailed Delonghi A/C messages.
Definition: ir_Delonghi.h:73
-
Class for handling detailed Corona A/C messages.
Definition: ir_Corona.h:107
-
void kelvinator(IRKelvinatorAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean)
Send a Kelvinator A/C message with the supplied settings.
Definition: IRac.cpp:1269
-
Class for handling detailed Daikin 312-bit A/C messages.
Definition: ir_Daikin.h:740
-
void fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
Send a Fujitsu A/C message with the supplied settings.
Definition: IRac.cpp:907
-
Support for Neoclima protocols. Analysis by crankyoldgit & AndreyShpilevoy.
-
Class for handling detailed Daikin 128-bit A/C messages.
Definition: ir_Daikin.h:1001
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
Support for Sharp protocols.
-
static String fanspeedToString(const stdAc::fanspeed_t speed)
Convert the supplied fan speed enum into the appropriate String.
Definition: IRac.cpp:3094
-
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition: IRsend.h:170
-
Carrier A/C.
-
void whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1, const int16_t clock=-1)
Send a Whirlpool A/C message with the supplied settings.
Definition: IRac.cpp:2117
-
Results returned from the decoder.
Definition: IRrecv.h:92
-
void daikin64(IRDaikin64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin 64-bit A/C message with the supplied settings.
Definition: IRac.cpp:768
-
void voltas(IRVoltas *ac, const voltas_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
Send a Voltas A/C message with the supplied settings.
Definition: IRac.cpp:2076
-
void tcl112(IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool econo, const bool filter)
Send a TCL 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1828
-
void transcold(IRTranscoldAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Transcold A/C message with the supplied settings.
Definition: IRac.cpp:2154
-
bool sendAc(void)
Send an A/C message based soley on our internal state.
Definition: IRac.cpp:2813
-
static bool cmpStates(const stdAc::state_t a, const stdAc::state_t b)
Compare two AirCon states.
Definition: IRac.cpp:2824
-
Support for Midea protocols. Midea added by crankyoldgit & bwze.
-
Support for Daikin A/C protocols.
-
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:134
-
Class for handling detailed Daikin 64-bit A/C messages.
Definition: ir_Daikin.h:1131
-
Support for Coolix A/C protocols.
-
void vestel(IRVestelAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1, const int16_t clock=-1, const bool sendNormal=true)
Send a Vestel A/C message with the supplied settings.
Definition: IRac.cpp:2034
-
Class for handling detailed Hitachi 53-byte/424-bit A/C messages.
Definition: ir_Hitachi.h:371
-
void daikin(IRDaikinESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool clean)
Send a Daikin A/C message with the supplied settings.
Definition: IRac.cpp:535
-
IRac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: IRac.cpp:56
-
Class for handling detailed Daikin 216-bit A/C messages.
Definition: ir_Daikin.h:836
-
Class for handling detailed Voltas A/C messages.
Definition: ir_Voltas.h:90
-
hitachi_ac1_remote_model_t
HITACHI_AC1 A/C model numbers.
Definition: IRsend.h:140
-
void samsung(IRSamsungAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean, const bool beep, const bool prevpower=true, const bool forcepower=true)
Send a Samsung A/C message with the supplied settings.
Definition: IRac.cpp:1690
-
void daikin128(IRDaikin128 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool econo, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin 128-bit A/C message with the supplied settings.
Definition: IRac.cpp:575
-
Class for handling detailed Hitachi 224-bit A/C messages.
Definition: ir_Hitachi.h:246
-
const int8_t kGpioUnused
A placeholder for not using an actual GPIO.
Definition: IRac.h:47
-
Common functions for use with all A/Cs supported by the IRac class.
Definition: IRac.cpp:3163
-
Class for handling detailed Sanyo A/C messages.
Definition: ir_Sanyo.h:106
-
void haier(IRHaierAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool filter, const int16_t sleep=-1, const int16_t clock=-1)
Send a Haier A/C message with the supplied settings.
Definition: IRac.cpp:1052
-
Class for handling detailed Whirlpool A/C messages.
Definition: ir_Whirlpool.h:132
-
Class for handling detailed Hitachi 344-bit A/C messages.
Definition: ir_Hitachi.h:459
-
static String boolToString(const bool value)
Convert the supplied boolean into the appropriate String.
Definition: IRac.cpp:3065
-
stdAc::state_t next
The state we want the device to be in after we send.
Definition: IRac.h:99
-
std::string String
Definition: IRremoteESP8266.h:1217
-
Class for handling detailed Mitsubishi 144-bit A/C messages.
Definition: ir_Mitsubishi.h:242
-
void trotec(IRTrotecESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1)
Send a Trotec A/C message with the supplied settings.
Definition: IRac.cpp:1966
-
static int16_t strToModel(const char *str, const int16_t def=-1)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2984
-
Class for handling detailed Amcor A/C messages.
Definition: ir_Amcor.h:90
-
Class for handling detailed Mitsubishi 122-bit A/C messages.
Definition: ir_Mitsubishi.h:362
-
EcoClim A/C protocol.
-
Class for handling detailed TCL A/C messages.
Definition: ir_Tcl.h:89
-
void daikin176(IRDaikin176 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingh_t swingh)
Send a Daikin 176-bit A/C message with the supplied settings.
Definition: IRac.cpp:667
-
Class for handling detailed Electra A/C messages.
Definition: ir_Electra.h:98
-
Support for TCL protocols.
-
bool hasStateChanged(void)
Check if the internal state has changed from what was previously sent.
Definition: IRac.cpp:2836
-
void haierYrwo2(IRHaierACYRW02 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1)
Send a Haier YRWO2 A/C message with the supplied settings.
Definition: IRac.cpp:1089
-
void daikin216(IRDaikin216 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo)
Send a Daikin 216-bit A/C message with the supplied settings.
Definition: IRac.cpp:738
-
Support for Transcold A/C protocols.
-
Support for Hitachi A/C protocols.
-
Support for Panasonic protocols.
-
static stdAc::state_t handleToggles(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)
Create a new state base on desired & previous states but handle any state changes for options that ne...
Definition: IRac.cpp:2203
-
Class for handling detailed Mitsubishi 136-bit A/C messages.
Definition: ir_Mitsubishi.h:308
-
panasonic_ac_remote_model_t
Panasonic A/C model numbers.
Definition: IRsend.h:146
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
void mitsubishi112(IRMitsubishi112 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet)
Send a Mitsubishi 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1415
-
bool decodeToState(const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
Convert a valid IR A/C remote message that we understand enough into a Common A/C state.
Definition: IRac.cpp:3549
-
Class for handling detailed Hitachi 104-bit A/C messages.
Definition: ir_Hitachi.h:303
-
void hitachi424(IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
Send a Hitachi 424-bit A/C message with the supplied settings.
Definition: IRac.cpp:1231
-
Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRre...
-
String resultAcToString(const decode_results *const result)
Display the human readable state of an A/C message if we can.
Definition: IRac.cpp:3169
-
void daikin152(IRDaikin152 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool econo)
Send a Daikin 152-bit A/C message with the supplied settings.
Definition: IRac.cpp:612
-
fujitsu_ac_remote_model_t
Fujitsu A/C model numbers.
Definition: IRsend.h:120
-
Support for Gree A/C protocols.
-
Class for handling detailed Carrier 64 bit A/C messages.
Definition: ir_Carrier.h:84
-
Class for handling detailed Midea A/C messages.
Definition: ir_Midea.h:151
-
Class for handling detailed Kelvinator A/C messages.
Definition: ir_Kelvinator.h:121
-
bool _inverted
IR LED is lit when GPIO is LOW (true) or HIGH (false)?
Definition: IRac.h:105
-
Class for handling detailed Fujitsu A/C messages.
Definition: ir_Fujitsu.h:169
-
Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR r...
-
Class for handling detailed Coolix A/C messages.
Definition: ir_Coolix.h:112
-
void midea(IRMideaAC *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
Send a Midea A/C message with the supplied settings.
Definition: IRac.cpp:1340
-
void panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool filter, const int16_t clock=-1)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1612
-
static String swingvToString(const stdAc::swingv_t swingv)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3116
-
Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github....
-
A universal/common/generic interface for controling supported A/Cs.
Definition: IRac.h:51
-
Support for Teco protocols.
-
void gree(IRGreeAC *ac, const gree_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
Send a Gree A/C message with the supplied settings.
Definition: IRac.cpp:1014
-
Delonghi A/C.
-
void electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool lighttoggle, const bool clean)
Send an Electra A/C message with the supplied settings.
Definition: IRac.cpp:864
-
static stdAc::state_t cleanState(const stdAc::state_t state)
Create a new state base on the provided state that has been suitably fixed.
Definition: IRac.cpp:2190
-
Support for Argo Ulisse 13 DCI Mobile Split ACs.
-
void mitsubishi(IRMitsubishiAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const int16_t clock=-1)
Send a Mitsubishi A/C message with the supplied settings.
Definition: IRac.cpp:1378
-
void amcor(IRAmcorAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
Send an Amcor A/C message with the supplied settings.
Definition: IRac.cpp:338
-
Class for handling detailed Technibel A/C messages.
Definition: ir_Technibel.h:77
-
Class for handling detailed EcoClim A/C 56 bit messages.
Definition: ir_Ecoclim.h:84
-
Class for handling detailed Airwell A/C messages.
Definition: ir_Airwell.h:60
-
Support for Voltas A/C protocol.
-
Class for handling detailed Daikin 152-bit A/C messages.
Definition: ir_Daikin.h:1071
-
Class for handling detailed LG A/C messages.
Definition: ir_LG.h:67
-
Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham.
-
Class for handling detailed Haier A/C messages.
Definition: ir_Haier.h:244
-
void neoclima(IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const bool filter, const int16_t sleep=-1)
Send a Neoclima A/C message with the supplied settings.
Definition: IRac.cpp:1571
-
Class for handling detailed Daikin 160-bit A/C messages.
Definition: ir_Daikin.h:892
-
static String opmodeToString(const stdAc::opmode_t mode)
Convert the supplied operation mode into the appropriate String.
Definition: IRac.cpp:3072
-
Class for handling detailed Sharp A/C messages.
Definition: ir_Sharp.h:137
-
void toshiba(IRToshibaAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1930
-
Support for Goodweather compatible HVAC protocols.
-
void argo(IRArgoAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const int16_t sleep=-1)
Send an Argo A/C message with the supplied settings.
Definition: IRac.cpp:370
-
lg_ac_remote_model_t
LG A/C model numbers.
Definition: IRsend.h:176
-
void mitsubishi136(IRMitsubishi136 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet)
Send a Mitsubishi 136-bit A/C message with the supplied settings.
Definition: IRac.cpp:1451
- -
bool _modulation
Is frequency modulation to be used?
Definition: IRac.h:106
-
void teco(IRTecoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool light, const int16_t sleep=-1)
Send a Teco A/C message with the supplied settings.
Definition: IRac.cpp:1897
-
static stdAc::opmode_t strToOpmode(const char *str, const stdAc::opmode_t def=stdAc::opmode_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2842
-
Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B origina...
-
void hitachi1(IRHitachiAc1 *ac, const hitachi_ac1_remote_model_t model, const bool on, const bool power_toggle, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool swing_toggle, const int16_t sleep=-1)
Send a Hitachi1 A/C message with the supplied settings.
Definition: IRac.cpp:1158
-
Class for handling detailed Transcold A/C messages.
Definition: ir_Transcold.h:120
- -
void panasonic32(IRPanasonicAc32 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1648
-
Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.
-
static bool strToBool(const char *str, const bool def=false)
Convert the supplied str into the appropriate boolean value.
Definition: IRac.cpp:3047
-
void mitsubishiHeavy88(IRMitsubishiHeavy88Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool clean)
Send a Mitsubishi Heavy 88-bit A/C message with the supplied settings.
Definition: IRac.cpp:1486
-
static stdAc::swingv_t strToSwingV(const char *str, const stdAc::swingv_t def=stdAc::swingv_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2903
-
Class for handling detailed Vestel A/C messages.
Definition: ir_Vestel.h:100
-
Class for handling detailed Panasonic 32bit A/C messages.
Definition: ir_Panasonic.h:219
-
Class for handling detailed Trotec A/C messages.
Definition: ir_Trotec.h:91
-
Support for Truma protocol.
-
Class for handling detailed Teco A/C messages.
Definition: ir_Teco.h:62
-
void truma(IRTrumaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const bool quiet)
Send a Truma A/C message with the supplied settings.
Definition: IRac.cpp:1997
-
static String swinghToString(const stdAc::swingh_t swingh)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3140
-
Class for handling detailed Truma A/C messages.
Definition: ir_Truma.h:69
-
Support for Technibel protocol.
-
void delonghiac(IRDelonghiAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const bool turbo, const int16_t sleep=-1)
Send a Delonghi A/C message with the supplied settings.
Definition: IRac.cpp:798
-
stdAc::state_t _prev
The state we expect the device to currently be in.
Definition: IRac.h:107
-
Class for handling detailed Haier ACYRW02 A/C messages.
Definition: ir_Haier.h:314
-
void daikin160(IRDaikin160 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
Send a Daikin 160-bit A/C message with the supplied settings.
Definition: IRac.cpp:645
-
void corona(IRCoronaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool econo)
Send a Corona A/C message with the supplied settings.
Definition: IRac.cpp:500
-
static void initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)
Initialise the given state with the supplied settings.
Definition: IRac.cpp:87
-
void mitsubishiHeavy152(IRMitsubishiHeavy152Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
Send a Mitsubishi Heavy 152-bit A/C message with the supplied settings.
Definition: IRac.cpp:1527
- -
Support for Haier A/C protocols. The specifics of reverse engineering the protocols details:
-
Class for handling detailed Mitsubishi Heavy 88-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:271
-
Class for handling detailed Gree A/C messages.
Definition: ir_Gree.h:133
-
void coolix(IRCoolixAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
Send a Coolix A/C message with the supplied settings.
Definition: IRac.cpp:439
-
static stdAc::fanspeed_t strToFanspeed(const char *str, const stdAc::fanspeed_t def=stdAc::fanspeed_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2872
-
Support for Toshiba protocols.
-
void goodweather(IRGoodweatherAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1)
Send a Goodweather A/C message with the supplied settings.
Definition: IRac.cpp:972
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
Class for handling detailed Goodweather A/C messages.
Definition: ir_Goodweather.h:100
-
Support for Vestel protocols. Vestel added by Erdem U. Altinyurt.
- -
Class for handling detailed Argo A/C messages.
Definition: ir_Argo.h:127
-
Class for handling detailed Neoclima A/C messages.
Definition: ir_Neoclima.h:120
-
static bool isProtocolSupported(const decode_type_t protocol)
Is the given protocol supported by the IRac class?
Definition: IRac.cpp:140
-
Class for handling detailed Daikin 176-bit A/C messages.
Definition: ir_Daikin.h:944
-
Amcor A/C protocol.
-
uint16_t _pin
The GPIO to use to transmit messages from.
Definition: IRac.h:104
-
void technibel(IRTechnibelAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
Send a Technibel A/C message with the supplied settings.
Definition: IRac.cpp:1864
-
voltas_ac_remote_model_t
Voltas A/C model numbers.
Definition: IRsend.h:164
-
sharp_ac_remote_model_t
Sharp A/C model numbers.
Definition: IRsend.h:157
-
Support for LG protocols.
-
void carrier64(IRCarrierAc64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
Send a Carrier 64-bit A/C message with the supplied settings.
Definition: IRac.cpp:402
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8cpp.html deleted file mode 100644 index 301916911..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8cpp.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRrecv.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRrecv.cpp File Reference
-
-
- - - - -

-Namespaces

 _IRrecv
 
- - - -

-Typedefs

typedef struct hw_timer_s hw_timer_t
 
- - - - - - - -

-Variables

portMUX_TYPE _IRrecv::mux = portMUX_INITIALIZER_UNLOCKED
 
volatile irparams_t _IRrecv::params
 
irparams_t_IRrecv::params_save
 
-

Typedef Documentation

- -

◆ hw_timer_t

- -
-
- - - - -
typedef struct hw_timer_s hw_timer_t
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h.html deleted file mode 100644 index 726b05484..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRrecv.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRrecv.h File Reference
-
-
- -

Go to the source code of this file.

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

-Classes

struct  irparams_t
 Information for the interrupt handler. More...
 
struct  match_result_t
 Results from a data match. More...
 
class  decode_results
 Results returned from the decoder. More...
 
class  IRrecv
 Class for receiving IR messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kHeader = 2
 
const uint16_t kFooter = 2
 
const uint16_t kStartOffset = 1
 
const uint16_t kMarkExcess = 50
 
const uint16_t kRawBuf = 100
 
const uint64_t kRepeat = UINT64_MAX
 
const uint16_t kUnknownThreshold = 6
 
const uint8_t kIdleState = 2
 
const uint8_t kMarkState = 3
 
const uint8_t kSpaceState = 4
 
const uint8_t kStopState = 5
 
const uint8_t kTolerance = 25
 
const uint8_t kUseDefTol = 255
 
const uint16_t kRawTick = 2
 
const uint8_t kTimeoutMs = 15
 
const uint16_t kMaxTimeoutMs = kRawTick * (UINT16_MAX / MS_TO_USEC(1))
 
const uint32_t kFnvPrime32 = 16777619UL
 
const uint32_t kFnvBasis32 = 2166136261UL
 
const uint8_t kDefaultESP32Timer = 3
 
const uint16_t kStateSizeMax = kHitachiAc2StateLength
 
-

Variable Documentation

- -

◆ kDefaultESP32Timer

- -
-
- - - - -
const uint8_t kDefaultESP32Timer = 3
-
- -
-
- -

◆ kFnvBasis32

- -
-
- - - - -
const uint32_t kFnvBasis32 = 2166136261UL
-
- -
-
- -

◆ kFnvPrime32

- -
-
- - - - -
const uint32_t kFnvPrime32 = 16777619UL
-
- -
-
- -

◆ kFooter

- -
-
- - - - -
const uint16_t kFooter = 2
-
- -
-
- -

◆ kHeader

- -
-
- - - - -
const uint16_t kHeader = 2
-
- -
-
- -

◆ kIdleState

- -
-
- - - - -
const uint8_t kIdleState = 2
-
- -
-
- -

◆ kMarkExcess

- -
-
- - - - -
const uint16_t kMarkExcess = 50
-
- -
-
- -

◆ kMarkState

- -
-
- - - - -
const uint8_t kMarkState = 3
-
- -
-
- -

◆ kMaxTimeoutMs

- -
-
- - - - -
const uint16_t kMaxTimeoutMs = kRawTick * (UINT16_MAX / MS_TO_USEC(1))
-
- -
-
- -

◆ kRawBuf

- -
-
- - - - -
const uint16_t kRawBuf = 100
-
- -
-
- -

◆ kRawTick

- -
-
- - - - -
const uint16_t kRawTick = 2
-
- -
-
- -

◆ kRepeat

- -
-
- - - - -
const uint64_t kRepeat = UINT64_MAX
-
- -
-
- -

◆ kSpaceState

- -
-
- - - - -
const uint8_t kSpaceState = 4
-
- -
-
- -

◆ kStartOffset

- -
-
- - - - -
const uint16_t kStartOffset = 1
-
- -
-
- -

◆ kStateSizeMax

- -
-
- - - - -
const uint16_t kStateSizeMax = kHitachiAc2StateLength
-
- -
-
- -

◆ kStopState

- -
-
- - - - -
const uint8_t kStopState = 5
-
- -
-
- -

◆ kTimeoutMs

- -
-
- - - - -
const uint8_t kTimeoutMs = 15
-
- -
-
- -

◆ kTolerance

- -
-
- - - - -
const uint8_t kTolerance = 25
-
- -
-
- -

◆ kUnknownThreshold

- -
-
- - - - -
const uint16_t kUnknownThreshold = 6
-
- -
-
- -

◆ kUseDefTol

- -
-
- - - - -
const uint8_t kUseDefTol = 255
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h_source.html deleted file mode 100644 index 04597ab38..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRrecv_8h_source.html +++ /dev/null @@ -1,1070 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRrecv.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRrecv.h
-
-
-Go to the documentation of this file.
1 // Copyright 2009 Ken Shirriff
-
2 // Copyright 2015 Mark Szabo
-
3 // Copyright 2015 Sebastien Warin
-
4 // Copyright 2017 David Conran
-
5 
-
6 #ifndef IRRECV_H_
-
7 #define IRRECV_H_
-
8 
-
9 #ifndef UNIT_TEST
-
10 #include <Arduino.h>
-
11 #endif
-
12 #include <stddef.h>
-
13 #define __STDC_LIMIT_MACROS
-
14 #include <stdint.h>
-
15 #include "IRremoteESP8266.h"
-
16 
-
17 // Constants
-
18 const uint16_t kHeader = 2; // Usual nr. of header entries.
-
19 const uint16_t kFooter = 2; // Usual nr. of footer (stop bits) entries.
-
20 const uint16_t kStartOffset = 1; // Usual rawbuf entry to start from.
-
21 #define MS_TO_USEC(x) (x * 1000U) // Convert milli-Seconds to micro-Seconds.
-
22 // Marks tend to be 100us too long, and spaces 100us too short
-
23 // when received due to sensor lag.
-
24 const uint16_t kMarkExcess = 50;
-
25 const uint16_t kRawBuf = 100; // Default length of raw capture buffer
-
26 const uint64_t kRepeat = UINT64_MAX;
-
27 // Default min size of reported UNKNOWN messages.
-
28 const uint16_t kUnknownThreshold = 6;
-
29 
-
30 // receiver states
-
31 const uint8_t kIdleState = 2;
-
32 const uint8_t kMarkState = 3;
-
33 const uint8_t kSpaceState = 4;
-
34 const uint8_t kStopState = 5;
-
35 const uint8_t kTolerance = 25; // default percent tolerance in measurements.
-
36 const uint8_t kUseDefTol = 255; // Indicate to use the class default tolerance.
-
37 const uint16_t kRawTick = 2; // Capture tick to uSec factor.
-
38 #define RAWTICK kRawTick // Deprecated. For legacy user code support only.
-
39 // How long (ms) before we give up wait for more data?
-
40 // Don't exceed kMaxTimeoutMs without a good reason.
-
41 // That is the capture buffers maximum value size. (UINT16_MAX / kRawTick)
-
42 // Typically messages/protocols tend to repeat around the 100ms timeframe,
-
43 // thus we should timeout before that to give us some time to try to decode
-
44 // before we need to start capturing a possible new message.
-
45 // Typically 15ms suits most applications. However, some protocols demand a
-
46 // higher value. e.g. 90ms for XMP-1 and some aircon units.
-
47 const uint8_t kTimeoutMs = 15; // In MilliSeconds.
-
48 #define TIMEOUT_MS kTimeoutMs // For legacy documentation.
-
49 const uint16_t kMaxTimeoutMs = kRawTick * (UINT16_MAX / MS_TO_USEC(1));
-
50 
-
51 // Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param
-
52 const uint32_t kFnvPrime32 = 16777619UL;
-
53 const uint32_t kFnvBasis32 = 2166136261UL;
-
54 
-
55 // Which of the ESP32 timers to use by default. (0-3)
-
56 const uint8_t kDefaultESP32Timer = 3;
-
57 
-
58 #if DECODE_AC
-
59 // Hitachi AC is the current largest state size.
- -
61 #else
-
62 // Just define something
-
63 const uint16_t kStateSizeMax = 0;
-
64 #endif
-
65 
-
66 // Types
-
67 
-
69 typedef struct {
-
70  uint8_t recvpin; // pin for IR data from detector
-
71  uint8_t rcvstate; // state machine
-
72  uint16_t timer; // state timer, counts 50uS ticks.
-
73  uint16_t bufsize; // max. nr. of entries in the capture buffer.
-
74  uint16_t *rawbuf; // raw data
-
75  // uint16_t is used for rawlen as it saves 3 bytes of iram in the interrupt
-
76  // handler. Don't ask why, I don't know. It just does.
-
77  uint16_t rawlen; // counter of entries in rawbuf.
-
78  uint8_t overflow; // Buffer overflow indicator.
-
79  uint8_t timeout; // Nr. of milliSeconds before we give up.
-
80 } irparams_t;
-
81 
-
83 typedef struct {
-
84  bool success; // Was the match successful?
-
85  uint64_t data; // The data found.
-
86  uint16_t used; // How many buffer positions were used.
- -
88 
-
89 // Classes
-
90 
- -
93  public:
-
94  decode_type_t decode_type; // NEC, SONY, RC5, UNKNOWN
-
95  // value, address, & command are all mutually exclusive with state.
-
96  // i.e. They MUST NOT be used at the same time as state, so we can use a union
-
97  // structure to save us a handful of valuable bytes of memory.
-
98  union {
-
99  struct {
-
100  uint64_t value; // Decoded value
-
101  uint32_t address; // Decoded device address.
-
102  uint32_t command; // Decoded command.
-
103  };
-
104  uint8_t state[kStateSizeMax]; // Multi-byte results.
-
105  };
-
106  uint16_t bits; // Number of bits in decoded value
-
107  volatile uint16_t *rawbuf; // Raw intervals in .5 us ticks
-
108  uint16_t rawlen; // Number of records in rawbuf.
-
109  bool overflow;
-
110  bool repeat; // Is the result a repeat code?
-
111 };
-
112 
-
114 class IRrecv {
-
115  public:
-
116 #if defined(ESP32)
-
117  explicit IRrecv(const uint16_t recvpin, const uint16_t bufsize = kRawBuf,
-
118  const uint8_t timeout = kTimeoutMs,
-
119  const bool save_buffer = false,
-
120  const uint8_t timer_num = kDefaultESP32Timer); // Constructor
-
121 #else // ESP32
-
122  explicit IRrecv(const uint16_t recvpin, const uint16_t bufsize = kRawBuf,
-
123  const uint8_t timeout = kTimeoutMs,
-
124  const bool save_buffer = false); // Constructor
-
125 #endif // ESP32
-
126  ~IRrecv(void); // Destructor
-
127  void setTolerance(const uint8_t percent = kTolerance);
-
128  uint8_t getTolerance(void);
-
129  bool decode(decode_results *results, irparams_t *save = NULL,
-
130  uint8_t max_skip = 0, uint16_t noise_floor = 0);
-
131  void enableIRIn(const bool pullup = false);
-
132  void disableIRIn(void);
-
133  void resume(void);
-
134  uint16_t getBufSize(void);
-
135 #if DECODE_HASH
-
136  void setUnknownThreshold(const uint16_t length);
-
137 #endif
-
138  bool match(const uint32_t measured, const uint32_t desired,
-
139  const uint8_t tolerance = kUseDefTol,
-
140  const uint16_t delta = 0);
-
141  bool matchMark(const uint32_t measured, const uint32_t desired,
-
142  const uint8_t tolerance = kUseDefTol,
-
143  const int16_t excess = kMarkExcess);
-
144  bool matchMarkRange(const uint32_t measured, const uint32_t desired,
-
145  const uint16_t range = 100,
-
146  const int16_t excess = kMarkExcess);
-
147  bool matchSpace(const uint32_t measured, const uint32_t desired,
-
148  const uint8_t tolerance = kUseDefTol,
-
149  const int16_t excess = kMarkExcess);
-
150  bool matchSpaceRange(const uint32_t measured, const uint32_t desired,
-
151  const uint16_t range = 100,
-
152  const int16_t excess = kMarkExcess);
-
153 #ifndef UNIT_TEST
-
154 
-
155  private:
-
156 #endif
- -
158  uint8_t _tolerance;
-
159 #if defined(ESP32)
-
160  uint8_t _timer_num;
-
161 #endif // defined(ESP32)
-
162 #if DECODE_HASH
- -
164 #endif
-
165  // These are called by decode
-
166  uint8_t _validTolerance(const uint8_t percentage);
-
167  void copyIrParams(volatile irparams_t *src, irparams_t *dst);
-
168  uint16_t compare(const uint16_t oldval, const uint16_t newval);
-
169  uint32_t ticksLow(const uint32_t usecs,
-
170  const uint8_t tolerance = kUseDefTol,
-
171  const uint16_t delta = 0);
-
172  uint32_t ticksHigh(const uint32_t usecs,
-
173  const uint8_t tolerance = kUseDefTol,
-
174  const uint16_t delta = 0);
-
175  bool matchAtLeast(const uint32_t measured, const uint32_t desired,
-
176  const uint8_t tolerance = kUseDefTol,
-
177  const uint16_t delta = 0);
-
178  uint16_t _matchGeneric(volatile uint16_t *data_ptr,
-
179  uint64_t *result_bits_ptr,
-
180  uint8_t *result_ptr,
-
181  const bool use_bits,
-
182  const uint16_t remaining,
-
183  const uint16_t required,
-
184  const uint16_t hdrmark,
-
185  const uint32_t hdrspace,
-
186  const uint16_t onemark,
-
187  const uint32_t onespace,
-
188  const uint16_t zeromark,
-
189  const uint32_t zerospace,
-
190  const uint16_t footermark,
-
191  const uint32_t footerspace,
-
192  const bool atleast = false,
-
193  const uint8_t tolerance = kUseDefTol,
-
194  const int16_t excess = kMarkExcess,
-
195  const bool MSBfirst = true);
-
196  match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits,
-
197  const uint16_t onemark, const uint32_t onespace,
-
198  const uint16_t zeromark, const uint32_t zerospace,
-
199  const uint8_t tolerance = kUseDefTol,
-
200  const int16_t excess = kMarkExcess,
-
201  const bool MSBfirst = true,
-
202  const bool expectlastspace = true);
-
203  uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr,
-
204  const uint16_t remaining, const uint16_t nbytes,
-
205  const uint16_t onemark, const uint32_t onespace,
-
206  const uint16_t zeromark, const uint32_t zerospace,
-
207  const uint8_t tolerance = kUseDefTol,
-
208  const int16_t excess = kMarkExcess,
-
209  const bool MSBfirst = true,
-
210  const bool expectlastspace = true);
-
211  uint16_t matchGeneric(volatile uint16_t *data_ptr,
-
212  uint64_t *result_ptr,
-
213  const uint16_t remaining, const uint16_t nbits,
-
214  const uint16_t hdrmark, const uint32_t hdrspace,
-
215  const uint16_t onemark, const uint32_t onespace,
-
216  const uint16_t zeromark, const uint32_t zerospace,
-
217  const uint16_t footermark, const uint32_t footerspace,
-
218  const bool atleast = false,
-
219  const uint8_t tolerance = kUseDefTol,
-
220  const int16_t excess = kMarkExcess,
-
221  const bool MSBfirst = true);
-
222  uint16_t matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr,
-
223  const uint16_t remaining, const uint16_t nbits,
-
224  const uint16_t hdrmark, const uint32_t hdrspace,
-
225  const uint16_t onemark, const uint32_t onespace,
-
226  const uint16_t zeromark, const uint32_t zerospace,
-
227  const uint16_t footermark,
-
228  const uint32_t footerspace,
-
229  const bool atleast = false,
-
230  const uint8_t tolerance = kUseDefTol,
-
231  const int16_t excess = kMarkExcess,
-
232  const bool MSBfirst = true);
-
233  uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr,
-
234  uint64_t *result_ptr,
-
235  const uint16_t remaining,
-
236  const uint16_t nbits,
-
237  const uint16_t hdrmark,
-
238  const uint32_t hdrspace,
-
239  const uint16_t one,
-
240  const uint32_t zero,
-
241  const uint16_t footermark,
-
242  const uint32_t footerspace,
-
243  const bool atleast = false,
-
244  const uint8_t tolerance = kUseDefTol,
-
245  const int16_t excess = kMarkExcess,
-
246  const bool MSBfirst = true);
-
247  uint16_t matchManchesterData(volatile const uint16_t *data_ptr,
-
248  uint64_t *result_ptr,
-
249  const uint16_t remaining,
-
250  const uint16_t nbits,
-
251  const uint16_t half_period,
-
252  const uint16_t starting_balance = 0,
-
253  const uint8_t tolerance = kUseDefTol,
-
254  const int16_t excess = kMarkExcess,
-
255  const bool MSBfirst = true,
-
256  const bool GEThomas = true);
-
257  uint16_t matchManchester(volatile const uint16_t *data_ptr,
-
258  uint64_t *result_ptr,
-
259  const uint16_t remaining,
-
260  const uint16_t nbits,
-
261  const uint16_t hdrmark,
-
262  const uint32_t hdrspace,
-
263  const uint16_t clock_period,
-
264  const uint16_t footermark,
-
265  const uint32_t footerspace,
-
266  const bool atleast = false,
-
267  const uint8_t tolerance = kUseDefTol,
-
268  const int16_t excess = kMarkExcess,
-
269  const bool MSBfirst = true,
-
270  const bool GEThomas = true);
-
271  void crudeNoiseFilter(decode_results *results, const uint16_t floor = 0);
-
272  bool decodeHash(decode_results *results);
-
273 #if DECODE_VOLTAS
-
274  bool decodeVoltas(decode_results *results,
-
275  uint16_t offset = kStartOffset,
-
276  const uint16_t nbits = kVoltasBits,
-
277  const bool strict = true);
-
278 #endif // DECODE_VOLTAS
-
279 #if (DECODE_NEC || DECODE_SHERWOOD || DECODE_AIWA_RC_T501 || DECODE_SANYO)
-
280  bool decodeNEC(decode_results *results, uint16_t offset = kStartOffset,
-
281  const uint16_t nbits = kNECBits, const bool strict = true);
-
282 #endif
-
283 #if DECODE_ARGO
-
284  bool decodeArgo(decode_results *results, uint16_t offset = kStartOffset,
-
285  const uint16_t nbits = kArgoBits, const bool strict = true);
-
286 #endif // DECODE_ARGO
-
287 #if DECODE_SONY
-
288  bool decodeSony(decode_results *results, uint16_t offset = kStartOffset,
-
289  const uint16_t nbits = kSonyMinBits,
-
290  const bool strict = false);
-
291 #endif
-
292 #if DECODE_SANYO
-
293  // DISABLED due to poor quality.
-
294  // bool decodeSanyo(decode_results *results, uint16_t offset = kStartOffset,
-
295  // uint16_t nbits = kSanyoSA8650BBits,
-
296  // bool strict = false);
-
297  bool decodeSanyoLC7461(decode_results *results,
-
298  uint16_t offset = kStartOffset,
-
299  const uint16_t nbits = kSanyoLC7461Bits,
-
300  const bool strict = true);
-
301 #endif
-
302 #if DECODE_SANYO_AC
-
303  bool decodeSanyoAc(decode_results *results,
-
304  uint16_t offset = kStartOffset,
-
305  const uint16_t nbits = kSanyoAcBits,
-
306  const bool strict = true);
-
307 #endif // DECODE_SANYO_AC
-
308 #if DECODE_MITSUBISHI
-
309  bool decodeMitsubishi(decode_results *results, uint16_t offset = kStartOffset,
-
310  const uint16_t nbits = kMitsubishiBits,
-
311  const bool strict = true);
-
312 #endif
-
313 #if DECODE_MITSUBISHI2
-
314  bool decodeMitsubishi2(decode_results *results,
-
315  uint16_t offset = kStartOffset,
-
316  const uint16_t nbits = kMitsubishiBits,
-
317  const bool strict = true);
-
318 #endif
-
319 #if DECODE_MITSUBISHI_AC
-
320  bool decodeMitsubishiAC(decode_results *results,
-
321  uint16_t offset = kStartOffset,
-
322  const uint16_t nbits = kMitsubishiACBits,
-
323  const bool strict = false);
-
324 #endif
-
325 #if DECODE_MITSUBISHI136
-
326  bool decodeMitsubishi136(decode_results *results,
-
327  uint16_t offset = kStartOffset,
-
328  const uint16_t nbits = kMitsubishi136Bits,
-
329  const bool strict = true);
-
330 #endif
-
331 #if DECODE_MITSUBISHI112
-
332  bool decodeMitsubishi112(decode_results *results,
-
333  uint16_t offset = kStartOffset,
-
334  const uint16_t nbits = kMitsubishi112Bits,
-
335  const bool strict = true);
-
336 #endif
-
337 #if DECODE_MITSUBISHIHEAVY
- -
339  uint16_t offset = kStartOffset,
-
340  const uint16_t nbits = kMitsubishiHeavy152Bits,
-
341  const bool strict = true);
-
342 #endif
-
343 #if (DECODE_RC5 || DECODE_RC6 || DECODE_LASERTAG || DECODE_MWM)
-
344  int16_t getRClevel(decode_results *results, uint16_t *offset, uint16_t *used,
-
345  uint16_t bitTime, const uint8_t tolerance = kUseDefTol,
-
346  const int16_t excess = kMarkExcess,
-
347  const uint16_t delta = 0, const uint8_t maxwidth = 3);
-
348 #endif
-
349 #if DECODE_RC5
-
350  bool decodeRC5(decode_results *results, uint16_t offset = kStartOffset,
-
351  const uint16_t nbits = kRC5XBits,
-
352  const bool strict = true);
-
353 #endif
-
354 #if DECODE_RC6
-
355  bool decodeRC6(decode_results *results, uint16_t offset = kStartOffset,
-
356  const uint16_t nbits = kRC6Mode0Bits,
-
357  const bool strict = false);
-
358 #endif
-
359 #if DECODE_RCMM
-
360  bool decodeRCMM(decode_results *results, uint16_t offset = kStartOffset,
-
361  const uint16_t nbits = kRCMMBits,
-
362  const bool strict = false);
-
363 #endif
-
364 #if (DECODE_PANASONIC || DECODE_DENON)
-
365  bool decodePanasonic(decode_results *results, uint16_t offset = kStartOffset,
-
366  const uint16_t nbits = kPanasonicBits,
-
367  const bool strict = false,
-
368  const uint32_t manufacturer = kPanasonicManufacturer);
-
369 #endif
-
370 #if DECODE_LG
-
371  bool decodeLG(decode_results *results, uint16_t offset = kStartOffset,
-
372  const uint16_t nbits = kLgBits,
-
373  const bool strict = false);
-
374 #endif
-
375 #if DECODE_INAX
-
376  bool decodeInax(decode_results *results, uint16_t offset = kStartOffset,
-
377  const uint16_t nbits = kInaxBits,
-
378  const bool strict = true);
-
379 #endif // DECODE_INAX
-
380 #if DECODE_JVC
-
381  bool decodeJVC(decode_results *results, uint16_t offset = kStartOffset,
-
382  const uint16_t nbits = kJvcBits,
-
383  const bool strict = true);
-
384 #endif
-
385 #if DECODE_SAMSUNG
-
386  bool decodeSAMSUNG(decode_results *results, uint16_t offset = kStartOffset,
-
387  const uint16_t nbits = kSamsungBits,
-
388  const bool strict = true);
-
389 #endif
-
390 #if DECODE_SAMSUNG
-
391  bool decodeSamsung36(decode_results *results, uint16_t offset = kStartOffset,
-
392  const uint16_t nbits = kSamsung36Bits,
-
393  const bool strict = true);
-
394 #endif
-
395 #if DECODE_SAMSUNG_AC
-
396  bool decodeSamsungAC(decode_results *results, uint16_t offset = kStartOffset,
-
397  const uint16_t nbits = kSamsungAcBits,
-
398  const bool strict = true);
-
399 #endif
-
400 #if DECODE_WHYNTER
-
401  bool decodeWhynter(decode_results *results, uint16_t offset = kStartOffset,
-
402  const uint16_t nbits = kWhynterBits,
-
403  const bool strict = true);
-
404 #endif
-
405 #if DECODE_COOLIX
-
406  bool decodeCOOLIX(decode_results *results, uint16_t offset = kStartOffset,
-
407  const uint16_t nbits = kCoolixBits,
-
408  const bool strict = true);
-
409 #endif
-
410 #if DECODE_DENON
-
411  bool decodeDenon(decode_results *results, uint16_t offset = kStartOffset,
-
412  const uint16_t nbits = kDenonBits,
-
413  const bool strict = true);
-
414 #endif
-
415 #if DECODE_DISH
-
416  bool decodeDISH(decode_results *results, uint16_t offset = kStartOffset,
-
417  const uint16_t nbits = kDishBits,
-
418  const bool strict = true);
-
419 #endif
-
420 #if (DECODE_SHARP || DECODE_DENON)
-
421  bool decodeSharp(decode_results *results, uint16_t offset = kStartOffset,
-
422  const uint16_t nbits = kSharpBits,
-
423  const bool strict = true, const bool expansion = true);
-
424 #endif
-
425 #if DECODE_SHARP_AC
-
426  bool decodeSharpAc(decode_results *results, uint16_t offset = kStartOffset,
-
427  const uint16_t nbits = kSharpAcBits,
-
428  const bool strict = true);
-
429 #endif
-
430 #if DECODE_AIWA_RC_T501
-
431  bool decodeAiwaRCT501(decode_results *results, uint16_t offset = kStartOffset,
-
432  const uint16_t nbits = kAiwaRcT501Bits,
-
433  const bool strict = true);
-
434 #endif
-
435 #if DECODE_NIKAI
-
436  bool decodeNikai(decode_results *results, uint16_t offset = kStartOffset,
-
437  const uint16_t nbits = kNikaiBits,
-
438  const bool strict = true);
-
439 #endif
-
440 #if DECODE_MAGIQUEST
-
441  bool decodeMagiQuest(decode_results *results, uint16_t offset = kStartOffset,
-
442  const uint16_t nbits = kMagiquestBits,
-
443  const bool strict = true);
-
444 #endif
-
445 #if DECODE_KELVINATOR
-
446  bool decodeKelvinator(decode_results *results, uint16_t offset = kStartOffset,
-
447  const uint16_t nbits = kKelvinatorBits,
-
448  const bool strict = true);
-
449 #endif
-
450 #if DECODE_DAIKIN
-
451  bool decodeDaikin(decode_results *results, uint16_t offset = kStartOffset,
-
452  const uint16_t nbits = kDaikinBits,
-
453  const bool strict = true);
-
454 #endif
-
455 #if DECODE_DAIKIN64
-
456  bool decodeDaikin64(decode_results *results, uint16_t offset = kStartOffset,
-
457  const uint16_t nbits = kDaikin64Bits,
-
458  const bool strict = true);
-
459 #endif // DECODE_DAIKIN64
-
460 #if DECODE_DAIKIN128
-
461  bool decodeDaikin128(decode_results *results, uint16_t offset = kStartOffset,
-
462  const uint16_t nbits = kDaikin128Bits,
-
463  const bool strict = true);
-
464 #endif // DECODE_DAIKIN128
-
465 #if DECODE_DAIKIN152
-
466  bool decodeDaikin152(decode_results *results, uint16_t offset = kStartOffset,
-
467  const uint16_t nbits = kDaikin152Bits,
-
468  const bool strict = true);
-
469 #endif // DECODE_DAIKIN152
-
470 #if DECODE_DAIKIN160
-
471  bool decodeDaikin160(decode_results *results, uint16_t offset = kStartOffset,
-
472  const uint16_t nbits = kDaikin160Bits,
-
473  const bool strict = true);
-
474 #endif // DECODE_DAIKIN160
-
475 #if DECODE_DAIKIN176
-
476  bool decodeDaikin176(decode_results *results, uint16_t offset = kStartOffset,
-
477  const uint16_t nbits = kDaikin176Bits,
-
478  const bool strict = true);
-
479 #endif // DECODE_DAIKIN176
-
480 #if DECODE_DAIKIN2
-
481  bool decodeDaikin2(decode_results *results, uint16_t offset = kStartOffset,
-
482  const uint16_t nbits = kDaikin2Bits,
-
483  const bool strict = true);
-
484 #endif
-
485 #if DECODE_DAIKIN216
-
486  bool decodeDaikin216(decode_results *results, uint16_t offset = kStartOffset,
-
487  const uint16_t nbits = kDaikin216Bits,
-
488  const bool strict = true);
-
489 #endif
-
490 #if DECODE_TOSHIBA_AC
-
491  bool decodeToshibaAC(decode_results *results, uint16_t offset = kStartOffset,
-
492  const uint16_t nbits = kToshibaACBits,
-
493  const bool strict = true);
-
494 #endif
-
495 #if DECODE_TROTEC
-
496  bool decodeTrotec(decode_results *results, uint16_t offset = kStartOffset,
-
497  const uint16_t nbits = kTrotecBits,
-
498  const bool strict = true);
-
499 #endif // DECODE_TROTEC
-
500 #if DECODE_MIDEA
-
501  bool decodeMidea(decode_results *results, uint16_t offset = kStartOffset,
-
502  const uint16_t nbits = kMideaBits,
-
503  const bool strict = true);
-
504 #endif // DECODE_MIDEA
-
505 #if DECODE_MIDEA24
-
506  bool decodeMidea24(decode_results *results, uint16_t offset = kStartOffset,
-
507  const uint16_t nbits = kMidea24Bits,
-
508  const bool strict = true);
-
509 #endif // DECODE_MIDEA24
-
510 #if DECODE_FUJITSU_AC
-
511  bool decodeFujitsuAC(decode_results *results, uint16_t offset = kStartOffset,
-
512  const uint16_t nbits = kFujitsuAcBits,
-
513  const bool strict = false);
-
514 #endif
-
515 #if DECODE_LASERTAG
-
516  bool decodeLasertag(decode_results *results, uint16_t offset = kStartOffset,
-
517  const uint16_t nbits = kLasertagBits,
-
518  const bool strict = true);
-
519 #endif
-
520 #if DECODE_MILESTAG2
-
521  bool decodeMilestag2(decode_results *results, uint16_t offset = kStartOffset,
-
522  const uint16_t nbits = kMilesTag2ShotBits,
-
523  const bool strict = true);
-
524 #endif
-
525 #if DECODE_CARRIER_AC
-
526  bool decodeCarrierAC(decode_results *results, uint16_t offset = kStartOffset,
-
527  const uint16_t nbits = kCarrierAcBits,
-
528  const bool strict = true);
-
529 #endif // DECODE_CARRIER_AC
-
530 #if DECODE_CARRIER_AC40
-
531  bool decodeCarrierAC40(decode_results *results,
-
532  uint16_t offset = kStartOffset,
-
533  const uint16_t nbits = kCarrierAc40Bits,
-
534  const bool strict = true);
-
535 #endif // DECODE_CARRIER_AC40
-
536 #if DECODE_CARRIER_AC64
-
537  bool decodeCarrierAC64(decode_results *results,
-
538  uint16_t offset = kStartOffset,
-
539  const uint16_t nbits = kCarrierAc64Bits,
-
540  const bool strict = true);
-
541 #endif // DECODE_CARRIER_AC64
-
542 #if DECODE_GOODWEATHER
-
543  bool decodeGoodweather(decode_results *results,
-
544  uint16_t offset = kStartOffset,
-
545  const uint16_t nbits = kGoodweatherBits,
-
546  const bool strict = true);
-
547 #endif // DECODE_GOODWEATHER
-
548 #if DECODE_GREE
-
549  bool decodeGree(decode_results *results, uint16_t offset = kStartOffset,
-
550  const uint16_t nbits = kGreeBits,
-
551  const bool strict = true);
-
552 #endif
-
553 #if (DECODE_HAIER_AC | DECODE_HAIER_AC_YRW02)
-
554  bool decodeHaierAC(decode_results *results, uint16_t offset = kStartOffset,
-
555  const uint16_t nbits = kHaierACBits,
-
556  const bool strict = true);
-
557 #endif
-
558 #if DECODE_HAIER_AC_YRW02
-
559  bool decodeHaierACYRW02(decode_results *results,
-
560  uint16_t offset = kStartOffset,
-
561  const uint16_t nbits = kHaierACYRW02Bits,
-
562  const bool strict = true);
-
563 #endif
-
564 #if (DECODE_HITACHI_AC || DECODE_HITACHI_AC2 || DECODE_HITACHI_AC344)
-
565  bool decodeHitachiAC(decode_results *results, uint16_t offset = kStartOffset,
-
566  const uint16_t nbits = kHitachiAcBits,
-
567  const bool strict = true, const bool MSBfirst = true);
-
568 #endif
-
569 #if DECODE_HITACHI_AC1
-
570  bool decodeHitachiAC1(decode_results *results, uint16_t offset = kStartOffset,
-
571  const uint16_t nbits = kHitachiAc1Bits,
-
572  const bool strict = true);
-
573 #endif
-
574 #if DECODE_HITACHI_AC3
-
575  bool decodeHitachiAc3(decode_results *results,
-
576  uint16_t offset = kStartOffset,
-
577  const uint16_t nbits = kHitachiAc3Bits,
-
578  const bool strict = true);
-
579 #endif // DECODE_HITACHI_AC3
-
580 #if DECODE_HITACHI_AC424
-
581  bool decodeHitachiAc424(decode_results *results,
-
582  uint16_t offset = kStartOffset,
-
583  const uint16_t nbits = kHitachiAc424Bits,
-
584  const bool strict = true);
-
585 #endif // DECODE_HITACHI_AC424
-
586 #if DECODE_GICABLE
-
587  bool decodeGICable(decode_results *results, uint16_t offset = kStartOffset,
-
588  const uint16_t nbits = kGicableBits,
-
589  const bool strict = true);
-
590 #endif
-
591 #if DECODE_WHIRLPOOL_AC
-
592  bool decodeWhirlpoolAC(decode_results *results,
-
593  uint16_t offset = kStartOffset,
-
594  const uint16_t nbits = kWhirlpoolAcBits,
-
595  const bool strict = true);
-
596 #endif
-
597 #if DECODE_LUTRON
-
598  bool decodeLutron(decode_results *results, uint16_t offset = kStartOffset,
-
599  const uint16_t nbits = kLutronBits,
-
600  const bool strict = true);
-
601 #endif
-
602 #if DECODE_ELECTRA_AC
-
603  bool decodeElectraAC(decode_results *results, uint16_t offset = kStartOffset,
-
604  const uint16_t nbits = kElectraAcBits,
-
605  const bool strict = true);
-
606 #endif
-
607 #if DECODE_PANASONIC_AC
-
608  bool decodePanasonicAC(decode_results *results,
-
609  uint16_t offset = kStartOffset,
-
610  const uint16_t nbits = kPanasonicAcBits,
-
611  const bool strict = true);
-
612 #endif // DECODE_PANASONIC_AC
-
613 #if DECODE_PANASONIC_AC32
-
614  bool decodePanasonicAC32(decode_results *results,
-
615  uint16_t offset = kStartOffset,
-
616  const uint16_t nbits = kPanasonicAc32Bits,
-
617  const bool strict = true);
-
618 #endif // DECODE_PANASONIC_AC32
-
619 #if DECODE_PIONEER
-
620  bool decodePioneer(decode_results *results, uint16_t offset = kStartOffset,
-
621  const uint16_t nbits = kPioneerBits,
-
622  const bool strict = true);
-
623 #endif
-
624 #if DECODE_MWM
-
625  bool decodeMWM(decode_results *results, uint16_t offset = kStartOffset,
-
626  const uint16_t nbits = 24,
-
627  const bool strict = true);
-
628 #endif
-
629 #if DECODE_VESTEL_AC
-
630  bool decodeVestelAc(decode_results *results, uint16_t offset = kStartOffset,
-
631  const uint16_t nbits = kVestelAcBits,
-
632  const bool strict = true);
-
633 #endif
-
634 #if DECODE_TECO
-
635  bool decodeTeco(decode_results *results, uint16_t offset = kStartOffset,
-
636  const uint16_t nbits = kTecoBits,
-
637  const bool strict = false);
-
638 #endif
-
639 #if DECODE_LEGOPF
-
640  bool decodeLegoPf(decode_results *results, uint16_t offset = kStartOffset,
-
641  const uint16_t nbits = kLegoPfBits,
-
642  const bool strict = true);
-
643 #endif
-
644 #if DECODE_NEOCLIMA
-
645  bool decodeNeoclima(decode_results *results, uint16_t offset = kStartOffset,
-
646  const uint16_t nbits = kNeoclimaBits,
-
647  const bool strict = true);
-
648 #endif // DECODE_NEOCLIMA
-
649 #if DECODE_AMCOR
-
650  bool decodeAmcor(decode_results *results, uint16_t offset = kStartOffset,
-
651  const uint16_t nbits = kAmcorBits,
-
652  const bool strict = true);
-
653 #endif // DECODE_AMCOR
-
654 #if DECODE_EPSON
-
655  bool decodeEpson(decode_results *results, uint16_t offset = kStartOffset,
-
656  const uint16_t nbits = kEpsonBits,
-
657  const bool strict = true);
-
658 #endif // DECODE_EPSON
-
659 #if DECODE_SYMPHONY
-
660  bool decodeSymphony(decode_results *results, uint16_t offset = kStartOffset,
-
661  const uint16_t nbits = kSymphonyBits,
-
662  const bool strict = true);
-
663 #endif // DECODE_SYMPHONY
-
664 #if DECODE_AIRWELL
-
665  bool decodeAirwell(decode_results *results, uint16_t offset = kStartOffset,
-
666  const uint16_t nbits = kAirwellBits,
-
667  const bool strict = true);
-
668 #endif // DECODE_AIRWELL
-
669 #if DECODE_DELONGHI_AC
-
670  bool decodeDelonghiAc(decode_results *results, uint16_t offset = kStartOffset,
-
671  const uint16_t nbits = kDelonghiAcBits,
-
672  const bool strict = true);
-
673 #endif // DECODE_DELONGHI_AC
-
674 #if DECODE_DOSHISHA
-
675  bool decodeDoshisha(decode_results *results, uint16_t offset = kStartOffset,
-
676  const uint16_t nbits = kDoshishaBits,
-
677  const bool strict = true);
-
678 #endif // DECODE_DOSHISHA
-
679 #if DECODE_MULTIBRACKETS
-
680  bool decodeMultibrackets(decode_results *results,
-
681  uint16_t offset = kStartOffset,
-
682  const uint16_t nbits = kMultibracketsBits,
-
683  const bool strict = true);
-
684 #endif // DECODE_MULTIBRACKETS
-
685 #if DECODE_TECHNIBEL_AC
-
686  bool decodeTechnibelAc(decode_results *results,
-
687  uint16_t offset = kStartOffset,
-
688  const uint16_t nbits = kTechnibelAcBits,
-
689  const bool strict = true);
-
690 #endif // DECODE_TECHNIBEL_AC
-
691 #if DECODE_CORONA_AC
-
692  bool decodeCoronaAc(decode_results *results, uint16_t offset = kStartOffset,
-
693  const uint16_t nbits = kCoronaAcBitsShort,
-
694  const bool strict = true);
-
695 #endif // DECODE_CORONA_AC
-
696 #if DECODE_ZEPEAL
-
697  bool decodeZepeal(decode_results *results, uint16_t offset = kStartOffset,
-
698  const uint16_t nbits = kZepealBits,
-
699  const bool strict = true);
-
700 #endif // DECODE_ZEPEAL
-
701 #if DECODE_METZ
-
702  bool decodeMetz(decode_results *results, uint16_t offset = kStartOffset,
-
703  const uint16_t nbits = kMetzBits,
-
704  const bool strict = true);
-
705 #endif // DECODE_METZ
-
706 #if DECODE_TRANSCOLD
-
707  bool decodeTranscold(decode_results *results, uint16_t offset = kStartOffset,
-
708  const uint16_t nbits = kTranscoldBits,
-
709  const bool strict = true);
-
710 #endif // DECODE_TRANSCOLD
-
711 #if DECODE_MIRAGE
-
712  bool decodeMirage(decode_results *results,
-
713  uint16_t offset = kStartOffset,
-
714  const uint16_t nbits = kMirageBits,
-
715  const bool strict = true);
-
716 #endif // DECODE_MIRAGE
-
717 #if DECODE_ELITESCREENS
-
718  bool decodeElitescreens(decode_results *results,
-
719  uint16_t offset = kStartOffset,
-
720  const uint16_t nbits = kEliteScreensBits,
-
721  const bool strict = true);
-
722 #endif // DECODE_ELITESCREENS
-
723 #if DECODE_ECOCLIM
-
724  bool decodeEcoclim(decode_results *results, uint16_t offset = kStartOffset,
-
725  const uint16_t nbits = kEcoclimBits,
-
726  const bool strict = true);
-
727 #endif // DECODE_ECOCLIM
-
728 #if DECODE_XMP
-
729  bool decodeXmp(decode_results *results, uint16_t offset = kStartOffset,
-
730  const uint16_t nbits = kXmpBits, const bool strict = true);
-
731 #endif // DECODE_XMP
-
732 #if DECODE_TRUMA
-
733  bool decodeTruma(decode_results *results, uint16_t offset = kStartOffset,
-
734  const uint16_t nbits = kTrumaBits, const bool strict = true);
-
735 #endif // DECODE_TRUMA
-
736 };
-
737 
-
738 #endif // IRRECV_H_
-
-
bool decodeMultibrackets(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMultibracketsBits, const bool strict=true)
Decode the Multibrackets message. Status: BETA / Appears to be working.
Definition: ir_Multibrackets.cpp:59
-
uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbytes, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
Match & decode the typical data section of an IR message. The bytes are stored at result_ptr....
Definition: IRrecv.cpp:1332
-
const uint16_t kDelonghiAcBits
Definition: IRremoteESP8266.h:958
-
bool decodeMitsubishi(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:126
-
const uint16_t kMirageBits
Definition: IRremoteESP8266.h:1032
-
bool decodeHaierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACBits, const bool strict=true)
Decode the supplied Haier HSU07-HEA03 remote message. Status: STABLE / Known to be working.
Definition: ir_Haier.cpp:974
-
bool decodeNEC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNECBits, const bool strict=true)
Decode the supplied NEC (Renesas) message. Status: STABLE / Known good.
Definition: ir_NEC.cpp:81
-
const uint32_t kFnvPrime32
Definition: IRrecv.h:52
-
bool overflow
Definition: IRrecv.h:109
-
bool decodeDaikin128(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin128Bits, const bool strict=true)
Decode the supplied Daikin 128-bit message. (DAIKIN128) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3001
-
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:982
-
uint16_t matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1486
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
const uint16_t kCarrierAcBits
Definition: IRremoteESP8266.h:923
-
bool decodeTranscold(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTranscoldBits, const bool strict=true)
Decode the supplied Transcold A/C message. Status: STABLE / Known Working.
Definition: ir_Transcold.cpp:447
-
int16_t getRClevel(decode_results *results, uint16_t *offset, uint16_t *used, uint16_t bitTime, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const uint16_t delta=0, const uint8_t maxwidth=3)
Gets one undecoded level at a time from the raw buffer. The RC5/6 decoding is easier if the data is b...
Definition: ir_RC5_RC6.cpp:243
-
const uint16_t kMultibracketsBits
Definition: IRremoteESP8266.h:1053
-
const uint16_t kSharpAcBits
Definition: IRremoteESP8266.h:1094
-
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1126
-
bool decodeSanyoAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoAcBits, const bool strict=true)
Decode the supplied SanyoAc message. Status: STABLE / Reported as working.
Definition: ir_Sanyo.cpp:273
-
uint8_t overflow
Definition: IRrecv.h:78
-
bool decodeMitsubishi2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied second variation of a Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:191
-
bool decodeGree(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGreeBits, const bool strict=true)
Decode the supplied Gree HVAC message. Status: STABLE / Working.
Definition: ir_Gree.cpp:659
-
const uint16_t kAirwellBits
Definition: IRremoteESP8266.h:910
-
irparams_t * irparams_save
Definition: IRrecv.h:157
-
const uint16_t kMitsubishiACBits
Definition: IRremoteESP8266.h:1039
-
bool decodeFujitsuAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kFujitsuAcBits, const bool strict=false)
Decode the supplied Fujitsu AC IR message if possible. Status: STABLE / Working.
Definition: ir_Fujitsu.cpp:946
-
bool matchMarkRange(const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)
Check if we match a mark signal(measured) with the desired within a range (in uSeconds) either side o...
Definition: IRrecv.cpp:1155
-
const uint16_t kTechnibelAcBits
Definition: IRremoteESP8266.h:960
-
bool decodeTrotec(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrotecBits, const bool strict=true)
Decode the supplied Trotec message. Status: STABLE / Works. Untested on real devices.
Definition: ir_Trotec.cpp:307
-
bool decodeNeoclima(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNeoclimaBits, const bool strict=true)
Decode the supplied Neoclima message. Status: STABLE / Known working.
Definition: ir_Neoclima.cpp:571
-
const uint16_t kVoltasBits
Definition: IRremoteESP8266.h:1131
-
bool decodeMitsubishi112(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi112Bits, const bool strict=true)
Decode the supplied Mitsubishi/TCL 112-bit A/C message. (MITSUBISHI112, TCL112AC) Status: STABLE / Re...
Definition: ir_Mitsubishi.cpp:1243
-
bool decodeSamsungAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungAcBits, const bool strict=true)
Decode the supplied Samsung A/C message. Status: Stable / Known to be working.
Definition: ir_Samsung.cpp:772
-
bool decodeAirwell(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAirwellBits, const bool strict=true)
Decode the supplied Airwell "Manchester code" message.
Definition: ir_Airwell.cpp:53
-
const uint16_t kRC5XBits
Definition: IRremoteESP8266.h:1072
-
bool decodeMagiQuest(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMagiquestBits, const bool strict=true)
Decode the supplied MagiQuest message. Status: Beta / Should work.
Definition: ir_Magiquest.cpp:69
-
uint16_t rawlen
Definition: IRrecv.h:77
-
const uint8_t kUseDefTol
Definition: IRrecv.h:36
-
bool decodeDelonghiAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDelonghiAcBits, const bool strict=true)
Decode the supplied Delonghi A/C message. Status: STABLE / Expected to be working.
Definition: ir_Delonghi.cpp:58
-
Class for receiving IR messages.
Definition: IRrecv.h:114
-
uint16_t bufsize
Definition: IRrecv.h:73
-
Results returned from the decoder.
Definition: IRrecv.h:92
-
uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t one, const uint32_t zero, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical constant bit time <= 64bit IR message. The data is stored at result_...
Definition: IRrecv.cpp:1580
-
bool decodeCarrierAC64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc64Bits, const bool strict=true)
Decode the supplied Carrier 64-bit HVAC message. Status: STABLE / Known to be working.
Definition: ir_Carrier.cpp:195
-
const uint16_t kCoolixBits
Definition: IRremoteESP8266.h:921
-
bool decodeArgo(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kArgoBits, const bool strict=true)
Decode the supplied Argo message. Status: BETA / Probably works.
Definition: ir_Argo.cpp:445
-
const uint16_t kCoronaAcBitsShort
Definition: IRremoteESP8266.h:931
-
uint64_t data
Definition: IRrecv.h:85
-
const uint16_t kSamsung36Bits
Definition: IRremoteESP8266.h:1077
-
const uint16_t kMagiquestBits
Definition: IRremoteESP8266.h:1024
-
uint16_t * rawbuf
Definition: IRrecv.h:74
-
Information for the interrupt handler.
Definition: IRrecv.h:69
-
uint16_t getBufSize(void)
Obtain the maximum number of entries possible in the capture buffer. i.e. It's size.
Definition: IRrecv.cpp:412
-
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1088
-
bool repeat
Definition: IRrecv.h:110
-
bool decodeHitachiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAcBits, const bool strict=true, const bool MSBfirst=true)
Decode the supplied Hitachi A/C message. Status: STABLE / Expected to work.
Definition: ir_Hitachi.cpp:846
-
const uint16_t kTrotecBits
Definition: IRremoteESP8266.h:1120
-
bool decodeVestelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVestelAcBits, const bool strict=true)
Decode the supplied Vestel message. Status: Alpha / Needs testing against a real device.
Definition: ir_Vestel.cpp:537
-
const uint8_t kIdleState
Definition: IRrecv.h:31
-
bool decodeAmcor(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAmcorBits, const bool strict=true)
Decode the supplied Amcor HVAC message. Status: STABLE / Reported as working.
Definition: ir_Amcor.cpp:58
-
bool decodeDaikin(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikinBits, const bool strict=true)
Decode the supplied Daikin 280-bit message. (DAIKIN) Status: STABLE / Reported as working.
Definition: ir_Daikin.cpp:597
-
const uint16_t kEliteScreensBits
Definition: IRremoteESP8266.h:975
-
uint8_t recvpin
Definition: IRrecv.h:70
-
uint16_t timer
Definition: IRrecv.h:72
-
bool decodeDaikin64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin64Bits, const bool strict=true)
Decode the supplied Daikin 64-bit message. (DAIKIN64) Status: Beta / Probably Working.
Definition: ir_Daikin.cpp:3473
-
bool decodeMetz(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMetzBits, const bool strict=true)
Decode the supplied Metz message. Status: BETA / Probably works.
Definition: ir_Metz.cpp:67
-
bool success
Definition: IRrecv.h:84
-
bool decodeDaikin2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin2Bits, const bool strict=true)
Decode the supplied Daikin 312-bit message. (DAIKIN2) Status: STABLE / Works as expected.
Definition: ir_Daikin.cpp:1352
-
const uint16_t kElectraAcBits
Definition: IRremoteESP8266.h:973
-
bool matchSpace(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a space signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1174
-
const uint16_t kSonyMinBits
Definition: IRremoteESP8266.h:1101
-
const uint8_t kStopState
Definition: IRrecv.h:34
-
uint16_t rawlen
Definition: IRrecv.h:108
-
const uint16_t kMaxTimeoutMs
Definition: IRrecv.h:49
-
bool decodePanasonicAC32(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAc32Bits, const bool strict=true)
Decode the supplied Panasonic AC 32/16bit message. Status: STABLE / Confirmed working.
Definition: ir_Panasonic.cpp:980
-
const uint16_t kDaikin2Bits
Definition: IRremoteESP8266.h:939
-
bool decodePanasonic(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicBits, const bool strict=false, const uint32_t manufacturer=kPanasonicManufacturer)
Decode the supplied Panasonic message. Status: STABLE / Should be working.
Definition: ir_Panasonic.cpp:128
-
const uint16_t kHitachiAc1Bits
Definition: IRremoteESP8266.h:999
-
bool decodeElectraAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kElectraAcBits, const bool strict=true)
Decode the supplied Electra A/C message. Status: STABLE / Known working.
Definition: ir_Electra.cpp:370
-
bool decodeDaikin216(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin216Bits, const bool strict=true)
Decode the supplied Daikin 216-bit message. (DAIKIN216) Status: STABLE / Should be working.
Definition: ir_Daikin.cpp:1715
-
bool decodeDaikin152(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin152Bits, const bool strict=true)
Decode the supplied Daikin 152-bit message. (DAIKIN152) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3090
-
bool decodeElitescreens(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEliteScreensBits, const bool strict=true)
Decode the supplied Elite Screens message. Status: STABLE / Confirmed working.
Definition: ir_EliteScreens.cpp:63
-
bool decodeDenon(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDenonBits, const bool strict=true)
Decode the supplied Delonghi A/C message. Status: STABLE / Should work fine.
Definition: ir_Denon.cpp:70
-
const uint16_t kPanasonicBits
Definition: IRremoteESP8266.h:1060
-
const uint16_t kMilesTag2ShotBits
Definition: IRremoteESP8266.h:1133
-
decode_type_t decode_type
Definition: IRrecv.h:94
-
const uint16_t kPanasonicAcBits
Definition: IRremoteESP8266.h:1064
-
bool decodeTechnibelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTechnibelAcBits, const bool strict=true)
Status: STABLE / Reported as working on a real device.
Definition: ir_Technibel.cpp:54
-
const uint64_t kRepeat
Definition: IRrecv.h:26
-
void setTolerance(const uint8_t percent=kTolerance)
Set the base tolerance percentage for matching incoming IR messages.
Definition: IRrecv.cpp:425
-
const uint16_t kXmpBits
Definition: IRremoteESP8266.h:1128
-
bool decodeMidea(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMideaBits, const bool strict=true)
Decode the supplied Midea message. Status: Alpha / Needs testing against a real device.
Definition: ir_Midea.cpp:666
-
bool decodeVoltas(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVoltasBits, const bool strict=true)
Decode the supplied Voltas message. Status: STABLE / Working on real device.
Definition: ir_Voltas.cpp:61
-
const uint16_t kDaikin160Bits
Definition: IRremoteESP8266.h:944
-
void copyIrParams(volatile irparams_t *src, irparams_t *dst)
Make a copy of the interrupt state & buffer data. Needed because irparams is marked as volatile,...
Definition: IRrecv.cpp:388
-
bool decodeKelvinator(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kKelvinatorBits, const bool strict=true)
Decode the supplied Kelvinator message. Status: STABLE / Known working.
Definition: ir_Kelvinator.cpp:459
-
const uint16_t kGoodweatherBits
Definition: IRremoteESP8266.h:984
-
bool decodeMWM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=24, const bool strict=true)
Decode the supplied MWM message. Status: Implemented.
Definition: ir_MWM.cpp:81
-
void enableIRIn(const bool pullup=false)
Set up and (re)start the IR capture mechanism.
Definition: IRrecv.cpp:319
-
const uint16_t kDaikin152Bits
Definition: IRremoteESP8266.h:950
-
bool matchSpaceRange(const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)
Check if we match a space signal(measured) with the desired within a range (in uSeconds) either side ...
Definition: IRrecv.cpp:1194
-
bool decodePanasonicAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAcBits, const bool strict=true)
Decode the supplied Panasonic AC message. Status: STABLE / Works with real device(s).
Definition: ir_Panasonic.cpp:851
-
bool decodeDoshisha(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDoshishaBits, const bool strict=true)
Decode the supplied Doshisha message. Status: STABLE / Works on real device.
Definition: ir_Doshisha.cpp:85
-
bool decodeZepeal(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kZepealBits, const bool strict=true)
Decode the supplied Zepeal message. Status: STABLE / Works on real device.
Definition: ir_Zepeal.cpp:67
-
bool decodeDaikin160(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin160Bits, const bool strict=true)
Decode the supplied Daikin 160-bit message. (DAIKIN160) Status: STABLE / Confirmed working.
Definition: ir_Daikin.cpp:2080
-
bool decodeLasertag(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLasertagBits, const bool strict=true)
Decode the supplied Lasertag message. Status: BETA / Appears to be working 90% of the time.
Definition: ir_Lasertag.cpp:70
- -
const uint8_t kTimeoutMs
Definition: IRrecv.h:47
-
uint16_t _matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_bits_ptr, uint8_t *result_ptr, const bool use_bits, const uint16_t remaining, const uint16_t required, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical IR message. The data is stored in result_bits_ptr or result_bytes_pt...
Definition: IRrecv.cpp:1384
-
const uint8_t kMarkState
Definition: IRrecv.h:32
-
void setUnknownThreshold(const uint16_t length)
Set the minimum length we will consider for reporting UNKNOWN message types.
Definition: IRrecv.cpp:417
-
const uint16_t kSymphonyBits
Definition: IRremoteESP8266.h:1103
-
bool decodeMirage(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMirageBits, const bool strict=true)
Decode the supplied Mirage message. Status: STABLE / Reported as working.
Definition: ir_Mirage.cpp:50
-
const uint16_t kRC6Mode0Bits
Definition: IRremoteESP8266.h:1073
-
const uint16_t kStateSizeMax
Definition: IRrecv.h:60
-
Results from a data match.
Definition: IRrecv.h:83
-
uint8_t rcvstate
Definition: IRrecv.h:71
-
const uint16_t kMetzBits
Definition: IRremoteESP8266.h:1025
-
bool decodeRC6(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC6Mode0Bits, const bool strict=false)
Decode the supplied RC6 message. Status: Stable.
Definition: ir_RC5_RC6.cpp:383
-
bool decodeRC5(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC5XBits, const bool strict=true)
Decode the supplied RC-5/RC5X message. Status: RC-5 (stable), RC-5X (alpha)
Definition: ir_RC5_RC6.cpp:309
-
~IRrecv(void)
Class destructor Cleans up after the object is no longer needed. e.g. Frees up all memory used by the...
Definition: IRrecv.cpp:304
-
bool decodeHitachiAc3(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc3Bits, const bool strict=true)
Decode the supplied Hitachi 15to27-byte/120to216-bit A/C message. Status: STABLE / Works fine.
Definition: ir_Hitachi.cpp:1425
-
bool decodeWhynter(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhynterBits, const bool strict=true)
Decode the supplied Whynter message. Status: STABLE / Working. Strict mode is ALPHA.
Definition: ir_Whynter.cpp:74
-
bool decodeCarrierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAcBits, const bool strict=true)
Decode the supplied Carrier HVAC message.
Definition: ir_Carrier.cpp:82
-
const uint16_t kMitsubishiHeavy152Bits
Definition: IRremoteESP8266.h:1051
-
const uint16_t kDoshishaBits
Definition: IRremoteESP8266.h:967
-
const uint16_t kCarrierAc40Bits
Definition: IRremoteESP8266.h:925
-
const uint16_t kStartOffset
Definition: IRrecv.h:20
-
const uint16_t kAmcorBits
Definition: IRremoteESP8266.h:916
-
bool decodeRCMM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRCMMBits, const bool strict=false)
Decode a Philips RC-MM packet (between 12 & 32 bits) if possible. Status: STABLE / Should be working.
Definition: ir_RCMM.cpp:96
-
IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)
Class constructor Args:
Definition: IRrecv.cpp:243
-
bool decodeMitsubishi136(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi136Bits, const bool strict=true)
Decode the supplied Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: STABLE / Reported as work...
Definition: ir_Mitsubishi.cpp:869
-
volatile uint16_t * rawbuf
Definition: IRrecv.h:107
-
const uint8_t kTolerance
Definition: IRrecv.h:35
-
bool decodeSharp(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpBits, const bool strict=true, const bool expansion=true)
Decode the supplied Sharp message. Status: STABLE / Working fine.
Definition: ir_Sharp.cpp:155
-
uint16_t used
Definition: IRrecv.h:86
-
const uint32_t kPanasonicManufacturer
Definition: IRremoteESP8266.h:1061
-
uint32_t address
Definition: IRrecv.h:101
-
bool decodeNikai(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNikaiBits, const bool strict=true)
Decode the supplied Nikai message. Status: STABLE / Working.
Definition: ir_Nikai.cpp:52
-
const uint16_t kMitsubishiBits
Definition: IRremoteESP8266.h:1034
-
bool match(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) with the desired within +/-tolerance percent and/or +/- a fixed d...
Definition: IRrecv.cpp:1062
-
bool decodeSymphony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSymphonyBits, const bool strict=true)
Decode the supplied Symphony packet/message. Status: STABLE / Should be working.
Definition: ir_Symphony.cpp:60
-
bool decodeTruma(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrumaBits, const bool strict=true)
Decode the supplied Truma message. Status: STABLE / Confirmed working with real device.
Definition: ir_Truma.cpp:65
-
const uint16_t kSamsungAcBits
Definition: IRremoteESP8266.h:1079
-
const uint16_t kUnknownThreshold
Definition: IRrecv.h:28
-
const uint16_t kMideaBits
Definition: IRremoteESP8266.h:1027
-
bool decodeAiwaRCT501(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAiwaRcT501Bits, const bool strict=true)
Decode the supplied Aiwa RC T501 message. Status: BETA / Should work.
Definition: ir_Aiwa.cpp:61
-
const uint16_t kKelvinatorBits
Definition: IRremoteESP8266.h:1014
-
bool decodeGICable(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGicableBits, const bool strict=true)
Decode the supplied G.I. Cable message. Status: Alpha / Not tested against a real device.
Definition: ir_GICable.cpp:63
-
bool decodeTeco(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTecoBits, const bool strict=false)
Decode the supplied Teco message. Status: STABLE / Tested.
Definition: ir_Teco.cpp:353
-
bool decodeSanyoLC7461(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoLC7461Bits, const bool strict=true)
Decode the supplied SANYO LC7461 message. Status: BETA / Probably works.
Definition: ir_Sanyo.cpp:136
-
bool decodeCarrierAC40(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc40Bits, const bool strict=true)
Decode the supplied Carrier 40-bit HVAC message. Carrier HVAC messages contain only 40 bits,...
Definition: ir_Carrier.cpp:147
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1056
-
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:962
-
const uint16_t kHaierACBits
Definition: IRremoteESP8266.h:990
-
bool matchAtLeast(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) of at least desired within tolerance percent and/or a fixed delta...
Definition: IRrecv.cpp:1093
-
const uint16_t kZepealBits
Definition: IRremoteESP8266.h:1129
-
const uint16_t kMidea24Bits
Definition: IRremoteESP8266.h:1029
-
bool decodeDaikin176(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin176Bits, const bool strict=true)
Decode the supplied Daikin 176-bit message. (DAIKIN176) Status: STABLE / Expected to work.
Definition: ir_Daikin.cpp:2472
-
const uint16_t kNeoclimaBits
Definition: IRremoteESP8266.h:1058
-
const uint16_t kWhirlpoolAcBits
Definition: IRremoteESP8266.h:1124
-
bool decodeSharpAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpAcBits, const bool strict=true)
Decode the supplied Sharp A/C message. Status: STABLE / Known working.
Definition: ir_Sharp.cpp:855
-
bool decodeJVC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kJvcBits, const bool strict=true)
Decode the supplied JVC message. Status: Stable / Known working.
Definition: ir_JVC.cpp:94
-
bool decodeEcoclim(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEcoclimBits, const bool strict=true)
Decode the supplied EcoClim A/C message. Status: STABLE / Confirmed working on real remote.
Definition: ir_Ecoclim.cpp:68
-
bool decodeMitsubishiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiACBits, const bool strict=false)
Decode the supplied Mitsubish 144-bit A/C message. Status: BETA / Probably works.
Definition: ir_Mitsubishi.cpp:257
-
const uint16_t kCarrierAc64Bits
Definition: IRremoteESP8266.h:927
-
const uint16_t kPioneerBits
Definition: IRremoteESP8266.h:1068
-
uint16_t bits
Definition: IRrecv.h:106
-
const uint16_t kGreeBits
Definition: IRremoteESP8266.h:987
-
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:1012
-
const uint16_t kLasertagBits
Definition: IRremoteESP8266.h:1016
-
const uint16_t kDaikin128Bits
Definition: IRremoteESP8266.h:947
-
const uint16_t kAiwaRcT501Bits
Definition: IRremoteESP8266.h:912
-
uint32_t ticksLow(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the lower bound of the nr. of ticks.
Definition: IRrecv.cpp:1036
-
const uint16_t kTrumaBits
Definition: IRremoteESP8266.h:1122
-
const uint16_t kTecoBits
Definition: IRremoteESP8266.h:1108
-
bool decodeEpson(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEpsonBits, const bool strict=true)
Decode the supplied Epson message. Status: Beta / Probably works.
Definition: ir_Epson.cpp:45
-
const uint16_t kToshibaACBits
Definition: IRremoteESP8266.h:1111
-
bool decodeSony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSonyMinBits, const bool strict=false)
Decode the supplied Sony/SIRC message. Status: STABLE / Should be working. strict mode is ALPHA / Unt...
Definition: ir_Sony.cpp:121
-
const uint16_t kDaikinBits
Definition: IRremoteESP8266.h:934
-
bool matchMark(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a mark signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1135
-
const uint16_t kHitachiAcBits
Definition: IRremoteESP8266.h:996
-
const uint16_t kHitachiAc3Bits
Definition: IRremoteESP8266.h:1003
-
const uint16_t kRawBuf
Definition: IRrecv.h:25
-
bool decode(decode_results *results, irparams_t *save=NULL, uint8_t max_skip=0, uint16_t noise_floor=0)
Decodes the received IR message. If the interrupt state is saved, we will immediately resume waiting ...
Definition: IRrecv.cpp:502
-
bool decodePioneer(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPioneerBits, const bool strict=true)
Decode the supplied Pioneer message. Status: STABLE / Should be working. (Self decodes & real example...
Definition: ir_Pioneer.cpp:92
-
uint8_t getTolerance(void)
Get the base tolerance percentage for matching incoming IR messages.
Definition: IRrecv.cpp:431
-
const uint16_t kDishBits
Definition: IRremoteESP8266.h:965
-
uint16_t compare(const uint16_t oldval, const uint16_t newval)
Compare two tick values.
Definition: IRrecv.cpp:1212
-
uint32_t command
Definition: IRrecv.h:102
-
const uint16_t kFujitsuAcBits
Definition: IRremoteESP8266.h:980
-
uint64_t value
Definition: IRrecv.h:100
-
const uint16_t kArgoBits
Definition: IRremoteESP8266.h:919
-
const uint16_t kHitachiAc2StateLength
Definition: IRremoteESP8266.h:1000
-
bool decodeSamsung36(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsung36Bits, const bool strict=true)
Decode the supplied Samsung36 message. Status: STABLE / Expected to work.
Definition: ir_Samsung.cpp:192
-
const uint16_t kFooter
Definition: IRrecv.h:19
-
const uint16_t kNikaiBits
Definition: IRremoteESP8266.h:1055
-
const uint16_t kLutronBits
Definition: IRremoteESP8266.h:1023
-
bool decodeXmp(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kXmpBits, const bool strict=true)
Decode the supplied XMP packet/message. Status: BETA / Probably works.
Definition: ir_Xmp.cpp:160
-
uint8_t timeout
Definition: IRrecv.h:79
-
bool decodeCoronaAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoronaAcBitsShort, const bool strict=true)
Decode the supplied CoronaAc message. Status: STABLE / Appears to be working.
Definition: ir_Corona.cpp:88
-
bool decodeLutron(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLutronBits, const bool strict=true)
Decode the supplied Lutron message. Status: STABLE / Working.
Definition: ir_Lutron.cpp:65
-
bool decodeDISH(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDishBits, const bool strict=true)
Decode the supplied DISH NETWORK message. Status: ALPHA (untested and unconfirmed....
Definition: ir_Dish.cpp:77
-
const uint16_t kRawTick
Definition: IRrecv.h:37
-
uint16_t matchManchesterData(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code data (<= 64bits.
Definition: IRrecv.cpp:1774
-
void resume(void)
Resume collection of received IR data.
Definition: IRrecv.cpp:373
-
bool decodeMilestag2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMilesTag2ShotBits, const bool strict=true)
Decode the supplied MilesTag2 message. Status: ALPHA / Probably works but needs testing with a real d...
Definition: ir_MilesTag2.cpp:63
-
const uint16_t kEcoclimBits
Definition: IRremoteESP8266.h:968
-
const uint16_t kHaierACYRW02Bits
Definition: IRremoteESP8266.h:993
-
match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
Match & decode the typical data section of an IR message. The data value is stored in the least signi...
Definition: IRrecv.cpp:1271
-
const uint16_t kHitachiAc424Bits
Definition: IRremoteESP8266.h:1009
-
bool decodeWhirlpoolAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhirlpoolAcBits, const bool strict=true)
Decode the supplied Whirlpool A/C message. Status: STABLE / Working as intended.
Definition: ir_Whirlpool.cpp:607
-
const uint16_t kMarkExcess
Definition: IRrecv.h:24
-
bool decodeHaierACYRW02(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACYRW02Bits, const bool strict=true)
Decode the supplied Haier YR-W02 remote A/C message. Status: BETA / Appears to be working.
Definition: ir_Haier.cpp:1020
-
bool decodeLG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLgBits, const bool strict=false)
Decode the supplied LG message. Status: STABLE / Working.
Definition: ir_LG.cpp:139
-
bool decodeCOOLIX(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoolixBits, const bool strict=true)
Decode the supplied Coolix A/C message. Status: STABLE / Known Working.
Definition: ir_Coolix.cpp:628
-
const uint16_t kLegoPfBits
Definition: IRremoteESP8266.h:1018
-
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1092
-
bool decodeGoodweather(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGoodweatherBits, const bool strict=true)
Decode the supplied Goodweather message. Status: BETA / Probably works.
Definition: ir_Goodweather.cpp:424
-
uint8_t _tolerance
Definition: IRrecv.h:158
-
const uint8_t kDefaultESP32Timer
Definition: IRrecv.h:56
-
uint16_t matchManchester(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t clock_period, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1667
-
bool decodeInax(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kInaxBits, const bool strict=true)
Decode the supplied Inax Toilet message. Status: Stable / Known working.
Definition: ir_Inax.cpp:51
-
void crudeNoiseFilter(decode_results *results, const uint16_t floor=0)
Remove or merge pulses in the capture buffer that are too short.
Definition: IRrecv.cpp:438
-
bool decodeHitachiAC1(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc1Bits, const bool strict=true)
-
bool decodeSAMSUNG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungBits, const bool strict=true)
Decode the supplied Samsung 32-bit message. Status: STABLE.
Definition: ir_Samsung.cpp:118
-
bool decodeLegoPf(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLegoPfBits, const bool strict=true)
Decode the supplied LEGO Power Functions message. Status: STABLE / Appears to work.
Definition: ir_Lego.cpp:71
-
const uint16_t kRCMMBits
Definition: IRremoteESP8266.h:1075
-
const uint8_t kVestelAcBits
Definition: IRremoteESP8266.h:1127
-
const uint16_t kTranscoldBits
Definition: IRremoteESP8266.h:1117
-
const uint16_t kInaxBits
Definition: IRremoteESP8266.h:1010
-
bool decodeMitsubishiHeavy(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiHeavy152Bits, const bool strict=true)
Decode the supplied Mitsubishi Heavy Industries A/C message. Status: BETA / Appears to be working....
Definition: ir_MitsubishiHeavy.cpp:1003
-
uint16_t _unknown_threshold
Definition: IRrecv.h:163
-
const uint16_t kDaikin176Bits
Definition: IRremoteESP8266.h:953
-
bool decodeMidea24(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMidea24Bits, const bool strict=true)
Decode the supplied Midea24 message. Status: STABLE / Confirmed working on a real device.
Definition: ir_Midea.cpp:759
-
void disableIRIn(void)
Stop collection of any received IR data. Disable any timers and interrupts.
Definition: IRrecv.cpp:356
-
bool decodeHitachiAc424(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc424Bits, const bool strict=true)
Decode the supplied Hitachi 53-byte/424-bit A/C message. Status: STABLE / Reported as working.
Definition: ir_Hitachi.cpp:959
-
bool decodeToshibaAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kToshibaACBits, const bool strict=true)
Decode the supplied Toshiba A/C message. Status: STABLE / Working.
Definition: ir_Toshiba.cpp:493
-
uint32_t ticksHigh(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the upper bound of the nr. of ticks.
Definition: IRrecv.cpp:1049
-
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1076
-
uint8_t _timer_num
Definition: IRrecv.h:160
-
const uint16_t kDaikin64Bits
Definition: IRremoteESP8266.h:941
-
const uint16_t kPanasonicAc32Bits
Definition: IRremoteESP8266.h:1067
-
const uint16_t kDaikin216Bits
Definition: IRremoteESP8266.h:956
-
const uint16_t kMitsubishi136Bits
Definition: IRremoteESP8266.h:1042
-
const uint16_t kSanyoAcBits
Definition: IRremoteESP8266.h:1084
-
const uint16_t kMitsubishi112Bits
Definition: IRremoteESP8266.h:1045
-
const uint16_t kEpsonBits
Definition: IRremoteESP8266.h:970
-
uint8_t state[kStateSizeMax]
Definition: IRrecv.h:104
-
bool decodeHash(decode_results *results)
Decode any arbitrary IR message into a 32-bit code value. Instead of decoding using a standard encodi...
Definition: IRrecv.cpp:1233
-
const uint8_t kSpaceState
Definition: IRrecv.h:33
-
const uint16_t kLgBits
Definition: IRremoteESP8266.h:1020
-
uint8_t _validTolerance(const uint8_t percentage)
Convert the tolerance percentage into something valid.
Definition: IRrecv.cpp:1027
-
const uint16_t kHeader
Definition: IRrecv.h:18
-
const uint32_t kFnvBasis32
Definition: IRrecv.h:53
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h.html deleted file mode 100644 index c43d11c31..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h.html +++ /dev/null @@ -1,3974 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRremoteESP8266.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRremoteESP8266.h File Reference
-
-
- -

Go to the source code of this file.

- - - - -

-Typedefs

typedef std::string String
 
- - - - -

-Enumerations

enum  decode_type_t {
-  UNKNOWN = -1, -UNUSED = 0, -RC5, -RC6, -
-  NEC, -SONY, -PANASONIC, -JVC, -
-  SAMSUNG, -WHYNTER, -AIWA_RC_T501, -LG, -
-  SANYO, -MITSUBISHI, -DISH, -SHARP, -
-  COOLIX, -DAIKIN, -DENON, -KELVINATOR, -
-  SHERWOOD, -MITSUBISHI_AC, -RCMM, -SANYO_LC7461, -
-  RC5X, -GREE, -PRONTO, -NEC_LIKE, -
-  ARGO, -TROTEC, -NIKAI, -RAW, -
-  GLOBALCACHE, -TOSHIBA_AC, -FUJITSU_AC, -MIDEA, -
-  MAGIQUEST, -LASERTAG, -CARRIER_AC, -HAIER_AC, -
-  MITSUBISHI2, -HITACHI_AC, -HITACHI_AC1, -HITACHI_AC2, -
-  GICABLE, -HAIER_AC_YRW02, -WHIRLPOOL_AC, -SAMSUNG_AC, -
-  LUTRON, -ELECTRA_AC, -PANASONIC_AC, -PIONEER, -
-  LG2, -MWM, -DAIKIN2, -VESTEL_AC, -
-  TECO, -SAMSUNG36, -TCL112AC, -LEGOPF, -
-  MITSUBISHI_HEAVY_88, -MITSUBISHI_HEAVY_152, -DAIKIN216, -SHARP_AC, -
-  GOODWEATHER, -INAX, -DAIKIN160, -NEOCLIMA, -
-  DAIKIN176, -DAIKIN128, -AMCOR, -DAIKIN152, -
-  MITSUBISHI136, -MITSUBISHI112, -HITACHI_AC424, -SONY_38K, -
-  EPSON, -SYMPHONY, -HITACHI_AC3, -DAIKIN64, -
-  AIRWELL, -DELONGHI_AC, -DOSHISHA, -MULTIBRACKETS, -
-  CARRIER_AC40, -CARRIER_AC64, -HITACHI_AC344, -CORONA_AC, -
-  MIDEA24, -ZEPEAL, -SANYO_AC, -VOLTAS, -
-  METZ, -TRANSCOLD, -TECHNIBEL_AC, -MIRAGE, -
-  ELITESCREENS, -PANASONIC_AC32, -MILESTAG2, -ECOCLIM, -
-  XMP, -TRUMA, -kLastDecodeType = TRUMA -
- }
 Enumerator for defining and numbering of supported IR protocol. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kNoRepeat = 0
 
const uint16_t kSingleRepeat = 1
 
const uint16_t kAirwellBits = 34
 
const uint16_t kAirwellMinRepeats = 2
 
const uint16_t kAiwaRcT501Bits = 15
 
const uint16_t kAiwaRcT501MinRepeats = kSingleRepeat
 
const uint16_t kAlokaBits = 32
 
const uint16_t kAmcorStateLength = 8
 
const uint16_t kAmcorBits = kAmcorStateLength * 8
 
const uint16_t kAmcorDefaultRepeat = kSingleRepeat
 
const uint16_t kArgoStateLength = 12
 
const uint16_t kArgoBits = kArgoStateLength * 8
 
const uint16_t kArgoDefaultRepeat = kNoRepeat
 
const uint16_t kCoolixBits = 24
 
const uint16_t kCoolixDefaultRepeat = kSingleRepeat
 
const uint16_t kCarrierAcBits = 32
 
const uint16_t kCarrierAcMinRepeat = kNoRepeat
 
const uint16_t kCarrierAc40Bits = 40
 
const uint16_t kCarrierAc40MinRepeat = 2
 
const uint16_t kCarrierAc64Bits = 64
 
const uint16_t kCarrierAc64MinRepeat = kNoRepeat
 
const uint16_t kCoronaAcStateLengthShort = 7
 
const uint16_t kCoronaAcStateLength = kCoronaAcStateLengthShort * 3
 
const uint16_t kCoronaAcBitsShort = kCoronaAcStateLengthShort * 8
 
const uint16_t kCoronaAcBits = kCoronaAcStateLength * 8
 
const uint16_t kDaikinStateLength = 35
 
const uint16_t kDaikinBits = kDaikinStateLength * 8
 
const uint16_t kDaikinStateLengthShort = kDaikinStateLength - 8
 
const uint16_t kDaikinBitsShort = kDaikinStateLengthShort * 8
 
const uint16_t kDaikinDefaultRepeat = kNoRepeat
 
const uint16_t kDaikin2StateLength = 39
 
const uint16_t kDaikin2Bits = kDaikin2StateLength * 8
 
const uint16_t kDaikin2DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin64Bits = 64
 
const uint16_t kDaikin64DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin160StateLength = 20
 
const uint16_t kDaikin160Bits = kDaikin160StateLength * 8
 
const uint16_t kDaikin160DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin128StateLength = 16
 
const uint16_t kDaikin128Bits = kDaikin128StateLength * 8
 
const uint16_t kDaikin128DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin152StateLength = 19
 
const uint16_t kDaikin152Bits = kDaikin152StateLength * 8
 
const uint16_t kDaikin152DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin176StateLength = 22
 
const uint16_t kDaikin176Bits = kDaikin176StateLength * 8
 
const uint16_t kDaikin176DefaultRepeat = kNoRepeat
 
const uint16_t kDaikin216StateLength = 27
 
const uint16_t kDaikin216Bits = kDaikin216StateLength * 8
 
const uint16_t kDaikin216DefaultRepeat = kNoRepeat
 
const uint16_t kDelonghiAcBits = 64
 
const uint16_t kDelonghiAcDefaultRepeat = kNoRepeat
 
const uint16_t kTechnibelAcBits = 56
 
const uint16_t kTechnibelAcDefaultRepeat = kNoRepeat
 
const uint16_t kDenonBits = 15
 
const uint16_t kDenon48Bits = 48
 
const uint16_t kDenonLegacyBits = 14
 
const uint16_t kDishBits = 16
 
const uint16_t kDishMinRepeat = 3
 
const uint16_t kDoshishaBits = 40
 
const uint16_t kEcoclimBits = 56
 
const uint16_t kEcoclimShortBits = 15
 
const uint16_t kEpsonBits = 32
 
const uint16_t kEpsonMinRepeat = 2
 
const uint16_t kElectraAcStateLength = 13
 
const uint16_t kElectraAcBits = kElectraAcStateLength * 8
 
const uint16_t kElectraAcMinRepeat = kNoRepeat
 
const uint16_t kEliteScreensBits = 32
 
const uint16_t kEliteScreensDefaultRepeat = kSingleRepeat
 
const uint16_t kFujitsuAcMinRepeat = kNoRepeat
 
const uint16_t kFujitsuAcStateLength = 16
 
const uint16_t kFujitsuAcStateLengthShort = 7
 
const uint16_t kFujitsuAcBits = kFujitsuAcStateLength * 8
 
const uint16_t kFujitsuAcMinBits = (kFujitsuAcStateLengthShort - 1) * 8
 
const uint16_t kGicableBits = 16
 
const uint16_t kGicableMinRepeat = kSingleRepeat
 
const uint16_t kGoodweatherBits = 48
 
const uint16_t kGoodweatherMinRepeat = kNoRepeat
 
const uint16_t kGreeStateLength = 8
 
const uint16_t kGreeBits = kGreeStateLength * 8
 
const uint16_t kGreeDefaultRepeat = kNoRepeat
 
const uint16_t kHaierACStateLength = 9
 
const uint16_t kHaierACBits = kHaierACStateLength * 8
 
const uint16_t kHaierAcDefaultRepeat = kNoRepeat
 
const uint16_t kHaierACYRW02StateLength = 14
 
const uint16_t kHaierACYRW02Bits = kHaierACYRW02StateLength * 8
 
const uint16_t kHaierAcYrw02DefaultRepeat = kNoRepeat
 
const uint16_t kHitachiAcStateLength = 28
 
const uint16_t kHitachiAcBits = kHitachiAcStateLength * 8
 
const uint16_t kHitachiAcDefaultRepeat = kNoRepeat
 
const uint16_t kHitachiAc1StateLength = 13
 
const uint16_t kHitachiAc1Bits = kHitachiAc1StateLength * 8
 
const uint16_t kHitachiAc2StateLength = 53
 
const uint16_t kHitachiAc2Bits = kHitachiAc2StateLength * 8
 
const uint16_t kHitachiAc3StateLength = 27
 
const uint16_t kHitachiAc3Bits = kHitachiAc3StateLength * 8
 
const uint16_t kHitachiAc3MinStateLength = 15
 
const uint16_t kHitachiAc3MinBits = kHitachiAc3MinStateLength * 8
 
const uint16_t kHitachiAc344StateLength = 43
 
const uint16_t kHitachiAc344Bits = kHitachiAc344StateLength * 8
 
const uint16_t kHitachiAc424StateLength = 53
 
const uint16_t kHitachiAc424Bits = kHitachiAc424StateLength * 8
 
const uint16_t kInaxBits = 24
 
const uint16_t kInaxMinRepeat = kSingleRepeat
 
const uint16_t kJvcBits = 16
 
const uint16_t kKelvinatorStateLength = 16
 
const uint16_t kKelvinatorBits = kKelvinatorStateLength * 8
 
const uint16_t kKelvinatorDefaultRepeat = kNoRepeat
 
const uint16_t kLasertagBits = 13
 
const uint16_t kLasertagMinRepeat = kNoRepeat
 
const uint16_t kLegoPfBits = 16
 
const uint16_t kLegoPfMinRepeat = kNoRepeat
 
const uint16_t kLgBits = 28
 
const uint16_t kLg32Bits = 32
 
const uint16_t kLgDefaultRepeat = kNoRepeat
 
const uint16_t kLutronBits = 35
 
const uint16_t kMagiquestBits = 56
 
const uint16_t kMetzBits = 19
 
const uint16_t kMetzMinRepeat = kNoRepeat
 
const uint16_t kMideaBits = 48
 
const uint16_t kMideaMinRepeat = kNoRepeat
 
const uint16_t kMidea24Bits = 24
 
const uint16_t kMidea24MinRepeat = kSingleRepeat
 
const uint16_t kMirageStateLength = 15
 
const uint16_t kMirageBits = kMirageStateLength * 8
 
const uint16_t kMirageMinRepeat = kNoRepeat
 
const uint16_t kMitsubishiBits = 16
 
const uint16_t kMitsubishiMinRepeat = kSingleRepeat
 
const uint16_t kMitsubishiACStateLength = 18
 
const uint16_t kMitsubishiACBits = kMitsubishiACStateLength * 8
 
const uint16_t kMitsubishiACMinRepeat = kSingleRepeat
 
const uint16_t kMitsubishi136StateLength = 17
 
const uint16_t kMitsubishi136Bits = kMitsubishi136StateLength * 8
 
const uint16_t kMitsubishi136MinRepeat = kNoRepeat
 
const uint16_t kMitsubishi112StateLength = 14
 
const uint16_t kMitsubishi112Bits = kMitsubishi112StateLength * 8
 
const uint16_t kMitsubishi112MinRepeat = kNoRepeat
 
const uint16_t kMitsubishiHeavy88StateLength = 11
 
const uint16_t kMitsubishiHeavy88Bits = kMitsubishiHeavy88StateLength * 8
 
const uint16_t kMitsubishiHeavy88MinRepeat = kNoRepeat
 
const uint16_t kMitsubishiHeavy152StateLength = 19
 
const uint16_t kMitsubishiHeavy152Bits = kMitsubishiHeavy152StateLength * 8
 
const uint16_t kMitsubishiHeavy152MinRepeat = kNoRepeat
 
const uint16_t kMultibracketsBits = 8
 
const uint16_t kMultibracketsDefaultRepeat = kSingleRepeat
 
const uint16_t kNikaiBits = 24
 
const uint16_t kNECBits = 32
 
const uint16_t kNeoclimaStateLength = 12
 
const uint16_t kNeoclimaBits = kNeoclimaStateLength * 8
 
const uint16_t kNeoclimaMinRepeat = kNoRepeat
 
const uint16_t kPanasonicBits = 48
 
const uint32_t kPanasonicManufacturer = 0x4004
 
const uint16_t kPanasonicAcStateLength = 27
 
const uint16_t kPanasonicAcStateShortLength = 16
 
const uint16_t kPanasonicAcBits = kPanasonicAcStateLength * 8
 
const uint16_t kPanasonicAcShortBits = kPanasonicAcStateShortLength * 8
 
const uint16_t kPanasonicAcDefaultRepeat = kNoRepeat
 
const uint16_t kPanasonicAc32Bits = 32
 
const uint16_t kPioneerBits = 64
 
const uint16_t kProntoMinLength = 6
 
const uint16_t kRC5RawBits = 14
 
const uint16_t kRC5Bits = kRC5RawBits - 2
 
const uint16_t kRC5XBits = kRC5RawBits - 1
 
const uint16_t kRC6Mode0Bits = 20
 
const uint16_t kRC6_36Bits = 36
 
const uint16_t kRCMMBits = 24
 
const uint16_t kSamsungBits = 32
 
const uint16_t kSamsung36Bits = 36
 
const uint16_t kSamsungAcStateLength = 14
 
const uint16_t kSamsungAcBits = kSamsungAcStateLength * 8
 
const uint16_t kSamsungAcExtendedStateLength = 21
 
const uint16_t kSamsungAcExtendedBits = kSamsungAcExtendedStateLength * 8
 
const uint16_t kSamsungAcDefaultRepeat = kNoRepeat
 
const uint16_t kSanyoAcStateLength = 9
 
const uint16_t kSanyoAcBits = kSanyoAcStateLength * 8
 
const uint16_t kSanyoSA8650BBits = 12
 
const uint16_t kSanyoLC7461AddressBits = 13
 
const uint16_t kSanyoLC7461CommandBits = 8
 
const uint16_t kSanyoLC7461Bits
 
const uint8_t kSharpAddressBits = 5
 
const uint8_t kSharpCommandBits = 8
 
const uint16_t kSharpBits = kSharpAddressBits + kSharpCommandBits + 2
 
const uint16_t kSharpAcStateLength = 13
 
const uint16_t kSharpAcBits = kSharpAcStateLength * 8
 
const uint16_t kSharpAcDefaultRepeat = kNoRepeat
 
const uint8_t kSherwoodBits = kNECBits
 
const uint16_t kSherwoodMinRepeat = kSingleRepeat
 
const uint16_t kSony12Bits = 12
 
const uint16_t kSony15Bits = 15
 
const uint16_t kSony20Bits = 20
 
const uint16_t kSonyMinBits = 12
 
const uint16_t kSonyMinRepeat = 2
 
const uint16_t kSymphonyBits = 12
 
const uint16_t kSymphonyDefaultRepeat = 3
 
const uint16_t kTcl112AcStateLength = 14
 
const uint16_t kTcl112AcBits = kTcl112AcStateLength * 8
 
const uint16_t kTcl112AcDefaultRepeat = kNoRepeat
 
const uint16_t kTecoBits = 35
 
const uint16_t kTecoDefaultRepeat = kNoRepeat
 
const uint16_t kToshibaACStateLength = 9
 
const uint16_t kToshibaACBits = kToshibaACStateLength * 8
 
const uint16_t kToshibaACMinRepeat = kSingleRepeat
 
const uint16_t kToshibaACStateLengthShort = kToshibaACStateLength - 2
 
const uint16_t kToshibaACBitsShort = kToshibaACStateLengthShort * 8
 
const uint16_t kToshibaACStateLengthLong = kToshibaACStateLength + 1
 
const uint16_t kToshibaACBitsLong = kToshibaACStateLengthLong * 8
 
const uint16_t kTranscoldBits = 24
 
const uint16_t kTranscoldDefaultRepeat = kNoRepeat
 
const uint16_t kTrotecStateLength = 9
 
const uint16_t kTrotecBits = kTrotecStateLength * 8
 
const uint16_t kTrotecDefaultRepeat = kNoRepeat
 
const uint16_t kTrumaBits = 56
 
const uint16_t kWhirlpoolAcStateLength = 21
 
const uint16_t kWhirlpoolAcBits = kWhirlpoolAcStateLength * 8
 
const uint16_t kWhirlpoolAcDefaultRepeat = kNoRepeat
 
const uint16_t kWhynterBits = 32
 
const uint8_t kVestelAcBits = 56
 
const uint16_t kXmpBits = 64
 
const uint16_t kZepealBits = 16
 
const uint16_t kZepealMinRepeat = 4
 
const uint16_t kVoltasBits = 80
 
const uint16_t kVoltasStateLength = 10
 
const uint16_t kMilesTag2ShotBits = 14
 
const uint16_t kMilesTag2MsgBits = 24
 
const uint16_t kMilesMinRepeat = 0
 
-

Typedef Documentation

- -

◆ String

- -
-
- - - - -
typedef std::string String
-
- -
-
-

Enumeration Type Documentation

- -

◆ decode_type_t

- -
-
- - - - -
enum decode_type_t
-
- -

Enumerator for defining and numbering of supported IR protocol.

-
Note
Always add to the end of the list and should never remove entries or change order. Projects may save the type number for later usage so numbering should always stay the same.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Enumerator
UNKNOWN 
UNUSED 
RC5 
RC6 
NEC 
SONY 
PANASONIC 
JVC 
SAMSUNG 
WHYNTER 
AIWA_RC_T501 
LG 
SANYO 
MITSUBISHI 
DISH 
SHARP 
COOLIX 
DAIKIN 
DENON 
KELVINATOR 
SHERWOOD 
MITSUBISHI_AC 
RCMM 
SANYO_LC7461 
RC5X 
GREE 
PRONTO 
NEC_LIKE 
ARGO 
TROTEC 
NIKAI 
RAW 
GLOBALCACHE 
TOSHIBA_AC 
FUJITSU_AC 
MIDEA 
MAGIQUEST 
LASERTAG 
CARRIER_AC 
HAIER_AC 
MITSUBISHI2 
HITACHI_AC 
HITACHI_AC1 
HITACHI_AC2 
GICABLE 
HAIER_AC_YRW02 
WHIRLPOOL_AC 
SAMSUNG_AC 
LUTRON 
ELECTRA_AC 
PANASONIC_AC 
PIONEER 
LG2 
MWM 
DAIKIN2 
VESTEL_AC 
TECO 
SAMSUNG36 
TCL112AC 
LEGOPF 
MITSUBISHI_HEAVY_88 
MITSUBISHI_HEAVY_152 
DAIKIN216 
SHARP_AC 
GOODWEATHER 
INAX 
DAIKIN160 
NEOCLIMA 
DAIKIN176 
DAIKIN128 
AMCOR 
DAIKIN152 
MITSUBISHI136 
MITSUBISHI112 
HITACHI_AC424 
SONY_38K 
EPSON 
SYMPHONY 
HITACHI_AC3 
DAIKIN64 
AIRWELL 
DELONGHI_AC 
DOSHISHA 
MULTIBRACKETS 
CARRIER_AC40 
CARRIER_AC64 
HITACHI_AC344 
CORONA_AC 
MIDEA24 
ZEPEAL 
SANYO_AC 
VOLTAS 
METZ 
TRANSCOLD 
TECHNIBEL_AC 
MIRAGE 
ELITESCREENS 
PANASONIC_AC32 
MILESTAG2 
ECOCLIM 
XMP 
TRUMA 
kLastDecodeType 
- -
-
-

Variable Documentation

- -

◆ kAirwellBits

- -
-
- - - - -
const uint16_t kAirwellBits = 34
-
- -
-
- -

◆ kAirwellMinRepeats

- -
-
- - - - -
const uint16_t kAirwellMinRepeats = 2
-
- -
-
- -

◆ kAiwaRcT501Bits

- -
-
- - - - -
const uint16_t kAiwaRcT501Bits = 15
-
- -
-
- -

◆ kAiwaRcT501MinRepeats

- -
-
- - - - -
const uint16_t kAiwaRcT501MinRepeats = kSingleRepeat
-
- -
-
- -

◆ kAlokaBits

- -
-
- - - - -
const uint16_t kAlokaBits = 32
-
- -
-
- -

◆ kAmcorBits

- -
-
- - - - -
const uint16_t kAmcorBits = kAmcorStateLength * 8
-
- -
-
- -

◆ kAmcorDefaultRepeat

- -
-
- - - - -
const uint16_t kAmcorDefaultRepeat = kSingleRepeat
-
- -
-
- -

◆ kAmcorStateLength

- -
-
- - - - -
const uint16_t kAmcorStateLength = 8
-
- -
-
- -

◆ kArgoBits

- -
-
- - - - -
const uint16_t kArgoBits = kArgoStateLength * 8
-
- -
-
- -

◆ kArgoDefaultRepeat

- -
-
- - - - -
const uint16_t kArgoDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kArgoStateLength

- -
-
- - - - -
const uint16_t kArgoStateLength = 12
-
- -
-
- -

◆ kCarrierAc40Bits

- -
-
- - - - -
const uint16_t kCarrierAc40Bits = 40
-
- -
-
- -

◆ kCarrierAc40MinRepeat

- -
-
- - - - -
const uint16_t kCarrierAc40MinRepeat = 2
-
- -
-
- -

◆ kCarrierAc64Bits

- -
-
- - - - -
const uint16_t kCarrierAc64Bits = 64
-
- -
-
- -

◆ kCarrierAc64MinRepeat

- -
-
- - - - -
const uint16_t kCarrierAc64MinRepeat = kNoRepeat
-
- -
-
- -

◆ kCarrierAcBits

- -
-
- - - - -
const uint16_t kCarrierAcBits = 32
-
- -
-
- -

◆ kCarrierAcMinRepeat

- -
-
- - - - -
const uint16_t kCarrierAcMinRepeat = kNoRepeat
-
- -
-
- -

◆ kCoolixBits

- -
-
- - - - -
const uint16_t kCoolixBits = 24
-
- -
-
- -

◆ kCoolixDefaultRepeat

- -
-
- - - - -
const uint16_t kCoolixDefaultRepeat = kSingleRepeat
-
- -
-
- -

◆ kCoronaAcBits

- -
-
- - - - -
const uint16_t kCoronaAcBits = kCoronaAcStateLength * 8
-
- -
-
- -

◆ kCoronaAcBitsShort

- -
-
- - - - -
const uint16_t kCoronaAcBitsShort = kCoronaAcStateLengthShort * 8
-
- -
-
- -

◆ kCoronaAcStateLength

- -
-
- - - - -
const uint16_t kCoronaAcStateLength = kCoronaAcStateLengthShort * 3
-
- -
-
- -

◆ kCoronaAcStateLengthShort

- -
-
- - - - -
const uint16_t kCoronaAcStateLengthShort = 7
-
- -
-
- -

◆ kDaikin128Bits

- -
-
- - - - -
const uint16_t kDaikin128Bits = kDaikin128StateLength * 8
-
- -
-
- -

◆ kDaikin128DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin128DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin128StateLength

- -
-
- - - - -
const uint16_t kDaikin128StateLength = 16
-
- -
-
- -

◆ kDaikin152Bits

- -
-
- - - - -
const uint16_t kDaikin152Bits = kDaikin152StateLength * 8
-
- -
-
- -

◆ kDaikin152DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin152DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin152StateLength

- -
-
- - - - -
const uint16_t kDaikin152StateLength = 19
-
- -
-
- -

◆ kDaikin160Bits

- -
-
- - - - -
const uint16_t kDaikin160Bits = kDaikin160StateLength * 8
-
- -
-
- -

◆ kDaikin160DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin160DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin160StateLength

- -
-
- - - - -
const uint16_t kDaikin160StateLength = 20
-
- -
-
- -

◆ kDaikin176Bits

- -
-
- - - - -
const uint16_t kDaikin176Bits = kDaikin176StateLength * 8
-
- -
-
- -

◆ kDaikin176DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin176DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin176StateLength

- -
-
- - - - -
const uint16_t kDaikin176StateLength = 22
-
- -
-
- -

◆ kDaikin216Bits

- -
-
- - - - -
const uint16_t kDaikin216Bits = kDaikin216StateLength * 8
-
- -
-
- -

◆ kDaikin216DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin216DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin216StateLength

- -
-
- - - - -
const uint16_t kDaikin216StateLength = 27
-
- -
-
- -

◆ kDaikin2Bits

- -
-
- - - - -
const uint16_t kDaikin2Bits = kDaikin2StateLength * 8
-
- -
-
- -

◆ kDaikin2DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin2DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikin2StateLength

- -
-
- - - - -
const uint16_t kDaikin2StateLength = 39
-
- -
-
- -

◆ kDaikin64Bits

- -
-
- - - - -
const uint16_t kDaikin64Bits = 64
-
- -
-
- -

◆ kDaikin64DefaultRepeat

- -
-
- - - - -
const uint16_t kDaikin64DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikinBits

- -
-
- - - - -
const uint16_t kDaikinBits = kDaikinStateLength * 8
-
- -
-
- -

◆ kDaikinBitsShort

- -
-
- - - - -
const uint16_t kDaikinBitsShort = kDaikinStateLengthShort * 8
-
- -
-
- -

◆ kDaikinDefaultRepeat

- -
-
- - - - -
const uint16_t kDaikinDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDaikinStateLength

- -
-
- - - - -
const uint16_t kDaikinStateLength = 35
-
- -
-
- -

◆ kDaikinStateLengthShort

- -
-
- - - - -
const uint16_t kDaikinStateLengthShort = kDaikinStateLength - 8
-
- -
-
- -

◆ kDelonghiAcBits

- -
-
- - - - -
const uint16_t kDelonghiAcBits = 64
-
- -
-
- -

◆ kDelonghiAcDefaultRepeat

- -
-
- - - - -
const uint16_t kDelonghiAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kDenon48Bits

- -
-
- - - - -
const uint16_t kDenon48Bits = 48
-
- -
-
- -

◆ kDenonBits

- -
-
- - - - -
const uint16_t kDenonBits = 15
-
- -
-
- -

◆ kDenonLegacyBits

- -
-
- - - - -
const uint16_t kDenonLegacyBits = 14
-
- -
-
- -

◆ kDishBits

- -
-
- - - - -
const uint16_t kDishBits = 16
-
- -
-
- -

◆ kDishMinRepeat

- -
-
- - - - -
const uint16_t kDishMinRepeat = 3
-
- -
-
- -

◆ kDoshishaBits

- -
-
- - - - -
const uint16_t kDoshishaBits = 40
-
- -
-
- -

◆ kEcoclimBits

- -
-
- - - - -
const uint16_t kEcoclimBits = 56
-
- -
-
- -

◆ kEcoclimShortBits

- -
-
- - - - -
const uint16_t kEcoclimShortBits = 15
-
- -
-
- -

◆ kElectraAcBits

- -
-
- - - - -
const uint16_t kElectraAcBits = kElectraAcStateLength * 8
-
- -
-
- -

◆ kElectraAcMinRepeat

- -
-
- - - - -
const uint16_t kElectraAcMinRepeat = kNoRepeat
-
- -
-
- -

◆ kElectraAcStateLength

- -
-
- - - - -
const uint16_t kElectraAcStateLength = 13
-
- -
-
- -

◆ kEliteScreensBits

- -
-
- - - - -
const uint16_t kEliteScreensBits = 32
-
- -
-
- -

◆ kEliteScreensDefaultRepeat

- -
-
- - - - -
const uint16_t kEliteScreensDefaultRepeat = kSingleRepeat
-
- -
-
- -

◆ kEpsonBits

- -
-
- - - - -
const uint16_t kEpsonBits = 32
-
- -
-
- -

◆ kEpsonMinRepeat

- -
-
- - - - -
const uint16_t kEpsonMinRepeat = 2
-
- -
-
- -

◆ kFujitsuAcBits

- -
-
- - - - -
const uint16_t kFujitsuAcBits = kFujitsuAcStateLength * 8
-
- -
-
- -

◆ kFujitsuAcMinBits

- -
-
- - - - -
const uint16_t kFujitsuAcMinBits = (kFujitsuAcStateLengthShort - 1) * 8
-
- -
-
- -

◆ kFujitsuAcMinRepeat

- -
-
- - - - -
const uint16_t kFujitsuAcMinRepeat = kNoRepeat
-
- -
-
- -

◆ kFujitsuAcStateLength

- -
-
- - - - -
const uint16_t kFujitsuAcStateLength = 16
-
- -
-
- -

◆ kFujitsuAcStateLengthShort

- -
-
- - - - -
const uint16_t kFujitsuAcStateLengthShort = 7
-
- -
-
- -

◆ kGicableBits

- -
-
- - - - -
const uint16_t kGicableBits = 16
-
- -
-
- -

◆ kGicableMinRepeat

- -
-
- - - - -
const uint16_t kGicableMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kGoodweatherBits

- -
-
- - - - -
const uint16_t kGoodweatherBits = 48
-
- -
-
- -

◆ kGoodweatherMinRepeat

- -
-
- - - - -
const uint16_t kGoodweatherMinRepeat = kNoRepeat
-
- -
-
- -

◆ kGreeBits

- -
-
- - - - -
const uint16_t kGreeBits = kGreeStateLength * 8
-
- -
-
- -

◆ kGreeDefaultRepeat

- -
-
- - - - -
const uint16_t kGreeDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kGreeStateLength

- -
-
- - - - -
const uint16_t kGreeStateLength = 8
-
- -
-
- -

◆ kHaierACBits

- -
-
- - - - -
const uint16_t kHaierACBits = kHaierACStateLength * 8
-
- -
-
- -

◆ kHaierAcDefaultRepeat

- -
-
- - - - -
const uint16_t kHaierAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kHaierACStateLength

- -
-
- - - - -
const uint16_t kHaierACStateLength = 9
-
- -
-
- -

◆ kHaierACYRW02Bits

- -
-
- - - - -
const uint16_t kHaierACYRW02Bits = kHaierACYRW02StateLength * 8
-
- -
-
- -

◆ kHaierAcYrw02DefaultRepeat

- -
-
- - - - -
const uint16_t kHaierAcYrw02DefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kHaierACYRW02StateLength

- -
-
- - - - -
const uint16_t kHaierACYRW02StateLength = 14
-
- -
-
- -

◆ kHitachiAc1Bits

- -
-
- - - - -
const uint16_t kHitachiAc1Bits = kHitachiAc1StateLength * 8
-
- -
-
- -

◆ kHitachiAc1StateLength

- -
-
- - - - -
const uint16_t kHitachiAc1StateLength = 13
-
- -
-
- -

◆ kHitachiAc2Bits

- -
-
- - - - -
const uint16_t kHitachiAc2Bits = kHitachiAc2StateLength * 8
-
- -
-
- -

◆ kHitachiAc2StateLength

- -
-
- - - - -
const uint16_t kHitachiAc2StateLength = 53
-
- -
-
- -

◆ kHitachiAc344Bits

- -
-
- - - - -
const uint16_t kHitachiAc344Bits = kHitachiAc344StateLength * 8
-
- -
-
- -

◆ kHitachiAc344StateLength

- -
-
- - - - -
const uint16_t kHitachiAc344StateLength = 43
-
- -
-
- -

◆ kHitachiAc3Bits

- -
-
- - - - -
const uint16_t kHitachiAc3Bits = kHitachiAc3StateLength * 8
-
- -
-
- -

◆ kHitachiAc3MinBits

- -
-
- - - - -
const uint16_t kHitachiAc3MinBits = kHitachiAc3MinStateLength * 8
-
- -
-
- -

◆ kHitachiAc3MinStateLength

- -
-
- - - - -
const uint16_t kHitachiAc3MinStateLength = 15
-
- -
-
- -

◆ kHitachiAc3StateLength

- -
-
- - - - -
const uint16_t kHitachiAc3StateLength = 27
-
- -
-
- -

◆ kHitachiAc424Bits

- -
-
- - - - -
const uint16_t kHitachiAc424Bits = kHitachiAc424StateLength * 8
-
- -
-
- -

◆ kHitachiAc424StateLength

- -
-
- - - - -
const uint16_t kHitachiAc424StateLength = 53
-
- -
-
- -

◆ kHitachiAcBits

- -
-
- - - - -
const uint16_t kHitachiAcBits = kHitachiAcStateLength * 8
-
- -
-
- -

◆ kHitachiAcDefaultRepeat

- -
-
- - - - -
const uint16_t kHitachiAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kHitachiAcStateLength

- -
-
- - - - -
const uint16_t kHitachiAcStateLength = 28
-
- -
-
- -

◆ kInaxBits

- -
-
- - - - -
const uint16_t kInaxBits = 24
-
- -
-
- -

◆ kInaxMinRepeat

- -
-
- - - - -
const uint16_t kInaxMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kJvcBits

- -
-
- - - - -
const uint16_t kJvcBits = 16
-
- -
-
- -

◆ kKelvinatorBits

- -
-
- - - - -
const uint16_t kKelvinatorBits = kKelvinatorStateLength * 8
-
- -
-
- -

◆ kKelvinatorDefaultRepeat

- -
-
- - - - -
const uint16_t kKelvinatorDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kKelvinatorStateLength

- -
-
- - - - -
const uint16_t kKelvinatorStateLength = 16
-
- -
-
- -

◆ kLasertagBits

- -
-
- - - - -
const uint16_t kLasertagBits = 13
-
- -
-
- -

◆ kLasertagMinRepeat

- -
-
- - - - -
const uint16_t kLasertagMinRepeat = kNoRepeat
-
- -
-
- -

◆ kLegoPfBits

- -
-
- - - - -
const uint16_t kLegoPfBits = 16
-
- -
-
- -

◆ kLegoPfMinRepeat

- -
-
- - - - -
const uint16_t kLegoPfMinRepeat = kNoRepeat
-
- -
-
- -

◆ kLg32Bits

- -
-
- - - - -
const uint16_t kLg32Bits = 32
-
- -
-
- -

◆ kLgBits

- -
-
- - - - -
const uint16_t kLgBits = 28
-
- -
-
- -

◆ kLgDefaultRepeat

- -
-
- - - - -
const uint16_t kLgDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kLutronBits

- -
-
- - - - -
const uint16_t kLutronBits = 35
-
- -
-
- -

◆ kMagiquestBits

- -
-
- - - - -
const uint16_t kMagiquestBits = 56
-
- -
-
- -

◆ kMetzBits

- -
-
- - - - -
const uint16_t kMetzBits = 19
-
- -
-
- -

◆ kMetzMinRepeat

- -
-
- - - - -
const uint16_t kMetzMinRepeat = kNoRepeat
-
- -
-
- -

◆ kMidea24Bits

- -
-
- - - - -
const uint16_t kMidea24Bits = 24
-
- -
-
- -

◆ kMidea24MinRepeat

- -
-
- - - - -
const uint16_t kMidea24MinRepeat = kSingleRepeat
-
- -
-
- -

◆ kMideaBits

- -
-
- - - - -
const uint16_t kMideaBits = 48
-
- -
-
- -

◆ kMideaMinRepeat

- -
-
- - - - -
const uint16_t kMideaMinRepeat = kNoRepeat
-
- -
-
- -

◆ kMilesMinRepeat

- -
-
- - - - -
const uint16_t kMilesMinRepeat = 0
-
- -
-
- -

◆ kMilesTag2MsgBits

- -
-
- - - - -
const uint16_t kMilesTag2MsgBits = 24
-
- -
-
- -

◆ kMilesTag2ShotBits

- -
-
- - - - -
const uint16_t kMilesTag2ShotBits = 14
-
- -
-
- -

◆ kMirageBits

- -
-
- - - - -
const uint16_t kMirageBits = kMirageStateLength * 8
-
- -
-
- -

◆ kMirageMinRepeat

- -
-
- - - - -
const uint16_t kMirageMinRepeat = kNoRepeat
-
- -
-
- -

◆ kMirageStateLength

- -
-
- - - - -
const uint16_t kMirageStateLength = 15
-
- -
-
- -

◆ kMitsubishi112Bits

- -
-
- - - - -
const uint16_t kMitsubishi112Bits = kMitsubishi112StateLength * 8
-
- -
-
- -

◆ kMitsubishi112MinRepeat

- -
-
- - - - -
const uint16_t kMitsubishi112MinRepeat = kNoRepeat
-
- -
-
- -

◆ kMitsubishi112StateLength

- -
-
- - - - -
const uint16_t kMitsubishi112StateLength = 14
-
- -
-
- -

◆ kMitsubishi136Bits

- -
-
- - - - -
const uint16_t kMitsubishi136Bits = kMitsubishi136StateLength * 8
-
- -
-
- -

◆ kMitsubishi136MinRepeat

- -
-
- - - - -
const uint16_t kMitsubishi136MinRepeat = kNoRepeat
-
- -
-
- -

◆ kMitsubishi136StateLength

- -
-
- - - - -
const uint16_t kMitsubishi136StateLength = 17
-
- -
-
- -

◆ kMitsubishiACBits

- -
-
- - - - -
const uint16_t kMitsubishiACBits = kMitsubishiACStateLength * 8
-
- -
-
- -

◆ kMitsubishiACMinRepeat

- -
-
- - - - -
const uint16_t kMitsubishiACMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kMitsubishiACStateLength

- -
-
- - - - -
const uint16_t kMitsubishiACStateLength = 18
-
- -
-
- -

◆ kMitsubishiBits

- -
-
- - - - -
const uint16_t kMitsubishiBits = 16
-
- -
-
- -

◆ kMitsubishiHeavy152Bits

- -
-
- - - - -
const uint16_t kMitsubishiHeavy152Bits = kMitsubishiHeavy152StateLength * 8
-
- -
-
- -

◆ kMitsubishiHeavy152MinRepeat

- -
-
- - - - -
const uint16_t kMitsubishiHeavy152MinRepeat = kNoRepeat
-
- -
-
- -

◆ kMitsubishiHeavy152StateLength

- -
-
- - - - -
const uint16_t kMitsubishiHeavy152StateLength = 19
-
- -
-
- -

◆ kMitsubishiHeavy88Bits

- -
-
- - - - -
const uint16_t kMitsubishiHeavy88Bits = kMitsubishiHeavy88StateLength * 8
-
- -
-
- -

◆ kMitsubishiHeavy88MinRepeat

- -
-
- - - - -
const uint16_t kMitsubishiHeavy88MinRepeat = kNoRepeat
-
- -
-
- -

◆ kMitsubishiHeavy88StateLength

- -
-
- - - - -
const uint16_t kMitsubishiHeavy88StateLength = 11
-
- -
-
- -

◆ kMitsubishiMinRepeat

- -
-
- - - - -
const uint16_t kMitsubishiMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kMultibracketsBits

- -
-
- - - - -
const uint16_t kMultibracketsBits = 8
-
- -
-
- -

◆ kMultibracketsDefaultRepeat

- -
-
- - - - -
const uint16_t kMultibracketsDefaultRepeat = kSingleRepeat
-
- -
-
- -

◆ kNECBits

- -
-
- - - - -
const uint16_t kNECBits = 32
-
- -
-
- -

◆ kNeoclimaBits

- -
-
- - - - -
const uint16_t kNeoclimaBits = kNeoclimaStateLength * 8
-
- -
-
- -

◆ kNeoclimaMinRepeat

- -
-
- - - - -
const uint16_t kNeoclimaMinRepeat = kNoRepeat
-
- -
-
- -

◆ kNeoclimaStateLength

- -
-
- - - - -
const uint16_t kNeoclimaStateLength = 12
-
- -
-
- -

◆ kNikaiBits

- -
-
- - - - -
const uint16_t kNikaiBits = 24
-
- -
-
- -

◆ kNoRepeat

- -
-
- - - - -
const uint16_t kNoRepeat = 0
-
- -
-
- -

◆ kPanasonicAc32Bits

- -
-
- - - - -
const uint16_t kPanasonicAc32Bits = 32
-
- -
-
- -

◆ kPanasonicAcBits

- -
-
- - - - -
const uint16_t kPanasonicAcBits = kPanasonicAcStateLength * 8
-
- -
-
- -

◆ kPanasonicAcDefaultRepeat

- -
-
- - - - -
const uint16_t kPanasonicAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kPanasonicAcShortBits

- -
-
- - - - -
const uint16_t kPanasonicAcShortBits = kPanasonicAcStateShortLength * 8
-
- -
-
- -

◆ kPanasonicAcStateLength

- -
-
- - - - -
const uint16_t kPanasonicAcStateLength = 27
-
- -
-
- -

◆ kPanasonicAcStateShortLength

- -
-
- - - - -
const uint16_t kPanasonicAcStateShortLength = 16
-
- -
-
- -

◆ kPanasonicBits

- -
-
- - - - -
const uint16_t kPanasonicBits = 48
-
- -
-
- -

◆ kPanasonicManufacturer

- -
-
- - - - -
const uint32_t kPanasonicManufacturer = 0x4004
-
- -
-
- -

◆ kPioneerBits

- -
-
- - - - -
const uint16_t kPioneerBits = 64
-
- -
-
- -

◆ kProntoMinLength

- -
-
- - - - -
const uint16_t kProntoMinLength = 6
-
- -
-
- -

◆ kRC5Bits

- -
-
- - - - -
const uint16_t kRC5Bits = kRC5RawBits - 2
-
- -
-
- -

◆ kRC5RawBits

- -
-
- - - - -
const uint16_t kRC5RawBits = 14
-
- -
-
- -

◆ kRC5XBits

- -
-
- - - - -
const uint16_t kRC5XBits = kRC5RawBits - 1
-
- -
-
- -

◆ kRC6_36Bits

- -
-
- - - - -
const uint16_t kRC6_36Bits = 36
-
- -
-
- -

◆ kRC6Mode0Bits

- -
-
- - - - -
const uint16_t kRC6Mode0Bits = 20
-
- -
-
- -

◆ kRCMMBits

- -
-
- - - - -
const uint16_t kRCMMBits = 24
-
- -
-
- -

◆ kSamsung36Bits

- -
-
- - - - -
const uint16_t kSamsung36Bits = 36
-
- -
-
- -

◆ kSamsungAcBits

- -
-
- - - - -
const uint16_t kSamsungAcBits = kSamsungAcStateLength * 8
-
- -
-
- -

◆ kSamsungAcDefaultRepeat

- -
-
- - - - -
const uint16_t kSamsungAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kSamsungAcExtendedBits

- -
-
- - - - -
const uint16_t kSamsungAcExtendedBits = kSamsungAcExtendedStateLength * 8
-
- -
-
- -

◆ kSamsungAcExtendedStateLength

- -
-
- - - - -
const uint16_t kSamsungAcExtendedStateLength = 21
-
- -
-
- -

◆ kSamsungAcStateLength

- -
-
- - - - -
const uint16_t kSamsungAcStateLength = 14
-
- -
-
- -

◆ kSamsungBits

- -
-
- - - - -
const uint16_t kSamsungBits = 32
-
- -
-
- -

◆ kSanyoAcBits

- -
-
- - - - -
const uint16_t kSanyoAcBits = kSanyoAcStateLength * 8
-
- -
-
- -

◆ kSanyoAcStateLength

- -
-
- - - - -
const uint16_t kSanyoAcStateLength = 9
-
- -
-
- -

◆ kSanyoLC7461AddressBits

- -
-
- - - - -
const uint16_t kSanyoLC7461AddressBits = 13
-
- -
-
- -

◆ kSanyoLC7461Bits

- -
-
- - - - -
const uint16_t kSanyoLC7461Bits
-
-Initial value: -
-
- -

◆ kSanyoLC7461CommandBits

- -
-
- - - - -
const uint16_t kSanyoLC7461CommandBits = 8
-
- -
-
- -

◆ kSanyoSA8650BBits

- -
-
- - - - -
const uint16_t kSanyoSA8650BBits = 12
-
- -
-
- -

◆ kSharpAcBits

- -
-
- - - - -
const uint16_t kSharpAcBits = kSharpAcStateLength * 8
-
- -
-
- -

◆ kSharpAcDefaultRepeat

- -
-
- - - - -
const uint16_t kSharpAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kSharpAcStateLength

- -
-
- - - - -
const uint16_t kSharpAcStateLength = 13
-
- -
-
- -

◆ kSharpAddressBits

- -
-
- - - - -
const uint8_t kSharpAddressBits = 5
-
- -
-
- -

◆ kSharpBits

- -
-
- - - - -
const uint16_t kSharpBits = kSharpAddressBits + kSharpCommandBits + 2
-
- -
-
- -

◆ kSharpCommandBits

- -
-
- - - - -
const uint8_t kSharpCommandBits = 8
-
- -
-
- -

◆ kSherwoodBits

- -
-
- - - - -
const uint8_t kSherwoodBits = kNECBits
-
- -
-
- -

◆ kSherwoodMinRepeat

- -
-
- - - - -
const uint16_t kSherwoodMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kSingleRepeat

- -
-
- - - - -
const uint16_t kSingleRepeat = 1
-
- -
-
- -

◆ kSony12Bits

- -
-
- - - - -
const uint16_t kSony12Bits = 12
-
- -
-
- -

◆ kSony15Bits

- -
-
- - - - -
const uint16_t kSony15Bits = 15
-
- -
-
- -

◆ kSony20Bits

- -
-
- - - - -
const uint16_t kSony20Bits = 20
-
- -
-
- -

◆ kSonyMinBits

- -
-
- - - - -
const uint16_t kSonyMinBits = 12
-
- -
-
- -

◆ kSonyMinRepeat

- -
-
- - - - -
const uint16_t kSonyMinRepeat = 2
-
- -
-
- -

◆ kSymphonyBits

- -
-
- - - - -
const uint16_t kSymphonyBits = 12
-
- -
-
- -

◆ kSymphonyDefaultRepeat

- -
-
- - - - -
const uint16_t kSymphonyDefaultRepeat = 3
-
- -
-
- -

◆ kTcl112AcBits

- -
-
- - - - -
const uint16_t kTcl112AcBits = kTcl112AcStateLength * 8
-
- -
-
- -

◆ kTcl112AcDefaultRepeat

- -
-
- - - - -
const uint16_t kTcl112AcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kTcl112AcStateLength

- -
-
- - - - -
const uint16_t kTcl112AcStateLength = 14
-
- -
-
- -

◆ kTechnibelAcBits

- -
-
- - - - -
const uint16_t kTechnibelAcBits = 56
-
- -
-
- -

◆ kTechnibelAcDefaultRepeat

- -
-
- - - - -
const uint16_t kTechnibelAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kTecoBits

- -
-
- - - - -
const uint16_t kTecoBits = 35
-
- -
-
- -

◆ kTecoDefaultRepeat

- -
-
- - - - -
const uint16_t kTecoDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kToshibaACBits

- -
-
- - - - -
const uint16_t kToshibaACBits = kToshibaACStateLength * 8
-
- -
-
- -

◆ kToshibaACBitsLong

- -
-
- - - - -
const uint16_t kToshibaACBitsLong = kToshibaACStateLengthLong * 8
-
- -
-
- -

◆ kToshibaACBitsShort

- -
-
- - - - -
const uint16_t kToshibaACBitsShort = kToshibaACStateLengthShort * 8
-
- -
-
- -

◆ kToshibaACMinRepeat

- -
-
- - - - -
const uint16_t kToshibaACMinRepeat = kSingleRepeat
-
- -
-
- -

◆ kToshibaACStateLength

- -
-
- - - - -
const uint16_t kToshibaACStateLength = 9
-
- -
-
- -

◆ kToshibaACStateLengthLong

- -
-
- - - - -
const uint16_t kToshibaACStateLengthLong = kToshibaACStateLength + 1
-
- -
-
- -

◆ kToshibaACStateLengthShort

- -
-
- - - - -
const uint16_t kToshibaACStateLengthShort = kToshibaACStateLength - 2
-
- -
-
- -

◆ kTranscoldBits

- -
-
- - - - -
const uint16_t kTranscoldBits = 24
-
- -
-
- -

◆ kTranscoldDefaultRepeat

- -
-
- - - - -
const uint16_t kTranscoldDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kTrotecBits

- -
-
- - - - -
const uint16_t kTrotecBits = kTrotecStateLength * 8
-
- -
-
- -

◆ kTrotecDefaultRepeat

- -
-
- - - - -
const uint16_t kTrotecDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kTrotecStateLength

- -
-
- - - - -
const uint16_t kTrotecStateLength = 9
-
- -
-
- -

◆ kTrumaBits

- -
-
- - - - -
const uint16_t kTrumaBits = 56
-
- -
-
- -

◆ kVestelAcBits

- -
-
- - - - -
const uint8_t kVestelAcBits = 56
-
- -
-
- -

◆ kVoltasBits

- -
-
- - - - -
const uint16_t kVoltasBits = 80
-
- -
-
- -

◆ kVoltasStateLength

- -
-
- - - - -
const uint16_t kVoltasStateLength = 10
-
- -
-
- -

◆ kWhirlpoolAcBits

- -
-
- - - - -
const uint16_t kWhirlpoolAcBits = kWhirlpoolAcStateLength * 8
-
- -
-
- -

◆ kWhirlpoolAcDefaultRepeat

- -
-
- - - - -
const uint16_t kWhirlpoolAcDefaultRepeat = kNoRepeat
-
- -
-
- -

◆ kWhirlpoolAcStateLength

- -
-
- - - - -
const uint16_t kWhirlpoolAcStateLength = 21
-
- -
-
- -

◆ kWhynterBits

- -
-
- - - - -
const uint16_t kWhynterBits = 32
-
- -
-
- -

◆ kXmpBits

- -
-
- - - - -
const uint16_t kXmpBits = 64
-
- -
-
- -

◆ kZepealBits

- -
-
- - - - -
const uint16_t kZepealBits = 16
-
- -
-
- -

◆ kZepealMinRepeat

- -
-
- - - - -
const uint16_t kZepealMinRepeat = 4
-
- -
-
-
-
const uint16_t kSanyoLC7461CommandBits
Definition: IRremoteESP8266.h:1087
-
const uint16_t kSanyoLC7461AddressBits
Definition: IRremoteESP8266.h:1086
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h_source.html deleted file mode 100644 index 7916152f4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRremoteESP8266_8h_source.html +++ /dev/null @@ -1,1626 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRremoteESP8266.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRremoteESP8266.h
-
-
-Go to the documentation of this file.
1  /***************************************************
-
2  * IRremote for ESP8266
-
3  *
-
4  * Based on the IRremote library for Arduino by Ken Shirriff
-
5  * Version 0.11 August, 2009
-
6  * Copyright 2009 Ken Shirriff
-
7  * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
-
8  *
-
9  * Edited by Mitra to add new controller SANYO
-
10  *
-
11  * Interrupt code based on NECIRrcv by Joe Knapp
-
12  * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
-
13  * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/
-
14  *
-
15  * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
-
16  * LG added by Darryl Smith (based on the JVC protocol)
-
17  * Whynter A/C ARC-110WD added by Francesco Meschia
-
18  * Coolix A/C / heatpump added by (send) bakrus & (decode) crankyoldgit
-
19  * Denon: sendDenon, decodeDenon added by Massimiliano Pinto
-
20  (from https://github.com/z3t0/Arduino-IRremote/blob/master/ir_Denon.cpp)
-
21  * Kelvinator A/C and Sherwood added by crankyoldgit
-
22  * Mitsubishi (TV) sending added by crankyoldgit
-
23  * Pronto code sending added by crankyoldgit
-
24  * Mitsubishi & Toshiba A/C added by crankyoldgit
-
25  * (derived from https://github.com/r45635/HVAC-IR-Control)
-
26  * DISH decode by marcosamarinho
-
27  * Gree Heatpump sending added by Ville Skyttä (scop)
-
28  * (derived from https://github.com/ToniA/arduino-heatpumpir/blob/master/GreeHeatpumpIR.cpp)
-
29  * Updated by markszabo (https://github.com/crankyoldgit/IRremoteESP8266) for sending IR code on ESP8266
-
30  * Updated by Sebastien Warin (http://sebastien.warin.fr) for receiving IR code on ESP8266
-
31  *
-
32  * Updated by sillyfrog for Daikin, adopted from
-
33  * (https://github.com/mharizanov/Daikin-AC-remote-control-over-the-Internet/)
-
34  * Fujitsu A/C code added by jonnygraham
-
35  * Trotec AC code by stufisher
-
36  * Carrier & Haier AC code by crankyoldgit
-
37  * Vestel AC code by Erdem U. Altınyurt
-
38  * Teco AC code by Fabien Valthier (hcoohb)
-
39  * Mitsubishi 112 AC Code by kuchel77
-
40  *
-
41  * GPL license, all text above must be included in any redistribution
-
42  ****************************************************/
-
43 
-
44 #ifndef IRREMOTEESP8266_H_
-
45 #define IRREMOTEESP8266_H_
-
46 
-
47 #define __STDC_LIMIT_MACROS
-
48 #include <stdint.h>
-
49 #ifdef UNIT_TEST
-
50 #include <iostream>
-
51 #include <string>
-
52 #endif // UNIT_TEST
-
53 
-
54 // Library Version
-
55 #define _IRREMOTEESP8266_VERSION_ "2.7.17"
-
56 
-
57 // Set the language & locale for the library. See the `locale` dir for options.
-
58 #ifndef _IR_LOCALE_
-
59 #define _IR_LOCALE_ en-AU
-
60 #endif // _IR_LOCALE_
-
61 
-
62 // Do we enable all the protocols by default (true), or disable them (false)?
-
63 // This allows users of the library to disable or enable all protocols at
-
64 // compile-time with `-D_IR_ENABLE_DEFAULT_=true` or
-
65 // `-D_IR_ENABLE_DEFAULT_=false` compiler flags respectively.
-
66 // Everything is included by default.
-
67 // e.g. If you only want to enable use of he NEC protocol to save program space,
-
68 // you would use something like:
-
69 // `-D_IR_ENABLE_DEFAULT_=false -DDECODE_NEC=true -DSEND_NEC=true`
-
70 //
-
71 // or alter your 'platform.ini' file accordingly:
-
72 // ```
-
73 // build_flags = -D_IR_ENABLE_DEFAULT_=false
-
74 // -DDECODE_NEC=true
-
75 // -DSEND_NEC=true
-
76 // ```
-
77 // If you want to enable support for every protocol *except* _decoding_ the
-
78 // Kelvinator protocol, you would use:
-
79 // `-DDECODE_KELVINATOR=false`
-
80 #ifndef _IR_ENABLE_DEFAULT_
-
81 #define _IR_ENABLE_DEFAULT_ true // Unless set externally, the default is on.
-
82 #endif // _IR_ENABLE_DEFAULT_
-
83 
-
84 // Supported IR protocols
-
85 // Each protocol you include costs memory and, during decode, costs time
-
86 // Disable (set to false) all the protocols you do not need/want!
-
87 // The Air Conditioner protocols are the most expensive memory-wise.
-
88 //
-
89 
-
90 // Semi-unique code for unknown messages
-
91 #ifndef DECODE_HASH
-
92 #define DECODE_HASH _IR_ENABLE_DEFAULT_
-
93 #endif // DECODE_HASH
-
94 
-
95 #ifndef SEND_RAW
-
96 #define SEND_RAW _IR_ENABLE_DEFAULT_
-
97 #endif // SEND_RAW
-
98 
-
99 #ifndef DECODE_NEC
-
100 #define DECODE_NEC _IR_ENABLE_DEFAULT_
-
101 #endif // DECODE_NEC
-
102 #ifndef SEND_NEC
-
103 #define SEND_NEC _IR_ENABLE_DEFAULT_
-
104 #endif // SEND_NEC
-
105 
-
106 #ifndef DECODE_SHERWOOD
-
107 #define DECODE_SHERWOOD false // Not applicable. Actually is DECODE_NEC
-
108 #endif // DECODE_SHERWOOD
-
109 #ifndef SEND_SHERWOOD
-
110 #define SEND_SHERWOOD _IR_ENABLE_DEFAULT_
-
111 #endif // SEND_SHERWOOD
-
112 
-
113 #ifndef DECODE_RC5
-
114 #define DECODE_RC5 _IR_ENABLE_DEFAULT_
-
115 #endif // DECODE_RC5
-
116 #ifndef SEND_RC5
-
117 #define SEND_RC5 _IR_ENABLE_DEFAULT_
-
118 #endif // SEND_RC5
-
119 
-
120 #ifndef DECODE_RC6
-
121 #define DECODE_RC6 _IR_ENABLE_DEFAULT_
-
122 #endif // DECODE_RC6
-
123 #ifndef SEND_RC6
-
124 #define SEND_RC6 _IR_ENABLE_DEFAULT_
-
125 #endif // SEND_RC6
-
126 
-
127 #ifndef DECODE_RCMM
-
128 #define DECODE_RCMM _IR_ENABLE_DEFAULT_
-
129 #endif // DECODE_RCMM
-
130 #ifndef SEND_RCMM
-
131 #define SEND_RCMM _IR_ENABLE_DEFAULT_
-
132 #endif // SEND_RCMM
-
133 
-
134 #ifndef DECODE_SONY
-
135 #define DECODE_SONY _IR_ENABLE_DEFAULT_
-
136 #endif // DECODE_SONY
-
137 #ifndef SEND_SONY
-
138 #define SEND_SONY _IR_ENABLE_DEFAULT_
-
139 #endif // SEND_SONY
-
140 
-
141 #ifndef DECODE_PANASONIC
-
142 #define DECODE_PANASONIC _IR_ENABLE_DEFAULT_
-
143 #endif // DECODE_PANASONIC
-
144 #ifndef SEND_PANASONIC
-
145 #define SEND_PANASONIC _IR_ENABLE_DEFAULT_
-
146 #endif // SEND_PANASONIC
-
147 
-
148 #ifndef DECODE_JVC
-
149 #define DECODE_JVC _IR_ENABLE_DEFAULT_
-
150 #endif // DECODE_JVC
-
151 #ifndef SEND_JVC
-
152 #define SEND_JVC _IR_ENABLE_DEFAULT_
-
153 #endif // SEND_JVC
-
154 
-
155 #ifndef DECODE_SAMSUNG
-
156 #define DECODE_SAMSUNG _IR_ENABLE_DEFAULT_
-
157 #endif // DECODE_SAMSUNG
-
158 #ifndef SEND_SAMSUNG
-
159 #define SEND_SAMSUNG _IR_ENABLE_DEFAULT_
-
160 #endif // SEND_SAMSUNG
-
161 
-
162 #ifndef DECODE_SAMSUNG36
-
163 #define DECODE_SAMSUNG36 _IR_ENABLE_DEFAULT_
-
164 #endif // DECODE_SAMSUNG36
-
165 #ifndef SEND_SAMSUNG36
-
166 #define SEND_SAMSUNG36 _IR_ENABLE_DEFAULT_
-
167 #endif // SEND_SAMSUNG36
-
168 
-
169 #ifndef DECODE_SAMSUNG_AC
-
170 #define DECODE_SAMSUNG_AC _IR_ENABLE_DEFAULT_
-
171 #endif // DECODE_SAMSUNG_AC
-
172 #ifndef SEND_SAMSUNG_AC
-
173 #define SEND_SAMSUNG_AC _IR_ENABLE_DEFAULT_
-
174 #endif // SEND_SAMSUNG_AC
-
175 
-
176 #ifndef DECODE_WHYNTER
-
177 #define DECODE_WHYNTER _IR_ENABLE_DEFAULT_
-
178 #endif // DECODE_WHYNTER
-
179 #ifndef SEND_WHYNTER
-
180 #define SEND_WHYNTER _IR_ENABLE_DEFAULT_
-
181 #endif // SEND_WHYNTER
-
182 
-
183 #ifndef DECODE_AIWA_RC_T501
-
184 #define DECODE_AIWA_RC_T501 _IR_ENABLE_DEFAULT_
-
185 #endif // DECODE_AIWA_RC_T501
-
186 #ifndef SEND_AIWA_RC_T501
-
187 #define SEND_AIWA_RC_T501 _IR_ENABLE_DEFAULT_
-
188 #endif // SEND_AIWA_RC_T501
-
189 
-
190 #ifndef DECODE_LG
-
191 #define DECODE_LG _IR_ENABLE_DEFAULT_
-
192 #endif // DECODE_LG
-
193 #ifndef SEND_LG
-
194 #define SEND_LG _IR_ENABLE_DEFAULT_
-
195 #endif // SEND_LG
-
196 
-
197 #ifndef DECODE_SANYO
-
198 #define DECODE_SANYO _IR_ENABLE_DEFAULT_
-
199 #endif // DECODE_SANYO
-
200 #ifndef SEND_SANYO
-
201 #define SEND_SANYO _IR_ENABLE_DEFAULT_
-
202 #endif // SEND_SANYO
-
203 
-
204 #ifndef DECODE_SANYO_AC
-
205 #define DECODE_SANYO_AC _IR_ENABLE_DEFAULT_
-
206 #endif // DECODE_SANYO_AC
-
207 #ifndef SEND_SANYO_AC
-
208 #define SEND_SANYO_AC _IR_ENABLE_DEFAULT_
-
209 #endif // SEND_SANYO_AC
-
210 
-
211 #ifndef DECODE_MITSUBISHI
-
212 #define DECODE_MITSUBISHI _IR_ENABLE_DEFAULT_
-
213 #endif // DECODE_MITSUBISHI
-
214 #ifndef SEND_MITSUBISHI
-
215 #define SEND_MITSUBISHI _IR_ENABLE_DEFAULT_
-
216 #endif // SEND_MITSUBISHI
-
217 
-
218 #ifndef DECODE_MITSUBISHI2
-
219 #define DECODE_MITSUBISHI2 _IR_ENABLE_DEFAULT_
-
220 #endif // DECODE_MITSUBISHI2
-
221 #ifndef SEND_MITSUBISHI2
-
222 #define SEND_MITSUBISHI2 _IR_ENABLE_DEFAULT_
-
223 #endif // SEND_MITSUBISHI2
-
224 
-
225 #ifndef DECODE_DISH
-
226 #define DECODE_DISH _IR_ENABLE_DEFAULT_
-
227 #endif // DECODE_DISH
-
228 #ifndef SEND_DISH
-
229 #define SEND_DISH _IR_ENABLE_DEFAULT_
-
230 #endif // SEND_DISH
-
231 
-
232 #ifndef DECODE_SHARP
-
233 #define DECODE_SHARP _IR_ENABLE_DEFAULT_
-
234 #endif // DECODE_SHARP
-
235 #ifndef SEND_SHARP
-
236 #define SEND_SHARP _IR_ENABLE_DEFAULT_
-
237 #endif // SEND_SHARP
-
238 
-
239 #ifndef DECODE_SHARP_AC
-
240 #define DECODE_SHARP_AC _IR_ENABLE_DEFAULT_
-
241 #endif // DECODE_SHARP_AC
-
242 #ifndef SEND_SHARP_AC
-
243 #define SEND_SHARP_AC _IR_ENABLE_DEFAULT_
-
244 #endif // SEND_SHARP_AC
-
245 
-
246 #ifndef DECODE_DENON
-
247 #define DECODE_DENON _IR_ENABLE_DEFAULT_
-
248 #endif // DECODE_DENON
-
249 #ifndef SEND_DENON
-
250 #define SEND_DENON _IR_ENABLE_DEFAULT_
-
251 #endif // SEND_DENON
-
252 
-
253 #ifndef DECODE_KELVINATOR
-
254 #define DECODE_KELVINATOR _IR_ENABLE_DEFAULT_
-
255 #endif // DECODE_KELVINATOR
-
256 #ifndef SEND_KELVINATOR
-
257 #define SEND_KELVINATOR _IR_ENABLE_DEFAULT_
-
258 #endif // SEND_KELVINATOR
-
259 
-
260 #ifndef DECODE_MITSUBISHI_AC
-
261 #define DECODE_MITSUBISHI_AC _IR_ENABLE_DEFAULT_
-
262 #endif // DECODE_MITSUBISHI_AC
-
263 #ifndef SEND_MITSUBISHI_AC
-
264 #define SEND_MITSUBISHI_AC _IR_ENABLE_DEFAULT_
-
265 #endif // SEND_MITSUBISHI_AC
-
266 
-
267 #ifndef DECODE_MITSUBISHI136
-
268 #define DECODE_MITSUBISHI136 _IR_ENABLE_DEFAULT_
-
269 #endif // DECODE_MITSUBISHI136
-
270 #ifndef SEND_MITSUBISHI136
-
271 #define SEND_MITSUBISHI136 _IR_ENABLE_DEFAULT_
-
272 #endif // SEND_MITSUBISHI136
-
273 
-
274 #ifndef DECODE_MITSUBISHI112
-
275 #define DECODE_MITSUBISHI112 _IR_ENABLE_DEFAULT_
-
276 #endif // DECODE_MITSUBISHI112
-
277 #ifndef SEND_MITSUBISHI112
-
278 #define SEND_MITSUBISHI112 _IR_ENABLE_DEFAULT_
-
279 #endif // SEND_MITSUBISHI112
-
280 
-
281 #ifndef DECODE_FUJITSU_AC
-
282 #define DECODE_FUJITSU_AC _IR_ENABLE_DEFAULT_
-
283 #endif // DECODE_FUJITSU_AC
-
284 #ifndef SEND_FUJITSU_AC
-
285 #define SEND_FUJITSU_AC _IR_ENABLE_DEFAULT_
-
286 #endif // SEND_FUJITSU_AC
-
287 
-
288 #ifndef DECODE_INAX
-
289 #define DECODE_INAX _IR_ENABLE_DEFAULT_
-
290 #endif // DECODE_INAX
-
291 #ifndef SEND_INAX
-
292 #define SEND_INAX _IR_ENABLE_DEFAULT_
-
293 #endif // SEND_INAX
-
294 
-
295 #ifndef DECODE_DAIKIN
-
296 #define DECODE_DAIKIN _IR_ENABLE_DEFAULT_
-
297 #endif // DECODE_DAIKIN
-
298 #ifndef SEND_DAIKIN
-
299 #define SEND_DAIKIN _IR_ENABLE_DEFAULT_
-
300 #endif // SEND_DAIKIN
-
301 
-
302 #ifndef DECODE_COOLIX
-
303 #define DECODE_COOLIX _IR_ENABLE_DEFAULT_
-
304 #endif // DECODE_COOLIX
-
305 #ifndef SEND_COOLIX
-
306 #define SEND_COOLIX _IR_ENABLE_DEFAULT_
-
307 #endif // SEND_COOLIX
-
308 
-
309 #ifndef DECODE_GLOBALCACHE
-
310 #define DECODE_GLOBALCACHE false // Not applicable.
-
311 #endif // DECODE_GLOBALCACHE
-
312 #ifndef SEND_GLOBALCACHE
-
313 #define SEND_GLOBALCACHE _IR_ENABLE_DEFAULT_
-
314 #endif // SEND_GLOBALCACHE
-
315 
-
316 #ifndef DECODE_GOODWEATHER
-
317 #define DECODE_GOODWEATHER _IR_ENABLE_DEFAULT_
-
318 #endif // DECODE_GOODWEATHER
-
319 #ifndef SEND_GOODWEATHER
-
320 #define SEND_GOODWEATHER _IR_ENABLE_DEFAULT_
-
321 #endif // SEND_GOODWEATHER
-
322 
-
323 #ifndef DECODE_GREE
-
324 #define DECODE_GREE _IR_ENABLE_DEFAULT_
-
325 #endif // DECODE_GREE
-
326 #ifndef SEND_GREE
-
327 #define SEND_GREE _IR_ENABLE_DEFAULT_
-
328 #endif // SEND_GREE
-
329 
-
330 #ifndef DECODE_PRONTO
-
331 #define DECODE_PRONTO false // Not applicable.
-
332 #endif // DECODE_PRONTO
-
333 #ifndef SEND_PRONTO
-
334 #define SEND_PRONTO _IR_ENABLE_DEFAULT_
-
335 #endif // SEND_PRONTO
-
336 
-
337 #ifndef DECODE_ARGO
-
338 #define DECODE_ARGO _IR_ENABLE_DEFAULT_
-
339 #endif // DECODE_ARGO
-
340 #ifndef SEND_ARGO
-
341 #define SEND_ARGO _IR_ENABLE_DEFAULT_
-
342 #endif // SEND_ARGO
-
343 
-
344 #ifndef DECODE_TROTEC
-
345 #define DECODE_TROTEC _IR_ENABLE_DEFAULT_
-
346 #endif // DECODE_TROTEC
-
347 #ifndef SEND_TROTEC
-
348 #define SEND_TROTEC _IR_ENABLE_DEFAULT_
-
349 #endif // SEND_TROTEC
-
350 
-
351 #ifndef DECODE_NIKAI
-
352 #define DECODE_NIKAI _IR_ENABLE_DEFAULT_
-
353 #endif // DECODE_NIKAI
-
354 #ifndef SEND_NIKAI
-
355 #define SEND_NIKAI _IR_ENABLE_DEFAULT_
-
356 #endif // SEND_NIKAI
-
357 
-
358 #ifndef DECODE_TOSHIBA_AC
-
359 #define DECODE_TOSHIBA_AC _IR_ENABLE_DEFAULT_
-
360 #endif // DECODE_TOSHIBA_AC
-
361 #ifndef SEND_TOSHIBA_AC
-
362 #define SEND_TOSHIBA_AC _IR_ENABLE_DEFAULT_
-
363 #endif // SEND_TOSHIBA_AC
-
364 
-
365 #ifndef DECODE_MAGIQUEST
-
366 #define DECODE_MAGIQUEST _IR_ENABLE_DEFAULT_
-
367 #endif // DECODE_MAGIQUEST
-
368 #ifndef SEND_MAGIQUEST
-
369 #define SEND_MAGIQUEST _IR_ENABLE_DEFAULT_
-
370 #endif // SEND_MAGIQUEST
-
371 
-
372 #ifndef DECODE_MIDEA
-
373 #define DECODE_MIDEA _IR_ENABLE_DEFAULT_
-
374 #endif // DECODE_MIDEA
-
375 #ifndef SEND_MIDEA
-
376 #define SEND_MIDEA _IR_ENABLE_DEFAULT_
-
377 #endif // SEND_MIDEA
-
378 
-
379 #ifndef DECODE_MIDEA24
-
380 #define DECODE_MIDEA24 _IR_ENABLE_DEFAULT_
-
381 #endif // DECODE_MIDEA24
-
382 #ifndef SEND_MIDEA24
-
383 #define SEND_MIDEA24 _IR_ENABLE_DEFAULT_
-
384 #endif // SEND_MIDEA24
-
385 
-
386 #ifndef DECODE_LASERTAG
-
387 #define DECODE_LASERTAG _IR_ENABLE_DEFAULT_
-
388 #endif // DECODE_LASERTAG
-
389 #ifndef SEND_LASERTAG
-
390 #define SEND_LASERTAG _IR_ENABLE_DEFAULT_
-
391 #endif // SEND_LASERTAG
-
392 
-
393 #ifndef DECODE_CARRIER_AC
-
394 #define DECODE_CARRIER_AC _IR_ENABLE_DEFAULT_
-
395 #endif // DECODE_CARRIER_AC
-
396 #ifndef SEND_CARRIER_AC
-
397 #define SEND_CARRIER_AC _IR_ENABLE_DEFAULT_
-
398 #endif // SEND_CARRIER_AC
-
399 
-
400 #ifndef DECODE_CARRIER_AC40
-
401 #define DECODE_CARRIER_AC40 _IR_ENABLE_DEFAULT_
-
402 #endif // DECODE_CARRIER_AC40
-
403 #ifndef SEND_CARRIER_AC40
-
404 #define SEND_CARRIER_AC40 _IR_ENABLE_DEFAULT_
-
405 #endif // SEND_CARRIER_AC40
-
406 
-
407 #ifndef DECODE_CARRIER_AC64
-
408 #define DECODE_CARRIER_AC64 _IR_ENABLE_DEFAULT_
-
409 #endif // DECODE_CARRIER_AC64
-
410 #ifndef SEND_CARRIER_AC64
-
411 #define SEND_CARRIER_AC64 _IR_ENABLE_DEFAULT_
-
412 #endif // SEND_CARRIER_AC64
-
413 
-
414 #ifndef DECODE_HAIER_AC
-
415 #define DECODE_HAIER_AC _IR_ENABLE_DEFAULT_
-
416 #endif // DECODE_HAIER_AC
-
417 #ifndef SEND_HAIER_AC
-
418 #define SEND_HAIER_AC _IR_ENABLE_DEFAULT_
-
419 #endif // SEND_HAIER_AC
-
420 
-
421 #ifndef DECODE_HITACHI_AC
-
422 #define DECODE_HITACHI_AC _IR_ENABLE_DEFAULT_
-
423 #endif // DECODE_HITACHI_AC
-
424 #ifndef SEND_HITACHI_AC
-
425 #define SEND_HITACHI_AC _IR_ENABLE_DEFAULT_
-
426 #endif // SEND_HITACHI_AC
-
427 
-
428 #ifndef DECODE_HITACHI_AC1
-
429 #define DECODE_HITACHI_AC1 _IR_ENABLE_DEFAULT_
-
430 #endif // DECODE_HITACHI_AC1
-
431 #ifndef SEND_HITACHI_AC1
-
432 #define SEND_HITACHI_AC1 _IR_ENABLE_DEFAULT_
-
433 #endif // SEND_HITACHI_AC1
-
434 
-
435 #ifndef DECODE_HITACHI_AC2
-
436 #define DECODE_HITACHI_AC2 _IR_ENABLE_DEFAULT_
-
437 #endif // DECODE_HITACHI_AC2
-
438 #ifndef SEND_HITACHI_AC2
-
439 #define SEND_HITACHI_AC2 _IR_ENABLE_DEFAULT_
-
440 #endif // SEND_HITACHI_AC2
-
441 
-
442 #ifndef DECODE_HITACHI_AC3
-
443 #define DECODE_HITACHI_AC3 _IR_ENABLE_DEFAULT_
-
444 #endif // DECODE_HITACHI_AC3
-
445 #ifndef SEND_HITACHI_AC3
-
446 #define SEND_HITACHI_AC3 _IR_ENABLE_DEFAULT_
-
447 #endif // SEND_HITACHI_AC3
-
448 
-
449 #ifndef DECODE_HITACHI_AC344
-
450 #define DECODE_HITACHI_AC344 _IR_ENABLE_DEFAULT_
-
451 #endif // DECODE_HITACHI_AC344
-
452 #ifndef SEND_HITACHI_AC344
-
453 #define SEND_HITACHI_AC344 _IR_ENABLE_DEFAULT_
-
454 #endif // SEND_HITACHI_AC344
-
455 
-
456 #ifndef DECODE_HITACHI_AC424
-
457 #define DECODE_HITACHI_AC424 _IR_ENABLE_DEFAULT_
-
458 #endif // DECODE_HITACHI_AC424
-
459 #ifndef SEND_HITACHI_AC424
-
460 #define SEND_HITACHI_AC424 _IR_ENABLE_DEFAULT_
-
461 #endif // SEND_HITACHI_AC424
-
462 
-
463 #ifndef DECODE_GICABLE
-
464 #define DECODE_GICABLE _IR_ENABLE_DEFAULT_
-
465 #endif // DECODE_GICABLE
-
466 #ifndef SEND_GICABLE
-
467 #define SEND_GICABLE _IR_ENABLE_DEFAULT_
-
468 #endif // SEND_GICABLE
-
469 
-
470 #ifndef DECODE_HAIER_AC_YRW02
-
471 #define DECODE_HAIER_AC_YRW02 _IR_ENABLE_DEFAULT_
-
472 #endif // DECODE_HAIER_AC_YRW02
-
473 #ifndef SEND_HAIER_AC_YRW02
-
474 #define SEND_HAIER_AC_YRW02 _IR_ENABLE_DEFAULT_
-
475 #endif // SEND_HAIER_AC_YRW02
-
476 
-
477 #ifndef DECODE_WHIRLPOOL_AC
-
478 #define DECODE_WHIRLPOOL_AC _IR_ENABLE_DEFAULT_
-
479 #endif // DECODE_WHIRLPOOL_AC
-
480 #ifndef SEND_WHIRLPOOL_AC
-
481 #define SEND_WHIRLPOOL_AC _IR_ENABLE_DEFAULT_
-
482 #endif // SEND_WHIRLPOOL_AC
-
483 
-
484 #ifndef DECODE_LUTRON
-
485 #define DECODE_LUTRON _IR_ENABLE_DEFAULT_
-
486 #endif // DECODE_LUTRON
-
487 #ifndef SEND_LUTRON
-
488 #define SEND_LUTRON _IR_ENABLE_DEFAULT_
-
489 #endif // SEND_LUTRON
-
490 
-
491 #ifndef DECODE_ELECTRA_AC
-
492 #define DECODE_ELECTRA_AC _IR_ENABLE_DEFAULT_
-
493 #endif // DECODE_ELECTRA_AC
-
494 #ifndef SEND_ELECTRA_AC
-
495 #define SEND_ELECTRA_AC _IR_ENABLE_DEFAULT_
-
496 #endif // SEND_ELECTRA_AC
-
497 
-
498 #ifndef DECODE_PANASONIC_AC
-
499 #define DECODE_PANASONIC_AC _IR_ENABLE_DEFAULT_
-
500 #endif // DECODE_PANASONIC_AC
-
501 #ifndef SEND_PANASONIC_AC
-
502 #define SEND_PANASONIC_AC _IR_ENABLE_DEFAULT_
-
503 #endif // SEND_PANASONIC_AC
-
504 
-
505 #ifndef DECODE_PANASONIC_AC32
-
506 #define DECODE_PANASONIC_AC32 _IR_ENABLE_DEFAULT_
-
507 #endif // DECODE_PANASONIC_AC32
-
508 #ifndef SEND_PANASONIC_AC32
-
509 #define SEND_PANASONIC_AC32 _IR_ENABLE_DEFAULT_
-
510 #endif // SEND_PANASONIC_AC32
-
511 
-
512 #ifndef DECODE_MWM
-
513 #define DECODE_MWM _IR_ENABLE_DEFAULT_
-
514 #endif // DECODE_MWM
-
515 #ifndef SEND_MWM
-
516 #define SEND_MWM _IR_ENABLE_DEFAULT_
-
517 #endif // SEND_MWM
-
518 
-
519 #ifndef DECODE_PIONEER
-
520 #define DECODE_PIONEER _IR_ENABLE_DEFAULT_
-
521 #endif // DECODE_PIONEER
-
522 #ifndef SEND_PIONEER
-
523 #define SEND_PIONEER _IR_ENABLE_DEFAULT_
-
524 #endif // SEND_PIONEER
-
525 
-
526 #ifndef DECODE_DAIKIN2
-
527 #define DECODE_DAIKIN2 _IR_ENABLE_DEFAULT_
-
528 #endif // DECODE_DAIKIN2
-
529 #ifndef SEND_DAIKIN2
-
530 #define SEND_DAIKIN2 _IR_ENABLE_DEFAULT_
-
531 #endif // SEND_DAIKIN2
-
532 
-
533 #ifndef DECODE_VESTEL_AC
-
534 #define DECODE_VESTEL_AC _IR_ENABLE_DEFAULT_
-
535 #endif // DECODE_VESTEL_AC
-
536 #ifndef SEND_VESTEL_AC
-
537 #define SEND_VESTEL_AC _IR_ENABLE_DEFAULT_
-
538 #endif // SEND_VESTEL_AC
-
539 
-
540 #ifndef DECODE_TECO
-
541 #define DECODE_TECO _IR_ENABLE_DEFAULT_
-
542 #endif // DECODE_TECO
-
543 #ifndef SEND_TECO
-
544 #define SEND_TECO _IR_ENABLE_DEFAULT_
-
545 #endif // SEND_TECO
-
546 
-
547 #ifndef DECODE_TCL112AC
-
548 #define DECODE_TCL112AC _IR_ENABLE_DEFAULT_
-
549 #endif // DECODE_TCL112AC
-
550 #ifndef SEND_TCL112AC
-
551 #define SEND_TCL112AC _IR_ENABLE_DEFAULT_
-
552 #endif // SEND_TCL112AC
-
553 
-
554 #ifndef DECODE_LEGOPF
-
555 #define DECODE_LEGOPF _IR_ENABLE_DEFAULT_
-
556 #endif // DECODE_LEGOPF
-
557 #ifndef SEND_LEGOPF
-
558 #define SEND_LEGOPF _IR_ENABLE_DEFAULT_
-
559 #endif // SEND_LEGOPF
-
560 
-
561 #ifndef DECODE_MITSUBISHIHEAVY
-
562 #define DECODE_MITSUBISHIHEAVY _IR_ENABLE_DEFAULT_
-
563 #endif // DECODE_MITSUBISHIHEAVY
-
564 #ifndef SEND_MITSUBISHIHEAVY
-
565 #define SEND_MITSUBISHIHEAVY _IR_ENABLE_DEFAULT_
-
566 #endif // SEND_MITSUBISHIHEAVY
-
567 
-
568 #ifndef DECODE_DAIKIN216
-
569 #define DECODE_DAIKIN216 _IR_ENABLE_DEFAULT_
-
570 #endif // DECODE_DAIKIN216
-
571 #ifndef SEND_DAIKIN216
-
572 #define SEND_DAIKIN216 _IR_ENABLE_DEFAULT_
-
573 #endif // SEND_DAIKIN216
-
574 
-
575 #ifndef DECODE_DAIKIN160
-
576 #define DECODE_DAIKIN160 _IR_ENABLE_DEFAULT_
-
577 #endif // DECODE_DAIKIN160
-
578 #ifndef SEND_DAIKIN160
-
579 #define SEND_DAIKIN160 _IR_ENABLE_DEFAULT_
-
580 #endif // SEND_DAIKIN160
-
581 
-
582 #ifndef DECODE_NEOCLIMA
-
583 #define DECODE_NEOCLIMA _IR_ENABLE_DEFAULT_
-
584 #endif // DECODE_NEOCLIMA
-
585 #ifndef SEND_NEOCLIMA
-
586 #define SEND_NEOCLIMA _IR_ENABLE_DEFAULT_
-
587 #endif // SEND_NEOCLIMA
-
588 
-
589 #ifndef DECODE_DAIKIN176
-
590 #define DECODE_DAIKIN176 _IR_ENABLE_DEFAULT_
-
591 #endif // DECODE_DAIKIN176
-
592 #ifndef SEND_DAIKIN176
-
593 #define SEND_DAIKIN176 _IR_ENABLE_DEFAULT_
-
594 #endif // SEND_DAIKIN176
-
595 
-
596 #ifndef DECODE_DAIKIN128
-
597 #define DECODE_DAIKIN128 _IR_ENABLE_DEFAULT_
-
598 #endif // DECODE_DAIKIN128
-
599 #ifndef SEND_DAIKIN128
-
600 #define SEND_DAIKIN128 _IR_ENABLE_DEFAULT_
-
601 #endif // SEND_DAIKIN128
-
602 
-
603 #ifndef DECODE_AMCOR
-
604 #define DECODE_AMCOR _IR_ENABLE_DEFAULT_
-
605 #endif // DECODE_AMCOR
-
606 #ifndef SEND_AMCOR
-
607 #define SEND_AMCOR _IR_ENABLE_DEFAULT_
-
608 #endif // SEND_AMCOR
-
609 
-
610 #ifndef DECODE_DAIKIN152
-
611 #define DECODE_DAIKIN152 _IR_ENABLE_DEFAULT_
-
612 #endif // DECODE_DAIKIN152
-
613 #ifndef SEND_DAIKIN152
-
614 #define SEND_DAIKIN152 _IR_ENABLE_DEFAULT_
-
615 #endif // SEND_DAIKIN152
-
616 
-
617 #ifndef DECODE_EPSON
-
618 #define DECODE_EPSON _IR_ENABLE_DEFAULT_
-
619 #endif // DECODE_EPSON
-
620 #ifndef SEND_EPSON
-
621 #define SEND_EPSON _IR_ENABLE_DEFAULT_
-
622 #endif // SEND_EPSON
-
623 
-
624 #ifndef DECODE_SYMPHONY
-
625 #define DECODE_SYMPHONY _IR_ENABLE_DEFAULT_
-
626 #endif // DECODE_SYMPHONY
-
627 #ifndef SEND_SYMPHONY
-
628 #define SEND_SYMPHONY _IR_ENABLE_DEFAULT_
-
629 #endif // SEND_SYMPHONY
-
630 
-
631 #ifndef DECODE_DAIKIN64
-
632 #define DECODE_DAIKIN64 _IR_ENABLE_DEFAULT_
-
633 #endif // DECODE_DAIKIN64
-
634 #ifndef SEND_DAIKIN64
-
635 #define SEND_DAIKIN64 _IR_ENABLE_DEFAULT_
-
636 #endif // SEND_DAIKIN64
-
637 
-
638 #ifndef DECODE_AIRWELL
-
639 #define DECODE_AIRWELL _IR_ENABLE_DEFAULT_
-
640 #endif // DECODE_AIRWELL
-
641 #ifndef SEND_AIRWELL
-
642 #define SEND_AIRWELL _IR_ENABLE_DEFAULT_
-
643 #endif // SEND_AIRWELL
-
644 
-
645 #ifndef DECODE_DELONGHI_AC
-
646 #define DECODE_DELONGHI_AC _IR_ENABLE_DEFAULT_
-
647 #endif // DECODE_DELONGHI_AC
-
648 #ifndef SEND_DELONGHI_AC
-
649 #define SEND_DELONGHI_AC _IR_ENABLE_DEFAULT_
-
650 #endif // SEND_DELONGHI_AC
-
651 
-
652 #ifndef DECODE_DOSHISHA
-
653 #define DECODE_DOSHISHA _IR_ENABLE_DEFAULT_
-
654 #endif // DECODE_DOSHISHA
-
655 #ifndef SEND_DOSHISHA
-
656 #define SEND_DOSHISHA _IR_ENABLE_DEFAULT_
-
657 #endif // SEND_DOSHISHA
-
658 
-
659 #ifndef DECODE_MULTIBRACKETS
-
660 #define DECODE_MULTIBRACKETS _IR_ENABLE_DEFAULT_
-
661 #endif // DECODE_MULTIBRACKETS
-
662 #ifndef SEND_MULTIBRACKETS
-
663 #define SEND_MULTIBRACKETS _IR_ENABLE_DEFAULT_
-
664 #endif // SEND_MULTIBRACKETS
-
665 
-
666 #ifndef DECODE_TECHNIBEL_AC
-
667 #define DECODE_TECHNIBEL_AC _IR_ENABLE_DEFAULT_
-
668 #endif // DECODE_TECHNIBEL_AC
-
669 #ifndef SEND_TECHNIBEL_AC
-
670 #define SEND_TECHNIBEL_AC _IR_ENABLE_DEFAULT_
-
671 #endif // SEND_TECHNIBEL_AC
-
672 
-
673 #ifndef DECODE_CORONA_AC
-
674 #define DECODE_CORONA_AC _IR_ENABLE_DEFAULT_
-
675 #endif // DECODE_CORONA_AC
-
676 #ifndef SEND_CORONA_AC
-
677 #define SEND_CORONA_AC _IR_ENABLE_DEFAULT_
-
678 #endif // SEND_CORONA_AC
-
679 
-
680 #ifndef DECODE_ZEPEAL
-
681 #define DECODE_ZEPEAL _IR_ENABLE_DEFAULT_
-
682 #endif // DECODE_ZEPEAL
-
683 #ifndef SEND_ZEPEAL
-
684 #define SEND_ZEPEAL _IR_ENABLE_DEFAULT_
-
685 #endif // SEND_ZEPEAL
-
686 
-
687 #ifndef DECODE_VOLTAS
-
688 #define DECODE_VOLTAS _IR_ENABLE_DEFAULT_
-
689 #endif // DECODE_VOLTAS
-
690 #ifndef SEND_VOLTAS
-
691 #define SEND_VOLTAS _IR_ENABLE_DEFAULT_
-
692 #endif // SEND_VOLTAS
-
693 
-
694 #ifndef DECODE_METZ
-
695 #define DECODE_METZ _IR_ENABLE_DEFAULT_
-
696 #endif // DECODE_METZ
-
697 #ifndef SEND_METZ
-
698 #define SEND_METZ _IR_ENABLE_DEFAULT_
-
699 #endif // SEND_METZ
-
700 
-
701 #ifndef DECODE_TRANSCOLD
-
702 #define DECODE_TRANSCOLD _IR_ENABLE_DEFAULT_
-
703 #endif // DECODE_TRANSCOLD
-
704 #ifndef SEND_TRANSCOLD
-
705 #define SEND_TRANSCOLD _IR_ENABLE_DEFAULT_
-
706 #endif // SEND_TRANSCOLD
-
707 
-
708 #ifndef DECODE_MIRAGE
-
709 #define DECODE_MIRAGE _IR_ENABLE_DEFAULT_
-
710 #endif // DECODE_MIRAGE
-
711 #ifndef SEND_MIRAGE
-
712 #define SEND_MIRAGE _IR_ENABLE_DEFAULT_
-
713 #endif // SEND_MIRAGE
-
714 
-
715 #ifndef DECODE_ELITESCREENS
-
716 #define DECODE_ELITESCREENS _IR_ENABLE_DEFAULT_
-
717 #endif // DECODE_ELITESCREENS
-
718 #ifndef SEND_ELITESCREENS
-
719 #define SEND_ELITESCREENS _IR_ENABLE_DEFAULT_
-
720 #endif // SEND_ELITESCREENS
-
721 
-
722 #ifndef DECODE_MILESTAG2
-
723 #define DECODE_MILESTAG2 _IR_ENABLE_DEFAULT_
-
724 #endif // DECODE_MILESTAG2
-
725 #ifndef SEND_MILESTAG2
-
726 #define SEND_MILESTAG2 _IR_ENABLE_DEFAULT_
-
727 #endif // SEND_MILESTAG2
-
728 
-
729 #ifndef DECODE_ECOCLIM
-
730 #define DECODE_ECOCLIM _IR_ENABLE_DEFAULT_
-
731 #endif // DECODE_ECOCLIM
-
732 #ifndef SEND_ECOCLIM
-
733 #define SEND_ECOCLIM _IR_ENABLE_DEFAULT_
-
734 #endif // SEND_ECOCLIM
-
735 
-
736 #ifndef DECODE_XMP
-
737 #define DECODE_XMP _IR_ENABLE_DEFAULT_
-
738 #endif // DECODE_XMP
-
739 #ifndef SEND_XMP
-
740 #define SEND_XMP _IR_ENABLE_DEFAULT_
-
741 #endif // SEND_XMP
-
742 
-
743 #ifndef DECODE_TRUMA
-
744 #define DECODE_TRUMA _IR_ENABLE_DEFAULT_
-
745 #endif // DECODE_TRUMA
-
746 #ifndef SEND_TRUMA
-
747 #define SEND_TRUMA _IR_ENABLE_DEFAULT_
-
748 #endif // SEND_TRUMA
-
749 
-
750 #if (DECODE_ARGO || DECODE_DAIKIN || DECODE_FUJITSU_AC || DECODE_GREE || \
-
751  DECODE_KELVINATOR || DECODE_MITSUBISHI_AC || DECODE_TOSHIBA_AC || \
-
752  DECODE_TROTEC || DECODE_HAIER_AC || DECODE_HITACHI_AC || \
-
753  DECODE_HITACHI_AC1 || DECODE_HITACHI_AC2 || DECODE_HAIER_AC_YRW02 || \
-
754  DECODE_WHIRLPOOL_AC || DECODE_SAMSUNG_AC || DECODE_ELECTRA_AC || \
-
755  DECODE_PANASONIC_AC || DECODE_MWM || DECODE_DAIKIN2 || \
-
756  DECODE_VESTEL_AC || DECODE_TCL112AC || DECODE_MITSUBISHIHEAVY || \
-
757  DECODE_DAIKIN216 || DECODE_SHARP_AC || DECODE_DAIKIN160 || \
-
758  DECODE_NEOCLIMA || DECODE_DAIKIN176 || DECODE_DAIKIN128 || \
-
759  DECODE_AMCOR || DECODE_DAIKIN152 || DECODE_MITSUBISHI136 || \
-
760  DECODE_MITSUBISHI112 || DECODE_HITACHI_AC424 || DECODE_HITACHI_AC3 || \
-
761  DECODE_HITACHI_AC344 || DECODE_CORONA_AC || DECODE_SANYO_AC || \
-
762  DECODE_VOLTAS || DECODE_MIRAGE)
-
763  // Add any DECODE to the above if it uses result->state (see kStateSizeMax)
-
764  // you might also want to add the protocol to hasACState function
-
765 #define DECODE_AC true // We need some common infrastructure for decoding A/Cs.
-
766 #else
-
767 #define DECODE_AC false // We don't need that infrastructure.
-
768 #endif
-
769 
-
770 // Use millisecond 'delay()' calls where we can to avoid tripping the WDT.
-
771 // Note: If you plan to send IR messages in the callbacks of the AsyncWebserver
-
772 // library, you need to set ALLOW_DELAY_CALLS to false.
-
773 // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/430
-
774 #ifndef ALLOW_DELAY_CALLS
-
775 #define ALLOW_DELAY_CALLS true
-
776 #endif // ALLOW_DELAY_CALLS
-
777 
-
778 // Enable a run-time settable high-pass filter on captured data **before**
-
779 // trying any protocol decoding.
-
780 // i.e. Try to remove/merge any really short pulses detected in the raw data.
-
781 // Note: Even when this option is enabled, it is _off_ by default, and requires
-
782 // a user who knows what they are doing to enable it.
-
783 // The option to disable this feature is here if your project is _really_
-
784 // tight on resources. i.e. Saves a small handful of bytes and cpu time.
-
785 // WARNING: If you use this feature at runtime, you can no longer trust the
-
786 // **raw** data captured. It will now have been slightly **cooked**!
-
787 // DANGER: If you set the `noise_floor` value too high, it **WILL** break
-
788 // decoding of some protocols. You have been warned. Here Be Dragons!
-
789 //
-
790 // See: `irrecv::decode()` in IRrecv.cpp for more info.
-
791 #ifndef ENABLE_NOISE_FILTER_OPTION
-
792 #define ENABLE_NOISE_FILTER_OPTION true
-
793 #endif // ENABLE_NOISE_FILTER_OPTION
-
794 
- -
800  UNKNOWN = -1,
-
801  UNUSED = 0,
- - - - -
806  PANASONIC, // (5)
- - - - -
811  LG, // (10)
- - - - -
816  COOLIX, // (15)
- - - - -
821  MITSUBISHI_AC, // (20)
- - - - -
826  PRONTO, // Technically not a protocol, but an encoding. (25)
- - - - -
831  RAW, // Technically not a protocol, but an encoding. (30)
-
832  GLOBALCACHE, // Technically not a protocol, but an encoding.
- - - -
836  MAGIQUEST, // (35)
- - - - -
841  HITACHI_AC, // (40)
- - - - -
846  WHIRLPOOL_AC, // (45)
- - - - -
851  PIONEER, // (50)
- - - - -
856  TECO, // (55)
- - - - - - - - - -
866  DAIKIN160, // 65
- - - - -
871  DAIKIN152, // 70
- - - - -
876  EPSON, // 75
- - - - -
881  DELONGHI_AC, // 80
- - - - - - - - - -
891  VOLTAS, // 90
- - - - - - - - - -
901  TRUMA, // 100
-
902  // Add new entries before this one, and update it to point to the last entry.
- -
904 };
-
905 
-
906 // Message lengths & required repeat values
-
907 const uint16_t kNoRepeat = 0;
-
908 const uint16_t kSingleRepeat = 1;
-
909 
-
910 const uint16_t kAirwellBits = 34;
-
911 const uint16_t kAirwellMinRepeats = 2;
-
912 const uint16_t kAiwaRcT501Bits = 15;
- -
914 const uint16_t kAlokaBits = 32;
-
915 const uint16_t kAmcorStateLength = 8;
-
916 const uint16_t kAmcorBits = kAmcorStateLength * 8;
- -
918 const uint16_t kArgoStateLength = 12;
-
919 const uint16_t kArgoBits = kArgoStateLength * 8;
-
920 const uint16_t kArgoDefaultRepeat = kNoRepeat;
-
921 const uint16_t kCoolixBits = 24;
- -
923 const uint16_t kCarrierAcBits = 32;
- -
925 const uint16_t kCarrierAc40Bits = 40;
-
926 const uint16_t kCarrierAc40MinRepeat = 2;
-
927 const uint16_t kCarrierAc64Bits = 64;
- -
929 const uint16_t kCoronaAcStateLengthShort = 7;
- - -
932 const uint16_t kCoronaAcBits = kCoronaAcStateLength * 8;
-
933 const uint16_t kDaikinStateLength = 35;
-
934 const uint16_t kDaikinBits = kDaikinStateLength * 8;
- - - -
938 const uint16_t kDaikin2StateLength = 39;
-
939 const uint16_t kDaikin2Bits = kDaikin2StateLength * 8;
- -
941 const uint16_t kDaikin64Bits = 64;
- -
943 const uint16_t kDaikin160StateLength = 20;
- - -
946 const uint16_t kDaikin128StateLength = 16;
- - -
949 const uint16_t kDaikin152StateLength = 19;
- - -
952 const uint16_t kDaikin176StateLength = 22;
- - -
955 const uint16_t kDaikin216StateLength = 27;
- - -
958 const uint16_t kDelonghiAcBits = 64;
- -
960 const uint16_t kTechnibelAcBits = 56;
- -
962 const uint16_t kDenonBits = 15;
-
963 const uint16_t kDenon48Bits = 48;
-
964 const uint16_t kDenonLegacyBits = 14;
-
965 const uint16_t kDishBits = 16;
-
966 const uint16_t kDishMinRepeat = 3;
-
967 const uint16_t kDoshishaBits = 40;
-
968 const uint16_t kEcoclimBits = 56;
-
969 const uint16_t kEcoclimShortBits = 15;
-
970 const uint16_t kEpsonBits = 32;
-
971 const uint16_t kEpsonMinRepeat = 2;
-
972 const uint16_t kElectraAcStateLength = 13;
- - -
975 const uint16_t kEliteScreensBits = 32;
- - -
978 const uint16_t kFujitsuAcStateLength = 16;
-
979 const uint16_t kFujitsuAcStateLengthShort = 7;
- - -
982 const uint16_t kGicableBits = 16;
- -
984 const uint16_t kGoodweatherBits = 48;
- -
986 const uint16_t kGreeStateLength = 8;
-
987 const uint16_t kGreeBits = kGreeStateLength * 8;
-
988 const uint16_t kGreeDefaultRepeat = kNoRepeat;
-
989 const uint16_t kHaierACStateLength = 9;
-
990 const uint16_t kHaierACBits = kHaierACStateLength * 8;
- -
992 const uint16_t kHaierACYRW02StateLength = 14;
- - -
995 const uint16_t kHitachiAcStateLength = 28;
- - -
998 const uint16_t kHitachiAc1StateLength = 13;
- -
1000 const uint16_t kHitachiAc2StateLength = 53;
- -
1002 const uint16_t kHitachiAc3StateLength = 27;
- -
1004 const uint16_t kHitachiAc3MinStateLength = 15;
- -
1006 const uint16_t kHitachiAc344StateLength = 43;
- -
1008 const uint16_t kHitachiAc424StateLength = 53;
- -
1010 const uint16_t kInaxBits = 24;
- -
1012 const uint16_t kJvcBits = 16;
-
1013 const uint16_t kKelvinatorStateLength = 16;
- - -
1016 const uint16_t kLasertagBits = 13;
- -
1018 const uint16_t kLegoPfBits = 16;
-
1019 const uint16_t kLegoPfMinRepeat = kNoRepeat;
-
1020 const uint16_t kLgBits = 28;
-
1021 const uint16_t kLg32Bits = 32;
-
1022 const uint16_t kLgDefaultRepeat = kNoRepeat;
-
1023 const uint16_t kLutronBits = 35;
-
1024 const uint16_t kMagiquestBits = 56;
-
1025 const uint16_t kMetzBits = 19;
-
1026 const uint16_t kMetzMinRepeat = kNoRepeat;
-
1027 const uint16_t kMideaBits = 48;
-
1028 const uint16_t kMideaMinRepeat = kNoRepeat;
-
1029 const uint16_t kMidea24Bits = 24;
- -
1031 const uint16_t kMirageStateLength = 15;
-
1032 const uint16_t kMirageBits = kMirageStateLength * 8;
-
1033 const uint16_t kMirageMinRepeat = kNoRepeat;
-
1034 const uint16_t kMitsubishiBits = 16;
-
1035 // TODO(anyone): Verify that the Mitsubishi repeat is really needed.
-
1036 // Based on marcosamarinho's code.
- -
1038 const uint16_t kMitsubishiACStateLength = 18;
- - -
1041 const uint16_t kMitsubishi136StateLength = 17;
- - -
1044 const uint16_t kMitsubishi112StateLength = 14;
- - -
1047 const uint16_t kMitsubishiHeavy88StateLength = 11;
- - - - - -
1053 const uint16_t kMultibracketsBits = 8;
- -
1055 const uint16_t kNikaiBits = 24;
-
1056 const uint16_t kNECBits = 32;
-
1057 const uint16_t kNeoclimaStateLength = 12;
- - -
1060 const uint16_t kPanasonicBits = 48;
-
1061 const uint32_t kPanasonicManufacturer = 0x4004;
-
1062 const uint16_t kPanasonicAcStateLength = 27;
-
1063 const uint16_t kPanasonicAcStateShortLength = 16;
- - - -
1067 const uint16_t kPanasonicAc32Bits = 32;
-
1068 const uint16_t kPioneerBits = 64;
-
1069 const uint16_t kProntoMinLength = 6;
-
1070 const uint16_t kRC5RawBits = 14;
-
1071 const uint16_t kRC5Bits = kRC5RawBits - 2;
-
1072 const uint16_t kRC5XBits = kRC5RawBits - 1;
-
1073 const uint16_t kRC6Mode0Bits = 20; // Excludes the 'start' bit.
-
1074 const uint16_t kRC6_36Bits = 36; // Excludes the 'start' bit.
-
1075 const uint16_t kRCMMBits = 24;
-
1076 const uint16_t kSamsungBits = 32;
-
1077 const uint16_t kSamsung36Bits = 36;
-
1078 const uint16_t kSamsungAcStateLength = 14;
- -
1080 const uint16_t kSamsungAcExtendedStateLength = 21;
- - -
1083 const uint16_t kSanyoAcStateLength = 9;
-
1084 const uint16_t kSanyoAcBits = kSanyoAcStateLength * 8;
-
1085 const uint16_t kSanyoSA8650BBits = 12;
-
1086 const uint16_t kSanyoLC7461AddressBits = 13;
-
1087 const uint16_t kSanyoLC7461CommandBits = 8;
- - -
1090 const uint8_t kSharpAddressBits = 5;
-
1091 const uint8_t kSharpCommandBits = 8;
-
1092 const uint16_t kSharpBits = kSharpAddressBits + kSharpCommandBits + 2; // 15
-
1093 const uint16_t kSharpAcStateLength = 13;
-
1094 const uint16_t kSharpAcBits = kSharpAcStateLength * 8; // 104
- -
1096 const uint8_t kSherwoodBits = kNECBits;
- -
1098 const uint16_t kSony12Bits = 12;
-
1099 const uint16_t kSony15Bits = 15;
-
1100 const uint16_t kSony20Bits = 20;
-
1101 const uint16_t kSonyMinBits = 12;
-
1102 const uint16_t kSonyMinRepeat = 2;
-
1103 const uint16_t kSymphonyBits = 12;
-
1104 const uint16_t kSymphonyDefaultRepeat = 3;
-
1105 const uint16_t kTcl112AcStateLength = 14;
- - -
1108 const uint16_t kTecoBits = 35;
- -
1110 const uint16_t kToshibaACStateLength = 9;
- - - - - - -
1117 const uint16_t kTranscoldBits = 24;
- -
1119 const uint16_t kTrotecStateLength = 9;
-
1120 const uint16_t kTrotecBits = kTrotecStateLength * 8;
- -
1122 const uint16_t kTrumaBits = 56;
-
1123 const uint16_t kWhirlpoolAcStateLength = 21;
- - -
1126 const uint16_t kWhynterBits = 32;
-
1127 const uint8_t kVestelAcBits = 56;
-
1128 const uint16_t kXmpBits = 64;
-
1129 const uint16_t kZepealBits = 16;
-
1130 const uint16_t kZepealMinRepeat = 4;
-
1131 const uint16_t kVoltasBits = 80;
-
1132 const uint16_t kVoltasStateLength = 10;
-
1133 const uint16_t kMilesTag2ShotBits = 14;
-
1134 const uint16_t kMilesTag2MsgBits = 24;
-
1135 const uint16_t kMilesMinRepeat = 0;
-
1136 
-
1137 
-
1138 // Legacy defines. (Deprecated)
-
1139 #define AIWA_RC_T501_BITS kAiwaRcT501Bits
-
1140 #define ARGO_COMMAND_LENGTH kArgoStateLength
-
1141 #define COOLIX_BITS kCoolixBits
-
1142 #define CARRIER_AC_BITS kCarrierAcBits
-
1143 #define DAIKIN_COMMAND_LENGTH kDaikinStateLength
-
1144 #define DENON_BITS kDenonBits
-
1145 #define DENON_48_BITS kDenon48Bits
-
1146 #define DENON_LEGACY_BITS kDenonLegacyBits
-
1147 #define DISH_BITS kDishBits
-
1148 #define FUJITSU_AC_MIN_REPEAT kFujitsuAcMinRepeat
-
1149 #define FUJITSU_AC_STATE_LENGTH kFujitsuAcStateLength
-
1150 #define FUJITSU_AC_STATE_LENGTH_SHORT kFujitsuAcStateLengthShort
-
1151 #define FUJITSU_AC_BITS kFujitsuAcBits
-
1152 #define FUJITSU_AC_MIN_BITS kFujitsuAcMinBits
-
1153 #define GICABLE_BITS kGicableBits
-
1154 #define GREE_STATE_LENGTH kGreeStateLength
-
1155 #define HAIER_AC_STATE_LENGTH kHaierACStateLength
-
1156 #define HAIER_AC_YRW02_STATE_LENGTH kHaierACYRW02StateLength
-
1157 #define HITACHI_AC_STATE_LENGTH kHitachiAcStateLength
-
1158 #define HITACHI_AC_BITS kHitachiAcBits
-
1159 #define HITACHI_AC1_STATE_LENGTH kHitachiAc1StateLength
-
1160 #define HITACHI_AC1_BITS kHitachiAc1Bits
-
1161 #define HITACHI_AC2_STATE_LENGTH kHitachiAc2StateLength
-
1162 #define HITACHI_AC2_BITS kHitachiAc2Bits
-
1163 #define JVC_BITS kJvcBits
-
1164 #define KELVINATOR_STATE_LENGTH kKelvinatorStateLength
-
1165 #define LASERTAG_BITS kLasertagBits
-
1166 #define LG_BITS kLgBits
-
1167 #define LG32_BITS kLg32Bits
-
1168 #define MAGIQUEST_BITS kMagiquestBits
-
1169 #define MIDEA_BITS kMideaBits
-
1170 #define MITSUBISHI_BITS kMitsubishiBits
-
1171 #define MITSUBISHI_AC_STATE_LENGTH kMitsubishiACStateLength
-
1172 #define NEC_BITS kNECBits
-
1173 #define NIKAI_BITS kNikaiBits
-
1174 #define PANASONIC_BITS kPanasonicBits
-
1175 #define RC5_BITS kRC5Bits
-
1176 #define RC5X_BITS kRC5XBits
-
1177 #define RC6_MODE0_BITS kRC6Mode0Bits
-
1178 #define RC6_36_BITS kRC6_36Bits
-
1179 #define RCMM_BITS kRCMMBits
-
1180 #define SANYO_LC7461_BITS kSanyoLC7461Bits
-
1181 #define SAMSUNG_BITS kSamsungBits
-
1182 #define SANYO_SA8650B_BITS kSanyoSA8650BBits
-
1183 #define SHARP_BITS kSharpBits
-
1184 #define SHERWOOD_BITS kSherwoodBits
-
1185 #define SONY_12_BITS kSony12Bits
-
1186 #define SONY_15_BITS kSony15Bits
-
1187 #define SONY_20_BITS kSony20Bits
-
1188 #define TOSHIBA_AC_STATE_LENGTH kToshibaACStateLength
-
1189 #define TROTEC_COMMAND_LENGTH kTrotecStateLength
-
1190 #define WHYNTER_BITS kWhynterBits
-
1191 
-
1192 // Turn on Debugging information by uncommenting the following line.
-
1193 // #define DEBUG 1
-
1194 
-
1195 #ifdef DEBUG
-
1196 #ifdef UNIT_TEST
-
1197 #define DPRINT(x) do { std::cout << x; } while (0)
-
1198 #define DPRINTLN(x) do { std::cout << x << std::endl; } while (0)
-
1199 #endif // UNIT_TEST
-
1200 #ifdef ARDUINO
-
1201 #define DPRINT(x) do { Serial.print(x); } while (0)
-
1202 #define DPRINTLN(x) do { Serial.println(x); } while (0)
-
1203 #endif // ARDUINO
-
1204 #else // DEBUG
-
1205 #define DPRINT(x)
-
1206 #define DPRINTLN(x)
-
1207 #endif // DEBUG
-
1208 
-
1209 #ifdef UNIT_TEST
-
1210 #ifndef F
-
1211 // Create a no-op F() macro so the code base still compiles outside of the
-
1212 // Arduino framework. Thus we can safely use the Arduino 'F()' macro through-out
-
1213 // the code base. That macro stores constants in Flash (PROGMEM) memory.
-
1214 // See: https://github.com/crankyoldgit/IRremoteESP8266/issues/667
-
1215 #define F(x) x
-
1216 #endif // F
-
1217 typedef std::string String;
-
1218 #endif // UNIT_TEST
-
1219 
-
1220 #endif // IRREMOTEESP8266_H_
-
-
@ ARGO
Definition: IRremoteESP8266.h:828
-
const uint16_t kDaikin152DefaultRepeat
Definition: IRremoteESP8266.h:951
-
const uint16_t kSanyoSA8650BBits
Definition: IRremoteESP8266.h:1085
-
const uint16_t kDelonghiAcBits
Definition: IRremoteESP8266.h:958
-
const uint16_t kHaierAcYrw02DefaultRepeat
Definition: IRremoteESP8266.h:994
-
const uint16_t kHitachiAc3MinStateLength
Definition: IRremoteESP8266.h:1004
-
@ SANYO_AC
Definition: IRremoteESP8266.h:890
-
const uint16_t kMirageBits
Definition: IRremoteESP8266.h:1032
-
const uint16_t kMitsubishiACStateLength
Definition: IRremoteESP8266.h:1038
-
const uint16_t kMitsubishiHeavy152StateLength
Definition: IRremoteESP8266.h:1050
-
const uint16_t kAirwellMinRepeats
Definition: IRremoteESP8266.h:911
-
const uint16_t kMideaMinRepeat
Definition: IRremoteESP8266.h:1028
-
const uint16_t kMilesMinRepeat
Definition: IRremoteESP8266.h:1135
-
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:982
-
const uint16_t kGreeStateLength
Definition: IRremoteESP8266.h:986
-
@ DISH
Definition: IRremoteESP8266.h:814
-
@ UNUSED
Definition: IRremoteESP8266.h:801
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
const uint16_t kCarrierAcBits
Definition: IRremoteESP8266.h:923
-
const uint16_t kDenonLegacyBits
Definition: IRremoteESP8266.h:964
-
@ SHERWOOD
Definition: IRremoteESP8266.h:820
-
const uint16_t kSingleRepeat
Definition: IRremoteESP8266.h:908
-
const uint16_t kDaikin2DefaultRepeat
Definition: IRremoteESP8266.h:940
-
const uint16_t kMultibracketsBits
Definition: IRremoteESP8266.h:1053
-
const uint16_t kSharpAcBits
Definition: IRremoteESP8266.h:1094
-
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1126
-
@ CARRIER_AC
Definition: IRremoteESP8266.h:838
-
@ TOSHIBA_AC
Definition: IRremoteESP8266.h:833
-
@ AIRWELL
Definition: IRremoteESP8266.h:880
-
const uint16_t kAirwellBits
Definition: IRremoteESP8266.h:910
-
const uint16_t kHaierAcDefaultRepeat
Definition: IRremoteESP8266.h:991
-
@ PRONTO
Definition: IRremoteESP8266.h:826
-
const uint16_t kTrotecDefaultRepeat
Definition: IRremoteESP8266.h:1121
-
const uint16_t kFujitsuAcMinRepeat
Definition: IRremoteESP8266.h:977
-
const uint16_t kCoronaAcBits
Definition: IRremoteESP8266.h:932
-
const uint16_t kMitsubishiACBits
Definition: IRremoteESP8266.h:1039
-
const uint16_t kMitsubishi136MinRepeat
Definition: IRremoteESP8266.h:1043
-
@ UNKNOWN
Definition: IRremoteESP8266.h:800
-
const uint16_t kTechnibelAcBits
Definition: IRremoteESP8266.h:960
-
const uint16_t kArgoDefaultRepeat
Definition: IRremoteESP8266.h:920
-
const uint16_t kVoltasBits
Definition: IRremoteESP8266.h:1131
-
const uint16_t kHaierACStateLength
Definition: IRremoteESP8266.h:989
-
const uint16_t kHitachiAcStateLength
Definition: IRremoteESP8266.h:995
-
@ MITSUBISHI112
Definition: IRremoteESP8266.h:873
-
@ ECOCLIM
Definition: IRremoteESP8266.h:899
-
const uint16_t kDaikin176StateLength
Definition: IRremoteESP8266.h:952
-
const uint16_t kRC5XBits
Definition: IRremoteESP8266.h:1072
-
const uint16_t kEpsonMinRepeat
Definition: IRremoteESP8266.h:971
-
const uint16_t kAmcorStateLength
Definition: IRremoteESP8266.h:915
-
@ DAIKIN128
Definition: IRremoteESP8266.h:869
-
const uint16_t kAlokaBits
Definition: IRremoteESP8266.h:914
-
@ JVC
Definition: IRremoteESP8266.h:807
-
@ TRUMA
Definition: IRremoteESP8266.h:901
-
@ SONY
Definition: IRremoteESP8266.h:805
-
@ HITACHI_AC2
Definition: IRremoteESP8266.h:843
-
const uint16_t kHitachiAc1StateLength
Definition: IRremoteESP8266.h:998
-
const uint16_t kCoolixBits
Definition: IRremoteESP8266.h:921
-
const uint16_t kMitsubishi112MinRepeat
Definition: IRremoteESP8266.h:1046
-
const uint16_t kMirageStateLength
Definition: IRremoteESP8266.h:1031
-
const uint16_t kCoronaAcBitsShort
Definition: IRremoteESP8266.h:931
-
const uint16_t kSamsung36Bits
Definition: IRremoteESP8266.h:1077
-
const uint16_t kMagiquestBits
Definition: IRremoteESP8266.h:1024
-
@ LUTRON
Definition: IRremoteESP8266.h:848
-
const uint8_t kSharpCommandBits
Definition: IRremoteESP8266.h:1091
-
const uint16_t kNeoclimaStateLength
Definition: IRremoteESP8266.h:1057
-
@ RCMM
Definition: IRremoteESP8266.h:822
-
@ SANYO_LC7461
Definition: IRremoteESP8266.h:823
-
@ TROTEC
Definition: IRremoteESP8266.h:829
-
const uint16_t kFujitsuAcMinBits
Definition: IRremoteESP8266.h:981
-
const uint16_t kSamsungAcDefaultRepeat
Definition: IRremoteESP8266.h:1082
-
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1088
-
const uint16_t kMirageMinRepeat
Definition: IRremoteESP8266.h:1033
-
@ DAIKIN160
Definition: IRremoteESP8266.h:866
-
@ CORONA_AC
Definition: IRremoteESP8266.h:887
-
const uint16_t kSanyoLC7461CommandBits
Definition: IRremoteESP8266.h:1087
-
const uint16_t kTrotecBits
Definition: IRremoteESP8266.h:1120
-
@ PANASONIC
Definition: IRremoteESP8266.h:806
-
const uint16_t kZepealMinRepeat
Definition: IRremoteESP8266.h:1130
-
@ MIRAGE
Definition: IRremoteESP8266.h:895
-
const uint16_t kTranscoldDefaultRepeat
Definition: IRremoteESP8266.h:1118
-
const uint16_t kMetzMinRepeat
Definition: IRremoteESP8266.h:1026
-
const uint16_t kDenon48Bits
Definition: IRremoteESP8266.h:963
-
const uint16_t kEliteScreensBits
Definition: IRremoteESP8266.h:975
-
@ DAIKIN2
Definition: IRremoteESP8266.h:854
-
const uint16_t kHitachiAc2Bits
Definition: IRremoteESP8266.h:1001
-
const uint16_t kElectraAcMinRepeat
Definition: IRremoteESP8266.h:974
-
const uint16_t kToshibaACBitsLong
Definition: IRremoteESP8266.h:1116
-
@ MITSUBISHI_AC
Definition: IRremoteESP8266.h:821
-
@ MAGIQUEST
Definition: IRremoteESP8266.h:836
-
const uint16_t kHitachiAc3StateLength
Definition: IRremoteESP8266.h:1002
-
const uint16_t kLg32Bits
Definition: IRremoteESP8266.h:1021
-
@ DOSHISHA
Definition: IRremoteESP8266.h:882
-
const uint16_t kCoronaAcStateLengthShort
Definition: IRremoteESP8266.h:929
-
const uint16_t kElectraAcBits
Definition: IRremoteESP8266.h:973
-
const uint16_t kSonyMinBits
Definition: IRremoteESP8266.h:1101
-
@ HAIER_AC_YRW02
Definition: IRremoteESP8266.h:845
-
const uint16_t kAiwaRcT501MinRepeats
Definition: IRremoteESP8266.h:913
-
@ HITACHI_AC424
Definition: IRremoteESP8266.h:874
-
const uint16_t kVoltasStateLength
Definition: IRremoteESP8266.h:1132
-
const uint16_t kDaikin2Bits
Definition: IRremoteESP8266.h:939
-
const uint16_t kHitachiAc1Bits
Definition: IRremoteESP8266.h:999
-
@ CARRIER_AC64
Definition: IRremoteESP8266.h:885
-
@ NEC
Definition: IRremoteESP8266.h:804
-
@ FUJITSU_AC
Definition: IRremoteESP8266.h:834
-
const uint16_t kMitsubishiMinRepeat
Definition: IRremoteESP8266.h:1037
-
@ GOODWEATHER
Definition: IRremoteESP8266.h:864
-
@ HITACHI_AC3
Definition: IRremoteESP8266.h:878
-
@ INAX
Definition: IRremoteESP8266.h:865
-
const uint16_t kArgoStateLength
Definition: IRremoteESP8266.h:918
-
@ SYMPHONY
Definition: IRremoteESP8266.h:877
-
const uint16_t kPanasonicBits
Definition: IRremoteESP8266.h:1060
-
std::string String
Definition: IRremoteESP8266.h:1217
-
@ HAIER_AC
Definition: IRremoteESP8266.h:839
-
const uint16_t kDaikinStateLengthShort
Definition: IRremoteESP8266.h:935
-
const uint16_t kRC5Bits
Definition: IRremoteESP8266.h:1071
-
const uint16_t kLgDefaultRepeat
Definition: IRremoteESP8266.h:1022
-
const uint16_t kMilesTag2ShotBits
Definition: IRremoteESP8266.h:1133
-
const uint16_t kDaikin152StateLength
Definition: IRremoteESP8266.h:949
-
const uint16_t kPanasonicAcBits
Definition: IRremoteESP8266.h:1064
-
const uint16_t kRC5RawBits
Definition: IRremoteESP8266.h:1070
-
const uint16_t kXmpBits
Definition: IRremoteESP8266.h:1128
-
const uint16_t kHaierACYRW02StateLength
Definition: IRremoteESP8266.h:992
-
const uint16_t kSanyoLC7461AddressBits
Definition: IRremoteESP8266.h:1086
-
const uint16_t kMultibracketsDefaultRepeat
Definition: IRremoteESP8266.h:1054
-
@ LG
Definition: IRremoteESP8266.h:811
-
const uint16_t kDaikin160Bits
Definition: IRremoteESP8266.h:944
-
@ HITACHI_AC344
Definition: IRremoteESP8266.h:886
-
@ MIDEA
Definition: IRremoteESP8266.h:835
-
const uint16_t kGoodweatherBits
Definition: IRremoteESP8266.h:984
-
const uint16_t kGicableMinRepeat
Definition: IRremoteESP8266.h:983
-
@ GLOBALCACHE
Definition: IRremoteESP8266.h:832
-
const uint16_t kDaikin152Bits
Definition: IRremoteESP8266.h:950
-
const uint16_t kDaikin216StateLength
Definition: IRremoteESP8266.h:955
-
@ GICABLE
Definition: IRremoteESP8266.h:844
-
const uint16_t kSamsungAcStateLength
Definition: IRremoteESP8266.h:1078
-
@ COOLIX
Definition: IRremoteESP8266.h:816
-
@ MILESTAG2
Definition: IRremoteESP8266.h:898
-
@ METZ
Definition: IRremoteESP8266.h:892
-
@ MIDEA24
Definition: IRremoteESP8266.h:888
-
const uint16_t kSymphonyBits
Definition: IRremoteESP8266.h:1103
-
const uint16_t kDaikin128StateLength
Definition: IRremoteESP8266.h:946
-
const uint16_t kRC6Mode0Bits
Definition: IRremoteESP8266.h:1073
-
@ NEOCLIMA
Definition: IRremoteESP8266.h:867
-
const uint16_t kDaikin176DefaultRepeat
Definition: IRremoteESP8266.h:954
-
const uint16_t kMitsubishiHeavy152MinRepeat
Definition: IRremoteESP8266.h:1052
-
const uint16_t kSony12Bits
Definition: IRremoteESP8266.h:1098
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
const uint16_t kSony20Bits
Definition: IRremoteESP8266.h:1100
-
const uint16_t kMitsubishiACMinRepeat
Definition: IRremoteESP8266.h:1040
-
@ MULTIBRACKETS
Definition: IRremoteESP8266.h:883
-
const uint16_t kMetzBits
Definition: IRremoteESP8266.h:1025
-
const uint16_t kHitachiAc3MinBits
Definition: IRremoteESP8266.h:1005
-
const uint16_t kPanasonicAcDefaultRepeat
Definition: IRremoteESP8266.h:1066
-
const uint16_t kSymphonyDefaultRepeat
Definition: IRremoteESP8266.h:1104
-
const uint16_t kSamsungAcExtendedStateLength
Definition: IRremoteESP8266.h:1080
-
const uint16_t kCoolixDefaultRepeat
Definition: IRremoteESP8266.h:922
-
@ DENON
Definition: IRremoteESP8266.h:818
-
const uint16_t kTcl112AcDefaultRepeat
Definition: IRremoteESP8266.h:1107
-
const uint16_t kDelonghiAcDefaultRepeat
Definition: IRremoteESP8266.h:959
-
const uint16_t kCoronaAcStateLength
Definition: IRremoteESP8266.h:930
-
@ SANYO
Definition: IRremoteESP8266.h:812
-
const uint16_t kTecoDefaultRepeat
Definition: IRremoteESP8266.h:1109
-
const uint16_t kMitsubishiHeavy152Bits
Definition: IRremoteESP8266.h:1051
-
const uint16_t kDoshishaBits
Definition: IRremoteESP8266.h:967
-
const uint16_t kCarrierAc40Bits
Definition: IRremoteESP8266.h:925
-
const uint16_t kAmcorBits
Definition: IRremoteESP8266.h:916
-
const uint16_t kTrotecStateLength
Definition: IRremoteESP8266.h:1119
-
@ LG2
Definition: IRremoteESP8266.h:852
-
const uint16_t kWhirlpoolAcDefaultRepeat
Definition: IRremoteESP8266.h:1125
-
const uint16_t kHitachiAc424StateLength
Definition: IRremoteESP8266.h:1008
-
const uint16_t kMitsubishiHeavy88StateLength
Definition: IRremoteESP8266.h:1047
-
@ RC5X
Definition: IRremoteESP8266.h:824
-
@ LASERTAG
Definition: IRremoteESP8266.h:837
-
const uint16_t kFujitsuAcStateLengthShort
Definition: IRremoteESP8266.h:979
-
const uint32_t kPanasonicManufacturer
Definition: IRremoteESP8266.h:1061
-
@ RAW
Definition: IRremoteESP8266.h:831
-
const uint16_t kMitsubishiBits
Definition: IRremoteESP8266.h:1034
-
@ SONY_38K
Definition: IRremoteESP8266.h:875
-
@ RC6
Definition: IRremoteESP8266.h:803
-
@ PIONEER
Definition: IRremoteESP8266.h:851
-
const uint16_t kPanasonicAcStateLength
Definition: IRremoteESP8266.h:1062
-
@ MITSUBISHI2
Definition: IRremoteESP8266.h:840
-
const uint16_t kFujitsuAcStateLength
Definition: IRremoteESP8266.h:978
-
const uint16_t kSamsungAcBits
Definition: IRremoteESP8266.h:1079
-
@ TRANSCOLD
Definition: IRremoteESP8266.h:893
-
const uint16_t kMideaBits
Definition: IRremoteESP8266.h:1027
-
const uint16_t kKelvinatorStateLength
Definition: IRremoteESP8266.h:1013
-
const uint16_t kKelvinatorBits
Definition: IRremoteESP8266.h:1014
-
const uint16_t kMilesTag2MsgBits
Definition: IRremoteESP8266.h:1134
-
@ LEGOPF
Definition: IRremoteESP8266.h:859
-
@ WHYNTER
Definition: IRremoteESP8266.h:809
-
const uint16_t kDaikin216DefaultRepeat
Definition: IRremoteESP8266.h:957
-
@ TECHNIBEL_AC
Definition: IRremoteESP8266.h:894
-
@ AMCOR
Definition: IRremoteESP8266.h:870
-
const uint16_t kWhirlpoolAcStateLength
Definition: IRremoteESP8266.h:1123
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1056
-
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:962
-
const uint16_t kHaierACBits
Definition: IRremoteESP8266.h:990
-
const uint16_t kZepealBits
Definition: IRremoteESP8266.h:1129
-
@ TCL112AC
Definition: IRremoteESP8266.h:858
-
const uint16_t kSony15Bits
Definition: IRremoteESP8266.h:1099
-
const uint16_t kCarrierAc40MinRepeat
Definition: IRremoteESP8266.h:926
-
const uint16_t kMidea24Bits
Definition: IRremoteESP8266.h:1029
-
const uint16_t kDaikin160DefaultRepeat
Definition: IRremoteESP8266.h:945
-
const uint16_t kToshibaACMinRepeat
Definition: IRremoteESP8266.h:1112
-
const uint16_t kSamsungAcExtendedBits
Definition: IRremoteESP8266.h:1081
-
@ PANASONIC_AC32
Definition: IRremoteESP8266.h:897
-
const uint16_t kHitachiAc344StateLength
Definition: IRremoteESP8266.h:1006
-
const uint16_t kNeoclimaBits
Definition: IRremoteESP8266.h:1058
-
const uint16_t kWhirlpoolAcBits
Definition: IRremoteESP8266.h:1124
-
const uint16_t kHitachiAc344Bits
Definition: IRremoteESP8266.h:1007
-
const uint16_t kRC6_36Bits
Definition: IRremoteESP8266.h:1074
-
@ DAIKIN176
Definition: IRremoteESP8266.h:868
-
const uint16_t kCarrierAc64Bits
Definition: IRremoteESP8266.h:927
-
const uint16_t kDaikin128DefaultRepeat
Definition: IRremoteESP8266.h:948
-
const uint16_t kPioneerBits
Definition: IRremoteESP8266.h:1068
-
const uint16_t kSharpAcStateLength
Definition: IRremoteESP8266.h:1093
-
@ MITSUBISHI_HEAVY_88
Definition: IRremoteESP8266.h:860
-
const uint16_t kGreeBits
Definition: IRremoteESP8266.h:987
-
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:1012
-
const uint16_t kDaikinStateLength
Definition: IRremoteESP8266.h:933
-
const uint16_t kLasertagBits
Definition: IRremoteESP8266.h:1016
-
const uint16_t kDaikin128Bits
Definition: IRremoteESP8266.h:947
-
const uint16_t kAiwaRcT501Bits
Definition: IRremoteESP8266.h:912
-
const uint16_t kTrumaBits
Definition: IRremoteESP8266.h:1122
-
const uint16_t kToshibaACStateLength
Definition: IRremoteESP8266.h:1110
-
const uint16_t kTecoBits
Definition: IRremoteESP8266.h:1108
-
const uint16_t kInaxMinRepeat
Definition: IRremoteESP8266.h:1011
-
const uint16_t kPanasonicAcStateShortLength
Definition: IRremoteESP8266.h:1063
-
@ CARRIER_AC40
Definition: IRremoteESP8266.h:884
-
const uint16_t kToshibaACBits
Definition: IRremoteESP8266.h:1111
-
const uint8_t kSherwoodBits
Definition: IRremoteESP8266.h:1096
-
@ DAIKIN152
Definition: IRremoteESP8266.h:871
-
@ NEC_LIKE
Definition: IRremoteESP8266.h:827
-
const uint16_t kDaikinDefaultRepeat
Definition: IRremoteESP8266.h:937
-
const uint16_t kDaikin64DefaultRepeat
Definition: IRremoteESP8266.h:942
-
@ SAMSUNG
Definition: IRremoteESP8266.h:808
-
@ AIWA_RC_T501
Definition: IRremoteESP8266.h:810
-
@ MITSUBISHI_HEAVY_152
Definition: IRremoteESP8266.h:861
-
@ VESTEL_AC
Definition: IRremoteESP8266.h:855
-
const uint16_t kDaikinBits
Definition: IRremoteESP8266.h:934
-
const uint16_t kToshibaACStateLengthShort
Definition: IRremoteESP8266.h:1113
-
@ GREE
Definition: IRremoteESP8266.h:825
-
const uint16_t kToshibaACStateLengthLong
Definition: IRremoteESP8266.h:1115
-
const uint16_t kHitachiAcBits
Definition: IRremoteESP8266.h:996
-
const uint16_t kMitsubishiHeavy88MinRepeat
Definition: IRremoteESP8266.h:1049
-
const uint16_t kHitachiAc3Bits
Definition: IRremoteESP8266.h:1003
-
const uint16_t kHitachiAcDefaultRepeat
Definition: IRremoteESP8266.h:997
-
@ NIKAI
Definition: IRremoteESP8266.h:830
-
const uint16_t kMidea24MinRepeat
Definition: IRremoteESP8266.h:1030
-
const uint16_t kDishBits
Definition: IRremoteESP8266.h:965
-
@ WHIRLPOOL_AC
Definition: IRremoteESP8266.h:846
-
const uint16_t kDishMinRepeat
Definition: IRremoteESP8266.h:966
-
const uint16_t kFujitsuAcBits
Definition: IRremoteESP8266.h:980
-
const uint16_t kArgoBits
Definition: IRremoteESP8266.h:919
-
@ RC5
Definition: IRremoteESP8266.h:802
-
const uint16_t kHitachiAc2StateLength
Definition: IRremoteESP8266.h:1000
-
@ HITACHI_AC
Definition: IRremoteESP8266.h:841
-
@ SHARP_AC
Definition: IRremoteESP8266.h:863
-
@ HITACHI_AC1
Definition: IRremoteESP8266.h:842
-
const uint16_t kMitsubishiHeavy88Bits
Definition: IRremoteESP8266.h:1048
-
const uint16_t kCarrierAcMinRepeat
Definition: IRremoteESP8266.h:924
-
@ ZEPEAL
Definition: IRremoteESP8266.h:889
-
const uint16_t kNikaiBits
Definition: IRremoteESP8266.h:1055
-
const uint16_t kKelvinatorDefaultRepeat
Definition: IRremoteESP8266.h:1015
-
const uint16_t kLutronBits
Definition: IRremoteESP8266.h:1023
-
const uint16_t kSharpAcDefaultRepeat
Definition: IRremoteESP8266.h:1095
-
@ MITSUBISHI136
Definition: IRremoteESP8266.h:872
-
const uint16_t kEliteScreensDefaultRepeat
Definition: IRremoteESP8266.h:976
-
const uint16_t kTcl112AcStateLength
Definition: IRremoteESP8266.h:1105
-
const uint16_t kDaikin160StateLength
Definition: IRremoteESP8266.h:943
-
const uint16_t kDaikin2StateLength
Definition: IRremoteESP8266.h:938
-
const uint16_t kHaierACYRW02Bits
Definition: IRremoteESP8266.h:993
-
const uint16_t kEcoclimBits
Definition: IRremoteESP8266.h:968
-
const uint16_t kSherwoodMinRepeat
Definition: IRremoteESP8266.h:1097
-
const uint16_t kCarrierAc64MinRepeat
Definition: IRremoteESP8266.h:928
-
@ MWM
Definition: IRremoteESP8266.h:853
-
const uint16_t kHitachiAc424Bits
Definition: IRremoteESP8266.h:1009
-
const uint16_t kPanasonicAcShortBits
Definition: IRremoteESP8266.h:1065
-
@ DAIKIN
Definition: IRremoteESP8266.h:817
-
@ DELONGHI_AC
Definition: IRremoteESP8266.h:881
-
const uint16_t kSanyoAcStateLength
Definition: IRremoteESP8266.h:1083
-
const uint16_t kTechnibelAcDefaultRepeat
Definition: IRremoteESP8266.h:961
-
@ EPSON
Definition: IRremoteESP8266.h:876
-
const uint16_t kLegoPfBits
Definition: IRremoteESP8266.h:1018
-
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1092
-
@ kLastDecodeType
Definition: IRremoteESP8266.h:903
-
@ SAMSUNG_AC
Definition: IRremoteESP8266.h:847
-
const uint16_t kDaikinBitsShort
Definition: IRremoteESP8266.h:936
-
@ DAIKIN216
Definition: IRremoteESP8266.h:862
-
@ PANASONIC_AC
Definition: IRremoteESP8266.h:850
-
const uint16_t kProntoMinLength
Definition: IRremoteESP8266.h:1069
-
const uint16_t kMitsubishi136StateLength
Definition: IRremoteESP8266.h:1041
-
@ DAIKIN64
Definition: IRremoteESP8266.h:879
-
const uint16_t kToshibaACBitsShort
Definition: IRremoteESP8266.h:1114
-
const uint16_t kRCMMBits
Definition: IRremoteESP8266.h:1075
-
const uint8_t kVestelAcBits
Definition: IRremoteESP8266.h:1127
-
@ SAMSUNG36
Definition: IRremoteESP8266.h:857
-
const uint8_t kSharpAddressBits
Definition: IRremoteESP8266.h:1090
-
const uint16_t kTranscoldBits
Definition: IRremoteESP8266.h:1117
-
const uint16_t kInaxBits
Definition: IRremoteESP8266.h:1010
-
const uint16_t kLegoPfMinRepeat
Definition: IRremoteESP8266.h:1019
-
const uint16_t kDaikin176Bits
Definition: IRremoteESP8266.h:953
-
const uint16_t kAmcorDefaultRepeat
Definition: IRremoteESP8266.h:917
-
const uint16_t kEcoclimShortBits
Definition: IRremoteESP8266.h:969
-
@ ELITESCREENS
Definition: IRremoteESP8266.h:896
-
@ KELVINATOR
Definition: IRremoteESP8266.h:819
-
@ VOLTAS
Definition: IRremoteESP8266.h:891
-
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1076
-
const uint16_t kDaikin64Bits
Definition: IRremoteESP8266.h:941
-
@ XMP
Definition: IRremoteESP8266.h:900
-
const uint16_t kTcl112AcBits
Definition: IRremoteESP8266.h:1106
-
@ TECO
Definition: IRremoteESP8266.h:856
-
const uint16_t kPanasonicAc32Bits
Definition: IRremoteESP8266.h:1067
-
const uint16_t kLasertagMinRepeat
Definition: IRremoteESP8266.h:1017
-
@ SHARP
Definition: IRremoteESP8266.h:815
-
@ MITSUBISHI
Definition: IRremoteESP8266.h:813
-
@ ELECTRA_AC
Definition: IRremoteESP8266.h:849
-
const uint16_t kDaikin216Bits
Definition: IRremoteESP8266.h:956
-
const uint16_t kMitsubishi136Bits
Definition: IRremoteESP8266.h:1042
-
const uint16_t kNeoclimaMinRepeat
Definition: IRremoteESP8266.h:1059
-
const uint16_t kMitsubishi112StateLength
Definition: IRremoteESP8266.h:1044
-
const uint16_t kSanyoAcBits
Definition: IRremoteESP8266.h:1084
-
const uint16_t kMitsubishi112Bits
Definition: IRremoteESP8266.h:1045
-
const uint16_t kSonyMinRepeat
Definition: IRremoteESP8266.h:1102
-
const uint16_t kEpsonBits
Definition: IRremoteESP8266.h:970
-
const uint16_t kLgBits
Definition: IRremoteESP8266.h:1020
-
const uint16_t kGoodweatherMinRepeat
Definition: IRremoteESP8266.h:985
-
const uint16_t kElectraAcStateLength
Definition: IRremoteESP8266.h:972
-
const uint16_t kGreeDefaultRepeat
Definition: IRremoteESP8266.h:988
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8cpp.html deleted file mode 100644 index 33a3b4df7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8cpp.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRsend.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRsend.cpp File Reference
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h.html deleted file mode 100644 index 80897dba7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h.html +++ /dev/null @@ -1,479 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRsend.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRsend.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  stdAc::state_t
 Structure to hold a common A/C state. More...
 
class  IRsend
 Class for sending all basic IR protocols. More...
 
- - - - -

-Namespaces

 stdAc
 Enumerators and Structures for the Common A/C API.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Enumerations

enum  stdAc::opmode_t {
-  stdAc::opmode_t::kOff = -1, -stdAc::opmode_t::kAuto = 0, -stdAc::opmode_t::kCool = 1, -stdAc::opmode_t::kHeat = 2, -
-  stdAc::opmode_t::kDry = 3, -stdAc::opmode_t::kFan = 4, -stdAc::opmode_t::kLastOpmodeEnum = kFan -
- }
 Common A/C settings for A/C operating modes. More...
 
enum  stdAc::fanspeed_t {
-  stdAc::fanspeed_t::kAuto = 0, -stdAc::fanspeed_t::kMin = 1, -stdAc::fanspeed_t::kLow = 2, -stdAc::fanspeed_t::kMedium = 3, -
-  stdAc::fanspeed_t::kHigh = 4, -stdAc::fanspeed_t::kMax = 5, -stdAc::fanspeed_t::kLastFanspeedEnum = kMax -
- }
 Common A/C settings for Fan Speeds. More...
 
enum  stdAc::swingv_t {
-  stdAc::swingv_t::kOff = -1, -stdAc::swingv_t::kAuto = 0, -stdAc::swingv_t::kHighest = 1, -stdAc::swingv_t::kHigh = 2, -
-  stdAc::swingv_t::kMiddle = 3, -stdAc::swingv_t::kLow = 4, -stdAc::swingv_t::kLowest = 5, -stdAc::swingv_t::kLastSwingvEnum = kLowest -
- }
 Common A/C settings for Vertical Swing. More...
 
enum  stdAc::swingh_t {
-  stdAc::swingh_t::kOff = -1, -stdAc::swingh_t::kAuto = 0, -stdAc::swingh_t::kLeftMax = 1, -stdAc::swingh_t::kLeft = 2, -
-  stdAc::swingh_t::kMiddle = 3, -stdAc::swingh_t::kRight = 4, -stdAc::swingh_t::kRightMax = 5, -stdAc::swingh_t::kWide = 6, -
-  stdAc::swingh_t::kLastSwinghEnum = kWide -
- }
 Common A/C settings for Horizontal Swing. More...
 
enum  fujitsu_ac_remote_model_t {
-  ARRAH2E = 1, -ARDB1, -ARREB1E, -ARJW2, -
-  ARRY4, -ARREW4E -
- }
 Fujitsu A/C model numbers. More...
 
enum  gree_ac_remote_model_t { YAW1F = 1, -YBOFB - }
 Gree A/C model numbers. More...
 
enum  hitachi_ac1_remote_model_t { R_LT0541_HTA_A = 1, -R_LT0541_HTA_B - }
 HITACHI_AC1 A/C model numbers. More...
 
enum  panasonic_ac_remote_model_t {
-  kPanasonicUnknown = 0, -kPanasonicLke = 1, -kPanasonicNke = 2, -kPanasonicDke = 3, -
-  kPanasonicJke = 4, -kPanasonicCkp = 5, -kPanasonicRkr = 6 -
- }
 Panasonic A/C model numbers. More...
 
enum  sharp_ac_remote_model_t { A907 = 1, -A705 = 2, -A903 = 3 - }
 Sharp A/C model numbers. More...
 
enum  voltas_ac_remote_model_t { kVoltasUnknown = 0, -kVoltas122LZF = 1 - }
 Voltas A/C model numbers. More...
 
enum  whirlpool_ac_remote_model_t { DG11J13A = 1, -DG11J191 - }
 Whirlpool A/C model numbers. More...
 
enum  lg_ac_remote_model_t { GE6711AR2853M = 1, -AKB75215403 - }
 LG A/C model numbers. More...
 
- - - - - - - - - - - -

-Variables

const int8_t kPeriodOffset = -2
 
const uint8_t kDutyDefault = 50
 
const uint8_t kDutyMax = 100
 
const uint16_t kMaxAccurateUsecDelay = 16383
 
const uint32_t kDefaultMessageGap = 100000
 
-

Enumeration Type Documentation

- -

◆ fujitsu_ac_remote_model_t

- -
-
- - - - -
enum fujitsu_ac_remote_model_t
-
- -

Fujitsu A/C model numbers.

- - - - - - - -
Enumerator
ARRAH2E 

(1) AR-RAH2E, AR-RAC1E, AR-RAE1E, AR-RCE1E (Default) Warning: Use on incorrect models can cause the A/C to lock up, requring the A/C to be physically powered off to fix. e.g. AR-RAH1U may lock up with a Swing command.

-
ARDB1 

(2) AR-DB1, AR-DL10 (AR-DL10 swing doesn't work)

-
ARREB1E 

(3) AR-REB1E, AR-RAH1U (Similar to ARRAH2E but no horiz control)

-
ARJW2 

(4) AR-JW2 (Same as ARDB1 but with horiz control)

-
ARRY4 

(5) AR-RY4 (Same as AR-RAH2E but with clean & filter)

-
ARREW4E 

(6) Similar to ARRAH2E, but with different temp config.

-
- -
-
- -

◆ gree_ac_remote_model_t

- -
-
- - - - -
enum gree_ac_remote_model_t
-
- -

Gree A/C model numbers.

- - - -
Enumerator
YAW1F 
YBOFB 
- -
-
- -

◆ hitachi_ac1_remote_model_t

- -
-
- - - - -
enum hitachi_ac1_remote_model_t
-
- -

HITACHI_AC1 A/C model numbers.

- - - -
Enumerator
R_LT0541_HTA_A 
R_LT0541_HTA_B 
- -
-
- -

◆ lg_ac_remote_model_t

- -
-
- - - - -
enum lg_ac_remote_model_t
-
- -

LG A/C model numbers.

- - - -
Enumerator
GE6711AR2853M 
AKB75215403 
- -
-
- -

◆ panasonic_ac_remote_model_t

- -
-
- - - - -
enum panasonic_ac_remote_model_t
-
- -

Panasonic A/C model numbers.

- - - - - - - - -
Enumerator
kPanasonicUnknown 
kPanasonicLke 
kPanasonicNke 
kPanasonicDke 
kPanasonicJke 
kPanasonicCkp 
kPanasonicRkr 
- -
-
- -

◆ sharp_ac_remote_model_t

- -
-
- - - - -
enum sharp_ac_remote_model_t
-
- -

Sharp A/C model numbers.

- - - - -
Enumerator
A907 
A705 
A903 
- -
-
- -

◆ voltas_ac_remote_model_t

- -
-
- - - - -
enum voltas_ac_remote_model_t
-
- -

Voltas A/C model numbers.

- - - -
Enumerator
kVoltasUnknown 
kVoltas122LZF 
- -
-
- -

◆ whirlpool_ac_remote_model_t

- -
-
- - - - -
enum whirlpool_ac_remote_model_t
-
- -

Whirlpool A/C model numbers.

- - - -
Enumerator
DG11J13A 
DG11J191 
- -
-
-

Variable Documentation

- -

◆ kDefaultMessageGap

- -
-
- - - - -
const uint32_t kDefaultMessageGap = 100000
-
- -
-
- -

◆ kDutyDefault

- -
-
- - - - -
const uint8_t kDutyDefault = 50
-
- -
-
- -

◆ kDutyMax

- -
-
- - - - -
const uint8_t kDutyMax = 100
-
- -
-
- -

◆ kMaxAccurateUsecDelay

- -
-
- - - - -
const uint16_t kMaxAccurateUsecDelay = 16383
-
- -
-
- -

◆ kPeriodOffset

- -
-
- - - - -
const int8_t kPeriodOffset = -2
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h_source.html deleted file mode 100644 index 6ebc4d1a7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRsend_8h_source.html +++ /dev/null @@ -1,1188 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRsend.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRsend.h
-
-
-Go to the documentation of this file.
1 // Copyright 2009 Ken Shirriff
-
2 // Copyright 2015 Mark Szabo
-
3 // Copyright 2017 David Conran
-
4 #ifndef IRSEND_H_
-
5 #define IRSEND_H_
-
6 
-
7 #define __STDC_LIMIT_MACROS
-
8 #include <stdint.h>
-
9 #include "IRremoteESP8266.h"
-
10 
-
11 // Originally from https://github.com/shirriff/Arduino-IRremote/
-
12 // Updated by markszabo (https://github.com/crankyoldgit/IRremoteESP8266) for
-
13 // sending IR code on ESP8266
-
14 
-
15 #if TEST || UNIT_TEST
-
16 #define VIRTUAL virtual
-
17 #else
-
18 #define VIRTUAL
-
19 #endif
-
20 
-
21 // Constants
-
22 // Offset (in microseconds) to use in Period time calculations to account for
-
23 // code excution time in producing the software PWM signal.
-
24 #if defined(ESP32)
-
25 // Calculated on a generic ESP-WROOM-32 board with v3.2-18 SDK @ 240MHz
-
26 const int8_t kPeriodOffset = -2;
-
27 #elif (defined(ESP8266) && F_CPU == 160000000L) // NOLINT(whitespace/parens)
-
28 // Calculated on an ESP8266 NodeMCU v2 board using:
-
29 // v2.6.0 with v2.5.2 ESP core @ 160MHz
-
30 const int8_t kPeriodOffset = -2;
-
31 #else // (defined(ESP8266) && F_CPU == 160000000L)
-
32 // Calculated on ESP8266 Wemos D1 mini using v2.4.1 with v2.4.0 ESP core @ 40MHz
-
33 const int8_t kPeriodOffset = -5;
-
34 #endif // (defined(ESP8266) && F_CPU == 160000000L)
-
35 const uint8_t kDutyDefault = 50; // Percentage
-
36 const uint8_t kDutyMax = 100; // Percentage
-
37 // delayMicroseconds() is only accurate to 16383us.
-
38 // Ref: https://www.arduino.cc/en/Reference/delayMicroseconds
-
39 const uint16_t kMaxAccurateUsecDelay = 16383;
-
40 // Usecs to wait between messages we don't know the proper gap time.
-
41 const uint32_t kDefaultMessageGap = 100000;
-
42 
-
44 namespace stdAc {
-
46  enum class opmode_t {
-
47  kOff = -1,
-
48  kAuto = 0,
-
49  kCool = 1,
-
50  kHeat = 2,
-
51  kDry = 3,
-
52  kFan = 4,
-
53  // Add new entries before this one, and update it to point to the last entry
- -
55  };
-
56 
-
58  enum class fanspeed_t {
-
59  kAuto = 0,
-
60  kMin = 1,
-
61  kLow = 2,
-
62  kMedium = 3,
-
63  kHigh = 4,
-
64  kMax = 5,
-
65  // Add new entries before this one, and update it to point to the last entry
- -
67  };
-
68 
-
70  enum class swingv_t {
-
71  kOff = -1,
-
72  kAuto = 0,
-
73  kHighest = 1,
-
74  kHigh = 2,
-
75  kMiddle = 3,
-
76  kLow = 4,
-
77  kLowest = 5,
-
78  // Add new entries before this one, and update it to point to the last entry
- -
80  };
-
81 
-
83  enum class swingh_t {
-
84  kOff = -1,
-
85  kAuto = 0, // a.k.a. On.
-
86  kLeftMax = 1,
-
87  kLeft = 2,
-
88  kMiddle = 3,
-
89  kRight = 4,
-
90  kRightMax = 5,
-
91  kWide = 6, // a.k.a. left & right at the same time.
-
92  // Add new entries before this one, and update it to point to the last entry
- -
94  };
-
95 
-
97  typedef struct {
- -
99  int16_t model;
-
100  bool power;
- -
102  float degrees;
-
103  bool celsius;
- - - -
107  bool quiet;
-
108  bool turbo;
-
109  bool econo;
-
110  bool light;
-
111  bool filter;
-
112  bool clean;
-
113  bool beep;
-
114  int16_t sleep;
-
115  int16_t clock;
-
116  } state_t;
-
117 }; // namespace stdAc
-
118 
- -
121  ARRAH2E = 1,
-
122  ARDB1,
- -
127  ARJW2,
- - -
131 };
-
132 
- -
135  YAW1F = 1, // (1) Ultimate, EKOKAI, RusClimate (Default)
-
136  YBOFB, // (2) Green, YBOFB2, YAPOF3
-
137 };
-
138 
- -
141  R_LT0541_HTA_A = 1, // (1) R-LT0541-HTA Remote in "A" setting. (Default)
-
142  R_LT0541_HTA_B, // (2) R-LT0541-HTA Remote in "B" setting.
-
143 };
-
144 
- - - - -
150  kPanasonicDke = 3, // PKR too.
- - - -
154 };
-
155 
- -
158  A907 = 1,
-
159  A705 = 2,
-
160  A903 = 3, // 820 too
-
161 };
-
162 
- -
165  kVoltasUnknown = 0, // Full Function
-
166  kVoltas122LZF = 1, // (1) 122LZF (No SwingH support) (Default)
-
167 };
-
168 
- -
171  DG11J13A = 1, // DG11J1-04 too
- -
173 };
-
174 
- -
177  GE6711AR2853M = 1, // (1) LG 28-bit Protocol (default)
-
178  AKB75215403, // (2) LG2 28-bit Protocol
-
179 };
-
180 
-
181 
-
182 // Classes
-
183 
-
188 class IRsend {
-
189  public:
-
190  explicit IRsend(uint16_t IRsendPin, bool inverted = false,
-
191  bool use_modulation = true);
-
192  void begin();
-
193  void enableIROut(uint32_t freq, uint8_t duty = kDutyDefault);
-
194  VIRTUAL void _delayMicroseconds(uint32_t usec);
-
195  VIRTUAL uint16_t mark(uint16_t usec);
-
196  VIRTUAL void space(uint32_t usec);
-
197  int8_t calibrate(uint16_t hz = 38000U);
-
198  void sendRaw(const uint16_t buf[], const uint16_t len, const uint16_t hz);
-
199  void sendData(uint16_t onemark, uint32_t onespace, uint16_t zeromark,
-
200  uint32_t zerospace, uint64_t data, uint16_t nbits,
-
201  bool MSBfirst = true);
-
202  void sendManchesterData(const uint16_t half_period, const uint64_t data,
-
203  const uint16_t nbits, const bool MSBfirst = true,
-
204  const bool GEThomas = true);
-
205  void sendManchester(const uint16_t headermark, const uint32_t headerspace,
-
206  const uint16_t half_period, const uint16_t footermark,
-
207  const uint32_t gap, const uint64_t data,
-
208  const uint16_t nbits, const uint16_t frequency = 38,
-
209  const bool MSBfirst = true,
-
210  const uint16_t repeat = kNoRepeat,
-
211  const uint8_t dutycycle = kDutyDefault,
-
212  const bool GEThomas = true);
-
213  void sendGeneric(const uint16_t headermark, const uint32_t headerspace,
-
214  const uint16_t onemark, const uint32_t onespace,
-
215  const uint16_t zeromark, const uint32_t zerospace,
-
216  const uint16_t footermark, const uint32_t gap,
-
217  const uint64_t data, const uint16_t nbits,
-
218  const uint16_t frequency, const bool MSBfirst,
-
219  const uint16_t repeat, const uint8_t dutycycle);
-
220  void sendGeneric(const uint16_t headermark, const uint32_t headerspace,
-
221  const uint16_t onemark, const uint32_t onespace,
-
222  const uint16_t zeromark, const uint32_t zerospace,
-
223  const uint16_t footermark, const uint32_t gap,
-
224  const uint32_t mesgtime, const uint64_t data,
-
225  const uint16_t nbits, const uint16_t frequency,
-
226  const bool MSBfirst, const uint16_t repeat,
-
227  const uint8_t dutycycle);
-
228  void sendGeneric(const uint16_t headermark, const uint32_t headerspace,
-
229  const uint16_t onemark, const uint32_t onespace,
-
230  const uint16_t zeromark, const uint32_t zerospace,
-
231  const uint16_t footermark, const uint32_t gap,
-
232  const uint8_t *dataptr, const uint16_t nbytes,
-
233  const uint16_t frequency, const bool MSBfirst,
-
234  const uint16_t repeat, const uint8_t dutycycle);
-
235  static uint16_t minRepeats(const decode_type_t protocol);
-
236  static uint16_t defaultBits(const decode_type_t protocol);
-
237  bool send(const decode_type_t type, const uint64_t data,
-
238  const uint16_t nbits, const uint16_t repeat = kNoRepeat);
-
239  bool send(const decode_type_t type, const uint8_t *state,
-
240  const uint16_t nbytes);
-
241 #if (SEND_NEC || SEND_SHERWOOD || SEND_AIWA_RC_T501 || SEND_SANYO || \
-
242  SEND_MIDEA24)
-
243  void sendNEC(uint64_t data, uint16_t nbits = kNECBits,
-
244  uint16_t repeat = kNoRepeat);
-
245  uint32_t encodeNEC(uint16_t address, uint16_t command);
-
246 #endif
-
247 #if SEND_SONY
-
248  // sendSony() should typically be called with repeat=2 as Sony devices
-
249  // expect the code to be sent at least 3 times. (code + 2 repeats = 3 codes)
-
250  // Legacy use of this procedure was to only send a single code so call it with
-
251  // repeat=0 for backward compatibility. As of v2.0 it defaults to sending
-
252  // a Sony command that will be accepted be a device.
-
253  void sendSony(const uint64_t data, const uint16_t nbits = kSony20Bits,
-
254  const uint16_t repeat = kSonyMinRepeat);
-
255  void sendSony38(const uint64_t data, const uint16_t nbits = kSony20Bits,
-
256  const uint16_t repeat = kSonyMinRepeat + 1);
-
257  uint32_t encodeSony(const uint16_t nbits, const uint16_t command,
-
258  const uint16_t address, const uint16_t extended = 0);
-
259 #endif // SEND_SONY
-
260 #if SEND_SHERWOOD
-
261  void sendSherwood(uint64_t data, uint16_t nbits = kSherwoodBits,
-
262  uint16_t repeat = kSherwoodMinRepeat);
-
263 #endif
-
264 #if SEND_SAMSUNG
-
265  void sendSAMSUNG(const uint64_t data, const uint16_t nbits = kSamsungBits,
-
266  const uint16_t repeat = kNoRepeat);
-
267  uint32_t encodeSAMSUNG(const uint8_t customer, const uint8_t command);
-
268 #endif
-
269 #if SEND_SAMSUNG36
-
270  void sendSamsung36(const uint64_t data, const uint16_t nbits = kSamsung36Bits,
-
271  const uint16_t repeat = kNoRepeat);
-
272 #endif
-
273 #if SEND_SAMSUNG_AC
-
274  void sendSamsungAC(const unsigned char data[],
-
275  const uint16_t nbytes = kSamsungAcStateLength,
-
276  const uint16_t repeat = kSamsungAcDefaultRepeat);
-
277 #endif
-
278 #if SEND_LG
-
279  void sendLG(uint64_t data, uint16_t nbits = kLgBits,
-
280  uint16_t repeat = kNoRepeat);
-
281  void sendLG2(uint64_t data, uint16_t nbits = kLgBits,
-
282  uint16_t repeat = kNoRepeat);
-
283  uint32_t encodeLG(uint16_t address, uint16_t command);
-
284 #endif
-
285 #if (SEND_SHARP || SEND_DENON)
-
286  uint32_t encodeSharp(const uint16_t address, const uint16_t command,
-
287  const uint16_t expansion = 1, const uint16_t check = 0,
-
288  const bool MSBfirst = false);
-
289  void sendSharp(const uint16_t address, const uint16_t command,
-
290  const uint16_t nbits = kSharpBits,
-
291  const uint16_t repeat = kNoRepeat);
-
292  void sendSharpRaw(const uint64_t data, const uint16_t nbits = kSharpBits,
-
293  const uint16_t repeat = kNoRepeat);
-
294 #endif
-
295 #if SEND_SHARP_AC
-
296  void sendSharpAc(const unsigned char data[],
-
297  const uint16_t nbytes = kSharpAcStateLength,
-
298  const uint16_t repeat = kSharpAcDefaultRepeat);
-
299 #endif // SEND_SHARP_AC
-
300 #if SEND_JVC
-
301  void sendJVC(uint64_t data, uint16_t nbits = kJvcBits,
-
302  uint16_t repeat = kNoRepeat);
-
303  uint16_t encodeJVC(uint8_t address, uint8_t command);
-
304 #endif
-
305 #if SEND_DENON
-
306  void sendDenon(uint64_t data, uint16_t nbits = kDenonBits,
-
307  uint16_t repeat = kNoRepeat);
-
308 #endif
-
309 #if SEND_SANYO
-
310  uint64_t encodeSanyoLC7461(uint16_t address, uint8_t command);
-
311  void sendSanyoLC7461(const uint64_t data,
-
312  const uint16_t nbits = kSanyoLC7461Bits,
-
313  const uint16_t repeat = kNoRepeat);
-
314 #endif
-
315 #if SEND_SANYO_AC
-
316  void sendSanyoAc(const uint8_t *data,
-
317  const uint16_t nbytes = kSanyoAcStateLength,
-
318  const uint16_t repeat = kNoRepeat);
-
319 #endif // SEND_SANYO_AC
-
320 #if SEND_DISH
-
321  // sendDISH() should typically be called with repeat=3 as DISH devices
-
322  // expect the code to be sent at least 4 times. (code + 3 repeats = 4 codes)
-
323  // Legacy use of this procedure was only to send a single code
-
324  // so use repeat=0 for backward compatibility.
-
325  void sendDISH(uint64_t data, uint16_t nbits = kDishBits,
-
326  uint16_t repeat = kDishMinRepeat);
-
327 #endif
-
328 #if (SEND_PANASONIC || SEND_DENON)
-
329  void sendPanasonic64(const uint64_t data,
-
330  const uint16_t nbits = kPanasonicBits,
-
331  const uint16_t repeat = kNoRepeat);
-
332  void sendPanasonic(const uint16_t address, const uint32_t data,
-
333  const uint16_t nbits = kPanasonicBits,
-
334  const uint16_t repeat = kNoRepeat);
-
335  uint64_t encodePanasonic(const uint16_t manufacturer, const uint8_t device,
-
336  const uint8_t subdevice, const uint8_t function);
-
337 #endif
-
338 #if SEND_RC5
-
339  void sendRC5(const uint64_t data, uint16_t nbits = kRC5XBits,
-
340  const uint16_t repeat = kNoRepeat);
-
341  uint16_t encodeRC5(const uint8_t address, const uint8_t command,
-
342  const bool key_released = false);
-
343  uint16_t encodeRC5X(const uint8_t address, const uint8_t command,
-
344  const bool key_released = false);
-
345  uint64_t toggleRC5(const uint64_t data);
-
346 #endif
-
347 #if SEND_RC6
-
348  void sendRC6(const uint64_t data, const uint16_t nbits = kRC6Mode0Bits,
-
349  const uint16_t repeat = kNoRepeat);
-
350  uint64_t encodeRC6(const uint32_t address, const uint8_t command,
-
351  const uint16_t mode = kRC6Mode0Bits);
-
352  uint64_t toggleRC6(const uint64_t data, const uint16_t nbits = kRC6Mode0Bits);
-
353 #endif
-
354 #if SEND_RCMM
-
355  void sendRCMM(uint64_t data, uint16_t nbits = kRCMMBits,
-
356  uint16_t repeat = kNoRepeat);
-
357 #endif
-
358 #if SEND_COOLIX
-
359  void sendCOOLIX(uint64_t data, uint16_t nbits = kCoolixBits,
-
360  uint16_t repeat = kCoolixDefaultRepeat);
-
361 #endif
-
362 #if SEND_WHYNTER
-
363  void sendWhynter(const uint64_t data, const uint16_t nbits = kWhynterBits,
-
364  const uint16_t repeat = kNoRepeat);
-
365 #endif
-
366 #if SEND_MIRAGE
-
367  void sendMirage(const unsigned char data[],
-
368  const uint16_t nbytes = kMirageStateLength,
-
369  const uint16_t repeat = kMirageMinRepeat);
-
370 #endif // SEND_MIRAGE
-
371 #if SEND_MITSUBISHI
-
372  void sendMitsubishi(uint64_t data, uint16_t nbits = kMitsubishiBits,
-
373  uint16_t repeat = kMitsubishiMinRepeat);
-
374 #endif
-
375 #if SEND_MITSUBISHI136
-
376  void sendMitsubishi136(const unsigned char data[],
-
377  const uint16_t nbytes = kMitsubishi136StateLength,
-
378  const uint16_t repeat = kMitsubishi136MinRepeat);
-
379 #endif
-
380 #if SEND_MITSUBISHI112
-
381  void sendMitsubishi112(const unsigned char data[],
-
382  const uint16_t nbytes = kMitsubishi112StateLength,
-
383  const uint16_t repeat = kMitsubishi112MinRepeat);
-
384 #endif
-
385 #if SEND_MITSUBISHI2
-
386  void sendMitsubishi2(uint64_t data, uint16_t nbits = kMitsubishiBits,
-
387  uint16_t repeat = kMitsubishiMinRepeat);
-
388 #endif
-
389 #if SEND_MITSUBISHI_AC
-
390  void sendMitsubishiAC(const unsigned char data[],
-
391  const uint16_t nbytes = kMitsubishiACStateLength,
-
392  const uint16_t repeat = kMitsubishiACMinRepeat);
-
393 #endif
-
394 #if SEND_MITSUBISHIHEAVY
- -
396  const unsigned char data[],
-
397  const uint16_t nbytes = kMitsubishiHeavy88StateLength,
-
398  const uint16_t repeat = kMitsubishiHeavy88MinRepeat);
- -
400  const unsigned char data[],
-
401  const uint16_t nbytes = kMitsubishiHeavy152StateLength,
-
402  const uint16_t repeat = kMitsubishiHeavy152MinRepeat);
-
403 #endif
-
404 #if SEND_FUJITSU_AC
-
405  void sendFujitsuAC(const unsigned char data[], const uint16_t nbytes,
-
406  const uint16_t repeat = kFujitsuAcMinRepeat);
-
407 #endif
-
408 #if SEND_INAX
-
409  void sendInax(const uint64_t data, const uint16_t nbits = kInaxBits,
-
410  const uint16_t repeat = kInaxMinRepeat);
-
411 #endif // SEND_INAX
-
412 #if SEND_GLOBALCACHE
-
413  void sendGC(uint16_t buf[], uint16_t len);
-
414 #endif
-
415 #if SEND_KELVINATOR
-
416  void sendKelvinator(const unsigned char data[],
-
417  const uint16_t nbytes = kKelvinatorStateLength,
-
418  const uint16_t repeat = kKelvinatorDefaultRepeat);
-
419 #endif
-
420 #if SEND_DAIKIN
-
421  void sendDaikin(const unsigned char data[],
-
422  const uint16_t nbytes = kDaikinStateLength,
-
423  const uint16_t repeat = kDaikinDefaultRepeat);
-
424 #endif
-
425 #if SEND_DAIKIN64
-
426  void sendDaikin64(const uint64_t data, const uint16_t nbits = kDaikin64Bits,
-
427  const uint16_t repeat = kDaikin64DefaultRepeat);
-
428 #endif // SEND_DAIKIN64
-
429 #if SEND_DAIKIN128
-
430  void sendDaikin128(const unsigned char data[],
-
431  const uint16_t nbytes = kDaikin128StateLength,
-
432  const uint16_t repeat = kDaikin128DefaultRepeat);
-
433 #endif // SEND_DAIKIN128
-
434 #if SEND_DAIKIN152
-
435  void sendDaikin152(const unsigned char data[],
-
436  const uint16_t nbytes = kDaikin152StateLength,
-
437  const uint16_t repeat = kDaikin152DefaultRepeat);
-
438 #endif // SEND_DAIKIN152
-
439 #if SEND_DAIKIN160
-
440  void sendDaikin160(const unsigned char data[],
-
441  const uint16_t nbytes = kDaikin160StateLength,
-
442  const uint16_t repeat = kDaikin160DefaultRepeat);
-
443 #endif // SEND_DAIKIN160
-
444 #if SEND_DAIKIN176
-
445  void sendDaikin176(const unsigned char data[],
-
446  const uint16_t nbytes = kDaikin176StateLength,
-
447  const uint16_t repeat = kDaikin176DefaultRepeat);
-
448 #endif // SEND_DAIKIN176
-
449 #if SEND_DAIKIN2
-
450  void sendDaikin2(const unsigned char data[],
-
451  const uint16_t nbytes = kDaikin2StateLength,
-
452  const uint16_t repeat = kDaikin2DefaultRepeat);
-
453 #endif
-
454 #if SEND_DAIKIN216
-
455  void sendDaikin216(const unsigned char data[],
-
456  const uint16_t nbytes = kDaikin216StateLength,
-
457  const uint16_t repeat = kDaikin216DefaultRepeat);
-
458 #endif
-
459 #if SEND_AIWA_RC_T501
-
460  void sendAiwaRCT501(uint64_t data, uint16_t nbits = kAiwaRcT501Bits,
-
461  uint16_t repeat = kAiwaRcT501MinRepeats);
-
462 #endif
-
463 #if SEND_GREE
-
464  void sendGree(const uint64_t data, const uint16_t nbits = kGreeBits,
-
465  const uint16_t repeat = kGreeDefaultRepeat);
-
466  void sendGree(const uint8_t data[], const uint16_t nbytes = kGreeStateLength,
-
467  const uint16_t repeat = kGreeDefaultRepeat);
-
468 #endif
-
469 #if SEND_GOODWEATHER
-
470  void sendGoodweather(const uint64_t data,
-
471  const uint16_t nbits = kGoodweatherBits,
-
472  const uint16_t repeat = kGoodweatherMinRepeat);
-
473 #endif // SEND_GOODWEATHER
-
474 #if SEND_PRONTO
-
475  void sendPronto(uint16_t data[], uint16_t len, uint16_t repeat = kNoRepeat);
-
476 #endif
-
477 #if SEND_ARGO
-
478  void sendArgo(const unsigned char data[],
-
479  const uint16_t nbytes = kArgoStateLength,
-
480  const uint16_t repeat = kArgoDefaultRepeat);
-
481 #endif
-
482 #if SEND_TROTEC
-
483  void sendTrotec(const unsigned char data[],
-
484  const uint16_t nbytes = kTrotecStateLength,
-
485  const uint16_t repeat = kTrotecDefaultRepeat);
-
486 #endif
-
487 #if SEND_NIKAI
-
488  void sendNikai(uint64_t data, uint16_t nbits = kNikaiBits,
-
489  uint16_t repeat = kNoRepeat);
-
490 #endif
-
491 #if SEND_TOSHIBA_AC
-
492  void sendToshibaAC(const uint8_t data[],
-
493  const uint16_t nbytes = kToshibaACStateLength,
-
494  const uint16_t repeat = kToshibaACMinRepeat);
-
495 #endif
-
496 #if SEND_MIDEA
-
497  void sendMidea(uint64_t data, uint16_t nbits = kMideaBits,
-
498  uint16_t repeat = kMideaMinRepeat);
-
499 #endif // SEND_MIDEA
-
500 #if SEND_MIDEA24
-
501  void sendMidea24(const uint64_t data, const uint16_t nbits = kMidea24Bits,
-
502  const uint16_t repeat = kMidea24MinRepeat);
-
503 #endif // SEND_MIDEA24
-
504 #if SEND_MAGIQUEST
-
505  void sendMagiQuest(const uint64_t data, const uint16_t nbits = kMagiquestBits,
-
506  const uint16_t repeat = kNoRepeat);
-
507  uint64_t encodeMagiQuest(const uint32_t wand_id, const uint16_t magnitude);
-
508 #endif
-
509 #if SEND_LASERTAG
-
510  void sendLasertag(uint64_t data, uint16_t nbits = kLasertagBits,
-
511  uint16_t repeat = kLasertagMinRepeat);
-
512 #endif
-
513 #if SEND_CARRIER_AC
-
514  void sendCarrierAC(uint64_t data, uint16_t nbits = kCarrierAcBits,
-
515  uint16_t repeat = kCarrierAcMinRepeat);
-
516 #endif
-
517 #if SEND_CARRIER_AC40
-
518  void sendCarrierAC40(uint64_t data, uint16_t nbits = kCarrierAc40Bits,
-
519  uint16_t repeat = kCarrierAc40MinRepeat);
-
520 #endif
-
521 #if SEND_CARRIER_AC64
-
522  void sendCarrierAC64(uint64_t data, uint16_t nbits = kCarrierAc64Bits,
-
523  uint16_t repeat = kCarrierAc64MinRepeat);
-
524 #endif
-
525 #if (SEND_HAIER_AC || SEND_HAIER_AC_YRW02)
-
526  void sendHaierAC(const unsigned char data[],
-
527  const uint16_t nbytes = kHaierACStateLength,
-
528  const uint16_t repeat = kHaierAcDefaultRepeat);
-
529 #endif
-
530 #if SEND_HAIER_AC_YRW02
-
531  void sendHaierACYRW02(const unsigned char data[],
-
532  const uint16_t nbytes = kHaierACYRW02StateLength,
-
533  const uint16_t repeat = kHaierAcYrw02DefaultRepeat);
-
534 #endif
-
535 #if SEND_HITACHI_AC
-
536  void sendHitachiAC(const unsigned char data[],
-
537  const uint16_t nbytes = kHitachiAcStateLength,
-
538  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
539 #endif
-
540 #if SEND_HITACHI_AC1
-
541  void sendHitachiAC1(const unsigned char data[],
-
542  const uint16_t nbytes = kHitachiAc1StateLength,
-
543  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
544 #endif
-
545 #if SEND_HITACHI_AC2
-
546  void sendHitachiAC2(const unsigned char data[],
-
547  const uint16_t nbytes = kHitachiAc2StateLength,
-
548  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
549 #endif
-
550 #if SEND_HITACHI_AC3
-
551  void sendHitachiAc3(const unsigned char data[],
-
552  const uint16_t nbytes, // No default as there as so many
-
553  // different sizes
-
554  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
555 #endif // SEND_HITACHI_AC3
-
556 #if SEND_HITACHI_AC344
-
557  void sendHitachiAc344(const unsigned char data[],
-
558  const uint16_t nbytes = kHitachiAc344StateLength,
-
559  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
560 #endif // SEND_HITACHI_AC344
-
561 #if SEND_HITACHI_AC424
-
562  void sendHitachiAc424(const unsigned char data[],
-
563  const uint16_t nbytes = kHitachiAc424StateLength,
-
564  const uint16_t repeat = kHitachiAcDefaultRepeat);
-
565 #endif // SEND_HITACHI_AC424
-
566 #if SEND_GICABLE
-
567  void sendGICable(uint64_t data, uint16_t nbits = kGicableBits,
-
568  uint16_t repeat = kGicableMinRepeat);
-
569 #endif
-
570 #if SEND_WHIRLPOOL_AC
-
571  void sendWhirlpoolAC(const unsigned char data[],
-
572  const uint16_t nbytes = kWhirlpoolAcStateLength,
-
573  const uint16_t repeat = kWhirlpoolAcDefaultRepeat);
-
574 #endif
-
575 #if SEND_LUTRON
-
576  void sendLutron(uint64_t data, uint16_t nbits = kLutronBits,
-
577  uint16_t repeat = kNoRepeat);
-
578 #endif
-
579 #if SEND_ELECTRA_AC
-
580  void sendElectraAC(const unsigned char data[],
-
581  const uint16_t nbytes = kElectraAcStateLength,
-
582  const uint16_t repeat = kNoRepeat);
-
583 #endif
-
584 #if SEND_PANASONIC_AC
-
585  void sendPanasonicAC(const unsigned char data[],
-
586  const uint16_t nbytes = kPanasonicAcStateLength,
-
587  const uint16_t repeat = kPanasonicAcDefaultRepeat);
-
588 #endif // SEND_PANASONIC_AC
-
589 #if SEND_PANASONIC_AC32
-
590  void sendPanasonicAC32(const uint64_t data,
-
591  const uint16_t nbits = kPanasonicAc32Bits,
-
592  const uint16_t repeat = kPanasonicAcDefaultRepeat);
-
593 #endif // SEND_PANASONIC_AC32
-
594 #if SEND_PIONEER
-
595  void sendPioneer(const uint64_t data, const uint16_t nbits = kPioneerBits,
-
596  const uint16_t repeat = kNoRepeat);
-
597  uint64_t encodePioneer(uint16_t address, uint16_t command);
-
598 #endif
-
599 #if SEND_MWM
-
600  void sendMWM(const unsigned char data[], const uint16_t nbytes,
-
601  const uint16_t repeat = kNoRepeat);
-
602 #endif
-
603 #if SEND_VESTEL_AC
-
604  void sendVestelAc(const uint64_t data, const uint16_t nbits = kVestelAcBits,
-
605  const uint16_t repeat = kNoRepeat);
-
606 #endif
-
607 #if SEND_TCL112AC
-
608  void sendTcl112Ac(const unsigned char data[],
-
609  const uint16_t nbytes = kTcl112AcStateLength,
-
610  const uint16_t repeat = kTcl112AcDefaultRepeat);
-
611 #endif
-
612 #if SEND_TECO
-
613  void sendTeco(const uint64_t data, const uint16_t nbits = kTecoBits,
-
614  const uint16_t repeat = kNoRepeat);
-
615 #endif
-
616 #if SEND_LEGOPF
-
617  void sendLegoPf(const uint64_t data, const uint16_t nbits = kLegoPfBits,
-
618  const uint16_t repeat = kLegoPfMinRepeat);
-
619 #endif
-
620 #if SEND_NEOCLIMA
-
621  void sendNeoclima(const unsigned char data[],
-
622  const uint16_t nbytes = kNeoclimaStateLength,
-
623  const uint16_t repeat = kNeoclimaMinRepeat);
-
624 #endif // SEND_NEOCLIMA
-
625 #if SEND_AMCOR
-
626  void sendAmcor(const unsigned char data[],
-
627  const uint16_t nbytes = kAmcorStateLength,
-
628  const uint16_t repeat = kAmcorDefaultRepeat);
-
629 #endif // SEND_AMCOR
-
630 #if SEND_EPSON
-
631  void sendEpson(uint64_t data, uint16_t nbits = kEpsonBits,
-
632  uint16_t repeat = kEpsonMinRepeat);
-
633 #endif
-
634 #if SEND_SYMPHONY
-
635  void sendSymphony(uint64_t data, uint16_t nbits = kSymphonyBits,
-
636  uint16_t repeat = kSymphonyDefaultRepeat);
-
637 #endif
-
638 #if SEND_AIRWELL
-
639  void sendAirwell(uint64_t data, uint16_t nbits = kAirwellBits,
-
640  uint16_t repeat = kAirwellMinRepeats);
-
641 #endif
-
642 #if SEND_DELONGHI_AC
-
643  void sendDelonghiAc(uint64_t data, uint16_t nbits = kDelonghiAcBits,
-
644  uint16_t repeat = kDelonghiAcDefaultRepeat);
-
645 #endif
-
646 #if SEND_DOSHISHA
-
647  void sendDoshisha(const uint64_t data, uint16_t nbits = kDoshishaBits,
-
648  const uint16_t repeat = kNoRepeat);
-
649  uint64_t encodeDoshisha(const uint8_t command, const uint8_t channel = 0);
-
650 #endif // SEND_DOSHISHA
-
651 #if SEND_MULTIBRACKETS
-
652  void sendMultibrackets(const uint64_t data,
-
653  const uint16_t nbits = kMultibracketsBits,
-
654  const uint16_t repeat = kMultibracketsDefaultRepeat);
-
655 #endif
-
656 #if SEND_TECHNIBEL_AC
-
657  void sendTechnibelAc(uint64_t data, uint16_t nbits = kTechnibelAcBits,
-
658  uint16_t repeat = kTechnibelAcDefaultRepeat);
-
659 #endif
-
660 #if SEND_CORONA_AC
-
661  void sendCoronaAc(const uint8_t data[],
-
662  const uint16_t nbytes = kCoronaAcStateLength,
-
663  const uint16_t repeat = kNoRepeat);
-
664 #endif // SEND_CORONA_AC
-
665 #if SEND_ZEPEAL
-
666  void sendZepeal(const uint64_t data,
-
667  const uint16_t nbits = kZepealBits,
-
668  const uint16_t repeat = kZepealMinRepeat);
-
669 #endif // SEND_ZEPEAL
-
670 #if SEND_VOLTAS
-
671  void sendVoltas(const unsigned char data[],
-
672  const uint16_t nbytes = kVoltasStateLength,
-
673  const uint16_t repeat = kNoRepeat);
-
674 #endif // SEND_VOLTAS
-
675 #if SEND_METZ
-
676  void sendMetz(const uint64_t data,
-
677  const uint16_t nbits = kMetzBits,
-
678  const uint16_t repeat = kMetzMinRepeat);
-
679  static uint32_t encodeMetz(const uint8_t address, const uint8_t command,
-
680  const bool toggle = false);
-
681 #endif // SEND_METZ
-
682 #if SEND_TRANSCOLD
-
683  void sendTranscold(const uint64_t data, const uint16_t nbits = kTranscoldBits,
-
684  const uint16_t repeat = kTranscoldDefaultRepeat);
-
685 #endif // SEND_TRANSCOLD
-
686 #if SEND_ELITESCREENS
-
687  void sendElitescreens(const uint64_t data,
-
688  const uint16_t nbits = kEliteScreensBits,
-
689  const uint16_t repeat = kEliteScreensDefaultRepeat);
-
690 #endif // SEND_ELITESCREENS
-
691 #if SEND_MILESTAG2
-
692  // Since There 2 types of transmissions
-
693  // (14bits for Shooting by default, you can set 24 bit for msg delivery)
-
694  void sendMilestag2(const uint64_t data,
-
695  const uint16_t nbits = kMilesTag2ShotBits,
-
696  const uint16_t repeat = kMilesMinRepeat);
-
697 #endif // SEND_MILESTAG2
-
698 #if SEND_ECOCLIM
-
699  void sendEcoclim(const uint64_t data, const uint16_t nbits = kEcoclimBits,
-
700  const uint16_t repeat = kNoRepeat);
-
701 #endif // SEND_ECOCLIM
-
702 #if SEND_XMP
-
703  void sendXmp(const uint64_t data, const uint16_t nbits = kXmpBits,
-
704  const uint16_t repeat = kNoRepeat);
-
705 #endif // SEND_XMP
-
706 #if SEND_TRUMA
-
707  void sendTruma(const uint64_t data, const uint16_t nbits = kTrumaBits,
-
708  const uint16_t repeat = kNoRepeat);
-
709 #endif // SEND_TRUMA
-
710 
-
711  protected:
-
712 #ifdef UNIT_TEST
-
713 #ifndef HIGH
-
714 #define HIGH 0x1
-
715 #endif
-
716 #ifndef LOW
-
717 #define LOW 0x0
-
718 #endif
-
719 #endif // UNIT_TEST
-
720  uint8_t outputOn;
-
721  uint8_t outputOff;
-
722  VIRTUAL void ledOff();
-
723  VIRTUAL void ledOn();
-
724 #ifndef UNIT_TEST
-
725 
-
726  private:
-
727 #else
-
728  uint32_t _freq_unittest;
-
729 #endif // UNIT_TEST
-
730  uint16_t onTimePeriod;
-
731  uint16_t offTimePeriod;
-
732  uint16_t IRpin;
-
733  int8_t periodOffset;
-
734  uint8_t _dutycycle;
- -
736  uint32_t calcUSecPeriod(uint32_t hz, bool use_offset = true);
-
737 #if SEND_SONY
-
738  void _sendSony(const uint64_t data, const uint16_t nbits,
-
739  const uint16_t repeat, const uint16_t freq);
-
740 #endif // SEND_SONY
-
741 };
-
742 
-
743 #endif // IRSEND_H_
-
-
uint32_t calcUSecPeriod(uint32_t hz, bool use_offset=true)
Calculate the period for a given frequency.
Definition: IRsend.cpp:71
-
const uint16_t kDaikin152DefaultRepeat
Definition: IRremoteESP8266.h:951
-
void sendZepeal(const uint64_t data, const uint16_t nbits=kZepealBits, const uint16_t repeat=kZepealMinRepeat)
Send a Zepeal formatted message. Status: STABLE / Works on real device.
Definition: ir_Zepeal.cpp:47
-
const uint16_t kDelonghiAcBits
Definition: IRremoteESP8266.h:958
-
void sendHaierACYRW02(const unsigned char data[], const uint16_t nbytes=kHaierACYRW02StateLength, const uint16_t repeat=kHaierAcYrw02DefaultRepeat)
Send a Haier YR-W02 remote A/C formatted message. Status: Alpha / Untested on a real device.
Definition: ir_Haier.cpp:74
-
const uint16_t kHaierAcYrw02DefaultRepeat
Definition: IRremoteESP8266.h:994
-
void sendPronto(uint16_t data[], uint16_t len, uint16_t repeat=kNoRepeat)
Send a Pronto Code formatted message. Status: STABLE / Known working.
Definition: ir_Pronto.cpp:56
-
uint8_t outputOff
Definition: IRsend.h:721
-
int8_t periodOffset
Definition: IRsend.h:733
-
const uint16_t kMitsubishiACStateLength
Definition: IRremoteESP8266.h:1038
-
const uint16_t kMitsubishiHeavy152StateLength
Definition: IRremoteESP8266.h:1050
-
const uint16_t kAirwellMinRepeats
Definition: IRremoteESP8266.h:911
-
const uint16_t kMideaMinRepeat
Definition: IRremoteESP8266.h:1028
-
const uint16_t kMilesMinRepeat
Definition: IRremoteESP8266.h:1135
-
int16_t clock
Definition: IRsend.h:115
-
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:982
-
const uint16_t kGreeStateLength
Definition: IRremoteESP8266.h:986
-
uint32_t encodeNEC(uint16_t address, uint16_t command)
Calculate the raw NEC data based on address and command. Status: STABLE / Expected to work.
Definition: ir_NEC.cpp:48
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
uint64_t encodeDoshisha(const uint8_t command, const uint8_t channel=0)
Encode Doshisha combining constant values with command and channel. Status: STABLE / Working.
Definition: ir_Doshisha.cpp:67
-
const uint16_t kCarrierAcBits
Definition: IRremoteESP8266.h:923
- -
void sendHitachiAc344(const unsigned char data[], const uint16_t nbytes=kHitachiAc344StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi A/C 43-byte/344-bit message. (HITACHI_AC344) Basically the same as sendHitatchiAC() ex...
Definition: ir_Hitachi.cpp:121
-
const uint16_t kDaikin2DefaultRepeat
Definition: IRremoteESP8266.h:940
-
@ kVoltasUnknown
Definition: IRsend.h:165
-
const uint16_t kMultibracketsBits
Definition: IRremoteESP8266.h:1053
-
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1126
- -
const uint16_t kAirwellBits
Definition: IRremoteESP8266.h:910
-
const uint16_t kHaierAcDefaultRepeat
Definition: IRremoteESP8266.h:991
-
void sendMidea(uint64_t data, uint16_t nbits=kMideaBits, uint16_t repeat=kMideaMinRepeat)
Send a Midea message Status: Alpha / Needs testing against a real device.
Definition: ir_Midea.cpp:53
-
const uint16_t kTrotecDefaultRepeat
Definition: IRremoteESP8266.h:1121
-
const uint16_t kFujitsuAcMinRepeat
Definition: IRremoteESP8266.h:977
-
void sendLG(uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)
Send an LG formatted message. (LG) Status: Beta / Should be working.
Definition: ir_LG.cpp:54
-
@ kPanasonicRkr
Definition: IRsend.h:153
-
const uint16_t kMitsubishi136MinRepeat
Definition: IRremoteESP8266.h:1043
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
VIRTUAL void _delayMicroseconds(uint32_t usec)
An ESP8266 RTOS watch-dog timer friendly version of delayMicroseconds().
Definition: IRsend.cpp:114
-
bool clean
Definition: IRsend.h:112
-
void sendLegoPf(const uint64_t data, const uint16_t nbits=kLegoPfBits, const uint16_t repeat=kLegoPfMinRepeat)
Send a LEGO Power Functions message. Status: Beta / Should work.
Definition: ir_Lego.cpp:33
-
const uint16_t kTechnibelAcBits
Definition: IRremoteESP8266.h:960
-
const uint16_t kArgoDefaultRepeat
Definition: IRremoteESP8266.h:920
-
uint8_t outputOn
Definition: IRsend.h:720
-
const uint16_t kHaierACStateLength
Definition: IRremoteESP8266.h:989
-
const uint16_t kHitachiAcStateLength
Definition: IRremoteESP8266.h:995
- -
void sendTruma(const uint64_t data, const uint16_t nbits=kTrumaBits, const uint16_t repeat=kNoRepeat)
Send a Truma formatted message. Status: STABLE / Confirmed working.
Definition: ir_Truma.cpp:40
-
const uint16_t kDaikin176StateLength
Definition: IRremoteESP8266.h:952
-
const uint16_t kRC5XBits
Definition: IRremoteESP8266.h:1072
-
const uint16_t kEpsonMinRepeat
Definition: IRremoteESP8266.h:971
-
const uint16_t kAmcorStateLength
Definition: IRremoteESP8266.h:915
-
bool send(const decode_type_t type, const uint64_t data, const uint16_t nbits, const uint16_t repeat=kNoRepeat)
Send a simple (up to 64 bits) IR message of a given type. An unknown/unsupported type will send nothi...
Definition: IRsend.cpp:768
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
@ R_LT0541_HTA_B
Definition: IRsend.h:142
-
void sendWhynter(const uint64_t data, const uint16_t nbits=kWhynterBits, const uint16_t repeat=kNoRepeat)
Send a Whynter message. Status: STABLE.
Definition: ir_Whynter.cpp:45
-
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition: IRsend.h:170
-
void sendMitsubishiAC(const unsigned char data[], const uint16_t nbytes=kMitsubishiACStateLength, const uint16_t repeat=kMitsubishiACMinRepeat)
Send a Mitsubishi 144-bit A/C formatted message. (MITSUBISHI_AC) Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:236
-
void sendNikai(uint64_t data, uint16_t nbits=kNikaiBits, uint16_t repeat=kNoRepeat)
Send a Nikai formatted message. Status: STABLE / Working.
Definition: ir_Nikai.cpp:37
-
const uint32_t kDefaultMessageGap
Definition: IRsend.h:41
-
const uint16_t kMaxAccurateUsecDelay
Definition: IRsend.h:39
-
uint16_t encodeJVC(uint8_t address, uint8_t command)
Calculate the raw JVC data based on address and command. Status: STABLE / Works fine.
Definition: ir_JVC.cpp:78
-
uint16_t onTimePeriod
Definition: IRsend.h:730
-
void sendAiwaRCT501(uint64_t data, uint16_t nbits=kAiwaRcT501Bits, uint16_t repeat=kAiwaRcT501MinRepeats)
Send an Aiwa RC T501 formatted message. Status: BETA / Should work.
Definition: ir_Aiwa.cpp:30
-
uint16_t IRpin
Definition: IRsend.h:732
-
const uint16_t kHitachiAc1StateLength
Definition: IRremoteESP8266.h:998
-
const uint16_t kCoolixBits
Definition: IRremoteESP8266.h:921
-
const uint16_t kMitsubishi112MinRepeat
Definition: IRremoteESP8266.h:1046
-
const uint16_t kMirageStateLength
Definition: IRremoteESP8266.h:1031
-
void sendSymphony(uint64_t data, uint16_t nbits=kSymphonyBits, uint16_t repeat=kSymphonyDefaultRepeat)
Send a Symphony packet. Status: STABLE / Should be working.
Definition: ir_Symphony.cpp:42
-
void sendMetz(const uint64_t data, const uint16_t nbits=kMetzBits, const uint16_t repeat=kMetzMinRepeat)
Send a Metz formatted message. Status: Beta / Needs testing against a real device.
Definition: ir_Metz.cpp:32
-
void sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)
Generic method for sending simple protocol messages. Will send leading or trailing 0's if the nbits i...
Definition: IRsend.cpp:307
- -
const uint16_t kSamsung36Bits
Definition: IRremoteESP8266.h:1077
-
const uint16_t kMagiquestBits
Definition: IRremoteESP8266.h:1024
-
static uint16_t minRepeats(const decode_type_t protocol)
Get the minimum number of repeats for a given protocol.
Definition: IRsend.cpp:557
-
const uint16_t kNeoclimaStateLength
Definition: IRremoteESP8266.h:1057
-
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:134
-
const uint16_t kSamsungAcDefaultRepeat
Definition: IRremoteESP8266.h:1082
-
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1088
-
float degrees
Definition: IRsend.h:102
-
const uint16_t kMirageMinRepeat
Definition: IRremoteESP8266.h:1033
-
uint8_t _dutycycle
Definition: IRsend.h:734
-
bool celsius
Definition: IRsend.h:103
-
void sendLG2(uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)
Send an LG Variant-2 formatted message. (LG2) Status: Beta / Should be working.
Definition: ir_LG.cpp:88
-
const uint16_t kZepealMinRepeat
Definition: IRremoteESP8266.h:1130
-
VIRTUAL uint16_t mark(uint16_t usec)
Modulate the IR LED for the given period (usec) and at the duty cycle set.
Definition: IRsend.cpp:157
-
void sendToshibaAC(const uint8_t data[], const uint16_t nbytes=kToshibaACStateLength, const uint16_t repeat=kToshibaACMinRepeat)
Send a Toshiba A/C message. Status: STABLE / Working.
Definition: ir_Toshiba.cpp:50
-
@ ARRY4
(5) AR-RY4 (Same as AR-RAH2E but with clean & filter)
Definition: IRsend.h:129
-
@ ARDB1
(2) AR-DB1, AR-DL10 (AR-DL10 swing doesn't work)
Definition: IRsend.h:125
-
const uint16_t kTranscoldDefaultRepeat
Definition: IRremoteESP8266.h:1118
-
const uint16_t kMetzMinRepeat
Definition: IRremoteESP8266.h:1026
- -
void sendDaikin152(const unsigned char data[], const uint16_t nbytes=kDaikin152StateLength, const uint16_t repeat=kDaikin152DefaultRepeat)
Send a Daikin152 (152-bit) A/C formatted message. Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3061
-
const uint16_t kEliteScreensBits
Definition: IRremoteESP8266.h:975
-
void sendAmcor(const unsigned char data[], const uint16_t nbytes=kAmcorStateLength, const uint16_t repeat=kAmcorDefaultRepeat)
Send a Amcor HVAC formatted message. Status: STABLE / Reported as working.
Definition: ir_Amcor.cpp:38
-
stdAc::swingv_t swingv
Definition: IRsend.h:105
-
void sendLasertag(uint64_t data, uint16_t nbits=kLasertagBits, uint16_t repeat=kLasertagMinRepeat)
Send a Lasertag packet/message. Status: STABLE / Working.
Definition: ir_Lasertag.cpp:33
-
hitachi_ac1_remote_model_t
HITACHI_AC1 A/C model numbers.
Definition: IRsend.h:140
-
void sendEpson(uint64_t data, uint16_t nbits=kEpsonBits, uint16_t repeat=kEpsonMinRepeat)
Send an Epson formatted message. Status: Beta / Probably works.
Definition: ir_Epson.cpp:24
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
void sendManchesterData(const uint16_t half_period, const uint64_t data, const uint16_t nbits, const bool MSBfirst=true, const bool GEThomas=true)
Generic method for sending Manchester code data. Will send leading or trailing 0's if the nbits is la...
Definition: IRsend.cpp:445
-
const uint16_t kAiwaRcT501MinRepeats
Definition: IRremoteESP8266.h:913
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint16_t kVoltasStateLength
Definition: IRremoteESP8266.h:1132
- -
const uint16_t kMitsubishiMinRepeat
Definition: IRremoteESP8266.h:1037
-
uint64_t encodeSanyoLC7461(uint16_t address, uint8_t command)
Construct a Sanyo LC7461 message.
Definition: ir_Sanyo.cpp:80
-
@ ARJW2
(4) AR-JW2 (Same as ARDB1 but with horiz control)
Definition: IRsend.h:128
-
const uint16_t kArgoStateLength
Definition: IRremoteESP8266.h:918
- -
uint32_t encodeSAMSUNG(const uint8_t customer, const uint8_t command)
Construct a raw Samsung message from the supplied customer(address) & command. Status: STABLE / Shoul...
Definition: ir_Samsung.cpp:95
-
const uint16_t kPanasonicBits
Definition: IRremoteESP8266.h:1060
-
int16_t model
Definition: IRsend.h:99
-
uint64_t toggleRC6(const uint64_t data, const uint16_t nbits=kRC6Mode0Bits)
Flip the toggle bit of a Philips RC-6 data message. Used to indicate a change of remote button's stat...
Definition: ir_RC5_RC6.cpp:157
-
void sendSony(const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat)
Send a standard Sony/SIRC(Serial Infra-Red Control) message. (40kHz) Status: STABLE / Known working.
Definition: ir_Sony.cpp:46
-
const uint8_t kDutyMax
Definition: IRsend.h:36
-
const uint16_t kMilesTag2ShotBits
Definition: IRremoteESP8266.h:1133
-
uint32_t _freq_unittest
Definition: IRsend.h:728
-
const uint16_t kDaikin152StateLength
Definition: IRremoteESP8266.h:949
-
uint32_t encodeLG(uint16_t address, uint16_t command)
Construct a raw 28-bit LG message code from the supplied address & command. Status: STABLE / Works.
Definition: ir_LG.cpp:116
-
void sendRaw(const uint16_t buf[], const uint16_t len, const uint16_t hz)
Send a raw IRremote message.
Definition: IRsend.cpp:539
-
void sendMultibrackets(const uint64_t data, const uint16_t nbits=kMultibracketsBits, const uint16_t repeat=kMultibracketsDefaultRepeat)
Send a Multibrackets formatted message. Status: BETA / Appears to be working.
Definition: ir_Multibrackets.cpp:26
- -
const uint16_t kXmpBits
Definition: IRremoteESP8266.h:1128
-
const uint16_t kHaierACYRW02StateLength
Definition: IRremoteESP8266.h:992
-
uint64_t encodeRC6(const uint32_t address, const uint8_t command, const uint16_t mode=kRC6Mode0Bits)
Encode a Philips RC-6 data message. Status: Beta / Should be working.
Definition: ir_RC5_RC6.cpp:171
-
const uint16_t kMultibracketsDefaultRepeat
Definition: IRremoteESP8266.h:1054
-
void sendMitsubishi112(const unsigned char data[], const uint16_t nbytes=kMitsubishi112StateLength, const uint16_t repeat=kMitsubishi112MinRepeat)
Send a Mitsubishi 112-bit A/C formatted message. (MITSUBISHI112) Status: Stable / Reported as working...
Definition: ir_Mitsubishi.cpp:1211
-
@ A705
Definition: IRsend.h:159
-
@ kPanasonicCkp
Definition: IRsend.h:152
-
void sendWhirlpoolAC(const unsigned char data[], const uint16_t nbytes=kWhirlpoolAcStateLength, const uint16_t repeat=kWhirlpoolAcDefaultRepeat)
Send a Whirlpool A/C message. Status: BETA / Probably works.
Definition: ir_Whirlpool.cpp:55
- -
void sendData(uint16_t onemark, uint32_t onespace, uint16_t zeromark, uint32_t zerospace, uint64_t data, uint16_t nbits, bool MSBfirst=true)
Generic method for sending data that is common to most protocols. Will send leading or trailing 0's i...
Definition: IRsend.cpp:246
-
const uint16_t kGoodweatherBits
Definition: IRremoteESP8266.h:984
-
void sendKelvinator(const unsigned char data[], const uint16_t nbytes=kKelvinatorStateLength, const uint16_t repeat=kKelvinatorDefaultRepeat)
Send a Kelvinator A/C message. Status: STABLE / Known working.
Definition: ir_Kelvinator.cpp:63
-
VIRTUAL void ledOn()
Turn on the IR LED.
Definition: IRsend.cpp:60
-
const uint16_t kGicableMinRepeat
Definition: IRremoteESP8266.h:983
-
void sendHitachiAC1(const unsigned char data[], const uint16_t nbytes=kHitachiAc1StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi 13 byte/224-bit A/C formatted message. (HITACHI_AC1) Status: STABLE / Confirmed Workin...
Definition: ir_Hitachi.cpp:87
-
const uint16_t kDaikin216StateLength
Definition: IRremoteESP8266.h:955
-
void sendGICable(uint64_t data, uint16_t nbits=kGicableBits, uint16_t repeat=kGicableMinRepeat)
Send a raw G.I. Cable formatted message. Status: Alpha / Untested.
Definition: ir_GICable.cpp:37
-
const uint16_t kSamsungAcStateLength
Definition: IRremoteESP8266.h:1078
-
@ DG11J13A
Definition: IRsend.h:171
-
void sendSharp(const uint16_t address, const uint16_t command, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)
Send a Sharp message Status: DEPRECATED / Previously working fine.
Definition: ir_Sharp.cpp:133
-
panasonic_ac_remote_model_t
Panasonic A/C model numbers.
Definition: IRsend.h:146
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
- -
@ AKB75215403
Definition: IRsend.h:178
-
void sendDenon(uint64_t data, uint16_t nbits=kDenonBits, uint16_t repeat=kNoRepeat)
Send a Denon formatted message. Status: STABLE / Should be working.
Definition: ir_Denon.cpp:48
-
void sendCarrierAC64(uint64_t data, uint16_t nbits=kCarrierAc64Bits, uint16_t repeat=kCarrierAc64MinRepeat)
Send a Carrier 64bit HVAC formatted message. Status: STABLE / Known to be working.
Definition: ir_Carrier.cpp:176
-
void sendPioneer(const uint64_t data, const uint16_t nbits=kPioneerBits, const uint16_t repeat=kNoRepeat)
Send a raw Pioneer formatted message. Status: STABLE / Expected to be working.
Definition: ir_Pioneer.cpp:42
-
@ YAW1F
Definition: IRsend.h:135
-
const uint16_t kSymphonyBits
Definition: IRremoteESP8266.h:1103
- -
const uint16_t kDaikin128StateLength
Definition: IRremoteESP8266.h:946
-
const uint16_t kRC6Mode0Bits
Definition: IRremoteESP8266.h:1073
-
const uint16_t kDaikin176DefaultRepeat
Definition: IRremoteESP8266.h:954
-
void sendPanasonic64(const uint64_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)
Send a Panasonic formatted message. Status: STABLE / Should be working.
Definition: ir_Panasonic.cpp:72
-
const uint16_t kMitsubishiHeavy152MinRepeat
Definition: IRremoteESP8266.h:1052
-
void sendHaierAC(const unsigned char data[], const uint16_t nbytes=kHaierACStateLength, const uint16_t repeat=kHaierAcDefaultRepeat)
Send a Haier A/C formatted message. (HSU07-HEA03 remote) Status: STABLE / Known to be working.
Definition: ir_Haier.cpp:51
-
void sendSamsung36(const uint64_t data, const uint16_t nbits=kSamsung36Bits, const uint16_t repeat=kNoRepeat)
Send a Samsung 36-bit formatted message. Status: STABLE / Works on real devices.
Definition: ir_Samsung.cpp:160
-
void sendVoltas(const unsigned char data[], const uint16_t nbytes=kVoltasStateLength, const uint16_t repeat=kNoRepeat)
Send a Voltas formatted message. Status: STABLE / Working on real device.
Definition: ir_Voltas.cpp:41
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
uint16_t offTimePeriod
Definition: IRsend.h:731
-
const uint16_t kSony20Bits
Definition: IRremoteESP8266.h:1100
-
const uint16_t kMitsubishiACMinRepeat
Definition: IRremoteESP8266.h:1040
-
const uint16_t kMetzBits
Definition: IRremoteESP8266.h:1025
-
void sendSony38(const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat+1)
Send an alternative 38kHz Sony/SIRC(Serial Infra-Red Control) message. Status: STABLE / Known working...
Definition: ir_Sony.cpp:62
-
uint32_t encodeSony(const uint16_t nbits, const uint16_t command, const uint16_t address, const uint16_t extended=0)
Convert Sony/SIRC command, address, & extended bits into sendSony format. Status: STABLE / Should be ...
Definition: ir_Sony.cpp:88
- -
@ kPanasonicUnknown
Definition: IRsend.h:147
-
fujitsu_ac_remote_model_t
Fujitsu A/C model numbers.
Definition: IRsend.h:120
-
const uint16_t kPanasonicAcDefaultRepeat
Definition: IRremoteESP8266.h:1066
-
const uint16_t kSymphonyDefaultRepeat
Definition: IRremoteESP8266.h:1104
-
@ ARREB1E
(3) AR-REB1E, AR-RAH1U (Similar to ARRAH2E but no horiz control)
Definition: IRsend.h:126
-
void sendPanasonicAC(const unsigned char data[], const uint16_t nbytes=kPanasonicAcStateLength, const uint16_t repeat=kPanasonicAcDefaultRepeat)
Send a Panasonic A/C message. Status: STABLE / Work with real device(s).
Definition: ir_Panasonic.cpp:171
-
stdAc::swingh_t swingh
Definition: IRsend.h:106
-
const uint16_t kCoolixDefaultRepeat
Definition: IRremoteESP8266.h:922
-
@ kPanasonicNke
Definition: IRsend.h:149
-
@ GE6711AR2853M
Definition: IRsend.h:177
-
@ ARREW4E
(6) Similar to ARRAH2E, but with different temp config.
Definition: IRsend.h:130
-
void sendHitachiAc3(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi(3) A/C formatted message. (HITACHI_AC3) Status: STABLE / Working fine.
Definition: ir_Hitachi.cpp:1333
-
const uint16_t kTcl112AcDefaultRepeat
Definition: IRremoteESP8266.h:1107
-
const uint16_t kDelonghiAcDefaultRepeat
Definition: IRremoteESP8266.h:959
-
void sendSanyoAc(const uint8_t *data, const uint16_t nbytes=kSanyoAcStateLength, const uint16_t repeat=kNoRepeat)
Send a SanyoAc formatted message. Status: STABLE / Reported as working.
Definition: ir_Sanyo.cpp:252
-
const uint16_t kCoronaAcStateLength
Definition: IRremoteESP8266.h:930
-
void sendRC5(const uint64_t data, uint16_t nbits=kRC5XBits, const uint16_t repeat=kNoRepeat)
Send a Philips RC-5/RC-5X packet. Status: RC-5 (stable), RC-5X (alpha)
Definition: ir_RC5_RC6.cpp:61
-
void sendMitsubishi(uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)
Send the supplied Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:107
-
void sendAirwell(uint64_t data, uint16_t nbits=kAirwellBits, uint16_t repeat=kAirwellMinRepeats)
Send an Airwell Manchester Code formatted message. Status: BETA / Appears to be working.
Definition: ir_Airwell.cpp:31
-
const uint16_t kDoshishaBits
Definition: IRremoteESP8266.h:967
-
const uint16_t kCarrierAc40Bits
Definition: IRremoteESP8266.h:925
- -
const uint16_t kTrotecStateLength
Definition: IRremoteESP8266.h:1119
-
const uint16_t kWhirlpoolAcDefaultRepeat
Definition: IRremoteESP8266.h:1125
-
void sendMirage(const unsigned char data[], const uint16_t nbytes=kMirageStateLength, const uint16_t repeat=kMirageMinRepeat)
Send a Mirage formatted message. Status: STABLE / Reported as working.
Definition: ir_Mirage.cpp:30
-
void sendSAMSUNG(const uint64_t data, const uint16_t nbits=kSamsungBits, const uint16_t repeat=kNoRepeat)
Send a 32-bit Samsung formatted message. Status: STABLE / Should be working.
Definition: ir_Samsung.cpp:81
-
const uint16_t kHitachiAc424StateLength
Definition: IRremoteESP8266.h:1008
-
const uint16_t kMitsubishiHeavy88StateLength
Definition: IRremoteESP8266.h:1047
-
void sendNeoclima(const unsigned char data[], const uint16_t nbytes=kNeoclimaStateLength, const uint16_t repeat=kNeoclimaMinRepeat)
Send a Neoclima message. Status: STABLE / Known to be working.
Definition: ir_Neoclima.cpp:40
-
void sendSharpRaw(const uint64_t data, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)
Send a (raw) Sharp message.
Definition: ir_Sharp.cpp:63
- -
void sendGree(const uint64_t data, const uint16_t nbits=kGreeBits, const uint16_t repeat=kGreeDefaultRepeat)
Send a Gree Heat Pump formatted message. Status: STABLE / Working.
Definition: ir_Gree.cpp:74
- -
void sendEcoclim(const uint64_t data, const uint16_t nbits=kEcoclimBits, const uint16_t repeat=kNoRepeat)
Send a EcoClim A/C formatted message. Status: STABLE / Confirmed working on real device.
Definition: ir_Ecoclim.cpp:41
-
const uint16_t kMitsubishiBits
Definition: IRremoteESP8266.h:1034
-
void sendMitsubishi136(const unsigned char data[], const uint16_t nbytes=kMitsubishi136StateLength, const uint16_t repeat=kMitsubishi136MinRepeat)
Send a Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: BETA / Probably working....
Definition: ir_Mitsubishi.cpp:846
-
Enumerators and Structures for the Common A/C API.
Definition: IRsend.h:44
-
@ R_LT0541_HTA_A
Definition: IRsend.h:141
-
const uint16_t kPanasonicAcStateLength
Definition: IRremoteESP8266.h:1062
-
void sendMitsubishiHeavy88(const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy88StateLength, const uint16_t repeat=kMitsubishiHeavy88MinRepeat)
Send a MitsubishiHeavy 88-bit A/C message. Status: BETA / Appears to be working. Needs testing agains...
Definition: ir_MitsubishiHeavy.cpp:47
-
void sendVestelAc(const uint64_t data, const uint16_t nbits=kVestelAcBits, const uint16_t repeat=kNoRepeat)
Send a Vestel message Status: STABLE / Working.
Definition: ir_Vestel.cpp:36
-
const uint16_t kMideaBits
Definition: IRremoteESP8266.h:1027
-
static uint32_t encodeMetz(const uint8_t address, const uint8_t command, const bool toggle=false)
Encode a Metz address, command, and toggle bits into a code suitable for use with sendMetz().
Definition: ir_Metz.cpp:48
-
const uint16_t kKelvinatorStateLength
Definition: IRremoteESP8266.h:1013
-
void sendMidea24(const uint64_t data, const uint16_t nbits=kMidea24Bits, const uint16_t repeat=kMidea24MinRepeat)
Send a Midea24 formatted message. Status: STABLE / Confirmed working on a real device.
Definition: ir_Midea.cpp:732
-
static uint16_t defaultBits(const decode_type_t protocol)
Get the default number of bits for a given protocol.
Definition: IRsend.cpp:599
-
decode_type_t protocol
Definition: IRsend.h:98
- -
const uint16_t kDaikin216DefaultRepeat
Definition: IRremoteESP8266.h:957
- -
bool beep
Definition: IRsend.h:113
-
const uint16_t kWhirlpoolAcStateLength
Definition: IRremoteESP8266.h:1123
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1056
-
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:962
-
const uint16_t kZepealBits
Definition: IRremoteESP8266.h:1129
-
bool filter
Definition: IRsend.h:111
-
const uint16_t kCarrierAc40MinRepeat
Definition: IRremoteESP8266.h:926
-
const uint16_t kMidea24Bits
Definition: IRremoteESP8266.h:1029
-
void sendElitescreens(const uint64_t data, const uint16_t nbits=kEliteScreensBits, const uint16_t repeat=kEliteScreensDefaultRepeat)
Send an Elite Screens formatted message. Status: BETA / Probably Working.
Definition: ir_EliteScreens.cpp:44
-
void sendDelonghiAc(uint64_t data, uint16_t nbits=kDelonghiAcBits, uint16_t repeat=kDelonghiAcDefaultRepeat)
Send a Delonghi A/C formatted message. Status: STABLE / Reported as working on a real device.
Definition: ir_Delonghi.cpp:36
-
const uint16_t kDaikin160DefaultRepeat
Definition: IRremoteESP8266.h:945
-
void _sendSony(const uint64_t data, const uint16_t nbits, const uint16_t repeat, const uint16_t freq)
Internal procedure to generate a Sony/SIRC(Serial Infra-Red Control) message Status: STABLE / Known w...
Definition: ir_Sony.cpp:73
-
const uint16_t kToshibaACMinRepeat
Definition: IRremoteESP8266.h:1112
-
void enableIROut(uint32_t freq, uint8_t duty=kDutyDefault)
Set the output frequency modulation and duty cycle.
Definition: IRsend.cpp:92
- -
const uint16_t kHitachiAc344StateLength
Definition: IRremoteESP8266.h:1006
-
void sendXmp(const uint64_t data, const uint16_t nbits=kXmpBits, const uint16_t repeat=kNoRepeat)
Send a XMP packet. Status: Beta / Untested against a real device.
Definition: ir_Xmp.cpp:122
-
@ kPanasonicDke
Definition: IRsend.h:150
-
const uint16_t kCarrierAc64Bits
Definition: IRremoteESP8266.h:927
-
const uint16_t kDaikin128DefaultRepeat
Definition: IRremoteESP8266.h:948
-
const uint16_t kPioneerBits
Definition: IRremoteESP8266.h:1068
-
const uint16_t kSharpAcStateLength
Definition: IRremoteESP8266.h:1093
-
void sendSharpAc(const unsigned char data[], const uint16_t nbytes=kSharpAcStateLength, const uint16_t repeat=kSharpAcDefaultRepeat)
Send a Sharp A/C message. Status: Alpha / Untested.
Definition: ir_Sharp.cpp:226
-
@ kPanasonicLke
Definition: IRsend.h:148
-
const uint16_t kGreeBits
Definition: IRremoteESP8266.h:987
-
void sendCarrierAC(uint64_t data, uint16_t nbits=kCarrierAcBits, uint16_t repeat=kCarrierAcMinRepeat)
Send a Carrier HVAC formatted message. Status: STABLE / Works on real devices.
Definition: ir_Carrier.cpp:55
-
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:1012
-
const uint16_t kDaikinStateLength
Definition: IRremoteESP8266.h:933
-
const uint16_t kLasertagBits
Definition: IRremoteESP8266.h:1016
-
void sendDaikin160(const unsigned char data[], const uint16_t nbytes=kDaikin160StateLength, const uint16_t repeat=kDaikin160DefaultRepeat)
Send a Daikin160 (160-bit) A/C formatted message. Status: STABLE / Confirmed working.
Definition: ir_Daikin.cpp:1766
-
const uint16_t kAiwaRcT501Bits
Definition: IRremoteESP8266.h:912
-
void sendDaikin2(const unsigned char data[], const uint16_t nbytes=kDaikin2StateLength, const uint16_t repeat=kDaikin2DefaultRepeat)
Send a Daikin2 (312-bit) A/C formatted message. Status: STABLE / Expected to work.
Definition: ir_Daikin.cpp:667
-
@ ARRAH2E
(1) AR-RAH2E, AR-RAC1E, AR-RAE1E, AR-RCE1E (Default) Warning: Use on incorrect models can cause the A...
Definition: IRsend.h:121
-
const uint16_t kTrumaBits
Definition: IRremoteESP8266.h:1122
-
const uint16_t kToshibaACStateLength
Definition: IRremoteESP8266.h:1110
-
const uint16_t kTecoBits
Definition: IRremoteESP8266.h:1108
-
void sendMitsubishi2(uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)
Send a supplied second variant Mitsubishi 16-bit message. Status: BETA / Probably works.
Definition: ir_Mitsubishi.cpp:164
-
const uint16_t kInaxMinRepeat
Definition: IRremoteESP8266.h:1011
-
VIRTUAL void ledOff()
Turn off the IR LED.
Definition: IRsend.cpp:53
- -
const uint8_t kSherwoodBits
Definition: IRremoteESP8266.h:1096
-
stdAc::opmode_t mode
Definition: IRsend.h:101
-
const uint16_t kDaikinDefaultRepeat
Definition: IRremoteESP8266.h:937
-
const uint16_t kDaikin64DefaultRepeat
Definition: IRremoteESP8266.h:942
-
void sendInax(const uint64_t data, const uint16_t nbits=kInaxBits, const uint16_t repeat=kInaxMinRepeat)
Send a Inax Toilet formatted message. Status: STABLE / Working.
Definition: ir_Inax.cpp:31
-
lg_ac_remote_model_t
LG A/C model numbers.
Definition: IRsend.h:176
-
void sendTranscold(const uint64_t data, const uint16_t nbits=kTranscoldBits, const uint16_t repeat=kTranscoldDefaultRepeat)
Send a Transcold message Status: STABLE / Confirmed Working.
Definition: ir_Transcold.cpp:40
-
const uint16_t kMitsubishiHeavy88MinRepeat
Definition: IRremoteESP8266.h:1049
- -
@ kVoltas122LZF
Definition: IRsend.h:166
-
const uint16_t kHitachiAcDefaultRepeat
Definition: IRremoteESP8266.h:997
-
bool econo
Definition: IRsend.h:109
-
void sendSherwood(uint64_t data, uint16_t nbits=kSherwoodBits, uint16_t repeat=kSherwoodMinRepeat)
Send an IR command to a Sherwood device. Status: STABLE / Known working.
Definition: ir_Sherwood.cpp:21
-
const uint16_t kMidea24MinRepeat
Definition: IRremoteESP8266.h:1030
-
void sendMitsubishiHeavy152(const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy152StateLength, const uint16_t repeat=kMitsubishiHeavy152MinRepeat)
Send a MitsubishiHeavy 152-bit A/C message. Status: BETA / Appears to be working. Needs testing again...
Definition: ir_MitsubishiHeavy.cpp:64
-
const uint16_t kDishBits
Definition: IRremoteESP8266.h:965
-
const uint16_t kDishMinRepeat
Definition: IRremoteESP8266.h:966
-
void sendMilestag2(const uint64_t data, const uint16_t nbits=kMilesTag2ShotBits, const uint16_t repeat=kMilesMinRepeat)
Percentage.
Definition: ir_MilesTag2.cpp:41
- -
void sendPanasonic(const uint16_t address, const uint32_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)
Send a Panasonic formatted message. Status: STABLE, but DEPRECATED.
Definition: ir_Panasonic.cpp:89
-
VIRTUAL void space(uint32_t usec)
Turn the pin (LED) off for a given time. Sends an IR space for the specified number of microseconds....
Definition: IRsend.cpp:194
-
const uint16_t kHitachiAc2StateLength
Definition: IRremoteESP8266.h:1000
-
void sendGC(uint16_t buf[], uint16_t len)
Send a shortened GlobalCache (GC) IRdb/control tower formatted message. Status: STABLE / Known workin...
Definition: ir_GlobalCache.cpp:35
-
uint16_t encodeRC5(const uint8_t address, const uint8_t command, const bool key_released=false)
Encode a Philips RC-5 data message. Status: Beta / Should be working.
Definition: ir_RC5_RC6.cpp:115
-
void sendJVC(uint64_t data, uint16_t nbits=kJvcBits, uint16_t repeat=kNoRepeat)
Send a JVC formatted message. Status: STABLE / Working.
Definition: ir_JVC.cpp:46
-
void sendDoshisha(const uint64_t data, uint16_t nbits=kDoshishaBits, const uint16_t repeat=kNoRepeat)
Send a Doshisha formatted message. Status: STABLE / Works on real device.
Definition: ir_Doshisha.cpp:53
- -
uint64_t toggleRC5(const uint64_t data)
Flip the toggle bit of a Philips RC-5/RC-5X data message. Used to indicate a change of remote button'...
Definition: ir_RC5_RC6.cpp:142
-
void sendDaikin(const unsigned char data[], const uint16_t nbytes=kDaikinStateLength, const uint16_t repeat=kDaikinDefaultRepeat)
Send a Daikin 280-bit A/C formatted message. Status: STABLE.
Definition: ir_Daikin.cpp:63
-
const uint16_t kCarrierAcMinRepeat
Definition: IRremoteESP8266.h:924
-
const uint16_t kNikaiBits
Definition: IRremoteESP8266.h:1055
-
uint64_t encodeMagiQuest(const uint32_t wand_id, const uint16_t magnitude)
Encode a MagiQuest wand_id, and a magnitude into a single 64bit value. (Only 48 bits of real data + 8...
Definition: ir_Magiquest.cpp:42
- -
const uint16_t kKelvinatorDefaultRepeat
Definition: IRremoteESP8266.h:1015
-
void sendHitachiAC2(const unsigned char data[], const uint16_t nbytes=kHitachiAc2StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi 53 byte/424-bit A/C formatted message. (HITACHI_AC2) Basically the same as sendHitatch...
Definition: ir_Hitachi.cpp:105
-
const uint16_t kLutronBits
Definition: IRremoteESP8266.h:1023
-
void sendDaikin128(const unsigned char data[], const uint16_t nbytes=kDaikin128StateLength, const uint16_t repeat=kDaikin128DefaultRepeat)
Send a Daikin128 (128-bit) A/C formatted message. Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:2524
-
void sendCarrierAC40(uint64_t data, uint16_t nbits=kCarrierAc40Bits, uint16_t repeat=kCarrierAc40MinRepeat)
Send a Carrier 40bit HVAC formatted message. Status: STABLE / Tested against a real device.
Definition: ir_Carrier.cpp:127
-
void sendPanasonicAC32(const uint64_t data, const uint16_t nbits=kPanasonicAc32Bits, const uint16_t repeat=kPanasonicAcDefaultRepeat)
Send a Panasonic AC 32/16bit formatted message. Status: STABLE / Confirmed working.
Definition: ir_Panasonic.cpp:909
-
const uint16_t kSharpAcDefaultRepeat
Definition: IRremoteESP8266.h:1095
- -
void sendTrotec(const unsigned char data[], const uint16_t nbytes=kTrotecStateLength, const uint16_t repeat=kTrotecDefaultRepeat)
Send a Trotec message. Status: Beta / Probably Working.
Definition: ir_Trotec.cpp:41
-
void sendCoronaAc(const uint8_t data[], const uint16_t nbytes=kCoronaAcStateLength, const uint16_t repeat=kNoRepeat)
Send a CoronaAc formatted message. Status: STABLE / Working on real device.
Definition: ir_Corona.cpp:50
-
@ A903
Definition: IRsend.h:160
-
bool light
Definition: IRsend.h:110
-
stdAc::fanspeed_t fanspeed
Definition: IRsend.h:104
-
const uint16_t kEliteScreensDefaultRepeat
Definition: IRremoteESP8266.h:976
-
const uint16_t kTcl112AcStateLength
Definition: IRremoteESP8266.h:1105
-
void sendRCMM(uint64_t data, uint16_t nbits=kRCMMBits, uint16_t repeat=kNoRepeat)
Send a Philips RC-MM packet. Status: STABLE / Should be working.
Definition: ir_RCMM.cpp:46
-
void sendManchester(const uint16_t headermark, const uint32_t headerspace, const uint16_t half_period, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency=38, const bool MSBfirst=true, const uint16_t repeat=kNoRepeat, const uint8_t dutycycle=kDutyDefault, const bool GEThomas=true)
Generic method for sending Manchester code messages. Will send leading or trailing 0's if the nbits i...
Definition: IRsend.cpp:506
-
const uint16_t kDaikin160StateLength
Definition: IRremoteESP8266.h:943
-
void sendHitachiAC(const unsigned char data[], const uint16_t nbytes=kHitachiAcStateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi 28-byte/224-bit A/C formatted message. (HITACHI_AC) Status: STABLE / Working.
Definition: ir_Hitachi.cpp:66
-
const uint16_t kDaikin2StateLength
Definition: IRremoteESP8266.h:938
-
void sendElectraAC(const unsigned char data[], const uint16_t nbytes=kElectraAcStateLength, const uint16_t repeat=kNoRepeat)
Send a Electra A/C formatted message. Status: Alpha / Needs testing against a real device.
Definition: ir_Electra.cpp:39
- -
const uint16_t kEcoclimBits
Definition: IRremoteESP8266.h:968
-
const uint16_t kSherwoodMinRepeat
Definition: IRremoteESP8266.h:1097
-
const uint16_t kCarrierAc64MinRepeat
Definition: IRremoteESP8266.h:928
-
@ DG11J191
Definition: IRsend.h:172
-
void begin()
Enable the pin for output.
Definition: IRsend.cpp:45
-
const uint16_t kSanyoAcStateLength
Definition: IRremoteESP8266.h:1083
-
const uint16_t kTechnibelAcDefaultRepeat
Definition: IRremoteESP8266.h:961
-
void sendFujitsuAC(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kFujitsuAcMinRepeat)
Send a Fujitsu A/C formatted message. Status: STABLE / Known Good.
Definition: ir_Fujitsu.cpp:53
- -
uint32_t encodeSharp(const uint16_t address, const uint16_t command, const uint16_t expansion=1, const uint16_t check=0, const bool MSBfirst=false)
Encode a (raw) Sharp message from it's components. Status: STABLE / Works okay.
Definition: ir_Sharp.cpp:98
- -
const uint16_t kLegoPfBits
Definition: IRremoteESP8266.h:1018
-
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1092
-
int16_t sleep
Definition: IRsend.h:114
-
bool power
Definition: IRsend.h:100
- -
void sendHitachiAc424(const unsigned char data[], const uint16_t nbytes=kHitachiAc424StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
Send a Hitachi 53-byte/424-bit A/C formatted message. (HITACHI_AC424) Status: STABLE / Reported as wo...
Definition: ir_Hitachi.cpp:927
-
void sendTeco(const uint64_t data, const uint16_t nbits=kTecoBits, const uint16_t repeat=kNoRepeat)
Send a Teco A/C message. Status: Beta / Probably working.
Definition: ir_Teco.cpp:37
- -
const uint16_t kMitsubishi136StateLength
Definition: IRremoteESP8266.h:1041
-
void sendLutron(uint64_t data, uint16_t nbits=kLutronBits, uint16_t repeat=kNoRepeat)
Send a Lutron formatted message. Status: Stable / Appears to be working for real devices.
Definition: ir_Lutron.cpp:41
-
void sendSamsungAC(const unsigned char data[], const uint16_t nbytes=kSamsungAcStateLength, const uint16_t repeat=kSamsungAcDefaultRepeat)
Send a Samsung A/C message. Status: Stable / Known working.
Definition: ir_Samsung.cpp:241
-
uint64_t encodePanasonic(const uint16_t manufacturer, const uint8_t device, const uint8_t subdevice, const uint8_t function)
Calculate the raw Panasonic data based on device, subdevice, & function. Status: STABLE / Should be w...
Definition: ir_Panasonic.cpp:103
-
void sendSanyoLC7461(const uint64_t data, const uint16_t nbits=kSanyoLC7461Bits, const uint16_t repeat=kNoRepeat)
Send a Sanyo LC7461 message. Status: BETA / Probably works.
Definition: ir_Sanyo.cpp:112
-
IRsend(uint16_t IRsendPin, bool inverted=false, bool use_modulation=true)
Constructor for an IRsend object.
Definition: IRsend.cpp:28
-
void sendDISH(uint64_t data, uint16_t nbits=kDishBits, uint16_t repeat=kDishMinRepeat)
Send a DISH NETWORK formatted message. Status: STABLE / Working.
Definition: ir_Dish.cpp:48
-
const uint16_t kRCMMBits
Definition: IRremoteESP8266.h:1075
-
const uint8_t kVestelAcBits
Definition: IRremoteESP8266.h:1127
-
const uint16_t kTranscoldBits
Definition: IRremoteESP8266.h:1117
-
const uint16_t kInaxBits
Definition: IRremoteESP8266.h:1010
-
@ YBOFB
Definition: IRsend.h:136
-
const uint16_t kLegoPfMinRepeat
Definition: IRremoteESP8266.h:1019
-
@ A907
Definition: IRsend.h:158
-
const uint16_t kAmcorDefaultRepeat
Definition: IRremoteESP8266.h:917
-
void sendDaikin216(const unsigned char data[], const uint16_t nbytes=kDaikin216StateLength, const uint16_t repeat=kDaikin216DefaultRepeat)
Send a Daikin216 (216-bit) A/C formatted message. Status: Alpha / Untested on a real device.
Definition: ir_Daikin.cpp:1413
-
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1076
-
uint64_t encodePioneer(uint16_t address, uint16_t command)
Calculate the raw Pioneer data code based on two NEC sub-codes Status: STABLE / Expected to work.
Definition: ir_Pioneer.cpp:77
-
const uint16_t kDaikin64Bits
Definition: IRremoteESP8266.h:941
-
bool quiet
Definition: IRsend.h:107
-
uint16_t encodeRC5X(const uint8_t address, const uint8_t command, const bool key_released=false)
Encode a Philips RC-5X data message. Status: Beta / Should be working.
Definition: ir_RC5_RC6.cpp:127
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint16_t kPanasonicAc32Bits
Definition: IRremoteESP8266.h:1067
-
const uint16_t kLasertagMinRepeat
Definition: IRremoteESP8266.h:1017
-
const uint8_t kDutyDefault
Definition: IRsend.h:35
-
bool turbo
Definition: IRsend.h:108
-
void sendMagiQuest(const uint64_t data, const uint16_t nbits=kMagiquestBits, const uint16_t repeat=kNoRepeat)
Send a MagiQuest formatted message. Status: Beta / Should be working.
Definition: ir_Magiquest.cpp:25
-
void sendTechnibelAc(uint64_t data, uint16_t nbits=kTechnibelAcBits, uint16_t repeat=kTechnibelAcDefaultRepeat)
Send an Technibel AC formatted message. Status: STABLE / Reported as working on a real device.
Definition: ir_Technibel.cpp:35
-
bool modulation
Definition: IRsend.h:735
-
const uint16_t kNeoclimaMinRepeat
Definition: IRremoteESP8266.h:1059
-
const uint16_t kMitsubishi112StateLength
Definition: IRremoteESP8266.h:1044
- -
void sendArgo(const unsigned char data[], const uint16_t nbytes=kArgoStateLength, const uint16_t repeat=kArgoDefaultRepeat)
Send a Argo A/C formatted message. Status: BETA / Probably works.
Definition: ir_Argo.cpp:38
-
void sendTcl112Ac(const unsigned char data[], const uint16_t nbytes=kTcl112AcStateLength, const uint16_t repeat=kTcl112AcDefaultRepeat)
Send a TCL 112-bit A/C message. Status: Beta / Probably working.
Definition: ir_Tcl.cpp:31
-
@ kPanasonicJke
Definition: IRsend.h:151
- -
const uint16_t kSonyMinRepeat
Definition: IRremoteESP8266.h:1102
-
void sendCOOLIX(uint64_t data, uint16_t nbits=kCoolixBits, uint16_t repeat=kCoolixDefaultRepeat)
Send a Coolix message Status: STABLE / Confirmed Working.
Definition: ir_Coolix.cpp:49
-
const uint16_t kEpsonBits
Definition: IRremoteESP8266.h:970
-
void sendNEC(uint64_t data, uint16_t nbits=kNECBits, uint16_t repeat=kNoRepeat)
Send a raw NEC(Renesas) formatted message. Status: STABLE / Known working.
Definition: ir_NEC.cpp:28
-
void sendMWM(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kNoRepeat)
Send a MWM packet/message. Status: Implemented.
Definition: ir_MWM.cpp:37
-
voltas_ac_remote_model_t
Voltas A/C model numbers.
Definition: IRsend.h:164
-
void sendDaikin64(const uint64_t data, const uint16_t nbits=kDaikin64Bits, const uint16_t repeat=kDaikin64DefaultRepeat)
Send a Daikin64 (64-bit) A/C formatted message. Status: Beta / Probably Working.
Definition: ir_Daikin.cpp:3440
-
void sendRC6(const uint64_t data, const uint16_t nbits=kRC6Mode0Bits, const uint16_t repeat=kNoRepeat)
Send a Philips RC-6 packet. Status: Stable.
Definition: ir_RC5_RC6.cpp:190
-
const int8_t kPeriodOffset
Definition: IRsend.h:26
-
const uint16_t kLgBits
Definition: IRremoteESP8266.h:1020
-
void sendDaikin176(const unsigned char data[], const uint16_t nbytes=kDaikin176StateLength, const uint16_t repeat=kDaikin176DefaultRepeat)
Send a Daikin176 (176-bit) A/C formatted message. Status: STABLE / Working on a real device.
Definition: ir_Daikin.cpp:2130
-
sharp_ac_remote_model_t
Sharp A/C model numbers.
Definition: IRsend.h:157
-
const uint16_t kGoodweatherMinRepeat
Definition: IRremoteESP8266.h:985
-
const uint16_t kElectraAcStateLength
Definition: IRremoteESP8266.h:972
-
const uint16_t kGreeDefaultRepeat
Definition: IRremoteESP8266.h:988
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
-
void sendGoodweather(const uint64_t data, const uint16_t nbits=kGoodweatherBits, const uint16_t repeat=kGoodweatherMinRepeat)
Send a Goodweather HVAC formatted message. Status: BETA / Needs testing on real device.
Definition: ir_Goodweather.cpp:31
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8cpp.html deleted file mode 100644 index 999c80f4d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8cpp.html +++ /dev/null @@ -1,2959 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtext.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRtext.cpp File Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const PROGMEM char * kUnknownStr = D_STR_UNKNOWN
 "Unknown" More...
 
const PROGMEM char * kProtocolStr = D_STR_PROTOCOL
 "Protocol" More...
 
const PROGMEM char * kPowerStr = D_STR_POWER
 "Power" More...
 
const PROGMEM char * kOnStr = D_STR_ON
 "On" More...
 
const PROGMEM char * kOffStr = D_STR_OFF
 "Off" More...
 
const PROGMEM char * kModeStr = D_STR_MODE
 "Mode" More...
 
const PROGMEM char * kToggleStr = D_STR_TOGGLE
 "Toggle" More...
 
const PROGMEM char * kTurboStr = D_STR_TURBO
 "Turbo" More...
 
const PROGMEM char * kSuperStr = D_STR_SUPER
 "Super" More...
 
const PROGMEM char * kSleepStr = D_STR_SLEEP
 "Sleep" More...
 
const PROGMEM char * kLightStr = D_STR_LIGHT
 "Light" More...
 
const PROGMEM char * kPowerfulStr = D_STR_POWERFUL
 "Powerful" More...
 
const PROGMEM char * kQuietStr = D_STR_QUIET
 "Quiet" More...
 
const PROGMEM char * kEconoStr = D_STR_ECONO
 "Econo" More...
 
const PROGMEM char * kSwingStr = D_STR_SWING
 "Swing" More...
 
const PROGMEM char * kSwingHStr = D_STR_SWINGH
 "SwingH" More...
 
const PROGMEM char * kSwingVStr = D_STR_SWINGV
 "SwingV" More...
 
const PROGMEM char * kBeepStr = D_STR_BEEP
 "Beep" More...
 
const PROGMEM char * kZoneFollowStr = D_STR_ZONEFOLLOW
 "Zone Follow" More...
 
const PROGMEM char * kFixedStr = D_STR_FIXED
 "Fixed" More...
 
const PROGMEM char * kMouldStr = D_STR_MOULD
 "Mould" More...
 
const PROGMEM char * kCleanStr = D_STR_CLEAN
 "Clean" More...
 
const PROGMEM char * kPurifyStr = D_STR_PURIFY
 "Purify" More...
 
const PROGMEM char * kTimerStr = D_STR_TIMER
 "Timer" More...
 
const PROGMEM char * kOnTimerStr = D_STR_ONTIMER
 "OnTimer" More...
 
const PROGMEM char * kOffTimerStr = D_STR_OFFTIMER
 "OffTimer" More...
 
const PROGMEM char * kClockStr = D_STR_CLOCK
 "Clock" More...
 
const PROGMEM char * kCommandStr = D_STR_COMMAND
 "Command" More...
 
const PROGMEM char * kXFanStr = D_STR_XFAN
 "XFan" More...
 
const PROGMEM char * kHealthStr = D_STR_HEALTH
 "Health" More...
 
const PROGMEM char * kModelStr = D_STR_MODEL
 "Model" More...
 
const PROGMEM char * kTempStr = D_STR_TEMP
 "Temp" More...
 
const PROGMEM char * kIFeelStr = D_STR_IFEEL
 "IFeel" More...
 
const PROGMEM char * kHumidStr = D_STR_HUMID
 "Humid" More...
 
const PROGMEM char * kSaveStr = D_STR_SAVE
 "Save" More...
 
const PROGMEM char * kEyeStr = D_STR_EYE
 "Eye" More...
 
const PROGMEM char * kFollowStr = D_STR_FOLLOW
 "Follow" More...
 
const PROGMEM char * kIonStr = D_STR_ION
 "Ion" More...
 
const PROGMEM char * kFreshStr = D_STR_FRESH
 "Fresh" More...
 
const PROGMEM char * kHoldStr = D_STR_HOLD
 "Hold" More...
 
const PROGMEM char * kButtonStr = D_STR_BUTTON
 "Button" More...
 
const PROGMEM char * k8CHeatStr = D_STR_8C_HEAT
 "8C Heat" More...
 
const PROGMEM char * k10CHeatStr = D_STR_10C_HEAT
 "10C Heat" More...
 
const PROGMEM char * kNightStr = D_STR_NIGHT
 "Night" More...
 
const PROGMEM char * kSilentStr = D_STR_SILENT
 "Silent" More...
 
const PROGMEM char * kFilterStr = D_STR_FILTER
 "Filter" More...
 
const PROGMEM char * k3DStr = D_STR_3D
 "3D" More...
 
const PROGMEM char * kCelsiusStr = D_STR_CELSIUS
 "Celsius" More...
 
const PROGMEM char * kCelsiusFahrenheitStr = D_STR_CELSIUS_FAHRENHEIT
 "Celsius/Fahrenheit" More...
 
const PROGMEM char * kTempUpStr = D_STR_TEMPUP
 "Temp Up" More...
 
const PROGMEM char * kTempDownStr = D_STR_TEMPDOWN
 "Temp Down" More...
 
const PROGMEM char * kStartStr = D_STR_START
 "Start" More...
 
const PROGMEM char * kStopStr = D_STR_STOP
 "Stop" More...
 
const PROGMEM char * kMoveStr = D_STR_MOVE
 "Move" More...
 
const PROGMEM char * kSetStr = D_STR_SET
 "Set" More...
 
const PROGMEM char * kCancelStr = D_STR_CANCEL
 "Cancel" More...
 
const PROGMEM char * kUpStr = D_STR_UP
 "Up" More...
 
const PROGMEM char * kDownStr = D_STR_DOWN
 "Down" More...
 
const PROGMEM char * kChangeStr = D_STR_CHANGE
 "Change" More...
 
const PROGMEM char * kComfortStr = D_STR_COMFORT
 "Comfort" More...
 
const PROGMEM char * kSensorStr = D_STR_SENSOR
 "Sensor" More...
 
const PROGMEM char * kWeeklyTimerStr = D_STR_WEEKLYTIMER
 "WeeklyTimer" More...
 
const PROGMEM char * kWifiStr = D_STR_WIFI
 "Wifi" More...
 
const PROGMEM char * kLastStr = D_STR_LAST
 "Last" More...
 
const PROGMEM char * kFastStr = D_STR_FAST
 "Fast" More...
 
const PROGMEM char * kSlowStr = D_STR_SLOW
 "Slow" More...
 
const PROGMEM char * kAirFlowStr = D_STR_AIRFLOW
 "Air Flow" More...
 
const PROGMEM char * kStepStr = D_STR_STEP
 "Step" More...
 
const PROGMEM char * kNAStr = D_STR_NA
 "N/A" More...
 
const PROGMEM char * kInsideStr = D_STR_INSIDE
 "Inside" More...
 
const PROGMEM char * kOutsideStr = D_STR_OUTSIDE
 "Outside" More...
 
const PROGMEM char * kLoudStr = D_STR_LOUD
 "Loud" More...
 
const PROGMEM char * kLowerStr = D_STR_LOWER
 "Lower" More...
 
const PROGMEM char * kUpperStr = D_STR_UPPER
 "Upper" More...
 
const PROGMEM char * kBreezeStr = D_STR_BREEZE
 "Breeze" More...
 
const PROGMEM char * kCirculateStr = D_STR_CIRCULATE
 "Circulate" More...
 
const PROGMEM char * kCeilingStr = D_STR_CEILING
 "Ceiling" More...
 
const PROGMEM char * kWallStr = D_STR_WALL
 "Wall" More...
 
const PROGMEM char * kRoomStr = D_STR_ROOM
 "Room" More...
 
const PROGMEM char * k6thSenseStr = D_STR_6THSENSE
 "6th Sense" More...
 
const PROGMEM char * kTypeStr = D_STR_TYPE
 "Type" More...
 
const PROGMEM char * kSpecialStr = D_STR_SPECIAL
 "Special" More...
 
const PROGMEM char * kIdStr = D_STR_ID
 "Id" / Device Identifier More...
 
const PROGMEM char * kAutoStr = D_STR_AUTO
 "Auto" More...
 
const PROGMEM char * kAutomaticStr = D_STR_AUTOMATIC
 "Automatic" More...
 
const PROGMEM char * kManualStr = D_STR_MANUAL
 "Manual" More...
 
const PROGMEM char * kCoolStr = D_STR_COOL
 "Cool" More...
 
const PROGMEM char * kHeatStr = D_STR_HEAT
 "Heat" More...
 
const PROGMEM char * kFanStr = D_STR_FAN
 "Fan" More...
 
const PROGMEM char * kDryStr = D_STR_DRY
 "Dry" More...
 
const PROGMEM char * kFanOnlyStr = D_STR_FANONLY
 "fan_only" More...
 
const PROGMEM char * kRecycleStr = D_STR_RECYCLE
 "Recycle" More...
 
const PROGMEM char * kMaxStr = D_STR_MAX
 "Max" More...
 
const PROGMEM char * kMaximumStr = D_STR_MAXIMUM
 "Maximum" More...
 
const PROGMEM char * kMinStr = D_STR_MIN
 "Min" More...
 
const PROGMEM char * kMinimumStr = D_STR_MINIMUM
 "Minimum" More...
 
const PROGMEM char * kMedStr = D_STR_MED
 "Med" More...
 
const PROGMEM char * kMediumStr = D_STR_MEDIUM
 "Medium" More...
 
const PROGMEM char * kHighestStr = D_STR_HIGHEST
 "Highest" More...
 
const PROGMEM char * kHighStr = D_STR_HIGH
 "High" More...
 
const PROGMEM char * kHiStr = D_STR_HI
 "Hi" More...
 
const PROGMEM char * kMidStr = D_STR_MID
 "Mid" More...
 
const PROGMEM char * kMiddleStr = D_STR_MIDDLE
 "Middle" More...
 
const PROGMEM char * kLowStr = D_STR_LOW
 "Low" More...
 
const PROGMEM char * kLoStr = D_STR_LO
 "Lo" More...
 
const PROGMEM char * kLowestStr = D_STR_LOWEST
 "Lowest" More...
 
const PROGMEM char * kMaxRightStr = D_STR_MAXRIGHT
 "Max Right" More...
 
const PROGMEM char * kRightMaxStr = D_STR_RIGHTMAX_NOSPACE
 "RightMax" More...
 
const PROGMEM char * kRightStr = D_STR_RIGHT
 "Right" More...
 
const PROGMEM char * kLeftStr = D_STR_LEFT
 "Left" More...
 
const PROGMEM char * kMaxLeftStr = D_STR_MAXLEFT
 "Max Left" More...
 
const PROGMEM char * kLeftMaxStr = D_STR_LEFTMAX_NOSPACE
 "LeftMax" More...
 
const PROGMEM char * kWideStr = D_STR_WIDE
 "Wide" More...
 
const PROGMEM char * kCentreStr = D_STR_CENTRE
 "Centre" More...
 
const PROGMEM char * kTopStr = D_STR_TOP
 "Top" More...
 
const PROGMEM char * kBottomStr = D_STR_BOTTOM
 "Bottom" More...
 
const PROGMEM char * kEconoToggleStr = D_STR_ECONOTOGGLE
 "Econo Toggle" More...
 
const PROGMEM char * kEyeAutoStr = D_STR_EYEAUTO
 "Eye Auto" More...
 
const PROGMEM char * kLightToggleStr = D_STR_LIGHTTOGGLE
 "Light Toggle" More...
 
const PROGMEM char * kOutsideQuietStr = D_STR_OUTSIDEQUIET
 "Outside Quiet" More...
 
const PROGMEM char * kPowerToggleStr = D_STR_POWERTOGGLE
 "Power Toggle" More...
 
const PROGMEM char * kPowerButtonStr = D_STR_POWERBUTTON
 "Power Button" More...
 
const PROGMEM char * kPreviousPowerStr = D_STR_PREVIOUSPOWER
 "Previous Power" More...
 
const PROGMEM char * kDisplayTempStr = D_STR_DISPLAYTEMP
 "Display Temp" More...
 
const PROGMEM char * kSensorTempStr = D_STR_SENSORTEMP
 "Sensor Temp" More...
 
const PROGMEM char * kSleepTimerStr = D_STR_SLEEP_TIMER
 "Sleep Timer" More...
 
const PROGMEM char * kSwingVModeStr = D_STR_SWINGVMODE
 "Swing(V) Mode" More...
 
const PROGMEM char * kSwingVToggleStr = D_STR_SWINGVTOGGLE
 "Swing(V) Toggle" More...
 
const PROGMEM char * kTurboToggleStr = D_STR_TURBOTOGGLE
 "Turbo Toggle" More...
 
char kTimeSep = D_CHR_TIME_SEP
 ':' More...
 
const PROGMEM char * kSpaceLBraceStr = D_STR_SPACELBRACE
 " (" More...
 
const PROGMEM char * kCommaSpaceStr = D_STR_COMMASPACE
 ", " More...
 
const PROGMEM char * kColonSpaceStr = D_STR_COLONSPACE
 ": " More...
 
const PROGMEM char * kDayStr = D_STR_DAY
 "Day" More...
 
const PROGMEM char * kDaysStr = D_STR_DAYS
 "Days" More...
 
const PROGMEM char * kHourStr = D_STR_HOUR
 "Hour" More...
 
const PROGMEM char * kHoursStr = D_STR_HOURS
 "Hours" More...
 
const PROGMEM char * kMinuteStr = D_STR_MINUTE
 "Minute" More...
 
const PROGMEM char * kMinutesStr = D_STR_MINUTES
 "Minutes" More...
 
const PROGMEM char * kSecondStr = D_STR_SECOND
 "Second" More...
 
const PROGMEM char * kSecondsStr = D_STR_SECONDS
 "Seconds" More...
 
const PROGMEM char * kNowStr = D_STR_NOW
 "Now" More...
 
const PROGMEM char * kThreeLetterDayOfWeekStr = D_STR_THREELETTERDAYS
 "SunMonTueWedThuFriSat" More...
 
const PROGMEM char * kYesStr = D_STR_YES
 "Yes" More...
 
const PROGMEM char * kNoStr = D_STR_NO
 "No" More...
 
const PROGMEM char * kTrueStr = D_STR_TRUE
 "True" More...
 
const PROGMEM char * kFalseStr = D_STR_FALSE
 "False" More...
 
const PROGMEM char * kRepeatStr = D_STR_REPEAT
 "Repeat" More...
 
const PROGMEM char * kCodeStr = D_STR_CODE
 "Code" More...
 
const PROGMEM char * kBitsStr = D_STR_BITS
 "Bits" More...
 
const PROGMEM char * kAllProtocolNamesStr
 New protocol strings should be added just above this line. More...
 
-

Detailed Description

-
Warning
If you add or remove an entry in this file, you should run: '../tools/generate_irtext_h.sh' to rebuild the IRtext.h file.
-

Variable Documentation

- -

◆ k10CHeatStr

- -
-
- - - - -
const PROGMEM char* k10CHeatStr = D_STR_10C_HEAT
-
- -

"10C Heat"

- -
-
- -

◆ k3DStr

- -
-
- - - - -
const PROGMEM char* k3DStr = D_STR_3D
-
- -

"3D"

- -
-
- -

◆ k6thSenseStr

- -
-
- - - - -
const PROGMEM char* k6thSenseStr = D_STR_6THSENSE
-
- -

"6th Sense"

- -
-
- -

◆ k8CHeatStr

- -
-
- - - - -
const PROGMEM char* k8CHeatStr = D_STR_8C_HEAT
-
- -

"8C Heat"

- -
-
- -

◆ kAirFlowStr

- -
-
- - - - -
const PROGMEM char* kAirFlowStr = D_STR_AIRFLOW
-
- -

"Air Flow"

- -
-
- -

◆ kAllProtocolNamesStr

- -
-
- - - - -
const PROGMEM char* kAllProtocolNamesStr
-
- -

New protocol strings should be added just above this line.

-

This string requires double null termination.

- -
-
- -

◆ kAutomaticStr

- -
-
- - - - -
const PROGMEM char* kAutomaticStr = D_STR_AUTOMATIC
-
- -

"Automatic"

- -
-
- -

◆ kAutoStr

- -
-
- - - - -
const PROGMEM char* kAutoStr = D_STR_AUTO
-
- -

"Auto"

- -
-
- -

◆ kBeepStr

- -
-
- - - - -
const PROGMEM char* kBeepStr = D_STR_BEEP
-
- -

"Beep"

- -
-
- -

◆ kBitsStr

- -
-
- - - - -
const PROGMEM char* kBitsStr = D_STR_BITS
-
- -

"Bits"

- -
-
- -

◆ kBottomStr

- -
-
- - - - -
const PROGMEM char* kBottomStr = D_STR_BOTTOM
-
- -

"Bottom"

- -
-
- -

◆ kBreezeStr

- -
-
- - - - -
const PROGMEM char* kBreezeStr = D_STR_BREEZE
-
- -

"Breeze"

- -
-
- -

◆ kButtonStr

- -
-
- - - - -
const PROGMEM char* kButtonStr = D_STR_BUTTON
-
- -

"Button"

- -
-
- -

◆ kCancelStr

- -
-
- - - - -
const PROGMEM char* kCancelStr = D_STR_CANCEL
-
- -

"Cancel"

- -
-
- -

◆ kCeilingStr

- -
-
- - - - -
const PROGMEM char* kCeilingStr = D_STR_CEILING
-
- -

"Ceiling"

- -
-
- -

◆ kCelsiusFahrenheitStr

- -
-
- - - - -
const PROGMEM char* kCelsiusFahrenheitStr = D_STR_CELSIUS_FAHRENHEIT
-
- -

"Celsius/Fahrenheit"

- -
-
- -

◆ kCelsiusStr

- -
-
- - - - -
const PROGMEM char* kCelsiusStr = D_STR_CELSIUS
-
- -

"Celsius"

- -
-
- -

◆ kCentreStr

- -
-
- - - - -
const PROGMEM char* kCentreStr = D_STR_CENTRE
-
- -

"Centre"

- -
-
- -

◆ kChangeStr

- -
-
- - - - -
const PROGMEM char* kChangeStr = D_STR_CHANGE
-
- -

"Change"

- -
-
- -

◆ kCirculateStr

- -
-
- - - - -
const PROGMEM char* kCirculateStr = D_STR_CIRCULATE
-
- -

"Circulate"

- -
-
- -

◆ kCleanStr

- -
-
- - - - -
const PROGMEM char* kCleanStr = D_STR_CLEAN
-
- -

"Clean"

- -
-
- -

◆ kClockStr

- -
-
- - - - -
const PROGMEM char* kClockStr = D_STR_CLOCK
-
- -

"Clock"

- -
-
- -

◆ kCodeStr

- -
-
- - - - -
const PROGMEM char* kCodeStr = D_STR_CODE
-
- -

"Code"

- -
-
- -

◆ kColonSpaceStr

- -
-
- - - - -
const PROGMEM char* kColonSpaceStr = D_STR_COLONSPACE
-
- -

": "

- -
-
- -

◆ kComfortStr

- -
-
- - - - -
const PROGMEM char* kComfortStr = D_STR_COMFORT
-
- -

"Comfort"

- -
-
- -

◆ kCommandStr

- -
-
- - - - -
const PROGMEM char* kCommandStr = D_STR_COMMAND
-
- -

"Command"

- -
-
- -

◆ kCommaSpaceStr

- -
-
- - - - -
const PROGMEM char* kCommaSpaceStr = D_STR_COMMASPACE
-
- -

", "

- -
-
- -

◆ kCoolStr

- -
-
- - - - -
const PROGMEM char* kCoolStr = D_STR_COOL
-
- -

"Cool"

- -
-
- -

◆ kDaysStr

- -
-
- - - - -
const PROGMEM char* kDaysStr = D_STR_DAYS
-
- -

"Days"

- -
-
- -

◆ kDayStr

- -
-
- - - - -
const PROGMEM char* kDayStr = D_STR_DAY
-
- -

"Day"

- -
-
- -

◆ kDisplayTempStr

- -
-
- - - - -
const PROGMEM char* kDisplayTempStr = D_STR_DISPLAYTEMP
-
- -

"Display Temp"

- -
-
- -

◆ kDownStr

- -
-
- - - - -
const PROGMEM char* kDownStr = D_STR_DOWN
-
- -

"Down"

- -
-
- -

◆ kDryStr

- -
-
- - - - -
const PROGMEM char* kDryStr = D_STR_DRY
-
- -

"Dry"

- -
-
- -

◆ kEconoStr

- -
-
- - - - -
const PROGMEM char* kEconoStr = D_STR_ECONO
-
- -

"Econo"

- -
-
- -

◆ kEconoToggleStr

- -
-
- - - - -
const PROGMEM char* kEconoToggleStr = D_STR_ECONOTOGGLE
-
- -

"Econo Toggle"

- -
-
- -

◆ kEyeAutoStr

- -
-
- - - - -
const PROGMEM char* kEyeAutoStr = D_STR_EYEAUTO
-
- -

"Eye Auto"

- -
-
- -

◆ kEyeStr

- -
-
- - - - -
const PROGMEM char* kEyeStr = D_STR_EYE
-
- -

"Eye"

- -
-
- -

◆ kFalseStr

- -
-
- - - - -
const PROGMEM char* kFalseStr = D_STR_FALSE
-
- -

"False"

- -
-
- -

◆ kFanOnlyStr

- -
-
- - - - -
const PROGMEM char* kFanOnlyStr = D_STR_FANONLY
-
- -

"fan_only"

- -
-
- -

◆ kFanStr

- -
-
- - - - -
const PROGMEM char* kFanStr = D_STR_FAN
-
- -

"Fan"

- -
-
- -

◆ kFastStr

- -
-
- - - - -
const PROGMEM char* kFastStr = D_STR_FAST
-
- -

"Fast"

- -
-
- -

◆ kFilterStr

- -
-
- - - - -
const PROGMEM char* kFilterStr = D_STR_FILTER
-
- -

"Filter"

- -
-
- -

◆ kFixedStr

- -
-
- - - - -
const PROGMEM char* kFixedStr = D_STR_FIXED
-
- -

"Fixed"

- -
-
- -

◆ kFollowStr

- -
-
- - - - -
const PROGMEM char* kFollowStr = D_STR_FOLLOW
-
- -

"Follow"

- -
-
- -

◆ kFreshStr

- -
-
- - - - -
const PROGMEM char* kFreshStr = D_STR_FRESH
-
- -

"Fresh"

- -
-
- -

◆ kHealthStr

- -
-
- - - - -
const PROGMEM char* kHealthStr = D_STR_HEALTH
-
- -

"Health"

- -
-
- -

◆ kHeatStr

- -
-
- - - - -
const PROGMEM char* kHeatStr = D_STR_HEAT
-
- -

"Heat"

- -
-
- -

◆ kHighestStr

- -
-
- - - - -
const PROGMEM char* kHighestStr = D_STR_HIGHEST
-
- -

"Highest"

- -
-
- -

◆ kHighStr

- -
-
- - - - -
const PROGMEM char* kHighStr = D_STR_HIGH
-
- -

"High"

- -
-
- -

◆ kHiStr

- -
-
- - - - -
const PROGMEM char* kHiStr = D_STR_HI
-
- -

"Hi"

- -
-
- -

◆ kHoldStr

- -
-
- - - - -
const PROGMEM char* kHoldStr = D_STR_HOLD
-
- -

"Hold"

- -
-
- -

◆ kHoursStr

- -
-
- - - - -
const PROGMEM char* kHoursStr = D_STR_HOURS
-
- -

"Hours"

- -
-
- -

◆ kHourStr

- -
-
- - - - -
const PROGMEM char* kHourStr = D_STR_HOUR
-
- -

"Hour"

- -
-
- -

◆ kHumidStr

- -
-
- - - - -
const PROGMEM char* kHumidStr = D_STR_HUMID
-
- -

"Humid"

- -
-
- -

◆ kIdStr

- -
-
- - - - -
const PROGMEM char* kIdStr = D_STR_ID
-
- -

"Id" / Device Identifier

- -
-
- -

◆ kIFeelStr

- -
-
- - - - -
const PROGMEM char* kIFeelStr = D_STR_IFEEL
-
- -

"IFeel"

- -
-
- -

◆ kInsideStr

- -
-
- - - - -
const PROGMEM char* kInsideStr = D_STR_INSIDE
-
- -

"Inside"

- -
-
- -

◆ kIonStr

- -
-
- - - - -
const PROGMEM char* kIonStr = D_STR_ION
-
- -

"Ion"

- -
-
- -

◆ kLastStr

- -
-
- - - - -
const PROGMEM char* kLastStr = D_STR_LAST
-
- -

"Last"

- -
-
- -

◆ kLeftMaxStr

- -
-
- - - - -
const PROGMEM char* kLeftMaxStr = D_STR_LEFTMAX_NOSPACE
-
- -

"LeftMax"

- -
-
- -

◆ kLeftStr

- -
-
- - - - -
const PROGMEM char* kLeftStr = D_STR_LEFT
-
- -

"Left"

- -
-
- -

◆ kLightStr

- -
-
- - - - -
const PROGMEM char* kLightStr = D_STR_LIGHT
-
- -

"Light"

- -
-
- -

◆ kLightToggleStr

- -
-
- - - - -
const PROGMEM char* kLightToggleStr = D_STR_LIGHTTOGGLE
-
- -

"Light Toggle"

- -
-
- -

◆ kLoStr

- -
-
- - - - -
const PROGMEM char* kLoStr = D_STR_LO
-
- -

"Lo"

- -
-
- -

◆ kLoudStr

- -
-
- - - - -
const PROGMEM char* kLoudStr = D_STR_LOUD
-
- -

"Loud"

- -
-
- -

◆ kLowerStr

- -
-
- - - - -
const PROGMEM char* kLowerStr = D_STR_LOWER
-
- -

"Lower"

- -
-
- -

◆ kLowestStr

- -
-
- - - - -
const PROGMEM char* kLowestStr = D_STR_LOWEST
-
- -

"Lowest"

- -
-
- -

◆ kLowStr

- -
-
- - - - -
const PROGMEM char* kLowStr = D_STR_LOW
-
- -

"Low"

- -
-
- -

◆ kManualStr

- -
-
- - - - -
const PROGMEM char* kManualStr = D_STR_MANUAL
-
- -

"Manual"

- -
-
- -

◆ kMaximumStr

- -
-
- - - - -
const PROGMEM char* kMaximumStr = D_STR_MAXIMUM
-
- -

"Maximum"

- -
-
- -

◆ kMaxLeftStr

- -
-
- - - - -
const PROGMEM char* kMaxLeftStr = D_STR_MAXLEFT
-
- -

"Max Left"

- -
-
- -

◆ kMaxRightStr

- -
-
- - - - -
const PROGMEM char* kMaxRightStr = D_STR_MAXRIGHT
-
- -

"Max Right"

- -
-
- -

◆ kMaxStr

- -
-
- - - - -
const PROGMEM char* kMaxStr = D_STR_MAX
-
- -

"Max"

- -
-
- -

◆ kMediumStr

- -
-
- - - - -
const PROGMEM char* kMediumStr = D_STR_MEDIUM
-
- -

"Medium"

- -
-
- -

◆ kMedStr

- -
-
- - - - -
const PROGMEM char* kMedStr = D_STR_MED
-
- -

"Med"

- -
-
- -

◆ kMiddleStr

- -
-
- - - - -
const PROGMEM char* kMiddleStr = D_STR_MIDDLE
-
- -

"Middle"

- -
-
- -

◆ kMidStr

- -
-
- - - - -
const PROGMEM char* kMidStr = D_STR_MID
-
- -

"Mid"

- -
-
- -

◆ kMinimumStr

- -
-
- - - - -
const PROGMEM char* kMinimumStr = D_STR_MINIMUM
-
- -

"Minimum"

- -
-
- -

◆ kMinStr

- -
-
- - - - -
const PROGMEM char* kMinStr = D_STR_MIN
-
- -

"Min"

- -
-
- -

◆ kMinutesStr

- -
-
- - - - -
const PROGMEM char* kMinutesStr = D_STR_MINUTES
-
- -

"Minutes"

- -
-
- -

◆ kMinuteStr

- -
-
- - - - -
const PROGMEM char* kMinuteStr = D_STR_MINUTE
-
- -

"Minute"

- -
-
- -

◆ kModelStr

- -
-
- - - - -
const PROGMEM char* kModelStr = D_STR_MODEL
-
- -

"Model"

- -
-
- -

◆ kModeStr

- -
-
- - - - -
const PROGMEM char* kModeStr = D_STR_MODE
-
- -

"Mode"

- -
-
- -

◆ kMouldStr

- -
-
- - - - -
const PROGMEM char* kMouldStr = D_STR_MOULD
-
- -

"Mould"

- -
-
- -

◆ kMoveStr

- -
-
- - - - -
const PROGMEM char* kMoveStr = D_STR_MOVE
-
- -

"Move"

- -
-
- -

◆ kNAStr

- -
-
- - - - -
const PROGMEM char* kNAStr = D_STR_NA
-
- -

"N/A"

- -
-
- -

◆ kNightStr

- -
-
- - - - -
const PROGMEM char* kNightStr = D_STR_NIGHT
-
- -

"Night"

- -
-
- -

◆ kNoStr

- -
-
- - - - -
const PROGMEM char* kNoStr = D_STR_NO
-
- -

"No"

- -
-
- -

◆ kNowStr

- -
-
- - - - -
const PROGMEM char* kNowStr = D_STR_NOW
-
- -

"Now"

- -
-
- -

◆ kOffStr

- -
-
- - - - -
const PROGMEM char* kOffStr = D_STR_OFF
-
- -

"Off"

- -
-
- -

◆ kOffTimerStr

- -
-
- - - - -
const PROGMEM char* kOffTimerStr = D_STR_OFFTIMER
-
- -

"OffTimer"

- -
-
- -

◆ kOnStr

- -
-
- - - - -
const PROGMEM char* kOnStr = D_STR_ON
-
- -

"On"

- -
-
- -

◆ kOnTimerStr

- -
-
- - - - -
const PROGMEM char* kOnTimerStr = D_STR_ONTIMER
-
- -

"OnTimer"

- -
-
- -

◆ kOutsideQuietStr

- -
-
- - - - -
const PROGMEM char* kOutsideQuietStr = D_STR_OUTSIDEQUIET
-
- -

"Outside Quiet"

- -
-
- -

◆ kOutsideStr

- -
-
- - - - -
const PROGMEM char* kOutsideStr = D_STR_OUTSIDE
-
- -

"Outside"

- -
-
- -

◆ kPowerButtonStr

- -
-
- - - - -
const PROGMEM char* kPowerButtonStr = D_STR_POWERBUTTON
-
- -

"Power Button"

- -
-
- -

◆ kPowerfulStr

- -
-
- - - - -
const PROGMEM char* kPowerfulStr = D_STR_POWERFUL
-
- -

"Powerful"

- -
-
- -

◆ kPowerStr

- -
-
- - - - -
const PROGMEM char* kPowerStr = D_STR_POWER
-
- -

"Power"

- -
-
- -

◆ kPowerToggleStr

- -
-
- - - - -
const PROGMEM char* kPowerToggleStr = D_STR_POWERTOGGLE
-
- -

"Power Toggle"

- -
-
- -

◆ kPreviousPowerStr

- -
-
- - - - -
const PROGMEM char* kPreviousPowerStr = D_STR_PREVIOUSPOWER
-
- -

"Previous Power"

- -
-
- -

◆ kProtocolStr

- -
-
- - - - -
const PROGMEM char* kProtocolStr = D_STR_PROTOCOL
-
- -

"Protocol"

- -
-
- -

◆ kPurifyStr

- -
-
- - - - -
const PROGMEM char* kPurifyStr = D_STR_PURIFY
-
- -

"Purify"

- -
-
- -

◆ kQuietStr

- -
-
- - - - -
const PROGMEM char* kQuietStr = D_STR_QUIET
-
- -

"Quiet"

- -
-
- -

◆ kRecycleStr

- -
-
- - - - -
const PROGMEM char* kRecycleStr = D_STR_RECYCLE
-
- -

"Recycle"

- -
-
- -

◆ kRepeatStr

- -
-
- - - - -
const PROGMEM char* kRepeatStr = D_STR_REPEAT
-
- -

"Repeat"

- -
-
- -

◆ kRightMaxStr

- -
-
- - - - -
const PROGMEM char* kRightMaxStr = D_STR_RIGHTMAX_NOSPACE
-
- -

"RightMax"

- -
-
- -

◆ kRightStr

- -
-
- - - - -
const PROGMEM char* kRightStr = D_STR_RIGHT
-
- -

"Right"

- -
-
- -

◆ kRoomStr

- -
-
- - - - -
const PROGMEM char* kRoomStr = D_STR_ROOM
-
- -

"Room"

- -
-
- -

◆ kSaveStr

- -
-
- - - - -
const PROGMEM char* kSaveStr = D_STR_SAVE
-
- -

"Save"

- -
-
- -

◆ kSecondsStr

- -
-
- - - - -
const PROGMEM char* kSecondsStr = D_STR_SECONDS
-
- -

"Seconds"

- -
-
- -

◆ kSecondStr

- -
-
- - - - -
const PROGMEM char* kSecondStr = D_STR_SECOND
-
- -

"Second"

- -
-
- -

◆ kSensorStr

- -
-
- - - - -
const PROGMEM char* kSensorStr = D_STR_SENSOR
-
- -

"Sensor"

- -
-
- -

◆ kSensorTempStr

- -
-
- - - - -
const PROGMEM char* kSensorTempStr = D_STR_SENSORTEMP
-
- -

"Sensor Temp"

- -
-
- -

◆ kSetStr

- -
-
- - - - -
const PROGMEM char* kSetStr = D_STR_SET
-
- -

"Set"

- -
-
- -

◆ kSilentStr

- -
-
- - - - -
const PROGMEM char* kSilentStr = D_STR_SILENT
-
- -

"Silent"

- -
-
- -

◆ kSleepStr

- -
-
- - - - -
const PROGMEM char* kSleepStr = D_STR_SLEEP
-
- -

"Sleep"

- -
-
- -

◆ kSleepTimerStr

- -
-
- - - - -
const PROGMEM char* kSleepTimerStr = D_STR_SLEEP_TIMER
-
- -

"Sleep Timer"

- -
-
- -

◆ kSlowStr

- -
-
- - - - -
const PROGMEM char* kSlowStr = D_STR_SLOW
-
- -

"Slow"

- -
-
- -

◆ kSpaceLBraceStr

- -
-
- - - - -
const PROGMEM char* kSpaceLBraceStr = D_STR_SPACELBRACE
-
- -

" ("

- -
-
- -

◆ kSpecialStr

- -
-
- - - - -
const PROGMEM char* kSpecialStr = D_STR_SPECIAL
-
- -

"Special"

- -
-
- -

◆ kStartStr

- -
-
- - - - -
const PROGMEM char* kStartStr = D_STR_START
-
- -

"Start"

- -
-
- -

◆ kStepStr

- -
-
- - - - -
const PROGMEM char* kStepStr = D_STR_STEP
-
- -

"Step"

- -
-
- -

◆ kStopStr

- -
-
- - - - -
const PROGMEM char* kStopStr = D_STR_STOP
-
- -

"Stop"

- -
-
- -

◆ kSuperStr

- -
-
- - - - -
const PROGMEM char* kSuperStr = D_STR_SUPER
-
- -

"Super"

- -
-
- -

◆ kSwingHStr

- -
-
- - - - -
const PROGMEM char* kSwingHStr = D_STR_SWINGH
-
- -

"SwingH"

- -
-
- -

◆ kSwingStr

- -
-
- - - - -
const PROGMEM char* kSwingStr = D_STR_SWING
-
- -

"Swing"

- -
-
- -

◆ kSwingVModeStr

- -
-
- - - - -
const PROGMEM char* kSwingVModeStr = D_STR_SWINGVMODE
-
- -

"Swing(V) Mode"

- -
-
- -

◆ kSwingVStr

- -
-
- - - - -
const PROGMEM char* kSwingVStr = D_STR_SWINGV
-
- -

"SwingV"

- -
-
- -

◆ kSwingVToggleStr

- -
-
- - - - -
const PROGMEM char* kSwingVToggleStr = D_STR_SWINGVTOGGLE
-
- -

"Swing(V) Toggle"

- -
-
- -

◆ kTempDownStr

- -
-
- - - - -
const PROGMEM char* kTempDownStr = D_STR_TEMPDOWN
-
- -

"Temp Down"

- -
-
- -

◆ kTempStr

- -
-
- - - - -
const PROGMEM char* kTempStr = D_STR_TEMP
-
- -

"Temp"

- -
-
- -

◆ kTempUpStr

- -
-
- - - - -
const PROGMEM char* kTempUpStr = D_STR_TEMPUP
-
- -

"Temp Up"

- -
-
- -

◆ kThreeLetterDayOfWeekStr

- -
-
- - - - -
const PROGMEM char* kThreeLetterDayOfWeekStr = D_STR_THREELETTERDAYS
-
- -

"SunMonTueWedThuFriSat"

- -
-
- -

◆ kTimerStr

- -
-
- - - - -
const PROGMEM char* kTimerStr = D_STR_TIMER
-
- -

"Timer"

- -
-
- -

◆ kTimeSep

- -
-
- - - - -
char kTimeSep = D_CHR_TIME_SEP
-
- -

':'

- -
-
- -

◆ kToggleStr

- -
-
- - - - -
const PROGMEM char* kToggleStr = D_STR_TOGGLE
-
- -

"Toggle"

- -
-
- -

◆ kTopStr

- -
-
- - - - -
const PROGMEM char* kTopStr = D_STR_TOP
-
- -

"Top"

- -
-
- -

◆ kTrueStr

- -
-
- - - - -
const PROGMEM char* kTrueStr = D_STR_TRUE
-
- -

"True"

- -
-
- -

◆ kTurboStr

- -
-
- - - - -
const PROGMEM char* kTurboStr = D_STR_TURBO
-
- -

"Turbo"

- -
-
- -

◆ kTurboToggleStr

- -
-
- - - - -
const PROGMEM char* kTurboToggleStr = D_STR_TURBOTOGGLE
-
- -

"Turbo Toggle"

- -
-
- -

◆ kTypeStr

- -
-
- - - - -
const PROGMEM char* kTypeStr = D_STR_TYPE
-
- -

"Type"

- -
-
- -

◆ kUnknownStr

- -
-
- - - - -
const PROGMEM char* kUnknownStr = D_STR_UNKNOWN
-
- -

"Unknown"

- -
-
- -

◆ kUpperStr

- -
-
- - - - -
const PROGMEM char* kUpperStr = D_STR_UPPER
-
- -

"Upper"

- -
-
- -

◆ kUpStr

- -
-
- - - - -
const PROGMEM char* kUpStr = D_STR_UP
-
- -

"Up"

- -
-
- -

◆ kWallStr

- -
-
- - - - -
const PROGMEM char* kWallStr = D_STR_WALL
-
- -

"Wall"

- -
-
- -

◆ kWeeklyTimerStr

- -
-
- - - - -
const PROGMEM char* kWeeklyTimerStr = D_STR_WEEKLYTIMER
-
- -

"WeeklyTimer"

- -
-
- -

◆ kWideStr

- -
-
- - - - -
const PROGMEM char* kWideStr = D_STR_WIDE
-
- -

"Wide"

- -
-
- -

◆ kWifiStr

- -
-
- - - - -
const PROGMEM char* kWifiStr = D_STR_WIFI
-
- -

"Wifi"

- -
-
- -

◆ kXFanStr

- -
-
- - - - -
const PROGMEM char* kXFanStr = D_STR_XFAN
-
- -

"XFan"

- -
-
- -

◆ kYesStr

- -
-
- - - - -
const PROGMEM char* kYesStr = D_STR_YES
-
- -

"Yes"

- -
-
- -

◆ kZoneFollowStr

- -
-
- - - - -
const PROGMEM char* kZoneFollowStr = D_STR_ZONEFOLLOW
-
- -

"Zone Follow"

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h.html deleted file mode 100644 index 45a78fbfa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h.html +++ /dev/null @@ -1,2959 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtext.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRtext.h File Reference
-
-
- -

Go to the source code of this file.

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

-Variables

char kTimeSep
 ':' More...
 
const char * k10CHeatStr
 "10C Heat" More...
 
const char * k3DStr
 "3D" More...
 
const char * k6thSenseStr
 "6th Sense" More...
 
const char * k8CHeatStr
 "8C Heat" More...
 
const char * kAirFlowStr
 "Air Flow" More...
 
const char * kAllProtocolNamesStr
 New protocol strings should be added just above this line. More...
 
const char * kAutomaticStr
 "Automatic" More...
 
const char * kAutoStr
 "Auto" More...
 
const char * kBeepStr
 "Beep" More...
 
const char * kBitsStr
 "Bits" More...
 
const char * kBottomStr
 "Bottom" More...
 
const char * kBreezeStr
 "Breeze" More...
 
const char * kButtonStr
 "Button" More...
 
const char * kCancelStr
 "Cancel" More...
 
const char * kCeilingStr
 "Ceiling" More...
 
const char * kCelsiusFahrenheitStr
 "Celsius/Fahrenheit" More...
 
const char * kCelsiusStr
 "Celsius" More...
 
const char * kCentreStr
 "Centre" More...
 
const char * kChangeStr
 "Change" More...
 
const char * kCirculateStr
 "Circulate" More...
 
const char * kCleanStr
 "Clean" More...
 
const char * kClockStr
 "Clock" More...
 
const char * kCodeStr
 "Code" More...
 
const char * kColonSpaceStr
 ": " More...
 
const char * kComfortStr
 "Comfort" More...
 
const char * kCommandStr
 "Command" More...
 
const char * kCommaSpaceStr
 ", " More...
 
const char * kCoolStr
 "Cool" More...
 
const char * kDaysStr
 "Days" More...
 
const char * kDayStr
 "Day" More...
 
const char * kDisplayTempStr
 "Display Temp" More...
 
const char * kDownStr
 "Down" More...
 
const char * kDryStr
 "Dry" More...
 
const char * kEconoStr
 "Econo" More...
 
const char * kEconoToggleStr
 "Econo Toggle" More...
 
const char * kEyeAutoStr
 "Eye Auto" More...
 
const char * kEyeStr
 "Eye" More...
 
const char * kFalseStr
 "False" More...
 
const char * kFanOnlyStr
 "fan_only" More...
 
const char * kFanStr
 "Fan" More...
 
const char * kFastStr
 "Fast" More...
 
const char * kFilterStr
 "Filter" More...
 
const char * kFixedStr
 "Fixed" More...
 
const char * kFollowStr
 "Follow" More...
 
const char * kFreshStr
 "Fresh" More...
 
const char * kHealthStr
 "Health" More...
 
const char * kHeatStr
 "Heat" More...
 
const char * kHighestStr
 "Highest" More...
 
const char * kHighStr
 "High" More...
 
const char * kHiStr
 "Hi" More...
 
const char * kHoldStr
 "Hold" More...
 
const char * kHoursStr
 "Hours" More...
 
const char * kHourStr
 "Hour" More...
 
const char * kHumidStr
 "Humid" More...
 
const char * kIdStr
 "Id" / Device Identifier More...
 
const char * kIFeelStr
 "IFeel" More...
 
const char * kInsideStr
 "Inside" More...
 
const char * kIonStr
 "Ion" More...
 
const char * kLastStr
 "Last" More...
 
const char * kLeftMaxStr
 "LeftMax" More...
 
const char * kLeftStr
 "Left" More...
 
const char * kLightStr
 "Light" More...
 
const char * kLightToggleStr
 "Light Toggle" More...
 
const char * kLoStr
 "Lo" More...
 
const char * kLoudStr
 "Loud" More...
 
const char * kLowerStr
 "Lower" More...
 
const char * kLowestStr
 "Lowest" More...
 
const char * kLowStr
 "Low" More...
 
const char * kManualStr
 "Manual" More...
 
const char * kMaximumStr
 "Maximum" More...
 
const char * kMaxLeftStr
 "Max Left" More...
 
const char * kMaxRightStr
 "Max Right" More...
 
const char * kMaxStr
 "Max" More...
 
const char * kMediumStr
 "Medium" More...
 
const char * kMedStr
 "Med" More...
 
const char * kMiddleStr
 "Middle" More...
 
const char * kMidStr
 "Mid" More...
 
const char * kMinimumStr
 "Minimum" More...
 
const char * kMinStr
 "Min" More...
 
const char * kMinutesStr
 "Minutes" More...
 
const char * kMinuteStr
 "Minute" More...
 
const char * kModelStr
 "Model" More...
 
const char * kModeStr
 "Mode" More...
 
const char * kMouldStr
 "Mould" More...
 
const char * kMoveStr
 "Move" More...
 
const char * kNAStr
 "N/A" More...
 
const char * kNightStr
 "Night" More...
 
const char * kNoStr
 "No" More...
 
const char * kNowStr
 "Now" More...
 
const char * kOffStr
 "Off" More...
 
const char * kOffTimerStr
 "OffTimer" More...
 
const char * kOnStr
 "On" More...
 
const char * kOnTimerStr
 "OnTimer" More...
 
const char * kOutsideQuietStr
 "Outside Quiet" More...
 
const char * kOutsideStr
 "Outside" More...
 
const char * kPowerButtonStr
 "Power Button" More...
 
const char * kPowerfulStr
 "Powerful" More...
 
const char * kPowerStr
 "Power" More...
 
const char * kPowerToggleStr
 "Power Toggle" More...
 
const char * kPreviousPowerStr
 "Previous Power" More...
 
const char * kProtocolStr
 "Protocol" More...
 
const char * kPurifyStr
 "Purify" More...
 
const char * kQuietStr
 "Quiet" More...
 
const char * kRecycleStr
 "Recycle" More...
 
const char * kRepeatStr
 "Repeat" More...
 
const char * kRightMaxStr
 "RightMax" More...
 
const char * kRightStr
 "Right" More...
 
const char * kRoomStr
 "Room" More...
 
const char * kSaveStr
 "Save" More...
 
const char * kSecondsStr
 "Seconds" More...
 
const char * kSecondStr
 "Second" More...
 
const char * kSensorStr
 "Sensor" More...
 
const char * kSensorTempStr
 "Sensor Temp" More...
 
const char * kSetStr
 "Set" More...
 
const char * kSilentStr
 "Silent" More...
 
const char * kSleepStr
 "Sleep" More...
 
const char * kSleepTimerStr
 "Sleep Timer" More...
 
const char * kSlowStr
 "Slow" More...
 
const char * kSpaceLBraceStr
 " (" More...
 
const char * kSpecialStr
 "Special" More...
 
const char * kStartStr
 "Start" More...
 
const char * kStepStr
 "Step" More...
 
const char * kStopStr
 "Stop" More...
 
const char * kSuperStr
 "Super" More...
 
const char * kSwingHStr
 "SwingH" More...
 
const char * kSwingStr
 "Swing" More...
 
const char * kSwingVModeStr
 "Swing(V) Mode" More...
 
const char * kSwingVStr
 "SwingV" More...
 
const char * kSwingVToggleStr
 "Swing(V) Toggle" More...
 
const char * kTempDownStr
 "Temp Down" More...
 
const char * kTempStr
 "Temp" More...
 
const char * kTempUpStr
 "Temp Up" More...
 
const char * kThreeLetterDayOfWeekStr
 "SunMonTueWedThuFriSat" More...
 
const char * kTimerStr
 "Timer" More...
 
const char * kToggleStr
 "Toggle" More...
 
const char * kTopStr
 "Top" More...
 
const char * kTrueStr
 "True" More...
 
const char * kTurboStr
 "Turbo" More...
 
const char * kTurboToggleStr
 "Turbo Toggle" More...
 
const char * kTypeStr
 "Type" More...
 
const char * kUnknownStr
 "Unknown" More...
 
const char * kUpperStr
 "Upper" More...
 
const char * kUpStr
 "Up" More...
 
const char * kWallStr
 "Wall" More...
 
const char * kWeeklyTimerStr
 "WeeklyTimer" More...
 
const char * kWideStr
 "Wide" More...
 
const char * kWifiStr
 "Wifi" More...
 
const char * kXFanStr
 "XFan" More...
 
const char * kYesStr
 "Yes" More...
 
const char * kZoneFollowStr
 "Zone Follow" More...
 
-

Variable Documentation

- -

◆ k10CHeatStr

- -
-
- - - - -
const char* k10CHeatStr
-
- -

"10C Heat"

- -
-
- -

◆ k3DStr

- -
-
- - - - -
const char* k3DStr
-
- -

"3D"

- -
-
- -

◆ k6thSenseStr

- -
-
- - - - -
const char* k6thSenseStr
-
- -

"6th Sense"

- -
-
- -

◆ k8CHeatStr

- -
-
- - - - -
const char* k8CHeatStr
-
- -

"8C Heat"

- -
-
- -

◆ kAirFlowStr

- -
-
- - - - -
const char* kAirFlowStr
-
- -

"Air Flow"

- -
-
- -

◆ kAllProtocolNamesStr

- -
-
- - - - -
const char* kAllProtocolNamesStr
-
- -

New protocol strings should be added just above this line.

-

This string requires double null termination.

- -
-
- -

◆ kAutomaticStr

- -
-
- - - - -
const char* kAutomaticStr
-
- -

"Automatic"

- -
-
- -

◆ kAutoStr

- -
-
- - - - -
const char* kAutoStr
-
- -

"Auto"

- -
-
- -

◆ kBeepStr

- -
-
- - - - -
const char* kBeepStr
-
- -

"Beep"

- -
-
- -

◆ kBitsStr

- -
-
- - - - -
const char* kBitsStr
-
- -

"Bits"

- -
-
- -

◆ kBottomStr

- -
-
- - - - -
const char* kBottomStr
-
- -

"Bottom"

- -
-
- -

◆ kBreezeStr

- -
-
- - - - -
const char* kBreezeStr
-
- -

"Breeze"

- -
-
- -

◆ kButtonStr

- -
-
- - - - -
const char* kButtonStr
-
- -

"Button"

- -
-
- -

◆ kCancelStr

- -
-
- - - - -
const char* kCancelStr
-
- -

"Cancel"

- -
-
- -

◆ kCeilingStr

- -
-
- - - - -
const char* kCeilingStr
-
- -

"Ceiling"

- -
-
- -

◆ kCelsiusFahrenheitStr

- -
-
- - - - -
const char* kCelsiusFahrenheitStr
-
- -

"Celsius/Fahrenheit"

- -
-
- -

◆ kCelsiusStr

- -
-
- - - - -
const char* kCelsiusStr
-
- -

"Celsius"

- -
-
- -

◆ kCentreStr

- -
-
- - - - -
const char* kCentreStr
-
- -

"Centre"

- -
-
- -

◆ kChangeStr

- -
-
- - - - -
const char* kChangeStr
-
- -

"Change"

- -
-
- -

◆ kCirculateStr

- -
-
- - - - -
const char* kCirculateStr
-
- -

"Circulate"

- -
-
- -

◆ kCleanStr

- -
-
- - - - -
const char* kCleanStr
-
- -

"Clean"

- -
-
- -

◆ kClockStr

- -
-
- - - - -
const char* kClockStr
-
- -

"Clock"

- -
-
- -

◆ kCodeStr

- -
-
- - - - -
const char* kCodeStr
-
- -

"Code"

- -
-
- -

◆ kColonSpaceStr

- -
-
- - - - -
const char* kColonSpaceStr
-
- -

": "

- -
-
- -

◆ kComfortStr

- -
-
- - - - -
const char* kComfortStr
-
- -

"Comfort"

- -
-
- -

◆ kCommandStr

- -
-
- - - - -
const char* kCommandStr
-
- -

"Command"

- -
-
- -

◆ kCommaSpaceStr

- -
-
- - - - -
const char* kCommaSpaceStr
-
- -

", "

- -
-
- -

◆ kCoolStr

- -
-
- - - - -
const char* kCoolStr
-
- -

"Cool"

- -
-
- -

◆ kDaysStr

- -
-
- - - - -
const char* kDaysStr
-
- -

"Days"

- -
-
- -

◆ kDayStr

- -
-
- - - - -
const char* kDayStr
-
- -

"Day"

- -
-
- -

◆ kDisplayTempStr

- -
-
- - - - -
const char* kDisplayTempStr
-
- -

"Display Temp"

- -
-
- -

◆ kDownStr

- -
-
- - - - -
const char* kDownStr
-
- -

"Down"

- -
-
- -

◆ kDryStr

- -
-
- - - - -
const char* kDryStr
-
- -

"Dry"

- -
-
- -

◆ kEconoStr

- -
-
- - - - -
const char* kEconoStr
-
- -

"Econo"

- -
-
- -

◆ kEconoToggleStr

- -
-
- - - - -
const char* kEconoToggleStr
-
- -

"Econo Toggle"

- -
-
- -

◆ kEyeAutoStr

- -
-
- - - - -
const char* kEyeAutoStr
-
- -

"Eye Auto"

- -
-
- -

◆ kEyeStr

- -
-
- - - - -
const char* kEyeStr
-
- -

"Eye"

- -
-
- -

◆ kFalseStr

- -
-
- - - - -
const char* kFalseStr
-
- -

"False"

- -
-
- -

◆ kFanOnlyStr

- -
-
- - - - -
const char* kFanOnlyStr
-
- -

"fan_only"

- -
-
- -

◆ kFanStr

- -
-
- - - - -
const char* kFanStr
-
- -

"Fan"

- -
-
- -

◆ kFastStr

- -
-
- - - - -
const char* kFastStr
-
- -

"Fast"

- -
-
- -

◆ kFilterStr

- -
-
- - - - -
const char* kFilterStr
-
- -

"Filter"

- -
-
- -

◆ kFixedStr

- -
-
- - - - -
const char* kFixedStr
-
- -

"Fixed"

- -
-
- -

◆ kFollowStr

- -
-
- - - - -
const char* kFollowStr
-
- -

"Follow"

- -
-
- -

◆ kFreshStr

- -
-
- - - - -
const char* kFreshStr
-
- -

"Fresh"

- -
-
- -

◆ kHealthStr

- -
-
- - - - -
const char* kHealthStr
-
- -

"Health"

- -
-
- -

◆ kHeatStr

- -
-
- - - - -
const char* kHeatStr
-
- -

"Heat"

- -
-
- -

◆ kHighestStr

- -
-
- - - - -
const char* kHighestStr
-
- -

"Highest"

- -
-
- -

◆ kHighStr

- -
-
- - - - -
const char* kHighStr
-
- -

"High"

- -
-
- -

◆ kHiStr

- -
-
- - - - -
const char* kHiStr
-
- -

"Hi"

- -
-
- -

◆ kHoldStr

- -
-
- - - - -
const char* kHoldStr
-
- -

"Hold"

- -
-
- -

◆ kHoursStr

- -
-
- - - - -
const char* kHoursStr
-
- -

"Hours"

- -
-
- -

◆ kHourStr

- -
-
- - - - -
const char* kHourStr
-
- -

"Hour"

- -
-
- -

◆ kHumidStr

- -
-
- - - - -
const char* kHumidStr
-
- -

"Humid"

- -
-
- -

◆ kIdStr

- -
-
- - - - -
const char* kIdStr
-
- -

"Id" / Device Identifier

- -
-
- -

◆ kIFeelStr

- -
-
- - - - -
const char* kIFeelStr
-
- -

"IFeel"

- -
-
- -

◆ kInsideStr

- -
-
- - - - -
const char* kInsideStr
-
- -

"Inside"

- -
-
- -

◆ kIonStr

- -
-
- - - - -
const char* kIonStr
-
- -

"Ion"

- -
-
- -

◆ kLastStr

- -
-
- - - - -
const char* kLastStr
-
- -

"Last"

- -
-
- -

◆ kLeftMaxStr

- -
-
- - - - -
const char* kLeftMaxStr
-
- -

"LeftMax"

- -
-
- -

◆ kLeftStr

- -
-
- - - - -
const char* kLeftStr
-
- -

"Left"

- -
-
- -

◆ kLightStr

- -
-
- - - - -
const char* kLightStr
-
- -

"Light"

- -
-
- -

◆ kLightToggleStr

- -
-
- - - - -
const char* kLightToggleStr
-
- -

"Light Toggle"

- -
-
- -

◆ kLoStr

- -
-
- - - - -
const char* kLoStr
-
- -

"Lo"

- -
-
- -

◆ kLoudStr

- -
-
- - - - -
const char* kLoudStr
-
- -

"Loud"

- -
-
- -

◆ kLowerStr

- -
-
- - - - -
const char* kLowerStr
-
- -

"Lower"

- -
-
- -

◆ kLowestStr

- -
-
- - - - -
const char* kLowestStr
-
- -

"Lowest"

- -
-
- -

◆ kLowStr

- -
-
- - - - -
const char* kLowStr
-
- -

"Low"

- -
-
- -

◆ kManualStr

- -
-
- - - - -
const char* kManualStr
-
- -

"Manual"

- -
-
- -

◆ kMaximumStr

- -
-
- - - - -
const char* kMaximumStr
-
- -

"Maximum"

- -
-
- -

◆ kMaxLeftStr

- -
-
- - - - -
const char* kMaxLeftStr
-
- -

"Max Left"

- -
-
- -

◆ kMaxRightStr

- -
-
- - - - -
const char* kMaxRightStr
-
- -

"Max Right"

- -
-
- -

◆ kMaxStr

- -
-
- - - - -
const char* kMaxStr
-
- -

"Max"

- -
-
- -

◆ kMediumStr

- -
-
- - - - -
const char* kMediumStr
-
- -

"Medium"

- -
-
- -

◆ kMedStr

- -
-
- - - - -
const char* kMedStr
-
- -

"Med"

- -
-
- -

◆ kMiddleStr

- -
-
- - - - -
const char* kMiddleStr
-
- -

"Middle"

- -
-
- -

◆ kMidStr

- -
-
- - - - -
const char* kMidStr
-
- -

"Mid"

- -
-
- -

◆ kMinimumStr

- -
-
- - - - -
const char* kMinimumStr
-
- -

"Minimum"

- -
-
- -

◆ kMinStr

- -
-
- - - - -
const char* kMinStr
-
- -

"Min"

- -
-
- -

◆ kMinutesStr

- -
-
- - - - -
const char* kMinutesStr
-
- -

"Minutes"

- -
-
- -

◆ kMinuteStr

- -
-
- - - - -
const char* kMinuteStr
-
- -

"Minute"

- -
-
- -

◆ kModelStr

- -
-
- - - - -
const char* kModelStr
-
- -

"Model"

- -
-
- -

◆ kModeStr

- -
-
- - - - -
const char* kModeStr
-
- -

"Mode"

- -
-
- -

◆ kMouldStr

- -
-
- - - - -
const char* kMouldStr
-
- -

"Mould"

- -
-
- -

◆ kMoveStr

- -
-
- - - - -
const char* kMoveStr
-
- -

"Move"

- -
-
- -

◆ kNAStr

- -
-
- - - - -
const char* kNAStr
-
- -

"N/A"

- -
-
- -

◆ kNightStr

- -
-
- - - - -
const char* kNightStr
-
- -

"Night"

- -
-
- -

◆ kNoStr

- -
-
- - - - -
const char* kNoStr
-
- -

"No"

- -
-
- -

◆ kNowStr

- -
-
- - - - -
const char* kNowStr
-
- -

"Now"

- -
-
- -

◆ kOffStr

- -
-
- - - - -
const char* kOffStr
-
- -

"Off"

- -
-
- -

◆ kOffTimerStr

- -
-
- - - - -
const char* kOffTimerStr
-
- -

"OffTimer"

- -
-
- -

◆ kOnStr

- -
-
- - - - -
const char* kOnStr
-
- -

"On"

- -
-
- -

◆ kOnTimerStr

- -
-
- - - - -
const char* kOnTimerStr
-
- -

"OnTimer"

- -
-
- -

◆ kOutsideQuietStr

- -
-
- - - - -
const char* kOutsideQuietStr
-
- -

"Outside Quiet"

- -
-
- -

◆ kOutsideStr

- -
-
- - - - -
const char* kOutsideStr
-
- -

"Outside"

- -
-
- -

◆ kPowerButtonStr

- -
-
- - - - -
const char* kPowerButtonStr
-
- -

"Power Button"

- -
-
- -

◆ kPowerfulStr

- -
-
- - - - -
const char* kPowerfulStr
-
- -

"Powerful"

- -
-
- -

◆ kPowerStr

- -
-
- - - - -
const char* kPowerStr
-
- -

"Power"

- -
-
- -

◆ kPowerToggleStr

- -
-
- - - - -
const char* kPowerToggleStr
-
- -

"Power Toggle"

- -
-
- -

◆ kPreviousPowerStr

- -
-
- - - - -
const char* kPreviousPowerStr
-
- -

"Previous Power"

- -
-
- -

◆ kProtocolStr

- -
-
- - - - -
const char* kProtocolStr
-
- -

"Protocol"

- -
-
- -

◆ kPurifyStr

- -
-
- - - - -
const char* kPurifyStr
-
- -

"Purify"

- -
-
- -

◆ kQuietStr

- -
-
- - - - -
const char* kQuietStr
-
- -

"Quiet"

- -
-
- -

◆ kRecycleStr

- -
-
- - - - -
const char* kRecycleStr
-
- -

"Recycle"

- -
-
- -

◆ kRepeatStr

- -
-
- - - - -
const char* kRepeatStr
-
- -

"Repeat"

- -
-
- -

◆ kRightMaxStr

- -
-
- - - - -
const char* kRightMaxStr
-
- -

"RightMax"

- -
-
- -

◆ kRightStr

- -
-
- - - - -
const char* kRightStr
-
- -

"Right"

- -
-
- -

◆ kRoomStr

- -
-
- - - - -
const char* kRoomStr
-
- -

"Room"

- -
-
- -

◆ kSaveStr

- -
-
- - - - -
const char* kSaveStr
-
- -

"Save"

- -
-
- -

◆ kSecondsStr

- -
-
- - - - -
const char* kSecondsStr
-
- -

"Seconds"

- -
-
- -

◆ kSecondStr

- -
-
- - - - -
const char* kSecondStr
-
- -

"Second"

- -
-
- -

◆ kSensorStr

- -
-
- - - - -
const char* kSensorStr
-
- -

"Sensor"

- -
-
- -

◆ kSensorTempStr

- -
-
- - - - -
const char* kSensorTempStr
-
- -

"Sensor Temp"

- -
-
- -

◆ kSetStr

- -
-
- - - - -
const char* kSetStr
-
- -

"Set"

- -
-
- -

◆ kSilentStr

- -
-
- - - - -
const char* kSilentStr
-
- -

"Silent"

- -
-
- -

◆ kSleepStr

- -
-
- - - - -
const char* kSleepStr
-
- -

"Sleep"

- -
-
- -

◆ kSleepTimerStr

- -
-
- - - - -
const char* kSleepTimerStr
-
- -

"Sleep Timer"

- -
-
- -

◆ kSlowStr

- -
-
- - - - -
const char* kSlowStr
-
- -

"Slow"

- -
-
- -

◆ kSpaceLBraceStr

- -
-
- - - - -
const char* kSpaceLBraceStr
-
- -

" ("

- -
-
- -

◆ kSpecialStr

- -
-
- - - - -
const char* kSpecialStr
-
- -

"Special"

- -
-
- -

◆ kStartStr

- -
-
- - - - -
const char* kStartStr
-
- -

"Start"

- -
-
- -

◆ kStepStr

- -
-
- - - - -
const char* kStepStr
-
- -

"Step"

- -
-
- -

◆ kStopStr

- -
-
- - - - -
const char* kStopStr
-
- -

"Stop"

- -
-
- -

◆ kSuperStr

- -
-
- - - - -
const char* kSuperStr
-
- -

"Super"

- -
-
- -

◆ kSwingHStr

- -
-
- - - - -
const char* kSwingHStr
-
- -

"SwingH"

- -
-
- -

◆ kSwingStr

- -
-
- - - - -
const char* kSwingStr
-
- -

"Swing"

- -
-
- -

◆ kSwingVModeStr

- -
-
- - - - -
const char* kSwingVModeStr
-
- -

"Swing(V) Mode"

- -
-
- -

◆ kSwingVStr

- -
-
- - - - -
const char* kSwingVStr
-
- -

"SwingV"

- -
-
- -

◆ kSwingVToggleStr

- -
-
- - - - -
const char* kSwingVToggleStr
-
- -

"Swing(V) Toggle"

- -
-
- -

◆ kTempDownStr

- -
-
- - - - -
const char* kTempDownStr
-
- -

"Temp Down"

- -
-
- -

◆ kTempStr

- -
-
- - - - -
const char* kTempStr
-
- -

"Temp"

- -
-
- -

◆ kTempUpStr

- -
-
- - - - -
const char* kTempUpStr
-
- -

"Temp Up"

- -
-
- -

◆ kThreeLetterDayOfWeekStr

- -
-
- - - - -
const char* kThreeLetterDayOfWeekStr
-
- -

"SunMonTueWedThuFriSat"

- -
-
- -

◆ kTimerStr

- -
-
- - - - -
const char* kTimerStr
-
- -

"Timer"

- -
-
- -

◆ kTimeSep

- -
-
- - - - -
char kTimeSep
-
- -

':'

- -
-
- -

◆ kToggleStr

- -
-
- - - - -
const char* kToggleStr
-
- -

"Toggle"

- -
-
- -

◆ kTopStr

- -
-
- - - - -
const char* kTopStr
-
- -

"Top"

- -
-
- -

◆ kTrueStr

- -
-
- - - - -
const char* kTrueStr
-
- -

"True"

- -
-
- -

◆ kTurboStr

- -
-
- - - - -
const char* kTurboStr
-
- -

"Turbo"

- -
-
- -

◆ kTurboToggleStr

- -
-
- - - - -
const char* kTurboToggleStr
-
- -

"Turbo Toggle"

- -
-
- -

◆ kTypeStr

- -
-
- - - - -
const char* kTypeStr
-
- -

"Type"

- -
-
- -

◆ kUnknownStr

- -
-
- - - - -
const char* kUnknownStr
-
- -

"Unknown"

- -
-
- -

◆ kUpperStr

- -
-
- - - - -
const char* kUpperStr
-
- -

"Upper"

- -
-
- -

◆ kUpStr

- -
-
- - - - -
const char* kUpStr
-
- -

"Up"

- -
-
- -

◆ kWallStr

- -
-
- - - - -
const char* kWallStr
-
- -

"Wall"

- -
-
- -

◆ kWeeklyTimerStr

- -
-
- - - - -
const char* kWeeklyTimerStr
-
- -

"WeeklyTimer"

- -
-
- -

◆ kWideStr

- -
-
- - - - -
const char* kWideStr
-
- -

"Wide"

- -
-
- -

◆ kWifiStr

- -
-
- - - - -
const char* kWifiStr
-
- -

"Wifi"

- -
-
- -

◆ kXFanStr

- -
-
- - - - -
const char* kXFanStr
-
- -

"XFan"

- -
-
- -

◆ kYesStr

- -
-
- - - - -
const char* kYesStr
-
- -

"Yes"

- -
-
- -

◆ kZoneFollowStr

- -
-
- - - - -
const char* kZoneFollowStr
-
- -

"Zone Follow"

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h_source.html deleted file mode 100644 index b22353b33..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtext_8h_source.html +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtext.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRtext.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019-2021 - David Conran (@crankyoldgit)
-
2 // This header file is to be included in files **other than** 'IRtext.cpp'.
-
3 //
-
4 // WARNING: Do not edit this file! This file is automatically generated by
-
5 // '../tools/generate_irtext_h.sh'.
-
6 
-
7 #ifndef IRTEXT_H_
-
8 #define IRTEXT_H_
-
9 
-
10 #include "i18n.h"
-
11 
-
12 // Constant text to be shared across all object files.
-
13 // This means there is only one copy of the character/string/text etc.
-
14 
-
15 extern char kTimeSep;
-
16 extern const char* k10CHeatStr;
-
17 extern const char* k3DStr;
-
18 extern const char* k6thSenseStr;
-
19 extern const char* k8CHeatStr;
-
20 extern const char* kAirFlowStr;
-
21 extern const char *kAllProtocolNamesStr;
-
22 extern const char* kAutomaticStr;
-
23 extern const char* kAutoStr;
-
24 extern const char* kBeepStr;
-
25 extern const char* kBitsStr;
-
26 extern const char* kBottomStr;
-
27 extern const char* kBreezeStr;
-
28 extern const char* kButtonStr;
-
29 extern const char* kCancelStr;
-
30 extern const char* kCeilingStr;
-
31 extern const char* kCelsiusFahrenheitStr;
-
32 extern const char* kCelsiusStr;
-
33 extern const char* kCentreStr;
-
34 extern const char* kChangeStr;
-
35 extern const char* kCirculateStr;
-
36 extern const char* kCleanStr;
-
37 extern const char* kClockStr;
-
38 extern const char* kCodeStr;
-
39 extern const char* kColonSpaceStr;
-
40 extern const char* kComfortStr;
-
41 extern const char* kCommandStr;
-
42 extern const char* kCommaSpaceStr;
-
43 extern const char* kCoolStr;
-
44 extern const char* kDaysStr;
-
45 extern const char* kDayStr;
-
46 extern const char* kDisplayTempStr;
-
47 extern const char* kDownStr;
-
48 extern const char* kDryStr;
-
49 extern const char* kEconoStr;
-
50 extern const char* kEconoToggleStr;
-
51 extern const char* kEyeAutoStr;
-
52 extern const char* kEyeStr;
-
53 extern const char* kFalseStr;
-
54 extern const char* kFanOnlyStr;
-
55 extern const char* kFanStr;
-
56 extern const char* kFastStr;
-
57 extern const char* kFilterStr;
-
58 extern const char* kFixedStr;
-
59 extern const char* kFollowStr;
-
60 extern const char* kFreshStr;
-
61 extern const char* kHealthStr;
-
62 extern const char* kHeatStr;
-
63 extern const char* kHighestStr;
-
64 extern const char* kHighStr;
-
65 extern const char* kHiStr;
-
66 extern const char* kHoldStr;
-
67 extern const char* kHoursStr;
-
68 extern const char* kHourStr;
-
69 extern const char* kHumidStr;
-
70 extern const char* kIdStr;
-
71 extern const char* kIFeelStr;
-
72 extern const char* kInsideStr;
-
73 extern const char* kIonStr;
-
74 extern const char* kLastStr;
-
75 extern const char* kLeftMaxStr;
-
76 extern const char* kLeftStr;
-
77 extern const char* kLightStr;
-
78 extern const char* kLightToggleStr;
-
79 extern const char* kLoStr;
-
80 extern const char* kLoudStr;
-
81 extern const char* kLowerStr;
-
82 extern const char* kLowestStr;
-
83 extern const char* kLowStr;
-
84 extern const char* kManualStr;
-
85 extern const char* kMaximumStr;
-
86 extern const char* kMaxLeftStr;
-
87 extern const char* kMaxRightStr;
-
88 extern const char* kMaxStr;
-
89 extern const char* kMediumStr;
-
90 extern const char* kMedStr;
-
91 extern const char* kMiddleStr;
-
92 extern const char* kMidStr;
-
93 extern const char* kMinimumStr;
-
94 extern const char* kMinStr;
-
95 extern const char* kMinutesStr;
-
96 extern const char* kMinuteStr;
-
97 extern const char* kModelStr;
-
98 extern const char* kModeStr;
-
99 extern const char* kMouldStr;
-
100 extern const char* kMoveStr;
-
101 extern const char* kNAStr;
-
102 extern const char* kNightStr;
-
103 extern const char* kNoStr;
-
104 extern const char* kNowStr;
-
105 extern const char* kOffStr;
-
106 extern const char* kOffTimerStr;
-
107 extern const char* kOnStr;
-
108 extern const char* kOnTimerStr;
-
109 extern const char* kOutsideQuietStr;
-
110 extern const char* kOutsideStr;
-
111 extern const char* kPowerButtonStr;
-
112 extern const char* kPowerfulStr;
-
113 extern const char* kPowerStr;
-
114 extern const char* kPowerToggleStr;
-
115 extern const char* kPreviousPowerStr;
-
116 extern const char* kProtocolStr;
-
117 extern const char* kPurifyStr;
-
118 extern const char* kQuietStr;
-
119 extern const char* kRecycleStr;
-
120 extern const char* kRepeatStr;
-
121 extern const char* kRightMaxStr;
-
122 extern const char* kRightStr;
-
123 extern const char* kRoomStr;
-
124 extern const char* kSaveStr;
-
125 extern const char* kSecondsStr;
-
126 extern const char* kSecondStr;
-
127 extern const char* kSensorStr;
-
128 extern const char* kSensorTempStr;
-
129 extern const char* kSetStr;
-
130 extern const char* kSilentStr;
-
131 extern const char* kSleepStr;
-
132 extern const char* kSleepTimerStr;
-
133 extern const char* kSlowStr;
-
134 extern const char* kSpaceLBraceStr;
-
135 extern const char* kSpecialStr;
-
136 extern const char* kStartStr;
-
137 extern const char* kStepStr;
-
138 extern const char* kStopStr;
-
139 extern const char* kSuperStr;
-
140 extern const char* kSwingHStr;
-
141 extern const char* kSwingStr;
-
142 extern const char* kSwingVModeStr;
-
143 extern const char* kSwingVStr;
-
144 extern const char* kSwingVToggleStr;
-
145 extern const char* kTempDownStr;
-
146 extern const char* kTempStr;
-
147 extern const char* kTempUpStr;
-
148 extern const char* kThreeLetterDayOfWeekStr;
-
149 extern const char* kTimerStr;
-
150 extern const char* kToggleStr;
-
151 extern const char* kTopStr;
-
152 extern const char* kTrueStr;
-
153 extern const char* kTurboStr;
-
154 extern const char* kTurboToggleStr;
-
155 extern const char* kTypeStr;
-
156 extern const char* kUnknownStr;
-
157 extern const char* kUpperStr;
-
158 extern const char* kUpStr;
-
159 extern const char* kWallStr;
-
160 extern const char* kWeeklyTimerStr;
-
161 extern const char* kWideStr;
-
162 extern const char* kWifiStr;
-
163 extern const char* kXFanStr;
-
164 extern const char* kYesStr;
-
165 extern const char* kZoneFollowStr;
-
166 
-
167 #endif // IRTEXT_H_
-
-
const char * kTrueStr
"True"
Definition: IRtext.cpp:177
-
const char * kHoldStr
"Hold"
Definition: IRtext.cpp:57
-
const char * kStopStr
"Stop"
Definition: IRtext.cpp:71
-
const char * kQuietStr
"Quiet"
Definition: IRtext.cpp:30
-
const char * kBitsStr
"Bits"
Definition: IRtext.cpp:182
-
const char * kPowerButtonStr
"Power Button"
Definition: IRtext.cpp:145
-
const char * kMediumStr
"Medium"
Definition: IRtext.cpp:118
-
const char * kStepStr
"Step"
Definition: IRtext.cpp:86
-
const char * k10CHeatStr
"10C Heat"
Definition: IRtext.cpp:60
-
const char * kIdStr
"Id" / Device Identifier
Definition: IRtext.cpp:101
-
const char * kSilentStr
"Silent"
Definition: IRtext.cpp:62
-
const char * kOnTimerStr
"OnTimer"
Definition: IRtext.cpp:42
-
const char * kLoStr
"Lo"
Definition: IRtext.cpp:126
-
const char * kSwingStr
"Swing"
Definition: IRtext.cpp:32
-
const char * kCodeStr
"Code"
Definition: IRtext.cpp:181
-
const char * kSecondsStr
"Seconds"
Definition: IRtext.cpp:171
-
const char * kSetStr
"Set"
Definition: IRtext.cpp:73
-
const char * kHiStr
"Hi"
Definition: IRtext.cpp:122
-
const char * kRepeatStr
"Repeat"
Definition: IRtext.cpp:180
-
const char * kCeilingStr
"Ceiling"
Definition: IRtext.cpp:95
-
const char * kPowerToggleStr
"Power Toggle"
Definition: IRtext.cpp:144
-
const char * kInsideStr
"Inside"
Definition: IRtext.cpp:88
-
const char * kTempDownStr
"Temp Down"
Definition: IRtext.cpp:69
-
const char * kMoveStr
"Move"
Definition: IRtext.cpp:72
-
const char * kColonSpaceStr
": "
Definition: IRtext.cpp:160
-
const char * kTurboToggleStr
"Turbo Toggle"
Definition: IRtext.cpp:154
-
const char * kWideStr
"Wide"
Definition: IRtext.cpp:134
-
const char * kRightMaxStr
"RightMax"
Definition: IRtext.cpp:129
-
const char * kDownStr
"Down"
Definition: IRtext.cpp:76
-
const char * kLightStr
"Light"
Definition: IRtext.cpp:28
-
const char * kCoolStr
"Cool"
Definition: IRtext.cpp:106
-
const char * kRightStr
"Right"
Definition: IRtext.cpp:130
-
const char * kMinuteStr
"Minute"
Definition: IRtext.cpp:168
-
const char * kMinutesStr
"Minutes"
Definition: IRtext.cpp:169
-
const char * kSleepStr
"Sleep"
Definition: IRtext.cpp:27
-
const char * kMinimumStr
"Minimum"
Definition: IRtext.cpp:116
-
const char * k3DStr
"3D"
Definition: IRtext.cpp:64
-
const char * kTempStr
"Temp"
Definition: IRtext.cpp:49
-
const char * kAutomaticStr
"Automatic"
Definition: IRtext.cpp:104
-
const char * kSecondStr
"Second"
Definition: IRtext.cpp:170
-
const char * kSwingVToggleStr
"Swing(V) Toggle"
Definition: ir_Midea.h:122
-
const char * k6thSenseStr
"6th Sense"
Definition: IRtext.cpp:98
-
const char * kFilterStr
"Filter"
Definition: IRtext.cpp:63
-
const char * kNightStr
"Night"
Definition: IRtext.cpp:61
-
const char * kSpaceLBraceStr
" ("
Definition: IRtext.cpp:158
-
const char * kSleepTimerStr
"Sleep Timer"
Definition: IRtext.cpp:150
-
const char * kSwingVModeStr
"Swing(V) Mode"
Definition: IRtext.cpp:151
-
const char * kCelsiusFahrenheitStr
"Celsius/Fahrenheit"
Definition: IRtext.cpp:66
-
const char * kTimerStr
"Timer"
Definition: IRtext.cpp:41
-
const char * kChangeStr
"Change"
Definition: IRtext.cpp:77
-
const char * kAllProtocolNamesStr
New protocol strings should be added just above this line.
Definition: IRtext.cpp:186
-
const char * kIFeelStr
"IFeel"
Definition: IRtext.cpp:50
-
const char * kSpecialStr
"Special"
Definition: IRtext.cpp:100
-
const char * kFalseStr
"False"
Definition: IRtext.cpp:178
-
const char * kMaxLeftStr
"Max Left"
Definition: IRtext.cpp:132
-
const char * kHealthStr
"Health"
Definition: IRtext.cpp:47
-
const char * kCommandStr
"Command"
Definition: IRtext.cpp:45
-
const char * kXFanStr
"XFan"
Definition: IRtext.cpp:46
-
const char * kPurifyStr
"Purify"
Definition: IRtext.cpp:40
-
const char * kHighStr
"High"
Definition: IRtext.cpp:121
-
const char * kTypeStr
"Type"
Definition: IRtext.cpp:99
-
const char * kCommaSpaceStr
", "
Definition: IRtext.cpp:159
-
const char * kFanStr
"Fan"
Definition: IRtext.cpp:108
-
const char * kTopStr
"Top"
Definition: IRtext.cpp:136
-
const char * kNowStr
"Now"
Definition: IRtext.cpp:172
-
const char * kOffStr
"Off"
Definition: IRtext.cpp:22
-
const char * kEconoToggleStr
"Econo Toggle"
Definition: IRtext.cpp:140
-
const char * kMaximumStr
"Maximum"
Definition: IRtext.cpp:114
-
const char * kButtonStr
"Button"
Definition: IRtext.cpp:58
- -
const char * kTempUpStr
"Temp Up"
Definition: IRtext.cpp:68
-
const char * kCleanStr
"Clean"
Definition: IRtext.cpp:39
-
const char * kIonStr
"Ion"
Definition: IRtext.cpp:55
-
const char * kProtocolStr
"Protocol"
Definition: IRtext.cpp:19
-
const char * kEyeStr
"Eye"
Definition: IRtext.cpp:53
-
const char * kMedStr
"Med"
Definition: IRtext.cpp:117
-
const char * kThreeLetterDayOfWeekStr
"SunMonTueWedThuFriSat"
Definition: IRtext.cpp:173
-
const char * kCancelStr
"Cancel"
Definition: IRtext.cpp:74
-
const char * kWallStr
"Wall"
Definition: IRtext.cpp:96
-
const char * kToggleStr
"Toggle"
Definition: IRtext.cpp:24
-
const char * kMouldStr
"Mould"
Definition: IRtext.cpp:38
-
const char * kBottomStr
"Bottom"
Definition: IRtext.cpp:137
-
const char * kBeepStr
"Beep"
Definition: IRtext.cpp:35
-
const char * kRoomStr
"Room"
Definition: IRtext.cpp:97
-
const char * kFastStr
"Fast"
Definition: IRtext.cpp:83
-
const char * kDryStr
"Dry"
Definition: IRtext.cpp:109
-
const char * kUpperStr
"Upper"
Definition: IRtext.cpp:92
-
const char * kMiddleStr
"Middle"
Definition: IRtext.cpp:124
-
const char * kAirFlowStr
"Air Flow"
Definition: IRtext.cpp:85
-
const char * kLoudStr
"Loud"
Definition: IRtext.cpp:90
-
const char * kUnknownStr
"Unknown"
Definition: IRtext.cpp:18
-
const char * kSuperStr
"Super"
Definition: IRtext.cpp:26
-
const char * kAutoStr
"Auto"
Definition: IRtext.cpp:103
-
const char * kMidStr
"Mid"
Definition: IRtext.cpp:123
-
const char * kYesStr
"Yes"
Definition: IRtext.cpp:175
-
const char * kSlowStr
"Slow"
Definition: IRtext.cpp:84
-
const char * k8CHeatStr
"8C Heat"
Definition: IRtext.cpp:59
-
const char * kClockStr
"Clock"
Definition: IRtext.cpp:44
-
const char * kLeftMaxStr
"LeftMax"
Definition: IRtext.cpp:133
-
const char * kMaxStr
"Max"
Definition: IRtext.cpp:113
-
const char * kSaveStr
"Save"
Definition: IRtext.cpp:52
-
const char * kLightToggleStr
"Light Toggle"
Definition: IRtext.cpp:142
-
const char * kDayStr
"Day"
Definition: IRtext.cpp:164
-
const char * kFreshStr
"Fresh"
Definition: IRtext.cpp:56
-
const char * kCentreStr
"Centre"
Definition: IRtext.cpp:135
-
const char * kManualStr
"Manual"
Definition: IRtext.cpp:105
-
const char * kHeatStr
"Heat"
Definition: IRtext.cpp:107
-
const char * kMaxRightStr
"Max Right"
Definition: IRtext.cpp:128
-
const char * kUpStr
"Up"
Definition: IRtext.cpp:75
-
const char * kCelsiusStr
"Celsius"
Definition: IRtext.cpp:65
-
const char * kOnStr
"On"
Definition: IRtext.cpp:21
-
const char * kHoursStr
"Hours"
Definition: IRtext.cpp:167
-
const char * kBreezeStr
"Breeze"
Definition: IRtext.cpp:93
-
const char * kPowerfulStr
"Powerful"
Definition: IRtext.cpp:29
-
const char * kEyeAutoStr
"Eye Auto"
Definition: IRtext.cpp:141
-
const char * kComfortStr
"Comfort"
Definition: IRtext.cpp:78
-
const char * kHighestStr
"Highest"
Definition: IRtext.cpp:120
-
const char * kFanOnlyStr
"fan_only"
Definition: IRtext.cpp:110
-
const char * kMinStr
"Min"
Definition: IRtext.cpp:115
-
const char * kFollowStr
"Follow"
Definition: IRtext.cpp:54
-
const char * kWeeklyTimerStr
"WeeklyTimer"
Definition: IRtext.cpp:80
-
const char * kOutsideQuietStr
"Outside Quiet"
Definition: IRtext.cpp:143
-
const char * kLowStr
"Low"
Definition: IRtext.cpp:125
-
const char * kFixedStr
"Fixed"
Definition: IRtext.cpp:37
-
const char * kStartStr
"Start"
Definition: IRtext.cpp:70
-
const char * kDaysStr
"Days"
Definition: IRtext.cpp:165
-
const char * kWifiStr
"Wifi"
Definition: IRtext.cpp:81
-
const char * kSwingHStr
"SwingH"
Definition: IRtext.cpp:33
-
const char * kLastStr
"Last"
Definition: IRtext.cpp:82
-
const char * kEconoStr
"Econo"
Definition: IRtext.cpp:31
-
const char * kNAStr
"N/A"
Definition: IRtext.cpp:87
-
char kTimeSep
':'
Definition: IRtext.cpp:157
-
const char * kModelStr
"Model"
Definition: IRtext.cpp:48
-
const char * kOutsideStr
"Outside"
Definition: IRtext.cpp:89
-
const char * kPowerStr
"Power"
Definition: IRtext.cpp:20
-
const char * kCirculateStr
"Circulate"
Definition: IRtext.cpp:94
-
const char * kLeftStr
"Left"
Definition: IRtext.cpp:131
-
const char * kSensorStr
"Sensor"
Definition: IRtext.cpp:79
-
const char * kPreviousPowerStr
"Previous Power"
Definition: IRtext.cpp:146
-
const char * kHumidStr
"Humid"
Definition: IRtext.cpp:51
-
const char * kZoneFollowStr
"Zone Follow"
Definition: IRtext.cpp:36
-
const char * kNoStr
"No"
Definition: IRtext.cpp:176
-
const char * kOffTimerStr
"OffTimer"
Definition: IRtext.cpp:43
-
const char * kLowerStr
"Lower"
Definition: IRtext.cpp:91
-
const char * kDisplayTempStr
"Display Temp"
Definition: IRtext.cpp:148
-
const char * kSwingVStr
"SwingV"
Definition: IRtext.cpp:34
-
const char * kLowestStr
"Lowest"
Definition: IRtext.cpp:127
-
const char * kTurboStr
"Turbo"
Definition: IRtext.cpp:25
-
const char * kHourStr
"Hour"
Definition: IRtext.cpp:166
-
const char * kModeStr
"Mode"
Definition: IRtext.cpp:23
-
const char * kSensorTempStr
"Sensor Temp"
Definition: IRtext.cpp:149
-
const char * kRecycleStr
"Recycle"
Definition: IRtext.cpp:111
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8cpp.html deleted file mode 100644 index 8c3da0949..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8cpp.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtimer.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRtimer.cpp File Reference
-
-
- - - - - - -

-Variables

uint32_t _IRtimer_unittest_now = 0
 
uint32_t _TimerMs_unittest_now = 0
 
-

Variable Documentation

- -

◆ _IRtimer_unittest_now

- -
-
- - - - -
uint32_t _IRtimer_unittest_now = 0
-
- -
-
- -

◆ _TimerMs_unittest_now

- -
-
- - - - -
uint32_t _TimerMs_unittest_now = 0
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h.html deleted file mode 100644 index 2d06c01a8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtimer.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRtimer.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - -

-Classes

class  IRtimer
 This class offers a simple counter in micro-seconds since instantiated. More...
 
class  TimerMs
 This class offers a simple counter in milli-seconds since instantiated. More...
 
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h_source.html deleted file mode 100644 index 3055257b7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRtimer_8h_source.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRtimer.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRtimer.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 David Conran
-
2 
-
3 #ifndef IRTIMER_H_
-
4 #define IRTIMER_H_
-
5 
-
6 #define __STDC_LIMIT_MACROS
-
7 #include <stdint.h>
-
8 
-
9 // Classes
-
10 
-
13 class IRtimer {
-
14  public:
-
15  IRtimer();
-
16  void reset();
-
17  uint32_t elapsed();
-
18 #ifdef UNIT_TEST
-
19  static void add(uint32_t usecs);
-
20 #endif // UNIT_TEST
-
21 
-
22  private:
-
23  uint32_t start;
-
24 };
-
25 
-
28 class TimerMs {
-
29  public:
-
30  TimerMs();
-
31  void reset();
-
32  uint32_t elapsed();
-
33 #ifdef UNIT_TEST
-
34  static void add(uint32_t msecs);
-
35 #endif // UNIT_TEST
-
36 
-
37  private:
-
38  uint32_t start;
-
39 };
-
40 #endif // IRTIMER_H_
-
-
uint32_t start
Time in mSeconds when the class was instantiated/reset.
Definition: IRtimer.h:38
-
This class offers a simple counter in micro-seconds since instantiated.
Definition: IRtimer.h:13
-
static void add(uint32_t usecs)
Add time to the timer to simulate elapsed time.
Definition: IRtimer.cpp:44
-
void reset()
Resets the IRtimer object. I.e. The counter starts again from now.
Definition: IRtimer.cpp:18
-
IRtimer()
Class constructor.
Definition: IRtimer.cpp:15
-
uint32_t elapsed()
Calculate how many microseconds have elapsed since the timer was started.
Definition: IRtimer.cpp:28
-
uint32_t elapsed()
Calculate how many milliseconds have elapsed since the timer was started.
Definition: IRtimer.cpp:61
-
void reset()
Resets the TimerMs object. I.e. The counter starts again from now.
Definition: IRtimer.cpp:51
-
TimerMs()
Class constructor.
Definition: IRtimer.cpp:48
-
uint32_t start
Time in uSeconds when the class was instantiated/reset.
Definition: IRtimer.h:23
-
static void add(uint32_t msecs)
Add time to the timer to simulate elapsed time.
Definition: IRtimer.cpp:77
-
This class offers a simple counter in milli-seconds since instantiated.
Definition: IRtimer.h:28
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8cpp.html deleted file mode 100644 index 2d9aa3bde..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8cpp.html +++ /dev/null @@ -1,889 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRutils.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRutils.cpp File Reference
-
-
- - - - - -

-Namespaces

 irutils
 Namespace for covering common functions & procedures for advancd protocol handlers.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

uint64_t reverseBits (uint64_t input, uint16_t nbits)
 Reverse the order of the requested least significant nr. of bits. More...
 
String uint64ToString (uint64_t input, uint8_t base)
 Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values. More...
 
void serialPrintUint64 (uint64_t input, uint8_t base)
 Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long longs. (uint64_t) More...
 
decode_type_t strToDecodeType (const char *const str)
 Convert a C-style string to a decode_type_t. More...
 
String typeToString (const decode_type_t protocol, const bool isRepeat)
 Convert a protocol type (enum etc) to a human readable string. More...
 
bool hasACState (const decode_type_t protocol)
 Does the given protocol use a complex state as part of the decode? More...
 
uint16_t getCorrectedRawLength (const decode_results *const results)
 Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries. More...
 
String resultToSourceCode (const decode_results *const results)
 Return a String containing the key values of a decode_results structure in a C/C++ code style format. More...
 
String resultToTimingInfo (const decode_results *const results)
 Dump out the decode_results structure. More...
 
String resultToHexidecimal (const decode_results *const result)
 Convert the decode_results structure's value/state to simple hexadecimal. More...
 
String resultToHumanReadableBasic (const decode_results *const results)
 Dump out the decode_results structure into a human readable format. More...
 
uint16_t * resultToRawArray (const decode_results *const decode)
 Convert a decode_results into an array suitable for sendRaw(). More...
 
uint8_t sumBytes (const uint8_t *const start, const uint16_t length, const uint8_t init)
 Sum all the bytes of an array and return the least significant 8-bits of the result. More...
 
uint8_t xorBytes (const uint8_t *const start, const uint16_t length, const uint8_t init)
 Calculate a rolling XOR of all the bytes of an array. More...
 
uint16_t countBits (const uint8_t *const start, const uint16_t length, const bool ones, const uint16_t init)
 Count the number of bits of a certain type in an array. More...
 
uint16_t countBits (const uint64_t data, const uint8_t length, const bool ones, const uint16_t init)
 Count the number of bits of a certain type in an Integer. More...
 
uint64_t invertBits (const uint64_t data, const uint16_t nbits)
 Invert/Flip the bits in an Integer. More...
 
float celsiusToFahrenheit (const float deg)
 Convert degrees Celsius to degrees Fahrenheit. More...
 
float fahrenheitToCelsius (const float deg)
 Convert degrees Fahrenheit to degrees Celsius. More...
 
String irutils::addLabeledString (const String value, const String label, const bool precomma)
 Create a String with a colon separated "label: value" pair suitable for Humans. More...
 
String irutils::addBoolToString (const bool value, const String label, const bool precomma)
 Create a String with a colon separated flag suitable for Humans. e.g. "Power: On". More...
 
String irutils::addIntToString (const uint16_t value, const String label, const bool precomma)
 Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23". More...
 
String irutils::modelToStr (const decode_type_t protocol, const int16_t model)
 Generate the model string for a given Protocol/Model pair. More...
 
String irutils::addModelToString (const decode_type_t protocol, const int16_t model, const bool precomma)
 Create a String of human output for a given protocol model number. e.g. "Model: JKE". More...
 
String irutils::addTempToString (const uint16_t degrees, const bool celsius, const bool precomma)
 Create a String of human output for a given temperature. e.g. "Temp: 25C". More...
 
String irutils::addTempFloatToString (const float degrees, const bool celsius, const bool precomma)
 Create a String of human output for a given temperature. e.g. "Temp: 25.5C". More...
 
String irutils::addModeToString (const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan)
 Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)". More...
 
String irutils::addDayToString (const uint8_t day_of_week, const int8_t offset, const bool precomma)
 Create a String of the 3-letter day of the week from a numerical day of the week. e.g. "Day: 1 (Mon)". More...
 
String irutils::addFanToString (const uint8_t speed, const uint8_t high, const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum)
 Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)". More...
 
String irutils::addSwingHToString (const uint8_t position, const uint8_t automatic, const uint8_t maxleft, const uint8_t left, const uint8_t middle, const uint8_t right, const uint8_t maxright, const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide)
 Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)". More...
 
String irutils::addSwingVToString (const uint8_t position, const uint8_t automatic, const uint8_t highest, const uint8_t high, const uint8_t uppermiddle, const uint8_t middle, const uint8_t lowermiddle, const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate)
 Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)". More...
 
String irutils::htmlEscape (const String unescaped)
 Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS. More...
 
String irutils::msToString (uint32_t const msecs)
 Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds". More...
 
String irutils::minsToString (const uint16_t mins)
 Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59". More...
 
uint8_t irutils::sumNibbles (const uint8_t *const start, const uint16_t length, const uint8_t init)
 Sum all the nibbles together in a series of bytes. More...
 
uint8_t irutils::sumNibbles (const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)
 Sum all the nibbles together in an integer. More...
 
uint8_t irutils::bcdToUint8 (const uint8_t bcd)
 Convert a byte of Binary Coded Decimal(BCD) into an Integer. More...
 
uint8_t irutils::uint8ToBcd (const uint8_t integer)
 Convert an Integer into a byte of Binary Coded Decimal(BCD). More...
 
bool irutils::getBit (const uint64_t data, const uint8_t position, const uint8_t size)
 Return the value of positionth bit of an Integer. More...
 
bool irutils::getBit (const uint8_t data, const uint8_t position)
 Return the value of positionth bit of an Integer. More...
 
uint64_t irutils::setBit (const uint64_t data, const uint8_t position, const bool on, const uint8_t size)
 Return the value of an Integer with the positionth bit changed. More...
 
uint8_t irutils::setBit (const uint8_t data, const uint8_t position, const bool on)
 Return the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint8_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint32_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint64_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBits (uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)
 Alter an uint8_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)
 Alter an uint32_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)
 Alter an uint64_t value by overwriting an arbitrary given number of bits. More...
 
uint8_t * irutils::invertBytePairs (uint8_t *ptr, const uint16_t length)
 Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
bool irutils::checkInvertedBytePairs (const uint8_t *const ptr, const uint16_t length)
 Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
uint8_t irutils::lowLevelSanityCheck (void)
 Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler operation. Calls to this should return 0 if everything is as expected, anything else means the library won't work as expected. More...
 
-

Function Documentation

- -

◆ celsiusToFahrenheit()

- -
-
- - - - - - - - -
float celsiusToFahrenheit (const float deg)
-
- -

Convert degrees Celsius to degrees Fahrenheit.

- -
-
- -

◆ countBits() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t countBits (const uint64_t data,
const uint8_t length,
const bool ones,
const uint16_t init 
)
-
- -

Count the number of bits of a certain type in an Integer.

-
Parameters
- - - - - -
[in]dataThe value you want bits counted for. Starting from the LSB.
[in]lengthHow many bits to use in the calculation? Starts at the LSB
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The nr. of bits found of the given type found in the Integer.
- -
-
- -

◆ countBits() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t countBits (const uint8_t *const start,
const uint16_t length,
const bool ones,
const uint16_t init 
)
-
- -

Count the number of bits of a certain type in an array.

-
Parameters
- - - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The nr. of bits found of the given type found in the array.
- -
-
- -

◆ fahrenheitToCelsius()

- -
-
- - - - - - - - -
float fahrenheitToCelsius (const float deg)
-
- -

Convert degrees Fahrenheit to degrees Celsius.

- -
-
- -

◆ getCorrectedRawLength()

- -
-
- - - - - - - - -
uint16_t getCorrectedRawLength (const decode_results *const results)
-
- -

Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
The corrected length.
- -
-
- -

◆ hasACState()

- -
-
- - - - - - - - -
bool hasACState (const decode_type_t protocol)
-
- -

Does the given protocol use a complex state as part of the decode?

-
Parameters
- - -
[in]protocolThe decode_type_t protocol we are enquiring about.
-
-
-
Returns
True if the protocol uses a state array. False if just an integer.
- -
-
- -

◆ invertBits()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t invertBits (const uint64_t data,
const uint16_t nbits 
)
-
- -

Invert/Flip the bits in an Integer.

-
Parameters
- - - -
[in]dataThe Integer that will be inverted.
[in]nbitsHow many bits are to be inverted. Starting from the LSB.
-
-
-
Returns
An Integer with the appropriate bits inverted/flipped.
- -
-
- -

◆ resultToHexidecimal()

- -
-
- - - - - - - - -
String resultToHexidecimal (const decode_results *const result)
-
- -

Convert the decode_results structure's value/state to simple hexadecimal.

-
Parameters
- - -
[in]resultA ptr to a decode_results structure.
-
-
-
Returns
A String containing the output.
- -
-
- -

◆ resultToHumanReadableBasic()

- -
-
- - - - - - - - -
String resultToHumanReadableBasic (const decode_results *const results)
-
- -

Dump out the decode_results structure into a human readable format.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the output.
- -
-
- -

◆ resultToRawArray()

- -
-
- - - - - - - - -
uint16_t* resultToRawArray (const decode_results *const decode)
-
- -

Convert a decode_results into an array suitable for sendRaw().

-
Parameters
- - -
[in]decodeA ptr to a decode_results structure that contains a mesg.
-
-
-
Returns
A PTR to a dynamically allocated uint16_t sendRaw compatible array.
-
Note
The returned array needs to be delete[]'ed/free()'ed (deallocated) after use by caller.
- -
-
- -

◆ resultToSourceCode()

- -
-
- - - - - - - - -
String resultToSourceCode (const decode_results *const results)
-
- -

Return a String containing the key values of a decode_results structure in a C/C++ code style format.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the code-ified result.
- -
-
- -

◆ resultToTimingInfo()

- -
-
- - - - - - - - -
String resultToTimingInfo (const decode_results *const results)
-
- -

Dump out the decode_results structure.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the legacy information format.
-
Deprecated:
This is only for those that want this legacy format.
- -
-
- -

◆ reverseBits()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t reverseBits (uint64_t input,
uint16_t nbits 
)
-
- -

Reverse the order of the requested least significant nr. of bits.

-
Parameters
- - - -
[in]inputBit pattern/integer to reverse.
[in]nbitsNr. of bits to reverse. (LSB -> MSB)
-
-
-
Returns
The reversed bit pattern.
- -
-
- -

◆ serialPrintUint64()

- -
-
- - - - - - - - - - - - - - - - - - -
void serialPrintUint64 (uint64_t input,
uint8_t base 
)
-
- -

Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long longs. (uint64_t)

-
Parameters
- - - -
[in]inputThe value to print
[in]baseThe output base.
-
-
- -
-
- -

◆ strToDecodeType()

- -
-
- - - - - - - - -
decode_type_t strToDecodeType (const char *const str)
-
- -

Convert a C-style string to a decode_type_t.

-
Parameters
- - -
[in]strA C-style string containing a protocol name or number.
-
-
-
Returns
A decode_type_t enum. (decode_type_t::UNKNOWN if no match.)
- -
-
- -

◆ sumBytes()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint8_t sumBytes (const uint8_t *const start,
const uint16_t length,
const uint8_t init 
)
-
- -

Sum all the bytes of an array and return the least significant 8-bits of the result.

-
Parameters
- - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The 8-bit calculated result of all the bytes and init value.
- -
-
- -

◆ typeToString()

- -
-
- - - - - - - - - - - - - - - - - - -
String typeToString (const decode_type_t protocol,
const bool isRepeat 
)
-
- -

Convert a protocol type (enum etc) to a human readable string.

-
Parameters
- - - -
[in]protocolNr. (enum) of the protocol.
[in]isRepeatA flag indicating if it is a repeat message.
-
-
-
Returns
A String containing the protocol name. kUnknownStr if no match.
- -
-
- -

◆ uint64ToString()

- -
-
- - - - - - - - - - - - - - - - - - -
String uint64ToString (uint64_t input,
uint8_t base 
)
-
- -

Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values.

-
Parameters
- - - -
[in]inputThe value to print
[in]baseThe output base.
-
-
-
Returns
A String representation of the integer.
-
Note
Based on Arduino's Print::printNumber()
- -
-
- -

◆ xorBytes()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint8_t xorBytes (const uint8_t *const start,
const uint16_t length,
const uint8_t init 
)
-
- -

Calculate a rolling XOR of all the bytes of an array.

-
Parameters
- - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The 8-bit calculated result of all the bytes and init value.
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h.html deleted file mode 100644 index c039ac2f9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h.html +++ /dev/null @@ -1,960 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRutils.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IRutils.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - -

-Namespaces

 irutils
 Namespace for covering common functions & procedures for advancd protocol handlers.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

uint64_t reverseBits (uint64_t input, uint16_t nbits)
 Reverse the order of the requested least significant nr. of bits. More...
 
String uint64ToString (uint64_t input, uint8_t base=10)
 Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values. More...
 
String typeToString (const decode_type_t protocol, const bool isRepeat=false)
 Convert a protocol type (enum etc) to a human readable string. More...
 
void serialPrintUint64 (uint64_t input, uint8_t base=10)
 Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long longs. (uint64_t) More...
 
String resultToSourceCode (const decode_results *const results)
 Return a String containing the key values of a decode_results structure in a C/C++ code style format. More...
 
String resultToTimingInfo (const decode_results *const results)
 Dump out the decode_results structure. More...
 
String resultToHumanReadableBasic (const decode_results *const results)
 Dump out the decode_results structure into a human readable format. More...
 
String resultToHexidecimal (const decode_results *const result)
 Convert the decode_results structure's value/state to simple hexadecimal. More...
 
bool hasACState (const decode_type_t protocol)
 Does the given protocol use a complex state as part of the decode? More...
 
uint16_t getCorrectedRawLength (const decode_results *const results)
 Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries. More...
 
uint16_t * resultToRawArray (const decode_results *const decode)
 Convert a decode_results into an array suitable for sendRaw(). More...
 
uint8_t sumBytes (const uint8_t *const start, const uint16_t length, const uint8_t init=0)
 Sum all the bytes of an array and return the least significant 8-bits of the result. More...
 
uint8_t xorBytes (const uint8_t *const start, const uint16_t length, const uint8_t init=0)
 Calculate a rolling XOR of all the bytes of an array. More...
 
uint16_t countBits (const uint8_t *const start, const uint16_t length, const bool ones=true, const uint16_t init=0)
 Count the number of bits of a certain type in an array. More...
 
uint16_t countBits (const uint64_t data, const uint8_t length, const bool ones=true, const uint16_t init=0)
 Count the number of bits of a certain type in an Integer. More...
 
uint64_t invertBits (const uint64_t data, const uint16_t nbits)
 Invert/Flip the bits in an Integer. More...
 
decode_type_t strToDecodeType (const char *str)
 Convert a C-style string to a decode_type_t. More...
 
float celsiusToFahrenheit (const float deg)
 Convert degrees Celsius to degrees Fahrenheit. More...
 
float fahrenheitToCelsius (const float deg)
 Convert degrees Fahrenheit to degrees Celsius. More...
 
String irutils::addBoolToString (const bool value, const String label, const bool precomma)
 Create a String with a colon separated flag suitable for Humans. e.g. "Power: On". More...
 
String irutils::addIntToString (const uint16_t value, const String label, const bool precomma)
 Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23". More...
 
String irutils::modelToStr (const decode_type_t protocol, const int16_t model)
 Generate the model string for a given Protocol/Model pair. More...
 
String irutils::addModelToString (const decode_type_t protocol, const int16_t model, const bool precomma)
 Create a String of human output for a given protocol model number. e.g. "Model: JKE". More...
 
String irutils::addLabeledString (const String value, const String label, const bool precomma)
 Create a String with a colon separated "label: value" pair suitable for Humans. More...
 
String irutils::addTempToString (const uint16_t degrees, const bool celsius, const bool precomma)
 Create a String of human output for a given temperature. e.g. "Temp: 25C". More...
 
String irutils::addTempFloatToString (const float degrees, const bool celsius, const bool precomma)
 Create a String of human output for a given temperature. e.g. "Temp: 25.5C". More...
 
String irutils::addModeToString (const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan)
 Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)". More...
 
String irutils::addFanToString (const uint8_t speed, const uint8_t high, const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum)
 Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)". More...
 
String irutils::addSwingHToString (const uint8_t position, const uint8_t automatic, const uint8_t maxleft, const uint8_t left, const uint8_t middle, const uint8_t right, const uint8_t maxright, const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide)
 Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)". More...
 
String irutils::addSwingVToString (const uint8_t position, const uint8_t automatic, const uint8_t highest, const uint8_t high, const uint8_t uppermiddle, const uint8_t middle, const uint8_t lowermiddle, const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate)
 Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)". More...
 
String irutils::addDayToString (const uint8_t day_of_week, const int8_t offset, const bool precomma)
 Create a String of the 3-letter day of the week from a numerical day of the week. e.g. "Day: 1 (Mon)". More...
 
String irutils::htmlEscape (const String unescaped)
 Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS. More...
 
String irutils::msToString (uint32_t const msecs)
 Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds". More...
 
String irutils::minsToString (const uint16_t mins)
 Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59". More...
 
uint8_t irutils::sumNibbles (const uint8_t *const start, const uint16_t length, const uint8_t init)
 Sum all the nibbles together in a series of bytes. More...
 
uint8_t irutils::sumNibbles (const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)
 Sum all the nibbles together in an integer. More...
 
uint8_t irutils::bcdToUint8 (const uint8_t bcd)
 Convert a byte of Binary Coded Decimal(BCD) into an Integer. More...
 
uint8_t irutils::uint8ToBcd (const uint8_t integer)
 Convert an Integer into a byte of Binary Coded Decimal(BCD). More...
 
bool irutils::getBit (const uint64_t data, const uint8_t position, const uint8_t size)
 Return the value of positionth bit of an Integer. More...
 
bool irutils::getBit (const uint8_t data, const uint8_t position)
 Return the value of positionth bit of an Integer. More...
 
uint64_t irutils::setBit (const uint64_t data, const uint8_t position, const bool on, const uint8_t size)
 Return the value of an Integer with the positionth bit changed. More...
 
uint8_t irutils::setBit (const uint8_t data, const uint8_t position, const bool on)
 Return the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint8_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint32_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBit (uint64_t *const data, const uint8_t position, const bool on)
 Alter the value of an Integer with the positionth bit changed. More...
 
void irutils::setBits (uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)
 Alter an uint8_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)
 Alter an uint32_t value by overwriting an arbitrary given number of bits. More...
 
void irutils::setBits (uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)
 Alter an uint64_t value by overwriting an arbitrary given number of bits. More...
 
uint8_t * irutils::invertBytePairs (uint8_t *ptr, const uint16_t length)
 Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
bool irutils::checkInvertedBytePairs (const uint8_t *const ptr, const uint16_t length)
 Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
 
uint8_t irutils::lowLevelSanityCheck (void)
 Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler operation. Calls to this should return 0 if everything is as expected, anything else means the library won't work as expected. More...
 
- - - - - - - - - -

-Variables

const uint8_t kNibbleSize = 4
 
const uint8_t kLowNibble = 0
 
const uint8_t kHighNibble = 4
 
const uint8_t kModeBitsSize = 3
 
-

Function Documentation

- -

◆ celsiusToFahrenheit()

- -
-
- - - - - - - - -
float celsiusToFahrenheit (const float deg)
-
- -

Convert degrees Celsius to degrees Fahrenheit.

- -
-
- -

◆ countBits() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t countBits (const uint64_t data,
const uint8_t length,
const bool ones,
const uint16_t init 
)
-
- -

Count the number of bits of a certain type in an Integer.

-
Parameters
- - - - - -
[in]dataThe value you want bits counted for. Starting from the LSB.
[in]lengthHow many bits to use in the calculation? Starts at the LSB
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The nr. of bits found of the given type found in the Integer.
- -
-
- -

◆ countBits() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t countBits (const uint8_t *const start,
const uint16_t length,
const bool ones,
const uint16_t init 
)
-
- -

Count the number of bits of a certain type in an array.

-
Parameters
- - - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]onesCount the binary nr of 1 bits. False is count the 0s.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The nr. of bits found of the given type found in the array.
- -
-
- -

◆ fahrenheitToCelsius()

- -
-
- - - - - - - - -
float fahrenheitToCelsius (const float deg)
-
- -

Convert degrees Fahrenheit to degrees Celsius.

- -
-
- -

◆ getCorrectedRawLength()

- -
-
- - - - - - - - -
uint16_t getCorrectedRawLength (const decode_results *const results)
-
- -

Return the corrected length of a 'raw' format array structure after over-large values are converted into multiple entries.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
The corrected length.
- -
-
- -

◆ hasACState()

- -
-
- - - - - - - - -
bool hasACState (const decode_type_t protocol)
-
- -

Does the given protocol use a complex state as part of the decode?

-
Parameters
- - -
[in]protocolThe decode_type_t protocol we are enquiring about.
-
-
-
Returns
True if the protocol uses a state array. False if just an integer.
- -
-
- -

◆ invertBits()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t invertBits (const uint64_t data,
const uint16_t nbits 
)
-
- -

Invert/Flip the bits in an Integer.

-
Parameters
- - - -
[in]dataThe Integer that will be inverted.
[in]nbitsHow many bits are to be inverted. Starting from the LSB.
-
-
-
Returns
An Integer with the appropriate bits inverted/flipped.
- -
-
- -

◆ resultToHexidecimal()

- -
-
- - - - - - - - -
String resultToHexidecimal (const decode_results *const result)
-
- -

Convert the decode_results structure's value/state to simple hexadecimal.

-
Parameters
- - -
[in]resultA ptr to a decode_results structure.
-
-
-
Returns
A String containing the output.
- -
-
- -

◆ resultToHumanReadableBasic()

- -
-
- - - - - - - - -
String resultToHumanReadableBasic (const decode_results *const results)
-
- -

Dump out the decode_results structure into a human readable format.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the output.
- -
-
- -

◆ resultToRawArray()

- -
-
- - - - - - - - -
uint16_t* resultToRawArray (const decode_results *const decode)
-
- -

Convert a decode_results into an array suitable for sendRaw().

-
Parameters
- - -
[in]decodeA ptr to a decode_results structure that contains a mesg.
-
-
-
Returns
A PTR to a dynamically allocated uint16_t sendRaw compatible array.
-
Note
The returned array needs to be delete[]'ed/free()'ed (deallocated) after use by caller.
- -
-
- -

◆ resultToSourceCode()

- -
-
- - - - - - - - -
String resultToSourceCode (const decode_results *const results)
-
- -

Return a String containing the key values of a decode_results structure in a C/C++ code style format.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the code-ified result.
- -
-
- -

◆ resultToTimingInfo()

- -
-
- - - - - - - - -
String resultToTimingInfo (const decode_results *const results)
-
- -

Dump out the decode_results structure.

-
Parameters
- - -
[in]resultsA ptr to a decode_results structure.
-
-
-
Returns
A String containing the legacy information format.
-
Deprecated:
This is only for those that want this legacy format.
- -
-
- -

◆ reverseBits()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t reverseBits (uint64_t input,
uint16_t nbits 
)
-
- -

Reverse the order of the requested least significant nr. of bits.

-
Parameters
- - - -
[in]inputBit pattern/integer to reverse.
[in]nbitsNr. of bits to reverse. (LSB -> MSB)
-
-
-
Returns
The reversed bit pattern.
- -
-
- -

◆ serialPrintUint64()

- -
-
- - - - - - - - - - - - - - - - - - -
void serialPrintUint64 (uint64_t input,
uint8_t base 
)
-
- -

Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long longs. (uint64_t)

-
Parameters
- - - -
[in]inputThe value to print
[in]baseThe output base.
-
-
- -
-
- -

◆ strToDecodeType()

- -
-
- - - - - - - - -
decode_type_t strToDecodeType (const char *const str)
-
- -

Convert a C-style string to a decode_type_t.

-
Parameters
- - -
[in]strA C-style string containing a protocol name or number.
-
-
-
Returns
A decode_type_t enum. (decode_type_t::UNKNOWN if no match.)
- -
-
- -

◆ sumBytes()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint8_t sumBytes (const uint8_t *const start,
const uint16_t length,
const uint8_t init 
)
-
- -

Sum all the bytes of an array and return the least significant 8-bits of the result.

-
Parameters
- - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The 8-bit calculated result of all the bytes and init value.
- -
-
- -

◆ typeToString()

- -
-
- - - - - - - - - - - - - - - - - - -
String typeToString (const decode_type_t protocol,
const bool isRepeat 
)
-
- -

Convert a protocol type (enum etc) to a human readable string.

-
Parameters
- - - -
[in]protocolNr. (enum) of the protocol.
[in]isRepeatA flag indicating if it is a repeat message.
-
-
-
Returns
A String containing the protocol name. kUnknownStr if no match.
- -
-
- -

◆ uint64ToString()

- -
-
- - - - - - - - - - - - - - - - - - -
String uint64ToString (uint64_t input,
uint8_t base 
)
-
- -

Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle printing 64 bit values.

-
Parameters
- - - -
[in]inputThe value to print
[in]baseThe output base.
-
-
-
Returns
A String representation of the integer.
-
Note
Based on Arduino's Print::printNumber()
- -
-
- -

◆ xorBytes()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint8_t xorBytes (const uint8_t *const start,
const uint16_t length,
const uint8_t init 
)
-
- -

Calculate a rolling XOR of all the bytes of an array.

-
Parameters
- - - - -
[in]startA ptr to the start of the byte array to calculate over.
[in]lengthHow many bytes to use in the calculation.
[in]initStarting value of the calculation to use. (Default is 0)
-
-
-
Returns
The 8-bit calculated result of all the bytes and init value.
- -
-
-

Variable Documentation

- -

◆ kHighNibble

- -
-
- - - - -
const uint8_t kHighNibble = 4
-
- -
-
- -

◆ kLowNibble

- -
-
- - - - -
const uint8_t kLowNibble = 0
-
- -
-
- -

◆ kModeBitsSize

- -
-
- - - - -
const uint8_t kModeBitsSize = 3
-
- -
-
- -

◆ kNibbleSize

- -
-
- - - - -
const uint8_t kNibbleSize = 4
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h_source.html deleted file mode 100644 index 283bfbdf5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/IRutils_8h_source.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - -IRremoteESP8266: src/IRutils.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IRutils.h
-
-
-Go to the documentation of this file.
1 #ifndef IRUTILS_H_
-
2 #define IRUTILS_H_
-
3 
-
4 // Copyright 2017 David Conran
-
5 
-
6 #ifndef UNIT_TEST
-
7 #include <Arduino.h>
-
8 #endif
-
9 #define __STDC_LIMIT_MACROS
-
10 #include <stdint.h>
-
11 #ifndef ARDUINO
-
12 #include <string>
-
13 #endif
-
14 #include "IRremoteESP8266.h"
-
15 #include "IRrecv.h"
-
16 
-
17 const uint8_t kNibbleSize = 4;
-
18 const uint8_t kLowNibble = 0;
-
19 const uint8_t kHighNibble = 4;
-
20 const uint8_t kModeBitsSize = 3;
-
21 uint64_t reverseBits(uint64_t input, uint16_t nbits);
-
22 String uint64ToString(uint64_t input, uint8_t base = 10);
-
23 String typeToString(const decode_type_t protocol,
-
24  const bool isRepeat = false);
-
25 void serialPrintUint64(uint64_t input, uint8_t base = 10);
-
26 String resultToSourceCode(const decode_results * const results);
-
27 String resultToTimingInfo(const decode_results * const results);
-
28 String resultToHumanReadableBasic(const decode_results * const results);
-
29 String resultToHexidecimal(const decode_results * const result);
-
30 bool hasACState(const decode_type_t protocol);
-
31 uint16_t getCorrectedRawLength(const decode_results * const results);
-
32 uint16_t *resultToRawArray(const decode_results * const decode);
-
33 uint8_t sumBytes(const uint8_t * const start, const uint16_t length,
-
34  const uint8_t init = 0);
-
35 uint8_t xorBytes(const uint8_t * const start, const uint16_t length,
-
36  const uint8_t init = 0);
-
37 uint16_t countBits(const uint8_t * const start, const uint16_t length,
-
38  const bool ones = true, const uint16_t init = 0);
-
39 uint16_t countBits(const uint64_t data, const uint8_t length,
-
40  const bool ones = true, const uint16_t init = 0);
-
41 uint64_t invertBits(const uint64_t data, const uint16_t nbits);
-
42 decode_type_t strToDecodeType(const char *str);
-
43 float celsiusToFahrenheit(const float deg);
-
44 float fahrenheitToCelsius(const float deg);
-
47 namespace irutils {
-
48  String addBoolToString(const bool value, const String label,
-
49  const bool precomma = true);
-
50  String addIntToString(const uint16_t value, const String label,
-
51  const bool precomma = true);
-
52  String modelToStr(const decode_type_t protocol, const int16_t model);
-
53  String addModelToString(const decode_type_t protocol, const int16_t model,
-
54  const bool precomma = true);
-
55  String addLabeledString(const String value, const String label,
-
56  const bool precomma = true);
-
57  String addTempToString(const uint16_t degrees, const bool celsius = true,
-
58  const bool precomma = true);
-
59  String addTempFloatToString(const float degrees, const bool celsius = true,
-
60  const bool precomma = true);
-
61  String addModeToString(const uint8_t mode, const uint8_t automatic,
-
62  const uint8_t cool, const uint8_t heat,
-
63  const uint8_t dry, const uint8_t fan);
-
64  String addFanToString(const uint8_t speed, const uint8_t high,
-
65  const uint8_t low, const uint8_t automatic,
-
66  const uint8_t quiet, const uint8_t medium,
-
67  const uint8_t maximum = 0xFF);
-
68  String addSwingHToString(const uint8_t position, const uint8_t automatic,
-
69  const uint8_t maxleft, const uint8_t left,
-
70  const uint8_t middle,
-
71  const uint8_t right, const uint8_t maxright,
-
72  const uint8_t off,
-
73  const uint8_t leftright, const uint8_t rightleft,
-
74  const uint8_t threed, const uint8_t wide);
-
75  String addSwingVToString(const uint8_t position, const uint8_t automatic,
-
76  const uint8_t highest, const uint8_t high,
-
77  const uint8_t uppermiddle,
-
78  const uint8_t middle,
-
79  const uint8_t lowermiddle,
-
80  const uint8_t low, const uint8_t lowest,
-
81  const uint8_t off, const uint8_t swing,
-
82  const uint8_t breeze, const uint8_t circulate);
-
83  String addDayToString(const uint8_t day_of_week, const int8_t offset = 0,
-
84  const bool precomma = true);
-
85  String htmlEscape(const String unescaped);
-
86  String msToString(uint32_t const msecs);
-
87  String minsToString(const uint16_t mins);
-
88  uint8_t sumNibbles(const uint8_t * const start, const uint16_t length,
-
89  const uint8_t init = 0);
-
90  uint8_t sumNibbles(const uint64_t data, const uint8_t count = 16,
-
91  const uint8_t init = 0, const bool nibbleonly = true);
-
92  uint8_t bcdToUint8(const uint8_t bcd);
-
93  uint8_t uint8ToBcd(const uint8_t integer);
-
94  bool getBit(const uint64_t data, const uint8_t position,
-
95  const uint8_t size = 64);
-
96  bool getBit(const uint8_t data, const uint8_t position);
-
97 #define GETBIT8(a, b) (a & ((uint8_t)1 << b))
-
98 #define GETBIT16(a, b) (a & ((uint16_t)1 << b))
-
99 #define GETBIT32(a, b) (a & ((uint32_t)1 << b))
-
100 #define GETBIT64(a, b) (a & ((uint64_t)1 << b))
-
101 #define GETBITS8(data, offset, size) \
-
102  (((data) & (((uint8_t)UINT8_MAX >> (8 - (size))) << (offset))) >> (offset))
-
103 #define GETBITS16(data, offset, size) \
-
104  (((data) & (((uint16_t)UINT16_MAX >> (16 - (size))) << (offset))) >> \
-
105  (offset))
-
106 #define GETBITS32(data, offset, size) \
-
107  (((data) & (((uint32_t)UINT32_MAX >> (32 - (size))) << (offset))) >> \
-
108  (offset))
-
109 #define GETBITS64(data, offset, size) \
-
110  (((data) & (((uint64_t)UINT64_MAX >> (64 - (size))) << (offset))) >> \
-
111  (offset))
-
112  uint64_t setBit(const uint64_t data, const uint8_t position,
-
113  const bool on = true, const uint8_t size = 64);
-
114  uint8_t setBit(const uint8_t data, const uint8_t position,
-
115  const bool on = true);
-
116  void setBit(uint8_t * const data, const uint8_t position,
-
117  const bool on = true);
-
118  void setBit(uint32_t * const data, const uint8_t position,
-
119  const bool on = true);
-
120  void setBit(uint64_t * const data, const uint8_t position,
-
121  const bool on = true);
-
122  void setBits(uint8_t * const dst, const uint8_t offset, const uint8_t nbits,
-
123  const uint8_t data);
-
124  void setBits(uint32_t * const dst, const uint8_t offset, const uint8_t nbits,
-
125  const uint32_t data);
-
126  void setBits(uint64_t * const dst, const uint8_t offset, const uint8_t nbits,
-
127  const uint64_t data);
-
128  uint8_t * invertBytePairs(uint8_t *ptr, const uint16_t length);
-
129  bool checkInvertedBytePairs(const uint8_t * const ptr, const uint16_t length);
-
130  uint8_t lowLevelSanityCheck(void);
-
131 } // namespace irutils
-
132 #endif // IRUTILS_H_
-
-
String addTempToString(const uint16_t degrees, const bool celsius, const bool precomma)
Create a String of human output for a given temperature. e.g. "Temp: 25C".
Definition: IRutils.cpp:595
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
String addDayToString(const uint8_t day_of_week, const int8_t offset, const bool precomma)
Create a String of the 3-letter day of the week from a numerical day of the week. e....
Definition: IRutils.cpp:650
-
uint16_t * resultToRawArray(const decode_results *const decode)
Convert a decode_results into an array suitable for sendRaw().
Definition: IRutils.cpp:354
-
String addFanToString(const uint8_t speed, const uint8_t high, const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum)
Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)".
Definition: IRutils.cpp:677
-
void setBits(uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)
Alter an uint8_t value by overwriting an arbitrary given number of bits.
Definition: IRutils.cpp:1026
-
String resultToSourceCode(const decode_results *const results)
Return a String containing the key values of a decode_results structure in a C/C++ code style format.
Definition: IRutils.cpp:196
-
Results returned from the decoder.
Definition: IRrecv.h:92
-
uint16_t getCorrectedRawLength(const decode_results *const results)
Return the corrected length of a 'raw' format array structure after over-large values are converted i...
Definition: IRutils.cpp:182
-
String addModelToString(const decode_type_t protocol, const int16_t model, const bool precomma)
Create a String of human output for a given protocol model number. e.g. "Model: JKE".
Definition: IRutils.cpp:580
-
uint16_t countBits(const uint8_t *const start, const uint16_t length, const bool ones=true, const uint16_t init=0)
Count the number of bits of a certain type in an array.
Definition: IRutils.cpp:405
-
String msToString(uint32_t const msecs)
Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds...
Definition: IRutils.cpp:845
-
uint8_t lowLevelSanityCheck(void)
Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler ope...
Definition: IRutils.cpp:1115
-
String addModeToString(const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan)
Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)".
Definition: IRutils.cpp:627
-
String resultToHumanReadableBasic(const decode_results *const results)
Dump out the decode_results structure into a human readable format.
Definition: IRutils.cpp:327
-
String resultToTimingInfo(const decode_results *const results)
Dump out the decode_results structure.
Definition: IRutils.cpp:277
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kNibbleSize
Definition: IRutils.h:17
-
String modelToStr(const decode_type_t protocol, const int16_t model)
Generate the model string for a given Protocol/Model pair.
Definition: IRutils.cpp:501
-
const uint8_t kLowNibble
Definition: IRutils.h:18
- -
uint8_t uint8ToBcd(const uint8_t integer)
Convert an Integer into a byte of Binary Coded Decimal(BCD).
Definition: IRutils.cpp:931
-
decode_type_t strToDecodeType(const char *str)
Convert a C-style string to a decode_type_t.
Definition: IRutils.cpp:83
-
bool checkInvertedBytePairs(const uint8_t *const ptr, const uint16_t length)
Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/prev...
Definition: IRutils.cpp:1093
-
const uint8_t kHighNibble
Definition: IRutils.h:19
-
uint8_t sumNibbles(const uint8_t *const start, const uint16_t length, const uint8_t init)
Sum all the nibbles together in a series of bytes.
Definition: IRutils.cpp:896
-
String uint64ToString(uint64_t input, uint8_t base=10)
Convert a uint64_t (unsigned long long) to a string. Arduino String/toInt/Serial.print() can't handle...
Definition: IRutils.cpp:44
-
float celsiusToFahrenheit(const float deg)
Convert degrees Celsius to degrees Fahrenheit.
Definition: IRutils.cpp:453
-
String addIntToString(const uint16_t value, const String label, const bool precomma)
Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23".
Definition: IRutils.cpp:492
-
uint8_t xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0)
Calculate a rolling XOR of all the bytes of an array.
Definition: IRutils.cpp:391
-
String addSwingVToString(const uint8_t position, const uint8_t automatic, const uint8_t highest, const uint8_t high, const uint8_t uppermiddle, const uint8_t middle, const uint8_t lowermiddle, const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate)
Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)".
Definition: IRutils.cpp:766
-
String addTempFloatToString(const float degrees, const bool celsius, const bool precomma)
Create a String of human output for a given temperature. e.g. "Temp: 25.5C".
Definition: IRutils.cpp:609
-
const uint8_t kModeBitsSize
Definition: IRutils.h:20
-
bool getBit(const uint64_t data, const uint8_t position, const uint8_t size)
Return the value of positionth bit of an Integer.
Definition: IRutils.cpp:941
-
float fahrenheitToCelsius(const float deg)
Convert degrees Fahrenheit to degrees Celsius.
Definition: IRutils.cpp:456
- -
uint8_t sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0)
Sum all the bytes of an array and return the least significant 8-bits of the result.
Definition: IRutils.cpp:378
-
String addSwingHToString(const uint8_t position, const uint8_t automatic, const uint8_t maxleft, const uint8_t left, const uint8_t middle, const uint8_t right, const uint8_t maxright, const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide)
Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)".
Definition: IRutils.cpp:709
-
String typeToString(const decode_type_t protocol, const bool isRepeat=false)
Convert a protocol type (enum etc) to a human readable string.
Definition: IRutils.cpp:105
-
String resultToHexidecimal(const decode_results *const result)
Convert the decode_results structure's value/state to simple hexadecimal.
Definition: IRutils.cpp:307
-
String addBoolToString(const bool value, const String label, const bool precomma)
Create a String with a colon separated flag suitable for Humans. e.g. "Power: On".
Definition: IRutils.cpp:480
-
String minsToString(const uint16_t mins)
Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59".
Definition: IRutils.cpp:881
-
uint8_t * invertBytePairs(uint8_t *ptr, const uint16_t length)
Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previ...
Definition: IRutils.cpp:1078
-
uint8_t bcdToUint8(const uint8_t bcd)
Convert a byte of Binary Coded Decimal(BCD) into an Integer.
Definition: IRutils.cpp:923
-
Namespace for covering common functions & procedures for advancd protocol handlers.
Definition: IRutils.cpp:458
-
uint64_t reverseBits(uint64_t input, uint16_t nbits)
Reverse the order of the requested least significant nr. of bits.
Definition: IRutils.cpp:24
-
bool isRepeat(const uint64_t data, const uint16_t nbits)
Test if an XMP message code is a repeat or not.
Definition: ir_Xmp.cpp:85
-
String htmlEscape(const String unescaped)
Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS.
Definition: IRutils.cpp:813
-
bool hasACState(const decode_type_t protocol)
Does the given protocol use a complex state as part of the decode?
Definition: IRutils.cpp:130
-
uint64_t setBit(const uint64_t data, const uint8_t position, const bool on, const uint8_t size)
Return the value of an Integer with the positionth bit changed.
Definition: IRutils.cpp:961
-
void serialPrintUint64(uint64_t input, uint8_t base=10)
Print a uint64_t/unsigned long long to the Serial port Serial.print() can't handle printing long long...
Definition: IRutils.cpp:75
-
String addLabeledString(const String value, const String label, const bool precomma)
Create a String with a colon separated "label: value" pair suitable for Humans.
Definition: IRutils.cpp:465
-
uint64_t invertBits(const uint64_t data, const uint16_t nbits)
Invert/Flip the bits in an Integer.
Definition: IRutils.cpp:442
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/README_8md.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/README_8md.html deleted file mode 100644 index cf3677096..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/README_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/README.md File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
src/locale/README.md File Reference
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/annotated.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/annotated.html deleted file mode 100644 index d306af7ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/annotated.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -IRremoteESP8266: Class List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 NstdAcEnumerators and Structures for the Common A/C API
 CAirwellProtocolNative representation of a Airwell A/C message
 CAmcorProtocolNative representation of a Amcor A/C message
 CArgoProtocolNative representation of a Argo A/C message
 CCarrierProtocolNative representation of a Carrier A/C message
 CCoolixProtocolNative representation of a Coolix A/C message
 CCoronaProtocolNative representation of a Corona A/C message
 CCoronaSectionNative representation of a section of a Corona A/C message
 CDaikin128ProtocolNative representation of a Daikin128 A/C message
 CDaikin152ProtocolNative representation of a Daikin152 A/C message
 CDaikin160ProtocolNative representation of a Daikin160 A/C message
 CDaikin176ProtocolNative representation of a Daikin176 A/C message
 CDaikin216ProtocolNative representation of a Daikin216 A/C message
 CDaikin2ProtocolNative representation of a Daikin2 A/C message
 CDaikin64ProtocolNative representation of a Daikin64 A/C message
 CDaikinESPProtocolNative representation of a Daikin A/C message
 Cdecode_resultsResults returned from the decoder
 CDelonghiProtocolNative representation of a Delonghi A/C message
 CEcoclimProtocolNative representation of a Ecoclim A/C message
 CElectraProtocolNative representation of a Electra A/C message
 CFujitsuProtocolNative representation of a Fujitsu A/C message
 CGoodweatherProtocolNative representation of a Goodweather A/C message
 CGreeProtocolNative representation of a Gree A/C message
 CHaierProtocolNative representation of a Haier HSU07-HEA03 A/C message
 CHaierYRW02ProtocolNative representation of a Haier YRW02 A/C message
 CHitachi1ProtocolNative representation of a Hitachi 104-bit A/C message
 CHitachi424ProtocolNative representation of a Hitachi 53-byte/424-bit A/C message
 CHitachiProtocolNative representation of a Hitachi 224-bit A/C message
 CIRacA universal/common/generic interface for controling supported A/Cs
 CIRAirwellAcClass for handling detailed Airwell A/C messages
 CIRAmcorAcClass for handling detailed Amcor A/C messages
 CIRArgoACClass for handling detailed Argo A/C messages
 CIRCarrierAc64Class for handling detailed Carrier 64 bit A/C messages
 CIRCoolixACClass for handling detailed Coolix A/C messages
 CIRCoronaAcClass for handling detailed Corona A/C messages
 CIRDaikin128Class for handling detailed Daikin 128-bit A/C messages
 CIRDaikin152Class for handling detailed Daikin 152-bit A/C messages
 CIRDaikin160Class for handling detailed Daikin 160-bit A/C messages
 CIRDaikin176Class for handling detailed Daikin 176-bit A/C messages
 CIRDaikin2Class for handling detailed Daikin 312-bit A/C messages
 CIRDaikin216Class for handling detailed Daikin 216-bit A/C messages
 CIRDaikin64Class for handling detailed Daikin 64-bit A/C messages
 CIRDaikinESPClass for handling detailed Daikin 280-bit A/C messages
 CIRDelonghiAcClass for handling detailed Delonghi A/C messages
 CIREcoclimAcClass for handling detailed EcoClim A/C 56 bit messages
 CIRElectraAcClass for handling detailed Electra A/C messages
 CIRFujitsuACClass for handling detailed Fujitsu A/C messages
 CIRGoodweatherAcClass for handling detailed Goodweather A/C messages
 CIRGreeACClass for handling detailed Gree A/C messages
 CIRHaierACClass for handling detailed Haier A/C messages
 CIRHaierACYRW02Class for handling detailed Haier ACYRW02 A/C messages
 CIRHitachiAcClass for handling detailed Hitachi 224-bit A/C messages
 CIRHitachiAc1Class for handling detailed Hitachi 104-bit A/C messages
 CIRHitachiAc3Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages
 CIRHitachiAc344Class for handling detailed Hitachi 344-bit A/C messages
 CIRHitachiAc424Class for handling detailed Hitachi 53-byte/424-bit A/C messages
 CIRKelvinatorACClass for handling detailed Kelvinator A/C messages
 CIRLgAcClass for handling detailed LG A/C messages
 CIRMideaACClass for handling detailed Midea A/C messages
 CIRMitsubishi112Class for handling detailed Mitsubishi 122-bit A/C messages
 CIRMitsubishi136Class for handling detailed Mitsubishi 136-bit A/C messages
 CIRMitsubishiACClass for handling detailed Mitsubishi 144-bit A/C messages
 CIRMitsubishiHeavy152AcClass for handling detailed Mitsubishi Heavy 152-bit A/C messages
 CIRMitsubishiHeavy88AcClass for handling detailed Mitsubishi Heavy 88-bit A/C messages
 CIRNeoclimaAcClass for handling detailed Neoclima A/C messages
 CIRPanasonicAcClass for handling detailed Panasonic A/C messages
 CIRPanasonicAc32Class for handling detailed Panasonic 32bit A/C messages
 Cirparams_tInformation for the interrupt handler
 CIRrecvClass for receiving IR messages
 CIRSamsungAcClass for handling detailed Samsung A/C messages
 CIRSanyoAcClass for handling detailed Sanyo A/C messages
 CIRsendClass for sending all basic IR protocols
 CIRSharpAcClass for handling detailed Sharp A/C messages
 CIRTcl112AcClass for handling detailed TCL A/C messages
 CIRTechnibelAcClass for handling detailed Technibel A/C messages
 CIRTecoAcClass for handling detailed Teco A/C messages
 CIRtimerThis class offers a simple counter in micro-seconds since instantiated
 CIRToshibaACClass for handling detailed Toshiba A/C messages
 CIRTranscoldAcClass for handling detailed Transcold A/C messages
 CIRTrotecESPClass for handling detailed Trotec A/C messages
 CIRTrumaAcClass for handling detailed Truma A/C messages
 CIRVestelAcClass for handling detailed Vestel A/C messages
 CIRVoltasClass for handling detailed Voltas A/C messages
 CIRWhirlpoolAcClass for handling detailed Whirlpool A/C messages
 CKelvinatorProtocolNative representation of a Kelvinator A/C message
 CLGProtocolNative representation of a LG A/C message
 CmagiquestMagiQuest packet is both Wand ID and magnitude of swish and flick
 Cmatch_result_tResults from a data match
 CMideaProtocolNative representation of a Midea A/C message
 CMitsubishi112ProtocolNative representation of a Mitsubishi 112-bit A/C message
 CMitsubishi136ProtocolNative representation of a Mitsubishi 136-bit A/C message
 CMitsubishi144ProtocolNative representation of a Mitsubishi 144-bit A/C message
 CMitsubishi152ProtocolNative representation of a Mitsubishi Heavy 152-bit A/C message
 CMitsubishi88ProtocolNative representation of a Mitsubishi Heavy 88-bit A/C message
 CNeoclimaProtocolNative representation of a Neoclima A/C message
 CPanasonicAc32ProtocolNative representation of a Panasonic 32-bit A/C message
 CSamsungProtocolNative representation of a Samsung A/C message
 CSanyoProtocolNative representation of a Sanyo A/C message
 CSharpProtocolNative representation of a Sharp A/C message
 CTcl112ProtocolNative representation of a TCL 112 A/C message
 CTechnibelProtocolNative representation of a Technibel A/C message
 CTecoProtocolNative representation of a Teco A/C message
 CTimerMsThis class offers a simple counter in milli-seconds since instantiated
 CToshibaProtocolNative representation of a Toshiba A/C message
 CTranscoldProtocolNative representation of a Transcold A/C message
 CTrotecProtocolNative representation of a Trotec A/C message
 CTrumaProtocolNative representation of a Truma A/C message
 CVestelProtocolNative representation of a Vestel A/C message
 CVoltasProtocolNative representation of a Voltas A/C message
 CWhirlpoolProtocolNative representation of a Whirlpool A/C message
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bc_s.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bc_s.png deleted file mode 100644 index 224b29aa9..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bc_s.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bdwn.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bdwn.png deleted file mode 100644 index 940a0b950..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/bdwn.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc-members.html deleted file mode 100644 index 2c84842ee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRAirwellAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - -
_IRAirwellAcprivate
_irsendIRAirwellAcprivate
begin()IRAirwellAc
calibrate(void)IRAirwellAcinline
convertFan(const stdAc::fanspeed_t speed)IRAirwellAcstatic
convertMode(const stdAc::opmode_t mode)IRAirwellAcstatic
getFan() constIRAirwellAc
getMode() constIRAirwellAc
getPowerToggle() constIRAirwellAc
getRaw() constIRAirwellAc
getTemp() constIRAirwellAc
IRAirwellAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRAirwellAcexplicit
send(const uint16_t repeat=kAirwellMinRepeats)IRAirwellAc
setFan(const uint8_t speed)IRAirwellAc
setMode(const uint8_t mode)IRAirwellAc
setPowerToggle(const bool on)IRAirwellAc
setRaw(const uint64_t state)IRAirwellAc
setTemp(const uint8_t temp)IRAirwellAc
stateReset()IRAirwellAc
toCommon(const stdAc::state_t *prev=NULL) constIRAirwellAc
toCommonFanSpeed(const uint8_t speed)IRAirwellAcstatic
toCommonMode(const uint8_t mode)IRAirwellAcstatic
toString() constIRAirwellAc
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc.html deleted file mode 100644 index 1fe4d5056..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc.html +++ /dev/null @@ -1,793 +0,0 @@ - - - - - - - -IRremoteESP8266: IRAirwellAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Airwell A/C messages. - More...

- -

#include <ir_Airwell.h>

-
-Collaboration diagram for IRAirwellAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRAirwellAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset ()
 Reset the internals of the object to a known good state. More...
 
void send (const uint16_t repeat=kAirwellMinRepeats)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin ()
 Set up hardware to be able to send a message. More...
 
void setPowerToggle (const bool on)
 Turn on/off the Power Airwell setting. More...
 
bool getPowerToggle () const
 Get the power toggle setting from the internal state. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp () const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan () const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the desired operation mode. More...
 
uint8_t getMode () const
 Get the current operation mode setting. More...
 
uint64_t getRaw () const
 Get the raw state of the object, suitable to be sent with the appropriate IRsend object method. More...
 
void setRaw (const uint64_t state)
 Set the raw state of the object. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString () const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
AirwellProtocol _
 
-

Detailed Description

-

Class for handling detailed Airwell A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRAirwellAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRAirwellAc::IRAirwellAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
void IRAirwellAc::begin ()
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRAirwellAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRAirwellAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRAirwellAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - -
uint8_t IRAirwellAc::getFan () const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - -
uint8_t IRAirwellAc::getMode () const
-
- -

Get the current operation mode setting.

-
Returns
The current operation mode.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - -
bool IRAirwellAc::getPowerToggle () const
-
- -

Get the power toggle setting from the internal state.

-
Returns
A boolean indicating the setting.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - -
uint64_t IRAirwellAc::getRaw () const
-
- -

Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.

-
Returns
A copy of the internal state.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - -
uint8_t IRAirwellAc::getTemp () const
-
- -

Get the current temperature setting.

-
Returns
Get current setting for temp. in degrees celsius.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRAirwellAc::send (const uint16_t repeat = kAirwellMinRepeats)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRAirwellAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
-
Note
The speed is locked to Low when in Dry mode.
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRAirwellAc::setMode (const uint8_t mode)
-
- -

Set the desired operation mode.

-
Parameters
- - -
[in]modeThe desired operation mode.
-
-
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRAirwellAc::setPowerToggle (const bool on)
-
- -

Turn on/off the Power Airwell setting.

-
Parameters
- - -
[in]onThe desired setting state.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRAirwellAc::setRaw (const uint64_t state)
-
- -

Set the raw state of the object.

-
Parameters
- - -
[in]stateThe raw state from the native IR message.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRAirwellAc::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - -
void IRAirwellAc::stateReset ()
-
- -

Reset the internals of the object to a known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRAirwellAc::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if required.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRAirwellAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRAirwellAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - -
String IRAirwellAc::toString () const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
AirwellProtocol IRAirwellAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRAirwellAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.map deleted file mode 100644 index 2f09810f2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.md5 deleted file mode 100644 index 8dc6f0a29..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -14d737c66c83e94394d17e5fb59778b1 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.png deleted file mode 100644 index 88cc4902e..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAirwellAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc-members.html deleted file mode 100644 index 5191a83f3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRAmcorAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRAmcorAcprivate
_irsendIRAmcorAcprivate
begin()IRAmcorAc
calcChecksum(const uint8_t state[], const uint16_t length=kAmcorStateLength)IRAmcorAcstatic
calibrate(void)IRAmcorAcinline
checksum(void)IRAmcorAcprivate
convertFan(const stdAc::fanspeed_t speed)IRAmcorAcstatic
convertMode(const stdAc::opmode_t mode)IRAmcorAcstatic
getFan(void) constIRAmcorAc
getMax(void) constIRAmcorAc
getMode(void) constIRAmcorAc
getPower(void) constIRAmcorAc
getRaw(void)IRAmcorAc
getTemp(void) constIRAmcorAc
IRAmcorAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRAmcorAcexplicit
off(void)IRAmcorAc
on(void)IRAmcorAc
send(const uint16_t repeat=kAmcorDefaultRepeat)IRAmcorAc
setFan(const uint8_t speed)IRAmcorAc
setMax(const bool on)IRAmcorAc
setMode(const uint8_t mode)IRAmcorAc
setPower(const bool state)IRAmcorAc
setRaw(const uint8_t state[])IRAmcorAc
setTemp(const uint8_t temp)IRAmcorAc
stateReset()IRAmcorAc
toCommon(void) constIRAmcorAc
toCommonFanSpeed(const uint8_t speed)IRAmcorAcstatic
toCommonMode(const uint8_t mode)IRAmcorAcstatic
toString(void) constIRAmcorAc
validChecksum(const uint8_t state[], const uint16_t length=kAmcorStateLength)IRAmcorAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc.html deleted file mode 100644 index c49fa3346..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc.html +++ /dev/null @@ -1,1022 +0,0 @@ - - - - - - - -IRremoteESP8266: IRAmcorAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Amcor A/C messages. - More...

- -

#include <ir_Amcor.h>

-
-Collaboration diagram for IRAmcorAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRAmcorAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset ()
 Reset the internals of the object to a known good state. More...
 
void send (const uint16_t repeat=kAmcorDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin ()
 Set up hardware to be able to send a message. More...
 
void setPower (const bool state)
 Set the internal state to have the desired power. More...
 
bool getPower (void) const
 Get the power setting from the internal state. More...
 
void on (void)
 Set the internal state to have the power on. More...
 
void off (void)
 Set the internal state to have the power off. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setMax (const bool on)
 Control the current Maximum Cooling or Heating setting. (i.e. Turbo) More...
 
bool getMax (void) const
 Is the Maximum Cooling or Heating setting (i.e. Turbo) setting on? More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the desired operation mode. More...
 
uint8_t getMode (void) const
 Get the current operation mode setting. More...
 
uint8_t * getRaw (void)
 Get the raw state of the object, suitable to be sent with the appropriate IRsend object method. More...
 
void setRaw (const uint8_t state[])
 Set the raw state of the object. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kAmcorStateLength)
 Calculate the checksum for the supplied state. More...
 
static bool validChecksum (const uint8_t state[], const uint16_t length=kAmcorStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Update the checksum value for the internal state. More...
 
- - - - - -

-Private Attributes

IRsend _irsend
 
AmcorProtocol _
 
-

Detailed Description

-

Class for handling detailed Amcor A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRAmcorAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRAmcorAc::IRAmcorAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
void IRAmcorAc::begin ()
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRAmcorAc::calcChecksum (const uint8_t state[],
const uint16_t length = kAmcorStateLength 
)
-
-static
-
- -

Calculate the checksum for the supplied state.

-
Parameters
- - - -
[in]stateThe source state to generate the checksum from.
[in]lengthLength of the supplied state to checksum.
-
-
-
Returns
The checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRAmcorAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRAmcorAc::checksum (void )
-
-private
-
- -

Update the checksum value for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRAmcorAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRAmcorAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRAmcorAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMax()

- -
-
- - - - - - - - -
bool IRAmcorAc::getMax (void ) const
-
- -

Is the Maximum Cooling or Heating setting (i.e. Turbo) setting on?

-
Returns
The current value.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRAmcorAc::getMode (void ) const
-
- -

Get the current operation mode setting.

-
Returns
The current operation mode.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRAmcorAc::getPower (void ) const
-
- -

Get the power setting from the internal state.

-
Returns
A boolean indicating the power setting.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRAmcorAc::getRaw (void )
-
- -

Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.

-
Returns
A PTR to the internal state.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRAmcorAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
Get current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRAmcorAc::off (void )
-
- -

Set the internal state to have the power off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRAmcorAc::on (void )
-
- -

Set the internal state to have the power on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRAmcorAc::send (const uint16_t repeat = kAmcorDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRAmcorAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMax()

- -
-
- - - - - - - - -
void IRAmcorAc::setMax (const bool on)
-
- -

Control the current Maximum Cooling or Heating setting. (i.e. Turbo)

-
Note
Only allowed in Cool or Heat mode.
-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRAmcorAc::setMode (const uint8_t mode)
-
- -

Set the desired operation mode.

-
Parameters
- - -
[in]modeThe desired operation mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRAmcorAc::setPower (const bool on)
-
- -

Set the internal state to have the desired power.

-
Parameters
- - -
[in]onThe desired power state.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRAmcorAc::setRaw (const uint8_t state[])
-
- -

Set the raw state of the object.

-
Parameters
- - -
[in]stateThe raw state from the native IR message.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRAmcorAc::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - -
void IRAmcorAc::stateReset ()
-
- -

Reset the internals of the object to a known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRAmcorAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRAmcorAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRAmcorAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRAmcorAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRAmcorAc::validChecksum (const uint8_t state[],
const uint16_t length = kAmcorStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe size of the state.
-
-
-
Returns
A boolean indicating if it's checksum is valid.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
AmcorProtocol IRAmcorAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRAmcorAc::_irsend
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.map deleted file mode 100644 index fface06b6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.md5 deleted file mode 100644 index 479c95a02..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d036b68b6c0b643498333b0d00548c92 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.png deleted file mode 100644 index b0fe9fd80..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRAmcorAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC-members.html deleted file mode 100644 index 966de5375..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRArgoAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRArgoACprivate
_irsendIRArgoACprivate
begin(void)IRArgoAC
calcChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)IRArgoACstatic
calibrate(void)IRArgoACinline
checksum(void)IRArgoACprivate
convertFan(const stdAc::fanspeed_t speed)IRArgoACstatic
convertMode(const stdAc::opmode_t mode)IRArgoACstatic
convertSwingV(const stdAc::swingv_t position)IRArgoACstatic
cool_modeIRArgoACprivate
flap_modeIRArgoACprivate
getFan(void) constIRArgoAC
getFlap(void) constIRArgoAC
getiFeel(void) constIRArgoAC
getMax(void) constIRArgoAC
getMode(void) constIRArgoAC
getNight(void) constIRArgoAC
getPower(void) constIRArgoAC
getRaw(void)IRArgoAC
getRoomTemp(void) constIRArgoAC
getTemp(void) constIRArgoAC
heat_modeIRArgoACprivate
IRArgoAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRArgoACexplicit
off(void)IRArgoAC
on(void)IRArgoAC
send(const uint16_t repeat=kArgoDefaultRepeat)IRArgoAC
setFan(const uint8_t fan)IRArgoAC
setFlap(const uint8_t flap)IRArgoAC
setiFeel(const bool on)IRArgoAC
setMax(const bool on)IRArgoAC
setMode(const uint8_t mode)IRArgoAC
setNight(const bool on)IRArgoAC
setPower(const bool on)IRArgoAC
setRaw(const uint8_t state[])IRArgoAC
setRoomTemp(const uint8_t degrees)IRArgoAC
setTemp(const uint8_t degrees)IRArgoAC
setTime(void)IRArgoAC
stateReset(void)IRArgoACprivate
toCommon(void) constIRArgoAC
toCommonFanSpeed(const uint8_t speed)IRArgoACstatic
toCommonMode(const uint8_t mode)IRArgoACstatic
toString(void) constIRArgoAC
validChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)IRArgoACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC.html deleted file mode 100644 index 0cd5ae0ac..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC.html +++ /dev/null @@ -1,1383 +0,0 @@ - - - - - - - -IRremoteESP8266: IRArgoAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Argo A/C messages. - More...

- -

#include <ir_Argo.h>

-
-Collaboration diagram for IRArgoAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRArgoAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kArgoDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the internal state to have the power on. More...
 
void off (void)
 Set the internal state to have the power off. More...
 
void setPower (const bool on)
 Set the internal state to have the desired power. More...
 
bool getPower (void) const
 Get the power setting from the internal state. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setFlap (const uint8_t flap)
 Set the flap position. i.e. Swing. More...
 
uint8_t getFlap (void) const
 Get the flap position. i.e. Swing. More...
 
void setMode (const uint8_t mode)
 Set the desired operation mode. More...
 
uint8_t getMode (void) const
 Get the current operation mode setting. More...
 
void setMax (const bool on)
 Control the current Max setting. (i.e. Turbo) More...
 
bool getMax (void) const
 Is the Max (i.e. Turbo) setting on? More...
 
void setNight (const bool on)
 Turn on/off the Night mode. i.e. Sleep. More...
 
bool getNight (void) const
 Get the status of Night mode. i.e. Sleep. More...
 
void setiFeel (const bool on)
 Turn on/off the iFeel mode. More...
 
bool getiFeel (void) const
 Get the status of iFeel mode. More...
 
void setTime (void)
 Set the time for the A/C. More...
 
void setRoomTemp (const uint8_t degrees)
 Set the value for the current room temperature. More...
 
uint8_t getRoomTemp (void) const
 Get the currently stored value for the room temperature setting. More...
 
uint8_t * getRaw (void)
 Get the raw state of the object, suitable to be sent with the appropriate IRsend object method. More...
 
void setRaw (const uint8_t state[])
 Set the raw state of the object. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kArgoStateLength)
 Verify the checksum is valid for a given state. More...
 
static bool validChecksum (const uint8_t state[], const uint16_t length=kArgoStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internals of the object to a known good state. More...
 
void checksum (void)
 Update the checksum for the internal state. More...
 
- - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
ArgoProtocol _
 
uint8_t flap_mode
 
uint8_t heat_mode
 
uint8_t cool_mode
 
-

Detailed Description

-

Class for handling detailed Argo A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRArgoAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRArgoAC::IRArgoAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRArgoAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRArgoAC::calcChecksum (const uint8_t state[],
const uint16_t length = kArgoStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe size of the state.
-
-
-
Returns
A boolean indicating if it's checksum is valid.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRArgoAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRArgoAC::checksum (void )
-
-private
-
- -

Update the checksum for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRArgoAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRArgoAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRArgoAC::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRArgoAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getFlap()

- -
-
- - - - - - - - -
uint8_t IRArgoAC::getFlap (void ) const
-
- -

Get the flap position. i.e. Swing.

-
Warning
Not yet working!
-
Returns
The current flap setting.
- -
-
- -

◆ getiFeel()

- -
-
- - - - - - - - -
bool IRArgoAC::getiFeel (void ) const
-
- -

Get the status of iFeel mode.

-
Returns
true if on, false if off.
- -
-
- -

◆ getMax()

- -
-
- - - - - - - - -
bool IRArgoAC::getMax (void ) const
-
- -

Is the Max (i.e. Turbo) setting on?

-
Returns
The current value.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRArgoAC::getMode (void ) const
-
- -

Get the current operation mode setting.

-
Returns
The current operation mode.
- -
-
- -

◆ getNight()

- -
-
- - - - - - - - -
bool IRArgoAC::getNight (void ) const
-
- -

Get the status of Night mode. i.e. Sleep.

-
Returns
true if on, false if off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRArgoAC::getPower (void ) const
-
- -

Get the power setting from the internal state.

-
Returns
A boolean indicating the power setting.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRArgoAC::getRaw (void )
-
- -

Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.

-
Returns
A PTR to the internal state.
- -
-
- -

◆ getRoomTemp()

- -
-
- - - - - - - - -
uint8_t IRArgoAC::getRoomTemp (void ) const
-
- -

Get the currently stored value for the room temperature setting.

-
Returns
The current setting for the room temp. in degrees celsius.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRArgoAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRArgoAC::off (void )
-
- -

Set the internal state to have the power off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRArgoAC::on (void )
-
- -

Set the internal state to have the power on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRArgoAC::send (const uint16_t repeat = kArgoDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRArgoAC::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
- -
-
- -

◆ setFlap()

- -
-
- - - - - - - - -
void IRArgoAC::setFlap (const uint8_t flap)
-
- -

Set the flap position. i.e. Swing.

-
Warning
Not yet working!
-
Parameters
- - -
[in]flapThe desired setting.
-
-
- -
-
- -

◆ setiFeel()

- -
-
- - - - - - - - -
void IRArgoAC::setiFeel (const bool on)
-
- -

Turn on/off the iFeel mode.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setMax()

- -
-
- - - - - - - - -
void IRArgoAC::setMax (const bool on)
-
- -

Control the current Max setting. (i.e. Turbo)

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRArgoAC::setMode (const uint8_t mode)
-
- -

Set the desired operation mode.

-
Parameters
- - -
[in]modeThe desired operation mode.
-
-
- -
-
- -

◆ setNight()

- -
-
- - - - - - - - -
void IRArgoAC::setNight (const bool on)
-
- -

Turn on/off the Night mode. i.e. Sleep.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRArgoAC::setPower (const bool on)
-
- -

Set the internal state to have the desired power.

-
Parameters
- - -
[in]onThe desired power state.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRArgoAC::setRaw (const uint8_t state[])
-
- -

Set the raw state of the object.

-
Parameters
- - -
[in]stateThe raw state from the native IR message.
-
-
- -
-
- -

◆ setRoomTemp()

- -
-
- - - - - - - - -
void IRArgoAC::setRoomTemp (const uint8_t degrees)
-
- -

Set the value for the current room temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRArgoAC::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
-
Note
Sending 0 equals +4
- -
-
- -

◆ setTime()

- -
-
- - - - - - - - -
void IRArgoAC::setTime (void )
-
- -

Set the time for the A/C.

-
Warning
Not yet working!
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRArgoAC::stateReset (void )
-
-private
-
- -

Reset the internals of the object to a known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRArgoAC::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRArgoAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRArgoAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRArgoAC::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRArgoAC::validChecksum (const uint8_t state[],
const uint16_t length = kArgoStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe size of the state.
-
-
-
Returns
A boolean indicating if it's checksum is valid.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
ArgoProtocol IRArgoAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRArgoAC::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
- -

◆ cool_mode

- -
-
- - - - - -
- - - - -
uint8_t IRArgoAC::cool_mode
-
-private
-
- -
-
- -

◆ flap_mode

- -
-
- - - - - -
- - - - -
uint8_t IRArgoAC::flap_mode
-
-private
-
- -
-
- -

◆ heat_mode

- -
-
- - - - - -
- - - - -
uint8_t IRArgoAC::heat_mode
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.map deleted file mode 100644 index 527485fe6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.md5 deleted file mode 100644 index 17fc3a47f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e12e8e37c876798fb909662598ebefe9 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.png deleted file mode 100644 index 5e87a8e74..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRArgoAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64-members.html deleted file mode 100644 index aa1db97f7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRCarrierAc64 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRCarrierAc64private
_cancelOffTimer(void)IRCarrierAc64private
_cancelOnTimer(void)IRCarrierAc64private
_irsendIRCarrierAc64private
begin()IRCarrierAc64
calcChecksum(const uint64_t state)IRCarrierAc64static
calibrate(void)IRCarrierAc64inline
checksum(void)IRCarrierAc64private
convertFan(const stdAc::fanspeed_t speed)IRCarrierAc64static
convertMode(const stdAc::opmode_t mode)IRCarrierAc64static
getFan(void) constIRCarrierAc64
getMode(void) constIRCarrierAc64
getOffTimer(void) constIRCarrierAc64
getOnTimer(void) constIRCarrierAc64
getPower(void) constIRCarrierAc64
getRaw(void)IRCarrierAc64
getSleep(void) constIRCarrierAc64
getSwingV(void) constIRCarrierAc64
getTemp(void) constIRCarrierAc64
IRCarrierAc64(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRCarrierAc64explicit
off(void)IRCarrierAc64
on(void)IRCarrierAc64
send(const uint16_t repeat=kCarrierAc64MinRepeat)IRCarrierAc64
setFan(const uint8_t speed)IRCarrierAc64
setMode(const uint8_t mode)IRCarrierAc64
setOffTimer(const uint16_t nr_of_mins)IRCarrierAc64
setOnTimer(const uint16_t nr_of_mins)IRCarrierAc64
setPower(const bool on)IRCarrierAc64
setRaw(const uint64_t state)IRCarrierAc64
setSleep(const bool on)IRCarrierAc64
setSwingV(const bool on)IRCarrierAc64
setTemp(const uint8_t temp)IRCarrierAc64
stateReset()IRCarrierAc64
toCommon(void) constIRCarrierAc64
toCommonFanSpeed(const uint8_t speed)IRCarrierAc64static
toCommonMode(const uint8_t mode)IRCarrierAc64static
toString(void) constIRCarrierAc64
validChecksum(const uint64_t state)IRCarrierAc64static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64.html deleted file mode 100644 index 6b5702369..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64.html +++ /dev/null @@ -1,1228 +0,0 @@ - - - - - - - -IRremoteESP8266: IRCarrierAc64 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Carrier 64 bit A/C messages. - More...

- -

#include <ir_Carrier.h>

-
-Collaboration diagram for IRCarrierAc64:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRCarrierAc64 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset ()
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kCarrierAc64MinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin ()
 Set up hardware to be able to send a message. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setTemp (const uint8_t temp)
 Set the temp in deg C. More...
 
uint8_t getTemp (void) const
 Get the current temperature from the internal state. More...
 
void setSwingV (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingV (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep mode of the A/C. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setOnTimer (const uint16_t nr_of_mins)
 Set the On Timer time. More...
 
uint16_t getOnTimer (void) const
 Get the current On Timer time. More...
 
void setOffTimer (const uint16_t nr_of_mins)
 Set the Off Timer time. More...
 
uint16_t getOffTimer (void) const
 Get the current Off Timer time. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint64_t state)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the A/C state to it's common stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's common stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - - - - -

-Private Member Functions

void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
void _cancelOnTimer (void)
 Clear the On Timer enable bit. More...
 
void _cancelOffTimer (void)
 Clear the Off Timer enable bit. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
CarrierProtocol _
 
-

Detailed Description

-

Class for handling detailed Carrier 64 bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRCarrierAc64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRCarrierAc64::IRCarrierAc64 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _cancelOffTimer()

- -
-
- - - - - -
- - - - - - - - -
void IRCarrierAc64::_cancelOffTimer (void )
-
-private
-
- -

Clear the Off Timer enable bit.

- -
-
- -

◆ _cancelOnTimer()

- -
-
- - - - - -
- - - - - - - - -
void IRCarrierAc64::_cancelOnTimer (void )
-
-private
-
- -

Clear the On Timer enable bit.

- -
-
- -

◆ begin()

- -
-
- - - - - - - -
void IRCarrierAc64::begin ()
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCarrierAc64::calcChecksum (const uint64_t state)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
The 4-bit checksum stored in a uint_8.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRCarrierAc64::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRCarrierAc64::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCarrierAc64::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCarrierAc64::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode into its native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t to be converted to it's native equivalent.
-
-
-
Returns
The corresponding native mode.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRCarrierAc64::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRCarrierAc64::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRCarrierAc64::getOffTimer (void ) const
-
- -

Get the current Off Timer time.

-
Returns
The number of minutes it is set for. 0 means it's off.
-
Note
The A/C protocol only supports one hour increments.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRCarrierAc64::getOnTimer (void ) const
-
- -

Get the current On Timer time.

-
Returns
The number of minutes it is set for. 0 means it's off.
-
Note
The A/C protocol only supports one hour increments.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRCarrierAc64::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRCarrierAc64::getRaw (void )
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRCarrierAc64::getSleep (void ) const
-
- -

Get the Sleep mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRCarrierAc64::getSwingV (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRCarrierAc64::getTemp (void ) const
-
- -

Get the current temperature from the internal state.

-
Returns
The current temperature in Celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRCarrierAc64::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRCarrierAc64::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRCarrierAc64::send (const uint16_t repeat = kCarrierAc64MinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRCarrierAc64::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRCarrierAc64::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRCarrierAc64::setOffTimer (const uint16_t nr_of_mins)
-
- -

Set the Off Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes to set the timer to. (< 60 is disable).
-
-
-
Note
The A/C protocol only supports one hour increments.
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRCarrierAc64::setOnTimer (const uint16_t nr_of_mins)
-
- -

Set the On Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes to set the timer to. (< 60 is disable).
-
-
-
Note
The A/C protocol only supports one hour increments.
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRCarrierAc64::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRCarrierAc64::setRaw (const uint64_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRCarrierAc64::setSleep (const bool on)
-
- -

Set the Sleep mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRCarrierAc64::setSwingV (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRCarrierAc64::setTemp (const uint8_t temp)
-
- -

Set the temp in deg C.

-
Parameters
- - -
[in]tempThe desired temperature in Celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - -
void IRCarrierAc64::stateReset ()
-
- -

Reset the internal state to a fixed known good state.

-
Note
The state is powered off.
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRCarrierAc64::toCommon (void ) const
-
- -

Convert the A/C state to it's common stdAc::state_t equivalent.

-
Returns
A stdAc::state_t state.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRCarrierAc64::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRCarrierAc64::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's common stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operation mode to be converted.
-
-
-
Returns
The corresponding common stdAc::opmode_t mode.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRCarrierAc64::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
The current internal state expressed as a human readable String.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRCarrierAc64::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe array to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
CarrierProtocol IRCarrierAc64::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRCarrierAc64::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.map deleted file mode 100644 index 943025a58..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.md5 deleted file mode 100644 index e7fd24a1f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2e4623e224d33c537e2f2b9dce1ec40a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.png deleted file mode 100644 index 8ef13fbff..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCarrierAc64__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC-members.html deleted file mode 100644 index d7ecd949e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC-members.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRCoolixAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRCoolixACprivate
_irsendIRCoolixACprivate
_savedIRCoolixACprivate
begin(void)IRCoolixAC
calibrate(void)IRCoolixACinline
cleanFlagIRCoolixACprivate
clearSensorTemp(void)IRCoolixAC
convertFan(const stdAc::fanspeed_t speed)IRCoolixACstatic
convertMode(const stdAc::opmode_t mode)IRCoolixACstatic
getClean(void) constIRCoolixAC
getFan(void) constIRCoolixAC
getLed(void) constIRCoolixAC
getMode(void) constIRCoolixAC
getNormalState(void)IRCoolixACprivate
getPower(void) constIRCoolixAC
getRaw(void) constIRCoolixAC
getSensorTemp(void) constIRCoolixAC
getSleep(void) constIRCoolixAC
getSwing(void) constIRCoolixAC
getSwingVStep(void) constIRCoolixAC
getTemp(void) constIRCoolixAC
getTempRaw(void) constIRCoolixACprivate
getTurbo(void) constIRCoolixAC
getZoneFollow(void) constIRCoolixAC
handleSpecialState(const uint32_t data)IRCoolixACprivate
IRCoolixAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRCoolixACexplicit
isSpecialState(void) constIRCoolixACprivate
ledFlagIRCoolixACprivate
off(void)IRCoolixAC
on(void)IRCoolixAC
powerFlagIRCoolixACprivate
recoverSavedState(void)IRCoolixACprivate
savedFanIRCoolixACprivate
send(const uint16_t repeat=kCoolixDefaultRepeat)IRCoolixAC
setClean(void)IRCoolixAC
setFan(const uint8_t speed, const bool modecheck=true)IRCoolixAC
setLed(void)IRCoolixAC
setMode(const uint8_t mode)IRCoolixAC
setPower(const bool on)IRCoolixAC
setRaw(const uint32_t new_code)IRCoolixAC
setSensorTemp(const uint8_t temp)IRCoolixAC
setSensorTempRaw(const uint8_t code)IRCoolixACprivate
setSleep(void)IRCoolixAC
setSwing(void)IRCoolixAC
setSwingVStep(void)IRCoolixAC
setTemp(const uint8_t temp)IRCoolixAC
setTempRaw(const uint8_t code)IRCoolixACprivate
setTurbo(void)IRCoolixAC
setZoneFollow(const bool on)IRCoolixACprivate
sleepFlagIRCoolixACprivate
stateReset(void)IRCoolixAC
swingFlagIRCoolixACprivate
toCommon(const stdAc::state_t *prev=NULL) constIRCoolixAC
toCommonFanSpeed(const uint8_t speed)IRCoolixACstatic
toCommonMode(const uint8_t mode)IRCoolixACstatic
toString(void) constIRCoolixAC
turboFlagIRCoolixACprivate
updateAndSaveState(const uint32_t raw_state)IRCoolixACprivate
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC.html deleted file mode 100644 index 66adf07cf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC.html +++ /dev/null @@ -1,1758 +0,0 @@ - - - - - - - -IRremoteESP8266: IRCoolixAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Coolix A/C messages. - More...

- -

#include <ir_Coolix.h>

-
-Collaboration diagram for IRCoolixAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRCoolixAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kCoolixDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setSensorTemp (const uint8_t temp)
 Set the sensor temperature. More...
 
uint8_t getSensorTemp (void) const
 Get the sensor temperature setting. More...
 
void clearSensorTemp (void)
 Clear the Sensor Temperature setting.. More...
 
void setFan (const uint8_t speed, const bool modecheck=true)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (void)
 Toggle the Swing mode of the A/C. More...
 
bool getSwing (void) const
 Get the Swing setting of the A/C. More...
 
void setSwingVStep (void)
 Set the Vertical Swing Step setting of the A/C. More...
 
bool getSwingVStep (void) const
 Get the Vertical Swing Step setting of the A/C. More...
 
void setSleep (void)
 Toggle the Sleep mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setTurbo (void)
 Toggle the Turbo mode of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setLed (void)
 Toggle the Led (light) mode of the A/C. More...
 
bool getLed (void) const
 Get the Led (light) setting of the A/C. More...
 
void setClean (void)
 Toggle the Clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Clean setting of the A/C. More...
 
bool getZoneFollow (void) const
 Get the Zone Follow setting of the A/C. More...
 
uint32_t getRaw (void) const
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint32_t new_code)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the A/C state to it's common stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's common stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Private Member Functions

void setTempRaw (const uint8_t code)
 Set the raw (native) temperature value. More...
 
uint8_t getTempRaw (void) const
 Get the raw (native) temperature value. More...
 
void setSensorTempRaw (const uint8_t code)
 Set the raw (native) sensor temperature value. More...
 
void setZoneFollow (const bool on)
 Change the Zone Follow setting. More...
 
bool isSpecialState (void) const
 Is the current state is a special state? More...
 
bool handleSpecialState (const uint32_t data)
 Adjust any internal settings based on the type of special state we are supplied. Does nothing if it isn't a special state. More...
 
void updateAndSaveState (const uint32_t raw_state)
 Backup the current internal state as long as it isn't a special state and set the new state. More...
 
void recoverSavedState (void)
 Restore the current internal state from backup as long as it isn't a special state. More...
 
uint32_t getNormalState (void)
 
- - - - - - - - - - - - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
CoolixProtocol _
 The state of the IR remote in IR code form. More...
 
CoolixProtocol _saved
 Copy of the state if we required a special mode. More...
 
bool powerFlag
 
bool turboFlag
 
bool ledFlag
 
bool cleanFlag
 
bool sleepFlag
 
bool swingFlag
 
uint8_t savedFan
 
-

Detailed Description

-

Class for handling detailed Coolix A/C messages.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/484
-

Constructor & Destructor Documentation

- -

◆ IRCoolixAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRCoolixAC::IRCoolixAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRCoolixAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRCoolixAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ clearSensorTemp()

- -
-
- - - - - - - - -
void IRCoolixAC::clearSensorTemp (void )
-
- -

Clear the Sensor Temperature setting..

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoolixAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoolixAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode into its native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t to be converted to it's native equivalent.
-
-
-
Returns
The corresponding native mode.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRCoolixAC::getClean (void ) const
-
- -

Get the Clean setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRCoolixAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getLed()

- -
-
- - - - - - - - -
bool IRCoolixAC::getLed (void ) const
-
- -

Get the Led (light) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRCoolixAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getNormalState()

- -
-
- - - - - -
- - - - - - - - -
uint32_t IRCoolixAC::getNormalState (void )
-
-private
-
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRCoolixAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
There is only an "off" state. Everything else is "on".
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint32_t IRCoolixAC::getRaw (void ) const
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSensorTemp()

- -
-
- - - - - - - - -
uint8_t IRCoolixAC::getSensorTemp (void ) const
-
- -

Get the sensor temperature setting.

-
Returns
The current setting for sensor temp. in degrees celsius.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRCoolixAC::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRCoolixAC::getSwing (void ) const
-
- -

Get the Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVStep()

- -
-
- - - - - - - - -
bool IRCoolixAC::getSwingVStep (void ) const
-
- -

Get the Vertical Swing Step setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRCoolixAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTempRaw()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoolixAC::getTempRaw (void ) const
-
-private
-
- -

Get the raw (native) temperature value.

-
Returns
The native temperature value.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRCoolixAC::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getZoneFollow()

- -
-
- - - - - - - - -
bool IRCoolixAC::getZoneFollow (void ) const
-
- -

Get the Zone Follow setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ handleSpecialState()

- -
-
- - - - - -
- - - - - - - - -
bool IRCoolixAC::handleSpecialState (const uint32_t data)
-
-private
-
- -

Adjust any internal settings based on the type of special state we are supplied. Does nothing if it isn't a special state.

-
Parameters
- - -
[in]dataThe state we need to act upon.
-
-
-
Note
Special state means commands that are not affecting Temperature/Mode/Fan, and they toggle a setting. e.g. Swing Step is not a special state by this definition.
-
Returns
true, if it is a special state. false if it isn't.
- -
-
- -

◆ isSpecialState()

- -
-
- - - - - -
- - - - - - - - -
bool IRCoolixAC::isSpecialState (void ) const
-
-private
-
- -

Is the current state is a special state?

-
Returns
true, if it is. false if it isn't.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRCoolixAC::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRCoolixAC::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ recoverSavedState()

- -
-
- - - - - -
- - - - - - - - -
void IRCoolixAC::recoverSavedState (void )
-
-private
-
- -

Restore the current internal state from backup as long as it isn't a special state.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRCoolixAC::send (const uint16_t repeat = kCoolixDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRCoolixAC::setClean (void )
-
- -

Toggle the Clean mode of the A/C.

- -
-
- -

◆ setFan()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRCoolixAC::setFan (const uint8_t speed,
const bool modecheck = true 
)
-
- -

Set the speed of the fan.

-
Parameters
- - - -
[in]speedThe desired setting.
[in]modecheckDo we enforce any mode limitations before setting?
-
-
- -
-
- -

◆ setLed()

- -
-
- - - - - - - - -
void IRCoolixAC::setLed (void )
-
- -

Toggle the Led (light) mode of the A/C.

- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRCoolixAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRCoolixAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRCoolixAC::setRaw (const uint32_t new_code)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSensorTemp()

- -
-
- - - - - - - - -
void IRCoolixAC::setSensorTemp (const uint8_t temp)
-
- -

Set the sensor temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
-
Warning
Do not send messages with a Sensor Temp more frequently than once per minute, otherwise the A/C unit will ignore them.
- -
-
- -

◆ setSensorTempRaw()

- -
-
- - - - - -
- - - - - - - - -
void IRCoolixAC::setSensorTempRaw (const uint8_t code)
-
-private
-
- -

Set the raw (native) sensor temperature value.

-
Note
Bypasses any checks or additional actions.
-
Parameters
- - -
[in]codeThe desired native sensor temperature.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRCoolixAC::setSleep (void )
-
- -

Toggle the Sleep mode of the A/C.

- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRCoolixAC::setSwing (void )
-
- -

Toggle the Swing mode of the A/C.

- -
-
- -

◆ setSwingVStep()

- -
-
- - - - - - - - -
void IRCoolixAC::setSwingVStep (void )
-
- -

Set the Vertical Swing Step setting of the A/C.

- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRCoolixAC::setTemp (const uint8_t desired)
-
- -

Set the temperature.

-
Parameters
- - -
[in]desiredThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTempRaw()

- -
-
- - - - - -
- - - - - - - - -
void IRCoolixAC::setTempRaw (const uint8_t code)
-
-private
-
- -

Set the raw (native) temperature value.

-
Note
Bypasses any checks.
-
Parameters
- - -
[in]codeThe desired native temperature.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRCoolixAC::setTurbo (void )
-
- -

Toggle the Turbo mode of the A/C.

- -
-
- -

◆ setZoneFollow()

- -
-
- - - - - -
- - - - - - - - -
void IRCoolixAC::setZoneFollow (const bool on)
-
-private
-
- -

Change the Zone Follow setting.

-
Note
Internal use only.
-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRCoolixAC::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRCoolixAC::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the A/C state to it's common stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if required.
-
-
-
Returns
A stdAc::state_t state.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRCoolixAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRCoolixAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's common stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operation mode to be converted.
-
-
-
Returns
The corresponding common stdAc::opmode_t mode.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRCoolixAC::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
The current internal state expressed as a human readable String.
- -
-
- -

◆ updateAndSaveState()

- -
-
- - - - - -
- - - - - - - - -
void IRCoolixAC::updateAndSaveState (const uint32_t raw_state)
-
-private
-
- -

Backup the current internal state as long as it isn't a special state and set the new state.

-
Note
: Must be called before every special state to make sure the internal state is safe.
-
Parameters
- - -
[in]raw_stateA valid raw state/code for this protocol.
-
-
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
CoolixProtocol IRCoolixAC::_
-
-private
-
- -

The state of the IR remote in IR code form.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRCoolixAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _saved

- -
-
- - - - - -
- - - - -
CoolixProtocol IRCoolixAC::_saved
-
-private
-
- -

Copy of the state if we required a special mode.

- -
-
- -

◆ cleanFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::cleanFlag
-
-private
-
- -
-
- -

◆ ledFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::ledFlag
-
-private
-
- -
-
- -

◆ powerFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::powerFlag
-
-private
-
- -
-
- -

◆ savedFan

- -
-
- - - - - -
- - - - -
uint8_t IRCoolixAC::savedFan
-
-private
-
- -
-
- -

◆ sleepFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::sleepFlag
-
-private
-
- -
-
- -

◆ swingFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::swingFlag
-
-private
-
- -
-
- -

◆ turboFlag

- -
-
- - - - - -
- - - - -
bool IRCoolixAC::turboFlag
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.map deleted file mode 100644 index 785b594cf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.md5 deleted file mode 100644 index c4c2ca857..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9a329209544c512673f4745de57d340e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.png deleted file mode 100644 index b4ff74a4d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoolixAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc-members.html deleted file mode 100644 index 95e0d8d87..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc-members.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRCoronaAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRCoronaAcprivate
_getTimer(const uint8_t section) constIRCoronaAcprivate
_irsendIRCoronaAcprivate
_setTimer(const uint8_t section, const uint16_t nr_of_mins)IRCoronaAcprivate
begin()IRCoronaAc
calibrate(void)IRCoronaAcinline
checksum(uint8_t *data)IRCoronaAcprivatestatic
convertFan(const stdAc::fanspeed_t speed)IRCoronaAcstatic
convertMode(const stdAc::opmode_t mode)IRCoronaAcstatic
getEcono(void) constIRCoronaAc
getFan(void) constIRCoronaAc
getMode(void) constIRCoronaAc
getOffTimer(void) constIRCoronaAc
getOnTimer(void) constIRCoronaAc
getPower(void) constIRCoronaAc
getPowerButton(void) constIRCoronaAc
getRaw()IRCoronaAc
getSectionByte(const uint8_t section)IRCoronaAcprivatestatic
getSwingVToggle(void) constIRCoronaAc
getTemp(void) constIRCoronaAc
IRCoronaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRCoronaAcexplicit
off(void)IRCoronaAc
on(void)IRCoronaAc
send(const uint16_t repeat=kNoRepeat)IRCoronaAc
setEcono(const bool on)IRCoronaAc
setFan(const uint8_t speed)IRCoronaAc
setMode(const uint8_t mode)IRCoronaAc
setOffTimer(const uint16_t nr_of_mins)IRCoronaAc
setOnTimer(const uint16_t nr_of_mins)IRCoronaAc
setPower(const bool on)IRCoronaAc
setPowerButton(const bool on)IRCoronaAcprivate
setRaw(const uint8_t new_code[], const uint16_t length=kCoronaAcStateLength)IRCoronaAc
setSwingVToggle(const bool on)IRCoronaAc
setTemp(const uint8_t temp)IRCoronaAc
stateReset()IRCoronaAc
toCommon(void) constIRCoronaAc
toCommonFanSpeed(const uint8_t speed)IRCoronaAcstatic
toCommonMode(const uint8_t mode)IRCoronaAcstatic
toString(void) constIRCoronaAc
validSection(const uint8_t state[], const uint16_t pos, const uint8_t section)IRCoronaAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc.html deleted file mode 100644 index 2709a40e6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc.html +++ /dev/null @@ -1,1347 +0,0 @@ - - - - - - - -IRremoteESP8266: IRCoronaAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Corona A/C messages. - More...

- -

#include <ir_Corona.h>

-
-Collaboration diagram for IRCoronaAc:
-
-
Collaboration graph
- - - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRCoronaAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor for handling detailed Corona A/C messages. More...
 
void stateReset ()
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin ()
 Set up hardware to be able to send a message. More...
 
void setPower (const bool on)
 Change the power setting. (in practice Standby, remote power) More...
 
bool getPower (void) const
 Get the current power setting. (in practice Standby, remote power) More...
 
bool getPowerButton (void) const
 Get the value of the current power button setting. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setTemp (const uint8_t temp)
 Set the temp in deg C. More...
 
uint8_t getTemp (void) const
 Get the current temperature from the internal state. More...
 
void setSwingVToggle (const bool on)
 Set the Vertical Swing toggle setting. More...
 
bool getSwingVToggle (void) const
 Get the Vertical Swing toggle setting. More...
 
void setFan (const uint8_t speed)
 Set the operating speed of the A/C Fan. More...
 
uint8_t getFan (void) const
 Get the operating speed of the A/C Fan. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setEcono (const bool on)
 Change the powersave setting. More...
 
bool getEcono (void) const
 Get the value of the current powersave setting. More...
 
void setOnTimer (const uint16_t nr_of_mins)
 Set the On Timer time. More...
 
uint16_t getOnTimer (void) const
 Get the current On Timer time. More...
 
void setOffTimer (const uint16_t nr_of_mins)
 Set the Off Timer time. More...
 
uint16_t getOffTimer (void) const
 Get the current Off Timer time. More...
 
uint8_t * getRaw ()
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kCoronaAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the A/C state to it's common stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validSection (const uint8_t state[], const uint16_t pos, const uint8_t section)
 Check that a CoronaAc Section part is valid with section byte and inverted. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a standard A/C Fan speed into its native fan speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's common stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed to it's common equivalent. More...
 
- - - - - - - - - - -

-Private Member Functions

void setPowerButton (const bool on)
 Change the power button setting. More...
 
void _setTimer (const uint8_t section, const uint16_t nr_of_mins)
 Set the Timer time. More...
 
uint16_t _getTimer (const uint8_t section) const
 Get the current Timer time. More...
 
- - - - - - - -

-Static Private Member Functions

static uint8_t getSectionByte (const uint8_t section)
 Get the byte that identifies the section. More...
 
static void checksum (uint8_t *data)
 Calculate and set the check values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
CoronaProtocol _
 
-

Detailed Description

-

Class for handling detailed Corona A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRCoronaAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRCoronaAc::IRCoronaAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor for handling detailed Corona A/C messages.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _getTimer()

- -
-
- - - - - -
- - - - - - - - -
uint16_t IRCoronaAc::_getTimer (const uint8_t section) const
-
-private
-
- -

Get the current Timer time.

-
Returns
The number of minutes it is set for. 0 means it's off.
-
Note
The A/C protocol supports 2 second increments
- -
-
- -

◆ _setTimer()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRCoronaAc::_setTimer (const uint8_t section,
const uint16_t nr_of_mins 
)
-
-private
-
- -

Set the Timer time.

-
Parameters
- - - -
[in]sectionindex of section, used for offset.
[in]nr_of_minsNumber of minutes to set the timer to. (non in range value is disable). Valid is from 1 minute to 12 hours
-
-
- -
-
- -

◆ begin()

- -
-
- - - - - - - -
void IRCoronaAc::begin ()
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRCoronaAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRCoronaAc::checksum (uint8_t * data)
-
-staticprivate
-
- -

Calculate and set the check values for the internal state.

-
Parameters
- - -
[in,out]dataThe array to be modified
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoronaAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a standard A/C Fan speed into its native fan speed.

-
Parameters
- - -
[in]speedThe desired stdAc::fanspeed_t fan speed
-
-
-
Returns
The given fan speed in native format
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoronaAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode into its native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t mode to be converted to it's native equivalent
-
-
-
Returns
The corresponding native mode.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRCoronaAc::getEcono (void ) const
-
- -

Get the value of the current powersave setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRCoronaAc::getFan (void ) const
-
- -

Get the operating speed of the A/C Fan.

-
Returns
The current operating fan speed setting
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRCoronaAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRCoronaAc::getOffTimer (void ) const
-
- -

Get the current Off Timer time.

-
Returns
The number of minutes it is set for. 0 means it's off.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRCoronaAc::getOnTimer (void ) const
-
- -

Get the current On Timer time.

-
Returns
The number of minutes it is set for. 0 means it's off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRCoronaAc::getPower (void ) const
-
- -

Get the current power setting. (in practice Standby, remote power)

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerButton()

- -
-
- - - - - - - - -
bool IRCoronaAc::getPowerButton (void ) const
-
- -

Get the value of the current power button setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - -
uint8_t * IRCoronaAc::getRaw ()
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A Ptr to a valid code for this protocol based on the current internal state.
-
Note
To get stable AC state, if no timers, send once without PowerButton set, and once with
- -
-
- -

◆ getSectionByte()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRCoronaAc::getSectionByte (const uint8_t section)
-
-staticprivate
-
- -

Get the byte that identifies the section.

-
Parameters
- - -
[in]sectionIndex of the section 0-2, 3 and above is used as the special case for short message
-
-
-
Returns
The byte used for the section
- -
-
- -

◆ getSwingVToggle()

- -
-
- - - - - - - - -
bool IRCoronaAc::getSwingVToggle (void ) const
-
- -

Get the Vertical Swing toggle setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRCoronaAc::getTemp (void ) const
-
- -

Get the current temperature from the internal state.

-
Returns
The current temperature in Celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRCoronaAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRCoronaAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRCoronaAc::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRCoronaAc::setEcono (const bool on)
-
- -

Change the powersave setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRCoronaAc::setFan (const uint8_t speed)
-
- -

Set the operating speed of the A/C Fan.

-
Parameters
- - -
[in]speedThe desired fan speed
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRCoronaAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRCoronaAc::setOffTimer (const uint16_t nr_of_mins)
-
- -

Set the Off Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes to set the timer to. (0 or kCoronaAcTimerOff is disable).
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRCoronaAc::setOnTimer (const uint16_t nr_of_mins)
-
- -

Set the On Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes to set the timer to. (0 or kCoronaAcTimerOff is disable).
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRCoronaAc::setPower (const bool on)
-
- -

Change the power setting. (in practice Standby, remote power)

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
If changed, setPowerButton is also needed, unless timer is or was active
- -
-
- -

◆ setPowerButton()

- -
-
- - - - - -
- - - - - - - - -
void IRCoronaAc::setPowerButton (const bool on)
-
-private
-
- -

Change the power button setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
this sets that the AC should set power, use setPower to define if the AC should end up as on or off When no timer is active, the below is a truth table With AC On, a command with setPower and setPowerButton gives nothing With AC On, a command with setPower but not setPowerButton is ok With AC Off, a command with setPower but not setPowerButton gives nothing With AC Off, a command with setPower and setPowerButton is ok
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRCoronaAc::setRaw (const uint8_t new_code[],
const uint16_t length = kCoronaAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid state for this protocol.
[in]lengthof the new_code array.
-
-
- -
-
- -

◆ setSwingVToggle()

- -
-
- - - - - - - - -
void IRCoronaAc::setSwingVToggle (const bool on)
-
- -

Set the Vertical Swing toggle setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
This is a button press, and not a state after sending it once you should turn it off
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRCoronaAc::setTemp (const uint8_t temp)
-
- -

Set the temp in deg C.

-
Parameters
- - -
[in]tempThe desired temperature in Celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - -
void IRCoronaAc::stateReset ()
-
- -

Reset the internal state to a fixed known good state.

-
Note
The state is powered off.
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRCoronaAc::toCommon (void ) const
-
- -

Convert the A/C state to it's common stdAc::state_t equivalent.

-
Returns
A stdAc::state_t state.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRCoronaAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed to it's common equivalent.

-
Parameters
- - -
[in]speedThe desired native fan speed
-
-
-
Returns
The given fan speed in stdAc::fanspeed_t format
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRCoronaAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's common stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operation mode to be converted.
-
-
-
Returns
The corresponding common stdAc::opmode_t mode.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRCoronaAc::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
The current internal state expressed as a human readable String.
- -
-
- -

◆ validSection()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool IRCoronaAc::validSection (const uint8_t state[],
const uint16_t pos,
const uint8_t section 
)
-
-static
-
- -

Check that a CoronaAc Section part is valid with section byte and inverted.

-
Parameters
- - - - -
[in]stateAn array of bytes containing the section
[in]posWhere to start in the state array
[in]sectionWhich section to work with Used to get the section byte, and is validated against pos
-
-
-
Returns
true if section is valid, otherwise false
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
CoronaProtocol IRCoronaAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRCoronaAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.map deleted file mode 100644 index 168276594..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.md5 deleted file mode 100644 index fb97bda85..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -31282e6b641cb194a9f40029c86faf02 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.png deleted file mode 100644 index 908f934cc..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRCoronaAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128-members.html deleted file mode 100644 index 8da75efcf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin128 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin128private
_irsendIRDaikin128private
begin(void)IRDaikin128
calcFirstChecksum(const uint8_t state[])IRDaikin128privatestatic
calcSecondChecksum(const uint8_t state[])IRDaikin128privatestatic
calibrate(void)IRDaikin128inline
checksum(void)IRDaikin128private
convertFan(const stdAc::fanspeed_t speed)IRDaikin128static
convertMode(const stdAc::opmode_t mode)IRDaikin128static
getClock(void) constIRDaikin128
getEcono(void) constIRDaikin128
getFan(void) constIRDaikin128
getLightToggle(void) constIRDaikin128
getMode(void) constIRDaikin128
getOffTimer(void) constIRDaikin128
getOffTimerEnabled(void) constIRDaikin128
getOnTimer(void) constIRDaikin128
getOnTimerEnabled(void) constIRDaikin128
getPowerful(void) constIRDaikin128
getPowerToggle(void) constIRDaikin128
getQuiet(void) constIRDaikin128
getRaw(void)IRDaikin128
getSleep(void) constIRDaikin128
getSwingVertical(void) constIRDaikin128
getTemp(void) constIRDaikin128
IRDaikin128(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin128explicit
send(const uint16_t repeat=kDaikin128DefaultRepeat)IRDaikin128
setClock(const uint16_t mins_since_midnight)IRDaikin128
setEcono(const bool on)IRDaikin128
setFan(const uint8_t fan)IRDaikin128
setLightToggle(const uint8_t unit_type)IRDaikin128
setMode(const uint8_t mode)IRDaikin128
setOffTimer(const uint16_t mins_since_midnight)IRDaikin128
setOffTimerEnabled(const bool on)IRDaikin128
setOnTimer(const uint16_t mins_since_midnight)IRDaikin128
setOnTimerEnabled(const bool on)IRDaikin128
setPowerful(const bool on)IRDaikin128
setPowerToggle(const bool toggle)IRDaikin128
setQuiet(const bool on)IRDaikin128
setRaw(const uint8_t new_code[])IRDaikin128
setSleep(const bool on)IRDaikin128
setSwingVertical(const bool on)IRDaikin128
setTemp(const uint8_t temp)IRDaikin128
stateReset(void)IRDaikin128private
toCommon(const stdAc::state_t *prev=NULL) constIRDaikin128
toCommonFanSpeed(const uint8_t speed)IRDaikin128static
toCommonMode(const uint8_t mode)IRDaikin128static
toString(void) constIRDaikin128
validChecksum(uint8_t state[])IRDaikin128static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128.html deleted file mode 100644 index 63a926eef..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128.html +++ /dev/null @@ -1,1526 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin128 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 128-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin128:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin128 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin128DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setPowerToggle (const bool toggle)
 Set the Power toggle setting of the A/C. More...
 
bool getPowerToggle (void) const
 Get the Power toggle setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
void setSwingVertical (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep mode of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) mode of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
void setOnTimer (const uint16_t mins_since_midnight)
 Set the On Timer time for the A/C unit. More...
 
uint16_t getOnTimer (void) const
 Get the On Timer time to be sent to the A/C unit. More...
 
bool getOnTimerEnabled (void) const
 Get the enable status of the On Timer. More...
 
void setOnTimerEnabled (const bool on)
 Set the enable status of the On Timer. More...
 
void setOffTimer (const uint16_t mins_since_midnight)
 Set the Off Timer time for the A/C unit. More...
 
uint16_t getOffTimer (void) const
 Get the Off Timer time to be sent to the A/C unit. More...
 
bool getOffTimerEnabled (void) const
 Get the enable status of the Off Timer. More...
 
void setOffTimerEnabled (const bool on)
 Set the enable status of the Off Timer. More...
 
void setClock (const uint16_t mins_since_midnight)
 Set the clock on the A/C unit. More...
 
uint16_t getClock (void) const
 Get the clock time to be sent to the A/C unit. More...
 
void setLightToggle (const uint8_t unit_type)
 Set the Light toggle setting of the A/C. More...
 
uint8_t getLightToggle (void) const
 Get the Light toggle setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[])
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - -

-Static Private Member Functions

static uint8_t calcFirstChecksum (const uint8_t state[])
 
static uint8_t calcSecondChecksum (const uint8_t state[])
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin128Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 128-bit A/C messages.

-
Note
Code by crankyoldgit. Analysis by Daniel Vena
-

Constructor & Destructor Documentation

- -

◆ IRDaikin128()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin128::IRDaikin128 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin128::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcFirstChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin128::calcFirstChecksum (const uint8_t state[])
-
-staticprivate
-
- -
-
- -

◆ calcSecondChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin128::calcSecondChecksum (const uint8_t state[])
-
-staticprivate
-
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin128::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin128::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin128::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin128::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint16_t IRDaikin128::getClock (void ) const
-
- -

Get the clock time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRDaikin128::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin128::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getLightToggle()

- -
-
- - - - - - - - -
uint8_t IRDaikin128::getLightToggle (void ) const
-
- -

Get the Light toggle setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin128::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRDaikin128::getOffTimer (void ) const
-
- -

Get the Off Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikin128::getOffTimerEnabled (void ) const
-
- -

Get the enable status of the Off Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRDaikin128::getOnTimer (void ) const
-
- -

Get the On Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikin128::getOnTimerEnabled (void ) const
-
- -

Get the enable status of the On Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRDaikin128::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - - -
bool IRDaikin128::getPowerToggle (void ) const
-
- -

Get the Power toggle setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikin128::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin128::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRDaikin128::getSleep (void ) const
-
- -

Get the Sleep mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRDaikin128::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin128::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin128::send (const uint16_t repeat = kDaikin128DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IRDaikin128::setClock (const uint16_t mins_since_midnight)
-
- -

Set the clock on the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRDaikin128::setEcono (const bool on)
-
- -

Set the Economy mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin128::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setLightToggle()

- -
-
- - - - - - - - -
void IRDaikin128::setLightToggle (const uint8_t unit)
-
- -

Set the Light toggle setting of the A/C.

-
Parameters
- - -
[in]unitDevice to show the LED (Light) Display info about.
-
-
-
Note
0 is off.
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin128::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRDaikin128::setOffTimer (const uint16_t mins_since_midnight)
-
- -

Set the Off Timer time for the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setOffTimerEnabled()

- -
-
- - - - - - - - -
void IRDaikin128::setOffTimerEnabled (const bool on)
-
- -

Set the enable status of the Off Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRDaikin128::setOnTimer (const uint16_t mins_since_midnight)
-
- -

Set the On Timer time for the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setOnTimerEnabled()

- -
-
- - - - - - - - -
void IRDaikin128::setOnTimerEnabled (const bool on)
-
- -

Set the enable status of the On Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRDaikin128::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRDaikin128::setPowerToggle (const bool toggle)
-
- -

Set the Power toggle setting of the A/C.

-
Parameters
- - -
[in]toggletrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikin128::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin128::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRDaikin128::setSleep (const bool on)
-
- -

Set the Sleep mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikin128::setSwingVertical (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin128::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin128::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin128::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to a previous state.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRDaikin128::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRDaikin128::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin128::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRDaikin128::validChecksum (uint8_t state[])
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe array to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin128Protocol IRDaikin128::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin128::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.map deleted file mode 100644 index 2e6c96512..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.md5 deleted file mode 100644 index bc41b63cb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f3fab669ea3ebe638c76d8966953ea84 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.png deleted file mode 100644 index 6847ef996..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin128__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152-members.html deleted file mode 100644 index b6e1b6098..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin152 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin152private
_irsendIRDaikin152private
begin(void)IRDaikin152
calibrate(void)IRDaikin152inline
checksum(void)IRDaikin152private
convertFan(const stdAc::fanspeed_t speed)IRDaikin152static
convertMode(const stdAc::opmode_t mode)IRDaikin152static
getComfort(void) constIRDaikin152
getEcono(void) constIRDaikin152
getFan(void) constIRDaikin152
getMode(void) constIRDaikin152
getPower(void) constIRDaikin152
getPowerful(void) constIRDaikin152
getQuiet(void) constIRDaikin152
getRaw(void)IRDaikin152
getSensor(void) constIRDaikin152
getSwingV(void) constIRDaikin152
getTemp(void) constIRDaikin152
IRDaikin152(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin152explicit
off(void)IRDaikin152
on(void)IRDaikin152
send(const uint16_t repeat=kDaikin152DefaultRepeat)IRDaikin152
setComfort(const bool on)IRDaikin152
setEcono(const bool on)IRDaikin152
setFan(const uint8_t fan)IRDaikin152
setMode(const uint8_t mode)IRDaikin152
setPower(const bool on)IRDaikin152
setPowerful(const bool on)IRDaikin152
setQuiet(const bool on)IRDaikin152
setRaw(const uint8_t new_code[])IRDaikin152
setSensor(const bool on)IRDaikin152
setSwingV(const bool on)IRDaikin152
setTemp(const uint8_t temp)IRDaikin152
stateReset(void)IRDaikin152private
toCommon(void) constIRDaikin152
toString(void) constIRDaikin152
validChecksum(uint8_t state[], const uint16_t length=kDaikin152StateLength)IRDaikin152static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152.html deleted file mode 100644 index df4ba965b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152.html +++ /dev/null @@ -1,1175 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin152 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 152-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin152:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin152 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin152DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingV (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingV (void) const
 Get the Vertical Swing mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) mode of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) mode of the A/C. More...
 
void setSensor (const bool on)
 Set the Sensor mode of the A/C. More...
 
bool getSensor (void) const
 Get the Sensor mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
void setComfort (const bool on)
 Set the Comfort mode of the A/C. More...
 
bool getComfort (void) const
 Get the Comfort mode of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikin152StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin152Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 152-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikin152()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin152::IRDaikin152 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin152::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin152::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin152::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin152::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin152::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getComfort()

- -
-
- - - - - - - - -
bool IRDaikin152::getComfort (void ) const
-
- -

Get the Comfort mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRDaikin152::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin152::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin152::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikin152::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRDaikin152::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikin152::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin152::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSensor()

- -
-
- - - - - - - - -
bool IRDaikin152::getSensor (void ) const
-
- -

Get the Sensor mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRDaikin152::getSwingV (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin152::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikin152::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikin152::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin152::send (const uint16_t repeat = kDaikin152DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setComfort()

- -
-
- - - - - - - - -
void IRDaikin152::setComfort (const bool on)
-
- -

Set the Comfort mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRDaikin152::setEcono (const bool on)
-
- -

Set the Economy mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin152::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1-5 or kDaikinFanAuto or kDaikinFanQuiet
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin152::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikin152::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRDaikin152::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikin152::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin152::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSensor()

- -
-
- - - - - - - - -
void IRDaikin152::setSensor (const bool on)
-
- -

Set the Sensor mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRDaikin152::setSwingV (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin152::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin152::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin152::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin152::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikin152::validChecksum (uint8_t state[],
const uint16_t length = kDaikin152StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin152Protocol IRDaikin152::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin152::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.map deleted file mode 100644 index e18fa3898..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.md5 deleted file mode 100644 index 67b23b449..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -305b7292b21599fb3222ff51764cbd74 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.png deleted file mode 100644 index 3f403444a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin152__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160-members.html deleted file mode 100644 index 4fceb18af..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin160 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin160private
_irsendIRDaikin160private
begin(void)IRDaikin160
calibrate(void)IRDaikin160inline
checksum(void)IRDaikin160private
convertFan(const stdAc::fanspeed_t speed)IRDaikin160static
convertMode(const stdAc::opmode_t mode)IRDaikin160static
convertSwingV(const stdAc::swingv_t position)IRDaikin160static
getFan(void) constIRDaikin160
getMode(void) constIRDaikin160
getPower(void) constIRDaikin160
getRaw(void)IRDaikin160
getSwingVertical(void) constIRDaikin160
getTemp(void) constIRDaikin160
IRDaikin160(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin160explicit
off(void)IRDaikin160
on(void)IRDaikin160
send(const uint16_t repeat=kDaikin160DefaultRepeat)IRDaikin160
setFan(const uint8_t fan)IRDaikin160
setMode(const uint8_t mode)IRDaikin160
setPower(const bool on)IRDaikin160
setRaw(const uint8_t new_code[])IRDaikin160
setSwingVertical(const uint8_t position)IRDaikin160
setTemp(const uint8_t temp)IRDaikin160
stateReset(void)IRDaikin160private
toCommon(void) constIRDaikin160
toCommonSwingV(const uint8_t setting)IRDaikin160static
toString(void) constIRDaikin160
validChecksum(uint8_t state[], const uint16_t length=kDaikin160StateLength)IRDaikin160static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160.html deleted file mode 100644 index 59f782bc1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin160 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 160-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin160:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin160 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin160DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setSwingVertical (const uint8_t position)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikin160StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t setting)
 Convert a native vertical swing postion to it's common equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin160Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 160-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikin160()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin160::IRDaikin160 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin160::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin160::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin160::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin160::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin160::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin160::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin160::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin160::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikin160::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin160::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRDaikin160::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin160::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikin160::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikin160::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin160::send (const uint16_t repeat = kDaikin160DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin160::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1-5 or kDaikinFanAuto or kDaikinFanQuiet
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin160::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikin160::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin160::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikin160::setSwingVertical (const uint8_t position)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin160::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin160::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin160::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRDaikin160::toCommonSwingV (const uint8_t setting)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]settingA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin160::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikin160::validChecksum (uint8_t state[],
const uint16_t length = kDaikin160StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin160Protocol IRDaikin160::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin160::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.map deleted file mode 100644 index b611735f9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.md5 deleted file mode 100644 index 0138df616..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -220227e53776ca88c6c2c39857725c26 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.png deleted file mode 100644 index 52ef8cd71..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin160__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176-members.html deleted file mode 100644 index 801b59bee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin176 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin176private
_irsendIRDaikin176private
_saved_tempIRDaikin176private
begin(void)IRDaikin176
calibrate(void)IRDaikin176inline
checksum(void)IRDaikin176private
convertFan(const stdAc::fanspeed_t speed)IRDaikin176static
convertMode(const stdAc::opmode_t mode)IRDaikin176static
convertSwingH(const stdAc::swingh_t position)IRDaikin176static
getFan(void) constIRDaikin176
getMode(void) constIRDaikin176
getPower(void) constIRDaikin176
getRaw(void)IRDaikin176
getSwingHorizontal(void) constIRDaikin176
getTemp(void) constIRDaikin176
IRDaikin176(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin176explicit
off(void)IRDaikin176
on(void)IRDaikin176
send(const uint16_t repeat=kDaikin176DefaultRepeat)IRDaikin176
setFan(const uint8_t fan)IRDaikin176
setMode(const uint8_t mode)IRDaikin176
setPower(const bool on)IRDaikin176
setRaw(const uint8_t new_code[])IRDaikin176
setSwingHorizontal(const uint8_t position)IRDaikin176
setTemp(const uint8_t temp)IRDaikin176
stateReset(void)IRDaikin176private
toCommon(void) constIRDaikin176
toCommonFanSpeed(const uint8_t speed)IRDaikin176static
toCommonMode(const uint8_t mode)IRDaikin176static
toCommonSwingH(const uint8_t setting)IRDaikin176static
toString(void) constIRDaikin176
validChecksum(uint8_t state[], const uint16_t length=kDaikin176StateLength)IRDaikin176static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176.html deleted file mode 100644 index a7fc225ba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176.html +++ /dev/null @@ -1,1089 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin176 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 176-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin176:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin176 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin176DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off.. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setSwingHorizontal (const uint8_t position)
 Set the Horizontal Swing mode of the A/C. More...
 
uint8_t getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikin176StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t setting)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin176Protocol _
 
uint8_t _saved_temp
 The previously user requested temp value. More...
 
-

Detailed Description

-

Class for handling detailed Daikin 176-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikin176()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin176::IRDaikin176 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin176::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin176::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin176::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin176::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin176::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin176::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin176::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin176::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikin176::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin176::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
uint8_t IRDaikin176::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin176::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikin176::off (void )
-
- -

Change the power setting to Off..

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikin176::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin176::send (const uint16_t repeat = kDaikin176DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin176::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1 for Min or 3 for Max
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin176::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikin176::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin176::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRDaikin176::setSwingHorizontal (const uint8_t position)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin176::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin176::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin176::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRDaikin176::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRDaikin176::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRDaikin176::toCommonSwingH (const uint8_t setting)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]settingA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin176::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikin176::validChecksum (uint8_t state[],
const uint16_t length = kDaikin176StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin176Protocol IRDaikin176::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin176::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
- -

◆ _saved_temp

- -
-
- - - - - -
- - - - -
uint8_t IRDaikin176::_saved_temp
-
-private
-
- -

The previously user requested temp value.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.map deleted file mode 100644 index d1dc49e1e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.md5 deleted file mode 100644 index 59cdf79a4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -033789d9f6d28bbeaee488c1d243f76e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.png deleted file mode 100644 index 718d38c71..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin176__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2-members.html deleted file mode 100644 index 4c5f0f23d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2-members.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin2 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin2private
_irsendIRDaikin2private
begin(void)IRDaikin2
calibrate(void)IRDaikin2inline
checksum(void)IRDaikin2private
clearOnTimerFlag(void)IRDaikin2private
clearSleepTimerFlag(void)IRDaikin2private
convertFan(const stdAc::fanspeed_t speed)IRDaikin2static
convertMode(const stdAc::opmode_t mode)IRDaikin2static
convertSwingH(const stdAc::swingh_t position)IRDaikin2static
convertSwingV(const stdAc::swingv_t position)IRDaikin2static
disableOffTimer(void)IRDaikin2
disableOnTimer(void)IRDaikin2
disableSleepTimer(void)IRDaikin2
enableOffTimer(const uint16_t endtime)IRDaikin2
enableOnTimer(const uint16_t starttime)IRDaikin2
enableSleepTimer(const uint16_t sleeptime)IRDaikin2
getBeep(void) constIRDaikin2
getClean(void) constIRDaikin2
getCurrentTime(void) constIRDaikin2
getEcono(void) constIRDaikin2
getEye(void) constIRDaikin2
getEyeAuto(void) constIRDaikin2
getFan(void) constIRDaikin2
getFreshAir(void) constIRDaikin2
getFreshAirHigh(void) constIRDaikin2
getLight(void) constIRDaikin2
getMode(void) constIRDaikin2
getMold(void) constIRDaikin2
getOffTime(void) constIRDaikin2
getOffTimerEnabled(void) constIRDaikin2
getOnTime(void) constIRDaikin2
getOnTimerEnabled(void) constIRDaikin2
getPower(void) constIRDaikin2
getPowerful(void) constIRDaikin2
getPurify(void) constIRDaikin2
getQuiet(void) constIRDaikin2
getRaw(void)IRDaikin2
getSleepTime(void) constIRDaikin2
getSleepTimerEnabled(void) constIRDaikin2
getSwingHorizontal(void) constIRDaikin2
getSwingVertical(void) constIRDaikin2
getTemp(void) constIRDaikin2
IRDaikin2(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin2explicit
off(void)IRDaikin2
on(void)IRDaikin2
send(const uint16_t repeat=kDaikin2DefaultRepeat)IRDaikin2
setBeep(const uint8_t beep)IRDaikin2
setClean(const bool on)IRDaikin2
setCurrentTime(const uint16_t time)IRDaikin2
setEcono(const bool on)IRDaikin2
setEye(const bool on)IRDaikin2
setEyeAuto(const bool on)IRDaikin2
setFan(const uint8_t fan)IRDaikin2
setFreshAir(const bool on)IRDaikin2
setFreshAirHigh(const bool on)IRDaikin2
setLight(const uint8_t light)IRDaikin2
setMode(const uint8_t mode)IRDaikin2
setMold(const bool on)IRDaikin2
setPower(const bool state)IRDaikin2
setPowerful(const bool on)IRDaikin2
setPurify(const bool on)IRDaikin2
setQuiet(const bool on)IRDaikin2
setRaw(const uint8_t new_code[])IRDaikin2
setSwingHorizontal(const uint8_t position)IRDaikin2
setSwingVertical(const uint8_t position)IRDaikin2
setTemp(const uint8_t temp)IRDaikin2
stateReset(void)IRDaikin2private
toCommon(void) constIRDaikin2
toCommonSwingH(const uint8_t setting)IRDaikin2static
toCommonSwingV(const uint8_t setting)IRDaikin2static
toString(void) constIRDaikin2
validChecksum(uint8_t state[], const uint16_t length=kDaikin2StateLength)IRDaikin2static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2.html deleted file mode 100644 index 9ba417824..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2.html +++ /dev/null @@ -1,2169 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin2 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 312-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin2:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin2 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin2DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool state)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
void setSwingVertical (const uint8_t position)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingHorizontal (const uint8_t position)
 Set the Horizontal Swing mode of the A/C. More...
 
uint8_t getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) mode of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
void setEye (const bool on)
 Set the Eye (Sensor) mode of the A/C. More...
 
bool getEye (void) const
 Get the Eye (Sensor) mode status of the A/C. More...
 
void setEyeAuto (const bool on)
 Set the Automatic Eye (Sensor) mode of the A/C. More...
 
bool getEyeAuto (void) const
 Get the Automaitc Eye (Sensor) mode status of the A/C. More...
 
void setPurify (const bool on)
 Set the Purify (Filter) mode of the A/C. More...
 
bool getPurify (void) const
 Get the Purify (Filter) mode status of the A/C. More...
 
void setMold (const bool on)
 Set the Mould (filter) mode of the A/C. More...
 
bool getMold (void) const
 Get the Mould (filter) mode status of the A/C. More...
 
void enableOnTimer (const uint16_t starttime)
 Set the enable status & time of the On Timer. More...
 
void disableOnTimer (void)
 Disable the On timer. More...
 
uint16_t getOnTime (void) const
 Get the On Timer time to be sent to the A/C unit. More...
 
bool getOnTimerEnabled (void) const
 Get the enable status of the On Timer. More...
 
void enableSleepTimer (const uint16_t sleeptime)
 Set the enable status & time of the Sleep Timer. More...
 
void disableSleepTimer (void)
 Disable the sleep timer. More...
 
uint16_t getSleepTime (void) const
 Get the Sleep Timer time to be sent to the A/C unit. More...
 
bool getSleepTimerEnabled (void) const
 Get the Sleep timer enabled status of the A/C. More...
 
void enableOffTimer (const uint16_t endtime)
 Set the enable status & time of the Off Timer. More...
 
void disableOffTimer (void)
 Disable the Off timer. More...
 
uint16_t getOffTime (void) const
 Get the Off Timer time to be sent to the A/C unit. More...
 
bool getOffTimerEnabled (void) const
 Get the enable status of the Off Timer. More...
 
void setCurrentTime (const uint16_t time)
 Set the clock on the A/C unit. More...
 
uint16_t getCurrentTime (void) const
 Get the clock time to be sent to the A/C unit. More...
 
void setBeep (const uint8_t beep)
 Set the Beep mode of the A/C. More...
 
uint8_t getBeep (void) const
 Get the Beep status of the A/C. More...
 
void setLight (const uint8_t light)
 Set the Light (LED) mode of the A/C. More...
 
uint8_t getLight (void) const
 Get the Light status of the A/C. More...
 
void setClean (const bool on)
 Set the Auto clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Auto Clean mode status of the A/C. More...
 
void setFreshAir (const bool on)
 Set the Fresh Air mode of the A/C. More...
 
bool getFreshAir (void) const
 Get the Fresh Air mode status of the A/C. More...
 
void setFreshAirHigh (const bool on)
 Set the (High) Fresh Air mode of the A/C. More...
 
bool getFreshAirHigh (void) const
 Get the (High) Fresh Air mode status of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikin2StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t setting)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t setting)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - - - - - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
void clearOnTimerFlag (void)
 Clear the On Timer flag. More...
 
void clearSleepTimerFlag (void)
 Clear the sleep timer flag. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin2Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 312-bit A/C messages.

-
Note
Code by crankyoldgit, Reverse engineering analysis by sheppy99
-

Constructor & Destructor Documentation

- -

◆ IRDaikin2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin2::IRDaikin2 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin2::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin2::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin2::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ clearOnTimerFlag()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin2::clearOnTimerFlag (void )
-
-private
-
- -

Clear the On Timer flag.

- -
-
- -

◆ clearSleepTimerFlag()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin2::clearSleepTimerFlag (void )
-
-private
-
- -

Clear the sleep timer flag.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin2::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin2::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin2::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin2::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ disableOffTimer()

- -
-
- - - - - - - - -
void IRDaikin2::disableOffTimer (void )
-
- -

Disable the Off timer.

- -
-
- -

◆ disableOnTimer()

- -
-
- - - - - - - - -
void IRDaikin2::disableOnTimer (void )
-
- -

Disable the On timer.

- -
-
- -

◆ disableSleepTimer()

- -
-
- - - - - - - - -
void IRDaikin2::disableSleepTimer (void )
-
- -

Disable the sleep timer.

- -
-
- -

◆ enableOffTimer()

- -
-
- - - - - - - - -
void IRDaikin2::enableOffTimer (const uint16_t endtime)
-
- -

Set the enable status & time of the Off Timer.

-
Parameters
- - -
[in]endtimeThe number of minutes past midnight.
-
-
- -
-
- -

◆ enableOnTimer()

- -
-
- - - - - - - - -
void IRDaikin2::enableOnTimer (const uint16_t starttime)
-
- -

Set the enable status & time of the On Timer.

-
Parameters
- - -
[in]starttimeThe number of minutes past midnight.
-
-
-
Note
Timer location is shared with sleep timer.
- -
-
- -

◆ enableSleepTimer()

- -
-
- - - - - - - - -
void IRDaikin2::enableSleepTimer (const uint16_t sleeptime)
-
- -

Set the enable status & time of the Sleep Timer.

-
Parameters
- - -
[in]sleeptimeThe number of minutes past midnight.
-
-
-
Note
The Timer location is shared with On Timer.
- -
-
- -

◆ getBeep()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getBeep (void ) const
-
- -

Get the Beep status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRDaikin2::getClean (void ) const
-
- -

Get the Auto Clean mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getCurrentTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin2::getCurrentTime (void ) const
-
- -

Get the clock time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRDaikin2::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEye()

- -
-
- - - - - - - - -
bool IRDaikin2::getEye (void ) const
-
- -

Get the Eye (Sensor) mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEyeAuto()

- -
-
- - - - - - - - -
bool IRDaikin2::getEyeAuto (void ) const
-
- -

Get the Automaitc Eye (Sensor) mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getFreshAir()

- -
-
- - - - - - - - -
bool IRDaikin2::getFreshAir (void ) const
-
- -

Get the Fresh Air mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFreshAirHigh()

- -
-
- - - - - - - - -
bool IRDaikin2::getFreshAirHigh (void ) const
-
- -

Get the (High) Fresh Air mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getLight (void ) const
-
- -

Get the Light status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getMold()

- -
-
- - - - - - - - -
bool IRDaikin2::getMold (void ) const
-
- -

Get the Mould (filter) mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOffTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin2::getOffTime (void ) const
-
- -

Get the Off Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikin2::getOffTimerEnabled (void ) const
-
- -

Get the enable status of the Off Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOnTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin2::getOnTime (void ) const
-
- -

Get the On Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikin2::getOnTimerEnabled (void ) const
-
- -

Get the enable status of the On Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikin2::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRDaikin2::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPurify()

- -
-
- - - - - - - - -
bool IRDaikin2::getPurify (void ) const
-
- -

Get the Purify (Filter) mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikin2::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin2::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleepTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin2::getSleepTime (void ) const
-
- -

Get the Sleep Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getSleepTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikin2::getSleepTimerEnabled (void ) const
-
- -

Get the Sleep timer enabled status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin2::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikin2::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikin2::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin2::send (const uint16_t repeat = kDaikin2DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setBeep()

- -
-
- - - - - - - - -
void IRDaikin2::setBeep (const uint8_t beep)
-
- -

Set the Beep mode of the A/C.

-
Parameters
- - -
[in]beeptrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRDaikin2::setClean (const bool on)
-
- -

Set the Auto clean mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setCurrentTime()

- -
-
- - - - - - - - -
void IRDaikin2::setCurrentTime (const uint16_t numMins)
-
- -

Set the clock on the A/C unit.

-
Parameters
- - -
[in]numMinsNr. of minutes past midnight.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRDaikin2::setEcono (const bool on)
-
- -

Set the Economy mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEye()

- -
-
- - - - - - - - -
void IRDaikin2::setEye (const bool on)
-
- -

Set the Eye (Sensor) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEyeAuto()

- -
-
- - - - - - - - -
void IRDaikin2::setEyeAuto (const bool on)
-
- -

Set the Automatic Eye (Sensor) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin2::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1-5 or kDaikinFanAuto or kDaikinFanQuiet
- -
-
- -

◆ setFreshAir()

- -
-
- - - - - - - - -
void IRDaikin2::setFreshAir (const bool on)
-
- -

Set the Fresh Air mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFreshAirHigh()

- -
-
- - - - - - - - -
void IRDaikin2::setFreshAirHigh (const bool on)
-
- -

Set the (High) Fresh Air mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRDaikin2::setLight (const uint8_t light)
-
- -

Set the Light (LED) mode of the A/C.

-
Parameters
- - -
[in]lighttrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin2::setMode (const uint8_t desired_mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]desired_modeThe desired operating mode.
-
-
- -
-
- -

◆ setMold()

- -
-
- - - - - - - - -
void IRDaikin2::setMold (const bool on)
-
- -

Set the Mould (filter) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikin2::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRDaikin2::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPurify()

- -
-
- - - - - - - - -
void IRDaikin2::setPurify (const bool on)
-
- -

Set the Purify (Filter) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikin2::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin2::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRDaikin2::setSwingHorizontal (const uint8_t position)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikin2::setSwingVertical (const uint8_t position)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin2::setTemp (const uint8_t desired)
-
- -

Set the temperature.

-
Parameters
- - -
[in]desiredThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin2::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin2::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRDaikin2::toCommonSwingH (const uint8_t setting)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]settingA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRDaikin2::toCommonSwingV (const uint8_t setting)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]settingA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin2::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikin2::validChecksum (uint8_t state[],
const uint16_t length = kDaikin2StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin2Protocol IRDaikin2::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin2::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216-members.html deleted file mode 100644 index d1de14356..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin216 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin216private
_irsendIRDaikin216private
begin(void)IRDaikin216
calibrate(void)IRDaikin216inline
checksum(void)IRDaikin216private
convertFan(const stdAc::fanspeed_t speed)IRDaikin216static
convertMode(const stdAc::opmode_t mode)IRDaikin216static
getFan(void) constIRDaikin216
getMode(void) constIRDaikin216
getPower(void) constIRDaikin216
getPowerful(void) constIRDaikin216
getQuiet(void) constIRDaikin216
getRaw(void)IRDaikin216
getSwingHorizontal(void) constIRDaikin216
getSwingVertical(void) constIRDaikin216
getTemp(void) constIRDaikin216
IRDaikin216(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin216explicit
off(void)IRDaikin216
on(void)IRDaikin216
send(const uint16_t repeat=kDaikin216DefaultRepeat)IRDaikin216
setFan(const uint8_t fan)IRDaikin216
setMode(const uint8_t mode)IRDaikin216
setPower(const bool on)IRDaikin216
setPowerful(const bool on)IRDaikin216
setQuiet(const bool on)IRDaikin216
setRaw(const uint8_t new_code[])IRDaikin216
setSwingHorizontal(const bool on)IRDaikin216
setSwingVertical(const bool on)IRDaikin216
setTemp(const uint8_t temp)IRDaikin216
stateReset(void)IRDaikin216private
toCommon(void) constIRDaikin216
toString(void) constIRDaikin216
validChecksum(uint8_t state[], const uint16_t length=kDaikin216StateLength)IRDaikin216static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216.html deleted file mode 100644 index 2b16b28c1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216.html +++ /dev/null @@ -1,1071 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin216 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 216-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin216:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin216 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class Constructor. More...
 
void send (const uint16_t repeat=kDaikin216DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setSwingVertical (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingHorizontal (const bool on)
 Set the Horizontal Swing mode of the A/C. More...
 
bool getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) mode of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) mode of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikin216StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin216Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 216-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikin216()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin216::IRDaikin216 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class Constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin216::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin216::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin216::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin216::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin216::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin216::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin216::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikin216::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRDaikin216::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikin216::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
This is a horrible hack till someone works out the quiet mode bit.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikin216::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRDaikin216::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRDaikin216::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin216::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikin216::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikin216::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin216::send (const uint16_t repeat = kDaikin216DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin216::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1-5 or kDaikinFanAuto or kDaikinFanQuiet
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin216::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikin216::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRDaikin216::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikin216::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
This is a horrible hack till someone works out the quiet mode bit.
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin216::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRDaikin216::setSwingHorizontal (const bool on)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikin216::setSwingVertical (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin216::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin216::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin216::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin216::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikin216::validChecksum (uint8_t state[],
const uint16_t length = kDaikin216StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin216Protocol IRDaikin216::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin216::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.map deleted file mode 100644 index f3934b321..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.md5 deleted file mode 100644 index 9ed164a92..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7002fad30e60f7416041ecc760b3a61a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.png deleted file mode 100644 index f4293595b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin216__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.map deleted file mode 100644 index 75f3fefff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.md5 deleted file mode 100644 index 56cb02641..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c1970ac3c4720d9200a0d8521594abc6 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.png deleted file mode 100644 index 50a55cd82..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin2__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64-members.html deleted file mode 100644 index 6abdb543b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikin64 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikin64private
_irsendIRDaikin64private
begin(void)IRDaikin64
calcChecksum(const uint64_t state)IRDaikin64static
calibrate(void)IRDaikin64inline
checksum(void)IRDaikin64private
convertFan(const stdAc::fanspeed_t speed)IRDaikin64static
convertMode(const stdAc::opmode_t mode)IRDaikin64static
getClock(void) constIRDaikin64
getFan(void) constIRDaikin64
getMode(void) constIRDaikin64
getOffTime(void) constIRDaikin64
getOffTimeEnabled(void) constIRDaikin64
getOnTime(void) constIRDaikin64
getOnTimeEnabled(void) constIRDaikin64
getPowerToggle(void) constIRDaikin64
getQuiet(void) constIRDaikin64
getRaw(void)IRDaikin64
getSleep(void) constIRDaikin64
getSwingVertical(void) constIRDaikin64
getTemp(void) constIRDaikin64
getTurbo(void) constIRDaikin64
IRDaikin64(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikin64explicit
send(const uint16_t repeat=kDaikin64DefaultRepeat)IRDaikin64
setClock(const uint16_t mins_since_midnight)IRDaikin64
setFan(const uint8_t fan)IRDaikin64
setMode(const uint8_t mode)IRDaikin64
setOffTime(const uint16_t mins_since_midnight)IRDaikin64
setOffTimeEnabled(const bool on)IRDaikin64
setOnTime(const uint16_t mins_since_midnight)IRDaikin64
setOnTimeEnabled(const bool on)IRDaikin64
setPowerToggle(const bool on)IRDaikin64
setQuiet(const bool on)IRDaikin64
setRaw(const uint64_t new_state)IRDaikin64
setSleep(const bool on)IRDaikin64
setSwingVertical(const bool on)IRDaikin64
setTemp(const uint8_t temp)IRDaikin64
setTurbo(const bool on)IRDaikin64
stateReset(void)IRDaikin64private
toCommon(const stdAc::state_t *prev=NULL) constIRDaikin64
toCommonFanSpeed(const uint8_t speed)IRDaikin64static
toCommonMode(const uint8_t mode)IRDaikin64static
toString(void) constIRDaikin64
validChecksum(const uint64_t state)IRDaikin64static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64.html deleted file mode 100644 index acac37edc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64.html +++ /dev/null @@ -1,1396 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikin64 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 64-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikin64:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikin64 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikin64DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint64_t new_state)
 Set the internal state from a valid code for this protocol. More...
 
void setPowerToggle (const bool on)
 Set the Power toggle setting of the A/C. More...
 
bool getPowerToggle (void) const
 Get the Power toggle setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingVertical (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo (Powerful) mode status of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo (Powerful) mode of the A/C. More...
 
void setClock (const uint16_t mins_since_midnight)
 Set the clock on the A/C unit. More...
 
uint16_t getClock (void) const
 Get the clock time to be sent to the A/C unit. More...
 
void setOnTimeEnabled (const bool on)
 Set the enable status of the On Timer. More...
 
bool getOnTimeEnabled (void) const
 Get the enable status of the On Timer. More...
 
void setOnTime (const uint16_t mins_since_midnight)
 Set the On Timer time for the A/C unit. More...
 
uint16_t getOnTime (void) const
 Get the On Timer time to be sent to the A/C unit. More...
 
void setOffTimeEnabled (const bool on)
 Set the enable status of the Off Timer. More...
 
bool getOffTimeEnabled (void) const
 Get the enable status of the Off Timer. More...
 
void setOffTime (const uint16_t mins_since_midnight)
 Set the Off Timer time for the A/C unit. More...
 
uint16_t getOffTime (void) const
 Get the Off Timer time to be sent to the A/C unit. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
Daikin64Protocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 64-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikin64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikin64::IRDaikin64 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikin64::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin64::calcChecksum (const uint64_t state)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
The 4-bit checksum stored in a uint_8.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikin64::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin64::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin64::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikin64::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint16_t IRDaikin64::getClock (void ) const
-
- -

Get the clock time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikin64::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikin64::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin64::getOffTime (void ) const
-
- -

Get the Off Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOffTimeEnabled()

- -
-
- - - - - - - - -
bool IRDaikin64::getOffTimeEnabled (void ) const
-
- -

Get the enable status of the Off Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOnTime()

- -
-
- - - - - - - - -
uint16_t IRDaikin64::getOnTime (void ) const
-
- -

Get the On Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOnTimeEnabled()

- -
-
- - - - - - - - -
bool IRDaikin64::getOnTimeEnabled (void ) const
-
- -

Get the enable status of the On Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - - -
bool IRDaikin64::getPowerToggle (void ) const
-
- -

Get the Power toggle setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikin64::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRDaikin64::getRaw (void )
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRDaikin64::getSleep (void ) const
-
- -

Get the Sleep mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRDaikin64::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikin64::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRDaikin64::getTurbo (void ) const
-
- -

Get the Turbo (Powerful) mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikin64::send (const uint16_t repeat = kDaikin64DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IRDaikin64::setClock (const uint16_t mins_since_midnight)
-
- -

Set the clock on the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikin64::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikin64::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTime()

- -
-
- - - - - - - - -
void IRDaikin64::setOffTime (const uint16_t mins_since_midnight)
-
- -

Set the Off Timer time for the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setOffTimeEnabled()

- -
-
- - - - - - - - -
void IRDaikin64::setOffTimeEnabled (const bool on)
-
- -

Set the enable status of the Off Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setOnTime()

- -
-
- - - - - - - - -
void IRDaikin64::setOnTime (const uint16_t mins_since_midnight)
-
- -

Set the On Timer time for the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setOnTimeEnabled()

- -
-
- - - - - - - - -
void IRDaikin64::setOnTimeEnabled (const bool on)
-
- -

Set the enable status of the On Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRDaikin64::setPowerToggle (const bool on)
-
- -

Set the Power toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikin64::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDaikin64::setRaw (const uint64_t new_state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRDaikin64::setSleep (const bool on)
-
- -

Set the Sleep mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikin64::setSwingVertical (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikin64::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRDaikin64::setTurbo (const bool on)
-
- -

Set the Turbo (Powerful) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikin64::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikin64::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to a previous state.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRDaikin64::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRDaikin64::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikin64::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRDaikin64::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe state to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Daikin64Protocol IRDaikin64::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikin64::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.map deleted file mode 100644 index 83de65cf6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.md5 deleted file mode 100644 index 23ad8b529..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5851dadac8e618da97370306646d05f2 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.png deleted file mode 100644 index 8205bc2c1..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikin64__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP-members.html deleted file mode 100644 index b15b84f47..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP-members.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDaikinESP Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDaikinESPprivate
_irsendIRDaikinESPprivate
begin(void)IRDaikinESP
calibrate(void)IRDaikinESPinline
checksum(void)IRDaikinESPprivate
convertFan(const stdAc::fanspeed_t speed)IRDaikinESPstatic
convertMode(const stdAc::opmode_t mode)IRDaikinESPstatic
disableOffTimer(void)IRDaikinESP
disableOnTimer(void)IRDaikinESP
enableOffTimer(const uint16_t endtime)IRDaikinESP
enableOnTimer(const uint16_t starttime)IRDaikinESP
getComfort(void) constIRDaikinESP
getCurrentDay(void) constIRDaikinESP
getCurrentTime(void) constIRDaikinESP
getEcono(void) constIRDaikinESP
getFan(void) constIRDaikinESP
getMode(void) constIRDaikinESP
getMold(void) constIRDaikinESP
getOffTime(void) constIRDaikinESP
getOffTimerEnabled(void) constIRDaikinESP
getOnTime(void) constIRDaikinESP
getOnTimerEnabled(void) constIRDaikinESP
getPower(void) constIRDaikinESP
getPowerful(void) constIRDaikinESP
getQuiet(void) constIRDaikinESP
getRaw(void)IRDaikinESP
getSensor(void) constIRDaikinESP
getSwingHorizontal(void) constIRDaikinESP
getSwingVertical(void) constIRDaikinESP
getTemp(void) constIRDaikinESP
getWeeklyTimerEnable(void) constIRDaikinESP
IRDaikinESP(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDaikinESPexplicit
off(void)IRDaikinESP
on(void)IRDaikinESP
send(const uint16_t repeat=kDaikinDefaultRepeat)IRDaikinESP
setComfort(const bool on)IRDaikinESP
setCurrentDay(const uint8_t day_of_week)IRDaikinESP
setCurrentTime(const uint16_t mins_since_midnight)IRDaikinESP
setEcono(const bool on)IRDaikinESP
setFan(const uint8_t fan)IRDaikinESP
setMode(const uint8_t mode)IRDaikinESP
setMold(const bool on)IRDaikinESP
setPower(const bool on)IRDaikinESP
setPowerful(const bool on)IRDaikinESP
setQuiet(const bool on)IRDaikinESP
setRaw(const uint8_t new_code[], const uint16_t length=kDaikinStateLength)IRDaikinESP
setSensor(const bool on)IRDaikinESP
setSwingHorizontal(const bool on)IRDaikinESP
setSwingVertical(const bool on)IRDaikinESP
setTemp(const uint8_t temp)IRDaikinESP
setWeeklyTimerEnable(const bool on)IRDaikinESP
stateReset(void)IRDaikinESPprivate
toCommon(void) constIRDaikinESP
toCommonFanSpeed(const uint8_t speed)IRDaikinESPstatic
toCommonMode(const uint8_t mode)IRDaikinESPstatic
toString(void) constIRDaikinESP
validChecksum(uint8_t state[], const uint16_t length=kDaikinStateLength)IRDaikinESPstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP.html deleted file mode 100644 index 432414883..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP.html +++ /dev/null @@ -1,1729 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDaikinESP Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Daikin 280-bit A/C messages. - More...

- -

#include <ir_Daikin.h>

-
-Collaboration diagram for IRDaikinESP:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDaikinESP (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kDaikinDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingVertical (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingHorizontal (const bool on)
 Set the Horizontal Swing mode of the A/C. More...
 
bool getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode status of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) mode of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) mode of the A/C. More...
 
void setSensor (const bool on)
 Set the Sensor mode of the A/C. More...
 
bool getSensor (void) const
 Get the Sensor mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
void setMold (const bool on)
 Set the Mould mode of the A/C. More...
 
bool getMold (void) const
 Get the Mould mode status of the A/C. More...
 
void setComfort (const bool on)
 Set the Comfort mode of the A/C. More...
 
bool getComfort (void) const
 Get the Comfort mode of the A/C. More...
 
void enableOnTimer (const uint16_t starttime)
 Set the enable status & time of the On Timer. More...
 
void disableOnTimer (void)
 Clear and disable the On timer. More...
 
uint16_t getOnTime (void) const
 Get the On Timer time to be sent to the A/C unit. More...
 
bool getOnTimerEnabled (void) const
 Get the enable status of the On Timer. More...
 
void enableOffTimer (const uint16_t endtime)
 Set the enable status & time of the Off Timer. More...
 
void disableOffTimer (void)
 Clear and disable the Off timer. More...
 
uint16_t getOffTime (void) const
 Get the Off Timer time to be sent to the A/C unit. More...
 
bool getOffTimerEnabled (void) const
 Get the enable status of the Off Timer. More...
 
void setCurrentTime (const uint16_t mins_since_midnight)
 Set the clock on the A/C unit. More...
 
uint16_t getCurrentTime (void) const
 Get the clock time to be sent to the A/C unit. More...
 
void setCurrentDay (const uint8_t day_of_week)
 Set the current day of the week to be sent to the A/C unit. More...
 
uint8_t getCurrentDay (void) const
 Get the current day of the week to be sent to the A/C unit. More...
 
void setWeeklyTimerEnable (const bool on)
 Set the enable status of the Weekly Timer. More...
 
bool getWeeklyTimerEnable (void) const
 Get the enable status of the Weekly Timer. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kDaikinStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kDaikinStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
DaikinESPProtocol _
 
-

Detailed Description

-

Class for handling detailed Daikin 280-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDaikinESP()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDaikinESP::IRDaikinESP (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDaikinESP::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDaikinESP::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikinESP::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikinESP::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDaikinESP::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ disableOffTimer()

- -
-
- - - - - - - - -
void IRDaikinESP::disableOffTimer (void )
-
- -

Clear and disable the Off timer.

- -
-
- -

◆ disableOnTimer()

- -
-
- - - - - - - - -
void IRDaikinESP::disableOnTimer (void )
-
- -

Clear and disable the On timer.

- -
-
- -

◆ enableOffTimer()

- -
-
- - - - - - - - -
void IRDaikinESP::enableOffTimer (const uint16_t endtime)
-
- -

Set the enable status & time of the Off Timer.

-
Parameters
- - -
[in]endtimeThe number of minutes past midnight.
-
-
- -
-
- -

◆ enableOnTimer()

- -
-
- - - - - - - - -
void IRDaikinESP::enableOnTimer (const uint16_t starttime)
-
- -

Set the enable status & time of the On Timer.

-
Parameters
- - -
[in]starttimeThe number of minutes past midnight.
-
-
- -
-
- -

◆ getComfort()

- -
-
- - - - - - - - -
bool IRDaikinESP::getComfort (void ) const
-
- -

Get the Comfort mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getCurrentDay()

- -
-
- - - - - - - - -
uint8_t IRDaikinESP::getCurrentDay (void ) const
-
- -

Get the current day of the week to be sent to the A/C unit.

-
Returns
The numerical representation of the day of the week.
-
Note
1 is SUN, 2 is MON, ..., 7 is SAT
- -
-
- -

◆ getCurrentTime()

- -
-
- - - - - - - - -
uint16_t IRDaikinESP::getCurrentTime (void ) const
-
- -

Get the clock time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRDaikinESP::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDaikinESP::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDaikinESP::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getMold()

- -
-
- - - - - - - - -
bool IRDaikinESP::getMold (void ) const
-
- -

Get the Mould mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOffTime()

- -
-
- - - - - - - - -
uint16_t IRDaikinESP::getOffTime (void ) const
-
- -

Get the Off Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikinESP::getOffTimerEnabled (void ) const
-
- -

Get the enable status of the Off Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOnTime()

- -
-
- - - - - - - - -
uint16_t IRDaikinESP::getOnTime (void ) const
-
- -

Get the On Timer time to be sent to the A/C unit.

-
Returns
The number of minutes past midnight.
- -
-
- -

◆ getOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRDaikinESP::getOnTimerEnabled (void ) const
-
- -

Get the enable status of the On Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDaikinESP::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRDaikinESP::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRDaikinESP::getQuiet (void ) const
-
- -

Get the Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRDaikinESP::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSensor()

- -
-
- - - - - - - - -
bool IRDaikinESP::getSensor (void ) const
-
- -

Get the Sensor mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRDaikinESP::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRDaikinESP::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDaikinESP::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getWeeklyTimerEnable()

- -
-
- - - - - - - - -
bool IRDaikinESP::getWeeklyTimerEnable (void ) const
-
- -

Get the enable status of the Weekly Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDaikinESP::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDaikinESP::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDaikinESP::send (const uint16_t repeat = kDaikinDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setComfort()

- -
-
- - - - - - - - -
void IRDaikinESP::setComfort (const bool on)
-
- -

Set the Comfort mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setCurrentDay()

- -
-
- - - - - - - - -
void IRDaikinESP::setCurrentDay (const uint8_t day_of_week)
-
- -

Set the current day of the week to be sent to the A/C unit.

-
Parameters
- - -
[in]day_of_weekThe numerical representation of the day of the week.
-
-
-
Note
1 is SUN, 2 is MON, ..., 7 is SAT
- -
-
- -

◆ setCurrentTime()

- -
-
- - - - - - - - -
void IRDaikinESP::setCurrentTime (const uint16_t mins_since_midnight)
-
- -

Set the clock on the A/C unit.

-
Parameters
- - -
[in]mins_since_midnightNr. of minutes past midnight.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRDaikinESP::setEcono (const bool on)
-
- -

Set the Economy mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDaikinESP::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
-
Note
1-5 or kDaikinFanAuto or kDaikinFanQuiet
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDaikinESP::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setMold()

- -
-
- - - - - - - - -
void IRDaikinESP::setMold (const bool on)
-
- -

Set the Mould mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDaikinESP::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRDaikinESP::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRDaikinESP::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRDaikinESP::setRaw (const uint8_t new_code[],
const uint16_t length = kDaikinStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthLength of the code in bytes.
-
-
- -
-
- -

◆ setSensor()

- -
-
- - - - - - - - -
void IRDaikinESP::setSensor (const bool on)
-
- -

Set the Sensor mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRDaikinESP::setSwingHorizontal (const bool on)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRDaikinESP::setSwingVertical (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRDaikinESP::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setWeeklyTimerEnable()

- -
-
- - - - - - - - -
void IRDaikinESP::setWeeklyTimerEnable (const bool on)
-
- -

Set the enable status of the Weekly Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRDaikinESP::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDaikinESP::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRDaikinESP::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRDaikinESP::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDaikinESP::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRDaikinESP::validChecksum (uint8_t state[],
const uint16_t length = kDaikinStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
DaikinESPProtocol IRDaikinESP::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDaikinESP::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.map deleted file mode 100644 index 8a497d17a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.md5 deleted file mode 100644 index cd963628b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d8e520a5ac6f6e4ad675f8b02278bb0f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.png deleted file mode 100644 index e98beaa18..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDaikinESP__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc-members.html deleted file mode 100644 index abfe6cc90..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRDelonghiAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRDelonghiAcprivate
_irsendIRDelonghiAcprivate
_saved_tempIRDelonghiAcprivate
_saved_temp_unitsIRDelonghiAcprivate
begin(void)IRDelonghiAc
calcChecksum(const uint64_t state)IRDelonghiAcstatic
calibrate(void)IRDelonghiAcinline
checksum(void)IRDelonghiAcprivate
convertFan(const stdAc::fanspeed_t speed)IRDelonghiAcstatic
convertMode(const stdAc::opmode_t mode)IRDelonghiAcstatic
getBoost(void) constIRDelonghiAc
getFan(void) constIRDelonghiAc
getMode(void) constIRDelonghiAc
getOffTimer(void) constIRDelonghiAc
getOffTimerEnabled(void) constIRDelonghiAc
getOnTimer(void) constIRDelonghiAc
getOnTimerEnabled(void) constIRDelonghiAc
getPower(void) constIRDelonghiAc
getRaw(void)IRDelonghiAc
getSleep(void) constIRDelonghiAc
getTemp(void) constIRDelonghiAc
getTempUnit(void) constIRDelonghiAc
IRDelonghiAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRDelonghiAcexplicit
off(void)IRDelonghiAc
on(void)IRDelonghiAc
send(const uint16_t repeat=kDelonghiAcDefaultRepeat)IRDelonghiAc
setBoost(const bool on)IRDelonghiAc
setFan(const uint8_t speed)IRDelonghiAc
setMode(const uint8_t mode)IRDelonghiAc
setOffTimer(const uint16_t nr_of_mins)IRDelonghiAc
setOffTimerEnabled(const bool on)IRDelonghiAc
setOnTimer(const uint16_t nr_of_mins)IRDelonghiAc
setOnTimerEnabled(const bool on)IRDelonghiAc
setPower(const bool on)IRDelonghiAc
setRaw(const uint64_t state)IRDelonghiAc
setSleep(const bool on)IRDelonghiAc
setTemp(const uint8_t temp, const bool fahrenheit=false, const bool force=false)IRDelonghiAc
setTempUnit(const bool celsius)IRDelonghiAc
stateReset(void)IRDelonghiAc
toCommon(void) constIRDelonghiAc
toCommonFanSpeed(const uint8_t speed)IRDelonghiAcstatic
toCommonMode(const uint8_t mode)IRDelonghiAcstatic
toString(void) constIRDelonghiAc
validChecksum(const uint64_t state)IRDelonghiAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc.html deleted file mode 100644 index e6a3d4cca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc.html +++ /dev/null @@ -1,1396 +0,0 @@ - - - - - - - -IRremoteESP8266: IRDelonghiAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Delonghi A/C messages. - More...

- -

#include <ir_Delonghi.h>

-
-Collaboration diagram for IRDelonghiAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRDelonghiAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kDelonghiAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setTempUnit (const bool celsius)
 Change the temperature scale units. More...
 
bool getTempUnit (void) const
 Get the temperature scale unit of measure currently in use. More...
 
void setTemp (const uint8_t temp, const bool fahrenheit=false, const bool force=false)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current native fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setBoost (const bool on)
 Set the Boost (Turbo) mode of the A/C. More...
 
bool getBoost (void) const
 Get the Boost (Turbo) mode of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep mode status of the A/C. More...
 
void setOnTimerEnabled (const bool on)
 Set the enable status of the On Timer. More...
 
bool getOnTimerEnabled (void) const
 Get the enable status of the On Timer. More...
 
void setOnTimer (const uint16_t nr_of_mins)
 Set the On timer to activate in nr of minutes. More...
 
uint16_t getOnTimer (void) const
 Get the On timer time. More...
 
void setOffTimerEnabled (const bool on)
 Set the enable status of the Off Timer. More...
 
bool getOffTimerEnabled (void) const
 Get the enable status of the Off Timer. More...
 
void setOffTimer (const uint16_t nr_of_mins)
 Set the Off timer to activate in nr of minutes. More...
 
uint16_t getOffTimer (void) const
 Get the Off timer time. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint64_t state)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
DelonghiProtocol _
 
uint8_t _saved_temp
 The previously user requested temp value. More...
 
uint8_t _saved_temp_units
 The previously user requested temp units. More...
 
-

Detailed Description

-

Class for handling detailed Delonghi A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRDelonghiAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRDelonghiAc::IRDelonghiAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRDelonghiAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDelonghiAc::calcChecksum (const uint64_t state)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
A valid checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRDelonghiAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRDelonghiAc::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDelonghiAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRDelonghiAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getBoost()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getBoost (void ) const
-
- -

Get the Boost (Turbo) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRDelonghiAc::getFan (void ) const
-
- -

Get the current native fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRDelonghiAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRDelonghiAc::getOffTimer (void ) const
-
- -

Get the Off timer time.

-
Returns
Total nr of mins before the device turns off.
- -
-
- -

◆ getOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getOffTimerEnabled (void ) const
-
- -

Get the enable status of the Off Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRDelonghiAc::getOnTimer (void ) const
-
- -

Get the On timer time.

-
Returns
Total nr of mins before the device turns on.
- -
-
- -

◆ getOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getOnTimerEnabled (void ) const
-
- -

Get the enable status of the On Timer.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRDelonghiAc::getRaw (void )
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getSleep (void ) const
-
- -

Get the Sleep mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRDelonghiAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in currently configured units/scale.
- -
-
- -

◆ getTempUnit()

- -
-
- - - - - - - - -
bool IRDelonghiAc::getTempUnit (void ) const
-
- -

Get the temperature scale unit of measure currently in use.

-
Returns
true, is Fahrenheit. false, is Celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRDelonghiAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRDelonghiAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRDelonghiAc::send (const uint16_t repeat = kDelonghiAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setBoost()

- -
-
- - - - - - - - -
void IRDelonghiAc::setBoost (const bool on)
-
- -

Set the Boost (Turbo) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRDelonghiAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired native setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRDelonghiAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired native operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRDelonghiAc::setOffTimer (const uint16_t nr_of_mins)
-
- -

Set the Off timer to activate in nr of minutes.

-
Parameters
- - -
[in]nr_of_minsTotal nr of mins to wait before turning off the device
-
-
-
Note
Max 23 hrs and 59 minutes. i.e. 1439 mins.
- -
-
- -

◆ setOffTimerEnabled()

- -
-
- - - - - - - - -
void IRDelonghiAc::setOffTimerEnabled (const bool on)
-
- -

Set the enable status of the Off Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRDelonghiAc::setOnTimer (const uint16_t nr_of_mins)
-
- -

Set the On timer to activate in nr of minutes.

-
Parameters
- - -
[in]nr_of_minsTotal nr of mins to wait before waking the device.
-
-
-
Note
Max 23 hrs and 59 minutes. i.e. 1439 mins.
- -
-
- -

◆ setOnTimerEnabled()

- -
-
- - - - - - - - -
void IRDelonghiAc::setOnTimerEnabled (const bool on)
-
- -

Set the enable status of the On Timer.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRDelonghiAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRDelonghiAc::setRaw (const uint64_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRDelonghiAc::setSleep (const bool on)
-
- -

Set the Sleep mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRDelonghiAc::setTemp (const uint8_t degrees,
const bool fahrenheit = false,
const bool force = false 
)
-
- -

Set the temperature.

-
Parameters
- - - - -
[in]degreesThe temperature in degrees.
[in]fahrenheitUse Fahrenheit as the temperature scale.
[in]forceDo we ignore any sanity checks?
-
-
- -
-
- -

◆ setTempUnit()

- -
-
- - - - - - - - -
void IRDelonghiAc::setTempUnit (const bool fahrenheit)
-
- -

Change the temperature scale units.

-
Parameters
- - -
[in]fahrenheittrue, use Fahrenheit. false, use Celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRDelonghiAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRDelonghiAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRDelonghiAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRDelonghiAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRDelonghiAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRDelonghiAc::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe state to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
DelonghiProtocol IRDelonghiAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRDelonghiAc::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
- -

◆ _saved_temp

- -
-
- - - - - -
- - - - -
uint8_t IRDelonghiAc::_saved_temp
-
-private
-
- -

The previously user requested temp value.

- -
-
- -

◆ _saved_temp_units

- -
-
- - - - - -
- - - - -
uint8_t IRDelonghiAc::_saved_temp_units
-
-private
-
- -

The previously user requested temp units.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.map deleted file mode 100644 index 135028626..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.md5 deleted file mode 100644 index 11023639b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2c5e62b1f4690577326cff81ec7aa759 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.png deleted file mode 100644 index 4eaf76de0..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRDelonghiAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc-members.html deleted file mode 100644 index 5b239dd90..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IREcoclimAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IREcoclimAcprivate
_irsendIREcoclimAcprivate
begin(void)IREcoclimAc
calibrate(void)IREcoclimAcinline
convertFan(const stdAc::fanspeed_t speed)IREcoclimAcstatic
convertMode(const stdAc::opmode_t mode)IREcoclimAcstatic
disableOffTimer(void)IREcoclimAc
disableOnTimer(void)IREcoclimAc
getClock(void) constIREcoclimAc
getFan(void) constIREcoclimAc
getMode(void) constIREcoclimAc
getOffTimer(void) constIREcoclimAc
getOnTimer(void) constIREcoclimAc
getPower(void) constIREcoclimAc
getRaw(void) constIREcoclimAc
getSensorTemp(void) constIREcoclimAc
getTemp(void) constIREcoclimAc
getType(void) constIREcoclimAc
IREcoclimAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IREcoclimAcexplicit
isOffTimerEnabled(void) constIREcoclimAc
isOnTimerEnabled(void) constIREcoclimAc
off(void)IREcoclimAc
on(void)IREcoclimAc
send(const uint16_t repeat=kNoRepeat)IREcoclimAc
setClock(const uint16_t nr_of_mins)IREcoclimAc
setFan(const uint8_t speed)IREcoclimAc
setMode(const uint8_t mode)IREcoclimAc
setOffTimer(const uint16_t nr_of_mins)IREcoclimAc
setOnTimer(const uint16_t nr_of_mins)IREcoclimAc
setPower(const bool on)IREcoclimAc
setRaw(const uint64_t new_code)IREcoclimAc
setSensorTemp(const uint8_t celsius)IREcoclimAc
setTemp(const uint8_t celsius)IREcoclimAc
setType(const uint8_t code)IREcoclimAc
stateReset(void)IREcoclimAc
toCommon(void) constIREcoclimAc
toCommonFanSpeed(const uint8_t speed)IREcoclimAcstatic
toCommonMode(const uint8_t mode)IREcoclimAcstatic
toString(void) constIREcoclimAc
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc.html deleted file mode 100644 index e104cf8c8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc.html +++ /dev/null @@ -1,1203 +0,0 @@ - - - - - - - -IRremoteESP8266: IREcoclimAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed EcoClim A/C 56 bit messages. - More...

- -

#include <ir_Ecoclim.h>

-
-Collaboration diagram for IREcoclimAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IREcoclimAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t celsius)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setSensorTemp (const uint8_t celsius)
 Set the sensor temperature. More...
 
uint8_t getSensorTemp (void) const
 Get the sensor temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setClock (const uint16_t nr_of_mins)
 Set the clock time on the A/C unit. More...
 
uint16_t getClock (void) const
 Get the clock time of the A/C unit. More...
 
uint64_t getRaw (void) const
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint64_t new_code)
 Set the internal state from a valid code for this protocol. More...
 
void setType (const uint8_t code)
 Set the Unit type/DIP switch settings for the remote. More...
 
uint8_t getType (void) const
 Get the Unit type/DIP switch settings of the remote. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
void setOnTimer (const uint16_t nr_of_mins)
 Set & enable the On Timer for the A/C. More...
 
uint16_t getOnTimer (void) const
 Get the On Timer for the A/C. More...
 
bool isOnTimerEnabled (void) const
 Check if the On Timer is enabled. More...
 
void disableOnTimer (void)
 Disable & clear the On Timer. More...
 
void setOffTimer (const uint16_t nr_of_mins)
 Set & enable the Off Timer for the A/C. More...
 
uint16_t getOffTimer (void) const
 Get the Off Timer for the A/C. More...
 
bool isOffTimerEnabled (void) const
 Check if the Off Timer is enabled. More...
 
void disableOffTimer (void)
 Disable & clear the Off Timer. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's common stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
EcoclimProtocol _
 The state of the IR remote in IR code form. More...
 
-

Detailed Description

-

Class for handling detailed EcoClim A/C 56 bit messages.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1397
-

Constructor & Destructor Documentation

- -

◆ IREcoclimAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IREcoclimAc::IREcoclimAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IREcoclimAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IREcoclimAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IREcoclimAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IREcoclimAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode into its native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t to be converted to it's native equivalent.
-
-
-
Returns
The corresponding native mode.
- -
-
- -

◆ disableOffTimer()

- -
-
- - - - - - - - -
void IREcoclimAc::disableOffTimer (void )
-
- -

Disable & clear the Off Timer.

- -
-
- -

◆ disableOnTimer()

- -
-
- - - - - - - - -
void IREcoclimAc::disableOnTimer (void )
-
- -

Disable & clear the On Timer.

- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint16_t IREcoclimAc::getClock (void ) const
-
- -

Get the clock time of the A/C unit.

-
Returns
Nr. of minutes past midnight.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IREcoclimAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IREcoclimAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IREcoclimAc::getOffTimer (void ) const
-
- -

Get the Off Timer for the A/C.

-
Returns
The Off Time, in minutes since midnight.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IREcoclimAc::getOnTimer (void ) const
-
- -

Get the On Timer for the A/C.

-
Returns
The On Time, in minutes since midnight.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IREcoclimAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IREcoclimAc::getRaw (void ) const
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSensorTemp()

- -
-
- - - - - - - - -
uint8_t IREcoclimAc::getSensorTemp (void ) const
-
- -

Get the sensor temperature setting.

-
Returns
The current setting for sensor temp. in degrees celsius.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IREcoclimAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getType()

- -
-
- - - - - - - - -
uint8_t IREcoclimAc::getType (void ) const
-
- -

Get the Unit type/DIP switch settings of the remote.

-
Returns
The binary representation of the 4 DIP switches on the remote.
- -
-
- -

◆ isOffTimerEnabled()

- -
-
- - - - - - - - -
bool IREcoclimAc::isOffTimerEnabled (void ) const
-
- -

Check if the Off Timer is enabled.

-
Returns
true, if the timer is enabled, otherwise false.
- -
-
- -

◆ isOnTimerEnabled()

- -
-
- - - - - - - - -
bool IREcoclimAc::isOnTimerEnabled (void ) const
-
- -

Check if the On Timer is enabled.

-
Returns
true, if the timer is enabled, otherwise false.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IREcoclimAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IREcoclimAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IREcoclimAc::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IREcoclimAc::setClock (const uint16_t nr_of_mins)
-
- -

Set the clock time on the A/C unit.

-
Parameters
- - -
[in]nr_of_minsNr. of minutes past midnight.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IREcoclimAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IREcoclimAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IREcoclimAc::setOffTimer (const uint16_t nr_of_mins)
-
- -

Set & enable the Off Timer for the A/C.

-
Parameters
- - -
[in]nr_of_minsThe time, in minutes since midnight.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IREcoclimAc::setOnTimer (const uint16_t nr_of_mins)
-
- -

Set & enable the On Timer for the A/C.

-
Parameters
- - -
[in]nr_of_minsThe time, in minutes since midnight.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IREcoclimAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IREcoclimAc::setRaw (const uint64_t new_code)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSensorTemp()

- -
-
- - - - - - - - -
void IREcoclimAc::setSensorTemp (const uint8_t celsius)
-
- -

Set the sensor temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IREcoclimAc::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setType()

- -
-
- - - - - - - - -
void IREcoclimAc::setType (const uint8_t code)
-
- -

Set the Unit type/DIP switch settings for the remote.

-
Parameters
- - -
[in]codeThe binary representation of the remote's 4 DIP switches.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IREcoclimAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IREcoclimAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IREcoclimAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IREcoclimAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's common stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operation mode to be converted.
-
-
-
Returns
The corresponding common stdAc::opmode_t mode.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IREcoclimAc::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
EcoclimProtocol IREcoclimAc::_
-
-private
-
- -

The state of the IR remote in IR code form.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IREcoclimAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.map deleted file mode 100644 index 8ae43c845..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.md5 deleted file mode 100644 index f1b86958d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -12d66d95e0fef2f79eb85a49551c1dfd \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.png deleted file mode 100644 index e13419639..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIREcoclimAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc-members.html deleted file mode 100644 index dc0a66942..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRElectraAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRElectraAcprivate
_irsendIRElectraAcprivate
begin(void)IRElectraAc
calcChecksum(const uint8_t state[], const uint16_t length=kElectraAcStateLength)IRElectraAcstatic
calibrate(void)IRElectraAcinline
checksum(const uint16_t length=kElectraAcStateLength)IRElectraAcprivate
convertFan(const stdAc::fanspeed_t speed)IRElectraAcstatic
convertMode(const stdAc::opmode_t mode)IRElectraAcstatic
getClean(void) constIRElectraAc
getFan(void) constIRElectraAc
getLightToggle(void) constIRElectraAc
getMode(void) constIRElectraAc
getPower(void) constIRElectraAc
getRaw(void)IRElectraAc
getSwingH(void) constIRElectraAc
getSwingV(void) constIRElectraAc
getTemp(void) constIRElectraAc
getTurbo(void) constIRElectraAc
IRElectraAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRElectraAcexplicit
off(void)IRElectraAc
on(void)IRElectraAc
send(const uint16_t repeat=kElectraAcMinRepeat)IRElectraAc
setClean(const bool on)IRElectraAc
setFan(const uint8_t speed)IRElectraAc
setLightToggle(const bool on)IRElectraAc
setMode(const uint8_t mode)IRElectraAc
setPower(const bool on)IRElectraAc
setRaw(const uint8_t new_code[], const uint16_t length=kElectraAcStateLength)IRElectraAc
setSwingH(const bool on)IRElectraAc
setSwingV(const bool on)IRElectraAc
setTemp(const uint8_t temp)IRElectraAc
setTurbo(const bool on)IRElectraAc
stateReset(void)IRElectraAc
toCommon(void) constIRElectraAc
toCommonFanSpeed(const uint8_t speed)IRElectraAcstatic
toCommonMode(const uint8_t mode)IRElectraAcstatic
toString(void) constIRElectraAc
validChecksum(const uint8_t state[], const uint16_t length=kElectraAcStateLength)IRElectraAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc.html deleted file mode 100644 index 202356d8a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc.html +++ /dev/null @@ -1,1256 +0,0 @@ - - - - - - - -IRremoteESP8266: IRElectraAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Electra A/C messages. - More...

- -

#include <ir_Electra.h>

-
-Collaboration diagram for IRElectraAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRElectraAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kElectraAcMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setSwingV (const bool on)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingV (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingH (const bool on)
 Set the Horizontal Swing mode of the A/C. More...
 
bool getSwingH (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
void setClean (const bool on)
 Set the Clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Clean mode of the A/C. More...
 
void setLightToggle (const bool on)
 Set the Light (LED) Toggle mode of the A/C. More...
 
bool getLightToggle (void) const
 Get the Light (LED) Toggle mode of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo mode of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kElectraAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kElectraAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kElectraAcStateLength)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kElectraAcStateLength)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 instance of the IR send class More...
 
ElectraProtocol _
 
-

Detailed Description

-

Class for handling detailed Electra A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRElectraAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRElectraAc::IRElectraAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRElectraAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRElectraAc::calcChecksum (const uint8_t state[],
const uint16_t length = kElectraAcStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe value to calc the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
The calculated checksum stored in a uint_8.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRElectraAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRElectraAc::checksum (const uint16_t length = kElectraAcStateLength)
-
-private
-
- -

Calculate and set the checksum values for the internal state.

-
Parameters
- - -
[in]lengthThe length of the state array.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRElectraAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRElectraAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRElectraAc::getClean (void ) const
-
- -

Get the Clean mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRElectraAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getLightToggle()

- -
-
- - - - - - - - -
bool IRElectraAc::getLightToggle (void ) const
-
- -

Get the Light (LED) Toggle mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRElectraAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRElectraAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRElectraAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
bool IRElectraAc::getSwingH (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRElectraAc::getSwingV (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRElectraAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRElectraAc::getTurbo (void ) const
-
- -

Get the Turbo mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRElectraAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRElectraAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRElectraAc::send (const uint16_t repeat = kElectraAcMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRElectraAc::setClean (const bool on)
-
- -

Set the Clean mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRElectraAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
-
Note
0 is auto, 1-3 is the speed
- -
-
- -

◆ setLightToggle()

- -
-
- - - - - - - - -
void IRElectraAc::setLightToggle (const bool on)
-
- -

Set the Light (LED) Toggle mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRElectraAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRElectraAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRElectraAc::setRaw (const uint8_t new_code[],
const uint16_t length = kElectraAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length of the code array.
-
-
- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRElectraAc::setSwingH (const bool on)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRElectraAc::setSwingV (const bool on)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRElectraAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRElectraAc::setTurbo (const bool on)
-
- -

Set the Turbo mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRElectraAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRElectraAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRElectraAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRElectraAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRElectraAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRElectraAc::validChecksum (const uint8_t state[],
const uint16_t length = kElectraAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe state to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
ElectraProtocol IRElectraAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRElectraAc::_irsend
-
-private
-
- -

instance of the IR send class

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.map deleted file mode 100644 index 1e9fd2909..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.md5 deleted file mode 100644 index c648bbd81..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8d7ab3975919e564bff02fadc3cd34ab \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.png deleted file mode 100644 index c68ada469..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRElectraAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC-members.html deleted file mode 100644 index d1433a241..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC-members.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRFujitsuAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRFujitsuACprivate
_cmdIRFujitsuACprivate
_irsendIRFujitsuACprivate
_modelIRFujitsuACprivate
_state_lengthIRFujitsuACprivate
_state_length_shortIRFujitsuACprivate
begin(void)IRFujitsuAC
buildFromState(const uint16_t length)IRFujitsuACprivate
calibrate(void)IRFujitsuACinline
checkSum(void)IRFujitsuACprivate
convertFan(stdAc::fanspeed_t speed)IRFujitsuACstatic
convertMode(const stdAc::opmode_t mode)IRFujitsuACstatic
get10CHeat(void) constIRFujitsuAC
getCelsius(void) constIRFujitsuAC
getClean(void) constIRFujitsuAC
getCmd(void) constIRFujitsuAC
getFanSpeed(void) constIRFujitsuAC
getFilter(void) constIRFujitsuAC
getId(void) constIRFujitsuAC
getMode(void) constIRFujitsuAC
getModel(void) constIRFujitsuAC
getOffSleepTimer(void) constIRFujitsuAC
getOnTimer(void) constIRFujitsuAC
getOutsideQuiet(void) constIRFujitsuAC
getPower(void) constIRFujitsuAC
getRaw(void)IRFujitsuAC
getStateLength(void)IRFujitsuAC
getSwing(void) constIRFujitsuAC
getTemp(void) constIRFujitsuAC
getTimerType(void) constIRFujitsuAC
IRFujitsuAC(const uint16_t pin, const fujitsu_ac_remote_model_t model=ARRAH2E, const bool inverted=false, const bool use_modulation=true)IRFujitsuACexplicit
off(void)IRFujitsuAC
on(void)IRFujitsuAC
send(const uint16_t repeat=kFujitsuAcMinRepeat)IRFujitsuAC
set10CHeat(const bool on)IRFujitsuAC
setCelsius(const bool on)IRFujitsuAC
setClean(const bool on)IRFujitsuAC
setCmd(const uint8_t cmd)IRFujitsuAC
setFanSpeed(const uint8_t fan)IRFujitsuAC
setFilter(const bool on)IRFujitsuAC
setId(const uint8_t num)IRFujitsuAC
setMode(const uint8_t mode)IRFujitsuAC
setModel(const fujitsu_ac_remote_model_t model)IRFujitsuAC
setOffSleepTimer(const uint16_t nr_mins)IRFujitsuACinlineprivate
setOffTimer(const uint16_t nr_mins)IRFujitsuAC
setOnTimer(const uint16_t nr_mins)IRFujitsuAC
setOutsideQuiet(const bool on)IRFujitsuAC
setPower(const bool on)IRFujitsuAC
setRaw(const uint8_t newState[], const uint16_t length)IRFujitsuAC
setSleepTimer(const uint16_t nr_mins)IRFujitsuAC
setSwing(const uint8_t mode)IRFujitsuAC
setTemp(const float temp, const bool useCelsius=true)IRFujitsuAC
setTimerType(const uint8_t timertype)IRFujitsuAC
stateReset(void)IRFujitsuAC
stepHoriz(void)IRFujitsuAC
stepVert(void)IRFujitsuAC
toCommon(void) constIRFujitsuAC
toCommonFanSpeed(const uint8_t speed)IRFujitsuACstatic
toCommonMode(const uint8_t mode)IRFujitsuACstatic
toggleSwingHoriz(const bool update=true)IRFujitsuAC
toggleSwingVert(const bool update=true)IRFujitsuAC
toString(void) constIRFujitsuAC
updateUseLongOrShort(void)IRFujitsuACprivate
validChecksum(uint8_t *state, const uint16_t length)IRFujitsuACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC.html deleted file mode 100644 index d17cd4824..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC.html +++ /dev/null @@ -1,1950 +0,0 @@ - - - - - - - -IRremoteESP8266: IRFujitsuAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Fujitsu A/C messages. - More...

- -

#include <ir_Fujitsu.h>

-
-Collaboration diagram for IRFujitsuAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRFujitsuAC (const uint16_t pin, const fujitsu_ac_remote_model_t model=ARRAH2E, const bool inverted=false, const bool use_modulation=true)
 Class Constructor. More...
 
void setModel (const fujitsu_ac_remote_model_t model)
 Set the currently emulated model of the A/C. More...
 
fujitsu_ac_remote_model_t getModel (void) const
 Get the currently emulated/detected model of the A/C. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kFujitsuAcMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void stepHoriz (void)
 Request the A/C to step the Horizontal Swing. More...
 
void toggleSwingHoriz (const bool update=true)
 Request the A/C to toggle the Horizontal Swing mode. More...
 
void stepVert (void)
 Request the A/C to step the Vertical Swing. More...
 
void toggleSwingVert (const bool update=true)
 Request the A/C to toggle the Vertical Swing mode. More...
 
void setCmd (const uint8_t cmd)
 Set the requested (special) command part for the A/C message. More...
 
uint8_t getCmd (void) const
 Set the requested (special) command part for the A/C message. More...
 
void setTemp (const float temp, const bool useCelsius=true)
 Set the temperature. More...
 
float getTemp (void) const
 Get the current temperature setting. More...
 
void setFanSpeed (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFanSpeed (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const uint8_t mode)
 Set the requested swing operation mode of the A/C unit. More...
 
uint8_t getSwing (void) const
 Get the requested swing operation mode of the A/C unit. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
bool setRaw (const uint8_t newState[], const uint16_t length)
 Set the internal state from a valid code for this protocol. More...
 
uint8_t getStateLength (void)
 Get the length (size) of the state code for the current configuration. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setClean (const bool on)
 Set the Clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Clean mode status of the A/C. More...
 
void setFilter (const bool on)
 Set the Filter mode status of the A/C. More...
 
bool getFilter (void) const
 Get the Filter mode status of the A/C. More...
 
void set10CHeat (const bool on)
 Set the 10C heat status of the A/C. More...
 
bool get10CHeat (void) const
 Get the 10C heat status of the A/C. More...
 
void setOutsideQuiet (const bool on)
 Set the Outside Quiet mode of the A/C. More...
 
bool getOutsideQuiet (void) const
 Get the Outside Quiet mode status of the A/C. More...
 
uint8_t getTimerType (void) const
 Get the Timer type of the A/C message. More...
 
void setTimerType (const uint8_t timertype)
 Set the Timer type of the A/C message. More...
 
uint16_t getOnTimer (void) const
 Get the On Timer setting of the A/C. More...
 
void setOnTimer (const uint16_t nr_mins)
 Set the On Timer setting of the A/C. More...
 
uint16_t getOffSleepTimer (void) const
 Get the Off/Sleep Timer setting of the A/C. More...
 
void setOffTimer (const uint16_t nr_mins)
 Set the Off Timer time for the A/C. More...
 
void setSleepTimer (const uint16_t nr_mins)
 Set the Sleep Timer time for the A/C. More...
 
void setId (const uint8_t num)
 Set the device's remote ID number. More...
 
uint8_t getId (void) const
 Get the current device's remote ID number. More...
 
void setCelsius (const bool on)
 Set the Temperature units for the A/C. More...
 
bool getCelsius (void) const
 Get the Clean mode status of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t *state, const uint16_t length)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - - - - - - - -

-Private Member Functions

void checkSum (void)
 Calculate and set the checksum values for the internal state. More...
 
bool updateUseLongOrShort (void)
 Update the length (size) of the state code for the current configuration. More...
 
void buildFromState (const uint16_t length)
 Build the internal state/config from the current (raw) A/C message. More...
 
void setOffSleepTimer (const uint16_t nr_mins)
 Set the Off/Sleep Timer time for the A/C. More...
 
- - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
FujitsuProtocol _
 
uint8_t _cmd
 
fujitsu_ac_remote_model_t _model
 
uint8_t _state_length
 
uint8_t _state_length_short
 
-

Detailed Description

-

Class for handling detailed Fujitsu A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRFujitsuAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IRFujitsuAC::IRFujitsuAC (const uint16_t pin,
const fujitsu_ac_remote_model_t model = ARRAH2E,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class Constructor.

-
Parameters
- - - - - -
[in]pinGPIO to be used when sending.
[in]modelThe enum for the model of A/C to be emulated.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRFujitsuAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ buildFromState()

- -
-
- - - - - -
- - - - - - - - -
void IRFujitsuAC::buildFromState (const uint16_t length)
-
-private
-
- -

Build the internal state/config from the current (raw) A/C message.

-
Parameters
- - -
[in]lengthSize of the current/used (raw) A/C message array.
-
-
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRFujitsuAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checkSum()

- -
-
- - - - - -
- - - - - - - - -
void IRFujitsuAC::checkSum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRFujitsuAC::convertFan (stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRFujitsuAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ get10CHeat()

- -
-
- - - - - - - - -
bool IRFujitsuAC::get10CHeat (void ) const
-
- -

Get the 10C heat status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getCelsius()

- -
-
- - - - - - - - -
bool IRFujitsuAC::getCelsius (void ) const
-
- -

Get the Clean mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRFujitsuAC::getClean (void ) const
-
- -

Get the Clean mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getCmd()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getCmd (void ) const
-
- -

Set the requested (special) command part for the A/C message.

-
Returns
The special command code.
- -
-
- -

◆ getFanSpeed()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getFanSpeed (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getFilter()

- -
-
- - - - - - - - -
bool IRFujitsuAC::getFilter (void ) const
-
- -

Get the Filter mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getId()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getId (void ) const
-
- -

Get the current device's remote ID number.

-
Returns
The current device's remote ID number.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
fujitsu_ac_remote_model_t IRFujitsuAC::getModel (void ) const
-
- -

Get the currently emulated/detected model of the A/C.

-
Returns
The enum representing the model of A/C.
- -
-
- -

◆ getOffSleepTimer()

- -
-
- - - - - - - - -
uint16_t IRFujitsuAC::getOffSleepTimer (void ) const
-
- -

Get the Off/Sleep Timer setting of the A/C.

-
Returns
nr of minutes left on the timer. 0 means disabled/not supported.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRFujitsuAC::getOnTimer (void ) const
-
- -

Get the On Timer setting of the A/C.

-
Returns
nr of minutes left on the timer. 0 means disabled/not supported.
- -
-
- -

◆ getOutsideQuiet()

- -
-
- - - - - - - - -
bool IRFujitsuAC::getOutsideQuiet (void ) const
-
- -

Get the Outside Quiet mode status of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRFujitsuAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRFujitsuAC::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getStateLength()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getStateLength (void )
-
- -

Get the length (size) of the state code for the current configuration.

-
Returns
The length of the state array required for this config.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getSwing (void ) const
-
- -

Get the requested swing operation mode of the A/C unit.

-
Returns
The contents of the swing state/mode.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
float IRFujitsuAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees of the currently set units.
- -
-
- -

◆ getTimerType()

- -
-
- - - - - - - - -
uint8_t IRFujitsuAC::getTimerType (void ) const
-
- -

Get the Timer type of the A/C message.

-
Returns
The current timer type in numeric form.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRFujitsuAC::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRFujitsuAC::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRFujitsuAC::send (const uint16_t repeat = kFujitsuAcMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ set10CHeat()

- -
-
- - - - - - - - -
void IRFujitsuAC::set10CHeat (const bool on)
-
- -

Set the 10C heat status of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setCelsius()

- -
-
- - - - - - - - -
void IRFujitsuAC::setCelsius (const bool on)
-
- -

Set the Temperature units for the A/C.

-
Parameters
- - -
[in]ontrue, use Celsius. false, use Fahrenheit.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRFujitsuAC::setClean (const bool on)
-
- -

Set the Clean mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setCmd()

- -
-
- - - - - - - - -
void IRFujitsuAC::setCmd (const uint8_t cmd)
-
- -

Set the requested (special) command part for the A/C message.

-
Parameters
- - -
[in]cmdThe special command code.
-
-
- -
-
- -

◆ setFanSpeed()

- -
-
- - - - - - - - -
void IRFujitsuAC::setFanSpeed (const uint8_t fanSpeed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanSpeedThe desired setting.
-
-
- -
-
- -

◆ setFilter()

- -
-
- - - - - - - - -
void IRFujitsuAC::setFilter (const bool on)
-
- -

Set the Filter mode status of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setId()

- -
-
- - - - - - - - -
void IRFujitsuAC::setId (const uint8_t num)
-
- -

Set the device's remote ID number.

-
Parameters
- - -
[in]numThe ID for the remote. Valid number range is 0 to 3.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRFujitsuAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRFujitsuAC::setModel (const fujitsu_ac_remote_model_t model)
-
- -

Set the currently emulated model of the A/C.

-
Parameters
- - -
[in]modelAn enum representing the model to support/emulate.
-
-
- -
-
- -

◆ setOffSleepTimer()

- -
-
- - - - - -
- - - - - - - - -
void IRFujitsuAC::setOffSleepTimer (const uint16_t nr_mins)
-
-inlineprivate
-
- -

Set the Off/Sleep Timer time for the A/C.

-
Parameters
- - -
[in]nr_minsNr. of minutes to set the timer to. 0 means disabled.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRFujitsuAC::setOffTimer (const uint16_t nr_mins)
-
- -

Set the Off Timer time for the A/C.

-
Parameters
- - -
[in]nr_minsNr. of minutes to set the timer to. 0 means disabled.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRFujitsuAC::setOnTimer (const uint16_t nr_mins)
-
- -

Set the On Timer setting of the A/C.

-
Parameters
- - -
[in]nr_minsNr. of minutes to set the timer to. 0 means disabled.
-
-
- -
-
- -

◆ setOutsideQuiet()

- -
-
- - - - - - - - -
void IRFujitsuAC::setOutsideQuiet (const bool on)
-
- -

Set the Outside Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRFujitsuAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
bool IRFujitsuAC::setRaw (const uint8_t newState[],
const uint16_t length 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]newStateA valid code for this protocol.
[in]lengthSize of the newState array.
-
-
-
Returns
true, if successful; Otherwise false. (i.e. size check)
- -
-
- -

◆ setSleepTimer()

- -
-
- - - - - - - - -
void IRFujitsuAC::setSleepTimer (const uint16_t nr_mins)
-
- -

Set the Sleep Timer time for the A/C.

-
Parameters
- - -
[in]nr_minsNr. of minutes to set the timer to. 0 means disabled.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRFujitsuAC::setSwing (const uint8_t swingMode)
-
- -

Set the requested swing operation mode of the A/C unit.

-
Parameters
- - -
[in]swingModeThe swingMode code for the A/C. Vertical, Horizon, or Both. See constants for details.
-
-
-
Note
Not all models support all possible swing modes.
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRFujitsuAC::setTemp (const float temp,
const bool useCelsius = true 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees.
[in]useCelsiusUse Celsius or Fahrenheit?
-
-
- -
-
- -

◆ setTimerType()

- -
-
- - - - - - - - -
void IRFujitsuAC::setTimerType (const uint8_t timertype)
-
- -

Set the Timer type of the A/C message.

-
Parameters
- - -
[in]timertypeThe kind of timer to use for the message.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRFujitsuAC::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ stepHoriz()

- -
-
- - - - - - - - -
void IRFujitsuAC::stepHoriz (void )
-
- -

Request the A/C to step the Horizontal Swing.

- -
-
- -

◆ stepVert()

- -
-
- - - - - - - - -
void IRFujitsuAC::stepVert (void )
-
- -

Request the A/C to step the Vertical Swing.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRFujitsuAC::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRFujitsuAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRFujitsuAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toggleSwingHoriz()

- -
-
- - - - - - - - -
void IRFujitsuAC::toggleSwingHoriz (const bool update = true)
-
- -

Request the A/C to toggle the Horizontal Swing mode.

-
Parameters
- - -
[in]updateDo we need to update the general swing config?
-
-
- -
-
- -

◆ toggleSwingVert()

- -
-
- - - - - - - - -
void IRFujitsuAC::toggleSwingVert (const bool update = true)
-
- -

Request the A/C to toggle the Vertical Swing mode.

-
Parameters
- - -
[in]updateDo we need to update the general swing config?
-
-
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRFujitsuAC::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ updateUseLongOrShort()

- -
-
- - - - - -
- - - - - - - - -
bool IRFujitsuAC::updateUseLongOrShort (void )
-
-private
-
- -

Update the length (size) of the state code for the current configuration.

-
Returns
true, if use long codes; false, use short codes.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRFujitsuAC::validChecksum (uint8_t * state,
const uint16_t length 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
FujitsuProtocol IRFujitsuAC::_
-
-private
-
- -
-
- -

◆ _cmd

- -
-
- - - - - -
- - - - -
uint8_t IRFujitsuAC::_cmd
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRFujitsuAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _model

- -
-
- - - - - -
- - - - -
fujitsu_ac_remote_model_t IRFujitsuAC::_model
-
-private
-
- -
-
- -

◆ _state_length

- -
-
- - - - - -
- - - - -
uint8_t IRFujitsuAC::_state_length
-
-private
-
- -
-
- -

◆ _state_length_short

- -
-
- - - - - -
- - - - -
uint8_t IRFujitsuAC::_state_length_short
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.map deleted file mode 100644 index 88724a6ad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.md5 deleted file mode 100644 index 2f75969f2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -16e9764327aaf3e9a72f668b4a844bcc \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.png deleted file mode 100644 index bb325f163..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRFujitsuAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc-members.html deleted file mode 100644 index c4fa42bc1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRGoodweatherAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRGoodweatherAcprivate
_irsendIRGoodweatherAcprivate
begin(void)IRGoodweatherAc
calibrate(void)IRGoodweatherAcinline
convertFan(const stdAc::fanspeed_t speed)IRGoodweatherAcstatic
convertMode(const stdAc::opmode_t mode)IRGoodweatherAcstatic
convertSwingV(const stdAc::swingv_t swingv)IRGoodweatherAcstatic
getCommand(void) constIRGoodweatherAc
getFan(void) constIRGoodweatherAc
getLight(void) constIRGoodweatherAc
getMode(void) constIRGoodweatherAc
getPower(void) constIRGoodweatherAc
getRaw(void)IRGoodweatherAc
getSleep(void) constIRGoodweatherAc
getSwing(void) constIRGoodweatherAc
getTemp(void) constIRGoodweatherAc
getTurbo(void) constIRGoodweatherAc
IRGoodweatherAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRGoodweatherAcexplicit
off(void)IRGoodweatherAc
on(void)IRGoodweatherAc
send(const uint16_t repeat=kGoodweatherMinRepeat)IRGoodweatherAc
setCommand(const uint8_t cmd)IRGoodweatherAc
setFan(const uint8_t speed)IRGoodweatherAc
setLight(const bool toggle)IRGoodweatherAc
setMode(const uint8_t mode)IRGoodweatherAc
setPower(const bool on)IRGoodweatherAc
setRaw(const uint64_t state)IRGoodweatherAc
setSleep(const bool toggle)IRGoodweatherAc
setSwing(const uint8_t speed)IRGoodweatherAc
setTemp(const uint8_t temp)IRGoodweatherAc
setTurbo(const bool toggle)IRGoodweatherAc
stateReset(void)IRGoodweatherAc
toCommon(void) constIRGoodweatherAc
toCommonFanSpeed(const uint8_t speed)IRGoodweatherAcstatic
toCommonMode(const uint8_t mode)IRGoodweatherAcstatic
toString(void) constIRGoodweatherAc
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc.html deleted file mode 100644 index b2fb915cc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc.html +++ /dev/null @@ -1,1143 +0,0 @@ - - - - - - - -IRremoteESP8266: IRGoodweatherAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Goodweather A/C messages. - More...

- -

#include <ir_Goodweather.h>

-
-Collaboration diagram for IRGoodweatherAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRGoodweatherAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kGoodweatherMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const uint8_t speed)
 Set the Vertical Swing speed of the A/C. More...
 
uint8_t getSwing (void) const
 Get the Vertical Swing speed of the A/C. More...
 
void setSleep (const bool toggle)
 Set the Sleep Toggle setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep Toggle setting of the A/C. More...
 
void setTurbo (const bool toggle)
 Set the Turbo Toggle setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo Toggle setting of the A/C. More...
 
void setLight (const bool toggle)
 Set the Light (LED) Toggle setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (LED) Toggle setting of the A/C. More...
 
void setCommand (const uint8_t cmd)
 Set the remote Command type/button pressed. More...
 
uint8_t getCommand (void) const
 Get the Command type/button pressed from the current settings. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint64_t state)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t swingv)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
GoodweatherProtocol _
 
-

Detailed Description

-

Class for handling detailed Goodweather A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRGoodweatherAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRGoodweatherAc::IRGoodweatherAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRGoodweatherAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRGoodweatherAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGoodweatherAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGoodweatherAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGoodweatherAc::convertSwingV (const stdAc::swingv_t swingv)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]swingvThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getCommand()

- -
-
- - - - - - - - -
uint8_t IRGoodweatherAc::getCommand (void ) const
-
- -

Get the Command type/button pressed from the current settings.

-
Returns
The command/button that was issued/pressed.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRGoodweatherAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRGoodweatherAc::getLight (void ) const
-
- -

Get the Light (LED) Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRGoodweatherAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRGoodweatherAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRGoodweatherAc::getRaw (void )
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRGoodweatherAc::getSleep (void ) const
-
- -

Get the Sleep Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
uint8_t IRGoodweatherAc::getSwing (void ) const
-
- -

Get the Vertical Swing speed of the A/C.

-
Returns
The native swing speed setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRGoodweatherAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRGoodweatherAc::getTurbo (void ) const
-
- -

Get the Turbo Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRGoodweatherAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRGoodweatherAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRGoodweatherAc::send (const uint16_t repeat = kGoodweatherMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setCommand()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setCommand (const uint8_t cmd)
-
- -

Set the remote Command type/button pressed.

-
Parameters
- - -
[in]cmdThe command/button that was issued/pressed.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setLight (const bool toggle)
-
- -

Set the Light (LED) Toggle setting of the A/C.

-
Parameters
- - -
[in]toggletrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setRaw (const uint64_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setSleep (const bool toggle)
-
- -

Set the Sleep Toggle setting of the A/C.

-
Parameters
- - -
[in]toggletrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setSwing (const uint8_t speed)
-
- -

Set the Vertical Swing speed of the A/C.

-
Parameters
- - -
[in]speedThe speed to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRGoodweatherAc::setTurbo (const bool toggle)
-
- -

Set the Turbo Toggle setting of the A/C.

-
Parameters
- - -
[in]toggletrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRGoodweatherAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRGoodweatherAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRGoodweatherAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRGoodweatherAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRGoodweatherAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
GoodweatherProtocol IRGoodweatherAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRGoodweatherAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.map deleted file mode 100644 index b54646ec0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.md5 deleted file mode 100644 index ba5bf82f7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9515d6aef038bdf237b93067d56dc2f7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.png deleted file mode 100644 index 0d63a3627..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGoodweatherAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC-members.html deleted file mode 100644 index 7a1ba80be..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC-members.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRGreeAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRGreeACprivate
_irsendIRGreeACprivate
_modelIRGreeACprivate
begin(void)IRGreeAC
calibrate(void)IRGreeACinline
checksum(const uint16_t length=kGreeStateLength)IRGreeACprivate
convertFan(const stdAc::fanspeed_t speed)IRGreeACstatic
convertMode(const stdAc::opmode_t mode)IRGreeACstatic
convertSwingV(const stdAc::swingv_t swingv)IRGreeACstatic
fixup(void)IRGreeACprivate
getDisplayTempSource(void) constIRGreeAC
getFan(void) constIRGreeAC
getIFeel(void) constIRGreeAC
getLight(void) constIRGreeAC
getMode(void) constIRGreeAC
getModel(void) constIRGreeAC
getPower(void) constIRGreeAC
getRaw(void)IRGreeAC
getSleep(void) constIRGreeAC
getSwingVerticalAuto(void) constIRGreeAC
getSwingVerticalPosition(void) constIRGreeAC
getTemp(void) constIRGreeAC
getTimer(void) constIRGreeAC
getTimerEnabled(void) constIRGreeACprivate
getTurbo(void) constIRGreeAC
getUseFahrenheit(void) constIRGreeAC
getWiFi(void) constIRGreeAC
getXFan(void) constIRGreeAC
IRGreeAC(const uint16_t pin, const gree_ac_remote_model_t model=gree_ac_remote_model_t::YAW1F, const bool inverted=false, const bool use_modulation=true)IRGreeACexplicit
off(void)IRGreeAC
on(void)IRGreeAC
send(const uint16_t repeat=kGreeDefaultRepeat)IRGreeAC
setDisplayTempSource(const uint8_t mode)IRGreeAC
setFan(const uint8_t speed)IRGreeAC
setIFeel(const bool on)IRGreeAC
setLight(const bool on)IRGreeAC
setMode(const uint8_t new_mode)IRGreeAC
setModel(const gree_ac_remote_model_t model)IRGreeAC
setPower(const bool on)IRGreeAC
setRaw(const uint8_t new_code[])IRGreeAC
setSleep(const bool on)IRGreeAC
setSwingVertical(const bool automatic, const uint8_t position)IRGreeAC
setTemp(const uint8_t temp, const bool fahrenheit=false)IRGreeAC
setTimer(const uint16_t minutes)IRGreeAC
setTimerEnabled(const bool on)IRGreeACprivate
setTurbo(const bool on)IRGreeAC
setUseFahrenheit(const bool on)IRGreeAC
setWiFi(const bool on)IRGreeAC
setXFan(const bool on)IRGreeAC
stateReset(void)IRGreeAC
toCommon(void)IRGreeAC
toCommonFanSpeed(const uint8_t speed)IRGreeACstatic
toCommonMode(const uint8_t mode)IRGreeACstatic
toCommonSwingV(const uint8_t pos)IRGreeACstatic
toString(void)IRGreeAC
validChecksum(const uint8_t state[], const uint16_t length=kGreeStateLength)IRGreeACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC.html deleted file mode 100644 index 24b932e9b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC.html +++ /dev/null @@ -1,1773 +0,0 @@ - - - - - - - -IRremoteESP8266: IRGreeAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Gree A/C messages. - More...

- -

#include <ir_Gree.h>

-
-Collaboration diagram for IRGreeAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRGreeAC (const uint16_t pin, const gree_ac_remote_model_t model=gree_ac_remote_model_t::YAW1F, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kGreeDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setModel (const gree_ac_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
gree_ac_remote_model_t getModel (void) const
 Get/Detect the model of the A/C. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp, const bool fahrenheit=false)
 Set the temp. in degrees. More...
 
uint8_t getTemp (void) const
 Get the set temperature. More...
 
void setUseFahrenheit (const bool on)
 Set the default temperature units to use. More...
 
bool getUseFahrenheit (void) const
 Get the default temperature units in use. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t new_mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setLight (const bool on)
 Set the Light (LED) setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (LED) setting of the A/C. More...
 
void setXFan (const bool on)
 Set the XFan (Mould) setting of the A/C. More...
 
bool getXFan (void) const
 Get the XFan (Mould) setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setIFeel (const bool on)
 Set the IFeel setting of the A/C. More...
 
bool getIFeel (void) const
 Get the IFeel setting of the A/C. More...
 
void setWiFi (const bool on)
 Set the Wifi (enabled) setting of the A/C. More...
 
bool getWiFi (void) const
 Get the Wifi (enabled) setting of the A/C. More...
 
void setSwingVertical (const bool automatic, const uint8_t position)
 Set the Vertical Swing mode of the A/C. More...
 
bool getSwingVerticalAuto (void) const
 Get the Vertical Swing Automatic mode setting of the A/C. More...
 
uint8_t getSwingVerticalPosition (void) const
 Get the Vertical Swing position setting of the A/C. More...
 
uint16_t getTimer (void) const
 Get the timer time value from the A/C. More...
 
void setTimer (const uint16_t minutes)
 Set the A/C's timer to turn off in X many minutes. More...
 
void setDisplayTempSource (const uint8_t mode)
 Set temperature display mode. i.e. Internal, External temperature sensing. More...
 
uint8_t getDisplayTempSource (void) const
 Get the temperature display mode. i.e. Internal, External temperature sensing. More...
 
stdAc::state_t toCommon (void)
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
String toString (void)
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t swingv)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static bool validChecksum (const uint8_t state[], const uint16_t length=kGreeStateLength)
 Verify the checksum is valid for a given state. More...
 
- - - - - - - - - - - - - -

-Private Member Functions

void checksum (const uint16_t length=kGreeStateLength)
 Calculate and set the checksum values for the internal state. More...
 
void fixup (void)
 Fix up the internal state so it is correct. More...
 
void setTimerEnabled (const bool on)
 Set the timer enable setting of the A/C. More...
 
bool getTimerEnabled (void) const
 Get the timer enabled setting of the A/C. More...
 
- - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
GreeProtocol _
 
gree_ac_remote_model_t _model
 
-

Detailed Description

-

Class for handling detailed Gree A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRGreeAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IRGreeAC::IRGreeAC (const uint16_t pin,
const gree_ac_remote_model_t model = gree_ac_remote_model_t::YAW1F,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - - -
[in]pinGPIO to be used when sending.
[in]modelThe enum of the model to be emulated.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRGreeAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRGreeAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRGreeAC::checksum (const uint16_t length = kGreeStateLength)
-
-private
-
- -

Calculate and set the checksum values for the internal state.

-
Parameters
- - -
[in]lengthThe size/length of the state array to fix the checksum of.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGreeAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGreeAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRGreeAC::convertSwingV (const stdAc::swingv_t swingv)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]swingvThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ fixup()

- -
-
- - - - - -
- - - - - - - - -
void IRGreeAC::fixup (void )
-
-private
-
- -

Fix up the internal state so it is correct.

-
Note
Internal use only.
- -
-
- -

◆ getDisplayTempSource()

- -
-
- - - - - - - - -
uint8_t IRGreeAC::getDisplayTempSource (void ) const
-
- -

Get the temperature display mode. i.e. Internal, External temperature sensing.

-
Returns
The current temp source being displayed.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRGreeAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getIFeel()

- -
-
- - - - - - - - -
bool IRGreeAC::getIFeel (void ) const
-
- -

Get the IFeel setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRGreeAC::getLight (void ) const
-
- -

Get the Light (LED) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRGreeAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
gree_ac_remote_model_t IRGreeAC::getModel (void ) const
-
- -

Get/Detect the model of the A/C.

-
Returns
The enum of the compatible model.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRGreeAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/814
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRGreeAC::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRGreeAC::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVerticalAuto()

- -
-
- - - - - - - - -
bool IRGreeAC::getSwingVerticalAuto (void ) const
-
- -

Get the Vertical Swing Automatic mode setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVerticalPosition()

- -
-
- - - - - - - - -
uint8_t IRGreeAC::getSwingVerticalPosition (void ) const
-
- -

Get the Vertical Swing position setting of the A/C.

-
Returns
The native position/mode.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRGreeAC::getTemp (void ) const
-
- -

Get the set temperature.

-
Returns
The temperature in degrees in the current units (C/F) set.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint16_t IRGreeAC::getTimer (void ) const
-
- -

Get the timer time value from the A/C.

-
Returns
The number of minutes the timer is set for.
- -
-
- -

◆ getTimerEnabled()

- -
-
- - - - - -
- - - - - - - - -
bool IRGreeAC::getTimerEnabled (void ) const
-
-private
-
- -

Get the timer enabled setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRGreeAC::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getUseFahrenheit()

- -
-
- - - - - - - - -
bool IRGreeAC::getUseFahrenheit (void ) const
-
- -

Get the default temperature units in use.

-
Returns
true is Fahrenheit, false is Celsius.
- -
-
- -

◆ getWiFi()

- -
-
- - - - - - - - -
bool IRGreeAC::getWiFi (void ) const
-
- -

Get the Wifi (enabled) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getXFan()

- -
-
- - - - - - - - -
bool IRGreeAC::getXFan (void ) const
-
- -

Get the XFan (Mould) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRGreeAC::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRGreeAC::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRGreeAC::send (const uint16_t repeat = kGreeDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setDisplayTempSource()

- -
-
- - - - - - - - -
void IRGreeAC::setDisplayTempSource (const uint8_t mode)
-
- -

Set temperature display mode. i.e. Internal, External temperature sensing.

-
Parameters
- - -
[in]modeThe desired temp source to display.
-
-
-
Note
In order for the A/C unit properly accept these settings. You must cycle (send) in the following order: kGreeDisplayTempOff(0) -> kGreeDisplayTempSet(1) -> kGreeDisplayTempInside(2) ->kGreeDisplayTempOutside(3) -> kGreeDisplayTempOff(0). The unit will no behave correctly if the changes of this setting are sent out of order.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1118#issuecomment-628242152
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRGreeAC::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting. 0 is auto, 1-3 is the speed.
-
-
- -
-
- -

◆ setIFeel()

- -
-
- - - - - - - - -
void IRGreeAC::setIFeel (const bool on)
-
- -

Set the IFeel setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRGreeAC::setLight (const bool on)
-
- -

Set the Light (LED) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRGreeAC::setMode (const uint8_t new_mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]new_modeThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRGreeAC::setModel (const gree_ac_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRGreeAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/814
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRGreeAC::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRGreeAC::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRGreeAC::setSwingVertical (const bool automatic,
const uint8_t position 
)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - - -
[in]automaticDo we use the automatic setting?
[in]positionThe position/mode to set the vanes to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRGreeAC::setTemp (const uint8_t temp,
const bool fahrenheit = false 
)
-
- -

Set the temp. in degrees.

-
Parameters
- - - -
[in]tempDesired temperature in Degrees.
[in]fahrenheitUse units of Fahrenheit and set that as units used. false is Celsius (Default), true is Fahrenheit.
-
-
-
Note
The unit actually works in Celsius with a special optional "extra degree" when sending Fahrenheit.
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRGreeAC::setTimer (const uint16_t minutes)
-
- -

Set the A/C's timer to turn off in X many minutes.

-
Parameters
- - -
[in]minutesThe number of minutes the timer should be set for.
-
-
-
Note
Stores time internally in 30 min units. e.g. 5 mins means 0 (& Off), 95 mins is 90 mins (& On). Max is 24 hours.
- -
-
- -

◆ setTimerEnabled()

- -
-
- - - - - -
- - - - - - - - -
void IRGreeAC::setTimerEnabled (const bool on)
-
-private
-
- -

Set the timer enable setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRGreeAC::setTurbo (const bool on)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setUseFahrenheit()

- -
-
- - - - - - - - -
void IRGreeAC::setUseFahrenheit (const bool on)
-
- -

Set the default temperature units to use.

-
Parameters
- - -
[in]onUse Fahrenheit as the units. true is Fahrenheit, false is Celsius.
-
-
- -
-
- -

◆ setWiFi()

- -
-
- - - - - - - - -
void IRGreeAC::setWiFi (const bool on)
-
- -

Set the Wifi (enabled) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setXFan()

- -
-
- - - - - - - - -
void IRGreeAC::setXFan (const bool on)
-
- -

Set the XFan (Mould) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRGreeAC::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRGreeAC::toCommon (void )
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRGreeAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRGreeAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRGreeAC::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]posThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRGreeAC::toString (void )
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRGreeAC::validChecksum (const uint8_t state[],
const uint16_t length = kGreeStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
GreeProtocol IRGreeAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRGreeAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _model

- -
-
- - - - - -
- - - - -
gree_ac_remote_model_t IRGreeAC::_model
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.map deleted file mode 100644 index 249b88a74..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.md5 deleted file mode 100644 index b49f8eafd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f5770a268c043ae769808e90af935008 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.png deleted file mode 100644 index d260e682b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRGreeAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC-members.html deleted file mode 100644 index 772bb4aa4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC-members.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHaierAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHaierACprivate
_irsendIRHaierACprivate
begin(void)IRHaierAC
calibrate(void)IRHaierACinline
cancelTimers(void)IRHaierAC
checksum(void)IRHaierACprivate
convertFan(const stdAc::fanspeed_t speed)IRHaierACstatic
convertMode(const stdAc::opmode_t mode)IRHaierACstatic
convertSwingV(const stdAc::swingv_t position)IRHaierACstatic
getCommand(void) constIRHaierAC
getCurrTime(void) constIRHaierAC
getFan(void) constIRHaierAC
getHealth(void) constIRHaierAC
getMode(void) constIRHaierAC
getOffTimer(void) constIRHaierAC
getOnTimer(void) constIRHaierAC
getRaw(void)IRHaierAC
getSleep(void) constIRHaierAC
getSwing(void) constIRHaierAC
getTemp(void) constIRHaierAC
IRHaierAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHaierACexplicit
send(const uint16_t repeat=kHaierAcDefaultRepeat)IRHaierAC
setCommand(const uint8_t command)IRHaierAC
setCurrTime(const uint16_t mins)IRHaierAC
setFan(const uint8_t speed)IRHaierAC
setHealth(const bool on)IRHaierAC
setMode(const uint8_t mode)IRHaierAC
setOffTimer(const uint16_t mins)IRHaierAC
setOnTimer(const uint16_t mins)IRHaierAC
setRaw(const uint8_t new_code[])IRHaierAC
setSleep(const bool on)IRHaierAC
setSwing(const uint8_t state)IRHaierAC
setTemp(const uint8_t temp)IRHaierAC
stateReset(void)IRHaierACprivate
toCommon(void) constIRHaierAC
toCommonFanSpeed(const uint8_t speed)IRHaierACstatic
toCommonMode(const uint8_t mode)IRHaierACstatic
toCommonSwingV(const uint8_t pos)IRHaierACstatic
toString(void) constIRHaierAC
validChecksum(uint8_t state[], const uint16_t length=kHaierACStateLength)IRHaierACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC.html deleted file mode 100644 index e7155b014..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC.html +++ /dev/null @@ -1,1303 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHaierAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Haier A/C messages. - More...

- -

#include <ir_Haier.h>

-
-Collaboration diagram for IRHaierAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHaierAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kHaierAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setCommand (const uint8_t command)
 Set the Command/Button setting of the A/C. More...
 
uint8_t getCommand (void) const
 Get the Command/Button setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getHealth (void) const
 Get the Health (filter) setting of the A/C. More...
 
void setHealth (const bool on)
 Set the Health (filter) setting of the A/C. More...
 
int16_t getOnTimer (void) const
 Get the On Timer value/setting of the A/C. More...
 
void setOnTimer (const uint16_t mins)
 Set & enable the On Timer. More...
 
int16_t getOffTimer (void) const
 Get the Off Timer value/setting of the A/C. More...
 
void setOffTimer (const uint16_t mins)
 Set & enable the Off Timer. More...
 
void cancelTimers (void)
 Cancel/disable the On & Off timers. More...
 
uint16_t getCurrTime (void) const
 Get the clock value of the A/C. More...
 
void setCurrTime (const uint16_t mins)
 Set the clock value for the A/C. More...
 
uint8_t getSwing (void) const
 Get the Vertical Swing position setting of the A/C. More...
 
void setSwing (const uint8_t state)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kHaierACStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
HaierProtocol _
 
-

Detailed Description

-

Class for handling detailed Haier A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRHaierAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHaierAC::IRHaierAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRHaierAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHaierAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ cancelTimers()

- -
-
- - - - - - - - -
void IRHaierAC::cancelTimers (void )
-
- -

Cancel/disable the On & Off timers.

- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRHaierAC::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierAC::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getCommand()

- -
-
- - - - - - - - -
uint8_t IRHaierAC::getCommand (void ) const
-
- -

Get the Command/Button setting of the A/C.

-
Returns
The value of the command/button that was pressed.
- -
-
- -

◆ getCurrTime()

- -
-
- - - - - - - - -
uint16_t IRHaierAC::getCurrTime (void ) const
-
- -

Get the clock value of the A/C.

-
Returns
The clock time, in Nr of minutes past midnight.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRHaierAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getHealth()

- -
-
- - - - - - - - -
bool IRHaierAC::getHealth (void ) const
-
- -

Get the Health (filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHaierAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
int16_t IRHaierAC::getOffTimer (void ) const
-
- -

Get the Off Timer value/setting of the A/C.

-
Returns
Nr of minutes the timer is set to. -1 is Off/not set etc.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
int16_t IRHaierAC::getOnTimer (void ) const
-
- -

Get the On Timer value/setting of the A/C.

-
Returns
Nr of minutes the timer is set to. -1 is Off/not set etc.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHaierAC::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRHaierAC::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
uint8_t IRHaierAC::getSwing (void ) const
-
- -

Get the Vertical Swing position setting of the A/C.

-
Returns
The native swing mode.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRHaierAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRHaierAC::send (const uint16_t repeat = kHaierAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setCommand()

- -
-
- - - - - - - - -
void IRHaierAC::setCommand (const uint8_t command)
-
- -

Set the Command/Button setting of the A/C.

-
Parameters
- - -
[in]commandThe value of the command/button that was pressed.
-
-
- -
-
- -

◆ setCurrTime()

- -
-
- - - - - - - - -
void IRHaierAC::setCurrTime (const uint16_t nr_mins)
-
- -

Set the clock value for the A/C.

-
Parameters
- - -
[in]nr_minsThe clock time, in Nr of minutes past midnight.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRHaierAC::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setHealth()

- -
-
- - - - - - - - -
void IRHaierAC::setHealth (const bool on)
-
- -

Set the Health (filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRHaierAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRHaierAC::setOffTimer (const uint16_t nr_mins)
-
- -

Set & enable the Off Timer.

-
Parameters
- - -
[in]nr_minsThe time expressed in total number of minutes.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRHaierAC::setOnTimer (const uint16_t nr_mins)
-
- -

Set & enable the On Timer.

-
Parameters
- - -
[in]nr_minsThe time expressed in total number of minutes.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRHaierAC::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRHaierAC::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRHaierAC::setSwing (const uint8_t state)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]stateThe mode to set the vanes to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRHaierAC::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRHaierAC::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRHaierAC::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRHaierAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRHaierAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRHaierAC::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]posThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRHaierAC::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRHaierAC::validChecksum (uint8_t state[],
const uint16_t length = kHaierACStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
HaierProtocol IRHaierAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHaierAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02-members.html deleted file mode 100644 index f73194fe0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHaierACYRW02 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHaierACYRW02private
_irsendIRHaierACYRW02private
begin(void)IRHaierACYRW02
calibrate(void)IRHaierACYRW02inline
checksum(void)IRHaierACYRW02private
convertFan(const stdAc::fanspeed_t speed)IRHaierACYRW02static
convertMode(const stdAc::opmode_t mode)IRHaierACYRW02static
convertSwingV(const stdAc::swingv_t position)IRHaierACYRW02static
getButton(void) constIRHaierACYRW02
getFan(void) constIRHaierACYRW02
getHealth(void) constIRHaierACYRW02
getMode(void) constIRHaierACYRW02
getPower(void) constIRHaierACYRW02
getRaw(void)IRHaierACYRW02
getSleep(void) constIRHaierACYRW02
getSwing(void) constIRHaierACYRW02
getTemp(void) constIRHaierACYRW02
getTurbo(void) constIRHaierACYRW02
IRHaierACYRW02(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHaierACYRW02explicit
off(void)IRHaierACYRW02
on(void)IRHaierACYRW02
send(const uint16_t repeat=kHaierAcYrw02DefaultRepeat)IRHaierACYRW02
setButton(const uint8_t button)IRHaierACYRW02
setFan(const uint8_t speed)IRHaierACYRW02
setHealth(const bool on)IRHaierACYRW02
setMode(const uint8_t mode)IRHaierACYRW02
setPower(const bool on)IRHaierACYRW02
setRaw(const uint8_t new_code[])IRHaierACYRW02
setSleep(const bool on)IRHaierACYRW02
setSwing(const uint8_t pos)IRHaierACYRW02
setTemp(const uint8_t temp)IRHaierACYRW02
setTurbo(const uint8_t speed)IRHaierACYRW02
stateReset(void)IRHaierACYRW02private
toCommon(void) constIRHaierACYRW02
toCommonFanSpeed(const uint8_t speed)IRHaierACYRW02static
toCommonMode(const uint8_t mode)IRHaierACYRW02static
toCommonSwingV(const uint8_t pos)IRHaierACYRW02static
toString(void) constIRHaierACYRW02
validChecksum(uint8_t state[], const uint16_t length=kHaierACYRW02StateLength)IRHaierACYRW02static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02.html deleted file mode 100644 index 379527233..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02.html +++ /dev/null @@ -1,1274 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHaierACYRW02 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Haier ACYRW02 A/C messages. - More...

- -

#include <ir_Haier.h>

-
-Collaboration diagram for IRHaierACYRW02:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHaierACYRW02 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kHaierAcYrw02DefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setButton (const uint8_t button)
 Set the Button/Command setting of the A/C. More...
 
uint8_t getButton (void) const
 Get the Button/Command setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getHealth (void) const
 Get the Health (filter) setting of the A/C. More...
 
void setHealth (const bool on)
 Set the Health (filter) setting of the A/C. More...
 
uint8_t getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setTurbo (const uint8_t speed)
 Set the Turbo setting of the A/C. More...
 
uint8_t getSwing (void) const
 Get the Vertical Swing position setting of the A/C. More...
 
void setSwing (const uint8_t pos)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kHaierACYRW02StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
- - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
HaierYRW02Protocol _
 
-

Detailed Description

-

Class for handling detailed Haier ACYRW02 A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRHaierACYRW02()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHaierACYRW02::IRHaierACYRW02 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRHaierACYRW02::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHaierACYRW02::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRHaierACYRW02::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierACYRW02::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierACYRW02::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHaierACYRW02::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getButton()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getButton (void ) const
-
- -

Get the Button/Command setting of the A/C.

-
Returns
The value of the button/command that was pressed.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getHealth()

- -
-
- - - - - - - - -
bool IRHaierACYRW02::getHealth (void ) const
-
- -

Get the Health (filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRHaierACYRW02::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHaierACYRW02::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRHaierACYRW02::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getSwing (void ) const
-
- -

Get the Vertical Swing position setting of the A/C.

-
Returns
The native position/mode.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
uint8_t IRHaierACYRW02::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
The current turbo speed setting.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRHaierACYRW02::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRHaierACYRW02::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRHaierACYRW02::send (const uint16_t repeat = kHaierAcYrw02DefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setButton()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setButton (const uint8_t button)
-
- -

Set the Button/Command setting of the A/C.

-
Parameters
- - -
[in]buttonThe value of the button/command that was pressed.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setHealth()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setHealth (const bool on)
-
- -

Set the Health (filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setSwing (const uint8_t pos)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]posThe position/mode to set the vanes to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRHaierACYRW02::setTurbo (const uint8_t speed)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]speedThe desired turbo speed setting.
-
-
-
Note
Valid speeds are kHaierAcYrw02TurboOff, kHaierAcYrw02TurboLow, & kHaierAcYrw02TurboHigh.
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRHaierACYRW02::stateReset (void )
-
-private
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRHaierACYRW02::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRHaierACYRW02::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRHaierACYRW02::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRHaierACYRW02::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]posThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRHaierACYRW02::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRHaierACYRW02::validChecksum (uint8_t state[],
const uint16_t length = kHaierACYRW02StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
HaierYRW02Protocol IRHaierACYRW02::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHaierACYRW02::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.map deleted file mode 100644 index 759c2c0ca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.md5 deleted file mode 100644 index d6498c49a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1117c02c0fb2953bf38aaee0fe187ec1 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.png deleted file mode 100644 index 8cc61e7fc..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierACYRW02__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.map deleted file mode 100644 index 072461044..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.md5 deleted file mode 100644 index b98100c67..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -301f21afa87365f8095e4c29507be9ef \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.png deleted file mode 100644 index 242fc76d6..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHaierAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc-members.html deleted file mode 100644 index 28ea3123d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHitachiAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHitachiAcprivate
_irsendIRHitachiAcprivate
_previoustempIRHitachiAcprivate
begin(void)IRHitachiAc
calcChecksum(const uint8_t state[], const uint16_t length=kHitachiAcStateLength)IRHitachiAcstatic
calibrate(void)IRHitachiAcinline
checksum(const uint16_t length=kHitachiAcStateLength)IRHitachiAcprivate
convertFan(const stdAc::fanspeed_t speed)IRHitachiAcstatic
convertMode(const stdAc::opmode_t mode)IRHitachiAcstatic
getFan(void) constIRHitachiAc
getMode(void) constIRHitachiAc
getPower(void) constIRHitachiAc
getRaw(void)IRHitachiAc
getSwingHorizontal(void) constIRHitachiAc
getSwingVertical(void) constIRHitachiAc
getTemp(void) constIRHitachiAc
IRHitachiAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAcexplicit
off(void)IRHitachiAc
on(void)IRHitachiAc
send(const uint16_t repeat=kHitachiAcDefaultRepeat)IRHitachiAc
setFan(const uint8_t speed)IRHitachiAc
setMode(const uint8_t mode)IRHitachiAc
setPower(const bool on)IRHitachiAc
setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAcStateLength)IRHitachiAc
setSwingHorizontal(const bool on)IRHitachiAc
setSwingVertical(const bool on)IRHitachiAc
setTemp(const uint8_t temp)IRHitachiAc
stateReset(void)IRHitachiAc
toCommon(void) constIRHitachiAc
toCommonFanSpeed(const uint8_t speed)IRHitachiAcstatic
toCommonMode(const uint8_t mode)IRHitachiAcstatic
toString(void) constIRHitachiAc
validChecksum(const uint8_t state[], const uint16_t length=kHitachiAcStateLength)IRHitachiAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc.html deleted file mode 100644 index dee8e972f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc.html +++ /dev/null @@ -1,1121 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHitachiAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Hitachi 224-bit A/C messages. - More...

- -

#include <ir_Hitachi.h>

-
-Collaboration diagram for IRHitachiAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHitachiAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingVertical (const bool on)
 Set the Vertical Swing setting of the A/C. More...
 
bool getSwingVertical (void) const
 Get the Vertical Swing setting of the A/C. More...
 
void setSwingHorizontal (const bool on)
 Set the Horizontal Swing setting of the A/C. More...
 
bool getSwingHorizontal (void) const
 Get the Horizontal Swing setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kHitachiAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kHitachiAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kHitachiAcStateLength)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kHitachiAcStateLength)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
HitachiProtocol _
 
uint8_t _previoustemp
 
-

Detailed Description

-

Class for handling detailed Hitachi 224-bit A/C messages.

-
See also
https://github.com/ToniA/arduino-heatpumpir/blob/master/HitachiHeatpumpIR.cpp
-

Constructor & Destructor Documentation

- -

◆ IRHitachiAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHitachiAc::IRHitachiAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRHitachiAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRHitachiAc::calcChecksum (const uint8_t state[],
const uint16_t length = kHitachiAcStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe value to calc the checksum of.
[in]lengthThe size/length of the state.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHitachiAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc::checksum (const uint16_t length = kHitachiAcStateLength)
-
-private
-
- -

Calculate and set the checksum values for the internal state.

-
Parameters
- - -
[in]lengthThe size/length of the state.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRHitachiAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHitachiAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRHitachiAc::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRHitachiAc::getSwingVertical (void ) const
-
- -

Get the Vertical Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRHitachiAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRHitachiAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRHitachiAc::send (const uint16_t repeat = kHitachiAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRHitachiAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRHitachiAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRHitachiAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc::setRaw (const uint8_t new_code[],
const uint16_t length = kHitachiAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length of the new_code array.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRHitachiAc::setSwingHorizontal (const bool on)
-
- -

Set the Horizontal Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRHitachiAc::setSwingVertical (const bool on)
-
- -

Set the Vertical Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRHitachiAc::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRHitachiAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRHitachiAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRHitachiAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRHitachiAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRHitachiAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRHitachiAc::validChecksum (const uint8_t state[],
const uint16_t length = kHitachiAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
HitachiProtocol IRHitachiAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHitachiAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _previoustemp

- -
-
- - - - - -
- - - - -
uint8_t IRHitachiAc::_previoustemp
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1-members.html deleted file mode 100644 index a0ce7ebfe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHitachiAc1 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHitachiAc1private
_irsendIRHitachiAc1private
begin(void)IRHitachiAc1
calcChecksum(const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)IRHitachiAc1static
calibrate(void)IRHitachiAc1inline
checksum(const uint16_t length=kHitachiAc1StateLength)IRHitachiAc1private
convertFan(const stdAc::fanspeed_t speed)IRHitachiAc1static
convertMode(const stdAc::opmode_t mode)IRHitachiAc1static
getFan(void) constIRHitachiAc1
getMode(void) constIRHitachiAc1
getModel(void) constIRHitachiAc1
getOffTimer(void) constIRHitachiAc1
getOnTimer(void) constIRHitachiAc1
getPower(void) constIRHitachiAc1
getPowerToggle(void) constIRHitachiAc1
getRaw(void)IRHitachiAc1
getSleep(void) constIRHitachiAc1
getSwingH(void) constIRHitachiAc1
getSwingToggle(void) constIRHitachiAc1
getSwingV(void) constIRHitachiAc1
getTemp(void) constIRHitachiAc1
IRHitachiAc1(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAc1explicit
off(void)IRHitachiAc1
on(void)IRHitachiAc1
send(const uint16_t repeat=kHitachiAcDefaultRepeat)IRHitachiAc1
setFan(const uint8_t speed, const bool force=false)IRHitachiAc1
setMode(const uint8_t mode)IRHitachiAc1
setModel(const hitachi_ac1_remote_model_t model)IRHitachiAc1
setOffTimer(const uint16_t mins)IRHitachiAc1
setOnTimer(const uint16_t mins)IRHitachiAc1
setPower(const bool on)IRHitachiAc1
setPowerToggle(const bool on)IRHitachiAc1
setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc1StateLength)IRHitachiAc1
setSleep(const uint8_t mode)IRHitachiAc1
setSwingH(const bool on)IRHitachiAc1
setSwingToggle(const bool toggle)IRHitachiAc1
setSwingV(const bool on)IRHitachiAc1
setTemp(const uint8_t temp)IRHitachiAc1
stateReset(void)IRHitachiAc1
toCommon(void) constIRHitachiAc1
toCommonFanSpeed(const uint8_t speed)IRHitachiAc1static
toCommonMode(const uint8_t mode)IRHitachiAc1static
toString(void) constIRHitachiAc1
validChecksum(const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)IRHitachiAc1static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1.html deleted file mode 100644 index 7214ee8db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1.html +++ /dev/null @@ -1,1428 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHitachiAc1 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Hitachi 104-bit A/C messages. - More...

- -

#include <ir_Hitachi.h>

-
-Collaboration diagram for IRHitachiAc1:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHitachiAc1 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setModel (const hitachi_ac1_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
hitachi_ac1_remote_model_t getModel (void) const
 Get/Detect the model of the A/C. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setPowerToggle (const bool on)
 Change the power toggle setting. More...
 
bool getPowerToggle (void) const
 Get the value of the current power toggle setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed, const bool force=false)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingToggle (const bool toggle)
 Set the Swing toggle setting of the A/C. More...
 
bool getSwingToggle (void) const
 Get the Swing Toggle setting of the A/C. More...
 
void setSwingV (const bool on)
 Set the Vertical Swing setting of the A/C. More...
 
bool getSwingV (void) const
 Get the Vertical Swing setting of the A/C. More...
 
void setSwingH (const bool on)
 Set the Horizontal Swing setting of the A/C. More...
 
bool getSwingH (void) const
 Get the Horizontal Swing setting of the A/C. More...
 
void setSleep (const uint8_t mode)
 Set the Sleep setting of the A/C. More...
 
uint8_t getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setOnTimer (const uint16_t mins)
 Set the On Timer time. More...
 
uint16_t getOnTimer (void) const
 Get the On Timer vtime of the A/C. More...
 
void setOffTimer (const uint16_t mins)
 Set the Off Timer time. More...
 
uint16_t getOffTimer (void) const
 Get the Off Timer vtime of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kHitachiAc1StateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kHitachiAc1StateLength)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Hitachi1Protocol _
 
-

Detailed Description

-

Class for handling detailed Hitachi 104-bit A/C messages.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1056
-

Constructor & Destructor Documentation

- -

◆ IRHitachiAc1()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHitachiAc1::IRHitachiAc1 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRHitachiAc1::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRHitachiAc1::calcChecksum (const uint8_t state[],
const uint16_t length = kHitachiAc1StateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe value to calc the checksum of.
[in]lengthThe size/length of the state.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHitachiAc1::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc1::checksum (const uint16_t length = kHitachiAc1StateLength)
-
-private
-
- -

Calculate and set the checksum values for the internal state.

-
Parameters
- - -
[in]lengthThe size/length of the state.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc1::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc1::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc1::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc1::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
hitachi_ac1_remote_model_t IRHitachiAc1::getModel (void ) const
-
- -

Get/Detect the model of the A/C.

-
Returns
The enum of the compatible model.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRHitachiAc1::getOffTimer (void ) const
-
- -

Get the Off Timer vtime of the A/C.

-
Returns
Nr of minutes the timer is set to.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRHitachiAc1::getOnTimer (void ) const
-
- -

Get the On Timer vtime of the A/C.

-
Returns
Nr of minutes the timer is set to.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRHitachiAc1::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - - -
bool IRHitachiAc1::getPowerToggle (void ) const
-
- -

Get the value of the current power toggle setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHitachiAc1::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc1::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
The currently configured sleep mode.
-
Note
Sleep modes only available in Auto & Cool modes, otherwise it's off.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
bool IRHitachiAc1::getSwingH (void ) const
-
- -

Get the Horizontal Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingToggle()

- -
-
- - - - - - - - -
bool IRHitachiAc1::getSwingToggle (void ) const
-
- -

Get the Swing Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRHitachiAc1::getSwingV (void ) const
-
- -

Get the Vertical Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc1::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRHitachiAc1::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRHitachiAc1::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRHitachiAc1::send (const uint16_t repeat = kHitachiAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc1::setFan (const uint8_t speed,
const bool force = false 
)
-
- -

Set the speed of the fan.

-
Parameters
- - - -
[in]speedThe desired setting.
[in]forceDeprecated
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRHitachiAc1::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRHitachiAc1::setModel (const hitachi_ac1_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRHitachiAc1::setOffTimer (const uint16_t mins)
-
- -

Set the Off Timer time.

-
Parameters
- - -
[in]minsThe time expressed in total number of minutes.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRHitachiAc1::setOnTimer (const uint16_t mins)
-
- -

Set the On Timer time.

-
Parameters
- - -
[in]minsThe time expressed in total number of minutes.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRHitachiAc1::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRHitachiAc1::setPowerToggle (const bool on)
-
- -

Change the power toggle setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc1::setRaw (const uint8_t new_code[],
const uint16_t length = kHitachiAc1StateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length of the new_code array.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRHitachiAc1::setSleep (const uint8_t mode)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]modeThe mode of sleep to set the A/C to.
-
-
-
Note
Sleep modes only available in Auto & Cool modes, otherwise it's off.
- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRHitachiAc1::setSwingH (const bool on)
-
- -

Set the Horizontal Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingToggle()

- -
-
- - - - - - - - -
void IRHitachiAc1::setSwingToggle (const bool toggle)
-
- -

Set the Swing toggle setting of the A/C.

-
Parameters
- - -
[in]toggletrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRHitachiAc1::setSwingV (const bool on)
-
- -

Set the Vertical Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRHitachiAc1::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRHitachiAc1::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRHitachiAc1::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRHitachiAc1::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRHitachiAc1::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRHitachiAc1::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRHitachiAc1::validChecksum (const uint8_t state[],
const uint16_t length = kHitachiAc1StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Hitachi1Protocol IRHitachiAc1::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHitachiAc1::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.map deleted file mode 100644 index 79c719e09..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.md5 deleted file mode 100644 index 850187d58..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -48a0ef080d3cabb2ff9010e6dd6e0f55 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.png deleted file mode 100644 index 575c70740..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc1__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3-members.html deleted file mode 100644 index 718bcbd17..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHitachiAc3 Member List
-
-
- -

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

- - - - - - - - - - - - - -
_irsendIRHitachiAc3private
begin(void)IRHitachiAc3
calibrate(void)IRHitachiAc3inline
getMode(void)IRHitachiAc3
getRaw(void)IRHitachiAc3
hasInvertedStates(const uint8_t state[], const uint16_t length)IRHitachiAc3static
IRHitachiAc3(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAc3explicit
remote_stateIRHitachiAc3private
send(const uint16_t repeat=kHitachiAcDefaultRepeat)IRHitachiAc3
setInvertedStates(const uint16_t length=kHitachiAc3StateLength)IRHitachiAc3private
setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc3StateLength)IRHitachiAc3
stateReset(void)IRHitachiAc3
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3.html deleted file mode 100644 index c19681754..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3.html +++ /dev/null @@ -1,498 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHitachiAc3 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages. - More...

- -

#include <ir_Hitachi.h>

-
-Collaboration diagram for IRHitachiAc3:
-
-
Collaboration graph
- - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHitachiAc3 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kHitachiAcDefaultRepeat)
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
uint8_t getMode (void)
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kHitachiAc3StateLength)
 Set the internal state from a valid code for this protocol. More...
 
- - - - -

-Static Public Member Functions

static bool hasInvertedStates (const uint8_t state[], const uint16_t length)
 Check if every second byte of the state, after the fixed header is inverted to the previous byte. More...
 
- - - - -

-Private Member Functions

void setInvertedStates (const uint16_t length=kHitachiAc3StateLength)
 Invert every second byte of the internal state, after the fixed header. More...
 
- - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
uint8_t remote_state [kHitachiAc3StateLength]
 The state in native code. More...
 
-

Detailed Description

-

Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRHitachiAc3()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHitachiAc3::IRHitachiAc3 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRHitachiAc3::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHitachiAc3::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc3::getMode (void )
-
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHitachiAc3::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ hasInvertedStates()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRHitachiAc3::hasInvertedStates (const uint8_t state[],
const uint16_t length 
)
-
-static
-
- -

Check if every second byte of the state, after the fixed header is inverted to the previous byte.

-
Parameters
- - - -
[in]stateThe state array to be checked.
[in]lengthThe size of the state array.
-
-
-
Note
This is this protocols integrity check.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRHitachiAc3::send (const uint16_t repeat = kHitachiAcDefaultRepeat)
-
- -
-
- -

◆ setInvertedStates()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc3::setInvertedStates (const uint16_t length = kHitachiAc3StateLength)
-
-private
-
- -

Invert every second byte of the internal state, after the fixed header.

-
Parameters
- - -
[in]lengthThe size of the state array.
-
-
-
Note
This is this protocols integrity check.
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc3::setRaw (const uint8_t new_code[],
const uint16_t length = kHitachiAc3StateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length of the new_code array.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRHitachiAc3::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

-
Note
Reset to auto fan, cooling, 23° Celsius
- -
-
-

Member Data Documentation

- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHitachiAc3::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ remote_state

- -
-
- - - - - -
- - - - -
uint8_t IRHitachiAc3::remote_state[kHitachiAc3StateLength]
-
-private
-
- -

The state in native code.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344-members.html deleted file mode 100644 index 41d360da2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHitachiAc344 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHitachiAc424private
_irsendIRHitachiAc424private
_previoustempIRHitachiAc424private
_toString(void) constIRHitachiAc424private
begin(void)IRHitachiAc424
calibrate(void)IRHitachiAc424inline
convertFan(const stdAc::fanspeed_t speed)IRHitachiAc424static
convertMode(const stdAc::opmode_t mode)IRHitachiAc424static
convertSwingH(const stdAc::swingh_t position)IRHitachiAc344static
getButton(void) constIRHitachiAc424
getFan(void) constIRHitachiAc424
getMode(void) constIRHitachiAc424
getPower(void) constIRHitachiAc424
getRaw(void)IRHitachiAc424
getSwingH(void) constIRHitachiAc344
getSwingV(void) constIRHitachiAc344
getSwingVToggle(void) constIRHitachiAc424
getTemp(void) constIRHitachiAc424
IRHitachiAc344(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAc344explicit
IRHitachiAc424(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAc424explicit
off(void)IRHitachiAc424
on(void)IRHitachiAc424
send(const uint16_t repeat=kHitachiAcDefaultRepeat) overrideIRHitachiAc344virtual
setButton(const uint8_t button)IRHitachiAc424
setFan(const uint8_t speed)IRHitachiAc424
setInvertedStates(void)IRHitachiAc424private
setMode(const uint8_t mode)IRHitachiAc424
setPower(const bool on)IRHitachiAc424
setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc344StateLength) overrideIRHitachiAc344virtual
setSwingH(const uint8_t position)IRHitachiAc344
setSwingV(const bool on)IRHitachiAc344
setSwingVToggle(const bool on)IRHitachiAc424
setTemp(const uint8_t temp, bool setPrevious=true)IRHitachiAc424
stateReset(void) overrideIRHitachiAc344virtual
toCommon(void) const overrideIRHitachiAc344virtual
toCommonFanSpeed(const uint8_t speed)IRHitachiAc424static
toCommonMode(const uint8_t mode)IRHitachiAc424static
toCommonSwingH(const uint8_t pos)IRHitachiAc344static
toString(void) const overrideIRHitachiAc344virtual
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344.html deleted file mode 100644 index 4016c2e31..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344.html +++ /dev/null @@ -1,615 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHitachiAc344 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
IRHitachiAc344 Class Reference
-
-
- -

Class for handling detailed Hitachi 344-bit A/C messages. - More...

- -

#include <ir_Hitachi.h>

-
-Inheritance diagram for IRHitachiAc344:
-
-
Inheritance graph
- - - - -
[legend]
-
-Collaboration diagram for IRHitachiAc344:
-
-
Collaboration graph
- - - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHitachiAc344 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor for handling detailed Hitachi_AC344 43 byte A/C messages. More...
 
void stateReset (void) override
 Reset the internal state to auto fan, cooling, 23° Celsius. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kHitachiAc344StateLength) override
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const override
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
void send (const uint16_t repeat=kHitachiAcDefaultRepeat) override
 Create and send the IR message to the A/C. More...
 
void setSwingV (const bool on)
 Control the vertical swing setting. More...
 
bool getSwingV (void) const
 Get the current vertical swing setting. More...
 
void setSwingH (const uint8_t position)
 Control the horizontal swing setting. More...
 
uint8_t getSwingH (void) const
 Get the current horizontal swing setting. More...
 
String toString (void) const override
 Convert the internal state into a human readable string. More...
 
- Public Member Functions inherited from IRHitachiAc424
 IRHitachiAc424 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp, bool setPrevious=true)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getButton (void) const
 Get the Button/Command setting of the A/C. More...
 
void setButton (const uint8_t button)
 Set the Button/Command pressed setting of the A/C. More...
 
void setSwingVToggle (const bool on)
 Set the Vertical Swing toggle setting of the A/C. More...
 
bool getSwingVToggle (void) const
 Get the Vertical Swing toggle setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
- - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a standard A/C horizontal swing into its native setting. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- Static Public Member Functions inherited from IRHitachiAc424
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
-

Detailed Description

-

Class for handling detailed Hitachi 344-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRHitachiAc344()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHitachiAc344::IRHitachiAc344 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor for handling detailed Hitachi_AC344 43 byte A/C messages.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc344::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a standard A/C horizontal swing into its native setting.

-
Parameters
- - -
[in]positionA stdAc::swingh_t position to convert.
-
-
-
Returns
The equivilent native horizontal swing position.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc344::getSwingH (void ) const
-
- -

Get the current horizontal swing setting.

-
Returns
The current position horizontal swing is set to.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRHitachiAc344::getSwingV (void ) const
-
- -

Get the current vertical swing setting.

-
Returns
True, if the setting is on. False, it is off.
- -
-
- -

◆ send()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc344::send (const uint16_t repeat = kHitachiAcDefaultRepeat)
-
-overridevirtual
-
- -

Create and send the IR message to the A/C.

-
Parameters
- - -
[in]repeatNr. of times to repeat the message.
-
-
- -

Reimplemented from IRHitachiAc424.

- -
-
- -

◆ setRaw()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc344::setRaw (const uint8_t new_code[],
const uint16_t length = kHitachiAc344StateLength 
)
-
-overridevirtual
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthSize (in bytes) of the code for this protocol.
-
-
- -

Reimplemented from IRHitachiAc424.

- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRHitachiAc344::setSwingH (const uint8_t position)
-
- -

Control the horizontal swing setting.

-
Parameters
- - -
[in]positionThe position to set the horizontal swing to.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRHitachiAc344::setSwingV (const bool on)
-
- -

Control the vertical swing setting.

-
Parameters
- - -
[in]onTrue, turns on the feature. False, turns off the feature.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc344::stateReset (void )
-
-overridevirtual
-
- -

Reset the internal state to auto fan, cooling, 23° Celsius.

- -

Reimplemented from IRHitachiAc424.

- -
-
- -

◆ toCommon()

- -
-
- - - - - -
- - - - - - - - -
stdAc::state_t IRHitachiAc344::toCommon (void ) const
-
-overridevirtual
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -

Reimplemented from IRHitachiAc424.

- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRHitachiAc344::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - -
- - - - - - - - -
String IRHitachiAc344::toString (void ) const
-
-overridevirtual
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -

Reimplemented from IRHitachiAc424.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.map deleted file mode 100644 index ac88538ed..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.md5 deleted file mode 100644 index 1d399ccbd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -007d583f5470b877c4b554453cb43490 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.png deleted file mode 100644 index 73ebe5caa..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.map deleted file mode 100644 index 6ee5f2904..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.md5 deleted file mode 100644 index 5ccb815dc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -35cefb94d2f36be1ad5c9d511cbdbb17 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.png deleted file mode 100644 index 85a663aa2..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc344__inherit__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.map deleted file mode 100644 index 7ab16fde8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.md5 deleted file mode 100644 index 49092288c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -83b1a000783b5409d1f40cfaae3aa3e3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.png deleted file mode 100644 index f721b1bcd..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc3__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424-members.html deleted file mode 100644 index be2d45792..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRHitachiAc424 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRHitachiAc424private
_irsendIRHitachiAc424private
_previoustempIRHitachiAc424private
_toString(void) constIRHitachiAc424private
begin(void)IRHitachiAc424
calibrate(void)IRHitachiAc424inline
convertFan(const stdAc::fanspeed_t speed)IRHitachiAc424static
convertMode(const stdAc::opmode_t mode)IRHitachiAc424static
getButton(void) constIRHitachiAc424
getFan(void) constIRHitachiAc424
getMode(void) constIRHitachiAc424
getPower(void) constIRHitachiAc424
getRaw(void)IRHitachiAc424
getSwingVToggle(void) constIRHitachiAc424
getTemp(void) constIRHitachiAc424
IRHitachiAc344 classIRHitachiAc424friend
IRHitachiAc424(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRHitachiAc424explicit
off(void)IRHitachiAc424
on(void)IRHitachiAc424
send(const uint16_t repeat=kHitachiAcDefaultRepeat)IRHitachiAc424virtual
setButton(const uint8_t button)IRHitachiAc424
setFan(const uint8_t speed)IRHitachiAc424
setInvertedStates(void)IRHitachiAc424private
setMode(const uint8_t mode)IRHitachiAc424
setPower(const bool on)IRHitachiAc424
setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc424StateLength)IRHitachiAc424virtual
setSwingVToggle(const bool on)IRHitachiAc424
setTemp(const uint8_t temp, bool setPrevious=true)IRHitachiAc424
stateReset(void)IRHitachiAc424virtual
toCommon(void) constIRHitachiAc424virtual
toCommonFanSpeed(const uint8_t speed)IRHitachiAc424static
toCommonMode(const uint8_t mode)IRHitachiAc424static
toString(void) constIRHitachiAc424virtual
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424.html deleted file mode 100644 index 7c272838c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424.html +++ /dev/null @@ -1,1149 +0,0 @@ - - - - - - - -IRremoteESP8266: IRHitachiAc424 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Hitachi 53-byte/424-bit A/C messages. - More...

- -

#include <ir_Hitachi.h>

-
-Inheritance diagram for IRHitachiAc424:
-
-
Inheritance graph
- - - - -
[legend]
-
-Collaboration diagram for IRHitachiAc424:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRHitachiAc424 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
virtual void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
virtual void send (const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp, bool setPrevious=true)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getButton (void) const
 Get the Button/Command setting of the A/C. More...
 
void setButton (const uint8_t button)
 Set the Button/Command pressed setting of the A/C. More...
 
void setSwingVToggle (const bool on)
 Set the Vertical Swing toggle setting of the A/C. More...
 
bool getSwingVToggle (void) const
 Get the Vertical Swing toggle setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
virtual void setRaw (const uint8_t new_code[], const uint16_t length=kHitachiAc424StateLength)
 Set the internal state from a valid code for this protocol. More...
 
virtual stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
virtual String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void setInvertedStates (void)
 Update the internal consistency check for the protocol. More...
 
String _toString (void) const
 Convert the internal state into a human readable string for the settings that are common to protocols of this nature. More...
 
- - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Hitachi424Protocol _
 
uint8_t _previoustemp
 
- - - -

-Friends

class IRHitachiAc344
 
-

Detailed Description

-

Class for handling detailed Hitachi 53-byte/424-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRHitachiAc424()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRHitachiAc424::IRHitachiAc424 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _toString()

- -
-
- - - - - -
- - - - - - - - -
String IRHitachiAc424::_toString (void ) const
-
-private
-
- -

Convert the internal state into a human readable string for the settings that are common to protocols of this nature.

-
Returns
A string containing the common settings in human-readable form.
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRHitachiAc424::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRHitachiAc424::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc424::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRHitachiAc424::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getButton()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc424::getButton (void ) const
-
- -

Get the Button/Command setting of the A/C.

-
Returns
The value of the button/command that was pressed.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc424::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc424::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRHitachiAc424::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRHitachiAc424::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingVToggle()

- -
-
- - - - - - - - -
bool IRHitachiAc424::getSwingVToggle (void ) const
-
- -

Get the Vertical Swing toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRHitachiAc424::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRHitachiAc424::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRHitachiAc424::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc424::send (const uint16_t repeat = kHitachiAcDefaultRepeat)
-
-virtual
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -

Reimplemented in IRHitachiAc344.

- -
-
- -

◆ setButton()

- -
-
- - - - - - - - -
void IRHitachiAc424::setButton (const uint8_t button)
-
- -

Set the Button/Command pressed setting of the A/C.

-
Parameters
- - -
[in]buttonThe value of the button/command that was pressed.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRHitachiAc424::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setInvertedStates()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc424::setInvertedStates (void )
-
-private
-
- -

Update the internal consistency check for the protocol.

- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRHitachiAc424::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRHitachiAc424::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc424::setRaw (const uint8_t new_code[],
const uint16_t length = kHitachiAc424StateLength 
)
-
-virtual
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length of the new_code array.
-
-
- -

Reimplemented in IRHitachiAc344.

- -
-
- -

◆ setSwingVToggle()

- -
-
- - - - - - - - -
void IRHitachiAc424::setSwingVToggle (const bool on)
-
- -

Set the Vertical Swing toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
The remote does not keep state of the vertical swing. A byte is sent indicating the swing button is pressed on the remote
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRHitachiAc424::setTemp (const uint8_t celsius,
bool setPrevious = true 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]celsiusThe temperature in degrees celsius.
[in]setPrevioustrue, remember this if we change mode. false, don't.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRHitachiAc424::stateReset (void )
-
-virtual
-
- -

Reset the internal state to a fixed known good state.

-
Note
Reset to auto fan, cooling, 23° Celsius
- -

Reimplemented in IRHitachiAc344.

- -
-
- -

◆ toCommon()

- -
-
- - - - - -
- - - - - - - - -
stdAc::state_t IRHitachiAc424::toCommon (void ) const
-
-virtual
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -

Reimplemented in IRHitachiAc344.

- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRHitachiAc424::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRHitachiAc424::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - -
- - - - - - - - -
String IRHitachiAc424::toString (void ) const
-
-virtual
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -

Reimplemented in IRHitachiAc344.

- -
-
-

Friends And Related Function Documentation

- -

◆ IRHitachiAc344

- -
-
- - - - - -
- - - - -
friend class IRHitachiAc344
-
-friend
-
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Hitachi424Protocol IRHitachiAc424::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRHitachiAc424::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _previoustemp

- -
-
- - - - - -
- - - - -
uint8_t IRHitachiAc424::_previoustemp
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.map deleted file mode 100644 index 71690420f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.md5 deleted file mode 100644 index 5d216dcf4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -271ff178124ba2f2825dd8969b2b450e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.png deleted file mode 100644 index 677ce9b1c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.map deleted file mode 100644 index b93678e31..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.md5 deleted file mode 100644 index 8cc016c00..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -83321b013f1eecd9a72546893407d4cc \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.png deleted file mode 100644 index df924b19f..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc424__inherit__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.map deleted file mode 100644 index 41c946625..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.md5 deleted file mode 100644 index 898cfbdb9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -85e3859ea42813c8712d141519ae4f4c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.png deleted file mode 100644 index 3e4140856..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRHitachiAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC-members.html deleted file mode 100644 index 571a39631..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC-members.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRKelvinatorAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRKelvinatorACprivate
_irsendIRKelvinatorACprivate
begin(void)IRKelvinatorAC
calcBlockChecksum(const uint8_t *block, const uint16_t length=kKelvinatorStateLength/2)IRKelvinatorACstatic
calibrate(void)IRKelvinatorACinline
checksum(void)IRKelvinatorACprivate
convertMode(const stdAc::opmode_t mode)IRKelvinatorACstatic
fixup(void)IRKelvinatorACprivate
getFan(void) constIRKelvinatorAC
getIonFilter(void) constIRKelvinatorAC
getLight(void) constIRKelvinatorAC
getMode(void) constIRKelvinatorAC
getPower(void) constIRKelvinatorAC
getQuiet(void) constIRKelvinatorAC
getRaw(void)IRKelvinatorAC
getSwingHorizontal(void) constIRKelvinatorAC
getSwingVertical(void) constIRKelvinatorAC
getTemp(void) constIRKelvinatorAC
getTurbo(void) constIRKelvinatorAC
getXFan(void) constIRKelvinatorAC
IRKelvinatorAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRKelvinatorACexplicit
off(void)IRKelvinatorAC
on(void)IRKelvinatorAC
send(const uint16_t repeat=kKelvinatorDefaultRepeat)IRKelvinatorAC
setFan(const uint8_t speed)IRKelvinatorAC
setIonFilter(const bool on)IRKelvinatorAC
setLight(const bool on)IRKelvinatorAC
setMode(const uint8_t mode)IRKelvinatorAC
setPower(const bool on)IRKelvinatorAC
setQuiet(const bool on)IRKelvinatorAC
setRaw(const uint8_t new_code[])IRKelvinatorAC
setSwingHorizontal(const bool on)IRKelvinatorAC
setSwingVertical(const bool on)IRKelvinatorAC
setTemp(const uint8_t degrees)IRKelvinatorAC
setTurbo(const bool on)IRKelvinatorAC
setXFan(const bool on)IRKelvinatorAC
stateReset(void)IRKelvinatorAC
toCommon(void) constIRKelvinatorAC
toCommonFanSpeed(const uint8_t speed)IRKelvinatorACstatic
toCommonMode(const uint8_t mode)IRKelvinatorACstatic
toString(void) constIRKelvinatorAC
validChecksum(const uint8_t state[], const uint16_t length=kKelvinatorStateLength)IRKelvinatorACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC.html deleted file mode 100644 index 97d75459d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC.html +++ /dev/null @@ -1,1340 +0,0 @@ - - - - - - - -IRremoteESP8266: IRKelvinatorAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Kelvinator A/C messages. - More...

- -

#include <ir_Kelvinator.h>

-
-Collaboration diagram for IRKelvinatorAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRKelvinatorAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internals of the object to a known good state. More...
 
void send (const uint16_t repeat=kKelvinatorDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the internal state to have the power on. More...
 
void off (void)
 Set the internal state to have the power off. More...
 
void setPower (const bool on)
 Set the internal state to have the desired power. More...
 
bool getPower (void) const
 Get the power setting from the internal state. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature setting. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the desired operation mode. More...
 
uint8_t getMode (void) const
 Get the current operation mode setting. More...
 
void setSwingVertical (const bool on)
 Control the current vertical swing setting. More...
 
bool getSwingVertical (void) const
 Is the vertical swing setting on? More...
 
void setSwingHorizontal (const bool on)
 Control the current horizontal swing setting. More...
 
bool getSwingHorizontal (void) const
 Is the horizontal swing setting on? More...
 
void setQuiet (const bool on)
 Control the current Quiet setting. More...
 
bool getQuiet (void) const
 Is the Quiet setting on? More...
 
void setIonFilter (const bool on)
 Control the current Ion Filter setting. More...
 
bool getIonFilter (void) const
 Is the Ion Filter setting on? More...
 
void setLight (const bool on)
 Control the current Light setting. i.e. The LED display on the A/C unit that shows the basic settings. More...
 
bool getLight (void) const
 Is the Light (Display) setting on? More...
 
void setXFan (const bool on)
 Control the current XFan setting. This setting will cause the unit blow air after power off to dry out the A/C device. More...
 
bool getXFan (void) const
 Is the XFan setting on? More...
 
void setTurbo (const bool on)
 Control the current Turbo setting. More...
 
bool getTurbo (void) const
 Is the Turbo setting on? More...
 
uint8_t * getRaw (void)
 Get the raw state of the object, suitable to be sent with the appropriate IRsend object method. More...
 
void setRaw (const uint8_t new_code[])
 Set the raw state of the object. More...
 
stdAc::state_t toCommon (void) const
 Convert the internal A/C object state to it's stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal settings into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcBlockChecksum (const uint8_t *block, const uint16_t length=kKelvinatorStateLength/2)
 Calculate the checksum for a given block of state. More...
 
static bool validChecksum (const uint8_t state[], const uint16_t length=kKelvinatorStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode (stdAc::opmode_t) into it a native mode. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed to it's stdAc::fanspeed_t equivalent. More...
 
- - - - - - - -

-Private Member Functions

void checksum (void)
 Calculate the checksum for the internal state. More...
 
void fixup (void)
 Fix up any odd conditions for the current state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
KelvinatorProtocol _
 
-

Detailed Description

-

Class for handling detailed Kelvinator A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRKelvinatorAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRKelvinatorAC::IRKelvinatorAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRKelvinatorAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcBlockChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRKelvinatorAC::calcBlockChecksum (const uint8_t * block,
const uint16_t length = kKelvinatorStateLength / 2 
)
-
-static
-
- -

Calculate the checksum for a given block of state.

-
Parameters
- - - -
[in]blockA pointer to a block to calc the checksum of.
[in]lengthLength of the block array to checksum.
-
-
-
Returns
The calculated checksum value.
-
Note
Many Bothans died to bring us this information.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRKelvinatorAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRKelvinatorAC::checksum (void )
-
-private
-
- -

Calculate the checksum for the internal state.

- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRKelvinatorAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode (stdAc::opmode_t) into it a native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t operation mode.
-
-
-
Returns
The native mode equivalent.
- -
-
- -

◆ fixup()

- -
-
- - - - - -
- - - - - - - - -
void IRKelvinatorAC::fixup (void )
-
-private
-
- -

Fix up any odd conditions for the current state.

- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRKelvinatorAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getIonFilter()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getIonFilter (void ) const
-
- -

Is the Ion Filter setting on?

-
Returns
The current value.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getLight (void ) const
-
- -

Is the Light (Display) setting on?

-
Returns
The current value.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRKelvinatorAC::getMode (void ) const
-
- -

Get the current operation mode setting.

-
Returns
The current operation mode.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getPower (void ) const
-
- -

Get the power setting from the internal state.

-
Returns
A boolean indicating if the power setting.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getQuiet (void ) const
-
- -

Is the Quiet setting on?

-
Returns
The current value.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRKelvinatorAC::getRaw (void )
-
- -

Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.

-
Returns
A PTR to the internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getSwingHorizontal (void ) const
-
- -

Is the horizontal swing setting on?

-
Returns
The current value.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getSwingVertical (void ) const
-
- -

Is the vertical swing setting on?

-
Returns
The current value.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRKelvinatorAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
Get current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getTurbo (void ) const
-
- -

Is the Turbo setting on?

-
Returns
The current value.
- -
-
- -

◆ getXFan()

- -
-
- - - - - - - - -
bool IRKelvinatorAC::getXFan (void ) const
-
- -

Is the XFan setting on?

-
Returns
The current value.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRKelvinatorAC::off (void )
-
- -

Set the internal state to have the power off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRKelvinatorAC::on (void )
-
- -

Set the internal state to have the power on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRKelvinatorAC::send (const uint16_t repeat = kKelvinatorDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speed0 is auto, 1-5 is the speed
-
-
- -
-
- -

◆ setIonFilter()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setIonFilter (const bool on)
-
- -

Control the current Ion Filter setting.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setLight (const bool on)
-
- -

Control the current Light setting. i.e. The LED display on the A/C unit that shows the basic settings.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setMode (const uint8_t mode)
-
- -

Set the desired operation mode.

-
Parameters
- - -
[in]modeThe desired operation mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setPower (const bool on)
-
- -

Set the internal state to have the desired power.

-
Parameters
- - -
[in]onThe desired power state.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setQuiet (const bool on)
-
- -

Control the current Quiet setting.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setRaw (const uint8_t new_code[])
-
- -

Set the raw state of the object.

-
Parameters
- - -
[in]new_codeThe raw state from the native IR message.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setSwingHorizontal (const bool on)
-
- -

Control the current horizontal swing setting.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setSwingVertical (const bool on)
-
- -

Control the current vertical swing setting.

-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setTemp (const uint8_t degrees)
-
- -

Set the temperature setting.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setTurbo (const bool on)
-
- -

Control the current Turbo setting.

-
Note
Turbo mode is turned off if the fan speed is changed.
-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ setXFan()

- -
-
- - - - - - - - -
void IRKelvinatorAC::setXFan (const bool on)
-
- -

Control the current XFan setting. This setting will cause the unit blow air after power off to dry out the A/C device.

-
Note
XFan mode is only valid in Cool or Dry mode.
-
Parameters
- - -
[in]onThe desired setting.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRKelvinatorAC::stateReset (void )
-
- -

Reset the internals of the object to a known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRKelvinatorAC::toCommon (void ) const
-
- -

Convert the internal A/C object state to it's stdAc::state_t equivalent.

-
Returns
A stdAc::state_t containing the current settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRKelvinatorAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed to it's stdAc::fanspeed_t equivalent.

-
Parameters
- - -
[in]speedA native fan speed value.
-
-
-
Returns
The stdAc::fanspeed_t equivalent.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRKelvinatorAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operating mode value.
-
-
-
Returns
The stdAc::opmode_t equivalent.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRKelvinatorAC::toString (void ) const
-
- -

Convert the internal settings into a human readable string.

-
Returns
A String.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRKelvinatorAC::validChecksum (const uint8_t state[],
const uint16_t length = kKelvinatorStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe size of the state.
-
-
-
Returns
A boolean indicating if it is valid.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
KelvinatorProtocol IRKelvinatorAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRKelvinatorAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.map deleted file mode 100644 index 6fc537a76..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.md5 deleted file mode 100644 index 06e1bdfa8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -514abe927ebcd34b0fba296ff15e7c3c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.png deleted file mode 100644 index 3110d471b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRKelvinatorAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc-members.html deleted file mode 100644 index 08e8e811b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRLgAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRLgAcprivate
_irsendIRLgAcprivate
_protocolIRLgAcprivate
_setTemp(const uint8_t value)IRLgAcinlineprivate
_tempIRLgAcprivate
begin(void)IRLgAc
calcChecksum(const uint32_t state)IRLgAcstatic
calibrate(void)IRLgAcinline
checksum(void)IRLgAcprivate
convertFan(const stdAc::fanspeed_t speed)IRLgAcstatic
convertMode(const stdAc::opmode_t mode)IRLgAcstatic
getFan(void) constIRLgAc
getMode(void) constIRLgAc
getModel(void) constIRLgAc
getPower(void) constIRLgAc
getRaw(void)IRLgAc
getTemp(void) constIRLgAc
IRLgAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRLgAcexplicit
isValidLgAc(void) constIRLgAc
off(void)IRLgAc
on(void)IRLgAc
send(const uint16_t repeat=kLgDefaultRepeat)IRLgAc
setFan(const uint8_t speed)IRLgAc
setMode(const uint8_t mode)IRLgAc
setModel(const lg_ac_remote_model_t model)IRLgAc
setPower(const bool on)IRLgAc
setRaw(const uint32_t new_code)IRLgAc
setTemp(const uint8_t degrees)IRLgAc
stateReset(void)IRLgAc
toCommon(void) constIRLgAc
toCommonFanSpeed(const uint8_t speed)IRLgAcstatic
toCommonMode(const uint8_t mode)IRLgAcstatic
toString(void) constIRLgAc
validChecksum(const uint32_t state)IRLgAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc.html deleted file mode 100644 index dc5e9c1e1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc.html +++ /dev/null @@ -1,1117 +0,0 @@ - - - - - - - -IRremoteESP8266: IRLgAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed LG A/C messages. - More...

- -

#include <ir_LG.h>

-
-Collaboration diagram for IRLgAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRLgAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internals of the object to a known good state. More...
 
bool isValidLgAc (void) const
 Check if the internal state looks like a valid LG A/C message. More...
 
void send (const uint16_t repeat=kLgDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
uint32_t getRaw (void)
 Get a copy of the internal state/code for this protocol. More...
 
void setRaw (const uint32_t new_code)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
void setModel (const lg_ac_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
lg_ac_remote_model_t getModel (void) const
 Get the model of the A/C. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint32_t state)
 Calculate the checksum for a given state. More...
 
static bool validChecksum (const uint32_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
- - - - - - - -

-Private Member Functions

void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
void _setTemp (const uint8_t value)
 Set the temperature. More...
 
- - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
LGProtocol _
 
uint8_t _temp
 
decode_type_t _protocol
 model More...
 
-

Detailed Description

-

Class for handling detailed LG A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRLgAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRLgAc::IRLgAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _setTemp()

- -
-
- - - - - -
- - - - - - - - -
void IRLgAc::_setTemp (const uint8_t value)
-
-inlineprivate
-
- -

Set the temperature.

-
Parameters
- - -
[in]valueThe native temperature.
-
-
-
Note
Internal use only.
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRLgAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRLgAc::calcChecksum (const uint32_t state)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRLgAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRLgAc::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRLgAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRLgAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRLgAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRLgAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
lg_ac_remote_model_t IRLgAc::getModel (void ) const
-
- -

Get the model of the A/C.

-
Returns
The enum of the compatible model.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRLgAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint32_t IRLgAc::getRaw (void )
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
The code for this protocol based on the current internal state.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRLgAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ isValidLgAc()

- -
-
- - - - - - - - -
bool IRLgAc::isValidLgAc (void ) const
-
- -

Check if the internal state looks like a valid LG A/C message.

-
Returns
true, the internal state is a valid LG A/C mesg. Otherwise, false.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRLgAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRLgAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRLgAc::send (const uint16_t repeat = kLgDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRLgAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRLgAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRLgAc::setModel (const lg_ac_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRLgAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRLgAc::setRaw (const uint32_t new_code)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRLgAc::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRLgAc::stateReset (void )
-
- -

Reset the internals of the object to a known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRLgAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRLgAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRLgAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRLgAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRLgAc::validChecksum (const uint32_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe value to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
LGProtocol IRLgAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRLgAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _protocol

- -
-
- - - - - -
- - - - -
decode_type_t IRLgAc::_protocol
-
-private
-
- -

model

- -
-
- -

◆ _temp

- -
-
- - - - - -
- - - - -
uint8_t IRLgAc::_temp
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.map deleted file mode 100644 index 1a86ac1dc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.md5 deleted file mode 100644 index 10e7c5709..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -819620e3d2dbcaba6b7f26ddb38e99d4 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.png deleted file mode 100644 index ca41b91a3..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRLgAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC-members.html deleted file mode 100644 index b4eb9a480..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC-members.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMideaAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMideaACprivate
_EconoToggleIRMideaACprivate
_irsendIRMideaACprivate
_LightToggleIRMideaACprivate
_SwingVStepIRMideaACprivate
_SwingVToggleIRMideaACprivate
_TurboToggleIRMideaACprivate
begin(void)IRMideaAC
calcChecksum(const uint64_t state)IRMideaACprivatestatic
calibrate(void)IRMideaACinline
checksum(void)IRMideaACprivate
convertFan(const stdAc::fanspeed_t speed)IRMideaACstatic
convertMode(const stdAc::opmode_t mode)IRMideaACstatic
getEconoToggle(void)IRMideaAC
getEnableSensorTemp(void) constIRMideaAC
getFan(void) constIRMideaAC
getLightToggle(void)IRMideaAC
getMode(void) constIRMideaAC
getOffTimer(void) constIRMideaAC
getOnTimer(void) constIRMideaAC
getPower(void) constIRMideaAC
getRaw(void)IRMideaAC
getSensorTemp(const bool useCelsius=false) constIRMideaAC
getSleep(void) constIRMideaAC
getSwingVStep(void)IRMideaAC
getSwingVToggle(void)IRMideaAC
getTemp(const bool useCelsius=false) constIRMideaAC
getTurboToggle(void)IRMideaAC
getType(void) constIRMideaAC
getUseCelsius(void) constIRMideaAC
IRMideaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMideaACexplicit
isEconoToggle(void) constIRMideaAC
isLightToggle(void) constIRMideaAC
isOffTimerEnabled(void) constIRMideaAC
isOnTimerEnabled(void) constIRMideaAC
isSwingVStep(void) constIRMideaAC
isSwingVToggle(void) constIRMideaAC
isTurboToggle(void) constIRMideaAC
off(void)IRMideaAC
on(void)IRMideaAC
send(const uint16_t repeat=kMideaMinRepeat)IRMideaAC
setEconoToggle(const bool on)IRMideaAC
setEnableSensorTemp(const bool on)IRMideaAC
setFan(const uint8_t fan)IRMideaAC
setLightToggle(const bool on)IRMideaAC
setMode(const uint8_t mode)IRMideaAC
setOffTimer(const uint16_t mins)IRMideaAC
setOnTimer(const uint16_t mins)IRMideaAC
setPower(const bool on)IRMideaAC
setRaw(const uint64_t newState)IRMideaAC
setSensorTemp(const uint8_t temp, const bool useCelsius=false)IRMideaAC
setSleep(const bool on)IRMideaAC
setSwingVStep(const bool on)IRMideaAC
setSwingVToggle(const bool on)IRMideaAC
setTemp(const uint8_t temp, const bool useCelsius=false)IRMideaAC
setTurboToggle(const bool on)IRMideaAC
setType(const uint8_t type)IRMideaACprivate
setUseCelsius(const bool celsius)IRMideaAC
stateReset(void)IRMideaAC
toCommon(const stdAc::state_t *prev=NULL)IRMideaAC
toCommonFanSpeed(const uint8_t speed)IRMideaACstatic
toCommonMode(const uint8_t mode)IRMideaACstatic
toString(void)IRMideaAC
validChecksum(const uint64_t state)IRMideaACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC.html deleted file mode 100644 index 446da529f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC.html +++ /dev/null @@ -1,1927 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMideaAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Midea A/C messages. - More...

- -

#include <ir_Midea.h>

-
-Collaboration diagram for IRMideaAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMideaAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMideaMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
bool getUseCelsius (void) const
 Is the device currently using Celsius or the Fahrenheit temp scale? More...
 
void setUseCelsius (const bool celsius)
 Set the A/C unit to use Celsius natively. More...
 
void setTemp (const uint8_t temp, const bool useCelsius=false)
 Set the temperature. More...
 
uint8_t getTemp (const bool useCelsius=false) const
 Get the current temperature setting. More...
 
void setSensorTemp (const uint8_t temp, const bool useCelsius=false)
 Set the Sensor temperature. More...
 
uint8_t getSensorTemp (const bool useCelsius=false) const
 Get the current Sensor temperature setting. More...
 
void setEnableSensorTemp (const bool on)
 Enable the remote's Sensor temperature. More...
 
bool getEnableSensorTemp (void) const
 Is the remote temperature sensor enabled? More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setRaw (const uint64_t newState)
 Set the internal state from a valid code for this protocol. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state/code for this protocol. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
bool isSwingVToggle (void) const
 Is the current state a vertical swing toggle message? More...
 
void setSwingVToggle (const bool on)
 Set the A/C to toggle the vertical swing toggle for the next send. More...
 
bool getSwingVToggle (void)
 
bool isSwingVStep (void) const
 Is the current state a step vertical swing message? More...
 
void setSwingVStep (const bool on)
 Set the A/C to step the vertical swing for the next send. More...
 
bool getSwingVStep (void)
 
bool isEconoToggle (void) const
 Is the current state an Econo (energy saver) toggle message? More...
 
void setEconoToggle (const bool on)
 Set the A/C to toggle the Econo (energy saver) mode for the next send. More...
 
bool getEconoToggle (void)
 
bool isTurboToggle (void) const
 Is the current state a Turbo toggle message? More...
 
void setTurboToggle (const bool on)
 Set the A/C to toggle the Turbo mode for the next send. More...
 
bool getTurboToggle (void)
 
bool isLightToggle (void) const
 Is the current state a Light (LED) toggle message? More...
 
void setLightToggle (const bool on)
 Set the A/C to toggle the Light (LED) mode for the next send. More...
 
bool getLightToggle (void)
 
uint8_t getType (void) const
 Get the message type setting of the A/C message. More...
 
bool isOnTimerEnabled (void) const
 Is the OnTimer enabled? More...
 
uint16_t getOnTimer (void) const
 Get the value of the OnTimer is currently set to. More...
 
void setOnTimer (const uint16_t mins)
 Set the value of the On Timer. More...
 
bool isOffTimerEnabled (void) const
 Is the OffTimer enabled? More...
 
uint16_t getOffTimer (void) const
 Get the value of the OffTimer is currently set to. More...
 
void setOffTimer (const uint16_t mins)
 Set the value of the Off Timer. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL)
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void)
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

void checksum (void)
 Calculate & set the checksum for the current internal state of the remote. More...
 
void setType (const uint8_t type)
 Set the message type setting of the A/C message. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
- - - - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
MideaProtocol _
 
bool _SwingVToggle
 
bool _SwingVStep
 
bool _EconoToggle
 
bool _TurboToggle
 
bool _LightToggle
 
-

Detailed Description

-

Class for handling detailed Midea A/C messages.

-
Warning
Consider this very alpha code.
-

Constructor & Destructor Documentation

- -

◆ IRMideaAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMideaAC::IRMideaAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMideaAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMideaAC::calcChecksum (const uint64_t state)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMideaAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMideaAC::checksum (void )
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMideaAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMideaAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getEconoToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::getEconoToggle (void )
-
-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEnableSensorTemp()

- -
-
- - - - - - - - -
bool IRMideaAC::getEnableSensorTemp (void ) const
-
- -

Is the remote temperature sensor enabled?

-
Returns
A boolean indicating if it is enabled or not.
-
Note
Also known as FollowMe
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMideaAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getLightToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::getLightToggle (void )
-
-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMideaAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRMideaAC::getOffTimer (void ) const
-
- -

Get the value of the OffTimer is currently set to.

-
Returns
The number of minutes.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRMideaAC::getOnTimer (void ) const
-
- -

Get the value of the OnTimer is currently set to.

-
Returns
The number of minutes.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMideaAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRMideaAC::getRaw (void )
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
The code for this protocol based on the current internal state.
- -
-
- -

◆ getSensorTemp()

- -
-
- - - - - - - - -
uint8_t IRMideaAC::getSensorTemp (const bool celsius = false) const
-
- -

Get the current Sensor temperature setting.

-
Parameters
- - -
[in]celsiustrue, the results are in Celsius. false, in Fahrenheit.
-
-
-
Returns
The current setting for temp. in the requested units/scale.
-
Note
Also known as FollowMe
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRMideaAC::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVStep()

- -
-
- - - - - - - - -
bool IRMideaAC::getSwingVStep (void )
-
-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::getSwingVToggle (void )
-
-
Note
On Danby A/C units, this is associated with the Ion Filter instead.
-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRMideaAC::getTemp (const bool celsius = false) const
-
- -

Get the current temperature setting.

-
Parameters
- - -
[in]celsiustrue, the results are in Celsius. false, in Fahrenheit.
-
-
-
Returns
The current setting for temp. in the requested units/scale.
- -
-
- -

◆ getTurboToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::getTurboToggle (void )
-
-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getType()

- -
-
- - - - - - - - -
uint8_t IRMideaAC::getType (void ) const
-
- -

Get the message type setting of the A/C message.

-
Returns
The message type setting.
- -
-
- -

◆ getUseCelsius()

- -
-
- - - - - - - - -
bool IRMideaAC::getUseCelsius (void ) const
-
- -

Is the device currently using Celsius or the Fahrenheit temp scale?

-
Returns
true, the A/C unit uses Celsius natively, false, is Fahrenheit.
- -
-
- -

◆ isEconoToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::isEconoToggle (void ) const
-
- -

Is the current state an Econo (energy saver) toggle message?

-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ isLightToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::isLightToggle (void ) const
-
- -

Is the current state a Light (LED) toggle message?

-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ isOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRMideaAC::isOffTimerEnabled (void ) const
-
- -

Is the OffTimer enabled?

-
Returns
true for yes, false for no.
- -
-
- -

◆ isOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRMideaAC::isOnTimerEnabled (void ) const
-
- -

Is the OnTimer enabled?

-
Returns
true for yes, false for no.
- -
-
- -

◆ isSwingVStep()

- -
-
- - - - - - - - -
bool IRMideaAC::isSwingVStep (void ) const
-
- -

Is the current state a step vertical swing message?

-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ isSwingVToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::isSwingVToggle (void ) const
-
- -

Is the current state a vertical swing toggle message?

-
Note
On Danby A/C units, this is associated with the Ion Filter instead.
-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ isTurboToggle()

- -
-
- - - - - - - - -
bool IRMideaAC::isTurboToggle (void ) const
-
- -

Is the current state a Turbo toggle message?

-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMideaAC::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMideaAC::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMideaAC::send (const uint16_t repeat = kMideaMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setEconoToggle()

- -
-
- - - - - - - - -
void IRMideaAC::setEconoToggle (const bool on)
-
- -

Set the A/C to toggle the Econo (energy saver) mode for the next send.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEnableSensorTemp()

- -
-
- - - - - - - - -
void IRMideaAC::setEnableSensorTemp (const bool on)
-
- -

Enable the remote's Sensor temperature.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
Also known as FollowMe
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMideaAC::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting. 1-3 set the speed, 0 for auto.
-
-
- -
-
- -

◆ setLightToggle()

- -
-
- - - - - - - - -
void IRMideaAC::setLightToggle (const bool on)
-
- -

Set the A/C to toggle the Light (LED) mode for the next send.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMideaAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRMideaAC::setOffTimer (const uint16_t mins)
-
- -

Set the value of the Off Timer.

-
Parameters
- - -
[in]minsThe number of minutes for the timer.
-
-
-
Note
Time will be rounded down to nearest 30 min as that is the resolution of the actual device/protocol.
-
-A value of less than 30 will disable the Timer.
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRMideaAC::setOnTimer (const uint16_t mins)
-
- -

Set the value of the On Timer.

-
Parameters
- - -
[in]minsThe number of minutes for the timer.
-
-
-
Note
Time will be rounded down to nearest 30 min as that is the resolution of the actual device/protocol.
-
-A value of less than 30 will disable the Timer.
-
Warning
On Timer is incompatible with Sensor Temp/Follow Me messages. Setting it will disable that mode/settings.
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMideaAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMideaAC::setRaw (const uint64_t newState)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]newStateA valid code for this protocol.
-
-
- -
-
- -

◆ setSensorTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRMideaAC::setSensorTemp (const uint8_t temp,
const bool useCelsius = false 
)
-
- -

Set the Sensor temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees celsius.
[in]useCelsiustrue, use the Celsius temp scale. false, is Fahrenheit
-
-
-
Note
Also known as FollowMe
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRMideaAC::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVStep()

- -
-
- - - - - - - - -
void IRMideaAC::setSwingVStep (const bool on)
-
- -

Set the A/C to step the vertical swing for the next send.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVToggle()

- -
-
- - - - - - - - -
void IRMideaAC::setSwingVToggle (const bool on)
-
- -

Set the A/C to toggle the vertical swing toggle for the next send.

-
Note
On Danby A/C units, this is associated with the Ion Filter instead.
-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRMideaAC::setTemp (const uint8_t temp,
const bool useCelsius = false 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees celsius.
[in]useCelsiustrue, use the Celsius temp scale. false, is Fahrenheit
-
-
- -
-
- -

◆ setTurboToggle()

- -
-
- - - - - - - - -
void IRMideaAC::setTurboToggle (const bool on)
-
- -

Set the A/C to toggle the Turbo mode for the next send.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setType()

- -
-
- - - - - -
- - - - - - - - -
void IRMideaAC::setType (const uint8_t setting)
-
-private
-
- -

Set the message type setting of the A/C message.

-
Parameters
- - -
[in]settingThe desired message type setting.
-
-
- -
-
- -

◆ setUseCelsius()

- -
-
- - - - - - - - -
void IRMideaAC::setUseCelsius (const bool on)
-
- -

Set the A/C unit to use Celsius natively.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMideaAC::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMideaAC::toCommon (const stdAc::state_tprev = NULL)
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevA Ptr to the previous state.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMideaAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRMideaAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMideaAC::toString (void )
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRMideaAC::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe state to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
MideaProtocol IRMideaAC::_
-
-private
-
- -
-
- -

◆ _EconoToggle

- -
-
- - - - - -
- - - - -
bool IRMideaAC::_EconoToggle
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMideaAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _LightToggle

- -
-
- - - - - -
- - - - -
bool IRMideaAC::_LightToggle
-
-private
-
- -
-
- -

◆ _SwingVStep

- -
-
- - - - - -
- - - - -
bool IRMideaAC::_SwingVStep
-
-private
-
- -
-
- -

◆ _SwingVToggle

- -
-
- - - - - -
- - - - -
bool IRMideaAC::_SwingVToggle
-
-private
-
- -
-
- -

◆ _TurboToggle

- -
-
- - - - - -
- - - - -
bool IRMideaAC::_TurboToggle
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.map deleted file mode 100644 index d2fd35ac2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.md5 deleted file mode 100644 index baf91c467..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -07b88c478a192e1169f5dbd6881679aa \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.png deleted file mode 100644 index fde37d1cd..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMideaAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112-members.html deleted file mode 100644 index f702404eb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMitsubishi112 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMitsubishi112private
_irsendIRMitsubishi112private
begin(void)IRMitsubishi112
calibrate(void)IRMitsubishi112inline
checksum(void)IRMitsubishi112private
convertFan(const stdAc::fanspeed_t speed)IRMitsubishi112static
convertMode(const stdAc::opmode_t mode)IRMitsubishi112static
convertSwingH(const stdAc::swingh_t position)IRMitsubishi112static
convertSwingV(const stdAc::swingv_t position)IRMitsubishi112static
getFan(void) constIRMitsubishi112
getMode(void) constIRMitsubishi112
getPower(void) constIRMitsubishi112
getQuiet(void) constIRMitsubishi112
getRaw(void)IRMitsubishi112
getSwingH(void) constIRMitsubishi112
getSwingV(void) constIRMitsubishi112
getTemp(void) constIRMitsubishi112
IRMitsubishi112(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMitsubishi112explicit
off(void)IRMitsubishi112
on(void)IRMitsubishi112
send(const uint16_t repeat=kMitsubishi112MinRepeat)IRMitsubishi112
setFan(const uint8_t speed)IRMitsubishi112
setMode(const uint8_t mode)IRMitsubishi112
setPower(const bool on)IRMitsubishi112
setQuiet(const bool on)IRMitsubishi112
setRaw(const uint8_t *data)IRMitsubishi112
setSwingH(const uint8_t position)IRMitsubishi112
setSwingV(const uint8_t position)IRMitsubishi112
setTemp(const uint8_t degrees)IRMitsubishi112
stateReset(void)IRMitsubishi112
toCommon(void) constIRMitsubishi112
toCommonFanSpeed(const uint8_t speed)IRMitsubishi112static
toCommonMode(const uint8_t mode)IRMitsubishi112static
toCommonSwingH(const uint8_t pos)IRMitsubishi112static
toCommonSwingV(const uint8_t pos)IRMitsubishi112static
toString(void) constIRMitsubishi112
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112.html deleted file mode 100644 index 21c2a5ff3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112.html +++ /dev/null @@ -1,1188 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMitsubishi112 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Mitsubishi 122-bit A/C messages. - More...

- -

#include <ir_Mitsubishi.h>

-
-Collaboration diagram for IRMitsubishi112:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMitsubishi112 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMitsubishi112MinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to off. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingV (const uint8_t position)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingV (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingH (const uint8_t position)
 Set the Horizontal Swing mode of the A/C. More...
 
uint8_t getSwingH (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t *data)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate the checksum for the current internal state of the remote. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Mitsubishi112Protocol _
 
-

Detailed Description

-

Class for handling detailed Mitsubishi 122-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRMitsubishi112()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMitsubishi112::IRMitsubishi112 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMitsubishi112::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMitsubishi112::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMitsubishi112::checksum (void )
-
-private
-
- -

Calculate the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi112::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi112::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi112::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi112::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi112::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi112::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMitsubishi112::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRMitsubishi112::getQuiet (void ) const
-
- -

Get the Quiet mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
There is no true quiet setting on this A/C.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRMitsubishi112::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi112::getSwingH (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi112::getSwingV (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi112::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMitsubishi112::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMitsubishi112::on (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMitsubishi112::send (const uint16_t repeat = kMitsubishi112MinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMitsubishi112::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMitsubishi112::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMitsubishi112::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRMitsubishi112::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
There is no true quiet setting on this A/C.
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMitsubishi112::setRaw (const uint8_t * data)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]dataA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRMitsubishi112::setSwingH (const uint8_t position)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRMitsubishi112::setSwingV (const uint8_t position)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRMitsubishi112::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMitsubishi112::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMitsubishi112::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMitsubishi112::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRMitsubishi112::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRMitsubishi112::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRMitsubishi112::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMitsubishi112::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Mitsubishi112Protocol IRMitsubishi112::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMitsubishi112::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.map deleted file mode 100644 index b772d04ba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.md5 deleted file mode 100644 index 6fef7cb6f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a0b93745e15f12d1996a00ac653654d8 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.png deleted file mode 100644 index c6bf8a4a5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi112__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136-members.html deleted file mode 100644 index d9e845f68..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMitsubishi136 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMitsubishi136private
_irsendIRMitsubishi136private
begin(void)IRMitsubishi136
calibrate(void)IRMitsubishi136inline
checksum(void)IRMitsubishi136private
convertFan(const stdAc::fanspeed_t speed)IRMitsubishi136static
convertMode(const stdAc::opmode_t mode)IRMitsubishi136static
convertSwingV(const stdAc::swingv_t position)IRMitsubishi136static
getFan(void) constIRMitsubishi136
getMode(void) constIRMitsubishi136
getPower(void) constIRMitsubishi136
getQuiet(void) constIRMitsubishi136
getRaw(void)IRMitsubishi136
getSwingV(void) constIRMitsubishi136
getTemp(void) constIRMitsubishi136
IRMitsubishi136(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMitsubishi136explicit
off(void)IRMitsubishi136
on(void)IRMitsubishi136
send(const uint16_t repeat=kMitsubishi136MinRepeat)IRMitsubishi136
setFan(const uint8_t speed)IRMitsubishi136
setMode(const uint8_t mode)IRMitsubishi136
setPower(const bool on)IRMitsubishi136
setQuiet(const bool on)IRMitsubishi136
setRaw(const uint8_t *data)IRMitsubishi136
setSwingV(const uint8_t position)IRMitsubishi136
setTemp(const uint8_t degrees)IRMitsubishi136
stateReset(void)IRMitsubishi136
toCommon(void) constIRMitsubishi136
toCommonFanSpeed(const uint8_t speed)IRMitsubishi136static
toCommonMode(const uint8_t mode)IRMitsubishi136static
toCommonSwingV(const uint8_t pos)IRMitsubishi136static
toString(void) constIRMitsubishi136
validChecksum(const uint8_t *data, const uint16_t len=kMitsubishi136StateLength)IRMitsubishi136static
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136.html deleted file mode 100644 index 0a0ba40d3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136.html +++ /dev/null @@ -1,1106 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMitsubishi136 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Mitsubishi 136-bit A/C messages. - More...

- -

#include <ir_Mitsubishi.h>

-
-Collaboration diagram for IRMitsubishi136:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMitsubishi136 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMitsubishi136MinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingV (const uint8_t position)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingV (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet mode of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t *data)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t *data, const uint16_t len=kMitsubishi136StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate the checksum for the current internal state of the remote. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Mitsubishi136Protocol _
 
-

Detailed Description

-

Class for handling detailed Mitsubishi 136-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRMitsubishi136()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMitsubishi136::IRMitsubishi136 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMitsubishi136::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMitsubishi136::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMitsubishi136::checksum (void )
-
-private
-
- -

Calculate the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi136::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi136::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishi136::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi136::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi136::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMitsubishi136::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRMitsubishi136::getQuiet (void ) const
-
- -

Get the Quiet mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRMitsubishi136::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi136::getSwingV (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRMitsubishi136::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMitsubishi136::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMitsubishi136::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMitsubishi136::send (const uint16_t repeat = kMitsubishi136MinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMitsubishi136::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMitsubishi136::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMitsubishi136::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRMitsubishi136::setQuiet (const bool on)
-
- -

Set the Quiet mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMitsubishi136::setRaw (const uint8_t * data)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]dataA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRMitsubishi136::setSwingV (const uint8_t position)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]positionThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRMitsubishi136::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMitsubishi136::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMitsubishi136::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMitsubishi136::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRMitsubishi136::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRMitsubishi136::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMitsubishi136::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRMitsubishi136::validChecksum (const uint8_t * data,
const uint16_t len = kMitsubishi136StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]dataThe array to verify the checksum of.
[in]lenThe length of the data array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Mitsubishi136Protocol IRMitsubishi136::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMitsubishi136::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.map deleted file mode 100644 index df0c0140a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.md5 deleted file mode 100644 index eafc45bfd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -527ce2cd121690e40f927cefd26398a3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.png deleted file mode 100644 index 5173fee47..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishi136__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC-members.html deleted file mode 100644 index 6f4ecb9d7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC-members.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMitsubishiAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMitsubishiACprivate
_irsendIRMitsubishiACprivate
begin(void)IRMitsubishiAC
calculateChecksum(const uint8_t *data)IRMitsubishiACprivatestatic
calibrate(void)IRMitsubishiACinline
checksum(void)IRMitsubishiACprivate
convertFan(const stdAc::fanspeed_t speed)IRMitsubishiACstatic
convertMode(const stdAc::opmode_t mode)IRMitsubishiACstatic
convertSwingH(const stdAc::swingh_t position)IRMitsubishiACstatic
convertSwingV(const stdAc::swingv_t position)IRMitsubishiACstatic
getClock(void) constIRMitsubishiAC
getFan(void) constIRMitsubishiAC
getMode(void) constIRMitsubishiAC
getPower(void) constIRMitsubishiAC
getRaw(void)IRMitsubishiAC
getStartClock(void) constIRMitsubishiAC
getStopClock(void) constIRMitsubishiAC
getTemp(void) constIRMitsubishiAC
getTimer(void) constIRMitsubishiAC
getVane(void) constIRMitsubishiAC
getWeeklyTimerEnabled(void) constIRMitsubishiAC
getWideVane(void) constIRMitsubishiAC
IRMitsubishiAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMitsubishiACexplicit
off(void)IRMitsubishiAC
on(void)IRMitsubishiAC
send(const uint16_t repeat=kMitsubishiACMinRepeat)IRMitsubishiAC
setClock(const uint8_t clock)IRMitsubishiAC
setFan(const uint8_t speed)IRMitsubishiAC
setMode(const uint8_t mode)IRMitsubishiAC
setPower(const bool on)IRMitsubishiAC
setRaw(const uint8_t *data)IRMitsubishiAC
setStartClock(const uint8_t clock)IRMitsubishiAC
setStopClock(const uint8_t clock)IRMitsubishiAC
setTemp(const float degrees)IRMitsubishiAC
setTimer(const uint8_t timer)IRMitsubishiAC
setVane(const uint8_t position)IRMitsubishiAC
setWeeklyTimerEnabled(const bool on)IRMitsubishiAC
setWideVane(const uint8_t position)IRMitsubishiAC
stateReset(void)IRMitsubishiAC
toCommon(void) constIRMitsubishiAC
toCommonFanSpeed(const uint8_t speed)IRMitsubishiACstatic
toCommonMode(const uint8_t mode)IRMitsubishiACstatic
toCommonSwingH(const uint8_t pos)IRMitsubishiACstatic
toCommonSwingV(const uint8_t pos)IRMitsubishiACstatic
toString(void) constIRMitsubishiAC
validChecksum(const uint8_t *data)IRMitsubishiACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC.html deleted file mode 100644 index 5f82ad467..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC.html +++ /dev/null @@ -1,1497 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMitsubishiAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Mitsubishi 144-bit A/C messages. - More...

- -

#include <ir_Mitsubishi.h>

-
-Collaboration diagram for IRMitsubishiAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMitsubishiAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMitsubishiACMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const float degrees)
 Set the temperature. More...
 
float getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setVane (const uint8_t position)
 Set the requested vane (Vertical Swing) operation mode of the a/c unit. More...
 
void setWideVane (const uint8_t position)
 Set the requested wide-vane (Horizontal Swing) operation mode of the a/c. More...
 
uint8_t getVane (void) const
 Get the Vane (Vertical Swing) mode of the A/C. More...
 
uint8_t getWideVane (void) const
 Get the Wide Vane (Horizontal Swing) mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t *data)
 Set the internal state from a valid code for this protocol. More...
 
uint8_t getClock (void) const
 Get the clock time of the A/C unit. More...
 
void setClock (const uint8_t clock)
 Set the clock time on the A/C unit. More...
 
uint8_t getStartClock (void) const
 Get the desired start time of the A/C unit. More...
 
void setStartClock (const uint8_t clock)
 Set the desired start time of the A/C unit. More...
 
uint8_t getStopClock (void) const
 Get the desired stop time of the A/C unit. More...
 
void setStopClock (const uint8_t clock)
 Set the desired stop time of the A/C unit. More...
 
uint8_t getTimer (void) const
 Get the timers active setting of the A/C. More...
 
void setTimer (const uint8_t timer)
 Set the timers active setting of the A/C. More...
 
bool getWeeklyTimerEnabled (void) const
 Get the value of the WeeklyTimer Enabled setting. More...
 
void setWeeklyTimerEnabled (const bool on)
 Change the Weekly Timer Enabled setting. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t *data)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calculateChecksum (const uint8_t *data)
 Calculate the checksum for a given state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Mitsubishi144Protocol _
 
-

Detailed Description

-

Class for handling detailed Mitsubishi 144-bit A/C messages.

-
Note
Inspired and derived from the work done at: https://github.com/r45635/HVAC-IR-Control
-
Warning
Consider this very alpha code. Seems to work, but not validated.
-

Constructor & Destructor Documentation

- -

◆ IRMitsubishiAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMitsubishiAC::IRMitsubishiAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
-
Warning
Consider this very alpha code. Seems to work, but not validated.
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMitsubishiAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calculateChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiAC::calculateChecksum (const uint8_t * data)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]dataThe value to calc the checksum of.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMitsubishiAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMitsubishiAC::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiAC::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiAC::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1399
-
-https://github.com/crankyoldgit/IRremoteESP8266/pull/1401
- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getClock (void ) const
-
- -

Get the clock time of the A/C unit.

-
Returns
Nr. of 10 minute increments past midnight.
-
Note
1 = 1/6 hour (10 minutes). e.g. 4pm = 48.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMitsubishiAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRMitsubishiAC::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getStartClock()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getStartClock (void ) const
-
- -

Get the desired start time of the A/C unit.

-
Returns
Nr. of 10 minute increments past midnight.
-
Note
1 = 1/6 hour (10 minutes). e.g. 4pm = 48.
- -
-
- -

◆ getStopClock()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getStopClock (void ) const
-
- -

Get the desired stop time of the A/C unit.

-
Returns
Nr. of 10 minute increments past midnight.
-
Note
1 = 1/6 hour (10 minutes). e.g. 10pm = 132.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
float IRMitsubishiAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
-
Note
The temperature resolution is 0.5 of a degree.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getTimer (void ) const
-
- -

Get the timers active setting of the A/C.

-
Returns
The current timers enabled.
-
Note
Possible values: kMitsubishiAcNoTimer, kMitsubishiAcStartTimer, kMitsubishiAcStopTimer, kMitsubishiAcStartStopTimer
- -
-
- -

◆ getVane()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getVane (void ) const
-
- -

Get the Vane (Vertical Swing) mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getWeeklyTimerEnabled()

- -
-
- - - - - - - - -
bool IRMitsubishiAC::getWeeklyTimerEnabled (void ) const
-
- -

Get the value of the WeeklyTimer Enabled setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getWideVane()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiAC::getWideVane (void ) const
-
- -

Get the Wide Vane (Horizontal Swing) mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMitsubishiAC::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMitsubishiAC::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMitsubishiAC::send (const uint16_t repeat = kMitsubishiACMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setClock (const uint8_t clock)
-
- -

Set the clock time on the A/C unit.

-
Parameters
- - -
[in]clockNr. of 10 minute increments past midnight.
-
-
-
Note
1 = 1/6 hour (10 minutes). e.g. 6am = 36.
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting. 0 is auto, 1-5 is speed, 6 is silent.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setRaw (const uint8_t * data)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]dataA valid code for this protocol.
-
-
- -
-
- -

◆ setStartClock()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setStartClock (const uint8_t clock)
-
- -

Set the desired start time of the A/C unit.

-
Parameters
- - -
[in]clockNr. of 10 minute increments past midnight.
-
-
-
Note
1 = 1/6 hour (10 minutes). e.g. 8pm = 120.
- -
-
- -

◆ setStopClock()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setStopClock (const uint8_t clock)
-
- -

Set the desired stop time of the A/C unit.

-
Parameters
- - -
[in]clockNr. of 10 minute increments past midnight.
-
-
-
Note
1 = 1/6 hour (10 minutes). e.g. 10pm = 132.
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setTemp (const float degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
-
Note
The temperature resolution is 0.5 of a degree.
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setTimer (const uint8_t timer)
-
- -

Set the timers active setting of the A/C.

-
Parameters
- - -
[in]timerThe timer code indicating which ones are active.
-
-
-
Note
Possible values: kMitsubishiAcNoTimer, kMitsubishiAcStartTimer, kMitsubishiAcStopTimer, kMitsubishiAcStartStopTimer
- -
-
- -

◆ setVane()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setVane (const uint8_t position)
-
- -

Set the requested vane (Vertical Swing) operation mode of the a/c unit.

-
Parameters
- - -
[in]positionThe position/mode to set the vane to.
-
-
- -
-
- -

◆ setWeeklyTimerEnabled()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setWeeklyTimerEnabled (const bool on)
-
- -

Change the Weekly Timer Enabled setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setWideVane()

- -
-
- - - - - - - - -
void IRMitsubishiAC::setWideVane (const uint8_t position)
-
- -

Set the requested wide-vane (Horizontal Swing) operation mode of the a/c.

-
Parameters
- - -
[in]positionThe position/mode to set the wide vane to.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMitsubishiAC::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMitsubishiAC::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMitsubishiAC::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRMitsubishiAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRMitsubishiAC::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRMitsubishiAC::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1399
-
-https://github.com/crankyoldgit/IRremoteESP8266/pull/1401
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMitsubishiAC::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRMitsubishiAC::validChecksum (const uint8_t * data)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]dataThe array to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Mitsubishi144Protocol IRMitsubishiAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMitsubishiAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.map deleted file mode 100644 index 1a1d04697..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.md5 deleted file mode 100644 index 04bd15312..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7319af7df9cbebac40a2fce5bbaa306e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.png deleted file mode 100644 index 7ff0061c8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac-members.html deleted file mode 100644 index ac11e28b2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMitsubishiHeavy152Ac Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMitsubishiHeavy152Acprivate
_irsendIRMitsubishiHeavy152Acprivate
begin(void)IRMitsubishiHeavy152Ac
calibrate(void)IRMitsubishiHeavy152Acinline
checksum(void)IRMitsubishiHeavy152Acprivate
checkZmsSig(const uint8_t *state)IRMitsubishiHeavy152Acstatic
convertFan(const stdAc::fanspeed_t speed)IRMitsubishiHeavy152Acstatic
convertMode(const stdAc::opmode_t mode)IRMitsubishiHeavy152Acstatic
convertSwingH(const stdAc::swingh_t position)IRMitsubishiHeavy152Acstatic
convertSwingV(const stdAc::swingv_t position)IRMitsubishiHeavy152Acstatic
get3D(void) constIRMitsubishiHeavy152Ac
getClean(void) constIRMitsubishiHeavy152Ac
getEcono(void) constIRMitsubishiHeavy152Ac
getFan(void) constIRMitsubishiHeavy152Ac
getFilter(void) constIRMitsubishiHeavy152Ac
getMode(void) constIRMitsubishiHeavy152Ac
getNight(void) constIRMitsubishiHeavy152Ac
getPower(void) constIRMitsubishiHeavy152Ac
getRaw(void)IRMitsubishiHeavy152Ac
getSilent(void) constIRMitsubishiHeavy152Ac
getSwingHorizontal(void) constIRMitsubishiHeavy152Ac
getSwingVertical(void) constIRMitsubishiHeavy152Ac
getTemp(void) constIRMitsubishiHeavy152Ac
getTurbo(void) constIRMitsubishiHeavy152Ac
IRMitsubishiHeavy152Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMitsubishiHeavy152Acexplicit
off(void)IRMitsubishiHeavy152Ac
on(void)IRMitsubishiHeavy152Ac
send(const uint16_t repeat=kMitsubishiHeavy152MinRepeat)IRMitsubishiHeavy152Ac
set3D(const bool on)IRMitsubishiHeavy152Ac
setClean(const bool on)IRMitsubishiHeavy152Ac
setEcono(const bool on)IRMitsubishiHeavy152Ac
setFan(const uint8_t fan)IRMitsubishiHeavy152Ac
setFilter(const bool on)IRMitsubishiHeavy152Ac
setMode(const uint8_t mode)IRMitsubishiHeavy152Ac
setNight(const bool on)IRMitsubishiHeavy152Ac
setPower(const bool on)IRMitsubishiHeavy152Ac
setRaw(const uint8_t *data)IRMitsubishiHeavy152Ac
setSilent(const bool on)IRMitsubishiHeavy152Ac
setSwingHorizontal(const uint8_t pos)IRMitsubishiHeavy152Ac
setSwingVertical(const uint8_t pos)IRMitsubishiHeavy152Ac
setTemp(const uint8_t temp)IRMitsubishiHeavy152Ac
setTurbo(const bool on)IRMitsubishiHeavy152Ac
stateReset(void)IRMitsubishiHeavy152Ac
toCommon(void) constIRMitsubishiHeavy152Ac
toCommonFanSpeed(const uint8_t speed)IRMitsubishiHeavy152Acstatic
toCommonMode(const uint8_t mode)IRMitsubishiHeavy152Acstatic
toCommonSwingH(const uint8_t pos)IRMitsubishiHeavy152Acstatic
toCommonSwingV(const uint8_t pos)IRMitsubishiHeavy152Acstatic
toString(void) constIRMitsubishiHeavy152Ac
validChecksum(const uint8_t *state, const uint16_t length=kMitsubishiHeavy152StateLength)IRMitsubishiHeavy152Acstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac.html deleted file mode 100644 index 790028e25..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac.html +++ /dev/null @@ -1,1591 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMitsubishiHeavy152Ac Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Mitsubishi Heavy 152-bit A/C messages. - More...

- -

#include <ir_MitsubishiHeavy.h>

-
-Collaboration diagram for IRMitsubishiHeavy152Ac:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMitsubishiHeavy152Ac (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMitsubishiHeavy152MinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingVertical (const uint8_t pos)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingHorizontal (const uint8_t pos)
 Set the Horizontal Swing mode of the A/C. More...
 
uint8_t getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
void setNight (const bool on)
 Set the Night (Sleep) mode of the A/C. More...
 
bool getNight (void) const
 Get the Night (Sleep) mode of the A/C. More...
 
void set3D (const bool on)
 Set the 3D mode of the A/C. More...
 
bool get3D (void) const
 Get the 3D mode of the A/C. More...
 
void setSilent (const bool on)
 Set the Silent (Quiet) mode of the A/C. More...
 
bool getSilent (void) const
 Get the Silent (Quiet) mode of the A/C. More...
 
void setFilter (const bool on)
 Set the Filter mode of the A/C. More...
 
bool getFilter (void) const
 Get the Filter mode of the A/C. More...
 
void setClean (const bool on)
 Set the Clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Clean mode of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo mode of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economical mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t *data)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool checkZmsSig (const uint8_t *state)
 Verify the given state has a ZM-S signature. More...
 
static bool validChecksum (const uint8_t *state, const uint16_t length=kMitsubishiHeavy152StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate the checksum for the current internal state of the remote. Note: Technically it has no checksum, but does have inverted byte pairs. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Mitsubishi152Protocol _
 
-

Detailed Description

-

Class for handling detailed Mitsubishi Heavy 152-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRMitsubishiHeavy152Ac()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMitsubishiHeavy152Ac::IRMitsubishiHeavy152Ac (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMitsubishiHeavy152Ac::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMitsubishiHeavy152Ac::checksum (void )
-
-private
-
- -

Calculate the checksum for the current internal state of the remote. Note: Technically it has no checksum, but does have inverted byte pairs.

- -
-
- -

◆ checkZmsSig()

- -
-
- - - - - -
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::checkZmsSig (const uint8_t * state)
-
-static
-
- -

Verify the given state has a ZM-S signature.

-
Parameters
- - -
[in]stateA ptr to a state to be checked.
-
-
-
Returns
true, the check passed. Otherwise, false.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ get3D()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::get3D (void ) const
-
- -

Get the 3D mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getClean (void ) const
-
- -

Get the Clean mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getFilter()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getFilter (void ) const
-
- -

Get the Filter mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getNight()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getNight (void ) const
-
- -

Get the Night (Sleep) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRMitsubishiHeavy152Ac::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSilent()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getSilent (void ) const
-
- -

Get the Silent (Quiet) mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy152Ac::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy152Ac::getTurbo (void ) const
-
- -

Get the Turbo mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::send (const uint16_t repeat = kMitsubishiHeavy152MinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ set3D()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::set3D (const bool on)
-
- -

Set the 3D mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setClean (const bool on)
-
- -

Set the Clean mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setEcono (const bool on)
-
- -

Set the Economical mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setFilter()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setFilter (const bool on)
-
- -

Set the Filter mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setNight()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setNight (const bool on)
-
- -

Set the Night (Sleep) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setRaw (const uint8_t * data)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]dataA valid code for this protocol.
-
-
- -
-
- -

◆ setSilent()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setSilent (const bool on)
-
- -

Set the Silent (Quiet) mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setSwingHorizontal (const uint8_t pos)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]posThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setSwingVertical (const uint8_t pos)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]posThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::setTurbo (const bool on)
-
- -

Set the Turbo mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy152Ac::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMitsubishiHeavy152Ac::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMitsubishiHeavy152Ac::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRMitsubishiHeavy152Ac::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRMitsubishiHeavy152Ac::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRMitsubishiHeavy152Ac::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMitsubishiHeavy152Ac::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRMitsubishiHeavy152Ac::validChecksum (const uint8_t * state,
const uint16_t length = kMitsubishiHeavy152StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false. Note: Technically it has no checksum, but does have inverted byte pairs.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Mitsubishi152Protocol IRMitsubishiHeavy152Ac::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMitsubishiHeavy152Ac::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.map deleted file mode 100644 index 4df84805c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.md5 deleted file mode 100644 index b8c0035c3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bd69f2a5d78af4e87812002503332186 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.png deleted file mode 100644 index 463210cc4..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac-members.html deleted file mode 100644 index bcaf68076..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRMitsubishiHeavy88Ac Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRMitsubishiHeavy88Acprivate
_irsendIRMitsubishiHeavy88Acprivate
begin(void)IRMitsubishiHeavy88Ac
calibrate(void)IRMitsubishiHeavy88Acinline
checksum(void)IRMitsubishiHeavy88Acprivate
checkZjsSig(const uint8_t *state)IRMitsubishiHeavy88Acstatic
convertFan(const stdAc::fanspeed_t speed)IRMitsubishiHeavy88Acstatic
convertMode(const stdAc::opmode_t mode)IRMitsubishiHeavy88Acstatic
convertSwingH(const stdAc::swingh_t position)IRMitsubishiHeavy88Acstatic
convertSwingV(const stdAc::swingv_t position)IRMitsubishiHeavy88Acstatic
get3D(void) constIRMitsubishiHeavy88Ac
getClean(void) constIRMitsubishiHeavy88Ac
getEcono(void) constIRMitsubishiHeavy88Ac
getFan(void) constIRMitsubishiHeavy88Ac
getMode(void) constIRMitsubishiHeavy88Ac
getPower(void) constIRMitsubishiHeavy88Ac
getRaw(void)IRMitsubishiHeavy88Ac
getSwingHorizontal(void) constIRMitsubishiHeavy88Ac
getSwingVertical(void) constIRMitsubishiHeavy88Ac
getTemp(void) constIRMitsubishiHeavy88Ac
getTurbo(void) constIRMitsubishiHeavy88Ac
IRMitsubishiHeavy88Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRMitsubishiHeavy88Acexplicit
off(void)IRMitsubishiHeavy88Ac
on(void)IRMitsubishiHeavy88Ac
send(const uint16_t repeat=kMitsubishiHeavy88MinRepeat)IRMitsubishiHeavy88Ac
set3D(const bool on)IRMitsubishiHeavy88Ac
setClean(const bool on)IRMitsubishiHeavy88Ac
setEcono(const bool on)IRMitsubishiHeavy88Ac
setFan(const uint8_t fan)IRMitsubishiHeavy88Ac
setMode(const uint8_t mode)IRMitsubishiHeavy88Ac
setPower(const bool on)IRMitsubishiHeavy88Ac
setRaw(const uint8_t *data)IRMitsubishiHeavy88Ac
setSwingHorizontal(const uint8_t pos)IRMitsubishiHeavy88Ac
setSwingVertical(const uint8_t pos)IRMitsubishiHeavy88Ac
setTemp(const uint8_t temp)IRMitsubishiHeavy88Ac
setTurbo(const bool on)IRMitsubishiHeavy88Ac
stateReset(void)IRMitsubishiHeavy88Ac
toCommon(void) constIRMitsubishiHeavy88Ac
toCommonFanSpeed(const uint8_t speed)IRMitsubishiHeavy88Acstatic
toCommonSwingH(const uint8_t pos)IRMitsubishiHeavy88Acstatic
toCommonSwingV(const uint8_t pos)IRMitsubishiHeavy88Acstatic
toString(void) constIRMitsubishiHeavy88Ac
validChecksum(const uint8_t *state, const uint16_t length=kMitsubishiHeavy88StateLength)IRMitsubishiHeavy88Acstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac.html deleted file mode 100644 index d120589ae..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac.html +++ /dev/null @@ -1,1394 +0,0 @@ - - - - - - - -IRremoteESP8266: IRMitsubishiHeavy88Ac Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Mitsubishi Heavy 88-bit A/C messages. - More...

- -

#include <ir_MitsubishiHeavy.h>

-
-Collaboration diagram for IRMitsubishiHeavy88Ac:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRMitsubishiHeavy88Ac (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kMitsubishiHeavy88MinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwingVertical (const uint8_t pos)
 Set the Vertical Swing mode of the A/C. More...
 
uint8_t getSwingVertical (void) const
 Get the Vertical Swing mode of the A/C. More...
 
void setSwingHorizontal (const uint8_t pos)
 Set the Horizontal Swing mode of the A/C. More...
 
uint8_t getSwingHorizontal (void) const
 Get the Horizontal Swing mode of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo mode of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo mode of the A/C. More...
 
void setEcono (const bool on)
 Set the Economical mode of the A/C. More...
 
bool getEcono (void) const
 Get the Economical mode of the A/C. More...
 
void set3D (const bool on)
 Set the 3D mode of the A/C. More...
 
bool get3D (void) const
 Get the 3D mode of the A/C. More...
 
void setClean (const bool on)
 Set the Clean mode of the A/C. More...
 
bool getClean (void) const
 Get the Clean mode of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t *data)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool checkZjsSig (const uint8_t *state)
 Verify the given state has a ZJ-S signature. More...
 
static bool validChecksum (const uint8_t *state, const uint16_t length=kMitsubishiHeavy88StateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a stdAc::swingh_t enum into it's native setting. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate the checksum for the current internal state of the remote. Note: Technically it has no checksum, but does have inverted byte pairs. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Mitsubishi88Protocol _
 
-

Detailed Description

-

Class for handling detailed Mitsubishi Heavy 88-bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRMitsubishiHeavy88Ac()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRMitsubishiHeavy88Ac::IRMitsubishiHeavy88Ac (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRMitsubishiHeavy88Ac::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRMitsubishiHeavy88Ac::checksum (void )
-
-private
-
- -

Calculate the checksum for the current internal state of the remote. Note: Technically it has no checksum, but does have inverted byte pairs.

- -
-
- -

◆ checkZjsSig()

- -
-
- - - - - -
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::checkZjsSig (const uint8_t * state)
-
-static
-
- -

Verify the given state has a ZJ-S signature.

-
Parameters
- - -
[in]stateA ptr to a state to be checked.
-
-
-
Returns
true, the check passed. Otherwise, false.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a stdAc::swingh_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ get3D()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::get3D (void ) const
-
- -

Get the 3D mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::getClean (void ) const
-
- -

Get the Clean mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::getEcono (void ) const
-
- -

Get the Economical mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRMitsubishiHeavy88Ac::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::getSwingHorizontal (void ) const
-
- -

Get the Horizontal Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::getSwingVertical (void ) const
-
- -

Get the Vertical Swing mode of the A/C.

-
Returns
The native position/mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRMitsubishiHeavy88Ac::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRMitsubishiHeavy88Ac::getTurbo (void ) const
-
- -

Get the Turbo mode of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::send (const uint16_t repeat = kMitsubishiHeavy88MinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ set3D()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::set3D (const bool on)
-
- -

Set the 3D mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setClean (const bool on)
-
- -

Set the Clean mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setEcono (const bool on)
-
- -

Set the Economical mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setRaw (const uint8_t * data)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]dataA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setSwingHorizontal (const uint8_t pos)
-
- -

Set the Horizontal Swing mode of the A/C.

-
Parameters
- - -
[in]posThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setSwingVertical (const uint8_t pos)
-
- -

Set the Vertical Swing mode of the A/C.

-
Parameters
- - -
[in]posThe position/mode to set the swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::setTurbo (const bool on)
-
- -

Set the Turbo mode of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRMitsubishiHeavy88Ac::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRMitsubishiHeavy88Ac::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRMitsubishiHeavy88Ac::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRMitsubishiHeavy88Ac::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRMitsubishiHeavy88Ac::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRMitsubishiHeavy88Ac::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRMitsubishiHeavy88Ac::validChecksum (const uint8_t * state,
const uint16_t length = kMitsubishiHeavy88StateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false. Note: Technically it has no checksum, but does have inverted byte pairs.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Mitsubishi88Protocol IRMitsubishiHeavy88Ac::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRMitsubishiHeavy88Ac::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.map deleted file mode 100644 index 13d9fe238..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.md5 deleted file mode 100644 index 6c93fe40e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -da8bfb93cb513366d146f01b4c18efdb \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.png deleted file mode 100644 index 3ea553f85..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc-members.html deleted file mode 100644 index bae33a328..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc-members.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRNeoclimaAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRNeoclimaAcprivate
_irsendIRNeoclimaAcprivate
begin(void)IRNeoclimaAc
calcChecksum(const uint8_t state[], const uint16_t length=kNeoclimaStateLength)IRNeoclimaAcstatic
calibrate(void)IRNeoclimaAcinline
checksum(const uint16_t length=kNeoclimaStateLength)IRNeoclimaAcprivate
convertFan(const stdAc::fanspeed_t speed)IRNeoclimaAcstatic
convertMode(const stdAc::opmode_t mode)IRNeoclimaAcstatic
get8CHeat(void) constIRNeoclimaAc
getButton(void) constIRNeoclimaAc
getEcono(void) constIRNeoclimaAc
getEye(void) constIRNeoclimaAc
getFan(void) constIRNeoclimaAc
getFollow(void) constIRNeoclimaAc
getFresh(void) constIRNeoclimaAc
getHold(void) constIRNeoclimaAc
getIon(void) constIRNeoclimaAc
getLight(void) constIRNeoclimaAc
getMode(void) constIRNeoclimaAc
getPower(void) constIRNeoclimaAc
getRaw(void)IRNeoclimaAc
getSleep(void) constIRNeoclimaAc
getSwingH(void) constIRNeoclimaAc
getSwingV(void) constIRNeoclimaAc
getTemp(void) constIRNeoclimaAc
getTempUnits(void) constIRNeoclimaAc
getTurbo(void) constIRNeoclimaAc
IRNeoclimaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRNeoclimaAcexplicit
off(void)IRNeoclimaAc
on(void)IRNeoclimaAc
send(const uint16_t repeat=kNeoclimaMinRepeat)IRNeoclimaAc
set8CHeat(const bool on)IRNeoclimaAc
setButton(const uint8_t button)IRNeoclimaAc
setEcono(const bool on)IRNeoclimaAc
setEye(const bool on)IRNeoclimaAc
setFan(const uint8_t speed)IRNeoclimaAc
setFresh(const bool on)IRNeoclimaAc
setHold(const bool on)IRNeoclimaAc
setIon(const bool on)IRNeoclimaAc
setLight(const bool on)IRNeoclimaAc
setMode(const uint8_t mode)IRNeoclimaAc
setPower(const bool on)IRNeoclimaAc
setRaw(const uint8_t new_code[], const uint16_t length=kNeoclimaStateLength)IRNeoclimaAc
setSleep(const bool on)IRNeoclimaAc
setSwingH(const bool on)IRNeoclimaAc
setSwingV(const bool on)IRNeoclimaAc
setTemp(const uint8_t temp, const bool celsius=true)IRNeoclimaAc
setTurbo(const bool on)IRNeoclimaAc
stateReset(void)IRNeoclimaAc
toCommon(void) constIRNeoclimaAc
toCommonFanSpeed(const uint8_t speed)IRNeoclimaAcstatic
toCommonMode(const uint8_t mode)IRNeoclimaAcstatic
toString(void) constIRNeoclimaAc
validChecksum(const uint8_t state[], const uint16_t length=kNeoclimaStateLength)IRNeoclimaAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc.html deleted file mode 100644 index 3fb9dc099..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc.html +++ /dev/null @@ -1,1687 +0,0 @@ - - - - - - - -IRremoteESP8266: IRNeoclimaAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Neoclima A/C messages. - More...

- -

#include <ir_Neoclima.h>

-
-Collaboration diagram for IRNeoclimaAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRNeoclimaAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kNeoclimaMinRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setButton (const uint8_t button)
 Set the Button/Command pressed setting of the A/C. More...
 
uint8_t getButton (void) const
 Get the Button/Command setting of the A/C. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setTemp (const uint8_t temp, const bool celsius=true)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setSwingV (const bool on)
 Set the vertical swing setting of the A/C. More...
 
bool getSwingV (void) const
 Get the vertical swing setting of the A/C. More...
 
void setSwingH (const bool on)
 Set the horizontal swing setting of the A/C. More...
 
bool getSwingH (void) const
 Get the horizontal swing (Air Flow) setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy (Energy Saver) setting of the A/C. More...
 
bool getEcono (void) const
 Get the Economy (Energy Saver) setting of the A/C. More...
 
void setFresh (const bool on)
 Set the Fresh (air) setting of the A/C. More...
 
bool getFresh (void) const
 Get the Fresh (air) setting of the A/C. More...
 
void setHold (const bool on)
 Set the Hold setting of the A/C. More...
 
bool getHold (void) const
 Get the Hold setting of the A/C. More...
 
void setIon (const bool on)
 Set the Ion (filter) setting of the A/C. More...
 
bool getIon (void) const
 Get the Ion (filter) setting of the A/C. More...
 
void setLight (const bool on)
 Set the Light(LED display) setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (LED display) setting of the A/C. More...
 
void set8CHeat (const bool on)
 Set the 8°C Heat setting of the A/C. More...
 
bool get8CHeat (void) const
 Get the 8°C Heat setting of the A/C. More...
 
void setEye (const bool on)
 Set the Eye (Sensor) setting of the A/C. More...
 
bool getEye (void) const
 Get the Eye (Sensor) setting of the A/C. More...
 
bool getTempUnits (void) const
 Is the A/C unit using Fahrenheit or Celsius for temperature units. More...
 
bool getFollow (void) const
 Get the Follow Me setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kNeoclimaStateLength)
 Set the internal state from a valid code for this protocol. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kNeoclimaStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kNeoclimaStateLength)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kNeoclimaStateLength)
 Calculate & update the checksum for the internal state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
NeoclimaProtocol _
 
-

Detailed Description

-

Class for handling detailed Neoclima A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRNeoclimaAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRNeoclimaAc::IRNeoclimaAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRNeoclimaAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRNeoclimaAc::calcChecksum (const uint8_t state[],
const uint16_t length = kNeoclimaStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRNeoclimaAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRNeoclimaAc::checksum (const uint16_t length = kNeoclimaStateLength)
-
-private
-
- -

Calculate & update the checksum for the internal state.

-
Parameters
- - -
[in]lengthThe length/size of the internal state.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRNeoclimaAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRNeoclimaAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ get8CHeat()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::get8CHeat (void ) const
-
- -

Get the 8°C Heat setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getButton()

- -
-
- - - - - - - - -
uint8_t IRNeoclimaAc::getButton (void ) const
-
- -

Get the Button/Command setting of the A/C.

-
Returns
The value of the button/command that was pressed.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getEcono (void ) const
-
- -

Get the Economy (Energy Saver) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEye()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getEye (void ) const
-
- -

Get the Eye (Sensor) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRNeoclimaAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getFollow()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getFollow (void ) const
-
- -

Get the Follow Me setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFresh()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getFresh (void ) const
-
- -

Get the Fresh (air) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getHold()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getHold (void ) const
-
- -

Get the Hold setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getIon()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getIon (void ) const
-
- -

Get the Ion (filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getLight (void ) const
-
- -

Get the Light (LED display) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRNeoclimaAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRNeoclimaAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getSwingH (void ) const
-
- -

Get the horizontal swing (Air Flow) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getSwingV (void ) const
-
- -

Get the vertical swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRNeoclimaAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees.
-
Note
The units of the temperature (F/C) is determined by getTempUnits().
- -
-
- -

◆ getTempUnits()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getTempUnits (void ) const
-
- -

Is the A/C unit using Fahrenheit or Celsius for temperature units.

-
Returns
false, Fahrenheit. true, Celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRNeoclimaAc::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRNeoclimaAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRNeoclimaAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRNeoclimaAc::send (const uint16_t repeat = kNeoclimaMinRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ set8CHeat()

- -
-
- - - - - - - - -
void IRNeoclimaAc::set8CHeat (const bool on)
-
- -

Set the 8°C Heat setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
This feature maintains the room temperature steadily at 8°C and prevents the room from freezing by activating the heating operation automatically when nobody is at home over a longer period during severe winter.
- -
-
- -

◆ setButton()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setButton (const uint8_t button)
-
- -

Set the Button/Command pressed setting of the A/C.

-
Parameters
- - -
[in]buttonThe value of the button/command that was pressed.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setEcono (const bool on)
-
- -

Set the Economy (Energy Saver) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setEye()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setEye (const bool on)
-
- -

Set the Eye (Sensor) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting. 0-3, 0 is auto, 1-3 is the speed
-
-
- -
-
- -

◆ setFresh()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setFresh (const bool on)
-
- -

Set the Fresh (air) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setHold()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setHold (const bool on)
-
- -

Set the Hold setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setIon()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setIon (const bool on)
-
- -

Set the Ion (filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setLight (const bool on)
-
- -

Set the Light(LED display) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRNeoclimaAc::setRaw (const uint8_t new_code[],
const uint16_t length = kNeoclimaStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length/size of the new_code array.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setSwingH (const bool on)
-
- -

Set the horizontal swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setSwingV (const bool on)
-
- -

Set the vertical swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRNeoclimaAc::setTemp (const uint8_t temp,
const bool celsius = true 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees celsius.
[in]celsiusUse Fahrenheit (false) or Celsius (true).
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRNeoclimaAc::setTurbo (const bool on)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRNeoclimaAc::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRNeoclimaAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRNeoclimaAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRNeoclimaAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRNeoclimaAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRNeoclimaAc::validChecksum (const uint8_t state[],
const uint16_t length = kNeoclimaStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
NeoclimaProtocol IRNeoclimaAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRNeoclimaAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.map deleted file mode 100644 index a8676504a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.md5 deleted file mode 100644 index ad1215eec..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -517a172da896e5faddd77763fd613da1 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.png deleted file mode 100644 index 997fe24ff..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRNeoclimaAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc-members.html deleted file mode 100644 index 50e639d84..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc-members.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRPanasonicAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_getTime(const uint8_t ptr[])IRPanasonicAcprivatestatic
_irsendIRPanasonicAcprivate
_setTime(uint8_t *const ptr, const uint16_t mins_since_midnight, const bool round_down)IRPanasonicAcprivatestatic
_swinghIRPanasonicAcprivate
_tempIRPanasonicAcprivate
begin(void)IRPanasonicAc
calcChecksum(const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)IRPanasonicAcstatic
calibrate(void)IRPanasonicAcinline
cancelOffTimer(void)IRPanasonicAc
cancelOnTimer(void)IRPanasonicAc
convertFan(const stdAc::fanspeed_t speed)IRPanasonicAcstatic
convertMode(const stdAc::opmode_t mode)IRPanasonicAcstatic
convertSwingH(const stdAc::swingh_t position)IRPanasonicAcstatic
convertSwingV(const stdAc::swingv_t position)IRPanasonicAcstatic
encodeTime(const uint8_t hours, const uint8_t mins)IRPanasonicAcstatic
fixChecksum(const uint16_t length=kPanasonicAcStateLength)IRPanasonicAcprivate
getClock(void)IRPanasonicAc
getFan(void)IRPanasonicAc
getIon(void)IRPanasonicAc
getMode(void)IRPanasonicAc
getModel(void)IRPanasonicAc
getOffTimer(void)IRPanasonicAc
getOnTimer(void)IRPanasonicAc
getPower(void)IRPanasonicAc
getPowerful(void)IRPanasonicAc
getQuiet(void)IRPanasonicAc
getRaw(void)IRPanasonicAc
getSwingHorizontal(void)IRPanasonicAc
getSwingVertical(void)IRPanasonicAc
getTemp(void)IRPanasonicAc
IRPanasonicAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRPanasonicAcexplicit
isOffTimerEnabled(void)IRPanasonicAc
isOnTimerEnabled(void)IRPanasonicAc
off(void)IRPanasonicAc
on(void)IRPanasonicAc
remote_stateIRPanasonicAcprivate
send(const uint16_t repeat=kPanasonicAcDefaultRepeat)IRPanasonicAc
setClock(const uint16_t mins_since_midnight)IRPanasonicAc
setFan(const uint8_t fan)IRPanasonicAc
setIon(const bool on)IRPanasonicAc
setMode(const uint8_t mode)IRPanasonicAc
setModel(const panasonic_ac_remote_model_t model)IRPanasonicAc
setOffTimer(const uint16_t mins_since_midnight, const bool enable=true)IRPanasonicAc
setOnTimer(const uint16_t mins_since_midnight, const bool enable=true)IRPanasonicAc
setPower(const bool on)IRPanasonicAc
setPowerful(const bool on)IRPanasonicAc
setQuiet(const bool on)IRPanasonicAc
setRaw(const uint8_t state[])IRPanasonicAc
setSwingHorizontal(const uint8_t direction)IRPanasonicAc
setSwingVertical(const uint8_t elevation)IRPanasonicAc
setTemp(const uint8_t temp, const bool remember=true)IRPanasonicAc
stateReset(void)IRPanasonicAc
toCommon(void)IRPanasonicAc
toCommonFanSpeed(const uint8_t speed)IRPanasonicAcstatic
toCommonMode(const uint8_t mode)IRPanasonicAcstatic
toCommonSwingH(const uint8_t pos)IRPanasonicAcstatic
toCommonSwingV(const uint8_t pos)IRPanasonicAcstatic
toString(void)IRPanasonicAc
validChecksum(const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)IRPanasonicAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc.html deleted file mode 100644 index f0eb5d1f7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc.html +++ /dev/null @@ -1,1936 +0,0 @@ - - - - - - - -IRremoteESP8266: IRPanasonicAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Panasonic A/C messages. - More...

- -

#include <ir_Panasonic.h>

-
-Collaboration diagram for IRPanasonicAc:
-
-
Collaboration graph
- - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRPanasonicAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kPanasonicAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool on)
 Control the power state of the A/C unit. More...
 
bool getPower (void)
 Get the A/C power state of the remote. More...
 
void setTemp (const uint8_t temp, const bool remember=true)
 Set the temperature. More...
 
uint8_t getTemp (void)
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void)
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void)
 Get the operating mode setting of the A/C. More...
 
void setRaw (const uint8_t state[])
 Set the internal state from a valid code for this protocol. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setQuiet (const bool on)
 Set the Quiet setting of the A/C. More...
 
bool getQuiet (void)
 Get the Quiet setting of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) setting of the A/C. More...
 
bool getPowerful (void)
 Get the Powerful (Turbo) setting of the A/C. More...
 
void setIon (const bool on)
 Set the Ion (filter) setting of the A/C. More...
 
bool getIon (void)
 Get the Ion (filter) setting of the A/C. More...
 
void setModel (const panasonic_ac_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
panasonic_ac_remote_model_t getModel (void)
 Get/Detect the model of the A/C. More...
 
void setSwingVertical (const uint8_t elevation)
 Control the vertical swing setting. More...
 
uint8_t getSwingVertical (void)
 Get the current vertical swing setting. More...
 
void setSwingHorizontal (const uint8_t direction)
 Control the horizontal swing setting. More...
 
uint8_t getSwingHorizontal (void)
 Get the current horizontal swing setting. More...
 
uint16_t getClock (void)
 Get the current clock time value. More...
 
void setClock (const uint16_t mins_since_midnight)
 Set the current clock time value. More...
 
uint16_t getOnTimer (void)
 Get the On Timer time value. More...
 
void setOnTimer (const uint16_t mins_since_midnight, const bool enable=true)
 Set/Enable the On Timer. More...
 
void cancelOnTimer (void)
 Cancel the On Timer. More...
 
bool isOnTimerEnabled (void)
 Check if the On Timer is Enabled. More...
 
uint16_t getOffTimer (void)
 Get the Off Timer time value. More...
 
void setOffTimer (const uint16_t mins_since_midnight, const bool enable=true)
 Set/Enable the Off Timer. More...
 
void cancelOffTimer (void)
 Cancel the Off Timer. More...
 
bool isOffTimerEnabled (void)
 Check if the Off Timer is Enabled. More...
 
stdAc::state_t toCommon (void)
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void)
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)
 Calculate the checksum for a given state. More...
 
static uint16_t encodeTime (const uint8_t hours, const uint8_t mins)
 Convert standard (military/24hr) time to nr. of minutes since midnight. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a standard A/C vertical swing into its native setting. More...
 
static uint8_t convertSwingH (const stdAc::swingh_t position)
 Convert a standard A/C horizontal swing into its native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
static stdAc::swingh_t toCommonSwingH (const uint8_t pos)
 Convert a native horizontal swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void fixChecksum (const uint16_t length=kPanasonicAcStateLength)
 Calculate and set the checksum values for the internal state. More...
 
- - - - - - - -

-Static Private Member Functions

static uint16_t _getTime (const uint8_t ptr[])
 Get the time from a given pointer location. More...
 
static void _setTime (uint8_t *const ptr, const uint16_t mins_since_midnight, const bool round_down)
 Set the time at a given pointer location. More...
 
- - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
uint8_t remote_state [kPanasonicAcStateLength]
 The state in code form. More...
 
uint8_t _swingh
 
uint8_t _temp
 
-

Detailed Description

-

Class for handling detailed Panasonic A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRPanasonicAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRPanasonicAc::IRPanasonicAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _getTime()

- -
-
- - - - - -
- - - - - - - - -
uint16_t IRPanasonicAc::_getTime (const uint8_t ptr[])
-
-staticprivate
-
- -

Get the time from a given pointer location.

-
Parameters
- - -
[in]ptrA pointer to a time location in a state.
-
-
-
Returns
The time expressed as nr. of minutes past midnight.
-
Note
Internal use only.
- -
-
- -

◆ _setTime()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRPanasonicAc::_setTime (uint8_t *const ptr,
const uint16_t mins_since_midnight,
const bool round_down 
)
-
-staticprivate
-
- -

Set the time at a given pointer location.

-
Parameters
- - - - -
[in,out]ptrA pointer to a time location in a state.
[in]mins_since_midnightThe time as nr. of minutes past midnight.
[in]round_downDo we round to the nearest 10 minute mark?
-
-
-
Note
Internal use only.
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRPanasonicAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRPanasonicAc::calcChecksum (const uint8_t * state,
const uint16_t length = kPanasonicAcStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe value to calc the checksum of.
[in]lengthThe size/length of the state.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRPanasonicAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ cancelOffTimer()

- -
-
- - - - - - - - -
void IRPanasonicAc::cancelOffTimer (void )
-
- -

Cancel the Off Timer.

- -
-
- -

◆ cancelOnTimer()

- -
-
- - - - - - - - -
void IRPanasonicAc::cancelOnTimer (void )
-
- -

Cancel the On Timer.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingH()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc::convertSwingH (const stdAc::swingh_t position)
-
-static
-
- -

Convert a standard A/C horizontal swing into its native setting.

-
Parameters
- - -
[in]positionA stdAc::swingh_t position to convert.
-
-
-
Returns
The equivalent native horizontal swing position.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a standard A/C vertical swing into its native setting.

-
Parameters
- - -
[in]positionA stdAc::swingv_t position to convert.
-
-
-
Returns
The equivalent native horizontal swing position.
- -
-
- -

◆ encodeTime()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint16_t IRPanasonicAc::encodeTime (const uint8_t hours,
const uint8_t mins 
)
-
-static
-
- -

Convert standard (military/24hr) time to nr. of minutes since midnight.

-
Parameters
- - - -
[in]hoursThe hours component of the time.
[in]minsThe minutes component of the time.
-
-
-
Returns
The nr of minutes since midnight.
- -
-
- -

◆ fixChecksum()

- -
-
- - - - - -
- - - - - - - - -
void IRPanasonicAc::fixChecksum (const uint16_t length = kPanasonicAcStateLength)
-
-private
-
- -

Calculate and set the checksum values for the internal state.

-
Parameters
- - -
[in]lengthThe size/length of the state.
-
-
- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint16_t IRPanasonicAc::getClock (void )
-
- -

Get the current clock time value.

-
Returns
The time expressed as nr. of minutes past midnight.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc::getFan (void )
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getIon()

- -
-
- - - - - - - - -
bool IRPanasonicAc::getIon (void )
-
- -

Get the Ion (filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc::getMode (void )
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
panasonic_ac_remote_model_t IRPanasonicAc::getModel (void )
-
- -

Get/Detect the model of the A/C.

-
Returns
The enum of the compatible model.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRPanasonicAc::getOffTimer (void )
-
- -

Get the Off Timer time value.

-
Returns
The time expressed as nr. of minutes past midnight.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRPanasonicAc::getOnTimer (void )
-
- -

Get the On Timer time value.

-
Returns
The time expressed as nr. of minutes past midnight.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRPanasonicAc::getPower (void )
-
- -

Get the A/C power state of the remote.

-
Returns
true, the setting is on. false, the setting is off.
-
Warning
Except for CKP models, where it returns if the power state will be toggled on the A/C unit when the next message is sent.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRPanasonicAc::getPowerful (void )
-
- -

Get the Powerful (Turbo) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRPanasonicAc::getQuiet (void )
-
- -

Get the Quiet setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRPanasonicAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc::getSwingHorizontal (void )
-
- -

Get the current horizontal swing setting.

-
Returns
The current position it is set to.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc::getSwingVertical (void )
-
- -

Get the current vertical swing setting.

-
Returns
The current position it is set to.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc::getTemp (void )
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ isOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRPanasonicAc::isOffTimerEnabled (void )
-
- -

Check if the Off Timer is Enabled.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ isOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRPanasonicAc::isOnTimerEnabled (void )
-
- -

Check if the On Timer is Enabled.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRPanasonicAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRPanasonicAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRPanasonicAc::send (const uint16_t repeat = kPanasonicAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IRPanasonicAc::setClock (const uint16_t mins_since_midnight)
-
- -

Set the current clock time value.

-
Parameters
- - -
[in]mins_since_midnightThe time as nr. of minutes past midnight.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRPanasonicAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setIon()

- -
-
- - - - - - - - -
void IRPanasonicAc::setIon (const bool on)
-
- -

Set the Ion (filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRPanasonicAc::setMode (const uint8_t desired)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]desiredThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRPanasonicAc::setModel (const panasonic_ac_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRPanasonicAc::setOffTimer (const uint16_t mins_since_midnight,
const bool enable = true 
)
-
- -

Set/Enable the Off Timer.

-
Parameters
- - - -
[in]mins_since_midnightThe time as nr. of minutes past midnight.
[in]enableDo we enable the timer or not?
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRPanasonicAc::setOnTimer (const uint16_t mins_since_midnight,
const bool enable = true 
)
-
- -

Set/Enable the On Timer.

-
Parameters
- - - -
[in]mins_since_midnightThe time as nr. of minutes past midnight.
[in]enableDo we enable the timer or not?
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRPanasonicAc::setPower (const bool on)
-
- -

Control the power state of the A/C unit.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Warning
For CKP models, the remote has no memory of the power state the A/C unit should be in. For those models setting this on/true will toggle the power state of the Panasonic A/C unit with the next message. e.g. If the A/C unit is already on, setPower(true) will turn it off. If the A/C unit is already off, setPower(true) will turn it on. setPower(false) will leave the A/C power state as it was. For all other models, setPower(true) should set the internal state to turn it on, and setPower(false) should turn it off.
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRPanasonicAc::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRPanasonicAc::setQuiet (const bool on)
-
- -

Set the Quiet setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRPanasonicAc::setRaw (const uint8_t state[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRPanasonicAc::setSwingHorizontal (const uint8_t desired_direction)
-
- -

Control the horizontal swing setting.

-
Parameters
- - -
[in]desired_directionThe position to set the horizontal swing to.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRPanasonicAc::setSwingVertical (const uint8_t desired_elevation)
-
- -

Control the vertical swing setting.

-
Parameters
- - -
[in]desired_elevationThe position to set the vertical swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRPanasonicAc::setTemp (const uint8_t celsius,
const bool remember = true 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]celsiusThe temperature in degrees celsius.
[in]rememberA flag for the class to remember the temperature.
-
-
-
Note
Automatically safely limits the temp to the operating range supported.
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRPanasonicAc::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRPanasonicAc::toCommon (void )
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRPanasonicAc::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRPanasonicAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingH()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingh_t IRPanasonicAc::toCommonSwingH (const uint8_t pos)
-
-static
-
- -

Convert a native horizontal swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common horizontal swing position.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRPanasonicAc::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRPanasonicAc::toString (void )
-
- -

Convert the internal state into a human readable string.

-
Returns
A string containing the settings in human-readable form.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRPanasonicAc::validChecksum (const uint8_t * state,
const uint16_t length = kPanasonicAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRPanasonicAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _swingh

- -
-
- - - - - -
- - - - -
uint8_t IRPanasonicAc::_swingh
-
-private
-
- -
-
- -

◆ _temp

- -
-
- - - - - -
- - - - -
uint8_t IRPanasonicAc::_temp
-
-private
-
- -
-
- -

◆ remote_state

- -
-
- - - - - -
- - - - -
uint8_t IRPanasonicAc::remote_state[kPanasonicAcStateLength]
-
-private
-
- -

The state in code form.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32-members.html deleted file mode 100644 index c749fd871..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRPanasonicAc32 Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRPanasonicAc32private
_irsendIRPanasonicAc32private
begin(void)IRPanasonicAc32
calibrate(void)IRPanasonicAc32inline
convertFan(const stdAc::fanspeed_t speed)IRPanasonicAc32static
convertMode(const stdAc::opmode_t mode)IRPanasonicAc32static
convertSwingV(const stdAc::swingv_t position)IRPanasonicAc32static
getFan(void) constIRPanasonicAc32
getMode(void) constIRPanasonicAc32
getPowerToggle(void) constIRPanasonicAc32
getRaw(void) constIRPanasonicAc32
getSwingHorizontal(void) constIRPanasonicAc32
getSwingVertical(void) constIRPanasonicAc32
getTemp(void) constIRPanasonicAc32
IRPanasonicAc32(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRPanasonicAc32explicit
send(const uint16_t repeat=kPanasonicAcDefaultRepeat)IRPanasonicAc32
setFan(const uint8_t fan)IRPanasonicAc32
setMode(const uint8_t mode)IRPanasonicAc32
setPowerToggle(const bool on)IRPanasonicAc32
setRaw(const uint32_t state)IRPanasonicAc32
setSwingHorizontal(const bool on)IRPanasonicAc32
setSwingVertical(const uint8_t pos)IRPanasonicAc32
setTemp(const uint8_t temp)IRPanasonicAc32
stateReset(void)IRPanasonicAc32
toCommon(const stdAc::state_t *prev=NULL) constIRPanasonicAc32
toCommonFanSpeed(const uint8_t speed)IRPanasonicAc32static
toCommonMode(const uint8_t mode)IRPanasonicAc32static
toCommonSwingV(const uint8_t pos)IRPanasonicAc32static
toString(void) constIRPanasonicAc32
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32.html deleted file mode 100644 index 613456222..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - -IRremoteESP8266: IRPanasonicAc32 Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Panasonic 32bit A/C messages. - More...

- -

#include <ir_Panasonic.h>

-
-Collaboration diagram for IRPanasonicAc32:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRPanasonicAc32 (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kPanasonicAcDefaultRepeat)
 Send the current internal state as IR messages. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setPowerToggle (const bool on)
 Set the Power Toggle setting of the A/C. More...
 
bool getPowerToggle (void) const
 Get the Power Toggle setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the desired temperature. More...
 
uint8_t getTemp (void) const
 Get the current desired temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setRaw (const uint32_t state)
 Set the internal state from a valid code for this protocol. More...
 
uint32_t getRaw (void) const
 Get a copy of the internal state/code for this protocol. More...
 
void setSwingVertical (const uint8_t pos)
 Control the vertical swing setting. More...
 
uint8_t getSwingVertical (void) const
 Get the current vertical swing setting. More...
 
void setSwingHorizontal (const bool on)
 Control the horizontal swing setting. More...
 
bool getSwingHorizontal (void) const
 Get the current horizontal swing setting. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a standard A/C vertical swing into its native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t pos)
 Convert a native vertical swing postion to it's common equivalent. More...
 
- - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
PanasonicAc32Protocol _
 The state in code form. More...
 
-

Detailed Description

-

Class for handling detailed Panasonic 32bit A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRPanasonicAc32()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRPanasonicAc32::IRPanasonicAc32 (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRPanasonicAc32::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRPanasonicAc32::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc32::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc32::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRPanasonicAc32::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a standard A/C vertical swing into its native setting.

-
Parameters
- - -
[in]positionA stdAc::swingv_t position to convert.
-
-
-
Returns
The equivalent native horizontal swing position.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc32::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc32::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - - -
bool IRPanasonicAc32::getPowerToggle (void ) const
-
- -

Get the Power Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint32_t IRPanasonicAc32::getRaw (void ) const
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
The code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRPanasonicAc32::getSwingHorizontal (void ) const
-
- -

Get the current horizontal swing setting.

-
Returns
The current position it is set to.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc32::getSwingVertical (void ) const
-
- -

Get the current vertical swing setting.

-
Returns
The current position it is set to.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRPanasonicAc32::getTemp (void ) const
-
- -

Get the current desired temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRPanasonicAc32::send (const uint16_t repeat = kPanasonicAcDefaultRepeat)
-
- -

Send the current internal state as IR messages.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
If we get an unexpected mode, default to AUTO.
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setPowerToggle (const bool on)
-
- -

Set the Power Toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setRaw (const uint32_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setSwingHorizontal (const bool on)
-
- -

Control the horizontal swing setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setSwingVertical (const uint8_t pos)
-
- -

Control the vertical swing setting.

-
Parameters
- - -
[in]posThe position to set the vertical swing to.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRPanasonicAc32::setTemp (const uint8_t degrees)
-
- -

Set the desired temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRPanasonicAc32::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRPanasonicAc32::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if required.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRPanasonicAc32::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRPanasonicAc32::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRPanasonicAc32::toCommonSwingV (const uint8_t pos)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]posA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRPanasonicAc32::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
PanasonicAc32Protocol IRPanasonicAc32::_
-
-private
-
- -

The state in code form.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRPanasonicAc32::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.map deleted file mode 100644 index 4eb627bca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.md5 deleted file mode 100644 index 6b690dd06..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6a8392d4410e2fd36aa5d55e0aa4f27a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.png deleted file mode 100644 index f2793c0a5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc32__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.map deleted file mode 100644 index 806678cd6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.md5 deleted file mode 100644 index ddab76af4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d3db02dc98d87de4f04f73ee0ebb90c7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.png deleted file mode 100644 index 9b0c44699..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRPanasonicAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc-members.html deleted file mode 100644 index 29697284f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRSamsungAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRSamsungAcprivate
_forcepowerIRSamsungAcprivate
_irsendIRSamsungAcprivate
_lastsentpowerstateIRSamsungAcprivate
begin(void)IRSamsungAc
calcChecksum(const uint8_t state[], const uint16_t length=kSamsungAcStateLength)IRSamsungAcstatic
calibrate(void)IRSamsungAcinline
checksum(const uint16_t length=kSamsungAcStateLength)IRSamsungAcprivate
convertFan(const stdAc::fanspeed_t speed)IRSamsungAcstatic
convertMode(const stdAc::opmode_t mode)IRSamsungAcstatic
getBeep(void) constIRSamsungAc
getBreeze(void) constIRSamsungAc
getClean(void) constIRSamsungAc
getDisplay(void) constIRSamsungAc
getFan(void) constIRSamsungAc
getIon(void) constIRSamsungAc
getMode(void) constIRSamsungAc
getPower(void) constIRSamsungAc
getPowerful(void) constIRSamsungAc
getQuiet(void) constIRSamsungAc
getRaw(void)IRSamsungAc
getSwing(void) constIRSamsungAc
getTemp(void) constIRSamsungAc
IRSamsungAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRSamsungAcexplicit
off(void)IRSamsungAc
on(void)IRSamsungAc
send(const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)IRSamsungAc
sendExtended(const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)IRSamsungAc
sendOff(const uint16_t repeat=kSamsungAcDefaultRepeat)IRSamsungAc
sendOn(const uint16_t repeat=kSamsungAcDefaultRepeat)IRSamsungAc
setBeep(const bool on)IRSamsungAc
setBreeze(const bool on)IRSamsungAc
setClean(const bool on)IRSamsungAc
setDisplay(const bool on)IRSamsungAc
setFan(const uint8_t speed)IRSamsungAc
setIon(const bool on)IRSamsungAc
setMode(const uint8_t mode)IRSamsungAc
setPower(const bool on)IRSamsungAc
setPowerful(const bool on)IRSamsungAc
setQuiet(const bool on)IRSamsungAc
setRaw(const uint8_t new_code[], const uint16_t length=kSamsungAcStateLength)IRSamsungAc
setSwing(const bool on)IRSamsungAc
setTemp(const uint8_t temp)IRSamsungAc
stateReset(const bool forcepower=true, const bool initialPower=true)IRSamsungAc
toCommon(void) constIRSamsungAc
toCommonFanSpeed(const uint8_t speed)IRSamsungAcstatic
toCommonMode(const uint8_t mode)IRSamsungAcstatic
toString(void) constIRSamsungAc
validChecksum(const uint8_t state[], const uint16_t length=kSamsungAcStateLength)IRSamsungAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc.html deleted file mode 100644 index 5c2cdc782..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc.html +++ /dev/null @@ -1,1599 +0,0 @@ - - - - - - - -IRremoteESP8266: IRSamsungAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Samsung A/C messages. - More...

- -

#include <ir_Samsung.h>

-
-Collaboration diagram for IRSamsungAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRSamsungAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (const bool forcepower=true, const bool initialPower=true)
 Reset the internal state of the emulation. More...
 
void send (const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)
 Send the current internal state as an IR message. More...
 
void sendExtended (const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)
 Send the extended current internal state as an IR message. More...
 
void sendOn (const uint16_t repeat=kSamsungAcDefaultRepeat)
 Send the special extended "On" message as the library can't seem to reproduce this message automatically. More...
 
void sendOff (const uint16_t repeat=kSamsungAcDefaultRepeat)
 Send the special extended "Off" message as the library can't seem to reproduce this message automatically. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const bool on)
 Set the vertical swing setting of the A/C. More...
 
bool getSwing (void) const
 Get the vertical swing setting of the A/C. More...
 
void setBeep (const bool on)
 Set the Beep setting of the A/C. More...
 
bool getBeep (void) const
 Get the Beep setting of the A/C. More...
 
void setClean (const bool on)
 Set the Clean setting of the A/C. More...
 
bool getClean (void) const
 Get the Clean setting of the A/C. More...
 
void setQuiet (const bool on)
 Set the Quiet setting of the A/C. More...
 
bool getQuiet (void) const
 Get the Quiet setting of the A/C. More...
 
void setPowerful (const bool on)
 Set the Powerful (Turbo) setting of the A/C. More...
 
bool getPowerful (void) const
 Get the Powerful (Turbo) setting of the A/C. More...
 
void setBreeze (const bool on)
 Closes the vanes over the fan outlet, to stop direct wind. Aka. WindFree. More...
 
bool getBreeze (void) const
 Are the vanes closed over the fan outlet, to stop direct wind? Aka. WindFree. More...
 
void setDisplay (const bool on)
 Set the Display (Light/LED) setting of the A/C. More...
 
bool getDisplay (void) const
 Get the Display (Light/LED) setting of the A/C. More...
 
void setIon (const bool on)
 Set the Ion (Filter) setting of the A/C. More...
 
bool getIon (void) const
 Get the Ion (Filter) setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kSamsungAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kSamsungAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kSamsungAcStateLength)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kSamsungAcStateLength)
 Update the checksum for the internal state. More...
 
- - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
SamsungProtocol _
 
bool _forcepower
 Hack to know when we need to send a special power mesg. More...
 
bool _lastsentpowerstate
 
-

Detailed Description

-

Class for handling detailed Samsung A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRSamsungAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRSamsungAc::IRSamsungAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRSamsungAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRSamsungAc::calcChecksum (const uint8_t state[],
const uint16_t length = kSamsungAcStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRSamsungAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRSamsungAc::checksum (const uint16_t length = kSamsungAcStateLength)
-
-private
-
- -

Update the checksum for the internal state.

-
Parameters
- - -
[in]lengthThe length/size of the internal array to checksum.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSamsungAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSamsungAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getBeep()

- -
-
- - - - - - - - -
bool IRSamsungAc::getBeep (void ) const
-
- -

Get the Beep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getBreeze()

- -
-
- - - - - - - - -
bool IRSamsungAc::getBreeze (void ) const
-
- -

Are the vanes closed over the fan outlet, to stop direct wind? Aka. WindFree.

-
Returns
true, the setting is on. false, the setting is off.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1062
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRSamsungAc::getClean (void ) const
-
- -

Get the Clean setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getDisplay()

- -
-
- - - - - - - - -
bool IRSamsungAc::getDisplay (void ) const
-
- -

Get the Display (Light/LED) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRSamsungAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getIon()

- -
-
- - - - - - - - -
bool IRSamsungAc::getIon (void ) const
-
- -

Get the Ion (Filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRSamsungAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRSamsungAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerful()

- -
-
- - - - - - - - -
bool IRSamsungAc::getPowerful (void ) const
-
- -

Get the Powerful (Turbo) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRSamsungAc::getQuiet (void ) const
-
- -

Get the Quiet setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRSamsungAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRSamsungAc::getSwing (void ) const
-
- -

Get the vertical swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Todo:
(Hollako) Explain why sometimes the LSB of remote_state[9] is a 1. e.g. 0xAE or 0XAF for swing move.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRSamsungAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRSamsungAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRSamsungAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSamsungAc::send (const uint16_t repeat = kSamsungAcDefaultRepeat,
const bool calcchecksum = true 
)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - - -
[in]repeatNr. of times the message will be repeated.
[in]calcchecksumDo we update the checksum before sending?
-
-
-
Note
Use for most function/mode/settings changes to the unit. i.e. When the device is already running.
- -
-
- -

◆ sendExtended()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSamsungAc::sendExtended (const uint16_t repeat = kSamsungAcDefaultRepeat,
const bool calcchecksum = true 
)
-
- -

Send the extended current internal state as an IR message.

-
Parameters
- - - -
[in]repeatNr. of times the message will be repeated.
[in]calcchecksumDo we update the checksum before sending?
-
-
-
Note
Use this for when you need to power on/off the device. Samsung A/C requires an extended length message when you want to change the power operating mode of the A/C unit.
- -
-
- -

◆ sendOff()

- -
-
- - - - - - - - -
void IRSamsungAc::sendOff (const uint16_t repeat = kSamsungAcDefaultRepeat)
-
- -

Send the special extended "Off" message as the library can't seem to reproduce this message automatically.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/604#issuecomment-475020036
- -
-
- -

◆ sendOn()

- -
-
- - - - - - - - -
void IRSamsungAc::sendOn (const uint16_t repeat = kSamsungAcDefaultRepeat)
-
- -

Send the special extended "On" message as the library can't seem to reproduce this message automatically.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/604#issuecomment-475020036
- -
-
- -

◆ setBeep()

- -
-
- - - - - - - - -
void IRSamsungAc::setBeep (const bool on)
-
- -

Set the Beep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setBreeze()

- -
-
- - - - - - - - -
void IRSamsungAc::setBreeze (const bool on)
-
- -

Closes the vanes over the fan outlet, to stop direct wind. Aka. WindFree.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1062
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRSamsungAc::setClean (const bool on)
-
- -

Set the Clean setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setDisplay()

- -
-
- - - - - - - - -
void IRSamsungAc::setDisplay (const bool on)
-
- -

Set the Display (Light/LED) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRSamsungAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setIon()

- -
-
- - - - - - - - -
void IRSamsungAc::setIon (const bool on)
-
- -

Set the Ion (Filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRSamsungAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRSamsungAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerful()

- -
-
- - - - - - - - -
void IRSamsungAc::setPowerful (const bool on)
-
- -

Set the Powerful (Turbo) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRSamsungAc::setQuiet (const bool on)
-
- -

Set the Quiet setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSamsungAc::setRaw (const uint8_t new_code[],
const uint16_t length = kSamsungAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length/size of the new_code array.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRSamsungAc::setSwing (const bool on)
-
- -

Set the vertical swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Todo:
(Hollako) Explain why sometimes the LSB of remote_state[9] is a 1. e.g. 0xAE or 0XAF for swing move.
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRSamsungAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSamsungAc::stateReset (const bool forcepower = true,
const bool initialPower = true 
)
-
- -

Reset the internal state of the emulation.

-
Parameters
- - - -
[in]forcepowerA flag indicating if force sending a special power message with the first send() call.
[in]initialPowerSet the initial power state. True, on. False, off.
-
-
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRSamsungAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRSamsungAc::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRSamsungAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRSamsungAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRSamsungAc::validChecksum (const uint8_t state[],
const uint16_t length = kSamsungAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
SamsungProtocol IRSamsungAc::_
-
-private
-
- -
-
- -

◆ _forcepower

- -
-
- - - - - -
- - - - -
bool IRSamsungAc::_forcepower
-
-private
-
- -

Hack to know when we need to send a special power mesg.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRSamsungAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _lastsentpowerstate

- -
-
- - - - - -
- - - - -
bool IRSamsungAc::_lastsentpowerstate
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.map deleted file mode 100644 index 8d4aabf8c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.md5 deleted file mode 100644 index 0132e2b98..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -83b0e47ec039fa39ca0df95e295c598a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.png deleted file mode 100644 index 2ba7e73a6..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSamsungAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc-members.html deleted file mode 100644 index cfca50977..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc-members.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRSanyoAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRSanyoAcprivate
_irsendIRSanyoAcprivate
begin(void)IRSanyoAc
calcChecksum(const uint8_t state[], const uint16_t length=kSanyoAcStateLength)IRSanyoAcprivatestatic
calibrate(void)IRSanyoAcinline
checksum(void)IRSanyoAcprivate
convertFan(const stdAc::fanspeed_t speed)IRSanyoAcstatic
convertMode(const stdAc::opmode_t mode)IRSanyoAcstatic
convertSwingV(const stdAc::swingv_t position)IRSanyoAcstatic
getBeep(void) constIRSanyoAc
getFan(void) constIRSanyoAc
getMode(void) constIRSanyoAc
getOffTimer(void) constIRSanyoAc
getPower(void) constIRSanyoAc
getRaw(void)IRSanyoAc
getSensor(void) constIRSanyoAc
getSensorTemp(void) constIRSanyoAc
getSleep(void) constIRSanyoAc
getSwingV(void) constIRSanyoAc
getTemp(void) constIRSanyoAc
IRSanyoAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRSanyoAcexplicit
off(void)IRSanyoAc
on(void)IRSanyoAc
send(const uint16_t repeat=kNoRepeat)IRSanyoAc
setBeep(const bool on)IRSanyoAc
setFan(const uint8_t speed)IRSanyoAc
setMode(const uint8_t mode)IRSanyoAc
setOffTimer(const uint16_t mins)IRSanyoAc
setPower(const bool on)IRSanyoAc
setRaw(const uint8_t newState[])IRSanyoAc
setSensor(const bool location)IRSanyoAc
setSensorTemp(const uint8_t degrees)IRSanyoAc
setSleep(const bool on)IRSanyoAc
setSwingV(const uint8_t setting)IRSanyoAc
setTemp(const uint8_t degrees)IRSanyoAc
stateReset(void)IRSanyoAc
toCommon(void) constIRSanyoAc
toCommonFanSpeed(const uint8_t speed)IRSanyoAcstatic
toCommonMode(const uint8_t mode)IRSanyoAcstatic
toCommonSwingV(const uint8_t setting)IRSanyoAcstatic
toString(void) constIRSanyoAc
validChecksum(const uint8_t state[], const uint16_t length=kSanyoAcStateLength)IRSanyoAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc.html deleted file mode 100644 index 2535429b6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc.html +++ /dev/null @@ -1,1375 +0,0 @@ - - - - - - - -IRremoteESP8266: IRSanyoAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Sanyo A/C messages. - More...

- -

#include <ir_Sanyo.h>

-
-Collaboration diagram for IRSanyoAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRSanyoAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as IR messages. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t degrees)
 Set the desired temperature. More...
 
uint8_t getTemp (void) const
 Get the current desired temperature setting. More...
 
void setSensorTemp (const uint8_t degrees)
 Set the sensor temperature. More...
 
uint8_t getSensorTemp (void) const
 Get the current sensor temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep (Night Setback) setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep (Night Setback) setting of the A/C. More...
 
void setSensor (const bool location)
 Set the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured. More...
 
bool getSensor (void) const
 Get the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured. More...
 
void setBeep (const bool on)
 Set the Beep setting of the A/C. More...
 
bool getBeep (void) const
 Get the Beep setting of the A/C. More...
 
void setSwingV (const uint8_t setting)
 Set the vertical swing setting of the A/C. More...
 
uint8_t getSwingV (void) const
 Get the vertical swing setting of the A/C. More...
 
void setRaw (const uint8_t newState[])
 Set the internal state from a valid code for this protocol. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol with all integrity checks passing. More...
 
uint16_t getOffTimer (void) const
 Get the nr of minutes the Off Timer is set to. More...
 
void setOffTimer (const uint16_t mins)
 Set the nr of minutes for the Off Timer. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kSanyoAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static uint8_t convertSwingV (const stdAc::swingv_t position)
 Convert a stdAc::swingv_t enum into it's native setting. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
static stdAc::swingv_t toCommonSwingV (const uint8_t setting)
 Convert a native vertical swing postion to it's common equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate & set the checksum for the current internal state of the remote. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kSanyoAcStateLength)
 Calculate the checksum for a given state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
SanyoProtocol _
 
-

Detailed Description

-

Class for handling detailed Sanyo A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRSanyoAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRSanyoAc::IRSanyoAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRSanyoAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRSanyoAc::calcChecksum (const uint8_t state[],
const uint16_t length = kSanyoAcStateLength 
)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRSanyoAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRSanyoAc::checksum (void )
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSanyoAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSanyoAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwingV()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSanyoAc::convertSwingV (const stdAc::swingv_t position)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native setting.

-
Parameters
- - -
[in]positionThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getBeep()

- -
-
- - - - - - - - -
bool IRSanyoAc::getBeep (void ) const
-
- -

Get the Beep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRSanyoAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRSanyoAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRSanyoAc::getOffTimer (void ) const
-
- -

Get the nr of minutes the Off Timer is set to.

-
Returns
The timer time expressed as the number of minutes. A value of 0 means the Off Timer is off/disabled.
-
Note
The internal precission has a resolution of 1 hour.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRSanyoAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRSanyoAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol with all integrity checks passing.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSensor()

- -
-
- - - - - - - - -
bool IRSanyoAc::getSensor (void ) const
-
- -

Get the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured.

-
Returns
true is Unit/Wall, false is Remote/Room.
- -
-
- -

◆ getSensorTemp()

- -
-
- - - - - - - - -
uint8_t IRSanyoAc::getSensorTemp (void ) const
-
- -

Get the current sensor temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRSanyoAc::getSleep (void ) const
-
- -

Get the Sleep (Night Setback) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
uint8_t IRSanyoAc::getSwingV (void ) const
-
- -

Get the vertical swing setting of the A/C.

-
Returns
The current swing mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRSanyoAc::getTemp (void ) const
-
- -

Get the current desired temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRSanyoAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRSanyoAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRSanyoAc::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as IR messages.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setBeep()

- -
-
- - - - - - - - -
void IRSanyoAc::setBeep (const bool on)
-
- -

Set the Beep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRSanyoAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRSanyoAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
If we get an unexpected mode, default to AUTO.
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRSanyoAc::setOffTimer (const uint16_t mins)
-
- -

Set the nr of minutes for the Off Timer.

-
Parameters
- - -
[in]minsThe timer time expressed as nr. of minutes. A value of 0 means the Off Timer is off/disabled.
-
-
-
Note
The internal precission has a resolution of 1 hour.
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRSanyoAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRSanyoAc::setRaw (const uint8_t newState[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]newStateA valid code for this protocol.
-
-
- -
-
- -

◆ setSensor()

- -
-
- - - - - - - - -
void IRSanyoAc::setSensor (const bool location)
-
- -

Set the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured.

-
Parameters
- - -
[in]locationtrue is Unit/Wall, false is Remote/Room.
-
-
- -
-
- -

◆ setSensorTemp()

- -
-
- - - - - - - - -
void IRSanyoAc::setSensorTemp (const uint8_t degrees)
-
- -

Set the sensor temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRSanyoAc::setSleep (const bool on)
-
- -

Set the Sleep (Night Setback) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRSanyoAc::setSwingV (const uint8_t setting)
-
- -

Set the vertical swing setting of the A/C.

-
Parameters
- - -
[in]settingThe value of the desired setting.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRSanyoAc::setTemp (const uint8_t degrees)
-
- -

Set the desired temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRSanyoAc::stateReset (void )
-
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRSanyoAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRSanyoAc::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRSanyoAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwingV()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRSanyoAc::toCommonSwingV (const uint8_t setting)
-
-static
-
- -

Convert a native vertical swing postion to it's common equivalent.

-
Parameters
- - -
[in]settingA native position to convert.
-
-
-
Returns
The common vertical swing position.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRSanyoAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRSanyoAc::validChecksum (const uint8_t state[],
const uint16_t length = kSanyoAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
SanyoProtocol IRSanyoAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRSanyoAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.map deleted file mode 100644 index 0cd6d5d70..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.md5 deleted file mode 100644 index 9aa487400..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a9064796ca7898bebfdffdaa4553bbd5 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.png deleted file mode 100644 index fe6882cd8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSanyoAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc-members.html deleted file mode 100644 index acade3c91..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc-members.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRSharpAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRSharpAcprivate
_fanIRSharpAcprivate
_getEconoToggle(void) constIRSharpAcprivate
_irsendIRSharpAcprivate
_modeIRSharpAcprivate
_modelIRSharpAcprivate
_setEconoToggle(const bool on)IRSharpAcprivate
_tempIRSharpAcprivate
begin(void)IRSharpAc
calcChecksum(uint8_t state[], const uint16_t length=kSharpAcStateLength)IRSharpAcprivatestatic
calibrate(void)IRSharpAcinline
checksum(void)IRSharpAcprivate
clearPowerSpecial(void)IRSharpAcprivate
convertFan(const stdAc::fanspeed_t speed, const sharp_ac_remote_model_t model=sharp_ac_remote_model_t::A907)IRSharpAcstatic
convertMode(const stdAc::opmode_t mode)IRSharpAcstatic
getClean(void) constIRSharpAc
getEconoToggle(void) constIRSharpAc
getFan(void) constIRSharpAc
getIon(void) constIRSharpAc
getLightToggle(void) constIRSharpAc
getMode(void) constIRSharpAc
getModel(const bool raw=false) constIRSharpAc
getPower(void) constIRSharpAc
getPowerSpecial(void) constIRSharpAcprivate
getRaw(void)IRSharpAc
getSpecial(void) constIRSharpAc
getSwingToggle(void) constIRSharpAc
getTemp(void) constIRSharpAc
getTimerEnabled(void) constIRSharpAc
getTimerTime(void) constIRSharpAc
getTimerType(void) constIRSharpAc
getTurbo(void) constIRSharpAc
IRSharpAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRSharpAcexplicit
isPowerSpecial(void) constIRSharpAc
off(void)IRSharpAc
on(void)IRSharpAc
send(const uint16_t repeat=kSharpAcDefaultRepeat)IRSharpAc
setClean(const bool on)IRSharpAc
setEconoToggle(const bool on)IRSharpAc
setFan(const uint8_t fan, const bool save=true)IRSharpAc
setIon(const bool on)IRSharpAc
setLightToggle(const bool on)IRSharpAc
setMode(const uint8_t mode, const bool save=true)IRSharpAc
setModel(const sharp_ac_remote_model_t model)IRSharpAc
setPower(const bool on, const bool prev_on=true)IRSharpAc
setPowerSpecial(const uint8_t value)IRSharpAcinlineprivate
setRaw(const uint8_t new_code[], const uint16_t length=kSharpAcStateLength)IRSharpAc
setSpecial(const uint8_t mode)IRSharpAc
setSwingToggle(const bool on)IRSharpAc
setTemp(const uint8_t temp, const bool save=true)IRSharpAc
setTimer(bool enable, bool timer_type, uint16_t mins)IRSharpAc
setTurbo(const bool on)IRSharpAc
stateReset(void)IRSharpAcprivate
toCommon(void) constIRSharpAc
toCommonFanSpeed(const uint8_t speed) constIRSharpAc
toCommonMode(const uint8_t mode) constIRSharpAc
toString(void) constIRSharpAc
validChecksum(uint8_t state[], const uint16_t length=kSharpAcStateLength)IRSharpAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc.html deleted file mode 100644 index b9f9f330e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc.html +++ /dev/null @@ -1,1897 +0,0 @@ - - - - - - - -IRremoteESP8266: IRSharpAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Sharp A/C messages. - More...

- -

#include <ir_Sharp.h>

-
-Collaboration diagram for IRSharpAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRSharpAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kSharpAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setModel (const sharp_ac_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
sharp_ac_remote_model_t getModel (const bool raw=false) const
 Get/Detect the model of the A/C. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on, const bool prev_on=true)
 Change the power setting, including the previous power state. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
bool isPowerSpecial (void) const
 Is one of the special power states in use? More...
 
void setTemp (const uint8_t temp, const bool save=true)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan, const bool save=true)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode, const bool save=true)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSpecial (const uint8_t mode)
 Set the value of the Special (button/command?) setting. More...
 
uint8_t getSpecial (void) const
 Get the value of the Special (button/command?) setting. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo setting of the A/C. More...
 
bool getSwingToggle (void) const
 Get the (vertical) Swing Toggle setting of the A/C. More...
 
void setSwingToggle (const bool on)
 Set the (vertical) Swing Toggle setting of the A/C. More...
 
bool getIon (void) const
 Get the Ion (Filter) setting of the A/C. More...
 
void setIon (const bool on)
 Set the Ion (Filter) setting of the A/C. More...
 
bool getEconoToggle (void) const
 Get the Economical mode toggle setting of the A/C. More...
 
void setEconoToggle (const bool on)
 Set the Economical mode toggle setting of the A/C. More...
 
bool getLightToggle (void) const
 Get the Light toggle setting of the A/C. More...
 
void setLightToggle (const bool on)
 Set the Light mode toggle setting of the A/C. More...
 
uint16_t getTimerTime (void) const
 Get how long the timer is set for, in minutes. More...
 
bool getTimerEnabled (void) const
 Is the Timer enabled? More...
 
bool getTimerType (void) const
 Get the current timer type. More...
 
void setTimer (bool enable, bool timer_type, uint16_t mins)
 Set or cancel the timer function. More...
 
bool getClean (void) const
 Get the Clean setting of the A/C. More...
 
void setClean (const bool on)
 Set the Economical mode toggle setting of the A/C. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kSharpAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::opmode_t toCommonMode (const uint8_t mode) const
 Convert a native mode into its stdAc equivalent. More...
 
stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed) const
 Convert a native fan speed into its stdAc equivalent. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (uint8_t state[], const uint16_t length=kSharpAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed, const sharp_ac_remote_model_t model=sharp_ac_remote_model_t::A907)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Private Member Functions

void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
void setPowerSpecial (const uint8_t value)
 Set the value of the Power Special setting without any checks. More...
 
uint8_t getPowerSpecial (void) const
 Get the value of the Power Special setting. More...
 
void clearPowerSpecial (void)
 Clear the "special"/non-normal bits in the power section. e.g. for normal/common command modes. More...
 
bool _getEconoToggle (void) const
 Get the Economical mode toggle setting of the A/C. More...
 
void _setEconoToggle (const bool on)
 Set the Economical mode toggle setting of the A/C. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (uint8_t state[], const uint16_t length=kSharpAcStateLength)
 Calculate the checksum for a given state. More...
 
- - - - - - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
SharpProtocol _
 
uint8_t _temp
 Saved copy of the desired temp. More...
 
uint8_t _mode
 Saved copy of the desired mode. More...
 
uint8_t _fan
 Saved copy of the desired fan speed. More...
 
sharp_ac_remote_model_t _model
 Saved copy of the model. More...
 
-

Detailed Description

-

Class for handling detailed Sharp A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRSharpAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRSharpAc::IRSharpAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _getEconoToggle()

- -
-
- - - - - -
- - - - - - - - -
bool IRSharpAc::_getEconoToggle (void ) const
-
-private
-
- -

Get the Economical mode toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
Shares the same location as the Light setting on A705.
- -
-
- -

◆ _setEconoToggle()

- -
-
- - - - - -
- - - - - - - - -
void IRSharpAc::_setEconoToggle (const bool on)
-
-private
-
- -

Set the Economical mode toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Warning
Probably incompatible with setTurbo()
-
Note
Shares the same location as the Light setting on A705.
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRSharpAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRSharpAc::calcChecksum (uint8_t state[],
const uint16_t length = kSharpAcStateLength 
)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated 4-bit checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRSharpAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRSharpAc::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ clearPowerSpecial()

- -
-
- - - - - -
- - - - - - - - -
void IRSharpAc::clearPowerSpecial (void )
-
-private
-
- -

Clear the "special"/non-normal bits in the power section. e.g. for normal/common command modes.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRSharpAc::convertFan (const stdAc::fanspeed_t speed,
const sharp_ac_remote_model_t model = sharp_ac_remote_model_t::A907 
)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - - -
[in]speedThe enum to be converted.
[in]modelThe enum of the appropriate model.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSharpAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getClean()

- -
-
- - - - - - - - -
bool IRSharpAc::getClean (void ) const
-
- -

Get the Clean setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getEconoToggle()

- -
-
- - - - - - - - -
bool IRSharpAc::getEconoToggle (void ) const
-
- -

Get the Economical mode toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
Available on the A907 models.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRSharpAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getIon()

- -
-
- - - - - - - - -
bool IRSharpAc::getIon (void ) const
-
- -

Get the Ion (Filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLightToggle()

- -
-
- - - - - - - - -
bool IRSharpAc::getLightToggle (void ) const
-
- -

Get the Light toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
-
Note
Not available on the A907 model.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRSharpAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
sharp_ac_remote_model_t IRSharpAc::getModel (const bool raw = false) const
-
- -

Get/Detect the model of the A/C.

-
Parameters
- - -
[in]rawTry to determine the model from the raw code only.
-
-
-
Returns
The enum of the compatible model.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRSharpAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getPowerSpecial()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRSharpAc::getPowerSpecial (void ) const
-
-private
-
- -

Get the value of the Power Special setting.

-
Returns
The setting's value.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRSharpAc::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSpecial()

- -
-
- - - - - - - - -
uint8_t IRSharpAc::getSpecial (void ) const
-
- -

Get the value of the Special (button/command?) setting.

-
Returns
The setting's value.
- -
-
- -

◆ getSwingToggle()

- -
-
- - - - - - - - -
bool IRSharpAc::getSwingToggle (void ) const
-
- -

Get the (vertical) Swing Toggle setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRSharpAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTimerEnabled()

- -
-
- - - - - - - - -
bool IRSharpAc::getTimerEnabled (void ) const
-
- -

Is the Timer enabled?

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTimerTime()

- -
-
- - - - - - - - -
uint16_t IRSharpAc::getTimerTime (void ) const
-
- -

Get how long the timer is set for, in minutes.

-
Returns
The time in nr of minutes.
- -
-
- -

◆ getTimerType()

- -
-
- - - - - - - - -
bool IRSharpAc::getTimerType (void ) const
-
- -

Get the current timer type.

-
Returns
true, It's an "On" timer. false, It's an "Off" timer.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRSharpAc::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ isPowerSpecial()

- -
-
- - - - - - - - -
bool IRSharpAc::isPowerSpecial (void ) const
-
- -

Is one of the special power states in use?

-
Returns
true, it is. false, it isn't.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRSharpAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRSharpAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRSharpAc::send (const uint16_t repeat = kSharpAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setClean()

- -
-
- - - - - - - - -
void IRSharpAc::setClean (const bool on)
-
- -

Set the Economical mode toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
Officially A/C unit needs to be "Off" before clean mode can be entered
- -
-
- -

◆ setEconoToggle()

- -
-
- - - - - - - - -
void IRSharpAc::setEconoToggle (const bool on)
-
- -

Set the Economical mode toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Warning
Probably incompatible with setTurbo()
-
Note
Available on the A907 models.
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSharpAc::setFan (const uint8_t speed,
const bool save = true 
)
-
- -

Set the speed of the fan.

-
Parameters
- - - -
[in]speedThe desired setting.
[in]saveDo we save this setting as a user set one?
-
-
- -
-
- -

◆ setIon()

- -
-
- - - - - - - - -
void IRSharpAc::setIon (const bool on)
-
- -

Set the Ion (Filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLightToggle()

- -
-
- - - - - - - - -
void IRSharpAc::setLightToggle (const bool on)
-
- -

Set the Light mode toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Warning
Probably incompatible with setTurbo()
-
Note
Not available on the A907 model.
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSharpAc::setMode (const uint8_t mode,
const bool save = true 
)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - - -
[in]modeThe desired operating mode.
[in]saveDo we save this setting as a user set one?
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRSharpAc::setModel (const sharp_ac_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSharpAc::setPower (const bool on,
const bool prev_on = true 
)
-
- -

Change the power setting, including the previous power state.

-
Parameters
- - - -
[in]ontrue, the setting is on. false, the setting is off.
[in]prev_ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPowerSpecial()

- -
-
- - - - - -
- - - - - - - - -
void IRSharpAc::setPowerSpecial (const uint8_t value)
-
-inlineprivate
-
- -

Set the value of the Power Special setting without any checks.

-
Parameters
- - -
[in]valueThe value to set Power Special to.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSharpAc::setRaw (const uint8_t new_code[],
const uint16_t length = kSharpAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length/size of the new_code array.
-
-
- -
-
- -

◆ setSpecial()

- -
-
- - - - - - - - -
void IRSharpAc::setSpecial (const uint8_t mode)
-
- -

Set the value of the Special (button/command?) setting.

-
Parameters
- - -
[in]modeThe value to set Special to.
-
-
- -
-
- -

◆ setSwingToggle()

- -
-
- - - - - - - - -
void IRSharpAc::setSwingToggle (const bool on)
-
- -

Set the (vertical) Swing Toggle setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRSharpAc::setTemp (const uint8_t temp,
const bool save = true 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees celsius.
[in]saveDo we save this setting as a user set one?
-
-
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRSharpAc::setTimer (bool enable,
bool timer_type,
uint16_t mins 
)
-
- -

Set or cancel the timer function.

-
Parameters
- - - - -
[in]enableIs the timer to be enabled (true) or canceled(false)?
[in]timer_typeAn On (true) or an Off (false). Ignored if canceled.
[in]minsNr. of minutes the timer is to be set to.
-
-
-
Note
Rounds down to 30 min increments. (max: 720 mins (12h), 0 is Off)
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRSharpAc::setTurbo (const bool on)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
If you use this method, you will need to send it before making other changes to the settings, as they may overwrite some of the bits used by this setting.
- -
-
- -

◆ stateReset()

- -
-
- - - - - -
- - - - - - - - -
void IRSharpAc::stateReset (void )
-
-private
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRSharpAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - - - - -
stdAc::fanspeed_t IRSharpAc::toCommonFanSpeed (const uint8_t speed) const
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - - - - -
stdAc::opmode_t IRSharpAc::toCommonMode (const uint8_t mode) const
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRSharpAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRSharpAc::validChecksum (uint8_t state[],
const uint16_t length = kSharpAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
SharpProtocol IRSharpAc::_
-
-private
-
- -
-
- -

◆ _fan

- -
-
- - - - - -
- - - - -
uint8_t IRSharpAc::_fan
-
-private
-
- -

Saved copy of the desired fan speed.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRSharpAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _mode

- -
-
- - - - - -
- - - - -
uint8_t IRSharpAc::_mode
-
-private
-
- -

Saved copy of the desired mode.

- -
-
- -

◆ _model

- -
-
- - - - - -
- - - - -
sharp_ac_remote_model_t IRSharpAc::_model
-
-private
-
- -

Saved copy of the model.

- -
-
- -

◆ _temp

- -
-
- - - - - -
- - - - -
uint8_t IRSharpAc::_temp
-
-private
-
- -

Saved copy of the desired temp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.map deleted file mode 100644 index 9a1753861..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.md5 deleted file mode 100644 index ced8dbcb5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8249c101b5624a55ee679f9dbf489484 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.png deleted file mode 100644 index e68aa4144..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRSharpAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac-members.html deleted file mode 100644 index 93848db5b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac-members.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTcl112Ac Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTcl112Acprivate
_irsendIRTcl112Acprivate
begin(void)IRTcl112Ac
calcChecksum(uint8_t state[], const uint16_t length=kTcl112AcStateLength)IRTcl112Acstatic
calibrate(void)IRTcl112Acinline
checksum(const uint16_t length=kTcl112AcStateLength)IRTcl112Acprivate
convertFan(const stdAc::fanspeed_t speed)IRTcl112Acstatic
convertMode(const stdAc::opmode_t mode)IRTcl112Acstatic
getEcono(void) constIRTcl112Ac
getFan(void) constIRTcl112Ac
getHealth(void) constIRTcl112Ac
getLight(void) constIRTcl112Ac
getMode(void) constIRTcl112Ac
getPower(void) constIRTcl112Ac
getRaw(void)IRTcl112Ac
getSwingHorizontal(void) constIRTcl112Ac
getSwingVertical(void) constIRTcl112Ac
getTemp(void) constIRTcl112Ac
getTurbo(void) constIRTcl112Ac
IRTcl112Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTcl112Acexplicit
off(void)IRTcl112Ac
on(void)IRTcl112Ac
send(const uint16_t repeat=kTcl112AcDefaultRepeat)IRTcl112Ac
setEcono(const bool on)IRTcl112Ac
setFan(const uint8_t speed)IRTcl112Ac
setHealth(const bool on)IRTcl112Ac
setLight(const bool on)IRTcl112Ac
setMode(const uint8_t mode)IRTcl112Ac
setPower(const bool on)IRTcl112Ac
setRaw(const uint8_t new_code[], const uint16_t length=kTcl112AcStateLength)IRTcl112Ac
setSwingHorizontal(const bool on)IRTcl112Ac
setSwingVertical(const bool on)IRTcl112Ac
setTemp(const float celsius)IRTcl112Ac
setTurbo(const bool on)IRTcl112Ac
stateReset(void)IRTcl112Ac
toCommon(void) constIRTcl112Ac
toCommonFanSpeed(const uint8_t speed)IRTcl112Acstatic
toCommonMode(const uint8_t mode)IRTcl112Acstatic
toString(void) constIRTcl112Ac
validChecksum(uint8_t state[], const uint16_t length=kTcl112AcStateLength)IRTcl112Acstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac.html deleted file mode 100644 index 6b1f6c61f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac.html +++ /dev/null @@ -1,1312 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTcl112Ac Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed TCL A/C messages. - More...

- -

#include <ir_Tcl.h>

-
-Collaboration diagram for IRTcl112Ac:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTcl112Ac (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kTcl112AcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void stateReset (void)
 Reset the internal state of the emulation. (On, Cool, 24C) More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kTcl112AcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const float celsius)
 Set the temperature. More...
 
float getTemp (void) const
 Get the current temperature setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setEcono (const bool on)
 Set the economy setting of the A/C. More...
 
bool getEcono (void) const
 Get the economy setting of the A/C. More...
 
void setHealth (const bool on)
 Set the Health (Filter) setting of the A/C. More...
 
bool getHealth (void) const
 Get the Health (Filter) setting of the A/C. More...
 
void setLight (const bool on)
 Set the Light (LED/Display) setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (LED/Display) setting of the A/C. More...
 
void setSwingHorizontal (const bool on)
 Set the horizontal swing setting of the A/C. More...
 
bool getSwingHorizontal (void) const
 Get the horizontal swing setting of the A/C. More...
 
void setSwingVertical (const bool on)
 Set the vertical swing setting of the A/C. More...
 
bool getSwingVertical (void) const
 Get the vertical swing setting of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (uint8_t state[], const uint16_t length=kTcl112AcStateLength)
 Calculate the checksum for a given state. More...
 
static bool validChecksum (uint8_t state[], const uint16_t length=kTcl112AcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (const uint16_t length=kTcl112AcStateLength)
 Calculate & set the checksum for the current internal state of the remote. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
Tcl112Protocol _
 
-

Detailed Description

-

Class for handling detailed TCL A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTcl112Ac()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTcl112Ac::IRTcl112Ac (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTcl112Ac::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRTcl112Ac::calcChecksum (uint8_t state[],
const uint16_t length = kTcl112AcStateLength 
)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTcl112Ac::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRTcl112Ac::checksum (const uint16_t length = kTcl112AcStateLength)
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

-
Parameters
- - -
[in]lengthThe length/size of the internal array to checksum.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTcl112Ac::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTcl112Ac::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getEcono (void ) const
-
- -

Get the economy setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRTcl112Ac::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getHealth()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getHealth (void ) const
-
- -

Get the Health (Filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getLight (void ) const
-
- -

Get the Light (LED/Display) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTcl112Ac::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRTcl112Ac::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSwingHorizontal()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getSwingHorizontal (void ) const
-
- -

Get the horizontal swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingVertical()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getSwingVertical (void ) const
-
- -

Get the vertical swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
float IRTcl112Ac::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
-
Note
The temperature resolution is 0.5 of a degree.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRTcl112Ac::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTcl112Ac::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTcl112Ac::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTcl112Ac::send (const uint16_t repeat = kTcl112AcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRTcl112Ac::setEcono (const bool on)
-
- -

Set the economy setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRTcl112Ac::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
-
Note
Unknown speeds will default to Auto.
- -
-
- -

◆ setHealth()

- -
-
- - - - - - - - -
void IRTcl112Ac::setHealth (const bool on)
-
- -

Set the Health (Filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRTcl112Ac::setLight (const bool on)
-
- -

Set the Light (LED/Display) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTcl112Ac::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
Fan/Ventilation mode sets the fan speed to high. Unknown values default to Auto.
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTcl112Ac::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRTcl112Ac::setRaw (const uint8_t new_code[],
const uint16_t length = kTcl112AcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length/size of the new_code array.
-
-
- -
-
- -

◆ setSwingHorizontal()

- -
-
- - - - - - - - -
void IRTcl112Ac::setSwingHorizontal (const bool on)
-
- -

Set the horizontal swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingVertical()

- -
-
- - - - - - - - -
void IRTcl112Ac::setSwingVertical (const bool on)
-
- -

Set the vertical swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRTcl112Ac::setTemp (const float celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
-
Note
The temperature resolution is 0.5 of a degree.
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRTcl112Ac::setTurbo (const bool on)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTcl112Ac::stateReset (void )
-
- -

Reset the internal state of the emulation. (On, Cool, 24C)

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTcl112Ac::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTcl112Ac::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTcl112Ac::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTcl112Ac::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRTcl112Ac::validChecksum (uint8_t state[],
const uint16_t length = kTcl112AcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
Tcl112Protocol IRTcl112Ac::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRTcl112Ac::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.map deleted file mode 100644 index c1719c292..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 deleted file mode 100644 index 2768becda..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ca8f349e6fe256e69fb3096cc73dd334 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.png deleted file mode 100644 index 11d8ad2e7..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTcl112Ac__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc-members.html deleted file mode 100644 index 2d0483ac2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTechnibelAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTechnibelAcprivate
_irsendIRTechnibelAcprivate
_irsendIRTechnibelAcprivate
_saved_tempIRTechnibelAcprivate
_saved_temp_unitsIRTechnibelAcprivate
begin(void)IRTechnibelAc
calcChecksum(const uint64_t state)IRTechnibelAcstatic
calibrate(void)IRTechnibelAcinline
checksum(void)IRTechnibelAcprivate
convertFan(const stdAc::fanspeed_t speed)IRTechnibelAcstatic
convertMode(const stdAc::opmode_t mode)IRTechnibelAcstatic
convertSwing(const stdAc::swingv_t swing)IRTechnibelAcstatic
getFan(void) constIRTechnibelAc
getMode(void) constIRTechnibelAc
getPower(void) constIRTechnibelAc
getRaw(void)IRTechnibelAc
getSleep(void) constIRTechnibelAc
getSwing(void) constIRTechnibelAc
getTemp(void) constIRTechnibelAc
getTempUnit(void) constIRTechnibelAc
getTimer(void) constIRTechnibelAc
getTimerEnabled(void) constIRTechnibelAc
IRTechnibelAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTechnibelAcexplicit
off(void)IRTechnibelAc
on(void)IRTechnibelAc
send(const uint16_t repeat=kTechnibelAcDefaultRepeat)IRTechnibelAc
setFan(const uint8_t speed)IRTechnibelAc
setMode(const uint8_t mode)IRTechnibelAc
setPower(const bool on)IRTechnibelAc
setRaw(const uint64_t state)IRTechnibelAc
setSleep(const bool on)IRTechnibelAc
setSwing(const bool on)IRTechnibelAc
setTemp(const uint8_t temp, const bool fahrenheit=false)IRTechnibelAc
setTempUnit(const bool celsius)IRTechnibelAc
setTimer(const uint16_t nr_of_mins)IRTechnibelAc
setTimerEnabled(const bool on)IRTechnibelAc
stateReset(void)IRTechnibelAc
toCommon(void) constIRTechnibelAc
toCommonFanSpeed(const uint8_t speed)IRTechnibelAcstatic
toCommonMode(const uint8_t mode)IRTechnibelAcstatic
toCommonSwing(const bool swing)IRTechnibelAcstatic
toString(void) constIRTechnibelAc
validChecksum(const uint64_t state)IRTechnibelAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc.html deleted file mode 100644 index d46fc2e34..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc.html +++ /dev/null @@ -1,1374 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTechnibelAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Technibel A/C messages. - More...

- -

#include <ir_Technibel.h>

-
-Collaboration diagram for IRTechnibelAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTechnibelAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state of the emulation. More...
 
void send (const uint16_t repeat=kTechnibelAcDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setTempUnit (const bool celsius)
 Set the temperature unit setting. More...
 
bool getTempUnit (void) const
 Get the temperature unit setting. More...
 
void setTemp (const uint8_t temp, const bool fahrenheit=false)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const bool on)
 Set the (vertical) swing setting of the A/C. More...
 
bool getSwing (void) const
 Get the (vertical) swing setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setTimerEnabled (const bool on)
 Set the enable timer setting. More...
 
bool getTimerEnabled (void) const
 Is the timer function enabled? More...
 
void setTimer (const uint16_t nr_of_mins)
 Set the timer for when the A/C unit will switch off. More...
 
uint16_t getTimer (void) const
 Get the timer time for when the A/C unit will switch power state. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state/code for this protocol. More...
 
void setRaw (const uint64_t state)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Compute the checksum of the supplied state. More...
 
static bool validChecksum (const uint64_t state)
 Confirm the checksum of the supplied state is valid. More...
 
static bool convertSwing (const stdAc::swingv_t swing)
 Convert a stdAc::swingv_t enum into it's native swing. More...
 
static stdAc::swingv_t toCommonSwing (const bool swing)
 Convert a native swing into its stdAc equivalent. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Set the checksum of the internal state. More...
 
- - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 
IRsendTest _irsend
 
TechnibelProtocol _
 
uint8_t _saved_temp
 
uint8_t _saved_temp_units
 
-

Detailed Description

-

Class for handling detailed Technibel A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTechnibelAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTechnibelAc::IRTechnibelAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTechnibelAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTechnibelAc::calcChecksum (const uint64_t state)
-
-static
-
- -

Compute the checksum of the supplied state.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
-
Returns
The calculated checksum of the supplied state.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTechnibelAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRTechnibelAc::checksum (void )
-
-private
-
- -

Set the checksum of the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTechnibelAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTechnibelAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertSwing()

- -
-
- - - - - -
- - - - - - - - -
bool IRTechnibelAc::convertSwing (const stdAc::swingv_t swing)
-
-static
-
- -

Convert a stdAc::swingv_t enum into it's native swing.

-
Parameters
- - -
[in]swingThe enum to be converted.
-
-
-
Returns
true, the swing is on. false, the swing is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRTechnibelAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTechnibelAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTechnibelAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRTechnibelAc::getRaw (void )
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
A code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRTechnibelAc::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRTechnibelAc::getSwing (void ) const
-
- -

Get the (vertical) swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRTechnibelAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees.
- -
-
- -

◆ getTempUnit()

- -
-
- - - - - - - - -
bool IRTechnibelAc::getTempUnit (void ) const
-
- -

Get the temperature unit setting.

-
Returns
true, the unit is °F. false, the unit is °C.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint16_t IRTechnibelAc::getTimer (void ) const
-
- -

Get the timer time for when the A/C unit will switch power state.

-
Returns
The number of minutes left on the timer. 0 means off.
- -
-
- -

◆ getTimerEnabled()

- -
-
- - - - - - - - -
bool IRTechnibelAc::getTimerEnabled (void ) const
-
- -

Is the timer function enabled?

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTechnibelAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTechnibelAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTechnibelAc::send (const uint16_t repeat = kTechnibelAcDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRTechnibelAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTechnibelAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTechnibelAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRTechnibelAc::setRaw (const uint64_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRTechnibelAc::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRTechnibelAc::setSwing (const bool on)
-
- -

Set the (vertical) swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRTechnibelAc::setTemp (const uint8_t degrees,
const bool fahrenheit = false 
)
-
- -

Set the temperature.

-
Parameters
- - - -
[in]degreesThe temperature in degrees.
[in]fahrenheitThe temperature unit: true=°F, false(default)=°C.
-
-
- -
-
- -

◆ setTempUnit()

- -
-
- - - - - - - - -
void IRTechnibelAc::setTempUnit (const bool fahrenheit)
-
- -

Set the temperature unit setting.

-
Parameters
- - -
[in]fahrenheittrue, the unit is °F. false, the unit is °C.
-
-
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRTechnibelAc::setTimer (const uint16_t nr_of_mins)
-
- -

Set the timer for when the A/C unit will switch off.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes before power off. 0 will clear the timer. Max is 24 hrs (1440 mins).
-
-
-
Note
Time is stored internally in hours.
- -
-
- -

◆ setTimerEnabled()

- -
-
- - - - - - - - -
void IRTechnibelAc::setTimerEnabled (const bool on)
-
- -

Set the enable timer setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTechnibelAc::stateReset (void )
-
- -

Reset the internal state of the emulation.

-
Note
Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTechnibelAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTechnibelAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTechnibelAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonSwing()

- -
-
- - - - - -
- - - - - - - - -
stdAc::swingv_t IRTechnibelAc::toCommonSwing (const bool swing)
-
-static
-
- -

Convert a native swing into its stdAc equivalent.

-
Parameters
- - -
[in]swingtrue, the swing is on. false, the swing is off.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTechnibelAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRTechnibelAc::validChecksum (const uint64_t state)
-
-static
-
- -

Confirm the checksum of the supplied state is valid.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
-
Returns
true if the checksum is correct, otherwise false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
TechnibelProtocol IRTechnibelAc::_
-
-private
-
- -
-
- -

◆ _irsend [1/2]

- -
-
- - - - - -
- - - - -
IRsend IRTechnibelAc::_irsend
-
-private
-
- -
-
- -

◆ _irsend [2/2]

- -
-
- - - - - -
- - - - -
IRsendTest IRTechnibelAc::_irsend
-
-private
-
- -
-
- -

◆ _saved_temp

- -
-
- - - - - -
- - - - -
uint8_t IRTechnibelAc::_saved_temp
-
-private
-
- -
-
- -

◆ _saved_temp_units

- -
-
- - - - - -
- - - - -
uint8_t IRTechnibelAc::_saved_temp_units
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.map deleted file mode 100644 index 21224c671..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 deleted file mode 100644 index 5fab1ae60..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7b6536eb1ec53c4fdc6ddf225cc6f138 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.png deleted file mode 100644 index fe2a057bb..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTechnibelAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc-members.html deleted file mode 100644 index 330173726..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTecoAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTecoAcprivate
_irsendIRTecoAcprivate
begin(void)IRTecoAc
calibrate(void)IRTecoAcinline
convertFan(const stdAc::fanspeed_t speed)IRTecoAcstatic
convertMode(const stdAc::opmode_t mode)IRTecoAcstatic
getFan(void) constIRTecoAc
getHumid(void) constIRTecoAc
getLight(void) constIRTecoAc
getMode(void) constIRTecoAc
getPower(void) constIRTecoAc
getRaw(void) constIRTecoAc
getSave(void) constIRTecoAc
getSleep(void) constIRTecoAc
getSwing(void) constIRTecoAc
getTemp(void) constIRTecoAc
getTimer(void) constIRTecoAc
getTimerEnabled(void) constIRTecoAcinlineprivate
IRTecoAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTecoAcexplicit
off(void)IRTecoAc
on(void)IRTecoAc
send(const uint16_t repeat=kTecoDefaultRepeat)IRTecoAc
setFan(const uint8_t fan)IRTecoAc
setHumid(const bool on)IRTecoAc
setLight(const bool on)IRTecoAc
setMode(const uint8_t mode)IRTecoAc
setPower(const bool on)IRTecoAc
setRaw(const uint64_t new_code)IRTecoAc
setSave(const bool on)IRTecoAc
setSleep(const bool on)IRTecoAc
setSwing(const bool on)IRTecoAc
setTemp(const uint8_t temp)IRTecoAc
setTimer(const uint16_t mins)IRTecoAc
stateReset(void)IRTecoAc
toCommon(void) constIRTecoAc
toCommonFanSpeed(const uint8_t speed)IRTecoAcstatic
toCommonMode(const uint8_t mode)IRTecoAcstatic
toString(void) constIRTecoAc
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc.html deleted file mode 100644 index 4c93db809..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc.html +++ /dev/null @@ -1,1196 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTecoAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Teco A/C messages. - More...

- -

#include <ir_Teco.h>

-
-Collaboration diagram for IRTecoAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTecoAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state of the emulation. More...
 
void send (const uint16_t repeat=kTecoDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const bool on)
 Set the (vertical) swing setting of the A/C. More...
 
bool getSwing (void) const
 Get the (vertical) swing setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setLight (const bool on)
 Set the Light (LED/Display) setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (LED/Display) setting of the A/C. More...
 
void setHumid (const bool on)
 Set the Humid setting of the A/C. More...
 
bool getHumid (void) const
 Get the Humid setting of the A/C. More...
 
void setSave (const bool on)
 Set the Save setting of the A/C. More...
 
bool getSave (void) const
 Get the Save setting of the A/C. More...
 
uint16_t getTimer (void) const
 Get the timer time for when the A/C unit will switch power state. More...
 
void setTimer (const uint16_t mins)
 Set the timer for when the A/C unit will switch power state. More...
 
uint64_t getRaw (void) const
 Get a copy of the internal state/code for this protocol. More...
 
void setRaw (const uint64_t new_code)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

bool getTimerEnabled (void) const
 Is the timer function enabled? More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
TecoProtocol _
 
-

Detailed Description

-

Class for handling detailed Teco A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTecoAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTecoAc::IRTecoAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTecoAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTecoAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTecoAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTecoAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRTecoAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getHumid()

- -
-
- - - - - - - - -
bool IRTecoAc::getHumid (void ) const
-
- -

Get the Humid setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRTecoAc::getLight (void ) const
-
- -

Get the Light (LED/Display) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTecoAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTecoAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRTecoAc::getRaw (void ) const
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
A code for this protocol based on the current internal state.
- -
-
- -

◆ getSave()

- -
-
- - - - - - - - -
bool IRTecoAc::getSave (void ) const
-
- -

Get the Save setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRTecoAc::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRTecoAc::getSwing (void ) const
-
- -

Get the (vertical) swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRTecoAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint16_t IRTecoAc::getTimer (void ) const
-
- -

Get the timer time for when the A/C unit will switch power state.

-
Returns
The number of minutes left on the timer. 0 means off.
- -
-
- -

◆ getTimerEnabled()

- -
-
- - - - - -
- - - - - - - - -
bool IRTecoAc::getTimerEnabled (void ) const
-
-inlineprivate
-
- -

Is the timer function enabled?

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTecoAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTecoAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTecoAc::send (const uint16_t repeat = kTecoDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRTecoAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setHumid()

- -
-
- - - - - - - - -
void IRTecoAc::setHumid (const bool on)
-
- -

Set the Humid setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRTecoAc::setLight (const bool on)
-
- -

Set the Light (LED/Display) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTecoAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTecoAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRTecoAc::setRaw (const uint64_t new_code)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSave()

- -
-
- - - - - - - - -
void IRTecoAc::setSave (const bool on)
-
- -

Set the Save setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRTecoAc::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRTecoAc::setSwing (const bool on)
-
- -

Set the (vertical) swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRTecoAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRTecoAc::setTimer (const uint16_t nr_mins)
-
- -

Set the timer for when the A/C unit will switch power state.

-
Parameters
- - -
[in]nr_minsNumber of minutes before power state change. 0 will clear the timer. Max is 24 hrs.
-
-
-
Note
Time is stored internally in increments of 30 mins.
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTecoAc::stateReset (void )
-
- -

Reset the internal state of the emulation.

-
Note
Mode:auto, Power:Off, fan:auto, temp:16, swing:off, sleep:off
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTecoAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTecoAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTecoAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTecoAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
TecoProtocol IRTecoAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRTecoAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.map deleted file mode 100644 index 49a1b7eff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.md5 deleted file mode 100644 index f40aa434b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cdd835a60eee6ad8782220a6a7174f9f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.png deleted file mode 100644 index 515e4a11e..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTecoAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC-members.html deleted file mode 100644 index 16d57376d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRToshibaAC Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRToshibaACprivate
_backupState(void)IRToshibaACprivate
_irsendIRToshibaACprivate
_prev_modeIRToshibaACprivate
_restoreState(void)IRToshibaACprivate
_send_swingIRToshibaACprivate
_swing_modeIRToshibaACprivate
backupIRToshibaACprivate
begin(void)IRToshibaAC
calcChecksum(const uint8_t state[], const uint16_t length=kToshibaACStateLength)IRToshibaACprivatestatic
calibrate(void)IRToshibaACinline
checksum(const uint16_t length=kToshibaACStateLength)IRToshibaACprivate
convertFan(const stdAc::fanspeed_t speed)IRToshibaACstatic
convertMode(const stdAc::opmode_t mode)IRToshibaACstatic
getEcono(void) constIRToshibaAC
getFan(void) constIRToshibaAC
getInternalStateLength(const uint8_t state[], const uint16_t size)IRToshibaACstatic
getMode(const bool raw=false) constIRToshibaAC
getPower(void) constIRToshibaAC
getRaw(void)IRToshibaAC
getStateLength(void) constIRToshibaAC
getSwing(const bool raw=true) constIRToshibaAC
getTemp(void) constIRToshibaAC
getTurbo(void) constIRToshibaAC
IRToshibaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRToshibaACexplicit
off(void)IRToshibaAC
on(void)IRToshibaAC
send(const uint16_t repeat=kToshibaACMinRepeat)IRToshibaAC
setEcono(const bool on)IRToshibaAC
setFan(const uint8_t speed)IRToshibaAC
setMode(const uint8_t mode)IRToshibaAC
setPower(const bool on)IRToshibaAC
setRaw(const uint8_t newState[], const uint16_t length=kToshibaACStateLength)IRToshibaAC
setStateLength(const uint16_t size)IRToshibaACprivate
setSwing(const uint8_t setting)IRToshibaAC
setTemp(const uint8_t degrees)IRToshibaAC
setTurbo(const bool on)IRToshibaAC
stateReset(void)IRToshibaAC
toCommon(const stdAc::state_t *prev=NULL) constIRToshibaAC
toCommonFanSpeed(const uint8_t speed)IRToshibaACstatic
toCommonMode(const uint8_t mode)IRToshibaACstatic
toString(void) constIRToshibaAC
validChecksum(const uint8_t state[], const uint16_t length=kToshibaACStateLength)IRToshibaACstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC.html deleted file mode 100644 index 56903f451..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC.html +++ /dev/null @@ -1,1448 +0,0 @@ - - - - - - - -IRremoteESP8266: IRToshibaAC Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Toshiba A/C messages. - More...

- -

#include <ir_Toshiba.h>

-
-Collaboration diagram for IRToshibaAC:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRToshibaAC (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kToshibaACMinRepeat)
 Send the current internal state as IR messages. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t degrees)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setTurbo (const bool on)
 Set the Turbo (Powerful) setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo (Powerful) setting of the A/C. More...
 
void setEcono (const bool on)
 Set the Economy mode setting of the A/C. More...
 
bool getEcono (void) const
 Get the Economy mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (const bool raw=false) const
 Get the operating mode setting of the A/C. More...
 
void setRaw (const uint8_t newState[], const uint16_t length=kToshibaACStateLength)
 Set the internal state from a valid code for this protocol. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol with all integrity checks passing. More...
 
uint16_t getStateLength (void) const
 Get the length of the current internal state per the protocol structure. More...
 
uint8_t getSwing (const bool raw=true) const
 Get the swing setting of the A/C. More...
 
void setSwing (const uint8_t setting)
 Set the swing setting of the A/C. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static uint16_t getInternalStateLength (const uint8_t state[], const uint16_t size)
 Get the length of the supplied Toshiba state per it's protocol structure. More...
 
static bool validChecksum (const uint8_t state[], const uint16_t length=kToshibaACStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - - - - - - - -

-Private Member Functions

void checksum (const uint16_t length=kToshibaACStateLength)
 Calculate & set the checksum for the current internal state of the remote. More...
 
void setStateLength (const uint16_t size)
 Set the internal length of the current internal state per the protocol. More...
 
void _backupState (void)
 Make a copy of the internal code-form A/C state. More...
 
void _restoreState (void)
 Recover the internal code-form A/C state from the backup. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kToshibaACStateLength)
 Calculate the checksum for a given state. More...
 
- - - - - - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
ToshibaProtocol _
 
uint8_t backup [kToshibaACStateLengthLong]
 A backup copy of the state. More...
 
uint8_t _prev_mode
 Store of the previously set mode. More...
 
bool _send_swing
 Flag indicating if we need to send a swing message. More...
 
uint8_t _swing_mode
 The saved swing state/mode/command. More...
 
-

Detailed Description

-

Class for handling detailed Toshiba A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRToshibaAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRToshibaAC::IRToshibaAC (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _backupState()

- -
-
- - - - - -
- - - - - - - - -
void IRToshibaAC::_backupState (void )
-
-private
-
- -

Make a copy of the internal code-form A/C state.

- -
-
- -

◆ _restoreState()

- -
-
- - - - - -
- - - - - - - - -
void IRToshibaAC::_restoreState (void )
-
-private
-
- -

Recover the internal code-form A/C state from the backup.

- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRToshibaAC::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRToshibaAC::calcChecksum (const uint8_t state[],
const uint16_t length = kToshibaACStateLength 
)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRToshibaAC::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRToshibaAC::checksum (const uint16_t length = kToshibaACStateLength)
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

-
Parameters
- - -
[in]lengthThe length/size of the internal array to checksum.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRToshibaAC::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRToshibaAC::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRToshibaAC::getEcono (void ) const
-
- -

Get the Economy mode setting of the A/C.

-
Returns
true, if the current setting is on. Otherwise, false.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRToshibaAC::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getInternalStateLength()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint16_t IRToshibaAC::getInternalStateLength (const uint8_t state[],
const uint16_t size 
)
-
-static
-
- -

Get the length of the supplied Toshiba state per it's protocol structure.

-
Parameters
- - - -
[in]stateThe array to get the built-in length from.
[in]sizeThe physical size of the state array.
-
-
-
Returns
Nr. of bytes in use for the provided state message.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRToshibaAC::getMode (const bool raw = false) const
-
- -

Get the operating mode setting of the A/C.

-
Parameters
- - -
[in]rawGet the value without any intelligent processing.
-
-
-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRToshibaAC::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRToshibaAC::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol with all integrity checks passing.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getStateLength()

- -
-
- - - - - - - - -
uint16_t IRToshibaAC::getStateLength (void ) const
-
- -

Get the length of the current internal state per the protocol structure.

-
Returns
Nr. of bytes in use for the current internal state message.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
uint8_t IRToshibaAC::getSwing (const bool raw = true) const
-
- -

Get the swing setting of the A/C.

-
Parameters
- - -
[in]rawCalculate the answer from just the state data.
-
-
-
Returns
The current swing mode setting.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRToshibaAC::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRToshibaAC::getTurbo (void ) const
-
- -

Get the Turbo (Powerful) setting of the A/C.

-
Returns
true, if the current setting is on. Otherwise, false.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRToshibaAC::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRToshibaAC::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRToshibaAC::send (const uint16_t repeat = kToshibaACMinRepeat)
-
- -

Send the current internal state as IR messages.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRToshibaAC::setEcono (const bool on)
-
- -

Set the Economy mode setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off. Note: Economy mode is mutually exclusive with Turbo mode.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRToshibaAC::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting (0 is Auto, 1-5 is the speed, 5 is Max)
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRToshibaAC::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
If we get an unexpected mode, default to AUTO.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1205#issuecomment-654446771
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRToshibaAC::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRToshibaAC::setRaw (const uint8_t newState[],
const uint16_t length = kToshibaACStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]newStateA valid code for this protocol.
[in]lengthThe length/size of the array.
-
-
- -
-
- -

◆ setStateLength()

- -
-
- - - - - -
- - - - - - - - -
void IRToshibaAC::setStateLength (const uint16_t size)
-
-private
-
- -

Set the internal length of the current internal state per the protocol.

-
Parameters
- - -
[in]sizeNr. of bytes in use for the current internal state message.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRToshibaAC::setSwing (const uint8_t setting)
-
- -

Set the swing setting of the A/C.

-
Parameters
- - -
[in]settingThe value of the desired setting.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRToshibaAC::setTemp (const uint8_t degrees)
-
- -

Set the temperature.

-
Parameters
- - -
[in]degreesThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRToshibaAC::setTurbo (const bool on)
-
- -

Set the Turbo (Powerful) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off. Note: Turbo mode is mutually exclusive with Economy mode.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRToshibaAC::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

-
See also
https://github.com/r45635/HVAC-IR-Control/blob/master/HVAC_ESP8266/HVAC_ESP8266T.ino#L103
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRToshibaAC::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRToshibaAC::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRToshibaAC::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRToshibaAC::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRToshibaAC::validChecksum (const uint8_t state[],
const uint16_t length = kToshibaACStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
ToshibaProtocol IRToshibaAC::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRToshibaAC::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _prev_mode

- -
-
- - - - - -
- - - - -
uint8_t IRToshibaAC::_prev_mode
-
-private
-
- -

Store of the previously set mode.

- -
-
- -

◆ _send_swing

- -
-
- - - - - -
- - - - -
bool IRToshibaAC::_send_swing
-
-private
-
- -

Flag indicating if we need to send a swing message.

- -
-
- -

◆ _swing_mode

- -
-
- - - - - -
- - - - -
uint8_t IRToshibaAC::_swing_mode
-
-private
-
- -

The saved swing state/mode/command.

- -
-
- -

◆ backup

- -
-
- - - - - -
- - - - -
uint8_t IRToshibaAC::backup[kToshibaACStateLengthLong]
-
-private
-
- -

A backup copy of the state.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.map deleted file mode 100644 index 077266dca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 deleted file mode 100644 index 05413dbb6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -53d4d7402f92ac3b9f97231803ef277c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.png deleted file mode 100644 index 229b671d8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRToshibaAC__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc-members.html deleted file mode 100644 index e06ea7568..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTranscoldAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTranscoldAcprivate
_irsendIRTranscoldAcprivate
begin(void)IRTranscoldAc
calibrate(void)IRTranscoldAcinline
convertFan(const stdAc::fanspeed_t speed)IRTranscoldAcstatic
convertMode(const stdAc::opmode_t mode)IRTranscoldAcstatic
getFan(void) constIRTranscoldAc
getMode(void) constIRTranscoldAc
getPower(void) constIRTranscoldAc
getRaw(void) constIRTranscoldAc
getSwing(void) constIRTranscoldAc
getTemp(void) constIRTranscoldAc
handleSpecialState(const uint32_t data)IRTranscoldAcprivate
IRTranscoldAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTranscoldAcexplicit
isSpecialState(void) constIRTranscoldAcprivate
off(void)IRTranscoldAc
on(void)IRTranscoldAc
send(const uint16_t repeat=kTranscoldDefaultRepeat)IRTranscoldAc
setFan(const uint8_t speed, const bool modecheck=true)IRTranscoldAc
setMode(const uint8_t mode)IRTranscoldAc
setPower(const bool state)IRTranscoldAc
setRaw(const uint32_t new_code)IRTranscoldAc
setSwing(void)IRTranscoldAc
setTemp(const uint8_t temp)IRTranscoldAc
special_stateIRTranscoldAcprivate
stateReset(void)IRTranscoldAc
swingFlagIRTranscoldAcprivate
swingHFlagIRTranscoldAcprivate
swingVFlagIRTranscoldAcprivate
toCommon(const stdAc::state_t *prev=NULL) constIRTranscoldAc
toCommonFanSpeed(const uint8_t speed)IRTranscoldAcstatic
toCommonMode(const uint8_t mode)IRTranscoldAcstatic
toString(void) constIRTranscoldAc
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc.html deleted file mode 100644 index 79571831a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc.html +++ /dev/null @@ -1,1078 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTranscoldAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Transcold A/C messages. - More...

- -

#include <ir_Transcold.h>

-
-Collaboration diagram for IRTranscoldAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTranscoldAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the internal state to a fixed known good state. More...
 
void send (const uint16_t repeat=kTranscoldDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setPower (const bool state)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed, const bool modecheck=true)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (void)
 Toggle the Swing mode of the A/C. More...
 
bool getSwing (void) const
 Get the Swing setting of the A/C. More...
 
uint32_t getRaw (void) const
 Get a copy of the internal state as a valid code for this protocol. More...
 
void setRaw (const uint32_t new_code)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the A/C state to it's common stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the internal state into a human readable string. More...
 
- - - - - - - - - - - - - -

-Static Public Member Functions

static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a standard A/C mode into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode to it's common stdAc::opmode_t equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - -

-Private Member Functions

bool isSpecialState (void) const
 Is the current state is a special state? More...
 
bool handleSpecialState (const uint32_t data)
 Adjust any internal settings based on the type of special state we are supplied. Does nothing if it isn't a special state. More...
 
- - - - - - - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
bool swingFlag
 
bool swingHFlag
 
bool swingVFlag
 
TranscoldProtocol _
 
uint32_t special_state
 special mode. More...
 
-

Detailed Description

-

Class for handling detailed Transcold A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTranscoldAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTranscoldAc::IRTranscoldAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTranscoldAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTranscoldAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTranscoldAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTranscoldAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a standard A/C mode into its native mode.

-
Parameters
- - -
[in]modeA stdAc::opmode_t to be converted to it's native equivalent.
-
-
-
Returns
The corresponding native mode.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRTranscoldAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTranscoldAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTranscoldAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint32_t IRTranscoldAc::getRaw (void ) const
-
- -

Get a copy of the internal state as a valid code for this protocol.

-
Returns
A valid code for this protocol based on the current internal state.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRTranscoldAc::getSwing (void ) const
-
- -

Get the Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRTranscoldAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ handleSpecialState()

- -
-
- - - - - -
- - - - - - - - -
bool IRTranscoldAc::handleSpecialState (const uint32_t data)
-
-private
-
- -

Adjust any internal settings based on the type of special state we are supplied. Does nothing if it isn't a special state.

-
Parameters
- - -
[in]dataThe state we need to act upon.
-
-
-
Note
Special state means commands that are not affecting Temperature/Mode/Fan
-
Returns
true, if it is a special state. false if it isn't.
- -
-
- -

◆ isSpecialState()

- -
-
- - - - - -
- - - - - - - - -
bool IRTranscoldAc::isSpecialState (void ) const
-
-private
-
- -

Is the current state is a special state?

-
Returns
true, if it is. false if it isn't.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTranscoldAc::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTranscoldAc::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTranscoldAc::send (const uint16_t repeat = kTranscoldDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRTranscoldAc::setFan (const uint8_t speed,
const bool modecheck = true 
)
-
- -

Set the speed of the fan.

-
Parameters
- - - -
[in]speedThe desired setting.
[in]modecheckDo we enforce any mode limitations before setting?
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTranscoldAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTranscoldAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRTranscoldAc::setRaw (const uint32_t new_code)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRTranscoldAc::setSwing (void )
-
- -

Toggle the Swing mode of the A/C.

- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRTranscoldAc::setTemp (const uint8_t desired)
-
- -

Set the temperature.

-
Parameters
- - -
[in]desiredThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTranscoldAc::stateReset (void )
-
- -

Reset the internal state to a fixed known good state.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTranscoldAc::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the A/C state to it's common stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if required.
-
-
-
Returns
A stdAc::state_t state.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTranscoldAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTranscoldAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode to it's common stdAc::opmode_t equivalent.

-
Parameters
- - -
[in]modeA native operation mode to be converted.
-
-
-
Returns
The corresponding common stdAc::opmode_t mode.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTranscoldAc::toString (void ) const
-
- -

Convert the internal state into a human readable string.

-
Returns
The current internal state expressed as a human readable String.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
TranscoldProtocol IRTranscoldAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRTranscoldAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ special_state

- -
-
- - - - - -
- - - - -
uint32_t IRTranscoldAc::special_state
-
-private
-
- -

special mode.

- -
-
- -

◆ swingFlag

- -
-
- - - - - -
- - - - -
bool IRTranscoldAc::swingFlag
-
-private
-
- -
-
- -

◆ swingHFlag

- -
-
- - - - - -
- - - - -
bool IRTranscoldAc::swingHFlag
-
-private
-
- -
-
- -

◆ swingVFlag

- -
-
- - - - - -
- - - - -
bool IRTranscoldAc::swingVFlag
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.map deleted file mode 100644 index 4dfcacf3d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 deleted file mode 100644 index e7cab0144..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e64f9bf7200b5999190bcf214ff056c7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.png deleted file mode 100644 index e248865ff..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTranscoldAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP-members.html deleted file mode 100644 index 2cb06fefc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTrotecESP Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTrotecESPprivate
_irsendIRTrotecESPprivate
begin(void)IRTrotecESP
calcChecksum(const uint8_t state[], const uint16_t length=kTrotecStateLength)IRTrotecESPprivatestatic
calibrate(void)IRTrotecESPinline
checksum(void)IRTrotecESPprivate
convertFan(const stdAc::fanspeed_t speed)IRTrotecESPstatic
convertMode(const stdAc::opmode_t mode)IRTrotecESPstatic
getFan(void) constIRTrotecESPinline
getMode(void) constIRTrotecESP
getPower(void) constIRTrotecESP
getRaw(void)IRTrotecESP
getSleep(void) constIRTrotecESP
getSpeed(void) constIRTrotecESP
getTemp(void) constIRTrotecESP
getTimer(void) constIRTrotecESP
IRTrotecESP(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTrotecESPexplicit
off(void)IRTrotecESP
on(void)IRTrotecESP
send(const uint16_t repeat=kTrotecDefaultRepeat)IRTrotecESP
setFan(const uint8_t fan)IRTrotecESPinline
setMode(const uint8_t mode)IRTrotecESP
setPower(const bool state)IRTrotecESP
setRaw(const uint8_t state[])IRTrotecESP
setSleep(const bool on)IRTrotecESP
setSpeed(const uint8_t fan)IRTrotecESP
setTemp(const uint8_t celsius)IRTrotecESP
setTimer(const uint8_t timer)IRTrotecESP
stateReset(void)IRTrotecESP
toCommon(void) constIRTrotecESP
toCommonFanSpeed(const uint8_t speed)IRTrotecESPstatic
toCommonMode(const uint8_t mode)IRTrotecESPstatic
toString(void) constIRTrotecESP
validChecksum(const uint8_t state[], const uint16_t length=kTrotecStateLength)IRTrotecESPstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP.html deleted file mode 100644 index aef4de12e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP.html +++ /dev/null @@ -1,1139 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTrotecESP Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Trotec A/C messages. - More...

- -

#include <ir_Trotec.h>

-
-Collaboration diagram for IRTrotecESP:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTrotecESP (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kTrotecDefaultRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool state)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t celsius)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setSpeed (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getSpeed (void) const
 Get the current fan speed setting. More...
 
void setFan (const uint8_t fan)
 
uint8_t getFan (void) const
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
uint8_t getTimer (void) const
 Get the timer time in nr. of Hours. More...
 
void setTimer (const uint8_t timer)
 Set the timer time in nr. of Hours. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t state[])
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kTrotecStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate & set the checksum for the current internal state of the remote. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kTrotecStateLength)
 Calculate the checksum for a given state. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
TrotecProtocol _
 
-

Detailed Description

-

Class for handling detailed Trotec A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTrotecESP()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTrotecESP::IRTrotecESP (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTrotecESP::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRTrotecESP::calcChecksum (const uint8_t state[],
const uint16_t length = kTrotecStateLength 
)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - - -
[in]stateThe array to calc the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTrotecESP::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRTrotecESP::checksum (void )
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrotecESP::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrotecESP::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrotecESP::getFan (void ) const
-
-inline
-
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTrotecESP::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTrotecESP::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRTrotecESP::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRTrotecESP::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSpeed()

- -
-
- - - - - - - - -
uint8_t IRTrotecESP::getSpeed (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRTrotecESP::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint8_t IRTrotecESP::getTimer (void ) const
-
- -

Get the timer time in nr. of Hours.

-
Returns
Nr. of Hours.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTrotecESP::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTrotecESP::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTrotecESP::send (const uint16_t repeat = kTrotecDefaultRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - -
- - - - - - - - -
void IRTrotecESP::setFan (const uint8_t fan)
-
-inline
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTrotecESP::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTrotecESP::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRTrotecESP::setRaw (const uint8_t state[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRTrotecESP::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSpeed()

- -
-
- - - - - - - - -
void IRTrotecESP::setSpeed (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRTrotecESP::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRTrotecESP::setTimer (const uint8_t timer)
-
- -

Set the timer time in nr. of Hours.

-
Parameters
- - -
[in]timerNr. of Hours. Max is kTrotecMaxTimer
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTrotecESP::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTrotecESP::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTrotecESP::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTrotecESP::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTrotecESP::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRTrotecESP::validChecksum (const uint8_t state[],
const uint16_t length = kTrotecStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
TrotecProtocol IRTrotecESP::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRTrotecESP::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.map deleted file mode 100644 index bc43c1126..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.md5 deleted file mode 100644 index 31fe8e33d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ed10cd332157d68f880b853451860649 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.png deleted file mode 100644 index 45b47a072..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrotecESP__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc-members.html deleted file mode 100644 index 60431366d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTrumaAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRTrumaAcprivate
_irsendIRTrumaAcprivate
_lastfanIRTrumaAcprivate
_lastmodeIRTrumaAcprivate
begin(void)IRTrumaAc
calcChecksum(const uint64_t state)IRTrumaAcprivatestatic
calibrate(void)IRTrumaAcinline
checksum(void)IRTrumaAcprivate
convertFan(const stdAc::fanspeed_t speed)IRTrumaAcstatic
convertMode(const stdAc::opmode_t mode)IRTrumaAcstatic
getFan(void) constIRTrumaAc
getMode(void) constIRTrumaAc
getPower(void) constIRTrumaAc
getQuiet(void) constIRTrumaAc
getRaw(void)IRTrumaAc
getTemp(void) constIRTrumaAc
IRTrumaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTrumaAcexplicit
off(void)IRTrumaAc
on(void)IRTrumaAc
send(const uint16_t repeat=kNoRepeat)IRTrumaAc
setFan(const uint8_t speed)IRTrumaAc
setMode(const uint8_t mode)IRTrumaAc
setPower(const bool on)IRTrumaAc
setQuiet(const bool on)IRTrumaAc
setRaw(const uint64_t state)IRTrumaAc
setTemp(const uint8_t celsius)IRTrumaAc
stateReset(void)IRTrumaAc
toCommon(void) constIRTrumaAc
toCommonFanSpeed(const uint8_t speed)IRTrumaAcstatic
toCommonMode(const uint8_t mode)IRTrumaAcstatic
toString(void) constIRTrumaAc
validChecksum(const uint64_t state)IRTrumaAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc.html deleted file mode 100644 index 0bbaf1c1e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc.html +++ /dev/null @@ -1,1057 +0,0 @@ - - - - - - - -IRremoteESP8266: IRTrumaAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Truma A/C messages. - More...

- -

#include <ir_Truma.h>

-
-Collaboration diagram for IRTrumaAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRTrumaAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setTemp (const uint8_t celsius)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
void setQuiet (const bool on)
 Change the Quiet setting. More...
 
bool getQuiet (void) const
 Get the value of the current quiet setting. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state/code for this protocol. More...
 
void setRaw (const uint64_t state)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate & set the checksum for the current internal state of the remote. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
- - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
TrumaProtocol _
 
uint8_t _lastfan
 
uint8_t _lastmode
 
-

Detailed Description

-

Class for handling detailed Truma A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRTrumaAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRTrumaAc::IRTrumaAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRTrumaAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrumaAc::calcChecksum (const uint64_t state)
-
-staticprivate
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe value to calc the checksum of.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRTrumaAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRTrumaAc::checksum (void )
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrumaAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRTrumaAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRTrumaAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRTrumaAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRTrumaAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getQuiet()

- -
-
- - - - - - - - -
bool IRTrumaAc::getQuiet (void ) const
-
- -

Get the value of the current quiet setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRTrumaAc::getRaw (void )
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
The code for this protocol based on the current internal state.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRTrumaAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRTrumaAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRTrumaAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRTrumaAc::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRTrumaAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRTrumaAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRTrumaAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setQuiet()

- -
-
- - - - - - - - -
void IRTrumaAc::setQuiet (const bool on)
-
- -

Change the Quiet setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
Quiet is only available in Cool mode.
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRTrumaAc::setRaw (const uint64_t state)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]stateA valid code for this protocol.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRTrumaAc::setTemp (const uint8_t celsius)
-
- -

Set the temperature.

-
Parameters
- - -
[in]celsiusThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRTrumaAc::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRTrumaAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRTrumaAc::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRTrumaAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRTrumaAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRTrumaAc::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe value to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
TrumaProtocol IRTrumaAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRTrumaAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _lastfan

- -
-
- - - - - -
- - - - -
uint8_t IRTrumaAc::_lastfan
-
-private
-
- -
-
- -

◆ _lastmode

- -
-
- - - - - -
- - - - -
uint8_t IRTrumaAc::_lastmode
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.map deleted file mode 100644 index 1cbd0aac0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.md5 deleted file mode 100644 index 6e1959eaa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3f87faf5dbce96ca1ef6345373f8752e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.png deleted file mode 100644 index 1e8cecb56..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRTrumaAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc-members.html deleted file mode 100644 index 35cde0844..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRVestelAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRVestelAcprivate
_irsendIRVestelAcprivate
begin(void)IRVestelAc
calcChecksum(const uint64_t state)IRVestelAcstatic
calibrate(void)IRVestelAcinline
checksum(void)IRVestelAcprivate
convertFan(const stdAc::fanspeed_t speed)IRVestelAcstatic
convertMode(const stdAc::opmode_t mode)IRVestelAcstatic
getFan(void) constIRVestelAc
getIon(void) constIRVestelAc
getMode(void) constIRVestelAc
getOffTimer(void) constIRVestelAc
getOnTimer(void) constIRVestelAc
getPower(void) constIRVestelAc
getRaw(void)IRVestelAc
getSleep(void) constIRVestelAc
getSwing(void) constIRVestelAc
getTemp(void) constIRVestelAc
getTime(void) constIRVestelAc
getTimer(void) constIRVestelAc
getTurbo(void) constIRVestelAc
IRVestelAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRVestelAcexplicit
isOffTimerActive(void) constIRVestelAc
isOnTimerActive(void) constIRVestelAc
isTimeCommand(void) constIRVestelAc
isTimerActive(void) constIRVestelAc
off(void)IRVestelAc
on(void)IRVestelAc
send(const uint16_t repeat=kNoRepeat)IRVestelAc
setAuto(const int8_t autoLevel)IRVestelAc
setFan(const uint8_t fan)IRVestelAc
setIon(const bool on)IRVestelAc
setMode(const uint8_t mode)IRVestelAc
setOffTimer(const uint16_t minutes)IRVestelAc
setOffTimerActive(const bool on)IRVestelAc
setOnTimer(const uint16_t minutes)IRVestelAc
setOnTimerActive(const bool on)IRVestelAc
setPower(const bool on)IRVestelAc
setRaw(const uint8_t *newState)IRVestelAc
setRaw(const uint64_t newState)IRVestelAc
setSleep(const bool on)IRVestelAc
setSwing(const bool on)IRVestelAc
setTemp(const uint8_t temp)IRVestelAc
setTime(const uint16_t minutes)IRVestelAc
setTimer(const uint16_t minutes)IRVestelAc
setTimerActive(const bool on)IRVestelAc
setTurbo(const bool on)IRVestelAc
stateReset(void)IRVestelAc
toCommon(void) constIRVestelAc
toCommonFanSpeed(const uint8_t speed)IRVestelAcstatic
toCommonMode(const uint8_t mode)IRVestelAcstatic
toString(void) constIRVestelAc
validChecksum(const uint64_t state)IRVestelAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc.html deleted file mode 100644 index 317c0e8a2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc.html +++ /dev/null @@ -1,1619 +0,0 @@ - - - - - - - -IRremoteESP8266: IRVestelAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Vestel A/C messages. - More...

- -

#include <ir_Vestel.h>

-
-Collaboration diagram for IRVestelAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRVestelAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void on (void)
 Set the requested power state of the A/C to on. More...
 
void off (void)
 Set the requested power state of the A/C to off. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void setAuto (const int8_t autoLevel)
 Set Auto mode/level of the A/C. More...
 
void setTimer (const uint16_t minutes)
 Set Timer option of A/C. More...
 
uint16_t getTimer (void) const
 Get the Timer time of A/C. More...
 
void setTime (const uint16_t minutes)
 Set the A/C's internal clock. More...
 
uint16_t getTime (void) const
 Get the A/C's internal clock's time. More...
 
void setOnTimer (const uint16_t minutes)
 Set the On timer time on the A/C. More...
 
uint16_t getOnTimer (void) const
 Get the A/C's On Timer time. More...
 
void setOffTimer (const uint16_t minutes)
 Set the Off timer time on the A/C. More...
 
uint16_t getOffTimer (void) const
 Get the A/C's Off Timer time. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t fan)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setRaw (const uint8_t *newState)
 Set the internal state from a valid code for this protocol. More...
 
void setRaw (const uint64_t newState)
 Set the internal state from a valid code for this protocol. More...
 
uint64_t getRaw (void)
 Get a copy of the internal state/code for this protocol. More...
 
void setSwing (const bool on)
 Set the Swing Roaming setting of the A/C. More...
 
bool getSwing (void) const
 Get the Swing Roaming setting of the A/C. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setTurbo (const bool on)
 Set the Turbo setting of the A/C. More...
 
bool getTurbo (void) const
 Get the Turbo setting of the A/C. More...
 
void setIon (const bool on)
 Set the Ion (Filter) setting of the A/C. More...
 
bool getIon (void) const
 Get the Ion (Filter) setting of the A/C. More...
 
bool isTimeCommand (void) const
 Is the current state a time command? More...
 
bool isOnTimerActive (void) const
 Get if the On Timer is active on the A/C. More...
 
void setOnTimerActive (const bool on)
 Set the On timer to be active on the A/C. More...
 
bool isOffTimerActive (void) const
 Get if the Off Timer is active on the A/C. More...
 
void setOffTimerActive (const bool on)
 Set the Off timer to be active on the A/C. More...
 
bool isTimerActive (void) const
 Get if the Timer is active on the A/C. More...
 
void setTimerActive (const bool on)
 Set the timer to be active on the A/C. More...
 
stdAc::state_t toCommon (void) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint64_t state)
 Verify the checksum is valid for a given state. More...
 
static uint8_t calcChecksum (const uint64_t state)
 Calculate the checksum for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate & set the checksum for the current internal state of the remote. More...
 
- - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
VestelProtocol _
 
-

Detailed Description

-

Class for handling detailed Vestel A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRVestelAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRVestelAc::IRVestelAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - - -
void IRVestelAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRVestelAc::calcChecksum (const uint64_t state)
-
-static
-
- -

Calculate the checksum for a given state.

-
Parameters
- - -
[in]stateThe state to calc the checksum of.
-
-
-
Returns
The calculated checksum value.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRVestelAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRVestelAc::checksum (void )
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRVestelAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRVestelAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRVestelAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getIon()

- -
-
- - - - - - - - -
bool IRVestelAc::getIon (void ) const
-
- -

Get the Ion (Filter) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRVestelAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRVestelAc::getOffTimer (void ) const
-
- -

Get the A/C's Off Timer time.

-
Returns
The time expressed in nr. of minutes.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRVestelAc::getOnTimer (void ) const
-
- -

Get the A/C's On Timer time.

-
Returns
The time expressed in nr. of minutes.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRVestelAc::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint64_t IRVestelAc::getRaw (void )
-
- -

Get a copy of the internal state/code for this protocol.

-
Returns
A code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRVestelAc::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRVestelAc::getSwing (void ) const
-
- -

Get the Swing Roaming setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRVestelAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTime()

- -
-
- - - - - - - - -
uint16_t IRVestelAc::getTime (void ) const
-
- -

Get the A/C's internal clock's time.

-
Returns
The time expressed in nr. of minutes past midnight.
- -
-
- -

◆ getTimer()

- -
-
- - - - - - - - -
uint16_t IRVestelAc::getTimer (void ) const
-
- -

Get the Timer time of A/C.

-
Returns
The number of minutes of time on the timer.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRVestelAc::getTurbo (void ) const
-
- -

Get the Turbo setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ isOffTimerActive()

- -
-
- - - - - - - - -
bool IRVestelAc::isOffTimerActive (void ) const
-
- -

Get if the Off Timer is active on the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ isOnTimerActive()

- -
-
- - - - - - - - -
bool IRVestelAc::isOnTimerActive (void ) const
-
- -

Get if the On Timer is active on the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ isTimeCommand()

- -
-
- - - - - - - - -
bool IRVestelAc::isTimeCommand (void ) const
-
- -

Is the current state a time command?

-
Returns
true, if the state is a time message. Otherwise, false.
- -
-
- -

◆ isTimerActive()

- -
-
- - - - - - - - -
bool IRVestelAc::isTimerActive (void ) const
-
- -

Get if the Timer is active on the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRVestelAc::off (void )
-
- -

Set the requested power state of the A/C to off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRVestelAc::on (void )
-
- -

Set the requested power state of the A/C to on.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRVestelAc::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setAuto()

- -
-
- - - - - - - - -
void IRVestelAc::setAuto (const int8_t autoLevel)
-
- -

Set Auto mode/level of the A/C.

-
Parameters
- - -
[in]autoLevelThe auto mode/level setting.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRVestelAc::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
- -
-
- -

◆ setIon()

- -
-
- - - - - - - - -
void IRVestelAc::setIon (const bool on)
-
- -

Set the Ion (Filter) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRVestelAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
If we get an unexpected mode, default to AUTO.
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRVestelAc::setOffTimer (const uint16_t minutes)
-
- -

Set the Off timer time on the A/C.

-
Parameters
- - -
[in]minutesTime in nr. of minutes.
-
-
- -
-
- -

◆ setOffTimerActive()

- -
-
- - - - - - - - -
void IRVestelAc::setOffTimerActive (const bool on)
-
- -

Set the Off timer to be active on the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRVestelAc::setOnTimer (const uint16_t minutes)
-
- -

Set the On timer time on the A/C.

-
Parameters
- - -
[in]minutesTime in nr. of minutes.
-
-
- -
-
- -

◆ setOnTimerActive()

- -
-
- - - - - - - - -
void IRVestelAc::setOnTimerActive (const bool on)
-
- -

Set the On timer to be active on the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRVestelAc::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw() [1/2]

- -
-
- - - - - - - - -
void IRVestelAc::setRaw (const uint64_t newState)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]newStateA valid code for this protocol.
-
-
- -
-
- -

◆ setRaw() [2/2]

- -
-
- - - - - - - - -
void IRVestelAc::setRaw (const uint8_t * newState)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]newStateA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRVestelAc::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRVestelAc::setSwing (const bool on)
-
- -

Set the Swing Roaming setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRVestelAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTime()

- -
-
- - - - - - - - -
void IRVestelAc::setTime (const uint16_t minutes)
-
- -

Set the A/C's internal clock.

-
Parameters
- - -
[in]minutesThe time expressed in nr. of minutes past midnight.
-
-
- -
-
- -

◆ setTimer()

- -
-
- - - - - - - - -
void IRVestelAc::setTimer (const uint16_t minutes)
-
- -

Set Timer option of A/C.

-
Parameters
- - -
[in]minutesNr of minutes the timer is to be set for.
-
-
-
Note
Valid arguments are 0, 0.5, 1, 2, 3 and 5 hours (in minutes). 0 disables the timer.
- -
-
- -

◆ setTimerActive()

- -
-
- - - - - - - - -
void IRVestelAc::setTimerActive (const bool on)
-
- -

Set the timer to be active on the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRVestelAc::setTurbo (const bool on)
-
- -

Set the Turbo setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRVestelAc::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

-
Note
Power On, Mode Auto, Fan Auto, Temp = 25C/77F
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRVestelAc::toCommon (void ) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRVestelAc::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRVestelAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRVestelAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - -
bool IRVestelAc::validChecksum (const uint64_t state)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - -
[in]stateThe state to verify the checksum of.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
VestelProtocol IRVestelAc::_
-
-private
-
- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRVestelAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.map deleted file mode 100644 index 00a89f6f8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.md5 deleted file mode 100644 index 9abc01d96..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -749eda47222e3921624af0b9aa38df31 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.png deleted file mode 100644 index e204f57e7..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVestelAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas-members.html deleted file mode 100644 index d21d14210..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRVoltas Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRVoltasprivate
_irsendIRVoltasprivate
_modelIRVoltasprivate
begin()IRVoltas
calcChecksum(const uint8_t state[], const uint16_t length=kVoltasStateLength)IRVoltasprivatestatic
calibrate(void)IRVoltasinline
checksum(void)IRVoltasprivate
convertFan(const stdAc::fanspeed_t speed)IRVoltas
convertMode(const stdAc::opmode_t mode)IRVoltas
getEcono(void) constIRVoltas
getFan(void)IRVoltas
getLight(void) constIRVoltas
getMode(void)IRVoltas
getModel(const bool raw=false) constIRVoltas
getOffTime(void) constIRVoltas
getOnTime(void) constIRVoltas
getPower(void) constIRVoltas
getRaw(void)IRVoltas
getSleep(void) constIRVoltas
getSwingH(void) constIRVoltas
getSwingHChange(void) constIRVoltas
getSwingV(void) constIRVoltas
getTemp(void)IRVoltas
getTurbo(void) constIRVoltas
getWifi(void) constIRVoltas
IRVoltas(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRVoltasexplicit
off(void)IRVoltas
on(void)IRVoltas
send(const uint16_t repeat=kNoRepeat)IRVoltas
setEcono(const bool on)IRVoltas
setFan(const uint8_t speed)IRVoltas
setLight(const bool on)IRVoltas
setMode(const uint8_t mode)IRVoltas
setModel(const voltas_ac_remote_model_t model)IRVoltas
setOffTime(const uint16_t nr_of_mins)IRVoltas
setOnTime(const uint16_t nr_of_mins)IRVoltas
setPower(const bool on)IRVoltas
setRaw(const uint8_t new_code[])IRVoltas
setSleep(const bool on)IRVoltas
setSwingH(const bool on)IRVoltas
setSwingHChange(const bool on)IRVoltas
setSwingV(const bool on)IRVoltas
setTemp(const uint8_t temp)IRVoltas
setTurbo(const bool on)IRVoltas
setWifi(const bool on)IRVoltas
stateReset()IRVoltas
toCommon(const stdAc::state_t *prev=NULL)IRVoltas
toCommonFanSpeed(const uint8_t speed)IRVoltasstatic
toCommonMode(const uint8_t mode)IRVoltasstatic
toString(void)IRVoltas
validChecksum(const uint8_t state[], const uint16_t length=kVoltasStateLength)IRVoltasstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas.html deleted file mode 100644 index 4b1d546ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas.html +++ /dev/null @@ -1,1585 +0,0 @@ - - - - - - - -IRremoteESP8266: IRVoltas Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Voltas A/C messages. - More...

- -

#include <ir_Voltas.h>

-
-Collaboration diagram for IRVoltas:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRVoltas (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset ()
 
void send (const uint16_t repeat=kNoRepeat)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin ()
 Set up hardware to be able to send a message. More...
 
void setModel (const voltas_ac_remote_model_t model)
 Set the current model for the remote. More...
 
voltas_ac_remote_model_t getModel (const bool raw=false) const
 Get the model information currently known. More...
 
void setPower (const bool on)
 Change the power setting. More...
 
bool getPower (void) const
 Get the value of the current power setting. More...
 
void on (void)
 Change the power setting to On. More...
 
void off (void)
 Change the power setting to Off. More...
 
void setWifi (const bool on)
 Change the Wifi setting. More...
 
bool getWifi (void) const
 Get the value of the current Wifi setting. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void)
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void)
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void)
 Get the operating mode setting of the A/C. More...
 
void setSwingH (const bool on)
 Set the Horizontal Swing setting of the A/C. More...
 
bool getSwingH (void) const
 Get the Horizontal Swing setting of the A/C. More...
 
void setSwingHChange (const bool on)
 Set the bits for changing the Horizontal Swing setting of the A/C. More...
 
bool getSwingHChange (void) const
 Are the Horizontal Swing change bits set in the message? More...
 
void setSwingV (const bool on)
 Set the Vertical Swing setting of the A/C. More...
 
bool getSwingV (void) const
 Get the Vertical Swing setting of the A/C. More...
 
void setEcono (const bool on)
 Change the Economy setting. More...
 
bool getEcono (void) const
 Get the value of the current Econo setting. More...
 
void setLight (const bool on)
 Change the Light setting. More...
 
bool getLight (void) const
 Get the value of the current Light setting. More...
 
void setTurbo (const bool on)
 Change the Turbo setting. More...
 
bool getTurbo (void) const
 Get the value of the current Turbo setting. More...
 
void setSleep (const bool on)
 Change the Sleep setting. More...
 
bool getSleep (void) const
 Get the value of the current Sleep setting. More...
 
uint16_t getOnTime (void) const
 Get the value of the On Timer time. More...
 
void setOnTime (const uint16_t nr_of_mins)
 Set the value of the On Timer time. More...
 
uint16_t getOffTime (void) const
 Get the value of the On Timer time. More...
 
void setOffTime (const uint16_t nr_of_mins)
 Set the value of the Off Timer time. More...
 
uint8_t * getRaw (void)
 Get a PTR to the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[])
 Set the internal state from a valid code for this protocol. More...
 
uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL)
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void)
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kVoltasStateLength)
 Verify the checksum is valid for a given state. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - -

-Private Member Functions

void checksum (void)
 Calculate and set the checksum values for the internal state. More...
 
- - - - -

-Static Private Member Functions

static uint8_t calcChecksum (const uint8_t state[], const uint16_t length=kVoltasStateLength)
 Calculate the checksum is valid for a given state. More...
 
- - - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
VoltasProtocol _
 The state of the IR remote. More...
 
voltas_ac_remote_model_t _model
 Model type. More...
 
-

Detailed Description

-

Class for handling detailed Voltas A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRVoltas()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRVoltas::IRVoltas (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
void IRVoltas::begin ()
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calcChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t IRVoltas::calcChecksum (const uint8_t state[],
const uint16_t length = kVoltasStateLength 
)
-
-staticprivate
-
- -

Calculate the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to calculate the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
The valid checksum value for the state.
- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRVoltas::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRVoltas::checksum (void )
-
-private
-
- -

Calculate and set the checksum values for the internal state.

- -
-
- -

◆ convertFan()

- -
-
- - - - - - - - -
uint8_t IRVoltas::convertFan (const stdAc::fanspeed_t speed)
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - - - - -
uint8_t IRVoltas::convertMode (const stdAc::opmode_t mode)
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ getEcono()

- -
-
- - - - - - - - -
bool IRVoltas::getEcono (void ) const
-
- -

Get the value of the current Econo setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRVoltas::getFan (void )
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRVoltas::getLight (void ) const
-
- -

Get the value of the current Light setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRVoltas::getMode (void )
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
voltas_ac_remote_model_t IRVoltas::getModel (const bool raw = false) const
-
- -

Get the model information currently known.

-
Parameters
- - -
[in]rawWork out the model info from the current raw state.
-
-
-
Returns
The known model number.
- -
-
- -

◆ getOffTime()

- -
-
- - - - - - - - -
uint16_t IRVoltas::getOffTime (void ) const
-
- -

Get the value of the On Timer time.

-
Returns
Number of minutes before the timer activates.
- -
-
- -

◆ getOnTime()

- -
-
- - - - - - - - -
uint16_t IRVoltas::getOnTime (void ) const
-
- -

Get the value of the On Timer time.

-
Returns
Number of minutes before the timer activates.
- -
-
- -

◆ getPower()

- -
-
- - - - - - - - -
bool IRVoltas::getPower (void ) const
-
- -

Get the value of the current power setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRVoltas::getRaw (void )
-
- -

Get a PTR to the internal state/code for this protocol.

-
Returns
PTR to a code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRVoltas::getSleep (void ) const
-
- -

Get the value of the current Sleep setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingH()

- -
-
- - - - - - - - -
bool IRVoltas::getSwingH (void ) const
-
- -

Get the Horizontal Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwingHChange()

- -
-
- - - - - - - - -
bool IRVoltas::getSwingHChange (void ) const
-
- -

Are the Horizontal Swing change bits set in the message?

-
Returns
true, the correct bits are set. false, the correct bits are not set.
- -
-
- -

◆ getSwingV()

- -
-
- - - - - - - - -
bool IRVoltas::getSwingV (void ) const
-
- -

Get the Vertical Swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRVoltas::getTemp (void )
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTurbo()

- -
-
- - - - - - - - -
bool IRVoltas::getTurbo (void ) const
-
- -

Get the value of the current Turbo setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getWifi()

- -
-
- - - - - - - - -
bool IRVoltas::getWifi (void ) const
-
- -

Get the value of the current Wifi setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ off()

- -
-
- - - - - - - - -
void IRVoltas::off (void )
-
- -

Change the power setting to Off.

- -
-
- -

◆ on()

- -
-
- - - - - - - - -
void IRVoltas::on (void )
-
- -

Change the power setting to On.

- -
-
- -

◆ send()

- -
-
- - - - - - - - -
void IRVoltas::send (const uint16_t repeat = kNoRepeat)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - -
[in]repeatNr. of times the message will be repeated.
-
-
- -
-
- -

◆ setEcono()

- -
-
- - - - - - - - -
void IRVoltas::setEcono (const bool on)
-
- -

Change the Economy setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
The Economy setting is only available in Cool mode.
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRVoltas::setFan (const uint8_t fan)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]fanThe desired setting.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRVoltas::setLight (const bool on)
-
- -

Change the Light setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRVoltas::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
If we get an unexpected mode, default to AUTO.
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRVoltas::setModel (const voltas_ac_remote_model_t model)
-
- -

Set the current model for the remote.

-
Parameters
- - -
[in]modelThe model number.
-
-
- -
-
- -

◆ setOffTime()

- -
-
- - - - - - - - -
void IRVoltas::setOffTime (const uint16_t nr_of_mins)
-
- -

Set the value of the Off Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes before the timer activates. 0 disables the timer. Max is 23 hrs & 59 mins (1439 mins)
-
-
- -
-
- -

◆ setOnTime()

- -
-
- - - - - - - - -
void IRVoltas::setOnTime (const uint16_t nr_of_mins)
-
- -

Set the value of the On Timer time.

-
Parameters
- - -
[in]nr_of_minsNumber of minutes before the timer activates. 0 disables the timer. Max is 23 hrs & 59 mins (1439 mins)
-
-
- -
-
- -

◆ setPower()

- -
-
- - - - - - - - -
void IRVoltas::setPower (const bool on)
-
- -

Change the power setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - -
void IRVoltas::setRaw (const uint8_t new_code[])
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - -
[in]new_codeA valid code for this protocol.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRVoltas::setSleep (const bool on)
-
- -

Change the Sleep setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
The Sleep setting is only available in Cool mode.
- -
-
- -

◆ setSwingH()

- -
-
- - - - - - - - -
void IRVoltas::setSwingH (const bool on)
-
- -

Set the Horizontal Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwingHChange()

- -
-
- - - - - - - - -
void IRVoltas::setSwingHChange (const bool on)
-
- -

Set the bits for changing the Horizontal Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the change bits are set. false, the "no change" bits are set.
-
-
- -
-
- -

◆ setSwingV()

- -
-
- - - - - - - - -
void IRVoltas::setSwingV (const bool on)
-
- -

Set the Vertical Swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRVoltas::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ setTurbo()

- -
-
- - - - - - - - -
void IRVoltas::setTurbo (const bool on)
-
- -

Change the Turbo setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
-
Note
The Turbo setting is only available in Cool mode.
- -
-
- -

◆ setWifi()

- -
-
- - - - - - - - -
void IRVoltas::setWifi (const bool on)
-
- -

Change the Wifi setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - -
void IRVoltas::stateReset ()
-
- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRVoltas::toCommon (const stdAc::state_tprev = NULL)
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if available.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRVoltas::toCommonFanSpeed (const uint8_t spd)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]spdThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRVoltas::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRVoltas::toString (void )
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRVoltas::validChecksum (const uint8_t state[],
const uint16_t length = kVoltasStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length of the state array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
VoltasProtocol IRVoltas::_
-
-private
-
- -

The state of the IR remote.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRVoltas::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
- -

◆ _model

- -
-
- - - - - -
- - - - -
voltas_ac_remote_model_t IRVoltas::_model
-
-private
-
- -

Model type.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.map deleted file mode 100644 index c140c35c0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.md5 deleted file mode 100644 index a1701d096..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6a8b65794ccdc0bbca76d81c9087ca29 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.png deleted file mode 100644 index e594ded38..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRVoltas__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc-members.html deleted file mode 100644 index c51c23bb7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc-members.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRWhirlpoolAc Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_IRWhirlpoolAcprivate
_desiredtempIRWhirlpoolAcprivate
_irsendIRWhirlpoolAcprivate
_setMode(const uint8_t mode)IRWhirlpoolAcprivate
_setTemp(const uint8_t temp, const bool remember=true)IRWhirlpoolAcprivate
begin(void)IRWhirlpoolAc
calibrate(void)IRWhirlpoolAcinline
checksum(const uint16_t length=kWhirlpoolAcStateLength)IRWhirlpoolAcprivate
convertFan(const stdAc::fanspeed_t speed)IRWhirlpoolAcstatic
convertMode(const stdAc::opmode_t mode)IRWhirlpoolAcstatic
enableOffTimer(const bool on)IRWhirlpoolAc
enableOnTimer(const bool on)IRWhirlpoolAc
getClock(void) constIRWhirlpoolAc
getCommand(void) constIRWhirlpoolAc
getFan(void) constIRWhirlpoolAc
getLight(void) constIRWhirlpoolAc
getMode(void) constIRWhirlpoolAc
getModel(void) constIRWhirlpoolAc
getOffTimer(void) constIRWhirlpoolAc
getOnTimer(void) constIRWhirlpoolAc
getPowerToggle(void) constIRWhirlpoolAc
getRaw(const bool calcchecksum=true)IRWhirlpoolAc
getSleep(void) constIRWhirlpoolAc
getSuper(void) constIRWhirlpoolAc
getSwing(void) constIRWhirlpoolAc
getTemp(void) constIRWhirlpoolAc
getTempOffset(void) constIRWhirlpoolAcprivate
IRWhirlpoolAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRWhirlpoolAcexplicit
isOffTimerEnabled(void) constIRWhirlpoolAc
isOnTimerEnabled(void) constIRWhirlpoolAc
send(const uint16_t repeat=kWhirlpoolAcDefaultRepeat, const bool calcchecksum=true)IRWhirlpoolAc
setClock(const uint16_t minspastmidnight)IRWhirlpoolAc
setCommand(const uint8_t code)IRWhirlpoolAc
setFan(const uint8_t speed)IRWhirlpoolAc
setLight(const bool on)IRWhirlpoolAc
setMode(const uint8_t mode)IRWhirlpoolAc
setModel(const whirlpool_ac_remote_model_t model)IRWhirlpoolAc
setOffTimer(const uint16_t minspastmidnight)IRWhirlpoolAc
setOnTimer(const uint16_t minspastmidnight)IRWhirlpoolAc
setPowerToggle(const bool on)IRWhirlpoolAc
setRaw(const uint8_t new_code[], const uint16_t length=kWhirlpoolAcStateLength)IRWhirlpoolAc
setSleep(const bool on)IRWhirlpoolAc
setSuper(const bool on)IRWhirlpoolAc
setSwing(const bool on)IRWhirlpoolAc
setTemp(const uint8_t temp)IRWhirlpoolAc
stateReset(void)IRWhirlpoolAc
toCommon(const stdAc::state_t *prev=NULL) constIRWhirlpoolAc
toCommonFanSpeed(const uint8_t speed)IRWhirlpoolAcstatic
toCommonMode(const uint8_t mode)IRWhirlpoolAcstatic
toString(void) constIRWhirlpoolAc
validChecksum(const uint8_t state[], const uint16_t length=kWhirlpoolAcStateLength)IRWhirlpoolAcstatic
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc.html deleted file mode 100644 index ee54f9132..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc.html +++ /dev/null @@ -1,1647 +0,0 @@ - - - - - - - -IRremoteESP8266: IRWhirlpoolAc Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for handling detailed Whirlpool A/C messages. - More...

- -

#include <ir_Whirlpool.h>

-
-Collaboration diagram for IRWhirlpoolAc:
-
-
Collaboration graph
- - - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRWhirlpoolAc (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void stateReset (void)
 Reset the state of the remote to a known good state/sequence. More...
 
void send (const uint16_t repeat=kWhirlpoolAcDefaultRepeat, const bool calcchecksum=true)
 Send the current internal state as an IR message. More...
 
int8_t calibrate (void)
 Run the calibration to calculate uSec timing offsets for this platform. More...
 
void begin (void)
 Set up hardware to be able to send a message. More...
 
void setPowerToggle (const bool on)
 Change the power toggle setting. More...
 
bool getPowerToggle (void) const
 Get the value of the current power toggle setting. More...
 
void setSleep (const bool on)
 Set the Sleep setting of the A/C. More...
 
bool getSleep (void) const
 Get the Sleep setting of the A/C. More...
 
void setSuper (const bool on)
 Set the Super (Turbo/Jet) setting of the A/C. More...
 
bool getSuper (void) const
 Get the Super (Turbo/Jet) setting of the A/C. More...
 
void setTemp (const uint8_t temp)
 Set the temperature. More...
 
uint8_t getTemp (void) const
 Get the current temperature setting. More...
 
void setFan (const uint8_t speed)
 Set the speed of the fan. More...
 
uint8_t getFan (void) const
 Get the current fan speed setting. More...
 
void setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
uint8_t getMode (void) const
 Get the operating mode setting of the A/C. More...
 
void setSwing (const bool on)
 Set the (vertical) swing setting of the A/C. More...
 
bool getSwing (void) const
 Get the (vertical) swing setting of the A/C. More...
 
void setLight (const bool on)
 Set the Light (Display/LED) setting of the A/C. More...
 
bool getLight (void) const
 Get the Light (Display/LED) setting of the A/C. More...
 
uint16_t getClock (void) const
 Get the clock time in nr. of minutes past midnight. More...
 
void setClock (const uint16_t minspastmidnight)
 Set the clock time in nr. of minutes past midnight. More...
 
uint16_t getOnTimer (void) const
 Get the On Timer time.. More...
 
void setOnTimer (const uint16_t minspastmidnight)
 Set the On Timer time. More...
 
void enableOnTimer (const bool on)
 Enable the On Timer. More...
 
bool isOnTimerEnabled (void) const
 Is the On timer enabled? More...
 
uint16_t getOffTimer (void) const
 Get the Off Timer time.. More...
 
void setOffTimer (const uint16_t minspastmidnight)
 Set the Off Timer time. More...
 
void enableOffTimer (const bool on)
 Enable the Off Timer. More...
 
bool isOffTimerEnabled (void) const
 Is the Off timer enabled? More...
 
void setCommand (const uint8_t code)
 Set the Command (Button) setting of the A/C. More...
 
uint8_t getCommand (void) const
 Get the Command (Button) setting of the A/C. More...
 
whirlpool_ac_remote_model_t getModel (void) const
 Get/Detect the model of the A/C. More...
 
void setModel (const whirlpool_ac_remote_model_t model)
 Set the model of the A/C to emulate. More...
 
uint8_t * getRaw (const bool calcchecksum=true)
 Get a copy of the internal state/code for this protocol. More...
 
void setRaw (const uint8_t new_code[], const uint16_t length=kWhirlpoolAcStateLength)
 Set the internal state from a valid code for this protocol. More...
 
stdAc::state_t toCommon (const stdAc::state_t *prev=NULL) const
 Convert the current internal state into its stdAc::state_t equivalent. More...
 
String toString (void) const
 Convert the current internal state into a human readable string. More...
 
- - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool validChecksum (const uint8_t state[], const uint16_t length=kWhirlpoolAcStateLength)
 Verify the checksum is valid for a given state. More...
 
static uint8_t convertMode (const stdAc::opmode_t mode)
 Convert a stdAc::opmode_t enum into its native mode. More...
 
static uint8_t convertFan (const stdAc::fanspeed_t speed)
 Convert a stdAc::fanspeed_t enum into it's native speed. More...
 
static stdAc::opmode_t toCommonMode (const uint8_t mode)
 Convert a native mode into its stdAc equivalent. More...
 
static stdAc::fanspeed_t toCommonFanSpeed (const uint8_t speed)
 Convert a native fan speed into its stdAc equivalent. More...
 
- - - - - - - - - - - - - -

-Private Member Functions

void checksum (const uint16_t length=kWhirlpoolAcStateLength)
 Calculate & set the checksum for the current internal state of the remote. More...
 
void _setTemp (const uint8_t temp, const bool remember=true)
 Set the temperature. More...
 
void _setMode (const uint8_t mode)
 Set the operating mode of the A/C. More...
 
int8_t getTempOffset (void) const
 Calculate the temp. offset in deg C for the current model. More...
 
- - - - - - - - - -

-Private Attributes

IRsend _irsend
 Instance of the IR send class. More...
 
WhirlpoolProtocol _
 
uint8_t _desiredtemp
 The last user explicitly set temperature. More...
 
-

Detailed Description

-

Class for handling detailed Whirlpool A/C messages.

-

Constructor & Destructor Documentation

- -

◆ IRWhirlpoolAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRWhirlpoolAc::IRWhirlpoolAc (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGPIO to be used when sending.
[in]invertedIs the output signal to be inverted?
[in]use_modulationIs frequency modulation to be used?
-
-
- -
-
-

Member Function Documentation

- -

◆ _setMode()

- -
-
- - - - - -
- - - - - - - - -
void IRWhirlpoolAc::_setMode (const uint8_t mode)
-
-private
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
-
Note
Internal use only.
- -
-
- -

◆ _setTemp()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRWhirlpoolAc::_setTemp (const uint8_t temp,
const bool remember = true 
)
-
-private
-
- -

Set the temperature.

-
Parameters
- - - -
[in]tempThe temperature in degrees celsius.
[in]rememberDo we save this temperature?
-
-
-
Note
Internal use only.
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::begin (void )
-
- -

Set up hardware to be able to send a message.

- -
-
- -

◆ calibrate()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRWhirlpoolAc::calibrate (void )
-
-inline
-
- -

Run the calibration to calculate uSec timing offsets for this platform.

-
Returns
The uSec timing offset needed per modulation of the IR Led.
-
Note
This will produce a 65ms IR signal pulse at 38kHz. Only ever needs to be run once per object instantiation, if at all.
- -
-
- -

◆ checksum()

- -
-
- - - - - -
- - - - - - - - -
void IRWhirlpoolAc::checksum (const uint16_t length = kWhirlpoolAcStateLength)
-
-private
-
- -

Calculate & set the checksum for the current internal state of the remote.

-
Parameters
- - -
[in]lengthThe length/size of the internal state array.
-
-
- -
-
- -

◆ convertFan()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRWhirlpoolAc::convertFan (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert a stdAc::fanspeed_t enum into it's native speed.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ convertMode()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRWhirlpoolAc::convertMode (const stdAc::opmode_t mode)
-
-static
-
- -

Convert a stdAc::opmode_t enum into its native mode.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The native equivalent of the enum.
- -
-
- -

◆ enableOffTimer()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::enableOffTimer (const bool on)
-
- -

Enable the Off Timer.

-
Parameters
- - -
[in]ontrue, the timer is enabled. false, the timer is disabled.
-
-
- -
-
- -

◆ enableOnTimer()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::enableOnTimer (const bool on)
-
- -

Enable the On Timer.

-
Parameters
- - -
[in]ontrue, the timer is enabled. false, the timer is disabled.
-
-
- -
-
- -

◆ getClock()

- -
-
- - - - - - - - -
uint16_t IRWhirlpoolAc::getClock (void ) const
-
- -

Get the clock time in nr. of minutes past midnight.

-
Returns
The time expressed as the Nr. of minutes past midnight.
- -
-
- -

◆ getCommand()

- -
-
- - - - - - - - -
uint8_t IRWhirlpoolAc::getCommand (void ) const
-
- -

Get the Command (Button) setting of the A/C.

-
Returns
The current Command (Button) of the A/C.
- -
-
- -

◆ getFan()

- -
-
- - - - - - - - -
uint8_t IRWhirlpoolAc::getFan (void ) const
-
- -

Get the current fan speed setting.

-
Returns
The current fan speed/mode.
- -
-
- -

◆ getLight()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::getLight (void ) const
-
- -

Get the Light (Display/LED) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getMode()

- -
-
- - - - - - - - -
uint8_t IRWhirlpoolAc::getMode (void ) const
-
- -

Get the operating mode setting of the A/C.

-
Returns
The current operating mode setting.
- -
-
- -

◆ getModel()

- -
-
- - - - - - - - -
whirlpool_ac_remote_model_t IRWhirlpoolAc::getModel (void ) const
-
- -

Get/Detect the model of the A/C.

-
Returns
The enum of the compatible model.
- -
-
- -

◆ getOffTimer()

- -
-
- - - - - - - - -
uint16_t IRWhirlpoolAc::getOffTimer (void ) const
-
- -

Get the Off Timer time..

-
Returns
The time expressed as the Nr. of minutes past midnight.
- -
-
- -

◆ getOnTimer()

- -
-
- - - - - - - - -
uint16_t IRWhirlpoolAc::getOnTimer (void ) const
-
- -

Get the On Timer time..

-
Returns
The time expressed as the Nr. of minutes past midnight.
- -
-
- -

◆ getPowerToggle()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::getPowerToggle (void ) const
-
- -

Get the value of the current power toggle setting.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getRaw()

- -
-
- - - - - - - - -
uint8_t * IRWhirlpoolAc::getRaw (const bool calcchecksum = true)
-
- -

Get a copy of the internal state/code for this protocol.

-
Parameters
- - -
[in]calcchecksumDo we need to calculate the checksum?.
-
-
-
Returns
A code for this protocol based on the current internal state.
- -
-
- -

◆ getSleep()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::getSleep (void ) const
-
- -

Get the Sleep setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSuper()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::getSuper (void ) const
-
- -

Get the Super (Turbo/Jet) setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getSwing()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::getSwing (void ) const
-
- -

Get the (vertical) swing setting of the A/C.

-
Returns
true, the setting is on. false, the setting is off.
- -
-
- -

◆ getTemp()

- -
-
- - - - - - - - -
uint8_t IRWhirlpoolAc::getTemp (void ) const
-
- -

Get the current temperature setting.

-
Returns
The current setting for temp. in degrees celsius.
- -
-
- -

◆ getTempOffset()

- -
-
- - - - - -
- - - - - - - - -
int8_t IRWhirlpoolAc::getTempOffset (void ) const
-
-private
-
- -

Calculate the temp. offset in deg C for the current model.

-
Returns
The temperature offset.
- -
-
- -

◆ isOffTimerEnabled()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::isOffTimerEnabled (void ) const
-
- -

Is the Off timer enabled?

-
Returns
true, the Timer is enabled. false, the Timer is disabled.
- -
-
- -

◆ isOnTimerEnabled()

- -
-
- - - - - - - - -
bool IRWhirlpoolAc::isOnTimerEnabled (void ) const
-
- -

Is the On timer enabled?

-
Returns
true, the Timer is enabled. false, the Timer is disabled.
- -
-
- -

◆ send()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRWhirlpoolAc::send (const uint16_t repeat = kWhirlpoolAcDefaultRepeat,
const bool calcchecksum = true 
)
-
- -

Send the current internal state as an IR message.

-
Parameters
- - - -
[in]repeatNr. of times the message will be repeated.
[in]calcchecksumDo we need to calculate the checksum?.
-
-
- -
-
- -

◆ setClock()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setClock (const uint16_t minspastmidnight)
-
- -

Set the clock time in nr. of minutes past midnight.

-
Parameters
- - -
[in]minspastmidnightThe time expressed as minutes past midnight.
-
-
- -
-
- -

◆ setCommand()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setCommand (const uint8_t code)
-
- -

Set the Command (Button) setting of the A/C.

-
Parameters
- - -
[in]codeThe current Command (Button) of the A/C.
-
-
- -
-
- -

◆ setFan()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setFan (const uint8_t speed)
-
- -

Set the speed of the fan.

-
Parameters
- - -
[in]speedThe desired setting.
-
-
- -
-
- -

◆ setLight()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setLight (const bool on)
-
- -

Set the Light (Display/LED) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setMode()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setMode (const uint8_t mode)
-
- -

Set the operating mode of the A/C.

-
Parameters
- - -
[in]modeThe desired operating mode.
-
-
- -
-
- -

◆ setModel()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setModel (const whirlpool_ac_remote_model_t model)
-
- -

Set the model of the A/C to emulate.

-
Parameters
- - -
[in]modelThe enum of the appropriate model.
-
-
- -
-
- -

◆ setOffTimer()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setOffTimer (const uint16_t minspastmidnight)
-
- -

Set the Off Timer time.

-
Parameters
- - -
[in]minspastmidnightThe time expressed as minutes past midnight.
-
-
- -
-
- -

◆ setOnTimer()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setOnTimer (const uint16_t minspastmidnight)
-
- -

Set the On Timer time.

-
Parameters
- - -
[in]minspastmidnightThe time expressed as minutes past midnight.
-
-
- -
-
- -

◆ setPowerToggle()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setPowerToggle (const bool on)
-
- -

Change the power toggle setting.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setRaw()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRWhirlpoolAc::setRaw (const uint8_t new_code[],
const uint16_t length = kWhirlpoolAcStateLength 
)
-
- -

Set the internal state from a valid code for this protocol.

-
Parameters
- - - -
[in]new_codeA valid code for this protocol.
[in]lengthThe length/size of the new_code array.
-
-
- -
-
- -

◆ setSleep()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setSleep (const bool on)
-
- -

Set the Sleep setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSuper()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setSuper (const bool on)
-
- -

Set the Super (Turbo/Jet) setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setSwing()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setSwing (const bool on)
-
- -

Set the (vertical) swing setting of the A/C.

-
Parameters
- - -
[in]ontrue, the setting is on. false, the setting is off.
-
-
- -
-
- -

◆ setTemp()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::setTemp (const uint8_t temp)
-
- -

Set the temperature.

-
Parameters
- - -
[in]tempThe temperature in degrees celsius.
-
-
- -
-
- -

◆ stateReset()

- -
-
- - - - - - - - -
void IRWhirlpoolAc::stateReset (void )
-
- -

Reset the state of the remote to a known good state/sequence.

- -
-
- -

◆ toCommon()

- -
-
- - - - - - - - -
stdAc::state_t IRWhirlpoolAc::toCommon (const stdAc::state_tprev = NULL) const
-
- -

Convert the current internal state into its stdAc::state_t equivalent.

-
Parameters
- - -
[in]prevPtr to the previous state if required.
-
-
-
Returns
The stdAc equivalent of the native settings.
- -
-
- -

◆ toCommonFanSpeed()

- -
-
- - - - - -
- - - - - - - - -
stdAc::fanspeed_t IRWhirlpoolAc::toCommonFanSpeed (const uint8_t speed)
-
-static
-
- -

Convert a native fan speed into its stdAc equivalent.

-
Parameters
- - -
[in]speedThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toCommonMode()

- -
-
- - - - - -
- - - - - - - - -
stdAc::opmode_t IRWhirlpoolAc::toCommonMode (const uint8_t mode)
-
-static
-
- -

Convert a native mode into its stdAc equivalent.

-
Parameters
- - -
[in]modeThe native setting to be converted.
-
-
-
Returns
The stdAc equivalent of the native setting.
- -
-
- -

◆ toString()

- -
-
- - - - - - - - -
String IRWhirlpoolAc::toString (void ) const
-
- -

Convert the current internal state into a human readable string.

-
Returns
A human readable string.
- -
-
- -

◆ validChecksum()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRWhirlpoolAc::validChecksum (const uint8_t state[],
const uint16_t length = kWhirlpoolAcStateLength 
)
-
-static
-
- -

Verify the checksum is valid for a given state.

-
Parameters
- - - -
[in]stateThe array to verify the checksum of.
[in]lengthThe length/size of the array.
-
-
-
Returns
true, if the state has a valid checksum. Otherwise, false.
- -
-
-

Member Data Documentation

- -

◆ _

- -
-
- - - - - -
- - - - -
WhirlpoolProtocol IRWhirlpoolAc::_
-
-private
-
- -
-
- -

◆ _desiredtemp

- -
-
- - - - - -
- - - - -
uint8_t IRWhirlpoolAc::_desiredtemp
-
-private
-
- -

The last user explicitly set temperature.

- -
-
- -

◆ _irsend

- -
-
- - - - - -
- - - - -
IRsend IRWhirlpoolAc::_irsend
-
-private
-
- -

Instance of the IR send class.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.map deleted file mode 100644 index 905c915a6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.md5 deleted file mode 100644 index 74ae8d244..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -db29e7768fbf9c89e59c35ca00232038 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.png deleted file mode 100644 index a7bb51b0c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac-members.html deleted file mode 100644 index cdf3567d4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac-members.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRac Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_invertedIRacprivate
_modulationIRacprivate
_pinIRacprivate
_prevIRacprivate
airwell(IRAirwellAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)IRacprivate
amcor(IRAmcorAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)IRacprivate
argo(IRArgoAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const int16_t sleep=-1)IRacprivate
boolToString(const bool value)IRacstatic
carrier64(IRCarrierAc64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)IRacprivate
cleanState(const stdAc::state_t state)IRacprivatestatic
cmpStates(const stdAc::state_t a, const stdAc::state_t b)IRacstatic
coolix(IRCoolixAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)IRacprivate
corona(IRCoronaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool econo)IRacprivate
daikin(IRDaikinESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool clean)IRacprivate
daikin128(IRDaikin128 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool econo, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
daikin152(IRDaikin152 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool econo)IRacprivate
daikin160(IRDaikin160 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)IRacprivate
daikin176(IRDaikin176 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingh_t swingh)IRacprivate
daikin2(IRDaikin2 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool econo, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
daikin216(IRDaikin216 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo)IRacprivate
daikin64(IRDaikin64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
delonghiac(IRDelonghiAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const bool turbo, const int16_t sleep=-1)IRacprivate
ecoclim(IREcoclimAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool lighttoggle, const bool clean)IRacprivate
fanspeedToString(const stdAc::fanspeed_t speed)IRacstatic
fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)IRacprivate
getState(void)IRac
getStatePrev(void)IRac
goodweather(IRGoodweatherAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1)IRacprivate
gree(IRGreeAC *ac, const gree_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)IRacprivate
haier(IRHaierAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool filter, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
haierYrwo2(IRHaierACYRW02 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1)IRacprivate
handleToggles(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)IRacprivatestatic
hasStateChanged(void)IRac
hitachi(IRHitachiAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)IRacprivate
hitachi1(IRHitachiAc1 *ac, const hitachi_ac1_remote_model_t model, const bool on, const bool power_toggle, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool swing_toggle, const int16_t sleep=-1)IRacprivate
hitachi344(IRHitachiAc344 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)IRacprivate
hitachi424(IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)IRacprivate
initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)IRacstatic
initState(stdAc::state_t *state)IRacstatic
IRac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRacexplicit
isProtocolSupported(const decode_type_t protocol)IRacstatic
kelvinator(IRKelvinatorAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean)IRacprivate
lg(IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)IRacprivate
markAsSent(void)IRac
midea(IRMideaAC *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)IRacprivate
mitsubishi(IRMitsubishiAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const int16_t clock=-1)IRacprivate
mitsubishi112(IRMitsubishi112 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet)IRacprivate
mitsubishi136(IRMitsubishi136 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet)IRacprivate
mitsubishiHeavy152(IRMitsubishiHeavy152Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)IRacprivate
mitsubishiHeavy88(IRMitsubishiHeavy88Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool clean)IRacprivate
neoclima(IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const bool filter, const int16_t sleep=-1)IRacprivate
nextIRac
opmodeToString(const stdAc::opmode_t mode)IRacstatic
panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool filter, const int16_t clock=-1)IRacprivate
panasonic32(IRPanasonicAc32 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)IRacprivate
samsung(IRSamsungAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean, const bool beep, const bool prevpower=true, const bool forcepower=true)IRacprivate
sanyo(IRSanyoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep=-1)IRacprivate
sendAc(void)IRac
sendAc(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)IRac
sendAc(const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)IRac
sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool filter, const bool clean)IRacprivate
strToBool(const char *str, const bool def=false)IRacstatic
strToFanspeed(const char *str, const stdAc::fanspeed_t def=stdAc::fanspeed_t::kAuto)IRacstatic
strToModel(const char *str, const int16_t def=-1)IRacstatic
strToOpmode(const char *str, const stdAc::opmode_t def=stdAc::opmode_t::kAuto)IRacstatic
strToSwingH(const char *str, const stdAc::swingh_t def=stdAc::swingh_t::kOff)IRacstatic
strToSwingV(const char *str, const stdAc::swingv_t def=stdAc::swingv_t::kOff)IRacstatic
swinghToString(const stdAc::swingh_t swingh)IRacstatic
swingvToString(const stdAc::swingv_t swingv)IRacstatic
tcl112(IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool econo, const bool filter)IRacprivate
technibel(IRTechnibelAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)IRacprivate
teco(IRTecoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool light, const int16_t sleep=-1)IRacprivate
toshiba(IRToshibaAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo)IRacprivate
transcold(IRTranscoldAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)IRacprivate
trotec(IRTrotecESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1)IRacprivate
truma(IRTrumaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const bool quiet)IRacprivate
vestel(IRVestelAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1, const int16_t clock=-1, const bool sendNormal=true)IRacprivate
voltas(IRVoltas *ac, const voltas_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)IRacprivate
whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1, const int16_t clock=-1)IRacprivate
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac.html deleted file mode 100644 index f7f846b6e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac.html +++ /dev/null @@ -1,6447 +0,0 @@ - - - - - - - -IRremoteESP8266: IRac Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A universal/common/generic interface for controling supported A/Cs. - More...

- -

#include <IRac.h>

-
-Collaboration diagram for IRac:
-
-
Collaboration graph
- - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRac (const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
 Class constructor. More...
 
void markAsSent (void)
 Update the previous state to the current one. More...
 
bool sendAc (void)
 Send an A/C message based soley on our internal state. More...
 
bool sendAc (const stdAc::state_t desired, const stdAc::state_t *prev=NULL)
 Send A/C message for a given device using state_t structures. More...
 
bool sendAc (const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)
 Send A/C message for a given device using common A/C settings. More...
 
stdAc::state_t getState (void)
 Get the current internal A/C climate state. More...
 
stdAc::state_t getStatePrev (void)
 Get the previous internal A/C climate state that should have already been sent to the device. i.e. What the A/C unit should already be set to. More...
 
bool hasStateChanged (void)
 Check if the internal state has changed from what was previously sent. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static bool isProtocolSupported (const decode_type_t protocol)
 Is the given protocol supported by the IRac class? More...
 
static void initState (stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)
 Initialise the given state with the supplied settings. More...
 
static void initState (stdAc::state_t *state)
 Initialise the given state with the supplied settings. More...
 
static bool cmpStates (const stdAc::state_t a, const stdAc::state_t b)
 Compare two AirCon states. More...
 
static bool strToBool (const char *str, const bool def=false)
 Convert the supplied str into the appropriate boolean value. More...
 
static int16_t strToModel (const char *str, const int16_t def=-1)
 Convert the supplied str into the appropriate enum. More...
 
static stdAc::opmode_t strToOpmode (const char *str, const stdAc::opmode_t def=stdAc::opmode_t::kAuto)
 Convert the supplied str into the appropriate enum. More...
 
static stdAc::fanspeed_t strToFanspeed (const char *str, const stdAc::fanspeed_t def=stdAc::fanspeed_t::kAuto)
 Convert the supplied str into the appropriate enum. More...
 
static stdAc::swingv_t strToSwingV (const char *str, const stdAc::swingv_t def=stdAc::swingv_t::kOff)
 Convert the supplied str into the appropriate enum. More...
 
static stdAc::swingh_t strToSwingH (const char *str, const stdAc::swingh_t def=stdAc::swingh_t::kOff)
 Convert the supplied str into the appropriate enum. More...
 
static String boolToString (const bool value)
 Convert the supplied boolean into the appropriate String. More...
 
static String opmodeToString (const stdAc::opmode_t mode)
 Convert the supplied operation mode into the appropriate String. More...
 
static String fanspeedToString (const stdAc::fanspeed_t speed)
 Convert the supplied fan speed enum into the appropriate String. More...
 
static String swingvToString (const stdAc::swingv_t swingv)
 Convert the supplied enum into the appropriate String. More...
 
static String swinghToString (const stdAc::swingh_t swingh)
 Convert the supplied enum into the appropriate String. More...
 
- - - - -

-Public Attributes

stdAc::state_t next
 The state we want the device to be in after we send. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Private Member Functions

void airwell (IRAirwellAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
 Send an Airwell A/C message with the supplied settings. More...
 
void amcor (IRAmcorAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
 Send an Amcor A/C message with the supplied settings. More...
 
void argo (IRArgoAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const int16_t sleep=-1)
 Send an Argo A/C message with the supplied settings. More...
 
void carrier64 (IRCarrierAc64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
 Send a Carrier 64-bit A/C message with the supplied settings. More...
 
void coolix (IRCoolixAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
 Send a Coolix A/C message with the supplied settings. More...
 
void corona (IRCoronaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool econo)
 Send a Corona A/C message with the supplied settings. More...
 
void daikin (IRDaikinESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool clean)
 Send a Daikin A/C message with the supplied settings. More...
 
void daikin128 (IRDaikin128 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool econo, const int16_t sleep=-1, const int16_t clock=-1)
 Send a Daikin 128-bit A/C message with the supplied settings. More...
 
void daikin152 (IRDaikin152 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool econo)
 Send a Daikin 152-bit A/C message with the supplied settings. More...
 
void daikin160 (IRDaikin160 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
 Send a Daikin 160-bit A/C message with the supplied settings. More...
 
void daikin176 (IRDaikin176 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingh_t swingh)
 Send a Daikin 176-bit A/C message with the supplied settings. More...
 
void daikin2 (IRDaikin2 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool econo, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)
 Send a Daikin2 A/C message with the supplied settings. More...
 
void daikin216 (IRDaikin216 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo)
 Send a Daikin 216-bit A/C message with the supplied settings. More...
 
void daikin64 (IRDaikin64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const int16_t sleep=-1, const int16_t clock=-1)
 Send a Daikin 64-bit A/C message with the supplied settings. More...
 
void delonghiac (IRDelonghiAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const bool turbo, const int16_t sleep=-1)
 Send a Delonghi A/C message with the supplied settings. More...
 
void ecoclim (IREcoclimAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1, const int16_t clock=-1)
 Send an EcoClim A/C message with the supplied settings. More...
 
void electra (IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool lighttoggle, const bool clean)
 Send an Electra A/C message with the supplied settings. More...
 
void fujitsu (IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
 Send a Fujitsu A/C message with the supplied settings. More...
 
void goodweather (IRGoodweatherAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1)
 Send a Goodweather A/C message with the supplied settings. More...
 
void gree (IRGreeAC *ac, const gree_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
 Send a Gree A/C message with the supplied settings. More...
 
void haier (IRHaierAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool filter, const int16_t sleep=-1, const int16_t clock=-1)
 Send a Haier A/C message with the supplied settings. More...
 
void haierYrwo2 (IRHaierACYRW02 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1)
 Send a Haier YRWO2 A/C message with the supplied settings. More...
 
void hitachi (IRHitachiAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
 Send a Hitachi A/C message with the supplied settings. More...
 
void hitachi1 (IRHitachiAc1 *ac, const hitachi_ac1_remote_model_t model, const bool on, const bool power_toggle, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool swing_toggle, const int16_t sleep=-1)
 Send a Hitachi1 A/C message with the supplied settings. More...
 
void hitachi344 (IRHitachiAc344 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
 Send a Hitachi 344-bit A/C message with the supplied settings. More...
 
void hitachi424 (IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
 Send a Hitachi 424-bit A/C message with the supplied settings. More...
 
void kelvinator (IRKelvinatorAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean)
 Send a Kelvinator A/C message with the supplied settings. More...
 
void lg (IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
 Send a LG A/C message with the supplied settings. More...
 
void midea (IRMideaAC *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
 Send a Midea A/C message with the supplied settings. More...
 
void mitsubishi (IRMitsubishiAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const int16_t clock=-1)
 Send a Mitsubishi A/C message with the supplied settings. More...
 
void mitsubishi112 (IRMitsubishi112 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet)
 Send a Mitsubishi 112-bit A/C message with the supplied settings. More...
 
void mitsubishi136 (IRMitsubishi136 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet)
 Send a Mitsubishi 136-bit A/C message with the supplied settings. More...
 
void mitsubishiHeavy88 (IRMitsubishiHeavy88Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool clean)
 Send a Mitsubishi Heavy 88-bit A/C message with the supplied settings. More...
 
void mitsubishiHeavy152 (IRMitsubishiHeavy152Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
 Send a Mitsubishi Heavy 152-bit A/C message with the supplied settings. More...
 
void neoclima (IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const bool filter, const int16_t sleep=-1)
 Send a Neoclima A/C message with the supplied settings. More...
 
void panasonic (IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool filter, const int16_t clock=-1)
 Send a Panasonic A/C message with the supplied settings. More...
 
void panasonic32 (IRPanasonicAc32 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
 Send a Panasonic A/C message with the supplied settings. More...
 
void samsung (IRSamsungAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean, const bool beep, const bool prevpower=true, const bool forcepower=true)
 Send a Samsung A/C message with the supplied settings. More...
 
void sanyo (IRSanyoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep=-1)
 Send a Toshiba A/C message with the supplied settings. More...
 
void sharp (IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool filter, const bool clean)
 Send a Sharp A/C message with the supplied settings. More...
 
void tcl112 (IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool econo, const bool filter)
 Send a TCL 112-bit A/C message with the supplied settings. More...
 
void technibel (IRTechnibelAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
 Send a Technibel A/C message with the supplied settings. More...
 
void teco (IRTecoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool light, const int16_t sleep=-1)
 Send a Teco A/C message with the supplied settings. More...
 
void toshiba (IRToshibaAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo)
 Send a Toshiba A/C message with the supplied settings. More...
 
void trotec (IRTrotecESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1)
 Send a Trotec A/C message with the supplied settings. More...
 
void truma (IRTrumaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const bool quiet)
 Send a Truma A/C message with the supplied settings. More...
 
void vestel (IRVestelAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1, const int16_t clock=-1, const bool sendNormal=true)
 Send a Vestel A/C message with the supplied settings. More...
 
void voltas (IRVoltas *ac, const voltas_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
 Send a Voltas A/C message with the supplied settings. More...
 
void whirlpool (IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1, const int16_t clock=-1)
 Send a Whirlpool A/C message with the supplied settings. More...
 
void transcold (IRTranscoldAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
 Send a Transcold A/C message with the supplied settings. More...
 
- - - - - - - -

-Static Private Member Functions

static stdAc::state_t cleanState (const stdAc::state_t state)
 Create a new state base on the provided state that has been suitably fixed. More...
 
static stdAc::state_t handleToggles (const stdAc::state_t desired, const stdAc::state_t *prev=NULL)
 Create a new state base on desired & previous states but handle any state changes for options that need to be toggled. More...
 
- - - - - - - - - - - - - -

-Private Attributes

uint16_t _pin
 The GPIO to use to transmit messages from. More...
 
bool _inverted
 IR LED is lit when GPIO is LOW (true) or HIGH (false)? More...
 
bool _modulation
 Is frequency modulation to be used? More...
 
stdAc::state_t _prev
 The state we expect the device to currently be in. More...
 
-

Detailed Description

-

A universal/common/generic interface for controling supported A/Cs.

-

Constructor & Destructor Documentation

- -

◆ IRac()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRac::IRac (const uint16_t pin,
const bool inverted = false,
const bool use_modulation = true 
)
-
-explicit
-
- -

Class constructor.

-
Parameters
- - - - -
[in]pinGpio pin to use when transmitting IR messages.
[in]invertedtrue, gpio output defaults to high. false, to low.
[in]use_modulationtrue means use frequency modulation. false, don't.
-
-
- -
-
-

Member Function Documentation

- -

◆ airwell()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::airwell (IRAirwellAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan 
)
-
-private
-
- -

Send an Airwell A/C message with the supplied settings.

-
Parameters
- - - - - - -
[in,out]acA Ptr to an IRAirwellAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
-
-
- -
-
- -

◆ amcor()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::amcor (IRAmcorAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan 
)
-
-private
-
- -

Send an Amcor A/C message with the supplied settings.

-
Parameters
- - - - - - -
[in,out]acA Ptr to an IRAmcorAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
-
-
- -
-
- -

◆ argo()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::argo (IRArgoACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const int16_t sleep = -1 
)
-
-private
-
- -

Send an Argo A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRArgoAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]sleepNr. of minutes for sleep mode.
-
-
-
Note
-1 is Off, >= 0 is on.
- -
-
- -

◆ boolToString()

- -
-
- - - - - -
- - - - - - - - -
String IRac::boolToString (const bool value)
-
-static
-
- -

Convert the supplied boolean into the appropriate String.

-
Parameters
- - -
[in]valueThe boolean value to be converted.
-
-
-
Returns
The equivalent String for the locale.
- -
-
- -

◆ carrier64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::carrier64 (IRCarrierAc64ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Carrier 64-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRCarrierAc64 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]sleepNr. of minutes for sleep mode.
-
-
-
Note
-1 is Off, >= 0 is on.
- -
-
- -

◆ cleanState()

- -
-
- - - - - -
- - - - - - - - -
stdAc::state_t IRac::cleanState (const stdAc::state_t state)
-
-staticprivate
-
- -

Create a new state base on the provided state that has been suitably fixed.

-
Note
This is for use with Home Assistant, which requires mode to be off if the power is off.
-
Parameters
- - -
[in]stateThe state_t structure describing the desired a/c state.
-
-
-
Returns
A stdAc::state_t with the needed settings.
- -
-
- -

◆ cmpStates()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRac::cmpStates (const stdAc::state_t a,
const stdAc::state_t b 
)
-
-static
-
- -

Compare two AirCon states.

-
Note
The comparison excludes the clock.
-
Parameters
- - - -
aA state_t to be compared.
bA state_t to be compared.
-
-
-
Returns
True if they differ, False if they don't.
- -
-
- -

◆ coolix()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::coolix (IRCoolixACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool light,
const bool clean,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Coolix A/C message with the supplied settings.

-
Note
May result in multiple messages being sent.
-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRCoolixAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]sleepNr. of minutes for sleep mode.
-
-
-
Note
-1 is Off, >= 0 is on.
- -
-
- -

◆ corona()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::corona (IRCoronaAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool econo 
)
-
-private
-
- -

Send a Corona A/C message with the supplied settings.

-
Note
May result in multiple messages being sent.
-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRCoronaAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]econoRun the device in economical mode.
-
-
- -
-
- -

◆ daikin()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin (IRDaikinESPac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool econo,
const bool clean 
)
-
-private
-
- -

Send a Daikin A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRDaikinESP object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
-
-
- -
-
- -

◆ daikin128()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin128 (IRDaikin128ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool quiet,
const bool turbo,
const bool light,
const bool econo,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Daikin 128-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRDaikin128 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]econoRun the device in economical mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ daikin152()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin152 (IRDaikin152ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool quiet,
const bool turbo,
const bool econo 
)
-
-private
-
- -

Send a Daikin 152-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRDaikin152 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
-
-
- -
-
- -

◆ daikin160()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin160 (IRDaikin160ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv 
)
-
-private
-
- -

Send a Daikin 160-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRDaikin160 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
-
-
- -
-
- -

◆ daikin176()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin176 (IRDaikin176ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingh_t swingh 
)
-
-private
-
- -

Send a Daikin 176-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRDaikin176 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swinghThe horizontal swing setting.
-
-
- -
-
- -

◆ daikin2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin2 (IRDaikin2ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool light,
const bool econo,
const bool filter,
const bool clean,
const bool beep,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Daikin2 A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - - - - - -
[in,out]acA Ptr to an IRDaikin2 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]econoRun the device in economical mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]beepEnable/Disable beeps when receiving IR messages.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ daikin216()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin216 (IRDaikin216ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo 
)
-
-private
-
- -

Send a Daikin 216-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRDaikin216 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
-
-
- -
-
- -

◆ daikin64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::daikin64 (IRDaikin64ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool quiet,
const bool turbo,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Daikin 64-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - -
[in,out]acA Ptr to an IRDaikin64 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ delonghiac()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::delonghiac (IRDelonghiAcac,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const bool turbo,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Delonghi A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRDelonghiAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]turboRun the device in turbo/powerful mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ ecoclim()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::ecoclim (IREcoclimAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send an EcoClim A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IREcoclimAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ electra()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::electra (IRElectraAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool lighttoggle,
const bool clean 
)
-
-private
-
- -

Send an Electra A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - -
[in,out]acA Ptr to an IRElectraAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lighttoggleShould we toggle the LED/Display?
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
-
-
- -
-
- -

◆ fanspeedToString()

- -
-
- - - - - -
- - - - - - - - -
String IRac::fanspeedToString (const stdAc::fanspeed_t speed)
-
-static
-
- -

Convert the supplied fan speed enum into the appropriate String.

-
Parameters
- - -
[in]speedThe enum to be converted.
-
-
-
Returns
The equivalent String for the locale.
- -
-
- -

◆ fujitsu()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::fujitsu (IRFujitsuACac,
const fujitsu_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool econo,
const bool filter,
const bool clean,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Fujitsu A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - - - - -
[in,out]acA Ptr to an IRFujitsuAC object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]sleepNr. of minutes for sleep mode. <= 0 is Off, > 0 is on.
-
-
- -
-
- -

◆ getState()

- -
-
- - - - - - - - -
stdAc::state_t IRac::getState (void )
-
- -

Get the current internal A/C climate state.

-
Returns
A Ptr to a state containing the current (to be sent) settings.
- -
-
- -

◆ getStatePrev()

- -
-
- - - - - - - - -
stdAc::state_t IRac::getStatePrev (void )
-
- -

Get the previous internal A/C climate state that should have already been sent to the device. i.e. What the A/C unit should already be set to.

-
Returns
A Ptr to a state containing the previously sent settings.
- -
-
- -

◆ goodweather()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::goodweather (IRGoodweatherAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool light,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Goodweather A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRGoodweatherAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ gree()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::gree (IRGreeACac,
const gree_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool light,
const bool clean,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Gree A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRGreeAC object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ haier()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::haier (IRHaierACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool filter,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Haier A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRGreeAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ haierYrwo2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::haierYrwo2 (IRHaierACYRW02ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool filter,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Haier YRWO2 A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRHaierACYRW02 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ handleToggles()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
stdAc::state_t IRac::handleToggles (const stdAc::state_t desired,
const stdAc::state_tprev = NULL 
)
-
-staticprivate
-
- -

Create a new state base on desired & previous states but handle any state changes for options that need to be toggled.

-
Parameters
- - - -
[in]desiredThe state_t structure describing the desired a/c state.
[in]prevA Ptr to the previous state_t structure.
-
-
-
Returns
A stdAc::state_t with the needed settings.
- -
-
- -

◆ hasStateChanged()

- -
-
- - - - - - - - -
bool IRac::hasStateChanged (void )
-
- -

Check if the internal state has changed from what was previously sent.

-
Note
The comparison excludes the clock.
-
Returns
True if it has changed, False if not.
- -
-
- -

◆ hitachi()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::hitachi (IRHitachiAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh 
)
-
-private
-
- -

Send a Hitachi A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRHitachiAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
-
-
- -
-
- -

◆ hitachi1()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::hitachi1 (IRHitachiAc1ac,
const hitachi_ac1_remote_model_t model,
const bool on,
const bool power_toggle,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool swing_toggle,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Hitachi1 A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRHitachiAc1 object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]power_toggleThe power toggle setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]swing_toggleThe swing_toggle setting.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
-
Note
The sleep mode used is the "Sleep 2" setting.
- -
-
- -

◆ hitachi344()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::hitachi344 (IRHitachiAc344ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh 
)
-
-private
-
- -

Send a Hitachi 344-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRHitachiAc344 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
-
-
- -
-
- -

◆ hitachi424()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::hitachi424 (IRHitachiAc424ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv 
)
-
-private
-
- -

Send a Hitachi 424-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRHitachiAc424 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
-
-
- -
-
- -

◆ initState() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void IRac::initState (stdAc::state_tstate)
-
-static
-
- -

Initialise the given state with the supplied settings.

-
Parameters
- - -
[out]stateA Ptr to where the settings will be stored.
-
-
-
Note
Sets all the parameters to reasonable base/automatic defaults.
- -
-
- -

◆ initState() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::initState (stdAc::state_tstate,
const decode_type_t vendor,
const int16_t model,
const bool power,
const stdAc::opmode_t mode,
const float degrees,
const bool celsius,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool econo,
const bool light,
const bool filter,
const bool clean,
const bool beep,
const int16_t sleep,
const int16_t clock 
)
-
-static
-
- -

Initialise the given state with the supplied settings.

-
Parameters
- - - - - - - - - - - - - - - - - - - - -
[out]stateA Ptr to where the settings will be stored.
[in]vendorThe vendor/protocol type.
[in]modelThe A/C model if applicable.
[in]powerThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]beepEnable/Disable beeps when receiving IR messages.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on. Some devices it is the nr. of mins to run for. Others it may be the time to enter/exit sleep mode. i.e. Time in Nr. of mins since midnight.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ isProtocolSupported()

- -
-
- - - - - -
- - - - - - - - -
bool IRac::isProtocolSupported (const decode_type_t protocol)
-
-static
-
- -

Is the given protocol supported by the IRac class?

-
Parameters
- - -
[in]protocolThe vendor/protocol type.
-
-
-
Returns
true if the protocol is supported by this class, otherwise false.
- -
-
- -

◆ kelvinator()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::kelvinator (IRKelvinatorACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool light,
const bool filter,
const bool clean 
)
-
-private
-
- -

Send a Kelvinator A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRKelvinatorAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. XFan, dry filters etc
-
-
- -
-
- -

◆ lg()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::lg (IRLgAcac,
const lg_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan 
)
-
-private
-
- -

Send a LG A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRLgAc object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
-
-
- -
-
- -

◆ markAsSent()

- -
-
- - - - - - - - -
void IRac::markAsSent (void )
-
- -

Update the previous state to the current one.

- -
-
- -

◆ midea()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::midea (IRMideaACac,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool econo,
const bool light,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Midea A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRMideaAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboToggle the device's turbo/powerful mode.
[in]econoToggle the device's economical mode.
[in]lightToggle the LED/Display mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
-
Note
On Danby A/C units, swingv controls the Ion Filter instead.
- -
-
- -

◆ mitsubishi()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::mitsubishi (IRMitsubishiACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Mitsubishi A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - -
[in,out]acA Ptr to an IRMitsubishiAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
-
Note
Clock can only be set in 10 minute increments. i.e. % 10.
- -
-
- -

◆ mitsubishi112()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::mitsubishi112 (IRMitsubishi112ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet 
)
-
-private
-
- -

Send a Mitsubishi 112-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRMitsubishi112 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
-
-
- -
-
- -

◆ mitsubishi136()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::mitsubishi136 (IRMitsubishi136ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool quiet 
)
-
-private
-
- -

Send a Mitsubishi 136-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRMitsubishi136 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]quietRun the device in quiet/silent mode.
-
-
- -
-
- -

◆ mitsubishiHeavy152()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::mitsubishiHeavy152 (IRMitsubishiHeavy152Acac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool econo,
const bool filter,
const bool clean,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Mitsubishi Heavy 152-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - - -
[in,out]acA Ptr to an IRMitsubishiHeavy152Ac object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ mitsubishiHeavy88()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::mitsubishiHeavy88 (IRMitsubishiHeavy88Acac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool econo,
const bool clean 
)
-
-private
-
- -

Send a Mitsubishi Heavy 88-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - -
[in,out]acA Ptr to an IRMitsubishiHeavy88Ac object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
-
-
- -
-
- -

◆ neoclima()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::neoclima (IRNeoclimaAcac,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool econo,
const bool light,
const bool filter,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Neoclima A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - - -
[in,out]acA Ptr to an IRNeoclimaAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ opmodeToString()

- -
-
- - - - - -
- - - - - - - - -
String IRac::opmodeToString (const stdAc::opmode_t mode)
-
-static
-
- -

Convert the supplied operation mode into the appropriate String.

-
Parameters
- - -
[in]modeThe enum to be converted.
-
-
-
Returns
The equivalent String for the locale.
- -
-
- -

◆ panasonic()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::panasonic (IRPanasonicAcac,
const panasonic_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool filter,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Panasonic A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRPanasonicAc object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
- -

◆ panasonic32()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::panasonic32 (IRPanasonicAc32ac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh 
)
-
-private
-
- -

Send a Panasonic A/C message with the supplied settings.

-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRPanasonicAc32 object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
-
-
- -
-
- -

◆ samsung()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::samsung (IRSamsungAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool quiet,
const bool turbo,
const bool light,
const bool filter,
const bool clean,
const bool beep,
const bool prevpower = true,
const bool forcepower = true 
)
-
-private
-
- -

Send a Samsung A/C message with the supplied settings.

-
Note
Multiple IR messages may be generated & sent.
-
Parameters
- - - - - - - - - - - - - - - -
[in,out]acA Ptr to an IRSamsungAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]beepEnable/Disable beeps when receiving IR messages.
[in]prevpowerThe power setting from the previous A/C state.
[in]forcepowerDo we force send the special power message?
-
-
- -
-
- -

◆ sanyo()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::sanyo (IRSanyoAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool beep,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Toshiba A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRSanyoAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]beepEnable/Disable beeps when receiving IR messages.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ sendAc() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRac::sendAc (const decode_type_t vendor,
const int16_t model,
const bool power,
const stdAc::opmode_t mode,
const float degrees,
const bool celsius,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool quiet,
const bool turbo,
const bool econo,
const bool light,
const bool filter,
const bool clean,
const bool beep,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
- -

Send A/C message for a given device using common A/C settings.

-
Parameters
- - - - - -
[in]vendorThe vendor/protocol type.
[in]modelThe A/C model if applicable.
[in]powerThe power setting.
[in]modeThe operation mode setting.
-
-
-
Note
Changing mode from "Off" to something else does NOT turn on a device. You need to use power for that.
-
Parameters
- - - - -
[in]degreesThe temperature setting in degrees.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]fanThe speed setting for the fan.
-
-
-
Note
The following are all "if supported" by the underlying A/C classes.
-
Parameters
- - - - - - - - - - - - -
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]quietRun the device in quiet/silent mode.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
[in]beepEnable/Disable beeps when receiving IR messages.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on. Some devices it is the nr. of mins to run for. Others it may be the time to enter/exit sleep mode. i.e. Time in Nr. of mins since midnight.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
-
Returns
True, if accepted/converted/attempted etc. False, if unsupported.
- -
-
- -

◆ sendAc() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool IRac::sendAc (const stdAc::state_t desired,
const stdAc::state_tprev = NULL 
)
-
- -

Send A/C message for a given device using state_t structures.

-
Parameters
- - - -
[in]desiredThe state_t structure describing the desired new ac state
[in]prevA Ptr to the state_t structure containing the previous state
-
-
-
Note
Changing mode from "Off" to something else does NOT turn on a device. You need to use power for that.
-
Returns
True, if accepted/converted/attempted etc. False, if unsupported.
- -
-
- -

◆ sendAc() [3/3]

- -
-
- - - - - - - - -
bool IRac::sendAc (void )
-
- -

Send an A/C message based soley on our internal state.

-
Returns
True, if accepted/converted/attempted. False, if unsupported.
- -
-
- -

◆ sharp()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::sharp (IRSharpAcac,
const sharp_ac_remote_model_t model,
const bool on,
const bool prev_power,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool light,
const bool filter,
const bool clean 
)
-
-private
-
- -

Send a Sharp A/C message with the supplied settings.

-
Note
Multiple IR messages may be generated & sent.
-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRSharpAc object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]prev_powerThe power setting from the previous A/C state.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]cleanTurn on the self-cleaning mode. e.g. Mould, dry filters etc
-
-
- -
-
- -

◆ strToBool()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool IRac::strToBool (const char * str,
const bool def = false 
)
-
-static
-
- -

Convert the supplied str into the appropriate boolean value.

-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe boolean value to return if no conversion was possible.
-
-
-
Returns
The equivalent boolean value.
- -
-
- -

◆ strToFanspeed()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
stdAc::fanspeed_t IRac::strToFanspeed (const char * str,
const stdAc::fanspeed_t def = stdAc::fanspeed_t::kAuto 
)
-
-static
-
- -

Convert the supplied str into the appropriate enum.

-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe enum to return if no conversion was possible.
-
-
-
Returns
The equivalent enum.
- -
-
- -

◆ strToModel()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int16_t IRac::strToModel (const char * str,
const int16_t def = -1 
)
-
-static
-
- -

Convert the supplied str into the appropriate enum.

-
Note
Assumes str is the model code or an integer >= 1.
-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe enum to return if no conversion was possible.
-
-
-
Returns
The equivalent enum.
- -
-
- -

◆ strToOpmode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
stdAc::opmode_t IRac::strToOpmode (const char * str,
const stdAc::opmode_t def = stdAc::opmode_t::kAuto 
)
-
-static
-
- -

Convert the supplied str into the appropriate enum.

-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe enum to return if no conversion was possible.
-
-
-
Returns
The equivalent enum.
- -
-
- -

◆ strToSwingH()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
stdAc::swingh_t IRac::strToSwingH (const char * str,
const stdAc::swingh_t def = stdAc::swingh_t::kOff 
)
-
-static
-
- -

Convert the supplied str into the appropriate enum.

-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe enum to return if no conversion was possible.
-
-
-
Returns
The equivalent enum.
- -
-
- -

◆ strToSwingV()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
stdAc::swingv_t IRac::strToSwingV (const char * str,
const stdAc::swingv_t def = stdAc::swingv_t::kOff 
)
-
-static
-
- -

Convert the supplied str into the appropriate enum.

-
Parameters
- - - -
[in]strA Ptr to a C-style string to be converted.
[in]defThe enum to return if no conversion was possible.
-
-
-
Returns
The equivalent enum.
- -
-
- -

◆ swinghToString()

- -
-
- - - - - -
- - - - - - - - -
String IRac::swinghToString (const stdAc::swingh_t swingh)
-
-static
-
- -

Convert the supplied enum into the appropriate String.

-
Parameters
- - -
[in]swinghThe enum to be converted.
-
-
-
Returns
The equivalent String for the locale.
- -
-
- -

◆ swingvToString()

- -
-
- - - - - -
- - - - - - - - -
String IRac::swingvToString (const stdAc::swingv_t swingv)
-
-static
-
- -

Convert the supplied enum into the appropriate String.

-
Parameters
- - -
[in]swingvThe enum to be converted.
-
-
-
Returns
The equivalent String for the locale.
- -
-
- -

◆ tcl112()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::tcl112 (IRTcl112Acac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool light,
const bool econo,
const bool filter 
)
-
-private
-
- -

Send a TCL 112-bit A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRTcl112Ac object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]econoRun the device in economical mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
-
-
- -
-
- -

◆ technibel()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::technibel (IRTechnibelAcac,
const bool on,
const stdAc::opmode_t mode,
const bool celsius,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Technibel A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRTechnibelAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]celsiusTemperature units. True is Celsius, False is Fahrenheit.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ teco()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::teco (IRTecoAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool light,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Teco A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRTecoAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]lightTurn on the LED/Display mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ toshiba()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::toshiba (IRToshibaACac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool econo 
)
-
-private
-
- -

Send a Toshiba A/C message with the supplied settings.

-
Parameters
- - - - - - - - - -
[in,out]acA Ptr to an IRToshibaAC object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
-
-
- -
-
- -

◆ transcold()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::transcold (IRTranscoldAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh 
)
-
-private
-
- -

Send a Transcold A/C message with the supplied settings.

-
Note
May result in multiple messages being sent.
-
Parameters
- - - - - - - - -
[in,out]acA Ptr to an IRTranscoldAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
-
-
-
Note
-1 is Off, >= 0 is on.
- -
-
- -

◆ trotec()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::trotec (IRTrotecESPac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Trotec A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRTrotecESP object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ truma()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::truma (IRTrumaAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const bool quiet 
)
-
-private
-
- -

Send a Truma A/C message with the supplied settings.

-
Parameters
- - - - - - - -
[in,out]acA Ptr to an IRTrumaAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]quietRun the device quietly if we can.
-
-
- -
-
- -

◆ vestel()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::vestel (IRVestelAcac,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool filter,
const int16_t sleep = -1,
const int16_t clock = -1,
const bool sendNormal = true 
)
-
-private
-
- -

Send a Vestel A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRVestelAc object to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]filterTurn on the (ion/pollen/etc) filter mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
[in]sendNormalDo we send a Normal settings message at all? i.e In addition to the clock/time/timer message
-
-
- -
-
- -

◆ voltas()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::voltas (IRVoltasac,
const voltas_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const stdAc::swingh_t swingh,
const bool turbo,
const bool econo,
const bool light,
const int16_t sleep = -1 
)
-
-private
-
- -

Send a Voltas A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - - -
[in,out]acA Ptr to an IRVoltas object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]swinghThe horizontal swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]econoRun the device in economical mode.
[in]lightTurn on the LED/Display mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
-
-
- -
-
- -

◆ whirlpool()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRac::whirlpool (IRWhirlpoolAcac,
const whirlpool_ac_remote_model_t model,
const bool on,
const stdAc::opmode_t mode,
const float degrees,
const stdAc::fanspeed_t fan,
const stdAc::swingv_t swingv,
const bool turbo,
const bool light,
const int16_t sleep = -1,
const int16_t clock = -1 
)
-
-private
-
- -

Send a Whirlpool A/C message with the supplied settings.

-
Parameters
- - - - - - - - - - - - -
[in,out]acA Ptr to an IRWhirlpoolAc object to use.
[in]modelThe A/C model to use.
[in]onThe power setting.
[in]modeThe operation mode setting.
[in]degreesThe temperature setting in degrees.
[in]fanThe speed setting for the fan.
[in]swingvThe vertical swing setting.
[in]turboRun the device in turbo/powerful mode.
[in]lightTurn on the LED/Display mode.
[in]sleepNr. of minutes for sleep mode. -1 is Off, >= 0 is on.
[in]clockThe time in Nr. of mins since midnight. < 0 is ignore.
-
-
- -
-
-

Member Data Documentation

- -

◆ _inverted

- -
-
- - - - - -
- - - - -
bool IRac::_inverted
-
-private
-
- -

IR LED is lit when GPIO is LOW (true) or HIGH (false)?

- -
-
- -

◆ _modulation

- -
-
- - - - - -
- - - - -
bool IRac::_modulation
-
-private
-
- -

Is frequency modulation to be used?

- -
-
- -

◆ _pin

- -
-
- - - - - -
- - - - -
uint16_t IRac::_pin
-
-private
-
- -

The GPIO to use to transmit messages from.

- -
-
- -

◆ _prev

- -
-
- - - - - -
- - - - -
stdAc::state_t IRac::_prev
-
-private
-
- -

The state we expect the device to currently be in.

- -
-
- -

◆ next

- -
-
- - - - -
stdAc::state_t IRac::next
-
- -

The state we want the device to be in after we send.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.map deleted file mode 100644 index 2ea7b14c7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.md5 deleted file mode 100644 index 967a367b6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ee790889d0070a5bbe071b50dd75d157 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.png deleted file mode 100644 index ed8ea1ee9..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRac__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv-members.html deleted file mode 100644 index ea1151bf4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv-members.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRrecv Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_bits_ptr, uint8_t *result_ptr, const bool use_bits, const uint16_t remaining, const uint16_t required, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)IRrecvprivate
_timer_numIRrecvprivate
_toleranceIRrecvprivate
_unknown_thresholdIRrecvprivate
_validTolerance(const uint8_t percentage)IRrecvprivate
compare(const uint16_t oldval, const uint16_t newval)IRrecvprivate
copyIrParams(volatile irparams_t *src, irparams_t *dst)IRrecvprivate
crudeNoiseFilter(decode_results *results, const uint16_t floor=0)IRrecvprivate
decode(decode_results *results, irparams_t *save=NULL, uint8_t max_skip=0, uint16_t noise_floor=0)IRrecv
decodeAirwell(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAirwellBits, const bool strict=true)IRrecvprivate
decodeAiwaRCT501(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAiwaRcT501Bits, const bool strict=true)IRrecvprivate
decodeAmcor(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAmcorBits, const bool strict=true)IRrecvprivate
decodeArgo(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kArgoBits, const bool strict=true)IRrecvprivate
decodeCarrierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAcBits, const bool strict=true)IRrecvprivate
decodeCarrierAC40(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc40Bits, const bool strict=true)IRrecvprivate
decodeCarrierAC64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc64Bits, const bool strict=true)IRrecvprivate
decodeCOOLIX(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoolixBits, const bool strict=true)IRrecvprivate
decodeCoronaAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoronaAcBitsShort, const bool strict=true)IRrecvprivate
decodeDaikin(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikinBits, const bool strict=true)IRrecvprivate
decodeDaikin128(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin128Bits, const bool strict=true)IRrecvprivate
decodeDaikin152(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin152Bits, const bool strict=true)IRrecvprivate
decodeDaikin160(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin160Bits, const bool strict=true)IRrecvprivate
decodeDaikin176(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin176Bits, const bool strict=true)IRrecvprivate
decodeDaikin2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin2Bits, const bool strict=true)IRrecvprivate
decodeDaikin216(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin216Bits, const bool strict=true)IRrecvprivate
decodeDaikin64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin64Bits, const bool strict=true)IRrecvprivate
decodeDelonghiAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDelonghiAcBits, const bool strict=true)IRrecvprivate
decodeDenon(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDenonBits, const bool strict=true)IRrecvprivate
decodeDISH(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDishBits, const bool strict=true)IRrecvprivate
decodeDoshisha(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDoshishaBits, const bool strict=true)IRrecvprivate
decodeEcoclim(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEcoclimBits, const bool strict=true)IRrecvprivate
decodeElectraAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kElectraAcBits, const bool strict=true)IRrecvprivate
decodeElitescreens(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEliteScreensBits, const bool strict=true)IRrecvprivate
decodeEpson(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEpsonBits, const bool strict=true)IRrecvprivate
decodeFujitsuAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kFujitsuAcBits, const bool strict=false)IRrecvprivate
decodeGICable(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGicableBits, const bool strict=true)IRrecvprivate
decodeGoodweather(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGoodweatherBits, const bool strict=true)IRrecvprivate
decodeGree(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGreeBits, const bool strict=true)IRrecvprivate
decodeHaierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACBits, const bool strict=true)IRrecvprivate
decodeHaierACYRW02(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACYRW02Bits, const bool strict=true)IRrecvprivate
decodeHash(decode_results *results)IRrecvprivate
decodeHitachiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAcBits, const bool strict=true, const bool MSBfirst=true)IRrecvprivate
decodeHitachiAC1(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc1Bits, const bool strict=true)IRrecvprivate
decodeHitachiAc3(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc3Bits, const bool strict=true)IRrecvprivate
decodeHitachiAc424(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc424Bits, const bool strict=true)IRrecvprivate
decodeInax(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kInaxBits, const bool strict=true)IRrecvprivate
decodeJVC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kJvcBits, const bool strict=true)IRrecvprivate
decodeKelvinator(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kKelvinatorBits, const bool strict=true)IRrecvprivate
decodeLasertag(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLasertagBits, const bool strict=true)IRrecvprivate
decodeLegoPf(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLegoPfBits, const bool strict=true)IRrecvprivate
decodeLG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLgBits, const bool strict=false)IRrecvprivate
decodeLutron(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLutronBits, const bool strict=true)IRrecvprivate
decodeMagiQuest(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMagiquestBits, const bool strict=true)IRrecvprivate
decodeMetz(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMetzBits, const bool strict=true)IRrecvprivate
decodeMidea(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMideaBits, const bool strict=true)IRrecvprivate
decodeMidea24(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMidea24Bits, const bool strict=true)IRrecvprivate
decodeMilestag2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMilesTag2ShotBits, const bool strict=true)IRrecvprivate
decodeMirage(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMirageBits, const bool strict=true)IRrecvprivate
decodeMitsubishi(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)IRrecvprivate
decodeMitsubishi112(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi112Bits, const bool strict=true)IRrecvprivate
decodeMitsubishi136(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi136Bits, const bool strict=true)IRrecvprivate
decodeMitsubishi2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)IRrecvprivate
decodeMitsubishiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiACBits, const bool strict=false)IRrecvprivate
decodeMitsubishiHeavy(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiHeavy152Bits, const bool strict=true)IRrecvprivate
decodeMultibrackets(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMultibracketsBits, const bool strict=true)IRrecvprivate
decodeMWM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=24, const bool strict=true)IRrecvprivate
decodeNEC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNECBits, const bool strict=true)IRrecvprivate
decodeNeoclima(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNeoclimaBits, const bool strict=true)IRrecvprivate
decodeNikai(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNikaiBits, const bool strict=true)IRrecvprivate
decodePanasonic(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicBits, const bool strict=false, const uint32_t manufacturer=kPanasonicManufacturer)IRrecvprivate
decodePanasonicAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAcBits, const bool strict=true)IRrecvprivate
decodePanasonicAC32(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAc32Bits, const bool strict=true)IRrecvprivate
decodePioneer(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPioneerBits, const bool strict=true)IRrecvprivate
decodeRC5(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC5XBits, const bool strict=true)IRrecvprivate
decodeRC6(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC6Mode0Bits, const bool strict=false)IRrecvprivate
decodeRCMM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRCMMBits, const bool strict=false)IRrecvprivate
decodeSAMSUNG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungBits, const bool strict=true)IRrecvprivate
decodeSamsung36(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsung36Bits, const bool strict=true)IRrecvprivate
decodeSamsungAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungAcBits, const bool strict=true)IRrecvprivate
decodeSanyoAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoAcBits, const bool strict=true)IRrecvprivate
decodeSanyoLC7461(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoLC7461Bits, const bool strict=true)IRrecvprivate
decodeSharp(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpBits, const bool strict=true, const bool expansion=true)IRrecvprivate
decodeSharpAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpAcBits, const bool strict=true)IRrecvprivate
decodeSony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSonyMinBits, const bool strict=false)IRrecvprivate
decodeSymphony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSymphonyBits, const bool strict=true)IRrecvprivate
decodeTechnibelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTechnibelAcBits, const bool strict=true)IRrecvprivate
decodeTeco(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTecoBits, const bool strict=false)IRrecvprivate
decodeToshibaAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kToshibaACBits, const bool strict=true)IRrecvprivate
decodeTranscold(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTranscoldBits, const bool strict=true)IRrecvprivate
decodeTrotec(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrotecBits, const bool strict=true)IRrecvprivate
decodeTruma(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrumaBits, const bool strict=true)IRrecvprivate
decodeVestelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVestelAcBits, const bool strict=true)IRrecvprivate
decodeVoltas(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVoltasBits, const bool strict=true)IRrecvprivate
decodeWhirlpoolAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhirlpoolAcBits, const bool strict=true)IRrecvprivate
decodeWhynter(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhynterBits, const bool strict=true)IRrecvprivate
decodeXmp(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kXmpBits, const bool strict=true)IRrecvprivate
decodeZepeal(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kZepealBits, const bool strict=true)IRrecvprivate
disableIRIn(void)IRrecv
enableIRIn(const bool pullup=false)IRrecv
getBufSize(void)IRrecv
getRClevel(decode_results *results, uint16_t *offset, uint16_t *used, uint16_t bitTime, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const uint16_t delta=0, const uint8_t maxwidth=3)IRrecvprivate
getTolerance(void)IRrecv
irparams_saveIRrecvprivate
IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)IRrecvexplicit
IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false)IRrecvexplicit
match(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)IRrecv
matchAtLeast(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)IRrecvprivate
matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbytes, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)IRrecvprivate
matchData(volatile uint16_t *data_ptr, const uint16_t nbits, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)IRrecvprivate
matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)IRrecvprivate
matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)IRrecvprivate
matchGenericConstBitTime(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t one, const uint32_t zero, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)IRrecvprivate
matchManchester(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t clock_period, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)IRrecvprivate
matchManchesterData(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)IRrecvprivate
matchMark(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)IRrecv
matchMarkRange(const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)IRrecv
matchSpace(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)IRrecv
matchSpaceRange(const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)IRrecv
resume(void)IRrecv
setTolerance(const uint8_t percent=kTolerance)IRrecv
setUnknownThreshold(const uint16_t length)IRrecv
ticksHigh(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)IRrecvprivate
ticksLow(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)IRrecvprivate
~IRrecv(void)IRrecv
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv.html deleted file mode 100644 index 68c70f302..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv.html +++ /dev/null @@ -1,8079 +0,0 @@ - - - - - - - -IRremoteESP8266: IRrecv Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for receiving IR messages. - More...

- -

#include <IRrecv.h>

-
-Collaboration diagram for IRrecv:
-
-
Collaboration graph
- - - - -
[legend]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 IRrecv (const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)
 Class constructor Args: More...
 
 IRrecv (const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false)
 
 ~IRrecv (void)
 Class destructor Cleans up after the object is no longer needed. e.g. Frees up all memory used by the various buffers, and disables any timers or interrupts used. More...
 
void setTolerance (const uint8_t percent=kTolerance)
 Set the base tolerance percentage for matching incoming IR messages. More...
 
uint8_t getTolerance (void)
 Get the base tolerance percentage for matching incoming IR messages. More...
 
bool decode (decode_results *results, irparams_t *save=NULL, uint8_t max_skip=0, uint16_t noise_floor=0)
 Decodes the received IR message. If the interrupt state is saved, we will immediately resume waiting for the next IR message to avoid missing messages. More...
 
void enableIRIn (const bool pullup=false)
 Set up and (re)start the IR capture mechanism. More...
 
void disableIRIn (void)
 Stop collection of any received IR data. Disable any timers and interrupts. More...
 
void resume (void)
 Resume collection of received IR data. More...
 
uint16_t getBufSize (void)
 Obtain the maximum number of entries possible in the capture buffer. i.e. It's size. More...
 
void setUnknownThreshold (const uint16_t length)
 Set the minimum length we will consider for reporting UNKNOWN message types. More...
 
bool match (const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
 Check if we match a pulse(measured) with the desired within +/-tolerance percent and/or +/- a fixed delta range. More...
 
bool matchMark (const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
 Check if we match a mark signal(measured) with the desired within +/-tolerance percent, after an expected is excess is added. More...
 
bool matchMarkRange (const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)
 Check if we match a mark signal(measured) with the desired within a range (in uSeconds) either side of the desired, after an expected is excess is added. More...
 
bool matchSpace (const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
 Check if we match a space signal(measured) with the desired within +/-tolerance percent, after an expected is excess is removed. More...
 
bool matchSpaceRange (const uint32_t measured, const uint32_t desired, const uint16_t range=100, const int16_t excess=kMarkExcess)
 Check if we match a space signal(measured) with the desired within a range (in uSeconds) either side of the desired, after an expected is excess is removed. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Private Member Functions

uint8_t _validTolerance (const uint8_t percentage)
 Convert the tolerance percentage into something valid. More...
 
void copyIrParams (volatile irparams_t *src, irparams_t *dst)
 Make a copy of the interrupt state & buffer data. Needed because irparams is marked as volatile, thus memcpy() isn't allowed. Only call this when you know the interrupt handlers won't modify anything. i.e. In kStopState. More...
 
uint16_t compare (const uint16_t oldval, const uint16_t newval)
 Compare two tick values. More...
 
uint32_t ticksLow (const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
 Calculate the lower bound of the nr. of ticks. More...
 
uint32_t ticksHigh (const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
 Calculate the upper bound of the nr. of ticks. More...
 
bool matchAtLeast (const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
 Check if we match a pulse(measured) of at least desired within tolerance percent and/or a fixed delta margin. More...
 
uint16_t _matchGeneric (volatile uint16_t *data_ptr, uint64_t *result_bits_ptr, uint8_t *result_ptr, const bool use_bits, const uint16_t remaining, const uint16_t required, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
 Match & decode a generic/typical IR message. The data is stored in result_bits_ptr or result_bytes_ptr depending on flag use_bits. More...
 
match_result_t matchData (volatile uint16_t *data_ptr, const uint16_t nbits, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
 Match & decode the typical data section of an IR message. The data value is stored in the least significant bits reguardless of the bit ordering requested. More...
 
uint16_t matchBytes (volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbytes, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
 Match & decode the typical data section of an IR message. The bytes are stored at result_ptr. The first byte in the result equates to the first byte encountered, and so on. More...
 
uint16_t matchGeneric (volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
 Match & decode a generic/typical <= 64bit IR message. The data is stored at result_ptr. More...
 
uint16_t matchGeneric (volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
 Match & decode a generic/typical > 64bit IR message. The bytes are stored at result_ptr. The first byte in the result equates to the first byte encountered, and so on. More...
 
uint16_t matchGenericConstBitTime (volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t one, const uint32_t zero, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
 Match & decode a generic/typical constant bit time <= 64bit IR message. The data is stored at result_ptr. More...
 
uint16_t matchManchesterData (volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
 Match & decode a Manchester Code data (<= 64bits. More...
 
uint16_t matchManchester (volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t clock_period, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
 Match & decode a Manchester Code <= 64bit IR message. The data is stored at result_ptr. More...
 
void crudeNoiseFilter (decode_results *results, const uint16_t floor=0)
 Remove or merge pulses in the capture buffer that are too short. More...
 
bool decodeHash (decode_results *results)
 Decode any arbitrary IR message into a 32-bit code value. Instead of decoding using a standard encoding scheme (e.g. Sony, NEC, RC5), the code is hashed to a 32-bit value. More...
 
bool decodeVoltas (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVoltasBits, const bool strict=true)
 Decode the supplied Voltas message. Status: STABLE / Working on real device. More...
 
bool decodeNEC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNECBits, const bool strict=true)
 Decode the supplied NEC (Renesas) message. Status: STABLE / Known good. More...
 
bool decodeArgo (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kArgoBits, const bool strict=true)
 Decode the supplied Argo message. Status: BETA / Probably works. More...
 
bool decodeSony (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSonyMinBits, const bool strict=false)
 Decode the supplied Sony/SIRC message. Status: STABLE / Should be working. strict mode is ALPHA / Untested. More...
 
bool decodeSanyoLC7461 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoLC7461Bits, const bool strict=true)
 Decode the supplied SANYO LC7461 message. Status: BETA / Probably works. More...
 
bool decodeSanyoAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoAcBits, const bool strict=true)
 Decode the supplied SanyoAc message. Status: STABLE / Reported as working. More...
 
bool decodeMitsubishi (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
 Decode the supplied Mitsubishi 16-bit message. Status: STABLE / Working. More...
 
bool decodeMitsubishi2 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
 Decode the supplied second variation of a Mitsubishi 16-bit message. Status: STABLE / Working. More...
 
bool decodeMitsubishiAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiACBits, const bool strict=false)
 Decode the supplied Mitsubish 144-bit A/C message. Status: BETA / Probably works. More...
 
bool decodeMitsubishi136 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi136Bits, const bool strict=true)
 Decode the supplied Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: STABLE / Reported as working. More...
 
bool decodeMitsubishi112 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi112Bits, const bool strict=true)
 Decode the supplied Mitsubishi/TCL 112-bit A/C message. (MITSUBISHI112, TCL112AC) Status: STABLE / Reported as working. More...
 
bool decodeMitsubishiHeavy (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiHeavy152Bits, const bool strict=true)
 Decode the supplied Mitsubishi Heavy Industries A/C message. Status: BETA / Appears to be working. Needs testing against a real device. More...
 
int16_t getRClevel (decode_results *results, uint16_t *offset, uint16_t *used, uint16_t bitTime, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const uint16_t delta=0, const uint8_t maxwidth=3)
 Gets one undecoded level at a time from the raw buffer. The RC5/6 decoding is easier if the data is broken into time intervals. E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, successive calls to getRClevel will return MARK, MARK, SPACE. offset and used are updated to keep track of the current position. More...
 
bool decodeRC5 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC5XBits, const bool strict=true)
 Decode the supplied RC-5/RC5X message. Status: RC-5 (stable), RC-5X (alpha) More...
 
bool decodeRC6 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC6Mode0Bits, const bool strict=false)
 Decode the supplied RC6 message. Status: Stable. More...
 
bool decodeRCMM (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRCMMBits, const bool strict=false)
 Decode a Philips RC-MM packet (between 12 & 32 bits) if possible. Status: STABLE / Should be working. More...
 
bool decodePanasonic (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicBits, const bool strict=false, const uint32_t manufacturer=kPanasonicManufacturer)
 Decode the supplied Panasonic message. Status: STABLE / Should be working. More...
 
bool decodeLG (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLgBits, const bool strict=false)
 Decode the supplied LG message. Status: STABLE / Working. More...
 
bool decodeInax (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kInaxBits, const bool strict=true)
 Decode the supplied Inax Toilet message. Status: Stable / Known working. More...
 
bool decodeJVC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kJvcBits, const bool strict=true)
 Decode the supplied JVC message. Status: Stable / Known working. More...
 
bool decodeSAMSUNG (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungBits, const bool strict=true)
 Decode the supplied Samsung 32-bit message. Status: STABLE. More...
 
bool decodeSamsung36 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsung36Bits, const bool strict=true)
 Decode the supplied Samsung36 message. Status: STABLE / Expected to work. More...
 
bool decodeSamsungAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungAcBits, const bool strict=true)
 Decode the supplied Samsung A/C message. Status: Stable / Known to be working. More...
 
bool decodeWhynter (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhynterBits, const bool strict=true)
 Decode the supplied Whynter message. Status: STABLE / Working. Strict mode is ALPHA. More...
 
bool decodeCOOLIX (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoolixBits, const bool strict=true)
 Decode the supplied Coolix A/C message. Status: STABLE / Known Working. More...
 
bool decodeDenon (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDenonBits, const bool strict=true)
 Decode the supplied Delonghi A/C message. Status: STABLE / Should work fine. More...
 
bool decodeDISH (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDishBits, const bool strict=true)
 Decode the supplied DISH NETWORK message. Status: ALPHA (untested and unconfirmed.) More...
 
bool decodeSharp (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpBits, const bool strict=true, const bool expansion=true)
 Decode the supplied Sharp message. Status: STABLE / Working fine. More...
 
bool decodeSharpAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpAcBits, const bool strict=true)
 Decode the supplied Sharp A/C message. Status: STABLE / Known working. More...
 
bool decodeAiwaRCT501 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAiwaRcT501Bits, const bool strict=true)
 Decode the supplied Aiwa RC T501 message. Status: BETA / Should work. More...
 
bool decodeNikai (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNikaiBits, const bool strict=true)
 Decode the supplied Nikai message. Status: STABLE / Working. More...
 
bool decodeMagiQuest (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMagiquestBits, const bool strict=true)
 Decode the supplied MagiQuest message. Status: Beta / Should work. More...
 
bool decodeKelvinator (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kKelvinatorBits, const bool strict=true)
 Decode the supplied Kelvinator message. Status: STABLE / Known working. More...
 
bool decodeDaikin (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikinBits, const bool strict=true)
 Decode the supplied Daikin 280-bit message. (DAIKIN) Status: STABLE / Reported as working. More...
 
bool decodeDaikin64 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin64Bits, const bool strict=true)
 Decode the supplied Daikin 64-bit message. (DAIKIN64) Status: Beta / Probably Working. More...
 
bool decodeDaikin128 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin128Bits, const bool strict=true)
 Decode the supplied Daikin 128-bit message. (DAIKIN128) Status: STABLE / Known Working. More...
 
bool decodeDaikin152 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin152Bits, const bool strict=true)
 Decode the supplied Daikin 152-bit message. (DAIKIN152) Status: STABLE / Known Working. More...
 
bool decodeDaikin160 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin160Bits, const bool strict=true)
 Decode the supplied Daikin 160-bit message. (DAIKIN160) Status: STABLE / Confirmed working. More...
 
bool decodeDaikin176 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin176Bits, const bool strict=true)
 Decode the supplied Daikin 176-bit message. (DAIKIN176) Status: STABLE / Expected to work. More...
 
bool decodeDaikin2 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin2Bits, const bool strict=true)
 Decode the supplied Daikin 312-bit message. (DAIKIN2) Status: STABLE / Works as expected. More...
 
bool decodeDaikin216 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin216Bits, const bool strict=true)
 Decode the supplied Daikin 216-bit message. (DAIKIN216) Status: STABLE / Should be working. More...
 
bool decodeToshibaAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kToshibaACBits, const bool strict=true)
 Decode the supplied Toshiba A/C message. Status: STABLE / Working. More...
 
bool decodeTrotec (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrotecBits, const bool strict=true)
 Decode the supplied Trotec message. Status: STABLE / Works. Untested on real devices. More...
 
bool decodeMidea (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMideaBits, const bool strict=true)
 Decode the supplied Midea message. Status: Alpha / Needs testing against a real device. More...
 
bool decodeMidea24 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMidea24Bits, const bool strict=true)
 Decode the supplied Midea24 message. Status: STABLE / Confirmed working on a real device. More...
 
bool decodeFujitsuAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kFujitsuAcBits, const bool strict=false)
 Decode the supplied Fujitsu AC IR message if possible. Status: STABLE / Working. More...
 
bool decodeLasertag (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLasertagBits, const bool strict=true)
 Decode the supplied Lasertag message. Status: BETA / Appears to be working 90% of the time. More...
 
bool decodeMilestag2 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMilesTag2ShotBits, const bool strict=true)
 Decode the supplied MilesTag2 message. Status: ALPHA / Probably works but needs testing with a real device. More...
 
bool decodeCarrierAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAcBits, const bool strict=true)
 Decode the supplied Carrier HVAC message. More...
 
bool decodeCarrierAC40 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc40Bits, const bool strict=true)
 Decode the supplied Carrier 40-bit HVAC message. Carrier HVAC messages contain only 40 bits, but it is sent three(3) times. Status: STABLE / Tested against a real device. More...
 
bool decodeCarrierAC64 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc64Bits, const bool strict=true)
 Decode the supplied Carrier 64-bit HVAC message. Status: STABLE / Known to be working. More...
 
bool decodeGoodweather (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGoodweatherBits, const bool strict=true)
 Decode the supplied Goodweather message. Status: BETA / Probably works. More...
 
bool decodeGree (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGreeBits, const bool strict=true)
 Decode the supplied Gree HVAC message. Status: STABLE / Working. More...
 
bool decodeHaierAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACBits, const bool strict=true)
 Decode the supplied Haier HSU07-HEA03 remote message. Status: STABLE / Known to be working. More...
 
bool decodeHaierACYRW02 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACYRW02Bits, const bool strict=true)
 Decode the supplied Haier YR-W02 remote A/C message. Status: BETA / Appears to be working. More...
 
bool decodeHitachiAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAcBits, const bool strict=true, const bool MSBfirst=true)
 Decode the supplied Hitachi A/C message. Status: STABLE / Expected to work. More...
 
bool decodeHitachiAC1 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc1Bits, const bool strict=true)
 
bool decodeHitachiAc3 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc3Bits, const bool strict=true)
 Decode the supplied Hitachi 15to27-byte/120to216-bit A/C message. Status: STABLE / Works fine. More...
 
bool decodeHitachiAc424 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc424Bits, const bool strict=true)
 Decode the supplied Hitachi 53-byte/424-bit A/C message. Status: STABLE / Reported as working. More...
 
bool decodeGICable (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGicableBits, const bool strict=true)
 Decode the supplied G.I. Cable message. Status: Alpha / Not tested against a real device. More...
 
bool decodeWhirlpoolAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhirlpoolAcBits, const bool strict=true)
 Decode the supplied Whirlpool A/C message. Status: STABLE / Working as intended. More...
 
bool decodeLutron (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLutronBits, const bool strict=true)
 Decode the supplied Lutron message. Status: STABLE / Working. More...
 
bool decodeElectraAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kElectraAcBits, const bool strict=true)
 Decode the supplied Electra A/C message. Status: STABLE / Known working. More...
 
bool decodePanasonicAC (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAcBits, const bool strict=true)
 Decode the supplied Panasonic AC message. Status: STABLE / Works with real device(s). More...
 
bool decodePanasonicAC32 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAc32Bits, const bool strict=true)
 Decode the supplied Panasonic AC 32/16bit message. Status: STABLE / Confirmed working. More...
 
bool decodePioneer (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPioneerBits, const bool strict=true)
 Decode the supplied Pioneer message. Status: STABLE / Should be working. (Self decodes & real examples) More...
 
bool decodeMWM (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=24, const bool strict=true)
 Decode the supplied MWM message. Status: Implemented. More...
 
bool decodeVestelAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVestelAcBits, const bool strict=true)
 Decode the supplied Vestel message. Status: Alpha / Needs testing against a real device. More...
 
bool decodeTeco (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTecoBits, const bool strict=false)
 Decode the supplied Teco message. Status: STABLE / Tested. More...
 
bool decodeLegoPf (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLegoPfBits, const bool strict=true)
 Decode the supplied LEGO Power Functions message. Status: STABLE / Appears to work. More...
 
bool decodeNeoclima (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNeoclimaBits, const bool strict=true)
 Decode the supplied Neoclima message. Status: STABLE / Known working. More...
 
bool decodeAmcor (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAmcorBits, const bool strict=true)
 Decode the supplied Amcor HVAC message. Status: STABLE / Reported as working. More...
 
bool decodeEpson (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEpsonBits, const bool strict=true)
 Decode the supplied Epson message. Status: Beta / Probably works. More...
 
bool decodeSymphony (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSymphonyBits, const bool strict=true)
 Decode the supplied Symphony packet/message. Status: STABLE / Should be working. More...
 
bool decodeAirwell (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAirwellBits, const bool strict=true)
 Decode the supplied Airwell "Manchester code" message. More...
 
bool decodeDelonghiAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDelonghiAcBits, const bool strict=true)
 Decode the supplied Delonghi A/C message. Status: STABLE / Expected to be working. More...
 
bool decodeDoshisha (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDoshishaBits, const bool strict=true)
 Decode the supplied Doshisha message. Status: STABLE / Works on real device. More...
 
bool decodeMultibrackets (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMultibracketsBits, const bool strict=true)
 Decode the Multibrackets message. Status: BETA / Appears to be working. More...
 
bool decodeTechnibelAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTechnibelAcBits, const bool strict=true)
 Status: STABLE / Reported as working on a real device. More...
 
bool decodeCoronaAc (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoronaAcBitsShort, const bool strict=true)
 Decode the supplied CoronaAc message. Status: STABLE / Appears to be working. More...
 
bool decodeZepeal (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kZepealBits, const bool strict=true)
 Decode the supplied Zepeal message. Status: STABLE / Works on real device. More...
 
bool decodeMetz (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMetzBits, const bool strict=true)
 Decode the supplied Metz message. Status: BETA / Probably works. More...
 
bool decodeTranscold (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTranscoldBits, const bool strict=true)
 Decode the supplied Transcold A/C message. Status: STABLE / Known Working. More...
 
bool decodeMirage (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMirageBits, const bool strict=true)
 Decode the supplied Mirage message. Status: STABLE / Reported as working. More...
 
bool decodeElitescreens (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEliteScreensBits, const bool strict=true)
 Decode the supplied Elite Screens message. Status: STABLE / Confirmed working. More...
 
bool decodeEcoclim (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEcoclimBits, const bool strict=true)
 Decode the supplied EcoClim A/C message. Status: STABLE / Confirmed working on real remote. More...
 
bool decodeXmp (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kXmpBits, const bool strict=true)
 Decode the supplied XMP packet/message. Status: BETA / Probably works. More...
 
bool decodeTruma (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrumaBits, const bool strict=true)
 Decode the supplied Truma message. Status: STABLE / Confirmed working with real device. More...
 
- - - - - - - - - -

-Private Attributes

irparams_tirparams_save
 
uint8_t _tolerance
 
uint8_t _timer_num
 
uint16_t _unknown_threshold
 
-

Detailed Description

-

Class for receiving IR messages.

-

Constructor & Destructor Documentation

- -

◆ IRrecv() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IRrecv::IRrecv (const uint16_t recvpin,
const uint16_t bufsize = kRawBuf,
const uint8_t timeout = kTimeoutMs,
const bool save_buffer = false,
const uint8_t timer_num = kDefaultESP32Timer 
)
-
-explicit
-
- -

Class constructor Args:

-
Parameters
- - - - - - -
[in]recvpinThe GPIO pin the IR receiver module's data pin is connected to.
[in]bufsizeNr. of entries to have in the capture buffer. (Default: kRawBuf)
[in]timeoutNr. of milli-Seconds of no signal before we stop capturing data. (Default: kTimeoutMs)
[in]save_bufferUse a second (save) buffer to decode from. (Default: false)
[in]timer_numNr. of the ESP32 timer to use (0 to 3) (ESP32 Only)
-
-
- -
-
- -

◆ IRrecv() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IRrecv::IRrecv (const uint16_t recvpin,
const uint16_t bufsize = kRawBuf,
const uint8_t timeout = kTimeoutMs,
const bool save_buffer = false 
)
-
-explicit
-
- -
-
- -

◆ ~IRrecv()

- -
-
- - - - - - - - -
IRrecv::~IRrecv (void )
-
- -

Class destructor Cleans up after the object is no longer needed. e.g. Frees up all memory used by the various buffers, and disables any timers or interrupts used.

- -
-
-

Member Function Documentation

- -

◆ _matchGeneric()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::_matchGeneric (volatile uint16_t * data_ptr,
uint64_t * result_bits_ptr,
uint8_t * result_bytes_ptr,
const bool use_bits,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t hdrmark,
const uint32_t hdrspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t footerspace,
const bool atleast = false,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true 
)
-
-private
-
- -

Match & decode a generic/typical IR message. The data is stored in result_bits_ptr or result_bytes_ptr depending on flag use_bits.

-
Note
Values of 0 for hdrmark, hdrspace, footermark, or footerspace mean skip that requirement.
-
Parameters
- - - - - - - - - - - - - - - - - - - -
[in]data_ptrA pointer to where we are at in the capture buffer.
[out]result_bits_ptrA pointer to where to start storing the bits we decoded.
[out]result_bytes_ptrA pointer to where to start storing the bytes we decoded.
[in]use_bitsA flag indicating if we are to decode bits or bytes.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]hdrmarkNr. of uSeconds for the expected header mark signal.
[in]hdrspaceNr. of uSeconds for the expected header space signal.
[in]onemarkNr. of uSeconds in an expected mark signal for a '1' bit.
[in]onespaceNr. of uSecs in an expected space signal for a '1' bit.
[in]zeromarkNr. of uSecs in an expected mark signal for a '0' bit.
[in]zerospaceNr. of uSecs in an expected space signal for a '0' bit.
[in]footermarkNr. of uSeconds for the expected footer mark signal.
[in]footerspaceNr. of uSeconds for the expected footer space/gap signal.
[in]atleastIs the match on the footerspace a matchAtLeast or matchSpace?
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
- -
-
- -

◆ _validTolerance()

- -
-
- - - - - -
- - - - - - - - -
uint8_t IRrecv::_validTolerance (const uint8_t percentage)
-
-private
-
- -

Convert the tolerance percentage into something valid.

-
Parameters
- - -
[in]percentageAn integer percentage.
-
-
- -
-
- -

◆ compare()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::compare (const uint16_t oldval,
const uint16_t newval 
)
-
-private
-
- -

Compare two tick values.

-
Parameters
- - - -
[in]oldvalNr. of ticks.
[in]newvalNr. of ticks.
-
-
-
Returns
0 if newval is shorter, 1 if it is equal, & 2 if it is longer.
-
Note
Use a tolerance of 20%
- -
-
- -

◆ copyIrParams()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRrecv::copyIrParams (volatile irparams_tsrc,
irparams_tdst 
)
-
-private
-
- -

Make a copy of the interrupt state & buffer data. Needed because irparams is marked as volatile, thus memcpy() isn't allowed. Only call this when you know the interrupt handlers won't modify anything. i.e. In kStopState.

-
Parameters
- - - -
[in]srcPointer to an irparams_t structure to copy from.
[out]dstPointer to an irparams_t structure to copy to.
-
-
- -
-
- -

◆ crudeNoiseFilter()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void IRrecv::crudeNoiseFilter (decode_resultsresults,
const uint16_t floor = 0 
)
-
-private
-
- -

Remove or merge pulses in the capture buffer that are too short.

-
Parameters
- - - -
[in,out]resultsPtr to the decode_results we are going to filter.
[in]floorOnly allow values in the buffer large than this. (in microSeconds)
-
-
- -
-
- -

◆ decode()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decode (decode_resultsresults,
irparams_tsave = NULL,
uint8_t max_skip = 0,
uint16_t noise_floor = 0 
)
-
- -

Decodes the received IR message. If the interrupt state is saved, we will immediately resume waiting for the next IR message to avoid missing messages.

-
Note
There is a trade-off here. Saving the state means less time lost until we can receiving the next message vs. using more RAM. Choose appropriately.
-
Parameters
- - - - -
[out]resultsA PTR to where the decoded IR message will be stored.
[out]saveA PTR to an irparams_t instance in which to save the interrupt's memory/state. NULL means don't save it.
[in]max_skipMaximum Nr. of pulses at the begining of a capture we can skip when attempting to find a protocol we can successfully decode. This parameter can dramatically improve detection of protocols when there is light IR interference just before an incoming IR message, however, it comes at a steep performace price. (Default is 0. No skipping.)
-
-
-
Warning
Increasing the max_skip value will dramatically (linearly) increase the cpu time & usage to decode protocols. e.g. 0 -> 1 will be a 2x increase in cpu usage/time. 0 -> 2 will be a 3x increase etc. If you are going to do this, consider disabling protocol decoding for protocols you are not expecting.
-
Parameters
- - -
[in]noise_floorPulses below this size (in usecs) will be removed or merged prior to any decoding. This is to try to remove noise/poor readings & slightly increase the chances of a successful decode but at the cost of data fidelity & integrity. (Defaults to 0 usecs. i.e. Don't filter; which is safe!)
-
-
-
Warning
DANGER: Here Be Dragons! If you set the noise_floor value too high, it WILL break decoding of some protocols. You have been warned! Any non-zero value has the potential to cook the captured raw data i.e. The raw data is going to lie to you. It may obscure hardware, circuit, & environment issues thus making it impossible to support you accurately or confidently. Values of <= 50 usecs will probably be safe. 51 - 100 usecs might be okay. 100 - 150 usecs is "Danger, Will Robinson!". 150 - 200 usecs expect broken protocols. At 200+ usecs, you have protocols you can't decode!!
-
Returns
A boolean indicating if an IR message is ready or not.
- -
-
- -

◆ decodeAirwell()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeAirwell (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kAirwellBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Airwell "Manchester code" message.

-

Status: BETA / Appears to be working.

Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1069
- -
-
- -

◆ decodeAiwaRCT501()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeAiwaRCT501 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kAiwaRcT501Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Aiwa RC T501 message. Status: BETA / Should work.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
Note
Aiwa RC T501 appears to be a 42 bit variant of the NEC1 protocol. However, we historically (original Arduino IRremote project) treats it as a 15 bit (data) protocol. So, we expect nbits to typically be 15, and we will remove the prefix and postfix from the raw data, and use that as the result.
-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/1069
- -
-
- -

◆ decodeAmcor()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeAmcor (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kAmcorBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Amcor HVAC message. Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeArgo()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeArgo (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kArgoBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Argo message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
Note
This decoder is based soley off sendArgo(). We have no actual captures to test this against. If you have one of these units, please let us know.
- -
-
- -

◆ decodeCarrierAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeCarrierAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kCarrierAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Carrier HVAC message.

-
Note
Carrier HVAC messages contain only 32 bits, but it is sent three(3) times. i.e. normal + inverted + normal Status: BETA / Probably works.
-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeCarrierAC40()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeCarrierAC40 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kCarrierAc40Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Carrier 40-bit HVAC message. Carrier HVAC messages contain only 40 bits, but it is sent three(3) times. Status: STABLE / Tested against a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeCarrierAC64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeCarrierAC64 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kCarrierAc64Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Carrier 64-bit HVAC message. Status: STABLE / Known to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeCOOLIX()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeCOOLIX (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kCoolixBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Coolix A/C message. Status: STABLE / Known Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeCoronaAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeCoronaAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kCoronaAcBitsShort,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied CoronaAc message. Status: STABLE / Appears to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store it
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeDaikin()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikinBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 280-bit message. (DAIKIN) Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/mharizanov/Daikin-AC-remote-control-over-the-Internet/tree/master/IRremote
- -
-
- -

◆ decodeDaikin128()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin128 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin128Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 128-bit message. (DAIKIN128) Status: STABLE / Known Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/827
- -
-
- -

◆ decodeDaikin152()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin152 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin152Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 152-bit message. (DAIKIN152) Status: STABLE / Known Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/873
- -
-
- -

◆ decodeDaikin160()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin160 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin160Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 160-bit message. (DAIKIN160) Status: STABLE / Confirmed working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/731
- -
-
- -

◆ decodeDaikin176()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin176 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin176Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 176-bit message. (DAIKIN176) Status: STABLE / Expected to work.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeDaikin2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin2 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin2Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 312-bit message. (DAIKIN2) Status: STABLE / Works as expected.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeDaikin216()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin216 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin216Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 216-bit message. (DAIKIN216) Status: STABLE / Should be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/689
-
-https://github.com/danny-source/Arduino_DY_IRDaikin
- -
-
- -

◆ decodeDaikin64()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDaikin64 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDaikin64Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Daikin 64-bit message. (DAIKIN64) Status: Beta / Probably Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1064
- -
-
- -

◆ decodeDelonghiAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDelonghiAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDelonghiAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Delonghi A/C message. Status: STABLE / Expected to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1096
- -
-
- -

◆ decodeDenon()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDenon (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDenonBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Delonghi A/C message. Status: STABLE / Should work fine.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/z3t0/Arduino-IRremote/blob/master/ir_Denon.cpp
- -
-
- -

◆ decodeDISH()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDISH (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDishBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied DISH NETWORK message. Status: ALPHA (untested and unconfirmed.)

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
Note
Dishplayer is a different protocol. Typically a DISH device needs to get a command a total of at least 4 times to accept it.
-
See also
http://www.hifi-remote.com/wiki/index.php?title=Dish
-
-http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx
-
-https://github.com/marcosamarinho/IRremoteESP8266/blob/master/ir_Dish.cpp
- -
-
- -

◆ decodeDoshisha()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeDoshisha (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kDoshishaBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Doshisha message. Status: STABLE / Works on real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeEcoclim()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeEcoclim (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kEcoclimBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied EcoClim A/C message. Status: STABLE / Confirmed working on real remote.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeElectraAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeElectraAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kElectraAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Electra A/C message. Status: STABLE / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeElitescreens()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeElitescreens (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kEliteScreensBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Elite Screens message. Status: STABLE / Confirmed working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeEpson()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeEpson (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kEpsonBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Epson message. Status: Beta / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
Note
Experimental data indicates there are at least three messages (first + 2 repeats). We only require the first + a single repeat to match. This helps us distinguish it from NEC messages which are near identical.
- -
-
- -

◆ decodeFujitsuAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeFujitsuAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kFujitsuAcBits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied Fujitsu AC IR message if possible. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeGICable()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeGICable (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kGicableBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied G.I. Cable message. Status: Alpha / Not tested against a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeGoodweather()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeGoodweather (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kGoodweatherBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Goodweather message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeGree()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeGree (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kGreeBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Gree HVAC message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeHaierAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHaierAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHaierACBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Haier HSU07-HEA03 remote message. Status: STABLE / Known to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeHaierACYRW02()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHaierACYRW02 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHaierACYRW02Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Haier YR-W02 remote A/C message. Status: BETA / Appears to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeHash()

- -
-
- - - - - -
- - - - - - - - -
bool IRrecv::decodeHash (decode_resultsresults)
-
-private
-
- -

Decode any arbitrary IR message into a 32-bit code value. Instead of decoding using a standard encoding scheme (e.g. Sony, NEC, RC5), the code is hashed to a 32-bit value.

-

The algorithm: look at the sequence of MARK signals, and see if each one is shorter (0), the same length (1), or longer (2) than the previous. Do the same with the SPACE signals. Hash the resulting sequence of 0's, 1's, and 2's to a 32-bit value. This will give a unique value for each different code (probably), for most code systems.

See also
http://arcfn.com/2010/01/using-arbitrary-remotes-with-arduino.html
-
Note
This isn't a "real" decoding, just an arbitrary value. Hopefully this code is unique for each button.
- -
-
- -

◆ decodeHitachiAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHitachiAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHitachiAcBits,
const bool strict = true,
const bool MSBfirst = true 
)
-
-private
-
- -

Decode the supplied Hitachi A/C message. Status: STABLE / Expected to work.

-
Parameters
- - - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kHitachiAcBits, kHitachiAc1Bits, kHitachiAc2Bits, kHitachiAc344Bits
[in]strictFlag indicating if we should perform strict matching.
[in]MSBfirstIs the data per byte stored in MSB First (true) or LSB First order(false)?
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/417
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/453
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/1134
- -
-
- -

◆ decodeHitachiAC1()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHitachiAC1 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHitachiAc1Bits,
const bool strict = true 
)
-
-private
-
- -
-
- -

◆ decodeHitachiAc3()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHitachiAc3 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHitachiAc3Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Hitachi 15to27-byte/120to216-bit A/C message. Status: STABLE / Works fine.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This protocol is almost exactly the same as HitachiAC424 except this variant has subtle timing differences and multiple lengths. There are five(5) typical lengths: kHitachiAc3MinStateLength (Cancel Timer), kHitachiAc3MinStateLength + 2 (Change Temp), kHitachiAc3StateLength - 6 (Change Mode), kHitachiAc3StateLength - 4 (Normal), & kHitachiAc3StateLength (Set Timer)
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1060
- -
-
- -

◆ decodeHitachiAc424()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeHitachiAc424 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kHitachiAc424Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Hitachi 53-byte/424-bit A/C message. Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This protocol is almost exactly the same as HitachiAC2 except this variant has a leader section as well, and subtle timing differences. It is also in LSBF order (per byte), rather than MSBF order.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/973
-
-(Japanese Manual) https://kadenfan.hitachi.co.jp/support/raj/item/docs/ras_aj22h_a_tori.pdf
- -
-
- -

◆ decodeInax()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeInax (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kInaxBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Inax Toilet message. Status: Stable / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/706
- -
-
- -

◆ decodeJVC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeJVC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kJvcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied JVC message. Status: Stable / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
JVC repeat codes don't have a header.
-
See also
http://www.sbprojects.net/knowledge/ir/jvc.php
- -
-
- -

◆ decodeKelvinator()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeKelvinator (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kKelvinatorBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Kelvinator message. Status: STABLE / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeLasertag()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeLasertag (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kLasertagBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Lasertag message. Status: BETA / Appears to be working 90% of the time.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This protocol is pretty much just raw Manchester encoding.
-
See also
http://www.sbprojects.net/knowledge/ir/rc5.php
-
-https://en.wikipedia.org/wiki/RC-5
-
-https://en.wikipedia.org/wiki/Manchester_code
-
Todo:
Convert to using matchManchester() if we can.
- -
-
- -

◆ decodeLegoPf()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeLegoPf (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kLegoPfBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied LEGO Power Functions message. Status: STABLE / Appears to work.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeLG()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeLG (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kLgBits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied LG message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kLgBits or kLg32Bits.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
LG protocol has a repeat code which is 4 items long. Even though the protocol has 28/32 bits of data, only 24/28 bits are distinct. In transmission order, the 28/32 bits are constructed as follows: 8/12 bits of address + 16 bits of command + 4 bits of checksum.
-
-LG 32bit protocol appears near identical to the Samsung protocol. They possibly differ on how they repeat and initial HDR mark.
-
See also
https://funembedded.wordpress.com/2014/11/08/ir-remote-control-for-lg-conditioner-using-stm32f302-mcu-on-mbed-platform/
- -
-
- -

◆ decodeLutron()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeLutron (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kLutronBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Lutron message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeMagiQuest()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMagiQuest (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMagiquestBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied MagiQuest message. Status: Beta / Should work.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
MagiQuest protocol appears to be a header of 8 'zero' bits, followed by 32 bits of "wand ID" and finally 16 bits of "magnitude". Even though we describe this protocol as 56 bits, it really only has 48 bits of data that matter. In transmission order, 8 zeros + 32 wand_id + 16 magnitude.
-
See also
https://github.com/kitlaan/Arduino-IRremote/blob/master/ir_Magiquest.cpp
- -
-
- -

◆ decodeMetz()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMetz (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMetzBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Metz message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeMidea()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMidea (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMideaBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Midea message. Status: Alpha / Needs testing against a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kHitachiAcBits, kHitachiAc1Bits, kHitachiAc2Bits, kHitachiAc344Bits
[in]strictFlag indicating if we should perform strict matching.
-
-
- -
-
- -

◆ decodeMidea24()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMidea24 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMidea24Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Midea24 message. Status: STABLE / Confirmed working on a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
Note
This protocol is basically a 48-bit version of the NEC protocol with alternate bytes inverted, thus only 24 bits of real data.
-
Warning
Can't be used beyond 32 bits.
- -
-
- -

◆ decodeMilestag2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMilestag2 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMilesTag2ShotBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied MilesTag2 message. Status: ALPHA / Probably works but needs testing with a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1360
- -
-
- -

◆ decodeMirage()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMirage (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMirageBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Mirage message. Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeMitsubishi()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishi (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishiBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Mitsubishi 16-bit message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This protocol appears to have no header.
-
See also
GlobalCache's Control Tower's Mitsubishi TV data.
- -
-
- -

◆ decodeMitsubishi112()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishi112 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishi112Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Mitsubishi/TCL 112-bit A/C message. (MITSUBISHI112, TCL112AC) Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Note
Note Mitsubishi112 & Tcl112Ac are basically the same protocol. The only significant difference I can see is Mitsubishi112 has a slightly longer header mark. We will use that to determine which variant it should be. The other differences require full decoding and only only with certain settings. There are some other timing differences too, but the tolerances will overlap.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/619
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/947
- -
-
- -

◆ decodeMitsubishi136()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishi136 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishi136Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/888
- -
-
- -

◆ decodeMitsubishi2()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishi2 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishiBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied second variation of a Mitsubishi 16-bit message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/441
- -
-
- -

◆ decodeMitsubishiAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishiAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishiACBits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied Mitsubish 144-bit A/C message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
See also
https://www.analysir.com/blog/2015/01/06/reverse-engineering-mitsubishi-ac-infrared-protocol/
- -
-
- -

◆ decodeMitsubishiHeavy()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMitsubishiHeavy (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMitsubishiHeavy152Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Mitsubishi Heavy Industries A/C message. Status: BETA / Appears to be working. Needs testing against a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kMitsubishiHeavy88Bits or kMitsubishiHeavy152Bits (def).
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeMultibrackets()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMultibrackets (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kMultibracketsBits,
const bool strict = true 
)
-
-private
-
- -

Decode the Multibrackets message. Status: BETA / Appears to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeMWM()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeMWM (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = 24,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied MWM message. Status: Implemented.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This protocol is 2400 bps serial, 1 start bit (mark), 1 stop bit (space), no parity
- -
-
- -

◆ decodeNEC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeNEC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kNECBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied NEC (Renesas) message. Status: STABLE / Known good.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
NEC protocol has three variants/forms. Normal: an 8 bit address & an 8 bit command in 32 bit data form. i.e. address + inverted(address) + command + inverted(command) Extended: a 16 bit address & an 8 bit command in 32 bit data form. i.e. address + command + inverted(command) Repeat: a 0-bit code. i.e. No data bits. Just the header + footer.
-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
- -
-
- -

◆ decodeNeoclima()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeNeoclima (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kNeoclimaBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Neoclima message. Status: STABLE / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeNikai()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeNikai (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kNikaiBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Nikai message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
- -
-
- -

◆ decodePanasonic()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodePanasonic (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kPanasonicBits,
const bool strict = false,
const uint32_t manufacturer = kPanasonicManufacturer 
)
-
-private
-
- -

Decode the supplied Panasonic message. Status: STABLE / Should be working.

-
Parameters
- - - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]manufacturerA 16-bit manufacturer code. e.g. 0x4004 is Panasonic
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Warning
Results to be used with sendPanasonic64(), not sendPanasonic().
-
Note
Panasonic 48-bit protocol is a modified version of Kaseikyo.
-
See also
http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?2615
-
-http://www.hifi-remote.com/wiki/index.php?title=Panasonic
- -
-
- -

◆ decodePanasonicAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodePanasonicAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kPanasonicAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Panasonic AC message. Status: STABLE / Works with real device(s).

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodePanasonicAC32()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodePanasonicAC32 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kPanasonicAc32Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Panasonic AC 32/16bit message. Status: STABLE / Confirmed working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically: kPanasonicAc32Bits or kPanasonicAc32Bits/2
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1307
-
Note
Protocol has two known configurations: (long) Two sections of identical 32 bit data block pairs. ie. (32+32)+(32+32)=128 or (short) A single section of 3 x identical 32 bit data blocks i.e. (32+32+32)=96 Each data block also has a pair of 8 bits repeated identical bits. e.g. (8+8)+(8+8)=32
-

So each long version really only has 32 unique bits, and the short version really only has 16 unique bits.

- -
-
- -

◆ decodePioneer()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodePioneer (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kPioneerBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Pioneer message. Status: STABLE / Should be working. (Self decodes & real examples)

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeRC5()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeRC5 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kRC5XBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied RC-5/RC5X message. Status: RC-5 (stable), RC-5X (alpha)

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
The 'toggle' bit is included as the 6th (MSB) address bit, the MSB of data, & in the count of bits decoded.
-
Todo:
Serious testing of the RC-5X and strict aspects needs to be done.
- -
-
- -

◆ decodeRC6()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeRC6 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kRC6Mode0Bits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied RC6 message. Status: Stable.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Todo:
Testing of the strict compliance aspects.
- -
-
- -

◆ decodeRCMM()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeRCMM (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kRCMMBits,
const bool strict = false 
)
-
-private
-
- -

Decode a Philips RC-MM packet (between 12 & 32 bits) if possible. Status: STABLE / Should be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeSAMSUNG()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSAMSUNG (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSamsungBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Samsung 32-bit message. Status: STABLE.

-
Note
Samsung messages whilst 32 bits in size, only contain 16 bits of distinct data. e.g. In transmition order: customer_byte + customer_byte(same) + address_byte + invert(address_byte)
-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
LG 32bit protocol appears near identical to the Samsung protocol. They differ on their compliance criteria and how they repeat.
-
See also
http://elektrolab.wz.cz/katalog/samsung_protocol.pdf
- -
-
- -

◆ decodeSamsung36()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSamsung36 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSamsung36Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Samsung36 message. Status: STABLE / Expected to work.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/621
- -
-
- -

◆ decodeSamsungAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSamsungAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSamsungAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Samsung A/C message. Status: Stable / Known to be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/505
- -
-
- -

◆ decodeSanyoAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSanyoAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSanyoAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied SanyoAc message. Status: STABLE / Reported as working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1211
- -
-
- -

◆ decodeSanyoLC7461()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSanyoLC7461 (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSanyoLC7461Bits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied SANYO LC7461 message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
Based on @marcosamarinho's work. This protocol uses the NEC protocol. However, data is formatted as : address(13 bits), !address, command (8 bits), !command. According with LIRC, this protocol is used on Sanyo, Aiwa and Chinon Information for this protocol is available at the Sanyo LC7461 datasheet.
-
See also
http://slydiman.narod.ru/scr/kb/sanyo.htm
-
-https://github.com/marcosamarinho/IRremoteESP8266/blob/master/ir_Sanyo.cpp
-
-http://pdf.datasheetcatalog.com/datasheet/sanyo/LC7461.pdf
- -
-
- -

◆ decodeSharp()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSharp (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSharpBits,
const bool strict = true,
const bool expansion = true 
)
-
-private
-
- -

Decode the supplied Sharp message. Status: STABLE / Working fine.

-
Parameters
- - - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
[in]expansionShould we expect the expansion bit to be set. Default is true.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
This procedure returns a value suitable for use in sendSharpRaw().
-
Todo:
Need to ensure capture of the inverted message as it can be missed due to the interrupt timeout used to detect an end of message. Several compliance checks are disabled until that is resolved.
- -
-
- -

◆ decodeSharpAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSharpAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSharpAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Sharp A/C message. Status: STABLE / Known working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/638
-
-https://github.com/ToniA/arduino-heatpumpir/blob/master/SharpHeatpumpIR.cpp
- -
-
- -

◆ decodeSony()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSony (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSonyMinBits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied Sony/SIRC message. Status: STABLE / Should be working. strict mode is ALPHA / Untested.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
Note
SONY protocol, SIRC (Serial Infra-Red Control) can be 12, 15, or 20 bits long.
- -
-
- -

◆ decodeSymphony()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeSymphony (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kSymphonyBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Symphony packet/message. Status: STABLE / Should be working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeTechnibelAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeTechnibelAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kTechnibelAcBits,
const bool strict = true 
)
-
-private
-
- -

Status: STABLE / Reported as working on a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to data to decode & where to store the decode
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect (kTechnibelAcBits).
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeTeco()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeTeco (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kTecoBits,
const bool strict = false 
)
-
-private
-
- -

Decode the supplied Teco message. Status: STABLE / Tested.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeToshibaAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeToshibaAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kToshibaACBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Toshiba A/C message. Status: STABLE / Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeTranscold()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeTranscold (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kTranscoldBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Transcold A/C message. Status: STABLE / Known Working.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeTrotec()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeTrotec (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kTrotecBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Trotec message. Status: STABLE / Works. Untested on real devices.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeTruma()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeTruma (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kTrumaBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Truma message. Status: STABLE / Confirmed working with real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kTrumaBits.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeVestelAc()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeVestelAc (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kVestelAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Vestel message. Status: Alpha / Needs testing against a real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeVoltas()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeVoltas (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kVoltasBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Voltas message. Status: STABLE / Working on real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ decodeWhirlpoolAC()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeWhirlpoolAC (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kWhirlpoolAcBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Whirlpool A/C message. Status: STABLE / Working as intended.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeWhynter()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeWhynter (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kWhynterBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Whynter message. Status: STABLE / Working. Strict mode is ALPHA.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
-
See also
https://github.com/z3t0/Arduino-IRremote/blob/master/ir_Whynter.cpp
- -
-
- -

◆ decodeXmp()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeXmp (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kXmpBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied XMP packet/message. Status: BETA / Probably works.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the result
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
True if it can decode it, false if it can't.
- -
-
- -

◆ decodeZepeal()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::decodeZepeal (decode_resultsresults,
uint16_t offset = kStartOffset,
const uint16_t nbits = kZepealBits,
const bool strict = true 
)
-
-private
-
- -

Decode the supplied Zepeal message. Status: STABLE / Works on real device.

-
Parameters
- - - - - -
[in,out]resultsPtr to the data to decode & where to store the decode result.
[in]offsetThe starting index to use when attempting to decode the raw data. Typically/Defaults to kStartOffset.
[in]nbitsThe number of data bits to expect. Typically kZepealBits.
[in]strictFlag indicating if we should perform strict matching.
-
-
-
Returns
A boolean. True if it can decode it, false if it can't.
- -
-
- -

◆ disableIRIn()

- -
-
- - - - - - - - -
void IRrecv::disableIRIn (void )
-
- -

Stop collection of any received IR data. Disable any timers and interrupts.

- -
-
- -

◆ enableIRIn()

- -
-
- - - - - - - - -
void IRrecv::enableIRIn (const bool pullup = false)
-
- -

Set up and (re)start the IR capture mechanism.

-
Parameters
- - -
[in]pullupA flag indicating should the GPIO use the internal pullup resistor. (Default: false. i.e. No.)
-
-
- -
-
- -

◆ getBufSize()

- -
-
- - - - - - - - -
uint16_t IRrecv::getBufSize (void )
-
- -

Obtain the maximum number of entries possible in the capture buffer. i.e. It's size.

-
Returns
The size of the buffer that is in use by the object.
- -
-
- -

◆ getRClevel()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int16_t IRrecv::getRClevel (decode_resultsresults,
uint16_t * offset,
uint16_t * used,
uint16_t bitTime,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const uint16_t delta = 0,
const uint8_t maxwidth = 3 
)
-
-private
-
- -

Gets one undecoded level at a time from the raw buffer. The RC5/6 decoding is easier if the data is broken into time intervals. E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, successive calls to getRClevel will return MARK, MARK, SPACE. offset and used are updated to keep track of the current position.

-
Parameters
- - - - - - - - - -
[in,out]resultsPtr to the data to decode and where to store the decode result.
[in,out]offsetPtr to the currect offset to the rawbuf.
[in,out]usedPtr to the current used counter.
[in]bitTimeTime interval of single bit in microseconds.
[in]tolerancePercent tolerance to be used in matching.
[in]excessExtra useconds to add to Marks & removed from Spaces.
[in]deltaA non-scaling (+/-) error margin (in useconds).
[in]maxwidthMaximum number of successive levels to find in a single level (default is 3)
-
-
-
Returns
MARK, SPACE, or -1 for error. (The measured time interval is not a multiple of t1.)
-
See also
https://en.wikipedia.org/wiki/Manchester_code
- -
-
- -

◆ getTolerance()

- -
-
- - - - - - - - -
uint8_t IRrecv::getTolerance (void )
-
- -

Get the base tolerance percentage for matching incoming IR messages.

-
Returns
A integer percentage.
- -
-
- -

◆ match()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::match (const uint32_t measured,
const uint32_t desired,
const uint8_t tolerance = kUseDefTol,
const uint16_t delta = 0 
)
-
- -

Check if we match a pulse(measured) with the desired within +/-tolerance percent and/or +/- a fixed delta range.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]toleranceA percentage expressed as an integer. e.g. 10 is 10%.
[in]deltaA non-scaling (+/-) error margin (in useconds).
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ matchAtLeast()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::matchAtLeast (const uint32_t measured,
const uint32_t desired,
const uint8_t tolerance = kUseDefTol,
const uint16_t delta = 0 
)
-
-private
-
- -

Check if we match a pulse(measured) of at least desired within tolerance percent and/or a fixed delta margin.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]toleranceA percentage expressed as an integer. e.g. 10 is 10%.
[in]deltaA non-scaling amount to reduce usecs by.
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ matchBytes()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchBytes (volatile uint16_t * data_ptr,
uint8_t * result_ptr,
const uint16_t remaining,
const uint16_t nbytes,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true,
const bool expectlastspace = true 
)
-
-private
-
- -

Match & decode the typical data section of an IR message. The bytes are stored at result_ptr. The first byte in the result equates to the first byte encountered, and so on.

-
Parameters
- - - - - - - - - - - - - -
[in]data_ptrA pointer to where we are at in the capture buffer.
[out]result_ptrA ptr to where to start storing the bytes we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbytesNr. of data bytes we expect.
[in]onemarkNr. of uSeconds in an expected mark signal for a '1' bit.
[in]onespaceNr. of uSecs in an expected space signal for a '1' bit.
[in]zeromarkNr. of uSecs in an expected mark signal for a '0' bit.
[in]zerospaceNr. of uSecs in an expected space signal for a '0' bit.
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
[in]expectlastspaceDo we expect a space at the end of the message?
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
- -
-
- -

◆ matchData()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
match_result_t IRrecv::matchData (volatile uint16_t * data_ptr,
const uint16_t nbits,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true,
const bool expectlastspace = true 
)
-
-private
-
- -

Match & decode the typical data section of an IR message. The data value is stored in the least significant bits reguardless of the bit ordering requested.

-
Parameters
- - - - - - - - - - - -
[in]data_ptrA pointer to where we are at in the capture buffer.
[in]nbitsNr. of data bits we expect.
[in]onemarkNr. of uSeconds in an expected mark signal for a '1' bit.
[in]onespaceNr. of uSecs in an expected space signal for a '1' bit.
[in]zeromarkNr. of uSecs in an expected mark signal for a '0' bit.
[in]zerospaceNr. of uSecs in an expected space signal for a '0' bit.
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
[in]expectlastspaceDo we expect a space at the end of the message?
-
-
-
Returns
A match_result_t structure containing the success (or not), the data value, and how many buffer entries were used.
- -
-
- -

◆ matchGeneric() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchGeneric (volatile uint16_t * data_ptr,
uint64_t * result_ptr,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t hdrmark,
const uint32_t hdrspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t footerspace,
const bool atleast = false,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true 
)
-
-private
-
- -

Match & decode a generic/typical <= 64bit IR message. The data is stored at result_ptr.

-
Note
Values of 0 for hdrmark, hdrspace, footermark, or footerspace mean skip that requirement.
-
Parameters
- - - - - - - - - - - - - - - - - -
[in]data_ptrA pointer to where we are at in the capture buffer.
[out]result_ptrA ptr to where to start storing the bits we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]hdrmarkNr. of uSeconds for the expected header mark signal.
[in]hdrspaceNr. of uSeconds for the expected header space signal.
[in]onemarkNr. of uSeconds in an expected mark signal for a '1' bit.
[in]onespaceNr. of uSecs in an expected space signal for a '1' bit.
[in]zeromarkNr. of uSecs in an expected mark signal for a '0' bit.
[in]zerospaceNr. of uSecs in an expected space signal for a '0' bit.
[in]footermarkNr. of uSeconds for the expected footer mark signal.
[in]footerspaceNr. of uSeconds for the expected footer space/gap signal.
[in]atleastIs the match on the footerspace a matchAtLeast or matchSpace?
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
- -
-
- -

◆ matchGeneric() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchGeneric (volatile uint16_t * data_ptr,
uint8_t * result_ptr,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t hdrmark,
const uint32_t hdrspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t footerspace,
const bool atleast = false,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true 
)
-
-private
-
- -

Match & decode a generic/typical > 64bit IR message. The bytes are stored at result_ptr. The first byte in the result equates to the first byte encountered, and so on.

-
Note
Values of 0 for hdrmark, hdrspace, footermark, or footerspace mean skip that requirement.
-
Parameters
- - - - - - - - - - - - - - - - - -
[in]data_ptrA pointer to where we are at in the capture buffer.
[out]result_ptrA ptr to where to start storing the bytes we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]hdrmarkNr. of uSeconds for the expected header mark signal.
[in]hdrspaceNr. of uSeconds for the expected header space signal.
[in]onemarkNr. of uSeconds in an expected mark signal for a '1' bit.
[in]onespaceNr. of uSecs in an expected space signal for a '1' bit.
[in]zeromarkNr. of uSecs in an expected mark signal for a '0' bit.
[in]zerospaceNr. of uSecs in an expected space signal for a '0' bit.
[in]footermarkNr. of uSeconds for the expected footer mark signal.
[in]footerspaceNr. of uSeconds for the expected footer space/gap signal.
[in]atleastIs the match on the footerspace a matchAtLeast or matchSpace?
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
- -
-
- -

◆ matchGenericConstBitTime()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchGenericConstBitTime (volatile uint16_t * data_ptr,
uint64_t * result_ptr,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t hdrmark,
const uint32_t hdrspace,
const uint16_t one,
const uint32_t zero,
const uint16_t footermark,
const uint32_t footerspace,
const bool atleast = false,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true 
)
-
-private
-
- -

Match & decode a generic/typical constant bit time <= 64bit IR message. The data is stored at result_ptr.

-
Note
Values of 0 for hdrmark, hdrspace, footermark, or footerspace mean skip that requirement.
-
Parameters
- - -
[in]data_ptrA pointer to where we are at in the capture buffer.
-
-
-
Note
data_ptr is assumed to be pointing to a "Mark", not a "Space".
-
Parameters
- - - - - - - - - - - - - - -
[out]result_ptrA ptr to where to start storing the bits we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]hdrmarkNr. of uSeconds for the expected header mark signal.
[in]hdrspaceNr. of uSeconds for the expected header space signal.
[in]oneNr. of uSeconds in an expected mark signal for a '1' bit.
[in]zeroNr. of uSeconds in an expected mark signal for a '0' bit.
[in]footermarkNr. of uSeconds for the expected footer mark signal.
[in]footerspaceNr. of uSeconds for the expected footer space/gap signal.
[in]atleastIs the match on the footerspace a matchAtLeast or matchSpace?
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
-
Note
Parameters one + zero add up to the total time for a bit. e.g. mark(one) + space(zero) is a 1, mark(zero) + space(one) is a 0.
- -
-
- -

◆ matchManchester()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchManchester (volatile const uint16_t * data_ptr,
uint64_t * result_ptr,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t hdrmark,
const uint32_t hdrspace,
const uint16_t half_period,
const uint16_t footermark,
const uint32_t footerspace,
const bool atleast = false,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true,
const bool GEThomas = true 
)
-
-private
-
- -

Match & decode a Manchester Code <= 64bit IR message. The data is stored at result_ptr.

-
Note
Values of 0 for hdrmark, hdrspace, footermark, or footerspace mean skip that requirement.
-
Parameters
- - -
[in]data_ptrA pointer to where we are at in the capture buffer.
-
-
-
Note
data_ptr is assumed to be pointing to a "Mark", not a "Space".
-
Parameters
- - - - - - - - - - - - - - -
[out]result_ptrA ptr to where to start storing the bits we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]hdrmarkNr. of uSeconds for the expected header mark signal.
[in]hdrspaceNr. of uSeconds for the expected header space signal.
[in]half_periodNr. of uSeconds for half the clock's period. i.e. 1/2 wavelength
[in]footermarkNr. of uSeconds for the expected footer mark signal.
[in]footerspaceNr. of uSeconds for the expected footer space/gap signal.
[in]atleastIs the match on the footerspace a matchAtLeast or matchSpace?
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
[in]GEThomasUse G.E. Thomas (true) or IEEE 802.3 (false) convention?
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
-
See also
https://en.wikipedia.org/wiki/Manchester_code
-
-http://ww1.microchip.com/downloads/en/AppNotes/Atmel-9164-Manchester-Coding-Basics_Application-Note.pdf
- -
-
- -

◆ matchManchesterData()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRrecv::matchManchesterData (volatile const uint16_t * data_ptr,
uint64_t * result_ptr,
const uint16_t remaining,
const uint16_t nbits,
const uint16_t half_period,
const uint16_t starting_balance = 0,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess,
const bool MSBfirst = true,
const bool GEThomas = true 
)
-
-private
-
- -

Match & decode a Manchester Code data (<= 64bits.

-
Parameters
- - -
[in]data_ptrA pointer to where we are at in the capture buffer.
-
-
-
Note
data_ptr is assumed to be pointing to a "Mark", not a "Space".
-
Parameters
- - - - - - - - - - -
[out]result_ptrA ptr to where to start storing the bits we decoded.
[in]remainingThe size of the capture buffer remaining.
[in]nbitsNr. of data bits we expect.
[in]half_periodNr. of uSeconds for half the clock's period. i.e. 1/2 wavelength
[in]tolerancePercentage error margin to allow. (Default: kUseDefTol)
[in]starting_balanceAmount of uSeconds to assume exists prior to the current value pointed too.
[in]excessNr. of uSeconds. (Def: kMarkExcess)
[in]MSBfirstBit order to save the data in. (Def: true) true is Most Significant Bit First Order, false is Least Significant First
[in]GEThomasUse G.E. Thomas (true) or IEEE 802.3 (false) convention?
-
-
-
Returns
If successful, how many buffer entries were used. Otherwise 0.
-
See also
https://en.wikipedia.org/wiki/Manchester_code
-
-http://ww1.microchip.com/downloads/en/AppNotes/Atmel-9164-Manchester-Coding-Basics_Application-Note.pdf
-
Todo:
Clean up and optimise this. It is just "get it working code" atm.
- -
-
- -

◆ matchMark()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::matchMark (const uint32_t measured,
const uint32_t desired,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess 
)
-
- -

Check if we match a mark signal(measured) with the desired within +/-tolerance percent, after an expected is excess is added.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]toleranceA percentage expressed as an integer. e.g. 10 is 10%.
[in]excessA non-scaling amount to reduce usecs by.
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ matchMarkRange()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::matchMarkRange (const uint32_t measured,
const uint32_t desired,
const uint16_t range = 100,
const int16_t excess = kMarkExcess 
)
-
- -

Check if we match a mark signal(measured) with the desired within a range (in uSeconds) either side of the desired, after an expected is excess is added.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]rangeThe range limit from desired to accept in uSeconds.
[in]excessA non-scaling amount to reduce usecs by.
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ matchSpace()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::matchSpace (const uint32_t measured,
const uint32_t desired,
const uint8_t tolerance = kUseDefTol,
const int16_t excess = kMarkExcess 
)
-
- -

Check if we match a space signal(measured) with the desired within +/-tolerance percent, after an expected is excess is removed.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]toleranceA percentage expressed as an integer. e.g. 10 is 10%.
[in]excessA non-scaling amount to reduce usecs by.
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ matchSpaceRange()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRrecv::matchSpaceRange (const uint32_t measured,
const uint32_t desired,
const uint16_t range = 100,
const int16_t excess = kMarkExcess 
)
-
- -

Check if we match a space signal(measured) with the desired within a range (in uSeconds) either side of the desired, after an expected is excess is removed.

-
Parameters
- - - - - -
[in]measuredThe recorded period of the signal pulse.
[in]desiredThe expected period (in usecs) we are matching against.
[in]rangeThe range limit from desired to accept in uSeconds.
[in]excessA non-scaling amount to reduce usecs by.
-
-
-
Returns
A Boolean. true if it matches, false if it doesn't.
- -
-
- -

◆ resume()

- -
-
- - - - - - - - -
void IRrecv::resume (void )
-
- -

Resume collection of received IR data.

-
Note
This is required if decode() is successful and save_buffer was not set when the class was instanciated.
-
See also
IRrecv class constructor
- -
-
- -

◆ setTolerance()

- -
-
- - - - - - - - -
void IRrecv::setTolerance (const uint8_t percent = kTolerance)
-
- -

Set the base tolerance percentage for matching incoming IR messages.

-
Parameters
- - -
[in]percentAn integer percentage. (0-100)
-
-
- -
-
- -

◆ setUnknownThreshold()

- -
-
- - - - - - - - -
void IRrecv::setUnknownThreshold (const uint16_t length)
-
- -

Set the minimum length we will consider for reporting UNKNOWN message types.

-
Parameters
- - -
[in]lengthMin nr. of mark/space pulses required to be considered.
-
-
- -
-
- -

◆ ticksHigh()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
uint32_t IRrecv::ticksHigh (const uint32_t usecs,
const uint8_t tolerance = kUseDefTol,
const uint16_t delta = 0 
)
-
-private
-
- -

Calculate the upper bound of the nr. of ticks.

-
Parameters
- - - - -
[in]usecsNr. of uSeconds.
[in]tolerancePercent as an integer. e.g. 10 is 10%
[in]deltaA non-scaling amount to increase usecs by.
-
-
-
Returns
Nr. of ticks.
- -
-
- -

◆ ticksLow()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
uint32_t IRrecv::ticksLow (const uint32_t usecs,
const uint8_t tolerance = kUseDefTol,
const uint16_t delta = 0 
)
-
-private
-
- -

Calculate the lower bound of the nr. of ticks.

-
Parameters
- - - - -
[in]usecsNr. of uSeconds.
[in]tolerancePercent as an integer. e.g. 10 is 10%
[in]deltaA non-scaling amount to reduce usecs by.
-
-
-
Returns
Nr. of ticks.
- -
-
-

Member Data Documentation

- -

◆ _timer_num

- -
-
- - - - - -
- - - - -
uint8_t IRrecv::_timer_num
-
-private
-
- -
-
- -

◆ _tolerance

- -
-
- - - - - -
- - - - -
uint8_t IRrecv::_tolerance
-
-private
-
- -
-
- -

◆ _unknown_threshold

- -
-
- - - - - -
- - - - -
uint16_t IRrecv::_unknown_threshold
-
-private
-
- -
-
- -

◆ irparams_save

- -
-
- - - - - -
- - - - -
irparams_t* IRrecv::irparams_save
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.map deleted file mode 100644 index afb28be42..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.md5 deleted file mode 100644 index 03ea8f4ee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -86a4a18f846668b6a3cf862d7669306a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.png deleted file mode 100644 index 69ea6e16f..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRrecv__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend-members.html deleted file mode 100644 index cfa29fcb8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend-members.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRsend Member List
-
-
- -

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_delayMicroseconds(uint32_t usec)IRsend
_dutycycleIRsendprivate
_freq_unittestIRsendprivate
_sendSony(const uint64_t data, const uint16_t nbits, const uint16_t repeat, const uint16_t freq)IRsendprivate
begin()IRsend
calcUSecPeriod(uint32_t hz, bool use_offset=true)IRsendprivate
calibrate(uint16_t hz=38000U)IRsend
defaultBits(const decode_type_t protocol)IRsendstatic
enableIROut(uint32_t freq, uint8_t duty=kDutyDefault)IRsend
encodeDoshisha(const uint8_t command, const uint8_t channel=0)IRsend
encodeJVC(uint8_t address, uint8_t command)IRsend
encodeLG(uint16_t address, uint16_t command)IRsend
encodeMagiQuest(const uint32_t wand_id, const uint16_t magnitude)IRsend
encodeMetz(const uint8_t address, const uint8_t command, const bool toggle=false)IRsendstatic
encodeNEC(uint16_t address, uint16_t command)IRsend
encodePanasonic(const uint16_t manufacturer, const uint8_t device, const uint8_t subdevice, const uint8_t function)IRsend
encodePioneer(uint16_t address, uint16_t command)IRsend
encodeRC5(const uint8_t address, const uint8_t command, const bool key_released=false)IRsend
encodeRC5X(const uint8_t address, const uint8_t command, const bool key_released=false)IRsend
encodeRC6(const uint32_t address, const uint8_t command, const uint16_t mode=kRC6Mode0Bits)IRsend
encodeSAMSUNG(const uint8_t customer, const uint8_t command)IRsend
encodeSanyoLC7461(uint16_t address, uint8_t command)IRsend
encodeSharp(const uint16_t address, const uint16_t command, const uint16_t expansion=1, const uint16_t check=0, const bool MSBfirst=false)IRsend
encodeSony(const uint16_t nbits, const uint16_t command, const uint16_t address, const uint16_t extended=0)IRsend
IRpinIRsendprivate
IRsend(uint16_t IRsendPin, bool inverted=false, bool use_modulation=true)IRsendexplicit
ledOff()IRsendprotected
ledOn()IRsendprotected
mark(uint16_t usec)IRsend
minRepeats(const decode_type_t protocol)IRsendstatic
modulationIRsendprivate
offTimePeriodIRsendprivate
onTimePeriodIRsendprivate
outputOffIRsendprotected
outputOnIRsendprotected
periodOffsetIRsendprivate
send(const decode_type_t type, const uint64_t data, const uint16_t nbits, const uint16_t repeat=kNoRepeat)IRsend
send(const decode_type_t type, const uint8_t *state, const uint16_t nbytes)IRsend
sendAirwell(uint64_t data, uint16_t nbits=kAirwellBits, uint16_t repeat=kAirwellMinRepeats)IRsend
sendAiwaRCT501(uint64_t data, uint16_t nbits=kAiwaRcT501Bits, uint16_t repeat=kAiwaRcT501MinRepeats)IRsend
sendAmcor(const unsigned char data[], const uint16_t nbytes=kAmcorStateLength, const uint16_t repeat=kAmcorDefaultRepeat)IRsend
sendArgo(const unsigned char data[], const uint16_t nbytes=kArgoStateLength, const uint16_t repeat=kArgoDefaultRepeat)IRsend
sendCarrierAC(uint64_t data, uint16_t nbits=kCarrierAcBits, uint16_t repeat=kCarrierAcMinRepeat)IRsend
sendCarrierAC40(uint64_t data, uint16_t nbits=kCarrierAc40Bits, uint16_t repeat=kCarrierAc40MinRepeat)IRsend
sendCarrierAC64(uint64_t data, uint16_t nbits=kCarrierAc64Bits, uint16_t repeat=kCarrierAc64MinRepeat)IRsend
sendCOOLIX(uint64_t data, uint16_t nbits=kCoolixBits, uint16_t repeat=kCoolixDefaultRepeat)IRsend
sendCoronaAc(const uint8_t data[], const uint16_t nbytes=kCoronaAcStateLength, const uint16_t repeat=kNoRepeat)IRsend
sendDaikin(const unsigned char data[], const uint16_t nbytes=kDaikinStateLength, const uint16_t repeat=kDaikinDefaultRepeat)IRsend
sendDaikin128(const unsigned char data[], const uint16_t nbytes=kDaikin128StateLength, const uint16_t repeat=kDaikin128DefaultRepeat)IRsend
sendDaikin152(const unsigned char data[], const uint16_t nbytes=kDaikin152StateLength, const uint16_t repeat=kDaikin152DefaultRepeat)IRsend
sendDaikin160(const unsigned char data[], const uint16_t nbytes=kDaikin160StateLength, const uint16_t repeat=kDaikin160DefaultRepeat)IRsend
sendDaikin176(const unsigned char data[], const uint16_t nbytes=kDaikin176StateLength, const uint16_t repeat=kDaikin176DefaultRepeat)IRsend
sendDaikin2(const unsigned char data[], const uint16_t nbytes=kDaikin2StateLength, const uint16_t repeat=kDaikin2DefaultRepeat)IRsend
sendDaikin216(const unsigned char data[], const uint16_t nbytes=kDaikin216StateLength, const uint16_t repeat=kDaikin216DefaultRepeat)IRsend
sendDaikin64(const uint64_t data, const uint16_t nbits=kDaikin64Bits, const uint16_t repeat=kDaikin64DefaultRepeat)IRsend
sendData(uint16_t onemark, uint32_t onespace, uint16_t zeromark, uint32_t zerospace, uint64_t data, uint16_t nbits, bool MSBfirst=true)IRsend
sendDelonghiAc(uint64_t data, uint16_t nbits=kDelonghiAcBits, uint16_t repeat=kDelonghiAcDefaultRepeat)IRsend
sendDenon(uint64_t data, uint16_t nbits=kDenonBits, uint16_t repeat=kNoRepeat)IRsend
sendDISH(uint64_t data, uint16_t nbits=kDishBits, uint16_t repeat=kDishMinRepeat)IRsend
sendDoshisha(const uint64_t data, uint16_t nbits=kDoshishaBits, const uint16_t repeat=kNoRepeat)IRsend
sendEcoclim(const uint64_t data, const uint16_t nbits=kEcoclimBits, const uint16_t repeat=kNoRepeat)IRsend
sendElectraAC(const unsigned char data[], const uint16_t nbytes=kElectraAcStateLength, const uint16_t repeat=kNoRepeat)IRsend
sendElitescreens(const uint64_t data, const uint16_t nbits=kEliteScreensBits, const uint16_t repeat=kEliteScreensDefaultRepeat)IRsend
sendEpson(uint64_t data, uint16_t nbits=kEpsonBits, uint16_t repeat=kEpsonMinRepeat)IRsend
sendFujitsuAC(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kFujitsuAcMinRepeat)IRsend
sendGC(uint16_t buf[], uint16_t len)IRsend
sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)IRsend
sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint32_t mesgtime, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)IRsend
sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint8_t *dataptr, const uint16_t nbytes, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)IRsend
sendGICable(uint64_t data, uint16_t nbits=kGicableBits, uint16_t repeat=kGicableMinRepeat)IRsend
sendGoodweather(const uint64_t data, const uint16_t nbits=kGoodweatherBits, const uint16_t repeat=kGoodweatherMinRepeat)IRsend
sendGree(const uint64_t data, const uint16_t nbits=kGreeBits, const uint16_t repeat=kGreeDefaultRepeat)IRsend
sendGree(const uint8_t data[], const uint16_t nbytes=kGreeStateLength, const uint16_t repeat=kGreeDefaultRepeat)IRsend
sendHaierAC(const unsigned char data[], const uint16_t nbytes=kHaierACStateLength, const uint16_t repeat=kHaierAcDefaultRepeat)IRsend
sendHaierACYRW02(const unsigned char data[], const uint16_t nbytes=kHaierACYRW02StateLength, const uint16_t repeat=kHaierAcYrw02DefaultRepeat)IRsend
sendHitachiAC(const unsigned char data[], const uint16_t nbytes=kHitachiAcStateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendHitachiAC1(const unsigned char data[], const uint16_t nbytes=kHitachiAc1StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendHitachiAC2(const unsigned char data[], const uint16_t nbytes=kHitachiAc2StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendHitachiAc3(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendHitachiAc344(const unsigned char data[], const uint16_t nbytes=kHitachiAc344StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendHitachiAc424(const unsigned char data[], const uint16_t nbytes=kHitachiAc424StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)IRsend
sendInax(const uint64_t data, const uint16_t nbits=kInaxBits, const uint16_t repeat=kInaxMinRepeat)IRsend
sendJVC(uint64_t data, uint16_t nbits=kJvcBits, uint16_t repeat=kNoRepeat)IRsend
sendKelvinator(const unsigned char data[], const uint16_t nbytes=kKelvinatorStateLength, const uint16_t repeat=kKelvinatorDefaultRepeat)IRsend
sendLasertag(uint64_t data, uint16_t nbits=kLasertagBits, uint16_t repeat=kLasertagMinRepeat)IRsend
sendLegoPf(const uint64_t data, const uint16_t nbits=kLegoPfBits, const uint16_t repeat=kLegoPfMinRepeat)IRsend
sendLG(uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)IRsend
sendLG2(uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)IRsend
sendLutron(uint64_t data, uint16_t nbits=kLutronBits, uint16_t repeat=kNoRepeat)IRsend
sendMagiQuest(const uint64_t data, const uint16_t nbits=kMagiquestBits, const uint16_t repeat=kNoRepeat)IRsend
sendManchester(const uint16_t headermark, const uint32_t headerspace, const uint16_t half_period, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency=38, const bool MSBfirst=true, const uint16_t repeat=kNoRepeat, const uint8_t dutycycle=kDutyDefault, const bool GEThomas=true)IRsend
sendManchesterData(const uint16_t half_period, const uint64_t data, const uint16_t nbits, const bool MSBfirst=true, const bool GEThomas=true)IRsend
sendMetz(const uint64_t data, const uint16_t nbits=kMetzBits, const uint16_t repeat=kMetzMinRepeat)IRsend
sendMidea(uint64_t data, uint16_t nbits=kMideaBits, uint16_t repeat=kMideaMinRepeat)IRsend
sendMidea24(const uint64_t data, const uint16_t nbits=kMidea24Bits, const uint16_t repeat=kMidea24MinRepeat)IRsend
sendMilestag2(const uint64_t data, const uint16_t nbits=kMilesTag2ShotBits, const uint16_t repeat=kMilesMinRepeat)IRsend
sendMirage(const unsigned char data[], const uint16_t nbytes=kMirageStateLength, const uint16_t repeat=kMirageMinRepeat)IRsend
sendMitsubishi(uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)IRsend
sendMitsubishi112(const unsigned char data[], const uint16_t nbytes=kMitsubishi112StateLength, const uint16_t repeat=kMitsubishi112MinRepeat)IRsend
sendMitsubishi136(const unsigned char data[], const uint16_t nbytes=kMitsubishi136StateLength, const uint16_t repeat=kMitsubishi136MinRepeat)IRsend
sendMitsubishi2(uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)IRsend
sendMitsubishiAC(const unsigned char data[], const uint16_t nbytes=kMitsubishiACStateLength, const uint16_t repeat=kMitsubishiACMinRepeat)IRsend
sendMitsubishiHeavy152(const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy152StateLength, const uint16_t repeat=kMitsubishiHeavy152MinRepeat)IRsend
sendMitsubishiHeavy88(const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy88StateLength, const uint16_t repeat=kMitsubishiHeavy88MinRepeat)IRsend
sendMultibrackets(const uint64_t data, const uint16_t nbits=kMultibracketsBits, const uint16_t repeat=kMultibracketsDefaultRepeat)IRsend
sendMWM(const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kNoRepeat)IRsend
sendNEC(uint64_t data, uint16_t nbits=kNECBits, uint16_t repeat=kNoRepeat)IRsend
sendNeoclima(const unsigned char data[], const uint16_t nbytes=kNeoclimaStateLength, const uint16_t repeat=kNeoclimaMinRepeat)IRsend
sendNikai(uint64_t data, uint16_t nbits=kNikaiBits, uint16_t repeat=kNoRepeat)IRsend
sendPanasonic(const uint16_t address, const uint32_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)IRsend
sendPanasonic64(const uint64_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)IRsend
sendPanasonicAC(const unsigned char data[], const uint16_t nbytes=kPanasonicAcStateLength, const uint16_t repeat=kPanasonicAcDefaultRepeat)IRsend
sendPanasonicAC32(const uint64_t data, const uint16_t nbits=kPanasonicAc32Bits, const uint16_t repeat=kPanasonicAcDefaultRepeat)IRsend
sendPioneer(const uint64_t data, const uint16_t nbits=kPioneerBits, const uint16_t repeat=kNoRepeat)IRsend
sendPronto(uint16_t data[], uint16_t len, uint16_t repeat=kNoRepeat)IRsend
sendRaw(const uint16_t buf[], const uint16_t len, const uint16_t hz)IRsend
sendRC5(const uint64_t data, uint16_t nbits=kRC5XBits, const uint16_t repeat=kNoRepeat)IRsend
sendRC6(const uint64_t data, const uint16_t nbits=kRC6Mode0Bits, const uint16_t repeat=kNoRepeat)IRsend
sendRCMM(uint64_t data, uint16_t nbits=kRCMMBits, uint16_t repeat=kNoRepeat)IRsend
sendSAMSUNG(const uint64_t data, const uint16_t nbits=kSamsungBits, const uint16_t repeat=kNoRepeat)IRsend
sendSamsung36(const uint64_t data, const uint16_t nbits=kSamsung36Bits, const uint16_t repeat=kNoRepeat)IRsend
sendSamsungAC(const unsigned char data[], const uint16_t nbytes=kSamsungAcStateLength, const uint16_t repeat=kSamsungAcDefaultRepeat)IRsend
sendSanyoAc(const uint8_t *data, const uint16_t nbytes=kSanyoAcStateLength, const uint16_t repeat=kNoRepeat)IRsend
sendSanyoLC7461(const uint64_t data, const uint16_t nbits=kSanyoLC7461Bits, const uint16_t repeat=kNoRepeat)IRsend
sendSharp(const uint16_t address, const uint16_t command, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)IRsend
sendSharpAc(const unsigned char data[], const uint16_t nbytes=kSharpAcStateLength, const uint16_t repeat=kSharpAcDefaultRepeat)IRsend
sendSharpRaw(const uint64_t data, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)IRsend
sendSherwood(uint64_t data, uint16_t nbits=kSherwoodBits, uint16_t repeat=kSherwoodMinRepeat)IRsend
sendSony(const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat)IRsend
sendSony38(const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat+1)IRsend
sendSymphony(uint64_t data, uint16_t nbits=kSymphonyBits, uint16_t repeat=kSymphonyDefaultRepeat)IRsend
sendTcl112Ac(const unsigned char data[], const uint16_t nbytes=kTcl112AcStateLength, const uint16_t repeat=kTcl112AcDefaultRepeat)IRsend
sendTechnibelAc(uint64_t data, uint16_t nbits=kTechnibelAcBits, uint16_t repeat=kTechnibelAcDefaultRepeat)IRsend
sendTeco(const uint64_t data, const uint16_t nbits=kTecoBits, const uint16_t repeat=kNoRepeat)IRsend
sendToshibaAC(const uint8_t data[], const uint16_t nbytes=kToshibaACStateLength, const uint16_t repeat=kToshibaACMinRepeat)IRsend
sendTranscold(const uint64_t data, const uint16_t nbits=kTranscoldBits, const uint16_t repeat=kTranscoldDefaultRepeat)IRsend
sendTrotec(const unsigned char data[], const uint16_t nbytes=kTrotecStateLength, const uint16_t repeat=kTrotecDefaultRepeat)IRsend
sendTruma(const uint64_t data, const uint16_t nbits=kTrumaBits, const uint16_t repeat=kNoRepeat)IRsend
sendVestelAc(const uint64_t data, const uint16_t nbits=kVestelAcBits, const uint16_t repeat=kNoRepeat)IRsend
sendVoltas(const unsigned char data[], const uint16_t nbytes=kVoltasStateLength, const uint16_t repeat=kNoRepeat)IRsend
sendWhirlpoolAC(const unsigned char data[], const uint16_t nbytes=kWhirlpoolAcStateLength, const uint16_t repeat=kWhirlpoolAcDefaultRepeat)IRsend
sendWhynter(const uint64_t data, const uint16_t nbits=kWhynterBits, const uint16_t repeat=kNoRepeat)IRsend
sendXmp(const uint64_t data, const uint16_t nbits=kXmpBits, const uint16_t repeat=kNoRepeat)IRsend
sendZepeal(const uint64_t data, const uint16_t nbits=kZepealBits, const uint16_t repeat=kZepealMinRepeat)IRsend
space(uint32_t usec)IRsend
toggleRC5(const uint64_t data)IRsend
toggleRC6(const uint64_t data, const uint16_t nbits=kRC6Mode0Bits)IRsend
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend.html deleted file mode 100644 index 6f1bec356..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRsend.html +++ /dev/null @@ -1,7234 +0,0 @@ - - - - - - - -IRremoteESP8266: IRsend Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

Class for sending all basic IR protocols. - More...

- -

#include <IRsend.h>

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

-Public Member Functions

 IRsend (uint16_t IRsendPin, bool inverted=false, bool use_modulation=true)
 Constructor for an IRsend object. More...
 
void begin ()
 Enable the pin for output. More...
 
void enableIROut (uint32_t freq, uint8_t duty=kDutyDefault)
 Set the output frequency modulation and duty cycle. More...
 
VIRTUAL void _delayMicroseconds (uint32_t usec)
 An ESP8266 RTOS watch-dog timer friendly version of delayMicroseconds(). More...
 
VIRTUAL uint16_t mark (uint16_t usec)
 Modulate the IR LED for the given period (usec) and at the duty cycle set. More...
 
VIRTUAL void space (uint32_t usec)
 Turn the pin (LED) off for a given time. Sends an IR space for the specified number of microseconds. A space is no output, so the PWM output is disabled. More...
 
int8_t calibrate (uint16_t hz=38000U)
 Calculate & set any offsets to account for execution times during sending. More...
 
void sendRaw (const uint16_t buf[], const uint16_t len, const uint16_t hz)
 Send a raw IRremote message. More...
 
void sendData (uint16_t onemark, uint32_t onespace, uint16_t zeromark, uint32_t zerospace, uint64_t data, uint16_t nbits, bool MSBfirst=true)
 Generic method for sending data that is common to most protocols. Will send leading or trailing 0's if the nbits is larger than the number of bits in data. More...
 
void sendManchesterData (const uint16_t half_period, const uint64_t data, const uint16_t nbits, const bool MSBfirst=true, const bool GEThomas=true)
 Generic method for sending Manchester code data. Will send leading or trailing 0's if the nbits is larger than the number of bits in data. More...
 
void sendManchester (const uint16_t headermark, const uint32_t headerspace, const uint16_t half_period, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency=38, const bool MSBfirst=true, const uint16_t repeat=kNoRepeat, const uint8_t dutycycle=kDutyDefault, const bool GEThomas=true)
 Generic method for sending Manchester code messages. Will send leading or trailing 0's if the nbits is larger than the number. More...
 
void sendGeneric (const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)
 Generic method for sending simple protocol messages. Will send leading or trailing 0's if the nbits is larger than the number of bits in data. More...
 
void sendGeneric (const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint32_t mesgtime, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)
 Generic method for sending simple protocol messages. Will send leading or trailing 0's if the nbits is larger than the number of bits in data. More...
 
void sendGeneric (const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint8_t *dataptr, const uint16_t nbytes, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)
 Generic method for sending simple protocol messages. More...
 
bool send (const decode_type_t type, const uint64_t data, const uint16_t nbits, const uint16_t repeat=kNoRepeat)
 Send a simple (up to 64 bits) IR message of a given type. An unknown/unsupported type will send nothing. More...
 
bool send (const decode_type_t type, const uint8_t *state, const uint16_t nbytes)
 Send a complex (>= 64 bits) IR message of a given type. An unknown/unsupported type will send nothing. More...
 
void sendNEC (uint64_t data, uint16_t nbits=kNECBits, uint16_t repeat=kNoRepeat)
 Send a raw NEC(Renesas) formatted message. Status: STABLE / Known working. More...
 
uint32_t encodeNEC (uint16_t address, uint16_t command)
 Calculate the raw NEC data based on address and command. Status: STABLE / Expected to work. More...
 
void sendSony (const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat)
 Send a standard Sony/SIRC(Serial Infra-Red Control) message. (40kHz) Status: STABLE / Known working. More...
 
void sendSony38 (const uint64_t data, const uint16_t nbits=kSony20Bits, const uint16_t repeat=kSonyMinRepeat+1)
 Send an alternative 38kHz Sony/SIRC(Serial Infra-Red Control) message. Status: STABLE / Known working. More...
 
uint32_t encodeSony (const uint16_t nbits, const uint16_t command, const uint16_t address, const uint16_t extended=0)
 Convert Sony/SIRC command, address, & extended bits into sendSony format. Status: STABLE / Should be working. More...
 
void sendSherwood (uint64_t data, uint16_t nbits=kSherwoodBits, uint16_t repeat=kSherwoodMinRepeat)
 Send an IR command to a Sherwood device. Status: STABLE / Known working. More...
 
void sendSAMSUNG (const uint64_t data, const uint16_t nbits=kSamsungBits, const uint16_t repeat=kNoRepeat)
 Send a 32-bit Samsung formatted message. Status: STABLE / Should be working. More...
 
uint32_t encodeSAMSUNG (const uint8_t customer, const uint8_t command)
 Construct a raw Samsung message from the supplied customer(address) & command. Status: STABLE / Should be working. More...
 
void sendSamsung36 (const uint64_t data, const uint16_t nbits=kSamsung36Bits, const uint16_t repeat=kNoRepeat)
 Send a Samsung 36-bit formatted message. Status: STABLE / Works on real devices. More...
 
void sendSamsungAC (const unsigned char data[], const uint16_t nbytes=kSamsungAcStateLength, const uint16_t repeat=kSamsungAcDefaultRepeat)
 Send a Samsung A/C message. Status: Stable / Known working. More...
 
void sendLG (uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)
 Send an LG formatted message. (LG) Status: Beta / Should be working. More...
 
void sendLG2 (uint64_t data, uint16_t nbits=kLgBits, uint16_t repeat=kNoRepeat)
 Send an LG Variant-2 formatted message. (LG2) Status: Beta / Should be working. More...
 
uint32_t encodeLG (uint16_t address, uint16_t command)
 Construct a raw 28-bit LG message code from the supplied address & command. Status: STABLE / Works. More...
 
uint32_t encodeSharp (const uint16_t address, const uint16_t command, const uint16_t expansion=1, const uint16_t check=0, const bool MSBfirst=false)
 Encode a (raw) Sharp message from it's components. Status: STABLE / Works okay. More...
 
void sendSharp (const uint16_t address, const uint16_t command, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)
 Send a Sharp message Status: DEPRECATED / Previously working fine. More...
 
void sendSharpRaw (const uint64_t data, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)
 Send a (raw) Sharp message. More...
 
void sendSharpAc (const unsigned char data[], const uint16_t nbytes=kSharpAcStateLength, const uint16_t repeat=kSharpAcDefaultRepeat)
 Send a Sharp A/C message. Status: Alpha / Untested. More...
 
void sendJVC (uint64_t data, uint16_t nbits=kJvcBits, uint16_t repeat=kNoRepeat)
 Send a JVC formatted message. Status: STABLE / Working. More...
 
uint16_t encodeJVC (uint8_t address, uint8_t command)
 Calculate the raw JVC data based on address and command. Status: STABLE / Works fine. More...
 
void sendDenon (uint64_t data, uint16_t nbits=kDenonBits, uint16_t repeat=kNoRepeat)
 Send a Denon formatted message. Status: STABLE / Should be working. More...
 
uint64_t encodeSanyoLC7461 (uint16_t address, uint8_t command)
 Construct a Sanyo LC7461 message. More...
 
void sendSanyoLC7461 (const uint64_t data, const uint16_t nbits=kSanyoLC7461Bits, const uint16_t repeat=kNoRepeat)
 Send a Sanyo LC7461 message. Status: BETA / Probably works. More...
 
void sendSanyoAc (const uint8_t *data, const uint16_t nbytes=kSanyoAcStateLength, const uint16_t repeat=kNoRepeat)
 Send a SanyoAc formatted message. Status: STABLE / Reported as working. More...
 
void sendDISH (uint64_t data, uint16_t nbits=kDishBits, uint16_t repeat=kDishMinRepeat)
 Send a DISH NETWORK formatted message. Status: STABLE / Working. More...
 
void sendPanasonic64 (const uint64_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)
 Send a Panasonic formatted message. Status: STABLE / Should be working. More...
 
void sendPanasonic (const uint16_t address, const uint32_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)
 Send a Panasonic formatted message. Status: STABLE, but DEPRECATED. More...
 
uint64_t encodePanasonic (const uint16_t manufacturer, const uint8_t device, const uint8_t subdevice, const uint8_t function)
 Calculate the raw Panasonic data based on device, subdevice, & function. Status: STABLE / Should be working. More...
 
void sendRC5 (const uint64_t data, uint16_t nbits=kRC5XBits, const uint16_t repeat=kNoRepeat)
 Send a Philips RC-5/RC-5X packet. Status: RC-5 (stable), RC-5X (alpha) More...
 
uint16_t encodeRC5 (const uint8_t address, const uint8_t command, const bool key_released=false)
 Encode a Philips RC-5 data message. Status: Beta / Should be working. More...
 
uint16_t encodeRC5X (const uint8_t address, const uint8_t command, const bool key_released=false)
 Encode a Philips RC-5X data message. Status: Beta / Should be working. More...
 
uint64_t toggleRC5 (const uint64_t data)
 Flip the toggle bit of a Philips RC-5/RC-5X data message. Used to indicate a change of remote button's state. Status: STABLE. More...
 
void sendRC6 (const uint64_t data, const uint16_t nbits=kRC6Mode0Bits, const uint16_t repeat=kNoRepeat)
 Send a Philips RC-6 packet. Status: Stable. More...
 
uint64_t encodeRC6 (const uint32_t address, const uint8_t command, const uint16_t mode=kRC6Mode0Bits)
 Encode a Philips RC-6 data message. Status: Beta / Should be working. More...
 
uint64_t toggleRC6 (const uint64_t data, const uint16_t nbits=kRC6Mode0Bits)
 Flip the toggle bit of a Philips RC-6 data message. Used to indicate a change of remote button's state. Status: STABLE / Should work fine. More...
 
void sendRCMM (uint64_t data, uint16_t nbits=kRCMMBits, uint16_t repeat=kNoRepeat)
 Send a Philips RC-MM packet. Status: STABLE / Should be working. More...
 
void sendCOOLIX (uint64_t data, uint16_t nbits=kCoolixBits, uint16_t repeat=kCoolixDefaultRepeat)
 Send a Coolix message Status: STABLE / Confirmed Working. More...
 
void sendWhynter (const uint64_t data, const uint16_t nbits=kWhynterBits, const uint16_t repeat=kNoRepeat)
 Send a Whynter message. Status: STABLE. More...
 
void sendMirage (const unsigned char data[], const uint16_t nbytes=kMirageStateLength, const uint16_t repeat=kMirageMinRepeat)
 Send a Mirage formatted message. Status: STABLE / Reported as working. More...
 
void sendMitsubishi (uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)
 Send the supplied Mitsubishi 16-bit message. Status: STABLE / Working. More...
 
void sendMitsubishi136 (const unsigned char data[], const uint16_t nbytes=kMitsubishi136StateLength, const uint16_t repeat=kMitsubishi136MinRepeat)
 Send a Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: BETA / Probably working. Needs to be tested against a real device. More...
 
void sendMitsubishi112 (const unsigned char data[], const uint16_t nbytes=kMitsubishi112StateLength, const uint16_t repeat=kMitsubishi112MinRepeat)
 Send a Mitsubishi 112-bit A/C formatted message. (MITSUBISHI112) Status: Stable / Reported as working. More...
 
void sendMitsubishi2 (uint64_t data, uint16_t nbits=kMitsubishiBits, uint16_t repeat=kMitsubishiMinRepeat)
 Send a supplied second variant Mitsubishi 16-bit message. Status: BETA / Probably works. More...
 
void sendMitsubishiAC (const unsigned char data[], const uint16_t nbytes=kMitsubishiACStateLength, const uint16_t repeat=kMitsubishiACMinRepeat)
 Send a Mitsubishi 144-bit A/C formatted message. (MITSUBISHI_AC) Status: STABLE / Working. More...
 
void sendMitsubishiHeavy88 (const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy88StateLength, const uint16_t repeat=kMitsubishiHeavy88MinRepeat)
 Send a MitsubishiHeavy 88-bit A/C message. Status: BETA / Appears to be working. Needs testing against a real device. More...
 
void sendMitsubishiHeavy152 (const unsigned char data[], const uint16_t nbytes=kMitsubishiHeavy152StateLength, const uint16_t repeat=kMitsubishiHeavy152MinRepeat)
 Send a MitsubishiHeavy 152-bit A/C message. Status: BETA / Appears to be working. Needs testing against a real device. More...
 
void sendFujitsuAC (const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kFujitsuAcMinRepeat)
 Send a Fujitsu A/C formatted message. Status: STABLE / Known Good. More...
 
void sendInax (const uint64_t data, const uint16_t nbits=kInaxBits, const uint16_t repeat=kInaxMinRepeat)
 Send a Inax Toilet formatted message. Status: STABLE / Working. More...
 
void sendGC (uint16_t buf[], uint16_t len)
 Send a shortened GlobalCache (GC) IRdb/control tower formatted message. Status: STABLE / Known working. More...
 
void sendKelvinator (const unsigned char data[], const uint16_t nbytes=kKelvinatorStateLength, const uint16_t repeat=kKelvinatorDefaultRepeat)
 Send a Kelvinator A/C message. Status: STABLE / Known working. More...
 
void sendDaikin (const unsigned char data[], const uint16_t nbytes=kDaikinStateLength, const uint16_t repeat=kDaikinDefaultRepeat)
 Send a Daikin 280-bit A/C formatted message. Status: STABLE. More...
 
void sendDaikin64 (const uint64_t data, const uint16_t nbits=kDaikin64Bits, const uint16_t repeat=kDaikin64DefaultRepeat)
 Send a Daikin64 (64-bit) A/C formatted message. Status: Beta / Probably Working. More...
 
void sendDaikin128 (const unsigned char data[], const uint16_t nbytes=kDaikin128StateLength, const uint16_t repeat=kDaikin128DefaultRepeat)
 Send a Daikin128 (128-bit) A/C formatted message. Status: STABLE / Known Working. More...
 
void sendDaikin152 (const unsigned char data[], const uint16_t nbytes=kDaikin152StateLength, const uint16_t repeat=kDaikin152DefaultRepeat)
 Send a Daikin152 (152-bit) A/C formatted message. Status: STABLE / Known Working. More...
 
void sendDaikin160 (const unsigned char data[], const uint16_t nbytes=kDaikin160StateLength, const uint16_t repeat=kDaikin160DefaultRepeat)
 Send a Daikin160 (160-bit) A/C formatted message. Status: STABLE / Confirmed working. More...
 
void sendDaikin176 (const unsigned char data[], const uint16_t nbytes=kDaikin176StateLength, const uint16_t repeat=kDaikin176DefaultRepeat)
 Send a Daikin176 (176-bit) A/C formatted message. Status: STABLE / Working on a real device. More...
 
void sendDaikin2 (const unsigned char data[], const uint16_t nbytes=kDaikin2StateLength, const uint16_t repeat=kDaikin2DefaultRepeat)
 Send a Daikin2 (312-bit) A/C formatted message. Status: STABLE / Expected to work. More...
 
void sendDaikin216 (const unsigned char data[], const uint16_t nbytes=kDaikin216StateLength, const uint16_t repeat=kDaikin216DefaultRepeat)
 Send a Daikin216 (216-bit) A/C formatted message. Status: Alpha / Untested on a real device. More...
 
void sendAiwaRCT501 (uint64_t data, uint16_t nbits=kAiwaRcT501Bits, uint16_t repeat=kAiwaRcT501MinRepeats)
 Send an Aiwa RC T501 formatted message. Status: BETA / Should work. More...
 
void sendGree (const uint64_t data, const uint16_t nbits=kGreeBits, const uint16_t repeat=kGreeDefaultRepeat)
 Send a Gree Heat Pump formatted message. Status: STABLE / Working. More...
 
void sendGree (const uint8_t data[], const uint16_t nbytes=kGreeStateLength, const uint16_t repeat=kGreeDefaultRepeat)
 Send a Gree Heat Pump formatted message. Status: STABLE / Working. More...
 
void sendGoodweather (const uint64_t data, const uint16_t nbits=kGoodweatherBits, const uint16_t repeat=kGoodweatherMinRepeat)
 Send a Goodweather HVAC formatted message. Status: BETA / Needs testing on real device. More...
 
void sendPronto (uint16_t data[], uint16_t len, uint16_t repeat=kNoRepeat)
 Send a Pronto Code formatted message. Status: STABLE / Known working. More...
 
void sendArgo (const unsigned char data[], const uint16_t nbytes=kArgoStateLength, const uint16_t repeat=kArgoDefaultRepeat)
 Send a Argo A/C formatted message. Status: BETA / Probably works. More...
 
void sendTrotec (const unsigned char data[], const uint16_t nbytes=kTrotecStateLength, const uint16_t repeat=kTrotecDefaultRepeat)
 Send a Trotec message. Status: Beta / Probably Working. More...
 
void sendNikai (uint64_t data, uint16_t nbits=kNikaiBits, uint16_t repeat=kNoRepeat)
 Send a Nikai formatted message. Status: STABLE / Working. More...
 
void sendToshibaAC (const uint8_t data[], const uint16_t nbytes=kToshibaACStateLength, const uint16_t repeat=kToshibaACMinRepeat)
 Send a Toshiba A/C message. Status: STABLE / Working. More...
 
void sendMidea (uint64_t data, uint16_t nbits=kMideaBits, uint16_t repeat=kMideaMinRepeat)
 Send a Midea message Status: Alpha / Needs testing against a real device. More...
 
void sendMidea24 (const uint64_t data, const uint16_t nbits=kMidea24Bits, const uint16_t repeat=kMidea24MinRepeat)
 Send a Midea24 formatted message. Status: STABLE / Confirmed working on a real device. More...
 
void sendMagiQuest (const uint64_t data, const uint16_t nbits=kMagiquestBits, const uint16_t repeat=kNoRepeat)
 Send a MagiQuest formatted message. Status: Beta / Should be working. More...
 
uint64_t encodeMagiQuest (const uint32_t wand_id, const uint16_t magnitude)
 Encode a MagiQuest wand_id, and a magnitude into a single 64bit value. (Only 48 bits of real data + 8 leading zero bits) This is suitable for calling sendMagiQuest() with. e.g. sendMagiQuest(encodeMagiQuest(wand_id, magnitude)) More...
 
void sendLasertag (uint64_t data, uint16_t nbits=kLasertagBits, uint16_t repeat=kLasertagMinRepeat)
 Send a Lasertag packet/message. Status: STABLE / Working. More...
 
void sendCarrierAC (uint64_t data, uint16_t nbits=kCarrierAcBits, uint16_t repeat=kCarrierAcMinRepeat)
 Send a Carrier HVAC formatted message. Status: STABLE / Works on real devices. More...
 
void sendCarrierAC40 (uint64_t data, uint16_t nbits=kCarrierAc40Bits, uint16_t repeat=kCarrierAc40MinRepeat)
 Send a Carrier 40bit HVAC formatted message. Status: STABLE / Tested against a real device. More...
 
void sendCarrierAC64 (uint64_t data, uint16_t nbits=kCarrierAc64Bits, uint16_t repeat=kCarrierAc64MinRepeat)
 Send a Carrier 64bit HVAC formatted message. Status: STABLE / Known to be working. More...
 
void sendHaierAC (const unsigned char data[], const uint16_t nbytes=kHaierACStateLength, const uint16_t repeat=kHaierAcDefaultRepeat)
 Send a Haier A/C formatted message. (HSU07-HEA03 remote) Status: STABLE / Known to be working. More...
 
void sendHaierACYRW02 (const unsigned char data[], const uint16_t nbytes=kHaierACYRW02StateLength, const uint16_t repeat=kHaierAcYrw02DefaultRepeat)
 Send a Haier YR-W02 remote A/C formatted message. Status: Alpha / Untested on a real device. More...
 
void sendHitachiAC (const unsigned char data[], const uint16_t nbytes=kHitachiAcStateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi 28-byte/224-bit A/C formatted message. (HITACHI_AC) Status: STABLE / Working. More...
 
void sendHitachiAC1 (const unsigned char data[], const uint16_t nbytes=kHitachiAc1StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi 13 byte/224-bit A/C formatted message. (HITACHI_AC1) Status: STABLE / Confirmed Working. More...
 
void sendHitachiAC2 (const unsigned char data[], const uint16_t nbytes=kHitachiAc2StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi 53 byte/424-bit A/C formatted message. (HITACHI_AC2) Basically the same as sendHitatchiAC() except different size. Status: STABLE / Expected to work. More...
 
void sendHitachiAc3 (const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi(3) A/C formatted message. (HITACHI_AC3) Status: STABLE / Working fine. More...
 
void sendHitachiAc344 (const unsigned char data[], const uint16_t nbytes=kHitachiAc344StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi A/C 43-byte/344-bit message. (HITACHI_AC344) Basically the same as sendHitatchiAC() except different size. Status: Beta / Probably works. More...
 
void sendHitachiAc424 (const unsigned char data[], const uint16_t nbytes=kHitachiAc424StateLength, const uint16_t repeat=kHitachiAcDefaultRepeat)
 Send a Hitachi 53-byte/424-bit A/C formatted message. (HITACHI_AC424) Status: STABLE / Reported as working. More...
 
void sendGICable (uint64_t data, uint16_t nbits=kGicableBits, uint16_t repeat=kGicableMinRepeat)
 Send a raw G.I. Cable formatted message. Status: Alpha / Untested. More...
 
void sendWhirlpoolAC (const unsigned char data[], const uint16_t nbytes=kWhirlpoolAcStateLength, const uint16_t repeat=kWhirlpoolAcDefaultRepeat)
 Send a Whirlpool A/C message. Status: BETA / Probably works. More...
 
void sendLutron (uint64_t data, uint16_t nbits=kLutronBits, uint16_t repeat=kNoRepeat)
 Send a Lutron formatted message. Status: Stable / Appears to be working for real devices. More...
 
void sendElectraAC (const unsigned char data[], const uint16_t nbytes=kElectraAcStateLength, const uint16_t repeat=kNoRepeat)
 Send a Electra A/C formatted message. Status: Alpha / Needs testing against a real device. More...
 
void sendPanasonicAC (const unsigned char data[], const uint16_t nbytes=kPanasonicAcStateLength, const uint16_t repeat=kPanasonicAcDefaultRepeat)
 Send a Panasonic A/C message. Status: STABLE / Work with real device(s). More...
 
void sendPanasonicAC32 (const uint64_t data, const uint16_t nbits=kPanasonicAc32Bits, const uint16_t repeat=kPanasonicAcDefaultRepeat)
 Send a Panasonic AC 32/16bit formatted message. Status: STABLE / Confirmed working. More...
 
void sendPioneer (const uint64_t data, const uint16_t nbits=kPioneerBits, const uint16_t repeat=kNoRepeat)
 Send a raw Pioneer formatted message. Status: STABLE / Expected to be working. More...
 
uint64_t encodePioneer (uint16_t address, uint16_t command)
 Calculate the raw Pioneer data code based on two NEC sub-codes Status: STABLE / Expected to work. More...
 
void sendMWM (const unsigned char data[], const uint16_t nbytes, const uint16_t repeat=kNoRepeat)
 Send a MWM packet/message. Status: Implemented. More...
 
void sendVestelAc (const uint64_t data, const uint16_t nbits=kVestelAcBits, const uint16_t repeat=kNoRepeat)
 Send a Vestel message Status: STABLE / Working. More...
 
void sendTcl112Ac (const unsigned char data[], const uint16_t nbytes=kTcl112AcStateLength, const uint16_t repeat=kTcl112AcDefaultRepeat)
 Send a TCL 112-bit A/C message. Status: Beta / Probably working. More...
 
void sendTeco (const uint64_t data, const uint16_t nbits=kTecoBits, const uint16_t repeat=kNoRepeat)
 Send a Teco A/C message. Status: Beta / Probably working. More...
 
void sendLegoPf (const uint64_t data, const uint16_t nbits=kLegoPfBits, const uint16_t repeat=kLegoPfMinRepeat)
 Send a LEGO Power Functions message. Status: Beta / Should work. More...
 
void sendNeoclima (const unsigned char data[], const uint16_t nbytes=kNeoclimaStateLength, const uint16_t repeat=kNeoclimaMinRepeat)
 Send a Neoclima message. Status: STABLE / Known to be working. More...
 
void sendAmcor (const unsigned char data[], const uint16_t nbytes=kAmcorStateLength, const uint16_t repeat=kAmcorDefaultRepeat)
 Send a Amcor HVAC formatted message. Status: STABLE / Reported as working. More...
 
void sendEpson (uint64_t data, uint16_t nbits=kEpsonBits, uint16_t repeat=kEpsonMinRepeat)
 Send an Epson formatted message. Status: Beta / Probably works. More...
 
void sendSymphony (uint64_t data, uint16_t nbits=kSymphonyBits, uint16_t repeat=kSymphonyDefaultRepeat)
 Send a Symphony packet. Status: STABLE / Should be working. More...
 
void sendAirwell (uint64_t data, uint16_t nbits=kAirwellBits, uint16_t repeat=kAirwellMinRepeats)
 Send an Airwell Manchester Code formatted message. Status: BETA / Appears to be working. More...
 
void sendDelonghiAc (uint64_t data, uint16_t nbits=kDelonghiAcBits, uint16_t repeat=kDelonghiAcDefaultRepeat)
 Send a Delonghi A/C formatted message. Status: STABLE / Reported as working on a real device. More...
 
void sendDoshisha (const uint64_t data, uint16_t nbits=kDoshishaBits, const uint16_t repeat=kNoRepeat)
 Send a Doshisha formatted message. Status: STABLE / Works on real device. More...
 
uint64_t encodeDoshisha (const uint8_t command, const uint8_t channel=0)
 Encode Doshisha combining constant values with command and channel. Status: STABLE / Working. More...
 
void sendMultibrackets (const uint64_t data, const uint16_t nbits=kMultibracketsBits, const uint16_t repeat=kMultibracketsDefaultRepeat)
 Send a Multibrackets formatted message. Status: BETA / Appears to be working. More...
 
void sendTechnibelAc (uint64_t data, uint16_t nbits=kTechnibelAcBits, uint16_t repeat=kTechnibelAcDefaultRepeat)
 Send an Technibel AC formatted message. Status: STABLE / Reported as working on a real device. More...
 
void sendCoronaAc (const uint8_t data[], const uint16_t nbytes=kCoronaAcStateLength, const uint16_t repeat=kNoRepeat)
 Send a CoronaAc formatted message. Status: STABLE / Working on real device. More...
 
void sendZepeal (const uint64_t data, const uint16_t nbits=kZepealBits, const uint16_t repeat=kZepealMinRepeat)
 Send a Zepeal formatted message. Status: STABLE / Works on real device. More...
 
void sendVoltas (const unsigned char data[], const uint16_t nbytes=kVoltasStateLength, const uint16_t repeat=kNoRepeat)
 Send a Voltas formatted message. Status: STABLE / Working on real device. More...
 
void sendMetz (const uint64_t data, const uint16_t nbits=kMetzBits, const uint16_t repeat=kMetzMinRepeat)
 Send a Metz formatted message. Status: Beta / Needs testing against a real device. More...
 
void sendTranscold (const uint64_t data, const uint16_t nbits=kTranscoldBits, const uint16_t repeat=kTranscoldDefaultRepeat)
 Send a Transcold message Status: STABLE / Confirmed Working. More...
 
void sendElitescreens (const uint64_t data, const uint16_t nbits=kEliteScreensBits, const uint16_t repeat=kEliteScreensDefaultRepeat)
 Send an Elite Screens formatted message. Status: BETA / Probably Working. More...
 
void sendMilestag2 (const uint64_t data, const uint16_t nbits=kMilesTag2ShotBits, const uint16_t repeat=kMilesMinRepeat)
 Percentage. More...
 
void sendEcoclim (const uint64_t data, const uint16_t nbits=kEcoclimBits, const uint16_t repeat=kNoRepeat)
 Send a EcoClim A/C formatted message. Status: STABLE / Confirmed working on real device. More...
 
void sendXmp (const uint64_t data, const uint16_t nbits=kXmpBits, const uint16_t repeat=kNoRepeat)
 Send a XMP packet. Status: Beta / Untested against a real device. More...
 
void sendTruma (const uint64_t data, const uint16_t nbits=kTrumaBits, const uint16_t repeat=kNoRepeat)
 Send a Truma formatted message. Status: STABLE / Confirmed working. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static uint16_t minRepeats (const decode_type_t protocol)
 Get the minimum number of repeats for a given protocol. More...
 
static uint16_t defaultBits (const decode_type_t protocol)
 Get the default number of bits for a given protocol. More...
 
static uint32_t encodeMetz (const uint8_t address, const uint8_t command, const bool toggle=false)
 Encode a Metz address, command, and toggle bits into a code suitable for use with sendMetz(). More...
 
- - - - - - - -

-Protected Member Functions

VIRTUAL void ledOff ()
 Turn off the IR LED. More...
 
VIRTUAL void ledOn ()
 Turn on the IR LED. More...
 
- - - - - -

-Protected Attributes

uint8_t outputOn
 
uint8_t outputOff
 
- - - - - - - -

-Private Member Functions

uint32_t calcUSecPeriod (uint32_t hz, bool use_offset=true)
 Calculate the period for a given frequency. More...
 
void _sendSony (const uint64_t data, const uint16_t nbits, const uint16_t repeat, const uint16_t freq)
 Internal procedure to generate a Sony/SIRC(Serial Infra-Red Control) message Status: STABLE / Known working. More...
 
- - - - - - - - - - - - - - - -

-Private Attributes

uint32_t _freq_unittest
 
uint16_t onTimePeriod
 
uint16_t offTimePeriod
 
uint16_t IRpin
 
int8_t periodOffset
 
uint8_t _dutycycle
 
bool modulation
 
-

Detailed Description

-

Class for sending all basic IR protocols.

-
Note
Originally from https://github.com/shirriff/Arduino-IRremote/ Updated by markszabo (https://github.com/crankyoldgit/IRremoteESP8266) for sending IR code on ESP8266
-

Constructor & Destructor Documentation

- -

◆ IRsend()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
IRsend::IRsend (uint16_t IRsendPin,
bool inverted = false,
bool use_modulation = true 
)
-
-explicit
-
- -

Constructor for an IRsend object.

-
Parameters
- - - -
[in]IRsendPinWhich GPIO pin to use when sending an IR command.
[in]invertedOptional flag to invert the output. (default = false) e.g. LED is illuminated when GPIO is LOW rather than HIGH.
-
-
-
Warning
Setting inverted to something other than the default could easily destroy your IR LED if you are overdriving it. Unless you REALLY know what you are doing, don't change this.
-
Parameters
- - -
[in]use_modulationDo we do frequency modulation during transmission? i.e. If not, assume a 100% duty cycle. Ignore attempts to change the duty cycle etc.
-
-
- -
-
-

Member Function Documentation

- -

◆ _delayMicroseconds()

- -
-
- - - - - - - - -
void IRsend::_delayMicroseconds (uint32_t usec)
-
- -

An ESP8266 RTOS watch-dog timer friendly version of delayMicroseconds().

-

A version of delayMicroseconds() that handles large values and does NOT use the watch-dog friendly delay() calls where appropriate.

-
Parameters
- - -
[in]usecNr. of uSeconds to delay for.
-
-
-
Note
Use this only if you know what you are doing as it may cause the WDT to reset the ESP8266.
- -
-
- -

◆ _sendSony()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::_sendSony (const uint64_t data,
const uint16_t nbits,
const uint16_t repeat,
const uint16_t freq 
)
-
-private
-
- -

Internal procedure to generate a Sony/SIRC(Serial Infra-Red Control) message Status: STABLE / Known working.

-
Parameters
- - - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
[in]freqFrequency of the modulation to transmit at. (Hz or kHz)
-
-
- -
-
- -

◆ begin()

- -
-
- - - - - - - -
void IRsend::begin ()
-
- -

Enable the pin for output.

- -
-
- -

◆ calcUSecPeriod()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint32_t IRsend::calcUSecPeriod (uint32_t hz,
bool use_offset = true 
)
-
-private
-
- -

Calculate the period for a given frequency.

-
Parameters
- - - -
[in]hzFrequency in Hz.
[in]use_offsetShould we use the calculated offset or not?
-
-
-
Returns
nr. of uSeconds.
-
Note
(T = 1/f)
- -
-
- -

◆ calibrate()

- -
-
- - - - - - - - -
int8_t IRsend::calibrate (uint16_t hz = 38000U)
-
- -

Calculate & set any offsets to account for execution times during sending.

-
Parameters
- - -
[in]hzThe frequency to calibrate at >= 1000Hz. Default is 38000Hz.
-
-
-
Returns
The calculated period offset (in uSeconds) which is now in use. e.g. -5.
-
Note
This will generate an 65535us mark() IR LED signal. This only needs to be called once, if at all.
- -
-
- -

◆ defaultBits()

- -
-
- - - - - -
- - - - - - - - -
uint16_t IRsend::defaultBits (const decode_type_t protocol)
-
-static
-
- -

Get the default number of bits for a given protocol.

-
Parameters
- - -
[in]protocolProtocol number/type you want the default bit size for.
-
-
-
Returns
The number of bits.
- -
-
- -

◆ enableIROut()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRsend::enableIROut (uint32_t freq,
uint8_t duty = kDutyDefault 
)
-
- -

Set the output frequency modulation and duty cycle.

-
Parameters
- - - -
[in]freqThe freq we want to modulate at. Assumes < 1000 means kHz else Hz.
[in]dutyPercentage duty cycle of the LED. e.g. 25 = 25% = 1/4 on, 3/4 off. If you are not sure, try 50 percent. This is ignored if modulation is disabled at object instantiation.
-
-
-
Note
Integer timing functions & math mean we can't do fractions of microseconds timing. Thus minor changes to the freq & duty values may have limited effect. You've been warned.
- -
-
- -

◆ encodeDoshisha()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodeDoshisha (const uint8_t command,
const uint8_t channel = 0 
)
-
- -

Encode Doshisha combining constant values with command and channel. Status: STABLE / Working.

-
Parameters
- - - -
[in]commandThe command code to be sent.
[in]channelThe one bit channel 0 for CH1 and 1 for CH2
-
-
-
Returns
The corresponding Doshisha code.
- -
-
- -

◆ encodeJVC()

- -
-
- - - - - - - - - - - - - - - - - - -
uint16_t IRsend::encodeJVC (uint8_t address,
uint8_t command 
)
-
- -

Calculate the raw JVC data based on address and command. Status: STABLE / Works fine.

-
Parameters
- - - -
[in]addressAn 8-bit address value.
[in]commandAn 8-bit command value.
-
-
-
Returns
A raw JVC message code, suitable for sendJVC()..
-
See also
http://www.sbprojects.net/knowledge/ir/jvc.php
- -
-
- -

◆ encodeLG()

- -
-
- - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeLG (uint16_t address,
uint16_t command 
)
-
- -

Construct a raw 28-bit LG message code from the supplied address & command. Status: STABLE / Works.

-
Parameters
- - - -
[in]addressThe address code.
[in]commandThe command code.
-
-
-
Returns
A raw 28-bit LG message code suitable for sendLG() etc.
-
Note
Sequence of bits = address + command + checksum.
- -
-
- -

◆ encodeMagiQuest()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodeMagiQuest (const uint32_t wand_id,
const uint16_t magnitude 
)
-
- -

Encode a MagiQuest wand_id, and a magnitude into a single 64bit value. (Only 48 bits of real data + 8 leading zero bits) This is suitable for calling sendMagiQuest() with. e.g. sendMagiQuest(encodeMagiQuest(wand_id, magnitude))

-
Parameters
- - - -
[in]wand_idThe value for the wand ID.
[in]magnitudeThe value for the magnitude
-
-
-
Returns
A code suitable for calling sendMagiQuest() with.
- -
-
- -

◆ encodeMetz()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeMetz (const uint8_t address,
const uint8_t command,
const bool toggle = false 
)
-
-static
-
- -

Encode a Metz address, command, and toggle bits into a code suitable for use with sendMetz().

-
Parameters
- - - - -
[in]addressA 3-bit address value.
[in]commandA 6-bit command value.
[in]toggleShould the toggle bit be set in the result?
-
-
-
Returns
A 19-bit value suitable for use with sendMetz().
- -
-
- -

◆ encodeNEC()

- -
-
- - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeNEC (uint16_t address,
uint16_t command 
)
-
- -

Calculate the raw NEC data based on address and command. Status: STABLE / Expected to work.

-
Parameters
- - - -
[in]addressAn address value.
[in]commandAn 8-bit command value.
-
-
-
Returns
A raw 32-bit NEC message suitable for use with sendNEC().
-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
- -
-
- -

◆ encodePanasonic()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodePanasonic (const uint16_t manufacturer,
const uint8_t device,
const uint8_t subdevice,
const uint8_t function 
)
-
- -

Calculate the raw Panasonic data based on device, subdevice, & function. Status: STABLE / Should be working.

-
Parameters
- - - - - -
[in]manufacturerA 16-bit manufacturer code. e.g. 0x4004 is Panasonic
[in]deviceAn 8-bit code.
[in]subdeviceAn 8-bit code.
[in]functionAn 8-bit code.
-
-
-
Returns
A value suitable for use with sendPanasonic64().
-
Note
Panasonic 48-bit protocol is a modified version of Kaseikyo.
-
See also
http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?2615
- -
-
- -

◆ encodePioneer()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodePioneer (uint16_t address,
uint16_t command 
)
-
- -

Calculate the raw Pioneer data code based on two NEC sub-codes Status: STABLE / Expected to work.

-
Parameters
- - - -
[in]addressA 16-bit "published" NEC value.
[in]commandA 16-bit "published" NEC value.
-
-
-
Returns
A raw 64-bit Pioneer message code for use with sendPioneer()`
-
Note
Address & Command can be take from a decode result OR from the spreadsheets located at: https://www.pioneerelectronics.com/PUSA/Support/Home-Entertainment-Custom-Install/IR+Codes/A+V+Receivers where the first part is considered the address, and the second the command. e.g. "A556+AF20" is an Address of 0xA556 & a Command of 0xAF20.
- -
-
- -

◆ encodeRC5()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRsend::encodeRC5 (const uint8_t address,
const uint8_t command,
const bool key_released = false 
)
-
- -

Encode a Philips RC-5 data message. Status: Beta / Should be working.

-
Parameters
- - - - -
[in]addressThe 5-bit address value for the message.
[in]commandThe 6-bit command value for the message.
[in]key_releasedIndicate if the remote key has been released.
-
-
-
Returns
A message suitable for use in sendRC5().
- -
-
- -

◆ encodeRC5X()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint16_t IRsend::encodeRC5X (const uint8_t address,
const uint8_t command,
const bool key_released = false 
)
-
- -

Encode a Philips RC-5X data message. Status: Beta / Should be working.

-
Parameters
- - - - -
[in]addressThe 5-bit address value for the message.
[in]commandThe 7-bit command value for the message.
[in]key_releasedIndicate if the remote key has been released.
-
-
-
Returns
A message suitable for use in sendRC5().
- -
-
- -

◆ encodeRC6()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodeRC6 (const uint32_t address,
const uint8_t command,
const uint16_t mode = kRC6Mode0Bits 
)
-
- -

Encode a Philips RC-6 data message. Status: Beta / Should be working.

-
Parameters
- - - - -
[in]addressThe address (aka. control) value for the message. Includes the field/mode/toggle bits.
[in]commandThe 8-bit command value for the message. (aka. information)
[in]modeWhich protocol to use. Defined by nr. of bits in the protocol.
-
-
-
Returns
A data message suitable for use in sendRC6().
- -
-
- -

◆ encodeSAMSUNG()

- -
-
- - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeSAMSUNG (const uint8_t customer,
const uint8_t command 
)
-
- -

Construct a raw Samsung message from the supplied customer(address) & command. Status: STABLE / Should be working.

-
Parameters
- - - -
[in]customerThe customer code. (aka. Address)
[in]commandThe command code.
-
-
-
Returns
A raw 32-bit Samsung message suitable for sendSAMSUNG().
- -
-
- -

◆ encodeSanyoLC7461()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t IRsend::encodeSanyoLC7461 (uint16_t address,
uint8_t command 
)
-
- -

Construct a Sanyo LC7461 message.

-
Parameters
- - - -
[in]addressThe 13 bit value of the address(Custom) portion of the protocol.
[in]commandThe 8 bit value of the command(Key) portion of the protocol.
-
-
-
Returns
An uint64_t with the encoded raw 42 bit Sanyo LC7461 data value.
-
Note
This protocol uses the NEC protocol timings. However, data is formatted as : address(13 bits), !address, command(8 bits), !command. According with LIRC, this protocol is used on Sanyo, Aiwa and Chinon
- -
-
- -

◆ encodeSharp()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeSharp (const uint16_t address,
const uint16_t command,
const uint16_t expansion = 1,
const uint16_t check = 0,
const bool MSBfirst = false 
)
-
- -

Encode a (raw) Sharp message from it's components. Status: STABLE / Works okay.

-
Parameters
- - - - - - -
[in]addressThe value of the address to be sent.
[in]commandThe value of the address to be sent. (8 bits)
[in]expansionThe value of the expansion bit to use. (0 or 1, typically 1)
[in]checkThe value of the check bit to use. (0 or 1, typically 0)
[in]MSBfirstFlag indicating MSB first or LSB first order.
-
-
-
Returns
A uint32_t containing the raw Sharp message for sendSharpRaw().
-
Note
Assumes the standard Sharp bit sizes. Historically sendSharp() sends address & command in MSB first order. This is actually incorrect. It should be sent in LSB order. The behaviour of sendSharp() hasn't been changed to maintain backward compatibility.
- -
-
- -

◆ encodeSony()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uint32_t IRsend::encodeSony (const uint16_t nbits,
const uint16_t command,
const uint16_t address,
const uint16_t extended = 0 
)
-
- -

Convert Sony/SIRC command, address, & extended bits into sendSony format. Status: STABLE / Should be working.

-
Parameters
- - - - - -
[in]nbitsSony protocol bit size.
[in]commandSony command bits.
[in]addressSony address bits.
[in]extendedSony extended bits.
-
-
-
Returns
A sendSony() etc compatible data message.
- -
-
- -

◆ ledOff()

- -
-
- - - - - -
- - - - - - - -
void IRsend::ledOff ()
-
-protected
-
- -

Turn off the IR LED.

- -
-
- -

◆ ledOn()

- -
-
- - - - - -
- - - - - - - -
void IRsend::ledOn ()
-
-protected
-
- -

Turn on the IR LED.

- -
-
- -

◆ mark()

- -
-
- - - - - - - - -
uint16_t IRsend::mark (uint16_t usec)
-
- -

Modulate the IR LED for the given period (usec) and at the duty cycle set.

-
Parameters
- - -
[in]usecThe period of time to modulate the IR LED for, in microseconds.
-
-
-
Returns
Nr. of pulses actually sent.
-
Note
The ESP8266 has no good way to do hardware PWM, so we have to do it all in software. There is a horrible kludge/brilliant hack to use the second serial TX line to do fairly accurate hardware PWM, but it is only available on a single specific GPIO and only available on some modules. e.g. It's not available on the ESP-01 module. Hence, for greater compatibility & choice, we don't use that method. Ref: https://www.analysir.com/blog/2017/01/29/updated-esp8266-nodemcu-backdoor-upwm-hack-for-ir-signals/
- -
-
- -

◆ minRepeats()

- -
-
- - - - - -
- - - - - - - - -
uint16_t IRsend::minRepeats (const decode_type_t protocol)
-
-static
-
- -

Get the minimum number of repeats for a given protocol.

-
Parameters
- - -
[in]protocolProtocol number/type of the message you want to send.
-
-
-
Returns
The number of repeats required.
- -
-
- -

◆ send() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool IRsend::send (const decode_type_t type,
const uint64_t data,
const uint16_t nbits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a simple (up to 64 bits) IR message of a given type. An unknown/unsupported type will send nothing.

-
Parameters
- - - - - -
[in]typeProtocol number/type of the message you want to send.
[in]dataThe data you want to send (up to 64 bits).
[in]nbitsHow many bits long the message is to be.
[in]repeatHow many repeats to do?
-
-
-
Returns
True if it is a type we can attempt to send, false if not.
- -
-
- -

◆ send() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool IRsend::send (const decode_type_t type,
const uint8_t * state,
const uint16_t nbytes 
)
-
- -

Send a complex (>= 64 bits) IR message of a given type. An unknown/unsupported type will send nothing.

-
Parameters
- - - - -
[in]typeProtocol number/type of the message you want to send.
[in]stateA pointer to the array of bytes that make up the state[].
[in]nbytesHow many bytes are in the state.
-
-
-
Returns
True if it is a type we can attempt to send, false if not.
- -
-
- -

◆ sendAirwell()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendAirwell (uint64_t data,
uint16_t nbits = kAirwellBits,
uint16_t repeat = kAirwellMinRepeats 
)
-
- -

Send an Airwell Manchester Code formatted message. Status: BETA / Appears to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of the message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1069
- -
-
- -

◆ sendAiwaRCT501()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendAiwaRCT501 (uint64_t data,
uint16_t nbits = kAiwaRcT501Bits,
uint16_t repeat = kAiwaRcT501MinRepeats 
)
-
- -

Send an Aiwa RC T501 formatted message. Status: BETA / Should work.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of the message to be sent. Typically kAiwaRcT501Bits. Max is 37 = (64 - 27)
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
http://lirc.sourceforge.net/remotes/aiwa/RC-T501
- -
-
- -

◆ sendAmcor()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendAmcor (const unsigned char data[],
const uint16_t nbytes = kAmcorStateLength,
const uint16_t repeat = kAmcorDefaultRepeat 
)
-
- -

Send a Amcor HVAC formatted message. Status: STABLE / Reported as working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendArgo()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendArgo (const unsigned char data[],
const uint16_t nbytes = kArgoStateLength,
const uint16_t repeat = kArgoDefaultRepeat 
)
-
- -

Send a Argo A/C formatted message. Status: BETA / Probably works.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendCarrierAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendCarrierAC (uint64_t data,
uint16_t nbits = kCarrierAcBits,
uint16_t repeat = kCarrierAcMinRepeat 
)
-
- -

Send a Carrier HVAC formatted message. Status: STABLE / Works on real devices.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendCarrierAC40()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendCarrierAC40 (uint64_t data,
uint16_t nbits = kCarrierAc40Bits,
uint16_t repeat = kCarrierAc40MinRepeat 
)
-
- -

Send a Carrier 40bit HVAC formatted message. Status: STABLE / Tested against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe bit size of the message being sent.
[in]repeatThe number of times the message is to be repeated.
-
-
- -
-
- -

◆ sendCarrierAC64()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendCarrierAC64 (uint64_t data,
uint16_t nbits = kCarrierAc64Bits,
uint16_t repeat = kCarrierAc64MinRepeat 
)
-
- -

Send a Carrier 64bit HVAC formatted message. Status: STABLE / Known to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe bit size of the message being sent.
[in]repeatThe number of times the message is to be repeated.
-
-
- -
-
- -

◆ sendCOOLIX()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendCOOLIX (uint64_t data,
uint16_t nbits = kCoolixBits,
uint16_t repeat = kCoolixDefaultRepeat 
)
-
- -

Send a Coolix message Status: STABLE / Confirmed Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/z3t0/Arduino-IRremote/blob/master/ir_COOLIX.cpp
- -
-
- -

◆ sendCoronaAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendCoronaAc (const uint8_t data[],
const uint16_t nbytes = kCoronaAcStateLength,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a CoronaAc formatted message. Status: STABLE / Working on real device.

-
Parameters
- - - - -
[in]dataAn array of bytes containing the IR command.
[in]nbytesNr. of bytes of data in the array. e.g.
uint8_t data[kCoronaAcStateLength] = {
-
0x28, 0x61, 0x3D, 0x19, 0xE6, 0x37, 0xC8,
-
0x28, 0x61, 0x6D, 0xFF, 0x00, 0xFF, 0x00,
-
0x28, 0x61, 0xCD, 0xFF, 0x00, 0xFF, 0x00};
-
[in]repeatNr. of times the message is to be repeated.
-
-
- -
-
- -

◆ sendDaikin()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin (const unsigned char data[],
const uint16_t nbytes = kDaikinStateLength,
const uint16_t repeat = kDaikinDefaultRepeat 
)
-
- -

Send a Daikin 280-bit A/C formatted message. Status: STABLE.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/mharizanov/Daikin-AC-remote-control-over-the-Internet/tree/master/IRremote
-
-https://github.com/blafois/Daikin-IR-Reverse
- -
-
- -

◆ sendDaikin128()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin128 (const unsigned char data[],
const uint16_t nbytes = kDaikin128StateLength,
const uint16_t repeat = kDaikin128DefaultRepeat 
)
-
- -

Send a Daikin128 (128-bit) A/C formatted message. Status: STABLE / Known Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/827
- -
-
- -

◆ sendDaikin152()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin152 (const unsigned char data[],
const uint16_t nbytes = kDaikin152StateLength,
const uint16_t repeat = kDaikin152DefaultRepeat 
)
-
- -

Send a Daikin152 (152-bit) A/C formatted message. Status: STABLE / Known Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/873
- -
-
- -

◆ sendDaikin160()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin160 (const unsigned char data[],
const uint16_t nbytes = kDaikin160StateLength,
const uint16_t repeat = kDaikin160DefaultRepeat 
)
-
- -

Send a Daikin160 (160-bit) A/C formatted message. Status: STABLE / Confirmed working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/731
- -
-
- -

◆ sendDaikin176()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin176 (const unsigned char data[],
const uint16_t nbytes = kDaikin176StateLength,
const uint16_t repeat = kDaikin176DefaultRepeat 
)
-
- -

Send a Daikin176 (176-bit) A/C formatted message. Status: STABLE / Working on a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendDaikin2()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin2 (const unsigned char data[],
const uint16_t nbytes = kDaikin2StateLength,
const uint16_t repeat = kDaikin2DefaultRepeat 
)
-
- -

Send a Daikin2 (312-bit) A/C formatted message. Status: STABLE / Expected to work.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/582
- -
-
- -

◆ sendDaikin216()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin216 (const unsigned char data[],
const uint16_t nbytes = kDaikin216StateLength,
const uint16_t repeat = kDaikin216DefaultRepeat 
)
-
- -

Send a Daikin216 (216-bit) A/C formatted message. Status: Alpha / Untested on a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/689
-
-https://github.com/danny-source/Arduino_DY_IRDaikin
- -
-
- -

◆ sendDaikin64()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDaikin64 (const uint64_t data,
const uint16_t nbits = kDaikin64Bits,
const uint16_t repeat = kDaikin64DefaultRepeat 
)
-
- -

Send a Daikin64 (64-bit) A/C formatted message. Status: Beta / Probably Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1064
- -
-
- -

◆ sendData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendData (uint16_t onemark,
uint32_t onespace,
uint16_t zeromark,
uint32_t zerospace,
uint64_t data,
uint16_t nbits,
bool MSBfirst = true 
)
-
- -

Generic method for sending data that is common to most protocols. Will send leading or trailing 0's if the nbits is larger than the number of bits in data.

-
Parameters
- - - - - - - - -
[in]onemarkNr. of usecs for the led to be pulsed for a '1' bit.
[in]onespaceNr. of usecs for the led to be fully off for a '1' bit.
[in]zeromarkNr. of usecs for the led to be pulsed for a '0' bit.
[in]zerospaceNr. of usecs for the led to be fully off for a '0' bit.
[in]dataThe data to be transmitted.
[in]nbitsNr. of bits of data to be sent.
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
-
-
- -
-
- -

◆ sendDelonghiAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDelonghiAc (uint64_t data,
uint16_t nbits = kDelonghiAcBits,
uint16_t repeat = kDelonghiAcDefaultRepeat 
)
-
- -

Send a Delonghi A/C formatted message. Status: STABLE / Reported as working on a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1096
- -
-
- -

◆ sendDenon()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDenon (uint64_t data,
uint16_t nbits = kDenonBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a Denon formatted message. Status: STABLE / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Some Denon devices use a Kaseikyo/Panasonic 48-bit format Others use the Sharp protocol.
- -
-
- -

◆ sendDISH()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDISH (uint64_t data,
uint16_t nbits = kDishBits,
uint16_t repeat = kDishMinRepeat 
)
-
- -

Send a DISH NETWORK formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Dishplayer is a different protocol. Typically a DISH device needs to get a command a total of at least 4 times to accept it. e.g. repeat=3
-

Here is the LIRC file I found that seems to match the remote codes from the oscilloscope: DISH NETWORK (echostar 301):

See also
http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx
-
-http://www.hifi-remote.com/wiki/index.php?title=Dish
- -
-
- -

◆ sendDoshisha()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendDoshisha (const uint64_t data,
uint16_t nbits = kDoshishaBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Doshisha formatted message. Status: STABLE / Works on real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendEcoclim()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendEcoclim (const uint64_t data,
const uint16_t nbits = kEcoclimBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a EcoClim A/C formatted message. Status: STABLE / Confirmed working on real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendElectraAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendElectraAC (const unsigned char data[],
const uint16_t nbytes = kElectraAcStateLength,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Electra A/C formatted message. Status: Alpha / Needs testing against a real device.

-
Parameters
- - -
[in]dataThe message to be sent.
-
-
-
Note
Guessing MSBF order.
-
Parameters
- - - -
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendElitescreens()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendElitescreens (const uint64_t data,
const uint16_t nbits = kEliteScreensBits,
const uint16_t repeat = kEliteScreensDefaultRepeat 
)
-
- -

Send an Elite Screens formatted message. Status: BETA / Probably Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendEpson()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendEpson (uint64_t data,
uint16_t nbits = kEpsonBits,
uint16_t repeat = kEpsonMinRepeat 
)
-
- -

Send an Epson formatted message. Status: Beta / Probably works.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of nbits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendFujitsuAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendFujitsuAC (const unsigned char data[],
const uint16_t nbytes,
const uint16_t repeat = kFujitsuAcMinRepeat 
)
-
- -

Send a Fujitsu A/C formatted message. Status: STABLE / Known Good.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent. Typically one of: kFujitsuAcStateLength, kFujitsuAcStateLength - 1, kFujitsuAcStateLengthShort, kFujitsuAcStateLengthShort - 1
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendGC()

- -
-
- - - - - - - - - - - - - - - - - - -
void IRsend::sendGC (uint16_t buf[],
uint16_t len 
)
-
- -

Send a shortened GlobalCache (GC) IRdb/control tower formatted message. Status: STABLE / Known working.

-
Parameters
- - - -
[in]bufArray of uint16_t containing the shortened GlobalCache data.
[in]lenNr. of entries in the buf[] array.
-
-
-
Note
Global Cache format without the emitter ID or request ID. Starts at the frequency (Hertz), followed by nr. of times to emit (count), then the offset for repeats (where a repeat will start from), then the rest of entries are the actual IR message as units of periodic time. e.g. sendir,1:1,1,38000,1,1,9,70,9,30,9,... -> 38000,1,1,9,70,9,30,9,...
-
See also
https://irdb.globalcache.com/Home/Database
- -
-
- -

◆ sendGeneric() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGeneric (const uint16_t headermark,
const uint32_t headerspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t gap,
const uint32_t mesgtime,
const uint64_t data,
const uint16_t nbits,
const uint16_t frequency,
const bool MSBfirst,
const uint16_t repeat,
const uint8_t dutycycle 
)
-
- -

Generic method for sending simple protocol messages. Will send leading or trailing 0's if the nbits is larger than the number of bits in data.

-
Parameters
- - - - - - - - - - - - - - - - -
[in]headermarkNr. of usecs for the led to be pulsed for the header mark. A value of 0 means no header mark.
[in]headerspaceNr. of usecs for the led to be off after the header mark. A value of 0 means no header space.
[in]onemarkNr. of usecs for the led to be pulsed for a '1' bit.
[in]onespaceNr. of usecs for the led to be fully off for a '1' bit.
[in]zeromarkNr. of usecs for the led to be pulsed for a '0' bit.
[in]zerospaceNr. of usecs for the led to be fully off for a '0' bit.
[in]footermarkNr. of usecs for the led to be pulsed for the footer mark. A value of 0 means no footer mark.
[in]gapNr. of usecs for the led to be off after the footer mark. This is effectively the gap between messages. A value of 0 means no gap space.
[in]mesgtimeMin. nr. of usecs a single message needs to be. This is effectively the min. total length of a single message.
[in]dataThe data to be transmitted.
[in]nbitsNr. of bits of data to be sent.
[in]frequencyThe frequency we want to modulate at. (Hz/kHz)
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
[in]repeatNr. of extra times the message will be sent. e.g. 0 = 1 message sent, 1 = 1 initial + 1 repeat = 2 messages
[in]dutycyclePercentage duty cycle of the LED. e.g. 25 = 25% = 1/4 on, 3/4 off. If you are not sure, try 50 percent.
-
-
-
Note
Assumes a frequency < 1000 means kHz otherwise it is in Hz. Most common value is 38000 or 38, for 38kHz.
- -
-
- -

◆ sendGeneric() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGeneric (const uint16_t headermark,
const uint32_t headerspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t gap,
const uint64_t data,
const uint16_t nbits,
const uint16_t frequency,
const bool MSBfirst,
const uint16_t repeat,
const uint8_t dutycycle 
)
-
- -

Generic method for sending simple protocol messages. Will send leading or trailing 0's if the nbits is larger than the number of bits in data.

-
Parameters
- - - - - - - - - - - - - - - -
[in]headermarkNr. of usecs for the led to be pulsed for the header mark. A value of 0 means no header mark.
[in]headerspaceNr. of usecs for the led to be off after the header mark. A value of 0 means no header space.
[in]onemarkNr. of usecs for the led to be pulsed for a '1' bit.
[in]onespaceNr. of usecs for the led to be fully off for a '1' bit.
[in]zeromarkNr. of usecs for the led to be pulsed for a '0' bit.
[in]zerospaceNr. of usecs for the led to be fully off for a '0' bit.
[in]footermarkNr. of usecs for the led to be pulsed for the footer mark. A value of 0 means no footer mark.
[in]gapNr. of usecs for the led to be off after the footer mark. This is effectively the gap between messages. A value of 0 means no gap space.
[in]dataThe data to be transmitted.
[in]nbitsNr. of bits of data to be sent.
[in]frequencyThe frequency we want to modulate at. (Hz/kHz)
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
[in]repeatNr. of extra times the message will be sent. e.g. 0 = 1 message sent, 1 = 1 initial + 1 repeat = 2 messages
[in]dutycyclePercentage duty cycle of the LED. e.g. 25 = 25% = 1/4 on, 3/4 off. If you are not sure, try 50 percent.
-
-
-
Note
Assumes a frequency < 1000 means kHz otherwise it is in Hz. Most common value is 38000 or 38, for 38kHz.
- -
-
- -

◆ sendGeneric() [3/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGeneric (const uint16_t headermark,
const uint32_t headerspace,
const uint16_t onemark,
const uint32_t onespace,
const uint16_t zeromark,
const uint32_t zerospace,
const uint16_t footermark,
const uint32_t gap,
const uint8_t * dataptr,
const uint16_t nbytes,
const uint16_t frequency,
const bool MSBfirst,
const uint16_t repeat,
const uint8_t dutycycle 
)
-
- -

Generic method for sending simple protocol messages.

-
Parameters
- - - - - - - - - - - - - - - -
[in]headermarkNr. of usecs for the led to be pulsed for the header mark. A value of 0 means no header mark.
[in]headerspaceNr. of usecs for the led to be off after the header mark. A value of 0 means no header space.
[in]onemarkNr. of usecs for the led to be pulsed for a '1' bit.
[in]onespaceNr. of usecs for the led to be fully off for a '1' bit.
[in]zeromarkNr. of usecs for the led to be pulsed for a '0' bit.
[in]zerospaceNr. of usecs for the led to be fully off for a '0' bit.
[in]footermarkNr. of usecs for the led to be pulsed for the footer mark. A value of 0 means no footer mark.
[in]gapNr. of usecs for the led to be off after the footer mark. This is effectively the gap between messages. A value of 0 means no gap space.
[in]dataptrPointer to the data to be transmitted.
[in]nbytesNr. of bytes of data to be sent.
[in]frequencyThe frequency we want to modulate at. (Hz/kHz)
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
[in]repeatNr. of extra times the message will be sent. e.g. 0 = 1 message sent, 1 = 1 initial + 1 repeat = 2 messages
[in]dutycyclePercentage duty cycle of the LED. e.g. 25 = 25% = 1/4 on, 3/4 off. If you are not sure, try 50 percent.
-
-
-
Note
Assumes a frequency < 1000 means kHz otherwise it is in Hz. Most common value is 38000 or 38, for 38kHz.
- -
-
- -

◆ sendGICable()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGICable (uint64_t data,
uint16_t nbits = kGicableBits,
uint16_t repeat = kGicableMinRepeat 
)
-
- -

Send a raw G.I. Cable formatted message. Status: Alpha / Untested.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendGoodweather()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGoodweather (const uint64_t data,
const uint16_t nbits = kGoodweatherBits,
const uint16_t repeat = kGoodweatherMinRepeat 
)
-
- -

Send a Goodweather HVAC formatted message. Status: BETA / Needs testing on real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendGree() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGree (const uint64_t data,
const uint16_t nbits = kGreeBits,
const uint16_t repeat = kGreeDefaultRepeat 
)
-
- -

Send a Gree Heat Pump formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendGree() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendGree (const uint8_t data[],
const uint16_t nbytes = kGreeStateLength,
const uint16_t repeat = kGreeDefaultRepeat 
)
-
- -

Send a Gree Heat Pump formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendHaierAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHaierAC (const unsigned char data[],
const uint16_t nbytes = kHaierACStateLength,
const uint16_t repeat = kHaierAcDefaultRepeat 
)
-
- -

Send a Haier A/C formatted message. (HSU07-HEA03 remote) Status: STABLE / Known to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendHaierACYRW02()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHaierACYRW02 (const unsigned char data[],
const uint16_t nbytes = kHaierACYRW02StateLength,
const uint16_t repeat = kHaierAcYrw02DefaultRepeat 
)
-
- -

Send a Haier YR-W02 remote A/C formatted message. Status: Alpha / Untested on a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendHitachiAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAC (const unsigned char data[],
const uint16_t nbytes = kHitachiAcStateLength,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi 28-byte/224-bit A/C formatted message. (HITACHI_AC) Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/417
- -
-
- -

◆ sendHitachiAC1()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAC1 (const unsigned char data[],
const uint16_t nbytes = kHitachiAc1StateLength,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi 13 byte/224-bit A/C formatted message. (HITACHI_AC1) Status: STABLE / Confirmed Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Basically the same as sendHitatchiAC() except different size & header.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/453
- -
-
- -

◆ sendHitachiAC2()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAC2 (const unsigned char data[],
const uint16_t nbytes = kHitachiAc2StateLength,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi 53 byte/424-bit A/C formatted message. (HITACHI_AC2) Basically the same as sendHitatchiAC() except different size. Status: STABLE / Expected to work.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendHitachiAc3()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAc3 (const unsigned char data[],
const uint16_t nbytes,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi(3) A/C formatted message. (HITACHI_AC3) Status: STABLE / Working fine.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is almost exactly the same as HitachiAC424 except this variant has subtle timing differences. There are five(5) typical sizes: kHitachiAc3MinStateLength (Cancel Timer), kHitachiAc3MinStateLength + 2 (Change Temp), kHitachiAc3StateLength - 6 (Change Mode), kHitachiAc3StateLength - 4 (Normal), & kHitachiAc3StateLength (Set Timer)
- -
-
- -

◆ sendHitachiAc344()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAc344 (const unsigned char data[],
const uint16_t nbytes = kHitachiAc344StateLength,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi A/C 43-byte/344-bit message. (HITACHI_AC344) Basically the same as sendHitatchiAC() except different size. Status: Beta / Probably works.

-
Parameters
- - - - -
[in]dataAn array of bytes containing the IR command.
[in]nbytesNr. of bytes of data in the array.
[in]repeatNr. of times the message is to be repeated. (Default = 0).
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1134
- -
-
- -

◆ sendHitachiAc424()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendHitachiAc424 (const unsigned char data[],
const uint16_t nbytes = kHitachiAc424StateLength,
const uint16_t repeat = kHitachiAcDefaultRepeat 
)
-
- -

Send a Hitachi 53-byte/424-bit A/C formatted message. (HITACHI_AC424) Status: STABLE / Reported as working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is almost exactly the same as HitachiAC2 except this variant has a leader section as well, and subtle timing differences. It is also in LSBF order (per byte), rather than MSBF order.
- -
-
- -

◆ sendInax()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendInax (const uint64_t data,
const uint16_t nbits = kInaxBits,
const uint16_t repeat = kInaxMinRepeat 
)
-
- -

Send a Inax Toilet formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/706
- -
-
- -

◆ sendJVC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendJVC (uint64_t data,
uint16_t nbits = kJvcBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a JVC formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
http://www.sbprojects.net/knowledge/ir/jvc.php
- -
-
- -

◆ sendKelvinator()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendKelvinator (const unsigned char data[],
const uint16_t nbytes = kKelvinatorStateLength,
const uint16_t repeat = kKelvinatorDefaultRepeat 
)
-
- -

Send a Kelvinator A/C message. Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendLasertag()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendLasertag (uint64_t data,
uint16_t nbits = kLasertagBits,
uint16_t repeat = kLasertagMinRepeat 
)
-
- -

Send a Lasertag packet/message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is pretty much just raw Manchester encoding.
-
Todo:
Convert this to use sendManchester() if we can.`
- -
-
- -

◆ sendLegoPf()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendLegoPf (const uint64_t data,
const uint16_t nbits = kLegoPfBits,
const uint16_t repeat = kLegoPfMinRepeat 
)
-
- -

Send a LEGO Power Functions message. Status: Beta / Should work.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Non-zero repeats results in at least 5 messages per spec.
- -
-
- -

◆ sendLG()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendLG (uint64_t data,
uint16_t nbits = kLgBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send an LG formatted message. (LG) Status: Beta / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent. Typically kLgBits or kLg32Bits.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
LG has a separate message to indicate a repeat, like NEC does.
- -
-
- -

◆ sendLG2()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendLG2 (uint64_t data,
uint16_t nbits = kLgBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send an LG Variant-2 formatted message. (LG2) Status: Beta / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent. Typically kLgBits or kLg32Bits.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
LG has a separate message to indicate a repeat, like NEC does.
- -
-
- -

◆ sendLutron()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendLutron (uint64_t data,
uint16_t nbits = kLutronBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a Lutron formatted message. Status: Stable / Appears to be working for real devices.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
The protocol is really 36 bits long, but the first bit is always a 1. So, assume the 1 and only have a normal payload of 35 bits.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/515
- -
-
- -

◆ sendMagiQuest()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMagiQuest (const uint64_t data,
const uint16_t nbits = kMagiquestBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a MagiQuest formatted message. Status: Beta / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendManchester()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendManchester (const uint16_t headermark,
const uint32_t headerspace,
const uint16_t half_period,
const uint16_t footermark,
const uint32_t gap,
const uint64_t data,
const uint16_t nbits,
const uint16_t frequency = 38,
const bool MSBfirst = true,
const uint16_t repeat = kNoRepeat,
const uint8_t dutycycle = kDutyDefault,
const bool GEThomas = true 
)
-
- -

Generic method for sending Manchester code messages. Will send leading or trailing 0's if the nbits is larger than the number.

-
Parameters
- - - - - - - - - - - - - -
[in]headermarkNr. of usecs for the led to be pulsed for the header mark. A value of 0 means no header mark.
[in]headerspaceNr. of usecs for the led to be off after the header mark. A value of 0 means no header space.
[in]half_periodNr. of uSeconds for half the clock's period. (1/2 wavelength)
[in]footermarkNr. of usecs for the led to be pulsed for the footer mark. A value of 0 means no footer mark.
[in]gapMin. nr. of usecs for the led to be off after the footer mark. This is effectively the absolute minimum gap between messages.
[in]dataThe data to be transmitted.
[in]nbitsNr. of bits of data to be sent.
[in]frequencyThe frequency we want to modulate at. (Hz/kHz)
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
[in]repeatNr. of extra times the message will be sent. e.g. 0 = 1 message sent, 1 = 1 initial + 1 repeat = 2 messages
[in]dutycyclePercentage duty cycle of the LED. e.g. 25 = 25% = 1/4 on, 3/4 off. If you are not sure, try 50 percent.
[in]GEThomasUse G.E. Thomas (true/default) or IEEE 802.3 (false).
-
-
-
Note
Assumes a frequency < 1000 means kHz otherwise it is in Hz. Most common value is 38000 or 38, for 38kHz.
- -
-
- -

◆ sendManchesterData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendManchesterData (const uint16_t half_period,
const uint64_t data,
const uint16_t nbits,
const bool MSBfirst = true,
const bool GEThomas = true 
)
-
- -

Generic method for sending Manchester code data. Will send leading or trailing 0's if the nbits is larger than the number of bits in data.

-
Parameters
- - - - - - -
[in]half_periodNr. of uSeconds for half the clock's period. (1/2 wavelength)
[in]dataThe data to be transmitted.
[in]nbitsNr. of bits of data to be sent.
[in]MSBfirstFlag for bit transmission order. Defaults to MSB->LSB order.
[in]GEThomasUse G.E. Thomas (true/default) or IEEE 802.3 (false).
-
-
- -
-
- -

◆ sendMetz()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMetz (const uint64_t data,
const uint16_t nbits = kMetzBits,
const uint16_t repeat = kMetzMinRepeat 
)
-
- -

Send a Metz formatted message. Status: Beta / Needs testing against a real device.

-
Parameters
- - - - -
[in]datacontaining the IR command.
[in]nbitsNr. of bits to send. usually kMetzBits
[in]repeatNr. of times the message is to be repeated.
-
-
- -
-
- -

◆ sendMidea()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMidea (uint64_t data,
uint16_t nbits = kMideaBits,
uint16_t repeat = kMideaMinRepeat 
)
-
- -

Send a Midea message Status: Alpha / Needs testing against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMidea24()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMidea24 (const uint64_t data,
const uint16_t nbits = kMidea24Bits,
const uint16_t repeat = kMidea24MinRepeat 
)
-
- -

Send a Midea24 formatted message. Status: STABLE / Confirmed working on a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1170
-
Note
This protocol is basically a 48-bit version of the NEC protocol with alternate bytes inverted, thus only 24 bits of real data, and with at least a single repeat.
-
Warning
Can't be used beyond 32 bits.
- -
-
- -

◆ sendMilestag2()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMilestag2 (const uint64_t data,
const uint16_t nbits = kMilesTag2ShotBits,
const uint16_t repeat = kMilesMinRepeat 
)
-
- -

Percentage.

-

Send a MilesTag2 formatted Shot/Msg packet. Status: ALPHA / Probably works but needs testing with a real device.

Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMirage()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMirage (const unsigned char data[],
const uint16_t nbytes = kMirageStateLength,
const uint16_t repeat = kMirageMinRepeat 
)
-
- -

Send a Mirage formatted message. Status: STABLE / Reported as working.

-
Parameters
- - - - -
[in]dataAn array of bytes containing the IR command.
[in]nbytesNr. of bytes of data in the array. (>=kMirageStateLength)
[in]repeatNr. of times the message is to be repeated.
-
-
- -
-
- -

◆ sendMitsubishi()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishi (uint64_t data,
uint16_t nbits = kMitsubishiBits,
uint16_t repeat = kMitsubishiMinRepeat 
)
-
- -

Send the supplied Mitsubishi 16-bit message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol appears to have no header.
-
See also
https://github.com/marcosamarinho/IRremoteESP8266/blob/master/ir_Mitsubishi.cpp
-
-GlobalCache's Control Tower's Mitsubishi TV data.
- -
-
- -

◆ sendMitsubishi112()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishi112 (const unsigned char data[],
const uint16_t nbytes = kMitsubishi112StateLength,
const uint16_t repeat = kMitsubishi112MinRepeat 
)
-
- -

Send a Mitsubishi 112-bit A/C formatted message. (MITSUBISHI112) Status: Stable / Reported as working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/947
- -
-
- -

◆ sendMitsubishi136()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishi136 (const unsigned char data[],
const uint16_t nbytes = kMitsubishi136StateLength,
const uint16_t repeat = kMitsubishi136MinRepeat 
)
-
- -

Send a Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: BETA / Probably working. Needs to be tested against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/888
- -
-
- -

◆ sendMitsubishi2()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishi2 (uint64_t data,
uint16_t nbits = kMitsubishiBits,
uint16_t repeat = kMitsubishiMinRepeat 
)
-
- -

Send a supplied second variant Mitsubishi 16-bit message. Status: BETA / Probably works.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Based on a Mitsubishi HC3000 projector's remote. This protocol appears to have a mandatory in-protocol repeat. That is in addition to the entire message needing to be sent twice for the device to accept the command. That is separate from the repeat. i.e. Allegedly, the real remote requires the "Off" button pressed twice. You will need to add a suitable gap yourself.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/441
- -
-
- -

◆ sendMitsubishiAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishiAC (const unsigned char data[],
const uint16_t nbytes = kMitsubishiACStateLength,
const uint16_t repeat = kMitsubishiACMinRepeat 
)
-
- -

Send a Mitsubishi 144-bit A/C formatted message. (MITSUBISHI_AC) Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMitsubishiHeavy152()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishiHeavy152 (const unsigned char data[],
const uint16_t nbytes = kMitsubishiHeavy152StateLength,
const uint16_t repeat = kMitsubishiHeavy152MinRepeat 
)
-
- -

Send a MitsubishiHeavy 152-bit A/C message. Status: BETA / Appears to be working. Needs testing against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMitsubishiHeavy88()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMitsubishiHeavy88 (const unsigned char data[],
const uint16_t nbytes = kMitsubishiHeavy88StateLength,
const uint16_t repeat = kMitsubishiHeavy88MinRepeat 
)
-
- -

Send a MitsubishiHeavy 88-bit A/C message. Status: BETA / Appears to be working. Needs testing against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMultibrackets()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMultibrackets (const uint64_t data,
const uint16_t nbits = kMultibracketsBits,
const uint16_t repeat = kMultibracketsDefaultRepeat 
)
-
- -

Send a Multibrackets formatted message. Status: BETA / Appears to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendMWM()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendMWM (const unsigned char data[],
const uint16_t nbytes,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a MWM packet/message. Status: Implemented.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is 2400 bps serial, 1 start bit (mark), 1 stop bit (space), no parity
- -
-
- -

◆ sendNEC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendNEC (uint64_t data,
uint16_t nbits = kNECBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a raw NEC(Renesas) formatted message. Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol appears to have no header.
-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
- -
-
- -

◆ sendNeoclima()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendNeoclima (const unsigned char data[],
const uint16_t nbytes = kNeoclimaStateLength,
const uint16_t repeat = kNeoclimaMinRepeat 
)
-
- -

Send a Neoclima message. Status: STABLE / Known to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendNikai()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendNikai (uint64_t data,
uint16_t nbits = kNikaiBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a Nikai formatted message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendPanasonic()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPanasonic (const uint16_t address,
const uint32_t data,
const uint16_t nbits = kPanasonicBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Panasonic formatted message. Status: STABLE, but DEPRECATED.

-
Deprecated:
This is only for legacy use only, please use sendPanasonic64() instead.
-
Parameters
- - - - - -
[in]addressThe 16-bit manufacturer code.
[in]dataThe 32-bit data portion of the message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is a modified version of Kaseikyo.
- -
-
- -

◆ sendPanasonic64()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPanasonic64 (const uint64_t data,
const uint16_t nbits = kPanasonicBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Panasonic formatted message. Status: STABLE / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This protocol is a modified version of Kaseikyo.
-
-Use this method if you want to send the results of decodePanasonic.
- -
-
- -

◆ sendPanasonicAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPanasonicAC (const unsigned char data[],
const uint16_t nbytes = kPanasonicAcStateLength,
const uint16_t repeat = kPanasonicAcDefaultRepeat 
)
-
- -

Send a Panasonic A/C message. Status: STABLE / Work with real device(s).

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendPanasonicAC32()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPanasonicAC32 (const uint64_t data,
const uint16_t nbits = kPanasonicAc32Bits,
const uint16_t repeat = kPanasonicAcDefaultRepeat 
)
-
- -

Send a Panasonic AC 32/16bit formatted message. Status: STABLE / Confirmed working.

-
Parameters
- - - - -
[in]datacontaining the IR command.
[in]nbitsNr. of bits to send. Usually kPanasonicAc32Bits
[in]repeatNr. of times the message is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1307
- -
-
- -

◆ sendPioneer()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPioneer (const uint64_t data,
const uint16_t nbits = kPioneerBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a raw Pioneer formatted message. Status: STABLE / Expected to be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendPronto()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendPronto (uint16_t data[],
uint16_t len,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a Pronto Code formatted message. Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataAn array of uint16_t containing the pronto codes.
[in]lenNr. of entries in the data[] array.
[in]repeatNr. of times to repeat the message.
-
-
-
Note
Pronto codes are typically represented in hexadecimal. You will need to convert the code to an array of integers, and calculate it's length. e.g.
A Sony 20 bit DVD remote command.
-
"0000 0067 0000 0015 0060 0018 0018 0018 0030 0018 0030 0018 0030 0018
-
0018 0018 0030 0018 0018 0018 0018 0018 0030 0018 0018 0018 0030 0018
-
0030 0018 0030 0018 0018 0018 0018 0018 0030 0018 0018 0018 0018 0018
-
0030 0018 0018 03f6"
-
converts to:
uint16_t prontoCode[46] = {
-
0x0000, 0x0067, 0x0000, 0x0015,
-
0x0060, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0030, 0x0018,
-
0x0030, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018,
-
0x0018, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018,
-
0x0030, 0x0018, 0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
-
0x0030, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0030, 0x0018,
-
0x0018, 0x03f6};
-
// Send the Pronto(Sony) code. Repeat twice as Sony's require that.
-
sendPronto(prontoCode, 46, kSonyMinRepeat);
-
-
See also
http://www.etcwiki.org/wiki/Pronto_Infrared_Format
-
-http://www.remotecentral.com/features/irdisp2.htm
- -
-
- -

◆ sendRaw()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendRaw (const uint16_t buf[],
const uint16_t len,
const uint16_t hz 
)
-
- -

Send a raw IRremote message.

-
Parameters
- - - - -
[in]bufAn array of uint16_t's that has microseconds elements.
[in]lenNr. of elements in the buf[] array.
[in]hzFrequency to send the message at. (kHz < 1000; Hz >= 1000)
-
-
-
Note
Even elements are Mark times (On), Odd elements are Space times (Off). Ref: examples/IRrecvDumpV2/IRrecvDumpV2.ino (or later)
- -
-
- -

◆ sendRC5()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendRC5 (const uint64_t data,
uint16_t nbits = kRC5XBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Philips RC-5/RC-5X packet. Status: RC-5 (stable), RC-5X (alpha)

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Caller needs to take care of flipping the toggle bit. That bit differentiates between key press & key release. For RC-5 it is the MSB of the data. For RC-5X it is the 2nd MSB of the data.
-
Todo:
Testing of the RC-5X components.
- -
-
- -

◆ sendRC6()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendRC6 (const uint64_t data,
const uint16_t nbits = kRC6Mode0Bits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Philips RC-6 packet. Status: Stable.

-
Note
Caller needs to take care of flipping the toggle bit (The 4th Most Significant Bit). That bit differentiates between key press & key release.
-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendRCMM()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendRCMM (uint64_t data,
uint16_t nbits = kRCMMBits,
uint16_t repeat = kNoRepeat 
)
-
- -

Send a Philips RC-MM packet. Status: STABLE / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendSAMSUNG()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSAMSUNG (const uint64_t data,
const uint16_t nbits = kSamsungBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a 32-bit Samsung formatted message. Status: STABLE / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
http://elektrolab.wz.cz/katalog/samsung_protocol.pdf
-
Note
Samsung has a separate message to indicate a repeat, like NEC does.
-
Todo:
Confirm that is actually how Samsung sends a repeat. The refdoc doesn't indicate it is true.
- -
-
- -

◆ sendSamsung36()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSamsung36 (const uint64_t data,
const uint16_t nbits = kSamsung36Bits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Samsung 36-bit formatted message. Status: STABLE / Works on real devices.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/621
- -
-
- -

◆ sendSamsungAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSamsungAC (const unsigned char data[],
const uint16_t nbytes = kSamsungAcStateLength,
const uint16_t repeat = kSamsungAcDefaultRepeat 
)
-
- -

Send a Samsung A/C message. Status: Stable / Known working.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/505
-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendSanyoAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSanyoAc (const uint8_t * data,
const uint16_t nbytes = kSanyoAcStateLength,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a SanyoAc formatted message. Status: STABLE / Reported as working.

-
Parameters
- - - - -
[in]dataAn array of bytes containing the IR command.
[in]nbytesNr. of bytes of data in the array.
[in]repeatNr. of times the message is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1211
- -
-
- -

◆ sendSanyoLC7461()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSanyoLC7461 (const uint64_t data,
const uint16_t nbits = kSanyoLC7461Bits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Sanyo LC7461 message. Status: BETA / Probably works.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Based on @marcosamarinho's work. This protocol uses the NEC protocol timings. However, data is formatted as : address(13 bits), !address, command (8 bits), !command. According with LIRC, this protocol is used on Sanyo, Aiwa and Chinon Information for this protocol is available at the Sanyo LC7461 datasheet. Repeats are performed similar to the NEC method of sending a special repeat message, rather than duplicating the entire message.
-
See also
https://github.com/marcosamarinho/IRremoteESP8266/blob/master/ir_Sanyo.cpp
-
-http://pdf.datasheetcatalog.com/datasheet/sanyo/LC7461.pdf
- -
-
- -

◆ sendSharp()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSharp (const uint16_t address,
const uint16_t command,
const uint16_t nbits = kSharpBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Sharp message Status: DEPRECATED / Previously working fine.

-
Deprecated:
Only use this if you are using legacy from the original Arduino-IRremote library. 99% of the time, you will want to use sendSharpRaw() instead
-
Parameters
- - - - - -
[in]addressAddress value to be sent.
[in]commandCommand value to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
This procedure has a non-standard invocation style compared to similar sendProtocol() routines. This is due to legacy, compatibility, & historic reasons. Normally the calling syntax version is like sendSharpRaw(). This procedure transmits the address & command in MSB first order, which is incorrect. This behaviour is left as-is to maintain backward compatibility with legacy code. In short, you should use sendSharpRaw(), encodeSharp(), and the correct values of address & command instead of using this, & the wrong values.
- -
-
- -

◆ sendSharpAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSharpAc (const unsigned char data[],
const uint16_t nbytes = kSharpAcStateLength,
const uint16_t repeat = kSharpAcDefaultRepeat 
)
-
- -

Send a Sharp A/C message. Status: Alpha / Untested.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/638
-
-https://github.com/ToniA/arduino-heatpumpir/blob/master/SharpHeatpumpIR.cpp
- -
-
- -

◆ sendSharpRaw()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSharpRaw (const uint64_t data,
const uint16_t nbits = kSharpBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a (raw) Sharp message.

-
Note
Status: STABLE / Working fine.
-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
his procedure handles the inversion of bits required per protocol. The protocol spec says to send the LSB first, but legacy code & usage has us sending the MSB first. Grrrr. Normal invocation of encodeSharp() handles this for you, assuming you are using the correct/standard values. e.g. sendSharpRaw(encodeSharp(address, command));
- -
-
- -

◆ sendSherwood()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSherwood (uint64_t data,
uint16_t nbits = kSherwoodBits,
uint16_t repeat = kSherwoodMinRepeat 
)
-
- -

Send an IR command to a Sherwood device. Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
Sherwood remote codes appear to be NEC codes with a mandatory repeat code. i.e. repeat should be >= kSherwoodMinRepeat (1).
- -
-
- -

◆ sendSony()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSony (const uint64_t data,
const uint16_t nbits = kSony20Bits,
const uint16_t repeat = kSonyMinRepeat 
)
-
- -

Send a standard Sony/SIRC(Serial Infra-Red Control) message. (40kHz) Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
sendSony() should typically be called with repeat=2 as Sony devices expect the message to be sent at least 3 times.
- -
-
- -

◆ sendSony38()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSony38 (const uint64_t data,
const uint16_t nbits = kSony20Bits,
const uint16_t repeat = kSonyMinRepeat + 1 
)
-
- -

Send an alternative 38kHz Sony/SIRC(Serial Infra-Red Control) message. Status: STABLE / Known working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
Note
sendSony38() should typically be called with repeat=3 as these Sony devices expect the message to be sent at least 4 times.
-
Warning
Messages send via this method will be detected by this library as just SONY, not SONY_38K as the library has no way to determine the modulation frequency used. Hence, there is no decodeSony38().
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1018
- -
-
- -

◆ sendSymphony()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendSymphony (uint64_t data,
uint16_t nbits = kSymphonyBits,
uint16_t repeat = kSymphonyDefaultRepeat 
)
-
- -

Send a Symphony packet. Status: STABLE / Should be working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendTcl112Ac()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTcl112Ac (const unsigned char data[],
const uint16_t nbytes = kTcl112AcStateLength,
const uint16_t repeat = kTcl112AcDefaultRepeat 
)
-
- -

Send a TCL 112-bit A/C message. Status: Beta / Probably working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendTechnibelAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTechnibelAc (uint64_t data,
uint16_t nbits = kTechnibelAcBits,
uint16_t repeat = kTechnibelAcDefaultRepeat 
)
-
- -

Send an Technibel AC formatted message. Status: STABLE / Reported as working on a real device.

-
Parameters
- - - - -
[in]datacontaining the IR command.
[in]nbitsNr. of bits to send. usually kTechnibelAcBits
[in]repeatNr. of times the message is to be repeated.
-
-
- -
-
- -

◆ sendTeco()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTeco (const uint64_t data,
const uint16_t nbits = kTecoBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Teco A/C message. Status: Beta / Probably working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendToshibaAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendToshibaAC (const uint8_t data[],
const uint16_t nbytes = kToshibaACStateLength,
const uint16_t repeat = kToshibaACMinRepeat 
)
-
- -

Send a Toshiba A/C message. Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendTranscold()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTranscold (const uint64_t data,
const uint16_t nbits = kTranscoldBits,
const uint16_t repeat = kTranscoldDefaultRepeat 
)
-
- -

Send a Transcold message Status: STABLE / Confirmed Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendTrotec()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTrotec (const unsigned char data[],
const uint16_t nbytes = kTrotecStateLength,
const uint16_t repeat = kTrotecDefaultRepeat 
)
-
- -

Send a Trotec message. Status: Beta / Probably Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendTruma()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendTruma (const uint64_t data,
const uint16_t nbits = kTrumaBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Truma formatted message. Status: STABLE / Confirmed working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe bit size of the message being sent.
[in]repeatThe number of times the message is to be repeated.
-
-
- -
-
- -

◆ sendVestelAc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendVestelAc (const uint64_t data,
const uint16_t nbits = kVestelAcBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Vestel message Status: STABLE / Working.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendVoltas()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendVoltas (const unsigned char data[],
const uint16_t nbytes = kVoltasStateLength,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Voltas formatted message. Status: STABLE / Working on real device.

-
Parameters
- - - - -
[in]dataAn array of bytes containing the IR command. It is assumed to be in MSB order for this code. e.g.
uint8_t data[kVoltasStateLength] = {0x33, 0x28, 0x88, 0x1A, 0x3B, 0x3B,
-
0x3B, 0x11, 0x00, 0x40};
-
[in]nbytesNr. of bytes of data in the array. (>=kVoltasStateLength)
[in]repeatNr. of times the message is to be repeated.
-
-
- -
-
- -

◆ sendWhirlpoolAC()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendWhirlpoolAC (const unsigned char data[],
const uint16_t nbytes = kWhirlpoolAcStateLength,
const uint16_t repeat = kWhirlpoolAcDefaultRepeat 
)
-
- -

Send a Whirlpool A/C message. Status: BETA / Probably works.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbytesThe number of bytes of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendWhynter()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendWhynter (const uint64_t data,
const uint16_t nbits = kWhynterBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a Whynter message. Status: STABLE.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
-
See also
https://github.com/z3t0/Arduino-IRremote/blob/master/ir_Whynter.cpp
- -
-
- -

◆ sendXmp()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendXmp (const uint64_t data,
const uint16_t nbits = kXmpBits,
const uint16_t repeat = kNoRepeat 
)
-
- -

Send a XMP packet. Status: Beta / Untested against a real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe number of bits of message to be sent.
[in]repeatThe number of times the command is to be repeated.
-
-
- -
-
- -

◆ sendZepeal()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void IRsend::sendZepeal (const uint64_t data,
const uint16_t nbits = kZepealBits,
const uint16_t repeat = kZepealMinRepeat 
)
-
- -

Send a Zepeal formatted message. Status: STABLE / Works on real device.

-
Parameters
- - - - -
[in]dataThe message to be sent.
[in]nbitsThe bit size of the message being sent.
[in]repeatThe number of times the message is to be repeated.
-
-
- -
-
- -

◆ space()

- -
-
- - - - - - - - -
void IRsend::space (uint32_t time)
-
- -

Turn the pin (LED) off for a given time. Sends an IR space for the specified number of microseconds. A space is no output, so the PWM output is disabled.

-
Parameters
- - -
[in]timeTime in microseconds (us).
-
-
- -
-
- -

◆ toggleRC5()

- -
-
- - - - - - - - -
uint64_t IRsend::toggleRC5 (const uint64_t data)
-
- -

Flip the toggle bit of a Philips RC-5/RC-5X data message. Used to indicate a change of remote button's state. Status: STABLE.

-
Parameters
- - -
[in]dataThe existing RC-5/RC-5X message.
-
-
-
Returns
A data message suitable for use in sendRC5() with the toggle bit flipped.
- -
-
- -

◆ toggleRC6()

- -
-
- - - - - - - - - - - - - - - - - - -
uint64_t IRsend::toggleRC6 (const uint64_t data,
const uint16_t nbits = kRC6Mode0Bits 
)
-
- -

Flip the toggle bit of a Philips RC-6 data message. Used to indicate a change of remote button's state. Status: STABLE / Should work fine.

-
Parameters
- - - -
[in]dataThe existing RC-6 message.
[in]nbitsNr. of bits in the RC-6 protocol.
-
-
-
Returns
A data message suitable for use in sendRC6() with the toggle bit flipped.
-
Note
For RC-6 (20-bits), it is the 17th least significant bit.
-
-For RC-6 (36-bits/Xbox-360), it is the 16th least significant bit.
- -
-
-

Member Data Documentation

- -

◆ _dutycycle

- -
-
- - - - - -
- - - - -
uint8_t IRsend::_dutycycle
-
-private
-
- -
-
- -

◆ _freq_unittest

- -
-
- - - - - -
- - - - -
uint32_t IRsend::_freq_unittest
-
-private
-
- -
-
- -

◆ IRpin

- -
-
- - - - - -
- - - - -
uint16_t IRsend::IRpin
-
-private
-
- -
-
- -

◆ modulation

- -
-
- - - - - -
- - - - -
bool IRsend::modulation
-
-private
-
- -
-
- -

◆ offTimePeriod

- -
-
- - - - - -
- - - - -
uint16_t IRsend::offTimePeriod
-
-private
-
- -
-
- -

◆ onTimePeriod

- -
-
- - - - - -
- - - - -
uint16_t IRsend::onTimePeriod
-
-private
-
- -
-
- -

◆ outputOff

- -
-
- - - - - -
- - - - -
uint8_t IRsend::outputOff
-
-protected
-
- -
-
- -

◆ outputOn

- -
-
- - - - - -
- - - - -
uint8_t IRsend::outputOn
-
-protected
-
- -
-
- -

◆ periodOffset

- -
-
- - - - - -
- - - - -
int8_t IRsend::periodOffset
-
-private
-
- -
-
-
The documentation for this class was generated from the following files: -
-
void sendPronto(uint16_t data[], uint16_t len, uint16_t repeat=kNoRepeat)
Send a Pronto Code formatted message. Status: STABLE / Known working.
Definition: ir_Pronto.cpp:56
-
const uint16_t kVoltasStateLength
Definition: IRremoteESP8266.h:1132
-
const uint16_t kCoronaAcStateLength
Definition: IRremoteESP8266.h:930
-
const uint16_t kSonyMinRepeat
Definition: IRremoteESP8266.h:1102
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer-members.html deleted file mode 100644 index b1603a411..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRtimer Member List
-
-
- -

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

- - - - - - -
add(uint32_t usecs)IRtimerstatic
elapsed()IRtimer
IRtimer()IRtimer
reset()IRtimer
startIRtimerprivate
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer.html deleted file mode 100644 index 8f782747f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classIRtimer.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - -IRremoteESP8266: IRtimer Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

This class offers a simple counter in micro-seconds since instantiated. - More...

- -

#include <IRtimer.h>

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

-Public Member Functions

 IRtimer ()
 Class constructor. More...
 
void reset ()
 Resets the IRtimer object. I.e. The counter starts again from now. More...
 
uint32_t elapsed ()
 Calculate how many microseconds have elapsed since the timer was started. More...
 
- - - - -

-Static Public Member Functions

static void add (uint32_t usecs)
 Add time to the timer to simulate elapsed time. More...
 
- - - - -

-Private Attributes

uint32_t start
 Time in uSeconds when the class was instantiated/reset. More...
 
-

Detailed Description

-

This class offers a simple counter in micro-seconds since instantiated.

-
Note
Handles when the system timer wraps around (once).
-

Constructor & Destructor Documentation

- -

◆ IRtimer()

- -
-
- - - - - - - -
IRtimer::IRtimer ()
-
- -

Class constructor.

- -
-
-

Member Function Documentation

- -

◆ add()

- -
-
- - - - - -
- - - - - - - - -
void IRtimer::add (uint32_t usecs)
-
-static
-
- -

Add time to the timer to simulate elapsed time.

-
Parameters
- - -
[in]usecsNr. of uSeconds to be added.
-
-
-
Note
Only used in unit testing.
- -
-
- -

◆ elapsed()

- -
-
- - - - - - - -
uint32_t IRtimer::elapsed ()
-
- -

Calculate how many microseconds have elapsed since the timer was started.

-
Returns
Nr. of microseconds.
- -
-
- -

◆ reset()

- -
-
- - - - - - - -
void IRtimer::reset ()
-
- -

Resets the IRtimer object. I.e. The counter starts again from now.

- -
-
-

Member Data Documentation

- -

◆ start

- -
-
- - - - - -
- - - - -
uint32_t IRtimer::start
-
-private
-
- -

Time in uSeconds when the class was instantiated/reset.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs-members.html deleted file mode 100644 index 63f0f8ba0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs-members.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
TimerMs Member List
-
-
- -

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

- - - - - - -
add(uint32_t msecs)TimerMsstatic
elapsed()TimerMs
reset()TimerMs
startTimerMsprivate
TimerMs()TimerMs
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs.html deleted file mode 100644 index a1be323bd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classTimerMs.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - -IRremoteESP8266: TimerMs Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

This class offers a simple counter in milli-seconds since instantiated. - More...

- -

#include <IRtimer.h>

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

-Public Member Functions

 TimerMs ()
 Class constructor. More...
 
void reset ()
 Resets the TimerMs object. I.e. The counter starts again from now. More...
 
uint32_t elapsed ()
 Calculate how many milliseconds have elapsed since the timer was started. More...
 
- - - - -

-Static Public Member Functions

static void add (uint32_t msecs)
 Add time to the timer to simulate elapsed time. More...
 
- - - - -

-Private Attributes

uint32_t start
 Time in mSeconds when the class was instantiated/reset. More...
 
-

Detailed Description

-

This class offers a simple counter in milli-seconds since instantiated.

-
Note
Handles when the system timer wraps around (once).
-

Constructor & Destructor Documentation

- -

◆ TimerMs()

- -
-
- - - - - - - -
TimerMs::TimerMs ()
-
- -

Class constructor.

- -
-
-

Member Function Documentation

- -

◆ add()

- -
-
- - - - - -
- - - - - - - - -
void TimerMs::add (uint32_t msecs)
-
-static
-
- -

Add time to the timer to simulate elapsed time.

-
Parameters
- - -
[in]msecsNr. of mSeconds to be added.
-
-
-
Note
Only used in unit testing.
- -
-
- -

◆ elapsed()

- -
-
- - - - - - - -
uint32_t TimerMs::elapsed ()
-
- -

Calculate how many milliseconds have elapsed since the timer was started.

-
Returns
Nr. of milliseconds.
- -
-
- -

◆ reset()

- -
-
- - - - - - - -
void TimerMs::reset ()
-
- -

Resets the TimerMs object. I.e. The counter starts again from now.

- -
-
-

Member Data Documentation

- -

◆ start

- -
-
- - - - - -
- - - - -
uint32_t TimerMs::start
-
-private
-
- -

Time in mSeconds when the class was instantiated/reset.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results-members.html deleted file mode 100644 index 5939b876d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
decode_results Member List
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results.html deleted file mode 100644 index 1129a1d24..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classdecode__results.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - -IRremoteESP8266: decode_results Class Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
decode_results Class Reference
-
-
- -

Results returned from the decoder. - More...

- -

#include <IRrecv.h>

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

-Public Attributes

decode_type_t decode_type
 
union {
   struct {
      uint64_t   value
 
      uint32_t   address
 
      uint32_t   command
 
   } 
 
   uint8_t   state [kStateSizeMax]
 
}; 
 
uint16_t bits
 
volatile uint16_t * rawbuf
 
uint16_t rawlen
 
bool overflow
 
bool repeat
 
-

Detailed Description

-

Results returned from the decoder.

-

Member Data Documentation

- -

◆ @109

- -
-
- - - - -
union { ... }
-
- -
-
- -

◆ address

- -
-
- - - - -
uint32_t decode_results::address
-
- -
-
- -

◆ bits

- -
-
- - - - -
uint16_t decode_results::bits
-
- -
-
- -

◆ command

- -
-
- - - - -
uint32_t decode_results::command
-
- -
-
- -

◆ decode_type

- -
-
- - - - -
decode_type_t decode_results::decode_type
-
- -
-
- -

◆ overflow

- -
-
- - - - -
bool decode_results::overflow
-
- -
-
- -

◆ rawbuf

- -
-
- - - - -
volatile uint16_t* decode_results::rawbuf
-
- -
-
- -

◆ rawlen

- -
-
- - - - -
uint16_t decode_results::rawlen
-
- -
-
- -

◆ repeat

- -
-
- - - - -
bool decode_results::repeat
-
- -
-
- -

◆ state

- -
-
- - - - -
uint8_t decode_results::state[kStateSizeMax]
-
- -
-
- -

◆ value

- -
-
- - - - -
uint64_t decode_results::value
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classes.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classes.html deleted file mode 100644 index 85d8522c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/classes.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Index - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Index
-
-
-
a | c | d | e | f | g | h | i | k | l | m | n | p | s | t | v | w
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  a  
-
  g  
-
IREcoclimAc   IRTcl112Ac   
  p  
-
IRElectraAc   IRTechnibelAc   
AirwellProtocol   GoodweatherProtocol   IRFujitsuAC   IRTecoAc   PanasonicAc32Protocol   
AmcorProtocol   GreeProtocol   IRGoodweatherAc   IRtimer   
  s  
-
ArgoProtocol   
  h  
-
IRGreeAC   IRToshibaAC   
  c  
-
IRHaierAC   IRTranscoldAc   SamsungProtocol   
HaierProtocol   IRHaierACYRW02   IRTrotecESP   SanyoProtocol   
CarrierProtocol   HaierYRW02Protocol   IRHitachiAc   IRTrumaAc   SharpProtocol   
CoolixProtocol   Hitachi1Protocol   IRHitachiAc1   IRVestelAc   state_t (stdAc)   
CoronaProtocol   Hitachi424Protocol   IRHitachiAc3   IRVoltas   
  t  
-
CoronaSection   HitachiProtocol   IRHitachiAc344   IRWhirlpoolAc   
  d  
-
  i  
-
IRHitachiAc424   
  k  
-
Tcl112Protocol   
IRKelvinatorAC   TechnibelProtocol   
Daikin128Protocol   IRac   IRLgAc   KelvinatorProtocol   TecoProtocol   
Daikin152Protocol   IRAirwellAc   IRMideaAC   
  l  
-
TimerMs   
Daikin160Protocol   IRAmcorAc   IRMitsubishi112   ToshibaProtocol   
Daikin176Protocol   IRArgoAC   IRMitsubishi136   LGProtocol   TranscoldProtocol   
Daikin216Protocol   IRCarrierAc64   IRMitsubishiAC   
  m  
-
TrotecProtocol   
Daikin2Protocol   IRCoolixAC   IRMitsubishiHeavy152Ac   TrumaProtocol   
Daikin64Protocol   IRCoronaAc   IRMitsubishiHeavy88Ac   magiquest   
  v  
-
DaikinESPProtocol   IRDaikin128   IRNeoclimaAc   match_result_t   
decode_results   IRDaikin152   IRPanasonicAc   MideaProtocol   VestelProtocol   
DelonghiProtocol   IRDaikin160   IRPanasonicAc32   Mitsubishi112Protocol   VoltasProtocol   
  e  
-
IRDaikin176   irparams_t   Mitsubishi136Protocol   
  w  
-
IRDaikin2   IRrecv   Mitsubishi144Protocol   
EcoclimProtocol   IRDaikin216   IRSamsungAc   Mitsubishi152Protocol   WhirlpoolProtocol   
ElectraProtocol   IRDaikin64   IRSanyoAc   Mitsubishi88Protocol   
  f  
-
IRDaikinESP   IRsend   
  n  
-
IRDelonghiAc   IRSharpAc   
FujitsuProtocol   NeoclimaProtocol   
-
a | c | d | e | f | g | h | i | k | l | m | n | p | s | t | v | w
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/closed.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/closed.png deleted file mode 100644 index 98cc2c909..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/closed.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h.html deleted file mode 100644 index d0cada931..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/de-CH.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
de-CH.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h_source.html deleted file mode 100644 index 8ad5119f2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-CH_8h_source.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/de-CH.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
de-CH.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - Martin (@finfinack)
-
2 // Locale/language file for German / Switzerland.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_DE_CH_H_
-
5 #define LOCALE_DE_CH_H_
-
6 
-
7 // Import German / Germany as default overrides.
-
8 #include "locale/de-DE.h"
-
9 
-
10 // As we have loaded another language, we need to #undef anything we need
-
11 // to update/change.
-
12 
-
13 #undef D_STR_ON
-
14 #define D_STR_ON "Ii"
-
15 #undef D_STR_OFF
-
16 #define D_STR_OFF "Us"
-
17 #undef D_STR_TOGGLE
-
18 #define D_STR_TOGGLE "Umschalte"
-
19 #undef D_STR_SLEEP
-
20 #define D_STR_SLEEP "Schlafe"
-
21 #undef D_STR_LIGHT
-
22 #define D_STR_LIGHT "Liecht"
-
23 #undef D_STR_POWERFUL
-
24 #define D_STR_POWERFUL "Starch"
-
25 #undef D_STR_QUIET
-
26 #define D_STR_QUIET "Liislig"
-
27 #undef D_STR_CLEAN
-
28 #define D_STR_CLEAN "Reinige"
-
29 #undef D_STR_PURIFY
-
30 #define D_STR_PURIFY "Frische"
-
31 #undef D_STR_HEALTH
-
32 #define D_STR_HEALTH "Gsundheit"
-
33 #undef D_STR_HUMID
-
34 #define D_STR_HUMID "Füecht"
-
35 #undef D_STR_SAVE
-
36 #define D_STR_SAVE "Speichere"
-
37 #undef D_STR_EYE
-
38 #define D_STR_EYE "Aug"
-
39 #undef D_STR_FOLLOW
-
40 #define D_STR_FOLLOW "Folge"
-
41 #undef D_STR_HOLD
-
42 #define D_STR_HOLD "Halte"
-
43 #undef D_STR_BUTTON
-
44 #define D_STR_BUTTON "Chnopf"
-
45 #undef D_STR_UP
-
46 #define D_STR_UP "Ufe"
-
47 #undef D_STR_TEMPUP
-
48 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP
-
49 #undef D_STR_DOWN
-
50 #define D_STR_DOWN "Abe"
-
51 #undef D_STR_TEMPDOWN
-
52 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN
-
53 #undef D_STR_CHANGE
-
54 #define D_STR_CHANGE "Wechsele"
-
55 #undef D_STR_MOVE
-
56 #define D_STR_MOVE "Verschiebe"
-
57 #undef D_STR_SET
-
58 #define D_STR_SET "Setze"
-
59 #undef D_STR_CANCEL
-
60 #define D_STR_CANCEL "Abbreche"
-
61 #undef D_STR_WEEKLY
-
62 #define D_STR_WEEKLY "Wüchentlich"
-
63 #undef D_STR_WEEKLYTIMER
-
64 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER
-
65 #undef D_STR_OUTSIDE
-
66 #define D_STR_OUTSIDE "Dusse"
-
67 #undef D_STR_LOUD
-
68 #define D_STR_LOUD "Luut"
-
69 #undef D_STR_UPPER
-
70 #define D_STR_UPPER "Obe"
-
71 #undef D_STR_LOWER
-
72 #define D_STR_LOWER "Une"
-
73 #undef D_STR_CIRCULATE
-
74 #define D_STR_CIRCULATE "Zirkuliere"
-
75 #undef D_STR_CEILING
-
76 #define D_STR_CEILING "Decki"
-
77 #undef D_STR_6THSENSE
-
78 #define D_STR_6THSENSE "6te Sinn"
-
79 
-
80 #undef D_STR_COOL
-
81 #define D_STR_COOL "Chüehle"
-
82 #undef D_STR_HEAT
-
83 #define D_STR_HEAT "Heize"
-
84 #undef D_STR_DRY
-
85 #define D_STR_DRY "Tröchne"
-
86 
-
87 #undef D_STR_MED
-
88 #define D_STR_MED "Mit"
-
89 #undef D_STR_MEDIUM
-
90 #define D_STR_MEDIUM "Mittel"
-
91 
-
92 #undef D_STR_HIGHEST
-
93 #define D_STR_HIGHEST "Höchscht"
-
94 #undef D_STR_HIGH
-
95 #define D_STR_HIGH "Höch"
-
96 #undef D_STR_HI
-
97 #define D_STR_HI "H"
-
98 #undef D_STR_MID
-
99 #define D_STR_MID "M"
-
100 #undef D_STR_MIDDLE
-
101 #define D_STR_MIDDLE "Mittel"
-
102 #undef D_STR_LOW
-
103 #define D_STR_LOW "Tüüf"
-
104 #undef D_STR_LO
-
105 #define D_STR_LO "T"
-
106 #undef D_STR_LOWEST
-
107 #define D_STR_LOWEST "Tüfschte"
-
108 #undef D_STR_MAXRIGHT
-
109 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT
-
110 #undef D_STR_RIGHTMAX_NOSPACE
-
111 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX
-
112 #undef D_STR_MAXLEFT
-
113 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT
-
114 #undef D_STR_LEFTMAX_NOSPACE
-
115 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX
-
116 #undef D_STR_CENTRE
-
117 #define D_STR_CENTRE "Mitti"
-
118 #undef D_STR_TOP
-
119 #define D_STR_TOP "Obe"
-
120 #undef D_STR_BOTTOM
-
121 #define D_STR_BOTTOM "Une"
-
122 
-
123 #undef D_STR_DAY
-
124 #define D_STR_DAY "Tag"
-
125 #undef D_STR_DAYS
-
126 #define D_STR_DAYS "Täg"
-
127 #undef D_STR_HOUR
-
128 #define D_STR_HOUR "Stund"
-
129 #undef D_STR_HOURS
-
130 #define D_STR_HOURS D_STR_HOUR "e"
-
131 #undef D_STR_MINUTE
-
132 #define D_STR_MINUTE "Minute"
-
133 #undef D_STR_MINUTES
-
134 #define D_STR_MINUTES D_STR_MINUTE
-
135 #undef D_STR_SECONDS
-
136 #define D_STR_SECONDS D_STR_SECOND
-
137 #undef D_STR_NOW
-
138 #define D_STR_NOW "Jetz"
-
139 
-
140 #undef D_STR_NO
-
141 #define D_STR_NO "Nei"
-
142 
-
143 #undef D_STR_REPEAT
-
144 #define D_STR_REPEAT "Wiederhole"
-
145 
-
146 // IRrecvDumpV2+
-
147 #undef D_STR_TIMESTAMP
-
148 #define D_STR_TIMESTAMP "Ziitstämpfel"
-
149 #undef D_STR_IRRECVDUMP_STARTUP
-
150 #define D_STR_IRRECVDUMP_STARTUP \
-
151  "IRrecvDump lauft und wartet uf IR Iigab ufem Pin %d"
-
152 #undef D_WARN_BUFFERFULL
-
153 #define D_WARN_BUFFERFULL \
-
154  "WARNUNG: IR Code isch zgross für de Buffer (>= %d). " \
-
155  "Dem Resultat sött mer nöd vertraue bevor das behobe isch. " \
-
156  "Bearbeite & vergrössere `kCaptureBufferSize`."
-
157 
-
158 #endif // LOCALE_DE_CH_H_
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h.html deleted file mode 100644 index 2b94c27ea..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/de-DE.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
de-DE.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h_source.html deleted file mode 100644 index a166e9d12..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/de-DE_8h_source.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/de-DE.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
de-DE.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - Martin (@finfinack)
-
2 // Locale/language file for German / Germany.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_DE_DE_H_
-
5 #define LOCALE_DE_DE_H_
-
6 
-
7 #define D_STR_UNKNOWN "UNBEKANNT"
-
8 #define D_STR_PROTOCOL "Protokoll"
-
9 #define D_STR_ON "Ein"
-
10 #define D_STR_OFF "Aus"
-
11 #define D_STR_MODE "Modus"
-
12 #define D_STR_TOGGLE "Umschalten"
-
13 #define D_STR_SLEEP "Schlafen"
-
14 #define D_STR_LIGHT "Licht"
-
15 #define D_STR_POWERFUL "Stark"
-
16 #define D_STR_QUIET "Ruhig"
-
17 #define D_STR_ECONO "Eco"
-
18 #define D_STR_BEEP "Piep"
-
19 #define D_STR_MOULD "Schimmel"
-
20 #define D_STR_CLEAN "Reinigen"
-
21 #define D_STR_PURIFY "Frischen"
-
22 #define D_STR_TIMER "Timer"
-
23 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER
-
24 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER
-
25 #define D_STR_CLOCK "Uhr"
-
26 #define D_STR_COMMAND "Befehl"
-
27 #define D_STR_HEALTH "Gesundheit"
-
28 #define D_STR_TEMP "Temp"
-
29 #define D_STR_HUMID "Feucht"
-
30 #define D_STR_SAVE "Speichern"
-
31 #define D_STR_EYE "Auge"
-
32 #define D_STR_FOLLOW "Folgen"
-
33 #define D_STR_FRESH "Frisch"
-
34 #define D_STR_HOLD "Halten"
-
35 #define D_STR_BUTTON "Knopf"
-
36 #define D_STR_NIGHT "Nacht"
-
37 #define D_STR_SILENT "Ruhig"
-
38 #define D_STR_UP "Hinauf"
-
39 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP
-
40 #define D_STR_DOWN "Hinunter"
-
41 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN
-
42 #define D_STR_CHANGE "Wechseln"
-
43 #define D_STR_MOVE "Verschieben"
-
44 #define D_STR_SET "Setzen"
-
45 #define D_STR_CANCEL "Abbrechen"
-
46 #define D_STR_COMFORT "Komfort"
-
47 #define D_STR_WEEKLY "Wöchentlich"
-
48 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER
-
49 #define D_STR_FAST "Schnell"
-
50 #define D_STR_SLOW "Langsam"
-
51 #define D_STR_AIRFLOW "Luftzug"
-
52 #define D_STR_STEP "Schritt"
-
53 #define D_STR_NA "N/A"
-
54 #define D_STR_OUTSIDE "Draussen"
-
55 #define D_STR_LOUD "Laut"
-
56 #define D_STR_UPPER "Oben"
-
57 #define D_STR_LOWER "Unten"
-
58 #define D_STR_BREEZE "Brise"
-
59 #define D_STR_CIRCULATE "Zirkulieren"
-
60 #define D_STR_CEILING "Decke"
-
61 #define D_STR_WALL "Wand"
-
62 #define D_STR_ROOM "Raum"
-
63 #define D_STR_6THSENSE "6ter Sinn"
-
64 #define D_STR_FIXED "Fixiert"
-
65 
-
66 #define D_STR_AUTOMATIC "Automatisch"
-
67 #define D_STR_MANUAL "Manuell"
-
68 #define D_STR_COOL "Kühlen"
-
69 #define D_STR_HEAT "Heizen"
-
70 #define D_STR_FAN "Lüfter"
-
71 #define D_STR_FANONLY "nur_lüfter"
-
72 #define D_STR_DRY "Trocken"
-
73 
-
74 #define D_STR_MED "Mit"
-
75 #define D_STR_MEDIUM "Mittel"
-
76 
-
77 #define D_STR_HIGHEST "Höchste"
-
78 #define D_STR_HIGH "Hoch"
-
79 #define D_STR_HI "H"
-
80 #define D_STR_MID "M"
-
81 #define D_STR_MIDDLE "Mittel"
-
82 #define D_STR_LOW "Tief"
-
83 #define D_STR_LO "T"
-
84 #define D_STR_LOWEST "Tiefste"
-
85 #define D_STR_RIGHT "Rechts"
-
86 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT
-
87 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX
-
88 #define D_STR_LEFT "Links"
-
89 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT
-
90 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX
-
91 #define D_STR_WIDE "Breit"
-
92 #define D_STR_CENTRE "Mitte"
-
93 #define D_STR_TOP "Oben"
-
94 #define D_STR_BOTTOM "Unten"
-
95 
-
96 #define D_STR_DAY "Tag"
-
97 #define D_STR_DAYS D_STR_DAY "e"
-
98 #define D_STR_HOUR "Stunde"
-
99 #define D_STR_HOURS D_STR_HOUR "n"
-
100 #define D_STR_MINUTES D_STR_MINUTE "n"
-
101 #define D_STR_SECOND "Sekunde"
-
102 #define D_STR_SECONDS D_STR_SECOND "n"
-
103 #define D_STR_NOW "Jetzt"
-
104 // These don't translate well to German as typically only 2 letter
-
105 // abbreviations are used. Hence, this is an approximation.
-
106 #define D_STR_THREELETTERDAYS "SonMonDieMitDonFreSam"
-
107 
-
108 #define D_STR_YES "Ja"
-
109 #define D_STR_NO "Nein"
-
110 #define D_STR_TRUE "Wahr"
-
111 #define D_STR_FALSE "Falsch"
-
112 
-
113 #define D_STR_REPEAT "Wiederholen"
-
114 #define D_STR_PREVIOUS "Vorher"
-
115 #define D_STR_FAHRENHEIT "Fahrenheit"
-
116 #define D_STR_CELSIUS_FAHRENHEIT D_STR_CELSIUS "/" D_STR_FAHRENHEIT
-
117 #define D_STR_DISPLAY "Anzeige"
-
118 #define D_STR_INSIDE "Innen"
-
119 #define D_STR_POWERBUTTON "Netzschalter"
-
120 #define D_STR_PREVIOUSPOWER "Vorheriger Einschaltzustand"
-
121 #define D_STR_DISPLAYTEMP "Anzeigetemperatur"
-
122 
-
123 // IRrecvDumpV2+
-
124 #define D_STR_TIMESTAMP "Zeitstempel"
-
125 #define D_STR_LIBRARY "Bibliothek"
-
126 #define D_STR_TOLERANCE "Toleranz"
-
127 #define D_STR_MESGDESC "Nachr. Beschr."
-
128 #define D_STR_IRRECVDUMP_STARTUP \
-
129  "IRrecvDump läuft und wartet auf IR Eingabe auf Pin %d"
-
130 #define D_WARN_BUFFERFULL \
-
131  "WARNUNG: IR Code ist zu gross für Buffer (>= %d). " \
-
132  "Dem Resultat sollte nicht vertraut werden bevor das behoben ist. " \
-
133  "Bearbeite & vergrössere `kCaptureBufferSize`."
-
134 
-
135 #endif // LOCALE_DE_DE_H_
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h.html deleted file mode 100644 index 512778196..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/defaults.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
defaults.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h_source.html deleted file mode 100644 index 82561e57f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/defaults_8h_source.html +++ /dev/null @@ -1,904 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/defaults.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
defaults.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 // The default text to use throughout the library.
-
3 // The library will use this text if no locale (_IR_LOCALE_) is set or if
-
4 // the locale doesn't define particular values.
-
5 // If they are defined, this file should NOT override them.
-
6 //
-
7 // This file should contain a #define for every translateable/locale dependant
-
8 // string used by the library. Language specific files don't have to include
-
9 // everything.
-
10 //
-
11 // NOTE: ASCII/UTF-8 characters only. Unicode is NOT supported.
-
12 //
-
13 // The defaults are English (AU) / en-AU. Australia (AU) is pretty much the same
-
14 // as English (UK) for this libraries use case.
-
15 #ifndef LOCALE_DEFAULTS_H_
-
16 #define LOCALE_DEFAULTS_H_
-
17 
-
18 #ifndef D_STR_UNKNOWN
-
19 #define D_STR_UNKNOWN "UNKNOWN"
-
20 #endif // D_STR_UNKNOWN
-
21 #ifndef D_STR_PROTOCOL
-
22 #define D_STR_PROTOCOL "Protocol"
-
23 #endif // D_STR_PROTOCOL
-
24 #ifndef D_STR_POWER
-
25 #define D_STR_POWER "Power"
-
26 #endif // D_STR_POWER
-
27 #ifndef D_STR_PREVIOUS
-
28 #define D_STR_PREVIOUS "Previous"
-
29 #endif // D_STR_PREVIOUS
-
30 #ifndef D_STR_ON
-
31 #define D_STR_ON "On"
-
32 #endif // D_STR_ON
-
33 #ifndef D_STR_OFF
-
34 #define D_STR_OFF "Off"
-
35 #endif // D_STR_OFF
-
36 #ifndef D_STR_MODE
-
37 #define D_STR_MODE "Mode"
-
38 #endif // D_STR_MODE
-
39 #ifndef D_STR_TOGGLE
-
40 #define D_STR_TOGGLE "Toggle"
-
41 #endif // D_STR_TOGGLE
-
42 #ifndef D_STR_TURBO
-
43 #define D_STR_TURBO "Turbo"
-
44 #endif // D_STR_TURBO
-
45 #ifndef D_STR_SUPER
-
46 #define D_STR_SUPER "Super"
-
47 #endif // D_STR_SUPER
-
48 #ifndef D_STR_SLEEP
-
49 #define D_STR_SLEEP "Sleep"
-
50 #endif // D_STR_SLEEP
-
51 #ifndef D_STR_LIGHT
-
52 #define D_STR_LIGHT "Light"
-
53 #endif // D_STR_LIGHT
-
54 #ifndef D_STR_POWERFUL
-
55 #define D_STR_POWERFUL "Powerful"
-
56 #endif // D_STR_POWERFUL
-
57 #ifndef D_STR_QUIET
-
58 #define D_STR_QUIET "Quiet"
-
59 #endif // D_STR_QUIET
-
60 #ifndef D_STR_ECONO
-
61 #define D_STR_ECONO "Econo"
-
62 #endif // D_STR_ECONO
-
63 #ifndef D_STR_SWING
-
64 #define D_STR_SWING "Swing"
-
65 #endif // D_STR_SWING
-
66 #ifndef D_STR_SWINGH
-
67 #define D_STR_SWINGH D_STR_SWING"(H)" // Set `D_STR_SWING` first!
-
68 #endif // D_STR_SWINGH
-
69 #ifndef D_STR_SWINGV
-
70 #define D_STR_SWINGV D_STR_SWING"(V)" // Set `D_STR_SWING` first!
-
71 #endif // D_STR_SWINGV
-
72 #ifndef D_STR_BEEP
-
73 #define D_STR_BEEP "Beep"
-
74 #endif // D_STR_BEEP
-
75 #ifndef D_STR_MOULD
-
76 #define D_STR_MOULD "Mould"
-
77 #endif // D_STR_MOULD
-
78 #ifndef D_STR_CLEAN
-
79 #define D_STR_CLEAN "Clean"
-
80 #endif // D_STR_CLEAN
-
81 #ifndef D_STR_PURIFY
-
82 #define D_STR_PURIFY "Purify"
-
83 #endif // D_STR_PURIFY
-
84 #ifndef D_STR_TIMER
-
85 #define D_STR_TIMER "Timer"
-
86 #endif // D_STR_TIMER
-
87 #ifndef D_STR_ONTIMER
-
88 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER // Set `D_STR_ON` first!
-
89 #endif // D_STR_ONTIMER
-
90 #ifndef D_STR_OFFTIMER
-
91 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER // Set `D_STR_OFF` first!
-
92 #endif // D_STR_OFFTIMER
-
93 #ifndef D_STR_CLOCK
-
94 #define D_STR_CLOCK "Clock"
-
95 #endif // D_STR_CLOCK
-
96 #ifndef D_STR_COMMAND
-
97 #define D_STR_COMMAND "Command"
-
98 #endif // D_STR_COMMAND
-
99 #ifndef D_STR_XFAN
-
100 #define D_STR_XFAN "XFan"
-
101 #endif // D_STR_XFAN
-
102 #ifndef D_STR_HEALTH
-
103 #define D_STR_HEALTH "Health"
-
104 #endif // D_STR_HEALTH
-
105 #ifndef D_STR_MODEL
-
106 #define D_STR_MODEL "Model"
-
107 #endif // D_STR_MODEL
-
108 #ifndef D_STR_TEMP
-
109 #define D_STR_TEMP "Temp"
-
110 #endif // D_STR_TEMP
-
111 #ifndef D_STR_IFEEL
-
112 #define D_STR_IFEEL "IFeel"
-
113 #endif // D_STR_IFEEL
-
114 #ifndef D_STR_HUMID
-
115 #define D_STR_HUMID "Humid"
-
116 #endif // D_STR_HUMID
-
117 #ifndef D_STR_SAVE
-
118 #define D_STR_SAVE "Save"
-
119 #endif // D_STR_SAVE
-
120 #ifndef D_STR_EYE
-
121 #define D_STR_EYE "Eye"
-
122 #endif // D_STR_EYE
-
123 #ifndef D_STR_FOLLOW
-
124 #define D_STR_FOLLOW "Follow"
-
125 #endif // D_STR_FOLLOW
-
126 #ifndef D_STR_ION
-
127 #define D_STR_ION "Ion"
-
128 #endif // D_STR_ION
-
129 #ifndef D_STR_FRESH
-
130 #define D_STR_FRESH "Fresh"
-
131 #endif // D_STR_FRESH
-
132 #ifndef D_STR_HOLD
-
133 #define D_STR_HOLD "Hold"
-
134 #endif // D_STR_HOLD
-
135 #ifndef D_STR_8C_HEAT
-
136 #define D_STR_8C_HEAT "8C " D_STR_HEAT // Set `D_STR_HEAT` first!
-
137 #endif // D_STR_8C_HEAT
-
138 #ifndef D_STR_10C_HEAT
-
139 #define D_STR_10C_HEAT "10C " D_STR_HEAT // Set `D_STR_HEAT` first!
-
140 #endif // D_STR_10C_HEAT
-
141 #ifndef D_STR_BUTTON
-
142 #define D_STR_BUTTON "Button"
-
143 #endif // D_STR_BUTTON
-
144 #ifndef D_STR_NIGHT
-
145 #define D_STR_NIGHT "Night"
-
146 #endif // D_STR_NIGHT
-
147 #ifndef D_STR_SILENT
-
148 #define D_STR_SILENT "Silent"
-
149 #endif // D_STR_SILENT
-
150 #ifndef D_STR_FILTER
-
151 #define D_STR_FILTER "Filter"
-
152 #endif // D_STR_FILTER
-
153 #ifndef D_STR_3D
-
154 #define D_STR_3D "3D"
-
155 #endif // D_STR_3D
-
156 #ifndef D_STR_CELSIUS
-
157 #define D_STR_CELSIUS "Celsius"
-
158 #endif // D_STR_CELSIUS
-
159 #ifndef D_STR_FAHRENHEIT
-
160 #define D_STR_FAHRENHEIT "Fahrenheit"
-
161 #endif // D_STR_FAHRENHEIT
-
162 #ifndef D_STR_CELSIUS_FAHRENHEIT
-
163 #define D_STR_CELSIUS_FAHRENHEIT D_STR_CELSIUS "/" D_STR_FAHRENHEIT
-
164 #endif // D_STR_CELSIUS_FAHRENHEIT
-
165 #ifndef D_STR_UP
-
166 #define D_STR_UP "Up"
-
167 #endif // D_STR_UP
-
168 #ifndef D_STR_TEMPUP
-
169 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP // Set `D_STR_TEMP` first!
-
170 #endif // D_STR_TEMPUP
-
171 #ifndef D_STR_DOWN
-
172 #define D_STR_DOWN "Down"
-
173 #endif // D_STR_DOWN
-
174 #ifndef D_STR_TEMPDOWN
-
175 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN // Set `D_STR_TEMP` first!
-
176 #endif // D_STR_TEMPDOWN
-
177 #ifndef D_STR_CHANGE
-
178 #define D_STR_CHANGE "Change"
-
179 #endif // D_STR_CHANGE
-
180 #ifndef D_STR_START
-
181 #define D_STR_START "Start"
-
182 #endif // D_STR_START
-
183 #ifndef D_STR_STOP
-
184 #define D_STR_STOP "Stop"
-
185 #endif // D_STR_STOP
-
186 #ifndef D_STR_MOVE
-
187 #define D_STR_MOVE "Move"
-
188 #endif // D_STR_MOVE
-
189 #ifndef D_STR_SET
-
190 #define D_STR_SET "Set"
-
191 #endif // D_STR_SET
-
192 #ifndef D_STR_CANCEL
-
193 #define D_STR_CANCEL "Cancel"
-
194 #endif // D_STR_CANCEL
-
195 #ifndef D_STR_COMFORT
-
196 #define D_STR_COMFORT "Comfort"
-
197 #endif // D_STR_COMFORT
-
198 #ifndef D_STR_SENSOR
-
199 #define D_STR_SENSOR "Sensor"
-
200 #endif // D_STR_SENSOR
-
201 #ifndef D_STR_DISPLAY
-
202 #define D_STR_DISPLAY "Display"
-
203 #endif // D_STR_DISPLAY
-
204 #ifndef D_STR_WEEKLY
-
205 #define D_STR_WEEKLY "Weekly"
-
206 #endif // D_STR_WEEKLY
-
207 #ifndef D_STR_WEEKLYTIMER
-
208 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER // Needs `D_STR_WEEKLY`!
-
209 #endif // D_STR_WEEKLYTIMER
-
210 #ifndef D_STR_WIFI
-
211 #define D_STR_WIFI "WiFi"
-
212 #endif // D_STR_WIFI
-
213 #ifndef D_STR_LAST
-
214 #define D_STR_LAST "Last"
-
215 #endif // D_STR_LAST
-
216 #ifndef D_STR_FAST
-
217 #define D_STR_FAST "Fast"
-
218 #endif // D_STR_FAST
-
219 #ifndef D_STR_SLOW
-
220 #define D_STR_SLOW "Slow"
-
221 #endif // D_STR_SLOW
-
222 #ifndef D_STR_AIRFLOW
-
223 #define D_STR_AIRFLOW "Air Flow"
-
224 #endif // D_STR_AIRFLOW
-
225 #ifndef D_STR_STEP
-
226 #define D_STR_STEP "Step"
-
227 #endif // D_STR_STEP
-
228 #ifndef D_STR_NA
-
229 #define D_STR_NA "N/A"
-
230 #endif // D_STR_NA
-
231 #ifndef D_STR_INSIDE
-
232 #define D_STR_INSIDE "Inside"
-
233 #endif // D_STR_INSIDE
-
234 #ifndef D_STR_OUTSIDE
-
235 #define D_STR_OUTSIDE "Outside"
-
236 #endif // D_STR_OUTSIDE
-
237 #ifndef D_STR_LOUD
-
238 #define D_STR_LOUD "Loud"
-
239 #endif // D_STR_LOUD
-
240 #ifndef D_STR_UPPER
-
241 #define D_STR_UPPER "Upper"
-
242 #endif // D_STR_UPPER
-
243 #ifndef D_STR_LOWER
-
244 #define D_STR_LOWER "Lower"
-
245 #endif // D_STR_LOWER
-
246 #ifndef D_STR_BREEZE
-
247 #define D_STR_BREEZE "Breeze"
-
248 #endif // D_STR_BREEZE
-
249 #ifndef D_STR_CIRCULATE
-
250 #define D_STR_CIRCULATE "Circulate"
-
251 #endif // D_STR_CIRCULATE
-
252 #ifndef D_STR_CEILING
-
253 #define D_STR_CEILING "Ceiling"
-
254 #endif // D_STR_CEILING
-
255 #ifndef D_STR_WALL
-
256 #define D_STR_WALL "Wall"
-
257 #endif // D_STR_WALL
-
258 #ifndef D_STR_ROOM
-
259 #define D_STR_ROOM "Room"
-
260 #endif // D_STR_ROOM
-
261 #ifndef D_STR_6THSENSE
-
262 #define D_STR_6THSENSE "6th Sense"
-
263 #endif // D_STR_6THSENSE
-
264 #ifndef D_STR_ZONEFOLLOW
-
265 #define D_STR_ZONEFOLLOW "Zone Follow"
-
266 #endif // D_STR_ZONEFOLLOW
-
267 #ifndef D_STR_FIXED
-
268 #define D_STR_FIXED "Fixed"
-
269 #endif // D_STR_FIXED
-
270 #ifndef D_STR_TYPE
-
271 #define D_STR_TYPE "Type"
-
272 #endif // D_STR_TYPE
-
273 #ifndef D_STR_SPECIAL
-
274 #define D_STR_SPECIAL "Special"
-
275 #endif // D_STR_SPECIAL
-
276 #ifndef D_STR_RECYCLE
-
277 #define D_STR_RECYCLE "Recycle"
-
278 #endif // D_STR_RECYCLE
-
279 #ifndef D_STR_ID
-
280 #define D_STR_ID "Id"
-
281 #endif // D_STR_ID
-
282 
-
283 #ifndef D_STR_AUTO
-
284 #define D_STR_AUTO "Auto"
-
285 #endif // D_STR_AUTO
-
286 #ifndef D_STR_AUTOMATIC
-
287 #define D_STR_AUTOMATIC "Automatic"
-
288 #endif // D_STR_AUTOMATIC
-
289 #ifndef D_STR_MANUAL
-
290 #define D_STR_MANUAL "Manual"
-
291 #endif // D_STR_MANUAL
-
292 #ifndef D_STR_COOL
-
293 #define D_STR_COOL "Cool"
-
294 #endif // D_STR_COOL
-
295 #ifndef D_STR_HEAT
-
296 #define D_STR_HEAT "Heat"
-
297 #endif // D_STR_HEAT
-
298 #ifndef D_STR_FAN
-
299 #define D_STR_FAN "Fan"
-
300 #endif // D_STR_FAN
-
301 #ifndef D_STR_FANONLY
-
302 #define D_STR_FANONLY "fan_only"
-
303 #endif // D_STR_FANONLY
-
304 #ifndef D_STR_DRY
-
305 #define D_STR_DRY "Dry"
-
306 #endif // D_STR_DRY
-
307 
-
308 #ifndef D_STR_MAX
-
309 #define D_STR_MAX "Max"
-
310 #endif // D_STR_MAX
-
311 #ifndef D_STR_MAXIMUM
-
312 #define D_STR_MAXIMUM "Maximum"
-
313 #endif // D_STR_MAXIMUM
-
314 #ifndef D_STR_MIN
-
315 #define D_STR_MIN "Min"
-
316 #endif // D_STR_MIN
-
317 #ifndef D_STR_MINIMUM
-
318 #define D_STR_MINIMUM "Minimum"
-
319 #endif // D_STR_MINIMUM
-
320 #ifndef D_STR_MED
-
321 #define D_STR_MED "Med"
-
322 #endif // D_STR_MED
-
323 #ifndef D_STR_MEDIUM
-
324 #define D_STR_MEDIUM "Medium"
-
325 #endif // D_STR_MEDIUM
-
326 
-
327 #ifndef D_STR_HIGHEST
-
328 #define D_STR_HIGHEST "Highest"
-
329 #endif // D_STR_HIGHEST
-
330 #ifndef D_STR_HIGH
-
331 #define D_STR_HIGH "High"
-
332 #endif // D_STR_HIGH
-
333 #ifndef D_STR_HI
-
334 #define D_STR_HI "Hi"
-
335 #endif // D_STR_HI
-
336 #ifndef D_STR_MID
-
337 #define D_STR_MID "Mid"
-
338 #endif // D_STR_MID
-
339 #ifndef D_STR_MIDDLE
-
340 #define D_STR_MIDDLE "Middle"
-
341 #endif // D_STR_MIDDLE
-
342 #ifndef D_STR_LOW
-
343 #define D_STR_LOW "Low"
-
344 #endif // D_STR_LOW
-
345 #ifndef D_STR_LO
-
346 #define D_STR_LO "Lo"
-
347 #endif // D_STR_LO
-
348 #ifndef D_STR_LOWEST
-
349 #define D_STR_LOWEST "Lowest"
-
350 #endif // D_STR_LOWEST
-
351 #ifndef D_STR_RIGHT
-
352 #define D_STR_RIGHT "Right"
-
353 #endif // D_STR_RIGHT
-
354 #ifndef D_STR_MAXRIGHT
-
355 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT // Set `D_STR_MAX` first!
-
356 #endif // D_STR_MAXRIGHT
-
357 #ifndef D_STR_RIGHTMAX_NOSPACE
-
358 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX // Set `D_STR_MAX` first!
-
359 #endif // D_STR_RIGHTMAX_NOSPACE
-
360 #ifndef D_STR_LEFT
-
361 #define D_STR_LEFT "Left"
-
362 #endif // D_STR_LEFT
-
363 #ifndef D_STR_MAXLEFT
-
364 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT // Set `D_STR_MAX` first!
-
365 #endif // D_STR_MAXLEFT
-
366 #ifndef D_STR_LEFTMAX_NOSPACE
-
367 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX // Set `D_STR_MAX` first!
-
368 #endif // D_STR_LEFTMAX_NOSPACE
-
369 #ifndef D_STR_WIDE
-
370 #define D_STR_WIDE "Wide"
-
371 #endif // D_STR_WIDE
-
372 #ifndef D_STR_CENTRE
-
373 #define D_STR_CENTRE "Centre"
-
374 #endif // D_STR_CENTRE
-
375 #ifndef D_STR_TOP
-
376 #define D_STR_TOP "Top"
-
377 #endif // D_STR_TOP
-
378 #ifndef D_STR_BOTTOM
-
379 #define D_STR_BOTTOM "Bottom"
-
380 #endif // D_STR_BOTTOM
-
381 
-
382 // Compound words/phrases/descriptions from pre-defined words.
-
383 // Note: Obviously these need to be defined *after* their component words.
-
384 #ifndef D_STR_ECONOTOGGLE
-
385 #define D_STR_ECONOTOGGLE D_STR_ECONO " " D_STR_TOGGLE
-
386 #endif // D_STR_ECONOTOGGLE
-
387 #ifndef D_STR_EYEAUTO
-
388 #define D_STR_EYEAUTO D_STR_EYE " " D_STR_AUTO
-
389 #endif // D_STR_EYEAUTO
-
390 #ifndef D_STR_LIGHTTOGGLE
-
391 #define D_STR_LIGHTTOGGLE D_STR_LIGHT " " D_STR_TOGGLE
-
392 #endif // D_STR_LIGHTTOGGLE
-
393 #ifndef D_STR_OUTSIDEQUIET
-
394 #define D_STR_OUTSIDEQUIET D_STR_OUTSIDE " " D_STR_QUIET
-
395 #endif // D_STR_OUTSIDEQUIET
-
396 #ifndef D_STR_POWERTOGGLE
-
397 #define D_STR_POWERTOGGLE D_STR_POWER " " D_STR_TOGGLE
-
398 #endif // D_STR_POWERTOGGLE
-
399 #ifndef D_STR_POWERBUTTON
-
400 #define D_STR_POWERBUTTON D_STR_POWER " " D_STR_BUTTON
-
401 #endif // D_STR_POWERBUTTON
-
402 #ifndef D_STR_PREVIOUSPOWER
-
403 #define D_STR_PREVIOUSPOWER D_STR_PREVIOUS " " D_STR_POWER
-
404 #endif // D_STR_PREVIOUSPOWER
-
405 #ifndef D_STR_DISPLAYTEMP
-
406 #define D_STR_DISPLAYTEMP D_STR_DISPLAY " " D_STR_TEMP
-
407 #endif // D_STR_DISPLAYTEMP
-
408 #ifndef D_STR_SENSORTEMP
-
409 #define D_STR_SENSORTEMP D_STR_SENSOR " " D_STR_TEMP
-
410 #endif // D_STR_SENSORTEMP
-
411 #ifndef D_STR_SLEEP_TIMER
-
412 #define D_STR_SLEEP_TIMER D_STR_SLEEP " " D_STR_TIMER
-
413 #endif // D_STR_SLEEP_TIMER
-
414 #ifndef D_STR_SWINGVMODE
-
415 #define D_STR_SWINGVMODE D_STR_SWINGV " " D_STR_MODE
-
416 #endif // D_STR_SWINGVMODE
-
417 #ifndef D_STR_SWINGVTOGGLE
-
418 #define D_STR_SWINGVTOGGLE D_STR_SWINGV " " D_STR_TOGGLE
-
419 #endif // D_STR_SWINGVTOGGLE
-
420 #ifndef D_STR_TURBOTOGGLE
-
421 #define D_STR_TURBOTOGGLE D_STR_TURBO " " D_STR_TOGGLE
-
422 #endif // D_STR_TURBOTOGGLE
-
423 
-
424 // Separators
-
425 #ifndef D_CHR_TIME_SEP
-
426 #define D_CHR_TIME_SEP ':'
-
427 #endif // D_CHR_TIME_SEP
-
428 #ifndef D_STR_SPACELBRACE
-
429 #define D_STR_SPACELBRACE " ("
-
430 #endif // D_STR_SPACELBRACE
-
431 #ifndef D_STR_COMMASPACE
-
432 #define D_STR_COMMASPACE ", "
-
433 #endif // D_STR_COMMASPACE
-
434 #ifndef D_STR_COLONSPACE
-
435 #define D_STR_COLONSPACE ": "
-
436 #endif // D_STR_COLONSPACE
-
437 
-
438 #ifndef D_STR_DAY
-
439 #define D_STR_DAY "Day"
-
440 #endif // D_STR_DAY
-
441 #ifndef D_STR_DAYS
-
442 #define D_STR_DAYS D_STR_DAY "s"
-
443 #endif // D_STR_DAYS
-
444 #ifndef D_STR_HOUR
-
445 #define D_STR_HOUR "Hour"
-
446 #endif // D_STR_HOUR
-
447 #ifndef D_STR_HOURS
-
448 #define D_STR_HOURS D_STR_HOUR "s"
-
449 #endif // D_STR_HOURS
-
450 #ifndef D_STR_MINUTE
-
451 #define D_STR_MINUTE "Minute"
-
452 #endif // D_STR_MINUTE
-
453 #ifndef D_STR_MINUTES
-
454 #define D_STR_MINUTES D_STR_MINUTE "s"
-
455 #endif // D_STR_MINUTES
-
456 #ifndef D_STR_SECOND
-
457 #define D_STR_SECOND "Second"
-
458 #endif // D_STR_SECOND
-
459 #ifndef D_STR_SECONDS
-
460 #define D_STR_SECONDS D_STR_SECOND "s"
-
461 #endif // D_STR_SECONDS
-
462 #ifndef D_STR_NOW
-
463 #define D_STR_NOW "Now"
-
464 #endif // D_STR_NOW
-
465 #ifndef D_STR_THREELETTERDAYS
-
466 #define D_STR_THREELETTERDAYS "SunMonTueWedThuFriSat"
-
467 #endif // D_STR_THREELETTERDAYS
-
468 
-
469 #ifndef D_STR_YES
-
470 #define D_STR_YES "Yes"
-
471 #endif // D_STR_YES
-
472 #ifndef D_STR_NO
-
473 #define D_STR_NO "No"
-
474 #endif // D_STR_NO
-
475 #ifndef D_STR_TRUE
-
476 #define D_STR_TRUE "True"
-
477 #endif // D_STR_TRUE
-
478 #ifndef D_STR_FALSE
-
479 #define D_STR_FALSE "False"
-
480 #endif // D_STR_FALSE
-
481 
-
482 #ifndef D_STR_REPEAT
-
483 #define D_STR_REPEAT "Repeat"
-
484 #endif // D_STR_REPEAT
-
485 #ifndef D_STR_CODE
-
486 #define D_STR_CODE "Code"
-
487 #endif // D_STR_CODE
-
488 #ifndef D_STR_BITS
-
489 #define D_STR_BITS "Bits"
-
490 #endif // D_STR_BITS
-
491 
-
492 // Protocols Names
-
493 #ifndef D_STR_AIRWELL
-
494 #define D_STR_AIRWELL "AIRWELL"
-
495 #endif // D_STR_AIRWELL
-
496 #ifndef D_STR_AIWA_RC_T501
-
497 #define D_STR_AIWA_RC_T501 "AIWA_RC_T501"
-
498 #endif // D_STR_AIWA_RC_T501
-
499 #ifndef D_STR_AMCOR
-
500 #define D_STR_AMCOR "AMCOR"
-
501 #endif // D_STR_AMCOR
-
502 #ifndef D_STR_ARGO
-
503 #define D_STR_ARGO "ARGO"
-
504 #endif // D_STR_ARGO
-
505 #ifndef D_STR_CARRIER_AC
-
506 #define D_STR_CARRIER_AC "CARRIER_AC"
-
507 #endif // D_STR_CARRIER_AC
-
508 #ifndef D_STR_CARRIER_AC40
-
509 #define D_STR_CARRIER_AC40 D_STR_CARRIER_AC "40"
-
510 #endif // D_STR_CARRIER_AC40
-
511 #ifndef D_STR_CARRIER_AC64
-
512 #define D_STR_CARRIER_AC64 D_STR_CARRIER_AC "64"
-
513 #endif // D_STR_CARRIER_AC64
-
514 #ifndef D_STR_COOLIX
-
515 #define D_STR_COOLIX "COOLIX"
-
516 #endif // D_STR_COOLIX
-
517 #ifndef D_STR_CORONA_AC
-
518 #define D_STR_CORONA_AC "CORONA_AC"
-
519 #endif // D_STR_CORONA_AC
-
520 #ifndef D_STR_DAIKIN
-
521 #define D_STR_DAIKIN "DAIKIN"
-
522 #endif // D_STR_DAIKIN
-
523 #ifndef D_STR_DAIKIN128
-
524 #define D_STR_DAIKIN128 "DAIKIN128"
-
525 #endif // D_STR_DAIKIN128
-
526 #ifndef D_STR_DAIKIN152
-
527 #define D_STR_DAIKIN152 "DAIKIN152"
-
528 #endif // D_STR_DAIKIN152
-
529 #ifndef D_STR_DAIKIN160
-
530 #define D_STR_DAIKIN160 "DAIKIN160"
-
531 #endif // D_STR_DAIKIN160
-
532 #ifndef D_STR_DAIKIN176
-
533 #define D_STR_DAIKIN176 "DAIKIN176"
-
534 #endif // D_STR_DAIKIN176
-
535 #ifndef D_STR_DAIKIN2
-
536 #define D_STR_DAIKIN2 "DAIKIN2"
-
537 #endif // D_STR_DAIKIN2
-
538 #ifndef D_STR_DAIKIN216
-
539 #define D_STR_DAIKIN216 "DAIKIN216"
-
540 #endif // D_STR_DAIKIN216
-
541 #ifndef D_STR_DAIKIN64
-
542 #define D_STR_DAIKIN64 "DAIKIN64"
-
543 #endif // D_STR_DAIKIN64
-
544 #ifndef D_STR_DELONGHI_AC
-
545 #define D_STR_DELONGHI_AC "DELONGHI_AC"
-
546 #endif // D_STR_DELONGHI_AC
-
547 #ifndef D_STR_DENON
-
548 #define D_STR_DENON "DENON"
-
549 #endif // D_STR_DENON
-
550 #ifndef D_STR_DISH
-
551 #define D_STR_DISH "DISH"
-
552 #endif // D_STR_DISH
-
553 #ifndef D_STR_DOSHISHA
-
554 #define D_STR_DOSHISHA "DOSHISHA"
-
555 #endif // D_STR_DOSHISHA
-
556 #ifndef D_STR_ECOCLIM
-
557 #define D_STR_ECOCLIM "ECOCLIM"
-
558 #endif // D_STR_ECOCLIM
-
559 #ifndef D_STR_ELECTRA_AC
-
560 #define D_STR_ELECTRA_AC "ELECTRA_AC"
-
561 #endif // D_STR_ELECTRA_AC
-
562 #ifndef D_STR_ELITESCREENS
-
563 #define D_STR_ELITESCREENS "ELITESCREENS"
-
564 #endif // D_STR_ELITESCREENS
-
565 #ifndef D_STR_EPSON
-
566 #define D_STR_EPSON "EPSON"
-
567 #endif // D_STR_EPSON
-
568 #ifndef D_STR_FUJITSU_AC
-
569 #define D_STR_FUJITSU_AC "FUJITSU_AC"
-
570 #endif // D_STR_FUJITSU_AC
-
571 #ifndef D_STR_GICABLE
-
572 #define D_STR_GICABLE "GICABLE"
-
573 #endif // D_STR_GICABLE
-
574 #ifndef D_STR_GLOBALCACHE
-
575 #define D_STR_GLOBALCACHE "GLOBALCACHE"
-
576 #endif // D_STR_GLOBALCACHE
-
577 #ifndef D_STR_GOODWEATHER
-
578 #define D_STR_GOODWEATHER "GOODWEATHER"
-
579 #endif // D_STR_GOODWEATHER
-
580 #ifndef D_STR_GREE
-
581 #define D_STR_GREE "GREE"
-
582 #endif // D_STR_GREE
-
583 #ifndef D_STR_HAIER_AC
-
584 #define D_STR_HAIER_AC "HAIER_AC"
-
585 #endif // D_STR_HAIER_AC
-
586 #ifndef D_STR_HAIER_AC_YRW02
-
587 #define D_STR_HAIER_AC_YRW02 "HAIER_AC_YRW02"
-
588 #endif // D_STR_HAIER_AC_YRW02
-
589 #ifndef D_STR_HITACHI_AC
-
590 #define D_STR_HITACHI_AC "HITACHI_AC"
-
591 #endif // D_STR_HITACHI_AC
-
592 #ifndef D_STR_HITACHI_AC1
-
593 #define D_STR_HITACHI_AC1 "HITACHI_AC1"
-
594 #endif // D_STR_HITACHI_AC1
-
595 #ifndef D_STR_HITACHI_AC2
-
596 #define D_STR_HITACHI_AC2 "HITACHI_AC2"
-
597 #endif // D_STR_HITACHI_AC2
-
598 #ifndef D_STR_HITACHI_AC3
-
599 #define D_STR_HITACHI_AC3 "HITACHI_AC3"
-
600 #endif // D_STR_HITACHI_AC3
-
601 #ifndef D_STR_HITACHI_AC344
-
602 #define D_STR_HITACHI_AC344 "HITACHI_AC344"
-
603 #endif // D_STR_HITACHI_AC344
-
604 #ifndef D_STR_HITACHI_AC424
-
605 #define D_STR_HITACHI_AC424 "HITACHI_AC424"
-
606 #endif // D_STR_HITACHI_AC424
-
607 #ifndef D_STR_INAX
-
608 #define D_STR_INAX "INAX"
-
609 #endif // D_STR_INAX
-
610 #ifndef D_STR_JVC
-
611 #define D_STR_JVC "JVC"
-
612 #endif // D_STR_JVC
-
613 #ifndef D_STR_KELVINATOR
-
614 #define D_STR_KELVINATOR "KELVINATOR"
-
615 #endif // D_STR_KELVINATOR
-
616 #ifndef D_STR_LASERTAG
-
617 #define D_STR_LASERTAG "LASERTAG"
-
618 #endif // D_STR_LASERTAG
-
619 #ifndef D_STR_LEGOPF
-
620 #define D_STR_LEGOPF "LEGOPF"
-
621 #endif // D_STR_LEGOPF
-
622 #ifndef D_STR_LG
-
623 #define D_STR_LG "LG"
-
624 #endif // D_STR_LG
-
625 #ifndef D_STR_LG2
-
626 #define D_STR_LG2 "LG2"
-
627 #endif // D_STR_LG2
-
628 #ifndef D_STR_LUTRON
-
629 #define D_STR_LUTRON "LUTRON"
-
630 #endif // D_STR_LUTRON
-
631 #ifndef D_STR_MAGIQUEST
-
632 #define D_STR_MAGIQUEST "MAGIQUEST"
-
633 #endif // D_STR_MAGIQUEST
-
634 #ifndef D_STR_METZ
-
635 #define D_STR_METZ "METZ"
-
636 #endif // D_STR_METZ
-
637 #ifndef D_STR_MIDEA
-
638 #define D_STR_MIDEA "MIDEA"
-
639 #endif // D_STR_MIDEA
-
640 #ifndef D_STR_MIDEA24
-
641 #define D_STR_MIDEA24 "MIDEA24"
-
642 #endif // D_STR_MIDEA24
-
643 #ifndef D_STR_MILESTAG2
-
644 #define D_STR_MILESTAG2 "MILESTAG2"
-
645 #endif // D_STR_MILESTAG2
-
646 #ifndef D_STR_MIRAGE
-
647 #define D_STR_MIRAGE "MIRAGE"
-
648 #endif // D_STR_MIRAGE
-
649 #ifndef D_STR_MITSUBISHI
-
650 #define D_STR_MITSUBISHI "MITSUBISHI"
-
651 #endif // D_STR_MITSUBISHI
-
652 #ifndef D_STR_MITSUBISHI112
-
653 #define D_STR_MITSUBISHI112 "MITSUBISHI112"
-
654 #endif // D_STR_MITSUBISHI112
-
655 #ifndef D_STR_MITSUBISHI136
-
656 #define D_STR_MITSUBISHI136 "MITSUBISHI136"
-
657 #endif // D_STR_MITSUBISHI136
-
658 #ifndef D_STR_MITSUBISHI2
-
659 #define D_STR_MITSUBISHI2 "MITSUBISHI2"
-
660 #endif // D_STR_MITSUBISHI2
-
661 #ifndef D_STR_MITSUBISHI_AC
-
662 #define D_STR_MITSUBISHI_AC "MITSUBISHI_AC"
-
663 #endif // D_STR_MITSUBISHI_AC
-
664 #ifndef D_STR_MITSUBISHI_HEAVY_152
-
665 #define D_STR_MITSUBISHI_HEAVY_152 "MITSUBISHI_HEAVY_152"
-
666 #endif // D_STR_MITSUBISHI_HEAVY_152
-
667 #ifndef D_STR_MITSUBISHI_HEAVY_88
-
668 #define D_STR_MITSUBISHI_HEAVY_88 "MITSUBISHI_HEAVY_88"
-
669 #endif // D_STR_MITSUBISHI_HEAVY_88
-
670 #ifndef D_STR_MULTIBRACKETS
-
671 #define D_STR_MULTIBRACKETS "MULTIBRACKETS"
-
672 #endif // D_STR_MULTIBRACKETS
-
673 #ifndef D_STR_MWM
-
674 #define D_STR_MWM "MWM"
-
675 #endif // D_STR_MWM
-
676 #ifndef D_STR_NEC
-
677 #define D_STR_NEC "NEC"
-
678 #endif // D_STR_NEC
-
679 #ifndef D_STR_NEC_LIKE
-
680 #define D_STR_NEC_LIKE D_STR_NEC "_LIKE"
-
681 #endif // D_STR_NEC_LIKE
-
682 #ifndef D_STR_NEC_NON_STRICT
-
683 #define D_STR_NEC_NON_STRICT D_STR_NEC " (NON-STRICT)"
-
684 #endif // D_STR_NEC_NON_STRICT
-
685 #ifndef D_STR_NEOCLIMA
-
686 #define D_STR_NEOCLIMA "NEOCLIMA"
-
687 #endif // D_STR_NEOCLIMA
-
688 #ifndef D_STR_NIKAI
-
689 #define D_STR_NIKAI "NIKAI"
-
690 #endif // D_STR_NIKAI
-
691 #ifndef D_STR_PANASONIC
-
692 #define D_STR_PANASONIC "PANASONIC"
-
693 #endif // D_STR_PANASONIC
-
694 #ifndef D_STR_PANASONIC_AC
-
695 #define D_STR_PANASONIC_AC "PANASONIC_AC"
-
696 #endif // D_STR_PANASONIC_AC
-
697 #ifndef D_STR_PANASONIC_AC32
-
698 #define D_STR_PANASONIC_AC32 D_STR_PANASONIC_AC"32"
-
699 #endif // D_STR_PANASONIC_AC32
-
700 #ifndef D_STR_PIONEER
-
701 #define D_STR_PIONEER "PIONEER"
-
702 #endif // D_STR_PIONEER
-
703 #ifndef D_STR_PRONTO
-
704 #define D_STR_PRONTO "PRONTO"
-
705 #endif // D_STR_PRONTO
-
706 #ifndef D_STR_RAW
-
707 #define D_STR_RAW "RAW"
-
708 #endif // D_STR_RAW
-
709 #ifndef D_STR_RC5
-
710 #define D_STR_RC5 "RC5"
-
711 #endif // D_STR_RC5
-
712 #ifndef D_STR_RC5X
-
713 #define D_STR_RC5X "RC5X"
-
714 #endif // D_STR_RC5X
-
715 #ifndef D_STR_RC6
-
716 #define D_STR_RC6 "RC6"
-
717 #endif // D_STR_RC6
-
718 #ifndef D_STR_RCMM
-
719 #define D_STR_RCMM "RCMM"
-
720 #endif // D_STR_RCMM
-
721 #ifndef D_STR_SAMSUNG
-
722 #define D_STR_SAMSUNG "SAMSUNG"
-
723 #endif // D_STR_SAMSUNG
-
724 #ifndef D_STR_SAMSUNG36
-
725 #define D_STR_SAMSUNG36 "SAMSUNG36"
-
726 #endif // D_STR_SAMSUNG36
-
727 #ifndef D_STR_SAMSUNG_AC
-
728 #define D_STR_SAMSUNG_AC "SAMSUNG_AC"
-
729 #endif // D_STR_SAMSUNG_AC
-
730 #ifndef D_STR_SANYO
-
731 #define D_STR_SANYO "SANYO"
-
732 #endif // D_STR_SANYO
-
733 #ifndef D_STR_SANYO_AC
-
734 #define D_STR_SANYO_AC "SANYO_AC"
-
735 #endif // D_STR_SANYO_AC
-
736 #ifndef D_STR_SANYO_LC7461
-
737 #define D_STR_SANYO_LC7461 "SANYO_LC7461"
-
738 #endif // D_STR_SANYO_LC7461
-
739 #ifndef D_STR_SHARP
-
740 #define D_STR_SHARP "SHARP"
-
741 #endif // D_STR_SHARP
-
742 #ifndef D_STR_SHARP_AC
-
743 #define D_STR_SHARP_AC "SHARP_AC"
-
744 #endif // D_STR_SHARP_AC
-
745 #ifndef D_STR_SHERWOOD
-
746 #define D_STR_SHERWOOD "SHERWOOD"
-
747 #endif // D_STR_SHERWOOD
-
748 #ifndef D_STR_SONY
-
749 #define D_STR_SONY "SONY"
-
750 #endif // D_STR_SONY
-
751 #ifndef D_STR_SONY_38K
-
752 #define D_STR_SONY_38K "SONY_38K"
-
753 #endif // D_STR_SONY_38K
-
754 #ifndef D_STR_SYMPHONY
-
755 #define D_STR_SYMPHONY "SYMPHONY"
-
756 #endif // D_STR_SYMPHONY
-
757 #ifndef D_STR_TCL112AC
-
758 #define D_STR_TCL112AC "TCL112AC"
-
759 #endif // D_STR_TCL112AC
-
760 #ifndef D_STR_TECHNIBEL_AC
-
761 #define D_STR_TECHNIBEL_AC "TECHNIBEL_AC"
-
762 #endif // D_STR_TECHNIBEL_AC
-
763 #ifndef D_STR_TECO
-
764 #define D_STR_TECO "TECO"
-
765 #endif // D_STR_TECO
-
766 #ifndef D_STR_TOSHIBA_AC
-
767 #define D_STR_TOSHIBA_AC "TOSHIBA_AC"
-
768 #endif // D_STR_TOSHIBA_AC
-
769 #ifndef D_STR_TRANSCOLD
-
770 #define D_STR_TRANSCOLD "TRANSCOLD"
-
771 #endif // D_STR_TRANSCOLD
-
772 #ifndef D_STR_TROTEC
-
773 #define D_STR_TROTEC "TROTEC"
-
774 #endif // D_STR_TROTEC
-
775 #ifndef D_STR_TRUMA
-
776 #define D_STR_TRUMA "TRUMA"
-
777 #endif // D_STR_TRUMA
-
778 #ifndef D_STR_UNUSED
-
779 #define D_STR_UNUSED "UNUSED"
-
780 #endif // D_STR_UNUSED
-
781 #ifndef D_STR_VESTEL_AC
-
782 #define D_STR_VESTEL_AC "VESTEL_AC"
-
783 #endif // D_STR_VESTEL_AC
-
784 #ifndef D_STR_VOLTAS
-
785 #define D_STR_VOLTAS "VOLTAS"
-
786 #endif // D_STR_VOLTAS
-
787 #ifndef D_STR_WHIRLPOOL_AC
-
788 #define D_STR_WHIRLPOOL_AC "WHIRLPOOL_AC"
-
789 #endif // D_STR_WHIRLPOOL_AC
-
790 #ifndef D_STR_WHYNTER
-
791 #define D_STR_WHYNTER "WHYNTER"
-
792 #endif // D_STR_WHYNTER
-
793 #ifndef D_STR_XMP
-
794 #define D_STR_XMP "XMP"
-
795 #endif // D_STR_XMP
-
796 #ifndef D_STR_ZEPEAL
-
797 #define D_STR_ZEPEAL "ZEPEAL"
-
798 #endif // D_STR_ZEPEAL
-
799 
-
800 // IRrecvDumpV2+
-
801 #ifndef D_STR_TIMESTAMP
-
802 #define D_STR_TIMESTAMP "Timestamp"
-
803 #endif // D_STR_TIMESTAMP
-
804 #ifndef D_STR_LIBRARY
-
805 #define D_STR_LIBRARY "Library"
-
806 #endif // D_STR_LIBRARY
-
807 #ifndef D_STR_MESGDESC
-
808 #define D_STR_MESGDESC "Mesg Desc."
-
809 #endif // D_STR_MESGDESC
-
810 #ifndef D_STR_TOLERANCE
-
811 #define D_STR_TOLERANCE "Tolerance"
-
812 #endif // D_STR_TOLERANCE
-
813 #ifndef D_STR_IRRECVDUMP_STARTUP
-
814 #define D_STR_IRRECVDUMP_STARTUP \
-
815  "IRrecvDump is now running and waiting for IR input on Pin %d"
-
816 #endif // D_STR_IRRECVDUMP_STARTUP
-
817 #ifndef D_WARN_BUFFERFULL
-
818 #define D_WARN_BUFFERFULL \
-
819  "WARNING: IR code is too big for buffer (>= %d). " \
-
820  "This result shouldn't be trusted until this is resolved. " \
-
821  "Edit & increase `kCaptureBufferSize`."
-
822 #endif // D_WARN_BUFFERFULL
-
823 
-
824 #endif // LOCALE_DEFAULTS_H_
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/deprecated.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/deprecated.html deleted file mode 100644 index 58f8129ca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/deprecated.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: Deprecated List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Deprecated List
-
-
-
-
Member IRsend::sendPanasonic (const uint16_t address, const uint32_t data, const uint16_t nbits=kPanasonicBits, const uint16_t repeat=kNoRepeat)
-
This is only for legacy use only, please use sendPanasonic64() instead.
-
Member IRsend::sendSharp (const uint16_t address, const uint16_t command, const uint16_t nbits=kSharpBits, const uint16_t repeat=kNoRepeat)
-
Only use this if you are using legacy from the original Arduino-IRremote library. 99% of the time, you will want to use sendSharpRaw() instead
-
Member resultToTimingInfo (const decode_results *const results)
-
This is only for those that want this legacy format.
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_49e56c817e5e54854c35e136979f97ca.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_49e56c817e5e54854c35e136979f97ca.html deleted file mode 100644 index 6b30372c6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_49e56c817e5e54854c35e136979f97ca.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -IRremoteESP8266: docs Directory Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
docs Directory Reference
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index b51723991..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - -IRremoteESP8266: src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
- - - - -

-Directories

directory  locale
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  i18n.h [code]
 
file  ir_Airwell.cpp
 Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.
 
file  ir_Airwell.h [code]
 Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.
 
file  ir_Aiwa.cpp
 Aiwa based protocol. Based off the RC-T501 RCU Inspired by IRremoteESP8266's implementation.
 
file  ir_Amcor.cpp
 Amcor A/C protocol.
 
file  ir_Amcor.h [code]
 Amcor A/C protocol.
 
file  ir_Argo.cpp
 Argo A/C protocol. Controls an Argo Ulisse 13 DCI A/C.
 
file  ir_Argo.h [code]
 Support for Argo Ulisse 13 DCI Mobile Split ACs.
 
file  ir_Carrier.cpp
 Carrier protocols.
 
file  ir_Carrier.h [code]
 Carrier A/C.
 
file  ir_Coolix.cpp
 Coolix A/C / heatpump.
 
file  ir_Coolix.h [code]
 Support for Coolix A/C protocols.
 
file  ir_Corona.cpp
 Corona A/C protocol.
 
file  ir_Corona.h [code]
 
file  ir_Daikin.cpp
 Support for Daikin A/C protocols.
 
file  ir_Daikin.h [code]
 Support for Daikin A/C protocols.
 
file  ir_Delonghi.cpp
 Delonghi based protocol.
 
file  ir_Delonghi.h [code]
 Delonghi A/C.
 
file  ir_Denon.cpp
 Denon support Original Denon support added by https://github.com/csBlueChip Ported over by Massimiliano Pinto.
 
file  ir_Dish.cpp
 DISH Network protocol support DISH support originally by Todd Treece.
 
file  ir_Doshisha.cpp
 Doshisha protocol support.
 
file  ir_Ecoclim.cpp
 EcoClim A/C protocol.
 
file  ir_Ecoclim.h [code]
 EcoClim A/C protocol.
 
file  ir_Electra.cpp
 Support for Electra A/C protocols.
 
file  ir_Electra.h [code]
 Support for Electra A/C protocols.
 
file  ir_EliteScreens.cpp
 Elite Screens protocol support.
 
file  ir_Epson.cpp
 Support for Epson protocols. Epson is an NEC-like protocol, except it doesn't use the NEC style repeat.
 
file  ir_Fujitsu.cpp
 Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham & David Conran.
 
file  ir_Fujitsu.h [code]
 Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham.
 
file  ir_GICable.cpp
 G.I. Cable.
 
file  ir_GlobalCache.cpp
 Global Cache IR format sender Originally added by Hisham Khalifa (http://www.hishamkhalifa.com)
 
file  ir_Goodweather.cpp
 Support for Goodweather compatible HVAC protocols.
 
file  ir_Goodweather.h [code]
 Support for Goodweather compatible HVAC protocols.
 
file  ir_Gree.cpp
 Support for Gree A/C protocols.
 
file  ir_Gree.h [code]
 Support for Gree A/C protocols.
 
file  ir_Haier.cpp
 Support for Haier A/C protocols. The specifics of reverse engineering the protocols details:
 
file  ir_Haier.h [code]
 Support for Haier A/C protocols. The specifics of reverse engineering the protocols details:
 
file  ir_Hitachi.cpp
 Support for Hitachi A/C protocols.
 
file  ir_Hitachi.h [code]
 Support for Hitachi A/C protocols.
 
file  ir_Inax.cpp
 Support for the Inax Robot Toilet IR protocols.
 
file  ir_JVC.cpp
 Support for JVC protocols. Originally added by Kristian Lauszus Thanks to zenwheel and other people at the original blog post.
 
file  ir_Kelvinator.cpp
 Support for Kelvinator A/C protocols. Code to emulate IR Kelvinator YALIF remote control unit, which should control at least the following Kelvinator A/C units: KSV26CRC, KSV26HRC, KSV35CRC, KSV35HRC, KSV53HRC, KSV62HRC, KSV70CRC, KSV70HRC, KSV80HRC.
 
file  ir_Kelvinator.h [code]
 Support for Kelvinator A/C protocols.
 
file  ir_Lasertag.cpp
 Support for Lasertag protocols.
 
file  ir_Lego.cpp
 Support for LEGO protocols.
 
file  ir_LG.cpp
 Support for LG protocols. LG decode originally added by Darryl Smith (based on the JVC protocol) LG send originally added by https://github.com/chaeplin.
 
file  ir_LG.h [code]
 Support for LG protocols.
 
file  ir_Lutron.cpp
 Support for Lutron protocols.
 
file  ir_Magiquest.cpp
 Support for MagiQuest protocols.
 
file  ir_Magiquest.h [code]
 Support for MagiQuest protocols.
 
file  ir_Metz.cpp
 Support for Metz protocol.
 
file  ir_Midea.cpp
 Support for Midea protocols. Midea added by crankyoldgit & bwze. send: bwze/crankyoldgit, decode: crankyoldgit.
 
file  ir_Midea.h [code]
 Support for Midea protocols. Midea added by crankyoldgit & bwze.
 
file  ir_MilesTag2.cpp
 Support for the MilesTag2 IR protocol for LaserTag gaming.
 
file  ir_Mirage.cpp
 Support for Mirage protocol.
 
file  ir_Mitsubishi.cpp
 Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github.com/z3t0/Arduino-IRremote Mitsubishi (TV) sending & Mitsubishi A/C support added by David Conran.
 
file  ir_Mitsubishi.h [code]
 Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github.com/z3t0/Arduino-IRremote Mitsubishi (TV) sending & Mitsubishi A/C support added by David Conran.
 
file  ir_MitsubishiHeavy.cpp
 Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units.
 
file  ir_MitsubishiHeavy.h [code]
 Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units.
 
file  ir_Multibrackets.cpp
 Support for Multibrackets protocols.
 
file  ir_MWM.cpp
 Disney Made With Magic (MWM) Support derived from ir_Lasertag.cpp.
 
file  ir_NEC.cpp
 Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_NEC.h [code]
 Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Neoclima.cpp
 Support for Neoclima protocols. Analysis by crankyoldgit, AndreyShpilevoy, & griffisc306 Code by crankyoldgit.
 
file  ir_Neoclima.h [code]
 Support for Neoclima protocols. Analysis by crankyoldgit & AndreyShpilevoy.
 
file  ir_Nikai.cpp
 Nikai.
 
file  ir_Panasonic.cpp
 Support for Panasonic protocols. Panasonic protocol originally added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)
 
file  ir_Panasonic.h [code]
 Support for Panasonic protocols.
 
file  ir_Pioneer.cpp
 Pioneer remote emulation.
 
file  ir_Pronto.cpp
 Pronto code message generation.
 
file  ir_RC5_RC6.cpp
 RC-5 & RC-6 support RC-5 & RC-6 support added from https://github.com/z3t0/Arduino-IRremote RC-5X support added by David Conran.
 
file  ir_RCMM.cpp
 Support for the Phillips RC-MM protocol.
 
file  ir_Samsung.cpp
 Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Samsung.h [code]
 Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Sanyo.cpp
 Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Sanyo.h [code]
 Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Sharp.cpp
 Support for Sharp protocols.
 
file  ir_Sharp.h [code]
 Support for Sharp protocols.
 
file  ir_Sherwood.cpp
 Support for Sherwood protocols.
 
file  ir_Sony.cpp
 Support for Sony SIRC(Serial Infra-Red Control) protocols. Sony originally added from https://github.com/shirriff/Arduino-IRremote/ Updates from marcosamarinho.
 
file  ir_Symphony.cpp
 Support for Symphony protocols.
 
file  ir_Tcl.cpp
 Support for TCL protocols.
 
file  ir_Tcl.h [code]
 Support for TCL protocols.
 
file  ir_Technibel.cpp
 Support for Technibel protocol.
 
file  ir_Technibel.h [code]
 Support for Technibel protocol.
 
file  ir_Teco.cpp
 Support for Teco protocols.
 
file  ir_Teco.h [code]
 Support for Teco protocols.
 
file  ir_Toshiba.cpp
 Support for Toshiba protocols.
 
file  ir_Toshiba.h [code]
 Support for Toshiba protocols.
 
file  ir_Transcold.cpp
 Support for Transcold A/C protocols.
 
file  ir_Transcold.h [code]
 Support for Transcold A/C protocols.
 
file  ir_Trotec.cpp
 Support for Trotec protocols.
 
file  ir_Trotec.h [code]
 Support for Trotec protocols.
 
file  ir_Truma.cpp
 Support for Truma protocol. This protocol uses mark length bit encoding.
 
file  ir_Truma.h [code]
 Support for Truma protocol.
 
file  ir_Vestel.cpp
 Support for Vestel protocols. Vestel added by Erdem U. Altinyurt.
 
file  ir_Vestel.h [code]
 Support for Vestel protocols. Vestel added by Erdem U. Altinyurt.
 
file  ir_Voltas.cpp
 Support for Voltas A/C protocol.
 
file  ir_Voltas.h [code]
 Support for Voltas A/C protocol.
 
file  ir_Whirlpool.cpp
 Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.
 
file  ir_Whirlpool.h [code]
 Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.
 
file  ir_Whynter.cpp
 Support for Whynter protocols. Whynter A/C ARC-110WD added by Francesco Meschia Whynter originally added from https://github.com/shirriff/Arduino-IRremote/.
 
file  ir_Xmp.cpp
 Support for XMP protocols.
 
file  ir_Zepeal.cpp
 Support for Zepeal protocol. This protocol uses fixed length bit encoding. Most official information about Zepeal seems to be from Denkyosha.
 
file  IRac.cpp
 
file  IRac.h [code]
 
file  IRrecv.cpp
 
file  IRrecv.h [code]
 
file  IRremoteESP8266.h [code]
 
file  IRsend.cpp
 
file  IRsend.h [code]
 
file  IRtext.cpp
 
file  IRtext.h [code]
 
file  IRtimer.cpp
 
file  IRtimer.h [code]
 
file  IRutils.cpp
 
file  IRutils.h [code]
 
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_84fe998d1eb06414cc389ad334e77e63.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_84fe998d1eb06414cc389ad334e77e63.html deleted file mode 100644 index 532307d5a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dir_84fe998d1eb06414cc389ad334e77e63.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale Directory Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
locale Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  de-CH.h [code]
 
file  de-DE.h [code]
 
file  defaults.h [code]
 
file  en-AU.h [code]
 
file  en-IE.h [code]
 
file  en-UK.h [code]
 
file  en-US.h [code]
 
file  es-ES.h [code]
 
file  fr-FR.h [code]
 
file  it-IT.h [code]
 
file  pt-BR.h [code]
 
file  zh-CN.h [code]
 
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doc.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doc.png deleted file mode 100644 index 17edabff9..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doc.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.css b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.css deleted file mode 100644 index 73ecbb2cb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.css +++ /dev/null @@ -1,1771 +0,0 @@ -/* The standard CSS for doxygen 1.8.17 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -th p.starttd, p.intertd, p.endtd { - font-size: 100%; - font-weight: 700; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -p.interli { -} - -p.interdd { -} - -p.intertd { -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #FFFFFF; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #FFFFFF; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl, img.inline { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #9CAFD4; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight, .memTemplItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype, .tparams .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; -} - -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { - margin-left: 0px; - padding-left: 0px; -} - -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; -} - -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; -} - -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; -} - -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.png deleted file mode 100644 index 3ff17d807..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen__index_8md.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen__index_8md.html deleted file mode 100644 index ad1a690b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/doxygen__index_8md.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - -IRremoteESP8266: docs/doxygen_index.md File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
docs/doxygen_index.md File Reference
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dynsections.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dynsections.js deleted file mode 100644 index ea0a7b39a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/dynsections.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -IRremoteESP8266: src/locale/en-AU.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-AU.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-AU_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-AU_8h_source.html deleted file mode 100644 index 0484fcd20..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-AU_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-AU.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-AU.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 // Locale/language file for English / Australia.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_EN_AU_H_
-
5 #define LOCALE_EN_AU_H_
-
6 // Nothing should really need to be set here, as en-AU is the default
-
7 // locale/language.
-
8 #endif // LOCALE_EN_AU_H__
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h.html deleted file mode 100644 index fe4574abc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-IE.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-IE.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h_source.html deleted file mode 100644 index 27678a585..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-IE_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-IE.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-IE.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 // Locale/language file for English / Ireland.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_EN_IE_H_
-
5 #define LOCALE_EN_IE_H_
-
6 // Nothing should really need to be set here, as en-IE is the same as en-AU,
-
7 // which is the default locale/language.
-
8 #endif // LOCALE_EN_IE_H__
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h.html deleted file mode 100644 index a18db62c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-UK.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-UK.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h_source.html deleted file mode 100644 index e46cdbc56..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-UK_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-UK.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-UK.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 // Locale/language file for English / United Kingdom.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_EN_UK_H_
-
5 #define LOCALE_EN_UK_H_
-
6 // Nothing should really need to be set here, as en-UK is the same as en-AU,
-
7 // which is the default locale/language.
-
8 #endif // LOCALE_EN_UK_H__
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h.html deleted file mode 100644 index ac8bce965..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-US.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-US.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h_source.html deleted file mode 100644 index fd8ed5161..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/en-US_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/en-US.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
en-US.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 // Locale/language file for English / United States of America.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_EN_US_H_
-
5 #define LOCALE_EN_US_H_
-
6 // Not much should really need to be set here, as English is the default
-
7 // locale/language.
-
8 
-
9 // Overrides to the default.
-
10 #define D_STR_CENTRE "Center"
-
11 #define D_STR_MOULD "Mold"
-
12 
-
13 #endif // LOCALE_EN_US_H__
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h.html deleted file mode 100644 index 4d9de7fab..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/es-ES.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
es-ES.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h_source.html deleted file mode 100644 index fe7a1d618..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/es-ES_8h_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/es-ES.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
es-ES.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - Carlos (@charlieyv)
-
2 // Locale/language file for Spanish / Spain.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_ES_ES_H_
-
5 #define LOCALE_ES_ES_H_
-
6 
-
7 #define D_STR_UNKNOWN "DESCONOCIDO"
-
8 #define D_STR_PROTOCOL "Protocolo"
-
9 #define D_STR_POWER "Poder"
-
10 #define D_STR_PREVIOUS "Anterior"
-
11 #define D_STR_PREVIOUSPOWER D_STR_POWER " " D_STR_PREVIOUS
-
12 #define D_STR_ON "Encendido"
-
13 #define D_STR_OFF "Apagado"
-
14 #define D_STR_MODE "Modo"
-
15 #define D_STR_TOGGLE "Palanca"
-
16 #define D_STR_SLEEP "Dormir"
-
17 #define D_STR_LIGHT "Luz"
-
18 #define D_STR_POWERFUL "Poderoso"
-
19 #define D_STR_QUIET "Silencio"
-
20 #define D_STR_ECONO "Econo"
-
21 #define D_STR_SWING "Oscilar"
-
22 #define D_STR_SWINGH D_STR_SWING"(H)"
-
23 #define D_STR_SWINGV D_STR_SWING"(V)"
-
24 #define D_STR_BEEP "Bip"
-
25 #define D_STR_MOULD "Molde"
-
26 #define D_STR_CLEAN "Limpiar"
-
27 #define D_STR_PURIFY "Purificar"
-
28 #define D_STR_TIMER "Temporizador"
-
29 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER
-
30 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER
-
31 #define D_STR_CLOCK "Reloj"
-
32 #define D_STR_COMMAND "Comando"
-
33 #define D_STR_HEALTH "Salud"
-
34 #define D_STR_MODEL "Modelo"
-
35 #define D_STR_TEMP "Temperatura"
-
36 #define D_STR_HUMID "Humedo"
-
37 #define D_STR_SAVE "Guardar"
-
38 #define D_STR_EYE "Ojo"
-
39 #define D_STR_FOLLOW "Seguir"
-
40 #define D_STR_FRESH "Fresco"
-
41 #define D_STR_HOLD "Mantener"
-
42 #define D_STR_8C_HEAT "8C " D_STR_HEAT
-
43 #define D_STR_BUTTON "Boton"
-
44 #define D_STR_NIGHT "Noche"
-
45 #define D_STR_SILENT "Silencio"
-
46 #define D_STR_FILTER "Filtro"
-
47 #define D_STR_UP "Arriba"
-
48 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP
-
49 #define D_STR_DOWN "Abajo"
-
50 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN
-
51 #define D_STR_CHANGE "Cambiar"
-
52 #define D_STR_START "Comenzar"
-
53 #define D_STR_STOP "Parar"
-
54 #define D_STR_MOVE "Mover"
-
55 #define D_STR_SET "Fijar"
-
56 #define D_STR_CANCEL "Cancelar"
-
57 #define D_STR_COMFORT "Comodo"
-
58 #define D_STR_WEEKLY "Semanal"
-
59 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER
-
60 #define D_STR_LAST "Ultimo"
-
61 #define D_STR_FAST "Rapido"
-
62 #define D_STR_SLOW "Lento"
-
63 #define D_STR_AIRFLOW "Flujo de Aire"
-
64 #define D_STR_STEP "Paso"
-
65 #define D_STR_OUTSIDE "Afuera"
-
66 #define D_STR_LOUD "Ruidoso"
-
67 #define D_STR_UPPER "Superior"
-
68 #define D_STR_LOWER "Inferior"
-
69 #define D_STR_BREEZE "Brisa"
-
70 #define D_STR_CIRCULATE "Circular"
-
71 #define D_STR_CEILING "Techo"
-
72 #define D_STR_WALL "Pared"
-
73 #define D_STR_ROOM "Cuarto"
-
74 #define D_STR_6THSENSE "6to. Sentido"
-
75 #define D_STR_ZONEFOLLOW "Zona Seguir"
-
76 #define D_STR_FIXED "Fijo"
-
77 #define D_STR_AUTOMATIC "Automatico"
-
78 #define D_STR_COOL "Frio"
-
79 #define D_STR_HEAT "Calor"
-
80 #define D_STR_FAN "Ventilador"
-
81 #define D_STR_FANONLY "ventilador_solamente"
-
82 #define D_STR_DRY "Seco"
-
83 #define D_STR_MAX "Max"
-
84 #define D_STR_MAXIMUM "Maximo"
-
85 #define D_STR_MIN "Min"
-
86 #define D_STR_MINIMUM "Minimo"
-
87 #define D_STR_MED "Med"
-
88 #define D_STR_MEDIUM "Medio"
-
89 #define D_STR_HIGHEST "Mas Alto"
-
90 #define D_STR_HIGH "Alto"
-
91 #define D_STR_HI D_STR_HIGH
-
92 #define D_STR_MIDDLE "Medio"
-
93 #define D_STR_MID D_STR_MIDDLE
-
94 #define D_STR_LOW "Bajo"
-
95 #define D_STR_LO D_STR_LOW
-
96 #define D_STR_LOWEST "Mas Bajo"
-
97 #define D_STR_RIGHT "Derecha"
-
98 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT
-
99 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX
-
100 #define D_STR_LEFT "Izquierda"
-
101 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT
-
102 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX
-
103 #define D_STR_WIDE "Ancho"
-
104 #define D_STR_CENTRE "Centro"
-
105 #define D_STR_TOP "Tope"
-
106 #define D_STR_BOTTOM "Fondo"
-
107 #define D_STR_DAY "Dia"
-
108 #define D_STR_DAYS D_STR_DAY "s"
-
109 #define D_STR_HOUR "Hora"
-
110 #define D_STR_HOURS D_STR_HOUR "s"
-
111 #define D_STR_MINUTE "Minuto"
-
112 #define D_STR_MINUTES D_STR_MINUTE "s"
-
113 #define D_STR_SECOND "Segundo"
-
114 #define D_STR_SECONDS D_STR_SECOND "s"
-
115 #define D_STR_NOW "Ahora"
-
116 #define D_STR_THREELETTERDAYS "DomLunMarMieJueVieSab"
-
117 #define D_STR_YES "Si"
-
118 #define D_STR_NO "No"
-
119 #define D_STR_TRUE "Cierto"
-
120 #define D_STR_FALSE "Falso"
-
121 #define D_STR_REPEAT "Repetir"
-
122 #define D_STR_CODE "Codigo"
-
123 
-
124 // IRrecvDumpV2+
-
125 #define D_STR_TIMESTAMP "marca de tiempo"
-
126 #define D_STR_LIBRARY "Libreria"
-
127 #define D_STR_IRRECVDUMP_STARTUP \
-
128  "IRrecvDump esta ahora corriendo y esperando por comando IR en Pin %d"
-
129 #ifndef D_WARN_BUFFERFULL
-
130 #define D_WARN_BUFFERFULL \
-
131  "WARNING: Codigo IR es muy grande para el buffer (>= %d). "\
-
132  "Este resultando no debe ser reconocido hasta que esto sea resuelto." \
-
133  "Edite & incremente `kCaptureBufferSize`."
-
134 #endif // D_WARN_BUFFERFULL
-
135 
-
136 #endif // LOCALE_ES_ES_H_
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/files.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/files.html deleted file mode 100644 index c9bafbcad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/files.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -IRremoteESP8266: File List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
-
[detail level 123]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 docs
  src
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderclosed.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderclosed.png deleted file mode 100644 index bb8ab35ed..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderclosed.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderopen.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderopen.png deleted file mode 100644 index d6c7f676a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/folderopen.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h.html deleted file mode 100644 index 14793daa2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/fr-FR.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
fr-FR.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h_source.html deleted file mode 100644 index 5913604c0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/fr-FR_8h_source.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/fr-FR.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
fr-FR.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - Mathieu D(@Knackie)
-
2 // Locale/language file for French / Quebec.
-
3 // This file will override the default values located in `defaults.h`.
-
4 #ifndef LOCALE_FR_FR_H_
-
5 #define LOCALE_FR_FR_H_
-
6 
-
7 #define D_STR_UNKNOWN "INCONNU"
-
8 #define D_STR_PROTOCOL "Protocole"
-
9 #define D_STR_TOGGLE "Bascule"
-
10 #define D_STR_SLEEP "Pause"
-
11 #define D_STR_LIGHT "Lumière"
-
12 #define D_STR_POWERFUL "Puissance"
-
13 #define D_STR_PREVIOUS "Precedente"
-
14 #define D_STR_PREVIOUSPOWER D_STR_POWER " " D_STR_PREVIOUS
-
15 #define D_STR_QUIET "Silence"
-
16 #define D_STR_ECONO "Economie"
-
17 #define D_STR_BEEP "Bip"
-
18 #define D_STR_MOULD "Moule"
-
19 #define D_STR_CLEAN "Nettoyer"
-
20 #define D_STR_PURIFY "Purifier"
-
21 #define D_STR_ON "On"
-
22 #define D_STR_OFF "Off"
-
23 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER
-
24 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER
-
25 #define D_STR_CLOCK "Heure"
-
26 #define D_STR_COMMAND "Commandement"
-
27 #define D_STR_HEALTH "Santé"
-
28 #define D_STR_TEMP "Temporaire"
-
29 #define D_STR_HUMID "Humidité"
-
30 #define D_STR_SAVE "Sauvegarder"
-
31 #define D_STR_EYE "Oeil"
-
32 #define D_STR_FOLLOW "Suivre"
-
33 #define D_STR_FRESH "Frais"
-
34 #define D_STR_HOLD "Maintenir"
-
35 #define D_STR_BUTTON "Bouton"
-
36 #define D_STR_NIGHT "Nuit"
-
37 #define D_STR_SILENT "Silence"
-
38 #define D_STR_UP "En haut"
-
39 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP
-
40 #define D_STR_DOWN "En bas"
-
41 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN
-
42 #define D_STR_CHANGE "Changement"
-
43 #define D_STR_SET "Mettre"
-
44 #define D_STR_CANCEL "Annuler"
-
45 #define D_STR_COMFORT "Confort"
-
46 #define D_STR_WEEKLY "Chaque semaine"
-
47 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER
-
48 #define D_STR_FAST "Rapide"
-
49 #define D_STR_SLOW "Lent"
-
50 #define D_STR_AIRFLOW "Ebauche"
-
51 #define D_STR_STEP "Etape"
-
52 #define D_STR_OUTSIDE "Plein air"
-
53 #define D_STR_LOUD "Fort"
-
54 #define D_STR_UPPER "Au dessus"
-
55 #define D_STR_LOWER "En dessous"
-
56 #define D_STR_BREEZE "Brise"
-
57 #define D_STR_CIRCULATE "Faire circuler"
-
58 #define D_STR_CEILING "Plafond"
-
59 #define D_STR_WALL "Mur"
-
60 #define D_STR_ROOM "Pièce"
-
61 #define D_STR_6THSENSE "6ter Sens"
-
62 #define D_STR_FIXED "Fixer"
-
63 
-
64 #define D_STR_AUTOMATIC "Automatique"
-
65 #define D_STR_MANUAL "Manuel"
-
66 #define D_STR_COOL "Frais"
-
67 #define D_STR_HEAT "Chaleur"
-
68 #define D_STR_FAN "Ventillateur"
-
69 #define D_STR_FANONLY "Seul_fan"
-
70 #define D_STR_DRY "Sec"
-
71 
-
72 #define D_STR_MEDIUM "Moyen"
-
73 
-
74 #define D_STR_HIGHEST "Le plus haut"
-
75 #define D_STR_HIGH "Haut"
-
76 #define D_STR_HI "H"
-
77 #define D_STR_MID "M"
-
78 #define D_STR_MIDDLE "Moitié"
-
79 #define D_STR_LOW "Bas"
-
80 #define D_STR_LO "B"
-
81 #define D_STR_LOWEST "Le plus bas"
-
82 #define D_STR_RIGHT "Droite"
-
83 #define D_STR_MAX "Max"
-
84 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT
-
85 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX
-
86 #define D_STR_LEFT "Gauche"
-
87 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT
-
88 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX
-
89 #define D_STR_WIDE "Large"
-
90 #define D_STR_TOP "Au-dessus"
-
91 #define D_STR_BOTTOM "En-dessous"
-
92 
-
93 #define D_STR_DAY "Jour"
-
94 #define D_STR_HOUR "Heure"
-
95 #define D_STR_SECOND "Seconde"
-
96 #define D_STR_NOW "Maintenant"
-
97 #define D_STR_THREELETTERDAYS "LunMarMerJeuVenSamDim"
-
98 
-
99 #define D_STR_YES "Oui"
-
100 #define D_STR_NO "Non"
-
101 #define D_STR_TRUE "Vrai"
-
102 #define D_STR_FALSE "Faux"
-
103 
-
104 #define D_STR_REPEAT "Répetition"
-
105 
-
106 // IRrecvDumpV2+
-
107 #define D_STR_TIMESTAMP "Horodatage"
-
108 #define D_STR_LIBRARY "Bibliothèque"
-
109 #define D_STR_MESGDESC "Rèférence"
-
110 #define D_STR_IRRECVDUMP_STARTUP \
-
111  "IRrecvDump fonctionne et attend l’entrée IR sur la broche %d"
-
112 #define D_WARN_BUFFERFULL \
-
113  "ATTENTION: IR Code est trop gros pour le buffer (>= %d). " \
-
114  "Le résultat ne doit pas être approuvé avant que cela soit résolu. " \
-
115  "Modifier et agrandir `kCaptureBufferSize`."
-
116 
-
117 #endif // LOCALE_FR_FR_H_
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions.html deleted file mode 100644 index ec2c3bbc9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions.html +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- _ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_a.html deleted file mode 100644 index 6283561af..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_a.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- a -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_b.html deleted file mode 100644 index 048152143..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_b.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_c.html deleted file mode 100644 index ba7f5d78f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_c.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- c -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_d.html deleted file mode 100644 index 3c55a1b5b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_d.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- d -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_e.html deleted file mode 100644 index 2a5f1cada..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_e.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- e -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_f.html deleted file mode 100644 index 56336d32f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_f.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- f -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func.html deleted file mode 100644 index 57fb6186a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- _ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_a.html deleted file mode 100644 index fdc930cc4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_a.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_b.html deleted file mode 100644 index 6431d9ff6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_b.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_c.html deleted file mode 100644 index cb555fe55..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_c.html +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- c -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_d.html deleted file mode 100644 index 8f78d336b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_d.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- d -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_e.html deleted file mode 100644 index 12f041b01..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_e.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- e -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_f.html deleted file mode 100644 index ee49a0e3d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_f.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- f -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_g.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_g.html deleted file mode 100644 index 4b12bf444..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_g.html +++ /dev/null @@ -1,898 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- g -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_h.html deleted file mode 100644 index 51c72be5d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_h.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- h -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_i.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_i.html deleted file mode 100644 index 008ba14a0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_i.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- i -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_k.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_k.html deleted file mode 100644 index 4d4c3a736..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_k.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- k -

    -
  • kelvinator() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_l.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_l.html deleted file mode 100644 index c29455324..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_l.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- l -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_m.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_m.html deleted file mode 100644 index 87bee7fde..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_m.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- m -

    -
  • mark() -: IRsend -
  • -
  • markAsSent() -: IRac -
  • -
  • match() -: IRrecv -
  • -
  • matchAtLeast() -: IRrecv -
  • -
  • matchBytes() -: IRrecv -
  • -
  • matchData() -: IRrecv -
  • -
  • matchGeneric() -: IRrecv -
  • -
  • matchGenericConstBitTime() -: IRrecv -
  • -
  • matchManchester() -: IRrecv -
  • -
  • matchManchesterData() -: IRrecv -
  • -
  • matchMark() -: IRrecv -
  • -
  • matchMarkRange() -: IRrecv -
  • -
  • matchSpace() -: IRrecv -
  • -
  • matchSpaceRange() -: IRrecv -
  • -
  • midea() -: IRac -
  • -
  • minRepeats() -: IRsend -
  • -
  • mitsubishi() -: IRac -
  • -
  • mitsubishi112() -: IRac -
  • -
  • mitsubishi136() -: IRac -
  • -
  • mitsubishiHeavy152() -: IRac -
  • -
  • mitsubishiHeavy88() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_n.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_n.html deleted file mode 100644 index 7972771b1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_n.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- n -

    -
  • neoclima() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_o.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_o.html deleted file mode 100644 index b6f24d154..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_o.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_p.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_p.html deleted file mode 100644 index 4af972009..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_p.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- p -

    -
  • panasonic() -: IRac -
  • -
  • panasonic32() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_r.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_r.html deleted file mode 100644 index ba2940aba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_r.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- r -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_s.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_s.html deleted file mode 100644 index 099cdd2f2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_s.html +++ /dev/null @@ -1,1334 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- s -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_t.html deleted file mode 100644 index 685fa8b23..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_t.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- t -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_u.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_u.html deleted file mode 100644 index 9c4aeab47..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_u.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- u -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_v.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_v.html deleted file mode 100644 index 21d395927..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_v.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_w.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_w.html deleted file mode 100644 index 863296b9e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_w.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- w -

    -
  • whirlpool() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_~.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_~.html deleted file mode 100644 index be24e6f9f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_func_~.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- ~ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_g.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_g.html deleted file mode 100644 index afc8f8d9b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_g.html +++ /dev/null @@ -1,898 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- g -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_h.html deleted file mode 100644 index efd60179a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_h.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- h -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_i.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_i.html deleted file mode 100644 index 7485e5248..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_i.html +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- i -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_j.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_j.html deleted file mode 100644 index 858489b55..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_j.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- j -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_k.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_k.html deleted file mode 100644 index d234e9b83..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_k.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- k -

    -
  • kelvinator() -: IRac -
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_l.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_l.html deleted file mode 100644 index 8326dd07f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_l.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- l -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_m.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_m.html deleted file mode 100644 index f86e7b665..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_m.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- m -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_n.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_n.html deleted file mode 100644 index 937e9052b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_n.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- n -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_o.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_o.html deleted file mode 100644 index 00fe3f2ba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_o.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- o -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_p.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_p.html deleted file mode 100644 index 06823b0da..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_p.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- p -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_q.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_q.html deleted file mode 100644 index c2d2ca34d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_q.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- q -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_r.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_r.html deleted file mode 100644 index 7c183a159..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_r.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_rela.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_rela.html deleted file mode 100644 index 568f1564c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_rela.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Related Functions - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_s.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_s.html deleted file mode 100644 index 4b2f0ca94..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_s.html +++ /dev/null @@ -1,1587 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- s -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_t.html deleted file mode 100644 index d02794c5f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_t.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- t -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_u.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_u.html deleted file mode 100644 index 18b6cd1c3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_u.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- u -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_v.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_v.html deleted file mode 100644 index ad840b994..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_v.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- v -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars.html deleted file mode 100644 index 50dc9f1cc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars.html +++ /dev/null @@ -1,727 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- _ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_a.html deleted file mode 100644 index 41826cf6f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_a.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_b.html deleted file mode 100644 index 9cf291f62..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_b.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- b -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_c.html deleted file mode 100644 index 5c788084a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_c.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- c -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_d.html deleted file mode 100644 index 6cebe89fb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_d.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- d -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_e.html deleted file mode 100644 index 7cbe96d5e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_e.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_f.html deleted file mode 100644 index a9ed13d64..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_f.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_h.html deleted file mode 100644 index 04bea2a3c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_h.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- h -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_i.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_i.html deleted file mode 100644 index 1f88886f9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_i.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- i -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_j.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_j.html deleted file mode 100644 index 09465d92d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_j.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- j -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_l.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_l.html deleted file mode 100644 index 3e5e40963..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_l.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- l -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_m.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_m.html deleted file mode 100644 index 1a7e436e0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_m.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_n.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_n.html deleted file mode 100644 index f2c95d143..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_n.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- n -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_o.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_o.html deleted file mode 100644 index 22045d3da..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_o.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- o -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_p.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_p.html deleted file mode 100644 index 6d85e6a74..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_p.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- p -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_q.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_q.html deleted file mode 100644 index 3456d9de9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_q.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- q -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_r.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_r.html deleted file mode 100644 index 8ea5eef87..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_r.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_s.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_s.html deleted file mode 100644 index 90017908a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_s.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- s -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_t.html deleted file mode 100644 index 8d77e1d5b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_t.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- t -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_u.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_u.html deleted file mode 100644 index 3ac1c1162..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_u.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- u -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_v.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_v.html deleted file mode 100644 index 38974818c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_v.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- v -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_w.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_w.html deleted file mode 100644 index f874cf046..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_w.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- w -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_x.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_x.html deleted file mode 100644 index d54f1a410..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_x.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- x -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_z.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_z.html deleted file mode 100644 index de7d87278..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_vars_z.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- z -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_w.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_w.html deleted file mode 100644 index ff1ec859b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_w.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- w -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_x.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_x.html deleted file mode 100644 index bc48caafb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_x.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- x -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_z.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_z.html deleted file mode 100644 index 528b49702..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_z.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- z -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_~.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_~.html deleted file mode 100644 index dc46b16b7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/functions_~.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- ~ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals.html deleted file mode 100644 index 7ea1c71d3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- _ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_a.html deleted file mode 100644 index be95d6510..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_a.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- a -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_c.html deleted file mode 100644 index 121baa0db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_c.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- c -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_d.html deleted file mode 100644 index 34d34bc20..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_d.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- d -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_e.html deleted file mode 100644 index 2a23ab614..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_e.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- e -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_enum.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_enum.html deleted file mode 100644 index 21af6b9e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_enum.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_eval.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_eval.html deleted file mode 100644 index 40f873a52..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_eval.html +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- j -

- - -

- k -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- v -

- - -

- w -

- - -

- x -

- - -

- y -

- - -

- z -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_f.html deleted file mode 100644 index d57b47a26..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_f.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- f -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_func.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_func.html deleted file mode 100644 index 1d31640cb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_func.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- c -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- x -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_g.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_g.html deleted file mode 100644 index 27ae53537..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_g.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- g -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_h.html deleted file mode 100644 index 317031034..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_h.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- h -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_i.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_i.html deleted file mode 100644 index 4ab24d5e7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_i.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- i -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_j.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_j.html deleted file mode 100644 index 7c90ed62d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_j.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- j -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_k.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_k.html deleted file mode 100644 index eaf2f2c55..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_k.html +++ /dev/null @@ -1,6865 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- k -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_l.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_l.html deleted file mode 100644 index 7e56f59c1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_l.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- l -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_m.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_m.html deleted file mode 100644 index 6131e0af4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_m.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- m -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_n.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_n.html deleted file mode 100644 index 715ffa0f0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_n.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- n -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_p.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_p.html deleted file mode 100644 index df3e3595a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_p.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- p -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_r.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_r.html deleted file mode 100644 index 7d4e405db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_r.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- r -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_s.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_s.html deleted file mode 100644 index ac2123934..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_s.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- s -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_t.html deleted file mode 100644 index 4dc5bab0f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_t.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- t -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_type.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_type.html deleted file mode 100644 index ce5fb8cc9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_type.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_u.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_u.html deleted file mode 100644 index 860d132a7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_u.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- u -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_v.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_v.html deleted file mode 100644 index 330b3cd5e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_v.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- v -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars.html deleted file mode 100644 index 4db0b55aa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- _ -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_i.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_i.html deleted file mode 100644 index 47c235016..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_i.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- i -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_k.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_k.html deleted file mode 100644 index 8543852e0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_vars_k.html +++ /dev/null @@ -1,6832 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- k -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_w.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_w.html deleted file mode 100644 index 5a333bf99..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_w.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- w -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_x.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_x.html deleted file mode 100644 index 396164fc0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_x.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- x -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_y.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_y.html deleted file mode 100644 index f28dd18c0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_y.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- y -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_z.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_z.html deleted file mode 100644 index 3a092ec10..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/globals_z.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -IRremoteESP8266: File Members - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- z -

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.html deleted file mode 100644 index 8a04ec5bb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -IRremoteESP8266: Graph Legend - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
-
class Invisible { };
-
-
/*! Truncated class, inheritance relation is hidden */
-
class Truncated : public Invisible { };
-
-
/* Class not documented with doxygen comments */
-
class Undocumented { };
-
-
/*! Class that is inherited using public inheritance */
-
class PublicBase : public Truncated { };
-
-
/*! A template class */
-
template<class T> class Templ { };
-
-
/*! Class that is inherited using protected inheritance */
-
class ProtectedBase { };
-
-
/*! Class that is inherited using private inheritance */
-
class PrivateBase { };
-
-
/*! Class that is used by the Inherited class */
-
class Used { };
-
-
/*! Super class that inherits a number of other classes */
-
class Inherited : public PublicBase,
-
protected ProtectedBase,
-
private PrivateBase,
-
public Undocumented,
-
public Templ<int>
-
{
-
private:
-
Used *m_usedClass;
-
};
-

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.md5 deleted file mode 100644 index 8fcdccd1b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.png deleted file mode 100644 index 7e2cbcfb2..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/graph_legend.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/hierarchy.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/hierarchy.html deleted file mode 100644 index 5886d22a0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/hierarchy.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Hierarchy - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
-
-

Go to the graphical class hierarchy

-This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 CAirwellProtocolNative representation of a Airwell A/C message
 CAmcorProtocolNative representation of a Amcor A/C message
 CArgoProtocolNative representation of a Argo A/C message
 CCarrierProtocolNative representation of a Carrier A/C message
 CCoolixProtocolNative representation of a Coolix A/C message
 CCoronaProtocolNative representation of a Corona A/C message
 CCoronaSectionNative representation of a section of a Corona A/C message
 CDaikin128ProtocolNative representation of a Daikin128 A/C message
 CDaikin152ProtocolNative representation of a Daikin152 A/C message
 CDaikin160ProtocolNative representation of a Daikin160 A/C message
 CDaikin176ProtocolNative representation of a Daikin176 A/C message
 CDaikin216ProtocolNative representation of a Daikin216 A/C message
 CDaikin2ProtocolNative representation of a Daikin2 A/C message
 CDaikin64ProtocolNative representation of a Daikin64 A/C message
 CDaikinESPProtocolNative representation of a Daikin A/C message
 Cdecode_resultsResults returned from the decoder
 CDelonghiProtocolNative representation of a Delonghi A/C message
 CEcoclimProtocolNative representation of a Ecoclim A/C message
 CElectraProtocolNative representation of a Electra A/C message
 CFujitsuProtocolNative representation of a Fujitsu A/C message
 CGoodweatherProtocolNative representation of a Goodweather A/C message
 CGreeProtocolNative representation of a Gree A/C message
 CHaierProtocolNative representation of a Haier HSU07-HEA03 A/C message
 CHaierYRW02ProtocolNative representation of a Haier YRW02 A/C message
 CHitachi1ProtocolNative representation of a Hitachi 104-bit A/C message
 CHitachi424ProtocolNative representation of a Hitachi 53-byte/424-bit A/C message
 CHitachiProtocolNative representation of a Hitachi 224-bit A/C message
 CIRacA universal/common/generic interface for controling supported A/Cs
 CIRAirwellAcClass for handling detailed Airwell A/C messages
 CIRAmcorAcClass for handling detailed Amcor A/C messages
 CIRArgoACClass for handling detailed Argo A/C messages
 CIRCarrierAc64Class for handling detailed Carrier 64 bit A/C messages
 CIRCoolixACClass for handling detailed Coolix A/C messages
 CIRCoronaAcClass for handling detailed Corona A/C messages
 CIRDaikin128Class for handling detailed Daikin 128-bit A/C messages
 CIRDaikin152Class for handling detailed Daikin 152-bit A/C messages
 CIRDaikin160Class for handling detailed Daikin 160-bit A/C messages
 CIRDaikin176Class for handling detailed Daikin 176-bit A/C messages
 CIRDaikin2Class for handling detailed Daikin 312-bit A/C messages
 CIRDaikin216Class for handling detailed Daikin 216-bit A/C messages
 CIRDaikin64Class for handling detailed Daikin 64-bit A/C messages
 CIRDaikinESPClass for handling detailed Daikin 280-bit A/C messages
 CIRDelonghiAcClass for handling detailed Delonghi A/C messages
 CIREcoclimAcClass for handling detailed EcoClim A/C 56 bit messages
 CIRElectraAcClass for handling detailed Electra A/C messages
 CIRFujitsuACClass for handling detailed Fujitsu A/C messages
 CIRGoodweatherAcClass for handling detailed Goodweather A/C messages
 CIRGreeACClass for handling detailed Gree A/C messages
 CIRHaierACClass for handling detailed Haier A/C messages
 CIRHaierACYRW02Class for handling detailed Haier ACYRW02 A/C messages
 CIRHitachiAcClass for handling detailed Hitachi 224-bit A/C messages
 CIRHitachiAc1Class for handling detailed Hitachi 104-bit A/C messages
 CIRHitachiAc3Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages
 CIRHitachiAc424Class for handling detailed Hitachi 53-byte/424-bit A/C messages
 CIRKelvinatorACClass for handling detailed Kelvinator A/C messages
 CIRLgAcClass for handling detailed LG A/C messages
 CIRMideaACClass for handling detailed Midea A/C messages
 CIRMitsubishi112Class for handling detailed Mitsubishi 122-bit A/C messages
 CIRMitsubishi136Class for handling detailed Mitsubishi 136-bit A/C messages
 CIRMitsubishiACClass for handling detailed Mitsubishi 144-bit A/C messages
 CIRMitsubishiHeavy152AcClass for handling detailed Mitsubishi Heavy 152-bit A/C messages
 CIRMitsubishiHeavy88AcClass for handling detailed Mitsubishi Heavy 88-bit A/C messages
 CIRNeoclimaAcClass for handling detailed Neoclima A/C messages
 CIRPanasonicAcClass for handling detailed Panasonic A/C messages
 CIRPanasonicAc32Class for handling detailed Panasonic 32bit A/C messages
 Cirparams_tInformation for the interrupt handler
 CIRrecvClass for receiving IR messages
 CIRSamsungAcClass for handling detailed Samsung A/C messages
 CIRSanyoAcClass for handling detailed Sanyo A/C messages
 CIRsendClass for sending all basic IR protocols
 CIRSharpAcClass for handling detailed Sharp A/C messages
 CIRTcl112AcClass for handling detailed TCL A/C messages
 CIRTechnibelAcClass for handling detailed Technibel A/C messages
 CIRTecoAcClass for handling detailed Teco A/C messages
 CIRtimerThis class offers a simple counter in micro-seconds since instantiated
 CIRToshibaACClass for handling detailed Toshiba A/C messages
 CIRTranscoldAcClass for handling detailed Transcold A/C messages
 CIRTrotecESPClass for handling detailed Trotec A/C messages
 CIRTrumaAcClass for handling detailed Truma A/C messages
 CIRVestelAcClass for handling detailed Vestel A/C messages
 CIRVoltasClass for handling detailed Voltas A/C messages
 CIRWhirlpoolAcClass for handling detailed Whirlpool A/C messages
 CKelvinatorProtocolNative representation of a Kelvinator A/C message
 CLGProtocolNative representation of a LG A/C message
 CmagiquestMagiQuest packet is both Wand ID and magnitude of swish and flick
 Cmatch_result_tResults from a data match
 CMideaProtocolNative representation of a Midea A/C message
 CMitsubishi112ProtocolNative representation of a Mitsubishi 112-bit A/C message
 CMitsubishi136ProtocolNative representation of a Mitsubishi 136-bit A/C message
 CMitsubishi144ProtocolNative representation of a Mitsubishi 144-bit A/C message
 CMitsubishi152ProtocolNative representation of a Mitsubishi Heavy 152-bit A/C message
 CMitsubishi88ProtocolNative representation of a Mitsubishi Heavy 88-bit A/C message
 CNeoclimaProtocolNative representation of a Neoclima A/C message
 CPanasonicAc32ProtocolNative representation of a Panasonic 32-bit A/C message
 CSamsungProtocolNative representation of a Samsung A/C message
 CSanyoProtocolNative representation of a Sanyo A/C message
 CSharpProtocolNative representation of a Sharp A/C message
 CstdAc::state_tStructure to hold a common A/C state
 CTcl112ProtocolNative representation of a TCL 112 A/C message
 CTechnibelProtocolNative representation of a Technibel A/C message
 CTecoProtocolNative representation of a Teco A/C message
 CTimerMsThis class offers a simple counter in milli-seconds since instantiated
 CToshibaProtocolNative representation of a Toshiba A/C message
 CTranscoldProtocolNative representation of a Transcold A/C message
 CTrotecProtocolNative representation of a Trotec A/C message
 CTrumaProtocolNative representation of a Truma A/C message
 CVestelProtocolNative representation of a Vestel A/C message
 CVoltasProtocolNative representation of a Voltas A/C message
 CWhirlpoolProtocolNative representation of a Whirlpool A/C message
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h.html deleted file mode 100644 index 74c2dc9e0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/i18n.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
i18n.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h_source.html deleted file mode 100644 index d0ee17951..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/i18n_8h_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -IRremoteESP8266: src/i18n.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
i18n.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 - David Conran (@crankyoldgit)
-
2 
-
3 #ifndef I18N_H_
-
4 #define I18N_H_
-
5 
-
6 #include "IRremoteESP8266.h"
-
7 
-
8 // Load the appropriate locale header file.
-
9 #ifndef _IR_LOCALE_
-
10 #define _IR_LOCALE_ en-AU
-
11 #endif // _IR_LOCALE_
-
12 
-
13 #define ENQUOTE_(x) #x
-
14 #define ENQUOTE(x) ENQUOTE_(x)
-
15 
-
16 // Load the desired/requested locale.
-
17 #ifdef _IR_LOCALE_
-
18 #include ENQUOTE(locale/_IR_LOCALE_.h)
-
19 #endif // _IR_LOCALE_
-
20 
-
21 // Now that any specific locale has been loaded, we can safely load the defaults
-
22 // as the defaults should not override anything that has now set.
-
23 #include "locale/defaults.h"
-
24 
-
25 #endif // I18N_H_
-
- - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/index.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/index.html deleted file mode 100644 index a545d7d8d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -IRremoteESP8266: IRremoteESP8266 Library API Documentation - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
IRremoteESP8266 Library API Documentation
-
-
-

-Getting Started

-

-The basics

-

For sending messages, look at the IRsend class.

-

For receiving messages, look at the IRrecv & decode_results classes.

-

-Air Conditioners

-

For generic Air Conditioner control, look at the IRac class & the stdAc::state_t structure.

-

For detailed Air Conditioner control, you need to determine what protocol the library detects your remote/Air Conditioner to be, look into the appropriate src/ir_Protocol.[h|cpp] files and use the appropriate class object. e.g. if IRrecvDumpV2 (or better) detects the protocol as KELVINATOR, open the src/ir_Kelvinator.* files, and examine the IRKelvinatorAC class the methods available to create/decode/send KELVINATOR messages with all the abilities the library offers. You can also select it from the Classes menu above.

-

Various native constants & options for a given Protocol's class object can be found in the associated header file for that protocol.

-

-Examples

-

Most of the common uses of this library's APIs have demonstration code available under the examples directory. It ranges from trivial examples to complex real-world project code.

-

-Tuning

-

The most commonly used & needed knobs for controlling aspects of this library are available via run-time class methods or at class-object instantiation. Again, you are referred to the IRsend & IRrecv classes.

-

-Advanced

-

Certain addition constants and options are available as compile-time tweaks. You should inspect IRremoteESP8266.h, IRsend.h, & IRrecv.h for General, Sending, & Receiving tweaks respectively.

-

-Protocol timings

-

Generally you should never need to adjust the timing parameters for a given protocol or device. However, occasionally some individual devices just want to be special. If you are having problems decoding/receiving a message, look into the tolerance, kTolerance, or IRrecv::setTolerance constants/methods etc first. However, if your problems is sending, or adjusting the tolerance doesn't work you may need to tweak per-protocol timing values. These are stored as constants in the ir_ProtocolName.cpp file for the given protocol. This is typically a step of last resort.

-

-Reducing code size & flash usage.

-

You can disable most protocols by either modifying the appropriate #‍defines in IRremoteESP8266.h or passing the appropriate compile-time flags, as documented in the same file.

-

Avoid using the A/C classes, especially the IRac class as they will force the compiler to include large amounts of code you may not need.

-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.map deleted file mode 100644 index 3562f9889..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.md5 deleted file mode 100644 index ca555abe7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.md5 +++ /dev/null @@ -1 +0,0 @@ -08b3d219c2f6a526ccc8e9da13756f9f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.png deleted file mode 100644 index 0f98ed2d4..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_0.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.map deleted file mode 100644 index 5875ca1e7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.md5 deleted file mode 100644 index 7c0f95802..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.md5 +++ /dev/null @@ -1 +0,0 @@ -f231e73ea8749b5f3401520092dd59dd \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.png deleted file mode 100644 index 2fb3ea958..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_1.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.map deleted file mode 100644 index 4bd9bc4bd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.md5 deleted file mode 100644 index 10bb0c6a9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.md5 +++ /dev/null @@ -1 +0,0 @@ -1443ffa8a86638c411bb373567d8d9b5 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.png deleted file mode 100644 index dd99f7836..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_10.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.map deleted file mode 100644 index e8d71f5f5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.md5 deleted file mode 100644 index a7fd73c18..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.md5 +++ /dev/null @@ -1 +0,0 @@ -5435cee590b632668e5c31cbaf0849a9 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.png deleted file mode 100644 index 17feb0dbe..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_100.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.map deleted file mode 100644 index f78876c1f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.md5 deleted file mode 100644 index 5e87c0da5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.md5 +++ /dev/null @@ -1 +0,0 @@ -4e3d563629aab8add0e751db7f109a22 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.png deleted file mode 100644 index c156a9810..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_101.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.map deleted file mode 100644 index c59b67b6a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.md5 deleted file mode 100644 index d9e43dc43..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.md5 +++ /dev/null @@ -1 +0,0 @@ -4279ae614d5daf1b2df1142de7f8e1cc \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.png deleted file mode 100644 index a55368602..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_102.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.map deleted file mode 100644 index ec60710c3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.md5 deleted file mode 100644 index 4f121617a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.md5 +++ /dev/null @@ -1 +0,0 @@ -eac7ffc0702bf9e0b2e090c3c469f2f4 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.png deleted file mode 100644 index 45fddc83a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_103.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.map deleted file mode 100644 index 992aad00a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.md5 deleted file mode 100644 index 7aa6984ef..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.md5 +++ /dev/null @@ -1 +0,0 @@ -9d0e455e7f6d7edf8b6ae41339148d7b \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.png deleted file mode 100644 index 0d65aa7f4..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_104.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.map deleted file mode 100644 index 32b9f42d2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.md5 deleted file mode 100644 index cb5dff435..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.md5 +++ /dev/null @@ -1 +0,0 @@ -c2e5c6b0b38d4bc3059cd3c2a104bd81 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.png deleted file mode 100644 index ef7687d5d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_105.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.map deleted file mode 100644 index caa8800b2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.md5 deleted file mode 100644 index 5860b5cd3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.md5 +++ /dev/null @@ -1 +0,0 @@ -93d2b9e1de5eb523c98db994a68fcc67 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.png deleted file mode 100644 index 093f23364..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_106.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.map deleted file mode 100644 index 60c1980da..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.md5 deleted file mode 100644 index 1b76dc054..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.md5 +++ /dev/null @@ -1 +0,0 @@ -e48e316b43739879a767065faf6a63ee \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.png deleted file mode 100644 index 6707e3c1a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_107.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.map deleted file mode 100644 index 90da31210..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.md5 deleted file mode 100644 index 4a04a4a8b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.md5 +++ /dev/null @@ -1 +0,0 @@ -f8cc7d2dd25fe03b7ca298ea593ce75f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.png deleted file mode 100644 index ba1ba7313..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_108.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.map deleted file mode 100644 index b88e59c09..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.md5 deleted file mode 100644 index 3bb1f6e3c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.md5 +++ /dev/null @@ -1 +0,0 @@ -5a8cb00ac6913c6b2bf4dcace84f282f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.png deleted file mode 100644 index 7f322191d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_11.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.map deleted file mode 100644 index 528cf89de..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.md5 deleted file mode 100644 index 01a84b6e9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.md5 +++ /dev/null @@ -1 +0,0 @@ -96d47ea615332483346f4d50f642caf0 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.png deleted file mode 100644 index 32d5fe2ba..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_12.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.map deleted file mode 100644 index 88ad5654c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.md5 deleted file mode 100644 index c4ce13cce..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.md5 +++ /dev/null @@ -1 +0,0 @@ -42d3969ba652f4cd1a72bee7b8a3c98e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.png deleted file mode 100644 index 1ca791897..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_13.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.map deleted file mode 100644 index c543b85db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.md5 deleted file mode 100644 index 8b53070b2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.md5 +++ /dev/null @@ -1 +0,0 @@ -b7eb3cb323f996dac6fcd5706b5a9587 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.png deleted file mode 100644 index d27b8e3fb..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_14.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.map deleted file mode 100644 index a8b60bc08..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.md5 deleted file mode 100644 index 47dabebf8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.md5 +++ /dev/null @@ -1 +0,0 @@ -a846ea81466572d0dcd38c89e164f553 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.png deleted file mode 100644 index 9b6798ac0..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_15.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.map deleted file mode 100644 index 1692f1189..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.md5 deleted file mode 100644 index 945743d74..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.md5 +++ /dev/null @@ -1 +0,0 @@ -c1a6de6c9e0d9788bfe34a496a4a1827 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.png deleted file mode 100644 index 2fabdd5f5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_16.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.map deleted file mode 100644 index e3ce35cfa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.md5 deleted file mode 100644 index 6e898a3db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.md5 +++ /dev/null @@ -1 +0,0 @@ -9cbb83e5d913973eb43842ac722de100 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.png deleted file mode 100644 index b224ca8a1..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_17.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.map deleted file mode 100644 index 57b64dfcb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.md5 deleted file mode 100644 index 72726331a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.md5 +++ /dev/null @@ -1 +0,0 @@ -0509044f5baf3f180b4769fbbf68fb26 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.png deleted file mode 100644 index 3dbfac5db..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_18.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.map deleted file mode 100644 index 27eec692a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.md5 deleted file mode 100644 index e1f103666..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.md5 +++ /dev/null @@ -1 +0,0 @@ -bfdcb2b21586d29b7d0907a4bb2266ce \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.png deleted file mode 100644 index d1d9d5bae..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_19.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.map deleted file mode 100644 index 19157ec73..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.md5 deleted file mode 100644 index 09525b794..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.md5 +++ /dev/null @@ -1 +0,0 @@ -a95b312c6dcec22399c1450bec9b0371 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.png deleted file mode 100644 index af90c46d6..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_2.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.map deleted file mode 100644 index cb33a90b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.md5 deleted file mode 100644 index 628d9e1fe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.md5 +++ /dev/null @@ -1 +0,0 @@ -3911cffaa743ee4ba03c445bf25085a8 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.png deleted file mode 100644 index 8f35a5b51..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_20.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.map deleted file mode 100644 index 50c90ebcf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.md5 deleted file mode 100644 index eb4216782..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.md5 +++ /dev/null @@ -1 +0,0 @@ -1fcab742ad9d30b6b9d4c174a08118a8 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.png deleted file mode 100644 index f3c3c409d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_21.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.map deleted file mode 100644 index 6776cbd21..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.md5 deleted file mode 100644 index 12888e466..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.md5 +++ /dev/null @@ -1 +0,0 @@ -21b7f92aebf6ca50f077df2432dba230 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.png deleted file mode 100644 index 26e16edaa..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_22.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.map deleted file mode 100644 index af8563dd4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.md5 deleted file mode 100644 index 7ecf2c322..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.md5 +++ /dev/null @@ -1 +0,0 @@ -bb38ba38db091ea3fc28c7aa400de93a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.png deleted file mode 100644 index cbb6fdf51..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_23.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.map deleted file mode 100644 index 3645784fa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.md5 deleted file mode 100644 index e3456a566..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.md5 +++ /dev/null @@ -1 +0,0 @@ -83ea42707e2ee77465dee4ea484af824 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.png deleted file mode 100644 index 0fcecea60..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_24.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.map deleted file mode 100644 index 60776715b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.md5 deleted file mode 100644 index 460758cb6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.md5 +++ /dev/null @@ -1 +0,0 @@ -837256640d3f3621ef27c275e4df7d15 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.png deleted file mode 100644 index 9a44d5727..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_25.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.map deleted file mode 100644 index 824f2ba18..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.md5 deleted file mode 100644 index 61a310dc0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.md5 +++ /dev/null @@ -1 +0,0 @@ -1d1626b9f12e6b834949d12f356ffcb5 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.png deleted file mode 100644 index 2488a9b22..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_26.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.map deleted file mode 100644 index 18d72e0dc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.md5 deleted file mode 100644 index 0d582a4be..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.md5 +++ /dev/null @@ -1 +0,0 @@ -91b56b36df4d5e06f27aa19a6435eaf2 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.png deleted file mode 100644 index 559fc0217..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_27.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.map deleted file mode 100644 index b629dbac8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.md5 deleted file mode 100644 index 8e722ece9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.md5 +++ /dev/null @@ -1 +0,0 @@ -b0065efa5bef64d3e2da91bb9ee1e68d \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.png deleted file mode 100644 index 030bb5c2b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_28.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.map deleted file mode 100644 index 59f2bf9e0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.md5 deleted file mode 100644 index 7f14e3836..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.md5 +++ /dev/null @@ -1 +0,0 @@ -fd77e92eb539b07b298ba28c872ed33a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.png deleted file mode 100644 index f6da0e6ff..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_29.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.map deleted file mode 100644 index 943f9a482..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.md5 deleted file mode 100644 index bd432404d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.md5 +++ /dev/null @@ -1 +0,0 @@ -da886ab7ca91beae36baa3524446269e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.png deleted file mode 100644 index 574f96bfb..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_3.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.map deleted file mode 100644 index 769988ee6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.md5 deleted file mode 100644 index a26a3b99a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.md5 +++ /dev/null @@ -1 +0,0 @@ -c57cc0030c7d3a9e44b4f20708a8d83f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.png deleted file mode 100644 index e44e05dd8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_30.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.map deleted file mode 100644 index 26c2153e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.md5 deleted file mode 100644 index 07028de7e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.md5 +++ /dev/null @@ -1 +0,0 @@ -d0bba657e71229bb0975d1d5e96b55e1 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.png deleted file mode 100644 index ed97ecbf8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_31.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.map deleted file mode 100644 index 09cc591e5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.md5 deleted file mode 100644 index 6010a609d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.md5 +++ /dev/null @@ -1 +0,0 @@ -bc950b2a380edb2222e6039af29b1619 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.png deleted file mode 100644 index 716877088..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_32.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.map deleted file mode 100644 index 078ab7b14..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.md5 deleted file mode 100644 index 06179feb6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.md5 +++ /dev/null @@ -1 +0,0 @@ -b8916d3b51e3fb200c11a55d0ce781f3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.png deleted file mode 100644 index ac6ff436a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_33.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.map deleted file mode 100644 index efb9e5260..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.md5 deleted file mode 100644 index 9aee943e6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.md5 +++ /dev/null @@ -1 +0,0 @@ -6b967bafafc5ee48cdee425b2d760352 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.png deleted file mode 100644 index cbf8e53c5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_34.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.map deleted file mode 100644 index 62ae05dc9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.md5 deleted file mode 100644 index d2ddcd27c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.md5 +++ /dev/null @@ -1 +0,0 @@ -e31d247ca830d0fbc9b398310b889137 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.png deleted file mode 100644 index f2784a51c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_35.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.map deleted file mode 100644 index 8eb29e24b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.md5 deleted file mode 100644 index cb1829bbb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.md5 +++ /dev/null @@ -1 +0,0 @@ -e8d46fafad2734ff1ba6435e75760054 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.png deleted file mode 100644 index 686145aac..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_36.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.map deleted file mode 100644 index 3c6cfb9c1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.md5 deleted file mode 100644 index 18f33803c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.md5 +++ /dev/null @@ -1 +0,0 @@ -ef00148bc0f51868126f49db7c64045c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.png deleted file mode 100644 index 1321a6dfd..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_37.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.map deleted file mode 100644 index 2e4674a86..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.md5 deleted file mode 100644 index d0b698b71..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.md5 +++ /dev/null @@ -1 +0,0 @@ -e335bea658051c107eec6a04c15ecf07 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.png deleted file mode 100644 index 6fe436b03..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_38.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.map deleted file mode 100644 index 279bf8c7d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.md5 deleted file mode 100644 index 965dce765..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.md5 +++ /dev/null @@ -1 +0,0 @@ -4d7d1c5757d6d8c2ba1dee85111694e8 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.png deleted file mode 100644 index e8860a43a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_39.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.map deleted file mode 100644 index 55b1c5d74..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.md5 deleted file mode 100644 index f126541ae..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.md5 +++ /dev/null @@ -1 +0,0 @@ -ce6e8a5067595ae5d9bb4708d6e7fd5a \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.png deleted file mode 100644 index 2071e5c9d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_4.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.map deleted file mode 100644 index 89e9d4dd4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.md5 deleted file mode 100644 index ece2dd31c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.md5 +++ /dev/null @@ -1 +0,0 @@ -bac1b057abc6acdf006c520a2648695e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.png deleted file mode 100644 index 29dd07a68..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_40.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.map deleted file mode 100644 index 72e272f5c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.md5 deleted file mode 100644 index 3857a757f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.md5 +++ /dev/null @@ -1 +0,0 @@ -beb2e4a39c2932d475766be916f606b6 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.png deleted file mode 100644 index 28f2cbc5c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_41.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.map deleted file mode 100644 index 8cf71992a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.md5 deleted file mode 100644 index 02c096729..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.md5 +++ /dev/null @@ -1 +0,0 @@ -82db646c1e50878e4bc1d2d8e42f9084 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.png deleted file mode 100644 index d952333e9..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_42.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.map deleted file mode 100644 index 247792f57..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.md5 deleted file mode 100644 index d865abb69..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.md5 +++ /dev/null @@ -1 +0,0 @@ -8d953ca1016549e8f50e9e4c2ce6af76 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.png deleted file mode 100644 index 343332d62..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_43.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.map deleted file mode 100644 index 79bd99c23..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.md5 deleted file mode 100644 index c95f62f61..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.md5 +++ /dev/null @@ -1 +0,0 @@ -8f9d660abbc70be4c1cf621adf15df03 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.png deleted file mode 100644 index e55a8da53..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_44.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.map deleted file mode 100644 index a68b62f6b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.md5 deleted file mode 100644 index e94efc85c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.md5 +++ /dev/null @@ -1 +0,0 @@ -8463fec8e273d2b003400f5fc52905d2 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.png deleted file mode 100644 index 24448b28b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_45.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.map deleted file mode 100644 index e933c51b4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.md5 deleted file mode 100644 index e976aad9e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.md5 +++ /dev/null @@ -1 +0,0 @@ -494470899dc7bc1f09771a91824eb25c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.png deleted file mode 100644 index aee74feca..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_46.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.map deleted file mode 100644 index eabd6a84c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.md5 deleted file mode 100644 index 62bb81d6a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.md5 +++ /dev/null @@ -1 +0,0 @@ -ef1756185927c9dc031ac38fa0bd7314 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.png deleted file mode 100644 index d0bd0654f..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_47.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.map deleted file mode 100644 index 4c3c9cad8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.md5 deleted file mode 100644 index 43f0e4cbd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.md5 +++ /dev/null @@ -1 +0,0 @@ -b7a5f99a38a961494782496866818bd7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.png deleted file mode 100644 index fa378ff65..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_48.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.map deleted file mode 100644 index 4a6d7147d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.md5 deleted file mode 100644 index 1e63f137d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.md5 +++ /dev/null @@ -1 +0,0 @@ -1a4371fa075bf61e18fb4a59f6c1ee8b \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.png deleted file mode 100644 index 797a53002..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_49.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.map deleted file mode 100644 index d1e09d698..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.md5 deleted file mode 100644 index 7ad7b69a5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.md5 +++ /dev/null @@ -1 +0,0 @@ -66a9f12a48f8cf7cd50116ffdc0a2bf3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.png deleted file mode 100644 index 767811823..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_5.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.map deleted file mode 100644 index 7ea07790c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.md5 deleted file mode 100644 index 865f0a8cc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.md5 +++ /dev/null @@ -1 +0,0 @@ -8fe022190fb8b4af703989db74b3df09 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.png deleted file mode 100644 index 6d3377afe..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_50.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.map deleted file mode 100644 index 5c7828789..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.md5 deleted file mode 100644 index 84388b9e5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.md5 +++ /dev/null @@ -1 +0,0 @@ -1cc4c4dcff122c327c69c3c13dedc3fa \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.png deleted file mode 100644 index 9dd34695a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_51.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.map deleted file mode 100644 index efdf67e75..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.md5 deleted file mode 100644 index 705c5ba93..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.md5 +++ /dev/null @@ -1 +0,0 @@ -8cd321ec10c446c399675698b2c22573 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.png deleted file mode 100644 index 407da8542..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_52.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.map deleted file mode 100644 index d41d30f1c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.md5 deleted file mode 100644 index 880e7c145..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.md5 +++ /dev/null @@ -1 +0,0 @@ -a08686bcc5f729a82c296a6cc288080f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.png deleted file mode 100644 index bc365a65d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_53.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.map deleted file mode 100644 index ae7dc8f2e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.md5 deleted file mode 100644 index 3ee74b3a2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.md5 +++ /dev/null @@ -1 +0,0 @@ -f936b6c8bdc58c028bb8933191b34c6c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.png deleted file mode 100644 index 5db982d56..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_54.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.map deleted file mode 100644 index 975bb02bf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.md5 deleted file mode 100644 index 04d962ad6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.md5 +++ /dev/null @@ -1 +0,0 @@ -87662e5ac3f382c4e9890e2f0c246809 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.png deleted file mode 100644 index 1ff0ee123..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_55.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.map deleted file mode 100644 index e760517d6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.md5 deleted file mode 100644 index 1c90a6e8a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.md5 +++ /dev/null @@ -1 +0,0 @@ -ba89299cb349c224517905a60a70be44 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.png deleted file mode 100644 index d6dfbd599..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_56.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.map deleted file mode 100644 index e5715a354..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.md5 deleted file mode 100644 index 1d6f49c28..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.md5 +++ /dev/null @@ -1 +0,0 @@ -eb71d536aec5ae0d21d8a53ba95024dc \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.png deleted file mode 100644 index e0006ac9d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_57.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.map deleted file mode 100644 index 8756dabf2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.md5 deleted file mode 100644 index cc64f617c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.md5 +++ /dev/null @@ -1 +0,0 @@ -388b2bb7b074fbc6b23cb65b17a2d52c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.png deleted file mode 100644 index 00d80fd2a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_58.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.map deleted file mode 100644 index e0dc0d821..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.md5 deleted file mode 100644 index d85813f81..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.md5 +++ /dev/null @@ -1 +0,0 @@ -9653a701b37038caec48b8234f5297bb \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.png deleted file mode 100644 index 9d2c7f009..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_59.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.map deleted file mode 100644 index 1b4f567d6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.md5 deleted file mode 100644 index 25a6cd88f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.md5 +++ /dev/null @@ -1 +0,0 @@ -d1acd75cd54185c59331a5eff2eabf51 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.png deleted file mode 100644 index 034f6fa4e..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_6.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.map deleted file mode 100644 index 5e69d0b66..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.md5 deleted file mode 100644 index f6848c29b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.md5 +++ /dev/null @@ -1 +0,0 @@ -a45b337701fd72c704017f44bd397e8d \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.png deleted file mode 100644 index ef8c7f7b0..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_60.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.map deleted file mode 100644 index 55c3c5c8a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.md5 deleted file mode 100644 index 851893b9d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.md5 +++ /dev/null @@ -1 +0,0 @@ -189c2435c324f1057aaf97e832f8d5e8 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.png deleted file mode 100644 index d094da528..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_61.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.map deleted file mode 100644 index 2668a5553..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.md5 deleted file mode 100644 index 4eda18e00..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.md5 +++ /dev/null @@ -1 +0,0 @@ -db104ffd0bed1c2b2b66be9a2d94884c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.png deleted file mode 100644 index 842798e42..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_62.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.map deleted file mode 100644 index acbf5c9c5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.md5 deleted file mode 100644 index 5af67464a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.md5 +++ /dev/null @@ -1 +0,0 @@ -47e03bef0106d920f6df1a4650c42161 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.png deleted file mode 100644 index 356ddb54b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_63.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.map deleted file mode 100644 index 8234a7463..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.md5 deleted file mode 100644 index fb2602ca0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.md5 +++ /dev/null @@ -1 +0,0 @@ -a933b42bdde6be117985126166b7d49e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.png deleted file mode 100644 index 1c2d7082b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_64.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.map deleted file mode 100644 index e7394ad03..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.md5 deleted file mode 100644 index 629a81748..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.md5 +++ /dev/null @@ -1 +0,0 @@ -f161f3f640d27ec87610fe7e0258daa2 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.png deleted file mode 100644 index 14d655e7b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_65.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.map deleted file mode 100644 index d72919bc5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.md5 deleted file mode 100644 index 6aec8ecfb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.md5 +++ /dev/null @@ -1 +0,0 @@ -2ba122d741860d8a73f208c9d30316bb \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.png deleted file mode 100644 index 5c3154f57..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_66.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.map deleted file mode 100644 index 0bef81fa9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.md5 deleted file mode 100644 index dbc1c97ac..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.md5 +++ /dev/null @@ -1 +0,0 @@ -094d47bf89b4692d513b3c18447ea38c \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.png deleted file mode 100644 index 58a4979bb..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_67.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.map deleted file mode 100644 index 8ef89909b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.md5 deleted file mode 100644 index 981db6a0f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.md5 +++ /dev/null @@ -1 +0,0 @@ -1128a9ede24483b544d298f3c8250127 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.png deleted file mode 100644 index c395848de..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_68.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.map deleted file mode 100644 index 2416b8ea9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.md5 deleted file mode 100644 index 569a1d5be..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.md5 +++ /dev/null @@ -1 +0,0 @@ -091acded027244d4f3129e0f10946f38 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.png deleted file mode 100644 index c39529cd3..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_69.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.map deleted file mode 100644 index ca4f43483..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.md5 deleted file mode 100644 index 037eb16f9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.md5 +++ /dev/null @@ -1 +0,0 @@ -36f5f59f4231d6f119c0c9c728ed536f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.png deleted file mode 100644 index 1c1b2b817..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_7.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.map deleted file mode 100644 index 548a598d9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.md5 deleted file mode 100644 index 655ca8cf2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.md5 +++ /dev/null @@ -1 +0,0 @@ -6be102575488e73fd84b8d956f0802b7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.png deleted file mode 100644 index 8021f0771..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_70.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.map deleted file mode 100644 index 567ca90a3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.md5 deleted file mode 100644 index a60a6f7ec..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.md5 +++ /dev/null @@ -1 +0,0 @@ -513e53cdbd67e1c3be296e616b5088fe \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.png deleted file mode 100644 index 0b8afa3a5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_71.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.map deleted file mode 100644 index 6ae9599f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.md5 deleted file mode 100644 index f0a776686..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.md5 +++ /dev/null @@ -1 +0,0 @@ -8471ff9724fd94eebfb75bb00740fff9 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.png deleted file mode 100644 index cf3513fb7..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_72.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.map deleted file mode 100644 index f53df572a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.md5 deleted file mode 100644 index 8d243e0ac..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.md5 +++ /dev/null @@ -1 +0,0 @@ -8496a1131f5933bedde7a327a5d4457d \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.png deleted file mode 100644 index 437f5dcc4..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_73.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.map deleted file mode 100644 index 1e5460815..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.md5 deleted file mode 100644 index 94cb1522b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.md5 +++ /dev/null @@ -1 +0,0 @@ -a935188f62a719f63a835716ebeb0681 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.png deleted file mode 100644 index c3582874c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_74.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.map deleted file mode 100644 index 543dea86a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.md5 deleted file mode 100644 index 280ca8256..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.md5 +++ /dev/null @@ -1 +0,0 @@ -0bd47951338d799baa7faad737d93c2f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.png deleted file mode 100644 index aa25f7705..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_75.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.map deleted file mode 100644 index e6b4d567f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.md5 deleted file mode 100644 index d0ab420f8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.md5 +++ /dev/null @@ -1 +0,0 @@ -348277614e9120585fe32ac0d7a59eb3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.png deleted file mode 100644 index 41ba00ce8..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_76.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.map deleted file mode 100644 index 73d6c2f9d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.md5 deleted file mode 100644 index bf09ae4c3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.md5 +++ /dev/null @@ -1 +0,0 @@ -e2cd65da5815253bc9bf312036b6aaa3 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.png deleted file mode 100644 index e34bb58b3..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_77.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.map deleted file mode 100644 index 0684416cd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.md5 deleted file mode 100644 index f6573b988..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.md5 +++ /dev/null @@ -1 +0,0 @@ -f02ee702180abfea6eff7f51f30f20d5 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.png deleted file mode 100644 index f59f15ed4..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_78.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.map deleted file mode 100644 index 93c7e61e4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.md5 deleted file mode 100644 index efe4879d6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.md5 +++ /dev/null @@ -1 +0,0 @@ -40c25360d6e911f460499817a1f66d2f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.png deleted file mode 100644 index ff087624b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_79.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.map deleted file mode 100644 index cdf33fab1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.md5 deleted file mode 100644 index 1e7de2378..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.md5 +++ /dev/null @@ -1 +0,0 @@ -2ca776d3230d9f626fca801bc9e3db7d \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.png deleted file mode 100644 index 7a2bdf498..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_8.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.map deleted file mode 100644 index 1b2f67bc4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.md5 deleted file mode 100644 index 215670534..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.md5 +++ /dev/null @@ -1 +0,0 @@ -2bde18bd04140ab070f8debabb4e2b8e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.png deleted file mode 100644 index 81272ca18..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_80.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.map deleted file mode 100644 index acdbbcaac..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.md5 deleted file mode 100644 index a3fc301c1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.md5 +++ /dev/null @@ -1 +0,0 @@ -8e6e75ba5587c932001eae5a688a6d27 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.png deleted file mode 100644 index 7b3fc9762..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_81.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.map deleted file mode 100644 index 31e72e9b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.md5 deleted file mode 100644 index aa1f07c9d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.md5 +++ /dev/null @@ -1 +0,0 @@ -4910208aa4e58ace1f638c804fca1109 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.png deleted file mode 100644 index 76802d754..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_82.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.map deleted file mode 100644 index e9ca9b6de..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.md5 deleted file mode 100644 index 8f50d4ffc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.md5 +++ /dev/null @@ -1 +0,0 @@ -9e6ad1d1f87ae3e82ab995a9b0530533 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.png deleted file mode 100644 index 61bfe8096..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_83.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.map deleted file mode 100644 index 6206c6e84..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.md5 deleted file mode 100644 index 527fc865e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.md5 +++ /dev/null @@ -1 +0,0 @@ -912bf27b3c1ff508088dbbabcad26cef \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.png deleted file mode 100644 index 6d77adeec..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_84.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.map deleted file mode 100644 index 28a530cd0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.md5 deleted file mode 100644 index 1371e210d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.md5 +++ /dev/null @@ -1 +0,0 @@ -8d39cd46dd30d6c731fd7374f101062f \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.png deleted file mode 100644 index 97cbab8ac..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_85.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.map deleted file mode 100644 index cca42d6a3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.md5 deleted file mode 100644 index d5f810c98..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.md5 +++ /dev/null @@ -1 +0,0 @@ -182fdcceaf68488f5507d2f9988152da \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.png deleted file mode 100644 index 13cbf797a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_86.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.map deleted file mode 100644 index ab92f15ad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.md5 deleted file mode 100644 index f457cb29d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.md5 +++ /dev/null @@ -1 +0,0 @@ -153e26dec4d089fe61dc7f090513c4c9 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.png deleted file mode 100644 index 0b0656311..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_87.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.map deleted file mode 100644 index 5fcd6daf7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.md5 deleted file mode 100644 index 0e138628f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.md5 +++ /dev/null @@ -1 +0,0 @@ -c599f0a41b5e989991bace1df6566bc9 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.png deleted file mode 100644 index 506149eec..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_88.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.map deleted file mode 100644 index aeea0b1c8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.md5 deleted file mode 100644 index 6e6eb02c9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.md5 +++ /dev/null @@ -1 +0,0 @@ -bb0860324defdd3c199d2605dffd3dea \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.png deleted file mode 100644 index 29a7f985a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_89.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.map deleted file mode 100644 index 5ecb50e78..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.md5 deleted file mode 100644 index 7c6e49d26..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.md5 +++ /dev/null @@ -1 +0,0 @@ -8e8aa1e4d1f99f1b7b485f101810d868 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.png deleted file mode 100644 index d14941313..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_9.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.map deleted file mode 100644 index d66dce62e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.md5 deleted file mode 100644 index e082e4652..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.md5 +++ /dev/null @@ -1 +0,0 @@ -7bdf818ecf54123bfc6d5e190dfb110b \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.png deleted file mode 100644 index c1c1184a3..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_90.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.map deleted file mode 100644 index 32e1a1706..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.md5 deleted file mode 100644 index 7dc006e11..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.md5 +++ /dev/null @@ -1 +0,0 @@ -a505e7f3a903816924fe67a4dfdb1d83 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.png deleted file mode 100644 index 311218348..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_91.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.map deleted file mode 100644 index c4d102c45..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.md5 deleted file mode 100644 index d7cc2880d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.md5 +++ /dev/null @@ -1 +0,0 @@ -50d913fa42aa3a270fa531be27c6d9e7 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.png deleted file mode 100644 index a70fc3a27..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_92.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.map deleted file mode 100644 index 533a66ce3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.md5 deleted file mode 100644 index 0df68f458..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.md5 +++ /dev/null @@ -1 +0,0 @@ -c46308bc905d013a43886037b1dfc5ef \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.png deleted file mode 100644 index 2bb74dcfd..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_93.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.map deleted file mode 100644 index 6952c5799..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.md5 deleted file mode 100644 index 8ff77f63b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.md5 +++ /dev/null @@ -1 +0,0 @@ -b1b834fb334b5d9cab86238a149def7d \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.png deleted file mode 100644 index e72427254..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_94.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.map deleted file mode 100644 index 5f72a83ce..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.md5 deleted file mode 100644 index 3f5947724..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.md5 +++ /dev/null @@ -1 +0,0 @@ -1cd8b2819fa996d3eee012c4f24f4015 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.png deleted file mode 100644 index d1b63c50d..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_95.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.map deleted file mode 100644 index a44385de0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.md5 deleted file mode 100644 index 6d52458cf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.md5 +++ /dev/null @@ -1 +0,0 @@ -af127f8efd7b9214f504e0a64933888e \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.png deleted file mode 100644 index cd719b8bc..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_96.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.map deleted file mode 100644 index f49a88956..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.md5 deleted file mode 100644 index 30529d258..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.md5 +++ /dev/null @@ -1 +0,0 @@ -f1bcb75b933276ee5fde30f34c416529 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.png deleted file mode 100644 index 6d81796fb..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_97.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.map deleted file mode 100644 index 05d1850f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.md5 deleted file mode 100644 index d090ce36c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.md5 +++ /dev/null @@ -1 +0,0 @@ -65cf9fd1bd6832a3b8f13fe501621888 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.png deleted file mode 100644 index f9d1bb787..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_98.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.map deleted file mode 100644 index f80364c79..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.md5 deleted file mode 100644 index 58bb4bbf6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.md5 +++ /dev/null @@ -1 +0,0 @@ -d26a24d9b08c03f79c3c9e4467e5c756 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.png deleted file mode 100644 index 76dad197f..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherit_graph_99.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherits.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherits.html deleted file mode 100644 index e760ceef7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/inherits.html +++ /dev/null @@ -1,626 +0,0 @@ - - - - - - - -IRremoteESP8266: Class Hierarchy - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8cpp.html deleted file mode 100644 index baf4b7576..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8cpp.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Airwell.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Airwell.cpp File Reference
-
-
- -

Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol. -More...

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

-Variables

const uint8_t kAirwellOverhead = 4
 
const uint16_t kAirwellHalfClockPeriod = 950
 
const uint16_t kAirwellHdrMark = 3 * kAirwellHalfClockPeriod
 
const uint16_t kAirwellHdrSpace = 3 * kAirwellHalfClockPeriod
 
const uint16_t kAirwellFooterMark = 5 * kAirwellHalfClockPeriod
 
-

Detailed Description

-

Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.

-

Variable Documentation

- -

◆ kAirwellFooterMark

- -
-
- - - - -
const uint16_t kAirwellFooterMark = 5 * kAirwellHalfClockPeriod
-
- -
-
- -

◆ kAirwellHalfClockPeriod

- -
-
- - - - -
const uint16_t kAirwellHalfClockPeriod = 950
-
- -
-
- -

◆ kAirwellHdrMark

- -
-
- - - - -
const uint16_t kAirwellHdrMark = 3 * kAirwellHalfClockPeriod
-
- -
-
- -

◆ kAirwellHdrSpace

- -
-
- - - - -
const uint16_t kAirwellHdrSpace = 3 * kAirwellHalfClockPeriod
-
- -
-
- -

◆ kAirwellOverhead

- -
-
- - - - -
const uint8_t kAirwellOverhead = 4
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h.html deleted file mode 100644 index d3157eb98..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Airwell.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Airwell.h File Reference
-
-
- -

Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  AirwellProtocol
 Native representation of a Airwell A/C message. More...
 
class  IRAirwellAc
 Class for handling detailed Airwell A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint64_t kAirwellKnownGoodState = 0x140500002
 
const uint8_t kAirwellMinTemp = 16
 
const uint8_t kAirwellMaxTemp = 30
 
const uint8_t kAirwellFanLow = 0
 
const uint8_t kAirwellFanMedium = 1
 
const uint8_t kAirwellFanHigh = 2
 
const uint8_t kAirwellFanAuto = 3
 
const uint8_t kAirwellCool = 1
 
const uint8_t kAirwellHeat = 2
 
const uint8_t kAirwellAuto = 3
 
const uint8_t kAirwellDry = 4
 
const uint8_t kAirwellFan = 5
 
-

Detailed Description

-

Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.

-

Variable Documentation

- -

◆ kAirwellAuto

- -
-
- - - - -
const uint8_t kAirwellAuto = 3
-
- -
-
- -

◆ kAirwellCool

- -
-
- - - - -
const uint8_t kAirwellCool = 1
-
- -
-
- -

◆ kAirwellDry

- -
-
- - - - -
const uint8_t kAirwellDry = 4
-
- -
-
- -

◆ kAirwellFan

- -
-
- - - - -
const uint8_t kAirwellFan = 5
-
- -
-
- -

◆ kAirwellFanAuto

- -
-
- - - - -
const uint8_t kAirwellFanAuto = 3
-
- -
-
- -

◆ kAirwellFanHigh

- -
-
- - - - -
const uint8_t kAirwellFanHigh = 2
-
- -
-
- -

◆ kAirwellFanLow

- -
-
- - - - -
const uint8_t kAirwellFanLow = 0
-
- -
-
- -

◆ kAirwellFanMedium

- -
-
- - - - -
const uint8_t kAirwellFanMedium = 1
-
- -
-
- -

◆ kAirwellHeat

- -
-
- - - - -
const uint8_t kAirwellHeat = 2
-
- -
-
- -

◆ kAirwellKnownGoodState

- -
-
- - - - -
const uint64_t kAirwellKnownGoodState = 0x140500002
-
- -
-
- -

◆ kAirwellMaxTemp

- -
-
- - - - -
const uint8_t kAirwellMaxTemp = 30
-
- -
-
- -

◆ kAirwellMinTemp

- -
-
- - - - -
const uint8_t kAirwellMinTemp = 16
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h_source.html deleted file mode 100644 index 7e054a0df..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Airwell_8h_source.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Airwell.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Airwell.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 David Conran
-
2 
-
6 
-
7 // Supports:
-
8 // Brand: Airwell, Model: RC08W remote
-
9 // Brand: Airwell, Model: RC04 remote
-
10 // Brand: Airwell, Model: DLS 21 DCI R410 AW A/C
-
11 
-
12 #ifndef IR_AIRWELL_H_
-
13 #define IR_AIRWELL_H_
-
14 
-
15 #define __STDC_LIMIT_MACROS
-
16 #include <stdint.h>
-
17 #ifndef UNIT_TEST
-
18 #include <Arduino.h>
-
19 #endif
-
20 #include "IRremoteESP8266.h"
-
21 #include "IRsend.h"
-
22 #ifdef UNIT_TEST
-
23 #include "IRsend_test.h"
-
24 #endif
-
25 
- -
28  uint64_t raw; // The state of the IR remote in native IR code form.
-
29  struct {
-
30  uint64_t :19;
-
31  uint64_t Temp :4;
-
32  uint64_t :5;
-
33  uint64_t Fan :2;
-
34  uint64_t Mode :3;
-
35  uint64_t PowerToggle:1;
-
36  uint64_t :0;
-
37  };
-
38 };
-
39 
-
40 // Constants
-
41 const uint64_t kAirwellKnownGoodState = 0x140500002; // Mode Fan, Speed 1, 25C
-
42 // Temperature
-
43 const uint8_t kAirwellMinTemp = 16; // Celsius
-
44 const uint8_t kAirwellMaxTemp = 30; // Celsius
-
45 // Fan
-
46 const uint8_t kAirwellFanLow = 0; // 0b00
-
47 const uint8_t kAirwellFanMedium = 1; // 0b01
-
48 const uint8_t kAirwellFanHigh = 2; // 0b10
-
49 const uint8_t kAirwellFanAuto = 3; // 0b11
-
50 // Modes
-
51 const uint8_t kAirwellCool = 1; // 0b001
-
52 const uint8_t kAirwellHeat = 2; // 0b010
-
53 const uint8_t kAirwellAuto = 3; // 0b011
-
54 const uint8_t kAirwellDry = 4; // 0b100
-
55 const uint8_t kAirwellFan = 5; // 0b101
-
56 
-
57 
-
58 // Classes
-
60 class IRAirwellAc {
-
61  public:
-
62  explicit IRAirwellAc(const uint16_t pin, const bool inverted = false,
-
63  const bool use_modulation = true);
-
64  void stateReset();
-
65 #if SEND_AIRWELL
-
66  void send(const uint16_t repeat = kAirwellMinRepeats);
-
71  int8_t calibrate(void) { return _irsend.calibrate(); }
-
72 #endif // SEND_AIRWELL
-
73  void begin();
-
74  void setPowerToggle(const bool on);
-
75  bool getPowerToggle() const;
-
76  void setTemp(const uint8_t temp);
-
77  uint8_t getTemp() const;
-
78  void setFan(const uint8_t speed);
-
79  uint8_t getFan() const;
-
80  void setMode(const uint8_t mode);
-
81  uint8_t getMode() const;
-
82  uint64_t getRaw() const;
-
83  void setRaw(const uint64_t state);
-
84  static uint8_t convertMode(const stdAc::opmode_t mode);
-
85  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
86  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
87  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
88  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
89  String toString() const;
-
90 #ifndef UNIT_TEST
-
91 
-
92  private:
- -
94 #else
-
95  IRsendTest _irsend;
-
97 #endif
- -
100 };
-
101 #endif // IR_AIRWELL_H_
-
-
const uint16_t kAirwellMinRepeats
Definition: IRremoteESP8266.h:911
-
const uint8_t kAirwellFanHigh
Definition: ir_Airwell.h:48
-
uint64_t Temp
Definition: ir_Airwell.h:31
-
void send(const uint16_t repeat=kAirwellMinRepeats)
Send the current internal state as an IR message.
Definition: ir_Airwell.cpp:108
-
uint64_t PowerToggle
Definition: ir_Airwell.h:35
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Airwell.cpp:225
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Airwell.h:93
-
Native representation of a Airwell A/C message.
Definition: ir_Airwell.h:27
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kAirwellCool
Definition: ir_Airwell.h:51
-
IRAirwellAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Airwell.cpp:85
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Airwell.cpp:240
-
const uint8_t kAirwellHeat
Definition: ir_Airwell.h:52
-
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Airwell.cpp:138
- -
const uint8_t kAirwellMinTemp
Definition: ir_Airwell.h:43
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kAirwellFanAuto
Definition: ir_Airwell.h:49
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint64_t raw
Definition: ir_Airwell.h:28
-
const uint8_t kAirwellFan
Definition: ir_Airwell.h:55
-
uint8_t getTemp() const
Get the current temperature setting.
Definition: ir_Airwell.cpp:233
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint64_t getRaw() const
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Airwell.cpp:95
- -
const uint8_t kAirwellFanLow
Definition: ir_Airwell.h:46
-
const uint8_t kAirwellAuto
Definition: ir_Airwell.h:53
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Airwell.h:71
-
uint8_t getFan() const
Get the current fan speed setting.
Definition: ir_Airwell.cpp:189
-
void stateReset()
Reset the internals of the object to a known good state.
Definition: ir_Airwell.cpp:114
-
AirwellProtocol _
Definition: ir_Airwell.h:99
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Airwell.cpp:182
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Airwell.cpp:156
-
const uint8_t kAirwellMaxTemp
Definition: ir_Airwell.h:44
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Airwell.cpp:169
-
Class for handling detailed Airwell A/C messages.
Definition: ir_Airwell.h:60
-
const uint64_t kAirwellKnownGoodState
Definition: ir_Airwell.h:41
-
uint8_t getMode() const
Get the current operation mode setting.
Definition: ir_Airwell.cpp:132
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Airwell.cpp:214
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Airwell.cpp:196
-
void setPowerToggle(const bool on)
Turn on/off the Power Airwell setting.
Definition: ir_Airwell.cpp:120
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Airwell.cpp:90
-
uint64_t Fan
Definition: ir_Airwell.h:33
-
const uint8_t kAirwellFanMedium
Definition: ir_Airwell.h:47
-
uint64_t Mode
Definition: ir_Airwell.h:34
-
String toString() const
Convert the current internal state into a human readable string.
Definition: ir_Airwell.cpp:275
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
bool getPowerToggle() const
Get the power toggle setting from the internal state.
Definition: ir_Airwell.cpp:126
-
const uint8_t kAirwellDry
Definition: ir_Airwell.h:54
-
void setRaw(const uint64_t state)
Set the raw state of the object.
Definition: ir_Airwell.cpp:101
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Aiwa_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Aiwa_8cpp.html deleted file mode 100644 index f5fd8eaba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Aiwa_8cpp.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Aiwa.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Aiwa.cpp File Reference
-
-
- -

Aiwa based protocol. Based off the RC-T501 RCU Inspired by IRremoteESP8266's implementation. -More...

- - - - - - - - - - -

-Variables

const uint16_t kAiwaRcT501PreBits = 26
 
const uint16_t kAiwaRcT501PostBits = 1
 
const uint64_t kAiwaRcT501PreData = 0x1D8113FULL
 
const uint64_t kAiwaRcT501PostData = 1ULL
 
-

Detailed Description

-

Aiwa based protocol. Based off the RC-T501 RCU Inspired by IRremoteESP8266's implementation.

-
See also
https://github.com/z3t0/Arduino-IRremote
-

Variable Documentation

- -

◆ kAiwaRcT501PostBits

- -
-
- - - - -
const uint16_t kAiwaRcT501PostBits = 1
-
- -
-
- -

◆ kAiwaRcT501PostData

- -
-
- - - - -
const uint64_t kAiwaRcT501PostData = 1ULL
-
- -
-
- -

◆ kAiwaRcT501PreBits

- -
-
- - - - -
const uint16_t kAiwaRcT501PreBits = 26
-
- -
-
- -

◆ kAiwaRcT501PreData

- -
-
- - - - -
const uint64_t kAiwaRcT501PreData = 0x1D8113FULL
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8cpp.html deleted file mode 100644 index cf51c2624..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8cpp.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Amcor.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Amcor.cpp File Reference
-
-
- -

Amcor A/C protocol. -More...

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

-Variables

const uint16_t kAmcorHdrMark = 8200
 
const uint16_t kAmcorHdrSpace = 4200
 
const uint16_t kAmcorOneMark = 1500
 
const uint16_t kAmcorZeroMark = 600
 
const uint16_t kAmcorOneSpace = kAmcorZeroMark
 
const uint16_t kAmcorZeroSpace = kAmcorOneMark
 
const uint16_t kAmcorFooterMark = 1900
 
const uint16_t kAmcorGap = 34300
 
const uint8_t kAmcorTolerance = 40
 
-

Detailed Description

-

Variable Documentation

- -

◆ kAmcorFooterMark

- -
-
- - - - -
const uint16_t kAmcorFooterMark = 1900
-
- -
-
- -

◆ kAmcorGap

- -
-
- - - - -
const uint16_t kAmcorGap = 34300
-
- -
-
- -

◆ kAmcorHdrMark

- -
-
- - - - -
const uint16_t kAmcorHdrMark = 8200
-
- -
-
- -

◆ kAmcorHdrSpace

- -
-
- - - - -
const uint16_t kAmcorHdrSpace = 4200
-
- -
-
- -

◆ kAmcorOneMark

- -
-
- - - - -
const uint16_t kAmcorOneMark = 1500
-
- -
-
- -

◆ kAmcorOneSpace

- -
-
- - - - -
const uint16_t kAmcorOneSpace = kAmcorZeroMark
-
- -
-
- -

◆ kAmcorTolerance

- -
-
- - - - -
const uint8_t kAmcorTolerance = 40
-
- -
-
- -

◆ kAmcorZeroMark

- -
-
- - - - -
const uint16_t kAmcorZeroMark = 600
-
- -
-
- -

◆ kAmcorZeroSpace

- -
-
- - - - -
const uint16_t kAmcorZeroSpace = kAmcorOneMark
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h.html deleted file mode 100644 index 004e6cc2f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Amcor.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Amcor.h File Reference
-
-
- -

Amcor A/C protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  AmcorProtocol
 Native representation of a Amcor A/C message. More...
 
class  IRAmcorAc
 Class for handling detailed Amcor A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kAmcorFanMin = 0b001
 
const uint8_t kAmcorFanMed = 0b010
 
const uint8_t kAmcorFanMax = 0b011
 
const uint8_t kAmcorFanAuto = 0b100
 
const uint8_t kAmcorCool = 0b001
 
const uint8_t kAmcorHeat = 0b010
 
const uint8_t kAmcorFan = 0b011
 
const uint8_t kAmcorDry = 0b100
 
const uint8_t kAmcorAuto = 0b101
 
const uint8_t kAmcorMinTemp = 12
 
const uint8_t kAmcorMaxTemp = 32
 
const uint8_t kAmcorPowerOn = 0b0011
 
const uint8_t kAmcorPowerOff = 0b1100
 
const uint8_t kAmcorMax = 0b11
 
const uint8_t kAmcorVentOn = 0b11
 
-

Detailed Description

-

Amcor A/C protocol.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/834
-
Remarks
Kudos to ldellus; For the breakdown and mapping of the bit values.
-

Variable Documentation

- -

◆ kAmcorAuto

- -
-
- - - - -
const uint8_t kAmcorAuto = 0b101
-
- -
-
- -

◆ kAmcorCool

- -
-
- - - - -
const uint8_t kAmcorCool = 0b001
-
- -
-
- -

◆ kAmcorDry

- -
-
- - - - -
const uint8_t kAmcorDry = 0b100
-
- -
-
- -

◆ kAmcorFan

- -
-
- - - - -
const uint8_t kAmcorFan = 0b011
-
- -
-
- -

◆ kAmcorFanAuto

- -
-
- - - - -
const uint8_t kAmcorFanAuto = 0b100
-
- -
-
- -

◆ kAmcorFanMax

- -
-
- - - - -
const uint8_t kAmcorFanMax = 0b011
-
- -
-
- -

◆ kAmcorFanMed

- -
-
- - - - -
const uint8_t kAmcorFanMed = 0b010
-
- -
-
- -

◆ kAmcorFanMin

- -
-
- - - - -
const uint8_t kAmcorFanMin = 0b001
-
- -
-
- -

◆ kAmcorHeat

- -
-
- - - - -
const uint8_t kAmcorHeat = 0b010
-
- -
-
- -

◆ kAmcorMax

- -
-
- - - - -
const uint8_t kAmcorMax = 0b11
-
- -
-
- -

◆ kAmcorMaxTemp

- -
-
- - - - -
const uint8_t kAmcorMaxTemp = 32
-
- -
-
- -

◆ kAmcorMinTemp

- -
-
- - - - -
const uint8_t kAmcorMinTemp = 12
-
- -
-
- -

◆ kAmcorPowerOff

- -
-
- - - - -
const uint8_t kAmcorPowerOff = 0b1100
-
- -
-
- -

◆ kAmcorPowerOn

- -
-
- - - - -
const uint8_t kAmcorPowerOn = 0b0011
-
- -
-
- -

◆ kAmcorVentOn

- -
-
- - - - -
const uint8_t kAmcorVentOn = 0b11
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h_source.html deleted file mode 100644 index b47165f61..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Amcor_8h_source.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Amcor.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Amcor.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 David Conran
-
2 
-
7 // Supports:
-
8 // Brand: Amcor, Model: ADR-853H A/C
-
9 // Brand: Amcor, Model: TAC-495 remote
-
10 // Brand: Amcor, Model: TAC-444 remote
-
11 
-
12 #ifndef IR_AMCOR_H_
-
13 #define IR_AMCOR_H_
-
14 
-
15 #define __STDC_LIMIT_MACROS
-
16 #include <stdint.h>
-
17 #ifndef UNIT_TEST
-
18 #include <Arduino.h>
-
19 #endif
-
20 #include "IRremoteESP8266.h"
-
21 #include "IRsend.h"
-
22 #ifdef UNIT_TEST
-
23 #include "IRsend_test.h"
-
24 #endif
-
25 
-
26 
- -
29  uint8_t raw[kAmcorStateLength]; // The state of the IR remote.
-
30  struct {
-
31  // Byte 0
-
32  uint8_t :8; // Typically 0x01
-
33  // Byte 1
-
34  uint8_t Mode :3;
-
35  uint8_t :1;
-
36  uint8_t Fan :3;
-
37  uint8_t :1;
-
38  // Byte 2
-
39  uint8_t :1;
-
40  uint8_t Temp :6;
-
41  uint8_t :1;
-
42  // Byte 3
-
43  uint8_t :8;
-
44  // Byte 4
-
45  uint8_t :8;
-
46  // Byte 5
-
47  uint8_t :4;
-
48  uint8_t Power :4;
-
49  // Byte 6
-
50  uint8_t Max :2;
-
51  uint8_t :4;
-
52  uint8_t Vent :2;
-
53  // Byte 7
-
54  uint8_t Sum :8;
-
55  };
-
56 };
-
57 
-
58 // Constants
-
59 
-
60 // Fan Control
-
61 const uint8_t kAmcorFanMin = 0b001;
-
62 const uint8_t kAmcorFanMed = 0b010;
-
63 const uint8_t kAmcorFanMax = 0b011;
-
64 const uint8_t kAmcorFanAuto = 0b100;
-
65 // Modes
-
66 const uint8_t kAmcorCool = 0b001;
-
67 const uint8_t kAmcorHeat = 0b010;
-
68 const uint8_t kAmcorFan = 0b011; // Aka "Vent"
-
69 const uint8_t kAmcorDry = 0b100;
-
70 const uint8_t kAmcorAuto = 0b101;
-
71 
-
72 // Temperature
-
73 const uint8_t kAmcorMinTemp = 12; // Celsius
-
74 const uint8_t kAmcorMaxTemp = 32; // Celsius
-
75 
-
76 // Power
-
77 const uint8_t kAmcorPowerOn = 0b0011; // 0x3
-
78 const uint8_t kAmcorPowerOff = 0b1100; // 0xC
-
79 
-
80 // Max Mode (aka "Lo" in Cool and "Hi" in Heat)
-
81 const uint8_t kAmcorMax = 0b11;
-
82 
-
83 // "Vent" Mode
-
84 const uint8_t kAmcorVentOn = 0b11;
-
85 
-
86 
-
87 // Classes
-
88 
-
90 class IRAmcorAc {
-
91  public:
-
92  explicit IRAmcorAc(const uint16_t pin, const bool inverted = false,
-
93  const bool use_modulation = true);
-
94 
-
95  void stateReset();
-
96 #if SEND_AMCOR
-
97  void send(const uint16_t repeat = kAmcorDefaultRepeat);
-
102  int8_t calibrate(void) { return _irsend.calibrate(); }
-
103 #endif // SEND_AMCOR
-
104  void begin();
-
105  static uint8_t calcChecksum(const uint8_t state[],
-
106  const uint16_t length = kAmcorStateLength);
-
107  static bool validChecksum(const uint8_t state[],
-
108  const uint16_t length = kAmcorStateLength);
-
109  void setPower(const bool state);
-
110  bool getPower(void) const;
-
111  void on(void);
-
112  void off(void);
-
113  void setTemp(const uint8_t temp);
-
114  uint8_t getTemp(void) const;
-
115  void setMax(const bool on);
-
116  bool getMax(void) const;
-
117  void setFan(const uint8_t speed);
-
118  uint8_t getFan(void) const;
-
119  void setMode(const uint8_t mode);
-
120  uint8_t getMode(void) const;
-
121  uint8_t* getRaw(void);
-
122  void setRaw(const uint8_t state[]);
-
123  static uint8_t convertMode(const stdAc::opmode_t mode);
-
124  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
125  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
126  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
127  stdAc::state_t toCommon(void) const;
-
128  String toString(void) const;
-
129 #ifndef UNIT_TEST
-
130 
-
131  private:
- -
133 #else
-
134  IRsendTest _irsend;
-
137 #endif
- -
139  void checksum(void);
-
140 };
-
141 #endif // IR_AMCOR_H_
-
-
uint8_t Mode
Definition: ir_Amcor.h:34
-
IRAmcorAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Amcor.cpp:95
-
uint8_t raw[kAmcorStateLength]
Definition: ir_Amcor.h:29
-
uint8_t * getRaw(void)
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Amcor.cpp:143
-
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Amcor.cpp:236
-
void send(const uint16_t repeat=kAmcorDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Amcor.cpp:105
-
const uint8_t kAmcorCool
Definition: ir_Amcor.h:66
-
const uint16_t kAmcorStateLength
Definition: IRremoteESP8266.h:915
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Amcor.cpp:292
-
Native representation of a Amcor A/C message.
Definition: ir_Amcor.h:28
-
const uint8_t kAmcorPowerOn
Definition: ir_Amcor.h:77
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kAmcorStateLength)
Calculate the checksum for the supplied state.
Definition: ir_Amcor.cpp:114
-
const uint8_t kAmcorMax
Definition: ir_Amcor.h:81
-
IRsend _irsend
Definition: ir_Amcor.h:132
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Amcor.cpp:274
-
const uint8_t kAmcorHeat
Definition: ir_Amcor.h:67
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Amcor.cpp:100
- -
const uint8_t kAmcorFanAuto
Definition: ir_Amcor.h:64
-
uint8_t Fan
Definition: ir_Amcor.h:36
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t getMode(void) const
Get the current operation mode setting.
Definition: ir_Amcor.cpp:230
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Amcor.cpp:209
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
std::string String
Definition: IRremoteESP8266.h:1217
-
Class for handling detailed Amcor A/C messages.
Definition: ir_Amcor.h:90
-
const uint8_t kAmcorMinTemp
Definition: ir_Amcor.h:73
-
void setMax(const bool on)
Control the current Maximum Cooling or Heating setting. (i.e. Turbo)
Definition: ir_Amcor.cpp:189
-
uint8_t Temp
Definition: ir_Amcor.h:40
-
void stateReset()
Reset the internals of the object to a known good state.
Definition: ir_Amcor.cpp:132
-
const uint8_t kAmcorFan
Definition: ir_Amcor.h:68
-
void setRaw(const uint8_t state[])
Set the raw state of the object.
Definition: ir_Amcor.cpp:150
-
const uint8_t kAmcorVentOn
Definition: ir_Amcor.h:84
-
const uint8_t kAmcorFanMin
Definition: ir_Amcor.h:61
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Amcor.cpp:342
- -
uint8_t Sum
Definition: ir_Amcor.h:54
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Amcor.cpp:256
-
const uint8_t kAmcorDry
Definition: ir_Amcor.h:69
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Amcor.cpp:224
-
const uint8_t kAmcorFanMed
Definition: ir_Amcor.h:62
-
bool getPower(void) const
Get the power setting from the internal state.
Definition: ir_Amcor.cpp:168
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Amcor.cpp:174
-
void on(void)
Set the internal state to have the power on.
Definition: ir_Amcor.cpp:155
-
uint8_t Vent
Definition: ir_Amcor.h:52
-
void setPower(const bool state)
Set the internal state to have the desired power.
Definition: ir_Amcor.cpp:162
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Amcor.h:102
-
uint8_t Power
Definition: ir_Amcor.h:48
-
const uint8_t kAmcorPowerOff
Definition: ir_Amcor.h:78
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Amcor.cpp:316
-
void checksum(void)
Update the checksum value for the internal state.
Definition: ir_Amcor.cpp:127
-
uint8_t Max
Definition: ir_Amcor.h:50
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kAmcorStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Amcor.cpp:122
-
const uint8_t kAmcorAuto
Definition: ir_Amcor.h:70
-
bool getMax(void) const
Is the Maximum Cooling or Heating setting (i.e. Turbo) setting on?
Definition: ir_Amcor.cpp:203
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Amcor.cpp:182
-
AmcorProtocol _
Definition: ir_Amcor.h:138
-
const uint8_t kAmcorMaxTemp
Definition: ir_Amcor.h:74
-
const uint16_t kAmcorDefaultRepeat
Definition: IRremoteESP8266.h:917
-
const uint8_t kAmcorFanMax
Definition: ir_Amcor.h:63
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void off(void)
Set the internal state to have the power off.
Definition: ir_Amcor.cpp:158
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Amcor.cpp:305
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8cpp.html deleted file mode 100644 index 7acafb331..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8cpp.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Argo.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Argo.cpp File Reference
-
-
- -

Argo A/C protocol. Controls an Argo Ulisse 13 DCI A/C. -More...

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

-Variables

const uint16_t kArgoHdrMark = 6400
 
const uint16_t kArgoHdrSpace = 3300
 
const uint16_t kArgoBitMark = 400
 
const uint16_t kArgoOneSpace = 2200
 
const uint16_t kArgoZeroSpace = 900
 
const uint32_t kArgoGap = kDefaultMessageGap
 
-

Detailed Description

-

Argo A/C protocol. Controls an Argo Ulisse 13 DCI A/C.

-

Variable Documentation

- -

◆ kArgoBitMark

- -
-
- - - - -
const uint16_t kArgoBitMark = 400
-
- -
-
- -

◆ kArgoGap

- -
-
- - - - -
const uint32_t kArgoGap = kDefaultMessageGap
-
- -
-
- -

◆ kArgoHdrMark

- -
-
- - - - -
const uint16_t kArgoHdrMark = 6400
-
- -
-
- -

◆ kArgoHdrSpace

- -
-
- - - - -
const uint16_t kArgoHdrSpace = 3300
-
- -
-
- -

◆ kArgoOneSpace

- -
-
- - - - -
const uint16_t kArgoOneSpace = 2200
-
- -
-
- -

◆ kArgoZeroSpace

- -
-
- - - - -
const uint16_t kArgoZeroSpace = 900
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h.html deleted file mode 100644 index b75cc9cf2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h.html +++ /dev/null @@ -1,488 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Argo.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Argo.h File Reference
-
-
- -

Support for Argo Ulisse 13 DCI Mobile Split ACs. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  ArgoProtocol
 Native representation of a Argo A/C message. More...
 
class  IRArgoAC
 Class for handling detailed Argo A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kArgoHeatBit = 0b00100000
 
const uint8_t kArgoCool = 0b000
 
const uint8_t kArgoDry = 0b001
 
const uint8_t kArgoAuto = 0b010
 
const uint8_t kArgoOff = 0b011
 
const uint8_t kArgoHeat = 0b100
 
const uint8_t kArgoHeatAuto = 0b101
 
const uint8_t kArgoHeatBlink = 0b110
 
const uint8_t kArgoFanAuto = 0
 
const uint8_t kArgoFan1 = 1
 
const uint8_t kArgoFan2 = 2
 
const uint8_t kArgoFan3 = 3
 
const uint8_t kArgoTempDelta = 4
 
const uint8_t kArgoMaxRoomTemp = 35
 
const uint8_t kArgoMinTemp = 10
 
const uint8_t kArgoMaxTemp = 32
 
const uint8_t kArgoFlapAuto = 0
 
const uint8_t kArgoFlap1 = 1
 
const uint8_t kArgoFlap2 = 2
 
const uint8_t kArgoFlap3 = 3
 
const uint8_t kArgoFlap4 = 4
 
const uint8_t kArgoFlap5 = 5
 
const uint8_t kArgoFlap6 = 6
 
const uint8_t kArgoFlapFull = 7
 
-

Detailed Description

-

Support for Argo Ulisse 13 DCI Mobile Split ACs.

-

Variable Documentation

- -

◆ kArgoAuto

- -
-
- - - - -
const uint8_t kArgoAuto = 0b010
-
- -
-
- -

◆ kArgoCool

- -
-
- - - - -
const uint8_t kArgoCool = 0b000
-
- -
-
- -

◆ kArgoDry

- -
-
- - - - -
const uint8_t kArgoDry = 0b001
-
- -
-
- -

◆ kArgoFan1

- -
-
- - - - -
const uint8_t kArgoFan1 = 1
-
- -
-
- -

◆ kArgoFan2

- -
-
- - - - -
const uint8_t kArgoFan2 = 2
-
- -
-
- -

◆ kArgoFan3

- -
-
- - - - -
const uint8_t kArgoFan3 = 3
-
- -
-
- -

◆ kArgoFanAuto

- -
-
- - - - -
const uint8_t kArgoFanAuto = 0
-
- -
-
- -

◆ kArgoFlap1

- -
-
- - - - -
const uint8_t kArgoFlap1 = 1
-
- -
-
- -

◆ kArgoFlap2

- -
-
- - - - -
const uint8_t kArgoFlap2 = 2
-
- -
-
- -

◆ kArgoFlap3

- -
-
- - - - -
const uint8_t kArgoFlap3 = 3
-
- -
-
- -

◆ kArgoFlap4

- -
-
- - - - -
const uint8_t kArgoFlap4 = 4
-
- -
-
- -

◆ kArgoFlap5

- -
-
- - - - -
const uint8_t kArgoFlap5 = 5
-
- -
-
- -

◆ kArgoFlap6

- -
-
- - - - -
const uint8_t kArgoFlap6 = 6
-
- -
-
- -

◆ kArgoFlapAuto

- -
-
- - - - -
const uint8_t kArgoFlapAuto = 0
-
- -
-
- -

◆ kArgoFlapFull

- -
-
- - - - -
const uint8_t kArgoFlapFull = 7
-
- -
-
- -

◆ kArgoHeat

- -
-
- - - - -
const uint8_t kArgoHeat = 0b100
-
- -
-
- -

◆ kArgoHeatAuto

- -
-
- - - - -
const uint8_t kArgoHeatAuto = 0b101
-
- -
-
- -

◆ kArgoHeatBit

- -
-
- - - - -
const uint8_t kArgoHeatBit = 0b00100000
-
- -
-
- -

◆ kArgoHeatBlink

- -
-
- - - - -
const uint8_t kArgoHeatBlink = 0b110
-
- -
-
- -

◆ kArgoMaxRoomTemp

- -
-
- - - - -
const uint8_t kArgoMaxRoomTemp = 35
-
- -
-
- -

◆ kArgoMaxTemp

- -
-
- - - - -
const uint8_t kArgoMaxTemp = 32
-
- -
-
- -

◆ kArgoMinTemp

- -
-
- - - - -
const uint8_t kArgoMinTemp = 10
-
- -
-
- -

◆ kArgoOff

- -
-
- - - - -
const uint8_t kArgoOff = 0b011
-
- -
-
- -

◆ kArgoTempDelta

- -
-
- - - - -
const uint8_t kArgoTempDelta = 4
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h_source.html deleted file mode 100644 index 53ee172cd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Argo_8h_source.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Argo.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Argo.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 Schmolders
-
4 
-
5 // Supports:
-
6 // Brand: Argo, Model: Ulisse 13 DCI Mobile Split A/C
-
7 
-
8 #ifndef IR_ARGO_H_
-
9 #define IR_ARGO_H_
-
10 
-
11 #ifndef UNIT_TEST
-
12 #include <Arduino.h>
-
13 #endif
-
14 #include "IRremoteESP8266.h"
-
15 #include "IRsend.h"
-
16 #ifdef UNIT_TEST
-
17 #include "IRsend_test.h"
-
18 #endif
-
19 
-
20 
-
21 // ARGO Ulisse DCI
-
22 
-
24 union ArgoProtocol {
-
25  uint8_t raw[kArgoStateLength];
-
26  struct {
-
27  // Byte 0
-
28  uint64_t :8; // Typically 0b00110101
-
29  // Byte 1
-
30  uint64_t :8; // Typically 0b10101111
-
31  // Byte 2~4
-
32  uint64_t :3;
-
33  uint64_t Mode :3;
-
34  uint64_t Temp :5; // straddle byte 2 and 3
-
35  uint64_t Fan :2;
-
36  uint64_t RoomTemp :5; // straddle byte 3 and 4
-
37  uint64_t Flap :3; // SwingV
-
38  uint64_t :3; // OnTimer, maybe hours
-
39  // Byte 5
-
40  uint64_t :8; // OnTimer, maybe minutes
-
41  // Byte 6
-
42  uint64_t :8; // OffTimer, maybe minutes
-
43  // Byte 7
-
44  uint64_t :3; // OffTimer, maybe hours
-
45  uint64_t :5; // Time
-
46  // Byte 8
-
47  uint32_t :6; // Time
-
48  uint32_t :1; // Timer On/Off
-
49  uint32_t :1; // Timer Program
-
50  // Byte 9
-
51  uint32_t :1; // Timer Program
-
52  uint32_t :1; // Timer 1h
-
53  uint32_t Night :1;
-
54  uint32_t Max :1;
-
55  uint32_t :1; // Filter
-
56  uint32_t Power :1;
-
57  uint32_t :1; // const 0
-
58  uint32_t iFeel :1;
-
59  // Byte 10~11
-
60  uint32_t :2; // const 01
-
61  uint32_t Sum :8; // straddle byte 10 and 11
-
62  uint32_t :6;
-
63  };
-
64 };
-
65 
-
66 // Constants. Store MSB left.
-
67 
-
68 const uint8_t kArgoHeatBit = 0b00100000;
-
69 
-
70 // Mode 0b00111000
-
71 const uint8_t kArgoCool = 0b000;
-
72 const uint8_t kArgoDry = 0b001;
-
73 const uint8_t kArgoAuto = 0b010;
-
74 const uint8_t kArgoOff = 0b011;
-
75 const uint8_t kArgoHeat = 0b100;
-
76 const uint8_t kArgoHeatAuto = 0b101;
-
77 // ?no idea what mode that is
-
78 const uint8_t kArgoHeatBlink = 0b110;
-
79 
-
80 // Fan 0b00011000
-
81 const uint8_t kArgoFanAuto = 0; // 0b00
-
82 const uint8_t kArgoFan1 = 1; // 0b01
-
83 const uint8_t kArgoFan2 = 2; // 0b10
-
84 const uint8_t kArgoFan3 = 3; // 0b11
-
85 
-
86 // Temp
-
87 const uint8_t kArgoTempDelta = 4;
-
88 const uint8_t kArgoMaxRoomTemp = 35; // Celsius
-
89 const uint8_t kArgoMinTemp = 10; // Celsius delta +4
-
90 const uint8_t kArgoMaxTemp = 32; // Celsius
-
91 
-
92 // Flap/SwingV
-
93 const uint8_t kArgoFlapAuto = 0;
-
94 const uint8_t kArgoFlap1 = 1;
-
95 const uint8_t kArgoFlap2 = 2;
-
96 const uint8_t kArgoFlap3 = 3;
-
97 const uint8_t kArgoFlap4 = 4;
-
98 const uint8_t kArgoFlap5 = 5;
-
99 const uint8_t kArgoFlap6 = 6;
-
100 const uint8_t kArgoFlapFull = 7;
-
101 
-
102 // Legacy defines. (Deprecated)
-
103 #define ARGO_COOL_ON kArgoCoolOn
-
104 #define ARGO_COOL_OFF kArgoCoolOff
-
105 #define ARGO_COOL_AUTO kArgoCoolAuto
-
106 #define ARGO_COOL_HUM kArgoCoolHum
-
107 #define ARGO_HEAT_ON kArgoHeatOn
-
108 #define ARGO_HEAT_AUTO kArgoHeatAuto
-
109 #define ARGO_HEAT_BLINK kArgoHeatBlink
-
110 #define ARGO_MIN_TEMP kArgoMinTemp
-
111 #define ARGO_MAX_TEMP kArgoMaxTemp
-
112 #define ARGO_FAN_AUTO kArgoFanAuto
-
113 #define ARGO_FAN_3 kArgoFan3
-
114 #define ARGO_FAN_2 kArgoFan2
-
115 #define ARGO_FAN_1 kArgoFan1
-
116 #define ARGO_FLAP_AUTO kArgoFlapAuto
-
117 #define ARGO_FLAP_1 kArgoFlap1
-
118 #define ARGO_FLAP_2 kArgoFlap2
-
119 #define ARGO_FLAP_3 kArgoFlap3
-
120 #define ARGO_FLAP_4 kArgoFlap4
-
121 #define ARGO_FLAP_5 kArgoFlap5
-
122 #define ARGO_FLAP_6 kArgoFlap6
-
123 #define ARGO_FLAP_FULL kArgoFlapFull
-
124 
-
125 
-
127 class IRArgoAC {
-
128  public:
-
129  explicit IRArgoAC(const uint16_t pin, const bool inverted = false,
-
130  const bool use_modulation = true);
-
131 
-
132 #if SEND_ARGO
-
133  void send(const uint16_t repeat = kArgoDefaultRepeat);
-
138  int8_t calibrate(void) { return _irsend.calibrate(); }
-
139 #endif // SEND_ARGO
-
140  void begin(void);
-
141  void on(void);
-
142  void off(void);
-
143 
-
144  void setPower(const bool on);
-
145  bool getPower(void) const;
-
146 
-
147  void setTemp(const uint8_t degrees);
-
148  uint8_t getTemp(void) const;
-
149 
-
150  void setFan(const uint8_t fan);
-
151  uint8_t getFan(void) const;
-
152 
-
153  void setFlap(const uint8_t flap);
-
154  uint8_t getFlap(void) const;
-
155 
-
156  void setMode(const uint8_t mode);
-
157  uint8_t getMode(void) const;
-
158 
-
159  void setMax(const bool on);
-
160  bool getMax(void) const;
-
161 
-
162  void setNight(const bool on);
-
163  bool getNight(void) const;
-
164 
-
165  void setiFeel(const bool on);
-
166  bool getiFeel(void) const;
-
167 
-
168  void setTime(void);
-
169  void setRoomTemp(const uint8_t degrees);
-
170  uint8_t getRoomTemp(void) const;
-
171 
-
172  uint8_t* getRaw(void);
-
173  void setRaw(const uint8_t state[]);
-
174  static uint8_t calcChecksum(const uint8_t state[],
-
175  const uint16_t length = kArgoStateLength);
-
176  static bool validChecksum(const uint8_t state[],
-
177  const uint16_t length = kArgoStateLength);
-
178  static uint8_t convertMode(const stdAc::opmode_t mode);
-
179  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
180  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
181  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
182  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
183  stdAc::state_t toCommon(void) const;
-
184  String toString(void) const;
-
185 #ifndef UNIT_TEST
-
186 
-
187  private:
- -
189 #else
-
190  IRsendTest _irsend;
-
192 #endif
-
194  // # of bytes per command
- -
196  void stateReset(void);
-
197  void checksum(void);
-
198 
-
199  // Attributes
-
200  uint8_t flap_mode;
-
201  uint8_t heat_mode;
-
202  uint8_t cool_mode;
-
203 };
-
204 
-
205 #endif // IR_ARGO_H_
-
-
void setTime(void)
Set the time for the A/C.
Definition: ir_Argo.cpp:244
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Argo.cpp:72
-
uint32_t Sum
Definition: ir_Argo.h:61
-
uint8_t flap_mode
Definition: ir_Argo.h:200
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Argo.cpp:176
-
IRsend _irsend
instance of the IR send class
Definition: ir_Argo.h:188
-
const uint8_t kArgoHeatBlink
Definition: ir_Argo.h:78
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Argo.cpp:182
-
const uint8_t kArgoMaxTemp
Definition: ir_Argo.h:90
-
const uint16_t kArgoDefaultRepeat
Definition: IRremoteESP8266.h:920
-
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_Argo.cpp:159
-
void setFlap(const uint8_t flap)
Set the flap position. i.e. Swing.
Definition: ir_Argo.cpp:189
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Argo.cpp:372
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Argo.cpp:265
-
uint8_t getRoomTemp(void) const
Get the currently stored value for the room temperature setting.
Definition: ir_Argo.cpp:258
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kArgoFlap2
Definition: ir_Argo.h:95
-
uint8_t getFlap(void) const
Get the flap position. i.e. Swing.
Definition: ir_Argo.cpp:197
-
void stateReset(void)
Reset the internals of the object to a known good state.
Definition: ir_Argo.cpp:98
-
uint32_t Night
Definition: ir_Argo.h:53
-
const uint8_t kArgoFlap4
Definition: ir_Argo.h:97
-
const uint8_t kArgoHeatBit
Definition: ir_Argo.h:68
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Argo.h:138
- -
bool getPower(void) const
Get the power setting from the internal state.
Definition: ir_Argo.cpp:144
-
const uint8_t kArgoFlap3
Definition: ir_Argo.h:96
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kArgoStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Argo.cpp:83
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint16_t kArgoStateLength
Definition: IRremoteESP8266.h:918
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kArgoFan1
Definition: ir_Argo.h:82
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Argo.cpp:322
-
const uint8_t kArgoOff
Definition: ir_Argo.h:74
-
uint64_t Flap
Definition: ir_Argo.h:37
-
bool getiFeel(void) const
Get the status of iFeel mode.
Definition: ir_Argo.cpp:240
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Argo.cpp:302
-
const uint8_t kArgoFlapFull
Definition: ir_Argo.h:100
-
uint64_t Mode
Definition: ir_Argo.h:33
- -
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Argo.cpp:170
-
const uint8_t kArgoDry
Definition: ir_Argo.h:72
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Argo.cpp:346
-
const uint8_t kArgoAuto
Definition: ir_Argo.h:73
-
void setRoomTemp(const uint8_t degrees)
Set the value for the current room temperature.
Definition: ir_Argo.cpp:250
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Argo.cpp:284
-
void off(void)
Set the internal state to have the power off.
Definition: ir_Argo.cpp:134
-
uint64_t Temp
Definition: ir_Argo.h:34
-
uint32_t Power
Definition: ir_Argo.h:56
-
void setPower(const bool on)
Set the internal state to have the desired power.
Definition: ir_Argo.cpp:138
-
const uint8_t kArgoFlap1
Definition: ir_Argo.h:94
-
uint8_t raw[kArgoStateLength]
The state in native IR code form.
Definition: ir_Argo.h:25
-
uint8_t * getRaw(void)
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Argo.cpp:119
-
uint64_t Fan
Definition: ir_Argo.h:35
-
uint8_t heat_mode
Definition: ir_Argo.h:201
-
uint32_t Max
Definition: ir_Argo.h:54
-
uint64_t RoomTemp
Definition: ir_Argo.h:36
-
const uint8_t kArgoMinTemp
Definition: ir_Argo.h:89
-
void on(void)
Set the internal state to have the power on.
Definition: ir_Argo.cpp:131
-
void setNight(const bool on)
Turn on/off the Night mode. i.e. Sleep.
Definition: ir_Argo.cpp:224
-
const uint8_t kArgoFan2
Definition: ir_Argo.h:83
-
const uint8_t kArgoCool
Definition: ir_Argo.h:71
-
void send(const uint16_t repeat=kArgoDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Argo.cpp:63
-
ArgoProtocol _
Definition: ir_Argo.h:195
-
const uint8_t kArgoHeatAuto
Definition: ir_Argo.h:76
-
Native representation of a Argo A/C message.
Definition: ir_Argo.h:24
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Argo.cpp:335
-
const uint8_t kArgoHeat
Definition: ir_Argo.h:75
-
void setRaw(const uint8_t state[])
Set the raw state of the object.
Definition: ir_Argo.cpp:126
-
uint8_t getMode(void) const
Get the current operation mode setting.
Definition: ir_Argo.cpp:201
-
const uint8_t kArgoFlap5
Definition: ir_Argo.h:98
-
IRArgoAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Argo.cpp:53
-
const uint8_t kArgoTempDelta
Definition: ir_Argo.h:87
-
void checksum(void)
Update the checksum for the internal state.
Definition: ir_Argo.cpp:89
-
const uint8_t kArgoFlap6
Definition: ir_Argo.h:99
-
uint8_t cool_mode
Definition: ir_Argo.h:202
-
bool getMax(void) const
Is the Max (i.e. Turbo) setting on?
Definition: ir_Argo.cpp:154
-
bool getNight(void) const
Get the status of Night mode. i.e. Sleep.
Definition: ir_Argo.cpp:230
-
void setiFeel(const bool on)
Turn on/off the iFeel mode.
Definition: ir_Argo.cpp:234
-
uint32_t iFeel
Definition: ir_Argo.h:58
-
void setMax(const bool on)
Control the current Max setting. (i.e. Turbo)
Definition: ir_Argo.cpp:148
-
const uint8_t kArgoFlapAuto
Definition: ir_Argo.h:93
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kArgoFan3
Definition: ir_Argo.h:84
-
Class for handling detailed Argo A/C messages.
Definition: ir_Argo.h:127
-
const uint8_t kArgoFanAuto
Definition: ir_Argo.h:81
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Argo.cpp:58
-
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Argo.cpp:207
-
const uint8_t kArgoMaxRoomTemp
Definition: ir_Argo.h:88
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8cpp.html deleted file mode 100644 index 23c897e70..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8cpp.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Carrier.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Carrier.cpp File Reference
-
-
- -

Carrier protocols. -More...

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

-Variables

const uint16_t kCarrierAcHdrMark = 8532
 
const uint16_t kCarrierAcHdrSpace = 4228
 
const uint16_t kCarrierAcBitMark = 628
 
const uint16_t kCarrierAcOneSpace = 1320
 
const uint16_t kCarrierAcZeroSpace = 532
 
const uint16_t kCarrierAcGap = 20000
 
const uint16_t kCarrierAcFreq = 38
 
const uint16_t kCarrierAc40HdrMark = 8402
 
const uint16_t kCarrierAc40HdrSpace = 4166
 
const uint16_t kCarrierAc40BitMark = 547
 
const uint16_t kCarrierAc40OneSpace = 1540
 
const uint16_t kCarrierAc40ZeroSpace = 497
 
const uint32_t kCarrierAc40Gap = 150000
 
const uint16_t kCarrierAc64HdrMark = 8940
 
const uint16_t kCarrierAc64HdrSpace = 4556
 
const uint16_t kCarrierAc64BitMark = 503
 
const uint16_t kCarrierAc64OneSpace = 1736
 
const uint16_t kCarrierAc64ZeroSpace = 615
 
const uint32_t kCarrierAc64Gap = kDefaultMessageGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kCarrierAc40BitMark

- -
-
- - - - -
const uint16_t kCarrierAc40BitMark = 547
-
- -
-
- -

◆ kCarrierAc40Gap

- -
-
- - - - -
const uint32_t kCarrierAc40Gap = 150000
-
-
- -

◆ kCarrierAc40HdrMark

- -
-
- - - - -
const uint16_t kCarrierAc40HdrMark = 8402
-
- -
-
- -

◆ kCarrierAc40HdrSpace

- -
-
- - - - -
const uint16_t kCarrierAc40HdrSpace = 4166
-
- -
-
- -

◆ kCarrierAc40OneSpace

- -
-
- - - - -
const uint16_t kCarrierAc40OneSpace = 1540
-
- -
-
- -

◆ kCarrierAc40ZeroSpace

- -
-
- - - - -
const uint16_t kCarrierAc40ZeroSpace = 497
-
- -
-
- -

◆ kCarrierAc64BitMark

- -
-
- - - - -
const uint16_t kCarrierAc64BitMark = 503
-
- -
-
- -

◆ kCarrierAc64Gap

- -
-
- - - - -
const uint32_t kCarrierAc64Gap = kDefaultMessageGap
-
- -
-
- -

◆ kCarrierAc64HdrMark

- -
-
- - - - -
const uint16_t kCarrierAc64HdrMark = 8940
-
- -
-
- -

◆ kCarrierAc64HdrSpace

- -
-
- - - - -
const uint16_t kCarrierAc64HdrSpace = 4556
-
- -
-
- -

◆ kCarrierAc64OneSpace

- -
-
- - - - -
const uint16_t kCarrierAc64OneSpace = 1736
-
- -
-
- -

◆ kCarrierAc64ZeroSpace

- -
-
- - - - -
const uint16_t kCarrierAc64ZeroSpace = 615
-
- -
-
- -

◆ kCarrierAcBitMark

- -
-
- - - - -
const uint16_t kCarrierAcBitMark = 628
-
- -
-
- -

◆ kCarrierAcFreq

- -
-
- - - - -
const uint16_t kCarrierAcFreq = 38
-
- -
-
- -

◆ kCarrierAcGap

- -
-
- - - - -
const uint16_t kCarrierAcGap = 20000
-
- -
-
- -

◆ kCarrierAcHdrMark

- -
-
- - - - -
const uint16_t kCarrierAcHdrMark = 8532
-
- -
-
- -

◆ kCarrierAcHdrSpace

- -
-
- - - - -
const uint16_t kCarrierAcHdrSpace = 4228
-
- -
-
- -

◆ kCarrierAcOneSpace

- -
-
- - - - -
const uint16_t kCarrierAcOneSpace = 1320
-
- -
-
- -

◆ kCarrierAcZeroSpace

- -
-
- - - - -
const uint16_t kCarrierAcZeroSpace = 532
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h.html deleted file mode 100644 index ea603f4ad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Carrier.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Carrier.h File Reference
-
-
- -

Carrier A/C. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  CarrierProtocol
 Native representation of a Carrier A/C message. More...
 
class  IRCarrierAc64
 Class for handling detailed Carrier 64 bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kCarrierAc64ChecksumOffset = 16
 
const uint8_t kCarrierAc64ChecksumSize = 4
 
const uint8_t kCarrierAc64Heat = 0b01
 
const uint8_t kCarrierAc64Cool = 0b10
 
const uint8_t kCarrierAc64Fan = 0b11
 
const uint8_t kCarrierAc64FanAuto = 0b00
 
const uint8_t kCarrierAc64FanLow = 0b01
 
const uint8_t kCarrierAc64FanMedium = 0b10
 
const uint8_t kCarrierAc64FanHigh = 0b11
 
const uint8_t kCarrierAc64MinTemp = 16
 
const uint8_t kCarrierAc64MaxTemp = 30
 
const uint8_t kCarrierAc64TimerMax = 9
 
const uint8_t kCarrierAc64TimerMin = 1
 
-

Detailed Description

-

Variable Documentation

- -

◆ kCarrierAc64ChecksumOffset

- -
-
- - - - -
const uint8_t kCarrierAc64ChecksumOffset = 16
-
- -
-
- -

◆ kCarrierAc64ChecksumSize

- -
-
- - - - -
const uint8_t kCarrierAc64ChecksumSize = 4
-
- -
-
- -

◆ kCarrierAc64Cool

- -
-
- - - - -
const uint8_t kCarrierAc64Cool = 0b10
-
- -
-
- -

◆ kCarrierAc64Fan

- -
-
- - - - -
const uint8_t kCarrierAc64Fan = 0b11
-
- -
-
- -

◆ kCarrierAc64FanAuto

- -
-
- - - - -
const uint8_t kCarrierAc64FanAuto = 0b00
-
- -
-
- -

◆ kCarrierAc64FanHigh

- -
-
- - - - -
const uint8_t kCarrierAc64FanHigh = 0b11
-
- -
-
- -

◆ kCarrierAc64FanLow

- -
-
- - - - -
const uint8_t kCarrierAc64FanLow = 0b01
-
- -
-
- -

◆ kCarrierAc64FanMedium

- -
-
- - - - -
const uint8_t kCarrierAc64FanMedium = 0b10
-
- -
-
- -

◆ kCarrierAc64Heat

- -
-
- - - - -
const uint8_t kCarrierAc64Heat = 0b01
-
- -
-
- -

◆ kCarrierAc64MaxTemp

- -
-
- - - - -
const uint8_t kCarrierAc64MaxTemp = 30
-
- -
-
- -

◆ kCarrierAc64MinTemp

- -
-
- - - - -
const uint8_t kCarrierAc64MinTemp = 16
-
- -
-
- -

◆ kCarrierAc64TimerMax

- -
-
- - - - -
const uint8_t kCarrierAc64TimerMax = 9
-
- -
-
- -

◆ kCarrierAc64TimerMin

- -
-
- - - - -
const uint8_t kCarrierAc64TimerMin = 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h_source.html deleted file mode 100644 index df0475c5d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Carrier_8h_source.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Carrier.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Carrier.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 David Conran
-
6 
-
7 // Supports:
-
8 // Brand: Carrier/Surrey, Model: 42QG5A55970 remote
-
9 // Brand: Carrier/Surrey, Model: 619EGX0090E0 A/C
-
10 // Brand: Carrier/Surrey, Model: 619EGX0120E0 A/C
-
11 // Brand: Carrier/Surrey, Model: 619EGX0180E0 A/C
-
12 // Brand: Carrier/Surrey, Model: 619EGX0220E0 A/C
-
13 // Brand: Carrier/Surrey, Model: 53NGK009/012 Inverter
-
14 
-
15 #ifndef IR_CARRIER_H_
-
16 #define IR_CARRIER_H_
-
17 
-
18 #define __STDC_LIMIT_MACROS
-
19 #include <stdint.h>
-
20 #ifndef UNIT_TEST
-
21 #include <Arduino.h>
-
22 #endif
-
23 #include "IRremoteESP8266.h"
-
24 #include "IRsend.h"
-
25 #ifdef UNIT_TEST
-
26 #include "IRsend_test.h"
-
27 #endif
-
28 
- -
31  uint64_t raw;
-
32  struct {
-
33  // Byte 0
-
34  uint8_t :8;
-
35  // Byte 1
-
36  uint8_t :8;
-
37  // Byte 2
-
38  uint8_t Sum:4;
-
39  uint8_t Mode:2;
-
40  uint8_t Fan:2;
-
41  // Byte 3
-
42  uint8_t Temp:4;
-
43  uint8_t :1;
-
44  uint8_t SwingV:1;
-
45  uint8_t :2;
-
46  // Byte 4
-
47  uint8_t :4;
-
48  uint8_t Power:1;
-
49  uint8_t OffTimerEnable:1;
-
50  uint8_t OnTimerEnable:1;
-
51  uint8_t Sleep:1;
-
52  // Byte 5
-
53  uint8_t :8;
-
54  // Byte 6
-
55  uint8_t :4;
-
56  uint8_t OnTimer:4;
-
57  // Byte 7
-
58  uint8_t :4;
-
59  uint8_t OffTimer:4;
-
60  };
-
61 };
-
62 
-
63 // Constants
-
64 
-
65 // CARRIER_AC64
-
66 const uint8_t kCarrierAc64ChecksumOffset = 16;
-
67 const uint8_t kCarrierAc64ChecksumSize = 4;
-
68 const uint8_t kCarrierAc64Heat = 0b01; // 1
-
69 const uint8_t kCarrierAc64Cool = 0b10; // 2
-
70 const uint8_t kCarrierAc64Fan = 0b11; // 3
-
71 const uint8_t kCarrierAc64FanAuto = 0b00; // 0
-
72 const uint8_t kCarrierAc64FanLow = 0b01; // 1
-
73 const uint8_t kCarrierAc64FanMedium = 0b10; // 2
-
74 const uint8_t kCarrierAc64FanHigh = 0b11; // 3
-
75 const uint8_t kCarrierAc64MinTemp = 16; // Celsius
-
76 const uint8_t kCarrierAc64MaxTemp = 30; // Celsius
-
77 const uint8_t kCarrierAc64TimerMax = 9; // Hours.
-
78 const uint8_t kCarrierAc64TimerMin = 1; // Hours.
-
79 
-
80 
-
81 // Classes
-
82 
- -
85  public:
-
86  explicit IRCarrierAc64(const uint16_t pin, const bool inverted = false,
-
87  const bool use_modulation = true);
-
88 
-
89  void stateReset();
-
90 #if SEND_CARRIER_AC64
-
91  void send(const uint16_t repeat = kCarrierAc64MinRepeat);
-
96  int8_t calibrate(void) { return _irsend.calibrate(); }
-
97 #endif // SEND_CARRIER_AC64
-
98  void begin();
-
99  static uint8_t calcChecksum(const uint64_t state);
-
100  static bool validChecksum(const uint64_t state);
-
101  void setPower(const bool on);
-
102  bool getPower(void) const;
-
103  void on(void);
-
104  void off(void);
-
105  void setTemp(const uint8_t temp);
-
106  uint8_t getTemp(void) const;
-
107  void setSwingV(const bool on);
-
108  bool getSwingV(void) const;
-
109  void setSleep(const bool on);
-
110  bool getSleep(void) const;
-
111  void setFan(const uint8_t speed);
-
112  uint8_t getFan(void) const;
-
113  void setMode(const uint8_t mode);
-
114  uint8_t getMode(void) const;
-
115  void setOnTimer(const uint16_t nr_of_mins);
-
116  uint16_t getOnTimer(void) const;
-
117  void setOffTimer(const uint16_t nr_of_mins);
-
118  uint16_t getOffTimer(void) const;
-
119  uint64_t getRaw(void);
-
120  void setRaw(const uint64_t state);
-
121  static uint8_t convertMode(const stdAc::opmode_t mode);
-
122  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
123  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
124  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
125  stdAc::state_t toCommon(void) const;
-
126  String toString(void) const;
-
127 #ifndef UNIT_TEST
-
128 
-
129  private:
- -
131 #else
-
132  IRsendTest _irsend;
-
134 #endif
- -
137  void checksum(void);
-
138  void _cancelOnTimer(void);
-
139  void _cancelOffTimer(void);
-
140 };
-
141 #endif // IR_CARRIER_H_
-
-
const uint8_t kCarrierAc64MinTemp
Definition: ir_Carrier.h:75
-
const uint8_t kCarrierAc64TimerMin
Definition: ir_Carrier.h:78
-
void on(void)
Change the power setting to On.
Definition: ir_Carrier.cpp:310
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Carrier.cpp:299
-
uint8_t Sleep
Definition: ir_Carrier.h:51
-
uint8_t getTemp(void) const
Get the current temperature from the internal state.
Definition: ir_Carrier.cpp:293
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Carrier.cpp:257
-
stdAc::state_t toCommon(void) const
Convert the A/C state to it's common stdAc::state_t equivalent.
Definition: ir_Carrier.cpp:513
-
IRCarrierAc64(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Carrier.cpp:226
-
uint8_t Fan
Definition: ir_Carrier.h:40
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t OnTimer
Definition: ir_Carrier.h:56
-
uint8_t OffTimerEnable
Definition: ir_Carrier.h:49
-
const uint8_t kCarrierAc64Heat
Definition: ir_Carrier.h:68
- -
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
void _cancelOnTimer(void)
Clear the On Timer enable bit.
Definition: ir_Carrier.cpp:430
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Carrier.cpp:262
-
const uint8_t kCarrierAc64Cool
Definition: ir_Carrier.h:69
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Carrier.cpp:349
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint16_t getOffTimer(void) const
Get the current Off Timer time.
Definition: ir_Carrier.cpp:466
-
void setTemp(const uint8_t temp)
Set the temp in deg C.
Definition: ir_Carrier.cpp:285
-
void send(const uint16_t repeat=kCarrierAc64MinRepeat)
Send the current internal state as an IR message.
Definition: ir_Carrier.cpp:267
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Carrier.cpp:375
-
void setOffTimer(const uint16_t nr_of_mins)
Set the Off Timer time.
Definition: ir_Carrier.cpp:477
-
const uint8_t kCarrierAc64TimerMax
Definition: ir_Carrier.h:77
-
const uint8_t kCarrierAc64FanHigh
Definition: ir_Carrier.h:74
- -
Native representation of a Carrier A/C message.
Definition: ir_Carrier.h:30
-
CarrierProtocol _
Definition: ir_Carrier.h:136
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Carrier.cpp:250
-
uint8_t Mode
Definition: ir_Carrier.h:39
-
const uint8_t kCarrierAc64FanMedium
Definition: ir_Carrier.h:73
-
const uint8_t kCarrierAc64MaxTemp
Definition: ir_Carrier.h:76
-
Class for handling detailed Carrier 64 bit A/C messages.
Definition: ir_Carrier.h:84
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Carrier.cpp:317
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Carrier.h:130
-
void stateReset()
Reset the internal state to a fixed known good state.
Definition: ir_Carrier.cpp:232
-
void off(void)
Change the power setting to Off.
Definition: ir_Carrier.cpp:313
-
uint8_t OffTimer
Definition: ir_Carrier.h:59
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Carrier.cpp:237
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Carrier.h:96
-
uint8_t Sum
Definition: ir_Carrier.h:38
-
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Carrier.cpp:281
-
uint8_t Power
Definition: ir_Carrier.h:48
-
bool getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Carrier.cpp:406
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Carrier.cpp:305
-
const uint8_t kCarrierAc64Fan
Definition: ir_Carrier.h:70
-
const uint8_t kCarrierAc64ChecksumSize
Definition: ir_Carrier.h:67
-
uint8_t SwingV
Definition: ir_Carrier.h:44
-
void setOnTimer(const uint16_t nr_of_mins)
Set the On Timer time.
Definition: ir_Carrier.cpp:448
-
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Carrier.cpp:274
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Carrier.cpp:338
-
const uint16_t kCarrierAc64MinRepeat
Definition: IRremoteESP8266.h:928
-
const uint8_t kCarrierAc64FanLow
Definition: ir_Carrier.h:72
-
const uint8_t kCarrierAc64FanAuto
Definition: ir_Carrier.h:71
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Carrier.cpp:389
-
uint64_t raw
The state of the IR remote.
Definition: ir_Carrier.h:31
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Carrier.cpp:365
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Carrier.cpp:323
-
void setSwingV(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Carrier.cpp:400
-
void setSleep(const bool on)
Set the Sleep mode of the A/C.
Definition: ir_Carrier.cpp:412
-
void _cancelOffTimer(void)
Clear the Off Timer enable bit.
Definition: ir_Carrier.cpp:459
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Carrier.cpp:490
-
bool getSleep(void) const
Get the Sleep mode of the A/C.
Definition: ir_Carrier.cpp:425
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t Temp
Definition: ir_Carrier.h:42
-
uint8_t OnTimerEnable
Definition: ir_Carrier.h:50
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Carrier.cpp:359
-
uint16_t getOnTimer(void) const
Get the current On Timer time.
Definition: ir_Carrier.cpp:437
-
const uint8_t kCarrierAc64ChecksumOffset
Definition: ir_Carrier.h:66
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8cpp.html deleted file mode 100644 index d09e7f0cf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8cpp.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Coolix.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Coolix.cpp File Reference
-
-
- -

Coolix A/C / heatpump. -More...

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

-Variables

const uint16_t kCoolixTick = 276
 
const uint16_t kCoolixBitMarkTicks = 2
 
const uint16_t kCoolixBitMark = kCoolixBitMarkTicks * kCoolixTick
 
const uint16_t kCoolixOneSpaceTicks = 6
 
const uint16_t kCoolixOneSpace = kCoolixOneSpaceTicks * kCoolixTick
 
const uint16_t kCoolixZeroSpaceTicks = 2
 
const uint16_t kCoolixZeroSpace = kCoolixZeroSpaceTicks * kCoolixTick
 
const uint16_t kCoolixHdrMarkTicks = 17
 
const uint16_t kCoolixHdrMark = kCoolixHdrMarkTicks * kCoolixTick
 
const uint16_t kCoolixHdrSpaceTicks = 16
 
const uint16_t kCoolixHdrSpace = kCoolixHdrSpaceTicks * kCoolixTick
 
const uint16_t kCoolixMinGapTicks = kCoolixHdrMarkTicks + kCoolixZeroSpaceTicks
 
const uint16_t kCoolixMinGap = kCoolixMinGapTicks * kCoolixTick
 
-

Detailed Description

-

Variable Documentation

- -

◆ kCoolixBitMark

- -
-
- - - - -
const uint16_t kCoolixBitMark = kCoolixBitMarkTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixBitMarkTicks

- -
-
- - - - -
const uint16_t kCoolixBitMarkTicks = 2
-
- -
-
- -

◆ kCoolixHdrMark

- -
-
- - - - -
const uint16_t kCoolixHdrMark = kCoolixHdrMarkTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixHdrMarkTicks

- -
-
- - - - -
const uint16_t kCoolixHdrMarkTicks = 17
-
- -
-
- -

◆ kCoolixHdrSpace

- -
-
- - - - -
const uint16_t kCoolixHdrSpace = kCoolixHdrSpaceTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixHdrSpaceTicks

- -
-
- - - - -
const uint16_t kCoolixHdrSpaceTicks = 16
-
- -
-
- -

◆ kCoolixMinGap

- -
-
- - - - -
const uint16_t kCoolixMinGap = kCoolixMinGapTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixMinGapTicks

- -
-
- - - - -
const uint16_t kCoolixMinGapTicks = kCoolixHdrMarkTicks + kCoolixZeroSpaceTicks
-
- -
-
- -

◆ kCoolixOneSpace

- -
-
- - - - -
const uint16_t kCoolixOneSpace = kCoolixOneSpaceTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixOneSpaceTicks

- -
-
- - - - -
const uint16_t kCoolixOneSpaceTicks = 6
-
- -
-
- -

◆ kCoolixTick

- -
-
- - - - -
const uint16_t kCoolixTick = 276
-
- -
-
- -

◆ kCoolixZeroSpace

- -
-
- - - - -
const uint16_t kCoolixZeroSpace = kCoolixZeroSpaceTicks * kCoolixTick
-
- -
-
- -

◆ kCoolixZeroSpaceTicks

- -
-
- - - - -
const uint16_t kCoolixZeroSpaceTicks = 2
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h.html deleted file mode 100644 index 8ff8028f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h.html +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Coolix.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Coolix.h File Reference
-
-
- -

Support for Coolix A/C protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  CoolixProtocol
 Native representation of a Coolix A/C message. More...
 
class  IRCoolixAC
 Class for handling detailed Coolix A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kCoolixCool = 0b000
 
const uint8_t kCoolixDry = 0b001
 
const uint8_t kCoolixAuto = 0b010
 
const uint8_t kCoolixHeat = 0b011
 
const uint8_t kCoolixFan = 0b100
 
const uint8_t kCoolixFanMin = 0b100
 
const uint8_t kCoolixFanMed = 0b010
 
const uint8_t kCoolixFanMax = 0b001
 
const uint8_t kCoolixFanAuto = 0b101
 
const uint8_t kCoolixFanAuto0 = 0b000
 
const uint8_t kCoolixFanZoneFollow = 0b110
 
const uint8_t kCoolixFanFixed = 0b111
 
const uint8_t kCoolixTempMin = 17
 
const uint8_t kCoolixTempMax = 30
 
const uint8_t kCoolixTempRange = kCoolixTempMax - kCoolixTempMin + 1
 
const uint8_t kCoolixFanTempCode = 0b1110
 
const uint8_t kCoolixTempMap [kCoolixTempRange]
 
const uint8_t kCoolixSensorTempMax = 30
 
const uint8_t kCoolixSensorTempIgnoreCode = 0b11111
 
const uint32_t kCoolixOff = 0b101100100111101111100000
 
const uint32_t kCoolixSwing = 0b101100100110101111100000
 
const uint32_t kCoolixSwingH = 0b101100101111010110100010
 
const uint32_t kCoolixSwingV = 0b101100100000111111100000
 
const uint32_t kCoolixSleep = 0b101100101110000000000011
 
const uint32_t kCoolixTurbo = 0b101101011111010110100010
 
const uint32_t kCoolixLed = 0b101101011111010110100101
 
const uint32_t kCoolixClean = 0b101101011111010110101010
 
const uint32_t kCoolixCmdFan = 0b101100101011111111100100
 
const uint32_t kCoolixDefaultState = 0b101100100001111111001000
 
-

Detailed Description

-

Support for Coolix A/C protocols.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/484
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/1318
-
Note
Kudos: Hamper: For the breakdown and mapping of the bit values. fraschizzato: For additional ZoneFollow & SwingVStep analysis.
-

Variable Documentation

- -

◆ kCoolixAuto

- -
-
- - - - -
const uint8_t kCoolixAuto = 0b010
-
- -
-
- -

◆ kCoolixClean

- -
-
- - - - -
const uint32_t kCoolixClean = 0b101101011111010110101010
-
- -
-
- -

◆ kCoolixCmdFan

- -
-
- - - - -
const uint32_t kCoolixCmdFan = 0b101100101011111111100100
-
- -
-
- -

◆ kCoolixCool

- -
-
- - - - -
const uint8_t kCoolixCool = 0b000
-
- -
-
- -

◆ kCoolixDefaultState

- -
-
- - - - -
const uint32_t kCoolixDefaultState = 0b101100100001111111001000
-
- -
-
- -

◆ kCoolixDry

- -
-
- - - - -
const uint8_t kCoolixDry = 0b001
-
- -
-
- -

◆ kCoolixFan

- -
-
- - - - -
const uint8_t kCoolixFan = 0b100
-
- -
-
- -

◆ kCoolixFanAuto

- -
-
- - - - -
const uint8_t kCoolixFanAuto = 0b101
-
- -
-
- -

◆ kCoolixFanAuto0

- -
-
- - - - -
const uint8_t kCoolixFanAuto0 = 0b000
-
- -
-
- -

◆ kCoolixFanFixed

- -
-
- - - - -
const uint8_t kCoolixFanFixed = 0b111
-
- -
-
- -

◆ kCoolixFanMax

- -
-
- - - - -
const uint8_t kCoolixFanMax = 0b001
-
- -
-
- -

◆ kCoolixFanMed

- -
-
- - - - -
const uint8_t kCoolixFanMed = 0b010
-
- -
-
- -

◆ kCoolixFanMin

- -
-
- - - - -
const uint8_t kCoolixFanMin = 0b100
-
- -
-
- -

◆ kCoolixFanTempCode

- -
-
- - - - -
const uint8_t kCoolixFanTempCode = 0b1110
-
- -
-
- -

◆ kCoolixFanZoneFollow

- -
-
- - - - -
const uint8_t kCoolixFanZoneFollow = 0b110
-
- -
-
- -

◆ kCoolixHeat

- -
-
- - - - -
const uint8_t kCoolixHeat = 0b011
-
- -
-
- -

◆ kCoolixLed

- -
-
- - - - -
const uint32_t kCoolixLed = 0b101101011111010110100101
-
- -
-
- -

◆ kCoolixOff

- -
-
- - - - -
const uint32_t kCoolixOff = 0b101100100111101111100000
-
- -
-
- -

◆ kCoolixSensorTempIgnoreCode

- -
-
- - - - -
const uint8_t kCoolixSensorTempIgnoreCode = 0b11111
-
- -
-
- -

◆ kCoolixSensorTempMax

- -
-
- - - - -
const uint8_t kCoolixSensorTempMax = 30
-
- -
-
- -

◆ kCoolixSleep

- -
-
- - - - -
const uint32_t kCoolixSleep = 0b101100101110000000000011
-
- -
-
- -

◆ kCoolixSwing

- -
-
- - - - -
const uint32_t kCoolixSwing = 0b101100100110101111100000
-
- -
-
- -

◆ kCoolixSwingH

- -
-
- - - - -
const uint32_t kCoolixSwingH = 0b101100101111010110100010
-
- -
-
- -

◆ kCoolixSwingV

- -
-
- - - - -
const uint32_t kCoolixSwingV = 0b101100100000111111100000
-
- -
-
- -

◆ kCoolixTempMap

- -
-
- - - - -
const uint8_t kCoolixTempMap[kCoolixTempRange]
-
-Initial value:
= {
-
0b0000,
-
0b0001,
-
0b0011,
-
0b0010,
-
0b0110,
-
0b0111,
-
0b0101,
-
0b0100,
-
0b1100,
-
0b1101,
-
0b1001,
-
0b1000,
-
0b1010,
-
0b1011
-
}
-
-
-
- -

◆ kCoolixTempMax

- -
-
- - - - -
const uint8_t kCoolixTempMax = 30
-
- -
-
- -

◆ kCoolixTempMin

- -
-
- - - - -
const uint8_t kCoolixTempMin = 17
-
- -
-
- -

◆ kCoolixTempRange

- -
-
- - - - -
const uint8_t kCoolixTempRange = kCoolixTempMax - kCoolixTempMin + 1
-
- -
-
- -

◆ kCoolixTurbo

- -
-
- - - - -
const uint32_t kCoolixTurbo = 0b101101011111010110100010
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h_source.html deleted file mode 100644 index f67f98baa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Coolix_8h_source.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Coolix.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Coolix.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 David Conran
-
9 
-
10 // Supports:
-
11 // Brand: Beko, Model: RG57K7(B)/BGEF Remote
-
12 // Brand: Beko, Model: BINR 070/071 split-type A/C
-
13 // Brand: Midea, Model: RG52D/BGE Remote
-
14 // Brand: Midea, Model: MS12FU-10HRDN1-QRD0GW(B) A/C
-
15 // Brand: Midea, Model: MSABAU-07HRFN1-QRD0GW A/C (circa 2016)
-
16 // Brand: Tokio, Model: AATOEMF17-12CHR1SW split-type RG51|50/BGE Remote
-
17 // Brand: Airwell, Model: RC08B remote
-
18 // Brand: Kastron, Model: RG57A7/BGEF Inverter remote
-
19 // Brand: Kaysun, Model: Casual CF A/C
-
20 
-
21 #ifndef IR_COOLIX_H_
-
22 #define IR_COOLIX_H_
-
23 
-
24 #define __STDC_LIMIT_MACROS
-
25 #include <stdint.h>
-
26 #ifndef UNIT_TEST
-
27 #include <Arduino.h>
-
28 #endif
-
29 #include "IRremoteESP8266.h"
-
30 #include "IRsend.h"
-
31 #ifdef UNIT_TEST
-
32 #include "IRsend_test.h"
-
33 #endif
-
34 
-
35 // Constants
-
36 // Modes
-
37 const uint8_t kCoolixCool = 0b000;
-
38 const uint8_t kCoolixDry = 0b001;
-
39 const uint8_t kCoolixAuto = 0b010;
-
40 const uint8_t kCoolixHeat = 0b011;
-
41 const uint8_t kCoolixFan = 0b100; // Synthetic.
-
42 // const uint32_t kCoolixModeMask = 0b000000000000000000001100; // 0xC
-
43 // const uint32_t kCoolixZoneFollowMask = 0b000010000000000000000010 0x80002
-
44 // Fan Control
-
45 const uint8_t kCoolixFanMin = 0b100;
-
46 const uint8_t kCoolixFanMed = 0b010;
-
47 const uint8_t kCoolixFanMax = 0b001;
-
48 const uint8_t kCoolixFanAuto = 0b101;
-
49 const uint8_t kCoolixFanAuto0 = 0b000;
-
50 const uint8_t kCoolixFanZoneFollow = 0b110;
-
51 const uint8_t kCoolixFanFixed = 0b111;
-
52 // Temperature
-
53 const uint8_t kCoolixTempMin = 17; // Celsius
-
54 const uint8_t kCoolixTempMax = 30; // Celsius
- -
56 const uint8_t kCoolixFanTempCode = 0b1110; // Part of Fan Mode.
-
57 const uint8_t kCoolixTempMap[kCoolixTempRange] = {
-
58  0b0000, // 17C
-
59  0b0001, // 18c
-
60  0b0011, // 19C
-
61  0b0010, // 20C
-
62  0b0110, // 21C
-
63  0b0111, // 22C
-
64  0b0101, // 23C
-
65  0b0100, // 24C
-
66  0b1100, // 25C
-
67  0b1101, // 26C
-
68  0b1001, // 27C
-
69  0b1000, // 28C
-
70  0b1010, // 29C
-
71  0b1011 // 30C
-
72 };
-
73 const uint8_t kCoolixSensorTempMax = 30; // Celsius
-
74 const uint8_t kCoolixSensorTempIgnoreCode = 0b11111; // 0x1F / 31 (DEC)
-
75 // kCoolixSensorTempMask = 0b000000000000111100000000; // 0xF00
-
76 // Fixed states/messages.
-
77 const uint32_t kCoolixOff = 0b101100100111101111100000; // 0xB27BE0
-
78 const uint32_t kCoolixSwing = 0b101100100110101111100000; // 0xB26BE0
-
79 const uint32_t kCoolixSwingH = 0b101100101111010110100010; // 0xB5F5A2
-
80 const uint32_t kCoolixSwingV = 0b101100100000111111100000; // 0xB20FE0
-
81 const uint32_t kCoolixSleep = 0b101100101110000000000011; // 0xB2E003
-
82 const uint32_t kCoolixTurbo = 0b101101011111010110100010; // 0xB5F5A2
-
83 const uint32_t kCoolixLed = 0b101101011111010110100101; // 0xB5F5A5
-
84 const uint32_t kCoolixClean = 0b101101011111010110101010; // 0xB5F5AA
-
85 const uint32_t kCoolixCmdFan = 0b101100101011111111100100; // 0xB2BFE4
-
86 // On, 25C, Mode: Auto, Fan: Auto, Zone Follow: Off, Sensor Temp: Ignore.
-
87 const uint32_t kCoolixDefaultState = 0b101100100001111111001000; // 0xB21FC8
-
88 
- -
91  uint32_t raw;
-
92  struct { // Only 24 bits are used.
-
93  // Byte
-
94  uint32_t :1; // Unknown
-
95  uint32_t ZoneFollow1:1;
-
96  uint32_t Mode :2;
-
97  uint32_t Temp :4;
-
98  // Byte
-
99  uint32_t SensorTemp :5;
-
100  uint32_t Fan :3;
-
101  // Byte
-
102  uint32_t :3; // Unknown
-
103  uint32_t ZoneFollow2:1;
-
104  uint32_t :4;
-
105  };
-
106 };
-
107 
-
108 // Classes
-
109 
-
112 class IRCoolixAC {
-
113  public:
-
114  explicit IRCoolixAC(const uint16_t pin, const bool inverted = false,
-
115  const bool use_modulation = true);
-
116  void stateReset(void);
-
117 #if SEND_COOLIX
-
118  void send(const uint16_t repeat = kCoolixDefaultRepeat);
-
123  int8_t calibrate(void) { return _irsend.calibrate(); }
-
124 #endif // SEND_COOLIX
-
125  void begin(void);
-
126  void on(void);
-
127  void off(void);
-
128  void setPower(const bool on);
-
129  bool getPower(void) const;
-
130  void setTemp(const uint8_t temp);
-
131  uint8_t getTemp(void) const;
-
132  void setSensorTemp(const uint8_t temp);
-
133  uint8_t getSensorTemp(void) const;
-
134  void clearSensorTemp(void);
-
135  void setFan(const uint8_t speed, const bool modecheck = true);
-
136  uint8_t getFan(void) const;
-
137  void setMode(const uint8_t mode);
-
138  uint8_t getMode(void) const;
-
139  void setSwing(void);
-
140  bool getSwing(void) const;
-
141  void setSwingVStep(void);
-
142  bool getSwingVStep(void) const;
-
143  void setSleep(void);
-
144  bool getSleep(void) const;
-
145  void setTurbo(void);
-
146  bool getTurbo(void) const;
-
147  void setLed(void);
-
148  bool getLed(void) const;
-
149  void setClean(void);
-
150  bool getClean(void) const;
-
151  bool getZoneFollow(void) const;
-
152  uint32_t getRaw(void) const;
-
153  void setRaw(const uint32_t new_code);
-
154  static uint8_t convertMode(const stdAc::opmode_t mode);
-
155  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
156  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
157  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
158  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
159  String toString(void) const;
-
160 #ifndef UNIT_TEST
-
161 
-
162  private:
- -
164 #else
-
165  IRsendTest _irsend;
-
167 #endif
- - -
171 
-
172  // Internal State settings
-
173  bool powerFlag;
-
174  bool turboFlag;
-
175  bool ledFlag;
-
176  bool cleanFlag;
-
177  bool sleepFlag;
-
178  bool swingFlag;
-
179  uint8_t savedFan;
-
180 
-
181  void setTempRaw(const uint8_t code);
-
182  uint8_t getTempRaw(void) const;
-
183  void setSensorTempRaw(const uint8_t code);
-
184  void setZoneFollow(const bool on);
-
185  bool isSpecialState(void) const;
-
186  bool handleSpecialState(const uint32_t data);
-
187  void updateAndSaveState(const uint32_t raw_state);
-
188  void recoverSavedState(void);
-
189  uint32_t getNormalState(void);
-
190 };
-
191 
-
192 #endif // IR_COOLIX_H_
-
-
bool getSwing(void) const
Get the Swing setting of the A/C.
Definition: ir_Coolix.cpp:280
-
const uint8_t kCoolixFanZoneFollow
Definition: ir_Coolix.h:50
-
bool getClean(void) const
Get the Clean setting of the A/C.
Definition: ir_Coolix.cpp:332
-
uint32_t getNormalState(void)
-
uint8_t savedFan
Definition: ir_Coolix.h:179
-
void setTempRaw(const uint8_t code)
Set the raw (native) temperature value.
Definition: ir_Coolix.cpp:213
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Coolix.cpp:400
-
void setSensorTempRaw(const uint8_t code)
Set the raw (native) sensor temperature value.
Definition: ir_Coolix.cpp:240
-
const uint8_t kCoolixFanMin
Definition: ir_Coolix.h:45
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Coolix.h:123
-
void setZoneFollow(const bool on)
Change the Zone Follow setting.
Definition: ir_Coolix.cpp:349
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Coolix.cpp:363
-
const uint32_t kCoolixSwingH
Definition: ir_Coolix.h:79
-
uint32_t getRaw(void) const
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Coolix.cpp:124
-
void send(const uint16_t repeat=kCoolixDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Coolix.cpp:109
-
void clearSensorTemp(void)
Clear the Sensor Temperature setting..
Definition: ir_Coolix.cpp:356
-
void on(void)
Change the power setting to On.
Definition: ir_Coolix.cpp:273
-
const uint8_t kCoolixFanAuto0
Definition: ir_Coolix.h:49
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kCoolixDry
Definition: ir_Coolix.h:38
-
bool getLed(void) const
Get the Led (light) setting of the A/C.
Definition: ir_Coolix.cpp:321
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Coolix.cpp:310
-
const uint8_t kCoolixFanMed
Definition: ir_Coolix.h:46
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Coolix.h:163
-
bool turboFlag
Definition: ir_Coolix.h:174
- -
bool ledFlag
Definition: ir_Coolix.h:175
-
const uint32_t kCoolixSwing
Definition: ir_Coolix.h:78
-
void setLed(void)
Toggle the Led (light) mode of the A/C.
Definition: ir_Coolix.cpp:324
-
const uint8_t kCoolixCool
Definition: ir_Coolix.h:37
-
const uint8_t kCoolixAuto
Definition: ir_Coolix.h:39
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
bool cleanFlag
Definition: ir_Coolix.h:176
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Coolix.cpp:485
-
Native representation of a Coolix A/C message.
Definition: ir_Coolix.h:90
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kCoolixHeat
Definition: ir_Coolix.h:40
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Coolix.cpp:445
-
const uint32_t kCoolixOff
Definition: ir_Coolix.h:77
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void recoverSavedState(void)
Restore the current internal state from backup as long as it isn't a special state.
Definition: ir_Coolix.cpp:202
-
const uint8_t kCoolixFanTempCode
Definition: ir_Coolix.h:56
-
void setSensorTemp(const uint8_t temp)
Set the sensor temperature.
Definition: ir_Coolix.cpp:246
-
void setTurbo(void)
Toggle the Turbo mode of the A/C.
Definition: ir_Coolix.cpp:313
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Coolix.cpp:230
-
void off(void)
Change the power setting to Off.
Definition: ir_Coolix.cpp:276
- -
uint32_t Fan
Fan speed.
Definition: ir_Coolix.h:100
-
const uint8_t kCoolixTempMap[kCoolixTempRange]
Definition: ir_Coolix.h:57
-
const uint32_t kCoolixClean
Definition: ir_Coolix.h:84
-
CoolixProtocol _
The state of the IR remote in IR code form.
Definition: ir_Coolix.h:169
-
const uint8_t kCoolixFanFixed
Definition: ir_Coolix.h:51
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Coolix.cpp:91
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Coolix.cpp:300
-
const uint32_t kCoolixDefaultState
Definition: ir_Coolix.h:87
-
uint32_t SensorTemp
The temperature sensor in the IR remote.
Definition: ir_Coolix.h:99
-
const uint16_t kCoolixDefaultRepeat
Definition: IRremoteESP8266.h:922
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Coolix.cpp:458
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Coolix.cpp:472
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Coolix.cpp:221
-
void setSwingVStep(void)
Set the Vertical Swing Step setting of the A/C.
Definition: ir_Coolix.cpp:294
-
uint8_t getSensorTemp(void) const
Get the sensor temperature setting.
Definition: ir_Coolix.cpp:253
-
Class for handling detailed Coolix A/C messages.
Definition: ir_Coolix.h:112
-
uint8_t getTempRaw(void) const
Get the raw (native) temperature value.
Definition: ir_Coolix.cpp:217
-
bool getZoneFollow(void) const
Get the Zone Follow setting of the A/C.
Definition: ir_Coolix.cpp:342
-
CoolixProtocol _saved
Copy of the state if we required a special mode.
Definition: ir_Coolix.h:170
-
void setClean(void)
Toggle the Clean mode of the A/C.
Definition: ir_Coolix.cpp:335
-
const uint32_t kCoolixLed
Definition: ir_Coolix.h:83
-
void setSwing(void)
Toggle the Swing mode of the A/C.
Definition: ir_Coolix.cpp:283
-
void setRaw(const uint32_t new_code)
Set the internal state from a valid code for this protocol.
Definition: ir_Coolix.cpp:128
-
uint32_t Mode
Operation mode.
Definition: ir_Coolix.h:96
-
const uint32_t kCoolixCmdFan
Definition: ir_Coolix.h:85
-
uint32_t raw
The state in IR code form.
Definition: ir_Coolix.h:91
-
const uint8_t kCoolixTempMax
Definition: ir_Coolix.h:54
-
bool swingFlag
Definition: ir_Coolix.h:178
-
const uint8_t kCoolixFan
Definition: ir_Coolix.h:41
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Coolix.cpp:104
-
const uint32_t kCoolixSwingV
Definition: ir_Coolix.h:80
-
void updateAndSaveState(const uint32_t raw_state)
Backup the current internal state as long as it isn't a special state and set the new state.
Definition: ir_Coolix.cpp:195
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Coolix.cpp:391
-
bool sleepFlag
Definition: ir_Coolix.h:177
-
const uint32_t kCoolixSleep
Definition: ir_Coolix.h:81
-
uint32_t ZoneFollow2
Additional control bit for Zone Follow mode.
Definition: ir_Coolix.h:103
-
IRCoolixAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Coolix.cpp:86
-
bool isSpecialState(void) const
Is the current state is a special state?
Definition: ir_Coolix.cpp:144
-
const uint8_t kCoolixTempRange
Definition: ir_Coolix.h:55
-
const uint8_t kCoolixTempMin
Definition: ir_Coolix.h:53
-
void setSleep(void)
Toggle the Sleep mode of the A/C.
Definition: ir_Coolix.cpp:303
-
const uint8_t kCoolixSensorTempMax
Definition: ir_Coolix.h:73
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the A/C state to it's common stdAc::state_t equivalent.
Definition: ir_Coolix.cpp:497
-
const uint8_t kCoolixFanMax
Definition: ir_Coolix.h:47
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Coolix.cpp:258
-
const uint8_t kCoolixFanAuto
Definition: ir_Coolix.h:48
-
bool powerFlag
Definition: ir_Coolix.h:173
-
uint32_t Temp
Desired temperature (Celsius)
Definition: ir_Coolix.h:97
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Coolix.cpp:556
-
uint32_t ZoneFollow1
Control bit for Zone Follow mode.
Definition: ir_Coolix.h:95
-
bool getSwingVStep(void) const
Get the Vertical Swing Step setting of the A/C.
Definition: ir_Coolix.cpp:291
-
void setFan(const uint8_t speed, const bool modecheck=true)
Set the speed of the fan.
Definition: ir_Coolix.cpp:405
-
bool handleSpecialState(const uint32_t data)
Adjust any internal settings based on the type of special state we are supplied. Does nothing if it i...
Definition: ir_Coolix.cpp:164
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kCoolixSensorTempIgnoreCode
Definition: ir_Coolix.h:74
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Coolix.cpp:262
-
const uint32_t kCoolixTurbo
Definition: ir_Coolix.h:82
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8cpp.html deleted file mode 100644 index ba795e56d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8cpp.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Corona.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Corona.cpp File Reference
-
-
- -

Corona A/C protocol. -More...

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

-Variables

const uint16_t kCoronaAcHdrMark = 3500
 
const uint16_t kCoronaAcHdrSpace = 1680
 
const uint16_t kCoronaAcBitMark = 450
 
const uint16_t kCoronaAcOneSpace = 1270
 
const uint16_t kCoronaAcZeroSpace = 420
 
const uint16_t kCoronaAcSpaceGap = 10800
 
const uint16_t kCoronaAcFreq = 38000
 
const uint16_t kCoronaAcOverheadShort = 3
 
const uint16_t kCoronaAcOverhead = 11
 
const uint8_t kCoronaTolerance = 5
 
-

Detailed Description

-

Corona A/C protocol.

-
Note
Unsupported:
    -
  • Auto/Max button press (special format)
  • -
-
-

Variable Documentation

- -

◆ kCoronaAcBitMark

- -
-
- - - - -
const uint16_t kCoronaAcBitMark = 450
-
- -
-
- -

◆ kCoronaAcFreq

- -
-
- - - - -
const uint16_t kCoronaAcFreq = 38000
-
- -
-
- -

◆ kCoronaAcHdrMark

- -
-
- - - - -
const uint16_t kCoronaAcHdrMark = 3500
-
- -
-
- -

◆ kCoronaAcHdrSpace

- -
-
- - - - -
const uint16_t kCoronaAcHdrSpace = 1680
-
- -
-
- -

◆ kCoronaAcOneSpace

- -
-
- - - - -
const uint16_t kCoronaAcOneSpace = 1270
-
- -
-
- -

◆ kCoronaAcOverhead

- -
-
- - - - -
const uint16_t kCoronaAcOverhead = 11
-
- -
-
- -

◆ kCoronaAcOverheadShort

- -
-
- - - - -
const uint16_t kCoronaAcOverheadShort = 3
-
- -
-
- -

◆ kCoronaAcSpaceGap

- -
-
- - - - -
const uint16_t kCoronaAcSpaceGap = 10800
-
- -
-
- -

◆ kCoronaAcZeroSpace

- -
-
- - - - -
const uint16_t kCoronaAcZeroSpace = 420
-
- -
-
- -

◆ kCoronaTolerance

- -
-
- - - - -
const uint8_t kCoronaTolerance = 5
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h.html deleted file mode 100644 index a10c3c048..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Corona.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Corona.h File Reference
-
-
- -

Go to the source code of this file.

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

-Classes

struct  CoronaSection
 Native representation of a section of a Corona A/C message. More...
 
union  CoronaProtocol
 Native representation of a Corona A/C message. More...
 
class  IRCoronaAc
 Class for handling detailed Corona A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kCoronaAcSections = 3
 
const uint8_t kCoronaAcSectionBytes = 7
 
const uint8_t kCoronaAcSectionHeader0 = 0x28
 
const uint8_t kCoronaAcSectionHeader1 = 0x61
 
const uint8_t kCoronaAcSectionLabelBase = 0x0D
 
const uint8_t kCoronaAcSectionData0Base = 0x10
 
const uint8_t kCoronaAcFanAuto = 0b00
 
const uint8_t kCoronaAcFanLow = 0b01
 
const uint8_t kCoronaAcFanMedium = 0b10
 
const uint8_t kCoronaAcFanHigh = 0b11
 
const uint8_t kCoronaAcMinTemp = 17
 
const uint8_t kCoronaAcMaxTemp = 30
 
const uint8_t kCoronaAcModeHeat = 0b00
 
const uint8_t kCoronaAcModeDry = 0b01
 
const uint8_t kCoronaAcModeCool = 0b10
 
const uint8_t kCoronaAcModeFan = 0b11
 
const uint8_t kCoronaAcSettingsSection = 0
 
const uint8_t kCoronaAcOnTimerSection = 1
 
const uint8_t kCoronaAcOffTimerSection = 2
 
const uint16_t kCoronaAcTimerMax = 12 * 60
 
const uint16_t kCoronaAcTimerOff = 0xffff
 
const uint16_t kCoronaAcTimerUnitsPerMin = 30
 
-

Variable Documentation

- -

◆ kCoronaAcFanAuto

- -
-
- - - - -
const uint8_t kCoronaAcFanAuto = 0b00
-
- -
-
- -

◆ kCoronaAcFanHigh

- -
-
- - - - -
const uint8_t kCoronaAcFanHigh = 0b11
-
- -
-
- -

◆ kCoronaAcFanLow

- -
-
- - - - -
const uint8_t kCoronaAcFanLow = 0b01
-
- -
-
- -

◆ kCoronaAcFanMedium

- -
-
- - - - -
const uint8_t kCoronaAcFanMedium = 0b10
-
- -
-
- -

◆ kCoronaAcMaxTemp

- -
-
- - - - -
const uint8_t kCoronaAcMaxTemp = 30
-
- -
-
- -

◆ kCoronaAcMinTemp

- -
-
- - - - -
const uint8_t kCoronaAcMinTemp = 17
-
- -
-
- -

◆ kCoronaAcModeCool

- -
-
- - - - -
const uint8_t kCoronaAcModeCool = 0b10
-
- -
-
- -

◆ kCoronaAcModeDry

- -
-
- - - - -
const uint8_t kCoronaAcModeDry = 0b01
-
- -
-
- -

◆ kCoronaAcModeFan

- -
-
- - - - -
const uint8_t kCoronaAcModeFan = 0b11
-
- -
-
- -

◆ kCoronaAcModeHeat

- -
-
- - - - -
const uint8_t kCoronaAcModeHeat = 0b00
-
- -
-
- -

◆ kCoronaAcOffTimerSection

- -
-
- - - - -
const uint8_t kCoronaAcOffTimerSection = 2
-
- -
-
- -

◆ kCoronaAcOnTimerSection

- -
-
- - - - -
const uint8_t kCoronaAcOnTimerSection = 1
-
- -
-
- -

◆ kCoronaAcSectionBytes

- -
-
- - - - -
const uint8_t kCoronaAcSectionBytes = 7
-
- -
-
- -

◆ kCoronaAcSectionData0Base

- -
-
- - - - -
const uint8_t kCoronaAcSectionData0Base = 0x10
-
- -
-
- -

◆ kCoronaAcSectionHeader0

- -
-
- - - - -
const uint8_t kCoronaAcSectionHeader0 = 0x28
-
- -
-
- -

◆ kCoronaAcSectionHeader1

- -
-
- - - - -
const uint8_t kCoronaAcSectionHeader1 = 0x61
-
- -
-
- -

◆ kCoronaAcSectionLabelBase

- -
-
- - - - -
const uint8_t kCoronaAcSectionLabelBase = 0x0D
-
- -
-
- -

◆ kCoronaAcSections

- -
-
- - - - -
const uint8_t kCoronaAcSections = 3
-
- -
-
- -

◆ kCoronaAcSettingsSection

- -
-
- - - - -
const uint8_t kCoronaAcSettingsSection = 0
-
- -
-
- -

◆ kCoronaAcTimerMax

- -
-
- - - - -
const uint16_t kCoronaAcTimerMax = 12 * 60
-
- -
-
- -

◆ kCoronaAcTimerOff

- -
-
- - - - -
const uint16_t kCoronaAcTimerOff = 0xffff
-
- -
-
- -

◆ kCoronaAcTimerUnitsPerMin

- -
-
- - - - -
const uint16_t kCoronaAcTimerUnitsPerMin = 30
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h_source.html deleted file mode 100644 index 1274cad4e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Corona_8h_source.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Corona.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Corona.h
-
-
-Go to the documentation of this file.
1 // Corona A/C
-
2 //
-
3 // Copyright 2020 Christian Nilsson
-
4 
-
5 // Supports:
-
6 // Brand: Corona, Model: CSH-N2211 A/C
-
7 // Brand: Corona, Model: CSH-N2511 A/C
-
8 // Brand: Corona, Model: CSH-N2811 A/C
-
9 // Brand: Corona, Model: CSH-N4011 A/C
-
10 // Brand: Corona, Model: AR-01 remote
-
11 //
-
12 // Ref: https://docs.google.com/spreadsheets/d/1zzDEUQ52y7MZ7_xCU3pdjdqbRXOwZLsbTGvKWcicqCI/
-
13 // Ref: https://www.corona.co.jp/box/download.php?id=145060636229
-
14 
-
15 #ifndef IR_CORONA_H_
-
16 #define IR_CORONA_H_
-
17 
-
18 #define __STDC_LIMIT_MACROS
-
19 #include <stdint.h>
-
20 #ifndef UNIT_TEST
-
21 #include <Arduino.h>
-
22 #endif
-
23 #include "IRremoteESP8266.h"
-
24 #include "IRsend.h"
-
25 #ifdef UNIT_TEST
-
26 #include "IRsend_test.h"
-
27 #endif
-
28 
-
30 struct CoronaSection {
-
31  uint8_t Header0;
-
32  uint8_t Header1;
-
33  uint8_t Label;
-
34  uint8_t Data0;
-
35  uint8_t Data0Inv;
-
36  uint8_t Data1;
-
37  uint8_t Data1Inv;
-
38 };
-
39 
-
40 const uint8_t kCoronaAcSections = 3;
-
41 
- - - -
46  struct {
-
47  // Byte 0
-
48  uint8_t :8;
-
49  // Byte 1
-
50  uint8_t :8;
-
51  // Byte 2
-
52  uint8_t :8;
-
53  // Byte 3
-
54  uint8_t Fan :2;
-
55  uint8_t :1;
-
56  uint8_t Econo :1;
-
57  uint8_t :1; // always on
-
58  uint8_t :1;
-
59  uint8_t SwingVToggle :1;
-
60  uint8_t :1;
-
61  // Byte 4
-
62  uint8_t :8;
-
63  // Byte 5
-
64  uint8_t Temp :4;
-
65  uint8_t Power :1;
-
66  uint8_t PowerButton :1;
-
67  uint8_t Mode :2;
-
68  };
-
69 };
-
70 
-
71 // Constants
-
72 
-
73 // CORONA_AC
-
74 const uint8_t kCoronaAcSectionBytes = 7; // kCoronaAcStateLengthShort
-
75 const uint8_t kCoronaAcSectionHeader0 = 0x28;
-
76 const uint8_t kCoronaAcSectionHeader1 = 0x61;
-
77 const uint8_t kCoronaAcSectionLabelBase = 0x0D; // 0b1101
-
78 const uint8_t kCoronaAcSectionData0Base = 0x10; // D0 Pos 4 always on
-
79 
-
80 const uint8_t kCoronaAcFanAuto = 0b00; // 0
-
81 const uint8_t kCoronaAcFanLow = 0b01; // 1
-
82 const uint8_t kCoronaAcFanMedium = 0b10; // 2
-
83 const uint8_t kCoronaAcFanHigh = 0b11; // 3
-
84 
-
85 /* full auto mode not supported by this code yet
-
86 const uint8_t kCoronaAcAutoD0 = 0b00010100; // only combined with power save
-
87 const uint8_t kCoronaAcAutoD1 = 0b10000011; // only combined with power
-
88 */
-
89 const uint8_t kCoronaAcMinTemp = 17; // Celsius = 0b0001
-
90 const uint8_t kCoronaAcMaxTemp = 30; // Celsius = 0b1110
-
91 const uint8_t kCoronaAcModeHeat = 0b00; // 0
-
92 const uint8_t kCoronaAcModeDry = 0b01; // 1
-
93 const uint8_t kCoronaAcModeCool = 0b10; // 2
-
94 const uint8_t kCoronaAcModeFan = 0b11; // 3
-
95 
-
96 const uint8_t kCoronaAcSettingsSection = 0;
-
97 const uint8_t kCoronaAcOnTimerSection = 1;
-
98 const uint8_t kCoronaAcOffTimerSection = 2;
-
99 const uint16_t kCoronaAcTimerMax = 12 * 60; // 12H in Minutes
-
100 // Min value on remote is 1 hour, actual sent value can be 2 secs
-
101 const uint16_t kCoronaAcTimerOff = 0xffff;
-
102 const uint16_t kCoronaAcTimerUnitsPerMin = 30; // 30 units = 1 minute
-
103 
-
104 // Classes
-
105 
-
107 class IRCoronaAc {
-
108  public:
-
109  explicit IRCoronaAc(const uint16_t pin, const bool inverted = false,
-
110  const bool use_modulation = true);
-
111 
-
112  void stateReset();
-
113 #if SEND_CORONA_AC
-
114  void send(const uint16_t repeat = kNoRepeat);
-
119  int8_t calibrate(void) { return _irsend.calibrate(); }
-
120 #endif // SEND_CORONA_AC
-
121  void begin();
-
122  static bool validSection(const uint8_t state[], const uint16_t pos,
-
123  const uint8_t section);
-
124  void setPower(const bool on);
-
125  bool getPower(void) const;
-
126  bool getPowerButton(void) const;
-
127  void on(void);
-
128  void off(void);
-
129  void setTemp(const uint8_t temp);
-
130  uint8_t getTemp(void) const;
-
131  void setSwingVToggle(const bool on);
-
132  bool getSwingVToggle(void) const;
-
133  void setFan(const uint8_t speed);
-
134  uint8_t getFan(void) const;
-
135  void setMode(const uint8_t mode);
-
136  uint8_t getMode(void) const;
-
137  void setEcono(const bool on);
-
138  bool getEcono(void) const;
-
139  void setOnTimer(const uint16_t nr_of_mins);
-
140  uint16_t getOnTimer(void) const;
-
141  void setOffTimer(const uint16_t nr_of_mins);
-
142  uint16_t getOffTimer(void) const;
-
143  uint8_t* getRaw();
-
144  void setRaw(const uint8_t new_code[],
-
145  const uint16_t length = kCoronaAcStateLength);
-
146  static uint8_t convertMode(const stdAc::opmode_t mode);
-
147  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
148  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
149  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
150  stdAc::state_t toCommon(void) const;
-
151  String toString(void) const;
-
152 #ifndef UNIT_TEST
-
153 
-
154  private:
- -
156 #else
-
157  IRsendTest _irsend;
-
159 #endif
- -
162  static uint8_t getSectionByte(const uint8_t section);
-
163  static void checksum(uint8_t* data);
-
164  void setPowerButton(const bool on);
-
165  void _setTimer(const uint8_t section, const uint16_t nr_of_mins);
-
166  uint16_t _getTimer(const uint8_t section) const;
-
167 };
-
168 #endif // IR_CORONA_H_
-
-
uint8_t Header1
Definition: ir_Corona.h:32
-
const uint8_t kCoronaAcSectionBytes
Definition: ir_Corona.h:74
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Corona.cpp:346
-
void setFan(const uint8_t speed)
Set the operating speed of the A/C Fan.
Definition: ir_Corona.cpp:398
-
void setEcono(const bool on)
Change the powersave setting.
Definition: ir_Corona.cpp:407
-
void setRaw(const uint8_t new_code[], const uint16_t length=kCoronaAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Corona.cpp:282
-
const uint8_t kCoronaAcSectionLabelBase
Definition: ir_Corona.h:77
-
const uint8_t kCoronaAcModeFan
Definition: ir_Corona.h:94
-
uint8_t Data1Inv
Definition: ir_Corona.h:37
-
void setPowerButton(const bool on)
Change the power button setting.
Definition: ir_Corona.cpp:328
-
Class for handling detailed Corona A/C messages.
Definition: ir_Corona.h:107
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kCoronaAcModeDry
Definition: ir_Corona.h:92
-
const uint8_t kCoronaAcSectionData0Base
Definition: ir_Corona.h:78
-
uint8_t Power
Definition: ir_Corona.h:65
-
uint16_t getOffTimer(void) const
Get the current Off Timer time.
Definition: ir_Corona.cpp:511
-
void setPower(const bool on)
Change the power setting. (in practice Standby, remote power)
Definition: ir_Corona.cpp:304
-
void stateReset()
Reset the internal state to a fixed known good state.
Definition: ir_Corona.cpp:154
-
uint8_t getFan(void) const
Get the operating speed of the A/C Fan.
Definition: ir_Corona.cpp:392
-
stdAc::state_t toCommon(void) const
Convert the A/C state to it's common stdAc::state_t equivalent.
Definition: ir_Corona.cpp:552
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Corona.cpp:252
-
const uint8_t kCoronaAcFanMedium
Definition: ir_Corona.h:82
-
const uint16_t kCoronaAcTimerUnitsPerMin
Definition: ir_Corona.h:102
-
void setOffTimer(const uint16_t nr_of_mins)
Set the Off Timer time.
Definition: ir_Corona.cpp:518
-
const uint8_t kCoronaAcFanLow
Definition: ir_Corona.h:81
-
Native representation of a Corona A/C message.
Definition: ir_Corona.h:43
-
uint8_t Header0
Definition: ir_Corona.h:31
- -
void setTemp(const uint8_t temp)
Set the temp in deg C.
Definition: ir_Corona.cpp:288
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Corona.cpp:527
-
const uint8_t kCoronaAcSectionHeader0
Definition: ir_Corona.h:75
-
void setOnTimer(const uint16_t nr_of_mins)
Set the On Timer time.
Definition: ir_Corona.cpp:502
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a standard A/C Fan speed into its native fan speed.
Definition: ir_Corona.cpp:420
-
CoronaProtocol _
Definition: ir_Corona.h:161
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t Econo
Definition: ir_Corona.h:56
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kCoronaAcOffTimerSection
Definition: ir_Corona.h:98
-
const uint16_t kCoronaAcTimerMax
Definition: ir_Corona.h:99
-
static bool validSection(const uint8_t state[], const uint16_t pos, const uint8_t section)
Check that a CoronaAc Section part is valid with section byte and inverted.
Definition: ir_Corona.cpp:187
-
uint16_t getOnTimer(void) const
Get the current On Timer time.
Definition: ir_Corona.cpp:495
-
bool getPower(void) const
Get the current power setting. (in practice Standby, remote power)
Definition: ir_Corona.cpp:315
-
const uint8_t kCoronaAcSectionHeader1
Definition: ir_Corona.h:76
- -
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_Corona.cpp:257
-
const uint8_t kCoronaAcSections
Definition: ir_Corona.h:40
-
uint16_t _getTimer(const uint8_t section) const
Get the current Timer time.
Definition: ir_Corona.cpp:482
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
const uint8_t kCoronaAcFanHigh
Definition: ir_Corona.h:83
-
const uint16_t kCoronaAcStateLength
Definition: IRremoteESP8266.h:930
-
static void checksum(uint8_t *data)
Calculate and set the check values for the internal state.
Definition: ir_Corona.cpp:240
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Corona.cpp:369
-
uint8_t Data0
Definition: ir_Corona.h:34
-
uint8_t PowerButton
Definition: ir_Corona.h:66
-
bool getPowerButton(void) const
Get the value of the current power button setting.
Definition: ir_Corona.cpp:334
-
void off(void)
Change the power setting to Off.
Definition: ir_Corona.cpp:342
-
void _setTimer(const uint8_t section, const uint16_t nr_of_mins)
Set the Timer time.
Definition: ir_Corona.cpp:462
-
const uint8_t kCoronaAcModeCool
Definition: ir_Corona.h:93
-
const uint8_t kCoronaAcMinTemp
Definition: ir_Corona.h:89
-
uint8_t Data1
Definition: ir_Corona.h:36
-
uint8_t Temp
Definition: ir_Corona.h:64
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Corona.cpp:381
-
uint8_t getTemp(void) const
Get the current temperature from the internal state.
Definition: ir_Corona.cpp:296
-
bool getSwingVToggle(void) const
Get the Vertical Swing toggle setting.
Definition: ir_Corona.cpp:453
-
IRCoronaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor for handling detailed Corona A/C messages.
Definition: ir_Corona.cpp:148
-
uint8_t Data0Inv
Definition: ir_Corona.h:35
-
uint8_t * getRaw()
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Corona.cpp:274
-
void on(void)
Change the power setting to On.
Definition: ir_Corona.cpp:339
-
const uint8_t kCoronaAcSettingsSection
Definition: ir_Corona.h:96
-
uint8_t SwingVToggle
Definition: ir_Corona.h:59
-
uint8_t raw[kCoronaAcStateLength]
The state of the IR remote.
Definition: ir_Corona.h:44
-
CoronaSection sections[kCoronaAcSections]
Definition: ir_Corona.h:45
-
const uint8_t kCoronaAcModeHeat
Definition: ir_Corona.h:91
-
uint8_t Label
Definition: ir_Corona.h:33
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Corona.h:155
-
void setSwingVToggle(const bool on)
Set the Vertical Swing toggle setting.
Definition: ir_Corona.cpp:447
-
static uint8_t getSectionByte(const uint8_t section)
Get the byte that identifies the section.
Definition: ir_Corona.cpp:171
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Corona.cpp:352
-
Native representation of a section of a Corona A/C message.
Definition: ir_Corona.h:30
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed to it's common equivalent.
Definition: ir_Corona.cpp:434
-
bool getEcono(void) const
Get the value of the current powersave setting.
Definition: ir_Corona.cpp:413
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Corona.h:119
-
const uint16_t kCoronaAcTimerOff
Definition: ir_Corona.h:101
-
uint8_t Mode
Definition: ir_Corona.h:67
-
const uint8_t kCoronaAcOnTimerSection
Definition: ir_Corona.h:97
-
uint8_t Fan
Definition: ir_Corona.h:54
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kCoronaAcMaxTemp
Definition: ir_Corona.h:90
-
const uint8_t kCoronaAcFanAuto
Definition: ir_Corona.h:80
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8cpp.html deleted file mode 100644 index 3f6d4561f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8cpp.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Daikin.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Daikin.cpp File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h.html deleted file mode 100644 index a7131b214..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h.html +++ /dev/null @@ -1,3122 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Daikin.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Daikin.h File Reference
-
-
- -

Support for Daikin A/C protocols. -More...

- -

Go to the source code of this file.

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

-Classes

union  DaikinESPProtocol
 Native representation of a Daikin A/C message. More...
 
union  Daikin2Protocol
 Native representation of a Daikin2 A/C message. More...
 
union  Daikin216Protocol
 Native representation of a Daikin216 A/C message. More...
 
union  Daikin160Protocol
 Native representation of a Daikin160 A/C message. More...
 
union  Daikin176Protocol
 Native representation of a Daikin176 A/C message. More...
 
union  Daikin128Protocol
 Native representation of a Daikin128 A/C message. More...
 
union  Daikin152Protocol
 Native representation of a Daikin152 A/C message. More...
 
union  Daikin64Protocol
 Native representation of a Daikin64 A/C message. More...
 
class  IRDaikinESP
 Class for handling detailed Daikin 280-bit A/C messages. More...
 
class  IRDaikin2
 Class for handling detailed Daikin 312-bit A/C messages. More...
 
class  IRDaikin216
 Class for handling detailed Daikin 216-bit A/C messages. More...
 
class  IRDaikin160
 Class for handling detailed Daikin 160-bit A/C messages. More...
 
class  IRDaikin176
 Class for handling detailed Daikin 176-bit A/C messages. More...
 
class  IRDaikin128
 Class for handling detailed Daikin 128-bit A/C messages. More...
 
class  IRDaikin152
 Class for handling detailed Daikin 152-bit A/C messages. More...
 
class  IRDaikin64
 Class for handling detailed Daikin 64-bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kDaikinAuto = 0b000
 
const uint8_t kDaikinDry = 0b010
 
const uint8_t kDaikinCool = 0b011
 
const uint8_t kDaikinHeat = 0b100
 
const uint8_t kDaikinFan = 0b110
 
const uint8_t kDaikinMinTemp = 10
 
const uint8_t kDaikinMaxTemp = 32
 
const uint8_t kDaikinFanMin = 1
 
const uint8_t kDaikinFanMed = 3
 
const uint8_t kDaikinFanMax = 5
 
const uint8_t kDaikinFanAuto = 0b1010
 
const uint8_t kDaikinFanQuiet = 0b1011
 
const uint8_t kDaikinSwingOn = 0b1111
 
const uint8_t kDaikinSwingOff = 0b0000
 
const uint16_t kDaikinHeaderLength = 5
 
const uint8_t kDaikinSections = 3
 
const uint8_t kDaikinSection1Length = 8
 
const uint8_t kDaikinSection2Length = 8
 
const uint8_t kDaikinSection3Length
 
const uint8_t kDaikinByteChecksum1 = 7
 
const uint8_t kDaikinByteChecksum2 = 15
 
const uint16_t kDaikinUnusedTime = 0x600
 
const uint8_t kDaikinBeepQuiet = 1
 
const uint8_t kDaikinBeepLoud = 2
 
const uint8_t kDaikinBeepOff = 3
 
const uint8_t kDaikinLightBright = 1
 
const uint8_t kDaikinLightDim = 2
 
const uint8_t kDaikinLightOff = 3
 
const uint8_t kDaikinCurBit = kDaikinStateLength
 
const uint8_t kDaikinCurIndex = kDaikinStateLength + 1
 
const uint8_t kDaikinTolerance = 35
 
const uint16_t kDaikinMarkExcess = kMarkExcess
 
const uint16_t kDaikinHdrMark = 3650
 
const uint16_t kDaikinHdrSpace = 1623
 
const uint16_t kDaikinBitMark = 428
 
const uint16_t kDaikinZeroSpace = 428
 
const uint16_t kDaikinOneSpace = 1280
 
const uint16_t kDaikinGap = 29000
 
const uint64_t kDaikinFirstHeader64
 
const uint16_t kDaikin2Freq = 36700
 
const uint16_t kDaikin2LeaderMark = 10024
 
const uint16_t kDaikin2LeaderSpace = 25180
 
const uint16_t kDaikin2Gap = kDaikin2LeaderMark + kDaikin2LeaderSpace
 
const uint16_t kDaikin2HdrMark = 3500
 
const uint16_t kDaikin2HdrSpace = 1728
 
const uint16_t kDaikin2BitMark = 460
 
const uint16_t kDaikin2OneSpace = 1270
 
const uint16_t kDaikin2ZeroSpace = 420
 
const uint16_t kDaikin2Sections = 2
 
const uint16_t kDaikin2Section1Length = 20
 
const uint16_t kDaikin2Section2Length = 19
 
const uint8_t kDaikin2Tolerance = 5
 
const uint8_t kDaikin2SwingVHighest = 0x1
 
const uint8_t kDaikin2SwingVHigh = 0x2
 
const uint8_t kDaikin2SwingVUpperMiddle = 0x3
 
const uint8_t kDaikin2SwingVLowerMiddle = 0x4
 
const uint8_t kDaikin2SwingVLow = 0x5
 
const uint8_t kDaikin2SwingVLowest = 0x6
 
const uint8_t kDaikin2SwingVBreeze = 0xC
 
const uint8_t kDaikin2SwingVCirculate = 0xD
 
const uint8_t kDaikin2SwingVOff = 0xE
 
const uint8_t kDaikin2SwingVAuto = 0xF
 
const uint8_t kDaikin2SwingVSwing = kDaikin2SwingVAuto
 
const uint8_t kDaikin2SwingHWide = 0xA3
 
const uint8_t kDaikin2SwingHLeftMax = 0xA8
 
const uint8_t kDaikin2SwingHLeft = 0xA9
 
const uint8_t kDaikin2SwingHMiddle = 0xAA
 
const uint8_t kDaikin2SwingHRight = 0xAB
 
const uint8_t kDaikin2SwingHRightMax = 0xAC
 
const uint8_t kDaikin2SwingHAuto = 0xBE
 
const uint8_t kDaikin2SwingHOff = 0xBF
 
const uint8_t kDaikin2SwingHSwing = kDaikin2SwingHAuto
 
const uint8_t kDaikin2MinCoolTemp = 18
 
const uint16_t kDaikin216Freq = 38000
 
const uint16_t kDaikin216HdrMark = 3440
 
const uint16_t kDaikin216HdrSpace = 1750
 
const uint16_t kDaikin216BitMark = 420
 
const uint16_t kDaikin216OneSpace = 1300
 
const uint16_t kDaikin216ZeroSpace = 450
 
const uint16_t kDaikin216Gap = 29650
 
const uint16_t kDaikin216Sections = 2
 
const uint16_t kDaikin216Section1Length = 8
 
const uint16_t kDaikin216Section2Length
 
const uint8_t kDaikin216SwingOn = 0b1111
 
const uint8_t kDaikin216SwingOff = 0b0000
 
const uint16_t kDaikin160Freq = 38000
 
const uint16_t kDaikin160HdrMark = 5000
 
const uint16_t kDaikin160HdrSpace = 2145
 
const uint16_t kDaikin160BitMark = 342
 
const uint16_t kDaikin160OneSpace = 1786
 
const uint16_t kDaikin160ZeroSpace = 700
 
const uint16_t kDaikin160Gap = 29650
 
const uint16_t kDaikin160Sections = 2
 
const uint16_t kDaikin160Section1Length = 7
 
const uint16_t kDaikin160Section2Length
 
const uint8_t kDaikin160SwingVLowest = 0x1
 
const uint8_t kDaikin160SwingVLow = 0x2
 
const uint8_t kDaikin160SwingVMiddle = 0x3
 
const uint8_t kDaikin160SwingVHigh = 0x4
 
const uint8_t kDaikin160SwingVHighest = 0x5
 
const uint8_t kDaikin160SwingVAuto = 0xF
 
const uint16_t kDaikin176Freq = 38000
 
const uint16_t kDaikin176HdrMark = 5070
 
const uint16_t kDaikin176HdrSpace = 2140
 
const uint16_t kDaikin176BitMark = 370
 
const uint16_t kDaikin176OneSpace = 1780
 
const uint16_t kDaikin176ZeroSpace = 710
 
const uint16_t kDaikin176Gap = 29410
 
const uint16_t kDaikin176Sections = 2
 
const uint16_t kDaikin176Section1Length = 7
 
const uint16_t kDaikin176Section2Length
 
const uint8_t kDaikin176Fan = 0b000
 
const uint8_t kDaikin176Heat = 0b001
 
const uint8_t kDaikin176Cool = 0b010
 
const uint8_t kDaikin176Auto = 0b011
 
const uint8_t kDaikin176Dry = 0b111
 
const uint8_t kDaikin176ModeButton = 0b00000100
 
const uint8_t kDaikin176DryFanTemp = 17
 
const uint8_t kDaikin176FanMax = 3
 
const uint8_t kDaikin176SwingHAuto = 0x5
 
const uint8_t kDaikin176SwingHOff = 0x6
 
const uint16_t kDaikin128Freq = 38000
 
const uint16_t kDaikin128LeaderMark = 9800
 
const uint16_t kDaikin128LeaderSpace = 9800
 
const uint16_t kDaikin128HdrMark = 4600
 
const uint16_t kDaikin128HdrSpace = 2500
 
const uint16_t kDaikin128BitMark = 350
 
const uint16_t kDaikin128OneSpace = 954
 
const uint16_t kDaikin128ZeroSpace = 382
 
const uint16_t kDaikin128Gap = 20300
 
const uint16_t kDaikin128FooterMark = kDaikin128HdrMark
 
const uint16_t kDaikin128Sections = 2
 
const uint16_t kDaikin128SectionLength = 8
 
const uint8_t kDaikin128Dry = 0b00000001
 
const uint8_t kDaikin128Cool = 0b00000010
 
const uint8_t kDaikin128Fan = 0b00000100
 
const uint8_t kDaikin128Heat = 0b00001000
 
const uint8_t kDaikin128Auto = 0b00001010
 
const uint8_t kDaikin128FanAuto = 0b0001
 
const uint8_t kDaikin128FanHigh = 0b0010
 
const uint8_t kDaikin128FanMed = 0b0100
 
const uint8_t kDaikin128FanLow = 0b1000
 
const uint8_t kDaikin128FanPowerful = 0b0011
 
const uint8_t kDaikin128FanQuiet = 0b1001
 
const uint8_t kDaikin128MinTemp = 16
 
const uint8_t kDaikin128MaxTemp = 30
 
const uint8_t kDaikin128BitWall = 0b00001000
 
const uint8_t kDaikin128BitCeiling = 0b00000001
 
const uint16_t kDaikin152Freq = 38000
 
const uint8_t kDaikin152LeaderBits = 5
 
const uint16_t kDaikin152HdrMark = 3492
 
const uint16_t kDaikin152HdrSpace = 1718
 
const uint16_t kDaikin152BitMark = 433
 
const uint16_t kDaikin152OneSpace = 1529
 
const uint16_t kDaikin152ZeroSpace = kDaikin152BitMark
 
const uint16_t kDaikin152Gap = 25182
 
const uint8_t kDaikin152DryTemp = kDaikin2MinCoolTemp
 
const uint8_t kDaikin152FanTemp = 0x60
 
const uint16_t kDaikin64HdrMark = kDaikin128HdrMark
 
const uint16_t kDaikin64BitMark = kDaikin128BitMark
 
const uint16_t kDaikin64HdrSpace = kDaikin128HdrSpace
 
const uint16_t kDaikin64OneSpace = kDaikin128OneSpace
 
const uint16_t kDaikin64ZeroSpace = kDaikin128ZeroSpace
 
const uint16_t kDaikin64LdrMark = kDaikin128LeaderMark
 
const uint16_t kDaikin64Gap = kDaikin128Gap
 
const uint16_t kDaikin64LdrSpace = kDaikin128LeaderSpace
 
const uint16_t kDaikin64Freq = kDaikin128Freq
 
const uint8_t kDaikin64Overhead = 9
 
const int8_t kDaikin64ToleranceDelta = 5
 
const uint64_t kDaikin64KnownGoodState = 0x7C16161607204216
 
const uint8_t kDaikin64Dry = 0b001
 
const uint8_t kDaikin64Cool = 0b010
 
const uint8_t kDaikin64Fan = 0b100
 
const uint8_t kDaikin64FanAuto = 0b0001
 
const uint8_t kDaikin64FanLow = 0b1000
 
const uint8_t kDaikin64FanMed = 0b0100
 
const uint8_t kDaikin64FanHigh = 0b0010
 
const uint8_t kDaikin64FanQuiet = 0b1001
 
const uint8_t kDaikin64FanTurbo = 0b0011
 
const uint8_t kDaikin64MinTemp = 16
 
const uint8_t kDaikin64MaxTemp = 30
 
const uint8_t kDaikin64ChecksumOffset = 60
 
const uint8_t kDaikin64ChecksumSize = 4
 
-

Detailed Description

-

Variable Documentation

- -

◆ kDaikin128Auto

- -
-
- - - - -
const uint8_t kDaikin128Auto = 0b00001010
-
- -
-
- -

◆ kDaikin128BitCeiling

- -
-
- - - - -
const uint8_t kDaikin128BitCeiling = 0b00000001
-
- -
-
- -

◆ kDaikin128BitMark

- -
-
- - - - -
const uint16_t kDaikin128BitMark = 350
-
- -
-
- -

◆ kDaikin128BitWall

- -
-
- - - - -
const uint8_t kDaikin128BitWall = 0b00001000
-
- -
-
- -

◆ kDaikin128Cool

- -
-
- - - - -
const uint8_t kDaikin128Cool = 0b00000010
-
- -
-
- -

◆ kDaikin128Dry

- -
-
- - - - -
const uint8_t kDaikin128Dry = 0b00000001
-
- -
-
- -

◆ kDaikin128Fan

- -
-
- - - - -
const uint8_t kDaikin128Fan = 0b00000100
-
- -
-
- -

◆ kDaikin128FanAuto

- -
-
- - - - -
const uint8_t kDaikin128FanAuto = 0b0001
-
- -
-
- -

◆ kDaikin128FanHigh

- -
-
- - - - -
const uint8_t kDaikin128FanHigh = 0b0010
-
- -
-
- -

◆ kDaikin128FanLow

- -
-
- - - - -
const uint8_t kDaikin128FanLow = 0b1000
-
- -
-
- -

◆ kDaikin128FanMed

- -
-
- - - - -
const uint8_t kDaikin128FanMed = 0b0100
-
- -
-
- -

◆ kDaikin128FanPowerful

- -
-
- - - - -
const uint8_t kDaikin128FanPowerful = 0b0011
-
- -
-
- -

◆ kDaikin128FanQuiet

- -
-
- - - - -
const uint8_t kDaikin128FanQuiet = 0b1001
-
- -
-
- -

◆ kDaikin128FooterMark

- -
-
- - - - -
const uint16_t kDaikin128FooterMark = kDaikin128HdrMark
-
- -
-
- -

◆ kDaikin128Freq

- -
-
- - - - -
const uint16_t kDaikin128Freq = 38000
-
- -
-
- -

◆ kDaikin128Gap

- -
-
- - - - -
const uint16_t kDaikin128Gap = 20300
-
- -
-
- -

◆ kDaikin128HdrMark

- -
-
- - - - -
const uint16_t kDaikin128HdrMark = 4600
-
- -
-
- -

◆ kDaikin128HdrSpace

- -
-
- - - - -
const uint16_t kDaikin128HdrSpace = 2500
-
- -
-
- -

◆ kDaikin128Heat

- -
-
- - - - -
const uint8_t kDaikin128Heat = 0b00001000
-
- -
-
- -

◆ kDaikin128LeaderMark

- -
-
- - - - -
const uint16_t kDaikin128LeaderMark = 9800
-
- -
-
- -

◆ kDaikin128LeaderSpace

- -
-
- - - - -
const uint16_t kDaikin128LeaderSpace = 9800
-
- -
-
- -

◆ kDaikin128MaxTemp

- -
-
- - - - -
const uint8_t kDaikin128MaxTemp = 30
-
- -
-
- -

◆ kDaikin128MinTemp

- -
-
- - - - -
const uint8_t kDaikin128MinTemp = 16
-
- -
-
- -

◆ kDaikin128OneSpace

- -
-
- - - - -
const uint16_t kDaikin128OneSpace = 954
-
- -
-
- -

◆ kDaikin128SectionLength

- -
-
- - - - -
const uint16_t kDaikin128SectionLength = 8
-
- -
-
- -

◆ kDaikin128Sections

- -
-
- - - - -
const uint16_t kDaikin128Sections = 2
-
- -
-
- -

◆ kDaikin128ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin128ZeroSpace = 382
-
- -
-
- -

◆ kDaikin152BitMark

- -
-
- - - - -
const uint16_t kDaikin152BitMark = 433
-
- -
-
- -

◆ kDaikin152DryTemp

- -
-
- - - - -
const uint8_t kDaikin152DryTemp = kDaikin2MinCoolTemp
-
- -
-
- -

◆ kDaikin152FanTemp

- -
-
- - - - -
const uint8_t kDaikin152FanTemp = 0x60
-
- -
-
- -

◆ kDaikin152Freq

- -
-
- - - - -
const uint16_t kDaikin152Freq = 38000
-
- -
-
- -

◆ kDaikin152Gap

- -
-
- - - - -
const uint16_t kDaikin152Gap = 25182
-
- -
-
- -

◆ kDaikin152HdrMark

- -
-
- - - - -
const uint16_t kDaikin152HdrMark = 3492
-
- -
-
- -

◆ kDaikin152HdrSpace

- -
-
- - - - -
const uint16_t kDaikin152HdrSpace = 1718
-
- -
-
- -

◆ kDaikin152LeaderBits

- -
-
- - - - -
const uint8_t kDaikin152LeaderBits = 5
-
- -
-
- -

◆ kDaikin152OneSpace

- -
-
- - - - -
const uint16_t kDaikin152OneSpace = 1529
-
- -
-
- -

◆ kDaikin152ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin152ZeroSpace = kDaikin152BitMark
-
- -
-
- -

◆ kDaikin160BitMark

- -
-
- - - - -
const uint16_t kDaikin160BitMark = 342
-
- -
-
- -

◆ kDaikin160Freq

- -
-
- - - - -
const uint16_t kDaikin160Freq = 38000
-
- -
-
- -

◆ kDaikin160Gap

- -
-
- - - - -
const uint16_t kDaikin160Gap = 29650
-
- -
-
- -

◆ kDaikin160HdrMark

- -
-
- - - - -
const uint16_t kDaikin160HdrMark = 5000
-
- -
-
- -

◆ kDaikin160HdrSpace

- -
-
- - - - -
const uint16_t kDaikin160HdrSpace = 2145
-
- -
-
- -

◆ kDaikin160OneSpace

- -
-
- - - - -
const uint16_t kDaikin160OneSpace = 1786
-
- -
-
- -

◆ kDaikin160Section1Length

- -
-
- - - - -
const uint16_t kDaikin160Section1Length = 7
-
- -
-
- -

◆ kDaikin160Section2Length

- -
-
- - - - -
const uint16_t kDaikin160Section2Length
-
-
- -

◆ kDaikin160Sections

- -
-
- - - - -
const uint16_t kDaikin160Sections = 2
-
- -
-
- -

◆ kDaikin160SwingVAuto

- -
-
- - - - -
const uint8_t kDaikin160SwingVAuto = 0xF
-
- -
-
- -

◆ kDaikin160SwingVHigh

- -
-
- - - - -
const uint8_t kDaikin160SwingVHigh = 0x4
-
- -
-
- -

◆ kDaikin160SwingVHighest

- -
-
- - - - -
const uint8_t kDaikin160SwingVHighest = 0x5
-
- -
-
- -

◆ kDaikin160SwingVLow

- -
-
- - - - -
const uint8_t kDaikin160SwingVLow = 0x2
-
- -
-
- -

◆ kDaikin160SwingVLowest

- -
-
- - - - -
const uint8_t kDaikin160SwingVLowest = 0x1
-
- -
-
- -

◆ kDaikin160SwingVMiddle

- -
-
- - - - -
const uint8_t kDaikin160SwingVMiddle = 0x3
-
- -
-
- -

◆ kDaikin160ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin160ZeroSpace = 700
-
- -
-
- -

◆ kDaikin176Auto

- -
-
- - - - -
const uint8_t kDaikin176Auto = 0b011
-
- -
-
- -

◆ kDaikin176BitMark

- -
-
- - - - -
const uint16_t kDaikin176BitMark = 370
-
- -
-
- -

◆ kDaikin176Cool

- -
-
- - - - -
const uint8_t kDaikin176Cool = 0b010
-
- -
-
- -

◆ kDaikin176Dry

- -
-
- - - - -
const uint8_t kDaikin176Dry = 0b111
-
- -
-
- -

◆ kDaikin176DryFanTemp

- -
-
- - - - -
const uint8_t kDaikin176DryFanTemp = 17
-
- -
-
- -

◆ kDaikin176Fan

- -
-
- - - - -
const uint8_t kDaikin176Fan = 0b000
-
- -
-
- -

◆ kDaikin176FanMax

- -
-
- - - - -
const uint8_t kDaikin176FanMax = 3
-
- -
-
- -

◆ kDaikin176Freq

- -
-
- - - - -
const uint16_t kDaikin176Freq = 38000
-
- -
-
- -

◆ kDaikin176Gap

- -
-
- - - - -
const uint16_t kDaikin176Gap = 29410
-
- -
-
- -

◆ kDaikin176HdrMark

- -
-
- - - - -
const uint16_t kDaikin176HdrMark = 5070
-
- -
-
- -

◆ kDaikin176HdrSpace

- -
-
- - - - -
const uint16_t kDaikin176HdrSpace = 2140
-
- -
-
- -

◆ kDaikin176Heat

- -
-
- - - - -
const uint8_t kDaikin176Heat = 0b001
-
- -
-
- -

◆ kDaikin176ModeButton

- -
-
- - - - -
const uint8_t kDaikin176ModeButton = 0b00000100
-
- -
-
- -

◆ kDaikin176OneSpace

- -
-
- - - - -
const uint16_t kDaikin176OneSpace = 1780
-
- -
-
- -

◆ kDaikin176Section1Length

- -
-
- - - - -
const uint16_t kDaikin176Section1Length = 7
-
- -
-
- -

◆ kDaikin176Section2Length

- -
-
- - - - -
const uint16_t kDaikin176Section2Length
-
-
- -

◆ kDaikin176Sections

- -
-
- - - - -
const uint16_t kDaikin176Sections = 2
-
- -
-
- -

◆ kDaikin176SwingHAuto

- -
-
- - - - -
const uint8_t kDaikin176SwingHAuto = 0x5
-
- -
-
- -

◆ kDaikin176SwingHOff

- -
-
- - - - -
const uint8_t kDaikin176SwingHOff = 0x6
-
- -
-
- -

◆ kDaikin176ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin176ZeroSpace = 710
-
- -
-
- -

◆ kDaikin216BitMark

- -
-
- - - - -
const uint16_t kDaikin216BitMark = 420
-
- -
-
- -

◆ kDaikin216Freq

- -
-
- - - - -
const uint16_t kDaikin216Freq = 38000
-
- -
-
- -

◆ kDaikin216Gap

- -
-
- - - - -
const uint16_t kDaikin216Gap = 29650
-
- -
-
- -

◆ kDaikin216HdrMark

- -
-
- - - - -
const uint16_t kDaikin216HdrMark = 3440
-
- -
-
- -

◆ kDaikin216HdrSpace

- -
-
- - - - -
const uint16_t kDaikin216HdrSpace = 1750
-
- -
-
- -

◆ kDaikin216OneSpace

- -
-
- - - - -
const uint16_t kDaikin216OneSpace = 1300
-
- -
-
- -

◆ kDaikin216Section1Length

- -
-
- - - - -
const uint16_t kDaikin216Section1Length = 8
-
- -
-
- -

◆ kDaikin216Section2Length

- -
-
- - - - -
const uint16_t kDaikin216Section2Length
-
-
- -

◆ kDaikin216Sections

- -
-
- - - - -
const uint16_t kDaikin216Sections = 2
-
- -
-
- -

◆ kDaikin216SwingOff

- -
-
- - - - -
const uint8_t kDaikin216SwingOff = 0b0000
-
- -
-
- -

◆ kDaikin216SwingOn

- -
-
- - - - -
const uint8_t kDaikin216SwingOn = 0b1111
-
- -
-
- -

◆ kDaikin216ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin216ZeroSpace = 450
-
- -
-
- -

◆ kDaikin2BitMark

- -
-
- - - - -
const uint16_t kDaikin2BitMark = 460
-
- -
-
- -

◆ kDaikin2Freq

- -
-
- - - - -
const uint16_t kDaikin2Freq = 36700
-
- -
-
- -

◆ kDaikin2Gap

- -
-
- - - - -
const uint16_t kDaikin2Gap = kDaikin2LeaderMark + kDaikin2LeaderSpace
-
- -
-
- -

◆ kDaikin2HdrMark

- -
-
- - - - -
const uint16_t kDaikin2HdrMark = 3500
-
- -
-
- -

◆ kDaikin2HdrSpace

- -
-
- - - - -
const uint16_t kDaikin2HdrSpace = 1728
-
- -
-
- -

◆ kDaikin2LeaderMark

- -
-
- - - - -
const uint16_t kDaikin2LeaderMark = 10024
-
- -
-
- -

◆ kDaikin2LeaderSpace

- -
-
- - - - -
const uint16_t kDaikin2LeaderSpace = 25180
-
- -
-
- -

◆ kDaikin2MinCoolTemp

- -
-
- - - - -
const uint8_t kDaikin2MinCoolTemp = 18
-
- -
-
- -

◆ kDaikin2OneSpace

- -
-
- - - - -
const uint16_t kDaikin2OneSpace = 1270
-
- -
-
- -

◆ kDaikin2Section1Length

- -
-
- - - - -
const uint16_t kDaikin2Section1Length = 20
-
- -
-
- -

◆ kDaikin2Section2Length

- -
-
- - - - -
const uint16_t kDaikin2Section2Length = 19
-
- -
-
- -

◆ kDaikin2Sections

- -
-
- - - - -
const uint16_t kDaikin2Sections = 2
-
- -
-
- -

◆ kDaikin2SwingHAuto

- -
-
- - - - -
const uint8_t kDaikin2SwingHAuto = 0xBE
-
- -
-
- -

◆ kDaikin2SwingHLeft

- -
-
- - - - -
const uint8_t kDaikin2SwingHLeft = 0xA9
-
- -
-
- -

◆ kDaikin2SwingHLeftMax

- -
-
- - - - -
const uint8_t kDaikin2SwingHLeftMax = 0xA8
-
- -
-
- -

◆ kDaikin2SwingHMiddle

- -
-
- - - - -
const uint8_t kDaikin2SwingHMiddle = 0xAA
-
- -
-
- -

◆ kDaikin2SwingHOff

- -
-
- - - - -
const uint8_t kDaikin2SwingHOff = 0xBF
-
- -
-
- -

◆ kDaikin2SwingHRight

- -
-
- - - - -
const uint8_t kDaikin2SwingHRight = 0xAB
-
- -
-
- -

◆ kDaikin2SwingHRightMax

- -
-
- - - - -
const uint8_t kDaikin2SwingHRightMax = 0xAC
-
- -
-
- -

◆ kDaikin2SwingHSwing

- -
-
- - - - -
const uint8_t kDaikin2SwingHSwing = kDaikin2SwingHAuto
-
- -
-
- -

◆ kDaikin2SwingHWide

- -
-
- - - - -
const uint8_t kDaikin2SwingHWide = 0xA3
-
- -
-
- -

◆ kDaikin2SwingVAuto

- -
-
- - - - -
const uint8_t kDaikin2SwingVAuto = 0xF
-
- -
-
- -

◆ kDaikin2SwingVBreeze

- -
-
- - - - -
const uint8_t kDaikin2SwingVBreeze = 0xC
-
- -
-
- -

◆ kDaikin2SwingVCirculate

- -
-
- - - - -
const uint8_t kDaikin2SwingVCirculate = 0xD
-
- -
-
- -

◆ kDaikin2SwingVHigh

- -
-
- - - - -
const uint8_t kDaikin2SwingVHigh = 0x2
-
- -
-
- -

◆ kDaikin2SwingVHighest

- -
-
- - - - -
const uint8_t kDaikin2SwingVHighest = 0x1
-
- -
-
- -

◆ kDaikin2SwingVLow

- -
-
- - - - -
const uint8_t kDaikin2SwingVLow = 0x5
-
- -
-
- -

◆ kDaikin2SwingVLowerMiddle

- -
-
- - - - -
const uint8_t kDaikin2SwingVLowerMiddle = 0x4
-
- -
-
- -

◆ kDaikin2SwingVLowest

- -
-
- - - - -
const uint8_t kDaikin2SwingVLowest = 0x6
-
- -
-
- -

◆ kDaikin2SwingVOff

- -
-
- - - - -
const uint8_t kDaikin2SwingVOff = 0xE
-
- -
-
- -

◆ kDaikin2SwingVSwing

- -
-
- - - - -
const uint8_t kDaikin2SwingVSwing = kDaikin2SwingVAuto
-
- -
-
- -

◆ kDaikin2SwingVUpperMiddle

- -
-
- - - - -
const uint8_t kDaikin2SwingVUpperMiddle = 0x3
-
- -
-
- -

◆ kDaikin2Tolerance

- -
-
- - - - -
const uint8_t kDaikin2Tolerance = 5
-
- -
-
- -

◆ kDaikin2ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin2ZeroSpace = 420
-
- -
-
- -

◆ kDaikin64BitMark

- -
-
- - - - -
const uint16_t kDaikin64BitMark = kDaikin128BitMark
-
- -
-
- -

◆ kDaikin64ChecksumOffset

- -
-
- - - - -
const uint8_t kDaikin64ChecksumOffset = 60
-
- -
-
- -

◆ kDaikin64ChecksumSize

- -
-
- - - - -
const uint8_t kDaikin64ChecksumSize = 4
-
- -
-
- -

◆ kDaikin64Cool

- -
-
- - - - -
const uint8_t kDaikin64Cool = 0b010
-
- -
-
- -

◆ kDaikin64Dry

- -
-
- - - - -
const uint8_t kDaikin64Dry = 0b001
-
- -
-
- -

◆ kDaikin64Fan

- -
-
- - - - -
const uint8_t kDaikin64Fan = 0b100
-
- -
-
- -

◆ kDaikin64FanAuto

- -
-
- - - - -
const uint8_t kDaikin64FanAuto = 0b0001
-
- -
-
- -

◆ kDaikin64FanHigh

- -
-
- - - - -
const uint8_t kDaikin64FanHigh = 0b0010
-
- -
-
- -

◆ kDaikin64FanLow

- -
-
- - - - -
const uint8_t kDaikin64FanLow = 0b1000
-
- -
-
- -

◆ kDaikin64FanMed

- -
-
- - - - -
const uint8_t kDaikin64FanMed = 0b0100
-
- -
-
- -

◆ kDaikin64FanQuiet

- -
-
- - - - -
const uint8_t kDaikin64FanQuiet = 0b1001
-
- -
-
- -

◆ kDaikin64FanTurbo

- -
-
- - - - -
const uint8_t kDaikin64FanTurbo = 0b0011
-
- -
-
- -

◆ kDaikin64Freq

- -
-
- - - - -
const uint16_t kDaikin64Freq = kDaikin128Freq
-
- -
-
- -

◆ kDaikin64Gap

- -
-
- - - - -
const uint16_t kDaikin64Gap = kDaikin128Gap
-
- -
-
- -

◆ kDaikin64HdrMark

- -
-
- - - - -
const uint16_t kDaikin64HdrMark = kDaikin128HdrMark
-
- -
-
- -

◆ kDaikin64HdrSpace

- -
-
- - - - -
const uint16_t kDaikin64HdrSpace = kDaikin128HdrSpace
-
- -
-
- -

◆ kDaikin64KnownGoodState

- -
-
- - - - -
const uint64_t kDaikin64KnownGoodState = 0x7C16161607204216
-
- -
-
- -

◆ kDaikin64LdrMark

- -
-
- - - - -
const uint16_t kDaikin64LdrMark = kDaikin128LeaderMark
-
- -
-
- -

◆ kDaikin64LdrSpace

- -
-
- - - - -
const uint16_t kDaikin64LdrSpace = kDaikin128LeaderSpace
-
- -
-
- -

◆ kDaikin64MaxTemp

- -
-
- - - - -
const uint8_t kDaikin64MaxTemp = 30
-
- -
-
- -

◆ kDaikin64MinTemp

- -
-
- - - - -
const uint8_t kDaikin64MinTemp = 16
-
- -
-
- -

◆ kDaikin64OneSpace

- -
-
- - - - -
const uint16_t kDaikin64OneSpace = kDaikin128OneSpace
-
- -
-
- -

◆ kDaikin64Overhead

- -
-
- - - - -
const uint8_t kDaikin64Overhead = 9
-
- -
-
- -

◆ kDaikin64ToleranceDelta

- -
-
- - - - -
const int8_t kDaikin64ToleranceDelta = 5
-
- -
-
- -

◆ kDaikin64ZeroSpace

- -
-
- - - - -
const uint16_t kDaikin64ZeroSpace = kDaikin128ZeroSpace
-
- -
-
- -

◆ kDaikinAuto

- -
-
- - - - -
const uint8_t kDaikinAuto = 0b000
-
- -
-
- -

◆ kDaikinBeepLoud

- -
-
- - - - -
const uint8_t kDaikinBeepLoud = 2
-
- -
-
- -

◆ kDaikinBeepOff

- -
-
- - - - -
const uint8_t kDaikinBeepOff = 3
-
- -
-
- -

◆ kDaikinBeepQuiet

- -
-
- - - - -
const uint8_t kDaikinBeepQuiet = 1
-
- -
-
- -

◆ kDaikinBitMark

- -
-
- - - - -
const uint16_t kDaikinBitMark = 428
-
- -
-
- -

◆ kDaikinByteChecksum1

- -
-
- - - - -
const uint8_t kDaikinByteChecksum1 = 7
-
- -
-
- -

◆ kDaikinByteChecksum2

- -
-
- - - - -
const uint8_t kDaikinByteChecksum2 = 15
-
- -
-
- -

◆ kDaikinCool

- -
-
- - - - -
const uint8_t kDaikinCool = 0b011
-
- -
-
- -

◆ kDaikinCurBit

- -
-
- - - - -
const uint8_t kDaikinCurBit = kDaikinStateLength
-
- -
-
- -

◆ kDaikinCurIndex

- -
-
- - - - -
const uint8_t kDaikinCurIndex = kDaikinStateLength + 1
-
- -
-
- -

◆ kDaikinDry

- -
-
- - - - -
const uint8_t kDaikinDry = 0b010
-
- -
-
- -

◆ kDaikinFan

- -
-
- - - - -
const uint8_t kDaikinFan = 0b110
-
- -
-
- -

◆ kDaikinFanAuto

- -
-
- - - - -
const uint8_t kDaikinFanAuto = 0b1010
-
- -
-
- -

◆ kDaikinFanMax

- -
-
- - - - -
const uint8_t kDaikinFanMax = 5
-
- -
-
- -

◆ kDaikinFanMed

- -
-
- - - - -
const uint8_t kDaikinFanMed = 3
-
- -
-
- -

◆ kDaikinFanMin

- -
-
- - - - -
const uint8_t kDaikinFanMin = 1
-
- -
-
- -

◆ kDaikinFanQuiet

- -
-
- - - - -
const uint8_t kDaikinFanQuiet = 0b1011
-
- -
-
- -

◆ kDaikinFirstHeader64

- -
-
- - - - -
const uint64_t kDaikinFirstHeader64
-
-Initial value:
=
-
0b1101011100000000000000001100010100000000001001111101101000010001
-
-
-
- -

◆ kDaikinGap

- -
-
- - - - -
const uint16_t kDaikinGap = 29000
-
- -
-
- -

◆ kDaikinHdrMark

- -
-
- - - - -
const uint16_t kDaikinHdrMark = 3650
-
- -
-
- -

◆ kDaikinHdrSpace

- -
-
- - - - -
const uint16_t kDaikinHdrSpace = 1623
-
- -
-
- -

◆ kDaikinHeaderLength

- -
-
- - - - -
const uint16_t kDaikinHeaderLength = 5
-
- -
-
- -

◆ kDaikinHeat

- -
-
- - - - -
const uint8_t kDaikinHeat = 0b100
-
- -
-
- -

◆ kDaikinLightBright

- -
-
- - - - -
const uint8_t kDaikinLightBright = 1
-
- -
-
- -

◆ kDaikinLightDim

- -
-
- - - - -
const uint8_t kDaikinLightDim = 2
-
- -
-
- -

◆ kDaikinLightOff

- -
-
- - - - -
const uint8_t kDaikinLightOff = 3
-
- -
-
- -

◆ kDaikinMarkExcess

- -
-
- - - - -
const uint16_t kDaikinMarkExcess = kMarkExcess
-
- -
-
- -

◆ kDaikinMaxTemp

- -
-
- - - - -
const uint8_t kDaikinMaxTemp = 32
-
- -
-
- -

◆ kDaikinMinTemp

- -
-
- - - - -
const uint8_t kDaikinMinTemp = 10
-
- -
-
- -

◆ kDaikinOneSpace

- -
-
- - - - -
const uint16_t kDaikinOneSpace = 1280
-
- -
-
- -

◆ kDaikinSection1Length

- -
-
- - - - -
const uint8_t kDaikinSection1Length = 8
-
- -
-
- -

◆ kDaikinSection2Length

- -
-
- - - - -
const uint8_t kDaikinSection2Length = 8
-
- -
-
- -

◆ kDaikinSection3Length

- -
-
- - - - -
const uint8_t kDaikinSection3Length
-
-
- -

◆ kDaikinSections

- -
-
- - - - -
const uint8_t kDaikinSections = 3
-
- -
-
- -

◆ kDaikinSwingOff

- -
-
- - - - -
const uint8_t kDaikinSwingOff = 0b0000
-
- -
-
- -

◆ kDaikinSwingOn

- -
-
- - - - -
const uint8_t kDaikinSwingOn = 0b1111
-
- -
-
- -

◆ kDaikinTolerance

- -
-
- - - - -
const uint8_t kDaikinTolerance = 35
-
- -
-
- -

◆ kDaikinUnusedTime

- -
-
- - - - -
const uint16_t kDaikinUnusedTime = 0x600
-
- -
-
- -

◆ kDaikinZeroSpace

- -
-
- - - - -
const uint16_t kDaikinZeroSpace = 428
-
- -
-
-
-
const uint16_t kDaikin176StateLength
Definition: IRremoteESP8266.h:952
-
const uint8_t kDaikinSection1Length
Definition: ir_Daikin.h:146
-
const uint16_t kDaikin216StateLength
Definition: IRremoteESP8266.h:955
-
const uint16_t kDaikin216Section1Length
Definition: ir_Daikin.h:350
-
const uint16_t kDaikin160Section1Length
Definition: ir_Daikin.h:399
-
const uint16_t kDaikinStateLength
Definition: IRremoteESP8266.h:933
-
const uint16_t kDaikin160StateLength
Definition: IRremoteESP8266.h:943
-
const uint8_t kDaikinSection2Length
Definition: ir_Daikin.h:147
-
const uint16_t kDaikin176Section1Length
Definition: ir_Daikin.h:454
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h_source.html deleted file mode 100644 index 133e2e7c0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Daikin_8h_source.html +++ /dev/null @@ -1,1913 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Daikin.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Daikin.h
-
-
-Go to the documentation of this file.
1 // Copyright 2016 sillyfrog
-
2 // Copyright 2017 sillyfrog, crankyoldgit
-
3 // Copyright 2018-2020 crankyoldgit
-
4 // Copyright 2019 pasna (IRDaikin160 class / Daikin176 class)
-
5 
-
23 
-
24 // Supports:
-
25 // Brand: Daikin, Model: ARC433** remote (DAIKIN)
-
26 // Brand: Daikin, Model: ARC477A1 remote (DAIKIN2)
-
27 // Brand: Daikin, Model: FTXZ25NV1B A/C (DAIKIN2)
-
28 // Brand: Daikin, Model: FTXZ35NV1B A/C (DAIKIN2)
-
29 // Brand: Daikin, Model: FTXZ50NV1B A/C (DAIKIN2)
-
30 // Brand: Daikin, Model: ARC433B69 remote (DAIKIN216)
-
31 // Brand: Daikin, Model: ARC423A5 remote (DAIKIN160)
-
32 // Brand: Daikin, Model: FTE12HV2S A/C
-
33 // Brand: Daikin, Model: BRC4C153 remote (DAIKIN176)
-
34 // Brand: Daikin, Model: FFQ35B8V1B A/C (DAIKIN176)
-
35 // Brand: Daikin, Model: BRC4C151 remote (DAIKIN176)
-
36 // Brand: Daikin, Model: 17 Series A/C (DAIKIN128)
-
37 // Brand: Daikin, Model: FTXB12AXVJU A/C (DAIKIN128)
-
38 // Brand: Daikin, Model: FTXB09AXVJU A/C (DAIKIN128)
-
39 // Brand: Daikin, Model: BRC52B63 remote (DAIKIN128)
-
40 // Brand: Daikin, Model: ARC480A5 remote (DAIKIN152)
-
41 // Brand: Daikin, Model: FFN-C/FCN-F Series A/C (DAIKIN64)
-
42 // Brand: Daikin, Model: DGS01 remote (DAIKIN64)
-
43 // Brand: Daikin, Model: M Series A/C (DAIKIN)
-
44 // Brand: Daikin, Model: FTXM-M A/C (DAIKIN)
-
45 // Brand: Daikin, Model: ARC466A33 remote (DAIKIN)
-
46 
-
47 #ifndef IR_DAIKIN_H_
-
48 #define IR_DAIKIN_H_
-
49 
-
50 #ifndef UNIT_TEST
-
51 #include <Arduino.h>
-
52 #endif
-
53 #include "IRrecv.h"
-
54 #include "IRremoteESP8266.h"
-
55 #include "IRsend.h"
-
56 #ifdef UNIT_TEST
-
57 #include "IRsend_test.h"
-
58 #endif
-
59 
- - -
63  struct {
-
64  // Byte 0~5
-
65  uint64_t :48;
-
66  // Byte 6
-
67  uint64_t :4;
-
68  uint64_t Comfort :1;
-
69  uint64_t :3;
-
70  // Byte 7
-
71  uint64_t Sum1 :8; // checksum of the first part
-
72 
-
73  // Byte 8~12
-
74  uint64_t :40;
-
75  // Byte 13~14
-
76  uint64_t CurrentTime :11; // Current time, mins past midnight
-
77  uint64_t CurrentDay :3; // Day of the week (SUN=1, MON=2, ..., SAT=7)
-
78  uint64_t :2;
-
79  // Byte 15
-
80  uint64_t Sum2 :8; // checksum of the second part
-
81 
-
82  // Byte 16~20
-
83  uint64_t :40;
-
84  // Byte 21
-
85  uint64_t Power :1;
-
86  uint64_t OnTimer :1;
-
87  uint64_t OffTimer :1;
-
88  uint64_t :1; // always 1
-
89  uint64_t Mode :3;
-
90  uint64_t :1;
-
91  // Byte 22
-
92  uint64_t :1;
-
93  uint64_t Temp :7; // Temp should be between 10 - 32
-
94  // Byte 23
-
95  uint64_t :8;
-
96 
-
97  // Byte 24
-
98  uint64_t SwingV :4; // 0000 = off, 1111 = on
-
99  uint64_t Fan :4;
-
100  // Byte 25
-
101  uint64_t SwingH :4; // 0000 = off, 1111 = on
-
102  uint64_t :4;
-
103  // Byte 26~28
-
104  uint64_t OnTime :12; // timer mins past midnight
-
105  uint64_t OffTime :12; // timer mins past midnight
-
106  // Byte 29
-
107  uint64_t Powerful :1;
-
108  uint64_t :4;
-
109  uint64_t Quiet :1;
-
110  uint64_t :2;
-
111  // Byte 30~31
-
112  uint64_t :0;
-
113 
-
114  // Byte 32
-
115  uint8_t :1;
-
116  uint8_t Sensor :1;
-
117  uint8_t Econo :1;
-
118  uint8_t :4;
-
119  uint8_t WeeklyTimer :1;
-
120  // Byte 33
-
121  uint8_t :1;
-
122  uint8_t Mold :1;
-
123  uint8_t :6;
-
124  // Byte 34
-
125  uint8_t Sum3 :8; // checksum of the third part
-
126  };
-
127 };
-
128 
-
129 // Constants
-
130 const uint8_t kDaikinAuto = 0b000; // temp 25
-
131 const uint8_t kDaikinDry = 0b010; // temp 0xc0 = 96 degrees c
-
132 const uint8_t kDaikinCool = 0b011;
-
133 const uint8_t kDaikinHeat = 0b100; // temp 23
-
134 const uint8_t kDaikinFan = 0b110; // temp not shown, but 25
-
135 const uint8_t kDaikinMinTemp = 10; // Celsius
-
136 const uint8_t kDaikinMaxTemp = 32; // Celsius
-
137 const uint8_t kDaikinFanMin = 1;
-
138 const uint8_t kDaikinFanMed = 3;
-
139 const uint8_t kDaikinFanMax = 5;
-
140 const uint8_t kDaikinFanAuto = 0b1010; // 10 / 0xA
-
141 const uint8_t kDaikinFanQuiet = 0b1011; // 11 / 0xB
-
142 const uint8_t kDaikinSwingOn = 0b1111;
-
143 const uint8_t kDaikinSwingOff = 0b0000;
-
144 const uint16_t kDaikinHeaderLength = 5;
-
145 const uint8_t kDaikinSections = 3;
-
146 const uint8_t kDaikinSection1Length = 8;
-
147 const uint8_t kDaikinSection2Length = 8;
-
148 const uint8_t kDaikinSection3Length =
- -
150 const uint8_t kDaikinByteChecksum1 = 7;
-
151 const uint8_t kDaikinByteChecksum2 = 15;
-
152 // const uint8_t kDaikinBitEye = 0b10000000;
-
153 const uint16_t kDaikinUnusedTime = 0x600;
-
154 const uint8_t kDaikinBeepQuiet = 1;
-
155 const uint8_t kDaikinBeepLoud = 2;
-
156 const uint8_t kDaikinBeepOff = 3;
-
157 const uint8_t kDaikinLightBright = 1;
-
158 const uint8_t kDaikinLightDim = 2;
-
159 const uint8_t kDaikinLightOff = 3;
- - -
162 const uint8_t kDaikinTolerance = 35;
- -
164 const uint16_t kDaikinHdrMark = 3650; // kDaikinBitMark * 8
-
165 const uint16_t kDaikinHdrSpace = 1623; // kDaikinBitMark * 4
-
166 const uint16_t kDaikinBitMark = 428;
-
167 const uint16_t kDaikinZeroSpace = 428;
-
168 const uint16_t kDaikinOneSpace = 1280;
-
169 const uint16_t kDaikinGap = 29000;
-
170 // Note bits in each octet swapped so can be sent as a single value
-
171 const uint64_t kDaikinFirstHeader64 =
-
172  0b1101011100000000000000001100010100000000001001111101101000010001;
-
173 
- -
176  struct{
-
177  uint8_t pad[3];
- -
179  };
-
180  struct {
-
181  // Byte -3~4
-
182  uint64_t :64;
-
183 
-
184  // Byte 5~6
-
185  uint64_t CurrentTime :12;
-
186  uint64_t :3;
-
187  uint64_t Power2 :1;
-
188  // Byte 7
-
189  uint64_t :4;
-
190  uint64_t Light :2;
-
191  uint64_t Beep :2;
-
192  // Byte 8
-
193  uint64_t FreshAir :1;
-
194  uint64_t :2;
-
195  uint64_t Mold :1;
-
196  uint64_t :1;
-
197  uint64_t Clean :1;
-
198  uint64_t :1;
-
199  uint64_t FreshAirHigh :1;
-
200  // Byte 9~12
-
201  uint64_t :32;
-
202 
-
203  // Byte 13
-
204  uint64_t :7;
-
205  uint64_t EyeAuto :1;
-
206  // Byte 14~16
-
207  uint64_t :24;
-
208  // Byte 17
-
209  uint64_t SwingH :8;
-
210  // Byte 18
-
211  uint64_t SwingV :4;
-
212  uint64_t :4;
-
213  // Byte 19
-
214  uint64_t Sum1 :8;
-
215  // Byte 20
-
216  uint64_t :8;
-
217 
-
218  // Byte 21~24
-
219  uint64_t :32;
-
220  // Byte 25
-
221  uint64_t Power :1;
-
222  uint64_t OnTimer :1;
-
223  uint64_t OffTimer :1;
-
224  uint64_t :1;
-
225  uint64_t Mode :3;
-
226  uint64_t :1;
-
227  // Byte 26
-
228  uint64_t :1;
-
229  uint64_t Temp :7;
-
230  // Byte 27
-
231  uint64_t :8;
-
232  // Byte 28
-
233  uint64_t :4;
-
234  uint64_t Fan :4;
-
235 
-
236  // Byte 29
-
237  uint64_t :8;
-
238  // Byte 30~32
-
240  uint64_t OnTime :12;
-
241  uint64_t OffTime :12;
-
242  // Byte 33
-
243  uint64_t Powerful :1;
-
244  uint64_t :4;
-
245  uint64_t Quiet :1;
-
246  uint64_t :2;
-
247  // Byte 34~35
-
248  uint64_t :16;
-
249  // Byte 36
-
250  uint64_t :1;
-
251  uint64_t Eye :1;
-
252  uint64_t Econo :1;
-
253  uint64_t :1;
-
254  uint64_t Purify :1;
-
255  uint64_t SleepTimer :1;
-
256  uint64_t :2;
-
257 
-
258  // Byte 37
-
259  uint8_t :8;
-
260  // Byte 38
-
261  uint8_t Sum2 :8;
-
262  };
-
263 };
-
264 
-
265 const uint16_t kDaikin2Freq = 36700; // Modulation Frequency in Hz.
-
266 const uint16_t kDaikin2LeaderMark = 10024;
-
267 const uint16_t kDaikin2LeaderSpace = 25180;
- -
269 const uint16_t kDaikin2HdrMark = 3500;
-
270 const uint16_t kDaikin2HdrSpace = 1728;
-
271 const uint16_t kDaikin2BitMark = 460;
-
272 const uint16_t kDaikin2OneSpace = 1270;
-
273 const uint16_t kDaikin2ZeroSpace = 420;
-
274 const uint16_t kDaikin2Sections = 2;
-
275 const uint16_t kDaikin2Section1Length = 20;
-
276 const uint16_t kDaikin2Section2Length = 19;
-
277 const uint8_t kDaikin2Tolerance = 5; // Extra percentage tolerance
-
278 const uint8_t kDaikin2SwingVHighest = 0x1;
-
279 const uint8_t kDaikin2SwingVHigh = 0x2;
-
280 const uint8_t kDaikin2SwingVUpperMiddle = 0x3;
-
281 const uint8_t kDaikin2SwingVLowerMiddle = 0x4;
-
282 const uint8_t kDaikin2SwingVLow = 0x5;
-
283 const uint8_t kDaikin2SwingVLowest = 0x6;
-
284 const uint8_t kDaikin2SwingVBreeze = 0xC;
-
285 const uint8_t kDaikin2SwingVCirculate = 0xD;
-
286 const uint8_t kDaikin2SwingVOff = 0xE;
-
287 const uint8_t kDaikin2SwingVAuto = 0xF; // A.k.a "Swing"
- -
289 
-
290 
-
291 const uint8_t kDaikin2SwingHWide = 0xA3;
-
292 const uint8_t kDaikin2SwingHLeftMax = 0xA8;
-
293 const uint8_t kDaikin2SwingHLeft = 0xA9;
-
294 const uint8_t kDaikin2SwingHMiddle = 0xAA;
-
295 const uint8_t kDaikin2SwingHRight = 0xAB;
-
296 const uint8_t kDaikin2SwingHRightMax = 0xAC;
-
297 const uint8_t kDaikin2SwingHAuto = 0xBE; // A.k.a "Swing"
-
298 const uint8_t kDaikin2SwingHOff = 0xBF;
- -
300 
-
301 const uint8_t kDaikin2MinCoolTemp = 18; // Min temp (in C) when in Cool mode.
-
302 
- - -
306  struct {
-
307  // Byte 0~6
-
308  uint8_t pad0[7];
-
309  // Byte 7
-
310  uint8_t Sum1 :8;
-
311  // Byte 8~12
-
312  uint8_t pad1[5];
-
313  // Byte 13
-
314  uint8_t Power :1;
-
315  uint8_t :3;
-
316  uint8_t Mode :3;
-
317  uint8_t :1;
-
318  // Byte 14
-
319  uint8_t :1;
-
320  uint8_t Temp :6;
-
321  uint8_t :1;
-
322  // Byte 15
-
323  uint8_t :8;
-
324  // Byte 16
-
325  uint8_t SwingV :4;
-
326  uint8_t Fan :4;
-
327  // Byte 17
-
328  uint8_t SwingH :4;
-
329  uint8_t :4;
-
330  // Byte 18~20
-
331  uint8_t pad2[3];
-
332  // Byte 21
-
333  uint8_t Powerful :1;
-
334  uint8_t :0;
-
335  // Byte 22~25
-
336  uint8_t pad3[4];
-
337  // Byte 26
-
338  uint8_t Sum2 :8;
-
339  };
-
340 };
-
341 
-
342 const uint16_t kDaikin216Freq = 38000; // Modulation Frequency in Hz.
-
343 const uint16_t kDaikin216HdrMark = 3440;
-
344 const uint16_t kDaikin216HdrSpace = 1750;
-
345 const uint16_t kDaikin216BitMark = 420;
-
346 const uint16_t kDaikin216OneSpace = 1300;
-
347 const uint16_t kDaikin216ZeroSpace = 450;
-
348 const uint16_t kDaikin216Gap = 29650;
-
349 const uint16_t kDaikin216Sections = 2;
-
350 const uint16_t kDaikin216Section1Length = 8;
- - -
353 
-
354 const uint8_t kDaikin216SwingOn = 0b1111;
-
355 const uint8_t kDaikin216SwingOff = 0b0000;
-
356 
- - -
360  struct {
-
361  // Byte 0~5
-
362  uint8_t pad0[6];
-
363  // Byte 6
-
364  uint8_t Sum1 :8;
-
365  // Byte 7~11
-
366  uint8_t pad1[5];
-
367  // Byte 12
-
368  uint8_t Power :1;
-
369  uint8_t :3;
-
370  uint8_t Mode :3;
-
371  uint8_t :1;
-
372  // Byte 13
-
373  uint8_t :4;
-
374  uint8_t SwingV :4;
-
375  // Byte 14~15
-
376  uint8_t pad2[2];
-
377  // Byte 16
-
378  uint8_t :1;
-
379  uint8_t Temp :6;
-
380  uint8_t :1;
-
381  // Byte 17
-
382  uint8_t Fan :4;
-
383  uint8_t :4;
-
384  // Byte 18
-
385  uint8_t :8;
-
386  // Byte 19
-
387  uint8_t Sum2 :8;
-
388  };
-
389 };
-
390 
-
391 const uint16_t kDaikin160Freq = 38000; // Modulation Frequency in Hz.
-
392 const uint16_t kDaikin160HdrMark = 5000;
-
393 const uint16_t kDaikin160HdrSpace = 2145;
-
394 const uint16_t kDaikin160BitMark = 342;
-
395 const uint16_t kDaikin160OneSpace = 1786;
-
396 const uint16_t kDaikin160ZeroSpace = 700;
-
397 const uint16_t kDaikin160Gap = 29650;
-
398 const uint16_t kDaikin160Sections = 2;
-
399 const uint16_t kDaikin160Section1Length = 7;
- - -
402 const uint8_t kDaikin160SwingVLowest = 0x1;
-
403 const uint8_t kDaikin160SwingVLow = 0x2;
-
404 const uint8_t kDaikin160SwingVMiddle = 0x3;
-
405 const uint8_t kDaikin160SwingVHigh = 0x4;
-
406 const uint8_t kDaikin160SwingVHighest = 0x5;
-
407 const uint8_t kDaikin160SwingVAuto = 0xF;
-
408 
- - -
412  struct {
-
413  // Byte 0~5
-
414  uint8_t pad0[6];
-
415  // Byte 6
-
416  uint8_t Sum1 :8;
-
417  // Byte 7~11
-
418  uint8_t pad1[5];
-
419  // Byte 12
-
420  uint8_t :4;
-
421  uint8_t AltMode :3;
-
422  uint8_t :1;
-
423  // Byte 13
-
424  uint8_t ModeButton :8;
-
425  // Byte 14
-
426  uint8_t Power :1;
-
427  uint8_t :3;
-
428  uint8_t Mode :3;
-
429  uint8_t :1;
-
430  // Byte 15~16
-
431  uint8_t pad2[2];
-
432  // Byte 17
-
433  uint8_t :1;
-
434  uint8_t Temp :6;
-
435  uint8_t :1;
-
436  // Byte 18
-
437  uint8_t SwingH :4;
-
438  uint8_t Fan :4;
-
439  // Byte 19~20
-
440  uint8_t pad3[2];
-
441  // Byte 21
-
442  uint8_t Sum2 :8;
-
443  };
-
444 };
-
445 
-
446 const uint16_t kDaikin176Freq = 38000; // Modulation Frequency in Hz.
-
447 const uint16_t kDaikin176HdrMark = 5070;
-
448 const uint16_t kDaikin176HdrSpace = 2140;
-
449 const uint16_t kDaikin176BitMark = 370;
-
450 const uint16_t kDaikin176OneSpace = 1780;
-
451 const uint16_t kDaikin176ZeroSpace = 710;
-
452 const uint16_t kDaikin176Gap = 29410;
-
453 const uint16_t kDaikin176Sections = 2;
-
454 const uint16_t kDaikin176Section1Length = 7;
- - -
457 const uint8_t kDaikin176Fan = 0b000; // 0
-
458 const uint8_t kDaikin176Heat = 0b001; // 1
-
459 const uint8_t kDaikin176Cool = 0b010; // 2
-
460 const uint8_t kDaikin176Auto = 0b011; // 3
-
461 const uint8_t kDaikin176Dry = 0b111; // 7
-
462 const uint8_t kDaikin176ModeButton = 0b00000100;
-
463 const uint8_t kDaikin176DryFanTemp = 17; // Dry/Fan mode is always 17 Celsius.
-
464 const uint8_t kDaikin176FanMax = 3;
-
465 const uint8_t kDaikin176SwingHAuto = 0x5;
-
466 const uint8_t kDaikin176SwingHOff = 0x6;
-
467 
- - -
471  struct {
-
472  // Byte 0
-
473  uint8_t :8;
-
474  // Byte 1
-
475  uint8_t Mode :4;
-
476  uint8_t Fan :4;
-
477  // Byte 2
-
478  uint8_t ClockMins :8;
-
479  // Byte 3
-
480  uint8_t ClockHours :8;
-
481  // Byte 4
-
482  uint8_t OnHours :6;
-
483  uint8_t OnHalfHour :1;
-
484  uint8_t OnTimer :1;
-
485  // Byte 5
-
486  uint8_t OffHours :6;
-
487  uint8_t OffHalfHour :1;
-
488  uint8_t OffTimer :1;
-
489  // Byte 6
-
490  uint8_t Temp :8;
-
491  // Byte 7
-
492  uint8_t SwingV :1;
-
493  uint8_t Sleep :1;
-
494  uint8_t :1; // always 1
-
495  uint8_t Power :1;
-
496  uint8_t Sum1 :4;
-
497  // Byte 8
-
498  uint8_t :8;
-
499  // Byte 9
-
500  uint8_t Ceiling :1;
-
501  uint8_t :1;
-
502  uint8_t Econo :1;
-
503  uint8_t Wall :1;
-
504  uint8_t :4;
-
505  // Byte 10~14
-
506  uint8_t pad[5];
-
507  // Byte 15
-
508  uint8_t Sum2 :8;
-
509  };
-
510 };
-
511 
-
512 const uint16_t kDaikin128Freq = 38000; // Modulation Frequency in Hz.
-
513 const uint16_t kDaikin128LeaderMark = 9800;
-
514 const uint16_t kDaikin128LeaderSpace = 9800;
-
515 const uint16_t kDaikin128HdrMark = 4600;
-
516 const uint16_t kDaikin128HdrSpace = 2500;
-
517 const uint16_t kDaikin128BitMark = 350;
-
518 const uint16_t kDaikin128OneSpace = 954;
-
519 const uint16_t kDaikin128ZeroSpace = 382;
-
520 const uint16_t kDaikin128Gap = 20300;
- -
522 const uint16_t kDaikin128Sections = 2;
-
523 const uint16_t kDaikin128SectionLength = 8;
-
524 const uint8_t kDaikin128Dry = 0b00000001;
-
525 const uint8_t kDaikin128Cool = 0b00000010;
-
526 const uint8_t kDaikin128Fan = 0b00000100;
-
527 const uint8_t kDaikin128Heat = 0b00001000;
-
528 const uint8_t kDaikin128Auto = 0b00001010;
-
529 const uint8_t kDaikin128FanAuto = 0b0001;
-
530 const uint8_t kDaikin128FanHigh = 0b0010;
-
531 const uint8_t kDaikin128FanMed = 0b0100;
-
532 const uint8_t kDaikin128FanLow = 0b1000;
-
533 const uint8_t kDaikin128FanPowerful = 0b0011;
-
534 const uint8_t kDaikin128FanQuiet = 0b1001;
-
535 const uint8_t kDaikin128MinTemp = 16; // C
-
536 const uint8_t kDaikin128MaxTemp = 30; // C
-
537 const uint8_t kDaikin128BitWall = 0b00001000;
-
538 const uint8_t kDaikin128BitCeiling = 0b00000001;
-
539 
- - -
543  struct {
-
544  // Byte 0~4
-
545  uint8_t pad0[5];
-
546  // Byte 5
-
547  uint8_t Power :1;
-
548  uint8_t :3;
-
549  uint8_t Mode :3;
-
550  uint8_t :1;
-
551  // Byte 6
-
552  uint8_t :1;
-
553  uint8_t Temp :7;
-
554  // Byte 7
-
555  uint8_t :8;
-
556  // Byte 8
-
557  uint8_t SwingV :4;
-
558  uint8_t Fan :4;
-
559  // Byte 9~12
-
560  uint8_t pad1[4];
-
561  // Byte 13
-
562  uint8_t Powerful :1;
-
563  uint8_t :4;
-
564  uint8_t Quiet :1;
-
565  uint8_t :2;
-
566  // Byte 14~15
-
567  uint8_t pad2[2];
-
568  // Byte 16
-
569  uint8_t :1;
-
570  uint8_t Comfort :1;
-
571  uint8_t Econo :1;
-
572  uint8_t Sensor :1;
-
573  uint8_t :4;
-
574  // Byte 17
-
575  uint8_t :8;
-
576  // Byte 18
-
577  uint8_t Sum :8;
-
578  };
-
579 };
-
580 
-
581 const uint16_t kDaikin152Freq = 38000; // Modulation Frequency in Hz.
-
582 const uint8_t kDaikin152LeaderBits = 5;
-
583 const uint16_t kDaikin152HdrMark = 3492;
-
584 const uint16_t kDaikin152HdrSpace = 1718;
-
585 const uint16_t kDaikin152BitMark = 433;
-
586 const uint16_t kDaikin152OneSpace = 1529;
- -
588 const uint16_t kDaikin152Gap = 25182;
-
589 
-
590 const uint8_t kDaikin152DryTemp = kDaikin2MinCoolTemp; // Celsius
-
591 const uint8_t kDaikin152FanTemp = 0x60; // 96 Celsius
-
592 
- -
595  uint64_t raw;
-
596  struct {
-
597  uint8_t :8;
-
598  uint8_t Mode :4;
-
599  uint8_t Fan :4;
-
600  uint8_t ClockMins :8;
-
601  uint8_t ClockHours :8;
-
602  uint8_t OnHours :6;
-
603  uint8_t OnHalfHour :1;
-
604  uint8_t OnTimer :1;
-
605  uint8_t OffHours :6;
-
606  uint8_t OffHalfHour :1;
-
607  uint8_t OffTimer :1;
-
608  uint8_t Temp :8;
-
609  uint8_t SwingV :1;
-
610  uint8_t Sleep :1;
-
611  uint8_t :1;
-
612  uint8_t Power :1;
-
613  uint8_t Sum :4;
-
614  };
-
615 };
-
616 
- - - - - - -
623 const uint16_t kDaikin64Gap = kDaikin128Gap;
- -
625 const uint16_t kDaikin64Freq = kDaikin128Freq; // Hz.
-
626 const uint8_t kDaikin64Overhead = 9;
-
627 const int8_t kDaikin64ToleranceDelta = 5; // +5%
-
628 
-
629 const uint64_t kDaikin64KnownGoodState = 0x7C16161607204216;
-
630 const uint8_t kDaikin64Dry = 0b001;
-
631 const uint8_t kDaikin64Cool = 0b010;
-
632 const uint8_t kDaikin64Fan = 0b100;
-
633 const uint8_t kDaikin64FanAuto = 0b0001;
-
634 const uint8_t kDaikin64FanLow = 0b1000;
-
635 const uint8_t kDaikin64FanMed = 0b0100;
-
636 const uint8_t kDaikin64FanHigh = 0b0010;
-
637 const uint8_t kDaikin64FanQuiet = 0b1001;
-
638 const uint8_t kDaikin64FanTurbo = 0b0011;
-
639 const uint8_t kDaikin64MinTemp = 16; // Celsius
-
640 const uint8_t kDaikin64MaxTemp = 30; // Celsius
-
641 const uint8_t kDaikin64ChecksumOffset = 60;
-
642 const uint8_t kDaikin64ChecksumSize = 4; // Mask 0b1111 << 59
-
643 
-
644 // Legacy defines.
-
645 #define DAIKIN_COOL kDaikinCool
-
646 #define DAIKIN_HEAT kDaikinHeat
-
647 #define DAIKIN_FAN kDaikinFan
-
648 #define DAIKIN_AUTO kDaikinAuto
-
649 #define DAIKIN_DRY kDaikinDry
-
650 #define DAIKIN_MIN_TEMP kDaikinMinTemp
-
651 #define DAIKIN_MAX_TEMP kDaikinMaxTemp
-
652 #define DAIKIN_FAN_MIN kDaikinFanMin
-
653 #define DAIKIN_FAN_MAX kDaikinFanMax
-
654 #define DAIKIN_FAN_AUTO kDaikinFanAuto
-
655 #define DAIKIN_FAN_QUIET kDaikinFanQuiet
-
656 
-
658 class IRDaikinESP {
-
659  public:
-
660  explicit IRDaikinESP(const uint16_t pin, const bool inverted = false,
-
661  const bool use_modulation = true);
-
662 
-
663 #if SEND_DAIKIN
-
664  void send(const uint16_t repeat = kDaikinDefaultRepeat);
-
669  int8_t calibrate(void) { return _irsend.calibrate(); }
-
670 #endif
-
671  void begin(void);
-
672  void on(void);
-
673  void off(void);
-
674  void setPower(const bool on);
-
675  bool getPower(void) const;
-
676  void setTemp(const uint8_t temp);
-
677  uint8_t getTemp(void) const;
-
678  void setFan(const uint8_t fan);
-
679  uint8_t getFan(void) const;
-
680  void setMode(const uint8_t mode);
-
681  uint8_t getMode(void) const;
-
682  void setSwingVertical(const bool on);
-
683  bool getSwingVertical(void) const;
-
684  void setSwingHorizontal(const bool on);
-
685  bool getSwingHorizontal(void) const;
-
686  bool getQuiet(void) const;
-
687  void setQuiet(const bool on);
-
688  bool getPowerful(void) const;
-
689  void setPowerful(const bool on);
-
690  void setSensor(const bool on);
-
691  bool getSensor(void) const;
-
692  void setEcono(const bool on);
-
693  bool getEcono(void) const;
-
694  void setMold(const bool on);
-
695  bool getMold(void) const;
-
696  void setComfort(const bool on);
-
697  bool getComfort(void) const;
-
698  void enableOnTimer(const uint16_t starttime);
-
699  void disableOnTimer(void);
-
700  uint16_t getOnTime(void) const;
-
701  bool getOnTimerEnabled(void) const;
-
702  void enableOffTimer(const uint16_t endtime);
-
703  void disableOffTimer(void);
-
704  uint16_t getOffTime(void) const;
-
705  bool getOffTimerEnabled(void) const;
-
706  void setCurrentTime(const uint16_t mins_since_midnight);
-
707  uint16_t getCurrentTime(void) const;
-
708  void setCurrentDay(const uint8_t day_of_week);
-
709  uint8_t getCurrentDay(void) const;
-
710  void setWeeklyTimerEnable(const bool on);
-
711  bool getWeeklyTimerEnable(void) const;
-
712  uint8_t* getRaw(void);
-
713  void setRaw(const uint8_t new_code[],
-
714  const uint16_t length = kDaikinStateLength);
-
715  static bool validChecksum(uint8_t state[],
-
716  const uint16_t length = kDaikinStateLength);
-
717  static uint8_t convertMode(const stdAc::opmode_t mode);
-
718  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
719  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
720  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
721  stdAc::state_t toCommon(void) const;
-
722  String toString(void) const;
-
723 #ifndef UNIT_TEST
-
724 
-
725  private:
- -
727 #else
-
728  IRsendTest _irsend;
-
730 #endif
-
732  // # of bytes per command
- -
734  void stateReset(void);
-
735  void checksum(void);
-
736 };
-
737 
-
740 class IRDaikin2 {
-
741  public:
-
742  explicit IRDaikin2(const uint16_t pin, const bool inverted = false,
-
743  const bool use_modulation = true);
-
744 
-
745 #if SEND_DAIKIN2
-
746  void send(const uint16_t repeat = kDaikin2DefaultRepeat);
-
751  int8_t calibrate(void) { return _irsend.calibrate(); }
-
752 #endif
-
753  void begin(void);
-
754  void on(void);
-
755  void off(void);
-
756  void setPower(const bool state);
-
757  bool getPower(void) const;
-
758  void setTemp(const uint8_t temp);
-
759  uint8_t getTemp(void) const;
-
760  void setFan(const uint8_t fan);
-
761  uint8_t getFan(void) const;
-
762  uint8_t getMode(void) const;
-
763  void setMode(const uint8_t mode);
-
764  void setSwingVertical(const uint8_t position);
-
765  uint8_t getSwingVertical(void) const;
-
766  void setSwingHorizontal(const uint8_t position);
-
767  uint8_t getSwingHorizontal(void) const;
-
768  bool getQuiet(void) const;
-
769  void setQuiet(const bool on);
-
770  bool getPowerful(void) const;
-
771  void setPowerful(const bool on);
-
772  void setEcono(const bool on);
-
773  bool getEcono(void) const;
-
774  void setEye(const bool on);
-
775  bool getEye(void) const;
-
776  void setEyeAuto(const bool on);
-
777  bool getEyeAuto(void) const;
-
778  void setPurify(const bool on);
-
779  bool getPurify(void) const;
-
780  void setMold(const bool on);
-
781  bool getMold(void) const;
-
782  void enableOnTimer(const uint16_t starttime);
-
783  void disableOnTimer(void);
-
784  uint16_t getOnTime(void) const;
-
785  bool getOnTimerEnabled(void) const;
-
786  void enableSleepTimer(const uint16_t sleeptime);
-
787  void disableSleepTimer(void);
-
788  uint16_t getSleepTime(void) const;
-
789  bool getSleepTimerEnabled(void) const;
-
790  void enableOffTimer(const uint16_t endtime);
-
791  void disableOffTimer(void);
-
792  uint16_t getOffTime(void) const;
-
793  bool getOffTimerEnabled(void) const;
-
794  void setCurrentTime(const uint16_t time);
-
795  uint16_t getCurrentTime(void) const;
-
796  void setBeep(const uint8_t beep);
-
797  uint8_t getBeep(void) const;
-
798  void setLight(const uint8_t light);
-
799  uint8_t getLight(void) const;
-
800  void setClean(const bool on);
-
801  bool getClean(void) const;
-
802  void setFreshAir(const bool on);
-
803  bool getFreshAir(void) const;
-
804  void setFreshAirHigh(const bool on);
-
805  bool getFreshAirHigh(void) const;
-
806  uint8_t* getRaw(void);
-
807  void setRaw(const uint8_t new_code[]);
-
808  static bool validChecksum(uint8_t state[],
-
809  const uint16_t length = kDaikin2StateLength);
-
810  static uint8_t convertMode(const stdAc::opmode_t mode);
-
811  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
812  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
813  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
814  static stdAc::swingv_t toCommonSwingV(const uint8_t setting);
-
815  static stdAc::swingh_t toCommonSwingH(const uint8_t setting);
-
816  stdAc::state_t toCommon(void) const;
-
817  String toString(void) const;
-
818 #ifndef UNIT_TEST
-
819 
-
820  private:
- -
822 #else
-
823  IRsendTest _irsend;
-
825 #endif
-
827  // # of bytes per command
- -
829  void stateReset(void);
-
830  void checksum(void);
-
831  void clearOnTimerFlag(void);
-
832  void clearSleepTimerFlag(void);
-
833 };
-
834 
-
836 class IRDaikin216 {
-
837  public:
-
838  explicit IRDaikin216(const uint16_t pin, const bool inverted = false,
-
839  const bool use_modulation = true);
-
840 
-
841 #if SEND_DAIKIN216
-
842  void send(const uint16_t repeat = kDaikin216DefaultRepeat);
-
847  int8_t calibrate(void) { return _irsend.calibrate(); }
-
848 #endif
-
849  void begin(void);
-
850  uint8_t* getRaw(void);
-
851  void setRaw(const uint8_t new_code[]);
-
852  static bool validChecksum(uint8_t state[],
-
853  const uint16_t length = kDaikin216StateLength);
-
854  void on(void);
-
855  void off(void);
-
856  void setPower(const bool on);
-
857  bool getPower(void) const;
-
858  void setTemp(const uint8_t temp);
-
859  uint8_t getTemp(void) const;
-
860  void setMode(const uint8_t mode);
-
861  uint8_t getMode(void) const;
-
862  static uint8_t convertMode(const stdAc::opmode_t mode);
-
863  void setFan(const uint8_t fan);
-
864  uint8_t getFan(void) const;
-
865  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
866  void setSwingVertical(const bool on);
-
867  bool getSwingVertical(void) const;
-
868  void setSwingHorizontal(const bool on);
-
869  bool getSwingHorizontal(void) const;
-
870  void setQuiet(const bool on);
-
871  bool getQuiet(void) const;
-
872  void setPowerful(const bool on);
-
873  bool getPowerful(void) const;
-
874  stdAc::state_t toCommon(void) const;
-
875  String toString(void) const;
-
876 #ifndef UNIT_TEST
-
877 
-
878  private:
- -
880 #else
-
881  IRsendTest _irsend;
-
883 #endif
-
885  // # of bytes per command
- -
887  void stateReset(void);
-
888  void checksum(void);
-
889 };
-
890 
-
892 class IRDaikin160 {
-
893  public:
-
894  explicit IRDaikin160(const uint16_t pin, const bool inverted = false,
-
895  const bool use_modulation = true);
-
896 
-
897 #if SEND_DAIKIN160
-
898  void send(const uint16_t repeat = kDaikin160DefaultRepeat);
-
903  int8_t calibrate(void) { return _irsend.calibrate(); }
-
904 #endif
-
905  void begin(void);
-
906  uint8_t* getRaw(void);
-
907  void setRaw(const uint8_t new_code[]);
-
908  static bool validChecksum(uint8_t state[],
-
909  const uint16_t length = kDaikin160StateLength);
-
910  void on(void);
-
911  void off(void);
-
912  void setPower(const bool on);
-
913  bool getPower(void) const;
-
914  void setTemp(const uint8_t temp);
-
915  uint8_t getTemp(void) const;
-
916  void setMode(const uint8_t mode);
-
917  uint8_t getMode(void) const;
-
918  static uint8_t convertMode(const stdAc::opmode_t mode);
-
919  void setFan(const uint8_t fan);
-
920  uint8_t getFan(void) const;
-
921  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
922  void setSwingVertical(const uint8_t position);
-
923  uint8_t getSwingVertical(void) const;
-
924  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
925  static stdAc::swingv_t toCommonSwingV(const uint8_t setting);
-
926  stdAc::state_t toCommon(void) const;
-
927  String toString(void) const;
-
928 #ifndef UNIT_TEST
-
929 
-
930  private:
- -
932 #else
-
933  IRsendTest _irsend;
-
935 #endif
-
937  // # of bytes per command
- -
939  void stateReset(void);
-
940  void checksum(void);
-
941 };
-
942 
-
944 class IRDaikin176 {
-
945  public:
-
946  explicit IRDaikin176(const uint16_t pin, const bool inverted = false,
-
947  const bool use_modulation = true);
-
948 
-
949 #if SEND_DAIKIN176
-
950  void send(const uint16_t repeat = kDaikin176DefaultRepeat);
-
955  int8_t calibrate(void) { return _irsend.calibrate(); }
-
956 #endif
-
957  void begin(void);
-
958  uint8_t* getRaw(void);
-
959  void setRaw(const uint8_t new_code[]);
-
960  static bool validChecksum(uint8_t state[],
-
961  const uint16_t length = kDaikin176StateLength);
-
962  void on(void);
-
963  void off(void);
-
964  void setPower(const bool on);
-
965  bool getPower(void) const;
-
966  void setTemp(const uint8_t temp);
-
967  uint8_t getTemp(void) const;
-
968  void setMode(const uint8_t mode);
-
969  uint8_t getMode(void) const;
-
970  static uint8_t convertMode(const stdAc::opmode_t mode);
-
971  void setFan(const uint8_t fan);
-
972  uint8_t getFan(void) const;
-
973  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
974  void setSwingHorizontal(const uint8_t position);
-
975  uint8_t getSwingHorizontal(void) const;
-
976  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
977  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
978  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
979  static stdAc::swingh_t toCommonSwingH(const uint8_t setting);
-
980  stdAc::state_t toCommon(void) const;
-
981  String toString(void) const;
-
982 
-
983 #ifndef UNIT_TEST
-
984 
-
985  private:
- -
987 #else
-
988  IRsendTest _irsend;
-
990 #endif
-
992  // # of bytes per command
- -
994  uint8_t _saved_temp;
-
995  void stateReset(void);
-
996  void checksum(void);
-
997 };
-
998 
- -
1002  public:
-
1003  explicit IRDaikin128(const uint16_t pin, const bool inverted = false,
-
1004  const bool use_modulation = true);
-
1005 #if SEND_DAIKIN128
-
1006  void send(const uint16_t repeat = kDaikin128DefaultRepeat);
-
1011  int8_t calibrate(void) { return _irsend.calibrate(); }
-
1012 #endif // SEND_DAIKIN128
-
1013  void begin(void);
-
1014  void setPowerToggle(const bool toggle);
-
1015  bool getPowerToggle(void) const;
-
1016  void setTemp(const uint8_t temp);
-
1017  uint8_t getTemp(void) const;
-
1018  void setFan(const uint8_t fan);
-
1019  uint8_t getFan(void) const;
-
1020  uint8_t getMode(void) const;
-
1021  void setMode(const uint8_t mode);
-
1022  void setSwingVertical(const bool on);
-
1023  bool getSwingVertical(void) const;
-
1024  bool getSleep(void) const;
-
1025  void setSleep(const bool on);
-
1026  bool getQuiet(void) const;
-
1027  void setQuiet(const bool on);
-
1028  bool getPowerful(void) const;
-
1029  void setPowerful(const bool on);
-
1030  void setEcono(const bool on);
-
1031  bool getEcono(void) const;
-
1032  void setOnTimer(const uint16_t mins_since_midnight);
-
1033  uint16_t getOnTimer(void) const;
-
1034  bool getOnTimerEnabled(void) const;
-
1035  void setOnTimerEnabled(const bool on);
-
1036  void setOffTimer(const uint16_t mins_since_midnight);
-
1037  uint16_t getOffTimer(void) const;
-
1038  bool getOffTimerEnabled(void) const;
-
1039  void setOffTimerEnabled(const bool on);
-
1040  void setClock(const uint16_t mins_since_midnight);
-
1041  uint16_t getClock(void) const;
-
1042  void setLightToggle(const uint8_t unit_type);
-
1043  uint8_t getLightToggle(void) const;
-
1044  uint8_t* getRaw(void);
-
1045  void setRaw(const uint8_t new_code[]);
-
1046  static bool validChecksum(uint8_t state[]);
-
1047  static uint8_t convertMode(const stdAc::opmode_t mode);
-
1048  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
1049  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
1050  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
1051  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
1052  String toString(void) const;
-
1053 #ifndef UNIT_TEST
-
1054 
-
1055  private:
- -
1057 #else
-
1058  IRsendTest _irsend;
-
1060 #endif
-
1062  // # of bytes per command
- -
1064  void stateReset(void);
-
1065  static uint8_t calcFirstChecksum(const uint8_t state[]);
-
1066  static uint8_t calcSecondChecksum(const uint8_t state[]);
-
1067  void checksum(void);
-
1068 };
-
1069 
- -
1072  public:
-
1073  explicit IRDaikin152(const uint16_t pin, const bool inverted = false,
-
1074  const bool use_modulation = true);
-
1075 
-
1076 #if SEND_DAIKIN152
-
1077  void send(const uint16_t repeat = kDaikin152DefaultRepeat);
-
1082  int8_t calibrate(void) { return _irsend.calibrate(); }
-
1083 #endif
-
1084  void begin(void);
-
1085  uint8_t* getRaw(void);
-
1086  void setRaw(const uint8_t new_code[]);
-
1087  static bool validChecksum(uint8_t state[],
-
1088  const uint16_t length = kDaikin152StateLength);
-
1089  void on(void);
-
1090  void off(void);
-
1091  void setPower(const bool on);
-
1092  bool getPower(void) const;
-
1093  void setTemp(const uint8_t temp);
-
1094  uint8_t getTemp(void) const;
-
1095  void setFan(const uint8_t fan);
-
1096  uint8_t getFan(void) const;
-
1097  void setMode(const uint8_t mode);
-
1098  uint8_t getMode(void) const;
-
1099  void setSwingV(const bool on);
-
1100  bool getSwingV(void) const;
-
1101  bool getQuiet(void) const;
-
1102  void setQuiet(const bool on);
-
1103  bool getPowerful(void) const;
-
1104  void setPowerful(const bool on);
-
1105  void setSensor(const bool on);
-
1106  bool getSensor(void) const;
-
1107  void setEcono(const bool on);
-
1108  bool getEcono(void) const;
-
1109  void setComfort(const bool on);
-
1110  bool getComfort(void) const;
-
1111  static uint8_t convertMode(const stdAc::opmode_t mode);
-
1112  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
1113  stdAc::state_t toCommon(void) const;
-
1114  String toString(void) const;
-
1115 #ifndef UNIT_TEST
-
1116 
-
1117  private:
- -
1119 #else
-
1120  IRsendTest _irsend;
-
1122 #endif
-
1124  // # of bytes per command
- -
1126  void stateReset(void);
-
1127  void checksum(void);
-
1128 };
-
1129 
-
1131 class IRDaikin64 {
-
1132  public:
-
1133  explicit IRDaikin64(const uint16_t pin, const bool inverted = false,
-
1134  const bool use_modulation = true);
-
1135 
-
1136 #if SEND_DAIKIN64
-
1137  void send(const uint16_t repeat = kDaikin64DefaultRepeat);
-
1142  int8_t calibrate(void) { return _irsend.calibrate(); }
-
1143 #endif // SEND_DAIKIN64
-
1144  void begin(void);
-
1145  uint64_t getRaw(void);
-
1146  void setRaw(const uint64_t new_state);
-
1147  static uint8_t calcChecksum(const uint64_t state);
-
1148  static bool validChecksum(const uint64_t state);
-
1149  void setPowerToggle(const bool on);
-
1150  bool getPowerToggle(void) const;
-
1151  void setTemp(const uint8_t temp);
-
1152  uint8_t getTemp(void) const;
-
1153  void setFan(const uint8_t fan);
-
1154  uint8_t getFan(void) const;
-
1155  void setMode(const uint8_t mode);
-
1156  uint8_t getMode(void) const;
-
1157  void setSwingVertical(const bool on);
-
1158  bool getSwingVertical(void) const;
-
1159  void setSleep(const bool on);
-
1160  bool getSleep(void) const;
-
1161  bool getQuiet(void) const;
-
1162  void setQuiet(const bool on);
-
1163  bool getTurbo(void) const;
-
1164  void setTurbo(const bool on);
-
1165  void setClock(const uint16_t mins_since_midnight);
-
1166  uint16_t getClock(void) const;
-
1167  void setOnTimeEnabled(const bool on);
-
1168  bool getOnTimeEnabled(void) const;
-
1169  void setOnTime(const uint16_t mins_since_midnight);
-
1170  uint16_t getOnTime(void) const;
-
1171  void setOffTimeEnabled(const bool on);
-
1172  bool getOffTimeEnabled(void) const;
-
1173  void setOffTime(const uint16_t mins_since_midnight);
-
1174  uint16_t getOffTime(void) const;
-
1175  static uint8_t convertMode(const stdAc::opmode_t mode);
-
1176  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
1177  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
1178  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
1179  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
1180  String toString(void) const;
-
1181 #ifndef UNIT_TEST
-
1182 
-
1183  private:
- -
1185 #else
-
1186  IRsendTest _irsend;
-
1188 #endif
- -
1191  void stateReset(void);
-
1192  void checksum(void);
-
1193 };
-
1194 #endif // IR_DAIKIN_H_
-
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:3559
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:2702
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_Daikin.cpp:354
-
const uint8_t kDaikin2SwingHRightMax
Definition: ir_Daikin.h:296
-
const uint8_t kDaikin64ChecksumOffset
Definition: ir_Daikin.h:641
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:3389
-
void setCurrentTime(const uint16_t time)
Set the clock on the A/C unit.
Definition: ir_Daikin.cpp:933
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:489
-
const uint16_t kDaikin152DefaultRepeat
Definition: IRremoteESP8266.h:951
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_Daikin.cpp:1201
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:2019
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikinStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:127
-
const uint16_t kDaikin152OneSpace
Definition: ir_Daikin.h:586
-
uint8_t pad3[4]
Definition: ir_Daikin.h:336
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:1565
-
uint8_t Power
Definition: ir_Daikin.h:426
-
void setOffTimeEnabled(const bool on)
Set the enable status of the Off Timer.
Definition: ir_Daikin.cpp:3791
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:1819
-
uint8_t Temp
Definition: ir_Daikin.h:553
-
void send(const uint16_t repeat=kDaikinDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:118
-
Native representation of a Daikin160 A/C message.
Definition: ir_Daikin.h:358
-
uint16_t getClock(void) const
Get the clock time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:2838
-
uint8_t Power
Definition: ir_Daikin.h:368
-
uint8_t Sum
Definition: ir_Daikin.h:577
-
const uint8_t kDaikinDry
Definition: ir_Daikin.h:131
-
bool getOffTimeEnabled(void) const
Get the enable status of the Off Timer.
Definition: ir_Daikin.cpp:3797
-
uint16_t getOnTime(void) const
Get the On Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:968
-
void setPowerful(const bool on)
Set the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:1160
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:1534
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:2183
-
uint16_t getOffTime(void) const
Get the Off Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:3803
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:148
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:669
-
bool getOffTimerEnabled(void) const
Get the enable status of the Off Timer.
Definition: ir_Daikin.cpp:1001
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:3320
-
bool getOffTimerEnabled(void) const
Get the enable status of the Off Timer.
Definition: ir_Daikin.cpp:2883
-
uint8_t raw[kDaikin160StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:359
-
Native representation of a Daikin176 A/C message.
Definition: ir_Daikin.h:410
-
uint8_t Sum1
Definition: ir_Daikin.h:416
-
bool getOnTimerEnabled(void) const
Get the enable status of the On Timer.
Definition: ir_Daikin.cpp:974
-
bool getMold(void) const
Get the Mould mode status of the A/C.
Definition: ir_Daikin.cpp:366
-
uint8_t Mode
Definition: ir_Daikin.h:598
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:854
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:2965
-
const uint16_t kDaikin152ZeroSpace
Definition: ir_Daikin.h:587
-
const uint16_t kDaikin64OneSpace
Definition: ir_Daikin.h:620
-
const uint16_t kDaikin2DefaultRepeat
Definition: IRremoteESP8266.h:940
-
const uint8_t kDaikin64Fan
Definition: ir_Daikin.h:632
-
uint16_t getOffTimer(void) const
Get the Off Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:2895
-
uint64_t Power
Definition: ir_Daikin.h:85
-
uint16_t getOnTime(void) const
Get the On Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:397
-
const uint16_t kDaikin64Freq
Definition: ir_Daikin.h:625
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:3251
-
bool getPowerful(void) const
Get the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:1168
-
uint8_t SwingV
Definition: ir_Daikin.h:492
-
uint8_t pad2[3]
Definition: ir_Daikin.h:331
-
void send(const uint16_t repeat=kDaikin2DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:706
-
uint16_t getCurrentTime(void) const
Get the clock time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:941
-
uint8_t getLightToggle(void) const
Get the Light toggle setting of the A/C.
Definition: ir_Daikin.cpp:2917
-
bool getPowerToggle(void) const
Get the Power toggle setting of the A/C.
Definition: ir_Daikin.cpp:3582
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:2689
-
void setEyeAuto(const bool on)
Set the Automatic Eye (Sensor) mode of the A/C.
Definition: ir_Daikin.cpp:1079
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_Daikin.cpp:2381
-
const uint8_t kDaikin176SwingHAuto
Definition: ir_Daikin.h:465
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_Daikin.cpp:3352
-
uint8_t Mode
Definition: ir_Daikin.h:549
-
IRDaikin2(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:696
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:1923
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:113
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:1528
-
uint8_t pad1[4]
Definition: ir_Daikin.h:560
-
const uint16_t kDaikin176Section2Length
Definition: ir_Daikin.h:455
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
uint8_t Power
Definition: ir_Daikin.h:547
-
void setSwingVertical(const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:865
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:1194
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:3849
-
uint64_t Fan
Definition: ir_Daikin.h:99
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikin2StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:715
-
uint64_t FreshAir
Definition: ir_Daikin.h:193
-
const uint8_t kDaikin64Overhead
Definition: ir_Daikin.h:626
-
const uint16_t kDaikinOneSpace
Definition: ir_Daikin.h:168
-
const uint16_t kDaikin2ZeroSpace
Definition: ir_Daikin.h:273
-
Class for handling detailed Daikin 280-bit A/C messages.
Definition: ir_Daikin.h:658
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:2309
-
const uint8_t kDaikin2SwingHOff
Definition: ir_Daikin.h:298
-
const uint16_t kDaikin2HdrMark
Definition: ir_Daikin.h:269
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikin216StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:1459
-
void setOffTime(const uint16_t mins_since_midnight)
Set the Off Timer time for the A/C unit.
Definition: ir_Daikin.cpp:3809
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Daikin.cpp:2404
-
uint8_t Sum2
Definition: ir_Daikin.h:387
-
uint8_t pad[5]
Definition: ir_Daikin.h:506
-
uint8_t getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:2374
-
void off(void)
Change the power setting to Off.
Definition: ir_Daikin.cpp:1871
-
Class for handling detailed Daikin 312-bit A/C messages.
Definition: ir_Daikin.h:740
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:847
-
const uint16_t kDaikin176StateLength
Definition: IRremoteESP8266.h:952
-
void setSwingHorizontal(const uint8_t position)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:2362
-
Class for handling detailed Daikin 128-bit A/C messages.
Definition: ir_Daikin.h:1001
-
void setMold(const bool on)
Set the Mould (filter) mode of the A/C.
Definition: ir_Daikin.cpp:1031
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
static stdAc::swingh_t toCommonSwingH(const uint8_t setting)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Daikin.cpp:1217
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Daikin.cpp:1875
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:1586
-
uint16_t getOffTime(void) const
Get the Off Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:995
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:1639
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:2696
-
void setSwingHorizontal(const bool on)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:291
-
void setPowerful(const bool on)
Set the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:1645
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:2664
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Daikin.cpp:1516
-
const uint16_t kDaikin64HdrMark
Definition: ir_Daikin.h:617
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:1798
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:2604
-
const uint16_t kDaikin176HdrMark
Definition: ir_Daikin.h:447
-
void setOffTimer(const uint16_t mins_since_midnight)
Set the Off Timer time for the A/C unit.
Definition: ir_Daikin.cpp:2889
-
uint8_t SwingV
Definition: ir_Daikin.h:325
-
uint8_t Sum
Definition: ir_Daikin.h:613
-
void setClock(const uint16_t mins_since_midnight)
Set the clock on the A/C unit.
Definition: ir_Daikin.cpp:3752
-
const uint8_t kDaikin128FanPowerful
Definition: ir_Daikin.h:533
-
const uint16_t kDaikin128Freq
Definition: ir_Daikin.h:512
-
void clearOnTimerFlag(void)
Clear the On Timer flag.
Definition: ir_Daikin.cpp:955
-
const uint16_t kDaikinGap
Definition: ir_Daikin.h:169
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:1056
-
const uint8_t kDaikin128MinTemp
Definition: ir_Daikin.h:535
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:1868
-
bool getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:2764
-
const uint8_t kDaikin2SwingVSwing
Definition: ir_Daikin.h:288
-
void off(void)
Change the power setting to Off.
Definition: ir_Daikin.cpp:1512
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:3588
-
const uint8_t kDaikin2SwingVLowerMiddle
Definition: ir_Daikin.h:281
-
bool getPurify(void) const
Get the Purify (Filter) mode status of the A/C.
Definition: ir_Daikin.cpp:1180
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:2219
-
uint8_t OnHours
Definition: ir_Daikin.h:602
-
void disableOffTimer(void)
Disable the Off timer.
Definition: ir_Daikin.cpp:987
-
uint8_t Power
Definition: ir_Daikin.h:495
-
const uint16_t kDaikin160Gap
Definition: ir_Daikin.h:397
-
uint8_t Temp
Definition: ir_Daikin.h:434
-
Class for handling detailed Daikin 64-bit A/C messages.
Definition: ir_Daikin.h:1131
-
const uint16_t kDaikinBitMark
Definition: ir_Daikin.h:166
-
void enableOffTimer(const uint16_t endtime)
Set the enable status & time of the Off Timer.
Definition: ir_Daikin.cpp:980
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Daikin.cpp:3536
-
uint8_t Fan
Definition: ir_Daikin.h:382
-
const uint16_t kDaikin152BitMark
Definition: ir_Daikin.h:585
-
Daikin128Protocol _
Definition: ir_Daikin.h:1063
-
const uint8_t kDaikin176FanMax
Definition: ir_Daikin.h:464
-
void setCurrentTime(const uint16_t mins_since_midnight)
Set the clock on the A/C unit.
Definition: ir_Daikin.cpp:434
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:3554
-
const uint16_t kDaikin152HdrSpace
Definition: ir_Daikin.h:584
-
const uint8_t kDaikin2SwingVHighest
Definition: ir_Daikin.h:278
-
uint8_t SwingV
Definition: ir_Daikin.h:609
-
uint8_t Fan
Definition: ir_Daikin.h:326
-
const uint16_t kDaikin160BitMark
Definition: ir_Daikin.h:394
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:779
-
uint8_t Econo
Definition: ir_Daikin.h:117
-
void setEcono(const bool on)
Set the Economy mode of the A/C.
Definition: ir_Daikin.cpp:3344
-
uint8_t getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:883
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:3294
-
bool getPowerful(void) const
Get the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:3338
-
const uint8_t kDaikin2MinCoolTemp
Definition: ir_Daikin.h:301
-
uint64_t Mold
Definition: ir_Daikin.h:195
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:3282
-
uint64_t Comfort
Definition: ir_Daikin.h:68
- -
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:2247
-
const uint8_t kDaikin64FanQuiet
Definition: ir_Daikin.h:637
-
uint64_t SwingV
Definition: ir_Daikin.h:211
-
void setPowerToggle(const bool toggle)
Set the Power toggle setting of the A/C.
Definition: ir_Daikin.cpp:2625
-
bool getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:3734
-
uint8_t Econo
Definition: ir_Daikin.h:571
-
Daikin176Protocol _
Definition: ir_Daikin.h:993
-
const uint8_t kDaikin152FanTemp
Definition: ir_Daikin.h:591
-
bool getPowerful(void) const
Get the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:328
-
Class for handling detailed Daikin 216-bit A/C messages.
Definition: ir_Daikin.h:836
-
uint64_t Powerful
Definition: ir_Daikin.h:243
-
const uint8_t kDaikin64Cool
Definition: ir_Daikin.h:631
-
void setMold(const bool on)
Set the Mould mode of the A/C.
Definition: ir_Daikin.cpp:360
-
uint8_t pad0[6]
Definition: ir_Daikin.h:362
-
uint64_t OnTimer
Definition: ir_Daikin.h:222
-
const uint8_t kDaikin64FanTurbo
Definition: ir_Daikin.h:638
-
const uint8_t kDaikinFan
Definition: ir_Daikin.h:134
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:1184
-
void setFreshAirHigh(const bool on)
Set the (High) Fresh Air mode of the A/C.
Definition: ir_Daikin.cpp:1067
-
const uint16_t kDaikinZeroSpace
Definition: ir_Daikin.h:167
-
const uint8_t kDaikinSection1Length
Definition: ir_Daikin.h:146
-
uint8_t SwingH
Definition: ir_Daikin.h:328
-
uint8_t OffHalfHour
Definition: ir_Daikin.h:606
-
const uint8_t kDaikinByteChecksum2
Definition: ir_Daikin.h:151
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:1082
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:2637
-
uint8_t raw[kDaikin128StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:470
-
Native representation of a Daikin216 A/C message.
Definition: ir_Daikin.h:304
-
void setSensor(const bool on)
Set the Sensor mode of the A/C.
Definition: ir_Daikin.cpp:334
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:1909
-
uint64_t OnTimer
Definition: ir_Daikin.h:86
-
uint64_t Econo
Definition: ir_Daikin.h:252
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint16_t kDaikinUnusedTime
Definition: ir_Daikin.h:153
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:955
-
const uint8_t kDaikin176Dry
Definition: ir_Daikin.h:461
-
uint8_t Wall
Definition: ir_Daikin.h:503
-
const uint8_t kDaikin176Auto
Definition: ir_Daikin.h:460
-
void setPowerful(const bool on)
Set the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:3326
-
void disableOnTimer(void)
Disable the On timer.
Definition: ir_Daikin.cpp:960
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint16_t kDaikin216ZeroSpace
Definition: ir_Daikin.h:347
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:2259
-
void off(void)
Change the power setting to Off.
Definition: ir_Daikin.cpp:3201
-
uint16_t getSleepTime(void) const
Get the Sleep Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:1134
-
uint8_t Sum1
Definition: ir_Daikin.h:496
-
uint8_t OffHalfHour
Definition: ir_Daikin.h:487
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:3217
-
Native representation of a Daikin2 A/C message.
Definition: ir_Daikin.h:175
-
bool getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:1607
-
uint64_t OnTime
Definition: ir_Daikin.h:104
-
const uint8_t kDaikin2SwingHLeft
Definition: ir_Daikin.h:293
-
uint8_t raw[kDaikin176StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:411
-
uint8_t OffHours
Definition: ir_Daikin.h:486
-
static stdAc::swingh_t toCommonSwingH(const uint8_t setting)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Daikin.cpp:2392
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:701
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:3718
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:1481
-
void setPowerful(const bool on)
Set the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:317
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:2045
-
uint64_t OffTime
Definition: ir_Daikin.h:241
-
const uint16_t kDaikinHdrSpace
Definition: ir_Daikin.h:165
-
const uint16_t kDaikin160HdrSpace
Definition: ir_Daikin.h:393
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void setOnTimeEnabled(const bool on)
Set the enable status of the On Timer.
Definition: ir_Daikin.cpp:3767
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:3170
-
uint64_t Sum1
Definition: ir_Daikin.h:214
-
IRDaikinESP(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:108
-
uint8_t WeeklyTimer
Definition: ir_Daikin.h:119
-
uint8_t raw[kDaikinStateLength]
The state of the IR remote.
Definition: ir_Daikin.h:62
-
void setPower(const bool state)
Change the power setting.
Definition: ir_Daikin.cpp:791
-
const uint8_t kDaikinCurIndex
Definition: ir_Daikin.h:161
-
const uint8_t kDaikin160SwingVHighest
Definition: ir_Daikin.h:406
-
void setSwingVertical(const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:1966
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:2731
-
uint8_t pad3[2]
Definition: ir_Daikin.h:440
-
bool getPowerToggle(void) const
Get the Power toggle setting of the A/C.
Definition: ir_Daikin.cpp:2631
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:1952
-
uint8_t Powerful
Definition: ir_Daikin.h:333
-
const uint16_t kDaikin2Section2Length
Definition: ir_Daikin.h:276
-
uint8_t pad1[5]
Definition: ir_Daikin.h:418
-
bool getSensor(void) const
Get the Sensor mode of the A/C.
Definition: ir_Daikin.cpp:340
-
uint8_t pad[3]
Definition: ir_Daikin.h:177
-
const uint16_t kDaikin152StateLength
Definition: IRremoteESP8266.h:949
-
uint8_t pad1[5]
Definition: ir_Daikin.h:366
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:1887
-
const uint8_t kDaikin128BitCeiling
Definition: ir_Daikin.h:538
-
void off(void)
Change the power setting to Off.
Definition: ir_Daikin.cpp:206
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:836
-
bool getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:3306
-
const uint16_t kDaikin160OneSpace
Definition: ir_Daikin.h:395
-
bool getFreshAirHigh(void) const
Get the (High) Fresh Air mode status of the A/C.
Definition: ir_Daikin.cpp:1073
-
void setFreshAir(const bool on)
Set the Fresh Air mode of the A/C.
Definition: ir_Daikin.cpp:1055
-
void setLight(const uint8_t light)
Set the Light (LED) mode of the A/C.
Definition: ir_Daikin.cpp:1025
-
uint8_t raw[kDaikin2StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:178
-
const uint16_t kDaikin128ZeroSpace
Definition: ir_Daikin.h:519
-
const uint8_t kDaikinFanMax
Definition: ir_Daikin.h:139
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:2643
-
const uint16_t kDaikin176Gap
Definition: ir_Daikin.h:452
-
void enableOnTimer(const uint16_t starttime)
Set the enable status & time of the On Timer.
Definition: ir_Daikin.cpp:948
-
void setOffTimerEnabled(const bool on)
Set the enable status of the Off Timer.
Definition: ir_Daikin.cpp:2877
-
const uint8_t kDaikin128FanMed
Definition: ir_Daikin.h:531
-
uint8_t Sum2
Definition: ir_Daikin.h:508
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:2330
-
uint8_t Fan
Definition: ir_Daikin.h:599
-
void off(void)
Change the power setting to Off..
Definition: ir_Daikin.cpp:2236
-
uint8_t getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:929
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:1504
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:216
-
const uint8_t kDaikinSwingOn
Definition: ir_Daikin.h:142
-
const uint16_t kDaikin216Freq
Definition: ir_Daikin.h:342
-
void setSwingVertical(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:279
-
const uint16_t kDaikin216StateLength
Definition: IRremoteESP8266.h:955
-
const uint16_t kDaikin176Freq
Definition: ir_Daikin.h:446
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:2795
-
uint8_t pad0[7]
Definition: ir_Daikin.h:308
-
uint8_t Temp
Definition: ir_Daikin.h:608
-
uint8_t Mold
Definition: ir_Daikin.h:122
-
uint16_t getOnTimer(void) const
Get the On Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:2871
-
const uint16_t kDaikin2Section1Length
Definition: ir_Daikin.h:275
-
void setLightToggle(const uint8_t unit_type)
Set the Light toggle setting of the A/C.
Definition: ir_Daikin.cpp:2902
-
const uint8_t kDaikin2SwingHMiddle
Definition: ir_Daikin.h:294
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:821
-
const uint16_t kDaikin152Freq
Definition: ir_Daikin.h:581
-
void send(const uint16_t repeat=kDaikin128DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:2618
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:3312
-
const uint16_t kDaikin128HdrSpace
Definition: ir_Daikin.h:516
-
const uint8_t kDaikinBeepOff
Definition: ir_Daikin.h:156
-
uint8_t Fan
Definition: ir_Daikin.h:476
-
uint8_t Sleep
Definition: ir_Daikin.h:610
-
uint64_t SwingH
Definition: ir_Daikin.h:209
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:3186
-
void setSensor(const bool on)
Set the Sensor mode of the A/C.
Definition: ir_Daikin.cpp:3358
-
const uint16_t kDaikin176HdrSpace
Definition: ir_Daikin.h:448
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Daikin.cpp:2297
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:3623
-
const uint16_t kDaikin2Sections
Definition: ir_Daikin.h:274
-
const uint8_t kDaikin160SwingVHigh
Definition: ir_Daikin.h:405
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:1232
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:1551
-
static uint8_t calcSecondChecksum(const uint8_t state[])
Definition: ir_Daikin.cpp:2569
-
void setComfort(const bool on)
Set the Comfort mode of the A/C.
Definition: ir_Daikin.cpp:372
-
const uint16_t kDaikin128StateLength
Definition: IRremoteESP8266.h:946
-
const uint16_t kDaikin176DefaultRepeat
Definition: IRremoteESP8266.h:954
-
uint64_t OffTimer
Definition: ir_Daikin.h:223
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:2588
-
const uint8_t kDaikin128BitWall
Definition: ir_Daikin.h:537
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:3651
-
const uint16_t kDaikin2BitMark
Definition: ir_Daikin.h:271
-
uint64_t Mode
Definition: ir_Daikin.h:225
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikin152StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:3161
-
const uint16_t kDaikin2LeaderSpace
Definition: ir_Daikin.h:267
-
Daikin216Protocol _
Definition: ir_Daikin.h:886
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:3415
-
void setComfort(const bool on)
Set the Comfort mode of the A/C.
Definition: ir_Daikin.cpp:3370
-
static stdAc::swingv_t toCommonSwingV(const uint8_t setting)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Daikin.cpp:908
-
bool getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:1619
-
const uint16_t kDaikin160Sections
Definition: ir_Daikin.h:398
-
void setSwingV(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:3300
-
uint8_t Sensor
Definition: ir_Daikin.h:572
-
uint8_t getCurrentDay(void) const
Get the current day of the week to be sent to the A/C unit.
Definition: ir_Daikin.cpp:456
-
const uint8_t kDaikin64FanAuto
Definition: ir_Daikin.h:633
-
void setSwingHorizontal(const uint8_t position)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:923
-
uint16_t getCurrentTime(void) const
Get the clock time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:442
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:1626
-
const uint16_t kDaikin160Freq
Definition: ir_Daikin.h:391
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:810
-
const uint8_t kDaikin64Dry
Definition: ir_Daikin.h:630
-
const uint8_t kDaikin2SwingVBreeze
Definition: ir_Daikin.h:284
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:184
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:3815
-
IRDaikin176(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:2157
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikin160StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:1804
-
bool getSleep(void) const
Get the Sleep mode of the A/C.
Definition: ir_Daikin.cpp:2776
-
const uint8_t kDaikin64FanLow
Definition: ir_Daikin.h:634
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:2190
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:3198
-
bool getPowerful(void) const
Get the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:1653
-
IRDaikin160(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:1793
-
uint8_t Mode
Definition: ir_Daikin.h:428
-
const uint8_t kDaikinBeepLoud
Definition: ir_Daikin.h:155
-
const uint8_t kDaikinFanAuto
Definition: ir_Daikin.h:140
-
uint16_t getClock(void) const
Get the clock time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:3761
-
uint64_t OnTime
Definition: ir_Daikin.h:240
-
const uint8_t kDaikin128Dry
Definition: ir_Daikin.h:524
-
void setSwingHorizontal(const bool on)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:1613
-
const uint64_t kDaikin64KnownGoodState
Definition: ir_Daikin.h:629
-
uint8_t Quiet
Definition: ir_Daikin.h:564
-
static bool validChecksum(uint8_t state[], const uint16_t length=kDaikin176StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:2168
-
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Daikin.cpp:3565
-
uint8_t SwingV
Definition: ir_Daikin.h:374
-
uint8_t Sum1
Definition: ir_Daikin.h:310
-
const uint16_t kDaikin216Sections
Definition: ir_Daikin.h:349
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:2323
-
const uint8_t kDaikin176Heat
Definition: ir_Daikin.h:458
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:1595
-
IRDaikin128(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:2557
-
uint8_t ModeButton
Definition: ir_Daikin.h:424
-
uint8_t ClockMins
Definition: ir_Daikin.h:478
-
uint8_t OnHours
Definition: ir_Daikin.h:482
-
uint8_t Ceiling
Definition: ir_Daikin.h:500
-
const uint8_t kDaikin152DryTemp
Definition: ir_Daikin.h:590
-
void setCurrentDay(const uint8_t day_of_week)
Set the current day of the week to be sent to the A/C unit.
Definition: ir_Daikin.cpp:449
-
IRDaikin64(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:3518
-
uint8_t Temp
Definition: ir_Daikin.h:320
-
IRDaikin152(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Daikin.cpp:3142
-
uint8_t Sum2
Definition: ir_Daikin.h:338
-
const uint16_t kDaikin160HdrMark
Definition: ir_Daikin.h:392
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:2162
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:1445
-
const uint16_t kDaikin64ZeroSpace
Definition: ir_Daikin.h:621
-
uint8_t Sleep
Definition: ir_Daikin.h:493
-
static bool validChecksum(uint8_t state[])
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:2577
-
const uint16_t kDaikin128SectionLength
Definition: ir_Daikin.h:523
-
const uint8_t kDaikin176Cool
Definition: ir_Daikin.h:459
-
void setTurbo(const bool on)
Set the Turbo (Powerful) mode of the A/C.
Definition: ir_Daikin.cpp:3702
-
const uint16_t kDaikin128LeaderSpace
Definition: ir_Daikin.h:514
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:841
-
void setWeeklyTimerEnable(const bool on)
Set the enable status of the Weekly Timer.
Definition: ir_Daikin.cpp:462
-
Daikin2Protocol _
Definition: ir_Daikin.h:828
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:1142
-
const uint16_t kDaikin2LeaderMark
Definition: ir_Daikin.h:266
-
const uint8_t kDaikinBeepQuiet
Definition: ir_Daikin.h:154
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:2930
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:3602
-
uint8_t Mode
Definition: ir_Daikin.h:475
-
uint8_t Power
Definition: ir_Daikin.h:314
-
const uint8_t kDaikin2SwingVAuto
Definition: ir_Daikin.h:287
-
Daikin160Protocol _
Definition: ir_Daikin.h:938
-
Native representation of a Daikin A/C message.
Definition: ir_Daikin.h:61
-
uint8_t Sum2
Definition: ir_Daikin.h:261
-
bool getOffTimerEnabled(void) const
Get the enable status of the Off Timer.
Definition: ir_Daikin.cpp:428
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:476
-
const uint16_t kDaikin216Section1Length
Definition: ir_Daikin.h:350
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:1881
-
const uint8_t kDaikinLightBright
Definition: ir_Daikin.h:157
-
uint8_t AltMode
Definition: ir_Daikin.h:421
-
bool getMold(void) const
Get the Mould (filter) mode status of the A/C.
Definition: ir_Daikin.cpp:1037
-
const uint16_t kDaikin152Gap
Definition: ir_Daikin.h:588
-
void send(const uint16_t repeat=kDaikin176DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:2227
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Daikin.cpp:890
-
const uint8_t kDaikin128Auto
Definition: ir_Daikin.h:528
-
const uint8_t kDaikin160SwingVMiddle
Definition: ir_Daikin.h:404
-
bool getSleepTimerEnabled(void) const
Get the Sleep timer enabled status of the A/C.
Definition: ir_Daikin.cpp:1140
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:1930
-
void setEcono(const bool on)
Set the Economy mode of the A/C.
Definition: ir_Daikin.cpp:2782
-
Native representation of a Daikin64 A/C message.
Definition: ir_Daikin.h:594
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:2345
-
const uint16_t kDaikin128Gap
Definition: ir_Daikin.h:520
-
const uint8_t kDaikin64MaxTemp
Definition: ir_Daikin.h:640
-
uint64_t Temp
Definition: ir_Daikin.h:229
-
bool getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Daikin.cpp:297
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:3596
-
const uint8_t kDaikinHeat
Definition: ir_Daikin.h:133
-
const uint16_t kDaikin216OneSpace
Definition: ir_Daikin.h:346
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:3645
-
uint64_t Mode
Definition: ir_Daikin.h:89
-
uint8_t pad0[5]
Definition: ir_Daikin.h:545
-
uint64_t SleepTimer
Definition: ir_Daikin.h:255
-
const uint8_t kDaikin176SwingHOff
Definition: ir_Daikin.h:466
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:303
-
const uint16_t kDaikin64BitMark
Definition: ir_Daikin.h:618
-
const uint8_t kDaikin160SwingVLowest
Definition: ir_Daikin.h:402
-
const uint16_t kDaikin216DefaultRepeat
Definition: IRremoteESP8266.h:957
-
const uint8_t kDaikin2SwingHLeftMax
Definition: ir_Daikin.h:292
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Daikin.cpp:3205
-
const uint8_t kDaikinCurBit
Definition: ir_Daikin.h:160
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:903
-
void clearSleepTimerFlag(void)
Clear the sleep timer flag.
Definition: ir_Daikin.cpp:1123
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:2253
-
bool getOnTimerEnabled(void) const
Get the enable status of the On Timer.
Definition: ir_Daikin.cpp:2850
-
uint8_t OnTimer
Definition: ir_Daikin.h:484
-
const uint16_t kDaikin176BitMark
Definition: ir_Daikin.h:449
-
bool getComfort(void) const
Get the Comfort mode of the A/C.
Definition: ir_Daikin.cpp:3383
-
uint8_t OffHours
Definition: ir_Daikin.h:605
-
uint64_t FreshAirHigh
Definition: ir_Daikin.h:199
-
const uint16_t kDaikin160DefaultRepeat
Definition: IRremoteESP8266.h:945
-
void setPowerToggle(const bool on)
Set the Power toggle setting of the A/C.
Definition: ir_Daikin.cpp:3576
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:2284
-
void setEcono(const bool on)
Set the Economy mode of the A/C.
Definition: ir_Daikin.cpp:346
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Daikin.cpp:2240
-
uint64_t CurrentTime
Definition: ir_Daikin.h:76
-
bool getClean(void) const
Get the Auto Clean mode status of the A/C.
Definition: ir_Daikin.cpp:1049
-
const int8_t kDaikin64ToleranceDelta
Definition: ir_Daikin.h:627
-
bool getOnTimeEnabled(void) const
Get the enable status of the On Timer.
Definition: ir_Daikin.cpp:3773
-
const uint8_t kDaikin160SwingVAuto
Definition: ir_Daikin.h:407
-
const uint16_t kDaikinHeaderLength
Definition: ir_Daikin.h:144
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Daikin.cpp:210
-
const uint16_t kDaikin64LdrMark
Definition: ir_Daikin.h:622
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:3268
- -
bool getTurbo(void) const
Get the Turbo (Powerful) mode status of the A/C.
Definition: ir_Daikin.cpp:3696
-
uint8_t OffTimer
Definition: ir_Daikin.h:607
-
const uint8_t kDaikin128Cool
Definition: ir_Daikin.h:525
-
const uint16_t kDaikin176ZeroSpace
Definition: ir_Daikin.h:451
-
uint8_t ClockHours
Definition: ir_Daikin.h:601
-
const uint8_t kDaikin128Heat
Definition: ir_Daikin.h:527
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:736
-
const uint8_t kDaikinSection3Length
Definition: ir_Daikin.h:148
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:3211
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:558
-
uint8_t Powerful
Definition: ir_Daikin.h:562
-
bool getEye(void) const
Get the Eye (Sensor) mode status of the A/C.
Definition: ir_Daikin.cpp:1097
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:3223
-
const uint16_t kDaikin160Section1Length
Definition: ir_Daikin.h:399
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:1509
-
const uint16_t kDaikin128Sections
Definition: ir_Daikin.h:522
-
const uint16_t kDaikin176Sections
Definition: ir_Daikin.h:453
-
uint64_t SwingV
Definition: ir_Daikin.h:98
-
const uint16_t kDaikin128DefaultRepeat
Definition: IRremoteESP8266.h:948
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:772
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:3245
-
Class for handling detailed Daikin 152-bit A/C messages.
Definition: ir_Daikin.h:1071
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_Daikin.cpp:2789
-
void off(void)
Change the power setting to Off.
Definition: ir_Daikin.cpp:787
-
void setPowerful(const bool on)
Set the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:2811
-
const uint8_t kDaikin128FanLow
Definition: ir_Daikin.h:532
-
uint64_t Light
Definition: ir_Daikin.h:190
-
const uint16_t kDaikinStateLength
Definition: IRremoteESP8266.h:933
-
void setOnTime(const uint16_t mins_since_midnight)
Set the On Timer time for the A/C unit.
Definition: ir_Daikin.cpp:3785
-
Class for handling detailed Daikin 160-bit A/C messages.
Definition: ir_Daikin.h:892
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:726
-
const uint16_t kDaikin216Section2Length
Definition: ir_Daikin.h:351
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:249
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:1497
-
const uint8_t kDaikin64FanMed
Definition: ir_Daikin.h:635
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:235
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:3175
-
const uint16_t kDaikin128FooterMark
Definition: ir_Daikin.h:521
-
uint8_t Comfort
Definition: ir_Daikin.h:570
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:1687
-
bool getOnTimerEnabled(void) const
Get the enable status of the On Timer.
Definition: ir_Daikin.cpp:403
-
void disableOffTimer(void)
Clear and disable the Off timer.
Definition: ir_Daikin.cpp:415
-
void setPurify(const bool on)
Set the Purify (Filter) mode of the A/C.
Definition: ir_Daikin.cpp:1174
-
const uint16_t kDaikin2Gap
Definition: ir_Daikin.h:268
-
void setSleep(const bool on)
Set the Sleep mode of the A/C.
Definition: ir_Daikin.cpp:3740
-
uint64_t Clean
Definition: ir_Daikin.h:197
-
const uint8_t kDaikin152LeaderBits
Definition: ir_Daikin.h:582
-
void setOnTimer(const uint16_t mins_since_midnight)
Set the On Timer time for the A/C unit.
Definition: ir_Daikin.cpp:2865
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:804
-
const uint16_t kDaikinDefaultRepeat
Definition: IRremoteESP8266.h:937
-
uint8_t OnHalfHour
Definition: ir_Daikin.h:603
-
const uint16_t kDaikin64DefaultRepeat
Definition: IRremoteESP8266.h:942
-
bool getWeeklyTimerEnable(void) const
Get the enable status of the Weekly Timer.
Definition: ir_Daikin.cpp:469
-
uint16_t getOffTime(void) const
Get the Off Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:422
-
const uint16_t kDaikin64LdrSpace
Definition: ir_Daikin.h:624
-
const uint8_t kDaikin128Fan
Definition: ir_Daikin.h:526
-
uint8_t Sensor
Definition: ir_Daikin.h:116
-
uint64_t Quiet
Definition: ir_Daikin.h:245
-
uint64_t Power
Definition: ir_Daikin.h:221
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:751
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Daikin.cpp:3683
-
static stdAc::swingv_t toCommonSwingV(const uint8_t setting)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Daikin.cpp:2005
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Daikin.cpp:1943
-
uint8_t Sum1
Definition: ir_Daikin.h:364
-
void setOnTimerEnabled(const bool on)
Set the enable status of the On Timer.
Definition: ir_Daikin.cpp:2844
-
uint8_t OnTimer
Definition: ir_Daikin.h:604
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:2411
-
void setRaw(const uint64_t new_state)
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:3572
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:2233
-
void enableSleepTimer(const uint16_t sleeptime)
Set the enable status & time of the Sleep Timer.
Definition: ir_Daikin.cpp:1116
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:1258
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Daikin.cpp:3547
-
const uint8_t kDaikin2SwingVHigh
Definition: ir_Daikin.h:279
-
const uint16_t kDaikin160Section2Length
Definition: ir_Daikin.h:400
-
const uint8_t kDaikin128FanQuiet
Definition: ir_Daikin.h:534
-
const uint8_t kDaikin216SwingOn
Definition: ir_Daikin.h:354
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Daikin.cpp:257
-
uint8_t OffTimer
Definition: ir_Daikin.h:488
-
void enableOnTimer(const uint16_t starttime)
Set the enable status & time of the On Timer.
Definition: ir_Daikin.cpp:384
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:1118
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:203
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Daikin.cpp:1146
-
uint8_t getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:1982
-
void setSwingVertical(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:3728
-
bool getFreshAir(void) const
Get the Fresh Air mode status of the A/C.
Definition: ir_Daikin.cpp:1061
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:3261
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Daikin.cpp:516
-
bool getPowerful(void) const
Get the Powerful (Turbo) mode of the A/C.
Definition: ir_Daikin.cpp:2821
-
const uint8_t kDaikin2SwingVUpperMiddle
Definition: ir_Daikin.h:280
-
uint8_t OnHalfHour
Definition: ir_Daikin.h:483
-
uint8_t Mode
Definition: ir_Daikin.h:370
-
bool getComfort(void) const
Get the Comfort mode of the A/C.
Definition: ir_Daikin.cpp:378
-
uint8_t SwingH
Definition: ir_Daikin.h:437
-
uint64_t Beep
Definition: ir_Daikin.h:191
-
uint8_t Sum2
Definition: ir_Daikin.h:442
-
static uint8_t calcFirstChecksum(const uint8_t state[])
Definition: ir_Daikin.cpp:2564
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:1474
-
const uint8_t kDaikin64MinTemp
Definition: ir_Daikin.h:639
-
uint64_t Fan
Definition: ir_Daikin.h:234
-
const uint8_t kDaikin2SwingHRight
Definition: ir_Daikin.h:295
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:1915
-
uint64_t Power2
Definition: ir_Daikin.h:187
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:1154
-
void setClock(const uint16_t mins_since_midnight)
Set the clock on the A/C unit.
Definition: ir_Daikin.cpp:2827
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:1893
-
const uint16_t kDaikin64Gap
Definition: ir_Daikin.h:623
-
const uint16_t kDaikin128OneSpace
Definition: ir_Daikin.h:518
-
Daikin152Protocol _
Definition: ir_Daikin.h:1125
-
const uint16_t kDaikin152HdrMark
Definition: ir_Daikin.h:583
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:2352
-
uint64_t Sum1
Definition: ir_Daikin.h:71
-
const uint8_t kDaikin2SwingHSwing
Definition: ir_Daikin.h:299
-
void setSwingVertical(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:2758
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Daikin.cpp:230
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:1848
-
void enableOffTimer(const uint16_t endtime)
Set the enable status & time of the Off Timer.
Definition: ir_Daikin.cpp:409
-
const uint16_t kDaikin160StateLength
Definition: IRremoteESP8266.h:943
-
const uint16_t kDaikin216HdrMark
Definition: ir_Daikin.h:343
-
const uint16_t kDaikin2HdrSpace
Definition: ir_Daikin.h:270
-
const uint8_t kDaikin176ModeButton
Definition: ir_Daikin.h:462
-
const uint8_t kDaikinSections
Definition: ir_Daikin.h:145
-
const uint16_t kDaikin2StateLength
Definition: IRremoteESP8266.h:938
-
uint8_t _saved_temp
The previously user requested temp value.
Definition: ir_Daikin.h:994
-
uint8_t pad1[5]
Definition: ir_Daikin.h:312
-
const uint8_t kDaikinByteChecksum1
Definition: ir_Daikin.h:150
-
void setEye(const bool on)
Set the Eye (Sensor) mode of the A/C.
Definition: ir_Daikin.cpp:1091
-
uint8_t pad2[2]
Definition: ir_Daikin.h:567
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:3193
-
const uint8_t kDaikin64FanHigh
Definition: ir_Daikin.h:636
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:1826
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:931
-
void send(const uint16_t repeat=kDaikin152DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:3152
-
uint8_t pad0[6]
Definition: ir_Daikin.h:414
-
const uint8_t kDaikin64ChecksumSize
Definition: ir_Daikin.h:642
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:2562
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:222
-
const uint8_t kDaikinFanMed
Definition: ir_Daikin.h:138
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Daikin.cpp:730
-
const uint16_t kDaikin64HdrSpace
Definition: ir_Daikin.h:619
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:2594
-
const uint8_t kDaikin2SwingVLowest
Definition: ir_Daikin.h:283
-
void send(const uint16_t repeat=kDaikin216DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:1450
-
void setRaw(const uint8_t new_code[], const uint16_t length=kDaikinStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:192
-
Native representation of a Daikin128 A/C message.
Definition: ir_Daikin.h:469
-
void setSwingVertical(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:1601
-
const uint8_t kDaikinSwingOff
Definition: ir_Daikin.h:143
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:3608
-
uint64_t SwingH
Definition: ir_Daikin.h:101
-
const uint16_t kMarkExcess
Definition: IRrecv.h:24
-
const uint8_t kDaikin216SwingOff
Definition: ir_Daikin.h:355
-
uint64_t EyeAuto
Definition: ir_Daikin.h:205
-
const uint8_t kDaikinAuto
Definition: ir_Daikin.h:130
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Daikin.cpp:3669
-
const uint16_t kDaikin216BitMark
Definition: ir_Daikin.h:345
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Daikin.cpp:2438
-
const uint8_t kDaikinCool
Definition: ir_Daikin.h:132
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Daikin.h:1011
-
uint64_t OffTime
Definition: ir_Daikin.h:105
-
uint8_t Temp
Definition: ir_Daikin.h:490
-
uint8_t ClockMins
Definition: ir_Daikin.h:600
-
const uint16_t kDaikin160ZeroSpace
Definition: ir_Daikin.h:396
-
const uint8_t kDaikin2SwingVOff
Definition: ir_Daikin.h:286
-
const uint64_t kDaikinFirstHeader64
Definition: ir_Daikin.h:171
-
uint8_t Econo
Definition: ir_Daikin.h:502
-
const uint16_t kDaikin216Gap
Definition: ir_Daikin.h:348
-
Daikin64Protocol _
Definition: ir_Daikin.h:1190
-
uint8_t Mode
Definition: ir_Daikin.h:316
-
void setBeep(const uint8_t beep)
Set the Beep mode of the A/C.
Definition: ir_Daikin.cpp:1013
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:3712
-
const uint8_t kDaikinFanQuiet
Definition: ir_Daikin.h:141
-
uint64_t CurrentDay
Definition: ir_Daikin.h:77
-
bool getSensor(void) const
Get the Sensor mode of the A/C.
Definition: ir_Daikin.cpp:3364
-
void on(void)
Change the power setting to On.
Definition: ir_Daikin.cpp:784
-
const uint16_t kDaikinMarkExcess
Definition: ir_Daikin.h:163
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Daikin.cpp:2677
-
uint8_t Temp
Definition: ir_Daikin.h:379
-
const uint8_t kDaikinTolerance
Definition: ir_Daikin.h:162
-
uint64_t OffTimer
Definition: ir_Daikin.h:87
-
const uint8_t kDaikin2SwingVLow
Definition: ir_Daikin.h:282
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:1659
-
uint8_t getLight(void) const
Get the Light status of the A/C.
Definition: ir_Daikin.cpp:1019
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Daikin.cpp:503
-
void setClean(const bool on)
Set the Auto clean mode of the A/C.
Definition: ir_Daikin.cpp:1043
-
const uint16_t kDaikin216HdrSpace
Definition: ir_Daikin.h:344
-
const uint8_t kDaikinSection2Length
Definition: ir_Daikin.h:147
-
uint64_t Sum2
Definition: ir_Daikin.h:80
-
const uint16_t kDaikin176OneSpace
Definition: ir_Daikin.h:450
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_Daikin.cpp:1109
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:986
-
uint8_t raw[kDaikin152StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:542
-
uint8_t Fan
Definition: ir_Daikin.h:558
-
uint64_t Purify
Definition: ir_Daikin.h:254
-
const uint16_t kDaikinHdrMark
Definition: ir_Daikin.h:164
-
uint8_t SwingV
Definition: ir_Daikin.h:557
-
const uint8_t kDaikinLightOff
Definition: ir_Daikin.h:159
-
void setEcono(const bool on)
Set the Economy mode of the A/C.
Definition: ir_Daikin.cpp:1103
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Daikin.cpp:1989
-
uint64_t Eye
Definition: ir_Daikin.h:251
-
uint16_t getOnTime(void) const
Get the On Timer time to be sent to the A/C unit.
Definition: ir_Daikin.cpp:3779
-
const uint8_t kDaikin2Tolerance
Definition: ir_Daikin.h:277
-
const uint8_t kDaikin160SwingVLow
Definition: ir_Daikin.h:403
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:2805
-
uint8_t Power
Definition: ir_Daikin.h:612
-
const uint8_t kDaikin176DryFanTemp
Definition: ir_Daikin.h:463
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Daikin.cpp:263
-
uint8_t getBeep(void) const
Get the Beep status of the A/C.
Definition: ir_Daikin.cpp:1007
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Daikin.cpp:2745
-
uint64_t Powerful
Definition: ir_Daikin.h:107
-
const uint16_t kDaikin2OneSpace
Definition: ir_Daikin.h:272
-
const uint8_t kDaikin2SwingHWide
Definition: ir_Daikin.h:291
-
DaikinESPProtocol _
Definition: ir_Daikin.h:733
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:3523
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Daikin.cpp:3634
-
uint8_t pad2[2]
Definition: ir_Daikin.h:376
-
const uint16_t kDaikin128HdrMark
Definition: ir_Daikin.h:515
-
uint8_t raw[kDaikin216StateLength]
The state of the IR remote.
Definition: ir_Daikin.h:305
-
bool getSleep(void) const
Get the Sleep mode of the A/C.
Definition: ir_Daikin.cpp:3746
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
bool getQuiet(void) const
Get the Quiet mode status of the A/C.
Definition: ir_Daikin.cpp:311
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:2611
-
void send(const uint16_t repeat=kDaikin64DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:3528
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Daikin.cpp:2212
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:1572
-
uint8_t Sum3
Definition: ir_Daikin.h:125
-
void disableSleepTimer(void)
Disable the sleep timer.
Definition: ir_Daikin.cpp:1128
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Daikin.cpp:1855
-
uint8_t Fan
Definition: ir_Daikin.h:438
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:798
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Daikin.cpp:2708
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Daikin.cpp:156
-
const uint8_t kDaikin128MaxTemp
Definition: ir_Daikin.h:536
-
uint64_t Quiet
Definition: ir_Daikin.h:109
-
void send(const uint16_t repeat=kDaikin160DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Daikin.cpp:1862
-
const uint8_t kDaikinMaxTemp
Definition: ir_Daikin.h:136
-
Class for handling detailed Daikin 176-bit A/C messages.
Definition: ir_Daikin.h:944
-
const uint8_t kDaikin128FanHigh
Definition: ir_Daikin.h:530
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Daikin.cpp:1522
-
const uint8_t kDaikin128FanAuto
Definition: ir_Daikin.h:529
-
IRsend _irsend
instance of the IR send class
Definition: ir_Daikin.h:879
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Daikin.cpp:1187
-
uint64_t CurrentTime
Definition: ir_Daikin.h:185
-
bool getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Daikin.cpp:285
-
const uint16_t kDaikin176Section1Length
Definition: ir_Daikin.h:454
-
uint64_t raw
The state of the IR remote.
Definition: ir_Daikin.h:595
-
const uint16_t kDaikin2Freq
Definition: ir_Daikin.h:265
-
const uint16_t kDaikin128BitMark
Definition: ir_Daikin.h:517
-
const uint8_t kDaikinMinTemp
Definition: ir_Daikin.h:135
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:1557
-
void disableOnTimer(void)
Clear and disable the On timer.
Definition: ir_Daikin.cpp:390
-
IRDaikin216(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class Constructor.
Definition: ir_Daikin.cpp:1440
-
uint64_t Temp
Definition: ir_Daikin.h:93
-
bool getEyeAuto(void) const
Get the Automaitc Eye (Sensor) mode status of the A/C.
Definition: ir_Daikin.cpp:1085
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Daikin.cpp:826
-
const uint8_t kDaikinFanMin
Definition: ir_Daikin.h:137
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Daikin.cpp:3147
-
const uint16_t kDaikin128LeaderMark
Definition: ir_Daikin.h:513
-
void setSleep(const bool on)
Set the Sleep mode of the A/C.
Definition: ir_Daikin.cpp:2770
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Daikin.cpp:530
-
const uint8_t kDaikin2SwingVCirculate
Definition: ir_Daikin.h:285
-
uint8_t ClockHours
Definition: ir_Daikin.h:480
-
uint8_t pad2[2]
Definition: ir_Daikin.h:431
-
const uint8_t kDaikin2SwingHAuto
Definition: ir_Daikin.h:297
-
const uint8_t kDaikinLightDim
Definition: ir_Daikin.h:158
-
const uint8_t kDaikin176Fan
Definition: ir_Daikin.h:457
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
-
Native representation of a Daikin152 A/C message.
Definition: ir_Daikin.h:541
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8cpp.html deleted file mode 100644 index e71f63ef8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8cpp.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Delonghi.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Delonghi.cpp File Reference
-
-
- -

Delonghi based protocol. -More...

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

-Variables

const uint16_t kDelonghiAcHdrMark = 8984
 
const uint16_t kDelonghiAcBitMark = 572
 
const uint16_t kDelonghiAcHdrSpace = 4200
 
const uint16_t kDelonghiAcOneSpace = 1558
 
const uint16_t kDelonghiAcZeroSpace = 510
 
const uint32_t kDelonghiAcGap = kDefaultMessageGap
 
const uint16_t kDelonghiAcFreq = 38000
 
const uint16_t kDelonghiAcOverhead = 3
 
-

Detailed Description

-

Delonghi based protocol.

-

Variable Documentation

- -

◆ kDelonghiAcBitMark

- -
-
- - - - -
const uint16_t kDelonghiAcBitMark = 572
-
- -
-
- -

◆ kDelonghiAcFreq

- -
-
- - - - -
const uint16_t kDelonghiAcFreq = 38000
-
- -
-
- -

◆ kDelonghiAcGap

- -
-
- - - - -
const uint32_t kDelonghiAcGap = kDefaultMessageGap
-
- -
-
- -

◆ kDelonghiAcHdrMark

- -
-
- - - - -
const uint16_t kDelonghiAcHdrMark = 8984
-
- -
-
- -

◆ kDelonghiAcHdrSpace

- -
-
- - - - -
const uint16_t kDelonghiAcHdrSpace = 4200
-
- -
-
- -

◆ kDelonghiAcOneSpace

- -
-
- - - - -
const uint16_t kDelonghiAcOneSpace = 1558
-
- -
-
- -

◆ kDelonghiAcOverhead

- -
-
- - - - -
const uint16_t kDelonghiAcOverhead = 3
-
- -
-
- -

◆ kDelonghiAcZeroSpace

- -
-
- - - - -
const uint16_t kDelonghiAcZeroSpace = 510
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h.html deleted file mode 100644 index a370423be..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h.html +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Delonghi.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Delonghi.h File Reference
-
-
- -

Delonghi A/C. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  DelonghiProtocol
 Native representation of a Delonghi A/C message. More...
 
class  IRDelonghiAc
 Class for handling detailed Delonghi A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kDelonghiAcTempMinC = 18
 
const uint8_t kDelonghiAcTempMaxC = 32
 
const uint8_t kDelonghiAcTempMinF = 64
 
const uint8_t kDelonghiAcTempMaxF = 90
 
const uint8_t kDelonghiAcTempAutoDryMode = 0
 
const uint8_t kDelonghiAcTempFanMode = 0b00110
 
const uint8_t kDelonghiAcFanAuto = 0b00
 
const uint8_t kDelonghiAcFanHigh = 0b01
 
const uint8_t kDelonghiAcFanMedium = 0b10
 
const uint8_t kDelonghiAcFanLow = 0b11
 
const uint8_t kDelonghiAcCool = 0b000
 
const uint8_t kDelonghiAcDry = 0b001
 
const uint8_t kDelonghiAcFan = 0b010
 
const uint8_t kDelonghiAcAuto = 0b100
 
const uint16_t kDelonghiAcTimerMax = 23 * 60 + 59
 
const uint8_t kDelonghiAcChecksumOffset = 56
 
-

Detailed Description

-

Delonghi A/C.

-
Note
Kudos to TheMaxxz For the breakdown and mapping of the bit values.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1096
-

Variable Documentation

- -

◆ kDelonghiAcAuto

- -
-
- - - - -
const uint8_t kDelonghiAcAuto = 0b100
-
- -
-
- -

◆ kDelonghiAcChecksumOffset

- -
-
- - - - -
const uint8_t kDelonghiAcChecksumOffset = 56
-
- -
-
- -

◆ kDelonghiAcCool

- -
-
- - - - -
const uint8_t kDelonghiAcCool = 0b000
-
- -
-
- -

◆ kDelonghiAcDry

- -
-
- - - - -
const uint8_t kDelonghiAcDry = 0b001
-
- -
-
- -

◆ kDelonghiAcFan

- -
-
- - - - -
const uint8_t kDelonghiAcFan = 0b010
-
- -
-
- -

◆ kDelonghiAcFanAuto

- -
-
- - - - -
const uint8_t kDelonghiAcFanAuto = 0b00
-
- -
-
- -

◆ kDelonghiAcFanHigh

- -
-
- - - - -
const uint8_t kDelonghiAcFanHigh = 0b01
-
- -
-
- -

◆ kDelonghiAcFanLow

- -
-
- - - - -
const uint8_t kDelonghiAcFanLow = 0b11
-
- -
-
- -

◆ kDelonghiAcFanMedium

- -
-
- - - - -
const uint8_t kDelonghiAcFanMedium = 0b10
-
- -
-
- -

◆ kDelonghiAcTempAutoDryMode

- -
-
- - - - -
const uint8_t kDelonghiAcTempAutoDryMode = 0
-
- -
-
- -

◆ kDelonghiAcTempFanMode

- -
-
- - - - -
const uint8_t kDelonghiAcTempFanMode = 0b00110
-
- -
-
- -

◆ kDelonghiAcTempMaxC

- -
-
- - - - -
const uint8_t kDelonghiAcTempMaxC = 32
-
- -
-
- -

◆ kDelonghiAcTempMaxF

- -
-
- - - - -
const uint8_t kDelonghiAcTempMaxF = 90
-
- -
-
- -

◆ kDelonghiAcTempMinC

- -
-
- - - - -
const uint8_t kDelonghiAcTempMinC = 18
-
- -
-
- -

◆ kDelonghiAcTempMinF

- -
-
- - - - -
const uint8_t kDelonghiAcTempMinF = 64
-
- -
-
- -

◆ kDelonghiAcTimerMax

- -
-
- - - - -
const uint16_t kDelonghiAcTimerMax = 23 * 60 + 59
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h_source.html deleted file mode 100644 index 33f893ba8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Delonghi_8h_source.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Delonghi.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Delonghi.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 David Conran
-
2 
-
7 
-
8 // Supports:
-
9 // Brand: Delonghi, Model: PAC A95
-
10 
-
11 #ifndef IR_DELONGHI_H_
-
12 #define IR_DELONGHI_H_
-
13 
-
14 #define __STDC_LIMIT_MACROS
-
15 #include <stdint.h>
-
16 #ifndef UNIT_TEST
-
17 #include <Arduino.h>
-
18 #endif
-
19 #include "IRremoteESP8266.h"
-
20 #include "IRsend.h"
-
21 #ifdef UNIT_TEST
-
22 #include "IRsend_test.h"
-
23 #endif
-
24 
- -
27  uint64_t raw;
-
28  struct {
-
29  uint8_t :8; // Header
-
30  uint8_t Temp :5;
-
31  uint8_t Fan :2;
-
32  uint8_t Fahrenheit:1;
-
33  uint8_t Power :1;
-
34  uint8_t Mode :3;
-
35  uint8_t Boost :1;
-
36  uint8_t Sleep :1;
-
37  uint8_t :2;
-
38  uint8_t OnTimer :1;
-
39  uint8_t OnHours :5;
-
40  uint8_t :2;
-
41  uint8_t OnMins :6;
-
42  uint8_t :2;
-
43  uint8_t OffTimer :1;
-
44  uint8_t OffHours :5;
-
45  uint8_t :2;
-
46  uint8_t OffMins :6;
-
47  uint8_t :2;
-
48  uint8_t Sum :8;
-
49  };
-
50 };
-
51 
-
52 // Constants
-
53 const uint8_t kDelonghiAcTempMinC = 18; // Deg C
-
54 const uint8_t kDelonghiAcTempMaxC = 32; // Deg C
-
55 const uint8_t kDelonghiAcTempMinF = 64; // Deg F
-
56 const uint8_t kDelonghiAcTempMaxF = 90; // Deg F
-
57 const uint8_t kDelonghiAcTempAutoDryMode = 0;
-
58 const uint8_t kDelonghiAcTempFanMode = 0b00110;
-
59 const uint8_t kDelonghiAcFanAuto = 0b00;
-
60 const uint8_t kDelonghiAcFanHigh = 0b01;
-
61 const uint8_t kDelonghiAcFanMedium = 0b10;
-
62 const uint8_t kDelonghiAcFanLow = 0b11;
-
63 const uint8_t kDelonghiAcCool = 0b000;
-
64 const uint8_t kDelonghiAcDry = 0b001;
-
65 const uint8_t kDelonghiAcFan = 0b010;
-
66 const uint8_t kDelonghiAcAuto = 0b100;
-
67 const uint16_t kDelonghiAcTimerMax = 23 * 60 + 59;
-
68 const uint8_t kDelonghiAcChecksumOffset = 56;
-
69 
-
70 // Classes
-
71 
-
73 class IRDelonghiAc {
-
74  public:
-
75  explicit IRDelonghiAc(const uint16_t pin, const bool inverted = false,
-
76  const bool use_modulation = true);
-
77  void stateReset(void);
-
78 #if SEND_DELONGHI_AC
-
79  void send(const uint16_t repeat = kDelonghiAcDefaultRepeat);
-
84  int8_t calibrate(void) { return _irsend.calibrate(); }
-
85 #endif // SEND_DELONGHI_AC
-
86  void begin(void);
-
87  static uint8_t calcChecksum(const uint64_t state);
-
88  static bool validChecksum(const uint64_t state);
-
89  void setPower(const bool on);
-
90  bool getPower(void) const;
-
91  void on(void);
-
92  void off(void);
-
93  void setTempUnit(const bool celsius);
-
94  bool getTempUnit(void) const;
-
95  void setTemp(const uint8_t temp, const bool fahrenheit = false,
-
96  const bool force = false);
-
97  uint8_t getTemp(void) const;
-
98  void setFan(const uint8_t speed);
-
99  uint8_t getFan(void) const;
-
100  void setMode(const uint8_t mode);
-
101  uint8_t getMode(void) const;
-
102  void setBoost(const bool on); // Aka Turbo
-
103  bool getBoost(void) const; // Aka Turbo
-
104  void setSleep(const bool on);
-
105  bool getSleep(void) const;
-
106  void setOnTimerEnabled(const bool on);
-
107  bool getOnTimerEnabled(void) const;
-
108  void setOnTimer(const uint16_t nr_of_mins);
-
109  uint16_t getOnTimer(void) const;
-
110  void setOffTimerEnabled(const bool on);
-
111  bool getOffTimerEnabled(void) const;
-
112  void setOffTimer(const uint16_t nr_of_mins);
-
113  uint16_t getOffTimer(void) const;
-
114  uint64_t getRaw(void);
-
115  void setRaw(const uint64_t state);
-
116  static uint8_t convertMode(const stdAc::opmode_t mode);
-
117  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
118  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
119  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
120  stdAc::state_t toCommon(void) const;
-
121  String toString(void) const;
-
122 #ifndef UNIT_TEST
-
123 
-
124  private:
- -
126 #else
-
127  IRsendTest _irsend;
-
129 #endif
- -
132  uint8_t _saved_temp;
- -
134  void checksum(void);
-
135 };
-
136 #endif // IR_DELONGHI_H_
-
-
uint8_t OnTimer
Definition: ir_Delonghi.h:38
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Delonghi.cpp:270
-
uint8_t OnMins
Definition: ir_Delonghi.h:41
-
const uint8_t kDelonghiAcCool
Definition: ir_Delonghi.h:63
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Delonghi.cpp:217
-
void send(const uint16_t repeat=kDelonghiAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Delonghi.cpp:103
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Delonghi.cpp:330
-
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Delonghi.cpp:150
-
uint8_t Mode
Definition: ir_Delonghi.h:34
-
const uint8_t kDelonghiAcTempFanMode
Definition: ir_Delonghi.h:58
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Delonghi.cpp:449
-
uint8_t Temp
Definition: ir_Delonghi.h:30
-
void on(void)
Change the power setting to On.
Definition: ir_Delonghi.cpp:153
-
Class for handling detailed Delonghi A/C messages.
Definition: ir_Delonghi.h:73
-
IRDelonghiAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Delonghi.cpp:93
-
const uint8_t kDelonghiAcTempMinC
Definition: ir_Delonghi.h:53
-
const uint8_t kDelonghiAcFanHigh
Definition: ir_Delonghi.h:60
-
void setOnTimer(const uint16_t nr_of_mins)
Set the On timer to activate in nr of minutes.
Definition: ir_Delonghi.cpp:378
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Delonghi.cpp:160
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t _saved_temp
The previously user requested temp value.
Definition: ir_Delonghi.h:132
-
void setOffTimerEnabled(const bool on)
Set the enable status of the Off Timer.
Definition: ir_Delonghi.cpp:394
-
const uint8_t kDelonghiAcFanMedium
Definition: ir_Delonghi.h:61
-
const uint8_t kDelonghiAcTempAutoDryMode
Definition: ir_Delonghi.h:57
-
bool getOffTimerEnabled(void) const
Get the enable status of the Off Timer.
Definition: ir_Delonghi.cpp:400
-
const uint8_t kDelonghiAcFanLow
Definition: ir_Delonghi.h:62
-
uint8_t OffTimer
Definition: ir_Delonghi.h:43
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Delonghi.cpp:123
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Delonghi.cpp:314
- -
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Delonghi.h:84
-
DelonghiProtocol _
Definition: ir_Delonghi.h:131
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t OnHours
Definition: ir_Delonghi.h:39
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Delonghi.cpp:98
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Delonghi.cpp:166
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Delonghi.cpp:252
-
std::string String
Definition: IRremoteESP8266.h:1217
-
bool getTempUnit(void) const
Get the temperature scale unit of measure currently in use.
Definition: ir_Delonghi.cpp:178
-
uint8_t Power
Definition: ir_Delonghi.h:33
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Delonghi.cpp:281
-
uint16_t getOnTimer(void) const
Get the On timer time.
Definition: ir_Delonghi.cpp:388
-
uint16_t getOffTimer(void) const
Get the Off timer time.
Definition: ir_Delonghi.cpp:417
-
const uint8_t kDelonghiAcFanAuto
Definition: ir_Delonghi.h:59
-
const uint8_t kDelonghiAcChecksumOffset
Definition: ir_Delonghi.h:68
-
void setOnTimerEnabled(const bool on)
Set the enable status of the On Timer.
Definition: ir_Delonghi.cpp:365
-
const uint8_t kDelonghiAcTempMaxF
Definition: ir_Delonghi.h:56
- -
const uint8_t kDelonghiAcAuto
Definition: ir_Delonghi.h:66
-
bool getSleep(void) const
Get the Sleep mode status of the A/C.
Definition: ir_Delonghi.cpp:359
-
uint8_t Fahrenheit
Definition: ir_Delonghi.h:32
-
uint8_t Boost
Definition: ir_Delonghi.h:35
-
bool getBoost(void) const
Get the Boost (Turbo) mode of the A/C.
Definition: ir_Delonghi.cpp:347
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Delonghi.cpp:130
-
void setSleep(const bool on)
Set the Sleep mode of the A/C.
Definition: ir_Delonghi.cpp:353
-
const uint16_t kDelonghiAcDefaultRepeat
Definition: IRremoteESP8266.h:959
-
uint8_t _saved_temp_units
The previously user requested temp units.
Definition: ir_Delonghi.h:133
-
const uint16_t kDelonghiAcTimerMax
Definition: ir_Delonghi.h:67
-
uint8_t Fan
Definition: ir_Delonghi.h:31
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Delonghi.cpp:287
-
bool getOnTimerEnabled(void) const
Get the enable status of the On Timer.
Definition: ir_Delonghi.cpp:371
-
void setTemp(const uint8_t temp, const bool fahrenheit=false, const bool force=false)
Set the temperature.
Definition: ir_Delonghi.cpp:186
-
void setOffTimer(const uint16_t nr_of_mins)
Set the Off timer to activate in nr of minutes.
Definition: ir_Delonghi.cpp:407
-
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Delonghi.cpp:143
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Delonghi.cpp:111
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Delonghi.cpp:210
-
IRsend _irsend
instance of the IR send class
Definition: ir_Delonghi.h:125
-
void setTempUnit(const bool celsius)
Change the temperature scale units.
Definition: ir_Delonghi.cpp:172
-
uint8_t getFan(void) const
Get the current native fan speed setting.
Definition: ir_Delonghi.cpp:245
-
uint8_t OffHours
Definition: ir_Delonghi.h:44
-
const uint8_t kDelonghiAcDry
Definition: ir_Delonghi.h:64
-
uint8_t OffMins
Definition: ir_Delonghi.h:46
-
const uint8_t kDelonghiAcFan
Definition: ir_Delonghi.h:65
-
uint8_t Sum
Definition: ir_Delonghi.h:48
-
uint8_t Sleep
Definition: ir_Delonghi.h:36
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Delonghi.cpp:135
-
uint64_t raw
The state of the IR remote.
Definition: ir_Delonghi.h:27
-
Native representation of a Delonghi A/C message.
Definition: ir_Delonghi.h:26
-
void setBoost(const bool on)
Set the Boost (Turbo) mode of the A/C.
Definition: ir_Delonghi.cpp:341
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Delonghi.cpp:423
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kDelonghiAcTempMinF
Definition: ir_Delonghi.h:55
-
void off(void)
Change the power setting to Off.
Definition: ir_Delonghi.cpp:156
-
const uint8_t kDelonghiAcTempMaxC
Definition: ir_Delonghi.h:54
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Denon_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Denon_8cpp.html deleted file mode 100644 index ac0fbd848..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Denon_8cpp.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Denon.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Denon.cpp File Reference
-
-
- -

Denon support Original Denon support added by https://github.com/csBlueChip Ported over by Massimiliano Pinto. -More...

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

-Variables

const uint16_t kDenonTick = 263
 
const uint16_t kDenonHdrMarkTicks = 1
 
const uint16_t kDenonHdrMark = kDenonHdrMarkTicks * kDenonTick
 
const uint16_t kDenonHdrSpaceTicks = 3
 
const uint16_t kDenonHdrSpace = kDenonHdrSpaceTicks * kDenonTick
 
const uint16_t kDenonBitMarkTicks = 1
 
const uint16_t kDenonBitMark = kDenonBitMarkTicks * kDenonTick
 
const uint16_t kDenonOneSpaceTicks = 7
 
const uint16_t kDenonOneSpace = kDenonOneSpaceTicks * kDenonTick
 
const uint16_t kDenonZeroSpaceTicks = 3
 
const uint16_t kDenonZeroSpace = kDenonZeroSpaceTicks * kDenonTick
 
const uint16_t kDenonMinCommandLengthTicks = 510
 
const uint16_t kDenonMinGapTicks
 
const uint32_t kDenonMinGap = kDenonMinGapTicks * kDenonTick
 
const uint64_t kDenonManufacturer = 0x2A4CULL
 
-

Detailed Description

-

Variable Documentation

- -

◆ kDenonBitMark

- -
-
- - - - -
const uint16_t kDenonBitMark = kDenonBitMarkTicks * kDenonTick
-
- -
-
- -

◆ kDenonBitMarkTicks

- -
-
- - - - -
const uint16_t kDenonBitMarkTicks = 1
-
- -
-
- -

◆ kDenonHdrMark

- -
-
- - - - -
const uint16_t kDenonHdrMark = kDenonHdrMarkTicks * kDenonTick
-
- -
-
- -

◆ kDenonHdrMarkTicks

- -
-
- - - - -
const uint16_t kDenonHdrMarkTicks = 1
-
- -
-
- -

◆ kDenonHdrSpace

- -
-
- - - - -
const uint16_t kDenonHdrSpace = kDenonHdrSpaceTicks * kDenonTick
-
- -
-
- -

◆ kDenonHdrSpaceTicks

- -
-
- - - - -
const uint16_t kDenonHdrSpaceTicks = 3
-
- -
-
- -

◆ kDenonManufacturer

- -
-
- - - - -
const uint64_t kDenonManufacturer = 0x2A4CULL
-
- -
-
- -

◆ kDenonMinCommandLengthTicks

- -
-
- - - - -
const uint16_t kDenonMinCommandLengthTicks = 510
-
- -
-
- -

◆ kDenonMinGap

- -
-
- - - - -
const uint32_t kDenonMinGap = kDenonMinGapTicks * kDenonTick
-
- -
-
- -

◆ kDenonMinGapTicks

- -
-
- - - - -
const uint16_t kDenonMinGapTicks
-
-
- -

◆ kDenonOneSpace

- -
-
- - - - -
const uint16_t kDenonOneSpace = kDenonOneSpaceTicks * kDenonTick
-
- -
-
- -

◆ kDenonOneSpaceTicks

- -
-
- - - - -
const uint16_t kDenonOneSpaceTicks = 7
-
- -
-
- -

◆ kDenonTick

- -
-
- - - - -
const uint16_t kDenonTick = 263
-
- -
-
- -

◆ kDenonZeroSpace

- -
-
- - - - -
const uint16_t kDenonZeroSpace = kDenonZeroSpaceTicks * kDenonTick
-
- -
-
- -

◆ kDenonZeroSpaceTicks

- -
-
- - - - -
const uint16_t kDenonZeroSpaceTicks = 3
-
- -
-
-
-
const uint16_t kDenonMinCommandLengthTicks
Definition: ir_Denon.cpp:31
-
const uint16_t kDenonHdrSpaceTicks
Definition: ir_Denon.cpp:23
-
const uint16_t kDenonBitMarkTicks
Definition: ir_Denon.cpp:25
-
const uint16_t kDenonHdrMarkTicks
Definition: ir_Denon.cpp:21
-
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:962
-
const uint16_t kDenonOneSpaceTicks
Definition: ir_Denon.cpp:27
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Dish_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Dish_8cpp.html deleted file mode 100644 index abc86c6b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Dish_8cpp.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Dish.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Dish.cpp File Reference
-
-
- -

DISH Network protocol support DISH support originally by Todd Treece. -More...

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

-Variables

const uint16_t kDishTick = 100
 
const uint16_t kDishHdrMarkTicks = 4
 
const uint16_t kDishHdrMark = kDishHdrMarkTicks * kDishTick
 
const uint16_t kDishHdrSpaceTicks = 61
 
const uint16_t kDishHdrSpace = kDishHdrSpaceTicks * kDishTick
 
const uint16_t kDishBitMarkTicks = 4
 
const uint16_t kDishBitMark = kDishBitMarkTicks * kDishTick
 
const uint16_t kDishOneSpaceTicks = 17
 
const uint16_t kDishOneSpace = kDishOneSpaceTicks * kDishTick
 
const uint16_t kDishZeroSpaceTicks = 28
 
const uint16_t kDishZeroSpace = kDishZeroSpaceTicks * kDishTick
 
const uint16_t kDishRptSpaceTicks = kDishHdrSpaceTicks
 
const uint16_t kDishRptSpace = kDishRptSpaceTicks * kDishTick
 
-

Detailed Description

-

Variable Documentation

- -

◆ kDishBitMark

- -
-
- - - - -
const uint16_t kDishBitMark = kDishBitMarkTicks * kDishTick
-
- -
-
- -

◆ kDishBitMarkTicks

- -
-
- - - - -
const uint16_t kDishBitMarkTicks = 4
-
- -
-
- -

◆ kDishHdrMark

- -
-
- - - - -
const uint16_t kDishHdrMark = kDishHdrMarkTicks * kDishTick
-
- -
-
- -

◆ kDishHdrMarkTicks

- -
-
- - - - -
const uint16_t kDishHdrMarkTicks = 4
-
- -
-
- -

◆ kDishHdrSpace

- -
-
- - - - -
const uint16_t kDishHdrSpace = kDishHdrSpaceTicks * kDishTick
-
- -
-
- -

◆ kDishHdrSpaceTicks

- -
-
- - - - -
const uint16_t kDishHdrSpaceTicks = 61
-
- -
-
- -

◆ kDishOneSpace

- -
-
- - - - -
const uint16_t kDishOneSpace = kDishOneSpaceTicks * kDishTick
-
- -
-
- -

◆ kDishOneSpaceTicks

- -
-
- - - - -
const uint16_t kDishOneSpaceTicks = 17
-
- -
-
- -

◆ kDishRptSpace

- -
-
- - - - -
const uint16_t kDishRptSpace = kDishRptSpaceTicks * kDishTick
-
- -
-
- -

◆ kDishRptSpaceTicks

- -
-
- - - - -
const uint16_t kDishRptSpaceTicks = kDishHdrSpaceTicks
-
- -
-
- -

◆ kDishTick

- -
-
- - - - -
const uint16_t kDishTick = 100
-
- -
-
- -

◆ kDishZeroSpace

- -
-
- - - - -
const uint16_t kDishZeroSpace = kDishZeroSpaceTicks * kDishTick
-
- -
-
- -

◆ kDishZeroSpaceTicks

- -
-
- - - - -
const uint16_t kDishZeroSpaceTicks = 28
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Doshisha_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Doshisha_8cpp.html deleted file mode 100644 index 7e19c1cdc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Doshisha_8cpp.html +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Doshisha.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Doshisha.cpp File Reference
-
-
- -

Doshisha protocol support. -More...

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

-Variables

const uint16_t kDoshishaHdrMark = 3412
 
const uint16_t kDoshishaHdrSpace = 1722
 
const uint16_t kDoshishaBitMark = 420
 
const uint16_t kDoshishaOneSpace = 1310
 
const uint16_t kDoshishaZeroSpace = 452
 
const uint64_t kRcz01SignatureMask = 0xffffffff00
 
const uint64_t kRcz01Signature = 0x800B304800
 
const uint8_t kRcz01CommandMask = 0xFE
 
const uint8_t kRcz01ChannelMask = 0x01
 
const uint8_t kRcz01CommandSwitchChannel = 0xD2
 
const uint8_t kRcz01CommandTimmer60 = 0x52
 
const uint8_t kRcz01CommandTimmer30 = 0x92
 
const uint8_t kRcz01CommandOff = 0xA0
 
const uint8_t kRcz01CommandLevelDown = 0x2C
 
const uint8_t kRcz01CommandLevelUp = 0xCC
 
const uint8_t kRcz01CommandLevel1 = 0xA4
 
const uint8_t kRcz01CommandLevel2 = 0x24
 
const uint8_t kRcz01CommandLevel3 = 0xC4
 
const uint8_t kRcz01CommandLevel4 = 0xD0
 
const uint8_t kRcz01CommandOn = 0xC0
 
const uint8_t kRcz01CommandNightLight = 0xC8
 
-

Detailed Description

-

Doshisha protocol support.

-
See also
https://www.doshisha-led.com/
-

Variable Documentation

- -

◆ kDoshishaBitMark

- -
-
- - - - -
const uint16_t kDoshishaBitMark = 420
-
- -
-
- -

◆ kDoshishaHdrMark

- -
-
- - - - -
const uint16_t kDoshishaHdrMark = 3412
-
- -
-
- -

◆ kDoshishaHdrSpace

- -
-
- - - - -
const uint16_t kDoshishaHdrSpace = 1722
-
- -
-
- -

◆ kDoshishaOneSpace

- -
-
- - - - -
const uint16_t kDoshishaOneSpace = 1310
-
- -
-
- -

◆ kDoshishaZeroSpace

- -
-
- - - - -
const uint16_t kDoshishaZeroSpace = 452
-
- -
-
- -

◆ kRcz01ChannelMask

- -
-
- - - - -
const uint8_t kRcz01ChannelMask = 0x01
-
- -
-
- -

◆ kRcz01CommandLevel1

- -
-
- - - - -
const uint8_t kRcz01CommandLevel1 = 0xA4
-
- -
-
- -

◆ kRcz01CommandLevel2

- -
-
- - - - -
const uint8_t kRcz01CommandLevel2 = 0x24
-
- -
-
- -

◆ kRcz01CommandLevel3

- -
-
- - - - -
const uint8_t kRcz01CommandLevel3 = 0xC4
-
- -
-
- -

◆ kRcz01CommandLevel4

- -
-
- - - - -
const uint8_t kRcz01CommandLevel4 = 0xD0
-
- -
-
- -

◆ kRcz01CommandLevelDown

- -
-
- - - - -
const uint8_t kRcz01CommandLevelDown = 0x2C
-
- -
-
- -

◆ kRcz01CommandLevelUp

- -
-
- - - - -
const uint8_t kRcz01CommandLevelUp = 0xCC
-
- -
-
- -

◆ kRcz01CommandMask

- -
-
- - - - -
const uint8_t kRcz01CommandMask = 0xFE
-
- -
-
- -

◆ kRcz01CommandNightLight

- -
-
- - - - -
const uint8_t kRcz01CommandNightLight = 0xC8
-
- -
-
- -

◆ kRcz01CommandOff

- -
-
- - - - -
const uint8_t kRcz01CommandOff = 0xA0
-
- -
-
- -

◆ kRcz01CommandOn

- -
-
- - - - -
const uint8_t kRcz01CommandOn = 0xC0
-
- -
-
- -

◆ kRcz01CommandSwitchChannel

- -
-
- - - - -
const uint8_t kRcz01CommandSwitchChannel = 0xD2
-
- -
-
- -

◆ kRcz01CommandTimmer30

- -
-
- - - - -
const uint8_t kRcz01CommandTimmer30 = 0x92
-
- -
-
- -

◆ kRcz01CommandTimmer60

- -
-
- - - - -
const uint8_t kRcz01CommandTimmer60 = 0x52
-
- -
-
- -

◆ kRcz01Signature

- -
-
- - - - -
const uint64_t kRcz01Signature = 0x800B304800
-
- -
-
- -

◆ kRcz01SignatureMask

- -
-
- - - - -
const uint64_t kRcz01SignatureMask = 0xffffffff00
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8cpp.html deleted file mode 100644 index dab4a9897..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8cpp.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Ecoclim.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Ecoclim.cpp File Reference
-
-
- -

EcoClim A/C protocol. -More...

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

-Variables

const uint8_t kEcoclimSections = 3
 
const uint8_t kEcoclimExtraTolerance = 5
 Percentage (extra) More...
 
const uint16_t kEcoclimHdrMark = 5730
 uSeconds More...
 
const uint16_t kEcoclimHdrSpace = 1935
 uSeconds More...
 
const uint16_t kEcoclimBitMark = 440
 uSeconds More...
 
const uint16_t kEcoclimOneSpace = 1739
 uSeconds More...
 
const uint16_t kEcoclimZeroSpace = 637
 uSeconds More...
 
const uint16_t kEcoclimFooterMark = 7820
 uSeconds More...
 
const uint32_t kEcoclimGap = kDefaultMessageGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kEcoclimBitMark

- -
-
- - - - -
const uint16_t kEcoclimBitMark = 440
-
- -

uSeconds

- -
-
- -

◆ kEcoclimExtraTolerance

- -
-
- - - - -
const uint8_t kEcoclimExtraTolerance = 5
-
- -

Percentage (extra)

- -
-
- -

◆ kEcoclimFooterMark

- -
-
- - - - -
const uint16_t kEcoclimFooterMark = 7820
-
- -

uSeconds

- -
-
- -

◆ kEcoclimGap

- -
-
- - - - -
const uint32_t kEcoclimGap = kDefaultMessageGap
-
- -
-
- -

◆ kEcoclimHdrMark

- -
-
- - - - -
const uint16_t kEcoclimHdrMark = 5730
-
- -

uSeconds

- -
-
- -

◆ kEcoclimHdrSpace

- -
-
- - - - -
const uint16_t kEcoclimHdrSpace = 1935
-
- -

uSeconds

- -
-
- -

◆ kEcoclimOneSpace

- -
-
- - - - -
const uint16_t kEcoclimOneSpace = 1739
-
- -

uSeconds

- -
-
- -

◆ kEcoclimSections

- -
-
- - - - -
const uint8_t kEcoclimSections = 3
-
- -
-
- -

◆ kEcoclimZeroSpace

- -
-
- - - - -
const uint16_t kEcoclimZeroSpace = 637
-
- -

uSeconds

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h.html deleted file mode 100644 index 1157ea869..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Ecoclim.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Ecoclim.h File Reference
-
-
- -

EcoClim A/C protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  EcoclimProtocol
 Native representation of a Ecoclim A/C message. More...
 
class  IREcoclimAc
 Class for handling detailed EcoClim A/C 56 bit messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kEcoclimAuto = 0b000
 0. a.k.a Slave More...
 
const uint8_t kEcoclimCool = 0b001
 1 More...
 
const uint8_t kEcoclimDry = 0b010
 2 More...
 
const uint8_t kEcoclimRecycle = 0b011
 3 More...
 
const uint8_t kEcoclimFan = 0b100
 4 More...
 
const uint8_t kEcoclimHeat = 0b101
 5 More...
 
const uint8_t kEcoclimSleep = 0b111
 7 More...
 
const uint8_t kEcoclimFanMin = 0b00
 0 More...
 
const uint8_t kEcoclimFanMed = 0b01
 1 More...
 
const uint8_t kEcoclimFanMax = 0b10
 2 More...
 
const uint8_t kEcoclimFanAuto = 0b11
 3 More...
 
const uint8_t kEcoclimDipMaster = 0b0000
 
const uint8_t kEcoclimDipSlave = 0b0111
 
const uint8_t kEcoclimTempMin = 5
 
const uint8_t kEcoclimTempMax = kEcoclimTempMin + 31
 
const uint16_t kEcoclimTimerDisable = 0x1F * 60 + 7 * 10
 
const uint64_t kEcoclimDefaultState = 0x11063000FFFF02
 
-

Detailed Description

-

Variable Documentation

- -

◆ kEcoclimAuto

- -
-
- - - - -
const uint8_t kEcoclimAuto = 0b000
-
- -

0. a.k.a Slave

- -
-
- -

◆ kEcoclimCool

- -
-
- - - - -
const uint8_t kEcoclimCool = 0b001
-
- -

1

- -
-
- -

◆ kEcoclimDefaultState

- -
-
- - - - -
const uint64_t kEcoclimDefaultState = 0x11063000FFFF02
-
- -
-
- -

◆ kEcoclimDipMaster

- -
-
- - - - -
const uint8_t kEcoclimDipMaster = 0b0000
-
- -
-
- -

◆ kEcoclimDipSlave

- -
-
- - - - -
const uint8_t kEcoclimDipSlave = 0b0111
-
- -
-
- -

◆ kEcoclimDry

- -
-
- - - - -
const uint8_t kEcoclimDry = 0b010
-
- -

2

- -
-
- -

◆ kEcoclimFan

- -
-
- - - - -
const uint8_t kEcoclimFan = 0b100
-
- -

4

- -
-
- -

◆ kEcoclimFanAuto

- -
-
- - - - -
const uint8_t kEcoclimFanAuto = 0b11
-
- -

3

- -
-
- -

◆ kEcoclimFanMax

- -
-
- - - - -
const uint8_t kEcoclimFanMax = 0b10
-
- -

2

- -
-
- -

◆ kEcoclimFanMed

- -
-
- - - - -
const uint8_t kEcoclimFanMed = 0b01
-
- -

1

- -
-
- -

◆ kEcoclimFanMin

- -
-
- - - - -
const uint8_t kEcoclimFanMin = 0b00
-
- -

0

- -
-
- -

◆ kEcoclimHeat

- -
-
- - - - -
const uint8_t kEcoclimHeat = 0b101
-
- -

5

- -
-
- -

◆ kEcoclimRecycle

- -
-
- - - - -
const uint8_t kEcoclimRecycle = 0b011
-
- -

3

- -
-
- -

◆ kEcoclimSleep

- -
-
- - - - -
const uint8_t kEcoclimSleep = 0b111
-
- -

7

- -
-
- -

◆ kEcoclimTempMax

- -
-
- - - - -
const uint8_t kEcoclimTempMax = kEcoclimTempMin + 31
-
- -
-
- -

◆ kEcoclimTempMin

- -
-
- - - - -
const uint8_t kEcoclimTempMin = 5
-
- -
-
- -

◆ kEcoclimTimerDisable

- -
-
- - - - -
const uint16_t kEcoclimTimerDisable = 0x1F * 60 + 7 * 10
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h_source.html deleted file mode 100644 index fc9c6f078..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Ecoclim_8h_source.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Ecoclim.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Ecoclim.h
-
-
-Go to the documentation of this file.
1 // Copyright 2021 David Conran
-
2 
-
6 
-
7 // Supports:
-
8 // Brand: EcoClim, Model: HYSFR-P348 remote
-
9 // Brand: EcoClim, Model: ZC200DPO A/C
-
10 
-
11 #ifndef IR_ECOCLIM_H_
-
12 #define IR_ECOCLIM_H_
-
13 
-
14 #define __STDC_LIMIT_MACROS
-
15 #include <stdint.h>
-
16 #ifndef UNIT_TEST
-
17 #include <Arduino.h>
-
18 #endif
-
19 #include "IRremoteESP8266.h"
-
20 #include "IRsend.h"
-
21 #ifdef UNIT_TEST
-
22 #include "IRsend_test.h"
-
23 #endif
-
24 
-
25 // Constants
-
26 // Modes
-
27 const uint8_t kEcoclimAuto = 0b000;
-
28 const uint8_t kEcoclimCool = 0b001;
-
29 const uint8_t kEcoclimDry = 0b010;
-
30 const uint8_t kEcoclimRecycle = 0b011;
-
31 const uint8_t kEcoclimFan = 0b100;
-
32 const uint8_t kEcoclimHeat = 0b101;
-
33 const uint8_t kEcoclimSleep = 0b111;
-
34 // Fan Control
-
35 const uint8_t kEcoclimFanMin = 0b00;
-
36 const uint8_t kEcoclimFanMed = 0b01;
-
37 const uint8_t kEcoclimFanMax = 0b10;
-
38 const uint8_t kEcoclimFanAuto = 0b11;
-
39 // DIP settings
-
40 const uint8_t kEcoclimDipMaster = 0b0000;
-
41 const uint8_t kEcoclimDipSlave = 0b0111;
-
42 // Temperature
-
43 const uint8_t kEcoclimTempMin = 5; // Celsius
-
44 const uint8_t kEcoclimTempMax = kEcoclimTempMin + 31; // Celsius
-
45 // Timer
-
46 const uint16_t kEcoclimTimerDisable = 0x1F * 60 + 7 * 10; // 4774
-
47 
-
48 // Power: Off, Mode: Auto, Temp: 11C, Sensor: 22C, Fan: Auto, Clock: 00:00
-
49 const uint64_t kEcoclimDefaultState = 0x11063000FFFF02;
-
50 
- -
53  uint64_t raw;
-
54  struct { // Only 56 bits (7 bytes are used.
-
55  // Byte
-
56  uint64_t :3;
-
57  uint64_t :1;
-
58  uint64_t DipConfig :4;
-
59  // Byte
-
60  uint64_t OffTenMins :3;
-
61  uint64_t OffHours :5;
-
62  // Byte
-
63  uint64_t OnTenMins :3;
-
64  uint64_t OnHours :5;
-
65  // Byte+Byte
-
66  uint64_t Clock :11;
-
67  uint64_t :1;
-
68  uint64_t Fan :2;
-
69  uint64_t Power :1;
-
70  uint64_t Clear :1; // Not sure what this is
-
71  // Byte
-
72  uint64_t Temp :5;
-
73  uint64_t Mode :3;
-
74  // Byte
-
75  uint64_t SensorTemp :5;
-
76  uint64_t :3;
-
77  };
-
78 };
-
79 
-
80 // Classes
-
81 
-
84 class IREcoclimAc {
-
85  public:
-
86  explicit IREcoclimAc(const uint16_t pin, const bool inverted = false,
-
87  const bool use_modulation = true);
-
88  void stateReset(void);
-
89 #if SEND_ECOCLIM
-
90  void send(const uint16_t repeat = kNoRepeat);
-
95  int8_t calibrate(void) { return _irsend.calibrate(); }
-
96 #endif // SEND_ECOCLIM
-
97  void begin(void);
-
98  void on(void);
-
99  void off(void);
-
100  void setPower(const bool on);
-
101  bool getPower(void) const;
-
102  void setTemp(const uint8_t celsius);
-
103  uint8_t getTemp(void) const;
-
104  void setSensorTemp(const uint8_t celsius);
-
105  uint8_t getSensorTemp(void) const;
-
106  void setFan(const uint8_t speed);
-
107  uint8_t getFan(void) const;
-
108  void setMode(const uint8_t mode);
-
109  uint8_t getMode(void) const;
-
110  void setClock(const uint16_t nr_of_mins);
-
111  uint16_t getClock(void) const;
-
112  uint64_t getRaw(void) const;
-
113  void setRaw(const uint64_t new_code);
-
114  void setType(const uint8_t code);
-
115  uint8_t getType(void) const;
-
116  static uint8_t convertMode(const stdAc::opmode_t mode);
-
117  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
118  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
119  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
120  stdAc::state_t toCommon(void) const;
-
121  void setOnTimer(const uint16_t nr_of_mins);
-
122  uint16_t getOnTimer(void) const;
-
123  bool isOnTimerEnabled(void) const;
-
124  void disableOnTimer(void);
-
125  void setOffTimer(const uint16_t nr_of_mins);
-
126  uint16_t getOffTimer(void) const;
-
127  bool isOffTimerEnabled(void) const;
-
128  void disableOffTimer(void);
-
129  String toString(void) const;
-
130 #ifndef UNIT_TEST
-
131 
-
132  private:
- -
134 #else // UNIT_TEST
-
135  IRsendTest _irsend;
-
137 #endif // UNIT_TEST
- -
140 };
-
141 
-
142 #endif // IR_ECOCLIM_H_
-
-
bool isOnTimerEnabled(void) const
Check if the On Timer is enabled.
Definition: ir_Ecoclim.cpp:322
-
uint64_t OffHours
Off Timer nr of Hours.
Definition: ir_Ecoclim.h:61
-
uint64_t Mode
Operating Mode.
Definition: ir_Ecoclim.h:73
-
uint64_t OnTenMins
On Timer minutes (in tens of mins)
Definition: ir_Ecoclim.h:63
-
uint64_t getRaw(void) const
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Ecoclim.cpp:146
-
const uint8_t kEcoclimDipMaster
Definition: ir_Ecoclim.h:40
-
const uint8_t kEcoclimFanMed
1
Definition: ir_Ecoclim.h:36
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Ecoclim.cpp:131
-
uint8_t getType(void) const
Get the Unit type/DIP switch settings of the remote.
Definition: ir_Ecoclim.cpp:290
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Ecoclim.cpp:361
-
void setSensorTemp(const uint8_t celsius)
Set the sensor temperature.
Definition: ir_Ecoclim.cpp:167
-
uint64_t Fan
Fan Speed.
Definition: ir_Ecoclim.h:68
-
uint8_t getSensorTemp(void) const
Get the sensor temperature setting.
Definition: ir_Ecoclim.cpp:176
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint16_t getClock(void) const
Get the clock time of the A/C unit.
Definition: ir_Ecoclim.cpp:280
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Ecoclim.cpp:196
-
const uint64_t kEcoclimDefaultState
Definition: ir_Ecoclim.h:49
-
const uint8_t kEcoclimFanMin
0
Definition: ir_Ecoclim.h:35
-
void on(void)
Change the power setting to On.
Definition: ir_Ecoclim.cpp:189
-
const uint8_t kEcoclimDipSlave
Definition: ir_Ecoclim.h:41
- -
const uint8_t kEcoclimSleep
7
Definition: ir_Ecoclim.h:33
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Ecoclim.cpp:186
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint64_t raw
The state in IR code form.
Definition: ir_Ecoclim.h:53
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kEcoclimTempMin
Definition: ir_Ecoclim.h:43
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Ecoclim.cpp:163
-
const uint8_t kEcoclimFanMax
2
Definition: ir_Ecoclim.h:37
-
const uint8_t kEcoclimFanAuto
3
Definition: ir_Ecoclim.h:38
-
const uint16_t kEcoclimTimerDisable
Definition: ir_Ecoclim.h:46
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Ecoclim.cpp:255
-
void off(void)
Change the power setting to Off.
Definition: ir_Ecoclim.cpp:192
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Ecoclim.cpp:221
-
uint64_t Clock
Definition: ir_Ecoclim.h:66
-
void setRaw(const uint64_t new_code)
Set the internal state from a valid code for this protocol.
Definition: ir_Ecoclim.cpp:150
-
void setTemp(const uint8_t celsius)
Set the temperature.
Definition: ir_Ecoclim.cpp:154
-
const uint8_t kEcoclimTempMax
Definition: ir_Ecoclim.h:44
- -
const uint8_t kEcoclimRecycle
3
Definition: ir_Ecoclim.h:30
-
void setOffTimer(const uint16_t nr_of_mins)
Set & enable the Off Timer for the A/C.
Definition: ir_Ecoclim.cpp:334
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Ecoclim.cpp:236
-
bool isOffTimerEnabled(void) const
Check if the Off Timer is enabled.
Definition: ir_Ecoclim.cpp:349
-
uint64_t Clear
Definition: ir_Ecoclim.h:70
-
const uint8_t kEcoclimCool
1
Definition: ir_Ecoclim.h:28
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
void setType(const uint8_t code)
Set the Unit type/DIP switch settings for the remote.
Definition: ir_Ecoclim.cpp:294
-
uint64_t Power
Power control.
Definition: ir_Ecoclim.h:69
-
const uint8_t kEcoclimDry
2
Definition: ir_Ecoclim.h:29
-
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_Ecoclim.cpp:139
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Ecoclim.cpp:182
-
void setClock(const uint16_t nr_of_mins)
Set the clock time on the A/C unit.
Definition: ir_Ecoclim.cpp:284
-
uint64_t Temp
Desired Temperature (Celsius)
Definition: ir_Ecoclim.h:72
-
uint16_t getOnTimer(void) const
Get the On Timer for the A/C.
Definition: ir_Ecoclim.cpp:316
-
void disableOnTimer(void)
Disable & clear the On Timer.
Definition: ir_Ecoclim.cpp:327
-
IREcoclimAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Ecoclim.cpp:126
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Ecoclim.h:133
-
Class for handling detailed EcoClim A/C 56 bit messages.
Definition: ir_Ecoclim.h:84
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Ecoclim.cpp:134
-
const uint8_t kEcoclimAuto
0. a.k.a Slave
Definition: ir_Ecoclim.h:27
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Ecoclim.h:95
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Ecoclim.cpp:387
-
uint16_t getOffTimer(void) const
Get the Off Timer for the A/C.
Definition: ir_Ecoclim.cpp:343
-
const uint8_t kEcoclimHeat
5
Definition: ir_Ecoclim.h:32
-
uint64_t OnHours
On Timer nr of Hours.
Definition: ir_Ecoclim.h:64
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Ecoclim.cpp:200
-
uint64_t SensorTemp
Sensed Temperature (Celsius)
Definition: ir_Ecoclim.h:75
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Ecoclim.cpp:207
-
Native representation of a Ecoclim A/C message.
Definition: ir_Ecoclim.h:52
-
void disableOffTimer(void)
Disable & clear the Off Timer.
Definition: ir_Ecoclim.cpp:354
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Ecoclim.cpp:268
-
EcoclimProtocol _
The state of the IR remote in IR code form.
Definition: ir_Ecoclim.h:139
-
void setOnTimer(const uint16_t nr_of_mins)
Set & enable the On Timer for the A/C.
Definition: ir_Ecoclim.cpp:307
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Ecoclim.cpp:232
-
uint64_t DipConfig
0b0000 = Master, 0b0111 = Slave
Definition: ir_Ecoclim.h:58
-
const uint8_t kEcoclimFan
4
Definition: ir_Ecoclim.h:31
-
uint64_t OffTenMins
Off Timer minutes (in tens of mins)
Definition: ir_Ecoclim.h:60
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8cpp.html deleted file mode 100644 index 30e634456..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8cpp.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Electra.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Electra.cpp File Reference
-
-
- -

Support for Electra A/C protocols. -More...

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

-Variables

const uint16_t kElectraAcHdrMark = 9166
 
const uint16_t kElectraAcBitMark = 646
 
const uint16_t kElectraAcHdrSpace = 4470
 
const uint16_t kElectraAcOneSpace = 1647
 
const uint16_t kElectraAcZeroSpace = 547
 
const uint32_t kElectraAcMessageGap = kDefaultMessageGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kElectraAcBitMark

- -
-
- - - - -
const uint16_t kElectraAcBitMark = 646
-
- -
-
- -

◆ kElectraAcHdrMark

- -
-
- - - - -
const uint16_t kElectraAcHdrMark = 9166
-
- -
-
- -

◆ kElectraAcHdrSpace

- -
-
- - - - -
const uint16_t kElectraAcHdrSpace = 4470
-
- -
-
- -

◆ kElectraAcMessageGap

- -
-
- - - - -
const uint32_t kElectraAcMessageGap = kDefaultMessageGap
-
- -
-
- -

◆ kElectraAcOneSpace

- -
-
- - - - -
const uint16_t kElectraAcOneSpace = 1647
-
- -
-
- -

◆ kElectraAcZeroSpace

- -
-
- - - - -
const uint16_t kElectraAcZeroSpace = 547
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h.html deleted file mode 100644 index 89312ce48..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Electra.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Electra.h File Reference
-
-
- -

Support for Electra A/C protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  ElectraProtocol
 Native representation of a Electra A/C message. More...
 
class  IRElectraAc
 Class for handling detailed Electra A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kElectraAcMinTemp = 16
 
const uint8_t kElectraAcMaxTemp = 32
 
const uint8_t kElectraAcTempDelta = 8
 
const uint8_t kElectraAcSwingOn = 0b000
 
const uint8_t kElectraAcSwingOff = 0b111
 
const uint8_t kElectraAcFanAuto = 0b101
 
const uint8_t kElectraAcFanLow = 0b011
 
const uint8_t kElectraAcFanMed = 0b010
 
const uint8_t kElectraAcFanHigh = 0b001
 
const uint8_t kElectraAcAuto = 0b000
 
const uint8_t kElectraAcCool = 0b001
 
const uint8_t kElectraAcDry = 0b010
 
const uint8_t kElectraAcHeat = 0b100
 
const uint8_t kElectraAcFan = 0b110
 
const uint8_t kElectraAcLightToggleOn = 0x15
 
const uint8_t kElectraAcLightToggleMask = 0x11
 
const uint8_t kElectraAcLightToggleOff = 0x08
 
-

Detailed Description

-

Variable Documentation

- -

◆ kElectraAcAuto

- -
-
- - - - -
const uint8_t kElectraAcAuto = 0b000
-
- -
-
- -

◆ kElectraAcCool

- -
-
- - - - -
const uint8_t kElectraAcCool = 0b001
-
- -
-
- -

◆ kElectraAcDry

- -
-
- - - - -
const uint8_t kElectraAcDry = 0b010
-
- -
-
- -

◆ kElectraAcFan

- -
-
- - - - -
const uint8_t kElectraAcFan = 0b110
-
- -
-
- -

◆ kElectraAcFanAuto

- -
-
- - - - -
const uint8_t kElectraAcFanAuto = 0b101
-
- -
-
- -

◆ kElectraAcFanHigh

- -
-
- - - - -
const uint8_t kElectraAcFanHigh = 0b001
-
- -
-
- -

◆ kElectraAcFanLow

- -
-
- - - - -
const uint8_t kElectraAcFanLow = 0b011
-
- -
-
- -

◆ kElectraAcFanMed

- -
-
- - - - -
const uint8_t kElectraAcFanMed = 0b010
-
- -
-
- -

◆ kElectraAcHeat

- -
-
- - - - -
const uint8_t kElectraAcHeat = 0b100
-
- -
-
- -

◆ kElectraAcLightToggleMask

- -
-
- - - - -
const uint8_t kElectraAcLightToggleMask = 0x11
-
- -
-
- -

◆ kElectraAcLightToggleOff

- -
-
- - - - -
const uint8_t kElectraAcLightToggleOff = 0x08
-
- -
-
- -

◆ kElectraAcLightToggleOn

- -
-
- - - - -
const uint8_t kElectraAcLightToggleOn = 0x15
-
- -
-
- -

◆ kElectraAcMaxTemp

- -
-
- - - - -
const uint8_t kElectraAcMaxTemp = 32
-
- -
-
- -

◆ kElectraAcMinTemp

- -
-
- - - - -
const uint8_t kElectraAcMinTemp = 16
-
- -
-
- -

◆ kElectraAcSwingOff

- -
-
- - - - -
const uint8_t kElectraAcSwingOff = 0b111
-
- -
-
- -

◆ kElectraAcSwingOn

- -
-
- - - - -
const uint8_t kElectraAcSwingOn = 0b000
-
- -
-
- -

◆ kElectraAcTempDelta

- -
-
- - - - -
const uint8_t kElectraAcTempDelta = 8
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h_source.html deleted file mode 100644 index 92027479b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Electra_8h_source.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Electra.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Electra.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 David Conran
-
5 
-
6 // Supports:
-
7 // Brand: AUX, Model: KFR-35GW/BpNFW=3 A/C
-
8 // Brand: AUX, Model: YKR-T/011 remote
-
9 // Brand: Electra, Model: Classic INV 17 / AXW12DCS A/C
-
10 // Brand: Electra, Model: YKR-M/003E remote
-
11 
-
12 #ifndef IR_ELECTRA_H_
-
13 #define IR_ELECTRA_H_
-
14 
-
15 #define __STDC_LIMIT_MACROS
-
16 #include <stdint.h>
-
17 #ifndef UNIT_TEST
-
18 #include <Arduino.h>
-
19 #endif
-
20 #include "IRremoteESP8266.h"
-
21 #include "IRsend.h"
-
22 #ifdef UNIT_TEST
-
23 #include "IRsend_test.h"
-
24 #endif
-
25 
- - -
29  struct {
-
30  // Byte 0
-
31  uint8_t :8;
-
32  // Byte 1
-
33  uint8_t SwingV :3;
-
34  uint8_t Temp :5;
-
35  // Byte 2
-
36  uint8_t :5;
-
37  uint8_t SwingH :3;
-
38  // Byte 3
-
39  uint8_t :8;
-
40  // Byte 4
-
41  uint8_t :5;
-
42  uint8_t Fan :3;
-
43  // Byte 5
-
44  uint8_t :6;
-
45  uint8_t Turbo :1;
-
46  uint8_t :1;
-
47  // Byte 6
-
48  uint8_t :5;
-
49  uint8_t Mode :3;
-
50  // Byte 7
-
51  uint8_t :8;
-
52  // Byte 8
-
53  uint8_t :8;
-
54  // Byte 9
-
55  uint8_t :2;
-
56  uint8_t Clean :1;
-
57  uint8_t :2;
-
58  uint8_t Power :1;
-
59  uint8_t :2;
-
60  // Byte 10
-
61  uint8_t :8;
-
62  // Byte 11
-
63  uint8_t LightToggle :8;
-
64  // Byte 12
-
65  uint8_t Sum :8;
-
66  };
-
67 };
-
68 
-
69 // Constants
-
70 const uint8_t kElectraAcMinTemp = 16; // 16C
-
71 const uint8_t kElectraAcMaxTemp = 32; // 32C
-
72 const uint8_t kElectraAcTempDelta = 8;
-
73 const uint8_t kElectraAcSwingOn = 0b000;
-
74 const uint8_t kElectraAcSwingOff = 0b111;
-
75 
-
76 const uint8_t kElectraAcFanAuto = 0b101;
-
77 const uint8_t kElectraAcFanLow = 0b011;
-
78 const uint8_t kElectraAcFanMed = 0b010;
-
79 const uint8_t kElectraAcFanHigh = 0b001;
-
80 
-
81 const uint8_t kElectraAcAuto = 0b000;
-
82 const uint8_t kElectraAcCool = 0b001;
-
83 const uint8_t kElectraAcDry = 0b010;
-
84 const uint8_t kElectraAcHeat = 0b100;
-
85 const uint8_t kElectraAcFan = 0b110;
-
86 
-
87 const uint8_t kElectraAcLightToggleOn = 0x15;
-
88 // Light has known ON values of 0x15 (0b00010101) or 0x19 (0b00011001)
-
89 // Thus common bits ON are: 0b00010001 (0x11)
-
90 // We will use this for the getLightToggle() test.
-
91 const uint8_t kElectraAcLightToggleMask = 0x11;
-
92 // and known OFF values of 0x08 (0b00001000) & 0x05 (0x00000101)
-
93 const uint8_t kElectraAcLightToggleOff = 0x08;
-
94 
-
95 
-
96 // Classes
-
98 class IRElectraAc {
-
99  public:
-
100  explicit IRElectraAc(const uint16_t pin, const bool inverted = false,
-
101  const bool use_modulation = true);
-
102  void stateReset(void);
-
103 #if SEND_ELECTRA_AC
-
104  void send(const uint16_t repeat = kElectraAcMinRepeat);
-
109  int8_t calibrate(void) { return _irsend.calibrate(); }
-
110 #endif // SEND_ELECTRA_AC
-
111  void begin(void);
-
112  void on(void);
-
113  void off(void);
-
114  void setPower(const bool on);
-
115  bool getPower(void) const;
-
116  void setMode(const uint8_t mode);
-
117  uint8_t getMode(void) const;
-
118  void setTemp(const uint8_t temp);
-
119  uint8_t getTemp(void) const;
-
120  void setFan(const uint8_t speed);
-
121  uint8_t getFan(void) const;
-
122  void setSwingV(const bool on);
-
123  bool getSwingV(void) const;
-
124  void setSwingH(const bool on);
-
125  bool getSwingH(void) const;
-
126  void setClean(const bool on);
-
127  bool getClean(void) const;
-
128  void setLightToggle(const bool on);
-
129  bool getLightToggle(void) const;
-
130  void setTurbo(const bool on);
-
131  bool getTurbo(void) const;
-
132  uint8_t* getRaw(void);
-
133  void setRaw(const uint8_t new_code[],
-
134  const uint16_t length = kElectraAcStateLength);
-
135  static bool validChecksum(const uint8_t state[],
-
136  const uint16_t length = kElectraAcStateLength);
-
137  static uint8_t calcChecksum(const uint8_t state[],
-
138  const uint16_t length = kElectraAcStateLength);
-
139  String toString(void) const;
-
140  static uint8_t convertMode(const stdAc::opmode_t mode);
-
141  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
142  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
143  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
144  stdAc::state_t toCommon(void) const;
-
145 #ifndef UNIT_TEST
-
146 
-
147  private:
- -
149 #else
-
150  IRsendTest _irsend;
-
152 #endif
- -
155  void checksum(const uint16_t length = kElectraAcStateLength);
-
156 };
-
157 #endif // IR_ELECTRA_H_
-
-
uint8_t Temp
Definition: ir_Electra.h:34
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Electra.cpp:158
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Electra.cpp:165
-
void checksum(const uint16_t length=kElectraAcStateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Electra.cpp:94
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Electra.cpp:109
-
const uint8_t kElectraAcMinTemp
Definition: ir_Electra.h:70
-
bool getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Electra.cpp:259
-
uint8_t Power
Definition: ir_Electra.h:58
-
const uint8_t kElectraAcMaxTemp
Definition: ir_Electra.h:71
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Electra.cpp:135
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kElectraAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Electra.cpp:86
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Electra.cpp:314
-
const uint8_t kElectraAcFanAuto
Definition: ir_Electra.h:76
-
void on(void)
Change the power setting to On.
Definition: ir_Electra.cpp:122
-
uint8_t Fan
Definition: ir_Electra.h:42
-
void setClean(const bool on)
Set the Clean mode of the A/C.
Definition: ir_Electra.cpp:290
- -
const uint16_t kElectraAcMinRepeat
Definition: IRremoteESP8266.h:974
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Electra.cpp:198
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
IRElectraAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Electra.cpp:55
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kElectraAcHeat
Definition: ir_Electra.h:84
-
ElectraProtocol _
Definition: ir_Electra.h:154
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kElectraAcCool
Definition: ir_Electra.h:82
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Electra.cpp:205
-
uint8_t Sum
Definition: ir_Electra.h:65
-
Class for handling detailed Electra A/C messages.
Definition: ir_Electra.h:98
-
const uint8_t kElectraAcAuto
Definition: ir_Electra.h:81
- -
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Electra.cpp:178
-
const uint8_t kElectraAcDry
Definition: ir_Electra.h:83
-
void setRaw(const uint8_t new_code[], const uint16_t length=kElectraAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Electra.cpp:117
-
bool getLightToggle(void) const
Get the Light (LED) Toggle mode of the A/C.
Definition: ir_Electra.cpp:283
-
bool getClean(void) const
Get the Clean mode of the A/C.
Definition: ir_Electra.cpp:296
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Electra.cpp:129
-
const uint8_t kElectraAcTempDelta
Definition: ir_Electra.h:72
-
Native representation of a Electra A/C message.
Definition: ir_Electra.h:27
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Electra.h:109
-
const uint8_t kElectraAcLightToggleOff
Definition: ir_Electra.h:93
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Electra.cpp:242
-
uint8_t Clean
Definition: ir_Electra.h:56
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Electra.cpp:190
-
const uint8_t kElectraAcLightToggleOn
Definition: ir_Electra.h:87
-
void setLightToggle(const bool on)
Set the Light (LED) Toggle mode of the A/C.
Definition: ir_Electra.cpp:277
-
uint8_t Mode
Definition: ir_Electra.h:49
-
const uint8_t kElectraAcFanLow
Definition: ir_Electra.h:77
-
void setSwingH(const bool on)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Electra.cpp:265
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kElectraAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Electra.cpp:76
-
uint8_t SwingV
Definition: ir_Electra.h:33
-
void off(void)
Change the power setting to Off.
Definition: ir_Electra.cpp:125
-
void send(const uint16_t repeat=kElectraAcMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Electra.cpp:102
-
IRsend _irsend
instance of the IR send class
Definition: ir_Electra.h:148
-
const uint8_t kElectraAcSwingOn
Definition: ir_Electra.h:73
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Electra.cpp:221
-
const uint8_t kElectraAcFanMed
Definition: ir_Electra.h:78
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Electra.cpp:342
-
const uint8_t kElectraAcFanHigh
Definition: ir_Electra.h:79
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Electra.cpp:228
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Electra.cpp:70
-
void setTurbo(const bool on)
Set the Turbo mode of the A/C.
Definition: ir_Electra.cpp:302
-
uint8_t Turbo
Definition: ir_Electra.h:45
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Electra.cpp:141
-
bool getTurbo(void) const
Get the Turbo mode of the A/C.
Definition: ir_Electra.cpp:308
-
bool getSwingH(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Electra.cpp:271
-
uint8_t LightToggle
Definition: ir_Electra.h:63
-
const uint8_t kElectraAcFan
Definition: ir_Electra.h:85
-
const uint8_t kElectraAcLightToggleMask
Definition: ir_Electra.h:91
-
const uint8_t kElectraAcSwingOff
Definition: ir_Electra.h:74
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Electra.cpp:62
-
uint8_t raw[kElectraAcStateLength]
The state of the IR remote.
Definition: ir_Electra.h:28
-
uint8_t SwingH
Definition: ir_Electra.h:37
-
void setSwingV(const bool on)
Set the Vertical Swing mode of the A/C.
Definition: ir_Electra.cpp:253
-
const uint16_t kElectraAcStateLength
Definition: IRremoteESP8266.h:972
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__EliteScreens_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__EliteScreens_8cpp.html deleted file mode 100644 index efab8a7b4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__EliteScreens_8cpp.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_EliteScreens.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_EliteScreens.cpp File Reference
-
-
- -

Elite Screens protocol support. -More...

- - - - - - - - -

-Variables

const uint16_t kEliteScreensOne = 470
 
const uint16_t kEliteScreensZero = 1214
 
const uint16_t kEliteScreensGap = 29200
 
-

Detailed Description

-

Variable Documentation

- -

◆ kEliteScreensGap

- -
-
- - - - -
const uint16_t kEliteScreensGap = 29200
-
- -
-
- -

◆ kEliteScreensOne

- -
-
- - - - -
const uint16_t kEliteScreensOne = 470
-
- -
-
- -

◆ kEliteScreensZero

- -
-
- - - - -
const uint16_t kEliteScreensZero = 1214
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Epson_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Epson_8cpp.html deleted file mode 100644 index 3b1fa2a04..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Epson_8cpp.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Epson.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Epson.cpp File Reference
-
-
- -

Support for Epson protocols. Epson is an NEC-like protocol, except it doesn't use the NEC style repeat. -More...

-

Detailed Description

-

Support for Epson protocols. Epson is an NEC-like protocol, except it doesn't use the NEC style repeat.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1034
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8cpp.html deleted file mode 100644 index 71e9d609a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8cpp.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Fujitsu.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Fujitsu.cpp File Reference
-
-
- -

Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham & David Conran. -More...

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

-Variables

const uint16_t kFujitsuAcHdrMark = 3324
 
const uint16_t kFujitsuAcHdrSpace = 1574
 
const uint16_t kFujitsuAcBitMark = 448
 
const uint16_t kFujitsuAcOneSpace = 1182
 
const uint16_t kFujitsuAcZeroSpace = 390
 
const uint16_t kFujitsuAcMinGap = 8100
 
const uint8_t kFujitsuAcExtraTolerance = 5
 
-

Detailed Description

-

Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham & David Conran.

-
Warning
Use of incorrect model may cause the A/C unit to lock up. e.g. An A/C that uses an AR-RAH1U remote may lock up requiring a physical power rest, if incorrect model (ARRAH2E) is used with a Swing command. The correct model for it is ARREB1E.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1376
-

Variable Documentation

- -

◆ kFujitsuAcBitMark

- -
-
- - - - -
const uint16_t kFujitsuAcBitMark = 448
-
- -
-
- -

◆ kFujitsuAcExtraTolerance

- -
-
- - - - -
const uint8_t kFujitsuAcExtraTolerance = 5
-
- -
-
- -

◆ kFujitsuAcHdrMark

- -
-
- - - - -
const uint16_t kFujitsuAcHdrMark = 3324
-
- -
-
- -

◆ kFujitsuAcHdrSpace

- -
-
- - - - -
const uint16_t kFujitsuAcHdrSpace = 1574
-
- -
-
- -

◆ kFujitsuAcMinGap

- -
-
- - - - -
const uint16_t kFujitsuAcMinGap = 8100
-
- -
-
- -

◆ kFujitsuAcOneSpace

- -
-
- - - - -
const uint16_t kFujitsuAcOneSpace = 1182
-
- -
-
- -

◆ kFujitsuAcZeroSpace

- -
-
- - - - -
const uint16_t kFujitsuAcZeroSpace = 390
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h.html deleted file mode 100644 index fee6f28fc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h.html +++ /dev/null @@ -1,653 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Fujitsu.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Fujitsu.h File Reference
-
-
- -

Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  FujitsuProtocol
 Native representation of a Fujitsu A/C message. More...
 
class  IRFujitsuAC
 Class for handling detailed Fujitsu A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kFujitsuAcModeAuto = 0x0
 
const uint8_t kFujitsuAcModeCool = 0x1
 
const uint8_t kFujitsuAcModeDry = 0x2
 
const uint8_t kFujitsuAcModeFan = 0x3
 
const uint8_t kFujitsuAcModeHeat = 0x4
 
const uint8_t kFujitsuAcCmdStayOn = 0x00
 
const uint8_t kFujitsuAcCmdTurnOn = 0x01
 
const uint8_t kFujitsuAcCmdTurnOff = 0x02
 
const uint8_t kFujitsuAcCmdEcono = 0x09
 
const uint8_t kFujitsuAcCmdPowerful = 0x39
 
const uint8_t kFujitsuAcCmdStepVert = 0x6C
 
const uint8_t kFujitsuAcCmdToggleSwingVert = 0x6D
 
const uint8_t kFujitsuAcCmdStepHoriz = 0x79
 
const uint8_t kFujitsuAcCmdToggleSwingHoriz = 0x7A
 
const uint8_t kFujitsuAcFanAuto = 0x00
 
const uint8_t kFujitsuAcFanHigh = 0x01
 
const uint8_t kFujitsuAcFanMed = 0x02
 
const uint8_t kFujitsuAcFanLow = 0x03
 
const uint8_t kFujitsuAcFanQuiet = 0x04
 
const float kFujitsuAcMinTemp = 16
 
const float kFujitsuAcMaxTemp = 30
 
const uint8_t kFujitsuAcTempOffsetC = kFujitsuAcMinTemp
 
const float kFujitsuAcMinTempF = 60
 
const float kFujitsuAcMaxTempF = 88
 
const uint8_t kFujitsuAcTempOffsetF = 44
 
const uint8_t kFujitsuAcSwingOff = 0x00
 
const uint8_t kFujitsuAcSwingVert = 0x01
 
const uint8_t kFujitsuAcSwingHoriz = 0x02
 
const uint8_t kFujitsuAcSwingBoth = 0x03
 
const uint8_t kFujitsuAcStopTimers = 0b00
 
const uint8_t kFujitsuAcSleepTimer = 0b01
 
const uint8_t kFujitsuAcOffTimer = 0b10
 
const uint8_t kFujitsuAcOnTimer = 0b11
 
const uint16_t kFujitsuAcTimerMax = 12 * 60
 Minutes. More...
 
-

Detailed Description

-

Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham.

-
Warning
Use of incorrect model may cause the A/C unit to lock up. e.g. An A/C that uses an AR-RAH1U remote may lock up requiring a physical power rest, if incorrect model (ARRAH2E) is used with a Swing command. The correct model for it is ARREB1E.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1376
-

Variable Documentation

- -

◆ kFujitsuAcCmdEcono

- -
-
- - - - -
const uint8_t kFujitsuAcCmdEcono = 0x09
-
- -
-
- -

◆ kFujitsuAcCmdPowerful

- -
-
- - - - -
const uint8_t kFujitsuAcCmdPowerful = 0x39
-
- -
-
- -

◆ kFujitsuAcCmdStayOn

- -
-
- - - - -
const uint8_t kFujitsuAcCmdStayOn = 0x00
-
- -
-
- -

◆ kFujitsuAcCmdStepHoriz

- -
-
- - - - -
const uint8_t kFujitsuAcCmdStepHoriz = 0x79
-
- -
-
- -

◆ kFujitsuAcCmdStepVert

- -
-
- - - - -
const uint8_t kFujitsuAcCmdStepVert = 0x6C
-
- -
-
- -

◆ kFujitsuAcCmdToggleSwingHoriz

- -
-
- - - - -
const uint8_t kFujitsuAcCmdToggleSwingHoriz = 0x7A
-
- -
-
- -

◆ kFujitsuAcCmdToggleSwingVert

- -
-
- - - - -
const uint8_t kFujitsuAcCmdToggleSwingVert = 0x6D
-
- -
-
- -

◆ kFujitsuAcCmdTurnOff

- -
-
- - - - -
const uint8_t kFujitsuAcCmdTurnOff = 0x02
-
- -
-
- -

◆ kFujitsuAcCmdTurnOn

- -
-
- - - - -
const uint8_t kFujitsuAcCmdTurnOn = 0x01
-
- -
-
- -

◆ kFujitsuAcFanAuto

- -
-
- - - - -
const uint8_t kFujitsuAcFanAuto = 0x00
-
- -
-
- -

◆ kFujitsuAcFanHigh

- -
-
- - - - -
const uint8_t kFujitsuAcFanHigh = 0x01
-
- -
-
- -

◆ kFujitsuAcFanLow

- -
-
- - - - -
const uint8_t kFujitsuAcFanLow = 0x03
-
- -
-
- -

◆ kFujitsuAcFanMed

- -
-
- - - - -
const uint8_t kFujitsuAcFanMed = 0x02
-
- -
-
- -

◆ kFujitsuAcFanQuiet

- -
-
- - - - -
const uint8_t kFujitsuAcFanQuiet = 0x04
-
- -
-
- -

◆ kFujitsuAcMaxTemp

- -
-
- - - - -
const float kFujitsuAcMaxTemp = 30
-
- -
-
- -

◆ kFujitsuAcMaxTempF

- -
-
- - - - -
const float kFujitsuAcMaxTempF = 88
-
- -
-
- -

◆ kFujitsuAcMinTemp

- -
-
- - - - -
const float kFujitsuAcMinTemp = 16
-
- -
-
- -

◆ kFujitsuAcMinTempF

- -
-
- - - - -
const float kFujitsuAcMinTempF = 60
-
- -
-
- -

◆ kFujitsuAcModeAuto

- -
-
- - - - -
const uint8_t kFujitsuAcModeAuto = 0x0
-
- -
-
- -

◆ kFujitsuAcModeCool

- -
-
- - - - -
const uint8_t kFujitsuAcModeCool = 0x1
-
- -
-
- -

◆ kFujitsuAcModeDry

- -
-
- - - - -
const uint8_t kFujitsuAcModeDry = 0x2
-
- -
-
- -

◆ kFujitsuAcModeFan

- -
-
- - - - -
const uint8_t kFujitsuAcModeFan = 0x3
-
- -
-
- -

◆ kFujitsuAcModeHeat

- -
-
- - - - -
const uint8_t kFujitsuAcModeHeat = 0x4
-
- -
-
- -

◆ kFujitsuAcOffTimer

- -
-
- - - - -
const uint8_t kFujitsuAcOffTimer = 0b10
-
- -
-
- -

◆ kFujitsuAcOnTimer

- -
-
- - - - -
const uint8_t kFujitsuAcOnTimer = 0b11
-
- -
-
- -

◆ kFujitsuAcSleepTimer

- -
-
- - - - -
const uint8_t kFujitsuAcSleepTimer = 0b01
-
- -
-
- -

◆ kFujitsuAcStopTimers

- -
-
- - - - -
const uint8_t kFujitsuAcStopTimers = 0b00
-
- -
-
- -

◆ kFujitsuAcSwingBoth

- -
-
- - - - -
const uint8_t kFujitsuAcSwingBoth = 0x03
-
- -
-
- -

◆ kFujitsuAcSwingHoriz

- -
-
- - - - -
const uint8_t kFujitsuAcSwingHoriz = 0x02
-
- -
-
- -

◆ kFujitsuAcSwingOff

- -
-
- - - - -
const uint8_t kFujitsuAcSwingOff = 0x00
-
- -
-
- -

◆ kFujitsuAcSwingVert

- -
-
- - - - -
const uint8_t kFujitsuAcSwingVert = 0x01
-
- -
-
- -

◆ kFujitsuAcTempOffsetC

- -
-
- - - - -
const uint8_t kFujitsuAcTempOffsetC = kFujitsuAcMinTemp
-
- -
-
- -

◆ kFujitsuAcTempOffsetF

- -
-
- - - - -
const uint8_t kFujitsuAcTempOffsetF = 44
-
- -
-
- -

◆ kFujitsuAcTimerMax

- -
-
- - - - -
const uint16_t kFujitsuAcTimerMax = 12 * 60
-
- -

Minutes.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h_source.html deleted file mode 100644 index 94a8100c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Fujitsu_8h_source.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Fujitsu.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Fujitsu.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 Jonny Graham
-
2 // Copyright 2018-2021 David Conran
-
3 // Copyright 2021 siriuslzx
-
4 
-
13 
-
14 // Supports:
-
15 // Brand: Fujitsu, Model: AR-RAH2E remote (ARRAH2E)
-
16 // Brand: Fujitsu, Model: ASYG30LFCA A/C (ARRAH2E)
-
17 // Brand: Fujitsu General, Model: AR-RCE1E remote (ARRAH2E)
-
18 // Brand: Fujitsu General, Model: ASHG09LLCA A/C (ARRAH2E)
-
19 // Brand: Fujitsu General, Model: AOHG09LLC A/C (ARRAH2E)
-
20 // Brand: Fujitsu, Model: AR-DB1 remote (ARDB1)
-
21 // Brand: Fujitsu, Model: AST9RSGCW A/C (ARDB1)
-
22 // Brand: Fujitsu, Model: AR-REB1E remote (ARREB1E)
-
23 // Brand: Fujitsu, Model: ASYG7LMCA A/C (ARREB1E)
-
24 // Brand: Fujitsu, Model: AR-RAE1E remote (ARRAH2E)
-
25 // Brand: Fujitsu, Model: AGTV14LAC A/C (ARRAH2E)
-
26 // Brand: Fujitsu, Model: AR-RAC1E remote (ARRAH2E)
-
27 // Brand: Fujitsu, Model: ASTB09LBC A/C (ARRY4)
-
28 // Brand: Fujitsu, Model: AR-RY4 remote (ARRY4)
-
29 // Brand: Fujitsu General, Model: AR-JW2 remote (ARJW2)
-
30 // Brand: Fujitsu, Model: AR-DL10 remote (ARDB1)
-
31 // Brand: Fujitsu, Model: ASU30C1 A/C (ARDB1)
-
32 // Brand: Fujitsu, Model: AR-RAH1U remote (ARREB1E)
-
33 // Brand: Fujitsu, Model: ASU12RLF A/C (ARREB1E)
-
34 // Brand: Fujitsu, Model: AR-REW4E remote (ARREW4E)
-
35 // Brand: Fujitsu, Model: ASYG09KETA-B A/C (ARREW4E)
-
36 
-
37 #ifndef IR_FUJITSU_H_
-
38 #define IR_FUJITSU_H_
-
39 
-
40 #define __STDC_LIMIT_MACROS
-
41 #include <stdint.h>
-
42 #ifdef ARDUINO
-
43 #include <Arduino.h>
-
44 #endif
-
45 #include "IRrecv.h"
-
46 #include "IRremoteESP8266.h"
-
47 #include "IRsend.h"
-
48 #ifdef UNIT_TEST
-
49 #include "IRsend_test.h"
-
50 #endif
-
51 
- -
54  struct {
- - -
57  };
-
58  struct {
-
59  // Byte 0~1
-
60  uint64_t :16; // Fixed header
-
61  // Byte 2
-
62  uint64_t :4;
-
63  uint64_t Id :2; // Device Number/Identifier
-
64  uint64_t :2;
-
65  // Byte 3-4
-
66  uint64_t :16;
-
67  // Byte 5
-
68  uint64_t Cmd :8; // short codes:cmd; long codes:fixed value
-
69  // Byte 6
-
70  uint64_t RestLength :8; // Nr. of bytes in the message after this byte.
-
71  // Byte 7
-
72  uint64_t Protocol :8; // Seems like a protocol version number. Not sure.
-
73  // Byte 8
-
74  uint64_t Power :1;
-
75  uint64_t Fahrenheit :1;
-
76  uint64_t Temp :6; // Internal representation varies between models.
-
77  // Byte 9
-
78  uint64_t Mode :3;
-
79  uint64_t Clean :1; // Also 10C Heat in ARREW4E.
-
80  uint64_t TimerType :2;
-
81  uint64_t :2;
-
82  // Byte 10
-
83  uint64_t Fan :3;
-
84  uint64_t :1;
-
85  uint64_t Swing :2;
-
86  uint64_t :2;
-
87  // Byte 11~13
-
88  uint64_t OffTimer :11; // Also is the sleep timer value
-
89  uint64_t OffTimerEnable :1;
-
90  uint64_t OnTimer :11;
-
91  uint64_t OnTimerEnable :1;
-
92  // Byte 14
-
93  uint64_t :3;
-
94  uint64_t Filter :1;
-
95  uint64_t :1;
-
96  uint64_t unknown :1;
-
97  uint64_t :1;
-
98  uint64_t OutsideQuiet :1;
-
99  // Byte 15
-
100  uint64_t :0; // Checksum
-
101  };
-
102 };
-
103 
-
104 // Constants
-
105 const uint8_t kFujitsuAcModeAuto = 0x0; // 0b000
-
106 const uint8_t kFujitsuAcModeCool = 0x1; // 0b001
-
107 const uint8_t kFujitsuAcModeDry = 0x2; // 0b010
-
108 const uint8_t kFujitsuAcModeFan = 0x3; // 0b011
-
109 const uint8_t kFujitsuAcModeHeat = 0x4; // 0b100
-
110 
-
111 const uint8_t kFujitsuAcCmdStayOn = 0x00; // b00000000
-
112 const uint8_t kFujitsuAcCmdTurnOn = 0x01; // b00000001
-
113 const uint8_t kFujitsuAcCmdTurnOff = 0x02; // b00000010
-
114 const uint8_t kFujitsuAcCmdEcono = 0x09; // b00001001
-
115 const uint8_t kFujitsuAcCmdPowerful = 0x39; // b00111001
-
116 const uint8_t kFujitsuAcCmdStepVert = 0x6C; // b01101100
-
117 const uint8_t kFujitsuAcCmdToggleSwingVert = 0x6D; // b01101101
-
118 const uint8_t kFujitsuAcCmdStepHoriz = 0x79; // b01111001
-
119 const uint8_t kFujitsuAcCmdToggleSwingHoriz = 0x7A; // b01111010
-
120 
-
121 const uint8_t kFujitsuAcFanAuto = 0x00;
-
122 const uint8_t kFujitsuAcFanHigh = 0x01;
-
123 const uint8_t kFujitsuAcFanMed = 0x02;
-
124 const uint8_t kFujitsuAcFanLow = 0x03;
-
125 const uint8_t kFujitsuAcFanQuiet = 0x04;
-
126 
-
127 const float kFujitsuAcMinTemp = 16; // 16C
-
128 const float kFujitsuAcMaxTemp = 30; // 30C
- -
130 const float kFujitsuAcMinTempF = 60; // 60F
-
131 const float kFujitsuAcMaxTempF = 88; // 88F
-
132 const uint8_t kFujitsuAcTempOffsetF = 44;
-
133 
-
134 const uint8_t kFujitsuAcSwingOff = 0x00;
-
135 const uint8_t kFujitsuAcSwingVert = 0x01;
-
136 const uint8_t kFujitsuAcSwingHoriz = 0x02;
-
137 const uint8_t kFujitsuAcSwingBoth = 0x03;
-
138 
-
139 const uint8_t kFujitsuAcStopTimers = 0b00; // 0
-
140 const uint8_t kFujitsuAcSleepTimer = 0b01; // 1
-
141 const uint8_t kFujitsuAcOffTimer = 0b10; // 2
-
142 const uint8_t kFujitsuAcOnTimer = 0b11; // 3
-
143 const uint16_t kFujitsuAcTimerMax = 12 * 60;
-
144 
-
145 // Legacy defines.
-
146 #define FUJITSU_AC_MODE_AUTO kFujitsuAcModeAuto
-
147 #define FUJITSU_AC_MODE_COOL kFujitsuAcModeCool
-
148 #define FUJITSU_AC_MODE_DRY kFujitsuAcModeDry
-
149 #define FUJITSU_AC_MODE_FAN kFujitsuAcModeFan
-
150 #define FUJITSU_AC_MODE_HEAT kFujitsuAcModeHeat
-
151 #define FUJITSU_AC_CMD_STAY_ON kFujitsuAcCmdStayOn
-
152 #define FUJITSU_AC_CMD_TURN_ON kFujitsuAcCmdTurnOn
-
153 #define FUJITSU_AC_CMD_TURN_OFF kFujitsuAcCmdTurnOff
-
154 #define FUJITSU_AC_CMD_STEP_HORIZ kFujitsuAcCmdStepHoriz
-
155 #define FUJITSU_AC_CMD_STEP_VERT kFujitsuAcCmdStepVert
-
156 #define FUJITSU_AC_FAN_AUTO kFujitsuAcFanAuto
-
157 #define FUJITSU_AC_FAN_HIGH kFujitsuAcFanHigh
-
158 #define FUJITSU_AC_FAN_MED kFujitsuAcFanMed
-
159 #define FUJITSU_AC_FAN_LOW kFujitsuAcFanLow
-
160 #define FUJITSU_AC_FAN_QUIET kFujitsuAcFanQuiet
-
161 #define FUJITSU_AC_MIN_TEMP kFujitsuAcMinTempC
-
162 #define FUJITSU_AC_MAX_TEMP kFujitsuAcMaxTempC
-
163 #define FUJITSU_AC_SWING_OFF kFujitsuAcSwingOff
-
164 #define FUJITSU_AC_SWING_VERT kFujitsuAcSwingVert
-
165 #define FUJITSU_AC_SWING_HORIZ kFujitsuAcSwingHoriz
-
166 #define FUJITSU_AC_SWING_BOTH kFujitsuAcSwingBoth
-
167 
-
169 class IRFujitsuAC {
-
170  public:
-
171  explicit IRFujitsuAC(const uint16_t pin,
-
172  const fujitsu_ac_remote_model_t model = ARRAH2E,
-
173  const bool inverted = false,
-
174  const bool use_modulation = true);
-
175  void setModel(const fujitsu_ac_remote_model_t model);
- -
177  void stateReset(void);
-
178 #if SEND_FUJITSU_AC
-
179  void send(const uint16_t repeat = kFujitsuAcMinRepeat);
-
184  int8_t calibrate(void) { return _irsend.calibrate(); }
-
185 #endif // SEND_FUJITSU_AC
-
186  void begin(void);
-
187  void stepHoriz(void);
-
188  void toggleSwingHoriz(const bool update = true);
-
189  void stepVert(void);
-
190  void toggleSwingVert(const bool update = true);
-
191  void setCmd(const uint8_t cmd);
-
192  uint8_t getCmd(void) const;
-
193  void setTemp(const float temp, const bool useCelsius = true);
-
194  float getTemp(void) const;
-
195  void setFanSpeed(const uint8_t fan);
-
196  uint8_t getFanSpeed(void) const;
-
197  void setMode(const uint8_t mode);
-
198  uint8_t getMode(void) const;
-
199  void setSwing(const uint8_t mode);
-
200  uint8_t getSwing(void) const;
-
201  uint8_t* getRaw(void);
-
202  bool setRaw(const uint8_t newState[], const uint16_t length);
-
203  uint8_t getStateLength(void);
-
204  static bool validChecksum(uint8_t* state, const uint16_t length);
-
205  void setPower(const bool on);
-
206  void off(void);
-
207  void on(void);
-
208  bool getPower(void) const;
-
209  void setClean(const bool on);
-
210  bool getClean(void) const;
-
211  void setFilter(const bool on);
-
212  bool getFilter(void) const;
-
213  void set10CHeat(const bool on);
-
214  bool get10CHeat(void) const;
-
215  void setOutsideQuiet(const bool on);
-
216  bool getOutsideQuiet(void) const;
-
217  uint8_t getTimerType(void) const;
-
218  void setTimerType(const uint8_t timertype);
-
219  uint16_t getOnTimer(void) const;
-
220  void setOnTimer(const uint16_t nr_mins);
-
221  uint16_t getOffSleepTimer(void) const;
-
222  void setOffTimer(const uint16_t nr_mins);
-
223  void setSleepTimer(const uint16_t nr_mins);
-
224  void setId(const uint8_t num);
-
225  uint8_t getId(void) const;
-
226  void setCelsius(const bool on);
-
227  bool getCelsius(void) const;
-
228  static uint8_t convertMode(const stdAc::opmode_t mode);
-
229  static uint8_t convertFan(stdAc::fanspeed_t speed);
-
230  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
231  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
232  stdAc::state_t toCommon(void) const;
-
233  String toString(void) const;
-
234 #ifndef UNIT_TEST
-
235 
-
236  private:
- -
238 #else
-
239  IRsendTest _irsend;
-
241 #endif
- -
244  uint8_t _cmd;
- -
246  uint8_t _state_length;
- -
248  void checkSum(void);
-
249  bool updateUseLongOrShort(void);
-
250  void buildFromState(const uint16_t length);
-
251  void setOffSleepTimer(const uint16_t nr_mins);
-
252 };
-
253 
-
254 #endif // IR_FUJITSU_H_
-
-
uint64_t OffTimerEnable
Definition: ir_Fujitsu.h:89
-
void setOnTimer(const uint16_t nr_mins)
Set the On Timer setting of the A/C.
Definition: ir_Fujitsu.cpp:635
-
float getTemp(void) const
Get the current temperature setting.
Definition: ir_Fujitsu.cpp:469
-
const uint8_t kFujitsuAcCmdTurnOff
Definition: ir_Fujitsu.h:113
-
uint16_t getOnTimer(void) const
Get the On Timer setting of the A/C.
Definition: ir_Fujitsu.cpp:627
-
const float kFujitsuAcMinTemp
Definition: ir_Fujitsu.h:127
-
const uint16_t kFujitsuAcMinRepeat
Definition: IRremoteESP8266.h:977
-
void set10CHeat(const bool on)
Set the 10C heat status of the A/C.
Definition: ir_Fujitsu.cpp:572
-
uint8_t _cmd
Definition: ir_Fujitsu.h:244
-
uint64_t Id
Definition: ir_Fujitsu.h:63
-
uint8_t getCmd(void) const
Set the requested (special) command part for the A/C message.
Definition: ir_Fujitsu.cpp:384
-
uint8_t getTimerType(void) const
Get the Timer type of the A/C message.
Definition: ir_Fujitsu.cpp:601
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Fujitsu.h:184
-
void setClean(const bool on)
Set the Clean mode of the A/C.
Definition: ir_Fujitsu.cpp:540
-
uint8_t getFanSpeed(void) const
Get the current fan speed setting.
Definition: ir_Fujitsu.cpp:492
-
const uint8_t kFujitsuAcCmdToggleSwingVert
Definition: ir_Fujitsu.h:117
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Fujitsu.cpp:240
-
void setTimerType(const uint8_t timertype)
Set the Timer type of the A/C message.
Definition: ir_Fujitsu.cpp:613
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Fujitsu.cpp:506
- -
void stepVert(void)
Request the A/C to step the Vertical Swing.
Definition: ir_Fujitsu.cpp:331
-
const float kFujitsuAcMinTempF
Definition: ir_Fujitsu.h:130
-
void setCelsius(const bool on)
Set the Temperature units for the A/C.
Definition: ir_Fujitsu.cpp:717
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Fujitsu.cpp:726
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Fujitsu.cpp:101
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint64_t TimerType
Definition: ir_Fujitsu.h:80
-
uint64_t Power
Definition: ir_Fujitsu.h:74
-
uint8_t getSwing(void) const
Get the requested swing operation mode of the A/C unit.
Definition: ir_Fujitsu.cpp:534
-
uint64_t Fan
Definition: ir_Fujitsu.h:83
-
const uint8_t kFujitsuAcFanAuto
Definition: ir_Fujitsu.h:121
-
bool setRaw(const uint8_t newState[], const uint16_t length)
Set the internal state from a valid code for this protocol.
Definition: ir_Fujitsu.cpp:306
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint64_t OutsideQuiet
Definition: ir_Fujitsu.h:98
-
bool getOutsideQuiet(void) const
Get the Outside Quiet mode status of the A/C.
Definition: ir_Fujitsu.cpp:413
-
bool updateUseLongOrShort(void)
Update the length (size) of the state code for the current configuration.
Definition: ir_Fujitsu.cpp:134
-
Native representation of a Fujitsu A/C message.
Definition: ir_Fujitsu.h:53
-
const uint8_t kFujitsuAcCmdTurnOn
Definition: ir_Fujitsu.h:112
-
uint8_t _state_length_short
Definition: ir_Fujitsu.h:247
-
bool getClean(void) const
Get the Clean mode status of the A/C.
Definition: ir_Fujitsu.cpp:547
-
const uint8_t kFujitsuAcFanHigh
Definition: ir_Fujitsu.h:122
-
uint64_t Swing
Definition: ir_Fujitsu.h:85
-
const float kFujitsuAcMaxTemp
Definition: ir_Fujitsu.h:128
-
uint64_t OffTimer
Definition: ir_Fujitsu.h:88
-
const uint8_t kFujitsuAcModeHeat
Definition: ir_Fujitsu.h:109
-
void setFilter(const bool on)
Set the Filter mode status of the A/C.
Definition: ir_Fujitsu.cpp:556
-
static uint8_t convertFan(stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Fujitsu.cpp:739
- -
uint64_t Fahrenheit
Definition: ir_Fujitsu.h:75
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Fujitsu.cpp:402
-
FujitsuProtocol _
Definition: ir_Fujitsu.h:243
-
void stepHoriz(void)
Request the A/C to step the Horizontal Swing.
Definition: ir_Fujitsu.cpp:319
-
const uint8_t kFujitsuAcCmdToggleSwingHoriz
Definition: ir_Fujitsu.h:119
-
uint64_t Protocol
Definition: ir_Fujitsu.h:72
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Fujitsu.h:237
-
uint64_t OnTimerEnable
Definition: ir_Fujitsu.h:91
-
fujitsu_ac_remote_model_t
Fujitsu A/C model numbers.
Definition: IRsend.h:120
-
const uint8_t kFujitsuAcStopTimers
Definition: ir_Fujitsu.h:139
-
void setCmd(const uint8_t cmd)
Set the requested (special) command part for the A/C message.
Definition: ir_Fujitsu.cpp:344
-
void setOffTimer(const uint16_t nr_mins)
Set the Off Timer time for the A/C.
Definition: ir_Fujitsu.cpp:664
-
void buildFromState(const uint16_t length)
Build the internal state/config from the current (raw) A/C message.
Definition: ir_Fujitsu.cpp:249
-
uint64_t OnTimer
Definition: ir_Fujitsu.h:90
-
uint64_t Mode
Definition: ir_Fujitsu.h:78
-
uint64_t Cmd
Definition: ir_Fujitsu.h:68
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Fujitsu.cpp:122
-
void setTemp(const float temp, const bool useCelsius=true)
Set the temperature.
Definition: ir_Fujitsu.cpp:426
-
void setId(const uint8_t num)
Set the device's remote ID number.
Definition: ir_Fujitsu.cpp:709
-
const uint16_t kFujitsuAcStateLengthShort
Definition: IRremoteESP8266.h:979
-
Class for handling detailed Fujitsu A/C messages.
Definition: ir_Fujitsu.h:169
-
const uint8_t kFujitsuAcCmdStepVert
Definition: ir_Fujitsu.h:116
-
void setSwing(const uint8_t mode)
Set the requested swing operation mode of the A/C unit.
Definition: ir_Fujitsu.cpp:512
-
const uint16_t kFujitsuAcStateLength
Definition: IRremoteESP8266.h:978
-
const uint8_t kFujitsuAcCmdPowerful
Definition: ir_Fujitsu.h:115
-
uint64_t Temp
Definition: ir_Fujitsu.h:76
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Fujitsu.cpp:753
-
bool getCelsius(void) const
Get the Clean mode status of the A/C.
Definition: ir_Fujitsu.cpp:721
-
const uint8_t kFujitsuAcCmdStepHoriz
Definition: ir_Fujitsu.h:118
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Fujitsu.cpp:496
-
const uint8_t kFujitsuAcSwingHoriz
Definition: ir_Fujitsu.h:136
-
const uint8_t kFujitsuAcSwingVert
Definition: ir_Fujitsu.h:135
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Fujitsu.cpp:766
-
bool getFilter(void) const
Get the Filter mode status of the A/C.
Definition: ir_Fujitsu.cpp:563
-
void toggleSwingVert(const bool update=true)
Request the A/C to toggle the Vertical Swing mode.
Definition: ir_Fujitsu.cpp:335
-
bool get10CHeat(void) const
Get the 10C heat status of the A/C.
Definition: ir_Fujitsu.cpp:590
- -
const float kFujitsuAcMaxTempF
Definition: ir_Fujitsu.h:131
-
uint64_t Clean
Definition: ir_Fujitsu.h:79
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Fujitsu.cpp:821
-
uint8_t getId(void) const
Get the current device's remote ID number.
Definition: ir_Fujitsu.cpp:713
-
const uint8_t kFujitsuAcModeAuto
Definition: ir_Fujitsu.h:105
-
void setOutsideQuiet(const bool on)
Set the Outside Quiet mode of the A/C.
Definition: ir_Fujitsu.cpp:406
-
uint8_t shortcode[kFujitsuAcStateLengthShort]
Definition: ir_Fujitsu.h:56
-
const uint8_t kFujitsuAcSwingOff
Definition: ir_Fujitsu.h:134
-
void setModel(const fujitsu_ac_remote_model_t model)
Set the currently emulated model of the A/C.
Definition: ir_Fujitsu.cpp:79
-
const uint8_t kFujitsuAcModeDry
Definition: ir_Fujitsu.h:107
-
@ ARRAH2E
(1) AR-RAH2E, AR-RAC1E, AR-RAE1E, AR-RCE1E (Default) Warning: Use on incorrect models can cause the A...
Definition: IRsend.h:121
-
const uint8_t kFujitsuAcSleepTimer
Definition: ir_Fujitsu.h:140
-
uint8_t getStateLength(void)
Get the length (size) of the state code for the current configuration.
Definition: ir_Fujitsu.cpp:234
-
const uint8_t kFujitsuAcTempOffsetC
Definition: ir_Fujitsu.h:129
-
const uint8_t kFujitsuAcFanMed
Definition: ir_Fujitsu.h:123
-
IRFujitsuAC(const uint16_t pin, const fujitsu_ac_remote_model_t model=ARRAH2E, const bool inverted=false, const bool use_modulation=true)
Class Constructor.
Definition: ir_Fujitsu.cpp:69
-
void setSleepTimer(const uint16_t nr_mins)
Set the Sleep Timer time for the A/C.
Definition: ir_Fujitsu.cpp:674
-
const uint8_t kFujitsuAcTempOffsetF
Definition: ir_Fujitsu.h:132
-
const uint8_t kFujitsuAcSwingBoth
Definition: ir_Fujitsu.h:137
-
fujitsu_ac_remote_model_t _model
Definition: ir_Fujitsu.h:245
-
uint64_t Filter
Definition: ir_Fujitsu.h:94
-
const uint8_t kFujitsuAcCmdStayOn
Definition: ir_Fujitsu.h:111
-
uint64_t unknown
Definition: ir_Fujitsu.h:96
-
fujitsu_ac_remote_model_t getModel(void) const
Get the currently emulated/detected model of the A/C.
Definition: ir_Fujitsu.cpp:98
-
const uint8_t kFujitsuAcOnTimer
Definition: ir_Fujitsu.h:142
-
void setFanSpeed(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Fujitsu.cpp:482
-
const uint8_t kFujitsuAcOffTimer
Definition: ir_Fujitsu.h:141
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Fujitsu.cpp:395
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Fujitsu.cpp:390
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Fujitsu.cpp:398
-
void send(const uint16_t repeat=kFujitsuAcMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Fujitsu.cpp:127
-
void setOffSleepTimer(const uint16_t nr_mins)
Set the Off/Sleep Timer time for the A/C.
Definition: ir_Fujitsu.cpp:658
-
void checkSum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Fujitsu.cpp:166
-
static bool validChecksum(uint8_t *state, const uint16_t length)
Verify the checksum is valid for a given state.
Definition: ir_Fujitsu.cpp:686
-
uint16_t getOffSleepTimer(void) const
Get the Off/Sleep Timer setting of the A/C.
Definition: ir_Fujitsu.cpp:646
-
uint8_t _state_length
Definition: ir_Fujitsu.h:246
-
const uint16_t kFujitsuAcTimerMax
Minutes.
Definition: ir_Fujitsu.h:143
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Fujitsu.cpp:778
-
void toggleSwingHoriz(const bool update=true)
Request the A/C to toggle the Horizontal Swing mode.
Definition: ir_Fujitsu.cpp:323
-
const uint8_t kFujitsuAcModeFan
Definition: ir_Fujitsu.h:108
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kFujitsuAcCmdEcono
Definition: ir_Fujitsu.h:114
-
const uint8_t kFujitsuAcFanQuiet
Definition: ir_Fujitsu.h:125
-
uint64_t RestLength
Definition: ir_Fujitsu.h:70
-
uint8_t longcode[kFujitsuAcStateLength]
The state of the IR remote.
Definition: ir_Fujitsu.h:55
-
const uint8_t kFujitsuAcFanLow
Definition: ir_Fujitsu.h:124
-
const uint8_t kFujitsuAcModeCool
Definition: ir_Fujitsu.h:106
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GICable_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GICable_8cpp.html deleted file mode 100644 index 9a227c61b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GICable_8cpp.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_GICable.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_GICable.cpp File Reference
-
-
- -

G.I. Cable. -More...

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

-Variables

const uint16_t kGicableHdrMark = 9000
 
const uint16_t kGicableHdrSpace = 4400
 
const uint16_t kGicableBitMark = 550
 
const uint16_t kGicableOneSpace = 4400
 
const uint16_t kGicableZeroSpace = 2200
 
const uint16_t kGicableRptSpace = 2200
 
const uint32_t kGicableMinCommandLength = 99600
 
const uint32_t kGicableMinGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kGicableBitMark

- -
-
- - - - -
const uint16_t kGicableBitMark = 550
-
- -
-
- -

◆ kGicableHdrMark

- -
-
- - - - -
const uint16_t kGicableHdrMark = 9000
-
- -
-
- -

◆ kGicableHdrSpace

- -
-
- - - - -
const uint16_t kGicableHdrSpace = 4400
-
- -
-
- -

◆ kGicableMinCommandLength

- -
-
- - - - -
const uint32_t kGicableMinCommandLength = 99600
-
- -
-
- -

◆ kGicableMinGap

- -
-
- - - - -
const uint32_t kGicableMinGap
-
-
- -

◆ kGicableOneSpace

- -
-
- - - - -
const uint16_t kGicableOneSpace = 4400
-
- -
-
- -

◆ kGicableRptSpace

- -
-
- - - - -
const uint16_t kGicableRptSpace = 2200
-
- -
-
- -

◆ kGicableZeroSpace

- -
-
- - - - -
const uint16_t kGicableZeroSpace = 2200
-
- -
-
-
-
const uint16_t kGicableHdrSpace
Definition: ir_GICable.cpp:20
-
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:982
-
const uint16_t kGicableOneSpace
Definition: ir_GICable.cpp:22
-
const uint32_t kGicableMinCommandLength
Definition: ir_GICable.cpp:25
-
const uint16_t kGicableBitMark
Definition: ir_GICable.cpp:21
-
const uint16_t kGicableHdrMark
Definition: ir_GICable.cpp:19
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GlobalCache_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GlobalCache_8cpp.html deleted file mode 100644 index 7ff602faf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__GlobalCache_8cpp.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_GlobalCache.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_GlobalCache.cpp File Reference
-
-
- -

Global Cache IR format sender Originally added by Hisham Khalifa (http://www.hishamkhalifa.com) -More...

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

-Variables

const uint16_t kGlobalCacheMaxRepeat = 50
 
const uint32_t kGlobalCacheMinUsec = 80
 
const uint8_t kGlobalCacheFreqIndex = 0
 
const uint8_t kGlobalCacheRptIndex = kGlobalCacheFreqIndex + 1
 
const uint8_t kGlobalCacheRptStartIndex = kGlobalCacheRptIndex + 1
 
const uint8_t kGlobalCacheStartIndex = kGlobalCacheRptStartIndex + 1
 
-

Detailed Description

-

Global Cache IR format sender Originally added by Hisham Khalifa (http://www.hishamkhalifa.com)

-
See also
https://irdb.globalcache.com/Home/Database
-

Variable Documentation

- -

◆ kGlobalCacheFreqIndex

- -
-
- - - - -
const uint8_t kGlobalCacheFreqIndex = 0
-
- -
-
- -

◆ kGlobalCacheMaxRepeat

- -
-
- - - - -
const uint16_t kGlobalCacheMaxRepeat = 50
-
- -
-
- -

◆ kGlobalCacheMinUsec

- -
-
- - - - -
const uint32_t kGlobalCacheMinUsec = 80
-
- -
-
- -

◆ kGlobalCacheRptIndex

- -
-
- - - - -
const uint8_t kGlobalCacheRptIndex = kGlobalCacheFreqIndex + 1
-
- -
-
- -

◆ kGlobalCacheRptStartIndex

- -
-
- - - - -
const uint8_t kGlobalCacheRptStartIndex = kGlobalCacheRptIndex + 1
-
- -
-
- -

◆ kGlobalCacheStartIndex

- -
-
- - - - -
const uint8_t kGlobalCacheStartIndex = kGlobalCacheRptStartIndex + 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8cpp.html deleted file mode 100644 index 62188cc57..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8cpp.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Goodweather.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Goodweather.cpp File Reference
-
-
- -

Support for Goodweather compatible HVAC protocols. -More...

-

Detailed Description

-

Support for Goodweather compatible HVAC protocols.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/697
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h.html deleted file mode 100644 index 9f82cf82c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h.html +++ /dev/null @@ -1,633 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Goodweather.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Goodweather.h File Reference
-
-
- -

Support for Goodweather compatible HVAC protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  GoodweatherProtocol
 Native representation of a Goodweather A/C message. More...
 
class  IRGoodweatherAc
 Class for handling detailed Goodweather A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kGoodweatherBitMark = 580
 
const uint16_t kGoodweatherOneSpace = 580
 
const uint16_t kGoodweatherZeroSpace = 1860
 
const uint16_t kGoodweatherHdrMark = 6820
 
const uint16_t kGoodweatherHdrSpace = 6820
 
const uint8_t kGoodweatherExtraTolerance = 12
 
const uint8_t kGoodweatherAuto = 0b000
 
const uint8_t kGoodweatherCool = 0b001
 
const uint8_t kGoodweatherDry = 0b010
 
const uint8_t kGoodweatherFan = 0b011
 
const uint8_t kGoodweatherHeat = 0b100
 
const uint8_t kGoodweatherSwingFast = 0b00
 
const uint8_t kGoodweatherSwingSlow = 0b01
 
const uint8_t kGoodweatherSwingOff = 0b10
 
const uint8_t kGoodweatherFanAuto = 0b00
 
const uint8_t kGoodweatherFanHigh = 0b01
 
const uint8_t kGoodweatherFanMed = 0b10
 
const uint8_t kGoodweatherFanLow = 0b11
 
const uint8_t kGoodweatherTempMin = 16
 
const uint8_t kGoodweatherTempMax = 31
 
const uint8_t kGoodweatherCmdPower = 0x00
 
const uint8_t kGoodweatherCmdMode = 0x01
 
const uint8_t kGoodweatherCmdUpTemp = 0x02
 
const uint8_t kGoodweatherCmdDownTemp = 0x03
 
const uint8_t kGoodweatherCmdSwing = 0x04
 
const uint8_t kGoodweatherCmdFan = 0x05
 
const uint8_t kGoodweatherCmdTimer = 0x06
 
const uint8_t kGoodweatherCmdAirFlow = 0x07
 
const uint8_t kGoodweatherCmdHold = 0x08
 
const uint8_t kGoodweatherCmdSleep = 0x09
 
const uint8_t kGoodweatherCmdTurbo = 0x0A
 
const uint8_t kGoodweatherCmdLight = 0x0B
 
const uint64_t kGoodweatherStateInit = 0xD50000000000
 
-

Detailed Description

-

Support for Goodweather compatible HVAC protocols.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/697
-

Variable Documentation

- -

◆ kGoodweatherAuto

- -
-
- - - - -
const uint8_t kGoodweatherAuto = 0b000
-
- -
-
- -

◆ kGoodweatherBitMark

- -
-
- - - - -
const uint16_t kGoodweatherBitMark = 580
-
- -
-
- -

◆ kGoodweatherCmdAirFlow

- -
-
- - - - -
const uint8_t kGoodweatherCmdAirFlow = 0x07
-
- -
-
- -

◆ kGoodweatherCmdDownTemp

- -
-
- - - - -
const uint8_t kGoodweatherCmdDownTemp = 0x03
-
- -
-
- -

◆ kGoodweatherCmdFan

- -
-
- - - - -
const uint8_t kGoodweatherCmdFan = 0x05
-
- -
-
- -

◆ kGoodweatherCmdHold

- -
-
- - - - -
const uint8_t kGoodweatherCmdHold = 0x08
-
- -
-
- -

◆ kGoodweatherCmdLight

- -
-
- - - - -
const uint8_t kGoodweatherCmdLight = 0x0B
-
- -
-
- -

◆ kGoodweatherCmdMode

- -
-
- - - - -
const uint8_t kGoodweatherCmdMode = 0x01
-
- -
-
- -

◆ kGoodweatherCmdPower

- -
-
- - - - -
const uint8_t kGoodweatherCmdPower = 0x00
-
- -
-
- -

◆ kGoodweatherCmdSleep

- -
-
- - - - -
const uint8_t kGoodweatherCmdSleep = 0x09
-
- -
-
- -

◆ kGoodweatherCmdSwing

- -
-
- - - - -
const uint8_t kGoodweatherCmdSwing = 0x04
-
- -
-
- -

◆ kGoodweatherCmdTimer

- -
-
- - - - -
const uint8_t kGoodweatherCmdTimer = 0x06
-
- -
-
- -

◆ kGoodweatherCmdTurbo

- -
-
- - - - -
const uint8_t kGoodweatherCmdTurbo = 0x0A
-
- -
-
- -

◆ kGoodweatherCmdUpTemp

- -
-
- - - - -
const uint8_t kGoodweatherCmdUpTemp = 0x02
-
- -
-
- -

◆ kGoodweatherCool

- -
-
- - - - -
const uint8_t kGoodweatherCool = 0b001
-
- -
-
- -

◆ kGoodweatherDry

- -
-
- - - - -
const uint8_t kGoodweatherDry = 0b010
-
- -
-
- -

◆ kGoodweatherExtraTolerance

- -
-
- - - - -
const uint8_t kGoodweatherExtraTolerance = 12
-
- -
-
- -

◆ kGoodweatherFan

- -
-
- - - - -
const uint8_t kGoodweatherFan = 0b011
-
- -
-
- -

◆ kGoodweatherFanAuto

- -
-
- - - - -
const uint8_t kGoodweatherFanAuto = 0b00
-
- -
-
- -

◆ kGoodweatherFanHigh

- -
-
- - - - -
const uint8_t kGoodweatherFanHigh = 0b01
-
- -
-
- -

◆ kGoodweatherFanLow

- -
-
- - - - -
const uint8_t kGoodweatherFanLow = 0b11
-
- -
-
- -

◆ kGoodweatherFanMed

- -
-
- - - - -
const uint8_t kGoodweatherFanMed = 0b10
-
- -
-
- -

◆ kGoodweatherHdrMark

- -
-
- - - - -
const uint16_t kGoodweatherHdrMark = 6820
-
- -
-
- -

◆ kGoodweatherHdrSpace

- -
-
- - - - -
const uint16_t kGoodweatherHdrSpace = 6820
-
- -
-
- -

◆ kGoodweatherHeat

- -
-
- - - - -
const uint8_t kGoodweatherHeat = 0b100
-
- -
-
- -

◆ kGoodweatherOneSpace

- -
-
- - - - -
const uint16_t kGoodweatherOneSpace = 580
-
- -
-
- -

◆ kGoodweatherStateInit

- -
-
- - - - -
const uint64_t kGoodweatherStateInit = 0xD50000000000
-
- -
-
- -

◆ kGoodweatherSwingFast

- -
-
- - - - -
const uint8_t kGoodweatherSwingFast = 0b00
-
- -
-
- -

◆ kGoodweatherSwingOff

- -
-
- - - - -
const uint8_t kGoodweatherSwingOff = 0b10
-
- -
-
- -

◆ kGoodweatherSwingSlow

- -
-
- - - - -
const uint8_t kGoodweatherSwingSlow = 0b01
-
- -
-
- -

◆ kGoodweatherTempMax

- -
-
- - - - -
const uint8_t kGoodweatherTempMax = 31
-
- -
-
- -

◆ kGoodweatherTempMin

- -
-
- - - - -
const uint8_t kGoodweatherTempMin = 16
-
- -
-
- -

◆ kGoodweatherZeroSpace

- -
-
- - - - -
const uint16_t kGoodweatherZeroSpace = 1860
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h_source.html deleted file mode 100644 index 6f00abb5c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Goodweather_8h_source.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Goodweather.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Goodweather.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 ribeirodanielf
-
2 // Copyright 2019 David Conran
-
3 
-
7 
-
8 // Supports:
-
9 // Brand: Goodweather, Model: ZH/JT-03 remote
-
10 
-
11 #ifndef IR_GOODWEATHER_H_
-
12 #define IR_GOODWEATHER_H_
-
13 
-
14 #define __STDC_LIMIT_MACROS
-
15 #include <stdint.h>
-
16 #ifndef UNIT_TEST
-
17 #include <Arduino.h>
-
18 #endif
-
19 #include "IRremoteESP8266.h"
-
20 #include "IRsend.h"
-
21 #ifdef UNIT_TEST
-
22 #include "IRsend_test.h"
-
23 #endif
-
24 
- -
27  uint64_t raw;
-
28  struct {
-
29  // Byte 0
-
30  uint8_t :8;
-
31  // Byte 1
-
32  uint8_t Light :1;
-
33  uint8_t :2;
-
34  uint8_t Turbo :1;
-
35  uint8_t :0;
-
36  // Byte 2
-
37  uint8_t Command :4;
-
38  uint8_t :0;
-
39  // Byte 3
-
40  uint8_t Sleep :1;
-
41  uint8_t Power :1;
-
42  uint8_t Swing :2;
-
43  uint8_t AirFlow :1;
-
44  uint8_t Fan :2;
-
45  uint8_t :0;
-
46  // Byte 4
-
47  uint8_t Temp :4;
-
48  uint8_t :1;
-
49  uint8_t Mode :3;
-
50  uint8_t :0;
-
51  };
-
52 };
-
53 
-
54 // Constants
-
55 // Timing
-
56 const uint16_t kGoodweatherBitMark = 580;
-
57 const uint16_t kGoodweatherOneSpace = 580;
-
58 const uint16_t kGoodweatherZeroSpace = 1860;
-
59 const uint16_t kGoodweatherHdrMark = 6820;
-
60 const uint16_t kGoodweatherHdrSpace = 6820;
-
61 const uint8_t kGoodweatherExtraTolerance = 12; // +12% extra
-
62 
-
63 // Modes
-
64 const uint8_t kGoodweatherAuto = 0b000;
-
65 const uint8_t kGoodweatherCool = 0b001;
-
66 const uint8_t kGoodweatherDry = 0b010;
-
67 const uint8_t kGoodweatherFan = 0b011;
-
68 const uint8_t kGoodweatherHeat = 0b100;
-
69 // Swing
-
70 const uint8_t kGoodweatherSwingFast = 0b00;
-
71 const uint8_t kGoodweatherSwingSlow = 0b01;
-
72 const uint8_t kGoodweatherSwingOff = 0b10;
-
73 // Fan Control
-
74 const uint8_t kGoodweatherFanAuto = 0b00;
-
75 const uint8_t kGoodweatherFanHigh = 0b01;
-
76 const uint8_t kGoodweatherFanMed = 0b10;
-
77 const uint8_t kGoodweatherFanLow = 0b11;
-
78 // Temperature
-
79 const uint8_t kGoodweatherTempMin = 16; // Celsius
-
80 const uint8_t kGoodweatherTempMax = 31; // Celsius
-
81 // Commands
-
82 const uint8_t kGoodweatherCmdPower = 0x00;
-
83 const uint8_t kGoodweatherCmdMode = 0x01;
-
84 const uint8_t kGoodweatherCmdUpTemp = 0x02;
-
85 const uint8_t kGoodweatherCmdDownTemp = 0x03;
-
86 const uint8_t kGoodweatherCmdSwing = 0x04;
-
87 const uint8_t kGoodweatherCmdFan = 0x05;
-
88 const uint8_t kGoodweatherCmdTimer = 0x06;
-
89 const uint8_t kGoodweatherCmdAirFlow = 0x07;
-
90 const uint8_t kGoodweatherCmdHold = 0x08;
-
91 const uint8_t kGoodweatherCmdSleep = 0x09;
-
92 const uint8_t kGoodweatherCmdTurbo = 0x0A;
-
93 const uint8_t kGoodweatherCmdLight = 0x0B;
-
94 // PAD EOF
-
95 const uint64_t kGoodweatherStateInit = 0xD50000000000;
-
96 
-
97 
-
98 // Classes
- -
101  public:
-
102  explicit IRGoodweatherAc(const uint16_t pin, const bool inverted = false,
-
103  const bool use_modulation = true);
-
104  void stateReset(void);
-
105 #if SEND_GOODWEATHER
-
106  void send(const uint16_t repeat = kGoodweatherMinRepeat);
-
111  int8_t calibrate(void) { return _irsend.calibrate(); }
-
112 #endif // SEND_GOODWEATHER
-
113  void begin(void);
-
114  void on(void);
-
115  void off(void);
-
116  void setPower(const bool on);
-
117  bool getPower(void) const;
-
118  void setTemp(const uint8_t temp);
-
119  uint8_t getTemp(void) const;
-
120  void setFan(const uint8_t speed);
-
121  uint8_t getFan(void) const;
-
122  void setMode(const uint8_t mode);
-
123  uint8_t getMode(void) const;
-
124  void setSwing(const uint8_t speed);
-
125  uint8_t getSwing(void) const;
-
126  void setSleep(const bool toggle);
-
127  bool getSleep(void) const;
-
128  void setTurbo(const bool toggle);
-
129  bool getTurbo(void) const;
-
130  void setLight(const bool toggle);
-
131  bool getLight(void) const;
-
132  void setCommand(const uint8_t cmd);
-
133  uint8_t getCommand(void) const;
-
134  uint64_t getRaw(void);
-
135  void setRaw(const uint64_t state);
-
136  static uint8_t convertMode(const stdAc::opmode_t mode);
-
137  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
138  static uint8_t convertSwingV(const stdAc::swingv_t swingv);
-
139  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
140  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
141  stdAc::state_t toCommon(void) const;
-
142  String toString(void) const;
-
143 #ifndef UNIT_TEST
-
144 
-
145  private:
- -
147 #else // UNIT_TEST
-
148  IRsendTest _irsend;
-
150 #endif // UNIT_TEST
- -
153 };
-
154 #endif // IR_GOODWEATHER_H_
-
-
const uint8_t kGoodweatherCmdLight
Definition: ir_Goodweather.h:93
-
uint8_t Power
Definition: ir_Goodweather.h:41
-
const uint8_t kGoodweatherCmdDownTemp
Definition: ir_Goodweather.h:85
-
void off(void)
Change the power setting to Off.
Definition: ir_Goodweather.cpp:94
-
void on(void)
Change the power setting to On.
Definition: ir_Goodweather.cpp:91
-
const uint16_t kGoodweatherOneSpace
Definition: ir_Goodweather.h:57
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Goodweather.cpp:69
-
uint8_t Sleep
Definition: ir_Goodweather.h:40
-
const uint8_t kGoodweatherTempMin
Definition: ir_Goodweather.h:79
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Goodweather.h:146
-
const uint8_t kGoodweatherCmdPower
Definition: ir_Goodweather.h:82
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
const uint8_t kGoodweatherCmdAirFlow
Definition: ir_Goodweather.h:89
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Goodweather.cpp:143
-
Native representation of a Goodweather A/C message.
Definition: ir_Goodweather.h:26
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
bool getLight(void) const
Get the Light (LED) Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:179
-
void setTurbo(const bool toggle)
Set the Turbo Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:198
-
void setLight(const bool toggle)
Set the Light (LED) Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:172
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Goodweather.cpp:121
- -
const uint8_t kGoodweatherCmdSwing
Definition: ir_Goodweather.h:86
-
const uint8_t kGoodweatherFanMed
Definition: ir_Goodweather.h:76
-
static uint8_t convertSwingV(const stdAc::swingv_t swingv)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Goodweather.cpp:273
-
const uint8_t kGoodweatherCmdUpTemp
Definition: ir_Goodweather.h:84
-
const uint16_t kGoodweatherHdrSpace
Definition: ir_Goodweather.h:60
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Goodweather.h:111
-
uint8_t Turbo
Definition: ir_Goodweather.h:34
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kGoodweatherFanAuto
Definition: ir_Goodweather.h:74
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
IRGoodweatherAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Goodweather.cpp:64
-
const uint16_t kGoodweatherZeroSpace
Definition: ir_Goodweather.h:58
-
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Goodweather.cpp:88
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Goodweather.cpp:166
-
uint8_t Swing
Definition: ir_Goodweather.h:42
-
const uint8_t kGoodweatherAuto
Definition: ir_Goodweather.h:64
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void send(const uint16_t repeat=kGoodweatherMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Goodweather.cpp:77
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Goodweather.cpp:288
-
const uint8_t kGoodweatherExtraTolerance
Definition: ir_Goodweather.h:61
-
uint8_t getCommand(void) const
Get the Command type/button pressed from the current settings.
Definition: ir_Goodweather.cpp:239
-
const uint8_t kGoodweatherSwingSlow
Definition: ir_Goodweather.h:71
- -
const uint8_t kGoodweatherSwingOff
Definition: ir_Goodweather.h:72
-
const uint8_t kGoodweatherDry
Definition: ir_Goodweather.h:66
-
uint8_t getSwing(void) const
Get the Vertical Swing speed of the A/C.
Definition: ir_Goodweather.cpp:226
-
const uint8_t kGoodweatherSwingFast
Definition: ir_Goodweather.h:70
-
const uint8_t kGoodweatherCmdSleep
Definition: ir_Goodweather.h:91
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Goodweather.cpp:312
-
const uint8_t kGoodweatherCool
Definition: ir_Goodweather.h:65
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Goodweather.cpp:111
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Goodweather.cpp:72
-
const uint8_t kGoodweatherCmdFan
Definition: ir_Goodweather.h:87
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Goodweather.cpp:105
-
const uint8_t kGoodweatherCmdHold
Definition: ir_Goodweather.h:90
-
uint8_t Mode
Definition: ir_Goodweather.h:49
-
void setSwing(const uint8_t speed)
Set the Vertical Swing speed of the A/C.
Definition: ir_Goodweather.cpp:211
-
const uint8_t kGoodweatherFan
Definition: ir_Goodweather.h:67
-
const uint8_t kGoodweatherCmdTurbo
Definition: ir_Goodweather.h:92
-
void setCommand(const uint8_t cmd)
Set the remote Command type/button pressed.
Definition: ir_Goodweather.cpp:232
-
uint8_t Light
Definition: ir_Goodweather.h:32
-
uint8_t Command
Definition: ir_Goodweather.h:37
-
const uint64_t kGoodweatherStateInit
Definition: ir_Goodweather.h:95
-
const uint8_t kGoodweatherCmdTimer
Definition: ir_Goodweather.h:88
-
uint8_t Temp
Definition: ir_Goodweather.h:47
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Goodweather.cpp:149
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Goodweather.cpp:339
-
bool getTurbo(void) const
Get the Turbo Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:205
-
const uint8_t kGoodweatherTempMax
Definition: ir_Goodweather.h:80
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Goodweather.cpp:301
-
const uint8_t kGoodweatherFanLow
Definition: ir_Goodweather.h:77
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Goodweather.cpp:127
-
const uint8_t kGoodweatherHeat
Definition: ir_Goodweather.h:68
-
const uint16_t kGoodweatherBitMark
Definition: ir_Goodweather.h:56
-
bool getSleep(void) const
Get the Sleep Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:192
-
const uint8_t kGoodweatherFanHigh
Definition: ir_Goodweather.h:75
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Goodweather.cpp:259
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Goodweather.cpp:246
-
uint64_t raw
The state of the IR remote in IR code form.
Definition: ir_Goodweather.h:27
-
const uint16_t kGoodweatherHdrMark
Definition: ir_Goodweather.h:59
-
uint8_t AirFlow
Definition: ir_Goodweather.h:43
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Goodweather.cpp:98
-
void setSleep(const bool toggle)
Set the Sleep Toggle setting of the A/C.
Definition: ir_Goodweather.cpp:185
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
Class for handling detailed Goodweather A/C messages.
Definition: ir_Goodweather.h:100
-
GoodweatherProtocol _
Definition: ir_Goodweather.h:152
-
uint8_t Fan
Definition: ir_Goodweather.h:44
-
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Goodweather.cpp:84
-
const uint16_t kGoodweatherMinRepeat
Definition: IRremoteESP8266.h:985
-
const uint8_t kGoodweatherCmdMode
Definition: ir_Goodweather.h:83
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8cpp.html deleted file mode 100644 index 182deded3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8cpp.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Gree.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Gree.cpp File Reference
-
-
- -

Support for Gree A/C protocols. -More...

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

-Variables

const uint16_t kGreeHdrMark = 9000
 
const uint16_t kGreeHdrSpace = 4500
 See #684 & real example in unit tests. More...
 
const uint16_t kGreeBitMark = 620
 
const uint16_t kGreeOneSpace = 1600
 
const uint16_t kGreeZeroSpace = 540
 
const uint16_t kGreeMsgSpace = 19000
 
const uint8_t kGreeBlockFooter = 0b010
 
const uint8_t kGreeBlockFooterBits = 3
 
-

Detailed Description

-

Variable Documentation

- -

◆ kGreeBitMark

- -
-
- - - - -
const uint16_t kGreeBitMark = 620
-
- -
-
- -

◆ kGreeBlockFooter

- -
-
- - - - -
const uint8_t kGreeBlockFooter = 0b010
-
- -
-
- -

◆ kGreeBlockFooterBits

- -
-
- - - - -
const uint8_t kGreeBlockFooterBits = 3
-
- -
-
- -

◆ kGreeHdrMark

- -
-
- - - - -
const uint16_t kGreeHdrMark = 9000
-
- -
-
- -

◆ kGreeHdrSpace

- -
-
- - - - -
const uint16_t kGreeHdrSpace = 4500
-
- -

See #684 & real example in unit tests.

- -
-
- -

◆ kGreeMsgSpace

- -
-
- - - - -
const uint16_t kGreeMsgSpace = 19000
-
- -
-
- -

◆ kGreeOneSpace

- -
-
- - - - -
const uint16_t kGreeOneSpace = 1600
-
- -
-
- -

◆ kGreeZeroSpace

- -
-
- - - - -
const uint16_t kGreeZeroSpace = 540
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h.html deleted file mode 100644 index 8badefdce..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h.html +++ /dev/null @@ -1,553 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Gree.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Gree.h File Reference
-
-
- -

Support for Gree A/C protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  GreeProtocol
 Native representation of a Gree A/C message. More...
 
class  IRGreeAC
 Class for handling detailed Gree A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kGreeAuto = 0
 
const uint8_t kGreeCool = 1
 
const uint8_t kGreeDry = 2
 
const uint8_t kGreeFan = 3
 
const uint8_t kGreeHeat = 4
 
const uint8_t kGreeFanAuto = 0
 
const uint8_t kGreeFanMin = 1
 
const uint8_t kGreeFanMed = 2
 
const uint8_t kGreeFanMax = 3
 
const uint8_t kGreeMinTempC = 16
 
const uint8_t kGreeMaxTempC = 30
 
const uint8_t kGreeMinTempF = 61
 
const uint8_t kGreeMaxTempF = 86
 
const uint16_t kGreeTimerMax = 24 * 60
 
const uint8_t kGreeSwingLastPos = 0b0000
 
const uint8_t kGreeSwingAuto = 0b0001
 
const uint8_t kGreeSwingUp = 0b0010
 
const uint8_t kGreeSwingMiddleUp = 0b0011
 
const uint8_t kGreeSwingMiddle = 0b0100
 
const uint8_t kGreeSwingMiddleDown = 0b0101
 
const uint8_t kGreeSwingDown = 0b0110
 
const uint8_t kGreeSwingDownAuto = 0b0111
 
const uint8_t kGreeSwingMiddleAuto = 0b1001
 
const uint8_t kGreeSwingUpAuto = 0b1011
 
const uint8_t kGreeDisplayTempOff = 0b00
 
const uint8_t kGreeDisplayTempSet = 0b01
 
const uint8_t kGreeDisplayTempInside = 0b10
 
const uint8_t kGreeDisplayTempOutside = 0b11
 
-

Detailed Description

-

Variable Documentation

- -

◆ kGreeAuto

- -
-
- - - - -
const uint8_t kGreeAuto = 0
-
- -
-
- -

◆ kGreeCool

- -
-
- - - - -
const uint8_t kGreeCool = 1
-
- -
-
- -

◆ kGreeDisplayTempInside

- -
-
- - - - -
const uint8_t kGreeDisplayTempInside = 0b10
-
- -
-
- -

◆ kGreeDisplayTempOff

- -
-
- - - - -
const uint8_t kGreeDisplayTempOff = 0b00
-
- -
-
- -

◆ kGreeDisplayTempOutside

- -
-
- - - - -
const uint8_t kGreeDisplayTempOutside = 0b11
-
- -
-
- -

◆ kGreeDisplayTempSet

- -
-
- - - - -
const uint8_t kGreeDisplayTempSet = 0b01
-
- -
-
- -

◆ kGreeDry

- -
-
- - - - -
const uint8_t kGreeDry = 2
-
- -
-
- -

◆ kGreeFan

- -
-
- - - - -
const uint8_t kGreeFan = 3
-
- -
-
- -

◆ kGreeFanAuto

- -
-
- - - - -
const uint8_t kGreeFanAuto = 0
-
- -
-
- -

◆ kGreeFanMax

- -
-
- - - - -
const uint8_t kGreeFanMax = 3
-
- -
-
- -

◆ kGreeFanMed

- -
-
- - - - -
const uint8_t kGreeFanMed = 2
-
- -
-
- -

◆ kGreeFanMin

- -
-
- - - - -
const uint8_t kGreeFanMin = 1
-
- -
-
- -

◆ kGreeHeat

- -
-
- - - - -
const uint8_t kGreeHeat = 4
-
- -
-
- -

◆ kGreeMaxTempC

- -
-
- - - - -
const uint8_t kGreeMaxTempC = 30
-
- -
-
- -

◆ kGreeMaxTempF

- -
-
- - - - -
const uint8_t kGreeMaxTempF = 86
-
- -
-
- -

◆ kGreeMinTempC

- -
-
- - - - -
const uint8_t kGreeMinTempC = 16
-
- -
-
- -

◆ kGreeMinTempF

- -
-
- - - - -
const uint8_t kGreeMinTempF = 61
-
- -
-
- -

◆ kGreeSwingAuto

- -
-
- - - - -
const uint8_t kGreeSwingAuto = 0b0001
-
- -
-
- -

◆ kGreeSwingDown

- -
-
- - - - -
const uint8_t kGreeSwingDown = 0b0110
-
- -
-
- -

◆ kGreeSwingDownAuto

- -
-
- - - - -
const uint8_t kGreeSwingDownAuto = 0b0111
-
- -
-
- -

◆ kGreeSwingLastPos

- -
-
- - - - -
const uint8_t kGreeSwingLastPos = 0b0000
-
- -
-
- -

◆ kGreeSwingMiddle

- -
-
- - - - -
const uint8_t kGreeSwingMiddle = 0b0100
-
- -
-
- -

◆ kGreeSwingMiddleAuto

- -
-
- - - - -
const uint8_t kGreeSwingMiddleAuto = 0b1001
-
- -
-
- -

◆ kGreeSwingMiddleDown

- -
-
- - - - -
const uint8_t kGreeSwingMiddleDown = 0b0101
-
- -
-
- -

◆ kGreeSwingMiddleUp

- -
-
- - - - -
const uint8_t kGreeSwingMiddleUp = 0b0011
-
- -
-
- -

◆ kGreeSwingUp

- -
-
- - - - -
const uint8_t kGreeSwingUp = 0b0010
-
- -
-
- -

◆ kGreeSwingUpAuto

- -
-
- - - - -
const uint8_t kGreeSwingUpAuto = 0b1011
-
- -
-
- -

◆ kGreeTimerMax

- -
-
- - - - -
const uint16_t kGreeTimerMax = 24 * 60
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h_source.html deleted file mode 100644 index 2b32f0db6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Gree_8h_source.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Gree.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Gree.h
-
-
-Go to the documentation of this file.
1 // Copyright 2016 David Conran
-
2 
-
6 
-
7 // Supports:
-
8 // Brand: Ultimate, Model: Heat Pump
-
9 // Brand: EKOKAI, Model: A/C
-
10 // Brand: RusClimate, Model: EACS/I-09HAR_X/N3 A/C
-
11 // Brand: RusClimate, Model: YAW1F remote
-
12 // Brand: Green, Model: YBOFB remote
-
13 // Brand: Green, Model: YBOFB2 remote
-
14 // Brand: Gree, Model: YAA1FBF remote
-
15 // Brand: Gree, Model: YB1F2F remote
-
16 // Brand: Amana, Model: PBC093G00CC A/C
-
17 // Brand: Amana, Model: YX1FF remote
-
18 
-
19 #ifndef IR_GREE_H_
-
20 #define IR_GREE_H_
-
21 
-
22 #define __STDC_LIMIT_MACROS
-
23 #include <stdint.h>
-
24 #ifndef UNIT_TEST
-
25 #include <Arduino.h>
-
26 #endif
-
27 #include "IRremoteESP8266.h"
-
28 #include "IRsend.h"
-
29 #ifdef UNIT_TEST
-
30 #include "IRsend_test.h"
-
31 #endif
-
32 
- - -
36  struct {
-
37  // Byte 0
-
38  uint8_t Mode :3;
-
39  uint8_t Power :1;
-
40  uint8_t Fan :2;
-
41  uint8_t SwingAuto :1;
-
42  uint8_t Sleep :1;
-
43  // Byte 1
-
44  uint8_t Temp :4;
-
45  uint8_t TimerHalfHr :1;
-
46  uint8_t TimerTensHr :2;
-
47  uint8_t TimerEnabled:1;
-
48  // Byte 2
-
49  uint8_t TimerHours:4;
-
50  uint8_t Turbo :1;
-
51  uint8_t Light :1;
-
52  uint8_t ModelA :1; // model==YAW1F
-
53  uint8_t Xfan :1;
-
54  // Byte 3
-
55  uint8_t :2;
-
56  uint8_t TempExtraDegreeF:1;
-
57  uint8_t UseFahrenheit :1;
-
58  uint8_t unknown1 :4; // value=0b0101
-
59  // Byte 4
-
60  uint8_t Swing:4;
-
61  uint8_t :0;
-
62  // Byte 5
-
63  uint8_t DisplayTemp :2;
-
64  uint8_t IFeel :1;
-
65  uint8_t unknown2 :3; // value = 0b100
-
66  uint8_t WiFi :1;
-
67  uint8_t :0;
-
68  // Byte 6
-
69  uint8_t :8;
-
70  // Byte 7
-
71  uint8_t :4;
-
72  uint8_t Sum:4;
-
73  };
-
74 };
-
75 
-
76 // Constants
-
77 
-
78 const uint8_t kGreeAuto = 0;
-
79 const uint8_t kGreeCool = 1;
-
80 const uint8_t kGreeDry = 2;
-
81 const uint8_t kGreeFan = 3;
-
82 const uint8_t kGreeHeat = 4;
-
83 
-
84 const uint8_t kGreeFanAuto = 0;
-
85 const uint8_t kGreeFanMin = 1;
-
86 const uint8_t kGreeFanMed = 2;
-
87 const uint8_t kGreeFanMax = 3;
-
88 
-
89 const uint8_t kGreeMinTempC = 16; // Celsius
-
90 const uint8_t kGreeMaxTempC = 30; // Celsius
-
91 const uint8_t kGreeMinTempF = 61; // Fahrenheit
-
92 const uint8_t kGreeMaxTempF = 86; // Fahrenheit
-
93 const uint16_t kGreeTimerMax = 24 * 60;
-
94 
-
95 const uint8_t kGreeSwingLastPos = 0b0000;
-
96 const uint8_t kGreeSwingAuto = 0b0001;
-
97 const uint8_t kGreeSwingUp = 0b0010;
-
98 const uint8_t kGreeSwingMiddleUp = 0b0011;
-
99 const uint8_t kGreeSwingMiddle = 0b0100;
-
100 const uint8_t kGreeSwingMiddleDown = 0b0101;
-
101 const uint8_t kGreeSwingDown = 0b0110;
-
102 const uint8_t kGreeSwingDownAuto = 0b0111;
-
103 const uint8_t kGreeSwingMiddleAuto = 0b1001;
-
104 const uint8_t kGreeSwingUpAuto = 0b1011;
-
105 
-
106 const uint8_t kGreeDisplayTempOff = 0b00; // 0
-
107 const uint8_t kGreeDisplayTempSet = 0b01; // 1
-
108 const uint8_t kGreeDisplayTempInside = 0b10; // 2
-
109 const uint8_t kGreeDisplayTempOutside = 0b11; // 3
-
110 
-
111 // Legacy defines.
-
112 #define GREE_AUTO kGreeAuto
-
113 #define GREE_COOL kGreeCool
-
114 #define GREE_DRY kGreeDry
-
115 #define GREE_FAN kGreeFan
-
116 #define GREE_HEAT kGreeHeat
-
117 #define GREE_MIN_TEMP kGreeMinTempC
-
118 #define GREE_MAX_TEMP kGreeMaxTempC
-
119 #define GREE_FAN_MAX kGreeFanMax
-
120 #define GREE_SWING_LAST_POS kGreeSwingLastPos
-
121 #define GREE_SWING_AUTO kGreeSwingAuto
-
122 #define GREE_SWING_UP kGreeSwingUp
-
123 #define GREE_SWING_MIDDLE_UP kGreeSwingMiddleUp
-
124 #define GREE_SWING_MIDDLE kGreeSwingMiddle
-
125 #define GREE_SWING_MIDDLE_DOWN kGreeSwingMiddleDown
-
126 #define GREE_SWING_DOWN kGreeSwingDown
-
127 #define GREE_SWING_DOWN_AUTO kGreeSwingDownAuto
-
128 #define GREE_SWING_MIDDLE_AUTO kGreeSwingMiddleAuto
-
129 #define GREE_SWING_UP_AUTO kGreeSwingUpAuto
-
130 
-
131 // Classes
-
133 class IRGreeAC {
-
134  public:
-
135  explicit IRGreeAC(
-
136  const uint16_t pin,
- -
138  const bool inverted = false, const bool use_modulation = true);
-
139  void stateReset(void);
-
140 #if SEND_GREE
-
141  void send(const uint16_t repeat = kGreeDefaultRepeat);
-
146  int8_t calibrate(void) { return _irsend.calibrate(); }
-
147 #endif // SEND_GREE
-
148  void begin(void);
-
149  void on(void);
-
150  void off(void);
-
151  void setModel(const gree_ac_remote_model_t model);
-
152  gree_ac_remote_model_t getModel(void) const;
-
153  void setPower(const bool on);
-
154  bool getPower(void) const;
-
155  void setTemp(const uint8_t temp, const bool fahrenheit = false);
-
156  uint8_t getTemp(void) const;
-
157  void setUseFahrenheit(const bool on);
-
158  bool getUseFahrenheit(void) const;
-
159  void setFan(const uint8_t speed);
-
160  uint8_t getFan(void) const;
-
161  void setMode(const uint8_t new_mode);
-
162  uint8_t getMode(void) const;
-
163  void setLight(const bool on);
-
164  bool getLight(void) const;
-
165  void setXFan(const bool on);
-
166  bool getXFan(void) const;
-
167  void setSleep(const bool on);
-
168  bool getSleep(void) const;
-
169  void setTurbo(const bool on);
-
170  bool getTurbo(void) const;
-
171  void setIFeel(const bool on);
-
172  bool getIFeel(void) const;
-
173  void setWiFi(const bool on);
-
174  bool getWiFi(void) const;
-
175  void setSwingVertical(const bool automatic, const uint8_t position);
-
176  bool getSwingVerticalAuto(void) const;
-
177  uint8_t getSwingVerticalPosition(void) const;
-
178  uint16_t getTimer(void) const;
-
179  void setTimer(const uint16_t minutes);
-
180  void setDisplayTempSource(const uint8_t mode);
-
181  uint8_t getDisplayTempSource(void) const;
-
182  static uint8_t convertMode(const stdAc::opmode_t mode);
-
183  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
184  static uint8_t convertSwingV(const stdAc::swingv_t swingv);
-
185  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
186  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
187  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
188  stdAc::state_t toCommon(void);
-
189  uint8_t* getRaw(void);
-
190  void setRaw(const uint8_t new_code[]);
-
191  static bool validChecksum(const uint8_t state[],
-
192  const uint16_t length = kGreeStateLength);
-
193  String toString(void);
-
194 #ifndef UNIT_TEST
-
195 
-
196  private:
- -
198 #else // UNIT_TEST
-
199  IRsendTest _irsend;
-
201 #endif // UNIT_TEST
- - -
205  void checksum(const uint16_t length = kGreeStateLength);
-
206  void fixup(void);
-
207  void setTimerEnabled(const bool on);
-
208  bool getTimerEnabled(void) const;
-
209 };
-
210 
-
211 #endif // IR_GREE_H_
-
-
void setSwingVertical(const bool automatic, const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Gree.cpp:386
-
uint8_t ModelA
Definition: ir_Gree.h:52
-
uint8_t Temp
Definition: ir_Gree.h:44
-
uint8_t Mode
Definition: ir_Gree.h:38
-
GreeProtocol _
Definition: ir_Gree.h:203
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Gree.cpp:307
-
bool getWiFi(void) const
Get the Wifi (enabled) setting of the A/C.
Definition: ir_Gree.cpp:343
-
const uint16_t kGreeStateLength
Definition: IRremoteESP8266.h:986
-
const uint8_t kGreeSwingUp
Definition: ir_Gree.h:97
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kGreeStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Gree.cpp:176
-
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Gree.cpp:595
-
void off(void)
Change the power setting to Off.
Definition: ir_Gree.cpp:200
-
const uint8_t kGreeFan
Definition: ir_Gree.h:81
-
void setXFan(const bool on)
Set the XFan (Mould) setting of the A/C.
Definition: ir_Gree.cpp:349
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Gree.cpp:528
-
bool getIFeel(void) const
Get the IFeel setting of the A/C.
Definition: ir_Gree.cpp:331
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
bool getLight(void) const
Get the Light (LED) setting of the A/C.
Definition: ir_Gree.cpp:319
-
uint8_t SwingAuto
Definition: ir_Gree.h:41
-
uint8_t TempExtraDegreeF
Definition: ir_Gree.h:56
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Gree.cpp:487
-
const uint8_t kGreeDry
Definition: ir_Gree.h:80
-
uint8_t unknown1
Definition: ir_Gree.h:58
-
const uint8_t kGreeFanMax
Definition: ir_Gree.h:87
-
const uint8_t kGreeMaxTempF
Definition: ir_Gree.h:92
-
uint16_t getTimer(void) const
Get the timer time value from the A/C.
Definition: ir_Gree.cpp:440
-
void setMode(const uint8_t new_mode)
Set the operating mode of the A/C.
Definition: ir_Gree.cpp:289
-
uint8_t Fan
Definition: ir_Gree.h:40
-
stdAc::state_t toCommon(void)
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Gree.cpp:566
-
uint8_t WiFi
Definition: ir_Gree.h:66
-
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:134
-
void send(const uint16_t repeat=kGreeDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Gree.cpp:140
-
const uint8_t kGreeSwingUpAuto
Definition: ir_Gree.h:104
-
const uint8_t kGreeDisplayTempOutside
Definition: ir_Gree.h:109
-
void fixup(void)
Fix up the internal state so it is correct.
Definition: ir_Gree.cpp:129
-
uint8_t remote_state[kGreeStateLength]
The state in native IR code form.
Definition: ir_Gree.h:35
-
const uint8_t kGreeSwingDownAuto
Definition: ir_Gree.h:102
- -
void setPower(const bool on)
Change the power setting.
Definition: ir_Gree.cpp:205
-
void setTimerEnabled(const bool on)
Set the timer enable setting of the A/C.
Definition: ir_Gree.cpp:428
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Gree.cpp:147
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t Turbo
Definition: ir_Gree.h:50
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t Swing
Definition: ir_Gree.h:60
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kGreeDisplayTempSet
Definition: ir_Gree.h:107
-
uint8_t TimerHours
Definition: ir_Gree.h:49
-
uint8_t TimerHalfHr
Definition: ir_Gree.h:45
-
const uint8_t kGreeSwingMiddleDown
Definition: ir_Gree.h:100
-
IRGreeAC(const uint16_t pin, const gree_ac_remote_model_t model=gree_ac_remote_model_t::YAW1F, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Gree.cpp:110
-
uint8_t Sum
Definition: ir_Gree.h:72
-
const uint8_t kGreeFanMed
Definition: ir_Gree.h:86
- -
const uint8_t kGreeSwingMiddleAuto
Definition: ir_Gree.h:103
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Gree.cpp:500
-
const uint8_t kGreeHeat
Definition: ir_Gree.h:82
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Gree.cpp:361
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Gree.cpp:135
-
const uint16_t kGreeTimerMax
Definition: ir_Gree.h:93
-
@ YAW1F
Definition: IRsend.h:135
-
const uint8_t kGreeMaxTempC
Definition: ir_Gree.h:90
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Gree.h:146
-
uint8_t Sleep
Definition: ir_Gree.h:42
-
const uint8_t kGreeMinTempF
Definition: ir_Gree.h:91
-
const uint8_t kGreeDisplayTempOff
Definition: ir_Gree.h:106
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Gree.cpp:274
-
void setUseFahrenheit(const bool on)
Set the default temperature units to use.
Definition: ir_Gree.cpp:222
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Gree.cpp:541
-
uint8_t unknown2
Definition: ir_Gree.h:65
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Gree.cpp:379
-
uint8_t TimerTensHr
Definition: ir_Gree.h:46
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Gree.cpp:214
-
bool getXFan(void) const
Get the XFan (Mould) setting of the A/C.
Definition: ir_Gree.cpp:355
-
void checksum(const uint16_t length=kGreeStateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Gree.cpp:167
-
uint8_t Xfan
Definition: ir_Gree.h:53
-
uint8_t Light
Definition: ir_Gree.h:51
-
void setTimer(const uint16_t minutes)
Set the A/C's timer to turn off in X many minutes.
Definition: ir_Gree.cpp:450
-
void setModel(const gree_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Gree.cpp:184
-
gree_ac_remote_model_t getModel(void) const
Get/Detect the model of the A/C.
Definition: ir_Gree.cpp:194
-
const uint8_t kGreeAuto
Definition: ir_Gree.h:78
-
void setWiFi(const bool on)
Set the Wifi (enabled) setting of the A/C.
Definition: ir_Gree.cpp:337
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Gree.cpp:283
-
static uint8_t convertSwingV(const stdAc::swingv_t swingv)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Gree.cpp:514
-
bool getUseFahrenheit(void) const
Get the default temperature units in use.
Definition: ir_Gree.cpp:228
-
void setIFeel(const bool on)
Set the IFeel setting of the A/C.
Definition: ir_Gree.cpp:325
-
const uint8_t kGreeSwingMiddleUp
Definition: ir_Gree.h:98
-
uint8_t getTemp(void) const
Get the set temperature.
Definition: ir_Gree.cpp:261
-
uint8_t IFeel
Definition: ir_Gree.h:64
-
const uint8_t kGreeFanMin
Definition: ir_Gree.h:85
-
const uint8_t kGreeCool
Definition: ir_Gree.h:79
-
uint8_t getSwingVerticalPosition(void) const
Get the Vertical Swing position setting of the A/C.
Definition: ir_Gree.cpp:422
-
const uint8_t kGreeSwingMiddle
Definition: ir_Gree.h:99
-
Native representation of a Gree A/C message.
Definition: ir_Gree.h:34
-
const uint8_t kGreeSwingLastPos
Definition: ir_Gree.h:95
-
void setTemp(const uint8_t temp, const bool fahrenheit=false)
Set the temp. in degrees.
Definition: ir_Gree.cpp:238
-
bool getTimerEnabled(void) const
Get the timer enabled setting of the A/C.
Definition: ir_Gree.cpp:434
-
gree_ac_remote_model_t _model
Definition: ir_Gree.h:204
-
bool getSwingVerticalAuto(void) const
Get the Vertical Swing Automatic mode setting of the A/C.
Definition: ir_Gree.cpp:416
-
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Gree.cpp:373
-
const uint8_t kGreeSwingDown
Definition: ir_Gree.h:101
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Gree.cpp:553
-
const uint8_t kGreeFanAuto
Definition: ir_Gree.h:84
-
uint8_t Power
Definition: ir_Gree.h:39
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Gree.cpp:367
-
uint8_t TimerEnabled
Definition: ir_Gree.h:47
-
const uint8_t kGreeMinTempC
Definition: ir_Gree.h:89
-
uint8_t getDisplayTempSource(void) const
Get the temperature display mode. i.e. Internal, External temperature sensing.
Definition: ir_Gree.cpp:480
-
void setDisplayTempSource(const uint8_t mode)
Set temperature display mode. i.e. Internal, External temperature sensing.
Definition: ir_Gree.cpp:473
-
uint8_t UseFahrenheit
Definition: ir_Gree.h:57
-
const uint8_t kGreeSwingAuto
Definition: ir_Gree.h:96
-
Class for handling detailed Gree A/C messages.
Definition: ir_Gree.h:133
-
uint8_t DisplayTemp
Definition: ir_Gree.h:63
-
const uint8_t kGreeDisplayTempInside
Definition: ir_Gree.h:108
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Gree.cpp:118
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Gree.cpp:154
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Gree.h:197
-
void on(void)
Change the power setting to On.
Definition: ir_Gree.cpp:197
-
void setLight(const bool on)
Set the Light (LED) setting of the A/C.
Definition: ir_Gree.cpp:313
-
const uint16_t kGreeDefaultRepeat
Definition: IRremoteESP8266.h:988
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8cpp.html deleted file mode 100644 index dd738e178..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8cpp.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Haier.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Haier.cpp File Reference
-
-
- -

Support for Haier A/C protocols. The specifics of reverse engineering the protocols details: -More...

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

-Variables

const uint16_t kHaierAcHdr = 3000
 
const uint16_t kHaierAcHdrGap = 4300
 
const uint16_t kHaierAcBitMark = 520
 
const uint16_t kHaierAcOneSpace = 1650
 
const uint16_t kHaierAcZeroSpace = 650
 
const uint32_t kHaierAcMinGap = 150000
 
-

Detailed Description

-

Variable Documentation

- -

◆ kHaierAcBitMark

- -
-
- - - - -
const uint16_t kHaierAcBitMark = 520
-
- -
-
- -

◆ kHaierAcHdr

- -
-
- - - - -
const uint16_t kHaierAcHdr = 3000
-
- -
-
- -

◆ kHaierAcHdrGap

- -
-
- - - - -
const uint16_t kHaierAcHdrGap = 4300
-
- -
-
- -

◆ kHaierAcMinGap

- -
-
- - - - -
const uint32_t kHaierAcMinGap = 150000
-
- -
-
- -

◆ kHaierAcOneSpace

- -
-
- - - - -
const uint16_t kHaierAcOneSpace = 1650
-
- -
-
- -

◆ kHaierAcZeroSpace

- -
-
- - - - -
const uint16_t kHaierAcZeroSpace = 650
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h.html deleted file mode 100644 index 7044444d3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h.html +++ /dev/null @@ -1,1049 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Haier.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Haier.h File Reference
-
-
- -

Support for Haier A/C protocols. The specifics of reverse engineering the protocols details: -More...

- -

Go to the source code of this file.

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

-Classes

union  HaierProtocol
 Native representation of a Haier HSU07-HEA03 A/C message. More...
 
union  HaierYRW02Protocol
 Native representation of a Haier YRW02 A/C message. More...
 
class  IRHaierAC
 Class for handling detailed Haier A/C messages. More...
 
class  IRHaierACYRW02
 Class for handling detailed Haier ACYRW02 A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kHaierAcPrefix = 0b10100101
 
const uint8_t kHaierAcMinTemp = 16
 
const uint8_t kHaierAcDefTemp = 25
 
const uint8_t kHaierAcMaxTemp = 30
 
const uint8_t kHaierAcCmdOff = 0b0000
 
const uint8_t kHaierAcCmdOn = 0b0001
 
const uint8_t kHaierAcCmdMode = 0b0010
 
const uint8_t kHaierAcCmdFan = 0b0011
 
const uint8_t kHaierAcCmdTempUp = 0b0110
 
const uint8_t kHaierAcCmdTempDown = 0b0111
 
const uint8_t kHaierAcCmdSleep = 0b1000
 
const uint8_t kHaierAcCmdTimerSet = 0b1001
 
const uint8_t kHaierAcCmdTimerCancel = 0b1010
 
const uint8_t kHaierAcCmdHealth = 0b1100
 
const uint8_t kHaierAcCmdSwing = 0b1101
 
const uint8_t kHaierAcSwingOff = 0b00
 
const uint8_t kHaierAcSwingUp = 0b01
 
const uint8_t kHaierAcSwingDown = 0b10
 
const uint8_t kHaierAcSwingChg = 0b11
 
const uint8_t kHaierAcAuto = 0
 
const uint8_t kHaierAcCool = 1
 
const uint8_t kHaierAcDry = 2
 
const uint8_t kHaierAcHeat = 3
 
const uint8_t kHaierAcFan = 4
 
const uint8_t kHaierAcFanAuto = 0
 
const uint8_t kHaierAcFanLow = 1
 
const uint8_t kHaierAcFanMed = 2
 
const uint8_t kHaierAcFanHigh = 3
 
const uint16_t kHaierAcMaxTime = (23 * 60) + 59
 
const uint8_t kHaierAcSleepBit = 0b01000000
 
const uint8_t kHaierAcYrw02Prefix = 0xA6
 
const uint8_t kHaierAcYrw02SwingOff = 0x0
 
const uint8_t kHaierAcYrw02SwingTop = 0x1
 
const uint8_t kHaierAcYrw02SwingMiddle = 0x2
 
const uint8_t kHaierAcYrw02SwingBottom = 0x3
 
const uint8_t kHaierAcYrw02SwingDown = 0xA
 
const uint8_t kHaierAcYrw02SwingAuto = 0xC
 
const uint8_t kHaierAcYrw02FanHigh = 0b001
 
const uint8_t kHaierAcYrw02FanMed = 0b010
 
const uint8_t kHaierAcYrw02FanLow = 0b011
 
const uint8_t kHaierAcYrw02FanAuto = 0b101
 
const uint8_t kHaierAcYrw02TurboOff = 0x0
 
const uint8_t kHaierAcYrw02TurboHigh = 0x1
 
const uint8_t kHaierAcYrw02TurboLow = 0x2
 
const uint8_t kHaierAcYrw02Auto = 0b000
 
const uint8_t kHaierAcYrw02Cool = 0b001
 
const uint8_t kHaierAcYrw02Dry = 0b010
 
const uint8_t kHaierAcYrw02Heat = 0b100
 
const uint8_t kHaierAcYrw02Fan = 0b110
 
const uint8_t kHaierAcYrw02ButtonTempUp = 0x0
 
const uint8_t kHaierAcYrw02ButtonTempDown = 0x1
 
const uint8_t kHaierAcYrw02ButtonSwing = 0x2
 
const uint8_t kHaierAcYrw02ButtonFan = 0x4
 
const uint8_t kHaierAcYrw02ButtonPower = 0x5
 
const uint8_t kHaierAcYrw02ButtonMode = 0x6
 
const uint8_t kHaierAcYrw02ButtonHealth = 0x7
 
const uint8_t kHaierAcYrw02ButtonTurbo = 0x8
 
const uint8_t kHaierAcYrw02ButtonSleep = 0xB
 
-

Detailed Description

-

Variable Documentation

- -

◆ kHaierAcAuto

- -
-
- - - - -
const uint8_t kHaierAcAuto = 0
-
- -
-
- -

◆ kHaierAcCmdFan

- -
-
- - - - -
const uint8_t kHaierAcCmdFan = 0b0011
-
- -
-
- -

◆ kHaierAcCmdHealth

- -
-
- - - - -
const uint8_t kHaierAcCmdHealth = 0b1100
-
- -
-
- -

◆ kHaierAcCmdMode

- -
-
- - - - -
const uint8_t kHaierAcCmdMode = 0b0010
-
- -
-
- -

◆ kHaierAcCmdOff

- -
-
- - - - -
const uint8_t kHaierAcCmdOff = 0b0000
-
- -
-
- -

◆ kHaierAcCmdOn

- -
-
- - - - -
const uint8_t kHaierAcCmdOn = 0b0001
-
- -
-
- -

◆ kHaierAcCmdSleep

- -
-
- - - - -
const uint8_t kHaierAcCmdSleep = 0b1000
-
- -
-
- -

◆ kHaierAcCmdSwing

- -
-
- - - - -
const uint8_t kHaierAcCmdSwing = 0b1101
-
- -
-
- -

◆ kHaierAcCmdTempDown

- -
-
- - - - -
const uint8_t kHaierAcCmdTempDown = 0b0111
-
- -
-
- -

◆ kHaierAcCmdTempUp

- -
-
- - - - -
const uint8_t kHaierAcCmdTempUp = 0b0110
-
- -
-
- -

◆ kHaierAcCmdTimerCancel

- -
-
- - - - -
const uint8_t kHaierAcCmdTimerCancel = 0b1010
-
- -
-
- -

◆ kHaierAcCmdTimerSet

- -
-
- - - - -
const uint8_t kHaierAcCmdTimerSet = 0b1001
-
- -
-
- -

◆ kHaierAcCool

- -
-
- - - - -
const uint8_t kHaierAcCool = 1
-
- -
-
- -

◆ kHaierAcDefTemp

- -
-
- - - - -
const uint8_t kHaierAcDefTemp = 25
-
- -
-
- -

◆ kHaierAcDry

- -
-
- - - - -
const uint8_t kHaierAcDry = 2
-
- -
-
- -

◆ kHaierAcFan

- -
-
- - - - -
const uint8_t kHaierAcFan = 4
-
- -
-
- -

◆ kHaierAcFanAuto

- -
-
- - - - -
const uint8_t kHaierAcFanAuto = 0
-
- -
-
- -

◆ kHaierAcFanHigh

- -
-
- - - - -
const uint8_t kHaierAcFanHigh = 3
-
- -
-
- -

◆ kHaierAcFanLow

- -
-
- - - - -
const uint8_t kHaierAcFanLow = 1
-
- -
-
- -

◆ kHaierAcFanMed

- -
-
- - - - -
const uint8_t kHaierAcFanMed = 2
-
- -
-
- -

◆ kHaierAcHeat

- -
-
- - - - -
const uint8_t kHaierAcHeat = 3
-
- -
-
- -

◆ kHaierAcMaxTemp

- -
-
- - - - -
const uint8_t kHaierAcMaxTemp = 30
-
- -
-
- -

◆ kHaierAcMaxTime

- -
-
- - - - -
const uint16_t kHaierAcMaxTime = (23 * 60) + 59
-
- -
-
- -

◆ kHaierAcMinTemp

- -
-
- - - - -
const uint8_t kHaierAcMinTemp = 16
-
- -
-
- -

◆ kHaierAcPrefix

- -
-
- - - - -
const uint8_t kHaierAcPrefix = 0b10100101
-
- -
-
- -

◆ kHaierAcSleepBit

- -
-
- - - - -
const uint8_t kHaierAcSleepBit = 0b01000000
-
- -
-
- -

◆ kHaierAcSwingChg

- -
-
- - - - -
const uint8_t kHaierAcSwingChg = 0b11
-
- -
-
- -

◆ kHaierAcSwingDown

- -
-
- - - - -
const uint8_t kHaierAcSwingDown = 0b10
-
- -
-
- -

◆ kHaierAcSwingOff

- -
-
- - - - -
const uint8_t kHaierAcSwingOff = 0b00
-
- -
-
- -

◆ kHaierAcSwingUp

- -
-
- - - - -
const uint8_t kHaierAcSwingUp = 0b01
-
- -
-
- -

◆ kHaierAcYrw02Auto

- -
-
- - - - -
const uint8_t kHaierAcYrw02Auto = 0b000
-
- -
-
- -

◆ kHaierAcYrw02ButtonFan

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonFan = 0x4
-
- -
-
- -

◆ kHaierAcYrw02ButtonHealth

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonHealth = 0x7
-
- -
-
- -

◆ kHaierAcYrw02ButtonMode

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonMode = 0x6
-
- -
-
- -

◆ kHaierAcYrw02ButtonPower

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonPower = 0x5
-
- -
-
- -

◆ kHaierAcYrw02ButtonSleep

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonSleep = 0xB
-
- -
-
- -

◆ kHaierAcYrw02ButtonSwing

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonSwing = 0x2
-
- -
-
- -

◆ kHaierAcYrw02ButtonTempDown

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonTempDown = 0x1
-
- -
-
- -

◆ kHaierAcYrw02ButtonTempUp

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonTempUp = 0x0
-
- -
-
- -

◆ kHaierAcYrw02ButtonTurbo

- -
-
- - - - -
const uint8_t kHaierAcYrw02ButtonTurbo = 0x8
-
- -
-
- -

◆ kHaierAcYrw02Cool

- -
-
- - - - -
const uint8_t kHaierAcYrw02Cool = 0b001
-
- -
-
- -

◆ kHaierAcYrw02Dry

- -
-
- - - - -
const uint8_t kHaierAcYrw02Dry = 0b010
-
- -
-
- -

◆ kHaierAcYrw02Fan

- -
-
- - - - -
const uint8_t kHaierAcYrw02Fan = 0b110
-
- -
-
- -

◆ kHaierAcYrw02FanAuto

- -
-
- - - - -
const uint8_t kHaierAcYrw02FanAuto = 0b101
-
- -
-
- -

◆ kHaierAcYrw02FanHigh

- -
-
- - - - -
const uint8_t kHaierAcYrw02FanHigh = 0b001
-
- -
-
- -

◆ kHaierAcYrw02FanLow

- -
-
- - - - -
const uint8_t kHaierAcYrw02FanLow = 0b011
-
- -
-
- -

◆ kHaierAcYrw02FanMed

- -
-
- - - - -
const uint8_t kHaierAcYrw02FanMed = 0b010
-
- -
-
- -

◆ kHaierAcYrw02Heat

- -
-
- - - - -
const uint8_t kHaierAcYrw02Heat = 0b100
-
- -
-
- -

◆ kHaierAcYrw02Prefix

- -
-
- - - - -
const uint8_t kHaierAcYrw02Prefix = 0xA6
-
- -
-
- -

◆ kHaierAcYrw02SwingAuto

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingAuto = 0xC
-
- -
-
- -

◆ kHaierAcYrw02SwingBottom

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingBottom = 0x3
-
- -
-
- -

◆ kHaierAcYrw02SwingDown

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingDown = 0xA
-
- -
-
- -

◆ kHaierAcYrw02SwingMiddle

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingMiddle = 0x2
-
- -
-
- -

◆ kHaierAcYrw02SwingOff

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingOff = 0x0
-
- -
-
- -

◆ kHaierAcYrw02SwingTop

- -
-
- - - - -
const uint8_t kHaierAcYrw02SwingTop = 0x1
-
- -
-
- -

◆ kHaierAcYrw02TurboHigh

- -
-
- - - - -
const uint8_t kHaierAcYrw02TurboHigh = 0x1
-
- -
-
- -

◆ kHaierAcYrw02TurboLow

- -
-
- - - - -
const uint8_t kHaierAcYrw02TurboLow = 0x2
-
- -
-
- -

◆ kHaierAcYrw02TurboOff

- -
-
- - - - -
const uint8_t kHaierAcYrw02TurboOff = 0x0
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h_source.html deleted file mode 100644 index 0b2d12b62..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Haier_8h_source.html +++ /dev/null @@ -1,620 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Haier.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Haier.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 crankyoldgit
-
11 
-
12 // Supports:
-
13 // Brand: Haier, Model: HSU07-HEA03 remote (HAIER_AC)
-
14 // Brand: Haier, Model: YR-W02 remote (HAIER_AC_YRW02)
-
15 // Brand: Haier, Model: HSU-09HMC203 A/C (HAIER_AC_YRW02)
-
16 
-
17 #ifndef IR_HAIER_H_
-
18 #define IR_HAIER_H_
-
19 
-
20 #ifndef UNIT_TEST
-
21 #include <Arduino.h>
-
22 #endif
-
23 #include "IRremoteESP8266.h"
-
24 #include "IRsend.h"
-
25 #ifdef UNIT_TEST
-
26 #include "IRsend_test.h"
-
27 #endif
-
28 
- - -
33  struct {
-
34  // Byte 0
-
35  uint8_t Prefix;
-
36  // Byte 1
-
37  uint8_t Command:4;
-
38  uint8_t Temp :4;
-
39  // Byte 2
-
40  uint8_t CurrHours:5;
-
41  uint8_t unknown :1; // value=1
-
42  uint8_t Swing :2;
-
43  // Byte 3
-
44  uint8_t CurrMins:6;
-
45  uint8_t OffTimer:1;
-
46  uint8_t OnTimer :1;
-
47  // Byte 4
-
48  uint8_t OffHours:5;
-
49  uint8_t Health :1;
-
50  uint8_t :0;
-
51  // Byte 5
-
52  uint8_t OffMins:6;
-
53  uint8_t Fan :2;
-
54  // Byte 6
-
55  uint8_t OnHours:5;
-
56  uint8_t Mode :3;
-
57  // Byte 7
-
58  uint8_t OnMins:6;
-
59  uint8_t Sleep :1;
-
60  uint8_t :0;
-
61  // Byte 8
-
62  uint8_t Sum;
-
63  };
-
64 };
-
65 
-
66 // Constants
-
67 
-
68 const uint8_t kHaierAcPrefix = 0b10100101;
-
69 
-
70 const uint8_t kHaierAcMinTemp = 16;
-
71 const uint8_t kHaierAcDefTemp = 25;
-
72 const uint8_t kHaierAcMaxTemp = 30;
-
73 const uint8_t kHaierAcCmdOff = 0b0000;
-
74 const uint8_t kHaierAcCmdOn = 0b0001;
-
75 const uint8_t kHaierAcCmdMode = 0b0010;
-
76 const uint8_t kHaierAcCmdFan = 0b0011;
-
77 const uint8_t kHaierAcCmdTempUp = 0b0110;
-
78 const uint8_t kHaierAcCmdTempDown = 0b0111;
-
79 const uint8_t kHaierAcCmdSleep = 0b1000;
-
80 const uint8_t kHaierAcCmdTimerSet = 0b1001;
-
81 const uint8_t kHaierAcCmdTimerCancel = 0b1010;
-
82 const uint8_t kHaierAcCmdHealth = 0b1100;
-
83 const uint8_t kHaierAcCmdSwing = 0b1101;
-
84 
-
85 const uint8_t kHaierAcSwingOff = 0b00;
-
86 const uint8_t kHaierAcSwingUp = 0b01;
-
87 const uint8_t kHaierAcSwingDown = 0b10;
-
88 const uint8_t kHaierAcSwingChg = 0b11;
-
89 
-
90 const uint8_t kHaierAcAuto = 0;
-
91 const uint8_t kHaierAcCool = 1;
-
92 const uint8_t kHaierAcDry = 2;
-
93 const uint8_t kHaierAcHeat = 3;
-
94 const uint8_t kHaierAcFan = 4;
-
95 
-
96 const uint8_t kHaierAcFanAuto = 0;
-
97 const uint8_t kHaierAcFanLow = 1;
-
98 const uint8_t kHaierAcFanMed = 2;
-
99 const uint8_t kHaierAcFanHigh = 3;
-
100 
-
101 const uint16_t kHaierAcMaxTime = (23 * 60) + 59;
-
102 
-
103 const uint8_t kHaierAcSleepBit = 0b01000000;
-
104 
-
105 // Legacy Haier AC defines.
-
106 #define HAIER_AC_MIN_TEMP kHaierAcMinTemp
-
107 #define HAIER_AC_DEF_TEMP kHaierAcDefTemp
-
108 #define HAIER_AC_MAX_TEMP kHaierAcMaxTemp
-
109 #define HAIER_AC_CMD_OFF kHaierAcCmdOff
-
110 #define HAIER_AC_CMD_ON kHaierAcCmdOn
-
111 #define HAIER_AC_CMD_MODE kHaierAcCmdMode
-
112 #define HAIER_AC_CMD_FAN kHaierAcCmdFan
-
113 #define HAIER_AC_CMD_TEMP_UP kHaierAcCmdTempUp
-
114 #define HAIER_AC_CMD_TEMP_DOWN kHaierAcCmdTempDown
-
115 #define HAIER_AC_CMD_SLEEP kHaierAcCmdSleep
-
116 #define HAIER_AC_CMD_TIMER_SET kHaierAcCmdTimerSet
-
117 #define HAIER_AC_CMD_TIMER_CANCEL kHaierAcCmdTimerCancel
-
118 #define HAIER_AC_CMD_HEALTH kHaierAcCmdHealth
-
119 #define HAIER_AC_CMD_SWING kHaierAcCmdSwing
-
120 #define HAIER_AC_SWING_OFF kHaierAcSwingOff
-
121 #define HAIER_AC_SWING_UP kHaierAcSwingUp
-
122 #define HAIER_AC_SWING_DOWN kHaierAcSwingDown
-
123 #define HAIER_AC_SWING_CHG kHaierAcSwingChg
-
124 #define HAIER_AC_AUTO kHaierAcAuto
-
125 #define HAIER_AC_COOL kHaierAcCool
-
126 #define HAIER_AC_DRY kHaierAcDry
-
127 #define HAIER_AC_HEAT kHaierAcHeat
-
128 #define HAIER_AC_FAN kHaierAcFan
-
129 #define HAIER_AC_FAN_AUTO kHaierAcFanAuto
-
130 #define HAIER_AC_FAN_LOW kHaierAcFanLow
-
131 #define HAIER_AC_FAN_MED kHaierAcFanMed
-
132 #define HAIER_AC_FAN_HIGH kHaierAcFanHigh
-
133 
- - -
137  struct {
-
138  // Byte 0
-
139  uint8_t Prefix;
-
140  // Byte 1
-
141  uint8_t Swing:4;
-
142  uint8_t Temp :4; // 16C~30C
-
143  // Byte 2
-
144  uint8_t :8;
-
145  // Byte 3
-
146  uint8_t :1;
-
147  uint8_t Health:1;
-
148  uint8_t :6;
-
149  // Byte 4
-
150  uint8_t :6;
-
151  uint8_t Power:1;
-
152  uint8_t :1;
-
153  // Byte 5
-
154  uint8_t :5;
-
155  uint8_t Fan:3;
-
156  // Byte 6
-
157  uint8_t :6;
-
158  uint8_t Turbo:2;
-
159  // Byte 7
-
160  uint8_t :5;
-
161  uint8_t Mode:3;
-
162  // Byte 8
-
163  uint8_t :7;
-
164  uint8_t Sleep:1;
-
165  // Byte 9
-
166  uint8_t :8;
-
167  // Byte 10
-
168  uint8_t :8;
-
169  // Byte 11
-
170  uint8_t :8;
-
171  // Byte 12
-
172  uint8_t Button:4;
-
173  uint8_t :4;
-
174  // Byte 13
-
175  uint8_t Sum;
-
176  };
-
177 };
-
178 
-
179 const uint8_t kHaierAcYrw02Prefix = 0xA6;
-
180 
-
181 const uint8_t kHaierAcYrw02SwingOff = 0x0;
-
182 const uint8_t kHaierAcYrw02SwingTop = 0x1;
-
183 const uint8_t kHaierAcYrw02SwingMiddle = 0x2; // Not available in heat mode.
-
184 const uint8_t kHaierAcYrw02SwingBottom = 0x3; // Only available in heat mode.
-
185 const uint8_t kHaierAcYrw02SwingDown = 0xA;
-
186 const uint8_t kHaierAcYrw02SwingAuto = 0xC; // Airflow
-
187 
-
188 const uint8_t kHaierAcYrw02FanHigh = 0b001;
-
189 const uint8_t kHaierAcYrw02FanMed = 0b010;
-
190 const uint8_t kHaierAcYrw02FanLow = 0b011;
-
191 const uint8_t kHaierAcYrw02FanAuto = 0b101;
-
192 
-
193 const uint8_t kHaierAcYrw02TurboOff = 0x0;
-
194 const uint8_t kHaierAcYrw02TurboHigh = 0x1;
-
195 const uint8_t kHaierAcYrw02TurboLow = 0x2;
-
196 
-
197 const uint8_t kHaierAcYrw02Auto = 0b000; // 0
-
198 const uint8_t kHaierAcYrw02Cool = 0b001; // 1
-
199 const uint8_t kHaierAcYrw02Dry = 0b010; // 2
-
200 const uint8_t kHaierAcYrw02Heat = 0b100; // 4
-
201 const uint8_t kHaierAcYrw02Fan = 0b110; // 5
-
202 
-
203 const uint8_t kHaierAcYrw02ButtonTempUp = 0x0;
-
204 const uint8_t kHaierAcYrw02ButtonTempDown = 0x1;
-
205 const uint8_t kHaierAcYrw02ButtonSwing = 0x2;
-
206 const uint8_t kHaierAcYrw02ButtonFan = 0x4;
-
207 const uint8_t kHaierAcYrw02ButtonPower = 0x5;
-
208 const uint8_t kHaierAcYrw02ButtonMode = 0x6;
-
209 const uint8_t kHaierAcYrw02ButtonHealth = 0x7;
-
210 const uint8_t kHaierAcYrw02ButtonTurbo = 0x8;
-
211 const uint8_t kHaierAcYrw02ButtonSleep = 0xB;
-
212 
-
213 // Legacy Haier YRW02 remote defines.
-
214 #define HAIER_AC_YRW02_SWING_OFF kHaierAcYrw02SwingOff
-
215 #define HAIER_AC_YRW02_SWING_TOP kHaierAcYrw02SwingTop
-
216 #define HAIER_AC_YRW02_SWING_MIDDLE kHaierAcYrw02SwingMiddle
-
217 #define HAIER_AC_YRW02_SWING_BOTTOM kHaierAcYrw02SwingBottom
-
218 #define HAIER_AC_YRW02_SWING_DOWN kHaierAcYrw02SwingDown
-
219 #define HAIER_AC_YRW02_SWING_AUTO kHaierAcYrw02SwingAuto
-
220 #define HAIER_AC_YRW02_FAN_HIGH kHaierAcYrw02FanHigh
-
221 #define HAIER_AC_YRW02_FAN_MED kHaierAcYrw02FanMed
-
222 #define HAIER_AC_YRW02_FAN_LOW kHaierAcYrw02FanLow
-
223 #define HAIER_AC_YRW02_FAN_AUTO kHaierAcYrw02FanAuto
-
224 #define HAIER_AC_YRW02_TURBO_OFF kHaierAcYrw02TurboOff
-
225 #define HAIER_AC_YRW02_TURBO_HIGH kHaierAcYrw02TurboHigh
-
226 #define HAIER_AC_YRW02_TURBO_LOW kHaierAcYrw02TurboLow
-
227 #define HAIER_AC_YRW02_AUTO kHaierAcYrw02Auto
-
228 #define HAIER_AC_YRW02_COOL kHaierAcYrw02Cool
-
229 #define HAIER_AC_YRW02_DRY kHaierAcYrw02Dry
-
230 #define HAIER_AC_YRW02_HEAT kHaierAcYrw02Heat
-
231 #define HAIER_AC_YRW02_FAN kHaierAcYrw02Fan
-
232 #define HAIER_AC_YRW02_BUTTON_TEMP_UP kHaierAcYrw02ButtonTempUp
-
233 #define HAIER_AC_YRW02_BUTTON_TEMP_DOWN kHaierAcYrw02ButtonTempDown
-
234 #define HAIER_AC_YRW02_BUTTON_SWING kHaierAcYrw02ButtonSwing
-
235 #define HAIER_AC_YRW02_BUTTON_FAN kHaierAcYrw02ButtonFan
-
236 #define HAIER_AC_YRW02_BUTTON_POWER kHaierAcYrw02ButtonPower
-
237 #define HAIER_AC_YRW02_BUTTON_MODE kHaierAcYrw02ButtonMode
-
238 #define HAIER_AC_YRW02_BUTTON_HEALTH kHaierAcYrw02ButtonHealth
-
239 #define HAIER_AC_YRW02_BUTTON_TURBO kHaierAcYrw02ButtonTurbo
-
240 #define HAIER_AC_YRW02_BUTTON_SLEEP kHaierAcYrw02ButtonSleep
-
241 
-
242 // Classes
-
244 class IRHaierAC {
-
245  public:
-
246  explicit IRHaierAC(const uint16_t pin, const bool inverted = false,
-
247  const bool use_modulation = true);
-
248 #if SEND_HAIER_AC
-
249  void send(const uint16_t repeat = kHaierAcDefaultRepeat);
-
254  int8_t calibrate(void) { return _irsend.calibrate(); }
-
255 #endif // SEND_HAIER_AC
-
256  void begin(void);
-
257 
-
258  void setCommand(const uint8_t command);
-
259  uint8_t getCommand(void) const;
-
260 
-
261  void setTemp(const uint8_t temp);
-
262  uint8_t getTemp(void) const;
-
263 
-
264  void setFan(const uint8_t speed);
-
265  uint8_t getFan(void) const;
-
266 
-
267  uint8_t getMode(void) const;
-
268  void setMode(const uint8_t mode);
-
269 
-
270  bool getSleep(void) const;
-
271  void setSleep(const bool on);
-
272  bool getHealth(void) const;
-
273  void setHealth(const bool on);
-
274 
-
275  int16_t getOnTimer(void) const;
-
276  void setOnTimer(const uint16_t mins);
-
277  int16_t getOffTimer(void) const;
-
278  void setOffTimer(const uint16_t mins);
-
279  void cancelTimers(void);
-
280 
-
281  uint16_t getCurrTime(void) const;
-
282  void setCurrTime(const uint16_t mins);
-
283 
-
284  uint8_t getSwing(void) const;
-
285  void setSwing(const uint8_t state);
-
286 
-
287  uint8_t* getRaw(void);
-
288  void setRaw(const uint8_t new_code[]);
-
289  static bool validChecksum(uint8_t state[],
-
290  const uint16_t length = kHaierACStateLength);
-
291  static uint8_t convertMode(const stdAc::opmode_t mode);
-
292  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
293  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
294  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
295  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
296  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
297  stdAc::state_t toCommon(void) const;
-
298  String toString(void) const;
-
299 #ifndef UNIT_TEST
-
300 
-
301  private:
- -
303 #else // UNIT_TEST
-
304  IRsendTest _irsend;
-
306 #endif
- -
309  void stateReset(void);
-
310  void checksum(void);
-
311 };
-
312 
- -
315  public:
-
316  explicit IRHaierACYRW02(const uint16_t pin, const bool inverted = false,
-
317  const bool use_modulation = true);
-
318 #if SEND_HAIER_AC_YRW02
-
319  void send(const uint16_t repeat = kHaierAcYrw02DefaultRepeat);
-
324  int8_t calibrate(void) { return _irsend.calibrate(); }
-
325 #endif // SEND_HAIER_AC_YRW02
-
326  void begin(void);
-
327 
-
328  void setButton(const uint8_t button);
-
329  uint8_t getButton(void) const;
-
330 
-
331  void setTemp(const uint8_t temp);
-
332  uint8_t getTemp(void) const;
-
333 
-
334  void setFan(const uint8_t speed);
-
335  uint8_t getFan(void) const;
-
336 
-
337  uint8_t getMode(void) const;
-
338  void setMode(const uint8_t mode);
-
339 
-
340  bool getPower(void) const;
-
341  void setPower(const bool on);
-
342  void on(void);
-
343  void off(void);
-
344 
-
345  bool getSleep(void) const;
-
346  void setSleep(const bool on);
-
347  bool getHealth(void) const;
-
348  void setHealth(const bool on);
-
349 
-
350  uint8_t getTurbo(void) const;
-
351  void setTurbo(const uint8_t speed);
-
352 
-
353  uint8_t getSwing(void) const;
-
354  void setSwing(const uint8_t pos);
-
355 
-
356  uint8_t* getRaw(void);
-
357  void setRaw(const uint8_t new_code[]);
-
358  static bool validChecksum(uint8_t state[],
-
359  const uint16_t length = kHaierACYRW02StateLength);
-
360  static uint8_t convertMode(const stdAc::opmode_t mode);
-
361  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
362  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
363  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
364  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
365  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
366  stdAc::state_t toCommon(void) const;
-
367  String toString(void) const;
-
368 #ifndef UNIT_TEST
-
369 
-
370  private:
- -
372 #else // UNIT_TEST
-
373  IRsendTest _irsend;
-
375 #endif // UNIT_TEST
- -
378  void stateReset(void);
-
379  void checksum(void);
-
380 };
-
381 #endif // IR_HAIER_H_
-
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Haier.cpp:871
-
const uint8_t kHaierAcCmdFan
Definition: ir_Haier.h:76
-
const uint8_t kHaierAcFanHigh
Definition: ir_Haier.h:99
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Haier.cpp:532
-
const uint16_t kHaierAcYrw02DefaultRepeat
Definition: IRremoteESP8266.h:994
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Haier.cpp:646
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Haier.cpp:671
-
int16_t getOffTimer(void) const
Get the Off Timer value/setting of the A/C.
Definition: ir_Haier.cpp:267
-
Native representation of a Haier YRW02 A/C message.
Definition: ir_Haier.h:135
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Haier.cpp:201
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Haier.cpp:820
-
const uint8_t kHaierAcYrw02Fan
Definition: ir_Haier.h:201
-
const uint16_t kHaierAcDefaultRepeat
Definition: IRremoteESP8266.h:991
-
const uint8_t kHaierAcYrw02FanMed
Definition: ir_Haier.h:189
-
const uint8_t kHaierAcSwingChg
Definition: ir_Haier.h:88
-
void setSwing(const uint8_t state)
Set the Vertical Swing mode of the A/C.
Definition: ir_Haier.cpp:318
-
uint8_t Temp
Definition: ir_Haier.h:142
-
const uint8_t kHaierAcAuto
Definition: ir_Haier.h:90
-
const uint8_t kHaierAcYrw02ButtonTurbo
Definition: ir_Haier.h:210
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Haier.h:324
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Haier.h:371
-
const uint16_t kHaierACStateLength
Definition: IRremoteESP8266.h:989
-
const uint8_t kHaierAcCmdTempDown
Definition: ir_Haier.h:78
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Haier.cpp:133
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Haier.cpp:114
-
uint8_t Swing
Definition: ir_Haier.h:42
-
bool getHealth(void) const
Get the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:659
-
const uint8_t kHaierAcCmdMode
Definition: ir_Haier.h:75
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kHaierAcYrw02ButtonHealth
Definition: ir_Haier.h:209
-
uint16_t getCurrTime(void) const
Get the clock value of the A/C.
Definition: ir_Haier.cpp:277
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Haier.cpp:164
-
void on(void)
Change the power setting to On.
Definition: ir_Haier.cpp:677
-
const uint8_t kHaierAcCmdSleep
Definition: ir_Haier.h:79
-
HaierYRW02Protocol _
Definition: ir_Haier.h:377
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Haier.cpp:347
-
uint8_t Prefix
Definition: ir_Haier.h:35
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Haier.cpp:225
-
uint8_t Temp
Definition: ir_Haier.h:38
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Haier.cpp:180
-
uint8_t OnTimer
Definition: ir_Haier.h:46
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Haier.cpp:807
-
const uint8_t kHaierAcYrw02Auto
Definition: ir_Haier.h:197
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Haier.cpp:126
-
const uint8_t kHaierAcCmdSwing
Definition: ir_Haier.h:83
-
const uint8_t kHaierAcYrw02Prefix
Definition: ir_Haier.h:179
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Haier.cpp:244
-
const uint8_t kHaierAcYrw02SwingTop
Definition: ir_Haier.h:182
-
uint8_t getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Haier.cpp:697
-
uint8_t CurrMins
Definition: ir_Haier.h:44
- -
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Haier.cpp:622
-
uint8_t raw[kHaierACYRW02StateLength]
The state in native form.
Definition: ir_Haier.h:136
-
uint8_t Mode
Definition: ir_Haier.h:56
-
uint8_t Power
Definition: ir_Haier.h:151
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Haier.cpp:439
-
const uint8_t kHaierAcCmdTimerSet
Definition: ir_Haier.h:80
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Haier.cpp:191
-
const uint8_t kHaierAcCmdTempUp
Definition: ir_Haier.h:77
-
void cancelTimers(void)
Cancel/disable the On & Off timers.
Definition: ir_Haier.cpp:298
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Haier.cpp:557
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Haier.h:302
-
void setSwing(const uint8_t pos)
Set the Vertical Swing mode of the A/C.
Definition: ir_Haier.cpp:742
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Haier.cpp:334
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kHaierAcFanLow
Definition: ir_Haier.h:97
-
uint8_t getSwing(void) const
Get the Vertical Swing position setting of the A/C.
Definition: ir_Haier.cpp:736
-
std::string String
Definition: IRremoteESP8266.h:1217
-
bool getHealth(void) const
Get the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:238
-
const uint8_t kHaierAcYrw02ButtonSleep
Definition: ir_Haier.h:211
-
const uint8_t kHaierAcPrefix
Definition: ir_Haier.h:68
-
const uint16_t kHaierACYRW02StateLength
Definition: IRremoteESP8266.h:992
-
uint8_t Prefix
Definition: ir_Haier.h:139
-
void setOnTimer(const uint16_t mins)
Set & enable the On Timer.
Definition: ir_Haier.cpp:281
-
uint8_t Sleep
Definition: ir_Haier.h:164
-
const uint8_t kHaierAcSwingOff
Definition: ir_Haier.h:85
-
const uint8_t kHaierAcSwingDown
Definition: ir_Haier.h:87
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Haier.cpp:665
- -
const uint8_t kHaierAcYrw02FanHigh
Definition: ir_Haier.h:188
-
const uint8_t kHaierAcFan
Definition: ir_Haier.h:94
-
const uint8_t kHaierAcYrw02FanLow
Definition: ir_Haier.h:190
-
uint8_t Fan
Definition: ir_Haier.h:53
-
const uint8_t kHaierAcYrw02SwingAuto
Definition: ir_Haier.h:186
-
const uint8_t kHaierAcCool
Definition: ir_Haier.h:91
-
uint8_t Turbo
Definition: ir_Haier.h:158
-
const uint8_t kHaierAcDefTemp
Definition: ir_Haier.h:71
-
uint8_t Mode
Definition: ir_Haier.h:161
-
const uint8_t kHaierAcYrw02SwingOff
Definition: ir_Haier.h:181
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:361
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Haier.cpp:251
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Haier.cpp:723
-
void setHealth(const bool on)
Set the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:231
-
const uint8_t kHaierAcYrw02ButtonTempUp
Definition: ir_Haier.h:203
-
uint8_t Swing
Definition: ir_Haier.h:141
-
void off(void)
Change the power setting to Off.
Definition: ir_Haier.cpp:680
-
void setHealth(const bool on)
Set the Health (filter) setting of the A/C.
Definition: ir_Haier.cpp:652
-
const uint8_t kHaierAcMinTemp
Definition: ir_Haier.h:70
-
const uint8_t kHaierAcYrw02SwingDown
Definition: ir_Haier.h:185
-
static bool validChecksum(uint8_t state[], const uint16_t length=kHaierACStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Haier.cpp:108
-
uint8_t getSwing(void) const
Get the Vertical Swing position setting of the A/C.
Definition: ir_Haier.cpp:312
-
HaierProtocol _
Definition: ir_Haier.h:308
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Haier.cpp:543
-
uint8_t Health
Definition: ir_Haier.h:49
-
const uint8_t kHaierAcCmdHealth
Definition: ir_Haier.h:82
-
uint8_t unknown
Definition: ir_Haier.h:41
-
uint8_t CurrHours
Definition: ir_Haier.h:40
-
uint8_t remote_state[kHaierACStateLength]
< The state in native IR code form
Definition: ir_Haier.h:32
-
const uint8_t kHaierAcCmdOn
Definition: ir_Haier.h:74
-
const uint8_t kHaierAcYrw02SwingMiddle
Definition: ir_Haier.h:183
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Haier.cpp:717
-
const uint8_t kHaierAcYrw02ButtonSwing
Definition: ir_Haier.h:205
-
const uint8_t kHaierAcYrw02TurboLow
Definition: ir_Haier.h:195
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Haier.cpp:570
-
const uint8_t kHaierAcFanMed
Definition: ir_Haier.h:98
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Haier.cpp:690
-
const uint8_t kHaierAcYrw02TurboOff
Definition: ir_Haier.h:193
-
uint8_t Health
Definition: ir_Haier.h:147
-
const uint8_t kHaierAcYrw02ButtonTempDown
Definition: ir_Haier.h:204
-
Class for handling detailed Haier A/C messages.
Definition: ir_Haier.h:244
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Haier.cpp:628
-
uint8_t OnMins
Definition: ir_Haier.h:58
-
void setOffTimer(const uint16_t mins)
Set & enable the Off Timer.
Definition: ir_Haier.cpp:290
-
const uint8_t kHaierAcYrw02FanAuto
Definition: ir_Haier.h:191
-
const uint8_t kHaierAcYrw02TurboHigh
Definition: ir_Haier.h:194
-
const uint8_t kHaierAcMaxTemp
Definition: ir_Haier.h:72
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Haier.cpp:845
-
void send(const uint16_t repeat=kHaierAcYrw02DefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Haier.cpp:537
-
void setButton(const uint8_t button)
Set the Button/Command setting of the A/C.
Definition: ir_Haier.cpp:583
-
const uint8_t kHaierAcYrw02ButtonFan
Definition: ir_Haier.h:206
-
const uint8_t kHaierAcYrw02Cool
Definition: ir_Haier.h:198
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Haier.cpp:376
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Haier.cpp:577
-
const uint8_t kHaierAcYrw02SwingBottom
Definition: ir_Haier.h:184
-
uint8_t OffHours
Definition: ir_Haier.h:48
-
const uint8_t kHaierAcFanAuto
Definition: ir_Haier.h:96
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:792
-
const uint8_t kHaierAcCmdOff
Definition: ir_Haier.h:73
-
uint8_t Sleep
Definition: ir_Haier.h:59
-
IRHaierACYRW02(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Haier.cpp:527
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Haier.cpp:412
-
int16_t getOnTimer(void) const
Get the On Timer value/setting of the A/C.
Definition: ir_Haier.cpp:257
-
const uint8_t kHaierAcYrw02Heat
Definition: ir_Haier.h:200
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Haier.cpp:100
-
void setCommand(const uint8_t command)
Set the Command/Button setting of the A/C.
Definition: ir_Haier.cpp:139
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Haier.h:254
-
const uint8_t kHaierAcSleepBit
Definition: ir_Haier.h:103
-
const uint8_t kHaierAcDry
Definition: ir_Haier.h:92
-
static bool validChecksum(uint8_t state[], const uint16_t length=kHaierACYRW02StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Haier.cpp:551
-
const uint8_t kHaierAcSwingUp
Definition: ir_Haier.h:86
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:401
-
const uint8_t kHaierAcYrw02ButtonMode
Definition: ir_Haier.h:208
-
const uint8_t kHaierAcHeat
Definition: ir_Haier.h:93
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Haier.cpp:684
-
Native representation of a Haier HSU07-HEA03 A/C message.
Definition: ir_Haier.h:30
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Haier.cpp:89
-
const uint16_t kHaierAcMaxTime
Definition: ir_Haier.h:101
-
void setCurrTime(const uint16_t mins)
Set the clock value for the A/C.
Definition: ir_Haier.cpp:306
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Haier.cpp:832
-
Class for handling detailed Haier ACYRW02 A/C messages.
Definition: ir_Haier.h:314
-
IRHaierAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Haier.cpp:84
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Haier.cpp:207
-
uint8_t getCommand(void) const
Get the Command/Button setting of the A/C.
Definition: ir_Haier.cpp:158
-
uint8_t Fan
Definition: ir_Haier.h:155
-
void setTurbo(const uint8_t speed)
Set the Turbo setting of the A/C.
Definition: ir_Haier.cpp:705
-
const uint8_t kHaierAcYrw02Dry
Definition: ir_Haier.h:199
-
uint8_t OnHours
Definition: ir_Haier.h:55
-
uint8_t OffTimer
Definition: ir_Haier.h:45
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t Command
Definition: ir_Haier.h:37
-
uint8_t Button
Definition: ir_Haier.h:172
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Haier.cpp:765
-
uint8_t OffMins
Definition: ir_Haier.h:52
-
uint8_t Sum
Definition: ir_Haier.h:175
-
uint8_t Sum
Definition: ir_Haier.h:62
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Haier.cpp:389
-
const uint8_t kHaierAcYrw02ButtonPower
Definition: ir_Haier.h:207
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Haier.cpp:606
-
uint8_t getButton(void) const
Get the Button/Command setting of the A/C.
Definition: ir_Haier.cpp:600
-
const uint8_t kHaierAcCmdTimerCancel
Definition: ir_Haier.h:81
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Haier.cpp:778
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
-
void send(const uint16_t repeat=kHaierAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Haier.cpp:94
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8cpp.html deleted file mode 100644 index 705884418..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8cpp.html +++ /dev/null @@ -1,423 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Hitachi.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Hitachi.cpp File Reference
-
-
- -

Support for Hitachi A/C protocols. -More...

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

-Variables

const uint16_t kHitachiAcHdrMark = 3300
 
const uint16_t kHitachiAcHdrSpace = 1700
 
const uint16_t kHitachiAc1HdrMark = 3400
 
const uint16_t kHitachiAc1HdrSpace = 3400
 
const uint16_t kHitachiAcBitMark = 400
 
const uint16_t kHitachiAcOneSpace = 1250
 
const uint16_t kHitachiAcZeroSpace = 500
 
const uint32_t kHitachiAcMinGap = kDefaultMessageGap
 
const uint16_t kHitachiAc424LdrMark = 29784
 
const uint16_t kHitachiAc424LdrSpace = 49290
 
const uint16_t kHitachiAc424HdrMark = 3416
 
const uint16_t kHitachiAc424HdrSpace = 1604
 
const uint16_t kHitachiAc424BitMark = 463
 
const uint16_t kHitachiAc424OneSpace = 1208
 
const uint16_t kHitachiAc424ZeroSpace = 372
 
const uint16_t kHitachiAc3HdrMark = 3400
 
const uint16_t kHitachiAc3HdrSpace = 1660
 
const uint16_t kHitachiAc3BitMark = 460
 
const uint16_t kHitachiAc3OneSpace = 1250
 
const uint16_t kHitachiAc3ZeroSpace = 410
 
-

Detailed Description

-

Variable Documentation

- -

◆ kHitachiAc1HdrMark

- -
-
- - - - -
const uint16_t kHitachiAc1HdrMark = 3400
-
- -
-
- -

◆ kHitachiAc1HdrSpace

- -
-
- - - - -
const uint16_t kHitachiAc1HdrSpace = 3400
-
- -
-
- -

◆ kHitachiAc3BitMark

- -
-
- - - - -
const uint16_t kHitachiAc3BitMark = 460
-
- -
-
- -

◆ kHitachiAc3HdrMark

- -
-
- - - - -
const uint16_t kHitachiAc3HdrMark = 3400
-
- -
-
- -

◆ kHitachiAc3HdrSpace

- -
-
- - - - -
const uint16_t kHitachiAc3HdrSpace = 1660
-
- -
-
- -

◆ kHitachiAc3OneSpace

- -
-
- - - - -
const uint16_t kHitachiAc3OneSpace = 1250
-
- -
-
- -

◆ kHitachiAc3ZeroSpace

- -
-
- - - - -
const uint16_t kHitachiAc3ZeroSpace = 410
-
- -
-
- -

◆ kHitachiAc424BitMark

- -
-
- - - - -
const uint16_t kHitachiAc424BitMark = 463
-
- -
-
- -

◆ kHitachiAc424HdrMark

- -
-
- - - - -
const uint16_t kHitachiAc424HdrMark = 3416
-
- -
-
- -

◆ kHitachiAc424HdrSpace

- -
-
- - - - -
const uint16_t kHitachiAc424HdrSpace = 1604
-
- -
-
- -

◆ kHitachiAc424LdrMark

- -
-
- - - - -
const uint16_t kHitachiAc424LdrMark = 29784
-
- -
-
- -

◆ kHitachiAc424LdrSpace

- -
-
- - - - -
const uint16_t kHitachiAc424LdrSpace = 49290
-
- -
-
- -

◆ kHitachiAc424OneSpace

- -
-
- - - - -
const uint16_t kHitachiAc424OneSpace = 1208
-
- -
-
- -

◆ kHitachiAc424ZeroSpace

- -
-
- - - - -
const uint16_t kHitachiAc424ZeroSpace = 372
-
- -
-
- -

◆ kHitachiAcBitMark

- -
-
- - - - -
const uint16_t kHitachiAcBitMark = 400
-
- -
-
- -

◆ kHitachiAcHdrMark

- -
-
- - - - -
const uint16_t kHitachiAcHdrMark = 3300
-
- -
-
- -

◆ kHitachiAcHdrSpace

- -
-
- - - - -
const uint16_t kHitachiAcHdrSpace = 1700
-
- -
-
- -

◆ kHitachiAcMinGap

- -
-
- - - - -
const uint32_t kHitachiAcMinGap = kDefaultMessageGap
-
- -
-
- -

◆ kHitachiAcOneSpace

- -
-
- - - - -
const uint16_t kHitachiAcOneSpace = 1250
-
- -
-
- -

◆ kHitachiAcZeroSpace

- -
-
- - - - -
const uint16_t kHitachiAcZeroSpace = 500
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h.html deleted file mode 100644 index 700ce4855..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h.html +++ /dev/null @@ -1,1413 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Hitachi.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Hitachi.h File Reference
-
-
- -

Support for Hitachi A/C protocols. -More...

- -

Go to the source code of this file.

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

-Classes

union  HitachiProtocol
 Native representation of a Hitachi 224-bit A/C message. More...
 
union  Hitachi424Protocol
 Native representation of a Hitachi 53-byte/424-bit A/C message. More...
 
union  Hitachi1Protocol
 Native representation of a Hitachi 104-bit A/C message. More...
 
class  IRHitachiAc
 Class for handling detailed Hitachi 224-bit A/C messages. More...
 
class  IRHitachiAc1
 Class for handling detailed Hitachi 104-bit A/C messages. More...
 
class  IRHitachiAc424
 Class for handling detailed Hitachi 53-byte/424-bit A/C messages. More...
 
class  IRHitachiAc3
 Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages. More...
 
class  IRHitachiAc344
 Class for handling detailed Hitachi 344-bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kHitachiAcFreq = 38000
 
const uint8_t kHitachiAcAuto = 2
 
const uint8_t kHitachiAcHeat = 3
 
const uint8_t kHitachiAcCool = 4
 
const uint8_t kHitachiAcDry = 5
 
const uint8_t kHitachiAcFan = 0xC
 
const uint8_t kHitachiAcFanAuto = 1
 
const uint8_t kHitachiAcFanLow = 2
 
const uint8_t kHitachiAcFanMed = 3
 
const uint8_t kHitachiAcFanHigh = 5
 
const uint8_t kHitachiAcMinTemp = 16
 
const uint8_t kHitachiAcMaxTemp = 32
 
const uint8_t kHitachiAcAutoTemp = 23
 
const uint8_t kHitachiAc424ButtonPowerMode = 0x13
 
const uint8_t kHitachiAc424ButtonFan = 0x42
 
const uint8_t kHitachiAc424ButtonTempDown = 0x43
 
const uint8_t kHitachiAc424ButtonTempUp = 0x44
 
const uint8_t kHitachiAc424ButtonSwingV = 0x81
 
const uint8_t kHitachiAc424ButtonSwingH = 0x8C
 
const uint8_t kHitachiAc344ButtonPowerMode = kHitachiAc424ButtonPowerMode
 
const uint8_t kHitachiAc344ButtonFan = kHitachiAc424ButtonFan
 
const uint8_t kHitachiAc344ButtonTempDown = kHitachiAc424ButtonTempDown
 
const uint8_t kHitachiAc344ButtonTempUp = kHitachiAc424ButtonTempUp
 
const uint8_t kHitachiAc344ButtonSwingV = kHitachiAc424ButtonSwingV
 
const uint8_t kHitachiAc344ButtonSwingH = kHitachiAc424ButtonSwingH
 
const uint8_t kHitachiAc424MinTemp = 16
 
const uint8_t kHitachiAc424MaxTemp = 32
 
const uint8_t kHitachiAc344MinTemp = kHitachiAc424MinTemp
 
const uint8_t kHitachiAc344MaxTemp = kHitachiAc424MaxTemp
 
const uint8_t kHitachiAc424FanTemp = 27
 
const uint8_t kHitachiAc424Fan = 1
 
const uint8_t kHitachiAc424Cool = 3
 
const uint8_t kHitachiAc424Dry = 5
 
const uint8_t kHitachiAc424Heat = 6
 
const uint8_t kHitachiAc344Fan = kHitachiAc424Fan
 
const uint8_t kHitachiAc344Cool = kHitachiAc424Cool
 
const uint8_t kHitachiAc344Dry = kHitachiAc424Dry
 
const uint8_t kHitachiAc344Heat = kHitachiAc424Heat
 
const uint8_t kHitachiAc424FanMin = 1
 
const uint8_t kHitachiAc424FanLow = 2
 
const uint8_t kHitachiAc424FanMedium = 3
 
const uint8_t kHitachiAc424FanHigh = 4
 
const uint8_t kHitachiAc424FanAuto = 5
 
const uint8_t kHitachiAc424FanMax = 6
 
const uint8_t kHitachiAc424FanMaxDry = 2
 
const uint8_t kHitachiAc344FanMin = kHitachiAc424FanMin
 
const uint8_t kHitachiAc344FanLow = kHitachiAc424FanLow
 
const uint8_t kHitachiAc344FanMedium = kHitachiAc424FanMedium
 
const uint8_t kHitachiAc344FanHigh = kHitachiAc424FanHigh
 
const uint8_t kHitachiAc344FanAuto = kHitachiAc424FanAuto
 
const uint8_t kHitachiAc344FanMax = kHitachiAc424FanMax
 
const uint8_t kHitachiAc424PowerOn = 0xF1
 
const uint8_t kHitachiAc424PowerOff = 0xE1
 
const uint8_t kHitachiAc344SwingHAuto = 0
 
const uint8_t kHitachiAc344SwingHRightMax = 1
 
const uint8_t kHitachiAc344SwingHRight = 2
 
const uint8_t kHitachiAc344SwingHMiddle = 3
 
const uint8_t kHitachiAc344SwingHLeft = 4
 
const uint8_t kHitachiAc344SwingHLeftMax = 5
 
const uint8_t kHitachiAc1Model_A = 0b10
 
const uint8_t kHitachiAc1Model_B = 0b01
 
const uint8_t kHitachiAc1Dry = 0b0010
 
const uint8_t kHitachiAc1Fan = 0b0100
 
const uint8_t kHitachiAc1Cool = 0b0110
 
const uint8_t kHitachiAc1Heat = 0b1001
 
const uint8_t kHitachiAc1Auto = 0b1110
 
const uint8_t kHitachiAc1FanAuto = 1
 
const uint8_t kHitachiAc1FanHigh = 2
 
const uint8_t kHitachiAc1FanMed = 4
 
const uint8_t kHitachiAc1FanLow = 8
 
const uint8_t kHitachiAc1TempSize = 5
 
const uint8_t kHitachiAc1TempDelta = 7
 
const uint8_t kHitachiAc1TempAuto = 25
 
const uint8_t kHitachiAc1TimerSize = 16
 
const uint8_t kHitachiAc1SleepOff = 0b000
 
const uint8_t kHitachiAc1Sleep1 = 0b001
 
const uint8_t kHitachiAc1Sleep2 = 0b010
 
const uint8_t kHitachiAc1Sleep3 = 0b011
 
const uint8_t kHitachiAc1Sleep4 = 0b100
 
const uint8_t kHitachiAc1ChecksumStartByte = 5
 
-

Detailed Description

-

Variable Documentation

- -

◆ kHitachiAc1Auto

- -
-
- - - - -
const uint8_t kHitachiAc1Auto = 0b1110
-
- -
-
- -

◆ kHitachiAc1ChecksumStartByte

- -
-
- - - - -
const uint8_t kHitachiAc1ChecksumStartByte = 5
-
- -
-
- -

◆ kHitachiAc1Cool

- -
-
- - - - -
const uint8_t kHitachiAc1Cool = 0b0110
-
- -
-
- -

◆ kHitachiAc1Dry

- -
-
- - - - -
const uint8_t kHitachiAc1Dry = 0b0010
-
- -
-
- -

◆ kHitachiAc1Fan

- -
-
- - - - -
const uint8_t kHitachiAc1Fan = 0b0100
-
- -
-
- -

◆ kHitachiAc1FanAuto

- -
-
- - - - -
const uint8_t kHitachiAc1FanAuto = 1
-
- -
-
- -

◆ kHitachiAc1FanHigh

- -
-
- - - - -
const uint8_t kHitachiAc1FanHigh = 2
-
- -
-
- -

◆ kHitachiAc1FanLow

- -
-
- - - - -
const uint8_t kHitachiAc1FanLow = 8
-
- -
-
- -

◆ kHitachiAc1FanMed

- -
-
- - - - -
const uint8_t kHitachiAc1FanMed = 4
-
- -
-
- -

◆ kHitachiAc1Heat

- -
-
- - - - -
const uint8_t kHitachiAc1Heat = 0b1001
-
- -
-
- -

◆ kHitachiAc1Model_A

- -
-
- - - - -
const uint8_t kHitachiAc1Model_A = 0b10
-
- -
-
- -

◆ kHitachiAc1Model_B

- -
-
- - - - -
const uint8_t kHitachiAc1Model_B = 0b01
-
- -
-
- -

◆ kHitachiAc1Sleep1

- -
-
- - - - -
const uint8_t kHitachiAc1Sleep1 = 0b001
-
- -
-
- -

◆ kHitachiAc1Sleep2

- -
-
- - - - -
const uint8_t kHitachiAc1Sleep2 = 0b010
-
- -
-
- -

◆ kHitachiAc1Sleep3

- -
-
- - - - -
const uint8_t kHitachiAc1Sleep3 = 0b011
-
- -
-
- -

◆ kHitachiAc1Sleep4

- -
-
- - - - -
const uint8_t kHitachiAc1Sleep4 = 0b100
-
- -
-
- -

◆ kHitachiAc1SleepOff

- -
-
- - - - -
const uint8_t kHitachiAc1SleepOff = 0b000
-
- -
-
- -

◆ kHitachiAc1TempAuto

- -
-
- - - - -
const uint8_t kHitachiAc1TempAuto = 25
-
- -
-
- -

◆ kHitachiAc1TempDelta

- -
-
- - - - -
const uint8_t kHitachiAc1TempDelta = 7
-
- -
-
- -

◆ kHitachiAc1TempSize

- -
-
- - - - -
const uint8_t kHitachiAc1TempSize = 5
-
- -
-
- -

◆ kHitachiAc1TimerSize

- -
-
- - - - -
const uint8_t kHitachiAc1TimerSize = 16
-
- -
-
- -

◆ kHitachiAc344ButtonFan

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonFan = kHitachiAc424ButtonFan
-
- -
-
- -

◆ kHitachiAc344ButtonPowerMode

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonPowerMode = kHitachiAc424ButtonPowerMode
-
- -
-
- -

◆ kHitachiAc344ButtonSwingH

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonSwingH = kHitachiAc424ButtonSwingH
-
- -
-
- -

◆ kHitachiAc344ButtonSwingV

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonSwingV = kHitachiAc424ButtonSwingV
-
- -
-
- -

◆ kHitachiAc344ButtonTempDown

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonTempDown = kHitachiAc424ButtonTempDown
-
- -
-
- -

◆ kHitachiAc344ButtonTempUp

- -
-
- - - - -
const uint8_t kHitachiAc344ButtonTempUp = kHitachiAc424ButtonTempUp
-
- -
-
- -

◆ kHitachiAc344Cool

- -
-
- - - - -
const uint8_t kHitachiAc344Cool = kHitachiAc424Cool
-
- -
-
- -

◆ kHitachiAc344Dry

- -
-
- - - - -
const uint8_t kHitachiAc344Dry = kHitachiAc424Dry
-
- -
-
- -

◆ kHitachiAc344Fan

- -
-
- - - - -
const uint8_t kHitachiAc344Fan = kHitachiAc424Fan
-
- -
-
- -

◆ kHitachiAc344FanAuto

- -
-
- - - - -
const uint8_t kHitachiAc344FanAuto = kHitachiAc424FanAuto
-
- -
-
- -

◆ kHitachiAc344FanHigh

- -
-
- - - - -
const uint8_t kHitachiAc344FanHigh = kHitachiAc424FanHigh
-
- -
-
- -

◆ kHitachiAc344FanLow

- -
-
- - - - -
const uint8_t kHitachiAc344FanLow = kHitachiAc424FanLow
-
- -
-
- -

◆ kHitachiAc344FanMax

- -
-
- - - - -
const uint8_t kHitachiAc344FanMax = kHitachiAc424FanMax
-
- -
-
- -

◆ kHitachiAc344FanMedium

- -
-
- - - - -
const uint8_t kHitachiAc344FanMedium = kHitachiAc424FanMedium
-
- -
-
- -

◆ kHitachiAc344FanMin

- -
-
- - - - -
const uint8_t kHitachiAc344FanMin = kHitachiAc424FanMin
-
- -
-
- -

◆ kHitachiAc344Heat

- -
-
- - - - -
const uint8_t kHitachiAc344Heat = kHitachiAc424Heat
-
- -
-
- -

◆ kHitachiAc344MaxTemp

- -
-
- - - - -
const uint8_t kHitachiAc344MaxTemp = kHitachiAc424MaxTemp
-
- -
-
- -

◆ kHitachiAc344MinTemp

- -
-
- - - - -
const uint8_t kHitachiAc344MinTemp = kHitachiAc424MinTemp
-
- -
-
- -

◆ kHitachiAc344SwingHAuto

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHAuto = 0
-
- -
-
- -

◆ kHitachiAc344SwingHLeft

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHLeft = 4
-
- -
-
- -

◆ kHitachiAc344SwingHLeftMax

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHLeftMax = 5
-
- -
-
- -

◆ kHitachiAc344SwingHMiddle

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHMiddle = 3
-
- -
-
- -

◆ kHitachiAc344SwingHRight

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHRight = 2
-
- -
-
- -

◆ kHitachiAc344SwingHRightMax

- -
-
- - - - -
const uint8_t kHitachiAc344SwingHRightMax = 1
-
- -
-
- -

◆ kHitachiAc424ButtonFan

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonFan = 0x42
-
- -
-
- -

◆ kHitachiAc424ButtonPowerMode

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonPowerMode = 0x13
-
- -
-
- -

◆ kHitachiAc424ButtonSwingH

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonSwingH = 0x8C
-
- -
-
- -

◆ kHitachiAc424ButtonSwingV

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonSwingV = 0x81
-
- -
-
- -

◆ kHitachiAc424ButtonTempDown

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonTempDown = 0x43
-
- -
-
- -

◆ kHitachiAc424ButtonTempUp

- -
-
- - - - -
const uint8_t kHitachiAc424ButtonTempUp = 0x44
-
- -
-
- -

◆ kHitachiAc424Cool

- -
-
- - - - -
const uint8_t kHitachiAc424Cool = 3
-
- -
-
- -

◆ kHitachiAc424Dry

- -
-
- - - - -
const uint8_t kHitachiAc424Dry = 5
-
- -
-
- -

◆ kHitachiAc424Fan

- -
-
- - - - -
const uint8_t kHitachiAc424Fan = 1
-
- -
-
- -

◆ kHitachiAc424FanAuto

- -
-
- - - - -
const uint8_t kHitachiAc424FanAuto = 5
-
- -
-
- -

◆ kHitachiAc424FanHigh

- -
-
- - - - -
const uint8_t kHitachiAc424FanHigh = 4
-
- -
-
- -

◆ kHitachiAc424FanLow

- -
-
- - - - -
const uint8_t kHitachiAc424FanLow = 2
-
- -
-
- -

◆ kHitachiAc424FanMax

- -
-
- - - - -
const uint8_t kHitachiAc424FanMax = 6
-
- -
-
- -

◆ kHitachiAc424FanMaxDry

- -
-
- - - - -
const uint8_t kHitachiAc424FanMaxDry = 2
-
- -
-
- -

◆ kHitachiAc424FanMedium

- -
-
- - - - -
const uint8_t kHitachiAc424FanMedium = 3
-
- -
-
- -

◆ kHitachiAc424FanMin

- -
-
- - - - -
const uint8_t kHitachiAc424FanMin = 1
-
- -
-
- -

◆ kHitachiAc424FanTemp

- -
-
- - - - -
const uint8_t kHitachiAc424FanTemp = 27
-
- -
-
- -

◆ kHitachiAc424Heat

- -
-
- - - - -
const uint8_t kHitachiAc424Heat = 6
-
- -
-
- -

◆ kHitachiAc424MaxTemp

- -
-
- - - - -
const uint8_t kHitachiAc424MaxTemp = 32
-
- -
-
- -

◆ kHitachiAc424MinTemp

- -
-
- - - - -
const uint8_t kHitachiAc424MinTemp = 16
-
- -
-
- -

◆ kHitachiAc424PowerOff

- -
-
- - - - -
const uint8_t kHitachiAc424PowerOff = 0xE1
-
- -
-
- -

◆ kHitachiAc424PowerOn

- -
-
- - - - -
const uint8_t kHitachiAc424PowerOn = 0xF1
-
- -
-
- -

◆ kHitachiAcAuto

- -
-
- - - - -
const uint8_t kHitachiAcAuto = 2
-
- -
-
- -

◆ kHitachiAcAutoTemp

- -
-
- - - - -
const uint8_t kHitachiAcAutoTemp = 23
-
- -
-
- -

◆ kHitachiAcCool

- -
-
- - - - -
const uint8_t kHitachiAcCool = 4
-
- -
-
- -

◆ kHitachiAcDry

- -
-
- - - - -
const uint8_t kHitachiAcDry = 5
-
- -
-
- -

◆ kHitachiAcFan

- -
-
- - - - -
const uint8_t kHitachiAcFan = 0xC
-
- -
-
- -

◆ kHitachiAcFanAuto

- -
-
- - - - -
const uint8_t kHitachiAcFanAuto = 1
-
- -
-
- -

◆ kHitachiAcFanHigh

- -
-
- - - - -
const uint8_t kHitachiAcFanHigh = 5
-
- -
-
- -

◆ kHitachiAcFanLow

- -
-
- - - - -
const uint8_t kHitachiAcFanLow = 2
-
- -
-
- -

◆ kHitachiAcFanMed

- -
-
- - - - -
const uint8_t kHitachiAcFanMed = 3
-
- -
-
- -

◆ kHitachiAcFreq

- -
-
- - - - -
const uint16_t kHitachiAcFreq = 38000
-
- -
-
- -

◆ kHitachiAcHeat

- -
-
- - - - -
const uint8_t kHitachiAcHeat = 3
-
- -
-
- -

◆ kHitachiAcMaxTemp

- -
-
- - - - -
const uint8_t kHitachiAcMaxTemp = 32
-
- -
-
- -

◆ kHitachiAcMinTemp

- -
-
- - - - -
const uint8_t kHitachiAcMinTemp = 16
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h_source.html deleted file mode 100644 index 86b514d25..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Hitachi_8h_source.html +++ /dev/null @@ -1,791 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Hitachi.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Hitachi.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018-2020 David Conran
-
10 
-
11 // Supports:
-
12 // Brand: Hitachi, Model: RAS-35THA6 remote
-
13 // Brand: Hitachi, Model: LT0541-HTA remote (HITACHI_AC1)
-
14 // Brand: Hitachi, Model: Series VI A/C (Circa 2007) (HITACHI_AC1)
-
15 // Brand: Hitachi, Model: RAR-8P2 remote (HITACHI_AC424)
-
16 // Brand: Hitachi, Model: RAS-AJ25H A/C (HITACHI_AC424)
-
17 // Brand: Hitachi, Model: PC-LH3B (HITACHI_AC3)
-
18 // Brand: Hitachi, Model: KAZE-312KSDP A/C (HITACHI_AC1)
-
19 // Brand: Hitachi, Model: R-LT0541-HTA/Y.K.1.1-1 V2.3 remote (HITACHI_AC1)
-
20 // Brand: Hitachi, Model: RAS-22NK A/C (HITACHI_AC344)
-
21 // Brand: Hitachi, Model: RF11T1 remote (HITACHI_AC344)
-
22 
-
23 #ifndef IR_HITACHI_H_
-
24 #define IR_HITACHI_H_
-
25 
-
26 #define __STDC_LIMIT_MACROS
-
27 #include <stdint.h>
-
28 #ifndef UNIT_TEST
-
29 #include <Arduino.h>
-
30 #endif
-
31 #include "IRremoteESP8266.h"
-
32 #include "IRsend.h"
-
33 #ifdef UNIT_TEST
-
34 #include "IRsend_test.h"
-
35 #endif
-
36 
- - -
40  struct {
-
41  // Byte 0~9
-
42  uint8_t pad0[10];
-
43  // Byte 10
-
44  uint8_t Mode :8;
-
45  // Byte 11
-
46  uint8_t Temp :8;
-
47  // Byte 12
-
48  uint8_t :8;
-
49  // Byte 13
-
50  uint8_t Fan :8;
-
51  // Byte 14
-
52  uint8_t :7;
-
53  uint8_t SwingV :1;
-
54  // Byte 15
-
55  uint8_t :7;
-
56  uint8_t SwingH :1;
-
57  // Byte 16
-
58  uint8_t :8;
-
59  // Byte 17
-
60  uint8_t Power :1;
-
61  uint8_t :7;
-
62  // Byte 18~26
-
63  uint8_t pad1[9];
-
64  // Byte 27
-
65  uint8_t Sum :8;
-
66  };
-
67 };
-
68 
-
69 // Constants
-
70 const uint16_t kHitachiAcFreq = 38000; // Hz.
-
71 const uint8_t kHitachiAcAuto = 2;
-
72 const uint8_t kHitachiAcHeat = 3;
-
73 const uint8_t kHitachiAcCool = 4;
-
74 const uint8_t kHitachiAcDry = 5;
-
75 const uint8_t kHitachiAcFan = 0xC;
-
76 const uint8_t kHitachiAcFanAuto = 1;
-
77 const uint8_t kHitachiAcFanLow = 2;
-
78 const uint8_t kHitachiAcFanMed = 3;
-
79 const uint8_t kHitachiAcFanHigh = 5;
-
80 const uint8_t kHitachiAcMinTemp = 16; // 16C
-
81 const uint8_t kHitachiAcMaxTemp = 32; // 32C
-
82 const uint8_t kHitachiAcAutoTemp = 23; // 23C
-
83 
- - -
87  struct {
-
88  // Byte 0~10
-
89  uint8_t pad0[11];
-
90  // Byte 11
-
91  uint8_t Button :8;
-
92  // Byte 12
-
93  uint8_t :8;
-
94  // Byte 13
-
95  uint8_t :2;
-
96  uint8_t Temp :6;
-
97  // Byte 14~24
-
98  uint8_t pad1[11];
-
99  // Byte 25
-
100  uint8_t Mode :4;
-
101  uint8_t Fan :4;
-
102  // Byte 26
-
103  uint8_t :8;
-
104  // Byte 27
-
105  uint8_t Power :8;
-
106  // Byte 28~34
-
107  uint8_t pad2[7];
-
108  // Byte 35
-
109  uint8_t SwingH :3;
-
110  uint8_t :5;
-
111  // Byte 36
-
112  uint8_t :8;
-
113  // Byte 37
-
114  uint8_t :5;
-
115  uint8_t SwingV :1;
-
116  uint8_t :2;
-
117  };
-
118 };
-
119 
-
120 // HitachiAc424 & HitachiAc344
-
121 const uint8_t kHitachiAc424ButtonPowerMode = 0x13;
-
122 const uint8_t kHitachiAc424ButtonFan = 0x42;
-
123 const uint8_t kHitachiAc424ButtonTempDown = 0x43;
-
124 const uint8_t kHitachiAc424ButtonTempUp = 0x44;
-
125 const uint8_t kHitachiAc424ButtonSwingV = 0x81;
-
126 const uint8_t kHitachiAc424ButtonSwingH = 0x8C;
- - - - - - -
133 
-
134 const uint8_t kHitachiAc424MinTemp = 16; // 16C
-
135 const uint8_t kHitachiAc424MaxTemp = 32; // 32C
- - -
138 const uint8_t kHitachiAc424FanTemp = 27; // 27C
-
139 
-
140 const uint8_t kHitachiAc424Fan = 1;
-
141 const uint8_t kHitachiAc424Cool = 3;
-
142 const uint8_t kHitachiAc424Dry = 5;
-
143 const uint8_t kHitachiAc424Heat = 6;
- - - - -
148 
-
149 const uint8_t kHitachiAc424FanMin = 1;
-
150 const uint8_t kHitachiAc424FanLow = 2;
-
151 const uint8_t kHitachiAc424FanMedium = 3;
-
152 const uint8_t kHitachiAc424FanHigh = 4;
-
153 const uint8_t kHitachiAc424FanAuto = 5;
-
154 const uint8_t kHitachiAc424FanMax = 6;
-
155 const uint8_t kHitachiAc424FanMaxDry = 2;
- - - - - - -
162 
-
163 const uint8_t kHitachiAc424PowerOn = 0xF1;
-
164 const uint8_t kHitachiAc424PowerOff = 0xE1;
-
165 
-
166 const uint8_t kHitachiAc344SwingHAuto = 0; // 0b000
-
167 const uint8_t kHitachiAc344SwingHRightMax = 1; // 0b001
-
168 const uint8_t kHitachiAc344SwingHRight = 2; // 0b010
-
169 const uint8_t kHitachiAc344SwingHMiddle = 3; // 0b011
-
170 const uint8_t kHitachiAc344SwingHLeft = 4; // 0b100
-
171 const uint8_t kHitachiAc344SwingHLeftMax = 5; // 0b101
-
172 
-
173 
- - -
177  struct {
-
178  // Byte 0~2
-
179  uint8_t pad[3];
-
180  // Byte 3
-
181  uint8_t :6;
-
182  uint8_t Model :2;
-
183  // Byte 4
-
184  uint8_t :8;
-
185  // Byte 5
-
186  uint8_t Fan :4;
-
187  uint8_t Mode :4;
-
188  // Byte 6
-
189  uint8_t :2;
-
190  uint8_t Temp :5; // stored in LSB order.
-
191  uint8_t :1;
-
192  // Byte 7
-
193  uint8_t OffTimerLow :8; // nr. of minutes
-
194  // Byte 8
-
195  uint8_t OffTimerHigh :8; // & in LSB order.
-
196  // Byte 9
-
197  uint8_t OnTimerLow :8; // nr. of minutes
-
198  // Byte 10
-
199  uint8_t OnTimerHigh :8; // & in LSB order.
-
200  // Byte 11
-
201  uint8_t SwingToggle :1;
-
202  uint8_t Sleep :3;
-
203  uint8_t PowerToggle :1;
-
204  uint8_t Power :1;
-
205  uint8_t SwingV :1;
-
206  uint8_t SwingH :1;
-
207  // Byte 12
-
208  uint8_t Sum :8;
-
209  };
-
210 };
-
211 // HitachiAc1
-
212 // Model
-
213 const uint8_t kHitachiAc1Model_A = 0b10;
-
214 const uint8_t kHitachiAc1Model_B = 0b01;
-
215 
-
216 // Mode & Fan
-
217 const uint8_t kHitachiAc1Dry = 0b0010; // 2
-
218 const uint8_t kHitachiAc1Fan = 0b0100; // 4
-
219 const uint8_t kHitachiAc1Cool = 0b0110; // 6
-
220 const uint8_t kHitachiAc1Heat = 0b1001; // 9
-
221 const uint8_t kHitachiAc1Auto = 0b1110; // 14
-
222 const uint8_t kHitachiAc1FanAuto = 1; // 0b0001
-
223 const uint8_t kHitachiAc1FanHigh = 2; // 0b0010
-
224 const uint8_t kHitachiAc1FanMed = 4; // 0b0100
-
225 const uint8_t kHitachiAc1FanLow = 8; // 0b1000
-
226 
-
227 // Temp
-
228 const uint8_t kHitachiAc1TempSize = 5; // Mask 0b01111100
-
229 const uint8_t kHitachiAc1TempDelta = 7;
-
230 const uint8_t kHitachiAc1TempAuto = 25; // Celsius
-
231 // Timer
-
232 const uint8_t kHitachiAc1TimerSize = 16; // Mask 0b1111111111111111
-
233 // Sleep
-
234 const uint8_t kHitachiAc1SleepOff = 0b000;
-
235 const uint8_t kHitachiAc1Sleep1 = 0b001;
-
236 const uint8_t kHitachiAc1Sleep2 = 0b010;
-
237 const uint8_t kHitachiAc1Sleep3 = 0b011;
-
238 const uint8_t kHitachiAc1Sleep4 = 0b100;
-
239 // Checksum
- -
241 
-
242 
-
243 // Classes
-
246 class IRHitachiAc {
-
247  public:
-
248  explicit IRHitachiAc(const uint16_t pin, const bool inverted = false,
-
249  const bool use_modulation = true);
-
250  void stateReset(void);
-
251 #if SEND_HITACHI_AC
-
252  void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
-
257  int8_t calibrate(void) { return _irsend.calibrate(); }
-
258 #endif // SEND_HITACHI_AC
-
259  void begin(void);
-
260  void on(void);
-
261  void off(void);
-
262  void setPower(const bool on);
-
263  bool getPower(void) const;
-
264  void setTemp(const uint8_t temp);
-
265  uint8_t getTemp(void) const;
-
266  void setFan(const uint8_t speed);
-
267  uint8_t getFan(void) const;
-
268  void setMode(const uint8_t mode);
-
269  uint8_t getMode(void) const;
-
270  void setSwingVertical(const bool on);
-
271  bool getSwingVertical(void) const;
-
272  void setSwingHorizontal(const bool on);
-
273  bool getSwingHorizontal(void) const;
-
274  uint8_t* getRaw(void);
-
275  void setRaw(const uint8_t new_code[],
-
276  const uint16_t length = kHitachiAcStateLength);
-
277  static bool validChecksum(const uint8_t state[],
-
278  const uint16_t length = kHitachiAcStateLength);
-
279  static uint8_t calcChecksum(const uint8_t state[],
-
280  const uint16_t length = kHitachiAcStateLength);
-
281  static uint8_t convertMode(const stdAc::opmode_t mode);
-
282  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
283  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
284  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
285  stdAc::state_t toCommon(void) const;
-
286  String toString(void) const;
-
287 #ifndef UNIT_TEST
-
288 
-
289  private:
- -
291 #else // UNIT_TEST
-
292  IRsendTest _irsend;
-
294 #endif // UNIT_TEST
- -
297  void checksum(const uint16_t length = kHitachiAcStateLength);
-
298  uint8_t _previoustemp;
-
299 };
-
300 
- -
304  public:
-
305  explicit IRHitachiAc1(const uint16_t pin, const bool inverted = false,
-
306  const bool use_modulation = true);
-
307 
-
308  void stateReset(void);
-
309 #if SEND_HITACHI_AC1
-
310  void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
-
315  int8_t calibrate(void) { return _irsend.calibrate(); }
-
316 #endif // SEND_HITACHI_AC1
-
317  void begin(void);
-
318  void on(void);
-
319  void off(void);
-
320  void setModel(const hitachi_ac1_remote_model_t model);
- -
322  void setPower(const bool on);
-
323  bool getPower(void) const;
-
324  void setPowerToggle(const bool on);
-
325  bool getPowerToggle(void) const;
-
326  void setTemp(const uint8_t temp);
-
327  uint8_t getTemp(void) const;
-
328  void setFan(const uint8_t speed, const bool force = false);
-
329  uint8_t getFan(void) const;
-
330  void setMode(const uint8_t mode);
-
331  uint8_t getMode(void) const;
-
332  void setSwingToggle(const bool toggle);
-
333  bool getSwingToggle(void) const;
-
334  void setSwingV(const bool on);
-
335  bool getSwingV(void) const;
-
336  void setSwingH(const bool on);
-
337  bool getSwingH(void) const;
-
338  void setSleep(const uint8_t mode);
-
339  uint8_t getSleep(void) const;
-
340  void setOnTimer(const uint16_t mins);
-
341  uint16_t getOnTimer(void) const;
-
342  void setOffTimer(const uint16_t mins);
-
343  uint16_t getOffTimer(void) const;
-
344  uint8_t* getRaw(void);
-
345  void setRaw(const uint8_t new_code[],
-
346  const uint16_t length = kHitachiAc1StateLength);
-
347  static bool validChecksum(const uint8_t state[],
-
348  const uint16_t length = kHitachiAc1StateLength);
-
349  static uint8_t calcChecksum(const uint8_t state[],
-
350  const uint16_t length = kHitachiAc1StateLength);
-
351  static uint8_t convertMode(const stdAc::opmode_t mode);
-
352  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
353  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
354  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
355  stdAc::state_t toCommon(void) const;
-
356  String toString(void) const;
-
357 #ifndef UNIT_TEST
-
358 
-
359  private:
- -
361 #else // UNIT_TEST
-
362  IRsendTest _irsend;
-
364 #endif // UNIT_TEST
- -
367  void checksum(const uint16_t length = kHitachiAc1StateLength);
-
368 };
-
369 
- -
372  friend class IRHitachiAc344;
-
373  public:
-
374  explicit IRHitachiAc424(const uint16_t pin, const bool inverted = false,
-
375  const bool use_modulation = true);
-
376  virtual void stateReset(void);
-
377 #if SEND_HITACHI_AC424
-
378  virtual void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
-
383  int8_t calibrate(void) { return _irsend.calibrate(); }
-
384 #endif // SEND_HITACHI_AC424
-
385  void begin(void);
-
386  void on(void);
-
387  void off(void);
-
388  void setPower(const bool on);
-
389  bool getPower(void) const;
-
390  void setTemp(const uint8_t temp, bool setPrevious = true);
-
391  uint8_t getTemp(void) const;
-
392  void setFan(const uint8_t speed);
-
393  uint8_t getFan(void) const;
-
394  uint8_t getButton(void) const;
-
395  void setButton(const uint8_t button);
-
396  void setSwingVToggle(const bool on);
-
397  bool getSwingVToggle(void) const;
-
398  void setMode(const uint8_t mode);
-
399  uint8_t getMode(void) const;
-
400  uint8_t* getRaw(void);
-
401  virtual void setRaw(const uint8_t new_code[],
-
402  const uint16_t length = kHitachiAc424StateLength);
-
403  static uint8_t convertMode(const stdAc::opmode_t mode);
-
404  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
405  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
406  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
407  virtual stdAc::state_t toCommon(void) const;
-
408  virtual String toString(void) const;
-
409 #ifndef UNIT_TEST
-
410 
-
411  private:
- -
413 #else // UNIT_TEST
-
414  IRsendTest _irsend;
-
416 #endif // UNIT_TEST
- -
419  void setInvertedStates(void);
-
420  String _toString(void) const;
-
421  uint8_t _previoustemp;
-
422 };
-
423 
- -
426  public:
-
427  explicit IRHitachiAc3(const uint16_t pin, const bool inverted = false,
-
428  const bool use_modulation = true);
-
429 
-
430  void stateReset(void);
-
431 #if SEND_HITACHI_AC3
-
432  void send(const uint16_t repeat = kHitachiAcDefaultRepeat);
-
437  int8_t calibrate(void) { return _irsend.calibrate(); }
-
438 #endif // SEND_HITACHI_AC3
-
439  void begin(void);
-
440  uint8_t getMode(void);
-
441  uint8_t* getRaw(void);
-
442  void setRaw(const uint8_t new_code[],
-
443  const uint16_t length = kHitachiAc3StateLength);
-
444  static bool hasInvertedStates(const uint8_t state[], const uint16_t length);
-
445 #ifndef UNIT_TEST
-
446 
-
447  private:
- -
449 #else // UNIT_TEST
-
450  IRsendTest _irsend;
-
452 #endif // UNIT_TEST
- -
455  void setInvertedStates(const uint16_t length = kHitachiAc3StateLength);
-
456 };
-
457 
- -
460  public:
-
461  explicit IRHitachiAc344(const uint16_t pin, const bool inverted = false,
-
462  const bool use_modulation = true);
-
463  void stateReset(void) override;
-
464  void setRaw(const uint8_t new_code[],
-
465  const uint16_t length = kHitachiAc344StateLength) override;
-
466  stdAc::state_t toCommon(void) const override;
-
467 #if SEND_HITACHI_AC344
-
468  void send(const uint16_t repeat = kHitachiAcDefaultRepeat) override;
-
469 #endif // SEND_HITACHI_AC344
-
470  void setSwingV(const bool on);
-
471  bool getSwingV(void) const;
-
472  void setSwingH(const uint8_t position);
-
473  uint8_t getSwingH(void) const;
-
474  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
475  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
476  String toString(void) const override;
-
477 };
-
478 #endif // IR_HITACHI_H_
-
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Hitachi.cpp:1064
-
uint8_t _previoustemp
Definition: ir_Hitachi.h:421
-
const uint8_t kHitachiAc424Fan
Definition: ir_Hitachi.h:140
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)
Calculate the checksum for a given state.
Definition: ir_Hitachi.cpp:446
-
uint8_t Mode
Definition: ir_Hitachi.h:44
-
const uint8_t kHitachiAc1Fan
Definition: ir_Hitachi.h:218
-
const uint8_t kHitachiAc344SwingHRightMax
Definition: ir_Hitachi.h:167
-
IRHitachiAc3(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Hitachi.cpp:1350
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Hitachi.cpp:1083
-
const uint8_t kHitachiAcMinTemp
Definition: ir_Hitachi.h:80
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Hitachi.cpp:363
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Hitachi.h:412
-
void setTemp(const uint8_t temp, bool setPrevious=true)
Set the temperature.
Definition: ir_Hitachi.cpp:1108
-
const uint8_t kHitachiAcMaxTemp
Definition: ir_Hitachi.h:81
-
void setSleep(const uint8_t mode)
Set the Sleep setting of the A/C.
Definition: ir_Hitachi.cpp:680
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Hitachi.cpp:138
-
void off(void)
Change the power setting to Off.
Definition: ir_Hitachi.cpp:1073
-
const uint8_t kHitachiAcAuto
Definition: ir_Hitachi.h:71
-
uint8_t Sleep
Definition: ir_Hitachi.h:202
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Hitachi.cpp:583
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Hitachi.h:448
-
uint8_t pad0[10]
Definition: ir_Hitachi.h:42
-
const uint8_t kHitachiAc344ButtonFan
Definition: ir_Hitachi.h:128
-
Native representation of a Hitachi 224-bit A/C message.
Definition: ir_Hitachi.h:38
-
const uint8_t kHitachiAc1Model_A
Definition: ir_Hitachi.h:213
-
const uint8_t kHitachiAc344ButtonPowerMode
Definition: ir_Hitachi.h:127
-
uint8_t Power
Definition: ir_Hitachi.h:204
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Hitachi.cpp:279
-
void setPowerToggle(const bool on)
Change the power toggle setting.
Definition: ir_Hitachi.cpp:543
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a standard A/C horizontal swing into its native setting.
Definition: ir_Hitachi.cpp:1525
-
void checksum(const uint16_t length=kHitachiAc1StateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Hitachi.cpp:460
-
const uint16_t kHitachiAcStateLength
Definition: IRremoteESP8266.h:995
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Hitachi.cpp:209
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kHitachiAc344SwingHRight
Definition: ir_Hitachi.h:168
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Hitachi.cpp:1391
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Hitachi.h:437
-
uint8_t OnTimerLow
Definition: ir_Hitachi.h:197
-
void setSwingVertical(const bool on)
Set the Vertical Swing setting of the A/C.
Definition: ir_Hitachi.cpp:304
-
uint8_t raw[kHitachiAc424StateLength]
The state in native code.
Definition: ir_Hitachi.h:86
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Hitachi.cpp:425
-
Native representation of a Hitachi 104-bit A/C message.
Definition: ir_Hitachi.h:175
-
void send(const uint16_t repeat=kHitachiAcDefaultRepeat)
-
void setSwingHorizontal(const bool on)
Set the Horizontal Swing setting of the A/C.
Definition: ir_Hitachi.cpp:316
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Hitachi.cpp:1128
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Hitachi.cpp:1077
-
uint8_t pad[3]
Definition: ir_Hitachi.h:179
-
bool getSwingHorizontal(void) const
Get the Horizontal Swing setting of the A/C.
Definition: ir_Hitachi.cpp:310
-
uint8_t SwingToggle
Definition: ir_Hitachi.h:201
-
const uint16_t kHitachiAc1StateLength
Definition: IRremoteESP8266.h:998
-
void setSwingVToggle(const bool on)
Set the Vertical Swing toggle setting of the A/C.
Definition: ir_Hitachi.cpp:1174
-
uint8_t Fan
Definition: ir_Hitachi.h:101
-
const uint8_t kHitachiAc1ChecksumStartByte
Definition: ir_Hitachi.h:240
-
uint8_t raw[kHitachiAc1StateLength]
The state in native code.
Definition: ir_Hitachi.h:176
-
const uint8_t kHitachiAc344FanHigh
Definition: ir_Hitachi.h:159
-
void setOnTimer(const uint16_t mins)
Set the On Timer time.
Definition: ir_Hitachi.cpp:693
-
const uint8_t kHitachiAcFanHigh
Definition: ir_Hitachi.h:79
-
uint8_t pad1[9]
Definition: ir_Hitachi.h:63
-
const uint8_t kHitachiAc1Sleep3
Definition: ir_Hitachi.h:237
-
hitachi_ac1_remote_model_t getModel(void) const
Get/Detect the model of the A/C.
Definition: ir_Hitachi.cpp:500
-
const uint8_t kHitachiAc1TimerSize
Definition: ir_Hitachi.h:232
-
const uint8_t kHitachiAc344Fan
Definition: ir_Hitachi.h:144
-
uint8_t Mode
Definition: ir_Hitachi.h:100
-
Class for handling detailed Hitachi 53-byte/424-bit A/C messages.
Definition: ir_Hitachi.h:371
-
void setInvertedStates(void)
Update the internal consistency check for the protocol.
Definition: ir_Hitachi.cpp:1027
-
IRHitachiAc1(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Hitachi.cpp:420
-
void send(const uint16_t repeat=kHitachiAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Hitachi.cpp:490
-
const uint8_t kHitachiAc1Sleep1
Definition: ir_Hitachi.h:235
-
void send(const uint16_t repeat=kHitachiAcDefaultRepeat) override
Create and send the IR message to the A/C.
Definition: ir_Hitachi.cpp:1481
-
IRHitachiAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Hitachi.cpp:133
-
HitachiProtocol _
Definition: ir_Hitachi.h:296
- -
uint8_t SwingH
Definition: ir_Hitachi.h:206
-
const uint8_t kHitachiAc1Auto
Definition: ir_Hitachi.h:221
-
void setSwingV(const bool on)
Control the vertical swing setting.
Definition: ir_Hitachi.cpp:1495
-
const uint8_t kHitachiAc344MaxTemp
Definition: ir_Hitachi.h:137
-
const uint16_t kHitachiAc3StateLength
Definition: IRremoteESP8266.h:1002
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Hitachi.cpp:249
-
hitachi_ac1_remote_model_t
HITACHI_AC1 A/C model numbers.
Definition: IRsend.h:140
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Hitachi.h:315
-
const uint8_t kHitachiAc424ButtonSwingH
Definition: ir_Hitachi.h:126
-
const uint8_t kHitachiAc424ButtonTempDown
Definition: ir_Hitachi.h:123
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kHitachiAc344SwingHAuto
Definition: ir_Hitachi.h:166
-
void setSwingH(const bool on)
Set the Horizontal Swing setting of the A/C.
Definition: ir_Hitachi.cpp:666
-
const uint8_t kHitachiAc344Heat
Definition: ir_Hitachi.h:147
-
Class for handling detailed Hitachi 224-bit A/C messages.
Definition: ir_Hitachi.h:246
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kHitachiAc344SwingHLeftMax
Definition: ir_Hitachi.h:171
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kHitachiAc1StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Hitachi.cpp:468
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Hitachi.cpp:724
-
uint8_t SwingV
Definition: ir_Hitachi.h:115
-
const uint8_t kHitachiAc1FanLow
Definition: ir_Hitachi.h:225
-
Class for handling detailed Hitachi 344-bit A/C messages.
Definition: ir_Hitachi.h:459
-
const uint8_t kHitachiAc424MinTemp
Definition: ir_Hitachi.h:134
-
String toString(void) const override
Convert the internal state into a human readable string.
Definition: ir_Hitachi.cpp:1562
-
Hitachi1Protocol _
Definition: ir_Hitachi.h:366
-
const uint8_t kHitachiAc344FanAuto
Definition: ir_Hitachi.h:160
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint8_t Sum
Definition: ir_Hitachi.h:208
-
const uint8_t kHitachiAc1Model_B
Definition: ir_Hitachi.h:214
-
bool getSwingToggle(void) const
Get the Swing Toggle setting of the A/C.
Definition: ir_Hitachi.cpp:636
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Hitachi.cpp:336
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kHitachiAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Hitachi.cpp:163
-
const uint8_t kHitachiAc1FanHigh
Definition: ir_Hitachi.h:223
-
const uint8_t kHitachiAc424ButtonSwingV
Definition: ir_Hitachi.h:125
-
const uint8_t kHitachiAcDry
Definition: ir_Hitachi.h:74
-
void setButton(const uint8_t button)
Set the Button/Command pressed setting of the A/C.
Definition: ir_Hitachi.cpp:1166
-
const uint8_t kHitachiAc1Sleep2
Definition: ir_Hitachi.h:236
-
const uint8_t kHitachiAc424ButtonTempUp
Definition: ir_Hitachi.h:124
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Hitachi.cpp:1356
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Hitachi.cpp:1036
-
const uint8_t kHitachiAc424ButtonFan
Definition: ir_Hitachi.h:122
-
const uint8_t kHitachiAcFanAuto
Definition: ir_Hitachi.h:76
-
const uint8_t kHitachiAc344Dry
Definition: ir_Hitachi.h:146
-
Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages.
Definition: ir_Hitachi.h:425
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
void setModel(const hitachi_ac1_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Hitachi.cpp:509
-
const uint8_t kHitachiAc344FanLow
Definition: ir_Hitachi.h:157
-
const uint8_t kHitachiAc424FanMaxDry
Definition: ir_Hitachi.h:155
-
const uint8_t kHitachiAc424FanHigh
Definition: ir_Hitachi.h:152
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Hitachi.cpp:600
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Hitachi.cpp:1122
-
void setSwingToggle(const bool toggle)
Set the Swing toggle setting of the A/C.
Definition: ir_Hitachi.cpp:642
-
Class for handling detailed Hitachi 104-bit A/C messages.
Definition: ir_Hitachi.h:303
-
const uint8_t kHitachiAc344SwingHLeft
Definition: ir_Hitachi.h:170
-
uint8_t getSwingH(void) const
Get the current horizontal swing setting.
Definition: ir_Hitachi.cpp:1518
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Hitachi.cpp:1220
-
void on(void)
Change the power setting to On.
Definition: ir_Hitachi.cpp:548
-
const uint8_t kHitachiAc1TempSize
Definition: ir_Hitachi.h:228
-
uint8_t Temp
Definition: ir_Hitachi.h:190
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Hitachi.cpp:1206
-
uint8_t Power
Definition: ir_Hitachi.h:60
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Hitachi.cpp:523
-
uint8_t pad1[11]
Definition: ir_Hitachi.h:98
-
const uint8_t kHitachiAcFanMed
Definition: ir_Hitachi.h:78
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Hitachi.cpp:589
-
void on(void)
Change the power setting to On.
Definition: ir_Hitachi.cpp:220
-
uint8_t getMode(void)
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Hitachi.cpp:323
-
uint8_t Power
Definition: ir_Hitachi.h:105
-
static bool hasInvertedStates(const uint8_t state[], const uint16_t length)
Check if every second byte of the state, after the fixed header is inverted to the previous byte.
Definition: ir_Hitachi.cpp:1385
-
const uint16_t kHitachiAc424StateLength
Definition: IRremoteESP8266.h:1008
-
virtual stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Hitachi.cpp:1246
-
uint8_t remote_state[kHitachiAc3StateLength]
The state in native code.
Definition: ir_Hitachi.h:454
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Hitachi.cpp:751
-
void off(void)
Change the power setting to Off.
Definition: ir_Hitachi.cpp:223
-
const uint8_t kHitachiAc1Heat
Definition: ir_Hitachi.h:220
-
const uint16_t kHitachiAcFreq
Definition: ir_Hitachi.h:70
-
bool getSwingVertical(void) const
Get the Vertical Swing setting of the A/C.
Definition: ir_Hitachi.cpp:298
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Hitachi.h:383
-
const uint8_t kHitachiAcFanLow
Definition: ir_Hitachi.h:77
-
void stateReset(void) override
Reset the internal state to auto fan, cooling, 23° Celsius.
Definition: ir_Hitachi.cpp:1472
-
const uint8_t kHitachiAc344FanMin
Definition: ir_Hitachi.h:156
-
const uint8_t kHitachiAc424FanAuto
Definition: ir_Hitachi.h:153
-
void setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Hitachi.cpp:195
-
const uint8_t kHitachiAc1FanMed
Definition: ir_Hitachi.h:224
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Hitachi.cpp:529
-
bool getSwingH(void) const
Get the Horizontal Swing setting of the A/C.
Definition: ir_Hitachi.cpp:660
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Hitachi.cpp:775
-
IRHitachiAc424(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Hitachi.cpp:996
-
const uint8_t kHitachiAcCool
Definition: ir_Hitachi.h:73
-
const uint8_t kHitachiAc1Sleep4
Definition: ir_Hitachi.h:238
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Hitachi.cpp:1539
-
void setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc1StateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Hitachi.cpp:483
-
const uint8_t kHitachiAcHeat
Definition: ir_Hitachi.h:72
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Hitachi.cpp:1032
-
friend class IRHitachiAc344
Definition: ir_Hitachi.h:372
-
const uint8_t kHitachiAc424MaxTemp
Definition: ir_Hitachi.h:135
-
void setInvertedStates(const uint16_t length=kHitachiAc3StateLength)
Invert every second byte of the internal state, after the fixed header.
Definition: ir_Hitachi.cpp:1376
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Hitachi.cpp:803
-
const uint16_t kHitachiAc344StateLength
Definition: IRremoteESP8266.h:1006
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Hitachi.h:290
-
void send(const uint16_t repeat=kHitachiAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Hitachi.cpp:202
-
Hitachi424Protocol _
Definition: ir_Hitachi.h:418
-
const uint8_t kHitachiAc424FanTemp
Definition: ir_Hitachi.h:138
-
const uint8_t kHitachiAc1Cool
Definition: ir_Hitachi.h:219
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Hitachi.cpp:275
-
uint8_t _previoustemp
Definition: ir_Hitachi.h:298
-
const uint8_t kHitachiAc1FanAuto
Definition: ir_Hitachi.h:222
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Hitachi.cpp:157
-
uint16_t getOnTimer(void) const
Get the On Timer vtime of the A/C.
Definition: ir_Hitachi.cpp:701
-
const uint8_t kHitachiAc424PowerOff
Definition: ir_Hitachi.h:164
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Hitachi.cpp:1058
-
const uint8_t kHitachiAc424FanMin
Definition: ir_Hitachi.h:149
-
uint8_t Temp
Definition: ir_Hitachi.h:96
-
virtual void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Hitachi.cpp:1002
-
const uint8_t kHitachiAc344FanMax
Definition: ir_Hitachi.h:161
-
uint8_t Temp
Definition: ir_Hitachi.h:46
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Hitachi.h:360
-
bool getSwingV(void) const
Get the current vertical swing setting.
Definition: ir_Hitachi.cpp:1502
-
const uint8_t kHitachiAc424Dry
Definition: ir_Hitachi.h:142
-
void setSwingH(const uint8_t position)
Control the horizontal swing setting.
Definition: ir_Hitachi.cpp:1508
-
uint8_t pad2[7]
Definition: ir_Hitachi.h:107
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Hitachi.cpp:561
-
uint16_t getOffTimer(void) const
Get the Off Timer vtime of the A/C.
Definition: ir_Hitachi.cpp:716
-
const uint16_t kHitachiAcDefaultRepeat
Definition: IRremoteESP8266.h:997
-
uint8_t Fan
Definition: ir_Hitachi.h:186
-
const uint8_t kHitachiAc424PowerOn
Definition: ir_Hitachi.h:163
-
const uint8_t kHitachiAc344SwingHMiddle
Definition: ir_Hitachi.h:169
-
void checksum(const uint16_t length=kHitachiAcStateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Hitachi.cpp:172
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Hitachi.cpp:1193
-
uint8_t Fan
Definition: ir_Hitachi.h:50
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Hitachi.cpp:555
-
void setFan(const uint8_t speed, const bool force=false)
Set the speed of the fan.
Definition: ir_Hitachi.cpp:607
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Hitachi.cpp:737
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Hitachi.cpp:375
-
void setSwingV(const bool on)
Set the Vertical Swing setting of the A/C.
Definition: ir_Hitachi.cpp:654
-
uint8_t SwingV
Definition: ir_Hitachi.h:53
-
uint8_t OffTimerHigh
Definition: ir_Hitachi.h:195
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Hitachi.cpp:401
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kHitachiAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Hitachi.cpp:180
-
const uint8_t kHitachiAc424FanMedium
Definition: ir_Hitachi.h:151
-
bool getSwingV(void) const
Get the Vertical Swing setting of the A/C.
Definition: ir_Hitachi.cpp:648
-
const uint8_t kHitachiAc344ButtonTempUp
Definition: ir_Hitachi.h:130
-
stdAc::state_t toCommon(void) const override
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Hitachi.cpp:1552
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Hitachi.cpp:350
-
const uint8_t kHitachiAc424Cool
Definition: ir_Hitachi.h:141
-
void setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc3StateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Hitachi.cpp:1403
-
const uint8_t kHitachiAcFan
Definition: ir_Hitachi.h:75
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Hitachi.cpp:1395
-
uint8_t Sum
Definition: ir_Hitachi.h:65
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Hitachi.cpp:440
-
bool getPowerToggle(void) const
Get the value of the current power toggle setting.
Definition: ir_Hitachi.cpp:537
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Hitachi.cpp:187
-
void setOffTimer(const uint16_t mins)
Set the Off Timer time.
Definition: ir_Hitachi.cpp:708
-
uint8_t Mode
Definition: ir_Hitachi.h:187
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Hitachi.cpp:764
-
uint8_t Model
Definition: ir_Hitachi.h:182
-
uint8_t OnTimerHigh
Definition: ir_Hitachi.h:199
-
uint8_t getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Hitachi.cpp:673
-
virtual void send(const uint16_t repeat=kHitachiAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Hitachi.cpp:1051
-
const uint8_t kHitachiAc344ButtonSwingH
Definition: ir_Hitachi.h:132
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Hitachi.cpp:215
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Hitachi.cpp:227
-
uint8_t SwingV
Definition: ir_Hitachi.h:205
-
virtual void setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc424StateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Hitachi.cpp:1044
-
void setRaw(const uint8_t new_code[], const uint16_t length=kHitachiAc344StateLength) override
Set the internal state from a valid code for this protocol.
Definition: ir_Hitachi.cpp:1489
-
const uint8_t kHitachiAc424FanLow
Definition: ir_Hitachi.h:150
-
uint8_t PowerToggle
Definition: ir_Hitachi.h:203
-
const uint8_t kHitachiAcAutoTemp
Definition: ir_Hitachi.h:82
-
Native representation of a Hitachi 53-byte/424-bit A/C message.
Definition: ir_Hitachi.h:85
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Hitachi.h:257
-
const uint8_t kHitachiAc344FanMedium
Definition: ir_Hitachi.h:158
-
const uint8_t kHitachiAc1Dry
Definition: ir_Hitachi.h:217
-
const uint8_t kHitachiAc344Cool
Definition: ir_Hitachi.h:145
-
const uint8_t kHitachiAc424FanMax
Definition: ir_Hitachi.h:154
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Hitachi.cpp:1101
-
const uint8_t kHitachiAc424Heat
Definition: ir_Hitachi.h:143
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Hitachi.cpp:1233
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Hitachi.cpp:231
-
uint8_t raw[kHitachiAcStateLength]
The state in native code.
Definition: ir_Hitachi.h:39
-
uint8_t SwingH
Definition: ir_Hitachi.h:56
-
uint8_t Button
Definition: ir_Hitachi.h:91
-
uint8_t OffTimerLow
Definition: ir_Hitachi.h:193
-
bool getSwingVToggle(void) const
Get the Vertical Swing toggle setting of the A/C.
Definition: ir_Hitachi.cpp:1186
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kHitachiAc344ButtonTempDown
Definition: ir_Hitachi.h:129
-
const uint8_t kHitachiAc424ButtonPowerMode
Definition: ir_Hitachi.h:121
-
const uint8_t kHitachiAc1TempAuto
Definition: ir_Hitachi.h:230
-
const uint8_t kHitachiAc344MinTemp
Definition: ir_Hitachi.h:136
-
const uint8_t kHitachiAc1TempDelta
Definition: ir_Hitachi.h:229
-
void on(void)
Change the power setting to On.
Definition: ir_Hitachi.cpp:1070
-
uint8_t getButton(void) const
Get the Button/Command setting of the A/C.
Definition: ir_Hitachi.cpp:1160
-
void off(void)
Change the power setting to Off.
Definition: ir_Hitachi.cpp:551
-
String _toString(void) const
Convert the internal state into a human readable string for the settings that are common to protocols...
Definition: ir_Hitachi.cpp:1274
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Hitachi.cpp:475
-
const uint8_t kHitachiAc344ButtonSwingV
Definition: ir_Hitachi.h:131
-
const uint8_t kHitachiAc1SleepOff
Definition: ir_Hitachi.h:234
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Hitachi.cpp:255
-
uint8_t SwingH
Definition: ir_Hitachi.h:109
-
uint8_t pad0[11]
Definition: ir_Hitachi.h:89
-
virtual String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Hitachi.cpp:1315
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Inax_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Inax_8cpp.html deleted file mode 100644 index 5e5f3eaf4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Inax_8cpp.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Inax.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Inax.cpp File Reference
-
-
- -

Support for the Inax Robot Toilet IR protocols. -More...

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

-Variables

const uint16_t kInaxTick = 500
 
const uint16_t kInaxHdrMark = 9000
 
const uint16_t kInaxHdrSpace = 4500
 
const uint16_t kInaxBitMark = 560
 
const uint16_t kInaxOneSpace = 1675
 
const uint16_t kInaxZeroSpace = kInaxBitMark
 
const uint16_t kInaxMinGap = 40000
 
-

Detailed Description

-

Variable Documentation

- -

◆ kInaxBitMark

- -
-
- - - - -
const uint16_t kInaxBitMark = 560
-
- -
-
- -

◆ kInaxHdrMark

- -
-
- - - - -
const uint16_t kInaxHdrMark = 9000
-
- -
-
- -

◆ kInaxHdrSpace

- -
-
- - - - -
const uint16_t kInaxHdrSpace = 4500
-
- -
-
- -

◆ kInaxMinGap

- -
-
- - - - -
const uint16_t kInaxMinGap = 40000
-
- -
-
- -

◆ kInaxOneSpace

- -
-
- - - - -
const uint16_t kInaxOneSpace = 1675
-
- -
-
- -

◆ kInaxTick

- -
-
- - - - -
const uint16_t kInaxTick = 500
-
- -
-
- -

◆ kInaxZeroSpace

- -
-
- - - - -
const uint16_t kInaxZeroSpace = kInaxBitMark
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__JVC_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__JVC_8cpp.html deleted file mode 100644 index 2f61880a6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__JVC_8cpp.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_JVC.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_JVC.cpp File Reference
-
-
- -

Support for JVC protocols. Originally added by Kristian Lauszus Thanks to zenwheel and other people at the original blog post. -More...

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

-Variables

const uint16_t kJvcTick = 75
 
const uint16_t kJvcHdrMarkTicks = 112
 
const uint16_t kJvcHdrMark = kJvcHdrMarkTicks * kJvcTick
 
const uint16_t kJvcHdrSpaceTicks = 56
 
const uint16_t kJvcHdrSpace = kJvcHdrSpaceTicks * kJvcTick
 
const uint16_t kJvcBitMarkTicks = 7
 
const uint16_t kJvcBitMark = kJvcBitMarkTicks * kJvcTick
 
const uint16_t kJvcOneSpaceTicks = 23
 
const uint16_t kJvcOneSpace = kJvcOneSpaceTicks * kJvcTick
 
const uint16_t kJvcZeroSpaceTicks = 7
 
const uint16_t kJvcZeroSpace = kJvcZeroSpaceTicks * kJvcTick
 
const uint16_t kJvcRptLengthTicks = 800
 
const uint16_t kJvcRptLength = kJvcRptLengthTicks * kJvcTick
 
const uint16_t kJvcMinGapTicks
 
const uint16_t kJvcMinGap = kJvcMinGapTicks * kJvcTick
 
-

Detailed Description

-

Support for JVC protocols. Originally added by Kristian Lauszus Thanks to zenwheel and other people at the original blog post.

-
See also
http://www.sbprojects.net/knowledge/ir/jvc.php
-

Variable Documentation

- -

◆ kJvcBitMark

- -
-
- - - - -
const uint16_t kJvcBitMark = kJvcBitMarkTicks * kJvcTick
-
- -
-
- -

◆ kJvcBitMarkTicks

- -
-
- - - - -
const uint16_t kJvcBitMarkTicks = 7
-
- -
-
- -

◆ kJvcHdrMark

- -
-
- - - - -
const uint16_t kJvcHdrMark = kJvcHdrMarkTicks * kJvcTick
-
- -
-
- -

◆ kJvcHdrMarkTicks

- -
-
- - - - -
const uint16_t kJvcHdrMarkTicks = 112
-
- -
-
- -

◆ kJvcHdrSpace

- -
-
- - - - -
const uint16_t kJvcHdrSpace = kJvcHdrSpaceTicks * kJvcTick
-
- -
-
- -

◆ kJvcHdrSpaceTicks

- -
-
- - - - -
const uint16_t kJvcHdrSpaceTicks = 56
-
- -
-
- -

◆ kJvcMinGap

- -
-
- - - - -
const uint16_t kJvcMinGap = kJvcMinGapTicks * kJvcTick
-
- -
-
- -

◆ kJvcMinGapTicks

- -
-
- - - - -
const uint16_t kJvcMinGapTicks
-
-
- -

◆ kJvcOneSpace

- -
-
- - - - -
const uint16_t kJvcOneSpace = kJvcOneSpaceTicks * kJvcTick
-
- -
-
- -

◆ kJvcOneSpaceTicks

- -
-
- - - - -
const uint16_t kJvcOneSpaceTicks = 23
-
- -
-
- -

◆ kJvcRptLength

- -
-
- - - - -
const uint16_t kJvcRptLength = kJvcRptLengthTicks * kJvcTick
-
- -
-
- -

◆ kJvcRptLengthTicks

- -
-
- - - - -
const uint16_t kJvcRptLengthTicks = 800
-
- -
-
- -

◆ kJvcTick

- -
-
- - - - -
const uint16_t kJvcTick = 75
-
- -
-
- -

◆ kJvcZeroSpace

- -
-
- - - - -
const uint16_t kJvcZeroSpace = kJvcZeroSpaceTicks * kJvcTick
-
- -
-
- -

◆ kJvcZeroSpaceTicks

- -
-
- - - - -
const uint16_t kJvcZeroSpaceTicks = 7
-
- -
-
-
-
const uint16_t kJvcHdrSpaceTicks
Definition: ir_JVC.cpp:23
-
const uint16_t kJvcBitMarkTicks
Definition: ir_JVC.cpp:25
-
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:1012
-
const uint16_t kJvcOneSpaceTicks
Definition: ir_JVC.cpp:27
-
const uint16_t kJvcHdrMarkTicks
Definition: ir_JVC.cpp:21
-
const uint16_t kJvcRptLengthTicks
Definition: ir_JVC.cpp:31
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8cpp.html deleted file mode 100644 index 286608a30..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8cpp.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Kelvinator.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Kelvinator.cpp File Reference
-
-
- -

Support for Kelvinator A/C protocols. Code to emulate IR Kelvinator YALIF remote control unit, which should control at least the following Kelvinator A/C units: KSV26CRC, KSV26HRC, KSV35CRC, KSV35HRC, KSV53HRC, KSV62HRC, KSV70CRC, KSV70HRC, KSV80HRC. -More...

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

-Variables

const uint16_t kKelvinatorTick = 85
 
const uint16_t kKelvinatorHdrMarkTicks = 106
 
const uint16_t kKelvinatorHdrMark = kKelvinatorHdrMarkTicks * kKelvinatorTick
 
const uint16_t kKelvinatorHdrSpaceTicks = 53
 
const uint16_t kKelvinatorHdrSpace = kKelvinatorHdrSpaceTicks * kKelvinatorTick
 
const uint16_t kKelvinatorBitMarkTicks = 8
 
const uint16_t kKelvinatorBitMark = kKelvinatorBitMarkTicks * kKelvinatorTick
 
const uint16_t kKelvinatorOneSpaceTicks = 18
 
const uint16_t kKelvinatorOneSpace = kKelvinatorOneSpaceTicks * kKelvinatorTick
 
const uint16_t kKelvinatorZeroSpaceTicks = 6
 
const uint16_t kKelvinatorZeroSpace
 
const uint16_t kKelvinatorGapSpaceTicks = 235
 
const uint16_t kKelvinatorGapSpace = kKelvinatorGapSpaceTicks * kKelvinatorTick
 
const uint8_t kKelvinatorCmdFooter = 2
 
const uint8_t kKelvinatorCmdFooterBits = 3
 
const uint8_t kKelvinatorChecksumStart = 10
 
-

Detailed Description

-

Support for Kelvinator A/C protocols. Code to emulate IR Kelvinator YALIF remote control unit, which should control at least the following Kelvinator A/C units: KSV26CRC, KSV26HRC, KSV35CRC, KSV35HRC, KSV53HRC, KSV62HRC, KSV70CRC, KSV70HRC, KSV80HRC.

-
Note
Unsupported:
    -
  • All Sleep modes.
  • -
  • All Timer modes.
  • -
  • "I Feel" button & mode.
  • -
  • Energy Saving mode.
  • -
  • Low Heat mode.
  • -
  • Fahrenheit.
  • -
-
-

Variable Documentation

- -

◆ kKelvinatorBitMark

- -
-
- - - - -
const uint16_t kKelvinatorBitMark = kKelvinatorBitMarkTicks * kKelvinatorTick
-
- -
-
- -

◆ kKelvinatorBitMarkTicks

- -
-
- - - - -
const uint16_t kKelvinatorBitMarkTicks = 8
-
- -
-
- -

◆ kKelvinatorChecksumStart

- -
-
- - - - -
const uint8_t kKelvinatorChecksumStart = 10
-
- -
-
- -

◆ kKelvinatorCmdFooter

- -
-
- - - - -
const uint8_t kKelvinatorCmdFooter = 2
-
- -
-
- -

◆ kKelvinatorCmdFooterBits

- -
-
- - - - -
const uint8_t kKelvinatorCmdFooterBits = 3
-
- -
-
- -

◆ kKelvinatorGapSpace

- -
-
- - - - -
const uint16_t kKelvinatorGapSpace = kKelvinatorGapSpaceTicks * kKelvinatorTick
-
- -
-
- -

◆ kKelvinatorGapSpaceTicks

- -
-
- - - - -
const uint16_t kKelvinatorGapSpaceTicks = 235
-
- -
-
- -

◆ kKelvinatorHdrMark

- -
-
- - - - -
const uint16_t kKelvinatorHdrMark = kKelvinatorHdrMarkTicks * kKelvinatorTick
-
- -
-
- -

◆ kKelvinatorHdrMarkTicks

- -
-
- - - - -
const uint16_t kKelvinatorHdrMarkTicks = 106
-
- -
-
- -

◆ kKelvinatorHdrSpace

- -
-
- - - - -
const uint16_t kKelvinatorHdrSpace = kKelvinatorHdrSpaceTicks * kKelvinatorTick
-
- -
-
- -

◆ kKelvinatorHdrSpaceTicks

- -
-
- - - - -
const uint16_t kKelvinatorHdrSpaceTicks = 53
-
- -
-
- -

◆ kKelvinatorOneSpace

- -
-
- - - - -
const uint16_t kKelvinatorOneSpace = kKelvinatorOneSpaceTicks * kKelvinatorTick
-
- -
-
- -

◆ kKelvinatorOneSpaceTicks

- -
-
- - - - -
const uint16_t kKelvinatorOneSpaceTicks = 18
-
- -
-
- -

◆ kKelvinatorTick

- -
-
- - - - -
const uint16_t kKelvinatorTick = 85
-
- -
-
- -

◆ kKelvinatorZeroSpace

- -
-
- - - - -
const uint16_t kKelvinatorZeroSpace
-
-Initial value: -
-
- -

◆ kKelvinatorZeroSpaceTicks

- -
-
- - - - -
const uint16_t kKelvinatorZeroSpaceTicks = 6
-
- -
-
-
-
const uint16_t kKelvinatorZeroSpaceTicks
Definition: ir_Kelvinator.cpp:39
-
const uint16_t kKelvinatorTick
Definition: ir_Kelvinator.cpp:30
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h.html deleted file mode 100644 index c76e2cf2f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Kelvinator.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Kelvinator.h File Reference
-
-
- -

Support for Kelvinator A/C protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  KelvinatorProtocol
 Native representation of a Kelvinator A/C message. More...
 
class  IRKelvinatorAC
 Class for handling detailed Kelvinator A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kKelvinatorAuto = 0
 
const uint8_t kKelvinatorCool = 1
 
const uint8_t kKelvinatorDry = 2
 
const uint8_t kKelvinatorFan = 3
 
const uint8_t kKelvinatorHeat = 4
 
const uint8_t kKelvinatorBasicFanMax = 3
 
const uint8_t kKelvinatorFanAuto = 0
 
const uint8_t kKelvinatorFanMin = 1
 
const uint8_t kKelvinatorFanMax = 5
 
const uint8_t kKelvinatorMinTemp = 16
 
const uint8_t kKelvinatorMaxTemp = 30
 
const uint8_t kKelvinatorAutoTemp = 25
 
-

Detailed Description

-

Support for Kelvinator A/C protocols.

-

Variable Documentation

- -

◆ kKelvinatorAuto

- -
-
- - - - -
const uint8_t kKelvinatorAuto = 0
-
- -
-
- -

◆ kKelvinatorAutoTemp

- -
-
- - - - -
const uint8_t kKelvinatorAutoTemp = 25
-
- -
-
- -

◆ kKelvinatorBasicFanMax

- -
-
- - - - -
const uint8_t kKelvinatorBasicFanMax = 3
-
- -
-
- -

◆ kKelvinatorCool

- -
-
- - - - -
const uint8_t kKelvinatorCool = 1
-
- -
-
- -

◆ kKelvinatorDry

- -
-
- - - - -
const uint8_t kKelvinatorDry = 2
-
- -
-
- -

◆ kKelvinatorFan

- -
-
- - - - -
const uint8_t kKelvinatorFan = 3
-
- -
-
- -

◆ kKelvinatorFanAuto

- -
-
- - - - -
const uint8_t kKelvinatorFanAuto = 0
-
- -
-
- -

◆ kKelvinatorFanMax

- -
-
- - - - -
const uint8_t kKelvinatorFanMax = 5
-
- -
-
- -

◆ kKelvinatorFanMin

- -
-
- - - - -
const uint8_t kKelvinatorFanMin = 1
-
- -
-
- -

◆ kKelvinatorHeat

- -
-
- - - - -
const uint8_t kKelvinatorHeat = 4
-
- -
-
- -

◆ kKelvinatorMaxTemp

- -
-
- - - - -
const uint8_t kKelvinatorMaxTemp = 30
-
- -
-
- -

◆ kKelvinatorMinTemp

- -
-
- - - - -
const uint8_t kKelvinatorMinTemp = 16
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h_source.html deleted file mode 100644 index eade5def5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Kelvinator_8h_source.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Kelvinator.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Kelvinator.h
-
-
-Go to the documentation of this file.
1 // Copyright 2016 David Conran
-
4 
-
5 // Supports:
-
6 // Brand: Kelvinator, Model: YALIF Remote
-
7 // Brand: Kelvinator, Model: KSV26CRC A/C
-
8 // Brand: Kelvinator, Model: KSV26HRC A/C
-
9 // Brand: Kelvinator, Model: KSV35CRC A/C
-
10 // Brand: Kelvinator, Model: KSV35HRC A/C
-
11 // Brand: Kelvinator, Model: KSV53HRC A/C
-
12 // Brand: Kelvinator, Model: KSV62HRC A/C
-
13 // Brand: Kelvinator, Model: KSV70CRC A/C
-
14 // Brand: Kelvinator, Model: KSV70HRC A/C
-
15 // Brand: Kelvinator, Model: KSV80HRC A/C
-
16 // Brand: Green, Model: YAPOF3 remote
-
17 // Brand: Sharp, Model: YB1FA remote
-
18 // Brand: Sharp, Model: A5VEY A/C
-
19 
-
20 #ifndef IR_KELVINATOR_H_
-
21 #define IR_KELVINATOR_H_
-
22 
-
23 #define __STDC_LIMIT_MACROS
-
24 #include <stdint.h>
-
25 #ifndef UNIT_TEST
-
26 #include <Arduino.h>
-
27 #endif
-
28 #include "IRremoteESP8266.h"
-
29 #include "IRsend.h"
-
30 #ifdef UNIT_TEST
-
31 #include "IRsend_test.h"
-
32 #endif
-
33 
- - -
37  struct {
-
38  // Byte 0
-
39  uint8_t Mode :3;
-
40  uint8_t Power :1;
-
41  uint8_t BasicFan :2;
-
42  uint8_t VentSwing :1;
-
43  uint8_t :1; // Sleep Modes 1 & 3 (1 = On, 0 = Off)
-
44  // Byte 1
-
45  uint8_t Temp :4; // Degrees C.
-
46  uint8_t :4;
-
47  // Byte 2
-
48  uint8_t :4;
-
49  uint8_t Turbo :1;
-
50  uint8_t Light :1;
-
51  uint8_t IonFilter :1;
-
52  uint8_t XFan :1;
-
53  // Byte 3
-
54  uint8_t :4;
-
55  uint8_t :2; // (possibly timer related) (Typically 0b01)
-
56  uint8_t :2; // End of command block (B01)
-
57  // (B010 marker and a gap of 20ms)
-
58  // Byte 4
-
59  uint8_t SwingV :1;
-
60  uint8_t :3;
-
61  uint8_t SwingH :1;
-
62  uint8_t :3;
-
63  // Byte 5~6
-
64  uint8_t pad0[2]; // Timer related. Typically 0 except when timer in use.
-
65  // Byte 7
-
66  uint8_t :4; // (Used in Timer mode)
-
67  uint8_t Sum1 :4; // checksum of the previous bytes (0-6)
-
68  // (gap of 40ms)
-
69  // (header mark and space)
-
70  // Byte 8~10
-
71  uint8_t pad1[3]; // Repeat of byte 0~2
-
72  // Byte 11
-
73  uint8_t :4;
-
74  uint8_t :2; // (possibly timer related) (Typically 0b11)
-
75  uint8_t :2; // End of command block (B01)
-
76  // (B010 marker and a gap of 20ms)
-
77  // Byte 12
-
78  uint8_t :1; // Sleep mode 2 (1 = On, 0=Off)
-
79  uint8_t :6; // (Used in Sleep Mode 3, Typically 0b000000)
-
80  uint8_t Quiet :1;
-
81  // Byte 13
-
82  uint8_t :8; // (Sleep Mode 3 related, Typically 0x00)
-
83  // Byte 14
-
84  uint8_t :4; // (Sleep Mode 3 related, Typically 0b0000)
-
85  uint8_t Fan :3;
-
86  // Byte 15
-
87  uint8_t :4;
-
88  uint8_t Sum2 :4; // checksum of the previous bytes (8-14)
-
89  };
-
90 };
-
91 
-
92 // Constants
-
93 const uint8_t kKelvinatorAuto = 0; // (temp = 25C)
-
94 const uint8_t kKelvinatorCool = 1;
-
95 const uint8_t kKelvinatorDry = 2; // (temp = 25C, but not shown)
-
96 const uint8_t kKelvinatorFan = 3;
-
97 const uint8_t kKelvinatorHeat = 4;
-
98 const uint8_t kKelvinatorBasicFanMax = 3;
-
99 const uint8_t kKelvinatorFanAuto = 0;
-
100 const uint8_t kKelvinatorFanMin = 1;
-
101 const uint8_t kKelvinatorFanMax = 5;
-
102 const uint8_t kKelvinatorMinTemp = 16; // 16C
-
103 const uint8_t kKelvinatorMaxTemp = 30; // 30C
-
104 const uint8_t kKelvinatorAutoTemp = 25; // 25C
-
105 
-
106 // Legacy defines (Deprecated)
-
107 #define KELVINATOR_MIN_TEMP kKelvinatorMinTemp
-
108 #define KELVINATOR_MAX_TEMP kKelvinatorMaxTemp
-
109 #define KELVINATOR_HEAT kKelvinatorHeat
-
110 #define KELVINATOR_FAN_MAX kKelvinatorFanMax
-
111 #define KELVINATOR_FAN_AUTO kKelvinatorFanAuto
-
112 #define KELVINATOR_FAN kKelvinatorFan
-
113 #define KELVINATOR_DRY kKelvinatorDry
-
114 #define KELVINATOR_COOL kKelvinatorCool
-
115 #define KELVINATOR_BASIC_FAN_MAX kKelvinatorBasicFanMax
-
116 #define KELVINATOR_AUTO_TEMP kKelvinatorAutoTemp
-
117 #define KELVINATOR_AUTO kKelvinatorAuto
-
118 
-
119 // Classes
- -
122  public:
-
123  explicit IRKelvinatorAC(const uint16_t pin, const bool inverted = false,
-
124  const bool use_modulation = true);
-
125  void stateReset(void);
-
126 #if SEND_KELVINATOR
-
127  void send(const uint16_t repeat = kKelvinatorDefaultRepeat);
-
132  int8_t calibrate(void) { return _irsend.calibrate(); }
-
133 #endif // SEND_KELVINATOR
-
134  void begin(void);
-
135  void on(void);
-
136  void off(void);
-
137  void setPower(const bool on);
-
138  bool getPower(void) const;
-
139  void setTemp(const uint8_t degrees);
-
140  uint8_t getTemp(void) const;
-
141  void setFan(const uint8_t speed);
-
142  uint8_t getFan(void) const;
-
143  void setMode(const uint8_t mode);
-
144  uint8_t getMode(void) const;
-
145  void setSwingVertical(const bool on);
-
146  bool getSwingVertical(void) const;
-
147  void setSwingHorizontal(const bool on);
-
148  bool getSwingHorizontal(void) const;
-
149  void setQuiet(const bool on);
-
150  bool getQuiet(void) const;
-
151  void setIonFilter(const bool on);
-
152  bool getIonFilter(void) const;
-
153  void setLight(const bool on);
-
154  bool getLight(void) const;
-
155  void setXFan(const bool on);
-
156  bool getXFan(void) const;
-
157  void setTurbo(const bool on);
-
158  bool getTurbo(void) const;
-
159  uint8_t* getRaw(void);
-
160  void setRaw(const uint8_t new_code[]);
-
161  static uint8_t calcBlockChecksum(
-
162  const uint8_t* block, const uint16_t length = kKelvinatorStateLength / 2);
-
163  static bool validChecksum(const uint8_t state[],
-
164  const uint16_t length = kKelvinatorStateLength);
-
165  static uint8_t convertMode(const stdAc::opmode_t mode);
-
166  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
167  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
168  stdAc::state_t toCommon(void) const;
-
169  String toString(void) const;
-
170 #ifndef UNIT_TEST
-
171 
-
172  private:
- -
174 #else // UNIT_TEST
-
175  IRsendTest _irsend;
-
177 #endif // UNIT_TEST
- -
180  void checksum(void);
-
181  void fixup(void);
-
182 };
-
183 
-
184 #endif // IR_KELVINATOR_H_
-
-
void setSwingHorizontal(const bool on)
Control the current horizontal swing setting.
Definition: ir_Kelvinator.cpp:292
-
void stateReset(void)
Reset the internals of the object to a known good state.
Definition: ir_Kelvinator.cpp:114
-
void setTurbo(const bool on)
Control the current Turbo setting.
Definition: ir_Kelvinator.cpp:358
-
const uint8_t kKelvinatorFanAuto
Definition: ir_Kelvinator.h:99
-
void on(void)
Set the internal state to have the power on.
Definition: ir_Kelvinator.cpp:196
-
const uint8_t kKelvinatorFanMax
Definition: ir_Kelvinator.h:101
-
const uint8_t kKelvinatorCool
Definition: ir_Kelvinator.h:94
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
void setLight(const bool on)
Control the current Light setting. i.e. The LED display on the A/C unit that shows the basic settings...
Definition: ir_Kelvinator.cpp:330
-
uint8_t IonFilter
Definition: ir_Kelvinator.h:51
-
uint8_t SwingV
Definition: ir_Kelvinator.h:59
-
uint8_t pad0[2]
Definition: ir_Kelvinator.h:64
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed to it's stdAc::fanspeed_t equivalent.
Definition: ir_Kelvinator.cpp:397
-
const uint8_t kKelvinatorAutoTemp
Definition: ir_Kelvinator.h:104
-
uint8_t VentSwing
Definition: ir_Kelvinator.h:42
-
uint8_t * getRaw(void)
Get the raw state of the object, suitable to be sent with the appropriate IRsend object method.
Definition: ir_Kelvinator.cpp:146
- -
bool getLight(void) const
Is the Light (Display) setting on?
Definition: ir_Kelvinator.cpp:336
-
uint8_t XFan
Definition: ir_Kelvinator.h:52
-
void setIonFilter(const bool on)
Control the current Ion Filter setting.
Definition: ir_Kelvinator.cpp:317
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Kelvinator.cpp:223
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Kelvinator.cpp:229
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kKelvinatorMinTemp
Definition: ir_Kelvinator.h:102
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Kelvinator.h:132
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
std::string String
Definition: IRremoteESP8266.h:1217
-
bool getSwingHorizontal(void) const
Is the horizontal swing setting on?
Definition: ir_Kelvinator.cpp:299
-
void setPower(const bool on)
Set the internal state to have the desired power.
Definition: ir_Kelvinator.cpp:203
-
void setMode(const uint8_t mode)
Set the desired operation mode.
Definition: ir_Kelvinator.cpp:257
-
void send(const uint16_t repeat=kKelvinatorDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Kelvinator.cpp:138
-
void setRaw(const uint8_t new_code[])
Set the raw state of the object.
Definition: ir_Kelvinator.cpp:153
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Kelvinator.cpp:121
-
static uint8_t calcBlockChecksum(const uint8_t *block, const uint16_t length=kKelvinatorStateLength/2)
Calculate the checksum for a given block of state.
Definition: ir_Kelvinator.cpp:162
-
uint8_t Power
Definition: ir_Kelvinator.h:40
- -
IRsend _irsend
Instance of the IR send class.
Definition: ir_Kelvinator.h:173
-
uint8_t Light
Definition: ir_Kelvinator.h:50
-
uint8_t raw[kKelvinatorStateLength]
The state in IR code form.
Definition: ir_Kelvinator.h:36
-
bool getPower(void) const
Get the power setting from the internal state.
Definition: ir_Kelvinator.cpp:209
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kKelvinatorStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Kelvinator.cpp:184
-
Class for handling detailed Kelvinator A/C messages.
Definition: ir_Kelvinator.h:121
-
const uint8_t kKelvinatorMaxTemp
Definition: ir_Kelvinator.h:103
-
bool getSwingVertical(void) const
Is the vertical swing setting on?
Definition: ir_Kelvinator.cpp:286
-
uint8_t Mode
Definition: ir_Kelvinator.h:39
-
uint8_t Sum1
Definition: ir_Kelvinator.h:67
-
void checksum(void)
Calculate the checksum for the internal state.
Definition: ir_Kelvinator.cpp:175
-
void fixup(void)
Fix up any odd conditions for the current state.
Definition: ir_Kelvinator.cpp:124
-
uint8_t pad1[3]
Definition: ir_Kelvinator.h:71
-
const uint16_t kKelvinatorStateLength
Definition: IRremoteESP8266.h:1013
-
stdAc::state_t toCommon(void) const
Convert the internal A/C object state to it's stdAc::state_t equivalent.
Definition: ir_Kelvinator.cpp:403
-
void setQuiet(const bool on)
Control the current Quiet setting.
Definition: ir_Kelvinator.cpp:305
-
void setXFan(const bool on)
Control the current XFan setting. This setting will cause the unit blow air after power off to dry ou...
Definition: ir_Kelvinator.cpp:345
-
uint8_t SwingH
Definition: ir_Kelvinator.h:61
-
const uint8_t kKelvinatorFan
Definition: ir_Kelvinator.h:96
-
String toString(void) const
Convert the internal settings into a human readable string.
Definition: ir_Kelvinator.cpp:429
-
void setTemp(const uint8_t degrees)
Set the temperature setting.
Definition: ir_Kelvinator.cpp:215
-
uint8_t Sum2
Definition: ir_Kelvinator.h:88
-
const uint8_t kKelvinatorBasicFanMax
Definition: ir_Kelvinator.h:98
-
const uint8_t kKelvinatorFanMin
Definition: ir_Kelvinator.h:100
-
bool getTurbo(void) const
Is the Turbo setting on?
Definition: ir_Kelvinator.cpp:364
-
KelvinatorProtocol _
Definition: ir_Kelvinator.h:179
-
uint8_t getMode(void) const
Get the current operation mode setting.
Definition: ir_Kelvinator.cpp:251
-
uint8_t BasicFan
Definition: ir_Kelvinator.h:41
-
const uint8_t kKelvinatorHeat
Definition: ir_Kelvinator.h:97
-
bool getQuiet(void) const
Is the Quiet setting on?
Definition: ir_Kelvinator.cpp:311
-
IRKelvinatorAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Kelvinator.cpp:109
-
void off(void)
Set the internal state to have the power off.
Definition: ir_Kelvinator.cpp:199
-
const uint16_t kKelvinatorDefaultRepeat
Definition: IRremoteESP8266.h:1015
-
void setSwingVertical(const bool on)
Control the current vertical swing setting.
Definition: ir_Kelvinator.cpp:279
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Kelvinator.cpp:245
-
const uint8_t kKelvinatorDry
Definition: ir_Kelvinator.h:95
-
uint8_t Quiet
Definition: ir_Kelvinator.h:80
-
bool getXFan(void) const
Is the XFan setting on?
Definition: ir_Kelvinator.cpp:351
-
Native representation of a Kelvinator A/C message.
Definition: ir_Kelvinator.h:35
-
bool getIonFilter(void) const
Is the Ion Filter setting on?
Definition: ir_Kelvinator.cpp:323
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's stdAc::opmode_t equivalent.
Definition: ir_Kelvinator.cpp:384
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t Turbo
Definition: ir_Kelvinator.h:49
-
uint8_t Temp
Definition: ir_Kelvinator.h:45
-
uint8_t Fan
Definition: ir_Kelvinator.h:85
-
const uint8_t kKelvinatorAuto
Definition: ir_Kelvinator.h:93
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode (stdAc::opmode_t) into it a native mode.
Definition: ir_Kelvinator.cpp:371
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8cpp.html deleted file mode 100644 index daacfe7d2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8cpp.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_LG.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_LG.cpp File Reference
-
-
- -

Support for LG protocols. LG decode originally added by Darryl Smith (based on the JVC protocol) LG send originally added by https://github.com/chaeplin. -More...

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

-Variables

const uint16_t kLgBitMark = 550
 uSeconds. More...
 
const uint16_t kLgOneSpace = 1600
 uSeconds. More...
 
const uint16_t kLgZeroSpace = 550
 uSeconds. More...
 
const uint16_t kLgRptSpace = 2250
 uSeconds. More...
 
const uint16_t kLgMinGap = 39750
 uSeconds. More...
 
const uint32_t kLgMinMessageLength = 108050
 uSeconds. More...
 
const uint16_t kLgHdrMark = 8500
 uSeconds. More...
 
const uint16_t kLgHdrSpace = 4250
 uSeconds. More...
 
const uint16_t kLg32HdrMark = 4500
 uSeconds. More...
 
const uint16_t kLg32HdrSpace = 4450
 uSeconds. More...
 
const uint16_t kLg32RptHdrMark = 8950
 uSeconds. More...
 
const uint16_t kLg2HdrMark = 3200
 uSeconds. More...
 
const uint16_t kLg2HdrSpace = 9900
 uSeconds. More...
 
const uint16_t kLg2BitMark = 480
 uSeconds. More...
 
-

Detailed Description

-

Support for LG protocols. LG decode originally added by Darryl Smith (based on the JVC protocol) LG send originally added by https://github.com/chaeplin.

-
See also
https://github.com/arendst/Tasmota/blob/54c2eb283a02e4287640a4595e506bc6eadbd7f2/sonoff/xdrv_05_irremote.ino#L327-438
-

Variable Documentation

- -

◆ kLg2BitMark

- -
-
- - - - -
const uint16_t kLg2BitMark = 480
-
- -

uSeconds.

- -
-
- -

◆ kLg2HdrMark

- -
-
- - - - -
const uint16_t kLg2HdrMark = 3200
-
- -

uSeconds.

- -
-
- -

◆ kLg2HdrSpace

- -
-
- - - - -
const uint16_t kLg2HdrSpace = 9900
-
- -

uSeconds.

- -
-
- -

◆ kLg32HdrMark

- -
-
- - - - -
const uint16_t kLg32HdrMark = 4500
-
- -

uSeconds.

- -
-
- -

◆ kLg32HdrSpace

- -
-
- - - - -
const uint16_t kLg32HdrSpace = 4450
-
- -

uSeconds.

- -
-
- -

◆ kLg32RptHdrMark

- -
-
- - - - -
const uint16_t kLg32RptHdrMark = 8950
-
- -

uSeconds.

- -
-
- -

◆ kLgBitMark

- -
-
- - - - -
const uint16_t kLgBitMark = 550
-
- -

uSeconds.

- -
-
- -

◆ kLgHdrMark

- -
-
- - - - -
const uint16_t kLgHdrMark = 8500
-
- -

uSeconds.

- -
-
- -

◆ kLgHdrSpace

- -
-
- - - - -
const uint16_t kLgHdrSpace = 4250
-
- -

uSeconds.

- -
-
- -

◆ kLgMinGap

- -
-
- - - - -
const uint16_t kLgMinGap = 39750
-
- -

uSeconds.

- -
-
- -

◆ kLgMinMessageLength

- -
-
- - - - -
const uint32_t kLgMinMessageLength = 108050
-
- -

uSeconds.

- -
-
- -

◆ kLgOneSpace

- -
-
- - - - -
const uint16_t kLgOneSpace = 1600
-
- -

uSeconds.

- -
-
- -

◆ kLgRptSpace

- -
-
- - - - -
const uint16_t kLgRptSpace = 2250
-
- -

uSeconds.

- -
-
- -

◆ kLgZeroSpace

- -
-
- - - - -
const uint16_t kLgZeroSpace = 550
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h.html deleted file mode 100644 index 431268346..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_LG.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_LG.h File Reference
-
-
- -

Support for LG protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  LGProtocol
 Native representation of a LG A/C message. More...
 
class  IRLgAc
 Class for handling detailed LG A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kLgAcFanLowest = 0
 
const uint8_t kLgAcFanLow = 1
 
const uint8_t kLgAcFanMedium = 2
 
const uint8_t kLgAcFanHigh = 4
 
const uint8_t kLgAcFanAuto = 5
 
const uint8_t kLgAcTempAdjust = 15
 
const uint8_t kLgAcMinTemp = 16
 
const uint8_t kLgAcMaxTemp = 30
 
const uint8_t kLgAcCool = 0
 
const uint8_t kLgAcDry = 1
 
const uint8_t kLgAcFan = 2
 
const uint8_t kLgAcAuto = 3
 
const uint8_t kLgAcHeat = 4
 
const uint8_t kLgAcPowerOff = 3
 
const uint8_t kLgAcPowerOn = 0
 
const uint8_t kLgAcSignature = 0x88
 
const uint32_t kLgAcOffCommand = 0x88C0051
 
-

Detailed Description

-

Variable Documentation

- -

◆ kLgAcAuto

- -
-
- - - - -
const uint8_t kLgAcAuto = 3
-
- -
-
- -

◆ kLgAcCool

- -
-
- - - - -
const uint8_t kLgAcCool = 0
-
- -
-
- -

◆ kLgAcDry

- -
-
- - - - -
const uint8_t kLgAcDry = 1
-
- -
-
- -

◆ kLgAcFan

- -
-
- - - - -
const uint8_t kLgAcFan = 2
-
- -
-
- -

◆ kLgAcFanAuto

- -
-
- - - - -
const uint8_t kLgAcFanAuto = 5
-
- -
-
- -

◆ kLgAcFanHigh

- -
-
- - - - -
const uint8_t kLgAcFanHigh = 4
-
- -
-
- -

◆ kLgAcFanLow

- -
-
- - - - -
const uint8_t kLgAcFanLow = 1
-
- -
-
- -

◆ kLgAcFanLowest

- -
-
- - - - -
const uint8_t kLgAcFanLowest = 0
-
- -
-
- -

◆ kLgAcFanMedium

- -
-
- - - - -
const uint8_t kLgAcFanMedium = 2
-
- -
-
- -

◆ kLgAcHeat

- -
-
- - - - -
const uint8_t kLgAcHeat = 4
-
- -
-
- -

◆ kLgAcMaxTemp

- -
-
- - - - -
const uint8_t kLgAcMaxTemp = 30
-
- -
-
- -

◆ kLgAcMinTemp

- -
-
- - - - -
const uint8_t kLgAcMinTemp = 16
-
- -
-
- -

◆ kLgAcOffCommand

- -
-
- - - - -
const uint32_t kLgAcOffCommand = 0x88C0051
-
- -
-
- -

◆ kLgAcPowerOff

- -
-
- - - - -
const uint8_t kLgAcPowerOff = 3
-
- -
-
- -

◆ kLgAcPowerOn

- -
-
- - - - -
const uint8_t kLgAcPowerOn = 0
-
- -
-
- -

◆ kLgAcSignature

- -
-
- - - - -
const uint8_t kLgAcSignature = 0x88
-
- -
-
- -

◆ kLgAcTempAdjust

- -
-
- - - - -
const uint8_t kLgAcTempAdjust = 15
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h_source.html deleted file mode 100644 index ceb272aab..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__LG_8h_source.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_LG.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_LG.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017, 2019 David Conran
-
2 
-
6 
-
7 
-
8 // Supports:
-
9 // Brand: LG, Model: 6711A20083V remote (LG)
-
10 // Brand: LG, Model: AKB74395308 remote (LG2)
-
11 // Brand: LG, Model: S4-W12JA3AA A/C (LG2)
-
12 // Brand: LG, Model: AKB75215403 remote (LG2)
-
13 // Brand: General Electric, Model: AG1BH09AW101 Split A/C
-
14 // Brand: General Electric, Model: 6711AR2853M A/C Remote
-
15 
-
16 #ifndef IR_LG_H_
-
17 #define IR_LG_H_
-
18 
-
19 #define __STDC_LIMIT_MACROS
-
20 #include <stdint.h>
-
21 #ifndef UNIT_TEST
-
22 #include <Arduino.h>
-
23 #endif
-
24 #include "IRremoteESP8266.h"
-
25 #include "IRsend.h"
-
26 #include "IRutils.h"
-
27 #ifdef UNIT_TEST
-
28 #include "IRsend_test.h"
-
29 #endif
-
30 
-
32 union LGProtocol{
-
33  uint32_t raw;
-
34  struct {
-
35  uint32_t Sum :4;
-
36  uint32_t Fan :3;
-
37  uint32_t :1;
-
38  uint32_t Temp :4;
-
39  uint32_t Mode :3;
-
40  uint32_t :3;
-
41  uint32_t Power:2;
-
42  uint32_t Sign :8;
-
43  };
-
44 };
-
45 
-
46 const uint8_t kLgAcFanLowest = 0; // 0b000
-
47 const uint8_t kLgAcFanLow = 1; // 0b001
-
48 const uint8_t kLgAcFanMedium = 2; // 0b010
-
49 const uint8_t kLgAcFanHigh = 4; // 0b100
-
50 const uint8_t kLgAcFanAuto = 5; // 0b101
-
51 const uint8_t kLgAcTempAdjust = 15;
-
52 const uint8_t kLgAcMinTemp = 16; // Celsius
-
53 const uint8_t kLgAcMaxTemp = 30; // Celsius
-
54 const uint8_t kLgAcCool = 0; // 0b000
-
55 const uint8_t kLgAcDry = 1; // 0b001
-
56 const uint8_t kLgAcFan = 2; // 0b010
-
57 const uint8_t kLgAcAuto = 3; // 0b011
-
58 const uint8_t kLgAcHeat = 4; // 0b100
-
59 const uint8_t kLgAcPowerOff = 3; // 0b11
-
60 const uint8_t kLgAcPowerOn = 0; // 0b00
-
61 const uint8_t kLgAcSignature = 0x88;
-
62 
-
63 const uint32_t kLgAcOffCommand = 0x88C0051;
-
64 
-
65 // Classes
-
67 class IRLgAc {
-
68  public:
-
69  explicit IRLgAc(const uint16_t pin, const bool inverted = false,
-
70  const bool use_modulation = true);
-
71  void stateReset(void);
-
72  static uint8_t calcChecksum(const uint32_t state);
-
73  static bool validChecksum(const uint32_t state);
-
74  bool isValidLgAc(void) const;
-
75 #if SEND_LG
-
76  void send(const uint16_t repeat = kLgDefaultRepeat);
-
81  int8_t calibrate(void) { return _irsend.calibrate(); }
-
82 #endif // SEND_LG
-
83  void begin(void);
-
84  void on(void);
-
85  void off(void);
-
86  void setPower(const bool on);
-
87  bool getPower(void) const;
-
88  void setTemp(const uint8_t degrees);
-
89  uint8_t getTemp(void) const;
-
90  void setFan(const uint8_t speed);
-
91  uint8_t getFan(void) const;
-
92  void setMode(const uint8_t mode);
-
93  uint8_t getMode(void) const;
-
94  uint32_t getRaw(void);
-
95  void setRaw(const uint32_t new_code);
-
96  static uint8_t convertMode(const stdAc::opmode_t mode);
-
97  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
98  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
99  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
100  stdAc::state_t toCommon(void) const;
-
101  String toString(void) const;
-
102  void setModel(const lg_ac_remote_model_t model);
-
103  lg_ac_remote_model_t getModel(void) const;
-
104 #ifndef UNIT_TEST
-
105 
-
106  private:
- -
108 #else // UNIT_TEST
-
109  IRsendTest _irsend;
-
111 #endif // UNIT_TEST
- -
114  uint8_t _temp;
- -
116  void checksum(void);
-
117  void _setTemp(const uint8_t value);
-
118 };
-
119 
-
120 #endif // IR_LG_H_
-
-
const uint8_t kLgAcFanMedium
Definition: ir_LG.h:48
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_LG.cpp:449
-
void _setTemp(const uint8_t value)
Set the temperature.
Definition: ir_LG.cpp:328
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_LG.cpp:410
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_LG.cpp:368
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:799
-
uint32_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_LG.cpp:269
-
decode_type_t _protocol
model
Definition: ir_LG.h:115
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_LG.cpp:343
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_LG.h:81
-
const uint8_t kLgAcFanAuto
Definition: ir_LG.h:50
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kLgAcPowerOff
Definition: ir_LG.h:59
-
const uint8_t kLgAcFanLowest
Definition: ir_LG.h:46
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_LG.cpp:352
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_LG.cpp:321
-
uint32_t Temp
Definition: ir_LG.h:38
-
const uint8_t kLgAcFanHigh
Definition: ir_LG.h:49
- -
uint32_t Sign
Definition: ir_LG.h:42
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_LG.cpp:475
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kLgAcDry
Definition: ir_LG.h:55
-
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_LG.cpp:334
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
LGProtocol _
Definition: ir_LG.h:113
-
const uint32_t kLgAcOffCommand
Definition: ir_LG.h:63
-
std::string String
Definition: IRremoteESP8266.h:1217
-
static uint8_t calcChecksum(const uint32_t state)
Calculate the checksum for a given state.
Definition: ir_LG.cpp:285
-
const uint8_t kLgAcFanLow
Definition: ir_LG.h:47
-
void setModel(const lg_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_LG.cpp:242
-
const uint16_t kLgDefaultRepeat
Definition: IRremoteESP8266.h:1022
-
const uint8_t kLgAcMaxTemp
Definition: ir_LG.h:53
-
IRLgAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_LG.cpp:214
-
const uint8_t kLgAcSignature
Definition: ir_LG.h:61
- -
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_LG.cpp:423
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_LG.cpp:374
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_LG.cpp:437
-
uint32_t raw
The state of the IR remote in IR code form.
Definition: ir_LG.h:33
-
const uint8_t kLgAcCool
Definition: ir_LG.h:54
-
const uint8_t kLgAcHeat
Definition: ir_LG.h:58
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_LG.cpp:225
-
Class for handling detailed LG A/C messages.
Definition: ir_LG.h:67
- -
lg_ac_remote_model_t getModel(void) const
Get the model of the A/C.
Definition: ir_LG.cpp:256
-
uint32_t Fan
Definition: ir_LG.h:36
-
lg_ac_remote_model_t
LG A/C model numbers.
Definition: IRsend.h:176
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_LG.cpp:380
-
uint8_t _temp
Definition: ir_LG.h:114
-
const uint8_t kLgAcAuto
Definition: ir_LG.h:57
-
void setRaw(const uint32_t new_code)
Set the internal state from a valid code for this protocol.
Definition: ir_LG.cpp:276
-
const uint8_t kLgAcPowerOn
Definition: ir_LG.h:60
-
void off(void)
Change the power setting to Off.
Definition: ir_LG.cpp:307
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_LG.cpp:299
-
void stateReset(void)
Reset the internals of the object to a known good state.
Definition: ir_LG.cpp:219
-
const uint8_t kLgAcMinTemp
Definition: ir_LG.h:52
-
const uint8_t kLgAcTempAdjust
Definition: ir_LG.h:51
-
uint32_t Mode
Definition: ir_LG.h:39
-
uint32_t Sum
Definition: ir_LG.h:35
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_LG.cpp:397
-
void setPower(const bool on)
Change the power setting.
Definition: ir_LG.cpp:311
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void send(const uint16_t repeat=kLgDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_LG.cpp:230
-
static bool validChecksum(const uint32_t state)
Verify the checksum is valid for a given state.
Definition: ir_LG.cpp:292
-
const uint8_t kLgAcFan
Definition: ir_LG.h:56
-
void on(void)
Change the power setting to On.
Definition: ir_LG.cpp:304
-
uint32_t Power
Definition: ir_LG.h:41
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_LG.h:107
-
Native representation of a LG A/C message.
Definition: ir_LG.h:32
-
bool isValidLgAc(void) const
Check if the internal state looks like a valid LG A/C message.
Definition: ir_LG.cpp:492
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lasertag_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lasertag_8cpp.html deleted file mode 100644 index 75211b610..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lasertag_8cpp.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Lasertag.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Lasertag.cpp File Reference
-
-
- -

Support for Lasertag protocols. -More...

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

-Variables

const uint16_t kLasertagMinSamples = 13
 
const uint16_t kLasertagTick = 333
 
const uint32_t kLasertagMinGap = kDefaultMessageGap
 
const uint8_t kLasertagTolerance = 0
 
const uint16_t kLasertagExcess = 0
 
const uint16_t kLasertagDelta = 165
 
const int16_t kSpace = 1
 
const int16_t kMark = 0
 
-

Detailed Description

-

Support for Lasertag protocols.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/366
-

Variable Documentation

- -

◆ kLasertagDelta

- -
-
- - - - -
const uint16_t kLasertagDelta = 165
-
- -
-
- -

◆ kLasertagExcess

- -
-
- - - - -
const uint16_t kLasertagExcess = 0
-
- -
-
- -

◆ kLasertagMinGap

- -
-
- - - - -
const uint32_t kLasertagMinGap = kDefaultMessageGap
-
- -
-
- -

◆ kLasertagMinSamples

- -
-
- - - - -
const uint16_t kLasertagMinSamples = 13
-
- -
-
- -

◆ kLasertagTick

- -
-
- - - - -
const uint16_t kLasertagTick = 333
-
- -
-
- -

◆ kLasertagTolerance

- -
-
- - - - -
const uint8_t kLasertagTolerance = 0
-
- -
-
- -

◆ kMark

- -
-
- - - - -
const int16_t kMark = 0
-
- -
-
- -

◆ kSpace

- -
-
- - - - -
const int16_t kSpace = 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lego_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lego_8cpp.html deleted file mode 100644 index 8a2d2c588..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lego_8cpp.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Lego.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Lego.cpp File Reference
-
-
- -

Support for LEGO protocols. -More...

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

-Variables

const uint16_t kLegoPfBitMark = 158
 
const uint16_t kLegoPfHdrSpace = 1026
 
const uint16_t kLegoPfZeroSpace = 263
 
const uint16_t kLegoPfOneSpace = 553
 
const uint32_t kLegoPfMinCommandLength = 16000
 
-

Detailed Description

-

Variable Documentation

- -

◆ kLegoPfBitMark

- -
-
- - - - -
const uint16_t kLegoPfBitMark = 158
-
- -
-
- -

◆ kLegoPfHdrSpace

- -
-
- - - - -
const uint16_t kLegoPfHdrSpace = 1026
-
- -
-
- -

◆ kLegoPfMinCommandLength

- -
-
- - - - -
const uint32_t kLegoPfMinCommandLength = 16000
-
- -
-
- -

◆ kLegoPfOneSpace

- -
-
- - - - -
const uint16_t kLegoPfOneSpace = 553
-
- -
-
- -

◆ kLegoPfZeroSpace

- -
-
- - - - -
const uint16_t kLegoPfZeroSpace = 263
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lutron_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lutron_8cpp.html deleted file mode 100644 index b75090a1f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Lutron_8cpp.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Lutron.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Lutron.cpp File Reference
-
-
- -

Support for Lutron protocols. -More...

- - - - - - - - -

-Variables

const uint16_t kLutronTick = 2288
 
const uint32_t kLutronGap = 150000
 
const uint16_t kLutronDelta = 400
 
-

Detailed Description

-

Support for Lutron protocols.

-
Note
The Lutron protocol uses a sort of Run Length encoding to encode its data. There is no header or footer per-se. As a mark is the first data we will notice, we always assume the First bit of the technically 36-bit protocol is '1'. So it is assumed, and thus we only care about the 35 bits of data.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/515
-
-http://www.lutron.com/TechnicalDocumentLibrary/048158.doc
-

Variable Documentation

- -

◆ kLutronDelta

- -
-
- - - - -
const uint16_t kLutronDelta = 400
-
- -
-
- -

◆ kLutronGap

- -
-
- - - - -
const uint32_t kLutronGap = 150000
-
- -
-
- -

◆ kLutronTick

- -
-
- - - - -
const uint16_t kLutronTick = 2288
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MWM_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MWM_8cpp.html deleted file mode 100644 index 8a6c009c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MWM_8cpp.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_MWM.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_MWM.cpp File Reference
-
-
- -

Disney Made With Magic (MWM) Support derived from ir_Lasertag.cpp. -More...

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

-Variables

const uint16_t kMWMMinSamples = 6
 
const uint16_t kMWMTick = 417
 
const uint32_t kMWMMinGap = 30000
 
const uint8_t kMWMTolerance = 0
 
const uint16_t kMWMExcess = 0
 
const uint16_t kMWMDelta = 150
 
const uint8_t kMWMMaxWidth = 9
 
const int16_t kSpace = 1
 
const int16_t kMark = 0
 
-

Detailed Description

-

Disney Made With Magic (MWM) Support derived from ir_Lasertag.cpp.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/pull/557
-

Variable Documentation

- -

◆ kMark

- -
-
- - - - -
const int16_t kMark = 0
-
- -
-
- -

◆ kMWMDelta

- -
-
- - - - -
const uint16_t kMWMDelta = 150
-
- -
-
- -

◆ kMWMExcess

- -
-
- - - - -
const uint16_t kMWMExcess = 0
-
- -
-
- -

◆ kMWMMaxWidth

- -
-
- - - - -
const uint8_t kMWMMaxWidth = 9
-
- -
-
- -

◆ kMWMMinGap

- -
-
- - - - -
const uint32_t kMWMMinGap = 30000
-
- -
-
- -

◆ kMWMMinSamples

- -
-
- - - - -
const uint16_t kMWMMinSamples = 6
-
- -
-
- -

◆ kMWMTick

- -
-
- - - - -
const uint16_t kMWMTick = 417
-
- -
-
- -

◆ kMWMTolerance

- -
-
- - - - -
const uint8_t kMWMTolerance = 0
-
- -
-
- -

◆ kSpace

- -
-
- - - - -
const int16_t kSpace = 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8cpp.html deleted file mode 100644 index 3b0c54da6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8cpp.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Magiquest.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Magiquest.cpp File Reference
-
-
- -

Support for MagiQuest protocols. -More...

-

Detailed Description

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h.html deleted file mode 100644 index 628b41793..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Magiquest.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Magiquest.h File Reference
-
-
- -

Support for MagiQuest protocols. -More...

- -

Go to the source code of this file.

- - - - - -

-Classes

union  magiquest
 MagiQuest packet is both Wand ID and magnitude of swish and flick. More...
 
- - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kMagiQuestTotalUsec = 1150
 
const uint8_t kMagiQuestZeroRatio = 30
 
const uint8_t kMagiQuestOneRatio = 38
 
const uint16_t kMagiQuestMarkZero = 280
 
const uint16_t kMagiQuestSpaceZero = 850
 
const uint16_t kMagiQuestMarkOne = 580
 
const uint16_t kMagiQuestSpaceOne = 600
 
const uint32_t kMagiQuestGap = kDefaultMessageGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMagiQuestGap

- -
-
- - - - -
const uint32_t kMagiQuestGap = kDefaultMessageGap
-
- -
-
- -

◆ kMagiQuestMarkOne

- -
-
- - - - -
const uint16_t kMagiQuestMarkOne = 580
-
- -
-
- -

◆ kMagiQuestMarkZero

- -
-
- - - - -
const uint16_t kMagiQuestMarkZero = 280
-
- -
-
- -

◆ kMagiQuestOneRatio

- -
-
- - - - -
const uint8_t kMagiQuestOneRatio = 38
-
- -
-
- -

◆ kMagiQuestSpaceOne

- -
-
- - - - -
const uint16_t kMagiQuestSpaceOne = 600
-
- -
-
- -

◆ kMagiQuestSpaceZero

- -
-
- - - - -
const uint16_t kMagiQuestSpaceZero = 850
-
- -
-
- -

◆ kMagiQuestTotalUsec

- -
-
- - - - -
const uint16_t kMagiQuestTotalUsec = 1150
-
- -
-
- -

◆ kMagiQuestZeroRatio

- -
-
- - - - -
const uint8_t kMagiQuestZeroRatio = 30
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h_source.html deleted file mode 100644 index 25a81ca96..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Magiquest_8h_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Magiquest.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Magiquest.h
-
-
-Go to the documentation of this file.
1 // Copyright 2013 mpflaga
-
2 // Copyright 2015 kitlaan
-
3 // Copyright 2017 Jason kendall, David Conran
-
4 
-
9 
-
10 // Supports:
-
11 // Brand: MagiQuest, Model: Wand
-
12 
-
13 #ifndef IR_MAGIQUEST_H_
-
14 #define IR_MAGIQUEST_H_
-
15 
-
16 #define __STDC_LIMIT_MACROS
-
17 #include <stdint.h>
-
18 #include "IRremoteESP8266.h"
-
19 #include "IRsend.h"
-
20 
-
22 union magiquest {
-
23  uint64_t llword;
-
24  uint8_t byte[8];
-
25  // uint16_t word[4];
-
26  uint32_t lword[2];
-
27  struct {
-
28  uint16_t magnitude;
-
29  uint32_t wand_id;
-
30  uint8_t padding;
-
31  uint8_t scrap;
-
32  } cmd;
-
33 };
-
34 
-
35 const uint16_t kMagiQuestTotalUsec = 1150;
-
36 const uint8_t kMagiQuestZeroRatio = 30; // usually <= ~25%
-
37 const uint8_t kMagiQuestOneRatio = 38; // usually >= ~50%
-
38 const uint16_t kMagiQuestMarkZero = 280;
-
39 const uint16_t kMagiQuestSpaceZero = 850;
-
40 const uint16_t kMagiQuestMarkOne = 580;
-
41 const uint16_t kMagiQuestSpaceOne = 600;
-
42 const uint32_t kMagiQuestGap = kDefaultMessageGap; // Just a guess.
-
43 #endif // IR_MAGIQUEST_H_
-
-
const uint32_t kDefaultMessageGap
Definition: IRsend.h:41
-
uint8_t scrap
Definition: ir_Magiquest.h:31
-
const uint16_t kMagiQuestMarkZero
Definition: ir_Magiquest.h:38
- -
uint16_t magnitude
Definition: ir_Magiquest.h:28
-
uint64_t llword
Definition: ir_Magiquest.h:23
- -
const uint16_t kMagiQuestMarkOne
Definition: ir_Magiquest.h:40
-
MagiQuest packet is both Wand ID and magnitude of swish and flick.
Definition: ir_Magiquest.h:22
-
uint32_t wand_id
Definition: ir_Magiquest.h:29
-
const uint32_t kMagiQuestGap
Definition: ir_Magiquest.h:42
-
const uint16_t kMagiQuestSpaceZero
Definition: ir_Magiquest.h:39
-
const uint16_t kMagiQuestSpaceOne
Definition: ir_Magiquest.h:41
-
uint32_t lword[2]
Definition: ir_Magiquest.h:26
-
const uint16_t kMagiQuestTotalUsec
Definition: ir_Magiquest.h:35
-
uint8_t padding
Definition: ir_Magiquest.h:30
-
const uint8_t kMagiQuestOneRatio
Definition: ir_Magiquest.h:37
-
const uint8_t kMagiQuestZeroRatio
Definition: ir_Magiquest.h:36
-
struct magiquest::@58 cmd
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Metz_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Metz_8cpp.html deleted file mode 100644 index 62db73bfe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Metz_8cpp.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Metz.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Metz.cpp File Reference
-
-
- -

Support for Metz protocol. -More...

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

-Variables

const uint16_t kMetzHdrMark = 880
 uSeconds. More...
 
const uint16_t kMetzHdrSpace = 2336
 uSeconds. More...
 
const uint16_t kMetzBitMark = 473
 uSeconds. More...
 
const uint16_t kMetzOneSpace = 1640
 uSeconds. More...
 
const uint16_t kMetzZeroSpace = 940
 uSeconds. More...
 
const uint16_t kMetzFreq = 38000
 Hz. More...
 
const uint8_t kMetzAddressBits = 3
 
const uint8_t kMetzCommandBits = 6
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMetzAddressBits

- -
-
- - - - -
const uint8_t kMetzAddressBits = 3
-
- -
-
- -

◆ kMetzBitMark

- -
-
- - - - -
const uint16_t kMetzBitMark = 473
-
- -

uSeconds.

- -
-
- -

◆ kMetzCommandBits

- -
-
- - - - -
const uint8_t kMetzCommandBits = 6
-
- -
-
- -

◆ kMetzFreq

- -
-
- - - - -
const uint16_t kMetzFreq = 38000
-
- -

Hz.

- -
-
- -

◆ kMetzHdrMark

- -
-
- - - - -
const uint16_t kMetzHdrMark = 880
-
- -

uSeconds.

- -
-
- -

◆ kMetzHdrSpace

- -
-
- - - - -
const uint16_t kMetzHdrSpace = 2336
-
- -

uSeconds.

- -
-
- -

◆ kMetzOneSpace

- -
-
- - - - -
const uint16_t kMetzOneSpace = 1640
-
- -

uSeconds.

- -
-
- -

◆ kMetzZeroSpace

- -
-
- - - - -
const uint16_t kMetzZeroSpace = 940
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8cpp.html deleted file mode 100644 index 6d7eb98f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8cpp.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Midea.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Midea.cpp File Reference
-
-
- -

Support for Midea protocols. Midea added by crankyoldgit & bwze. send: bwze/crankyoldgit, decode: crankyoldgit. -More...

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

-Variables

const uint16_t kMideaTick = 80
 
const uint16_t kMideaBitMarkTicks = 7
 
const uint16_t kMideaBitMark = kMideaBitMarkTicks * kMideaTick
 
const uint16_t kMideaOneSpaceTicks = 21
 
const uint16_t kMideaOneSpace = kMideaOneSpaceTicks * kMideaTick
 
const uint16_t kMideaZeroSpaceTicks = 7
 
const uint16_t kMideaZeroSpace = kMideaZeroSpaceTicks * kMideaTick
 
const uint16_t kMideaHdrMarkTicks = 56
 
const uint16_t kMideaHdrMark = kMideaHdrMarkTicks * kMideaTick
 
const uint16_t kMideaHdrSpaceTicks = 56
 
const uint16_t kMideaHdrSpace = kMideaHdrSpaceTicks * kMideaTick
 
const uint16_t kMideaMinGapTicks
 
const uint16_t kMideaMinGap = kMideaMinGapTicks * kMideaTick
 
const uint8_t kMideaTolerance = 30
 
const uint16_t kMidea24MinGap = 13000
 uSecs More...
 
-

Detailed Description

-

Support for Midea protocols. Midea added by crankyoldgit & bwze. send: bwze/crankyoldgit, decode: crankyoldgit.

-
Note
SwingV has the function of an Ion Filter on Danby A/C units.
-
See also
https://docs.google.com/spreadsheets/d/1TZh4jWrx4h9zzpYUI9aYXMl1fYOiqu-xVuOOMqagxrs/edit?usp=sharing
-
-https://github.com/crankyoldgit/IRremoteESP8266/pull/1213
-

Variable Documentation

- -

◆ kMidea24MinGap

- -
-
- - - - -
const uint16_t kMidea24MinGap = 13000
-
- -

uSecs

- -
-
- -

◆ kMideaBitMark

- -
-
- - - - -
const uint16_t kMideaBitMark = kMideaBitMarkTicks * kMideaTick
-
- -
-
- -

◆ kMideaBitMarkTicks

- -
-
- - - - -
const uint16_t kMideaBitMarkTicks = 7
-
- -
-
- -

◆ kMideaHdrMark

- -
-
- - - - -
const uint16_t kMideaHdrMark = kMideaHdrMarkTicks * kMideaTick
-
- -
-
- -

◆ kMideaHdrMarkTicks

- -
-
- - - - -
const uint16_t kMideaHdrMarkTicks = 56
-
- -
-
- -

◆ kMideaHdrSpace

- -
-
- - - - -
const uint16_t kMideaHdrSpace = kMideaHdrSpaceTicks * kMideaTick
-
- -
-
- -

◆ kMideaHdrSpaceTicks

- -
-
- - - - -
const uint16_t kMideaHdrSpaceTicks = 56
-
- -
-
- -

◆ kMideaMinGap

- -
-
- - - - -
const uint16_t kMideaMinGap = kMideaMinGapTicks * kMideaTick
-
- -
-
- -

◆ kMideaMinGapTicks

- -
-
- - - - -
const uint16_t kMideaMinGapTicks
-
-
- -

◆ kMideaOneSpace

- -
-
- - - - -
const uint16_t kMideaOneSpace = kMideaOneSpaceTicks * kMideaTick
-
- -
-
- -

◆ kMideaOneSpaceTicks

- -
-
- - - - -
const uint16_t kMideaOneSpaceTicks = 21
-
- -
-
- -

◆ kMideaTick

- -
-
- - - - -
const uint16_t kMideaTick = 80
-
- -
-
- -

◆ kMideaTolerance

- -
-
- - - - -
const uint8_t kMideaTolerance = 30
-
- -
-
- -

◆ kMideaZeroSpace

- -
-
- - - - -
const uint16_t kMideaZeroSpace = kMideaZeroSpaceTicks * kMideaTick
-
- -
-
- -

◆ kMideaZeroSpaceTicks

- -
-
- - - - -
const uint16_t kMideaZeroSpaceTicks = 7
-
- -
-
-
-
const uint16_t kMideaZeroSpaceTicks
Definition: ir_Midea.cpp:27
-
const uint16_t kMideaBitMarkTicks
Definition: ir_Midea.cpp:23
-
const uint16_t kMideaHdrMarkTicks
Definition: ir_Midea.cpp:29
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h.html deleted file mode 100644 index 9a8f24801..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h.html +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Midea.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Midea.h File Reference
-
-
- -

Support for Midea protocols. Midea added by crankyoldgit & bwze. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  MideaProtocol
 Native representation of a Midea A/C message. More...
 
class  IRMideaAC
 Class for handling detailed Midea A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kMideaACMinTempF = 62
 Fahrenheit. More...
 
const uint8_t kMideaACMaxTempF = 86
 Fahrenheit. More...
 
const uint8_t kMideaACMinTempC = 17
 Celsius. More...
 
const uint8_t kMideaACMaxTempC = 30
 Celsius. More...
 
const uint8_t kMideaACMinSensorTempC = 0
 Celsius. More...
 
const uint8_t kMideaACMaxSensorTempC = 37
 Celsius. More...
 
const uint8_t kMideaACMinSensorTempF = 32
 Fahrenheit. More...
 
const uint8_t kMideaACMaxSensorTempF = 99
 Fahrenheit (Guess only!) More...
 
const uint8_t kMideaACSensorTempOnTimerOff = 0b1111111
 
const uint8_t kMideaACTimerOff = 0b111111
 
const uint8_t kMideaACCool = 0
 
const uint8_t kMideaACDry = 1
 
const uint8_t kMideaACAuto = 2
 
const uint8_t kMideaACHeat = 3
 
const uint8_t kMideaACFan = 4
 
const uint8_t kMideaACFanAuto = 0
 
const uint8_t kMideaACFanLow = 1
 
const uint8_t kMideaACFanMed = 2
 
const uint8_t kMideaACFanHigh = 3
 
const uint64_t kMideaACToggleSwingV = 0xA202FFFFFF7E
 
const uint64_t kMideaACSwingVStep = 0xA201FFFFFF7C
 
 kSwingVToggleStr = kIonStr
 
const uint64_t kMideaACToggleEcono = 0xA202FFFFFF7E
 
const uint64_t kMideaACToggleLight = 0xA208FFFFFF75
 
const uint64_t kMideaACToggleTurbo = 0xA209FFFFFF74
 
const uint8_t kMideaACTypeCommand = 0b001
 Message type. More...
 
const uint8_t kMideaACTypeSpecial = 0b010
 Message type. More...
 
const uint8_t kMideaACTypeFollow = 0b100
 Message type. More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMideaACAuto

- -
-
- - - - -
const uint8_t kMideaACAuto = 2
-
- -
-
- -

◆ kMideaACCool

- -
-
- - - - -
const uint8_t kMideaACCool = 0
-
- -
-
- -

◆ kMideaACDry

- -
-
- - - - -
const uint8_t kMideaACDry = 1
-
- -
-
- -

◆ kMideaACFan

- -
-
- - - - -
const uint8_t kMideaACFan = 4
-
- -
-
- -

◆ kMideaACFanAuto

- -
-
- - - - -
const uint8_t kMideaACFanAuto = 0
-
- -
-
- -

◆ kMideaACFanHigh

- -
-
- - - - -
const uint8_t kMideaACFanHigh = 3
-
- -
-
- -

◆ kMideaACFanLow

- -
-
- - - - -
const uint8_t kMideaACFanLow = 1
-
- -
-
- -

◆ kMideaACFanMed

- -
-
- - - - -
const uint8_t kMideaACFanMed = 2
-
- -
-
- -

◆ kMideaACHeat

- -
-
- - - - -
const uint8_t kMideaACHeat = 3
-
- -
-
- -

◆ kMideaACMaxSensorTempC

- -
-
- - - - -
const uint8_t kMideaACMaxSensorTempC = 37
-
- -

Celsius.

- -
-
- -

◆ kMideaACMaxSensorTempF

- -
-
- - - - -
const uint8_t kMideaACMaxSensorTempF = 99
-
- -

Fahrenheit (Guess only!)

- -
-
- -

◆ kMideaACMaxTempC

- -
-
- - - - -
const uint8_t kMideaACMaxTempC = 30
-
- -

Celsius.

- -
-
- -

◆ kMideaACMaxTempF

- -
-
- - - - -
const uint8_t kMideaACMaxTempF = 86
-
- -

Fahrenheit.

- -
-
- -

◆ kMideaACMinSensorTempC

- -
-
- - - - -
const uint8_t kMideaACMinSensorTempC = 0
-
- -

Celsius.

- -
-
- -

◆ kMideaACMinSensorTempF

- -
-
- - - - -
const uint8_t kMideaACMinSensorTempF = 32
-
- -

Fahrenheit.

- -
-
- -

◆ kMideaACMinTempC

- -
-
- - - - -
const uint8_t kMideaACMinTempC = 17
-
- -

Celsius.

- -
-
- -

◆ kMideaACMinTempF

- -
-
- - - - -
const uint8_t kMideaACMinTempF = 62
-
- -

Fahrenheit.

- -
-
- -

◆ kMideaACSensorTempOnTimerOff

- -
-
- - - - -
const uint8_t kMideaACSensorTempOnTimerOff = 0b1111111
-
- -
-
- -

◆ kMideaACSwingVStep

- -
-
- - - - -
const uint64_t kMideaACSwingVStep = 0xA201FFFFFF7C
-
- -
-
- -

◆ kMideaACTimerOff

- -
-
- - - - -
const uint8_t kMideaACTimerOff = 0b111111
-
- -
-
- -

◆ kMideaACToggleEcono

- -
-
- - - - -
const uint64_t kMideaACToggleEcono = 0xA202FFFFFF7E
-
- -
-
- -

◆ kMideaACToggleLight

- -
-
- - - - -
const uint64_t kMideaACToggleLight = 0xA208FFFFFF75
-
- -
-
- -

◆ kMideaACToggleSwingV

- -
-
- - - - -
const uint64_t kMideaACToggleSwingV = 0xA202FFFFFF7E
-
- -
-
- -

◆ kMideaACToggleTurbo

- -
-
- - - - -
const uint64_t kMideaACToggleTurbo = 0xA209FFFFFF74
-
- -
-
- -

◆ kMideaACTypeCommand

- -
-
- - - - -
const uint8_t kMideaACTypeCommand = 0b001
-
- -

Message type.

- -
-
- -

◆ kMideaACTypeFollow

- -
-
- - - - -
const uint8_t kMideaACTypeFollow = 0b100
-
- -

Message type.

- -
-
- -

◆ kMideaACTypeSpecial

- -
-
- - - - -
const uint8_t kMideaACTypeSpecial = 0b010
-
- -

Message type.

- -
-
- -

◆ kSwingVToggleStr

- -
-
- - - - -
kSwingVToggleStr = kIonStr
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h_source.html deleted file mode 100644 index 133d4e9e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Midea_8h_source.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Midea.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Midea.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 David Conran
-
2 
-
8 
-
9 // Supports:
-
10 // Brand: Pioneer System, Model: RYBO12GMFILCAD A/C (12K BTU) (MIDEA)
-
11 // Brand: Pioneer System, Model: RUBO18GMFILCAD A/C (18K BTU) (MIDEA)
-
12 // Brand: Pioneer System, Model: WS012GMFI22HLD A/C (12K BTU) (MIDEA)
-
13 // Brand: Pioneer System, Model: WS018GMFI22HLD A/C (12K BTU) (MIDEA)
-
14 // Brand: Pioneer System, Model: UB018GMFILCFHD A/C (12K BTU) (MIDEA)
-
15 // Brand: Pioneer System, Model: RG66B6(B)/BGEFU1 remote (MIDEA)
-
16 // Brand: Comfee, Model: MPD1-12CRN7 A/C (MIDEA)
-
17 // Brand: Kaysun, Model: Casual CF A/C (MIDEA)
-
18 // Brand: Keystone, Model: RG57H4(B)BGEF remote (MIDEA)
-
19 // Brand: MrCool, Model: RG57A6/BGEFU1 remote (MIDEA)
-
20 // Brand: Midea, Model: FS40-7AR Stand Fan (MIDEA24)
-
21 // Brand: Danby, Model: DAC080BGUWDB (MIDEA)
-
22 // Brand: Danby, Model: DAC100BGUWDB (MIDEA)
-
23 // Brand: Danby, Model: DAC120BGUWDB (MIDEA)
-
24 // Brand: Danby, Model: R09C/BCGE remote (MIDEA)
-
25 
-
26 #ifndef IR_MIDEA_H_
-
27 #define IR_MIDEA_H_
-
28 
-
29 #define __STDC_LIMIT_MACROS
-
30 #include <stdint.h>
-
31 #ifdef ARDUINO
-
32 #include <Arduino.h>
-
33 #endif
-
34 #include "IRremoteESP8266.h"
-
35 #include "IRsend.h"
-
36 #ifdef UNIT_TEST
-
37 #include "IRsend_test.h"
-
38 #endif
-
39 
-
44 //
-
45 // #define DANBY_DAC true
-
46 // #define KAYSUN_AC true
-
47 
-
52 
- -
55  uint64_t remote_state;
-
56  // only use 48bits
-
57  struct {
-
58  // Byte 0
-
59  uint8_t Sum;
-
60  // Byte 1 (value=0xFF when not in use.)
-
61  // This byte gets dual usage as Sensor Temp and On Timer
-
62  // Depending on "Type" below.
-
63  // When in "OnTimer", the nr of half hours is stored with mask 0b01111110
-
64  // i.e.
-
65  // uint8_t :1;
-
66  // uint8_t OnTimerHalfHours:6;
-
67  // uint8_t :1;
-
68  uint8_t SensorTemp:7;
-
69  uint8_t disableSensor:1;
-
70  // Byte 2 (value=0xFF when not in use.)
-
71  uint8_t :1; // 0b1
-
72  uint8_t OffTimer:6;
-
73  uint8_t BeepDisable:1;
-
74  // Byte 3
-
75  uint8_t Temp:5;
-
76  uint8_t useFahrenheit:1;
-
77  uint8_t :0;
-
78  // Byte 4
-
79  uint8_t Mode:3;
-
80  uint8_t Fan:2;
-
83  uint8_t :1;
-
84  uint8_t Sleep:1;
-
85  uint8_t Power:1;
-
86  // Byte 5
-
87  uint8_t Type:3;
-
88  uint8_t Header:5;
-
89  };
-
90 };
-
91 
-
92 // Constants
-
93 const uint8_t kMideaACMinTempF = 62;
-
94 const uint8_t kMideaACMaxTempF = 86;
-
95 const uint8_t kMideaACMinTempC = 17;
-
96 const uint8_t kMideaACMaxTempC = 30;
-
97 const uint8_t kMideaACMinSensorTempC = 0;
-
98 const uint8_t kMideaACMaxSensorTempC = 37;
-
99 const uint8_t kMideaACMinSensorTempF = 32;
-
100 const uint8_t kMideaACMaxSensorTempF = 99;
-
101 const uint8_t kMideaACSensorTempOnTimerOff = 0b1111111;
-
102 const uint8_t kMideaACTimerOff = 0b111111;
-
103 const uint8_t kMideaACCool = 0; // 0b000
-
104 const uint8_t kMideaACDry = 1; // 0b001
-
105 const uint8_t kMideaACAuto = 2; // 0b010
-
106 const uint8_t kMideaACHeat = 3; // 0b011
-
107 const uint8_t kMideaACFan = 4; // 0b100
-
108 const uint8_t kMideaACFanAuto = 0; // 0b00
-
109 const uint8_t kMideaACFanLow = 1; // 0b01
-
110 const uint8_t kMideaACFanMed = 2; // 0b10
-
111 const uint8_t kMideaACFanHigh = 3; // 0b11
-
112 #if KAYSUN_AC
-
113  // For Kaysun AC units, Toggle SwingV is 0xA202FFFFFF7E
-
114  const uint64_t kMideaACToggleSwingV = 0xA202FFFFFF7E;
-
115  const uint64_t kMideaACSwingVStep = 0xA201FFFFFF7C;
-
116 #else // KAYSUN_AC
-
117  const uint64_t kMideaACToggleSwingV = 0xA201FFFFFF7C;
-
118 #endif // KAYSUN_AC
-
119 #if DANBY_DAC
-
120  // For Danby DAC unit, the Ionizer toggle is the same as ToggleSwingV
-
121  // const uint64_t kMideaACToggleIonizer = 0xA201FFFFFF7C;
- -
123 #endif // DANBY_DAC
-
124 const uint64_t kMideaACToggleEcono = 0xA202FFFFFF7E;
-
125 const uint64_t kMideaACToggleLight = 0xA208FFFFFF75;
-
126 const uint64_t kMideaACToggleTurbo = 0xA209FFFFFF74;
-
127 const uint8_t kMideaACTypeCommand = 0b001;
-
128 const uint8_t kMideaACTypeSpecial = 0b010;
-
129 const uint8_t kMideaACTypeFollow = 0b100;
-
130 
-
131 // Legacy defines. (Deprecated)
-
132 #define MIDEA_AC_COOL kMideaACCool
-
133 #define MIDEA_AC_DRY kMideaACDry
-
134 #define MIDEA_AC_AUTO kMideaACAuto
-
135 #define MIDEA_AC_HEAT kMideaACHeat
-
136 #define MIDEA_AC_FAN kMideaACFan
-
137 #define MIDEA_AC_FAN_AUTO kMideaACFanAuto
-
138 #define MIDEA_AC_FAN_LOW kMideaACFanLow
-
139 #define MIDEA_AC_FAN_MED kMideaACFanMed
-
140 #define MIDEA_AC_FAN_HI kMideaACFanHigh
-
141 #define MIDEA_AC_POWER kMideaACPower
-
142 #define MIDEA_AC_SLEEP kMideaACSleep
-
143 #define MIDEA_AC_MIN_TEMP_F kMideaACMinTempF
-
144 #define MIDEA_AC_MAX_TEMP_F kMideaACMaxTempF
-
145 #define MIDEA_AC_MIN_TEMP_C kMideaACMinTempC
-
146 #define MIDEA_AC_MAX_TEMP_C kMideaACMaxTempC
-
147 
-
148 // Classes
-
151 class IRMideaAC {
-
152  public:
-
153  explicit IRMideaAC(const uint16_t pin, const bool inverted = false,
-
154  const bool use_modulation = true);
-
155  void stateReset(void);
-
156 #if SEND_MIDEA
-
157  void send(const uint16_t repeat = kMideaMinRepeat);
-
162  int8_t calibrate(void) { return _irsend.calibrate(); }
-
163 #endif // SEND_MIDEA
-
164  void begin(void);
-
165  void on(void);
-
166  void off(void);
-
167  void setPower(const bool on);
-
168  bool getPower(void) const;
-
169  bool getUseCelsius(void) const;
-
170  void setUseCelsius(const bool celsius);
-
171  void setTemp(const uint8_t temp, const bool useCelsius = false);
-
172  uint8_t getTemp(const bool useCelsius = false) const;
-
173  void setSensorTemp(const uint8_t temp, const bool useCelsius = false);
-
174  uint8_t getSensorTemp(const bool useCelsius = false) const;
-
175  void setEnableSensorTemp(const bool on);
-
176  bool getEnableSensorTemp(void) const;
-
177  void setFan(const uint8_t fan);
-
178  uint8_t getFan(void) const;
-
179  void setMode(const uint8_t mode);
-
180  uint8_t getMode(void) const;
-
181  void setRaw(const uint64_t newState);
-
182  uint64_t getRaw(void);
-
183  static bool validChecksum(const uint64_t state);
-
184  void setSleep(const bool on);
-
185  bool getSleep(void) const;
-
186  bool isSwingVToggle(void) const;
-
187  void setSwingVToggle(const bool on);
-
188  bool getSwingVToggle(void);
-
189  #if KAYSUN_AC
-
190  bool isSwingVStep(void) const;
-
191  void setSwingVStep(const bool on);
-
192  bool getSwingVStep(void);
-
193  #endif // KAYSUN_AC
-
194  bool isEconoToggle(void) const;
-
195  void setEconoToggle(const bool on);
-
196  bool getEconoToggle(void);
-
197  bool isTurboToggle(void) const;
-
198  void setTurboToggle(const bool on);
-
199  bool getTurboToggle(void);
-
200  bool isLightToggle(void) const;
-
201  void setLightToggle(const bool on);
-
202  bool getLightToggle(void);
-
203  uint8_t getType(void) const;
-
204  bool isOnTimerEnabled(void) const;
-
205  uint16_t getOnTimer(void) const;
-
206  void setOnTimer(const uint16_t mins);
-
207  bool isOffTimerEnabled(void) const;
-
208  uint16_t getOffTimer(void) const;
-
209  void setOffTimer(const uint16_t mins);
-
210  static uint8_t convertMode(const stdAc::opmode_t mode);
-
211  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
212  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
213  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
214  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL);
-
215  String toString(void);
-
216 #ifndef UNIT_TEST
-
217 
-
218  private:
- -
220 #else // UNIT_TEST
-
221  IRsendTest _irsend;
-
223 #endif // UNIT_TEST
- - -
227  #if KAYSUN_AC
- -
229  #endif // KAYSUN_AC
- - - -
233  void checksum(void);
-
234  static uint8_t calcChecksum(const uint64_t state);
-
235  void setType(const uint8_t type);
-
236 };
-
237 
-
238 #endif // IR_MIDEA_H_
-
-
void setOnTimer(const uint16_t mins)
Set the value of the On Timer.
Definition: ir_Midea.cpp:481
-
uint8_t getType(void) const
Get the message type setting of the A/C message.
Definition: ir_Midea.cpp:443
-
uint8_t Sum
Definition: ir_Midea.h:59
-
const uint8_t kMideaACMinTempF
Fahrenheit.
Definition: ir_Midea.h:93
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Midea.cpp:113
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Midea.cpp:556
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Midea.cpp:313
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Midea.cpp:153
-
void setUseCelsius(const bool celsius)
Set the A/C unit to use Celsius natively.
Definition: ir_Midea.cpp:178
-
const uint16_t kMideaMinRepeat
Definition: IRremoteESP8266.h:1028
-
bool _EconoToggle
Definition: ir_Midea.h:230
-
MideaProtocol _
Definition: ir_Midea.h:225
-
void setTemp(const uint8_t temp, const bool useCelsius=false)
Set the temperature.
Definition: ir_Midea.cpp:189
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Midea.cpp:166
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Midea.h:162
-
bool isOffTimerEnabled(void) const
Is the OffTimer enabled?
Definition: ir_Midea.cpp:492
-
bool _TurboToggle
Definition: ir_Midea.h:231
-
uint8_t Type
Normal, Special, or FollowMe message type.
Definition: ir_Midea.h:87
-
const uint8_t kMideaACMaxSensorTempF
Fahrenheit (Guess only!)
Definition: ir_Midea.h:100
-
const uint8_t kMideaACTypeFollow
Message type.
Definition: ir_Midea.h:129
-
void setEconoToggle(const bool on)
Set the A/C to toggle the Econo (energy saver) mode for the next send.
Definition: ir_Midea.cpp:364
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t Header
Typically 0b10100.
Definition: ir_Midea.h:88
-
bool _SwingVToggle
Definition: ir_Midea.h:226
-
const uint8_t kMideaACAuto
Definition: ir_Midea.h:105
-
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Midea.cpp:436
-
IRMideaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Midea.cpp:95
-
const uint8_t kMideaACFan
Definition: ir_Midea.h:107
-
bool isOnTimerEnabled(void) const
Is the OnTimer enabled?
Definition: ir_Midea.cpp:463
-
void send(const uint16_t repeat=kMideaMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Midea.cpp:118
-
uint8_t useFahrenheit
Definition: ir_Midea.h:76
-
const uint8_t kMideaACTypeSpecial
Message type.
Definition: ir_Midea.h:128
- -
void setType(const uint8_t type)
Set the message type setting of the A/C message.
Definition: ir_Midea.cpp:447
-
void setTurboToggle(const bool on)
Set the A/C to toggle the Turbo mode for the next send.
Definition: ir_Midea.cpp:381
-
const uint8_t kMideaACMaxTempF
Fahrenheit.
Definition: ir_Midea.h:94
-
bool getLightToggle(void)
Definition: ir_Midea.cpp:408
-
uint16_t getOffTimer(void) const
Get the value of the OffTimer is currently set to.
Definition: ir_Midea.cpp:498
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t Power
Definition: ir_Midea.h:85
-
const uint8_t kMideaACTimerOff
Definition: ir_Midea.h:102
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t SensorTemp
Degrees or OnTimer.
Definition: ir_Midea.h:68
-
void setSwingVToggle(const bool on)
Set the A/C to toggle the vertical swing toggle for the next send.
Definition: ir_Midea.cpp:326
-
bool isSwingVToggle(void) const
Is the current state a vertical swing toggle message?
Definition: ir_Midea.cpp:331
-
bool isLightToggle(void) const
Is the current state a Light (LED) toggle message?
Definition: ir_Midea.cpp:402
-
bool getEnableSensorTemp(void) const
Is the remote temperature sensor enabled?
Definition: ir_Midea.cpp:275
-
const uint8_t kMideaACMaxSensorTempC
Celsius.
Definition: ir_Midea.h:98
-
std::string String
Definition: IRremoteESP8266.h:1217
-
kSwingVToggleStr
Definition: ir_Midea.h:122
-
bool getSwingVToggle(void)
Definition: ir_Midea.cpp:338
-
uint8_t Fan
Definition: ir_Midea.h:80
-
uint8_t Mode
Definition: ir_Midea.h:79
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Midea.cpp:285
-
const uint64_t kMideaACToggleTurbo
Definition: ir_Midea.h:126
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Midea.cpp:156
-
bool getTurboToggle(void)
Definition: ir_Midea.cpp:391
- -
void setOffTimer(const uint16_t mins)
Set the value of the Off Timer.
Definition: ir_Midea.cpp:505
-
const uint8_t kMideaACHeat
Definition: ir_Midea.h:106
-
uint8_t OffTimer
Nr of Half hours. Off is 0b111111.
Definition: ir_Midea.h:72
-
const uint64_t kMideaACSwingVStep
Definition: ir_Midea.h:115
-
bool isSwingVStep(void) const
Is the current state a step vertical swing message?
Definition: ir_Midea.cpp:350
-
void setLightToggle(const bool on)
Set the A/C to toggle the Light (LED) mode for the next send.
Definition: ir_Midea.cpp:398
-
bool getUseCelsius(void) const
Is the device currently using Celsius or the Fahrenheit temp scale?
Definition: ir_Midea.cpp:172
-
uint16_t getOnTimer(void) const
Get the value of the OnTimer is currently set to.
Definition: ir_Midea.cpp:470
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Midea.cpp:543
-
const uint8_t kMideaACFanAuto
Definition: ir_Midea.h:108
-
const uint64_t kMideaACToggleSwingV
Definition: ir_Midea.h:114
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Midea.h:219
-
uint64_t remote_state
The state in native IR code form.
Definition: ir_Midea.h:55
-
Class for handling detailed Midea A/C messages.
Definition: ir_Midea.h:151
-
const uint8_t kMideaACMinSensorTempC
Celsius.
Definition: ir_Midea.h:97
-
void setRaw(const uint64_t newState)
Set the internal state from a valid code for this protocol.
Definition: ir_Midea.cpp:150
-
uint8_t getSensorTemp(const bool useCelsius=false) const
Get the current Sensor temperature setting.
Definition: ir_Midea.cpp:248
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Midea.cpp:297
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Midea.cpp:416
-
const PROGMEM char * kIonStr
"Ion"
Definition: IRtext.cpp:55
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Midea.cpp:319
-
const uint8_t kMideaACSensorTempOnTimerOff
Definition: ir_Midea.h:101
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Midea.cpp:291
-
const uint64_t kMideaACToggleEcono
Definition: ir_Midea.h:124
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Midea.cpp:529
-
uint8_t Sleep
Definition: ir_Midea.h:84
-
const uint8_t kMideaACFanMed
Definition: ir_Midea.h:110
-
uint8_t disableSensor
Definition: ir_Midea.h:69
-
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Midea.cpp:143
-
const uint8_t kMideaACMinTempC
Celsius.
Definition: ir_Midea.h:95
-
void setSwingVStep(const bool on)
Set the A/C to step the vertical swing for the next send.
Definition: ir_Midea.cpp:346
-
bool getSwingVStep(void)
Definition: ir_Midea.cpp:356
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Midea.cpp:516
-
const uint64_t kMideaACToggleLight
Definition: ir_Midea.h:125
-
const uint8_t kMideaACFanHigh
Definition: ir_Midea.h:111
-
bool getEconoToggle(void)
Definition: ir_Midea.cpp:374
-
const uint8_t kMideaACMaxTempC
Celsius.
Definition: ir_Midea.h:96
-
void setEnableSensorTemp(const bool on)
Enable the remote's Sensor temperature.
Definition: ir_Midea.cpp:262
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL)
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Midea.cpp:568
-
void setSensorTemp(const uint8_t temp, const bool useCelsius=false)
Set the Sensor temperature.
Definition: ir_Midea.cpp:225
-
const uint8_t kMideaACDry
Definition: ir_Midea.h:104
-
bool isTurboToggle(void) const
Is the current state a Turbo toggle message?
Definition: ir_Midea.cpp:385
-
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Midea.cpp:605
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Midea.cpp:431
-
const uint8_t kMideaACMinSensorTempF
Fahrenheit.
Definition: ir_Midea.h:99
-
bool _LightToggle
Definition: ir_Midea.h:232
-
const uint8_t kMideaACCool
Definition: ir_Midea.h:103
-
Native representation of a Midea A/C message.
Definition: ir_Midea.h:54
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Midea.cpp:160
-
uint8_t BeepDisable
0 = no beep in follow me messages, 1 = beep.
Definition: ir_Midea.h:73
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Midea.cpp:100
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kMideaACFanLow
Definition: ir_Midea.h:109
-
bool _SwingVStep
Definition: ir_Midea.h:228
-
uint8_t getTemp(const bool useCelsius=false) const
Get the current temperature setting.
Definition: ir_Midea.cpp:210
-
uint8_t Temp
Definition: ir_Midea.h:75
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Midea.cpp:279
-
const uint8_t kMideaACTypeCommand
Message type.
Definition: ir_Midea.h:127
-
bool isEconoToggle(void) const
Is the current state an Econo (energy saver) toggle message?
Definition: ir_Midea.cpp:368
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MilesTag2_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MilesTag2_8cpp.html deleted file mode 100644 index 12b6889c5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MilesTag2_8cpp.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_MilesTag2.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_MilesTag2.cpp File Reference
-
-
- -

Support for the MilesTag2 IR protocol for LaserTag gaming. -More...

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

-Variables

const uint16_t kMilesTag2ShotMask = 1 << (kMilesTag2ShotBits - 1)
 
const uint32_t kMilesTag2MsgMask = 1 << (kMilesTag2MsgBits - 1)
 
const uint8_t kMilesTag2MsgTerminator = 0xE8
 
const uint16_t kMilesTag2HdrMark = 2400
 
const uint16_t kMilesTag2Space = 600
 uSeconds. More...
 
const uint16_t kMilesTag2OneMark = 1200
 uSeconds. More...
 
const uint16_t kMilesTag2ZeroMark = 600
 uSeconds. More...
 
const uint16_t kMilesTag2RptLength = 32000
 uSeconds. More...
 
const uint16_t kMilesTag2StdFreq = 38000
 uSeconds. More...
 
const uint16_t kMilesTag2StdDuty = 25
 Hz. More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMilesTag2HdrMark

- -
-
- - - - -
const uint16_t kMilesTag2HdrMark = 2400
-
- -
-
- -

◆ kMilesTag2MsgMask

- -
-
- - - - -
const uint32_t kMilesTag2MsgMask = 1 << (kMilesTag2MsgBits - 1)
-
- -
-
- -

◆ kMilesTag2MsgTerminator

- -
-
- - - - -
const uint8_t kMilesTag2MsgTerminator = 0xE8
-
- -
-
- -

◆ kMilesTag2OneMark

- -
-
- - - - -
const uint16_t kMilesTag2OneMark = 1200
-
- -

uSeconds.

- -
-
- -

◆ kMilesTag2RptLength

- -
-
- - - - -
const uint16_t kMilesTag2RptLength = 32000
-
- -

uSeconds.

- -
-
- -

◆ kMilesTag2ShotMask

- -
-
- - - - -
const uint16_t kMilesTag2ShotMask = 1 << (kMilesTag2ShotBits - 1)
-
- -
-
- -

◆ kMilesTag2Space

- -
-
- - - - -
const uint16_t kMilesTag2Space = 600
-
- -

uSeconds.

- -
-
- -

◆ kMilesTag2StdDuty

- -
-
- - - - -
const uint16_t kMilesTag2StdDuty = 25
-
- -

Hz.

- -
-
- -

◆ kMilesTag2StdFreq

- -
-
- - - - -
const uint16_t kMilesTag2StdFreq = 38000
-
- -

uSeconds.

- -
-
- -

◆ kMilesTag2ZeroMark

- -
-
- - - - -
const uint16_t kMilesTag2ZeroMark = 600
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mirage_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mirage_8cpp.html deleted file mode 100644 index 2a7beb6b7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mirage_8cpp.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Mirage.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Mirage.cpp File Reference
-
-
- -

Support for Mirage protocol. -More...

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

-Variables

const uint16_t kMirageHdrMark = 8360
 uSeconds More...
 
const uint16_t kMirageBitMark = 554
 uSeconds More...
 
const uint16_t kMirageHdrSpace = 4248
 uSeconds More...
 
const uint16_t kMirageOneSpace = 1592
 uSeconds More...
 
const uint16_t kMirageZeroSpace = 545
 uSeconds More...
 
const uint32_t kMirageGap = kDefaultMessageGap
 uSeconds (just a guess) More...
 
const uint16_t kMirageFreq = 38000
 Hz. (Just a guess) More...
 
-

Detailed Description

-

Support for Mirage protocol.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1289
-

Variable Documentation

- -

◆ kMirageBitMark

- -
-
- - - - -
const uint16_t kMirageBitMark = 554
-
- -

uSeconds

- -
-
- -

◆ kMirageFreq

- -
-
- - - - -
const uint16_t kMirageFreq = 38000
-
- -

Hz. (Just a guess)

- -
-
- -

◆ kMirageGap

- -
-
- - - - -
const uint32_t kMirageGap = kDefaultMessageGap
-
- -

uSeconds (just a guess)

- -
-
- -

◆ kMirageHdrMark

- -
-
- - - - -
const uint16_t kMirageHdrMark = 8360
-
- -

uSeconds

- -
-
- -

◆ kMirageHdrSpace

- -
-
- - - - -
const uint16_t kMirageHdrSpace = 4248
-
- -

uSeconds

- -
-
- -

◆ kMirageOneSpace

- -
-
- - - - -
const uint16_t kMirageOneSpace = 1592
-
- -

uSeconds

- -
-
- -

◆ kMirageZeroSpace

- -
-
- - - - -
const uint16_t kMirageZeroSpace = 545
-
- -

uSeconds

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8cpp.html deleted file mode 100644 index 8c6af97fa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8cpp.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_MitsubishiHeavy.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_MitsubishiHeavy.cpp File Reference
-
-
- -

Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units. -More...

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

-Variables

const uint16_t kMitsubishiHeavyHdrMark = 3140
 
const uint16_t kMitsubishiHeavyHdrSpace = 1630
 
const uint16_t kMitsubishiHeavyBitMark = 370
 
const uint16_t kMitsubishiHeavyOneSpace = 420
 
const uint16_t kMitsubishiHeavyZeroSpace = 1220
 
const uint32_t kMitsubishiHeavyGap = kDefaultMessageGap
 
-

Detailed Description

-

Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units.

-
Note
This code was heavily influenced by ToniA's great work & code, but it has been written from scratch. Nothing was copied other than constants and message analysis.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/660
-
-https://github.com/ToniA/Raw-IR-decoder-for-Arduino/blob/master/MitsubishiHeavy.cpp
-
-https://github.com/ToniA/arduino-heatpumpir/blob/master/MitsubishiHeavyHeatpumpIR.cpp
-

Variable Documentation

- -

◆ kMitsubishiHeavyBitMark

- -
-
- - - - -
const uint16_t kMitsubishiHeavyBitMark = 370
-
- -
-
- -

◆ kMitsubishiHeavyGap

- -
-
- - - - -
const uint32_t kMitsubishiHeavyGap = kDefaultMessageGap
-
- -
-
- -

◆ kMitsubishiHeavyHdrMark

- -
-
- - - - -
const uint16_t kMitsubishiHeavyHdrMark = 3140
-
- -
-
- -

◆ kMitsubishiHeavyHdrSpace

- -
-
- - - - -
const uint16_t kMitsubishiHeavyHdrSpace = 1630
-
- -
-
- -

◆ kMitsubishiHeavyOneSpace

- -
-
- - - - -
const uint16_t kMitsubishiHeavyOneSpace = 420
-
- -
-
- -

◆ kMitsubishiHeavyZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishiHeavyZeroSpace = 1220
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h.html deleted file mode 100644 index 17fdcef4a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h.html +++ /dev/null @@ -1,1048 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_MitsubishiHeavy.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_MitsubishiHeavy.h File Reference
-
-
- -

Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units. -More...

- -

Go to the source code of this file.

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

-Classes

union  Mitsubishi152Protocol
 Native representation of a Mitsubishi Heavy 152-bit A/C message. More...
 
union  Mitsubishi88Protocol
 Native representation of a Mitsubishi Heavy 88-bit A/C message. More...
 
class  IRMitsubishiHeavy152Ac
 Class for handling detailed Mitsubishi Heavy 152-bit A/C messages. More...
 
class  IRMitsubishiHeavy88Ac
 Class for handling detailed Mitsubishi Heavy 88-bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kMitsubishiHeavySigLength = 5
 
const uint8_t kMitsubishiHeavyZmsSig [kMitsubishiHeavySigLength]
 
const uint8_t kMitsubishiHeavyAuto = 0
 
const uint8_t kMitsubishiHeavyCool = 1
 
const uint8_t kMitsubishiHeavyDry = 2
 
const uint8_t kMitsubishiHeavyFan = 3
 
const uint8_t kMitsubishiHeavyHeat = 4
 
const uint8_t kMitsubishiHeavyMinTemp = 17
 
const uint8_t kMitsubishiHeavyMaxTemp = 31
 
const uint8_t kMitsubishiHeavy152FanAuto = 0x0
 
const uint8_t kMitsubishiHeavy152FanLow = 0x1
 
const uint8_t kMitsubishiHeavy152FanMed = 0x2
 
const uint8_t kMitsubishiHeavy152FanHigh = 0x3
 
const uint8_t kMitsubishiHeavy152FanMax = 0x4
 
const uint8_t kMitsubishiHeavy152FanEcono = 0x6
 
const uint8_t kMitsubishiHeavy152FanTurbo = 0x8
 
const uint8_t kMitsubishiHeavy152SwingVAuto = 0
 
const uint8_t kMitsubishiHeavy152SwingVHighest = 1
 
const uint8_t kMitsubishiHeavy152SwingVHigh = 2
 
const uint8_t kMitsubishiHeavy152SwingVMiddle = 3
 
const uint8_t kMitsubishiHeavy152SwingVLow = 4
 
const uint8_t kMitsubishiHeavy152SwingVLowest = 5
 
const uint8_t kMitsubishiHeavy152SwingVOff = 6
 
const uint8_t kMitsubishiHeavy152SwingHAuto = 0
 
const uint8_t kMitsubishiHeavy152SwingHLeftMax = 1
 
const uint8_t kMitsubishiHeavy152SwingHLeft = 2
 
const uint8_t kMitsubishiHeavy152SwingHMiddle = 3
 
const uint8_t kMitsubishiHeavy152SwingHRight = 4
 
const uint8_t kMitsubishiHeavy152SwingHRightMax = 5
 
const uint8_t kMitsubishiHeavy152SwingHRightLeft = 6
 
const uint8_t kMitsubishiHeavy152SwingHLeftRight = 7
 
const uint8_t kMitsubishiHeavy152SwingHOff = 8
 
const uint8_t kMitsubishiHeavyZjsSig [kMitsubishiHeavySigLength]
 
const uint8_t kMitsubishiHeavy88SwingHSize = 2
 
const uint8_t kMitsubishiHeavy88SwingHOff = 0b0000
 
const uint8_t kMitsubishiHeavy88SwingHAuto = 0b1000
 
const uint8_t kMitsubishiHeavy88SwingHLeftMax = 0b0001
 
const uint8_t kMitsubishiHeavy88SwingHLeft = 0b0101
 
const uint8_t kMitsubishiHeavy88SwingHMiddle = 0b1001
 
const uint8_t kMitsubishiHeavy88SwingHRight = 0b1101
 
const uint8_t kMitsubishiHeavy88SwingHRightMax = 0b0010
 
const uint8_t kMitsubishiHeavy88SwingHRightLeft = 0b1010
 
const uint8_t kMitsubishiHeavy88SwingHLeftRight = 0b0110
 
const uint8_t kMitsubishiHeavy88SwingH3D = 0b1110
 
const uint8_t kMitsubishiHeavy88FanAuto = 0
 
const uint8_t kMitsubishiHeavy88FanLow = 2
 
const uint8_t kMitsubishiHeavy88FanMed = 3
 
const uint8_t kMitsubishiHeavy88FanHigh = 4
 
const uint8_t kMitsubishiHeavy88FanTurbo = 6
 
const uint8_t kMitsubishiHeavy88FanEcono = 7
 
const uint8_t kMitsubishiHeavy88SwingVByte5Size = 1
 
const uint8_t kMitsubishiHeavy88SwingVOff = 0b000
 
const uint8_t kMitsubishiHeavy88SwingVAuto = 0b100
 
const uint8_t kMitsubishiHeavy88SwingVHighest = 0b110
 
const uint8_t kMitsubishiHeavy88SwingVHigh = 0b001
 
const uint8_t kMitsubishiHeavy88SwingVMiddle = 0b011
 
const uint8_t kMitsubishiHeavy88SwingVLow = 0b101
 
const uint8_t kMitsubishiHeavy88SwingVLowest = 0b111
 
-

Detailed Description

-

Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR remote control units.

-
Note
This code was heavily influenced by ToniA's great work & code, but it has been written from scratch. Nothing was copied other than constants and message analysis.
-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/660
-
-https://github.com/ToniA/Raw-IR-decoder-for-Arduino/blob/master/MitsubishiHeavy.cpp
-
-https://github.com/ToniA/arduino-heatpumpir/blob/master/MitsubishiHeavyHeatpumpIR.cpp
-

Variable Documentation

- -

◆ kMitsubishiHeavy152FanAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanAuto = 0x0
-
- -
-
- -

◆ kMitsubishiHeavy152FanEcono

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanEcono = 0x6
-
- -
-
- -

◆ kMitsubishiHeavy152FanHigh

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanHigh = 0x3
-
- -
-
- -

◆ kMitsubishiHeavy152FanLow

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanLow = 0x1
-
- -
-
- -

◆ kMitsubishiHeavy152FanMax

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanMax = 0x4
-
- -
-
- -

◆ kMitsubishiHeavy152FanMed

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanMed = 0x2
-
- -
-
- -

◆ kMitsubishiHeavy152FanTurbo

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152FanTurbo = 0x8
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHAuto = 0
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHLeft

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHLeft = 2
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHLeftMax

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHLeftMax = 1
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHLeftRight

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHLeftRight = 7
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHMiddle

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHMiddle = 3
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHOff

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHOff = 8
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHRight

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHRight = 4
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHRightLeft

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHRightLeft = 6
-
- -
-
- -

◆ kMitsubishiHeavy152SwingHRightMax

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingHRightMax = 5
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVAuto = 0
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVHigh

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVHigh = 2
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVHighest

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVHighest = 1
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVLow

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVLow = 4
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVLowest

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVLowest = 5
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVMiddle

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVMiddle = 3
-
- -
-
- -

◆ kMitsubishiHeavy152SwingVOff

- -
-
- - - - -
const uint8_t kMitsubishiHeavy152SwingVOff = 6
-
- -
-
- -

◆ kMitsubishiHeavy88FanAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanAuto = 0
-
- -
-
- -

◆ kMitsubishiHeavy88FanEcono

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanEcono = 7
-
- -
-
- -

◆ kMitsubishiHeavy88FanHigh

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanHigh = 4
-
- -
-
- -

◆ kMitsubishiHeavy88FanLow

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanLow = 2
-
- -
-
- -

◆ kMitsubishiHeavy88FanMed

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanMed = 3
-
- -
-
- -

◆ kMitsubishiHeavy88FanTurbo

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88FanTurbo = 6
-
- -
-
- -

◆ kMitsubishiHeavy88SwingH3D

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingH3D = 0b1110
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHAuto = 0b1000
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHLeft

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHLeft = 0b0101
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHLeftMax

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHLeftMax = 0b0001
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHLeftRight

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHLeftRight = 0b0110
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHMiddle

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHMiddle = 0b1001
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHOff

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHOff = 0b0000
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHRight

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHRight = 0b1101
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHRightLeft

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHRightLeft = 0b1010
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHRightMax

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHRightMax = 0b0010
-
- -
-
- -

◆ kMitsubishiHeavy88SwingHSize

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingHSize = 2
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVAuto = 0b100
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVByte5Size

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVByte5Size = 1
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVHigh

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVHigh = 0b001
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVHighest

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVHighest = 0b110
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVLow

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVLow = 0b101
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVLowest

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVLowest = 0b111
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVMiddle

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVMiddle = 0b011
-
- -
-
- -

◆ kMitsubishiHeavy88SwingVOff

- -
-
- - - - -
const uint8_t kMitsubishiHeavy88SwingVOff = 0b000
-
- -
-
- -

◆ kMitsubishiHeavyAuto

- -
-
- - - - -
const uint8_t kMitsubishiHeavyAuto = 0
-
- -
-
- -

◆ kMitsubishiHeavyCool

- -
-
- - - - -
const uint8_t kMitsubishiHeavyCool = 1
-
- -
-
- -

◆ kMitsubishiHeavyDry

- -
-
- - - - -
const uint8_t kMitsubishiHeavyDry = 2
-
- -
-
- -

◆ kMitsubishiHeavyFan

- -
-
- - - - -
const uint8_t kMitsubishiHeavyFan = 3
-
- -
-
- -

◆ kMitsubishiHeavyHeat

- -
-
- - - - -
const uint8_t kMitsubishiHeavyHeat = 4
-
- -
-
- -

◆ kMitsubishiHeavyMaxTemp

- -
-
- - - - -
const uint8_t kMitsubishiHeavyMaxTemp = 31
-
- -
-
- -

◆ kMitsubishiHeavyMinTemp

- -
-
- - - - -
const uint8_t kMitsubishiHeavyMinTemp = 17
-
- -
-
- -

◆ kMitsubishiHeavySigLength

- -
-
- - - - -
const uint8_t kMitsubishiHeavySigLength = 5
-
- -
-
- -

◆ kMitsubishiHeavyZjsSig

- -
-
- - - - -
const uint8_t kMitsubishiHeavyZjsSig[kMitsubishiHeavySigLength]
-
-Initial value:
= {
-
0xAD, 0x51, 0x3C, 0xD9, 0x26}
-
-
-
- -

◆ kMitsubishiHeavyZmsSig

- -
-
- - - - -
const uint8_t kMitsubishiHeavyZmsSig[kMitsubishiHeavySigLength]
-
-Initial value:
= {
-
0xAD, 0x51, 0x3C, 0xE5, 0x1A}
-
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h_source.html deleted file mode 100644 index efb75598f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__MitsubishiHeavy_8h_source.html +++ /dev/null @@ -1,595 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_MitsubishiHeavy.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_MitsubishiHeavy.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 David Conran
-
2 
-
12 
-
13 // Supports:
-
14 // Brand: Mitsubishi Heavy Industries, Model: RLA502A700B remote (152 bit)
-
15 // Brand: Mitsubishi Heavy Industries, Model: SRKxxZM-S A/C (152 bit)
-
16 // Brand: Mitsubishi Heavy Industries, Model: SRKxxZMXA-S A/C (152 bit)
-
17 // Brand: Mitsubishi Heavy Industries, Model: RKX502A001C remote (88 bit)
-
18 // Brand: Mitsubishi Heavy Industries, Model: SRKxxZJ-S A/C (88 bit)
-
19 
-
20 #ifndef IR_MITSUBISHIHEAVY_H_
-
21 #define IR_MITSUBISHIHEAVY_H_
-
22 
-
23 #ifndef UNIT_TEST
-
24 #include <Arduino.h>
-
25 #endif
-
26 #include "IRremoteESP8266.h"
-
27 #include "IRsend.h"
-
28 #ifdef UNIT_TEST
-
29 #include "IRsend_test.h"
-
30 #endif
-
31 
- - -
35  struct {
-
36  // Byte 0~4
-
37  uint8_t Sig[5];
-
38  // Byte 5
-
39  uint8_t Mode :3;
-
40  uint8_t Power :1;
-
41  uint8_t :1;
-
42  uint8_t Clean :1;
-
43  uint8_t Filter:1;
-
44  uint8_t :1;
-
45  // Byte 6
-
46  uint8_t :8;
-
47  // Byte 7
-
48  uint8_t Temp :4;
-
49  uint8_t :4;
-
50  // Byte 8
-
51  uint8_t :8;
-
52  // Byte 9
-
53  uint8_t Fan :4;
-
54  uint8_t :4;
-
55  // Byte 10
-
56  uint8_t :8;
-
57  // Byte 11
-
58  uint8_t :1;
-
59  uint8_t Three :1;
-
60  uint8_t :2;
-
61  uint8_t D :1; // binding with "Three"
-
62  uint8_t SwingV :3;
-
63  // Byte 12
-
64  uint8_t :8;
-
65  // Byte 13
-
66  uint8_t SwingH :4;
-
67  uint8_t :4;
-
68  // Byte 14
-
69  uint8_t :8;
-
70  // Byte 15
-
71  uint8_t :6;
-
72  uint8_t Night :1;
-
73  uint8_t Silent :1;
-
74  };
-
75 };
-
76 
-
77 // Constants.
-
78 const uint8_t kMitsubishiHeavySigLength = 5;
-
79 
-
80 // ZMS (152 bit)
- -
82  0xAD, 0x51, 0x3C, 0xE5, 0x1A};
-
83 
-
84 const uint8_t kMitsubishiHeavyAuto = 0; // 0b000
-
85 const uint8_t kMitsubishiHeavyCool = 1; // 0b001
-
86 const uint8_t kMitsubishiHeavyDry = 2; // 0b010
-
87 const uint8_t kMitsubishiHeavyFan = 3; // 0b011
-
88 const uint8_t kMitsubishiHeavyHeat = 4; // 0b100
-
89 
-
90 const uint8_t kMitsubishiHeavyMinTemp = 17; // 17C
-
91 const uint8_t kMitsubishiHeavyMaxTemp = 31; // 31C
-
92 
-
93 const uint8_t kMitsubishiHeavy152FanAuto = 0x0; // 0b0000
-
94 const uint8_t kMitsubishiHeavy152FanLow = 0x1; // 0b0001
-
95 const uint8_t kMitsubishiHeavy152FanMed = 0x2; // 0b0010
-
96 const uint8_t kMitsubishiHeavy152FanHigh = 0x3; // 0b0011
-
97 const uint8_t kMitsubishiHeavy152FanMax = 0x4; // 0b0100
-
98 const uint8_t kMitsubishiHeavy152FanEcono = 0x6; // 0b0110
-
99 const uint8_t kMitsubishiHeavy152FanTurbo = 0x8; // 0b1000
-
100 
-
101 const uint8_t kMitsubishiHeavy152SwingVAuto = 0; // 0b000
-
102 const uint8_t kMitsubishiHeavy152SwingVHighest = 1; // 0b001
-
103 const uint8_t kMitsubishiHeavy152SwingVHigh = 2; // 0b010
-
104 const uint8_t kMitsubishiHeavy152SwingVMiddle = 3; // 0b011
-
105 const uint8_t kMitsubishiHeavy152SwingVLow = 4; // 0b100
-
106 const uint8_t kMitsubishiHeavy152SwingVLowest = 5; // 0b101
-
107 const uint8_t kMitsubishiHeavy152SwingVOff = 6; // 0b110
-
108 
-
109 const uint8_t kMitsubishiHeavy152SwingHAuto = 0; // 0b0000
-
110 const uint8_t kMitsubishiHeavy152SwingHLeftMax = 1; // 0b0001
-
111 const uint8_t kMitsubishiHeavy152SwingHLeft = 2; // 0b0010
-
112 const uint8_t kMitsubishiHeavy152SwingHMiddle = 3; // 0b0011
-
113 const uint8_t kMitsubishiHeavy152SwingHRight = 4; // 0b0100
-
114 const uint8_t kMitsubishiHeavy152SwingHRightMax = 5; // 0b0101
-
115 const uint8_t kMitsubishiHeavy152SwingHRightLeft = 6; // 0b0110
-
116 const uint8_t kMitsubishiHeavy152SwingHLeftRight = 7; // 0b0111
-
117 const uint8_t kMitsubishiHeavy152SwingHOff = 8; // 0b1000
-
118 
- - -
122  struct {
-
123  // Byte 0~4
-
124  uint8_t Sig[5];
-
125  // Byte 5
-
126  uint8_t :1;
-
127  uint8_t SwingV5 :1;
-
128  uint8_t SwingH1 :2;
-
129  uint8_t :1;
-
130  uint8_t Clean :1;
-
131  uint8_t SwingH2 :2;
-
132  // Byte 6
-
133  uint8_t :8;
-
134  // Byte 7
-
135  uint8_t :3;
-
136  uint8_t SwingV7 :2;
-
137  uint8_t Fan :3;
-
138  // Byte 8
-
139  uint8_t :8;
-
140  // Byte 9
-
141  uint8_t Mode :3;
-
142  uint8_t Power :1;
-
143  uint8_t Temp :4;
-
144  };
-
145 };
-
146 
-
147 // ZJS (88 bit)
- -
149  0xAD, 0x51, 0x3C, 0xD9, 0x26};
-
150 
-
151 const uint8_t kMitsubishiHeavy88SwingHSize = 2; // Bits (per offset)
-
152 const uint8_t kMitsubishiHeavy88SwingHOff = 0b0000;
-
153 const uint8_t kMitsubishiHeavy88SwingHAuto = 0b1000;
-
154 const uint8_t kMitsubishiHeavy88SwingHLeftMax = 0b0001;
-
155 const uint8_t kMitsubishiHeavy88SwingHLeft = 0b0101;
-
156 const uint8_t kMitsubishiHeavy88SwingHMiddle = 0b1001;
-
157 const uint8_t kMitsubishiHeavy88SwingHRight = 0b1101;
-
158 const uint8_t kMitsubishiHeavy88SwingHRightMax = 0b0010;
-
159 const uint8_t kMitsubishiHeavy88SwingHRightLeft = 0b1010;
-
160 const uint8_t kMitsubishiHeavy88SwingHLeftRight = 0b0110;
-
161 const uint8_t kMitsubishiHeavy88SwingH3D = 0b1110;
-
162 
-
163 const uint8_t kMitsubishiHeavy88FanAuto = 0; // 0b000
-
164 const uint8_t kMitsubishiHeavy88FanLow = 2; // 0b010
-
165 const uint8_t kMitsubishiHeavy88FanMed = 3; // 0b011
-
166 const uint8_t kMitsubishiHeavy88FanHigh = 4; // 0b100
-
167 const uint8_t kMitsubishiHeavy88FanTurbo = 6; // 0b110
-
168 const uint8_t kMitsubishiHeavy88FanEcono = 7; // 0b111
- -
170 
-
171  // Mask 0b111
-
172 const uint8_t kMitsubishiHeavy88SwingVOff = 0b000; // 0
-
173 const uint8_t kMitsubishiHeavy88SwingVAuto = 0b100; // 4
-
174 const uint8_t kMitsubishiHeavy88SwingVHighest = 0b110; // 6
-
175 const uint8_t kMitsubishiHeavy88SwingVHigh = 0b001; // 1
-
176 const uint8_t kMitsubishiHeavy88SwingVMiddle = 0b011; // 3
-
177 const uint8_t kMitsubishiHeavy88SwingVLow = 0b101; // 5
-
178 const uint8_t kMitsubishiHeavy88SwingVLowest = 0b111; // 7
-
179 
-
180 
-
181 // Classes
-
182 
- -
185  public:
-
186  explicit IRMitsubishiHeavy152Ac(const uint16_t pin,
-
187  const bool inverted = false,
-
188  const bool use_modulation = true);
-
189  void stateReset(void);
-
190 #if SEND_MITSUBISHIHEAVY
-
191  void send(const uint16_t repeat = kMitsubishiHeavy152MinRepeat);
-
196  int8_t calibrate(void) { return _irsend.calibrate(); }
-
197 #endif // SEND_MITSUBISHIHEAVY
-
198  void begin(void);
-
199  void on(void);
-
200  void off(void);
-
201 
-
202  void setPower(const bool on);
-
203  bool getPower(void) const;
-
204 
-
205  void setTemp(const uint8_t temp);
-
206  uint8_t getTemp(void) const;
-
207 
-
208  void setFan(const uint8_t fan);
-
209  uint8_t getFan(void) const;
-
210 
-
211  void setMode(const uint8_t mode);
-
212  uint8_t getMode(void) const;
-
213 
-
214  void setSwingVertical(const uint8_t pos);
-
215  uint8_t getSwingVertical(void) const;
-
216  void setSwingHorizontal(const uint8_t pos);
-
217  uint8_t getSwingHorizontal(void) const;
-
218 
-
219  void setNight(const bool on);
-
220  bool getNight(void) const;
-
221 
-
222  void set3D(const bool on);
-
223  bool get3D(void) const;
-
224 
-
225  void setSilent(const bool on);
-
226  bool getSilent(void) const;
-
227 
-
228  void setFilter(const bool on);
-
229  bool getFilter(void) const;
-
230 
-
231  void setClean(const bool on);
-
232  bool getClean(void) const;
-
233 
-
234  void setTurbo(const bool on);
-
235  bool getTurbo(void) const;
-
236 
-
237  void setEcono(const bool on);
-
238  bool getEcono(void) const;
-
239 
-
240  uint8_t* getRaw(void);
-
241  void setRaw(const uint8_t* data);
-
242 
-
243  static bool checkZmsSig(const uint8_t *state);
-
244  static bool validChecksum(
-
245  const uint8_t *state,
-
246  const uint16_t length = kMitsubishiHeavy152StateLength);
-
247  static uint8_t convertMode(const stdAc::opmode_t mode);
-
248  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
249  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
250  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
251  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
252  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
253  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
254  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
255  stdAc::state_t toCommon(void) const;
-
256  String toString(void) const;
-
257 #ifndef UNIT_TEST
-
258 
-
259  private:
- -
261 #else // UNIT_TEST
-
262  IRsendTest _irsend;
-
264 #endif // UNIT_TEST
- -
267  void checksum(void);
-
268 };
-
269 
- -
272  public:
-
273  explicit IRMitsubishiHeavy88Ac(const uint16_t pin,
-
274  const bool inverted = false,
-
275  const bool use_modulation = true);
-
276  void stateReset(void);
-
277 #if SEND_MITSUBISHIHEAVY
-
278  void send(const uint16_t repeat = kMitsubishiHeavy88MinRepeat);
-
283  int8_t calibrate(void) { return _irsend.calibrate(); }
-
284 #endif // SEND_MITSUBISHIHEAVY
-
285  void begin(void);
-
286  void on(void);
-
287  void off(void);
-
288 
-
289  void setPower(const bool on);
-
290  bool getPower(void) const;
-
291 
-
292  void setTemp(const uint8_t temp);
-
293  uint8_t getTemp(void) const;
-
294 
-
295  void setFan(const uint8_t fan);
-
296  uint8_t getFan(void) const;
-
297 
-
298  void setMode(const uint8_t mode);
-
299  uint8_t getMode(void) const;
-
300 
-
301  void setSwingVertical(const uint8_t pos);
-
302  uint8_t getSwingVertical(void) const;
-
303  void setSwingHorizontal(const uint8_t pos);
-
304  uint8_t getSwingHorizontal(void) const;
-
305 
-
306  void setTurbo(const bool on);
-
307  bool getTurbo(void) const;
-
308 
-
309  void setEcono(const bool on);
-
310  bool getEcono(void) const;
-
311 
-
312  void set3D(const bool on);
-
313  bool get3D(void) const;
-
314 
-
315  void setClean(const bool on);
-
316  bool getClean(void) const;
-
317 
-
318  uint8_t* getRaw(void);
-
319  void setRaw(const uint8_t* data);
-
320 
-
321  static bool checkZjsSig(const uint8_t *state);
-
322  static bool validChecksum(
-
323  const uint8_t *state,
-
324  const uint16_t length = kMitsubishiHeavy88StateLength);
-
325  static uint8_t convertMode(const stdAc::opmode_t mode);
-
326  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
327  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
328  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
329  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
330  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
331  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
332  stdAc::state_t toCommon(void) const;
-
333  String toString(void) const;
-
334 #ifndef UNIT_TEST
-
335 
-
336  private:
- -
338 #else // UNIT_TEST
-
339  IRsendTest _irsend;
-
341 #endif // UNIT_TEST
- -
344  void checksum(void);
-
345 };
-
346 #endif // IR_MITSUBISHIHEAVY_H_
-
-
bool getClean(void) const
Get the Clean mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:773
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_MitsubishiHeavy.cpp:632
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_MitsubishiHeavy.cpp:647
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_MitsubishiHeavy.cpp:601
-
const uint8_t kMitsubishiHeavy88SwingVByte5Size
Definition: ir_MitsubishiHeavy.h:169
-
uint8_t Fan
Definition: ir_MitsubishiHeavy.h:137
-
const uint16_t kMitsubishiHeavy152StateLength
Definition: IRremoteESP8266.h:1050
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_MitsubishiHeavy.h:196
-
Class for handling detailed Mitsubishi Heavy 152-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:184
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_MitsubishiHeavy.cpp:578
-
void checksum(void)
Calculate the checksum for the current internal state of the remote. Note: Technically it has no chec...
Definition: ir_MitsubishiHeavy.cpp:321
-
const uint8_t kMitsubishiHeavy152SwingVHigh
Definition: ir_MitsubishiHeavy.h:103
-
uint8_t Mode
Definition: ir_MitsubishiHeavy.h:39
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_MitsubishiHeavy.cpp:482
-
uint8_t Filter
Definition: ir_MitsubishiHeavy.h:43
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_MitsubishiHeavy.cpp:385
-
const uint8_t kMitsubishiHeavy152SwingHRightLeft
Definition: ir_MitsubishiHeavy.h:115
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_MitsubishiHeavy.cpp:342
-
uint8_t D
Definition: ir_MitsubishiHeavy.h:61
-
bool getNight(void) const
Get the Night (Sleep) mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:226
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_MitsubishiHeavy.cpp:858
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_MitsubishiHeavy.cpp:611
-
void setPower(const bool on)
Change the power setting.
Definition: ir_MitsubishiHeavy.cpp:125
-
void set3D(const bool on)
Set the 3D mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:752
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
const uint8_t kMitsubishiHeavy152FanMed
Definition: ir_MitsubishiHeavy.h:95
-
void setSwingHorizontal(const uint8_t pos)
Set the Horizontal Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:698
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_MitsubishiHeavy.cpp:146
-
uint8_t Clean
Definition: ir_MitsubishiHeavy.h:130
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_MitsubishiHeavy.h:260
-
const uint8_t kMitsubishiHeavy152FanAuto
Definition: ir_MitsubishiHeavy.h:93
-
IRMitsubishiHeavy152Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_MitsubishiHeavy.cpp:79
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t SwingH
Definition: ir_MitsubishiHeavy.h:66
-
const uint8_t kMitsubishiHeavy152SwingVAuto
Definition: ir_MitsubishiHeavy.h:101
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:653
-
const uint8_t kMitsubishiHeavy88FanTurbo
Definition: ir_MitsubishiHeavy.h:167
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_MitsubishiHeavy.cpp:813
-
uint8_t Silent
Definition: ir_MitsubishiHeavy.h:73
-
const uint8_t kMitsubishiHeavy88SwingHLeftMax
Definition: ir_MitsubishiHeavy.h:154
-
const uint8_t kMitsubishiHeavy152SwingVHighest
Definition: ir_MitsubishiHeavy.h:102
-
const uint8_t kMitsubishiHeavy88SwingH3D
Definition: ir_MitsubishiHeavy.h:161
-
const uint8_t kMitsubishiHeavy88SwingHLeft
Definition: ir_MitsubishiHeavy.h:155
-
Mitsubishi88Protocol _
Definition: ir_MitsubishiHeavy.h:343
-
const uint8_t kMitsubishiHeavy152SwingVLow
Definition: ir_MitsubishiHeavy.h:105
-
const uint8_t kMitsubishiHeavy152SwingHOff
Definition: ir_MitsubishiHeavy.h:117
-
uint8_t getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:214
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_MitsubishiHeavy.cpp:97
- -
const uint8_t kMitsubishiHeavy152SwingHLeftRight
Definition: ir_MitsubishiHeavy.h:116
-
void checksum(void)
Calculate the checksum for the current internal state of the remote. Note: Technically it has no chec...
Definition: ir_MitsubishiHeavy.cpp:788
-
const uint8_t kMitsubishiHeavy88SwingHMiddle
Definition: ir_MitsubishiHeavy.h:156
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_MitsubishiHeavy.cpp:413
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_MitsubishiHeavy.cpp:598
-
uint8_t Sig[5]
Definition: ir_MitsubishiHeavy.h:37
-
const uint8_t kMitsubishiHeavy88SwingVAuto
Definition: ir_MitsubishiHeavy.h:173
-
bool getClean(void) const
Get the Clean mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:278
-
void setClean(const bool on)
Set the Clean mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:767
-
void setSilent(const bool on)
Set the Silent (Quiet) mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:247
-
bool getTurbo(void) const
Get the Turbo mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:292
-
bool getTurbo(void) const
Get the Turbo mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:732
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kMitsubishiHeavy88FanEcono
Definition: ir_MitsubishiHeavy.h:168
-
void setSwingVertical(const uint8_t pos)
Set the Vertical Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:675
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kMitsubishiHeavy88SwingHSize
Definition: ir_MitsubishiHeavy.h:151
-
void setClean(const bool on)
Set the Clean mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:271
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_MitsubishiHeavy.cpp:137
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_MitsubishiHeavy.cpp:118
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_MitsubishiHeavy.cpp:85
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_MitsubishiHeavy.cpp:828
-
void setNight(const bool on)
Set the Night (Sleep) mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:220
-
uint8_t Night
Definition: ir_MitsubishiHeavy.h:72
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_MitsubishiHeavy.h:337
-
const uint8_t kMitsubishiHeavySigLength
Definition: ir_MitsubishiHeavy.h:78
-
uint8_t SwingV5
Definition: ir_MitsubishiHeavy.h:127
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_MitsubishiHeavy.cpp:121
-
void setSwingVertical(const uint8_t pos)
Set the Vertical Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:196
-
const uint8_t kMitsubishiHeavy88SwingHRightLeft
Definition: ir_MitsubishiHeavy.h:159
-
const uint8_t kMitsubishiHeavy152SwingHRight
Definition: ir_MitsubishiHeavy.h:113
-
const uint8_t kMitsubishiHeavyHeat
Definition: ir_MitsubishiHeavy.h:88
-
void setTurbo(const bool on)
Set the Turbo mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:724
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
const uint8_t kMitsubishiHeavy152SwingHLeftMax
Definition: ir_MitsubishiHeavy.h:110
-
uint8_t SwingH1
Definition: ir_MitsubishiHeavy.h:128
-
const uint8_t kMitsubishiHeavyZmsSig[kMitsubishiHeavySigLength]
Definition: ir_MitsubishiHeavy.h:81
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:306
-
bool get3D(void) const
Get the 3D mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:241
-
const uint16_t kMitsubishiHeavy152MinRepeat
Definition: IRremoteESP8266.h:1052
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_MitsubishiHeavy.h:283
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_MitsubishiHeavy.cpp:168
-
uint8_t Temp
Definition: ir_MitsubishiHeavy.h:48
-
static bool checkZjsSig(const uint8_t *state)
Verify the given state has a ZJ-S signature.
Definition: ir_MitsubishiHeavy.cpp:780
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_MitsubishiHeavy.cpp:617
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_MitsubishiHeavy.cpp:131
-
IRMitsubishiHeavy88Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_MitsubishiHeavy.cpp:560
-
uint8_t Sig[5]
Definition: ir_MitsubishiHeavy.h:124
-
const uint8_t kMitsubishiHeavyMaxTemp
Definition: ir_MitsubishiHeavy.h:91
-
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition: ir_MitsubishiHeavy.cpp:593
-
const uint16_t kMitsubishiHeavy88StateLength
Definition: IRremoteESP8266.h:1047
-
const uint8_t kMitsubishiHeavy88SwingVMiddle
Definition: ir_MitsubishiHeavy.h:176
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_MitsubishiHeavy.cpp:355
-
const uint8_t kMitsubishiHeavyZjsSig[kMitsubishiHeavySigLength]
Definition: ir_MitsubishiHeavy.h:148
-
const uint8_t kMitsubishiHeavy152FanLow
Definition: ir_MitsubishiHeavy.h:94
-
const uint8_t kMitsubishiHeavy88FanHigh
Definition: ir_MitsubishiHeavy.h:166
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_MitsubishiHeavy.cpp:400
-
uint8_t Three
Definition: ir_MitsubishiHeavy.h:59
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_MitsubishiHeavy.cpp:106
-
const uint8_t kMitsubishiHeavyMinTemp
Definition: ir_MitsubishiHeavy.h:90
-
uint8_t Power
Definition: ir_MitsubishiHeavy.h:40
-
const uint8_t kMitsubishiHeavyCool
Definition: ir_MitsubishiHeavy.h:85
-
void setEcono(const bool on)
Set the Economical mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:298
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_MitsubishiHeavy.cpp:586
-
const uint8_t kMitsubishiHeavy88FanLow
Definition: ir_MitsubishiHeavy.h:164
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_MitsubishiHeavy.cpp:626
-
uint8_t raw[kMitsubishiHeavy88StateLength]
State in code form.
Definition: ir_MitsubishiHeavy.h:121
-
const uint8_t kMitsubishiHeavy88SwingVLow
Definition: ir_MitsubishiHeavy.h:177
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_MitsubishiHeavy.cpp:190
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_MitsubishiHeavy.cpp:669
-
static bool checkZmsSig(const uint8_t *state)
Verify the given state has a ZM-S signature.
Definition: ir_MitsubishiHeavy.cpp:313
-
const uint8_t kMitsubishiHeavy152SwingVMiddle
Definition: ir_MitsubishiHeavy.h:104
-
const uint8_t kMitsubishiHeavy88SwingHRight
Definition: ir_MitsubishiHeavy.h:157
-
const uint8_t kMitsubishiHeavy88SwingVHighest
Definition: ir_MitsubishiHeavy.h:174
-
uint8_t Mode
Definition: ir_MitsubishiHeavy.h:141
-
uint8_t getSwingHorizontal(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:718
-
const uint8_t kMitsubishiHeavy88SwingVOff
Definition: ir_MitsubishiHeavy.h:172
-
uint8_t getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:202
-
void setEcono(const bool on)
Set the Economical mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:738
-
uint8_t SwingV7
Definition: ir_MitsubishiHeavy.h:136
-
const uint8_t kMitsubishiHeavy88SwingVLowest
Definition: ir_MitsubishiHeavy.h:178
-
const uint8_t kMitsubishiHeavy152SwingHAuto
Definition: ir_MitsubishiHeavy.h:109
-
const uint8_t kMitsubishiHeavy152SwingHLeft
Definition: ir_MitsubishiHeavy.h:111
-
Mitsubishi152Protocol _
Definition: ir_MitsubishiHeavy.h:266
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_MitsubishiHeavy.cpp:152
-
uint8_t raw[kMitsubishiHeavy152StateLength]
State in code form.
Definition: ir_MitsubishiHeavy.h:34
-
uint8_t Fan
Definition: ir_MitsubishiHeavy.h:53
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_MitsubishiHeavy.cpp:806
-
const uint8_t kMitsubishiHeavy88SwingHAuto
Definition: ir_MitsubishiHeavy.h:153
-
const uint8_t kMitsubishiHeavyFan
Definition: ir_MitsubishiHeavy.h:87
-
bool getFilter(void) const
Get the Filter mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:265
-
const uint16_t kMitsubishiHeavy88MinRepeat
Definition: IRremoteESP8266.h:1049
-
const uint8_t kMitsubishiHeavy88SwingHOff
Definition: ir_MitsubishiHeavy.h:152
-
void setSwingHorizontal(const uint8_t pos)
Set the Horizontal Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:208
-
uint8_t SwingH2
Definition: ir_MitsubishiHeavy.h:131
-
static bool validChecksum(const uint8_t *state, const uint16_t length=kMitsubishiHeavy152StateLength)
Verify the checksum is valid for a given state.
Definition: ir_MitsubishiHeavy.cpp:331
-
const uint8_t kMitsubishiHeavy152SwingVOff
Definition: ir_MitsubishiHeavy.h:107
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_MitsubishiHeavy.cpp:901
-
const uint8_t kMitsubishiHeavy152SwingVLowest
Definition: ir_MitsubishiHeavy.h:106
-
Native representation of a Mitsubishi Heavy 88-bit A/C message.
Definition: ir_MitsubishiHeavy.h:120
-
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition: ir_MitsubishiHeavy.cpp:113
-
const uint8_t kMitsubishiHeavy88SwingHLeftRight
Definition: ir_MitsubishiHeavy.h:160
-
const uint8_t kMitsubishiHeavy88FanAuto
Definition: ir_MitsubishiHeavy.h:163
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:174
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_MitsubishiHeavy.cpp:427
-
bool get3D(void) const
Get the 3D mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:761
-
uint8_t Power
Definition: ir_MitsubishiHeavy.h:142
-
const uint8_t kMitsubishiHeavy88FanMed
Definition: ir_MitsubishiHeavy.h:165
-
void setTurbo(const bool on)
Set the Turbo mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:284
-
const uint8_t kMitsubishiHeavy88SwingHRightMax
Definition: ir_MitsubishiHeavy.h:158
-
bool getSilent(void) const
Get the Silent (Quiet) mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:253
-
void setPower(const bool on)
Change the power setting.
Definition: ir_MitsubishiHeavy.cpp:605
-
uint8_t Clean
Definition: ir_MitsubishiHeavy.h:42
-
const uint8_t kMitsubishiHeavy152FanHigh
Definition: ir_MitsubishiHeavy.h:96
-
void setFilter(const bool on)
Set the Filter mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:259
-
static bool validChecksum(const uint8_t *state, const uint16_t length=kMitsubishiHeavy88StateLength)
Verify the checksum is valid for a given state.
Definition: ir_MitsubishiHeavy.cpp:798
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_MitsubishiHeavy.cpp:566
-
const uint8_t kMitsubishiHeavy152SwingHRightMax
Definition: ir_MitsubishiHeavy.h:114
-
void set3D(const bool on)
Set the 3D mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:232
-
const uint8_t kMitsubishiHeavy152SwingHMiddle
Definition: ir_MitsubishiHeavy.h:112
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_MitsubishiHeavy.cpp:370
-
Class for handling detailed Mitsubishi Heavy 88-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:271
-
uint8_t getSwingVertical(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:692
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_MitsubishiHeavy.cpp:927
-
const uint8_t kMitsubishiHeavy152FanTurbo
Definition: ir_MitsubishiHeavy.h:99
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_MitsubishiHeavy.cpp:442
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_MitsubishiHeavy.cpp:456
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_MitsubishiHeavy.cpp:843
-
const uint8_t kMitsubishiHeavyDry
Definition: ir_MitsubishiHeavy.h:86
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_MitsubishiHeavy.cpp:872
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
Native representation of a Mitsubishi Heavy 152-bit A/C message.
Definition: ir_MitsubishiHeavy.h:33
-
bool getEcono(void) const
Get the Economical mode of the A/C.
Definition: ir_MitsubishiHeavy.cpp:746
-
uint8_t Temp
Definition: ir_MitsubishiHeavy.h:143
-
const uint8_t kMitsubishiHeavy88SwingVHigh
Definition: ir_MitsubishiHeavy.h:175
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_MitsubishiHeavy.cpp:887
-
void send(const uint16_t repeat=kMitsubishiHeavy88MinRepeat)
Send the current internal state as an IR message.
Definition: ir_MitsubishiHeavy.cpp:571
-
void send(const uint16_t repeat=kMitsubishiHeavy152MinRepeat)
Send the current internal state as an IR message.
Definition: ir_MitsubishiHeavy.cpp:90
-
const uint8_t kMitsubishiHeavyAuto
Definition: ir_MitsubishiHeavy.h:84
-
const uint8_t kMitsubishiHeavy152FanEcono
Definition: ir_MitsubishiHeavy.h:98
-
uint8_t SwingV
Definition: ir_MitsubishiHeavy.h:62
-
const uint8_t kMitsubishiHeavy152FanMax
Definition: ir_MitsubishiHeavy.h:97
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8cpp.html deleted file mode 100644 index 797d371a7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8cpp.html +++ /dev/null @@ -1,726 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Mitsubishi.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Mitsubishi.cpp File Reference
-
-
- -

Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github.com/z3t0/Arduino-IRremote Mitsubishi (TV) sending & Mitsubishi A/C support added by David Conran. -More...

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

-Variables

const uint16_t kMitsubishiTick = 30
 
const uint16_t kMitsubishiBitMarkTicks = 10
 
const uint16_t kMitsubishiBitMark = kMitsubishiBitMarkTicks * kMitsubishiTick
 
const uint16_t kMitsubishiOneSpaceTicks = 70
 
const uint16_t kMitsubishiOneSpace = kMitsubishiOneSpaceTicks * kMitsubishiTick
 
const uint16_t kMitsubishiZeroSpaceTicks = 30
 
const uint16_t kMitsubishiZeroSpace
 
const uint16_t kMitsubishiMinCommandLengthTicks = 1786
 
const uint16_t kMitsubishiMinCommandLength
 
const uint16_t kMitsubishiMinGapTicks = 936
 
const uint16_t kMitsubishiMinGap = kMitsubishiMinGapTicks * kMitsubishiTick
 
const uint16_t kMitsubishi2HdrMark = 8400
 
const uint16_t kMitsubishi2HdrSpace = kMitsubishi2HdrMark / 2
 
const uint16_t kMitsubishi2BitMark = 560
 
const uint16_t kMitsubishi2ZeroSpace = 520
 
const uint16_t kMitsubishi2OneSpace = kMitsubishi2ZeroSpace * 3
 
const uint16_t kMitsubishi2MinGap = 28500
 
const uint16_t kMitsubishiAcHdrMark = 3400
 
const uint16_t kMitsubishiAcHdrSpace = 1750
 
const uint16_t kMitsubishiAcBitMark = 450
 
const uint16_t kMitsubishiAcOneSpace = 1300
 
const uint16_t kMitsubishiAcZeroSpace = 420
 
const uint16_t kMitsubishiAcRptMark = 440
 
const uint16_t kMitsubishiAcRptSpace = 17100
 
const uint8_t kMitsubishiAcExtraTolerance = 5
 
const uint16_t kMitsubishi136HdrMark = 3324
 
const uint16_t kMitsubishi136HdrSpace = 1474
 
const uint16_t kMitsubishi136BitMark = 467
 
const uint16_t kMitsubishi136OneSpace = 1137
 
const uint16_t kMitsubishi136ZeroSpace = 351
 
const uint32_t kMitsubishi136Gap = kDefaultMessageGap
 
const uint16_t kMitsubishi112HdrMark = 3450
 
const uint16_t kMitsubishi112HdrSpace = 1696
 
const uint16_t kMitsubishi112BitMark = 450
 
const uint16_t kMitsubishi112OneSpace = 1250
 
const uint16_t kMitsubishi112ZeroSpace = 385
 
const uint32_t kMitsubishi112Gap = kDefaultMessageGap
 
const uint8_t kMitsubishi112HdrMarkTolerance = 5
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMitsubishi112BitMark

- -
-
- - - - -
const uint16_t kMitsubishi112BitMark = 450
-
- -
-
- -

◆ kMitsubishi112Gap

- -
-
- - - - -
const uint32_t kMitsubishi112Gap = kDefaultMessageGap
-
- -
-
- -

◆ kMitsubishi112HdrMark

- -
-
- - - - -
const uint16_t kMitsubishi112HdrMark = 3450
-
- -
-
- -

◆ kMitsubishi112HdrMarkTolerance

- -
-
- - - - -
const uint8_t kMitsubishi112HdrMarkTolerance = 5
-
- -
-
- -

◆ kMitsubishi112HdrSpace

- -
-
- - - - -
const uint16_t kMitsubishi112HdrSpace = 1696
-
- -
-
- -

◆ kMitsubishi112OneSpace

- -
-
- - - - -
const uint16_t kMitsubishi112OneSpace = 1250
-
- -
-
- -

◆ kMitsubishi112ZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishi112ZeroSpace = 385
-
- -
-
- -

◆ kMitsubishi136BitMark

- -
-
- - - - -
const uint16_t kMitsubishi136BitMark = 467
-
- -
-
- -

◆ kMitsubishi136Gap

- -
-
- - - - -
const uint32_t kMitsubishi136Gap = kDefaultMessageGap
-
- -
-
- -

◆ kMitsubishi136HdrMark

- -
-
- - - - -
const uint16_t kMitsubishi136HdrMark = 3324
-
- -
-
- -

◆ kMitsubishi136HdrSpace

- -
-
- - - - -
const uint16_t kMitsubishi136HdrSpace = 1474
-
- -
-
- -

◆ kMitsubishi136OneSpace

- -
-
- - - - -
const uint16_t kMitsubishi136OneSpace = 1137
-
- -
-
- -

◆ kMitsubishi136ZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishi136ZeroSpace = 351
-
- -
-
- -

◆ kMitsubishi2BitMark

- -
-
- - - - -
const uint16_t kMitsubishi2BitMark = 560
-
- -
-
- -

◆ kMitsubishi2HdrMark

- -
-
- - - - -
const uint16_t kMitsubishi2HdrMark = 8400
-
- -
-
- -

◆ kMitsubishi2HdrSpace

- -
-
- - - - -
const uint16_t kMitsubishi2HdrSpace = kMitsubishi2HdrMark / 2
-
- -
-
- -

◆ kMitsubishi2MinGap

- -
-
- - - - -
const uint16_t kMitsubishi2MinGap = 28500
-
- -
-
- -

◆ kMitsubishi2OneSpace

- -
-
- - - - -
const uint16_t kMitsubishi2OneSpace = kMitsubishi2ZeroSpace * 3
-
- -
-
- -

◆ kMitsubishi2ZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishi2ZeroSpace = 520
-
- -
-
- -

◆ kMitsubishiAcBitMark

- -
-
- - - - -
const uint16_t kMitsubishiAcBitMark = 450
-
- -
-
- -

◆ kMitsubishiAcExtraTolerance

- -
-
- - - - -
const uint8_t kMitsubishiAcExtraTolerance = 5
-
- -
-
- -

◆ kMitsubishiAcHdrMark

- -
-
- - - - -
const uint16_t kMitsubishiAcHdrMark = 3400
-
- -
-
- -

◆ kMitsubishiAcHdrSpace

- -
-
- - - - -
const uint16_t kMitsubishiAcHdrSpace = 1750
-
- -
-
- -

◆ kMitsubishiAcOneSpace

- -
-
- - - - -
const uint16_t kMitsubishiAcOneSpace = 1300
-
- -
-
- -

◆ kMitsubishiAcRptMark

- -
-
- - - - -
const uint16_t kMitsubishiAcRptMark = 440
-
- -
-
- -

◆ kMitsubishiAcRptSpace

- -
-
- - - - -
const uint16_t kMitsubishiAcRptSpace = 17100
-
- -
-
- -

◆ kMitsubishiAcZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishiAcZeroSpace = 420
-
- -
-
- -

◆ kMitsubishiBitMark

- -
-
- - - - -
const uint16_t kMitsubishiBitMark = kMitsubishiBitMarkTicks * kMitsubishiTick
-
- -
-
- -

◆ kMitsubishiBitMarkTicks

- -
-
- - - - -
const uint16_t kMitsubishiBitMarkTicks = 10
-
- -
-
- -

◆ kMitsubishiMinCommandLength

- -
-
- - - - -
const uint16_t kMitsubishiMinCommandLength
-
-
- -

◆ kMitsubishiMinCommandLengthTicks

- -
-
- - - - -
const uint16_t kMitsubishiMinCommandLengthTicks = 1786
-
- -
-
- -

◆ kMitsubishiMinGap

- -
-
- - - - -
const uint16_t kMitsubishiMinGap = kMitsubishiMinGapTicks * kMitsubishiTick
-
- -
-
- -

◆ kMitsubishiMinGapTicks

- -
-
- - - - -
const uint16_t kMitsubishiMinGapTicks = 936
-
- -
-
- -

◆ kMitsubishiOneSpace

- -
-
- - - - -
const uint16_t kMitsubishiOneSpace = kMitsubishiOneSpaceTicks * kMitsubishiTick
-
- -
-
- -

◆ kMitsubishiOneSpaceTicks

- -
-
- - - - -
const uint16_t kMitsubishiOneSpaceTicks = 70
-
- -
-
- -

◆ kMitsubishiTick

- -
-
- - - - -
const uint16_t kMitsubishiTick = 30
-
- -
-
- -

◆ kMitsubishiZeroSpace

- -
-
- - - - -
const uint16_t kMitsubishiZeroSpace
-
-Initial value: -
-
- -

◆ kMitsubishiZeroSpaceTicks

- -
-
- - - - -
const uint16_t kMitsubishiZeroSpaceTicks = 30
-
- -
-
-
-
const uint16_t kMitsubishiTick
Definition: ir_Mitsubishi.cpp:36
-
const uint16_t kMitsubishiMinCommandLengthTicks
Definition: ir_Mitsubishi.cpp:44
-
const uint16_t kMitsubishiZeroSpaceTicks
Definition: ir_Mitsubishi.cpp:41
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h.html deleted file mode 100644 index 18570fa54..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h.html +++ /dev/null @@ -1,1287 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Mitsubishi.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Mitsubishi.h File Reference
-
-
- -

Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github.com/z3t0/Arduino-IRremote Mitsubishi (TV) sending & Mitsubishi A/C support added by David Conran. -More...

- -

Go to the source code of this file.

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

-Classes

union  Mitsubishi144Protocol
 Native representation of a Mitsubishi 144-bit A/C message. More...
 
union  Mitsubishi136Protocol
 Native representation of a Mitsubishi 136-bit A/C message. More...
 
union  Mitsubishi112Protocol
 Native representation of a Mitsubishi 112-bit A/C message. More...
 
class  IRMitsubishiAC
 Class for handling detailed Mitsubishi 144-bit A/C messages. More...
 
class  IRMitsubishi136
 Class for handling detailed Mitsubishi 136-bit A/C messages. More...
 
class  IRMitsubishi112
 Class for handling detailed Mitsubishi 122-bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kMitsubishiAcAuto = 0b100
 
const uint8_t kMitsubishiAcCool = 0b011
 
const uint8_t kMitsubishiAcDry = 0b010
 
const uint8_t kMitsubishiAcHeat = 0b001
 
const uint8_t kMitsubishiAcFanAuto = 0
 
const uint8_t kMitsubishiAcFanMax = 5
 
const uint8_t kMitsubishiAcFanRealMax = 4
 
const uint8_t kMitsubishiAcFanSilent = 6
 
const uint8_t kMitsubishiAcFanQuiet = kMitsubishiAcFanSilent
 
const float kMitsubishiAcMinTemp = 16.0
 
const float kMitsubishiAcMaxTemp = 31.0
 
const uint8_t kMitsubishiAcVaneAuto = 0b000
 
const uint8_t kMitsubishiAcVaneHighest = 0b001
 
const uint8_t kMitsubishiAcVaneHigh = 0b010
 
const uint8_t kMitsubishiAcVaneMiddle = 0b011
 
const uint8_t kMitsubishiAcVaneLow = 0b100
 
const uint8_t kMitsubishiAcVaneLowest = 0b101
 
const uint8_t kMitsubishiAcVaneSwing = 0b111
 
const uint8_t kMitsubishiAcVaneAutoMove = kMitsubishiAcVaneSwing
 
const uint8_t kMitsubishiAcWideVaneLeftMax = 0b0001
 
const uint8_t kMitsubishiAcWideVaneLeft = 0b0010
 
const uint8_t kMitsubishiAcWideVaneMiddle = 0b0011
 
const uint8_t kMitsubishiAcWideVaneRight = 0b0100
 
const uint8_t kMitsubishiAcWideVaneRightMax = 0b0101
 
const uint8_t kMitsubishiAcWideVaneWide = 0b0110
 
const uint8_t kMitsubishiAcWideVaneAuto = 0b1000
 
const uint8_t kMitsubishiAcNoTimer = 0
 
const uint8_t kMitsubishiAcStartTimer = 5
 
const uint8_t kMitsubishiAcStopTimer = 3
 
const uint8_t kMitsubishiAcStartStopTimer = 7
 
const uint8_t kMitsubishi136PowerByte = 5
 
const uint8_t kMitsubishi136MinTemp = 17
 
const uint8_t kMitsubishi136MaxTemp = 30
 
const uint8_t kMitsubishi136Fan = 0b000
 
const uint8_t kMitsubishi136Cool = 0b001
 
const uint8_t kMitsubishi136Heat = 0b010
 
const uint8_t kMitsubishi136Auto = 0b011
 
const uint8_t kMitsubishi136Dry = 0b101
 
const uint8_t kMitsubishi136SwingVLowest = 0b0000
 
const uint8_t kMitsubishi136SwingVLow = 0b0001
 
const uint8_t kMitsubishi136SwingVHigh = 0b0010
 
const uint8_t kMitsubishi136SwingVHighest = 0b0011
 
const uint8_t kMitsubishi136SwingVAuto = 0b1100
 
const uint8_t kMitsubishi136FanMin = 0b00
 
const uint8_t kMitsubishi136FanLow = 0b01
 
const uint8_t kMitsubishi136FanMed = 0b10
 
const uint8_t kMitsubishi136FanMax = 0b11
 
const uint8_t kMitsubishi136FanQuiet = kMitsubishi136FanMin
 
const uint8_t kMitsubishi112Cool = 0b011
 
const uint8_t kMitsubishi112Heat = 0b001
 
const uint8_t kMitsubishi112Auto = 0b111
 
const uint8_t kMitsubishi112Dry = 0b010
 
const uint8_t kMitsubishi112MinTemp = 16
 
const uint8_t kMitsubishi112MaxTemp = 31
 
const uint8_t kMitsubishi112FanMin = 0b010
 
const uint8_t kMitsubishi112FanLow = 0b011
 
const uint8_t kMitsubishi112FanMed = 0b101
 
const uint8_t kMitsubishi112FanMax = 0b000
 
const uint8_t kMitsubishi112FanQuiet = kMitsubishi112FanMin
 
const uint8_t kMitsubishi112SwingVLowest = 0b101
 
const uint8_t kMitsubishi112SwingVLow = 0b100
 
const uint8_t kMitsubishi112SwingVMiddle = 0b011
 
const uint8_t kMitsubishi112SwingVHigh = 0b010
 
const uint8_t kMitsubishi112SwingVHighest = 0b001
 
const uint8_t kMitsubishi112SwingVAuto = 0b111
 
const uint8_t kMitsubishi112SwingHLeftMax = 0b0001
 
const uint8_t kMitsubishi112SwingHLeft = 0b0010
 
const uint8_t kMitsubishi112SwingHMiddle = 0b0011
 
const uint8_t kMitsubishi112SwingHRight = 0b0100
 
const uint8_t kMitsubishi112SwingHRightMax = 0b0101
 
const uint8_t kMitsubishi112SwingHWide = 0b1000
 
const uint8_t kMitsubishi112SwingHAuto = 0b1100
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMitsubishi112Auto

- -
-
- - - - -
const uint8_t kMitsubishi112Auto = 0b111
-
- -
-
- -

◆ kMitsubishi112Cool

- -
-
- - - - -
const uint8_t kMitsubishi112Cool = 0b011
-
- -
-
- -

◆ kMitsubishi112Dry

- -
-
- - - - -
const uint8_t kMitsubishi112Dry = 0b010
-
- -
-
- -

◆ kMitsubishi112FanLow

- -
-
- - - - -
const uint8_t kMitsubishi112FanLow = 0b011
-
- -
-
- -

◆ kMitsubishi112FanMax

- -
-
- - - - -
const uint8_t kMitsubishi112FanMax = 0b000
-
- -
-
- -

◆ kMitsubishi112FanMed

- -
-
- - - - -
const uint8_t kMitsubishi112FanMed = 0b101
-
- -
-
- -

◆ kMitsubishi112FanMin

- -
-
- - - - -
const uint8_t kMitsubishi112FanMin = 0b010
-
- -
-
- -

◆ kMitsubishi112FanQuiet

- -
-
- - - - -
const uint8_t kMitsubishi112FanQuiet = kMitsubishi112FanMin
-
- -
-
- -

◆ kMitsubishi112Heat

- -
-
- - - - -
const uint8_t kMitsubishi112Heat = 0b001
-
- -
-
- -

◆ kMitsubishi112MaxTemp

- -
-
- - - - -
const uint8_t kMitsubishi112MaxTemp = 31
-
- -
-
- -

◆ kMitsubishi112MinTemp

- -
-
- - - - -
const uint8_t kMitsubishi112MinTemp = 16
-
- -
-
- -

◆ kMitsubishi112SwingHAuto

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHAuto = 0b1100
-
- -
-
- -

◆ kMitsubishi112SwingHLeft

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHLeft = 0b0010
-
- -
-
- -

◆ kMitsubishi112SwingHLeftMax

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHLeftMax = 0b0001
-
- -
-
- -

◆ kMitsubishi112SwingHMiddle

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHMiddle = 0b0011
-
- -
-
- -

◆ kMitsubishi112SwingHRight

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHRight = 0b0100
-
- -
-
- -

◆ kMitsubishi112SwingHRightMax

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHRightMax = 0b0101
-
- -
-
- -

◆ kMitsubishi112SwingHWide

- -
-
- - - - -
const uint8_t kMitsubishi112SwingHWide = 0b1000
-
- -
-
- -

◆ kMitsubishi112SwingVAuto

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVAuto = 0b111
-
- -
-
- -

◆ kMitsubishi112SwingVHigh

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVHigh = 0b010
-
- -
-
- -

◆ kMitsubishi112SwingVHighest

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVHighest = 0b001
-
- -
-
- -

◆ kMitsubishi112SwingVLow

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVLow = 0b100
-
- -
-
- -

◆ kMitsubishi112SwingVLowest

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVLowest = 0b101
-
- -
-
- -

◆ kMitsubishi112SwingVMiddle

- -
-
- - - - -
const uint8_t kMitsubishi112SwingVMiddle = 0b011
-
- -
-
- -

◆ kMitsubishi136Auto

- -
-
- - - - -
const uint8_t kMitsubishi136Auto = 0b011
-
- -
-
- -

◆ kMitsubishi136Cool

- -
-
- - - - -
const uint8_t kMitsubishi136Cool = 0b001
-
- -
-
- -

◆ kMitsubishi136Dry

- -
-
- - - - -
const uint8_t kMitsubishi136Dry = 0b101
-
- -
-
- -

◆ kMitsubishi136Fan

- -
-
- - - - -
const uint8_t kMitsubishi136Fan = 0b000
-
- -
-
- -

◆ kMitsubishi136FanLow

- -
-
- - - - -
const uint8_t kMitsubishi136FanLow = 0b01
-
- -
-
- -

◆ kMitsubishi136FanMax

- -
-
- - - - -
const uint8_t kMitsubishi136FanMax = 0b11
-
- -
-
- -

◆ kMitsubishi136FanMed

- -
-
- - - - -
const uint8_t kMitsubishi136FanMed = 0b10
-
- -
-
- -

◆ kMitsubishi136FanMin

- -
-
- - - - -
const uint8_t kMitsubishi136FanMin = 0b00
-
- -
-
- -

◆ kMitsubishi136FanQuiet

- -
-
- - - - -
const uint8_t kMitsubishi136FanQuiet = kMitsubishi136FanMin
-
- -
-
- -

◆ kMitsubishi136Heat

- -
-
- - - - -
const uint8_t kMitsubishi136Heat = 0b010
-
- -
-
- -

◆ kMitsubishi136MaxTemp

- -
-
- - - - -
const uint8_t kMitsubishi136MaxTemp = 30
-
- -
-
- -

◆ kMitsubishi136MinTemp

- -
-
- - - - -
const uint8_t kMitsubishi136MinTemp = 17
-
- -
-
- -

◆ kMitsubishi136PowerByte

- -
-
- - - - -
const uint8_t kMitsubishi136PowerByte = 5
-
- -
-
- -

◆ kMitsubishi136SwingVAuto

- -
-
- - - - -
const uint8_t kMitsubishi136SwingVAuto = 0b1100
-
- -
-
- -

◆ kMitsubishi136SwingVHigh

- -
-
- - - - -
const uint8_t kMitsubishi136SwingVHigh = 0b0010
-
- -
-
- -

◆ kMitsubishi136SwingVHighest

- -
-
- - - - -
const uint8_t kMitsubishi136SwingVHighest = 0b0011
-
- -
-
- -

◆ kMitsubishi136SwingVLow

- -
-
- - - - -
const uint8_t kMitsubishi136SwingVLow = 0b0001
-
- -
-
- -

◆ kMitsubishi136SwingVLowest

- -
-
- - - - -
const uint8_t kMitsubishi136SwingVLowest = 0b0000
-
- -
-
- -

◆ kMitsubishiAcAuto

- -
-
- - - - -
const uint8_t kMitsubishiAcAuto = 0b100
-
- -
-
- -

◆ kMitsubishiAcCool

- -
-
- - - - -
const uint8_t kMitsubishiAcCool = 0b011
-
- -
-
- -

◆ kMitsubishiAcDry

- -
-
- - - - -
const uint8_t kMitsubishiAcDry = 0b010
-
- -
-
- -

◆ kMitsubishiAcFanAuto

- -
-
- - - - -
const uint8_t kMitsubishiAcFanAuto = 0
-
- -
-
- -

◆ kMitsubishiAcFanMax

- -
-
- - - - -
const uint8_t kMitsubishiAcFanMax = 5
-
- -
-
- -

◆ kMitsubishiAcFanQuiet

- -
-
- - - - -
const uint8_t kMitsubishiAcFanQuiet = kMitsubishiAcFanSilent
-
- -
-
- -

◆ kMitsubishiAcFanRealMax

- -
-
- - - - -
const uint8_t kMitsubishiAcFanRealMax = 4
-
- -
-
- -

◆ kMitsubishiAcFanSilent

- -
-
- - - - -
const uint8_t kMitsubishiAcFanSilent = 6
-
- -
-
- -

◆ kMitsubishiAcHeat

- -
-
- - - - -
const uint8_t kMitsubishiAcHeat = 0b001
-
- -
-
- -

◆ kMitsubishiAcMaxTemp

- -
-
- - - - -
const float kMitsubishiAcMaxTemp = 31.0
-
- -
-
- -

◆ kMitsubishiAcMinTemp

- -
-
- - - - -
const float kMitsubishiAcMinTemp = 16.0
-
- -
-
- -

◆ kMitsubishiAcNoTimer

- -
-
- - - - -
const uint8_t kMitsubishiAcNoTimer = 0
-
- -
-
- -

◆ kMitsubishiAcStartStopTimer

- -
-
- - - - -
const uint8_t kMitsubishiAcStartStopTimer = 7
-
- -
-
- -

◆ kMitsubishiAcStartTimer

- -
-
- - - - -
const uint8_t kMitsubishiAcStartTimer = 5
-
- -
-
- -

◆ kMitsubishiAcStopTimer

- -
-
- - - - -
const uint8_t kMitsubishiAcStopTimer = 3
-
- -
-
- -

◆ kMitsubishiAcVaneAuto

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneAuto = 0b000
-
- -
-
- -

◆ kMitsubishiAcVaneAutoMove

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneAutoMove = kMitsubishiAcVaneSwing
-
- -
-
- -

◆ kMitsubishiAcVaneHigh

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneHigh = 0b010
-
- -
-
- -

◆ kMitsubishiAcVaneHighest

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneHighest = 0b001
-
- -
-
- -

◆ kMitsubishiAcVaneLow

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneLow = 0b100
-
- -
-
- -

◆ kMitsubishiAcVaneLowest

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneLowest = 0b101
-
- -
-
- -

◆ kMitsubishiAcVaneMiddle

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneMiddle = 0b011
-
- -
-
- -

◆ kMitsubishiAcVaneSwing

- -
-
- - - - -
const uint8_t kMitsubishiAcVaneSwing = 0b111
-
- -
-
- -

◆ kMitsubishiAcWideVaneAuto

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneAuto = 0b1000
-
- -
-
- -

◆ kMitsubishiAcWideVaneLeft

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneLeft = 0b0010
-
- -
-
- -

◆ kMitsubishiAcWideVaneLeftMax

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneLeftMax = 0b0001
-
- -
-
- -

◆ kMitsubishiAcWideVaneMiddle

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneMiddle = 0b0011
-
- -
-
- -

◆ kMitsubishiAcWideVaneRight

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneRight = 0b0100
-
- -
-
- -

◆ kMitsubishiAcWideVaneRightMax

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneRightMax = 0b0101
-
- -
-
- -

◆ kMitsubishiAcWideVaneWide

- -
-
- - - - -
const uint8_t kMitsubishiAcWideVaneWide = 0b0110
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h_source.html deleted file mode 100644 index 409b67832..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Mitsubishi_8h_source.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Mitsubishi.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Mitsubishi.h
-
-
-Go to the documentation of this file.
1 // Copyright 2009 Ken Shirriff
-
2 // Copyright 2017-2021 David Conran
-
3 // Copyright 2019 Mark Kuchel
-
4 
-
19 
-
20 // Supports:
-
21 // Brand: Mitsubishi, Model: TV (MITSUBISHI)
-
22 // Brand: Mitsubishi, Model: HC3000 Projector (MITSUBISHI2)
-
23 // Brand: Mitsubishi, Model: MS-GK24VA A/C
-
24 // Brand: Mitsubishi, Model: KM14A 0179213 remote
-
25 // Brand: Mitsubishi Electric, Model: PEAD-RP71JAA Ducted A/C (MITSUBISHI136)
-
26 // Brand: Mitsubishi Electric, Model: 001CP T7WE10714 remote (MITSUBISHI136)
-
27 // Brand: Mitsubishi Electric, Model: MSH-A24WV A/C (MITSUBISHI112)
-
28 // Brand: Mitsubishi Electric, Model: MUH-A24WV A/C (MITSUBISHI112)
-
29 // Brand: Mitsubishi Electric, Model: KPOA remote (MITSUBISHI112)
-
30 // Brand: Mitsubishi Electric, Model: MLZ-RX5017AS A/C (MITSUBISHI_AC)
-
31 // Brand: Mitsubishi Electric, Model: SG153/M21EDF426 remote (MITSUBISHI_AC)
-
32 // Brand: Mitsubishi Electric, Model: MSZ-GV2519 A/C (MITSUBISHI_AC)
-
33 // Brand: Mitsubishi Electric, Model: RH151/M21ED6426 remote (MITSUBISHI_AC)
-
34 
-
35 #ifndef IR_MITSUBISHI_H_
-
36 #define IR_MITSUBISHI_H_
-
37 
-
38 #define __STDC_LIMIT_MACROS
-
39 #include <stdint.h>
-
40 #ifndef UNIT_TEST
-
41 #include <Arduino.h>
-
42 #endif
-
43 #include "IRremoteESP8266.h"
-
44 #include "IRsend.h"
-
45 #ifdef UNIT_TEST
-
46 #include "IRsend_test.h"
-
47 #endif
-
48 
- - -
52  struct {
-
53  // Byte 0~4
-
54  uint8_t pad0[5];
-
55  // Byte 5
-
56  uint8_t :5;
-
57  uint8_t Power :1;
-
58  uint8_t :2;
-
59  // Byte 6
-
60  uint8_t :3;
-
61  uint8_t Mode :3;
-
62  uint8_t :2;
-
63  // Byte 7
-
64  uint8_t Temp :4;
-
65  uint8_t HalfDegree :1;
-
66  uint8_t :3;
-
67  // Byte 8
-
68  uint8_t :4;
-
69  uint8_t WideVane:4; // SwingH
-
70  // Byte 9
-
71  uint8_t Fan :3;
-
72  uint8_t Vane :3; // SwingV
-
73  uint8_t VaneBit :1;
-
74  uint8_t FanAuto :1;
-
75  // Byte 10
-
76  uint8_t Clock :8;
-
77  // Byte 11
-
78  uint8_t StopClock :8;
-
79  // Byte 12
-
80  uint8_t StartClock:8;
-
81  // Byte 13
-
82  uint8_t Timer :3;
-
83  uint8_t WeeklyTimer :1;
-
84  uint8_t :4;
-
85  // Byte 14~16
-
86  uint8_t pad1[3];
-
87  // Byte 17
-
88  uint8_t Sum :8;
-
89  };
-
90 };
-
91 
-
92 // Constants
-
93 const uint8_t kMitsubishiAcAuto = 0b100;
-
94 const uint8_t kMitsubishiAcCool = 0b011;
-
95 const uint8_t kMitsubishiAcDry = 0b010;
-
96 const uint8_t kMitsubishiAcHeat = 0b001;
-
97 const uint8_t kMitsubishiAcFanAuto = 0;
-
98 const uint8_t kMitsubishiAcFanMax = 5;
-
99 const uint8_t kMitsubishiAcFanRealMax = 4;
-
100 const uint8_t kMitsubishiAcFanSilent = 6;
- -
102 const float kMitsubishiAcMinTemp = 16.0; // 16C
-
103 const float kMitsubishiAcMaxTemp = 31.0; // 31C
-
104 const uint8_t kMitsubishiAcVaneAuto = 0b000; // Vanes move when AC wants to.
-
105 const uint8_t kMitsubishiAcVaneHighest = 0b001;
-
106 const uint8_t kMitsubishiAcVaneHigh = 0b010;
-
107 const uint8_t kMitsubishiAcVaneMiddle = 0b011;
-
108 const uint8_t kMitsubishiAcVaneLow = 0b100;
-
109 const uint8_t kMitsubishiAcVaneLowest = 0b101;
-
110 const uint8_t kMitsubishiAcVaneSwing = 0b111; // Vanes move all the time.
-
111 const uint8_t kMitsubishiAcVaneAutoMove = kMitsubishiAcVaneSwing; // Deprecated
-
112 const uint8_t kMitsubishiAcWideVaneLeftMax = 0b0001; // 1
-
113 const uint8_t kMitsubishiAcWideVaneLeft = 0b0010; // 2
-
114 const uint8_t kMitsubishiAcWideVaneMiddle = 0b0011; // 3
-
115 const uint8_t kMitsubishiAcWideVaneRight = 0b0100; // 4
-
116 const uint8_t kMitsubishiAcWideVaneRightMax = 0b0101; // 5
-
117 const uint8_t kMitsubishiAcWideVaneWide = 0b0110; // 6
-
118 const uint8_t kMitsubishiAcWideVaneAuto = 0b1000; // 8
-
119 const uint8_t kMitsubishiAcNoTimer = 0;
-
120 const uint8_t kMitsubishiAcStartTimer = 5;
-
121 const uint8_t kMitsubishiAcStopTimer = 3;
-
122 const uint8_t kMitsubishiAcStartStopTimer = 7;
-
123 
- - -
127  struct {
-
128  // Byte 0~4
-
129  uint8_t pad[5];
-
130  // Byte 5
-
131  uint8_t :6;
-
132  uint8_t Power :1;
-
133  uint8_t :1;
-
134  // Byte 6
-
135  uint8_t Mode :3;
-
136  uint8_t :1;
-
137  uint8_t Temp :4;
-
138  // Byte 7
-
139  uint8_t :1;
-
140  uint8_t Fan :2;
-
141  uint8_t :1;
-
142  uint8_t SwingV :4;
-
143  };
-
144 };
-
145 
-
146 const uint8_t kMitsubishi136PowerByte = 5;
-
147 const uint8_t kMitsubishi136MinTemp = 17; // 17C
-
148 const uint8_t kMitsubishi136MaxTemp = 30; // 30C
-
149 const uint8_t kMitsubishi136Fan = 0b000;
-
150 const uint8_t kMitsubishi136Cool = 0b001;
-
151 const uint8_t kMitsubishi136Heat = 0b010;
-
152 const uint8_t kMitsubishi136Auto = 0b011;
-
153 const uint8_t kMitsubishi136Dry = 0b101;
-
154 const uint8_t kMitsubishi136SwingVLowest = 0b0000;
-
155 const uint8_t kMitsubishi136SwingVLow = 0b0001;
-
156 const uint8_t kMitsubishi136SwingVHigh = 0b0010;
-
157 const uint8_t kMitsubishi136SwingVHighest = 0b0011;
-
158 const uint8_t kMitsubishi136SwingVAuto = 0b1100;
-
159 const uint8_t kMitsubishi136FanMin = 0b00;
-
160 const uint8_t kMitsubishi136FanLow = 0b01;
-
161 const uint8_t kMitsubishi136FanMed = 0b10;
-
162 const uint8_t kMitsubishi136FanMax = 0b11;
- -
164 
- - -
168  struct {
-
169  // Byte 0~4
-
170  uint8_t pad0[5];
-
171  // Byte 5
-
172  uint8_t :2;
-
173  uint8_t Power :1;
-
174  uint8_t :5;
-
175  // Byte 6
-
176  uint8_t Mode :3;
-
177  uint8_t :5;
-
178  // Byte 7
-
179  uint8_t Temp :4;
-
180  uint8_t :4;
-
181  // Byte 8
-
182  uint8_t Fan :3;
-
183  uint8_t SwingV :3;
-
184  uint8_t :2;
-
185  // Byte 9~11
-
186  uint8_t pad1[3];
-
187  // Byte 12
-
188  uint8_t :2;
-
189  uint8_t SwingH :4;
-
190  uint8_t :2;
-
191  // Byte 13
-
192  uint8_t Sum :8;
-
193  };
-
194 };
-
195 
-
196 const uint8_t kMitsubishi112Cool = 0b011;
-
197 const uint8_t kMitsubishi112Heat = 0b001;
-
198 const uint8_t kMitsubishi112Auto = 0b111;
-
199 const uint8_t kMitsubishi112Dry = 0b010;
-
200 
-
201 const uint8_t kMitsubishi112MinTemp = 16; // 16C
-
202 const uint8_t kMitsubishi112MaxTemp = 31; // 31C
-
203 
-
204 const uint8_t kMitsubishi112FanMin = 0b010;
-
205 const uint8_t kMitsubishi112FanLow = 0b011;
-
206 const uint8_t kMitsubishi112FanMed = 0b101;
-
207 const uint8_t kMitsubishi112FanMax = 0b000;
- -
209 const uint8_t kMitsubishi112SwingVLowest = 0b101;
-
210 const uint8_t kMitsubishi112SwingVLow = 0b100;
-
211 const uint8_t kMitsubishi112SwingVMiddle = 0b011;
-
212 const uint8_t kMitsubishi112SwingVHigh = 0b010;
-
213 const uint8_t kMitsubishi112SwingVHighest = 0b001;
-
214 const uint8_t kMitsubishi112SwingVAuto = 0b111;
-
215 
-
216 const uint8_t kMitsubishi112SwingHLeftMax = 0b0001;
-
217 const uint8_t kMitsubishi112SwingHLeft = 0b0010;
-
218 const uint8_t kMitsubishi112SwingHMiddle = 0b0011;
-
219 const uint8_t kMitsubishi112SwingHRight = 0b0100;
-
220 const uint8_t kMitsubishi112SwingHRightMax = 0b0101;
-
221 const uint8_t kMitsubishi112SwingHWide = 0b1000;
-
222 const uint8_t kMitsubishi112SwingHAuto = 0b1100;
-
223 
-
224 // Legacy defines (Deprecated)
-
225 #define MITSUBISHI_AC_VANE_AUTO_MOVE kMitsubishiAcVaneAutoMove
-
226 #define MITSUBISHI_AC_VANE_AUTO kMitsubishiAcVaneAuto
-
227 #define MITSUBISHI_AC_MIN_TEMP kMitsubishiAcMinTemp
-
228 #define MITSUBISHI_AC_MAX_TEMP kMitsubishiAcMaxTemp
-
229 #define MITSUBISHI_AC_HEAT kMitsubishiAcHeat
-
230 #define MITSUBISHI_AC_FAN_SILENT kMitsubishiAcFanSilent
-
231 #define MITSUBISHI_AC_FAN_REAL_MAX kMitsubishiAcFanRealMax
-
232 #define MITSUBISHI_AC_FAN_MAX kMitsubishiAcFanMax
-
233 #define MITSUBISHI_AC_FAN_AUTO kMitsubishiAcFanAuto
-
234 #define MITSUBISHI_AC_DRY kMitsubishiAcDry
-
235 #define MITSUBISHI_AC_COOL kMitsubishiAcCool
-
236 #define MITSUBISHI_AC_AUTO kMitsubishiAcAuto
-
237 
-
238 
- -
243  public:
-
244  explicit IRMitsubishiAC(const uint16_t pin, const bool inverted = false,
-
245  const bool use_modulation = true);
-
246  void stateReset(void);
-
247  static bool validChecksum(const uint8_t* data);
-
248 #if SEND_MITSUBISHI_AC
-
249  void send(const uint16_t repeat = kMitsubishiACMinRepeat);
-
254  int8_t calibrate(void) { return _irsend.calibrate(); }
-
255 #endif // SEND_MITSUBISHI_AC
-
256  void begin(void);
-
257  void on(void);
-
258  void off(void);
-
259  void setPower(const bool on);
-
260  bool getPower(void) const;
-
261  void setTemp(const float degrees);
-
262  float getTemp(void) const;
-
263  void setFan(const uint8_t speed);
-
264  uint8_t getFan(void) const;
-
265  void setMode(const uint8_t mode);
-
266  uint8_t getMode(void) const;
-
267  void setVane(const uint8_t position);
-
268  void setWideVane(const uint8_t position);
-
269  uint8_t getVane(void) const;
-
270  uint8_t getWideVane(void) const;
-
271  uint8_t* getRaw(void);
-
272  void setRaw(const uint8_t* data);
-
273  uint8_t getClock(void) const;
-
274  void setClock(const uint8_t clock);
-
275  uint8_t getStartClock(void) const;
-
276  void setStartClock(const uint8_t clock);
-
277  uint8_t getStopClock(void) const;
-
278  void setStopClock(const uint8_t clock);
-
279  uint8_t getTimer(void) const;
-
280  void setTimer(const uint8_t timer);
-
281  bool getWeeklyTimerEnabled(void) const;
-
282  void setWeeklyTimerEnabled(const bool on);
-
283  static uint8_t convertMode(const stdAc::opmode_t mode);
-
284  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
285  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
286  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
287  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
288  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
289  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
290  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
291  stdAc::state_t toCommon(void) const;
-
292  String toString(void) const;
-
293 #ifndef UNIT_TEST
-
294 
-
295  private:
- -
297 #else // UNIT_TEST
-
298  IRsendTest _irsend;
-
300 #endif // UNIT_TEST
- -
303  void checksum(void);
-
304  static uint8_t calculateChecksum(const uint8_t* data);
-
305 };
-
306 
- -
309  public:
-
310  explicit IRMitsubishi136(const uint16_t pin, const bool inverted = false,
-
311  const bool use_modulation = true);
-
312  void stateReset(void);
-
313 #if SEND_MITSUBISHI136
-
314  void send(const uint16_t repeat = kMitsubishi136MinRepeat);
-
319  int8_t calibrate(void) { return _irsend.calibrate(); }
-
320 #endif // SEND_MITSUBISHI136
-
321  void begin(void);
-
322  static bool validChecksum(const uint8_t* data,
-
323  const uint16_t len = kMitsubishi136StateLength);
-
324  void on(void);
-
325  void off(void);
-
326  void setPower(const bool on);
-
327  bool getPower(void) const;
-
328  void setTemp(const uint8_t degrees);
-
329  uint8_t getTemp(void) const;
-
330  void setFan(const uint8_t speed);
-
331  uint8_t getFan(void) const;
-
332  void setMode(const uint8_t mode);
-
333  uint8_t getMode(void) const;
-
334  void setSwingV(const uint8_t position);
-
335  uint8_t getSwingV(void) const;
-
336  void setQuiet(const bool on);
-
337  bool getQuiet(void) const;
-
338  uint8_t* getRaw(void);
-
339  void setRaw(const uint8_t* data);
-
340  static uint8_t convertMode(const stdAc::opmode_t mode);
-
341  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
342  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
343  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
344  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
345  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
346  stdAc::state_t toCommon(void) const;
-
347  String toString(void) const;
-
348 #ifndef UNIT_TEST
-
349 
-
350  private:
- -
352 #else // UNIT_TEST
-
353  IRsendTest _irsend;
-
355 #endif // UNIT_TEST
- -
358  void checksum(void);
-
359 };
-
360 
- -
363  public:
-
364  explicit IRMitsubishi112(const uint16_t pin, const bool inverted = false,
-
365  const bool use_modulation = true);
-
366  void stateReset(void);
-
367 #if SEND_MITSUBISHI112
-
368  void send(const uint16_t repeat = kMitsubishi112MinRepeat);
-
373  int8_t calibrate(void) { return _irsend.calibrate(); }
-
374 #endif // SEND_MITSUBISHI112
-
375  void begin(void);
-
376  void on(void);
-
377  void off(void);
-
378  void setPower(const bool on);
-
379  bool getPower(void) const;
-
380  void setTemp(const uint8_t degrees);
-
381  uint8_t getTemp(void) const;
-
382  void setFan(const uint8_t speed);
-
383  uint8_t getFan(void) const;
-
384  void setMode(const uint8_t mode);
-
385  uint8_t getMode(void) const;
-
386  void setSwingV(const uint8_t position);
-
387  uint8_t getSwingV(void) const;
-
388  void setSwingH(const uint8_t position);
-
389  uint8_t getSwingH(void) const;
-
390  void setQuiet(const bool on);
-
391  bool getQuiet(void) const;
-
392  uint8_t* getRaw(void);
-
393  void setRaw(const uint8_t* data);
-
394  static uint8_t convertMode(const stdAc::opmode_t mode);
-
395  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
396  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
397  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
398  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
399  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
400  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
401  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
402  stdAc::state_t toCommon(void) const;
-
403  String toString(void) const;
-
404 #ifndef UNIT_TEST
-
405 
-
406  private:
- -
408 #else // UNIT_TEST
-
409  IRsendTest _irsend;
-
411 #endif // UNIT_TEST
- -
414  void checksum(void);
-
415 };
-
416 
-
417 #endif // IR_MITSUBISHI_H_
-
-
const uint8_t kMitsubishi112SwingVMiddle
Definition: ir_Mitsubishi.h:211
-
uint8_t SwingV
Definition: ir_Mitsubishi.h:183
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Mitsubishi.cpp:1419
-
const uint8_t kMitsubishi112SwingVLowest
Definition: ir_Mitsubishi.h:209
-
const uint8_t kMitsubishi112SwingVAuto
Definition: ir_Mitsubishi.h:214
-
uint8_t pad1[3]
Definition: ir_Mitsubishi.h:186
-
const uint8_t kMitsubishi112FanQuiet
Definition: ir_Mitsubishi.h:208
-
uint8_t Timer
Definition: ir_Mitsubishi.h:82
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Mitsubishi.cpp:1322
-
const uint8_t kMitsubishi112SwingHLeft
Definition: ir_Mitsubishi.h:217
-
bool getQuiet(void) const
Get the Quiet mode of the A/C.
Definition: ir_Mitsubishi.cpp:1497
-
uint8_t getVane(void) const
Get the Vane (Vertical Swing) mode of the A/C.
Definition: ir_Mitsubishi.cpp:543
-
uint8_t StartClock
Definition: ir_Mitsubishi.h:80
-
const uint8_t kMitsubishi112FanMed
Definition: ir_Mitsubishi.h:206
-
const uint16_t kMitsubishiACStateLength
Definition: IRremoteESP8266.h:1038
-
uint8_t Fan
Definition: ir_Mitsubishi.h:182
-
const uint8_t kMitsubishiAcHeat
Definition: ir_Mitsubishi.h:96
-
const float kMitsubishiAcMinTemp
Definition: ir_Mitsubishi.h:102
-
const uint8_t kMitsubishiAcAuto
Definition: ir_Mitsubishi.h:93
-
Mitsubishi136Protocol _
Definition: ir_Mitsubishi.h:357
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Mitsubishi.cpp:1175
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Mitsubishi.cpp:1335
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Mitsubishi.cpp:992
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Mitsubishi.cpp:1407
-
const uint8_t kMitsubishi112SwingHRight
Definition: ir_Mitsubishi.h:219
-
const uint8_t kMitsubishiAcFanSilent
Definition: ir_Mitsubishi.h:100
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Mitsubishi.h:373
-
uint8_t SwingH
Definition: ir_Mitsubishi.h:189
-
const uint8_t kMitsubishiAcVaneAuto
Definition: ir_Mitsubishi.h:104
-
const uint8_t kMitsubishi112SwingHRightMax
Definition: ir_Mitsubishi.h:220
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Mitsubishi.cpp:908
-
uint8_t getClock(void) const
Get the clock time of the A/C unit.
Definition: ir_Mitsubishi.cpp:556
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Mitsubishi.cpp:941
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Mitsubishi.cpp:1614
-
const uint16_t kMitsubishi136MinRepeat
Definition: IRremoteESP8266.h:1043
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Mitsubishi.cpp:1386
-
const uint8_t kMitsubishiAcVaneHighest
Definition: ir_Mitsubishi.h:105
-
const uint8_t kMitsubishiAcWideVaneRightMax
Definition: ir_Mitsubishi.h:116
-
const uint8_t kMitsubishiAcWideVaneRight
Definition: ir_Mitsubishi.h:115
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Mitsubishi.cpp:391
-
void setVane(const uint8_t position)
Set the requested vane (Vertical Swing) operation mode of the a/c unit.
Definition: ir_Mitsubishi.cpp:529
-
const uint8_t kMitsubishi136FanMed
Definition: ir_Mitsubishi.h:161
-
uint8_t raw[kMitsubishi136StateLength]
The state in code form.
Definition: ir_Mitsubishi.h:126
-
const uint8_t kMitsubishi136PowerByte
Definition: ir_Mitsubishi.h:146
-
uint8_t getSwingH(void) const
Get the Horizontal Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1480
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
void setStopClock(const uint8_t clock)
Set the desired stop time of the A/C unit.
Definition: ir_Mitsubishi.cpp:585
-
const uint8_t kMitsubishi136MaxTemp
Definition: ir_Mitsubishi.h:148
-
float getTemp(void) const
Get the current temperature setting.
Definition: ir_Mitsubishi.cpp:478
-
uint8_t Temp
Definition: ir_Mitsubishi.h:179
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Mitsubishi.cpp:1071
-
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition: ir_Mitsubishi.cpp:420
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Mitsubishi.cpp:998
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Mitsubishi.cpp:457
-
const uint16_t kMitsubishi112MinRepeat
Definition: IRremoteESP8266.h:1046
-
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition: ir_Mitsubishi.cpp:1354
-
void setTemp(const float degrees)
Set the temperature.
Definition: ir_Mitsubishi.cpp:464
-
void setStartClock(const uint8_t clock)
Set the desired start time of the A/C unit.
Definition: ir_Mitsubishi.cpp:573
-
const uint8_t kMitsubishi112FanLow
Definition: ir_Mitsubishi.h:205
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:1573
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Mitsubishi.cpp:425
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Mitsubishi.cpp:1004
-
const uint8_t kMitsubishi112Heat
Definition: ir_Mitsubishi.h:197
-
const uint8_t kMitsubishi112SwingHLeftMax
Definition: ir_Mitsubishi.h:216
-
static bool validChecksum(const uint8_t *data)
Verify the checksum is valid for a given state.
Definition: ir_Mitsubishi.cpp:432
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Mitsubishi.h:319
-
const uint8_t kMitsubishi112Cool
Definition: ir_Mitsubishi.h:196
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Mitsubishi.cpp:1056
- -
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Mitsubishi.cpp:1372
-
uint8_t StopClock
Definition: ir_Mitsubishi.h:78
-
const uint8_t kMitsubishiAcNoTimer
Definition: ir_Mitsubishi.h:119
-
void send(const uint16_t repeat=kMitsubishi112MinRepeat)
Send the current internal state as an IR message.
Definition: ir_Mitsubishi.cpp:1340
-
uint8_t getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1454
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Mitsubishi.cpp:451
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:1561
-
static uint8_t calculateChecksum(const uint8_t *data)
Calculate the checksum for a given state.
Definition: ir_Mitsubishi.cpp:439
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t Temp
Definition: ir_Mitsubishi.h:64
-
const uint8_t kMitsubishiAcVaneLowest
Definition: ir_Mitsubishi.h:109
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kMitsubishi136Cool
Definition: ir_Mitsubishi.h:150
-
const uint8_t kMitsubishi136Dry
Definition: ir_Mitsubishi.h:153
-
IRMitsubishi112(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Mitsubishi.cpp:1317
-
void setClock(const uint8_t clock)
Set the clock time on the A/C unit.
Definition: ir_Mitsubishi.cpp:561
-
bool getWeeklyTimerEnabled(void) const
Get the value of the WeeklyTimer Enabled setting.
Definition: ir_Mitsubishi.cpp:773
-
uint8_t Sum
Definition: ir_Mitsubishi.h:192
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Mitsubishi.cpp:506
-
std::string String
Definition: IRremoteESP8266.h:1217
-
Class for handling detailed Mitsubishi 144-bit A/C messages.
Definition: ir_Mitsubishi.h:242
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Mitsubishi.cpp:741
-
uint8_t Vane
Definition: ir_Mitsubishi.h:72
-
const uint8_t kMitsubishiAcVaneHigh
Definition: ir_Mitsubishi.h:106
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Mitsubishi.cpp:1642
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Mitsubishi.cpp:639
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:689
-
Class for handling detailed Mitsubishi 122-bit A/C messages.
Definition: ir_Mitsubishi.h:362
-
uint8_t Temp
Definition: ir_Mitsubishi.h:137
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Mitsubishi.cpp:484
-
const uint8_t kMitsubishi112SwingVLow
Definition: ir_Mitsubishi.h:210
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_Mitsubishi.cpp:661
-
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_Mitsubishi.cpp:1378
-
const uint8_t kMitsubishi112SwingHAuto
Definition: ir_Mitsubishi.h:222
-
const uint8_t kMitsubishi112MinTemp
Definition: ir_Mitsubishi.h:201
-
Class for handling detailed Mitsubishi 136-bit A/C messages.
Definition: ir_Mitsubishi.h:308
-
uint8_t Clock
Definition: ir_Mitsubishi.h:76
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Mitsubishi.cpp:1366
-
void checksum(void)
Calculate the checksum for the current internal state of the remote.
Definition: ir_Mitsubishi.cpp:1330
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Mitsubishi.cpp:610
-
const uint8_t kMitsubishiAcStopTimer
Definition: ir_Mitsubishi.h:121
-
const uint8_t kMitsubishiAcFanMax
Definition: ir_Mitsubishi.h:98
-
uint8_t pad1[3]
Definition: ir_Mitsubishi.h:86
-
uint8_t Mode
Definition: ir_Mitsubishi.h:135
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Mitsubishi.cpp:498
-
const uint8_t kMitsubishi112SwingVHighest
Definition: ir_Mitsubishi.h:213
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Mitsubishi.cpp:727
-
const uint8_t kMitsubishi136FanLow
Definition: ir_Mitsubishi.h:160
-
const uint16_t kMitsubishiACMinRepeat
Definition: IRremoteESP8266.h:1040
-
const uint8_t kMitsubishi136MinTemp
Definition: ir_Mitsubishi.h:147
-
uint8_t Power
Definition: ir_Mitsubishi.h:57
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Mitsubishi.cpp:1137
-
IRMitsubishi136(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Mitsubishi.cpp:903
-
uint8_t pad0[5]
Definition: ir_Mitsubishi.h:170
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Mitsubishi.h:296
-
const uint8_t kMitsubishi136Auto
Definition: ir_Mitsubishi.h:152
-
Mitsubishi144Protocol _
Definition: ir_Mitsubishi.h:302
-
const uint8_t kMitsubishi136FanMax
Definition: ir_Mitsubishi.h:162
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Mitsubishi.cpp:413
-
const uint8_t kMitsubishiAcFanAuto
Definition: ir_Mitsubishi.h:97
-
void setWeeklyTimerEnabled(const bool on)
Change the Weekly Timer Enabled setting.
Definition: ir_Mitsubishi.cpp:767
-
uint8_t getStopClock(void) const
Get the desired stop time of the A/C unit.
Definition: ir_Mitsubishi.cpp:580
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Mitsubishi.cpp:444
-
uint8_t Fan
Definition: ir_Mitsubishi.h:140
-
const uint8_t kMitsubishiAcFanQuiet
Definition: ir_Mitsubishi.h:101
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Mitsubishi.cpp:1517
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Mitsubishi.cpp:1504
-
uint8_t raw[kMitsubishiACStateLength]
The state in code form.
Definition: ir_Mitsubishi.h:51
-
const uint8_t kMitsubishiAcWideVaneAuto
Definition: ir_Mitsubishi.h:118
-
void send(const uint16_t repeat=kMitsubishi136MinRepeat)
Send the current internal state as an IR message.
Definition: ir_Mitsubishi.cpp:946
-
const uint8_t kMitsubishi136Fan
Definition: ir_Mitsubishi.h:149
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Mitsubishi.cpp:1392
-
uint8_t Power
Definition: ir_Mitsubishi.h:132
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Mitsubishi.h:254
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Mitsubishi.cpp:1362
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Mitsubishi.cpp:512
-
uint8_t FanAuto
Definition: ir_Mitsubishi.h:74
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Mitsubishi.cpp:1347
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a stdAc::swingh_t enum into it's native setting.
Definition: ir_Mitsubishi.cpp:1545
-
void setSwingH(const uint8_t position)
Set the Horizontal Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1460
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:1111
-
uint8_t Fan
Definition: ir_Mitsubishi.h:71
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Mitsubishi.cpp:401
-
uint8_t raw[kMitsubishi112StateLength]
The state in code form.
Definition: ir_Mitsubishi.h:167
-
IRMitsubishiAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Mitsubishi.cpp:386
-
const uint8_t kMitsubishi136FanMin
Definition: ir_Mitsubishi.h:159
-
const uint8_t kMitsubishi136SwingVAuto
Definition: ir_Mitsubishi.h:158
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Mitsubishi.h:407
-
const uint8_t kMitsubishi136Heat
Definition: ir_Mitsubishi.h:151
-
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_Mitsubishi.cpp:984
-
uint8_t Power
Definition: ir_Mitsubishi.h:173
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:677
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Mitsubishi.cpp:1010
-
void checksum(void)
Calculate the checksum for the current internal state of the remote.
Definition: ir_Mitsubishi.cpp:918
-
uint8_t getStartClock(void) const
Get the desired start time of the A/C unit.
Definition: ir_Mitsubishi.cpp:568
-
const uint8_t kMitsubishi112FanMin
Definition: ir_Mitsubishi.h:204
-
const uint8_t kMitsubishiAcFanRealMax
Definition: ir_Mitsubishi.h:99
-
const uint8_t kMitsubishiAcStartStopTimer
Definition: ir_Mitsubishi.h:122
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Mitsubishi.cpp:622
-
const uint8_t kMitsubishiAcVaneSwing
Definition: ir_Mitsubishi.h:110
-
const uint8_t kMitsubishi112SwingVHigh
Definition: ir_Mitsubishi.h:212
-
const uint8_t kMitsubishi112SwingHMiddle
Definition: ir_Mitsubishi.h:218
-
const uint8_t kMitsubishi136SwingVLow
Definition: ir_Mitsubishi.h:155
-
uint8_t HalfDegree
Definition: ir_Mitsubishi.h:65
-
Mitsubishi112Protocol _
Definition: ir_Mitsubishi.h:413
-
uint8_t getTimer(void) const
Get the timers active setting of the A/C.
Definition: ir_Mitsubishi.cpp:594
-
uint8_t Sum
Definition: ir_Mitsubishi.h:88
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Mitsubishi.cpp:1084
-
const uint8_t kMitsubishiAcVaneLow
Definition: ir_Mitsubishi.h:108
-
const uint8_t kMitsubishiAcVaneAutoMove
Definition: ir_Mitsubishi.h:111
-
void send(const uint16_t repeat=kMitsubishiACMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Mitsubishi.cpp:406
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Mitsubishi.cpp:953
-
void setWideVane(const uint8_t position)
Set the requested wide-vane (Horizontal Swing) operation mode of the a/c.
Definition: ir_Mitsubishi.cpp:537
-
uint8_t WeeklyTimer
Definition: ir_Mitsubishi.h:83
-
bool getQuiet(void) const
Get the Quiet mode of the A/C.
Definition: ir_Mitsubishi.cpp:1064
-
const uint8_t kMitsubishi112Auto
Definition: ir_Mitsubishi.h:198
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Mitsubishi.cpp:1413
-
const uint8_t kMitsubishi136SwingVLowest
Definition: ir_Mitsubishi.h:154
-
const uint8_t kMitsubishiAcStartTimer
Definition: ir_Mitsubishi.h:120
-
void setRaw(const uint8_t *data)
Set the internal state from a valid code for this protocol.
Definition: ir_Mitsubishi.cpp:960
-
const uint8_t kMitsubishiAcWideVaneMiddle
Definition: ir_Mitsubishi.h:114
-
const uint8_t kMitsubishiAcVaneMiddle
Definition: ir_Mitsubishi.h:107
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Mitsubishi.cpp:1097
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Mitsubishi.cpp:1586
-
const uint8_t kMitsubishi112FanMax
Definition: ir_Mitsubishi.h:207
-
const float kMitsubishiAcMaxTemp
Definition: ir_Mitsubishi.h:103
-
uint8_t getWideVane(void) const
Get the Wide Vane (Horizontal Swing) mode of the A/C.
Definition: ir_Mitsubishi.cpp:549
-
uint8_t pad0[5]
Definition: ir_Mitsubishi.h:54
-
void on(void)
Set the requested power state of the A/C to off.
Definition: ir_Mitsubishi.cpp:1359
-
uint8_t VaneBit
Definition: ir_Mitsubishi.h:73
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Mitsubishi.h:351
-
void setSwingV(const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1033
-
const uint8_t kMitsubishi136FanQuiet
Definition: ir_Mitsubishi.h:163
-
void setQuiet(const bool on)
Set the Quiet mode of the A/C.
Definition: ir_Mitsubishi.cpp:1487
-
Native representation of a Mitsubishi 112-bit A/C message.
Definition: ir_Mitsubishi.h:166
-
void setSwingV(const uint8_t position)
Set the Vertical Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1436
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Mitsubishi.cpp:1149
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Mitsubishi.cpp:1124
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Mitsubishi.cpp:1600
-
uint8_t Mode
Definition: ir_Mitsubishi.h:176
-
uint8_t getSwingV(void) const
Get the Vertical Swing mode of the A/C.
Definition: ir_Mitsubishi.cpp:1050
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Mitsubishi.cpp:968
-
Native representation of a Mitsubishi 144-bit A/C message.
Definition: ir_Mitsubishi.h:50
-
uint8_t Mode
Definition: ir_Mitsubishi.h:61
-
const uint16_t kMitsubishi136StateLength
Definition: IRremoteESP8266.h:1041
-
const uint8_t kMitsubishi136SwingVHigh
Definition: ir_Mitsubishi.h:156
-
const uint8_t kMitsubishiAcCool
Definition: ir_Mitsubishi.h:94
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Mitsubishi.cpp:705
-
const uint8_t kMitsubishiAcWideVaneWide
Definition: ir_Mitsubishi.h:117
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Mitsubishi.cpp:777
-
const uint8_t kMitsubishi112SwingHWide
Definition: ir_Mitsubishi.h:221
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Mitsubishi.cpp:965
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Mitsubishi.cpp:1531
-
const uint8_t kMitsubishi112Dry
Definition: ir_Mitsubishi.h:199
-
Native representation of a Mitsubishi 136-bit A/C message.
Definition: ir_Mitsubishi.h:125
-
const uint8_t kMitsubishiAcWideVaneLeft
Definition: ir_Mitsubishi.h:113
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Mitsubishi.cpp:978
-
const uint8_t kMitsubishi136SwingVHighest
Definition: ir_Mitsubishi.h:157
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Mitsubishi.cpp:972
-
const uint8_t kMitsubishiAcWideVaneLeftMax
Definition: ir_Mitsubishi.h:112
-
void setTimer(const uint8_t timer)
Set the timers active setting of the A/C.
Definition: ir_Mitsubishi.cpp:603
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t pad[5]
Definition: ir_Mitsubishi.h:129
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Mitsubishi.cpp:447
-
uint8_t SwingV
Definition: ir_Mitsubishi.h:142
-
const uint16_t kMitsubishi112StateLength
Definition: IRremoteESP8266.h:1044
-
const uint8_t kMitsubishi112MaxTemp
Definition: ir_Mitsubishi.h:202
-
static bool validChecksum(const uint8_t *data, const uint16_t len=kMitsubishi136StateLength)
Verify the checksum is valid for a given state.
Definition: ir_Mitsubishi.cpp:928
-
uint8_t WideVane
Definition: ir_Mitsubishi.h:69
-
const uint8_t kMitsubishiAcDry
Definition: ir_Mitsubishi.h:95
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Mitsubishi.cpp:1016
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Multibrackets_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Multibrackets_8cpp.html deleted file mode 100644 index ce9f031d1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Multibrackets_8cpp.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Multibrackets.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Multibrackets.cpp File Reference
-
-
- -

Support for Multibrackets protocols. -More...

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

-Variables

const uint16_t kMultibracketsTick = 5000
 
const uint16_t kMultibracketsHdrMark = 3 * kMultibracketsTick
 
const uint16_t kMultibracketsFooterSpace = 6 * kMultibracketsTick
 
const uint8_t kMultibracketsTolerance = 5
 
const uint16_t kMultibracketsFreq = 38000
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMultibracketsFooterSpace

- -
-
- - - - -
const uint16_t kMultibracketsFooterSpace = 6 * kMultibracketsTick
-
- -
-
- -

◆ kMultibracketsFreq

- -
-
- - - - -
const uint16_t kMultibracketsFreq = 38000
-
- -
-
- -

◆ kMultibracketsHdrMark

- -
-
- - - - -
const uint16_t kMultibracketsHdrMark = 3 * kMultibracketsTick
-
- -
-
- -

◆ kMultibracketsTick

- -
-
- - - - -
const uint16_t kMultibracketsTick = 5000
-
- -
-
- -

◆ kMultibracketsTolerance

- -
-
- - - - -
const uint8_t kMultibracketsTolerance = 5
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8cpp.html deleted file mode 100644 index 03eb74e57..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8cpp.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_NEC.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_NEC.cpp File Reference
-
-
- -

Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

-

Detailed Description

-

Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/.

-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h.html deleted file mode 100644 index d7a9e707d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h.html +++ /dev/null @@ -1,642 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_NEC.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_NEC.h File Reference
-
-
- -

Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

- -

Go to the source code of this file.

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

-Variables

const uint16_t kNecTick = 560
 
const uint16_t kNecHdrMarkTicks = 16
 
const uint16_t kNecHdrMark = kNecHdrMarkTicks * kNecTick
 
const uint16_t kNecHdrSpaceTicks = 8
 
const uint16_t kNecHdrSpace = kNecHdrSpaceTicks * kNecTick
 
const uint16_t kNecBitMarkTicks = 1
 
const uint16_t kNecBitMark = kNecBitMarkTicks * kNecTick
 
const uint16_t kNecOneSpaceTicks = 3
 
const uint16_t kNecOneSpace = kNecOneSpaceTicks * kNecTick
 
const uint16_t kNecZeroSpaceTicks = 1
 
const uint16_t kNecZeroSpace = kNecZeroSpaceTicks * kNecTick
 
const uint16_t kNecRptSpaceTicks = 4
 
const uint16_t kNecRptSpace = kNecRptSpaceTicks * kNecTick
 
const uint16_t kNecRptLength = 4
 
const uint16_t kNecMinCommandLengthTicks = 193
 
const uint32_t kNecMinCommandLength = kNecMinCommandLengthTicks * kNecTick
 
const uint32_t kNecMinGap
 
const uint16_t kNecMinGapTicks
 
const uint32_t kAlokaPower = 0xFF609F
 
const uint32_t kAlokaLedWhite = 0xFF906F
 
const uint32_t kAlokaLedGreen = 0xFF9867
 
const uint32_t kAlokaLedBlue = 0xFFD827
 
const uint32_t kAlokaLedPinkRed = 0xFF8877
 
const uint32_t kAlokaLedRed = 0xFFA857
 
const uint32_t kAlokaLedLightGreen = 0xFFE817
 
const uint32_t kAlokaLedMidBlue = 0xFF48B7
 
const uint32_t kAlokaLedPink = 0xFF6897
 
const uint32_t kAlokaLedOrange = 0xFFB24D
 
const uint32_t kAlokaLedYellow = 0xFF00FF
 
const uint32_t kAlokaNightFade = 0xFF50AF
 
const uint32_t kAlokaNightTimer = 0xFF7887
 
const uint32_t kAlokaLedRainbow = 0xFF708F
 
const uint32_t kAlokaLedTreeGrow = 0xFF58A7
 
-

Detailed Description

-

Support for NEC (Renesas) protocols. NEC originally added from https://github.com/shirriff/Arduino-IRremote/.

-
See also
http://www.sbprojects.net/knowledge/ir/nec.php
-

Variable Documentation

- -

◆ kAlokaLedBlue

- -
-
- - - - -
const uint32_t kAlokaLedBlue = 0xFFD827
-
- -
-
- -

◆ kAlokaLedGreen

- -
-
- - - - -
const uint32_t kAlokaLedGreen = 0xFF9867
-
- -
-
- -

◆ kAlokaLedLightGreen

- -
-
- - - - -
const uint32_t kAlokaLedLightGreen = 0xFFE817
-
- -
-
- -

◆ kAlokaLedMidBlue

- -
-
- - - - -
const uint32_t kAlokaLedMidBlue = 0xFF48B7
-
- -
-
- -

◆ kAlokaLedOrange

- -
-
- - - - -
const uint32_t kAlokaLedOrange = 0xFFB24D
-
- -
-
- -

◆ kAlokaLedPink

- -
-
- - - - -
const uint32_t kAlokaLedPink = 0xFF6897
-
- -
-
- -

◆ kAlokaLedPinkRed

- -
-
- - - - -
const uint32_t kAlokaLedPinkRed = 0xFF8877
-
- -
-
- -

◆ kAlokaLedRainbow

- -
-
- - - - -
const uint32_t kAlokaLedRainbow = 0xFF708F
-
- -
-
- -

◆ kAlokaLedRed

- -
-
- - - - -
const uint32_t kAlokaLedRed = 0xFFA857
-
- -
-
- -

◆ kAlokaLedTreeGrow

- -
-
- - - - -
const uint32_t kAlokaLedTreeGrow = 0xFF58A7
-
- -
-
- -

◆ kAlokaLedWhite

- -
-
- - - - -
const uint32_t kAlokaLedWhite = 0xFF906F
-
- -
-
- -

◆ kAlokaLedYellow

- -
-
- - - - -
const uint32_t kAlokaLedYellow = 0xFF00FF
-
- -
-
- -

◆ kAlokaNightFade

- -
-
- - - - -
const uint32_t kAlokaNightFade = 0xFF50AF
-
- -
-
- -

◆ kAlokaNightTimer

- -
-
- - - - -
const uint32_t kAlokaNightTimer = 0xFF7887
-
- -
-
- -

◆ kAlokaPower

- -
-
- - - - -
const uint32_t kAlokaPower = 0xFF609F
-
- -
-
- -

◆ kNecBitMark

- -
-
- - - - -
const uint16_t kNecBitMark = kNecBitMarkTicks * kNecTick
-
- -
-
- -

◆ kNecBitMarkTicks

- -
-
- - - - -
const uint16_t kNecBitMarkTicks = 1
-
- -
-
- -

◆ kNecHdrMark

- -
-
- - - - -
const uint16_t kNecHdrMark = kNecHdrMarkTicks * kNecTick
-
- -
-
- -

◆ kNecHdrMarkTicks

- -
-
- - - - -
const uint16_t kNecHdrMarkTicks = 16
-
- -
-
- -

◆ kNecHdrSpace

- -
-
- - - - -
const uint16_t kNecHdrSpace = kNecHdrSpaceTicks * kNecTick
-
- -
-
- -

◆ kNecHdrSpaceTicks

- -
-
- - - - -
const uint16_t kNecHdrSpaceTicks = 8
-
- -
-
- -

◆ kNecMinCommandLength

- -
-
- - - - -
const uint32_t kNecMinCommandLength = kNecMinCommandLengthTicks * kNecTick
-
- -
-
- -

◆ kNecMinCommandLengthTicks

- -
-
- - - - -
const uint16_t kNecMinCommandLengthTicks = 193
-
- -
-
- -

◆ kNecMinGap

- -
-
- - - - -
const uint32_t kNecMinGap
-
-
- -

◆ kNecMinGapTicks

- -
-
- - - - -
const uint16_t kNecMinGapTicks
-
-
- -

◆ kNecOneSpace

- -
-
- - - - -
const uint16_t kNecOneSpace = kNecOneSpaceTicks * kNecTick
-
- -
-
- -

◆ kNecOneSpaceTicks

- -
-
- - - - -
const uint16_t kNecOneSpaceTicks = 3
-
- -
-
- -

◆ kNecRptLength

- -
-
- - - - -
const uint16_t kNecRptLength = 4
-
- -
-
- -

◆ kNecRptSpace

- -
-
- - - - -
const uint16_t kNecRptSpace = kNecRptSpaceTicks * kNecTick
-
- -
-
- -

◆ kNecRptSpaceTicks

- -
-
- - - - -
const uint16_t kNecRptSpaceTicks = 4
-
- -
-
- -

◆ kNecTick

- -
-
- - - - -
const uint16_t kNecTick = 560
-
- -
-
- -

◆ kNecZeroSpace

- -
-
- - - - -
const uint16_t kNecZeroSpace = kNecZeroSpaceTicks * kNecTick
-
- -
-
- -

◆ kNecZeroSpaceTicks

- -
-
- - - - -
const uint16_t kNecZeroSpaceTicks = 1
-
- -
-
-
-
const uint16_t kNecBitMarkTicks
Definition: ir_NEC.h:30
-
const uint16_t kNecHdrSpace
Definition: ir_NEC.h:29
-
const uint16_t kNecBitMark
Definition: ir_NEC.h:31
-
const uint32_t kNecMinCommandLength
Definition: ir_NEC.h:40
-
const uint16_t kNecOneSpace
Definition: ir_NEC.h:33
-
const uint16_t kNecMinCommandLengthTicks
Definition: ir_NEC.h:39
-
const uint16_t kNecOneSpaceTicks
Definition: ir_NEC.h:32
-
const uint16_t kNecHdrMarkTicks
Definition: ir_NEC.h:26
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1056
-
const uint16_t kNecHdrMark
Definition: ir_NEC.h:27
-
const uint16_t kNecHdrSpaceTicks
Definition: ir_NEC.h:28
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h_source.html deleted file mode 100644 index e01a87dde..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__NEC_8h_source.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_NEC.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_NEC.h
-
-
-Go to the documentation of this file.
1 // Copyright 2009 Ken Shirriff
-
2 // Copyright 2017, 2018 David Conran
-
3 
-
8 
-
9 // Supports:
-
10 // Brand: Yamaha, Model: RAV561 remote
-
11 // Brand: Yamaha, Model: RXV585B A/V Receiver
-
12 // Brand: Aloka, Model: SleepyLights LED Lamp
-
13 // Brand: Toshiba, Model: 42TL838 LCD TV
-
14 // Brand: Duux, Model: Blizzard Smart 10K / DXMA04 A/C
-
15 // Brand: Duux, Model: YJ-A081 TR Remote
-
16 // Brand: Silan Microelectronics, Model: SC6121-001 IC
-
17 
-
18 #ifndef IR_NEC_H_
-
19 #define IR_NEC_H_
-
20 
-
21 #include <stdint.h>
-
22 #include "IRremoteESP8266.h"
-
23 
-
24 // Constants
-
25 const uint16_t kNecTick = 560;
-
26 const uint16_t kNecHdrMarkTicks = 16;
- -
28 const uint16_t kNecHdrSpaceTicks = 8;
- -
30 const uint16_t kNecBitMarkTicks = 1;
- -
32 const uint16_t kNecOneSpaceTicks = 3;
- -
34 const uint16_t kNecZeroSpaceTicks = 1;
- -
36 const uint16_t kNecRptSpaceTicks = 4;
- -
38 const uint16_t kNecRptLength = 4;
-
39 const uint16_t kNecMinCommandLengthTicks = 193;
- -
41 const uint32_t kNecMinGap =
- - -
44  kNecBitMark);
-
45 const uint16_t kNecMinGapTicks =
- - - -
49 
-
50 // IR codes and structure for kids ALOKA SleepyLights LED Lamp.
-
51 // https://aloka-designs.com/
-
52 // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1004
-
53 //
-
54 // May be useful for someone wanting to control the lamp.
-
55 //
-
56 // The lamp is toggled On and Off with the same power button.
-
57 // The colour, when selected, is the brightest and there are 4 levels of
-
58 // brightness that decrease on each send of the colour. A fifth send of the
-
59 // colour resets to brightest again.
-
60 //
-
61 // Remote buttons defined left to right, top line to bottom line on the remote.
-
62 const uint32_t kAlokaPower = 0xFF609F;
-
63 const uint32_t kAlokaLedWhite = 0xFF906F;
-
64 const uint32_t kAlokaLedGreen = 0xFF9867;
-
65 const uint32_t kAlokaLedBlue = 0xFFD827;
-
66 const uint32_t kAlokaLedPinkRed = 0xFF8877;
-
67 const uint32_t kAlokaLedRed = 0xFFA857;
-
68 const uint32_t kAlokaLedLightGreen = 0xFFE817;
-
69 const uint32_t kAlokaLedMidBlue = 0xFF48B7;
-
70 const uint32_t kAlokaLedPink = 0xFF6897;
-
71 const uint32_t kAlokaLedOrange = 0xFFB24D;
-
72 const uint32_t kAlokaLedYellow = 0xFF00FF;
-
73 const uint32_t kAlokaNightFade = 0xFF50AF;
-
74 const uint32_t kAlokaNightTimer = 0xFF7887;
-
75 const uint32_t kAlokaLedRainbow = 0xFF708F;
-
76 // Didn't have a better description for it...
-
77 const uint32_t kAlokaLedTreeGrow = 0xFF58A7;
-
78 #endif // IR_NEC_H_
-
-
const uint32_t kAlokaLedWhite
Definition: ir_NEC.h:63
-
const uint16_t kNecBitMarkTicks
Definition: ir_NEC.h:30
-
const uint16_t kNecHdrSpace
Definition: ir_NEC.h:29
-
const uint16_t kNecBitMark
Definition: ir_NEC.h:31
-
const uint32_t kNecMinCommandLength
Definition: ir_NEC.h:40
-
const uint16_t kNecZeroSpaceTicks
Definition: ir_NEC.h:34
-
const uint32_t kAlokaLedBlue
Definition: ir_NEC.h:65
-
const uint32_t kAlokaLedLightGreen
Definition: ir_NEC.h:68
-
const uint16_t kNecOneSpace
Definition: ir_NEC.h:33
-
const uint32_t kAlokaNightTimer
Definition: ir_NEC.h:74
-
const uint16_t kNecMinCommandLengthTicks
Definition: ir_NEC.h:39
-
const uint16_t kNecZeroSpace
Definition: ir_NEC.h:35
-
const uint16_t kNecOneSpaceTicks
Definition: ir_NEC.h:32
-
const uint16_t kNecRptSpace
Definition: ir_NEC.h:37
-
const uint16_t kNecHdrMarkTicks
Definition: ir_NEC.h:26
-
const uint32_t kAlokaNightFade
Definition: ir_NEC.h:73
- -
const uint16_t kNecRptLength
Definition: ir_NEC.h:38
-
const uint32_t kAlokaLedPink
Definition: ir_NEC.h:70
-
const uint16_t kNecMinGapTicks
Definition: ir_NEC.h:45
-
const uint32_t kAlokaLedPinkRed
Definition: ir_NEC.h:66
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1056
-
const uint32_t kAlokaLedRed
Definition: ir_NEC.h:67
-
const uint32_t kAlokaLedTreeGrow
Definition: ir_NEC.h:77
-
const uint16_t kNecHdrMark
Definition: ir_NEC.h:27
-
const uint16_t kNecRptSpaceTicks
Definition: ir_NEC.h:36
-
const uint32_t kAlokaLedOrange
Definition: ir_NEC.h:71
-
const uint32_t kNecMinGap
Definition: ir_NEC.h:41
-
const uint32_t kAlokaPower
Definition: ir_NEC.h:62
-
const uint32_t kAlokaLedMidBlue
Definition: ir_NEC.h:69
-
const uint32_t kAlokaLedRainbow
Definition: ir_NEC.h:75
-
const uint32_t kAlokaLedYellow
Definition: ir_NEC.h:72
-
const uint16_t kNecHdrSpaceTicks
Definition: ir_NEC.h:28
-
const uint16_t kNecTick
Definition: ir_NEC.h:25
-
const uint32_t kAlokaLedGreen
Definition: ir_NEC.h:64
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8cpp.html deleted file mode 100644 index 3e41c0d8f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8cpp.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Neoclima.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Neoclima.cpp File Reference
-
-
- -

Support for Neoclima protocols. Analysis by crankyoldgit, AndreyShpilevoy, & griffisc306 Code by crankyoldgit. -More...

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

-Variables

const uint16_t kNeoclimaHdrMark = 6112
 
const uint16_t kNeoclimaHdrSpace = 7391
 
const uint16_t kNeoclimaBitMark = 537
 
const uint16_t kNeoclimaOneSpace = 1651
 
const uint16_t kNeoclimaZeroSpace = 571
 
const uint32_t kNeoclimaMinGap = kDefaultMessageGap
 
-

Detailed Description

-

Support for Neoclima protocols. Analysis by crankyoldgit, AndreyShpilevoy, & griffisc306 Code by crankyoldgit.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/764
-
-https://drive.google.com/file/d/1kjYk4zS9NQcMQhFkak-L4mp4UuaAIesW/view
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/1260
-

Variable Documentation

- -

◆ kNeoclimaBitMark

- -
-
- - - - -
const uint16_t kNeoclimaBitMark = 537
-
- -
-
- -

◆ kNeoclimaHdrMark

- -
-
- - - - -
const uint16_t kNeoclimaHdrMark = 6112
-
- -
-
- -

◆ kNeoclimaHdrSpace

- -
-
- - - - -
const uint16_t kNeoclimaHdrSpace = 7391
-
- -
-
- -

◆ kNeoclimaMinGap

- -
-
- - - - -
const uint32_t kNeoclimaMinGap = kDefaultMessageGap
-
- -
-
- -

◆ kNeoclimaOneSpace

- -
-
- - - - -
const uint16_t kNeoclimaOneSpace = 1651
-
- -
-
- -

◆ kNeoclimaZeroSpace

- -
-
- - - - -
const uint16_t kNeoclimaZeroSpace = 571
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h.html deleted file mode 100644 index 85a11028c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h.html +++ /dev/null @@ -1,651 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Neoclima.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Neoclima.h File Reference
-
-
- -

Support for Neoclima protocols. Analysis by crankyoldgit & AndreyShpilevoy. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  NeoclimaProtocol
 Native representation of a Neoclima A/C message. More...
 
class  IRNeoclimaAc
 Class for handling detailed Neoclima A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kNeoclimaButtonPower = 0x00
 
const uint8_t kNeoclimaButtonMode = 0x01
 
const uint8_t kNeoclimaButtonTempUp = 0x02
 
const uint8_t kNeoclimaButtonTempDown = 0x03
 
const uint8_t kNeoclimaButtonSwing = 0x04
 
const uint8_t kNeoclimaButtonFanSpeed = 0x05
 
const uint8_t kNeoclimaButtonAirFlow = 0x07
 
const uint8_t kNeoclimaButtonHold = 0x08
 
const uint8_t kNeoclimaButtonSleep = 0x09
 
const uint8_t kNeoclimaButtonTurbo = 0x0A
 
const uint8_t kNeoclimaButtonLight = 0x0B
 
const uint8_t kNeoclimaButtonEcono = 0x0D
 
const uint8_t kNeoclimaButtonEye = 0x0E
 
const uint8_t kNeoclimaButtonFollow = 0x13
 
const uint8_t kNeoclimaButtonIon = 0x14
 
const uint8_t kNeoclimaButtonFresh = 0x15
 
const uint8_t kNeoclimaButton8CHeat = 0x1D
 
const uint8_t kNeoclimaButtonTempUnit = 0x1E
 
const uint8_t kNeoclimaSwingVOn = 0b01
 
const uint8_t kNeoclimaSwingVOff = 0b10
 
const uint8_t kNeoclimaFanAuto = 0b00
 
const uint8_t kNeoclimaFanHigh = 0b01
 
const uint8_t kNeoclimaFanMed = 0b10
 
const uint8_t kNeoclimaFanLow = 0b11
 
const uint8_t kNeoclimaFollowMe = 0x5D
 
const uint8_t kNeoclimaMinTempC = 16
 
const uint8_t kNeoclimaMaxTempC = 32
 
const uint8_t kNeoclimaMinTempF = 61
 
const uint8_t kNeoclimaMaxTempF = 90
 
const uint8_t kNeoclimaAuto = 0b000
 
const uint8_t kNeoclimaCool = 0b001
 
const uint8_t kNeoclimaDry = 0b010
 
const uint8_t kNeoclimaFan = 0b011
 
const uint8_t kNeoclimaHeat = 0b100
 
-

Detailed Description

-

Support for Neoclima protocols. Analysis by crankyoldgit & AndreyShpilevoy.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/764
-
-https://drive.google.com/file/d/1kjYk4zS9NQcMQhFkak-L4mp4UuaAIesW/view
-

Variable Documentation

- -

◆ kNeoclimaAuto

- -
-
- - - - -
const uint8_t kNeoclimaAuto = 0b000
-
- -
-
- -

◆ kNeoclimaButton8CHeat

- -
-
- - - - -
const uint8_t kNeoclimaButton8CHeat = 0x1D
-
- -
-
- -

◆ kNeoclimaButtonAirFlow

- -
-
- - - - -
const uint8_t kNeoclimaButtonAirFlow = 0x07
-
- -
-
- -

◆ kNeoclimaButtonEcono

- -
-
- - - - -
const uint8_t kNeoclimaButtonEcono = 0x0D
-
- -
-
- -

◆ kNeoclimaButtonEye

- -
-
- - - - -
const uint8_t kNeoclimaButtonEye = 0x0E
-
- -
-
- -

◆ kNeoclimaButtonFanSpeed

- -
-
- - - - -
const uint8_t kNeoclimaButtonFanSpeed = 0x05
-
- -
-
- -

◆ kNeoclimaButtonFollow

- -
-
- - - - -
const uint8_t kNeoclimaButtonFollow = 0x13
-
- -
-
- -

◆ kNeoclimaButtonFresh

- -
-
- - - - -
const uint8_t kNeoclimaButtonFresh = 0x15
-
- -
-
- -

◆ kNeoclimaButtonHold

- -
-
- - - - -
const uint8_t kNeoclimaButtonHold = 0x08
-
- -
-
- -

◆ kNeoclimaButtonIon

- -
-
- - - - -
const uint8_t kNeoclimaButtonIon = 0x14
-
- -
-
- -

◆ kNeoclimaButtonLight

- -
-
- - - - -
const uint8_t kNeoclimaButtonLight = 0x0B
-
- -
-
- -

◆ kNeoclimaButtonMode

- -
-
- - - - -
const uint8_t kNeoclimaButtonMode = 0x01
-
- -
-
- -

◆ kNeoclimaButtonPower

- -
-
- - - - -
const uint8_t kNeoclimaButtonPower = 0x00
-
- -
-
- -

◆ kNeoclimaButtonSleep

- -
-
- - - - -
const uint8_t kNeoclimaButtonSleep = 0x09
-
- -
-
- -

◆ kNeoclimaButtonSwing

- -
-
- - - - -
const uint8_t kNeoclimaButtonSwing = 0x04
-
- -
-
- -

◆ kNeoclimaButtonTempDown

- -
-
- - - - -
const uint8_t kNeoclimaButtonTempDown = 0x03
-
- -
-
- -

◆ kNeoclimaButtonTempUnit

- -
-
- - - - -
const uint8_t kNeoclimaButtonTempUnit = 0x1E
-
- -
-
- -

◆ kNeoclimaButtonTempUp

- -
-
- - - - -
const uint8_t kNeoclimaButtonTempUp = 0x02
-
- -
-
- -

◆ kNeoclimaButtonTurbo

- -
-
- - - - -
const uint8_t kNeoclimaButtonTurbo = 0x0A
-
- -
-
- -

◆ kNeoclimaCool

- -
-
- - - - -
const uint8_t kNeoclimaCool = 0b001
-
- -
-
- -

◆ kNeoclimaDry

- -
-
- - - - -
const uint8_t kNeoclimaDry = 0b010
-
- -
-
- -

◆ kNeoclimaFan

- -
-
- - - - -
const uint8_t kNeoclimaFan = 0b011
-
- -
-
- -

◆ kNeoclimaFanAuto

- -
-
- - - - -
const uint8_t kNeoclimaFanAuto = 0b00
-
- -
-
- -

◆ kNeoclimaFanHigh

- -
-
- - - - -
const uint8_t kNeoclimaFanHigh = 0b01
-
- -
-
- -

◆ kNeoclimaFanLow

- -
-
- - - - -
const uint8_t kNeoclimaFanLow = 0b11
-
- -
-
- -

◆ kNeoclimaFanMed

- -
-
- - - - -
const uint8_t kNeoclimaFanMed = 0b10
-
- -
-
- -

◆ kNeoclimaFollowMe

- -
-
- - - - -
const uint8_t kNeoclimaFollowMe = 0x5D
-
- -
-
- -

◆ kNeoclimaHeat

- -
-
- - - - -
const uint8_t kNeoclimaHeat = 0b100
-
- -
-
- -

◆ kNeoclimaMaxTempC

- -
-
- - - - -
const uint8_t kNeoclimaMaxTempC = 32
-
- -
-
- -

◆ kNeoclimaMaxTempF

- -
-
- - - - -
const uint8_t kNeoclimaMaxTempF = 90
-
- -
-
- -

◆ kNeoclimaMinTempC

- -
-
- - - - -
const uint8_t kNeoclimaMinTempC = 16
-
- -
-
- -

◆ kNeoclimaMinTempF

- -
-
- - - - -
const uint8_t kNeoclimaMinTempF = 61
-
- -
-
- -

◆ kNeoclimaSwingVOff

- -
-
- - - - -
const uint8_t kNeoclimaSwingVOff = 0b10
-
- -
-
- -

◆ kNeoclimaSwingVOn

- -
-
- - - - -
const uint8_t kNeoclimaSwingVOn = 0b01
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h_source.html deleted file mode 100644 index 5c2447ba7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Neoclima_8h_source.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Neoclima.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Neoclima.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 David Conran
-
2 
-
8 
-
9 // Supports:
-
10 // Brand: Neoclima, Model: NS-09AHTI A/C
-
11 // Brand: Neoclima, Model: ZH/TY-01 remote
-
12 // Brand: Soleus Air, Model: TTWM1-10-01 A/C
-
13 // Brand: Soleus Air, Model: ZCF/TL-05 remote
-
14 
-
15 #ifndef IR_NEOCLIMA_H_
-
16 #define IR_NEOCLIMA_H_
-
17 
-
18 #define __STDC_LIMIT_MACROS
-
19 #include <stdint.h>
-
20 #ifndef UNIT_TEST
-
21 #include <Arduino.h>
-
22 #endif
-
23 #include "IRremoteESP8266.h"
-
24 #include "IRsend.h"
-
25 #ifdef UNIT_TEST
-
26 #include "IRsend_test.h"
-
27 #endif
-
28 
- - -
32  struct {
-
33  // Byte 0
-
34  uint8_t :8;
-
35  // Byte 1
-
36  uint8_t :1;
-
37  uint8_t CHeat :1;
-
38  uint8_t Ion :1;
-
39  uint8_t :5;
-
40  // Byte 2
-
41  uint8_t :8;
-
42  // Byte 3
-
43  uint8_t Light :1;
-
44  uint8_t :1;
-
45  uint8_t Hold :1;
-
46  uint8_t Turbo :1;
-
47  uint8_t Econo :1;
-
48  uint8_t :1;
-
49  uint8_t Eye :1;
-
50  uint8_t :1;
-
51  // Byte 4
-
52  uint8_t :8;
-
53  // Byte 5
-
54  uint8_t Button :5;
-
55  uint8_t :2;
-
56  uint8_t Fresh :1;
-
57  // Byte 6
-
58  uint8_t :8;
-
59  // Byte 7
-
60  uint8_t Sleep :1;
-
61  uint8_t Power :1;
-
62  uint8_t SwingV :2;
-
63  uint8_t SwingH :1;
-
64  uint8_t Fan :2;
-
65  uint8_t UseFah :1;
-
66  // Byte 8
-
67  uint8_t Follow :8;
-
68  // Byte 9
-
69  uint8_t Temp :5;
-
70  uint8_t Mode :3;
-
71  // Byte 10
-
72  uint8_t :8;
-
73  // Byte 11
-
74  uint8_t Sum :8;
-
75  };
-
76 };
-
77 
-
78 // Constants
-
79 
-
80 const uint8_t kNeoclimaButtonPower = 0x00;
-
81 const uint8_t kNeoclimaButtonMode = 0x01;
-
82 const uint8_t kNeoclimaButtonTempUp = 0x02;
-
83 const uint8_t kNeoclimaButtonTempDown = 0x03;
-
84 const uint8_t kNeoclimaButtonSwing = 0x04;
-
85 const uint8_t kNeoclimaButtonFanSpeed = 0x05;
-
86 const uint8_t kNeoclimaButtonAirFlow = 0x07;
-
87 const uint8_t kNeoclimaButtonHold = 0x08;
-
88 const uint8_t kNeoclimaButtonSleep = 0x09;
-
89 const uint8_t kNeoclimaButtonTurbo = 0x0A;
-
90 const uint8_t kNeoclimaButtonLight = 0x0B;
-
91 const uint8_t kNeoclimaButtonEcono = 0x0D;
-
92 const uint8_t kNeoclimaButtonEye = 0x0E;
-
93 const uint8_t kNeoclimaButtonFollow = 0x13;
-
94 const uint8_t kNeoclimaButtonIon = 0x14;
-
95 const uint8_t kNeoclimaButtonFresh = 0x15;
-
96 const uint8_t kNeoclimaButton8CHeat = 0x1D;
-
97 const uint8_t kNeoclimaButtonTempUnit = 0x1E;
-
98 
-
99 const uint8_t kNeoclimaSwingVOn = 0b01;
-
100 const uint8_t kNeoclimaSwingVOff = 0b10;
-
101 const uint8_t kNeoclimaFanAuto = 0b00;
-
102 const uint8_t kNeoclimaFanHigh = 0b01;
-
103 const uint8_t kNeoclimaFanMed = 0b10;
-
104 const uint8_t kNeoclimaFanLow = 0b11;
-
105 
-
106 const uint8_t kNeoclimaFollowMe = 0x5D; // Also 0x5F
-
107 
-
108 const uint8_t kNeoclimaMinTempC = 16; // 16C
-
109 const uint8_t kNeoclimaMaxTempC = 32; // 32C
-
110 const uint8_t kNeoclimaMinTempF = 61; // 61F
-
111 const uint8_t kNeoclimaMaxTempF = 90; // 90F
-
112 const uint8_t kNeoclimaAuto = 0b000;
-
113 const uint8_t kNeoclimaCool = 0b001;
-
114 const uint8_t kNeoclimaDry = 0b010;
-
115 const uint8_t kNeoclimaFan = 0b011;
-
116 const uint8_t kNeoclimaHeat = 0b100;
-
117 
-
118 // Classes
- -
121  public:
-
122  explicit IRNeoclimaAc(const uint16_t pin, const bool inverted = false,
-
123  const bool use_modulation = true);
-
124  void stateReset(void);
-
125 #if SEND_NEOCLIMA
-
126  void send(const uint16_t repeat = kNeoclimaMinRepeat);
-
131  int8_t calibrate(void) { return _irsend.calibrate(); }
-
132 #endif // SEND_NEOCLIMA
-
133  void begin(void);
-
134  void setButton(const uint8_t button);
-
135  uint8_t getButton(void) const;
-
136  void on(void);
-
137  void off(void);
-
138  void setPower(const bool on);
-
139  bool getPower(void) const;
-
140  void setMode(const uint8_t mode);
-
141  uint8_t getMode(void) const;
-
142  void setTemp(const uint8_t temp, const bool celsius = true);
-
143  uint8_t getTemp(void) const;
-
144  void setFan(const uint8_t speed);
-
145  uint8_t getFan(void) const;
-
146  void setSwingV(const bool on);
-
147  bool getSwingV(void) const;
-
148  void setSwingH(const bool on);
-
149  bool getSwingH(void) const;
-
150  void setSleep(const bool on);
-
151  bool getSleep(void) const;
-
152  void setTurbo(const bool on);
-
153  bool getTurbo(void) const;
-
154  void setEcono(const bool on);
-
155  bool getEcono(void) const;
-
156  void setFresh(const bool on);
-
157  bool getFresh(void) const;
-
158  void setHold(const bool on);
-
159  bool getHold(void) const;
-
160  void setIon(const bool on);
-
161  bool getIon(void) const;
-
162  void setLight(const bool on);
-
163  bool getLight(void) const;
-
164  void set8CHeat(const bool on);
-
165  bool get8CHeat(void) const;
-
166  void setEye(const bool on);
-
167  bool getEye(void) const;
-
168  bool getTempUnits(void) const;
-
169  // DISABLED: See TODO in ir_Neoclima.cpp
-
170  // void setFollow(const bool on);
-
171  bool getFollow(void) const;
-
172  uint8_t* getRaw(void);
-
173  void setRaw(const uint8_t new_code[],
-
174  const uint16_t length = kNeoclimaStateLength);
-
175  static bool validChecksum(const uint8_t state[],
-
176  const uint16_t length = kNeoclimaStateLength);
-
177  static uint8_t calcChecksum(const uint8_t state[],
-
178  const uint16_t length = kNeoclimaStateLength);
-
179  String toString(void) const;
-
180  static uint8_t convertMode(const stdAc::opmode_t mode);
-
181  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
182  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
183  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
184  stdAc::state_t toCommon(void) const;
-
185 #ifndef UNIT_TEST
-
186 
-
187  private:
- -
189 #else // UNIT_TEST
-
190  IRsendTest _irsend;
-
192 #endif // UNIT_TEST
- -
195  void checksum(const uint16_t length = kNeoclimaStateLength);
-
196 };
-
197 
-
198 #endif // IR_NEOCLIMA_H_
-
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Neoclima.cpp:178
-
uint8_t Hold
Definition: ir_Neoclima.h:45
-
const uint8_t kNeoclimaFanHigh
Definition: ir_Neoclima.h:102
-
bool getEcono(void) const
Get the Economy (Energy Saver) setting of the A/C.
Definition: ir_Neoclima.cpp:375
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Neoclima.cpp:305
-
const uint8_t kNeoclimaMinTempC
Definition: ir_Neoclima.h:108
-
const uint8_t kNeoclimaButtonFanSpeed
Definition: ir_Neoclima.h:85
-
const uint8_t kNeoclimaButtonTurbo
Definition: ir_Neoclima.h:89
-
const uint8_t kNeoclimaFollowMe
Definition: ir_Neoclima.h:106
-
NeoclimaProtocol _
Definition: ir_Neoclima.h:194
-
uint8_t Mode
Definition: ir_Neoclima.h:70
-
const uint8_t kNeoclimaMaxTempC
Definition: ir_Neoclima.h:109
-
uint8_t raw[kNeoclimaStateLength]
State of the remote in code.
Definition: ir_Neoclima.h:31
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t SwingV
Definition: ir_Neoclima.h:62
-
const uint8_t kNeoclimaDry
Definition: ir_Neoclima.h:114
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kNeoclimaStateLength)
Calculate the checksum for a given state.
Definition: ir_Neoclima.cpp:83
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Neoclima.h:131
-
uint8_t SwingH
Definition: ir_Neoclima.h:63
-
void set8CHeat(const bool on)
Set the 8°C Heat setting of the A/C.
Definition: ir_Neoclima.cpp:437
-
const uint8_t kNeoclimaButtonEye
Definition: ir_Neoclima.h:92
-
const uint8_t kNeoclimaButtonPower
Definition: ir_Neoclima.h:80
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Neoclima.cpp:263
-
const uint8_t kNeoclimaSwingVOn
Definition: ir_Neoclima.h:99
-
const uint8_t kNeoclimaButtonMode
Definition: ir_Neoclima.h:81
-
const uint16_t kNeoclimaStateLength
Definition: IRremoteESP8266.h:1057
-
Native representation of a Neoclima A/C message.
Definition: ir_Neoclima.h:30
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Neoclima.cpp:284
-
void setHold(const bool on)
Set the Hold setting of the A/C.
Definition: ir_Neoclima.cpp:394
-
const uint8_t kNeoclimaMinTempF
Definition: ir_Neoclima.h:110
-
void setRaw(const uint8_t new_code[], const uint16_t length=kNeoclimaStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Neoclima.cpp:124
-
const uint8_t kNeoclimaButtonHold
Definition: ir_Neoclima.h:87
-
uint8_t Power
Definition: ir_Neoclima.h:61
-
void setEcono(const bool on)
Set the Economy (Energy Saver) setting of the A/C.
Definition: ir_Neoclima.cpp:368
-
uint8_t Eye
Definition: ir_Neoclima.h:49
-
void setTemp(const uint8_t temp, const bool celsius=true)
Set the temperature.
Definition: ir_Neoclima.cpp:239
- -
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Neoclima.cpp:323
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Neoclima.cpp:362
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Neoclima.cpp:206
-
const uint8_t kNeoclimaAuto
Definition: ir_Neoclima.h:112
-
const uint8_t kNeoclimaMaxTempF
Definition: ir_Neoclima.h:111
-
void setLight(const bool on)
Set the Light(LED display) setting of the A/C.
Definition: ir_Neoclima.cpp:420
-
const uint8_t kNeoclimaFan
Definition: ir_Neoclima.h:115
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
bool get8CHeat(void) const
Get the 8°C Heat setting of the A/C.
Definition: ir_Neoclima.cpp:444
-
uint8_t Sleep
Definition: ir_Neoclima.h:60
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Neoclima.cpp:116
-
const uint8_t kNeoclimaFanAuto
Definition: ir_Neoclima.h:101
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t Econo
Definition: ir_Neoclima.h:47
-
std::string String
Definition: IRremoteESP8266.h:1217
-
bool getEye(void) const
Get the Eye (Sensor) setting of the A/C.
Definition: ir_Neoclima.cpp:457
-
uint8_t getButton(void) const
Get the Button/Command setting of the A/C.
Definition: ir_Neoclima.cpp:159
-
bool getIon(void) const
Get the Ion (filter) setting of the A/C.
Definition: ir_Neoclima.cpp:414
-
const uint8_t kNeoclimaButtonFresh
Definition: ir_Neoclima.h:95
-
uint8_t Turbo
Definition: ir_Neoclima.h:46
-
const uint8_t kNeoclimaButtonEcono
Definition: ir_Neoclima.h:91
-
uint8_t Temp
Definition: ir_Neoclima.h:69
-
const uint8_t kNeoclimaButtonAirFlow
Definition: ir_Neoclima.h:86
- -
uint8_t Button
Definition: ir_Neoclima.h:54
-
uint8_t CHeat
Definition: ir_Neoclima.h:37
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Neoclima.cpp:70
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Neoclima.cpp:291
-
const uint8_t kNeoclimaButtonTempDown
Definition: ir_Neoclima.h:83
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Neoclima.cpp:77
-
const uint8_t kNeoclimaButtonLight
Definition: ir_Neoclima.h:90
-
void setIon(const bool on)
Set the Ion (filter) setting of the A/C.
Definition: ir_Neoclima.cpp:407
-
bool getLight(void) const
Get the Light (LED display) setting of the A/C.
Definition: ir_Neoclima.cpp:427
-
uint8_t Follow
Definition: ir_Neoclima.h:67
-
const uint8_t kNeoclimaButtonSwing
Definition: ir_Neoclima.h:84
-
const uint8_t kNeoclimaButtonFollow
Definition: ir_Neoclima.h:93
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Neoclima.h:188
-
const uint8_t kNeoclimaSwingVOff
Definition: ir_Neoclima.h:100
-
bool getSwingV(void) const
Get the vertical swing setting of the A/C.
Definition: ir_Neoclima.cpp:336
-
void setSwingV(const bool on)
Set the vertical swing setting of the A/C.
Definition: ir_Neoclima.cpp:329
-
void setEye(const bool on)
Set the Eye (Sensor) setting of the A/C.
Definition: ir_Neoclima.cpp:450
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Neoclima.cpp:226
-
const uint8_t kNeoclimaButtonSleep
Definition: ir_Neoclima.h:88
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Neoclima.cpp:486
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Neoclima.cpp:164
-
uint8_t UseFah
Definition: ir_Neoclima.h:65
-
const uint8_t kNeoclimaFanMed
Definition: ir_Neoclima.h:103
-
bool getFresh(void) const
Get the Fresh (air) setting of the A/C.
Definition: ir_Neoclima.cpp:388
-
const uint8_t kNeoclimaButtonTempUnit
Definition: ir_Neoclima.h:97
-
void setFresh(const bool on)
Set the Fresh (air) setting of the A/C.
Definition: ir_Neoclima.cpp:381
-
bool getHold(void) const
Get the Hold setting of the A/C.
Definition: ir_Neoclima.cpp:401
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Neoclima.cpp:171
-
const uint8_t kNeoclimaCool
Definition: ir_Neoclima.h:113
-
const uint8_t kNeoclimaButton8CHeat
Definition: ir_Neoclima.h:96
-
uint8_t Ion
Definition: ir_Neoclima.h:38
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Neoclima.cpp:255
-
bool getFollow(void) const
Get the Follow Me setting of the A/C.
Definition: ir_Neoclima.cpp:480
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Neoclima.cpp:213
-
const uint8_t kNeoclimaHeat
Definition: ir_Neoclima.h:116
-
void setButton(const uint8_t button)
Set the Button/Command pressed setting of the A/C.
Definition: ir_Neoclima.cpp:130
-
const uint8_t kNeoclimaButtonIon
Definition: ir_Neoclima.h:94
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Neoclima.cpp:514
-
uint8_t Sum
Definition: ir_Neoclima.h:74
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Neoclima.cpp:184
-
const uint8_t kNeoclimaFanLow
Definition: ir_Neoclima.h:104
-
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Neoclima.cpp:355
-
bool getTempUnits(void) const
Is the A/C unit using Fahrenheit or Celsius for temperature units.
Definition: ir_Neoclima.cpp:463
-
uint8_t Light
Definition: ir_Neoclima.h:43
-
bool getSwingH(void) const
Get the horizontal swing (Air Flow) setting of the A/C.
Definition: ir_Neoclima.cpp:349
-
void checksum(const uint16_t length=kNeoclimaStateLength)
Calculate & update the checksum for the internal state.
Definition: ir_Neoclima.cpp:101
-
void setSwingH(const bool on)
Set the horizontal swing setting of the A/C.
Definition: ir_Neoclima.cpp:342
-
void send(const uint16_t repeat=kNeoclimaMinRepeat)
Send the current internal state as an IR message.
Definition: ir_Neoclima.cpp:109
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Neoclima.cpp:167
-
uint8_t Fan
Definition: ir_Neoclima.h:64
-
uint8_t Fresh
Definition: ir_Neoclima.h:56
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint16_t kNeoclimaMinRepeat
Definition: IRremoteESP8266.h:1059
-
IRNeoclimaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Neoclima.cpp:63
-
Class for handling detailed Neoclima A/C messages.
Definition: ir_Neoclima.h:120
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Neoclima.cpp:316
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kNeoclimaStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Neoclima.cpp:93
-
const uint8_t kNeoclimaButtonTempUp
Definition: ir_Neoclima.h:82
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Nikai_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Nikai_8cpp.html deleted file mode 100644 index 95c82cd74..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Nikai_8cpp.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Nikai.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Nikai.cpp File Reference
-
-
- -

Nikai. -More...

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

-Variables

const uint16_t kNikaiTick = 500
 
const uint16_t kNikaiHdrMarkTicks = 8
 
const uint16_t kNikaiHdrMark = kNikaiHdrMarkTicks * kNikaiTick
 
const uint16_t kNikaiHdrSpaceTicks = 8
 
const uint16_t kNikaiHdrSpace = kNikaiHdrSpaceTicks * kNikaiTick
 
const uint16_t kNikaiBitMarkTicks = 1
 
const uint16_t kNikaiBitMark = kNikaiBitMarkTicks * kNikaiTick
 
const uint16_t kNikaiOneSpaceTicks = 2
 
const uint16_t kNikaiOneSpace = kNikaiOneSpaceTicks * kNikaiTick
 
const uint16_t kNikaiZeroSpaceTicks = 4
 
const uint16_t kNikaiZeroSpace = kNikaiZeroSpaceTicks * kNikaiTick
 
const uint16_t kNikaiMinGapTicks = 17
 
const uint16_t kNikaiMinGap = kNikaiMinGapTicks * kNikaiTick
 
-

Detailed Description

-

Variable Documentation

- -

◆ kNikaiBitMark

- -
-
- - - - -
const uint16_t kNikaiBitMark = kNikaiBitMarkTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiBitMarkTicks

- -
-
- - - - -
const uint16_t kNikaiBitMarkTicks = 1
-
- -
-
- -

◆ kNikaiHdrMark

- -
-
- - - - -
const uint16_t kNikaiHdrMark = kNikaiHdrMarkTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiHdrMarkTicks

- -
-
- - - - -
const uint16_t kNikaiHdrMarkTicks = 8
-
- -
-
- -

◆ kNikaiHdrSpace

- -
-
- - - - -
const uint16_t kNikaiHdrSpace = kNikaiHdrSpaceTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiHdrSpaceTicks

- -
-
- - - - -
const uint16_t kNikaiHdrSpaceTicks = 8
-
- -
-
- -

◆ kNikaiMinGap

- -
-
- - - - -
const uint16_t kNikaiMinGap = kNikaiMinGapTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiMinGapTicks

- -
-
- - - - -
const uint16_t kNikaiMinGapTicks = 17
-
- -
-
- -

◆ kNikaiOneSpace

- -
-
- - - - -
const uint16_t kNikaiOneSpace = kNikaiOneSpaceTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiOneSpaceTicks

- -
-
- - - - -
const uint16_t kNikaiOneSpaceTicks = 2
-
- -
-
- -

◆ kNikaiTick

- -
-
- - - - -
const uint16_t kNikaiTick = 500
-
- -
-
- -

◆ kNikaiZeroSpace

- -
-
- - - - -
const uint16_t kNikaiZeroSpace = kNikaiZeroSpaceTicks * kNikaiTick
-
- -
-
- -

◆ kNikaiZeroSpaceTicks

- -
-
- - - - -
const uint16_t kNikaiZeroSpaceTicks = 4
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8cpp.html deleted file mode 100644 index 490cbdfc8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8cpp.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Panasonic.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Panasonic.cpp File Reference
-
-
- -

Support for Panasonic protocols. Panasonic protocol originally added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) -More...

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

-Variables

const uint16_t kPanasonicHdrMark = 3456
 uSeconds. More...
 
const uint16_t kPanasonicHdrSpace = 1728
 uSeconds. More...
 
const uint16_t kPanasonicBitMark = 432
 uSeconds. More...
 
const uint16_t kPanasonicOneSpace = 1296
 uSeconds. More...
 
const uint16_t kPanasonicZeroSpace = 432
 uSeconds. More...
 
const uint32_t kPanasonicMinCommandLength = 163296
 uSeconds. More...
 
const uint16_t kPanasonicEndGap = 5000
 uSeconds. See #245 More...
 
const uint32_t kPanasonicMinGap = 74736
 uSeconds. More...
 
const uint16_t kPanasonicAcSectionGap = 10000
 uSeconds. More...
 
const uint16_t kPanasonicAcSection1Length = 8
 
const uint32_t kPanasonicAcMessageGap = kDefaultMessageGap
 
const uint16_t kPanasonicAc32HdrMark = 3543
 uSeconds. More...
 
const uint16_t kPanasonicAc32BitMark = 920
 uSeconds. More...
 
const uint16_t kPanasonicAc32HdrSpace = 3450
 uSeconds. More...
 
const uint16_t kPanasonicAc32OneSpace = 2575
 uSeconds. More...
 
const uint16_t kPanasonicAc32ZeroSpace = 828
 uSeconds. More...
 
const uint16_t kPanasonicAc32SectionGap = 13946
 uSeconds. More...
 
const uint8_t kPanasonicAc32Sections = 2
 
const uint8_t kPanasonicAc32BlocksPerSection = 2
 
-

Detailed Description

-

Support for Panasonic protocols. Panasonic protocol originally added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post)

-
See also
Panasonic https://github.com/z3t0/Arduino-IRremote
-
-http://www.remotecentral.com/cgi-bin/mboard/rc-pronto/thread.cgi?2615
-
-Panasonic A/C support heavily influenced by https://github.com/ToniA/ESPEasy/blob/HeatpumpIR/lib/HeatpumpIR/PanasonicHeatpumpIR.cpp Panasonic A/C Clock & Timer support: Reverse Engineering by MikkelTb Code by crankyoldgit
-

Variable Documentation

- -

◆ kPanasonicAc32BitMark

- -
-
- - - - -
const uint16_t kPanasonicAc32BitMark = 920
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAc32BlocksPerSection

- -
-
- - - - -
const uint8_t kPanasonicAc32BlocksPerSection = 2
-
- -
-
- -

◆ kPanasonicAc32HdrMark

- -
-
- - - - -
const uint16_t kPanasonicAc32HdrMark = 3543
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAc32HdrSpace

- -
-
- - - - -
const uint16_t kPanasonicAc32HdrSpace = 3450
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAc32OneSpace

- -
-
- - - - -
const uint16_t kPanasonicAc32OneSpace = 2575
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAc32SectionGap

- -
-
- - - - -
const uint16_t kPanasonicAc32SectionGap = 13946
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAc32Sections

- -
-
- - - - -
const uint8_t kPanasonicAc32Sections = 2
-
- -
-
- -

◆ kPanasonicAc32ZeroSpace

- -
-
- - - - -
const uint16_t kPanasonicAc32ZeroSpace = 828
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicAcMessageGap

- -
-
- - - - -
const uint32_t kPanasonicAcMessageGap = kDefaultMessageGap
-
- -
-
- -

◆ kPanasonicAcSection1Length

- -
-
- - - - -
const uint16_t kPanasonicAcSection1Length = 8
-
- -
-
- -

◆ kPanasonicAcSectionGap

- -
-
- - - - -
const uint16_t kPanasonicAcSectionGap = 10000
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicBitMark

- -
-
- - - - -
const uint16_t kPanasonicBitMark = 432
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicEndGap

- -
-
- - - - -
const uint16_t kPanasonicEndGap = 5000
-
- -

uSeconds. See #245

- -
-
- -

◆ kPanasonicHdrMark

- -
-
- - - - -
const uint16_t kPanasonicHdrMark = 3456
-
-
- -

◆ kPanasonicHdrSpace

- -
-
- - - - -
const uint16_t kPanasonicHdrSpace = 1728
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicMinCommandLength

- -
-
- - - - -
const uint32_t kPanasonicMinCommandLength = 163296
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicMinGap

- -
-
- - - - -
const uint32_t kPanasonicMinGap = 74736
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicOneSpace

- -
-
- - - - -
const uint16_t kPanasonicOneSpace = 1296
-
- -

uSeconds.

- -
-
- -

◆ kPanasonicZeroSpace

- -
-
- - - - -
const uint16_t kPanasonicZeroSpace = 432
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h.html deleted file mode 100644 index b802988e8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h.html +++ /dev/null @@ -1,1043 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Panasonic.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Panasonic.h File Reference
-
-
- -

Support for Panasonic protocols. -More...

- -

Go to the source code of this file.

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

-Classes

class  IRPanasonicAc
 Class for handling detailed Panasonic A/C messages. More...
 
union  PanasonicAc32Protocol
 Native representation of a Panasonic 32-bit A/C message. More...
 
class  IRPanasonicAc32
 Class for handling detailed Panasonic 32bit A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kPanasonicFreq = 36700
 
const uint16_t kPanasonicAcExcess = 0
 
const uint16_t kPanasonicAcTolerance = 40
 
const uint8_t kPanasonicAcAuto = 0
 
const uint8_t kPanasonicAcDry = 2
 
const uint8_t kPanasonicAcCool = 3
 
const uint8_t kPanasonicAcHeat = 4
 
const uint8_t kPanasonicAcFan = 6
 
const uint8_t kPanasonicAcFanMin = 0
 
const uint8_t kPanasonicAcFanMed = 2
 
const uint8_t kPanasonicAcFanMax = 4
 
const uint8_t kPanasonicAcFanAuto = 7
 
const uint8_t kPanasonicAcFanDelta = 3
 
const uint8_t kPanasonicAcPowerOffset = 0
 
const uint8_t kPanasonicAcTempOffset = 1
 
const uint8_t kPanasonicAcTempSize = 5
 
const uint8_t kPanasonicAcMinTemp = 16
 
const uint8_t kPanasonicAcMaxTemp = 30
 
const uint8_t kPanasonicAcFanModeTemp = 27
 
const uint8_t kPanasonicAcQuietOffset = 0
 
const uint8_t kPanasonicAcPowerfulOffset = 5
 
const uint8_t kPanasonicAcQuietCkpOffset = kPanasonicAcPowerfulOffset
 
const uint8_t kPanasonicAcPowerfulCkpOffset = kPanasonicAcQuietOffset
 
const uint8_t kPanasonicAcSwingVHighest = 0x1
 
const uint8_t kPanasonicAcSwingVHigh = 0x2
 
const uint8_t kPanasonicAcSwingVMiddle = 0x3
 
const uint8_t kPanasonicAcSwingVLow = 0x4
 
const uint8_t kPanasonicAcSwingVLowest = 0x5
 
const uint8_t kPanasonicAcSwingVAuto = 0xF
 
const uint8_t kPanasonicAcSwingHMiddle = 0x6
 
const uint8_t kPanasonicAcSwingHFullLeft = 0x9
 
const uint8_t kPanasonicAcSwingHLeft = 0xA
 
const uint8_t kPanasonicAcSwingHRight = 0xB
 
const uint8_t kPanasonicAcSwingHFullRight = 0xC
 
const uint8_t kPanasonicAcSwingHAuto = 0xD
 
const uint8_t kPanasonicAcChecksumInit = 0xF4
 
const uint8_t kPanasonicAcOnTimerOffset = 1
 
const uint8_t kPanasonicAcOffTimerOffset = 2
 
const uint8_t kPanasonicAcTimeSize = 11
 
const uint8_t kPanasonicAcTimeOverflowSize = 3
 
const uint16_t kPanasonicAcTimeMax = 23 * 60 + 59
 
const uint16_t kPanasonicAcTimeSpecial = 0x600
 
const uint8_t kPanasonicAcIonFilterByte = 22
 
const uint8_t kPanasonicAcIonFilterOffset = 0
 
const uint8_t kPanasonicKnownGoodState [kPanasonicAcStateLength]
 
const uint8_t kPanasonicAc32Fan = 1
 
const uint8_t kPanasonicAc32Cool = 2
 
const uint8_t kPanasonicAc32Dry = 3
 
const uint8_t kPanasonicAc32Heat = 4
 
const uint8_t kPanasonicAc32Auto = 6
 
const uint8_t kPanasonicAc32FanMin = 2
 
const uint8_t kPanasonicAc32FanLow = 3
 
const uint8_t kPanasonicAc32FanMed = 4
 
const uint8_t kPanasonicAc32FanHigh = 5
 
const uint8_t kPanasonicAc32FanMax = 6
 
const uint8_t kPanasonicAc32FanAuto = 0xF
 
const uint8_t kPanasonicAc32SwingVAuto = 0x7
 
const uint32_t kPanasonicAc32KnownGood = 0x0AF136FC
 Cool, Auto, 16C. More...
 
-

Detailed Description

-

Support for Panasonic protocols.

-
See also
Panasonic A/C support heavily influenced by https://github.com/ToniA/ESPEasy/blob/HeatpumpIR/lib/HeatpumpIR/PanasonicHeatpumpIR.cpp
-

Variable Documentation

- -

◆ kPanasonicAc32Auto

- -
-
- - - - -
const uint8_t kPanasonicAc32Auto = 6
-
- -
-
- -

◆ kPanasonicAc32Cool

- -
-
- - - - -
const uint8_t kPanasonicAc32Cool = 2
-
- -
-
- -

◆ kPanasonicAc32Dry

- -
-
- - - - -
const uint8_t kPanasonicAc32Dry = 3
-
- -
-
- -

◆ kPanasonicAc32Fan

- -
-
- - - - -
const uint8_t kPanasonicAc32Fan = 1
-
- -
-
- -

◆ kPanasonicAc32FanAuto

- -
-
- - - - -
const uint8_t kPanasonicAc32FanAuto = 0xF
-
- -
-
- -

◆ kPanasonicAc32FanHigh

- -
-
- - - - -
const uint8_t kPanasonicAc32FanHigh = 5
-
- -
-
- -

◆ kPanasonicAc32FanLow

- -
-
- - - - -
const uint8_t kPanasonicAc32FanLow = 3
-
- -
-
- -

◆ kPanasonicAc32FanMax

- -
-
- - - - -
const uint8_t kPanasonicAc32FanMax = 6
-
- -
-
- -

◆ kPanasonicAc32FanMed

- -
-
- - - - -
const uint8_t kPanasonicAc32FanMed = 4
-
- -
-
- -

◆ kPanasonicAc32FanMin

- -
-
- - - - -
const uint8_t kPanasonicAc32FanMin = 2
-
- -
-
- -

◆ kPanasonicAc32Heat

- -
-
- - - - -
const uint8_t kPanasonicAc32Heat = 4
-
- -
-
- -

◆ kPanasonicAc32KnownGood

- -
-
- - - - -
const uint32_t kPanasonicAc32KnownGood = 0x0AF136FC
-
- -

Cool, Auto, 16C.

- -
-
- -

◆ kPanasonicAc32SwingVAuto

- -
-
- - - - -
const uint8_t kPanasonicAc32SwingVAuto = 0x7
-
- -
-
- -

◆ kPanasonicAcAuto

- -
-
- - - - -
const uint8_t kPanasonicAcAuto = 0
-
- -
-
- -

◆ kPanasonicAcChecksumInit

- -
-
- - - - -
const uint8_t kPanasonicAcChecksumInit = 0xF4
-
- -
-
- -

◆ kPanasonicAcCool

- -
-
- - - - -
const uint8_t kPanasonicAcCool = 3
-
- -
-
- -

◆ kPanasonicAcDry

- -
-
- - - - -
const uint8_t kPanasonicAcDry = 2
-
- -
-
- -

◆ kPanasonicAcExcess

- -
-
- - - - -
const uint16_t kPanasonicAcExcess = 0
-
- -
-
- -

◆ kPanasonicAcFan

- -
-
- - - - -
const uint8_t kPanasonicAcFan = 6
-
- -
-
- -

◆ kPanasonicAcFanAuto

- -
-
- - - - -
const uint8_t kPanasonicAcFanAuto = 7
-
- -
-
- -

◆ kPanasonicAcFanDelta

- -
-
- - - - -
const uint8_t kPanasonicAcFanDelta = 3
-
- -
-
- -

◆ kPanasonicAcFanMax

- -
-
- - - - -
const uint8_t kPanasonicAcFanMax = 4
-
- -
-
- -

◆ kPanasonicAcFanMed

- -
-
- - - - -
const uint8_t kPanasonicAcFanMed = 2
-
- -
-
- -

◆ kPanasonicAcFanMin

- -
-
- - - - -
const uint8_t kPanasonicAcFanMin = 0
-
- -
-
- -

◆ kPanasonicAcFanModeTemp

- -
-
- - - - -
const uint8_t kPanasonicAcFanModeTemp = 27
-
- -
-
- -

◆ kPanasonicAcHeat

- -
-
- - - - -
const uint8_t kPanasonicAcHeat = 4
-
- -
-
- -

◆ kPanasonicAcIonFilterByte

- -
-
- - - - -
const uint8_t kPanasonicAcIonFilterByte = 22
-
- -
-
- -

◆ kPanasonicAcIonFilterOffset

- -
-
- - - - -
const uint8_t kPanasonicAcIonFilterOffset = 0
-
- -
-
- -

◆ kPanasonicAcMaxTemp

- -
-
- - - - -
const uint8_t kPanasonicAcMaxTemp = 30
-
- -
-
- -

◆ kPanasonicAcMinTemp

- -
-
- - - - -
const uint8_t kPanasonicAcMinTemp = 16
-
- -
-
- -

◆ kPanasonicAcOffTimerOffset

- -
-
- - - - -
const uint8_t kPanasonicAcOffTimerOffset = 2
-
- -
-
- -

◆ kPanasonicAcOnTimerOffset

- -
-
- - - - -
const uint8_t kPanasonicAcOnTimerOffset = 1
-
- -
-
- -

◆ kPanasonicAcPowerfulCkpOffset

- -
-
- - - - -
const uint8_t kPanasonicAcPowerfulCkpOffset = kPanasonicAcQuietOffset
-
- -
-
- -

◆ kPanasonicAcPowerfulOffset

- -
-
- - - - -
const uint8_t kPanasonicAcPowerfulOffset = 5
-
- -
-
- -

◆ kPanasonicAcPowerOffset

- -
-
- - - - -
const uint8_t kPanasonicAcPowerOffset = 0
-
- -
-
- -

◆ kPanasonicAcQuietCkpOffset

- -
-
- - - - -
const uint8_t kPanasonicAcQuietCkpOffset = kPanasonicAcPowerfulOffset
-
- -
-
- -

◆ kPanasonicAcQuietOffset

- -
-
- - - - -
const uint8_t kPanasonicAcQuietOffset = 0
-
- -
-
- -

◆ kPanasonicAcSwingHAuto

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHAuto = 0xD
-
- -
-
- -

◆ kPanasonicAcSwingHFullLeft

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHFullLeft = 0x9
-
- -
-
- -

◆ kPanasonicAcSwingHFullRight

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHFullRight = 0xC
-
- -
-
- -

◆ kPanasonicAcSwingHLeft

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHLeft = 0xA
-
- -
-
- -

◆ kPanasonicAcSwingHMiddle

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHMiddle = 0x6
-
- -
-
- -

◆ kPanasonicAcSwingHRight

- -
-
- - - - -
const uint8_t kPanasonicAcSwingHRight = 0xB
-
- -
-
- -

◆ kPanasonicAcSwingVAuto

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVAuto = 0xF
-
- -
-
- -

◆ kPanasonicAcSwingVHigh

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVHigh = 0x2
-
- -
-
- -

◆ kPanasonicAcSwingVHighest

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVHighest = 0x1
-
- -
-
- -

◆ kPanasonicAcSwingVLow

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVLow = 0x4
-
- -
-
- -

◆ kPanasonicAcSwingVLowest

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVLowest = 0x5
-
- -
-
- -

◆ kPanasonicAcSwingVMiddle

- -
-
- - - - -
const uint8_t kPanasonicAcSwingVMiddle = 0x3
-
- -
-
- -

◆ kPanasonicAcTempOffset

- -
-
- - - - -
const uint8_t kPanasonicAcTempOffset = 1
-
- -
-
- -

◆ kPanasonicAcTempSize

- -
-
- - - - -
const uint8_t kPanasonicAcTempSize = 5
-
- -
-
- -

◆ kPanasonicAcTimeMax

- -
-
- - - - -
const uint16_t kPanasonicAcTimeMax = 23 * 60 + 59
-
- -
-
- -

◆ kPanasonicAcTimeOverflowSize

- -
-
- - - - -
const uint8_t kPanasonicAcTimeOverflowSize = 3
-
- -
-
- -

◆ kPanasonicAcTimeSize

- -
-
- - - - -
const uint8_t kPanasonicAcTimeSize = 11
-
- -
-
- -

◆ kPanasonicAcTimeSpecial

- -
-
- - - - -
const uint16_t kPanasonicAcTimeSpecial = 0x600
-
- -
-
- -

◆ kPanasonicAcTolerance

- -
-
- - - - -
const uint16_t kPanasonicAcTolerance = 40
-
- -
-
- -

◆ kPanasonicFreq

- -
-
- - - - -
const uint16_t kPanasonicFreq = 36700
-
- -
-
- -

◆ kPanasonicKnownGoodState

- -
-
- - - - -
const uint8_t kPanasonicKnownGoodState[kPanasonicAcStateLength]
-
-Initial value:
= {
-
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
-
0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
-
0x00, 0x0E, 0xE0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00}
-
-
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h_source.html deleted file mode 100644 index 3afc96665..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Panasonic_8h_source.html +++ /dev/null @@ -1,498 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Panasonic.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Panasonic.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 David Conran
-
2 
-
6 
-
7 // Supports:
-
8 // Brand: Panasonic, Model: TV (PANASONIC)
-
9 // Brand: Panasonic, Model: NKE series A/C (PANASONIC_AC NKE/2)
-
10 // Brand: Panasonic, Model: DKE series A/C (PANASONIC_AC DKE/3)
-
11 // Brand: Panasonic, Model: DKW series A/C (PANASONIC_AC DKE/3)
-
12 // Brand: Panasonic, Model: PKR series A/C (PANASONIC_AC DKE/3)
-
13 // Brand: Panasonic, Model: JKE series A/C (PANASONIC_AC JKE/4)
-
14 // Brand: Panasonic, Model: CKP series A/C (PANASONIC_AC CKP/5)
-
15 // Brand: Panasonic, Model: RKR series A/C (PANASONIC_AC RKR/6)
-
16 // Brand: Panasonic, Model: CS-ME10CKPG A/C (PANASONIC_AC CKP/5)
-
17 // Brand: Panasonic, Model: CS-ME12CKPG A/C (PANASONIC_AC CKP/5)
-
18 // Brand: Panasonic, Model: CS-ME14CKPG A/C (PANASONIC_AC CKP/5)
-
19 // Brand: Panasonic, Model: CS-E7PKR A/C (PANASONIC_AC DKE/2)
-
20 // Brand: Panasonic, Model: CS-Z9RKR A/C (PANASONIC_AC RKR/6)
-
21 // Brand: Panasonic, Model: CS-YW9MKD A/C (PANASONIC_AC JKE/4)
-
22 // Brand: Panasonic, Model: A75C2311 remote (PANASONIC_AC CKP/5)
-
23 // Brand: Panasonic, Model: A75C2616-1 remote (PANASONIC_AC DKE/3)
-
24 // Brand: Panasonic, Model: A75C3704 remote (PANASONIC_AC DKE/3)
-
25 // Brand: Panasonic, Model: A75C3747 remote (PANASONIC_AC JKE/4)
-
26 // Brand: Panasonic, Model: CS-E9CKP series A/C (PANASONIC_AC32)
-
27 // Brand: Panasonic, Model: A75C2295 remote (PANASONIC_AC32)
-
28 
-
29 #ifndef IR_PANASONIC_H_
-
30 #define IR_PANASONIC_H_
-
31 
-
32 #define __STDC_LIMIT_MACROS
-
33 #include <stdint.h>
-
34 #ifdef ARDUINO
-
35 #include <Arduino.h>
-
36 #endif
-
37 #include "IRremoteESP8266.h"
-
38 #include "IRsend.h"
-
39 #ifdef UNIT_TEST
-
40 #include "IRsend_test.h"
-
41 #endif
-
42 
-
43 // Constants
-
44 const uint16_t kPanasonicFreq = 36700;
-
45 const uint16_t kPanasonicAcExcess = 0;
-
46 // Much higher than usual. See issue #540.
-
47 const uint16_t kPanasonicAcTolerance = 40;
-
48 
-
49 const uint8_t kPanasonicAcAuto = 0; // 0b000
-
50 const uint8_t kPanasonicAcDry = 2; // 0b010
-
51 const uint8_t kPanasonicAcCool = 3; // 0b011
-
52 const uint8_t kPanasonicAcHeat = 4; // 0b010
-
53 const uint8_t kPanasonicAcFan = 6; // 0b110
-
54 const uint8_t kPanasonicAcFanMin = 0;
-
55 const uint8_t kPanasonicAcFanMed = 2;
-
56 const uint8_t kPanasonicAcFanMax = 4;
-
57 const uint8_t kPanasonicAcFanAuto = 7;
-
58 const uint8_t kPanasonicAcFanDelta = 3;
-
59 const uint8_t kPanasonicAcPowerOffset = 0;
-
60 const uint8_t kPanasonicAcTempOffset = 1; // Bits
-
61 const uint8_t kPanasonicAcTempSize = 5; // Bits
-
62 const uint8_t kPanasonicAcMinTemp = 16; // Celsius
-
63 const uint8_t kPanasonicAcMaxTemp = 30; // Celsius
-
64 const uint8_t kPanasonicAcFanModeTemp = 27; // Celsius
-
65 const uint8_t kPanasonicAcQuietOffset = 0;
-
66 const uint8_t kPanasonicAcPowerfulOffset = 5; // 0b100000
-
67 // CKP & RKR models have Powerful and Quiet bits swapped.
- - -
70 const uint8_t kPanasonicAcSwingVHighest = 0x1; // 0b0001
-
71 const uint8_t kPanasonicAcSwingVHigh = 0x2; // 0b0010
-
72 const uint8_t kPanasonicAcSwingVMiddle = 0x3; // 0b0011
-
73 const uint8_t kPanasonicAcSwingVLow = 0x4; // 0b0100
-
74 const uint8_t kPanasonicAcSwingVLowest = 0x5; // 0b0101
-
75 const uint8_t kPanasonicAcSwingVAuto = 0xF; // 0b1111
-
76 
-
77 const uint8_t kPanasonicAcSwingHMiddle = 0x6; // 0b0110
-
78 const uint8_t kPanasonicAcSwingHFullLeft = 0x9; // 0b1001
-
79 const uint8_t kPanasonicAcSwingHLeft = 0xA; // 0b1010
-
80 const uint8_t kPanasonicAcSwingHRight = 0xB; // 0b1011
-
81 const uint8_t kPanasonicAcSwingHFullRight = 0xC; // 0b1100
-
82 const uint8_t kPanasonicAcSwingHAuto = 0xD; // 0b1101
-
83 const uint8_t kPanasonicAcChecksumInit = 0xF4;
-
84 const uint8_t kPanasonicAcOnTimerOffset = 1;
-
85 const uint8_t kPanasonicAcOffTimerOffset = 2;
-
86 const uint8_t kPanasonicAcTimeSize = 11; // Bits
-
87 const uint8_t kPanasonicAcTimeOverflowSize = 3; // Bits
-
88 const uint16_t kPanasonicAcTimeMax = 23 * 60 + 59; // Mins since midnight.
-
89 const uint16_t kPanasonicAcTimeSpecial = 0x600;
-
90 
-
91 const uint8_t kPanasonicAcIonFilterByte = 22; // Byte
-
92 const uint8_t kPanasonicAcIonFilterOffset = 0; // Bit
-
93 
- -
95  0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
-
96  0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
-
97  0x00, 0x0E, 0xE0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00};
-
98 
- -
101  public:
-
102  explicit IRPanasonicAc(const uint16_t pin, const bool inverted = false,
-
103  const bool use_modulation = true);
-
104  void stateReset(void);
-
105 #if SEND_PANASONIC_AC
-
106  void send(const uint16_t repeat = kPanasonicAcDefaultRepeat);
-
111  int8_t calibrate(void) { return _irsend.calibrate(); }
-
112 #endif // SEND_PANASONIC_AC
-
113  void begin(void);
-
114  void on(void);
-
115  void off(void);
-
116  void setPower(const bool on);
-
117  bool getPower(void);
-
118  void setTemp(const uint8_t temp, const bool remember = true);
-
119  uint8_t getTemp(void);
-
120  void setFan(const uint8_t fan);
-
121  uint8_t getFan(void);
-
122  void setMode(const uint8_t mode);
-
123  uint8_t getMode(void);
-
124  void setRaw(const uint8_t state[]);
-
125  uint8_t *getRaw(void);
-
126  static bool validChecksum(const uint8_t *state,
-
127  const uint16_t length = kPanasonicAcStateLength);
-
128  static uint8_t calcChecksum(const uint8_t *state,
-
129  const uint16_t length = kPanasonicAcStateLength);
-
130  void setQuiet(const bool on);
-
131  bool getQuiet(void);
-
132  void setPowerful(const bool on);
-
133  bool getPowerful(void);
-
134  void setIon(const bool on);
-
135  bool getIon(void);
-
136  void setModel(const panasonic_ac_remote_model_t model);
- -
138  void setSwingVertical(const uint8_t elevation);
-
139  uint8_t getSwingVertical(void);
-
140  void setSwingHorizontal(const uint8_t direction);
-
141  uint8_t getSwingHorizontal(void);
-
142  static uint16_t encodeTime(const uint8_t hours, const uint8_t mins);
-
143  uint16_t getClock(void);
-
144  void setClock(const uint16_t mins_since_midnight);
-
145  uint16_t getOnTimer(void);
-
146  void setOnTimer(const uint16_t mins_since_midnight, const bool enable = true);
-
147  void cancelOnTimer(void);
-
148  bool isOnTimerEnabled(void);
-
149  uint16_t getOffTimer(void);
-
150  void setOffTimer(const uint16_t mins_since_midnight,
-
151  const bool enable = true);
-
152  void cancelOffTimer(void);
-
153  bool isOffTimerEnabled(void);
-
154  static uint8_t convertMode(const stdAc::opmode_t mode);
-
155  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
156  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
157  static uint8_t convertSwingH(const stdAc::swingh_t position);
-
158  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
159  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
160  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
161  static stdAc::swingh_t toCommonSwingH(const uint8_t pos);
-
162  stdAc::state_t toCommon(void);
-
163  String toString(void);
-
164 #ifndef UNIT_TEST
-
165 
-
166  private:
- -
168 #else // UNIT_TEST
-
169  IRsendTest _irsend;
-
171 #endif // UNIT_TEST
- -
174  uint8_t _swingh;
-
175  uint8_t _temp;
-
176  void fixChecksum(const uint16_t length = kPanasonicAcStateLength);
-
177  static uint16_t _getTime(const uint8_t ptr[]);
-
178  static void _setTime(uint8_t * const ptr, const uint16_t mins_since_midnight,
-
179  const bool round_down);
-
180 };
-
181 
- -
184  uint32_t raw;
-
185  struct {
-
186  // Byte 0
-
187  uint8_t :3;
-
188  uint8_t SwingH :1;
-
189  uint8_t SwingV :3;
-
190  uint8_t :1;
-
191  // Byte 1
-
192  uint8_t :8; // Always seems to be 0x36.
-
193  // Byte 2
-
194  uint8_t Temp :4;
-
195  uint8_t Fan :4;
-
196  // Byte 3
-
197  uint8_t Mode :3;
-
198  uint8_t PowerToggle :1; // 0 means toggle, 1 = keep the same.
-
199  uint8_t :4;
-
200  };
-
201 };
-
202 
-
203 const uint8_t kPanasonicAc32Fan = 1; // 0b001
-
204 const uint8_t kPanasonicAc32Cool = 2; // 0b010
-
205 const uint8_t kPanasonicAc32Dry = 3; // 0b011
-
206 const uint8_t kPanasonicAc32Heat = 4; // 0b010
-
207 const uint8_t kPanasonicAc32Auto = 6; // 0b110
-
208 
-
209 const uint8_t kPanasonicAc32FanMin = 2;
-
210 const uint8_t kPanasonicAc32FanLow = 3;
-
211 const uint8_t kPanasonicAc32FanMed = 4;
-
212 const uint8_t kPanasonicAc32FanHigh = 5;
-
213 const uint8_t kPanasonicAc32FanMax = 6;
-
214 const uint8_t kPanasonicAc32FanAuto = 0xF;
-
215 const uint8_t kPanasonicAc32SwingVAuto = 0x7; // 0b111
-
216 const uint32_t kPanasonicAc32KnownGood = 0x0AF136FC;
-
217 
- -
220  public:
-
221  explicit IRPanasonicAc32(const uint16_t pin, const bool inverted = false,
-
222  const bool use_modulation = true);
-
223  void stateReset(void);
-
224 #if SEND_PANASONIC_AC32
-
225  void send(const uint16_t repeat = kPanasonicAcDefaultRepeat);
-
230  int8_t calibrate(void) { return _irsend.calibrate(); }
-
231 #endif // SEND_PANASONIC_AC32
-
232  void begin(void);
-
233  void setPowerToggle(const bool on);
-
234  bool getPowerToggle(void) const;
-
235  void setTemp(const uint8_t temp);
-
236  uint8_t getTemp(void) const;
-
237  void setFan(const uint8_t fan);
-
238  uint8_t getFan(void) const;
-
239  void setMode(const uint8_t mode);
-
240  uint8_t getMode(void) const;
-
241  void setRaw(const uint32_t state);
-
242  uint32_t getRaw(void) const;
-
243  void setSwingVertical(const uint8_t pos);
-
244  uint8_t getSwingVertical(void) const;
-
245  void setSwingHorizontal(const bool on);
-
246  bool getSwingHorizontal(void) const;
-
247  static uint8_t convertMode(const stdAc::opmode_t mode);
-
248  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
249  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
250  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
251  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
252  static stdAc::swingv_t toCommonSwingV(const uint8_t pos);
-
253  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
254  String toString(void) const;
-
255 #ifndef UNIT_TEST
-
256 
-
257  private:
- -
259 #else // UNIT_TEST
-
260  IRsendTest _irsend;
-
262 #endif // UNIT_TEST
- -
265 };
-
266 
-
267 #endif // IR_PANASONIC_H_
-
-
const uint8_t kPanasonicAcFanAuto
Definition: ir_Panasonic.h:57
-
static uint16_t _getTime(const uint8_t ptr[])
Get the time from a given pointer location.
Definition: ir_Panasonic.cpp:538
-
Class for handling detailed Panasonic A/C messages.
Definition: ir_Panasonic.h:100
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a standard A/C vertical swing into its native setting.
Definition: ir_Panasonic.cpp:1262
-
uint8_t getTemp(void)
Get the current temperature setting.
Definition: ir_Panasonic.cpp:383
-
const uint8_t kPanasonicAcIonFilterOffset
Definition: ir_Panasonic.h:92
-
const uint8_t kPanasonicAcAuto
Definition: ir_Panasonic.h:49
-
const uint8_t kPanasonicAcTimeSize
Definition: ir_Panasonic.h:86
-
void setTemp(const uint8_t temp)
Set the desired temperature.
Definition: ir_Panasonic.cpp:1123
-
void setRaw(const uint8_t state[])
Set the internal state from a valid code for this protocol.
Definition: ir_Panasonic.cpp:320
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Panasonic.h:230
-
Native representation of a Panasonic 32-bit A/C message.
Definition: ir_Panasonic.h:183
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Panasonic.cpp:1142
-
const uint8_t kPanasonicAcSwingHRight
Definition: ir_Panasonic.h:80
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
const uint8_t kPanasonicAc32FanMin
Definition: ir_Panasonic.h:209
-
const uint8_t kPanasonicAcFanMin
Definition: ir_Panasonic.h:54
-
uint16_t getOffTimer(void)
Get the Off Timer time value.
Definition: ir_Panasonic.cpp:599
-
const uint8_t kPanasonicAcQuietOffset
Definition: ir_Panasonic.h:65
-
const uint8_t kPanasonicAc32FanHigh
Definition: ir_Panasonic.h:212
-
const uint8_t kPanasonicAcOffTimerOffset
Definition: ir_Panasonic.h:85
-
const uint8_t kPanasonicAc32FanMed
Definition: ir_Panasonic.h:211
-
const uint16_t kPanasonicAcTolerance
Definition: ir_Panasonic.h:47
-
const uint8_t kPanasonicAc32FanAuto
Definition: ir_Panasonic.h:214
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint16_t kPanasonicAcExcess
Definition: ir_Panasonic.h:45
-
uint8_t _swingh
Definition: ir_Panasonic.h:174
-
uint8_t SwingV
Definition: ir_Panasonic.h:189
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a standard A/C vertical swing into its native setting.
Definition: ir_Panasonic.cpp:682
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Panasonic.cpp:1275
-
const uint8_t kPanasonicAcPowerfulOffset
Definition: ir_Panasonic.h:66
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Panasonic.cpp:1218
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Panasonic.cpp:1307
-
static uint16_t encodeTime(const uint8_t hours, const uint8_t mins)
Convert standard (military/24hr) time to nr. of minutes since midnight.
Definition: ir_Panasonic.cpp:530
-
const uint8_t kPanasonicAcTimeOverflowSize
Definition: ir_Panasonic.h:87
-
const uint8_t kPanasonicAcFanMed
Definition: ir_Panasonic.h:55
- -
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Panasonic.cpp:455
-
uint8_t getFan(void)
Get the current fan speed setting.
Definition: ir_Panasonic.cpp:470
-
void setQuiet(const bool on)
Set the Quiet setting of the A/C.
Definition: ir_Panasonic.cpp:489
-
const uint8_t kPanasonicAc32Heat
Definition: ir_Panasonic.h:206
-
uint8_t _temp
Definition: ir_Panasonic.h:175
-
void setRaw(const uint32_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Panasonic.cpp:1108
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kPanasonicAc32SwingVAuto
Definition: ir_Panasonic.h:215
-
uint8_t PowerToggle
Definition: ir_Panasonic.h:198
-
void setPowerToggle(const bool on)
Set the Power Toggle setting of the A/C.
Definition: ir_Panasonic.cpp:1115
-
void setSwingVertical(const uint8_t elevation)
Control the vertical swing setting.
Definition: ir_Panasonic.cpp:409
-
std::string String
Definition: IRremoteESP8266.h:1217
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Panasonic.cpp:723
-
void setIon(const bool on)
Set the Ion (filter) setting of the A/C.
Definition: ir_Panasonic.cpp:646
-
const uint8_t kPanasonicAcPowerfulCkpOffset
Definition: ir_Panasonic.h:69
-
const uint8_t kPanasonicAcSwingHAuto
Definition: ir_Panasonic.h:82
-
const uint8_t kPanasonicAc32FanLow
Definition: ir_Panasonic.h:210
-
const uint8_t kPanasonicAcMinTemp
Definition: ir_Panasonic.h:62
-
void setSwingHorizontal(const bool on)
Control the horizontal swing setting.
Definition: ir_Panasonic.cpp:1235
-
const uint8_t kPanasonicAcPowerOffset
Definition: ir_Panasonic.h:59
-
const uint8_t kPanasonicAcHeat
Definition: ir_Panasonic.h:52
-
void send(const uint16_t repeat=kPanasonicAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Panasonic.cpp:237
-
bool getSwingHorizontal(void) const
Get the current horizontal swing setting.
Definition: ir_Panasonic.cpp:1231
-
uint8_t Fan
Definition: ir_Panasonic.h:195
-
uint16_t getClock(void)
Get the current clock time value.
Definition: ir_Panasonic.cpp:548
-
bool getPower(void)
Get the A/C power state of the remote.
Definition: ir_Panasonic.cpp:342
-
bool getQuiet(void)
Get the Quiet setting of the A/C.
Definition: ir_Panasonic.cpp:477
-
const uint32_t kPanasonicAc32KnownGood
Cool, Auto, 16C.
Definition: ir_Panasonic.h:216
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Panasonic.cpp:1171
-
panasonic_ac_remote_model_t
Panasonic A/C model numbers.
Definition: IRsend.h:146
- -
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
void setOffTimer(const uint16_t mins_since_midnight, const bool enable=true)
Set/Enable the Off Timer.
Definition: ir_Panasonic.cpp:609
-
stdAc::state_t toCommon(void)
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Panasonic.cpp:760
-
static uint8_t calcChecksum(const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Panasonic.cpp:223
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Panasonic.cpp:655
-
const uint8_t kPanasonicAcChecksumInit
Definition: ir_Panasonic.h:83
-
static void _setTime(uint8_t *const ptr, const uint16_t mins_since_midnight, const bool round_down)
Set the time at a given pointer location.
Definition: ir_Panasonic.cpp:555
-
uint8_t getSwingVertical(void)
Get the current vertical swing setting.
Definition: ir_Panasonic.cpp:403
-
const uint16_t kPanasonicAcDefaultRepeat
Definition: IRremoteESP8266.h:1066
-
uint8_t Temp
Definition: ir_Panasonic.h:194
-
const uint8_t kPanasonicAcSwingHFullRight
Definition: ir_Panasonic.h:81
-
const uint8_t kPanasonicAc32Auto
Definition: ir_Panasonic.h:207
-
const uint8_t kPanasonicAcSwingHLeft
Definition: ir_Panasonic.h:79
-
bool getPowerful(void)
Get the Powerful (Turbo) setting of the A/C.
Definition: ir_Panasonic.cpp:502
-
void setSwingHorizontal(const uint8_t direction)
Control the horizontal swing setting.
Definition: ir_Panasonic.cpp:426
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Panasonic.cpp:313
-
PanasonicAc32Protocol _
The state in code form.
Definition: ir_Panasonic.h:264
-
const uint16_t kPanasonicAcStateLength
Definition: IRremoteESP8266.h:1062
-
uint8_t getTemp(void) const
Get the current desired temperature setting.
Definition: ir_Panasonic.cpp:1131
-
const uint8_t kPanasonicAcSwingHMiddle
Definition: ir_Panasonic.h:77
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Panasonic.cpp:1158
-
const uint8_t kPanasonicAcCool
Definition: ir_Panasonic.h:51
-
uint8_t getSwingVertical(void) const
Get the current vertical swing setting.
Definition: ir_Panasonic.cpp:1239
-
IRPanasonicAc32(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Panasonic.cpp:1087
-
const uint16_t kPanasonicFreq
Definition: ir_Panasonic.h:44
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Panasonic.h:258
-
static stdAc::swingh_t toCommonSwingH(const uint8_t pos)
Convert a native horizontal swing postion to it's common equivalent.
Definition: ir_Panasonic.cpp:737
-
const uint8_t kPanasonicAc32Fan
Definition: ir_Panasonic.h:203
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Panasonic.h:167
-
void setSwingVertical(const uint8_t pos)
Control the vertical swing setting.
Definition: ir_Panasonic.cpp:1243
-
void setOnTimer(const uint16_t mins_since_midnight, const bool enable=true)
Set/Enable the On Timer.
Definition: ir_Panasonic.cpp:580
-
void on(void)
Change the power setting to On.
Definition: ir_Panasonic.cpp:347
-
IRPanasonicAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Panasonic.cpp:195
-
String toString(void)
Convert the internal state into a human readable string.
Definition: ir_Panasonic.cpp:786
-
uint8_t Mode
Definition: ir_Panasonic.h:197
-
const uint8_t kPanasonicAc32FanMax
Definition: ir_Panasonic.h:213
-
const uint8_t kPanasonicAcQuietCkpOffset
Definition: ir_Panasonic.h:68
-
const uint8_t kPanasonicKnownGoodState[kPanasonicAcStateLength]
Definition: ir_Panasonic.h:94
-
const uint8_t kPanasonicAcSwingVAuto
Definition: ir_Panasonic.h:75
-
void send(const uint16_t repeat=kPanasonicAcDefaultRepeat)
Send the current internal state as IR messages.
Definition: ir_Panasonic.cpp:1094
-
const uint8_t kPanasonicAcSwingVHigh
Definition: ir_Panasonic.h:71
-
bool isOnTimerEnabled(void)
Check if the On Timer is Enabled.
Definition: ir_Panasonic.cpp:593
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Panasonic.cpp:207
-
const uint8_t kPanasonicAc32Dry
Definition: ir_Panasonic.h:205
-
void fixChecksum(const uint16_t length=kPanasonicAcStateLength)
Calculate and set the checksum values for the internal state.
Definition: ir_Panasonic.cpp:230
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Panasonic.cpp:1183
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Panasonic.h:111
-
void setPower(const bool on)
Control the power state of the A/C unit.
Definition: ir_Panasonic.cpp:334
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Panasonic.cpp:1100
-
const uint8_t kPanasonicAcTempOffset
Definition: ir_Panasonic.h:60
-
void setClock(const uint16_t mins_since_midnight)
Set the current clock time value.
Definition: ir_Panasonic.cpp:569
-
const uint16_t kPanasonicAcTimeSpecial
Definition: ir_Panasonic.h:89
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Panasonic.cpp:360
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Panasonic.cpp:1255
-
const uint8_t kPanasonicAcSwingVLow
Definition: ir_Panasonic.h:73
-
void cancelOnTimer(void)
Cancel the On Timer.
Definition: ir_Panasonic.cpp:589
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Panasonic.cpp:1204
-
uint8_t getSwingHorizontal(void)
Get the current horizontal swing setting.
Definition: ir_Panasonic.cpp:420
-
const uint8_t kPanasonicAcFan
Definition: ir_Panasonic.h:53
-
void off(void)
Change the power setting to Off.
Definition: ir_Panasonic.cpp:350
-
const uint8_t kPanasonicAcDry
Definition: ir_Panasonic.h:50
-
Class for handling detailed Panasonic 32bit A/C messages.
Definition: ir_Panasonic.h:219
-
uint8_t remote_state[kPanasonicAcStateLength]
The state in code form.
Definition: ir_Panasonic.h:173
-
void cancelOffTimer(void)
Cancel the Off Timer.
Definition: ir_Panasonic.cpp:624
-
const uint8_t kPanasonicAcIonFilterByte
Definition: ir_Panasonic.h:91
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Panasonic.cpp:668
-
const uint8_t kPanasonicAcSwingVMiddle
Definition: ir_Panasonic.h:72
-
static bool validChecksum(const uint8_t *state, const uint16_t length=kPanasonicAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Panasonic.cpp:213
-
const uint8_t kPanasonicAcFanDelta
Definition: ir_Panasonic.h:58
-
const uint8_t kPanasonicAcSwingVHighest
Definition: ir_Panasonic.h:70
-
const uint8_t kPanasonicAc32Cool
Definition: ir_Panasonic.h:204
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Panasonic.cpp:200
-
const uint8_t kPanasonicAcTempSize
Definition: ir_Panasonic.h:61
-
uint8_t getMode(void)
Get the operating mode setting of the A/C.
Definition: ir_Panasonic.cpp:354
-
void setPowerful(const bool on)
Set the Powerful (Turbo) setting of the A/C.
Definition: ir_Panasonic.cpp:514
-
const uint8_t kPanasonicAcFanModeTemp
Definition: ir_Panasonic.h:64
-
bool getPowerToggle(void) const
Get the Power Toggle setting of the A/C.
Definition: ir_Panasonic.cpp:1119
-
const uint8_t kPanasonicAcFanMax
Definition: ir_Panasonic.h:56
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Panasonic.cpp:710
-
uint32_t getRaw(void) const
Get a copy of the internal state/code for this protocol.
Definition: ir_Panasonic.cpp:1104
-
bool isOffTimerEnabled(void)
Check if the Off Timer is Enabled.
Definition: ir_Panasonic.cpp:628
-
const uint16_t kPanasonicAcTimeMax
Definition: ir_Panasonic.h:88
-
const uint8_t kPanasonicAcSwingHFullLeft
Definition: ir_Panasonic.h:78
-
panasonic_ac_remote_model_t getModel(void)
Get/Detect the model of the A/C.
Definition: ir_Panasonic.cpp:294
-
bool getIon(void)
Get the Ion (filter) setting of the A/C.
Definition: ir_Panasonic.cpp:634
-
uint32_t raw
The state in IR code form.
Definition: ir_Panasonic.h:184
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Panasonic.cpp:1111
-
uint16_t getOnTimer(void)
Get the On Timer time value.
Definition: ir_Panasonic.cpp:575
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void setModel(const panasonic_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Panasonic.cpp:244
-
uint8_t SwingH
Definition: ir_Panasonic.h:188
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Panasonic.cpp:1137
-
const uint8_t kPanasonicAcMaxTemp
Definition: ir_Panasonic.h:63
-
static uint8_t convertSwingH(const stdAc::swingh_t position)
Convert a standard A/C horizontal swing into its native setting.
Definition: ir_Panasonic.cpp:696
-
void setTemp(const uint8_t temp, const bool remember=true)
Set the temperature.
Definition: ir_Panasonic.cpp:392
-
const uint8_t kPanasonicAcSwingVLowest
Definition: ir_Panasonic.h:74
-
const uint8_t kPanasonicAcOnTimerOffset
Definition: ir_Panasonic.h:84
-
static stdAc::swingv_t toCommonSwingV(const uint8_t pos)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Panasonic.cpp:751
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Panasonic.cpp:1199
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pioneer_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pioneer_8cpp.html deleted file mode 100644 index 1f8b8eef2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pioneer_8cpp.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Pioneer.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Pioneer.cpp File Reference
-
-
- -

Pioneer remote emulation. -More...

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

-Variables

const uint16_t kPioneerTick = 534
 uSeconds. More...
 
const uint16_t kPioneerHdrMark = 8506
 uSeconds. More...
 
const uint16_t kPioneerHdrSpace = 4191
 uSeconds. More...
 
const uint16_t kPioneerBitMark = 568
 uSeconds. More...
 
const uint16_t kPioneerOneSpace = 1542
 uSeconds. More...
 
const uint16_t kPioneerZeroSpace = 487
 uSeconds. More...
 
const uint32_t kPioneerMinCommandLength = 84906
 uSeconds. More...
 
const uint32_t kPioneerMinGap = 25181
 uSeconds. More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kPioneerBitMark

- -
-
- - - - -
const uint16_t kPioneerBitMark = 568
-
- -

uSeconds.

- -
-
- -

◆ kPioneerHdrMark

- -
-
- - - - -
const uint16_t kPioneerHdrMark = 8506
-
- -

uSeconds.

- -
-
- -

◆ kPioneerHdrSpace

- -
-
- - - - -
const uint16_t kPioneerHdrSpace = 4191
-
- -

uSeconds.

- -
-
- -

◆ kPioneerMinCommandLength

- -
-
- - - - -
const uint32_t kPioneerMinCommandLength = 84906
-
- -

uSeconds.

- -
-
- -

◆ kPioneerMinGap

- -
-
- - - - -
const uint32_t kPioneerMinGap = 25181
-
- -

uSeconds.

- -
-
- -

◆ kPioneerOneSpace

- -
-
- - - - -
const uint16_t kPioneerOneSpace = 1542
-
- -

uSeconds.

- -
-
- -

◆ kPioneerTick

- -
-
- - - - -
const uint16_t kPioneerTick = 534
-
- -

uSeconds.

- -
-
- -

◆ kPioneerZeroSpace

- -
-
- - - - -
const uint16_t kPioneerZeroSpace = 487
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pronto_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pronto_8cpp.html deleted file mode 100644 index e962543bf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Pronto_8cpp.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Pronto.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Pronto.cpp File Reference
-
-
- -

Pronto code message generation. -More...

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

-Variables

const float kProntoFreqFactor = 0.241246
 
const uint16_t kProntoTypeOffset = 0
 
const uint16_t kProntoFreqOffset = 1
 
const uint16_t kProntoSeq1LenOffset = 2
 
const uint16_t kProntoSeq2LenOffset = 3
 
const uint16_t kProntoDataOffset = 4
 
-

Detailed Description

-

Variable Documentation

- -

◆ kProntoDataOffset

- -
-
- - - - -
const uint16_t kProntoDataOffset = 4
-
- -
-
- -

◆ kProntoFreqFactor

- -
-
- - - - -
const float kProntoFreqFactor = 0.241246
-
- -
-
- -

◆ kProntoFreqOffset

- -
-
- - - - -
const uint16_t kProntoFreqOffset = 1
-
- -
-
- -

◆ kProntoSeq1LenOffset

- -
-
- - - - -
const uint16_t kProntoSeq1LenOffset = 2
-
- -
-
- -

◆ kProntoSeq2LenOffset

- -
-
- - - - -
const uint16_t kProntoSeq2LenOffset = 3
-
- -
-
- -

◆ kProntoTypeOffset

- -
-
- - - - -
const uint16_t kProntoTypeOffset = 0
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RC5__RC6_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RC5__RC6_8cpp.html deleted file mode 100644 index cf5b1a92a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RC5__RC6_8cpp.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_RC5_RC6.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_RC5_RC6.cpp File Reference
-
-
- -

RC-5 & RC-6 support RC-5 & RC-6 support added from https://github.com/z3t0/Arduino-IRremote RC-5X support added by David Conran. -More...

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

-Variables

const uint16_t kRc5T1 = 889
 
const uint32_t kRc5MinCommandLength = 113778
 
const uint32_t kRc5MinGap = kRc5MinCommandLength - kRC5RawBits * (2 * kRc5T1)
 
const uint16_t kRc5ToggleMask = 0x800
 
const uint16_t kRc5SamplesMin = 11
 
const uint16_t kRc6Tick = 444
 
const uint16_t kRc6HdrMarkTicks = 6
 
const uint16_t kRc6HdrMark = kRc6HdrMarkTicks * kRc6Tick
 
const uint16_t kRc6HdrSpaceTicks = 2
 
const uint16_t kRc6HdrSpace = kRc6HdrSpaceTicks * kRc6Tick
 
const uint16_t kRc6RptLengthTicks = 187
 
const uint32_t kRc6RptLength = kRc6RptLengthTicks * kRc6Tick
 
const uint32_t kRc6ToggleMask = 0x10000UL
 
const uint16_t kRc6_36ToggleMask = 0x8000
 
const int16_t kMark = 0
 
const int16_t kSpace = 1
 
-

Detailed Description

-

Variable Documentation

- -

◆ kMark

- -
-
- - - - -
const int16_t kMark = 0
-
- -
-
- -

◆ kRc5MinCommandLength

- -
-
- - - - -
const uint32_t kRc5MinCommandLength = 113778
-
- -
-
- -

◆ kRc5MinGap

- -
-
- - - - -
const uint32_t kRc5MinGap = kRc5MinCommandLength - kRC5RawBits * (2 * kRc5T1)
-
- -
-
- -

◆ kRc5SamplesMin

- -
-
- - - - -
const uint16_t kRc5SamplesMin = 11
-
- -
-
- -

◆ kRc5T1

- -
-
- - - - -
const uint16_t kRc5T1 = 889
-
- -
-
- -

◆ kRc5ToggleMask

- -
-
- - - - -
const uint16_t kRc5ToggleMask = 0x800
-
- -
-
- -

◆ kRc6_36ToggleMask

- -
-
- - - - -
const uint16_t kRc6_36ToggleMask = 0x8000
-
- -
-
- -

◆ kRc6HdrMark

- -
-
- - - - -
const uint16_t kRc6HdrMark = kRc6HdrMarkTicks * kRc6Tick
-
- -
-
- -

◆ kRc6HdrMarkTicks

- -
-
- - - - -
const uint16_t kRc6HdrMarkTicks = 6
-
- -
-
- -

◆ kRc6HdrSpace

- -
-
- - - - -
const uint16_t kRc6HdrSpace = kRc6HdrSpaceTicks * kRc6Tick
-
- -
-
- -

◆ kRc6HdrSpaceTicks

- -
-
- - - - -
const uint16_t kRc6HdrSpaceTicks = 2
-
- -
-
- -

◆ kRc6RptLength

- -
-
- - - - -
const uint32_t kRc6RptLength = kRc6RptLengthTicks * kRc6Tick
-
- -
-
- -

◆ kRc6RptLengthTicks

- -
-
- - - - -
const uint16_t kRc6RptLengthTicks = 187
-
- -
-
- -

◆ kRc6Tick

- -
-
- - - - -
const uint16_t kRc6Tick = 444
-
- -
-
- -

◆ kRc6ToggleMask

- -
-
- - - - -
const uint32_t kRc6ToggleMask = 0x10000UL
-
- -
-
- -

◆ kSpace

- -
-
- - - - -
const int16_t kSpace = 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RCMM_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RCMM_8cpp.html deleted file mode 100644 index 8b4bc3a0c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__RCMM_8cpp.html +++ /dev/null @@ -1,429 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_RCMM.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_RCMM.cpp File Reference
-
-
- -

Support for the Phillips RC-MM protocol. -More...

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

-Variables

const uint16_t kRcmmTick = 28
 
const uint16_t kRcmmHdrMarkTicks = 15
 
const uint16_t kRcmmHdrMark = 416
 
const uint16_t kRcmmHdrSpaceTicks = 10
 
const uint16_t kRcmmHdrSpace = 277
 
const uint16_t kRcmmBitMarkTicks = 6
 
const uint16_t kRcmmBitMark = 166
 
const uint16_t kRcmmBitSpace0Ticks = 10
 
const uint16_t kRcmmBitSpace0 = 277
 
const uint16_t kRcmmBitSpace1Ticks = 16
 
const uint16_t kRcmmBitSpace1 = 444
 
const uint16_t kRcmmBitSpace2Ticks = 22
 
const uint16_t kRcmmBitSpace2 = 611
 
const uint16_t kRcmmBitSpace3Ticks = 28
 
const uint16_t kRcmmBitSpace3 = 777
 
const uint16_t kRcmmRptLengthTicks = 992
 
const uint32_t kRcmmRptLength = 27778
 
const uint16_t kRcmmMinGapTicks = 120
 
const uint32_t kRcmmMinGap = 3360
 
const uint8_t kRcmmTolerance = 10
 
const uint16_t kRcmmExcess = 50
 
-

Detailed Description

-

Support for the Phillips RC-MM protocol.

-
See also
http://www.sbprojects.net/knowledge/ir/rcmm.php
-

Variable Documentation

- -

◆ kRcmmBitMark

- -
-
- - - - -
const uint16_t kRcmmBitMark = 166
-
- -
-
- -

◆ kRcmmBitMarkTicks

- -
-
- - - - -
const uint16_t kRcmmBitMarkTicks = 6
-
- -
-
- -

◆ kRcmmBitSpace0

- -
-
- - - - -
const uint16_t kRcmmBitSpace0 = 277
-
- -
-
- -

◆ kRcmmBitSpace0Ticks

- -
-
- - - - -
const uint16_t kRcmmBitSpace0Ticks = 10
-
- -
-
- -

◆ kRcmmBitSpace1

- -
-
- - - - -
const uint16_t kRcmmBitSpace1 = 444
-
- -
-
- -

◆ kRcmmBitSpace1Ticks

- -
-
- - - - -
const uint16_t kRcmmBitSpace1Ticks = 16
-
- -
-
- -

◆ kRcmmBitSpace2

- -
-
- - - - -
const uint16_t kRcmmBitSpace2 = 611
-
- -
-
- -

◆ kRcmmBitSpace2Ticks

- -
-
- - - - -
const uint16_t kRcmmBitSpace2Ticks = 22
-
- -
-
- -

◆ kRcmmBitSpace3

- -
-
- - - - -
const uint16_t kRcmmBitSpace3 = 777
-
- -
-
- -

◆ kRcmmBitSpace3Ticks

- -
-
- - - - -
const uint16_t kRcmmBitSpace3Ticks = 28
-
- -
-
- -

◆ kRcmmExcess

- -
-
- - - - -
const uint16_t kRcmmExcess = 50
-
- -
-
- -

◆ kRcmmHdrMark

- -
-
- - - - -
const uint16_t kRcmmHdrMark = 416
-
- -
-
- -

◆ kRcmmHdrMarkTicks

- -
-
- - - - -
const uint16_t kRcmmHdrMarkTicks = 15
-
- -
-
- -

◆ kRcmmHdrSpace

- -
-
- - - - -
const uint16_t kRcmmHdrSpace = 277
-
- -
-
- -

◆ kRcmmHdrSpaceTicks

- -
-
- - - - -
const uint16_t kRcmmHdrSpaceTicks = 10
-
- -
-
- -

◆ kRcmmMinGap

- -
-
- - - - -
const uint32_t kRcmmMinGap = 3360
-
- -
-
- -

◆ kRcmmMinGapTicks

- -
-
- - - - -
const uint16_t kRcmmMinGapTicks = 120
-
- -
-
- -

◆ kRcmmRptLength

- -
-
- - - - -
const uint32_t kRcmmRptLength = 27778
-
- -
-
- -

◆ kRcmmRptLengthTicks

- -
-
- - - - -
const uint16_t kRcmmRptLengthTicks = 992
-
- -
-
- -

◆ kRcmmTick

- -
-
- - - - -
const uint16_t kRcmmTick = 28
-
- -
-
- -

◆ kRcmmTolerance

- -
-
- - - - -
const uint8_t kRcmmTolerance = 10
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8cpp.html deleted file mode 100644 index 64379bb62..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8cpp.html +++ /dev/null @@ -1,621 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Samsung.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Samsung.cpp File Reference
-
-
- -

Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

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

-Variables

const uint16_t kSamsungTick = 560
 
const uint16_t kSamsungHdrMarkTicks = 8
 
const uint16_t kSamsungHdrMark = kSamsungHdrMarkTicks * kSamsungTick
 
const uint16_t kSamsungHdrSpaceTicks = 8
 
const uint16_t kSamsungHdrSpace = kSamsungHdrSpaceTicks * kSamsungTick
 
const uint16_t kSamsungBitMarkTicks = 1
 
const uint16_t kSamsungBitMark = kSamsungBitMarkTicks * kSamsungTick
 
const uint16_t kSamsungOneSpaceTicks = 3
 
const uint16_t kSamsungOneSpace = kSamsungOneSpaceTicks * kSamsungTick
 
const uint16_t kSamsungZeroSpaceTicks = 1
 
const uint16_t kSamsungZeroSpace = kSamsungZeroSpaceTicks * kSamsungTick
 
const uint16_t kSamsungRptSpaceTicks = 4
 
const uint16_t kSamsungRptSpace = kSamsungRptSpaceTicks * kSamsungTick
 
const uint16_t kSamsungMinMessageLengthTicks = 193
 
const uint32_t kSamsungMinMessageLength
 
const uint16_t kSamsungMinGapTicks
 
const uint32_t kSamsungMinGap = kSamsungMinGapTicks * kSamsungTick
 
const uint16_t kSamsungAcHdrMark = 690
 
const uint16_t kSamsungAcHdrSpace = 17844
 
const uint8_t kSamsungAcSections = 2
 
const uint16_t kSamsungAcSectionMark = 3086
 
const uint16_t kSamsungAcSectionSpace = 8864
 
const uint16_t kSamsungAcSectionGap = 2886
 
const uint16_t kSamsungAcBitMark = 586
 
const uint16_t kSamsungAcOneSpace = 1432
 
const uint16_t kSamsungAcZeroSpace = 436
 
const uint16_t kSamsung36HdrMark = 4515
 
const uint16_t kSamsung36HdrSpace = 4438
 < uSeconds More...
 
const uint16_t kSamsung36BitMark = 512
 < uSeconds More...
 
const uint16_t kSamsung36OneSpace = 1468
 < uSeconds More...
 
const uint16_t kSamsung36ZeroSpace = 490
 < uSeconds More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSamsung36BitMark

- -
-
- - - - -
const uint16_t kSamsung36BitMark = 512
-
- -

< uSeconds

- -
-
- -

◆ kSamsung36HdrMark

- -
-
- - - - -
const uint16_t kSamsung36HdrMark = 4515
-
- -
-
- -

◆ kSamsung36HdrSpace

- -
-
- - - - -
const uint16_t kSamsung36HdrSpace = 4438
-
- -

< uSeconds

- -
-
- -

◆ kSamsung36OneSpace

- -
-
- - - - -
const uint16_t kSamsung36OneSpace = 1468
-
- -

< uSeconds

- -
-
- -

◆ kSamsung36ZeroSpace

- -
-
- - - - -
const uint16_t kSamsung36ZeroSpace = 490
-
- -

< uSeconds

- -
-
- -

◆ kSamsungAcBitMark

- -
-
- - - - -
const uint16_t kSamsungAcBitMark = 586
-
- -
-
- -

◆ kSamsungAcHdrMark

- -
-
- - - - -
const uint16_t kSamsungAcHdrMark = 690
-
- -
-
- -

◆ kSamsungAcHdrSpace

- -
-
- - - - -
const uint16_t kSamsungAcHdrSpace = 17844
-
- -
-
- -

◆ kSamsungAcOneSpace

- -
-
- - - - -
const uint16_t kSamsungAcOneSpace = 1432
-
- -
-
- -

◆ kSamsungAcSectionGap

- -
-
- - - - -
const uint16_t kSamsungAcSectionGap = 2886
-
- -
-
- -

◆ kSamsungAcSectionMark

- -
-
- - - - -
const uint16_t kSamsungAcSectionMark = 3086
-
- -
-
- -

◆ kSamsungAcSections

- -
-
- - - - -
const uint8_t kSamsungAcSections = 2
-
- -
-
- -

◆ kSamsungAcSectionSpace

- -
-
- - - - -
const uint16_t kSamsungAcSectionSpace = 8864
-
- -
-
- -

◆ kSamsungAcZeroSpace

- -
-
- - - - -
const uint16_t kSamsungAcZeroSpace = 436
-
- -
-
- -

◆ kSamsungBitMark

- -
-
- - - - -
const uint16_t kSamsungBitMark = kSamsungBitMarkTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungBitMarkTicks

- -
-
- - - - -
const uint16_t kSamsungBitMarkTicks = 1
-
- -
-
- -

◆ kSamsungHdrMark

- -
-
- - - - -
const uint16_t kSamsungHdrMark = kSamsungHdrMarkTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungHdrMarkTicks

- -
-
- - - - -
const uint16_t kSamsungHdrMarkTicks = 8
-
- -
-
- -

◆ kSamsungHdrSpace

- -
-
- - - - -
const uint16_t kSamsungHdrSpace = kSamsungHdrSpaceTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungHdrSpaceTicks

- -
-
- - - - -
const uint16_t kSamsungHdrSpaceTicks = 8
-
- -
-
- -

◆ kSamsungMinGap

- -
-
- - - - -
const uint32_t kSamsungMinGap = kSamsungMinGapTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungMinGapTicks

- -
-
- - - - -
const uint16_t kSamsungMinGapTicks
-
-
- -

◆ kSamsungMinMessageLength

- -
-
- - - - -
const uint32_t kSamsungMinMessageLength
-
-
- -

◆ kSamsungMinMessageLengthTicks

- -
-
- - - - -
const uint16_t kSamsungMinMessageLengthTicks = 193
-
- -
-
- -

◆ kSamsungOneSpace

- -
-
- - - - -
const uint16_t kSamsungOneSpace = kSamsungOneSpaceTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungOneSpaceTicks

- -
-
- - - - -
const uint16_t kSamsungOneSpaceTicks = 3
-
- -
-
- -

◆ kSamsungRptSpace

- -
-
- - - - -
const uint16_t kSamsungRptSpace = kSamsungRptSpaceTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungRptSpaceTicks

- -
-
- - - - -
const uint16_t kSamsungRptSpaceTicks = 4
-
- -
-
- -

◆ kSamsungTick

- -
-
- - - - -
const uint16_t kSamsungTick = 560
-
- -
-
- -

◆ kSamsungZeroSpace

- -
-
- - - - -
const uint16_t kSamsungZeroSpace = kSamsungZeroSpaceTicks * kSamsungTick
-
- -
-
- -

◆ kSamsungZeroSpaceTicks

- -
-
- - - - -
const uint16_t kSamsungZeroSpaceTicks = 1
-
- -
-
-
-
const uint16_t kSamsungMinMessageLengthTicks
Definition: ir_Samsung.cpp:36
-
const uint16_t kSamsungTick
Definition: ir_Samsung.cpp:23
-
const uint16_t kSamsungBitMarkTicks
Definition: ir_Samsung.cpp:28
-
const uint16_t kSamsungHdrMarkTicks
Definition: ir_Samsung.cpp:24
-
const uint16_t kSamsungOneSpaceTicks
Definition: ir_Samsung.cpp:30
-
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1076
-
const uint16_t kSamsungHdrSpaceTicks
Definition: ir_Samsung.cpp:26
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h.html deleted file mode 100644 index 9d9f6386f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Samsung.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Samsung.h File Reference
-
-
- -

Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  SamsungProtocol
 Native representation of a Samsung A/C message. More...
 
class  IRSamsungAc
 Class for handling detailed Samsung A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kSamsungAcPowerfulMask8 = 0b01010000
 
const uint8_t kSamsungAcSwingMove = 0b010
 
const uint8_t kSamsungAcSwingStop = 0b111
 
const uint8_t kSamsungAcPowerful10On = 0b011
 
const uint8_t kSamsungAcBreezeOn = 0b101
 
const uint8_t kSamsungAcMinTemp = 16
 
const uint8_t kSamsungAcMaxTemp = 30
 
const uint8_t kSamsungAcAutoTemp = 25
 
const uint8_t kSamsungAcAuto = 0
 
const uint8_t kSamsungAcCool = 1
 
const uint8_t kSamsungAcDry = 2
 
const uint8_t kSamsungAcFan = 3
 
const uint8_t kSamsungAcHeat = 4
 
const uint8_t kSamsungAcFanAuto = 0
 
const uint8_t kSamsungAcFanLow = 2
 
const uint8_t kSamsungAcFanMed = 4
 
const uint8_t kSamsungAcFanHigh = 5
 
const uint8_t kSamsungAcFanAuto2 = 6
 
const uint8_t kSamsungAcFanTurbo = 7
 
const uint16_t kSamsungAcSectionLength = 7
 
const uint64_t kSamsungAcPowerSection = 0x1D20F00000000
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSamsungAcAuto

- -
-
- - - - -
const uint8_t kSamsungAcAuto = 0
-
- -
-
- -

◆ kSamsungAcAutoTemp

- -
-
- - - - -
const uint8_t kSamsungAcAutoTemp = 25
-
- -
-
- -

◆ kSamsungAcBreezeOn

- -
-
- - - - -
const uint8_t kSamsungAcBreezeOn = 0b101
-
- -
-
- -

◆ kSamsungAcCool

- -
-
- - - - -
const uint8_t kSamsungAcCool = 1
-
- -
-
- -

◆ kSamsungAcDry

- -
-
- - - - -
const uint8_t kSamsungAcDry = 2
-
- -
-
- -

◆ kSamsungAcFan

- -
-
- - - - -
const uint8_t kSamsungAcFan = 3
-
- -
-
- -

◆ kSamsungAcFanAuto

- -
-
- - - - -
const uint8_t kSamsungAcFanAuto = 0
-
- -
-
- -

◆ kSamsungAcFanAuto2

- -
-
- - - - -
const uint8_t kSamsungAcFanAuto2 = 6
-
- -
-
- -

◆ kSamsungAcFanHigh

- -
-
- - - - -
const uint8_t kSamsungAcFanHigh = 5
-
- -
-
- -

◆ kSamsungAcFanLow

- -
-
- - - - -
const uint8_t kSamsungAcFanLow = 2
-
- -
-
- -

◆ kSamsungAcFanMed

- -
-
- - - - -
const uint8_t kSamsungAcFanMed = 4
-
- -
-
- -

◆ kSamsungAcFanTurbo

- -
-
- - - - -
const uint8_t kSamsungAcFanTurbo = 7
-
- -
-
- -

◆ kSamsungAcHeat

- -
-
- - - - -
const uint8_t kSamsungAcHeat = 4
-
- -
-
- -

◆ kSamsungAcMaxTemp

- -
-
- - - - -
const uint8_t kSamsungAcMaxTemp = 30
-
- -
-
- -

◆ kSamsungAcMinTemp

- -
-
- - - - -
const uint8_t kSamsungAcMinTemp = 16
-
- -
-
- -

◆ kSamsungAcPowerful10On

- -
-
- - - - -
const uint8_t kSamsungAcPowerful10On = 0b011
-
- -
-
- -

◆ kSamsungAcPowerfulMask8

- -
-
- - - - -
const uint8_t kSamsungAcPowerfulMask8 = 0b01010000
-
- -
-
- -

◆ kSamsungAcPowerSection

- -
-
- - - - -
const uint64_t kSamsungAcPowerSection = 0x1D20F00000000
-
- -
-
- -

◆ kSamsungAcSectionLength

- -
-
- - - - -
const uint16_t kSamsungAcSectionLength = 7
-
- -
-
- -

◆ kSamsungAcSwingMove

- -
-
- - - - -
const uint8_t kSamsungAcSwingMove = 0b010
-
- -
-
- -

◆ kSamsungAcSwingStop

- -
-
- - - - -
const uint8_t kSamsungAcSwingStop = 0b111
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h_source.html deleted file mode 100644 index 73e4ff226..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Samsung_8h_source.html +++ /dev/null @@ -1,372 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Samsung.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Samsung.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 David Conran
-
9 
-
10 // Supports:
-
11 // Brand: Samsung, Model: UA55H6300 TV (SAMSUNG)
-
12 // Brand: Samsung, Model: BN59-01178B TV remote (SAMSUNG)
-
13 // Brand: Samsung, Model: DB63-03556X003 remote
-
14 // Brand: Samsung, Model: DB93-16761C remote
-
15 // Brand: Samsung, Model: IEC-R03 remote
-
16 // Brand: Samsung, Model: AK59-00167A Bluray remote (SAMSUNG36)
-
17 // Brand: Samsung, Model: AH59-02692E Soundbar remote (SAMSUNG36)
-
18 // Brand: Samsung, Model: HW-J551 Soundbar (SAMSUNG36)
-
19 // Brand: Samsung, Model: AR09FSSDAWKNFA A/C (SAMSUNG_AC)
-
20 // Brand: Samsung, Model: AR12KSFPEWQNET A/C (SAMSUNG_AC)
-
21 // Brand: Samsung, Model: AR12HSSDBWKNEU A/C (SAMSUNG_AC)
-
22 // Brand: Samsung, Model: AR12NXCXAWKXEU A/C (SAMSUNG_AC)
-
23 
-
24 #ifndef IR_SAMSUNG_H_
-
25 #define IR_SAMSUNG_H_
-
26 
-
27 #define __STDC_LIMIT_MACROS
-
28 #include <stdint.h>
-
29 #ifndef UNIT_TEST
-
30 #include <Arduino.h>
-
31 #endif
-
32 #include "IRremoteESP8266.h"
-
33 #include "IRsend.h"
-
34 #ifdef UNIT_TEST
-
35 #include "IRsend_test.h"
-
36 #endif
-
37 
- - -
41  struct {
-
42  // Byte 0
-
43  uint8_t :8;
-
44  // Byte 1
-
45  uint8_t :4;
-
46  uint8_t Quiet1 :1;
-
47  uint8_t Power1 :1;
-
48  uint8_t :2;
-
49  // Byte 2~4
-
50  uint8_t pad0[3];
-
51  // Byte 5
-
52  uint8_t :5;
-
53  uint8_t Quiet5 :1;
-
54  uint8_t :2;
-
55  // Byte 6
-
56  uint8_t :4;
-
57  uint8_t Power6 :2;
-
58  uint8_t :2;
-
59  // Byte 7
-
60  uint8_t :8;
-
61  // Byte 8
-
62  uint8_t Powerful8 :8;
-
63  // Byte 9
-
64  uint8_t :4;
-
65  uint8_t Swing :3;
-
66  uint8_t :1;
-
67  // Byte 10
-
68  uint8_t :1;
-
69  uint8_t Powerful10 :3;
-
70  uint8_t Display :1;
-
71  uint8_t :2;
-
72  uint8_t Clean10 :1;
-
73  // Byte 11
-
74  uint8_t Ion :1;
-
75  uint8_t Clean11 :1;
-
76  uint8_t :2;
-
77  uint8_t Temp :4;
-
78  // Byte 12
-
79  uint8_t :1;
-
80  uint8_t Fan :3;
-
81  uint8_t Mode :3;
-
82  uint8_t :1;
-
83  // Byte 13
-
84  uint8_t :1;
-
85  uint8_t Beep :1;
-
86  uint8_t :6;
-
87  };
-
88  struct {
-
89  uint8_t :8;
-
90  // Byte 1
-
91  uint8_t :4;
-
92  uint8_t Sum1 :4;
-
93  uint8_t pad1[6];
-
94  // Byte 8
-
95  uint8_t :4;
-
96  uint8_t Sum2 :4;
-
97  uint8_t :8;
-
98  // Byte 10
-
99  uint8_t :1;
-
100  uint8_t Breeze :3; // WindFree
-
101  uint8_t :4;
-
102  };
-
103 };
-
104 
-
105 // Constants
-
106 const uint8_t kSamsungAcPowerfulMask8 = 0b01010000;
-
107 const uint8_t kSamsungAcSwingMove = 0b010;
-
108 const uint8_t kSamsungAcSwingStop = 0b111;
-
109 const uint8_t kSamsungAcPowerful10On = 0b011;
-
110 const uint8_t kSamsungAcBreezeOn = 0b101;
-
111 const uint8_t kSamsungAcMinTemp = 16; // C Mask 0b11110000
-
112 const uint8_t kSamsungAcMaxTemp = 30; // C Mask 0b11110000
-
113 const uint8_t kSamsungAcAutoTemp = 25; // C Mask 0b11110000
-
114 const uint8_t kSamsungAcAuto = 0;
-
115 const uint8_t kSamsungAcCool = 1;
-
116 const uint8_t kSamsungAcDry = 2;
-
117 const uint8_t kSamsungAcFan = 3;
-
118 const uint8_t kSamsungAcHeat = 4;
-
119 const uint8_t kSamsungAcFanAuto = 0;
-
120 const uint8_t kSamsungAcFanLow = 2;
-
121 const uint8_t kSamsungAcFanMed = 4;
-
122 const uint8_t kSamsungAcFanHigh = 5;
-
123 const uint8_t kSamsungAcFanAuto2 = 6;
-
124 const uint8_t kSamsungAcFanTurbo = 7;
-
125 const uint16_t kSamsungAcSectionLength = 7;
-
126 const uint64_t kSamsungAcPowerSection = 0x1D20F00000000;
-
127 
-
128 // Classes
-
130 class IRSamsungAc {
-
131  public:
-
132  explicit IRSamsungAc(const uint16_t pin, const bool inverted = false,
-
133  const bool use_modulation = true);
-
134  void stateReset(const bool forcepower = true, const bool initialPower = true);
-
135 #if SEND_SAMSUNG_AC
-
136  void send(const uint16_t repeat = kSamsungAcDefaultRepeat,
-
137  const bool calcchecksum = true);
-
138  void sendExtended(const uint16_t repeat = kSamsungAcDefaultRepeat,
-
139  const bool calcchecksum = true);
-
140  void sendOn(const uint16_t repeat = kSamsungAcDefaultRepeat);
-
141  void sendOff(const uint16_t repeat = kSamsungAcDefaultRepeat);
-
146  int8_t calibrate(void) { return _irsend.calibrate(); }
-
147 #endif // SEND_SAMSUNG_AC
-
148  void begin(void);
-
149  void on(void);
-
150  void off(void);
-
151  void setPower(const bool on);
-
152  bool getPower(void) const;
-
153  void setTemp(const uint8_t temp);
-
154  uint8_t getTemp(void) const;
-
155  void setFan(const uint8_t speed);
-
156  uint8_t getFan(void) const;
-
157  void setMode(const uint8_t mode);
-
158  uint8_t getMode(void) const;
-
159  void setSwing(const bool on);
-
160  bool getSwing(void) const;
-
161  void setBeep(const bool on);
-
162  bool getBeep(void) const;
-
163  void setClean(const bool on);
-
164  bool getClean(void) const;
-
165  void setQuiet(const bool on);
-
166  bool getQuiet(void) const;
-
167  void setPowerful(const bool on);
-
168  bool getPowerful(void) const;
-
169  void setBreeze(const bool on);
-
170  bool getBreeze(void) const;
-
171  void setDisplay(const bool on);
-
172  bool getDisplay(void) const;
-
173  void setIon(const bool on);
-
174  bool getIon(void) const;
-
175  uint8_t* getRaw(void);
-
176  void setRaw(const uint8_t new_code[],
-
177  const uint16_t length = kSamsungAcStateLength);
-
178  static bool validChecksum(const uint8_t state[],
-
179  const uint16_t length = kSamsungAcStateLength);
-
180  static uint8_t calcChecksum(const uint8_t state[],
-
181  const uint16_t length = kSamsungAcStateLength);
-
182  static uint8_t convertMode(const stdAc::opmode_t mode);
-
183  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
184  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
185  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
186  stdAc::state_t toCommon(void) const;
-
187  String toString(void) const;
-
188 #ifndef UNIT_TEST
-
189 
-
190  private:
- -
192 #else // UNIT_TEST
-
193  IRsendTest _irsend;
-
195 #endif // UNIT_TEST
- -
198  bool _forcepower;
- -
200  void checksum(const uint16_t length = kSamsungAcStateLength);
-
201 };
-
202 
-
203 #endif // IR_SAMSUNG_H_
-
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Samsung.cpp:692
-
const uint8_t kSamsungAcDry
Definition: ir_Samsung.h:116
-
Class for handling detailed Samsung A/C messages.
Definition: ir_Samsung.h:130
-
bool _forcepower
Hack to know when we need to send a special power mesg.
Definition: ir_Samsung.h:198
-
const uint8_t kSamsungAcCool
Definition: ir_Samsung.h:115
-
Native representation of a Samsung A/C message.
Definition: ir_Samsung.h:39
-
bool getIon(void) const
Get the Ion (Filter) setting of the A/C.
Definition: ir_Samsung.cpp:627
-
void setQuiet(const bool on)
Set the Quiet setting of the A/C.
Definition: ir_Samsung.cpp:558
-
const uint8_t kSamsungAcFanMed
Definition: ir_Samsung.h:121
-
void send(const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)
Send the current internal state as an IR message.
Definition: ir_Samsung.cpp:341
-
const uint8_t kSamsungAcFanAuto2
Definition: ir_Samsung.h:123
-
const uint8_t kSamsungAcAuto
Definition: ir_Samsung.h:114
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Samsung.h:191
-
IRSamsungAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Samsung.cpp:270
-
bool getPowerful(void) const
Get the Powerful (Turbo) setting of the A/C.
Definition: ir_Samsung.cpp:570
-
const uint8_t kSamsungAcFanHigh
Definition: ir_Samsung.h:122
-
bool getClean(void) const
Get the Clean setting of the A/C.
Definition: ir_Samsung.cpp:539
-
uint8_t Temp
Definition: ir_Samsung.h:77
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kSamsungAcFan
Definition: ir_Samsung.h:117
-
void setBreeze(const bool on)
Closes the vanes over the fan outlet, to stop direct wind. Aka. WindFree.
Definition: ir_Samsung.cpp:604
-
uint8_t Swing
Definition: ir_Samsung.h:65
-
uint8_t Ion
Definition: ir_Samsung.h:74
-
const uint8_t kSamsungAcSwingStop
Definition: ir_Samsung.h:108
-
const uint16_t kSamsungAcDefaultRepeat
Definition: IRremoteESP8266.h:1082
-
bool getDisplay(void) const
Get the Display (Light/LED) setting of the A/C.
Definition: ir_Samsung.cpp:615
-
SamsungProtocol _
Definition: ir_Samsung.h:197
-
const uint8_t kSamsungAcPowerful10On
Definition: ir_Samsung.h:109
- -
void setSwing(const bool on)
Set the vertical swing setting of the A/C.
Definition: ir_Samsung.cpp:521
-
bool getQuiet(void) const
Get the Quiet setting of the A/C.
Definition: ir_Samsung.cpp:552
-
const uint16_t kSamsungAcSectionLength
Definition: ir_Samsung.h:125
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Samsung.cpp:291
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
void setIon(const bool on)
Set the Ion (Filter) setting of the A/C.
Definition: ir_Samsung.cpp:633
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Samsung.cpp:455
-
void setRaw(const uint8_t new_code[], const uint16_t length=kSamsungAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Samsung.cpp:416
-
std::string String
Definition: IRremoteESP8266.h:1217
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Samsung.cpp:719
-
void sendOff(const uint16_t repeat=kSamsungAcDefaultRepeat)
Send the special extended "Off" message as the library can't seem to reproduce this message automatic...
Definition: ir_Samsung.cpp:396
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Samsung.cpp:427
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Samsung.cpp:653
-
uint8_t Quiet1
Definition: ir_Samsung.h:46
-
uint8_t Beep
Definition: ir_Samsung.h:85
-
const uint8_t kSamsungAcPowerfulMask8
Definition: ir_Samsung.h:106
-
const uint16_t kSamsungAcStateLength
Definition: IRremoteESP8266.h:1078
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kSamsungAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Samsung.cpp:316
-
bool getBeep(void) const
Get the Beep setting of the A/C.
Definition: ir_Samsung.cpp:527
- -
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Samsung.cpp:447
-
const uint64_t kSamsungAcPowerSection
Definition: ir_Samsung.h:126
-
void setPowerful(const bool on)
Set the Powerful (Turbo) setting of the A/C.
Definition: ir_Samsung.cpp:578
-
const uint16_t kSamsungAcExtendedStateLength
Definition: IRremoteESP8266.h:1080
-
uint8_t Mode
Definition: ir_Samsung.h:81
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Samsung.cpp:434
-
uint8_t pad1[6]
Definition: ir_Samsung.h:93
-
uint8_t Display
Definition: ir_Samsung.h:70
-
void setDisplay(const bool on)
Set the Display (Light/LED) setting of the A/C.
Definition: ir_Samsung.cpp:621
-
uint8_t Clean11
Definition: ir_Samsung.h:75
-
const uint8_t kSamsungAcBreezeOn
Definition: ir_Samsung.h:110
-
void stateReset(const bool forcepower=true, const bool initialPower=true)
Reset the internal state of the emulation.
Definition: ir_Samsung.cpp:280
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kSamsungAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Samsung.cpp:297
-
bool _lastsentpowerstate
Definition: ir_Samsung.h:199
-
const uint8_t kSamsungAcAutoTemp
Definition: ir_Samsung.h:113
-
const uint8_t kSamsungAcSwingMove
Definition: ir_Samsung.h:107
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Samsung.cpp:461
-
const uint8_t kSamsungAcFanLow
Definition: ir_Samsung.h:120
-
void setClean(const bool on)
Set the Clean setting of the A/C.
Definition: ir_Samsung.cpp:545
-
uint8_t Breeze
Definition: ir_Samsung.h:100
-
const uint8_t kSamsungAcHeat
Definition: ir_Samsung.h:118
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Samsung.cpp:667
-
void sendOn(const uint16_t repeat=kSamsungAcDefaultRepeat)
Send the special extended "On" message as the library can't seem to reproduce this message automatica...
Definition: ir_Samsung.cpp:383
-
const uint8_t kSamsungAcFanAuto
Definition: ir_Samsung.h:119
-
void checksum(const uint16_t length=kSamsungAcStateLength)
Update the checksum for the internal state.
Definition: ir_Samsung.cpp:329
-
void setBeep(const bool on)
Set the Beep setting of the A/C.
Definition: ir_Samsung.cpp:533
-
uint8_t Power1
Definition: ir_Samsung.h:47
-
uint8_t Sum1
Definition: ir_Samsung.h:92
-
bool getSwing(void) const
Get the vertical swing setting of the A/C.
Definition: ir_Samsung.cpp:513
-
uint8_t Powerful8
Definition: ir_Samsung.h:62
-
uint8_t Powerful10
Definition: ir_Samsung.h:69
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Samsung.cpp:640
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Samsung.h:146
-
uint8_t Fan
Definition: ir_Samsung.h:80
-
void sendExtended(const uint16_t repeat=kSamsungAcDefaultRepeat, const bool calcchecksum=true)
Send the extended current internal state as an IR message.
Definition: ir_Samsung.cpp:362
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Samsung.cpp:485
-
const uint8_t kSamsungAcMaxTemp
Definition: ir_Samsung.h:112
-
uint8_t Clean10
Definition: ir_Samsung.h:72
-
uint8_t Sum2
Definition: ir_Samsung.h:96
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Samsung.cpp:430
-
bool getBreeze(void) const
Are the vanes closed over the fan outlet, to stop direct wind? Aka. WindFree.
Definition: ir_Samsung.cpp:596
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Samsung.cpp:680
-
uint8_t pad0[3]
Definition: ir_Samsung.h:50
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Samsung.cpp:441
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Samsung.cpp:408
-
const uint8_t kSamsungAcFanTurbo
Definition: ir_Samsung.h:124
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Samsung.cpp:505
-
uint8_t raw[kSamsungAcExtendedStateLength]
State in code form.
Definition: ir_Samsung.h:40
-
const uint8_t kSamsungAcMinTemp
Definition: ir_Samsung.h:111
-
uint8_t Power6
Definition: ir_Samsung.h:57
-
uint8_t Quiet5
Definition: ir_Samsung.h:53
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Samsung.cpp:479
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8cpp.html deleted file mode 100644 index b00d11e5e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8cpp.html +++ /dev/null @@ -1,489 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sanyo.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Sanyo.cpp File Reference
-
-
- -

Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

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

-Variables

const uint16_t kSanyoSa8650bHdrMark = 3500
 
const uint16_t kSanyoSa8650bHdrSpace = 950
 
const uint16_t kSanyoSa8650bOneMark = 2400
 
const uint16_t kSanyoSa8650bZeroMark = 700
 
const uint16_t kSanyoSa8650bDoubleSpaceUsecs = 800
 
const uint16_t kSanyoSa8650bRptLength = 45000
 
const uint16_t kSanyoLc7461AddressMask = (1 << kSanyoLC7461AddressBits) - 1
 
const uint16_t kSanyoLc7461CommandMask = (1 << kSanyoLC7461CommandBits) - 1
 
const uint16_t kSanyoLc7461HdrMark = 9000
 
const uint16_t kSanyoLc7461HdrSpace = 4500
 
const uint16_t kSanyoLc7461BitMark = 560
 
const uint16_t kSanyoLc7461OneSpace = 1690
 
const uint16_t kSanyoLc7461ZeroSpace = 560
 
const uint32_t kSanyoLc7461MinCommandLength = 108000
 
const uint16_t kSanyoLc7461MinGap
 
const uint16_t kSanyoAcHdrMark = 8500
 uSeconds More...
 
const uint16_t kSanyoAcHdrSpace = 4200
 uSeconds More...
 
const uint16_t kSanyoAcBitMark = 500
 uSeconds More...
 
const uint16_t kSanyoAcOneSpace = 1600
 uSeconds More...
 
const uint16_t kSanyoAcZeroSpace = 550
 uSeconds More...
 
const uint32_t kSanyoAcGap = kDefaultMessageGap
 uSeconds (Guess only) More...
 
const uint16_t kSanyoAcFreq = 38000
 Hz. (Guess only) More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSanyoAcBitMark

- -
-
- - - - -
const uint16_t kSanyoAcBitMark = 500
-
- -

uSeconds

- -
-
- -

◆ kSanyoAcFreq

- -
-
- - - - -
const uint16_t kSanyoAcFreq = 38000
-
- -

Hz. (Guess only)

- -
-
- -

◆ kSanyoAcGap

- -
-
- - - - -
const uint32_t kSanyoAcGap = kDefaultMessageGap
-
- -

uSeconds (Guess only)

- -
-
- -

◆ kSanyoAcHdrMark

- -
-
- - - - -
const uint16_t kSanyoAcHdrMark = 8500
-
- -

uSeconds

- -
-
- -

◆ kSanyoAcHdrSpace

- -
-
- - - - -
const uint16_t kSanyoAcHdrSpace = 4200
-
- -

uSeconds

- -
-
- -

◆ kSanyoAcOneSpace

- -
-
- - - - -
const uint16_t kSanyoAcOneSpace = 1600
-
- -

uSeconds

- -
-
- -

◆ kSanyoAcZeroSpace

- -
-
- - - - -
const uint16_t kSanyoAcZeroSpace = 550
-
- -

uSeconds

- -
-
- -

◆ kSanyoLc7461AddressMask

- -
-
- - - - -
const uint16_t kSanyoLc7461AddressMask = (1 << kSanyoLC7461AddressBits) - 1
-
- -
-
- -

◆ kSanyoLc7461BitMark

- -
-
- - - - -
const uint16_t kSanyoLc7461BitMark = 560
-
- -
-
- -

◆ kSanyoLc7461CommandMask

- -
-
- - - - -
const uint16_t kSanyoLc7461CommandMask = (1 << kSanyoLC7461CommandBits) - 1
-
- -
-
- -

◆ kSanyoLc7461HdrMark

- -
-
- - - - -
const uint16_t kSanyoLc7461HdrMark = 9000
-
- -
-
- -

◆ kSanyoLc7461HdrSpace

- -
-
- - - - -
const uint16_t kSanyoLc7461HdrSpace = 4500
-
- -
-
- -

◆ kSanyoLc7461MinCommandLength

- -
-
- - - - -
const uint32_t kSanyoLc7461MinCommandLength = 108000
-
- -
-
- -

◆ kSanyoLc7461MinGap

- -
-
- - - - -
const uint16_t kSanyoLc7461MinGap
-
-
- -

◆ kSanyoLc7461OneSpace

- -
-
- - - - -
const uint16_t kSanyoLc7461OneSpace = 1690
-
- -
-
- -

◆ kSanyoLc7461ZeroSpace

- -
-
- - - - -
const uint16_t kSanyoLc7461ZeroSpace = 560
-
- -
-
- -

◆ kSanyoSa8650bDoubleSpaceUsecs

- -
-
- - - - -
const uint16_t kSanyoSa8650bDoubleSpaceUsecs = 800
-
- -
-
- -

◆ kSanyoSa8650bHdrMark

- -
-
- - - - -
const uint16_t kSanyoSa8650bHdrMark = 3500
-
- -
-
- -

◆ kSanyoSa8650bHdrSpace

- -
-
- - - - -
const uint16_t kSanyoSa8650bHdrSpace = 950
-
- -
-
- -

◆ kSanyoSa8650bOneMark

- -
-
- - - - -
const uint16_t kSanyoSa8650bOneMark = 2400
-
- -
-
- -

◆ kSanyoSa8650bRptLength

- -
-
- - - - -
const uint16_t kSanyoSa8650bRptLength = 45000
-
- -
-
- -

◆ kSanyoSa8650bZeroMark

- -
-
- - - - -
const uint16_t kSanyoSa8650bZeroMark = 700
-
- -
-
-
-
const uint16_t kSanyoLc7461HdrMark
Definition: ir_Sanyo.cpp:48
-
const uint32_t kSanyoLc7461MinCommandLength
Definition: ir_Sanyo.cpp:53
-
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1088
-
const uint16_t kSanyoLc7461HdrSpace
Definition: ir_Sanyo.cpp:49
-
const uint16_t kSanyoLc7461BitMark
Definition: ir_Sanyo.cpp:50
-
const uint16_t kSanyoLc7461ZeroSpace
Definition: ir_Sanyo.cpp:52
-
const uint16_t kSanyoLc7461OneSpace
Definition: ir_Sanyo.cpp:51
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h.html deleted file mode 100644 index 988ffdf10..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sanyo.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Sanyo.h File Reference
-
-
- -

Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  SanyoProtocol
 Native representation of a Sanyo A/C message. More...
 
class  IRSanyoAc
 Class for handling detailed Sanyo A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kSanyoAcTempMin = 16
 Celsius. More...
 
const uint8_t kSanyoAcTempMax = 30
 Celsius. More...
 
const uint8_t kSanyoAcTempDelta = 4
 Celsius to Native Temp difference. More...
 
const uint8_t kSanyoAcHourMax = 15
 0b1111 More...
 
const uint8_t kSanyoAcHeat = 1
 0b001 More...
 
const uint8_t kSanyoAcCool = 2
 0b010 More...
 
const uint8_t kSanyoAcDry = 3
 0b011 More...
 
const uint8_t kSanyoAcAuto = 4
 0b100 More...
 
const uint8_t kSanyoAcFanAuto = 0
 0b00 More...
 
const uint8_t kSanyoAcFanHigh = 1
 0b01 More...
 
const uint8_t kSanyoAcFanLow = 2
 0b10 More...
 
const uint8_t kSanyoAcFanMedium = 3
 0b11 More...
 
const uint8_t kSanyoAcPowerOff = 0b01
 Off. More...
 
const uint8_t kSanyoAcPowerOn = 0b10
 On. More...
 
const uint8_t kSanyoAcSwingVAuto = 0
 0b000 More...
 
const uint8_t kSanyoAcSwingVLowest = 2
 0b010 More...
 
const uint8_t kSanyoAcSwingVLow = 3
 0b011 More...
 
const uint8_t kSanyoAcSwingVLowerMiddle = 4
 0b100 More...
 
const uint8_t kSanyoAcSwingVUpperMiddle = 5
 0b101 More...
 
const uint8_t kSanyoAcSwingVHigh = 6
 0b110 More...
 
const uint8_t kSanyoAcSwingVHighest = 7
 0b111 More...
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSanyoAcAuto

- -
-
- - - - -
const uint8_t kSanyoAcAuto = 4
-
- -

0b100

- -
-
- -

◆ kSanyoAcCool

- -
-
- - - - -
const uint8_t kSanyoAcCool = 2
-
- -

0b010

- -
-
- -

◆ kSanyoAcDry

- -
-
- - - - -
const uint8_t kSanyoAcDry = 3
-
- -

0b011

- -
-
- -

◆ kSanyoAcFanAuto

- -
-
- - - - -
const uint8_t kSanyoAcFanAuto = 0
-
- -

0b00

- -
-
- -

◆ kSanyoAcFanHigh

- -
-
- - - - -
const uint8_t kSanyoAcFanHigh = 1
-
- -

0b01

- -
-
- -

◆ kSanyoAcFanLow

- -
-
- - - - -
const uint8_t kSanyoAcFanLow = 2
-
- -

0b10

- -
-
- -

◆ kSanyoAcFanMedium

- -
-
- - - - -
const uint8_t kSanyoAcFanMedium = 3
-
- -

0b11

- -
-
- -

◆ kSanyoAcHeat

- -
-
- - - - -
const uint8_t kSanyoAcHeat = 1
-
- -

0b001

- -
-
- -

◆ kSanyoAcHourMax

- -
-
- - - - -
const uint8_t kSanyoAcHourMax = 15
-
- -

0b1111

- -
-
- -

◆ kSanyoAcPowerOff

- -
-
- - - - -
const uint8_t kSanyoAcPowerOff = 0b01
-
- -

Off.

- -
-
- -

◆ kSanyoAcPowerOn

- -
-
- - - - -
const uint8_t kSanyoAcPowerOn = 0b10
-
- -

On.

- -
-
- -

◆ kSanyoAcSwingVAuto

- -
-
- - - - -
const uint8_t kSanyoAcSwingVAuto = 0
-
- -

0b000

- -
-
- -

◆ kSanyoAcSwingVHigh

- -
-
- - - - -
const uint8_t kSanyoAcSwingVHigh = 6
-
- -

0b110

- -
-
- -

◆ kSanyoAcSwingVHighest

- -
-
- - - - -
const uint8_t kSanyoAcSwingVHighest = 7
-
- -

0b111

- -
-
- -

◆ kSanyoAcSwingVLow

- -
-
- - - - -
const uint8_t kSanyoAcSwingVLow = 3
-
- -

0b011

- -
-
- -

◆ kSanyoAcSwingVLowerMiddle

- -
-
- - - - -
const uint8_t kSanyoAcSwingVLowerMiddle = 4
-
- -

0b100

- -
-
- -

◆ kSanyoAcSwingVLowest

- -
-
- - - - -
const uint8_t kSanyoAcSwingVLowest = 2
-
- -

0b010

- -
-
- -

◆ kSanyoAcSwingVUpperMiddle

- -
-
- - - - -
const uint8_t kSanyoAcSwingVUpperMiddle = 5
-
- -

0b101

- -
-
- -

◆ kSanyoAcTempDelta

- -
-
- - - - -
const uint8_t kSanyoAcTempDelta = 4
-
- -

Celsius to Native Temp difference.

- -
-
- -

◆ kSanyoAcTempMax

- -
-
- - - - -
const uint8_t kSanyoAcTempMax = 30
-
- -

Celsius.

- -
-
- -

◆ kSanyoAcTempMin

- -
-
- - - - -
const uint8_t kSanyoAcTempMin = 16
-
- -

Celsius.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h_source.html deleted file mode 100644 index ac5a04982..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sanyo_8h_source.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sanyo.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Sanyo.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 David Conran
-
2 
-
14 
-
15 // Supports:
-
16 // Brand: Sanyo, Model: SA 8650B - disabled
-
17 // Brand: Sanyo, Model: LC7461 transmitter IC (SANYO_LC7461)
-
18 // Brand: Sanyo, Model: SAP-K121AHA A/C (SANYO_AC)
-
19 // Brand: Sanyo, Model: RCS-2HS4E remote (SANYO_AC)
-
20 // Brand: Sanyo, Model: SAP-K242AH A/C (SANYO_AC)
-
21 // Brand: Sanyo, Model: RCS-2S4E remote (SANYO_AC)
-
22 
-
23 #ifndef IR_SANYO_H_
-
24 #define IR_SANYO_H_
-
25 
-
26 #define __STDC_LIMIT_MACROS
-
27 #include <stdint.h>
-
28 #ifdef ARDUINO
-
29 #include <Arduino.h>
-
30 #endif
-
31 #include "IRremoteESP8266.h"
-
32 #include "IRsend.h"
-
33 #ifdef UNIT_TEST
-
34 #include "IRsend_test.h"
-
35 #endif
-
36 
- - -
40  // Ref: https://docs.google.com/spreadsheets/d/1dYfLsnYvpjV-SgO8pdinpfuBIpSzm8Q1R5SabrLeskw/edit?usp=sharing
-
41  struct {
-
42  // Byte 0
-
43  uint8_t :8; // 0x6A (Fixed?)
-
44  // Byte 1
-
45  uint8_t Temp :5;
-
46  uint8_t :3;
-
47  // Byte 2
-
48  uint8_t SensorTemp :5;
-
49  uint8_t Sensor :1;
-
50  uint8_t Beep :1;
-
51  uint8_t :1;
-
52  // Byte 3
-
53  uint8_t OffHour :4;
-
54  uint8_t :4;
-
55  // Byte 4
-
56  uint8_t Fan :2;
-
57  uint8_t OffTimer :1;
-
58  uint8_t :1;
-
59  uint8_t Mode :3;
-
60  uint8_t :1;
-
61  // Byte 5
-
62  uint8_t SwingV :3;
-
63  uint8_t :3;
-
64  uint8_t Power :2;
-
65  // Byte 6
-
66  uint8_t :3;
-
67  uint8_t Sleep :1;
-
68  uint8_t :4;
-
69  // Byte 7
-
70  uint8_t :8;
-
71  // Byte 8
-
72  uint8_t Sum :8;
-
73  };
-
74 };
-
75 
-
76 // Constants
-
77 
-
78 const uint8_t kSanyoAcTempMin = 16;
-
79 const uint8_t kSanyoAcTempMax = 30;
-
80 const uint8_t kSanyoAcTempDelta = 4;
-
81 
-
82 const uint8_t kSanyoAcHourMax = 15;
-
83 
-
84 const uint8_t kSanyoAcHeat = 1;
-
85 const uint8_t kSanyoAcCool = 2;
-
86 const uint8_t kSanyoAcDry = 3;
-
87 const uint8_t kSanyoAcAuto = 4;
-
88 const uint8_t kSanyoAcFanAuto = 0;
-
89 const uint8_t kSanyoAcFanHigh = 1;
-
90 const uint8_t kSanyoAcFanLow = 2;
-
91 const uint8_t kSanyoAcFanMedium = 3;
-
92 
-
93 // const uint8_t kSanyoAcPowerStandby = 0b00; ///< Standby?
-
94 const uint8_t kSanyoAcPowerOff = 0b01;
-
95 const uint8_t kSanyoAcPowerOn = 0b10;
-
96 const uint8_t kSanyoAcSwingVAuto = 0;
-
97 const uint8_t kSanyoAcSwingVLowest = 2;
-
98 const uint8_t kSanyoAcSwingVLow = 3;
-
99 const uint8_t kSanyoAcSwingVLowerMiddle = 4;
-
100 const uint8_t kSanyoAcSwingVUpperMiddle = 5;
-
101 const uint8_t kSanyoAcSwingVHigh = 6;
-
102 const uint8_t kSanyoAcSwingVHighest = 7;
-
103 
-
104 // Classes
-
106 class IRSanyoAc {
-
107  public:
-
108  explicit IRSanyoAc(const uint16_t pin, const bool inverted = false,
-
109  const bool use_modulation = true);
-
110  void stateReset(void);
-
111 #if SEND_SANYO_AC
-
112  void send(const uint16_t repeat = kNoRepeat);
-
117  int8_t calibrate(void) { return _irsend.calibrate(); }
-
118 #endif // SEND_SANYO_AC
-
119  void begin(void);
-
120  void on(void);
-
121  void off(void);
-
122  void setPower(const bool on);
-
123  bool getPower(void) const;
-
124  void setTemp(const uint8_t degrees);
-
125  uint8_t getTemp(void) const;
-
126  void setSensorTemp(const uint8_t degrees);
-
127  uint8_t getSensorTemp(void) const;
-
128  void setFan(const uint8_t speed);
-
129  uint8_t getFan(void) const;
-
130  void setMode(const uint8_t mode);
-
131  uint8_t getMode(void) const;
-
132  void setSleep(const bool on);
-
133  bool getSleep(void) const;
-
134  void setSensor(const bool location);
-
135  bool getSensor(void) const;
-
136  void setBeep(const bool on);
-
137  bool getBeep(void) const;
-
138  void setSwingV(const uint8_t setting);
-
139  uint8_t getSwingV(void) const;
-
140  void setRaw(const uint8_t newState[]);
-
141  uint8_t* getRaw(void);
-
142  uint16_t getOffTimer(void) const;
-
143  void setOffTimer(const uint16_t mins);
-
144  static bool validChecksum(const uint8_t state[],
-
145  const uint16_t length = kSanyoAcStateLength);
-
146  static uint8_t convertMode(const stdAc::opmode_t mode);
-
147  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
148  static uint8_t convertSwingV(const stdAc::swingv_t position);
-
149  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
150  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
151  static stdAc::swingv_t toCommonSwingV(const uint8_t setting);
-
152  stdAc::state_t toCommon(void) const;
-
153  String toString(void) const;
-
154 #ifndef UNIT_TEST
-
155 
-
156  private:
- -
158 #else // UNIT_TEST
-
159  IRsendTest _irsend;
-
161 #endif // UNIT_TEST
- -
164  void checksum(void);
-
165  static uint8_t calcChecksum(const uint8_t state[],
-
166  const uint16_t length = kSanyoAcStateLength);
-
167 };
-
168 
-
169 #endif // IR_SANYO_H_
-
-
uint8_t Sleep
Definition: ir_Sanyo.h:67
-
SanyoProtocol _
Definition: ir_Sanyo.h:163
-
const uint8_t kSanyoAcTempDelta
Celsius to Native Temp difference.
Definition: ir_Sanyo.h:80
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
uint8_t getSensorTemp(void) const
Get the current sensor temperature setting.
Definition: ir_Sanyo.cpp:452
-
uint8_t Fan
Definition: ir_Sanyo.h:56
-
uint8_t Beep
Definition: ir_Sanyo.h:50
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
static uint8_t convertSwingV(const stdAc::swingv_t position)
Convert a stdAc::swingv_t enum into it's native setting.
Definition: ir_Sanyo.cpp:513
-
const uint8_t kSanyoAcHourMax
0b1111
Definition: ir_Sanyo.h:82
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kSanyoAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Sanyo.cpp:345
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Sanyo.cpp:385
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Sanyo.cpp:379
-
const uint8_t kSanyoAcCool
0b010
Definition: ir_Sanyo.h:85
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Sanyo.h:157
- -
void setPower(const bool on)
Change the power setting.
Definition: ir_Sanyo.cpp:373
-
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as IR messages.
Definition: ir_Sanyo.cpp:322
-
const uint8_t kSanyoAcDry
0b011
Definition: ir_Sanyo.h:86
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Sanyo.cpp:392
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Sanyo.cpp:464
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kSanyoAcSwingVHigh
0b110
Definition: ir_Sanyo.h:101
-
Class for handling detailed Sanyo A/C messages.
Definition: ir_Sanyo.h:106
-
bool getSleep(void) const
Get the Sleep (Night Setback) setting of the A/C.
Definition: ir_Sanyo.cpp:547
-
const uint8_t kSanyoAcPowerOff
Off.
Definition: ir_Sanyo.h:94
-
void setSensor(const bool location)
Set the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured.
Definition: ir_Sanyo.cpp:554
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kSanyoAcFanAuto
0b00
Definition: ir_Sanyo.h:88
-
bool getSensor(void) const
Get the Sensor Location setting of the A/C. i.e. Where the ambient temperature is measured.
Definition: ir_Sanyo.cpp:561
-
void setTemp(const uint8_t degrees)
Set the desired temperature.
Definition: ir_Sanyo.cpp:430
-
uint8_t OffTimer
Definition: ir_Sanyo.h:57
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Sanyo.h:117
-
const uint8_t kSanyoAcSwingVHighest
0b111
Definition: ir_Sanyo.h:102
- -
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Sanyo.cpp:626
-
const uint8_t kSanyoAcSwingVAuto
0b000
Definition: ir_Sanyo.h:96
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
const uint8_t kSanyoAcTempMin
Celsius.
Definition: ir_Sanyo.h:78
-
const uint8_t kSanyoAcFanHigh
0b01
Definition: ir_Sanyo.h:89
-
const uint8_t kSanyoAcSwingVLow
0b011
Definition: ir_Sanyo.h:98
-
IRSanyoAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Sanyo.cpp:304
-
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Sanyo.cpp:359
-
const uint8_t kSanyoAcAuto
0b100
Definition: ir_Sanyo.h:87
-
uint16_t getOffTimer(void) const
Get the nr of minutes the Off Timer is set to.
Definition: ir_Sanyo.cpp:581
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Sanyo.cpp:600
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Sanyo.cpp:407
-
uint8_t raw[kSanyoAcStateLength]
The state in IR code form.
Definition: ir_Sanyo.h:39
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Sanyo.cpp:317
-
uint8_t OffHour
Definition: ir_Sanyo.h:53
-
const uint8_t kSanyoAcHeat
0b001
Definition: ir_Sanyo.h:84
-
void setSwingV(const uint8_t setting)
Set the vertical swing setting of the A/C.
Definition: ir_Sanyo.cpp:502
-
uint8_t SensorTemp
Definition: ir_Sanyo.h:48
-
static stdAc::swingv_t toCommonSwingV(const uint8_t setting)
Convert a native vertical swing postion to it's common equivalent.
Definition: ir_Sanyo.cpp:527
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Sanyo.cpp:471
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Sanyo.cpp:419
-
const uint8_t kSanyoAcSwingVUpperMiddle
0b101
Definition: ir_Sanyo.h:100
-
uint8_t Mode
Definition: ir_Sanyo.h:59
-
Native representation of a Sanyo A/C message.
Definition: ir_Sanyo.h:38
-
uint8_t getTemp(void) const
Get the current desired temperature setting.
Definition: ir_Sanyo.cpp:438
-
uint8_t getSwingV(void) const
Get the vertical swing setting of the A/C.
Definition: ir_Sanyo.cpp:496
-
const uint8_t kSanyoAcFanMedium
0b11
Definition: ir_Sanyo.h:91
-
void setSleep(const bool on)
Set the Sleep (Night Setback) setting of the A/C.
Definition: ir_Sanyo.cpp:541
-
uint8_t Temp
Definition: ir_Sanyo.h:45
-
const uint8_t kSanyoAcPowerOn
On.
Definition: ir_Sanyo.h:95
-
const uint8_t kSanyoAcTempMax
Celsius.
Definition: ir_Sanyo.h:79
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Sanyo.cpp:458
-
const uint8_t kSanyoAcFanLow
0b10
Definition: ir_Sanyo.h:90
-
const uint8_t kSanyoAcSwingVLowest
0b010
Definition: ir_Sanyo.h:97
-
uint8_t Power
Definition: ir_Sanyo.h:64
-
const uint8_t kSanyoAcSwingVLowerMiddle
0b100
Definition: ir_Sanyo.h:99
-
void setBeep(const bool on)
Set the Beep setting of the A/C.
Definition: ir_Sanyo.cpp:567
-
const uint16_t kSanyoAcStateLength
Definition: IRremoteESP8266.h:1083
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol with all integrity checks passing.
Definition: ir_Sanyo.cpp:330
-
void setSensorTemp(const uint8_t degrees)
Set the sensor temperature.
Definition: ir_Sanyo.cpp:444
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Sanyo.cpp:310
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Sanyo.cpp:366
-
uint8_t Sum
Definition: ir_Sanyo.h:72
-
void setRaw(const uint8_t newState[])
Set the internal state from a valid code for this protocol.
Definition: ir_Sanyo.cpp:337
-
void setOffTimer(const uint16_t mins)
Set the nr of minutes for the Off Timer.
Definition: ir_Sanyo.cpp:592
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kSanyoAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Sanyo.cpp:354
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t Sensor
Sensor location (0 = remote, 1 = A/C)
Definition: ir_Sanyo.h:49
-
bool getBeep(void) const
Get the Beep setting of the A/C.
Definition: ir_Sanyo.cpp:573
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Sanyo.cpp:485
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Sanyo.cpp:369
-
uint8_t SwingV
Definition: ir_Sanyo.h:62
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8cpp.html deleted file mode 100644 index a0fb7c138..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8cpp.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sharp.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Sharp.cpp File Reference
-
-
- -

Support for Sharp protocols. -More...

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

-Variables

const uint16_t kSharpTick = 26
 
const uint16_t kSharpBitMarkTicks = 10
 
const uint16_t kSharpBitMark = kSharpBitMarkTicks * kSharpTick
 
const uint16_t kSharpOneSpaceTicks = 70
 
const uint16_t kSharpOneSpace = kSharpOneSpaceTicks * kSharpTick
 
const uint16_t kSharpZeroSpaceTicks = 30
 
const uint16_t kSharpZeroSpace = kSharpZeroSpaceTicks * kSharpTick
 
const uint16_t kSharpGapTicks = 1677
 
const uint16_t kSharpGap = kSharpGapTicks * kSharpTick
 
const uint64_t kSharpToggleMask
 
const uint64_t kSharpAddressMask = ((uint64_t)1 << kSharpAddressBits) - 1
 
const uint64_t kSharpCommandMask = ((uint64_t)1 << kSharpCommandBits) - 1
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSharpAddressMask

- -
-
- - - - -
const uint64_t kSharpAddressMask = ((uint64_t)1 << kSharpAddressBits) - 1
-
- -
-
- -

◆ kSharpBitMark

- -
-
- - - - -
const uint16_t kSharpBitMark = kSharpBitMarkTicks * kSharpTick
-
- -
-
- -

◆ kSharpBitMarkTicks

- -
-
- - - - -
const uint16_t kSharpBitMarkTicks = 10
-
- -
-
- -

◆ kSharpCommandMask

- -
-
- - - - -
const uint64_t kSharpCommandMask = ((uint64_t)1 << kSharpCommandBits) - 1
-
- -
-
- -

◆ kSharpGap

- -
-
- - - - -
const uint16_t kSharpGap = kSharpGapTicks * kSharpTick
-
- -
-
- -

◆ kSharpGapTicks

- -
-
- - - - -
const uint16_t kSharpGapTicks = 1677
-
- -
-
- -

◆ kSharpOneSpace

- -
-
- - - - -
const uint16_t kSharpOneSpace = kSharpOneSpaceTicks * kSharpTick
-
- -
-
- -

◆ kSharpOneSpaceTicks

- -
-
- - - - -
const uint16_t kSharpOneSpaceTicks = 70
-
- -
-
- -

◆ kSharpTick

- -
-
- - - - -
const uint16_t kSharpTick = 26
-
- -
-
- -

◆ kSharpToggleMask

- -
-
- - - - -
const uint64_t kSharpToggleMask
-
-Initial value:
=
-
((uint64_t)1 << (kSharpBits - kSharpAddressBits)) - 1
-
-
-
- -

◆ kSharpZeroSpace

- -
-
- - - - -
const uint16_t kSharpZeroSpace = kSharpZeroSpaceTicks * kSharpTick
-
- -
-
- -

◆ kSharpZeroSpaceTicks

- -
-
- - - - -
const uint16_t kSharpZeroSpaceTicks = 30
-
- -
-
-
-
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1092
-
const uint8_t kSharpAddressBits
Definition: IRremoteESP8266.h:1090
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h.html deleted file mode 100644 index 50886cbca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h.html +++ /dev/null @@ -1,793 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sharp.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Sharp.h File Reference
-
-
- -

Support for Sharp protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  SharpProtocol
 Native representation of a Sharp A/C message. More...
 
class  IRSharpAc
 Class for handling detailed Sharp A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kSharpAcHdrMark = 3800
 
const uint16_t kSharpAcHdrSpace = 1900
 
const uint16_t kSharpAcBitMark = 470
 
const uint16_t kSharpAcZeroSpace = 500
 
const uint16_t kSharpAcOneSpace = 1400
 
const uint32_t kSharpAcGap = kDefaultMessageGap
 
const uint8_t kSharpAcByteTemp = 4
 
const uint8_t kSharpAcMinTemp = 15
 
const uint8_t kSharpAcMaxTemp = 30
 
const uint8_t kSharpAcPowerUnknown = 0
 
const uint8_t kSharpAcPowerOnFromOff = 1
 
const uint8_t kSharpAcPowerOff = 2
 
const uint8_t kSharpAcPowerOn = 3
 
const uint8_t kSharpAcPowerSetSpecialOn = 6
 
const uint8_t kSharpAcPowerSetSpecialOff = 7
 
const uint8_t kSharpAcPowerTimerSetting = 8
 
const uint8_t kSharpAcAuto = 0b00
 
const uint8_t kSharpAcFan = 0b00
 
const uint8_t kSharpAcDry = 0b11
 
const uint8_t kSharpAcCool = 0b10
 
const uint8_t kSharpAcHeat = 0b01
 
const uint8_t kSharpAcFanAuto = 0b010
 
const uint8_t kSharpAcFanMin = 0b100
 
const uint8_t kSharpAcFanMed = 0b011
 
const uint8_t kSharpAcFanA705Low = 0b011
 
const uint8_t kSharpAcFanHigh = 0b101
 
const uint8_t kSharpAcFanA705Med = 0b101
 
const uint8_t kSharpAcFanMax = 0b111
 
const uint8_t kSharpAcTimerIncrement = 30
 
const uint8_t kSharpAcTimerHoursOff = 0b0000
 
const uint8_t kSharpAcTimerHoursMax = 0b1100
 
const uint8_t kSharpAcOffTimerType = 0b0
 
const uint8_t kSharpAcOnTimerType = 0b1
 
const uint8_t kSharpAcSwingToggle = 0b111
 
const uint8_t kSharpAcSwingNoToggle = 0b000
 
const uint8_t kSharpAcSpecialPower = 0x00
 
const uint8_t kSharpAcSpecialTurbo = 0x01
 
const uint8_t kSharpAcSpecialTempEcono = 0x04
 
const uint8_t kSharpAcSpecialFan = 0x05
 
const uint8_t kSharpAcSpecialSwing = 0x06
 
const uint8_t kSharpAcSpecialTimer = 0xC0
 
const uint8_t kSharpAcSpecialTimerHalfHour = 0xDE
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSharpAcAuto

- -
-
- - - - -
const uint8_t kSharpAcAuto = 0b00
-
- -
-
- -

◆ kSharpAcBitMark

- -
-
- - - - -
const uint16_t kSharpAcBitMark = 470
-
- -
-
- -

◆ kSharpAcByteTemp

- -
-
- - - - -
const uint8_t kSharpAcByteTemp = 4
-
- -
-
- -

◆ kSharpAcCool

- -
-
- - - - -
const uint8_t kSharpAcCool = 0b10
-
- -
-
- -

◆ kSharpAcDry

- -
-
- - - - -
const uint8_t kSharpAcDry = 0b11
-
- -
-
- -

◆ kSharpAcFan

- -
-
- - - - -
const uint8_t kSharpAcFan = 0b00
-
- -
-
- -

◆ kSharpAcFanA705Low

- -
-
- - - - -
const uint8_t kSharpAcFanA705Low = 0b011
-
- -
-
- -

◆ kSharpAcFanA705Med

- -
-
- - - - -
const uint8_t kSharpAcFanA705Med = 0b101
-
- -
-
- -

◆ kSharpAcFanAuto

- -
-
- - - - -
const uint8_t kSharpAcFanAuto = 0b010
-
- -
-
- -

◆ kSharpAcFanHigh

- -
-
- - - - -
const uint8_t kSharpAcFanHigh = 0b101
-
- -
-
- -

◆ kSharpAcFanMax

- -
-
- - - - -
const uint8_t kSharpAcFanMax = 0b111
-
- -
-
- -

◆ kSharpAcFanMed

- -
-
- - - - -
const uint8_t kSharpAcFanMed = 0b011
-
- -
-
- -

◆ kSharpAcFanMin

- -
-
- - - - -
const uint8_t kSharpAcFanMin = 0b100
-
- -
-
- -

◆ kSharpAcGap

- -
-
- - - - -
const uint32_t kSharpAcGap = kDefaultMessageGap
-
- -
-
- -

◆ kSharpAcHdrMark

- -
-
- - - - -
const uint16_t kSharpAcHdrMark = 3800
-
- -
-
- -

◆ kSharpAcHdrSpace

- -
-
- - - - -
const uint16_t kSharpAcHdrSpace = 1900
-
- -
-
- -

◆ kSharpAcHeat

- -
-
- - - - -
const uint8_t kSharpAcHeat = 0b01
-
- -
-
- -

◆ kSharpAcMaxTemp

- -
-
- - - - -
const uint8_t kSharpAcMaxTemp = 30
-
- -
-
- -

◆ kSharpAcMinTemp

- -
-
- - - - -
const uint8_t kSharpAcMinTemp = 15
-
- -
-
- -

◆ kSharpAcOffTimerType

- -
-
- - - - -
const uint8_t kSharpAcOffTimerType = 0b0
-
- -
-
- -

◆ kSharpAcOneSpace

- -
-
- - - - -
const uint16_t kSharpAcOneSpace = 1400
-
- -
-
- -

◆ kSharpAcOnTimerType

- -
-
- - - - -
const uint8_t kSharpAcOnTimerType = 0b1
-
- -
-
- -

◆ kSharpAcPowerOff

- -
-
- - - - -
const uint8_t kSharpAcPowerOff = 2
-
- -
-
- -

◆ kSharpAcPowerOn

- -
-
- - - - -
const uint8_t kSharpAcPowerOn = 3
-
- -
-
- -

◆ kSharpAcPowerOnFromOff

- -
-
- - - - -
const uint8_t kSharpAcPowerOnFromOff = 1
-
- -
-
- -

◆ kSharpAcPowerSetSpecialOff

- -
-
- - - - -
const uint8_t kSharpAcPowerSetSpecialOff = 7
-
- -
-
- -

◆ kSharpAcPowerSetSpecialOn

- -
-
- - - - -
const uint8_t kSharpAcPowerSetSpecialOn = 6
-
- -
-
- -

◆ kSharpAcPowerTimerSetting

- -
-
- - - - -
const uint8_t kSharpAcPowerTimerSetting = 8
-
- -
-
- -

◆ kSharpAcPowerUnknown

- -
-
- - - - -
const uint8_t kSharpAcPowerUnknown = 0
-
- -
-
- -

◆ kSharpAcSpecialFan

- -
-
- - - - -
const uint8_t kSharpAcSpecialFan = 0x05
-
- -
-
- -

◆ kSharpAcSpecialPower

- -
-
- - - - -
const uint8_t kSharpAcSpecialPower = 0x00
-
- -
-
- -

◆ kSharpAcSpecialSwing

- -
-
- - - - -
const uint8_t kSharpAcSpecialSwing = 0x06
-
- -
-
- -

◆ kSharpAcSpecialTempEcono

- -
-
- - - - -
const uint8_t kSharpAcSpecialTempEcono = 0x04
-
- -
-
- -

◆ kSharpAcSpecialTimer

- -
-
- - - - -
const uint8_t kSharpAcSpecialTimer = 0xC0
-
- -
-
- -

◆ kSharpAcSpecialTimerHalfHour

- -
-
- - - - -
const uint8_t kSharpAcSpecialTimerHalfHour = 0xDE
-
- -
-
- -

◆ kSharpAcSpecialTurbo

- -
-
- - - - -
const uint8_t kSharpAcSpecialTurbo = 0x01
-
- -
-
- -

◆ kSharpAcSwingNoToggle

- -
-
- - - - -
const uint8_t kSharpAcSwingNoToggle = 0b000
-
- -
-
- -

◆ kSharpAcSwingToggle

- -
-
- - - - -
const uint8_t kSharpAcSwingToggle = 0b111
-
- -
-
- -

◆ kSharpAcTimerHoursMax

- -
-
- - - - -
const uint8_t kSharpAcTimerHoursMax = 0b1100
-
- -
-
- -

◆ kSharpAcTimerHoursOff

- -
-
- - - - -
const uint8_t kSharpAcTimerHoursOff = 0b0000
-
- -
-
- -

◆ kSharpAcTimerIncrement

- -
-
- - - - -
const uint8_t kSharpAcTimerIncrement = 30
-
- -
-
- -

◆ kSharpAcZeroSpace

- -
-
- - - - -
const uint16_t kSharpAcZeroSpace = 500
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h_source.html deleted file mode 100644 index eb6a238ef..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sharp_8h_source.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sharp.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Sharp.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 crankyoldgit
-
2 
-
14 
-
15 // Supports:
-
16 // Brand: Sharp, Model: LC-52D62U TV
-
17 // Brand: Sharp, Model: AY-ZP40KR A/C (A907)
-
18 // Brand: Sharp, Model: AH-AxSAY A/C (A907)
-
19 // Brand: Sharp, Model: CRMC-A907 JBEZ remote (A907)
-
20 // Brand: Sharp, Model: AH-PR13-GL A/C (A903)
-
21 // Brand: Sharp, Model: CRMC-A903JBEZ remote (A903)
-
22 // Brand: Sharp, Model: AH-XP10NRY A/C (A903)
-
23 // Brand: Sharp, Model: CRMC-820 JBEZ remote (A903)
-
24 // Brand: Sharp, Model: CRMC-A705 JBEZ remote (A705)
-
25 // Brand: Sharp, Model: AH-A12REVP-1 A/C (A903)
-
26 // Brand: Sharp, Model: CRMC-A863 JBEZ remote (A903)
-
27 
-
28 #ifndef IR_SHARP_H_
-
29 #define IR_SHARP_H_
-
30 
-
31 #ifndef UNIT_TEST
-
32 #include <Arduino.h>
-
33 #endif
-
34 #include "IRrecv.h"
-
35 #include "IRremoteESP8266.h"
-
36 #include "IRsend.h"
-
37 #ifdef UNIT_TEST
-
38 #include "IRsend_test.h"
-
39 #endif
-
40 #include "IRutils.h"
-
41 
- - -
45  struct {
-
46  // Byte 0~3
-
47  uint8_t pad[4];
-
48  // Byte 4
-
49  uint8_t Temp :4;
-
50  uint8_t Model :1;
-
51  uint8_t :3;
-
52  // Byte 5
-
53  uint8_t :4;
-
54  uint8_t PowerSpecial :4;
-
55  // Byte 6
-
56  uint8_t Mode :2;
-
57  uint8_t :1;
-
58  uint8_t Clean :1;
-
59  uint8_t Fan :3;
-
60  uint8_t :1;
-
61  // Byte 7
-
62  uint8_t TimerHours :4;
-
63  uint8_t :2;
-
64  uint8_t TimerType :1;
-
65  uint8_t TimerEnabled:1;
-
66  // Byte 8
-
67  uint8_t Swing :3;
-
68  uint8_t :5;
-
69  // Byte 9
-
70  uint8_t :8;
-
71  // Byte 10
-
72  uint8_t Special :8;
-
73  // Byte 11
-
74  uint8_t :2;
-
75  uint8_t Ion :1;
-
76  uint8_t :1;
-
77  uint8_t Model2 :1;
-
78  uint8_t :3;
-
79  // Byte 12
-
80  uint8_t :4;
-
81  uint8_t Sum :4;
-
82  };
-
83 };
-
84 
-
85 // Constants
-
86 const uint16_t kSharpAcHdrMark = 3800;
-
87 const uint16_t kSharpAcHdrSpace = 1900;
-
88 const uint16_t kSharpAcBitMark = 470;
-
89 const uint16_t kSharpAcZeroSpace = 500;
-
90 const uint16_t kSharpAcOneSpace = 1400;
- -
92 
-
93 const uint8_t kSharpAcByteTemp = 4;
-
94 const uint8_t kSharpAcMinTemp = 15; // Celsius
-
95 const uint8_t kSharpAcMaxTemp = 30; // Celsius
-
96 
-
97 const uint8_t kSharpAcPowerUnknown = 0; // 0b0000
-
98 const uint8_t kSharpAcPowerOnFromOff = 1; // 0b0001
-
99 const uint8_t kSharpAcPowerOff = 2; // 0b0010
-
100 const uint8_t kSharpAcPowerOn = 3; // 0b0011 (Normal)
-
101 const uint8_t kSharpAcPowerSetSpecialOn = 6; // 0b0110
-
102 const uint8_t kSharpAcPowerSetSpecialOff = 7; // 0b0111
-
103 const uint8_t kSharpAcPowerTimerSetting = 8; // 0b1000
-
104 
-
105 const uint8_t kSharpAcAuto = 0b00; // A907 only
-
106 const uint8_t kSharpAcFan = 0b00; // A705 only
-
107 const uint8_t kSharpAcDry = 0b11;
-
108 const uint8_t kSharpAcCool = 0b10;
-
109 const uint8_t kSharpAcHeat = 0b01; // A907 only
-
110 const uint8_t kSharpAcFanAuto = 0b010; // 2
-
111 const uint8_t kSharpAcFanMin = 0b100; // 4 (FAN1)
-
112 const uint8_t kSharpAcFanMed = 0b011; // 3 (FAN2)
-
113 const uint8_t kSharpAcFanA705Low = 0b011; // 3 (A903 too)
-
114 const uint8_t kSharpAcFanHigh = 0b101; // 5 (FAN3)
-
115 const uint8_t kSharpAcFanA705Med = 0b101; // 5 (A903 too)
-
116 const uint8_t kSharpAcFanMax = 0b111; // 7 (FAN4)
-
117 
-
118 const uint8_t kSharpAcTimerIncrement = 30; // Mins
-
119 const uint8_t kSharpAcTimerHoursOff = 0b0000;
-
120 const uint8_t kSharpAcTimerHoursMax = 0b1100; // 12
-
121 const uint8_t kSharpAcOffTimerType = 0b0;
-
122 const uint8_t kSharpAcOnTimerType = 0b1;
-
123 
-
124 const uint8_t kSharpAcSwingToggle = 0b111;
-
125 const uint8_t kSharpAcSwingNoToggle = 0b000;
-
126 
-
127 const uint8_t kSharpAcSpecialPower = 0x00;
-
128 const uint8_t kSharpAcSpecialTurbo = 0x01;
-
129 const uint8_t kSharpAcSpecialTempEcono = 0x04;
-
130 const uint8_t kSharpAcSpecialFan = 0x05;
-
131 const uint8_t kSharpAcSpecialSwing = 0x06;
-
132 const uint8_t kSharpAcSpecialTimer = 0xC0;
-
133 const uint8_t kSharpAcSpecialTimerHalfHour = 0xDE;
-
134 
-
135 // Classes
-
137 class IRSharpAc {
-
138  public:
-
139  explicit IRSharpAc(const uint16_t pin, const bool inverted = false,
-
140  const bool use_modulation = true);
-
141 #if SEND_SHARP_AC
-
142  void send(const uint16_t repeat = kSharpAcDefaultRepeat);
-
147  int8_t calibrate(void) { return _irsend.calibrate(); }
-
148 #endif // SEND_SHARP_AC
-
149  void begin(void);
-
150  void setModel(const sharp_ac_remote_model_t model);
-
151  sharp_ac_remote_model_t getModel(const bool raw = false) const;
-
152  void on(void);
-
153  void off(void);
-
154  void setPower(const bool on, const bool prev_on = true);
-
155  bool getPower(void) const;
-
156  bool isPowerSpecial(void) const;
-
157  void setTemp(const uint8_t temp, const bool save = true);
-
158  uint8_t getTemp(void) const;
-
159  void setFan(const uint8_t fan, const bool save = true);
-
160  uint8_t getFan(void) const;
-
161  void setMode(const uint8_t mode, const bool save = true);
-
162  uint8_t getMode(void) const;
-
163  void setSpecial(const uint8_t mode);
-
164  uint8_t getSpecial(void) const;
-
165  bool getTurbo(void) const;
-
166  void setTurbo(const bool on);
-
167  bool getSwingToggle(void) const;
-
168  void setSwingToggle(const bool on);
-
169  bool getIon(void) const;
-
170  void setIon(const bool on);
-
171  bool getEconoToggle(void) const;
-
172  void setEconoToggle(const bool on);
-
173  bool getLightToggle(void) const;
-
174  void setLightToggle(const bool on);
-
175  uint16_t getTimerTime(void) const;
-
176  bool getTimerEnabled(void) const;
-
177  bool getTimerType(void) const;
-
178  void setTimer(bool enable, bool timer_type, uint16_t mins);
-
179  bool getClean(void) const;
-
180  void setClean(const bool on);
-
181  uint8_t* getRaw(void);
-
182  void setRaw(const uint8_t new_code[],
-
183  const uint16_t length = kSharpAcStateLength);
-
184  static bool validChecksum(uint8_t state[],
-
185  const uint16_t length = kSharpAcStateLength);
-
186  static uint8_t convertMode(const stdAc::opmode_t mode);
-
187  static uint8_t convertFan(const stdAc::fanspeed_t speed,
-
188  const sharp_ac_remote_model_t model =
- -
190  stdAc::opmode_t toCommonMode(const uint8_t mode) const;
-
191  stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed) const;
-
192  stdAc::state_t toCommon(void) const;
-
193  String toString(void) const;
-
194 #ifndef UNIT_TEST
-
195 
-
196  private:
- -
198 #else // UNIT_TEST
-
199  IRsendTest _irsend;
-
201 #endif // UNIT_TEST
- -
204  uint8_t _temp;
-
205  uint8_t _mode;
-
206  uint8_t _fan;
- -
208  void stateReset(void);
-
209  void checksum(void);
-
210  static uint8_t calcChecksum(uint8_t state[],
-
211  const uint16_t length = kSharpAcStateLength);
-
212  void setPowerSpecial(const uint8_t value);
-
213  uint8_t getPowerSpecial(void) const;
-
214  void clearPowerSpecial(void);
-
215  bool _getEconoToggle(void) const;
-
216  void _setEconoToggle(const bool on);
-
217 };
-
218 
-
219 #endif // IR_SHARP_H_
-
-
bool getEconoToggle(void) const
Get the Economical mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:602
-
const uint8_t kSharpAcHeat
Definition: ir_Sharp.h:109
-
const uint8_t kSharpAcSpecialTempEcono
Definition: ir_Sharp.h:129
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Sharp.h:147
-
bool getLightToggle(void) const
Get the Light toggle setting of the A/C.
Definition: ir_Sharp.cpp:617
-
void setTimer(bool enable, bool timer_type, uint16_t mins)
Set or cancel the timer function.
Definition: ir_Sharp.cpp:646
-
void setTemp(const uint8_t temp, const bool save=true)
Set the temperature.
Definition: ir_Sharp.cpp:426
-
const uint8_t kSharpAcPowerOnFromOff
Definition: ir_Sharp.h:98
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Sharp.cpp:378
-
const uint16_t kSharpAcOneSpace
Definition: ir_Sharp.h:90
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t _temp
Saved copy of the desired temp.
Definition: ir_Sharp.h:204
-
const uint32_t kDefaultMessageGap
Definition: IRsend.h:41
-
static uint8_t calcChecksum(uint8_t state[], const uint16_t length=kSharpAcStateLength)
Calculate the checksum for a given state.
Definition: ir_Sharp.cpp:262
-
const uint8_t kSharpAcFanA705Low
Definition: ir_Sharp.h:113
-
stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed) const
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Sharp.cpp:748
-
const uint8_t kSharpAcSpecialTimer
Definition: ir_Sharp.h:132
-
const uint8_t kSharpAcOnTimerType
Definition: ir_Sharp.h:122
-
const uint8_t kSharpAcCool
Definition: ir_Sharp.h:108
-
uint8_t Model2
Definition: ir_Sharp.h:77
- -
const uint8_t kSharpAcSpecialFan
Definition: ir_Sharp.h:130
-
const uint8_t kSharpAcSpecialSwing
Definition: ir_Sharp.h:131
-
bool getIon(void) const
Get the Ion (Filter) setting of the A/C.
Definition: ir_Sharp.cpp:562
-
const uint8_t kSharpAcOffTimerType
Definition: ir_Sharp.h:121
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
const uint8_t kSharpAcMaxTemp
Definition: ir_Sharp.h:95
-
void setFan(const uint8_t fan, const bool save=true)
Set the speed of the fan.
Definition: ir_Sharp.cpp:505
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
sharp_ac_remote_model_t _model
Saved copy of the model.
Definition: ir_Sharp.h:207
-
IRSharpAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Sharp.cpp:243
-
const uint16_t kSharpAcZeroSpace
Definition: ir_Sharp.h:89
-
void setPower(const bool on, const bool prev_on=true)
Change the power setting, including the previous power state.
Definition: ir_Sharp.cpp:383
-
const uint8_t kSharpAcDry
Definition: ir_Sharp.h:107
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kSharpAcTimerHoursMax
Definition: ir_Sharp.h:120
-
const uint8_t kSharpAcPowerOff
Definition: ir_Sharp.h:99
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Sharp.cpp:525
-
Native representation of a Sharp A/C message.
Definition: ir_Sharp.h:43
-
const uint8_t kSharpAcSwingNoToggle
Definition: ir_Sharp.h:125
-
const uint8_t kSharpAcTimerIncrement
Definition: ir_Sharp.h:118
- -
const uint8_t kSharpAcPowerSetSpecialOn
Definition: ir_Sharp.h:101
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Sharp.cpp:689
-
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Sharp.cpp:541
-
void setModel(const sharp_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Sharp.cpp:312
-
static bool validChecksum(uint8_t state[], const uint16_t length=kSharpAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Sharp.cpp:273
-
const uint8_t kSharpAcSpecialTimerHalfHour
Definition: ir_Sharp.h:133
-
const uint8_t kSharpAcTimerHoursOff
Definition: ir_Sharp.h:119
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Sharp.cpp:531
-
uint8_t Model
Definition: ir_Sharp.h:50
-
uint8_t Clean
Definition: ir_Sharp.h:58
-
uint8_t TimerType
Definition: ir_Sharp.h:64
-
const uint8_t kSharpAcSwingToggle
Definition: ir_Sharp.h:124
-
void setPowerSpecial(const uint8_t value)
Set the value of the Power Special setting without any checks.
Definition: ir_Sharp.cpp:347
-
const uint8_t kSharpAcFanAuto
Definition: ir_Sharp.h:110
-
uint8_t Ion
Definition: ir_Sharp.h:75
-
void send(const uint16_t repeat=kSharpAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Sharp.cpp:253
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Sharp.h:197
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Sharp.cpp:279
-
const uint32_t kSharpAcGap
Definition: ir_Sharp.h:91
-
bool isPowerSpecial(void) const
Is one of the special power states in use?
Definition: ir_Sharp.cpp:365
-
static uint8_t convertFan(const stdAc::fanspeed_t speed, const sharp_ac_remote_model_t model=sharp_ac_remote_model_t::A907)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Sharp.cpp:703
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Sharp.cpp:297
-
bool _getEconoToggle(void) const
Get the Economical mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:577
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Sharp.cpp:452
-
const uint8_t kSharpAcPowerUnknown
Definition: ir_Sharp.h:97
- -
const uint8_t kSharpAcPowerOn
Definition: ir_Sharp.h:100
-
uint8_t getPowerSpecial(void) const
Get the value of the Power Special setting.
Definition: ir_Sharp.cpp:353
-
void _setEconoToggle(const bool on)
Set the Economical mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:586
-
void setSpecial(const uint8_t mode)
Set the value of the Special (button/command?) setting.
Definition: ir_Sharp.cpp:403
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Sharp.cpp:248
-
const uint16_t kSharpAcStateLength
Definition: IRremoteESP8266.h:1093
-
const uint8_t kSharpAcFanMax
Definition: ir_Sharp.h:116
- -
uint8_t _mode
Saved copy of the desired mode.
Definition: ir_Sharp.h:205
-
uint8_t PowerSpecial
Definition: ir_Sharp.h:54
-
Class for handling detailed Sharp A/C messages.
Definition: ir_Sharp.h:137
-
uint8_t Sum
Definition: ir_Sharp.h:81
-
bool getClean(void) const
Get the Clean setting of the A/C.
Definition: ir_Sharp.cpp:665
-
uint8_t TimerEnabled
Definition: ir_Sharp.h:65
-
uint8_t Swing
Definition: ir_Sharp.h:67
-
uint8_t Special
Definition: ir_Sharp.h:72
-
const uint8_t kSharpAcPowerTimerSetting
Definition: ir_Sharp.h:103
-
const uint8_t kSharpAcFanHigh
Definition: ir_Sharp.h:114
-
const uint8_t kSharpAcFanMin
Definition: ir_Sharp.h:111
-
void setClean(const bool on)
Set the Economical mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:672
-
stdAc::opmode_t toCommonMode(const uint8_t mode) const
Convert a native mode into its stdAc equivalent.
Definition: ir_Sharp.cpp:730
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Sharp.cpp:458
-
const uint8_t kSharpAcFan
Definition: ir_Sharp.h:106
-
const uint8_t kSharpAcFanMed
Definition: ir_Sharp.h:112
-
const uint16_t kSharpAcDefaultRepeat
Definition: IRremoteESP8266.h:1095
-
sharp_ac_remote_model_t getModel(const bool raw=false) const
Get/Detect the model of the A/C.
Definition: ir_Sharp.cpp:331
-
uint8_t getSpecial(void) const
Get the value of the Special (button/command?) setting.
Definition: ir_Sharp.cpp:421
-
bool getTimerEnabled(void) const
Is the Timer enabled?
Definition: ir_Sharp.cpp:631
-
bool getTimerType(void) const
Get the current timer type.
Definition: ir_Sharp.cpp:637
-
const uint8_t kSharpAcFanA705Med
Definition: ir_Sharp.h:115
-
uint8_t _fan
Saved copy of the desired fan speed.
Definition: ir_Sharp.h:206
-
void setEconoToggle(const bool on)
Set the Economical mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:595
-
uint8_t Mode
Definition: ir_Sharp.h:56
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Sharp.cpp:770
-
uint8_t TimerHours
Definition: ir_Sharp.h:62
-
uint16_t getTimerTime(void) const
Get how long the timer is set for, in minutes.
Definition: ir_Sharp.cpp:623
-
const uint16_t kSharpAcHdrSpace
Definition: ir_Sharp.h:87
-
const uint8_t kSharpAcAuto
Definition: ir_Sharp.h:105
-
SharpProtocol _
Definition: ir_Sharp.h:203
-
void setLightToggle(const bool on)
Set the Light mode toggle setting of the A/C.
Definition: ir_Sharp.cpp:610
-
void setSwingToggle(const bool on)
Set the (vertical) Swing Toggle setting of the A/C.
Definition: ir_Sharp.cpp:555
-
uint8_t Fan
Definition: ir_Sharp.h:59
-
const uint8_t kSharpAcPowerSetSpecialOff
Definition: ir_Sharp.h:102
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Sharp.cpp:375
-
bool getSwingToggle(void) const
Get the (vertical) Swing Toggle setting of the A/C.
Definition: ir_Sharp.cpp:549
-
void setMode(const uint8_t mode, const bool save=true)
Set the operating mode of the A/C.
Definition: ir_Sharp.cpp:465
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Sharp.cpp:393
-
@ A907
Definition: IRsend.h:158
-
const uint16_t kSharpAcBitMark
Definition: ir_Sharp.h:88
-
uint8_t raw[kSharpAcStateLength]
State of the remote in IR code form.
Definition: ir_Sharp.h:44
-
const uint8_t kSharpAcMinTemp
Definition: ir_Sharp.h:94
-
uint8_t Temp
Definition: ir_Sharp.h:49
-
const uint8_t kSharpAcSpecialTurbo
Definition: ir_Sharp.h:128
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Sharp.cpp:284
-
const uint8_t kSharpAcByteTemp
Definition: ir_Sharp.h:93
-
void setIon(const bool on)
Set the Ion (Filter) setting of the A/C.
Definition: ir_Sharp.cpp:568
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void clearPowerSpecial(void)
Clear the "special"/non-normal bits in the power section. e.g. for normal/common command modes.
Definition: ir_Sharp.cpp:359
-
const uint16_t kSharpAcHdrMark
Definition: ir_Sharp.h:86
-
void setRaw(const uint8_t new_code[], const uint16_t length=kSharpAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Sharp.cpp:305
-
const uint8_t kSharpAcSpecialPower
Definition: ir_Sharp.h:127
-
uint8_t pad[4]
Definition: ir_Sharp.h:47
-
sharp_ac_remote_model_t
Sharp A/C model numbers.
Definition: IRsend.h:157
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Sharp.cpp:797
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sherwood_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sherwood_8cpp.html deleted file mode 100644 index a6b133aa1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sherwood_8cpp.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sherwood.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Sherwood.cpp File Reference
-
-
- -

Support for Sherwood protocols. -More...

-

Detailed Description

-

Support for Sherwood protocols.

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sony_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sony_8cpp.html deleted file mode 100644 index fa4943313..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Sony_8cpp.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Sony.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Sony.cpp File Reference
-
-
- -

Support for Sony SIRC(Serial Infra-Red Control) protocols. Sony originally added from https://github.com/shirriff/Arduino-IRremote/ Updates from marcosamarinho. -More...

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

-Variables

const uint16_t kSonyTick = 200
 
const uint16_t kSonyHdrMarkTicks = 12
 
const uint16_t kSonyHdrMark = kSonyHdrMarkTicks * kSonyTick
 
const uint16_t kSonySpaceTicks = 3
 
const uint16_t kSonySpace = kSonySpaceTicks * kSonyTick
 
const uint16_t kSonyOneMarkTicks = 6
 
const uint16_t kSonyOneMark = kSonyOneMarkTicks * kSonyTick
 
const uint16_t kSonyZeroMarkTicks = 3
 
const uint16_t kSonyZeroMark = kSonyZeroMarkTicks * kSonyTick
 
const uint16_t kSonyRptLengthTicks = 225
 
const uint16_t kSonyRptLength = kSonyRptLengthTicks * kSonyTick
 
const uint16_t kSonyMinGapTicks = 50
 
const uint16_t kSonyMinGap = kSonyMinGapTicks * kSonyTick
 
const uint16_t kSonyStdFreq = 40000
 
const uint16_t kSonyAltFreq = 38000
 
-

Detailed Description

-

Support for Sony SIRC(Serial Infra-Red Control) protocols. Sony originally added from https://github.com/shirriff/Arduino-IRremote/ Updates from marcosamarinho.

-
See also
http://www.sbprojects.net/knowledge/ir/sirc.php
-
-https://github.com/crankyoldgit/IRremoteESP8266/issues/1018
-

Variable Documentation

- -

◆ kSonyAltFreq

- -
-
- - - - -
const uint16_t kSonyAltFreq = 38000
-
- -
-
- -

◆ kSonyHdrMark

- -
-
- - - - -
const uint16_t kSonyHdrMark = kSonyHdrMarkTicks * kSonyTick
-
- -
-
- -

◆ kSonyHdrMarkTicks

- -
-
- - - - -
const uint16_t kSonyHdrMarkTicks = 12
-
- -
-
- -

◆ kSonyMinGap

- -
-
- - - - -
const uint16_t kSonyMinGap = kSonyMinGapTicks * kSonyTick
-
- -
-
- -

◆ kSonyMinGapTicks

- -
-
- - - - -
const uint16_t kSonyMinGapTicks = 50
-
- -
-
- -

◆ kSonyOneMark

- -
-
- - - - -
const uint16_t kSonyOneMark = kSonyOneMarkTicks * kSonyTick
-
- -
-
- -

◆ kSonyOneMarkTicks

- -
-
- - - - -
const uint16_t kSonyOneMarkTicks = 6
-
- -
-
- -

◆ kSonyRptLength

- -
-
- - - - -
const uint16_t kSonyRptLength = kSonyRptLengthTicks * kSonyTick
-
- -
-
- -

◆ kSonyRptLengthTicks

- -
-
- - - - -
const uint16_t kSonyRptLengthTicks = 225
-
- -
-
- -

◆ kSonySpace

- -
-
- - - - -
const uint16_t kSonySpace = kSonySpaceTicks * kSonyTick
-
- -
-
- -

◆ kSonySpaceTicks

- -
-
- - - - -
const uint16_t kSonySpaceTicks = 3
-
- -
-
- -

◆ kSonyStdFreq

- -
-
- - - - -
const uint16_t kSonyStdFreq = 40000
-
- -
-
- -

◆ kSonyTick

- -
-
- - - - -
const uint16_t kSonyTick = 200
-
- -
-
- -

◆ kSonyZeroMark

- -
-
- - - - -
const uint16_t kSonyZeroMark = kSonyZeroMarkTicks * kSonyTick
-
- -
-
- -

◆ kSonyZeroMarkTicks

- -
-
- - - - -
const uint16_t kSonyZeroMarkTicks = 3
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Symphony_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Symphony_8cpp.html deleted file mode 100644 index 9ad124022..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Symphony_8cpp.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Symphony.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Symphony.cpp File Reference
-
-
- -

Support for Symphony protocols. -More...

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

-Variables

const uint16_t kSymphonyZeroMark = 400
 
const uint16_t kSymphonyZeroSpace = 1250
 
const uint16_t kSymphonyOneMark = kSymphonyZeroSpace
 
const uint16_t kSymphonyOneSpace = kSymphonyZeroMark
 
const uint32_t kSymphonyFooterGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kSymphonyFooterGap

- -
-
- - - - -
const uint32_t kSymphonyFooterGap
-
-Initial value: -
-
- -

◆ kSymphonyOneMark

- -
-
- - - - -
const uint16_t kSymphonyOneMark = kSymphonyZeroSpace
-
- -
-
- -

◆ kSymphonyOneSpace

- -
-
- - - - -
const uint16_t kSymphonyOneSpace = kSymphonyZeroMark
-
- -
-
- -

◆ kSymphonyZeroMark

- -
-
- - - - -
const uint16_t kSymphonyZeroMark = 400
-
- -
-
- -

◆ kSymphonyZeroSpace

- -
-
- - - - -
const uint16_t kSymphonyZeroSpace = 1250
-
- -
-
-
-
const uint16_t kSymphonyZeroMark
Definition: ir_Symphony.cpp:29
-
const uint16_t kSymphonyZeroSpace
Definition: ir_Symphony.cpp:30
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8cpp.html deleted file mode 100644 index 722bb446c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8cpp.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Tcl.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Tcl.cpp File Reference
-
-
- -

Support for TCL protocols. -More...

-

Detailed Description

-

Support for TCL protocols.

-
Note
There is no decodedecodeTcl112Ac(). It's the same as decodeMitsubishi112(). A shared routine is used. You can find it in: ir_Mitsubishi.cpp
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h.html deleted file mode 100644 index 5229e6e46..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Tcl.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Tcl.h File Reference
-
-
- -

Support for TCL protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  Tcl112Protocol
 Native representation of a TCL 112 A/C message. More...
 
class  IRTcl112Ac
 Class for handling detailed TCL A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kTcl112AcHdrMark = 3000
 
const uint16_t kTcl112AcHdrSpace = 1650
 
const uint16_t kTcl112AcBitMark = 500
 
const uint16_t kTcl112AcOneSpace = 1050
 
const uint16_t kTcl112AcZeroSpace = 325
 
const uint32_t kTcl112AcGap = kDefaultMessageGap
 
const uint8_t kTcl112AcHdrMarkTolerance = 6
 
const uint8_t kTcl112AcTolerance = 5
 
const uint8_t kTcl112AcHeat = 1
 
const uint8_t kTcl112AcDry = 2
 
const uint8_t kTcl112AcCool = 3
 
const uint8_t kTcl112AcFan = 7
 
const uint8_t kTcl112AcAuto = 8
 
const uint8_t kTcl112AcFanAuto = 0b000
 
const uint8_t kTcl112AcFanLow = 0b010
 
const uint8_t kTcl112AcFanMed = 0b011
 
const uint8_t kTcl112AcFanHigh = 0b101
 
const float kTcl112AcTempMax = 31.0
 
const float kTcl112AcTempMin = 16.0
 
const uint8_t kTcl112AcSwingVOn = 0b111
 
const uint8_t kTcl112AcSwingVOff = 0b000
 
-

Detailed Description

-

Support for TCL protocols.

-

Variable Documentation

- -

◆ kTcl112AcAuto

- -
-
- - - - -
const uint8_t kTcl112AcAuto = 8
-
- -
-
- -

◆ kTcl112AcBitMark

- -
-
- - - - -
const uint16_t kTcl112AcBitMark = 500
-
- -
-
- -

◆ kTcl112AcCool

- -
-
- - - - -
const uint8_t kTcl112AcCool = 3
-
- -
-
- -

◆ kTcl112AcDry

- -
-
- - - - -
const uint8_t kTcl112AcDry = 2
-
- -
-
- -

◆ kTcl112AcFan

- -
-
- - - - -
const uint8_t kTcl112AcFan = 7
-
- -
-
- -

◆ kTcl112AcFanAuto

- -
-
- - - - -
const uint8_t kTcl112AcFanAuto = 0b000
-
- -
-
- -

◆ kTcl112AcFanHigh

- -
-
- - - - -
const uint8_t kTcl112AcFanHigh = 0b101
-
- -
-
- -

◆ kTcl112AcFanLow

- -
-
- - - - -
const uint8_t kTcl112AcFanLow = 0b010
-
- -
-
- -

◆ kTcl112AcFanMed

- -
-
- - - - -
const uint8_t kTcl112AcFanMed = 0b011
-
- -
-
- -

◆ kTcl112AcGap

- -
-
- - - - -
const uint32_t kTcl112AcGap = kDefaultMessageGap
-
- -
-
- -

◆ kTcl112AcHdrMark

- -
-
- - - - -
const uint16_t kTcl112AcHdrMark = 3000
-
- -
-
- -

◆ kTcl112AcHdrMarkTolerance

- -
-
- - - - -
const uint8_t kTcl112AcHdrMarkTolerance = 6
-
- -
-
- -

◆ kTcl112AcHdrSpace

- -
-
- - - - -
const uint16_t kTcl112AcHdrSpace = 1650
-
- -
-
- -

◆ kTcl112AcHeat

- -
-
- - - - -
const uint8_t kTcl112AcHeat = 1
-
- -
-
- -

◆ kTcl112AcOneSpace

- -
-
- - - - -
const uint16_t kTcl112AcOneSpace = 1050
-
- -
-
- -

◆ kTcl112AcSwingVOff

- -
-
- - - - -
const uint8_t kTcl112AcSwingVOff = 0b000
-
- -
-
- -

◆ kTcl112AcSwingVOn

- -
-
- - - - -
const uint8_t kTcl112AcSwingVOn = 0b111
-
- -
-
- -

◆ kTcl112AcTempMax

- -
-
- - - - -
const float kTcl112AcTempMax = 31.0
-
- -
-
- -

◆ kTcl112AcTempMin

- -
-
- - - - -
const float kTcl112AcTempMin = 16.0
-
- -
-
- -

◆ kTcl112AcTolerance

- -
-
- - - - -
const uint8_t kTcl112AcTolerance = 5
-
- -
-
- -

◆ kTcl112AcZeroSpace

- -
-
- - - - -
const uint16_t kTcl112AcZeroSpace = 325
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h_source.html deleted file mode 100644 index 86fcb61c4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Tcl_8h_source.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Tcl.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Tcl.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 David Conran
-
2 
-
5 
-
6 // Supports:
-
7 // Brand: Leberg, Model: LBS-TOR07 A/C
-
8 
-
9 #ifndef IR_TCL_H_
-
10 #define IR_TCL_H_
-
11 
-
12 #ifndef UNIT_TEST
-
13 #include <Arduino.h>
-
14 #endif
-
15 #include "IRremoteESP8266.h"
-
16 #include "IRsend.h"
-
17 #include "IRrecv.h"
-
18 #ifdef UNIT_TEST
-
19 #include "IRsend_test.h"
-
20 #endif
-
21 
- - -
25  struct {
-
26  // Byte 0~4
-
27  uint8_t pad0[5];
-
28  // Byte 5
-
29  uint8_t :2;
-
30  uint8_t Power :1;
-
31  uint8_t :3;
-
32  uint8_t Light :1;
-
33  uint8_t Econo :1;
-
34  // Byte 6
-
35  uint8_t Mode :4;
-
36  uint8_t Health :1;
-
37  uint8_t Turbo :1;
-
38  uint8_t :2;
-
39  // Byte 7
-
40  uint8_t Temp :4;
-
41  uint8_t :4;
-
42  // Byte 8
-
43  uint8_t Fan :3;
-
44  uint8_t SwingV :3;
-
45  uint8_t :2;
-
46  // Byte 9~11
-
47  uint8_t pad1[3];
-
48  // Byte 12
-
49  uint8_t :3;
-
50  uint8_t SwingH :1;
-
51  uint8_t :1;
-
52  uint8_t HalfDegree :1;
-
53  uint8_t :2;
-
54  // Byte 13
-
55  uint8_t Sum :8;
-
56  };
-
57 };
-
58 
-
59 // Constants
-
60 const uint16_t kTcl112AcHdrMark = 3000;
-
61 const uint16_t kTcl112AcHdrSpace = 1650;
-
62 const uint16_t kTcl112AcBitMark = 500;
-
63 const uint16_t kTcl112AcOneSpace = 1050;
-
64 const uint16_t kTcl112AcZeroSpace = 325;
-
65 const uint32_t kTcl112AcGap = kDefaultMessageGap; // Just a guess.
-
66 // Total tolerance percentage to use for matching the header mark.
-
67 const uint8_t kTcl112AcHdrMarkTolerance = 6;
-
68 const uint8_t kTcl112AcTolerance = 5; // Extra Percentage for the rest.
-
69 
-
70 const uint8_t kTcl112AcHeat = 1;
-
71 const uint8_t kTcl112AcDry = 2;
-
72 const uint8_t kTcl112AcCool = 3;
-
73 const uint8_t kTcl112AcFan = 7;
-
74 const uint8_t kTcl112AcAuto = 8;
-
75 
-
76 const uint8_t kTcl112AcFanAuto = 0b000;
-
77 const uint8_t kTcl112AcFanLow = 0b010;
-
78 const uint8_t kTcl112AcFanMed = 0b011;
-
79 const uint8_t kTcl112AcFanHigh = 0b101;
-
80 
-
81 const float kTcl112AcTempMax = 31.0;
-
82 const float kTcl112AcTempMin = 16.0;
-
83 
-
84 const uint8_t kTcl112AcSwingVOn = 0b111;
-
85 const uint8_t kTcl112AcSwingVOff = 0b000;
-
86 
-
87 // Classes
-
89 class IRTcl112Ac {
-
90  public:
-
91  explicit IRTcl112Ac(const uint16_t pin, const bool inverted = false,
-
92  const bool use_modulation = true);
-
93 #if SEND_TCL112AC
-
94  void send(const uint16_t repeat = kTcl112AcDefaultRepeat);
-
99  int8_t calibrate(void) { return _irsend.calibrate(); }
-
100 #endif // SEND_TCL
-
101  void begin(void);
-
102  void stateReset(void);
-
103  uint8_t* getRaw(void);
-
104  void setRaw(const uint8_t new_code[],
-
105  const uint16_t length = kTcl112AcStateLength);
-
106  void on(void);
-
107  void off(void);
-
108  void setPower(const bool on);
-
109  bool getPower(void) const;
-
110  void setTemp(const float celsius); // Celsius in 0.5 increments
-
111  float getTemp(void) const;
-
112  void setMode(const uint8_t mode);
-
113  uint8_t getMode(void) const;
-
114  static uint8_t calcChecksum(uint8_t state[],
-
115  const uint16_t length = kTcl112AcStateLength);
-
116  static bool validChecksum(uint8_t state[],
-
117  const uint16_t length = kTcl112AcStateLength);
-
118  void setFan(const uint8_t speed);
-
119  uint8_t getFan(void) const;
-
120  void setEcono(const bool on);
-
121  bool getEcono(void) const;
-
122  void setHealth(const bool on);
-
123  bool getHealth(void) const;
-
124  void setLight(const bool on);
-
125  bool getLight(void) const;
-
126  void setSwingHorizontal(const bool on);
-
127  bool getSwingHorizontal(void) const;
-
128  void setSwingVertical(const bool on);
-
129  bool getSwingVertical(void) const;
-
130  void setTurbo(const bool on);
-
131  bool getTurbo(void) const;
-
132  static uint8_t convertMode(const stdAc::opmode_t mode);
-
133  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
134  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
135  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
136  stdAc::state_t toCommon(void) const;
-
137  String toString(void) const;
-
138 #ifndef UNIT_TEST
-
139 
-
140  private:
- -
142 #else // UNIT_TEST
-
143  IRsendTest _irsend;
-
145 #endif // UNIT_TEST
- -
148  void checksum(const uint16_t length = kTcl112AcStateLength);
-
149 };
-
150 
-
151 #endif // IR_TCL_H_
-
-
Tcl112Protocol _
Definition: ir_Tcl.h:147
-
void setSwingHorizontal(const bool on)
Set the horizontal swing setting of the A/C.
Definition: ir_Tcl.cpp:238
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Tcl.cpp:292
-
static uint8_t calcChecksum(uint8_t state[], const uint16_t length=kTcl112AcStateLength)
Calculate the checksum for a given state.
Definition: ir_Tcl.cpp:64
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Tcl.cpp:130
-
const float kTcl112AcTempMin
Definition: ir_Tcl.h:82
-
void setSwingVertical(const bool on)
Set the vertical swing setting of the A/C.
Definition: ir_Tcl.cpp:250
-
const uint16_t kTcl112AcHdrSpace
Definition: ir_Tcl.h:61
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Tcl.cpp:279
-
uint8_t SwingH
Definition: ir_Tcl.h:50
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint32_t kDefaultMessageGap
Definition: IRsend.h:41
-
const uint8_t kTcl112AcFanLow
Definition: ir_Tcl.h:77
-
void send(const uint16_t repeat=kTcl112AcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Tcl.cpp:55
-
const uint16_t kTcl112AcBitMark
Definition: ir_Tcl.h:62
-
bool getEcono(void) const
Get the economy setting of the A/C.
Definition: ir_Tcl.cpp:208
-
const uint8_t kTcl112AcFanMed
Definition: ir_Tcl.h:78
-
uint8_t Temp
Definition: ir_Tcl.h:40
- -
bool getSwingHorizontal(void) const
Get the horizontal swing setting of the A/C.
Definition: ir_Tcl.cpp:244
-
float getTemp(void) const
Get the current temperature setting.
Definition: ir_Tcl.cpp:172
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
void setEcono(const bool on)
Set the economy setting of the A/C.
Definition: ir_Tcl.cpp:202
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Tcl.cpp:330
-
bool getHealth(void) const
Get the Health (Filter) setting of the A/C.
Definition: ir_Tcl.cpp:220
-
const uint16_t kTcl112AcOneSpace
Definition: ir_Tcl.h:63
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void stateReset(void)
Reset the internal state of the emulation. (On, Cool, 24C)
Definition: ir_Tcl.cpp:88
-
Class for handling detailed TCL A/C messages.
Definition: ir_Tcl.h:89
-
void checksum(const uint16_t length=kTcl112AcStateLength)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Tcl.cpp:73
-
uint8_t Turbo
Definition: ir_Tcl.h:37
- -
Native representation of a TCL 112 A/C message.
Definition: ir_Tcl.h:23
-
uint8_t HalfDegree
Definition: ir_Tcl.h:52
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Tcl.h:141
-
void setTemp(const float celsius)
Set the temperature.
Definition: ir_Tcl.cpp:158
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Tcl.cpp:98
-
void setLight(const bool on)
Set the Light (LED/Display) setting of the A/C.
Definition: ir_Tcl.cpp:226
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Tcl.cpp:118
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Tcl.h:99
-
uint8_t Light
Definition: ir_Tcl.h:32
-
const uint32_t kTcl112AcGap
Definition: ir_Tcl.h:65
-
static bool validChecksum(uint8_t state[], const uint16_t length=kTcl112AcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Tcl.cpp:83
-
uint8_t Fan
Definition: ir_Tcl.h:43
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Tcl.cpp:50
-
uint8_t Mode
Definition: ir_Tcl.h:35
-
uint8_t pad1[3]
Definition: ir_Tcl.h:47
-
const uint8_t kTcl112AcSwingVOn
Definition: ir_Tcl.h:84
-
const uint8_t kTcl112AcAuto
Definition: ir_Tcl.h:74
-
const uint16_t kTcl112AcDefaultRepeat
Definition: IRremoteESP8266.h:1107
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Tcl.cpp:319
-
const float kTcl112AcTempMax
Definition: ir_Tcl.h:81
-
const uint16_t kTcl112AcHdrMark
Definition: ir_Tcl.h:60
-
bool getLight(void) const
Get the Light (LED/Display) setting of the A/C.
Definition: ir_Tcl.cpp:232
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Tcl.cpp:138
-
const uint8_t kTcl112AcFanAuto
Definition: ir_Tcl.h:76
-
const uint8_t kTcl112AcCool
Definition: ir_Tcl.h:72
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Tcl.cpp:111
- -
uint8_t SwingV
Definition: ir_Tcl.h:44
-
uint8_t Health
Definition: ir_Tcl.h:36
-
uint8_t pad0[5]
Definition: ir_Tcl.h:27
-
uint8_t raw[kTcl112AcStateLength]
The State in IR code form.
Definition: ir_Tcl.h:24
-
void setHealth(const bool on)
Set the Health (Filter) setting of the A/C.
Definition: ir_Tcl.cpp:214
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Tcl.cpp:114
-
void setRaw(const uint8_t new_code[], const uint16_t length=kTcl112AcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Tcl.cpp:106
-
const uint8_t kTcl112AcSwingVOff
Definition: ir_Tcl.h:85
-
uint8_t Sum
Definition: ir_Tcl.h:55
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Tcl.cpp:181
-
const uint8_t kTcl112AcHdrMarkTolerance
Definition: ir_Tcl.h:67
-
const uint8_t kTcl112AcDry
Definition: ir_Tcl.h:71
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Tcl.cpp:272
-
const uint8_t kTcl112AcFanHigh
Definition: ir_Tcl.h:79
-
bool getSwingVertical(void) const
Get the vertical swing setting of the A/C.
Definition: ir_Tcl.cpp:256
-
const uint16_t kTcl112AcStateLength
Definition: IRremoteESP8266.h:1105
-
const uint8_t kTcl112AcFan
Definition: ir_Tcl.h:73
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Tcl.cpp:358
-
const uint16_t kTcl112AcZeroSpace
Definition: ir_Tcl.h:64
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Tcl.cpp:124
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Tcl.cpp:306
-
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Tcl.cpp:262
-
IRTcl112Ac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Tcl.cpp:45
-
const uint8_t kTcl112AcTolerance
Definition: ir_Tcl.h:68
-
const uint8_t kTcl112AcHeat
Definition: ir_Tcl.h:70
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Tcl.cpp:196
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
uint8_t Econo
Definition: ir_Tcl.h:33
-
uint8_t Power
Definition: ir_Tcl.h:30
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8cpp.html deleted file mode 100644 index 6526947e1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8cpp.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Technibel.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Technibel.cpp File Reference
-
-
- -

Support for Technibel protocol. -More...

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

-Variables

const uint16_t kTechnibelAcHdrMark = 8836
 
const uint16_t kTechnibelAcHdrSpace = 4380
 
const uint16_t kTechnibelAcBitMark = 523
 
const uint16_t kTechnibelAcOneSpace = 1696
 
const uint16_t kTechnibelAcZeroSpace = 564
 
const uint32_t kTechnibelAcGap = kDefaultMessageGap
 
const uint16_t kTechnibelAcFreq = 38000
 
-

Detailed Description

-

Support for Technibel protocol.

-

Variable Documentation

- -

◆ kTechnibelAcBitMark

- -
-
- - - - -
const uint16_t kTechnibelAcBitMark = 523
-
- -
-
- -

◆ kTechnibelAcFreq

- -
-
- - - - -
const uint16_t kTechnibelAcFreq = 38000
-
- -
-
- -

◆ kTechnibelAcGap

- -
-
- - - - -
const uint32_t kTechnibelAcGap = kDefaultMessageGap
-
- -
-
- -

◆ kTechnibelAcHdrMark

- -
-
- - - - -
const uint16_t kTechnibelAcHdrMark = 8836
-
- -
-
- -

◆ kTechnibelAcHdrSpace

- -
-
- - - - -
const uint16_t kTechnibelAcHdrSpace = 4380
-
- -
-
- -

◆ kTechnibelAcOneSpace

- -
-
- - - - -
const uint16_t kTechnibelAcOneSpace = 1696
-
- -
-
- -

◆ kTechnibelAcZeroSpace

- -
-
- - - - -
const uint16_t kTechnibelAcZeroSpace = 564
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h.html deleted file mode 100644 index 31c3b6646..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Technibel.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Technibel.h File Reference
-
-
- -

Support for Technibel protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  TechnibelProtocol
 Native representation of a Technibel A/C message. More...
 
class  IRTechnibelAc
 Class for handling detailed Technibel A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kTechnibelAcTimerHoursOffset = 16
 
const uint8_t kTechnibelAcTimerMax = 24
 
const uint8_t kTechnibelAcTempMinC = 16
 
const uint8_t kTechnibelAcTempMaxC = 31
 
const uint8_t kTechnibelAcTempMinF = 61
 
const uint8_t kTechnibelAcTempMaxF = 88
 
const uint8_t kTechnibelAcFanSize = 4
 
const uint8_t kTechnibelAcFanLow = 0b0001
 
const uint8_t kTechnibelAcFanMedium = 0b0010
 
const uint8_t kTechnibelAcFanHigh = 0b0100
 
const uint8_t kTechnibelAcCool = 0b0001
 
const uint8_t kTechnibelAcDry = 0b0010
 
const uint8_t kTechnibelAcFan = 0b0100
 
const uint8_t kTechnibelAcHeat = 0b1000
 
const uint8_t kTechnibelAcHeaderOffset = 48
 
const uint8_t kTechnibelAcHeader = 0b00011000
 
const uint64_t kTechnibelAcResetState = 0x180101140000EA
 Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off. More...
 
-

Detailed Description

-

Support for Technibel protocol.

-

Variable Documentation

- -

◆ kTechnibelAcCool

- -
-
- - - - -
const uint8_t kTechnibelAcCool = 0b0001
-
- -
-
- -

◆ kTechnibelAcDry

- -
-
- - - - -
const uint8_t kTechnibelAcDry = 0b0010
-
- -
-
- -

◆ kTechnibelAcFan

- -
-
- - - - -
const uint8_t kTechnibelAcFan = 0b0100
-
- -
-
- -

◆ kTechnibelAcFanHigh

- -
-
- - - - -
const uint8_t kTechnibelAcFanHigh = 0b0100
-
- -
-
- -

◆ kTechnibelAcFanLow

- -
-
- - - - -
const uint8_t kTechnibelAcFanLow = 0b0001
-
- -
-
- -

◆ kTechnibelAcFanMedium

- -
-
- - - - -
const uint8_t kTechnibelAcFanMedium = 0b0010
-
- -
-
- -

◆ kTechnibelAcFanSize

- -
-
- - - - -
const uint8_t kTechnibelAcFanSize = 4
-
- -
-
- -

◆ kTechnibelAcHeader

- -
-
- - - - -
const uint8_t kTechnibelAcHeader = 0b00011000
-
- -
-
- -

◆ kTechnibelAcHeaderOffset

- -
-
- - - - -
const uint8_t kTechnibelAcHeaderOffset = 48
-
- -
-
- -

◆ kTechnibelAcHeat

- -
-
- - - - -
const uint8_t kTechnibelAcHeat = 0b1000
-
- -
-
- -

◆ kTechnibelAcResetState

- -
-
- - - - -
const uint64_t kTechnibelAcResetState = 0x180101140000EA
-
- -

Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off.

- -
-
- -

◆ kTechnibelAcTempMaxC

- -
-
- - - - -
const uint8_t kTechnibelAcTempMaxC = 31
-
- -
-
- -

◆ kTechnibelAcTempMaxF

- -
-
- - - - -
const uint8_t kTechnibelAcTempMaxF = 88
-
- -
-
- -

◆ kTechnibelAcTempMinC

- -
-
- - - - -
const uint8_t kTechnibelAcTempMinC = 16
-
- -
-
- -

◆ kTechnibelAcTempMinF

- -
-
- - - - -
const uint8_t kTechnibelAcTempMinF = 61
-
- -
-
- -

◆ kTechnibelAcTimerHoursOffset

- -
-
- - - - -
const uint8_t kTechnibelAcTimerHoursOffset = 16
-
- -
-
- -

◆ kTechnibelAcTimerMax

- -
-
- - - - -
const uint8_t kTechnibelAcTimerMax = 24
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h_source.html deleted file mode 100644 index aae68adf3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Technibel_8h_source.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Technibel.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Technibel.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 Quentin Briollant
-
2 
-
5 
-
6 #ifndef IR_TECHNIBEL_H_
-
7 #define IR_TECHNIBEL_H_
-
8 
-
9 #define __STDC_LIMIT_MACROS
-
10 #include <stdint.h>
-
11 #ifndef UNIT_TEST
-
12 #include <Arduino.h>
-
13 #endif
-
14 #include "IRremoteESP8266.h"
-
15 #include "IRsend.h"
-
16 #ifdef UNIT_TEST
-
17 #include "IRsend_test.h"
-
18 #endif
-
19 
-
20 // Supports:
-
21 // Brand: Technibel, Model: IRO PLUS
-
22 
- -
25  uint64_t raw; // The state of the IR remote.
-
26  struct {
-
27  uint8_t Sum :8;
-
28  uint8_t Footer :8;
-
29  uint8_t TimerHours :5;
-
30  uint8_t :3;
-
31  uint8_t Temp :7;
-
32  uint8_t :1;
-
33  uint8_t Fan :3;
-
34  uint8_t :1;
-
35  uint8_t Sleep :1;
-
36  uint8_t Swing :1;
-
37  uint8_t UseFah :1;
-
38  uint8_t TimerEnable :1;
-
39  uint8_t Mode :4;
-
40  uint8_t FanChange :1;
-
41  uint8_t TempChange :1;
-
42  uint8_t TimerChange :1;
-
43  uint8_t Power :1;
-
44  uint8_t Header :8;
-
45  };
-
46 };
-
47 
-
48 // Constants
-
49 
-
50 const uint8_t kTechnibelAcTimerHoursOffset = 16;
-
51 const uint8_t kTechnibelAcTimerMax = 24;
-
52 
-
53 const uint8_t kTechnibelAcTempMinC = 16; // Deg C
-
54 const uint8_t kTechnibelAcTempMaxC = 31; // Deg C
-
55 const uint8_t kTechnibelAcTempMinF = 61; // Deg F
-
56 const uint8_t kTechnibelAcTempMaxF = 88; // Deg F
-
57 
-
58 const uint8_t kTechnibelAcFanSize = 4;
-
59 const uint8_t kTechnibelAcFanLow = 0b0001;
-
60 const uint8_t kTechnibelAcFanMedium = 0b0010;
-
61 const uint8_t kTechnibelAcFanHigh = 0b0100;
-
62 
-
63 const uint8_t kTechnibelAcCool = 0b0001;
-
64 const uint8_t kTechnibelAcDry = 0b0010;
-
65 const uint8_t kTechnibelAcFan = 0b0100;
-
66 const uint8_t kTechnibelAcHeat = 0b1000;
-
67 
-
68 const uint8_t kTechnibelAcHeaderOffset = 48;
-
69 const uint8_t kTechnibelAcHeader = 0b00011000;
-
70 
-
71 const uint64_t kTechnibelAcResetState = 0x180101140000EA;
-
72 
-
74 
-
75 // Classes
- -
78  public:
-
79  explicit IRTechnibelAc(const uint16_t pin, const bool inverted = false,
-
80  const bool use_modulation = true);
-
81  void stateReset(void);
-
82 #if SEND_TECHNIBEL_AC
-
83  void send(const uint16_t repeat = kTechnibelAcDefaultRepeat);
-
88  int8_t calibrate(void) { return _irsend.calibrate(); }
-
89 #endif // SEND_TECHNIBEL_AC
-
90  void begin(void);
-
91  static uint8_t calcChecksum(const uint64_t state);
-
92  static bool validChecksum(const uint64_t state);
-
93  void setPower(const bool on);
-
94  bool getPower(void) const;
-
95  void on(void);
-
96  void off(void);
-
97  void setTempUnit(const bool celsius);
-
98  bool getTempUnit(void) const;
-
99  void setTemp(const uint8_t temp, const bool fahrenheit = false);
-
100  uint8_t getTemp(void) const;
-
101  void setFan(const uint8_t speed);
-
102  uint8_t getFan(void) const;
-
103  void setMode(const uint8_t mode);
-
104  uint8_t getMode(void) const;
-
105  void setSwing(const bool on);
-
106  bool getSwing(void) const;
-
107  static bool convertSwing(const stdAc::swingv_t swing);
-
108  static stdAc::swingv_t toCommonSwing(const bool swing);
-
109  void setSleep(const bool on);
-
110  bool getSleep(void) const;
-
111  void setTimerEnabled(const bool on);
-
112  bool getTimerEnabled(void) const;
-
113  void setTimer(const uint16_t nr_of_mins);
-
114  uint16_t getTimer(void) const;
-
115  uint64_t getRaw(void);
-
116  void setRaw(const uint64_t state);
-
117  static uint8_t convertMode(const stdAc::opmode_t mode);
-
118  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
119  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
120  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
121  stdAc::state_t toCommon(void) const;
-
122  String toString(void) const;
-
123 #ifndef UNIT_TEST
-
124 
-
125  private:
- -
127 #else
-
128  IRsendTest _irsend;
-
129 #endif
- -
131  uint8_t _saved_temp; // The previously user requested temp value.
-
132  uint8_t _saved_temp_units; // The previously user requested temp units.
-
133  void checksum(void);
-
134 };
-
135 #endif // IR_TECHNIBEL_H_
-
-
IRsendTest _irsend
Definition: ir_Technibel.h:128
-
static uint8_t calcChecksum(const uint64_t state)
Compute the checksum of the supplied state.
Definition: ir_Technibel.cpp:107
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Technibel.cpp:256
-
TechnibelProtocol _
Definition: ir_Technibel.h:130
-
Native representation of a Technibel A/C message.
Definition: ir_Technibel.h:24
-
const uint8_t kTechnibelAcTempMinF
Definition: ir_Technibel.h:55
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Technibel.cpp:194
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
const uint8_t kTechnibelAcFanLow
Definition: ir_Technibel.h:59
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Technibel.cpp:154
-
bool getSwing(void) const
Get the (vertical) swing setting of the A/C.
Definition: ir_Technibel.cpp:304
-
bool getTempUnit(void) const
Get the temperature unit setting.
Definition: ir_Technibel.cpp:177
-
const uint8_t kTechnibelAcFanSize
Definition: ir_Technibel.h:58
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Technibel.cpp:287
-
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Technibel.cpp:146
-
IRTechnibelAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Technibel.cpp:89
-
uint8_t TimerChange
Definition: ir_Technibel.h:42
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Technibel.cpp:94
-
void setTempUnit(const bool celsius)
Set the temperature unit setting.
Definition: ir_Technibel.cpp:170
- -
void setTimer(const uint16_t nr_of_mins)
Set the timer for when the A/C unit will switch off.
Definition: ir_Technibel.cpp:350
-
void checksum(void)
Set the checksum of the internal state.
Definition: ir_Technibel.cpp:125
-
static bool validChecksum(const uint64_t state)
Confirm the checksum of the supplied state is valid.
Definition: ir_Technibel.cpp:119
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t Footer
Definition: ir_Technibel.h:28
-
void setTemp(const uint8_t temp, const bool fahrenheit=false)
Set the temperature.
Definition: ir_Technibel.cpp:184
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Technibel.cpp:219
-
uint8_t TempChange
Definition: ir_Technibel.h:41
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint64_t raw
Definition: ir_Technibel.h:25
-
const uint8_t kTechnibelAcTempMaxC
Definition: ir_Technibel.h:54
-
uint8_t UseFah
Definition: ir_Technibel.h:37
-
uint8_t TimerHours
Definition: ir_Technibel.h:29
-
uint8_t Mode
Definition: ir_Technibel.h:39
- -
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Technibel.cpp:151
-
bool getTimerEnabled(void) const
Is the timer function enabled?
Definition: ir_Technibel.cpp:342
-
static stdAc::swingv_t toCommonSwing(const bool swing)
Convert a native swing into its stdAc equivalent.
Definition: ir_Technibel.cpp:318
-
const uint8_t kTechnibelAcFanHigh
Definition: ir_Technibel.h:61
-
const uint8_t kTechnibelAcTimerMax
Definition: ir_Technibel.h:51
-
uint8_t Sleep
Definition: ir_Technibel.h:35
-
uint8_t Sum
Definition: ir_Technibel.h:27
-
void send(const uint16_t repeat=kTechnibelAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Technibel.cpp:99
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Technibel.cpp:365
-
const uint8_t kTechnibelAcCool
Definition: ir_Technibel.h:63
-
uint8_t Swing
Definition: ir_Technibel.h:36
-
const uint8_t kTechnibelAcFan
Definition: ir_Technibel.h:65
-
void stateReset(void)
Reset the internal state of the emulation.
Definition: ir_Technibel.cpp:131
-
const uint8_t kTechnibelAcHeader
Definition: ir_Technibel.h:69
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Technibel.cpp:164
-
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Technibel.cpp:139
-
const uint8_t kTechnibelAcHeat
Definition: ir_Technibel.h:66
-
Class for handling detailed Technibel A/C messages.
Definition: ir_Technibel.h:77
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Technibel.cpp:226
-
uint8_t FanChange
Definition: ir_Technibel.h:40
-
uint8_t _saved_temp
Definition: ir_Technibel.h:131
-
uint8_t Temp
Definition: ir_Technibel.h:31
-
const uint8_t kTechnibelAcHeaderOffset
Definition: ir_Technibel.h:68
-
uint8_t Header
Definition: ir_Technibel.h:44
-
uint8_t TimerEnable
Definition: ir_Technibel.h:38
-
const uint8_t kTechnibelAcTempMinC
Definition: ir_Technibel.h:53
-
uint8_t Power
Definition: ir_Technibel.h:43
-
const uint8_t kTechnibelAcTimerHoursOffset
Definition: ir_Technibel.h:50
-
uint8_t _saved_temp_units
Definition: ir_Technibel.h:132
-
const uint64_t kTechnibelAcResetState
Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off.
Definition: ir_Technibel.h:71
-
void setTimerEnabled(const bool on)
Set the enable timer setting.
Definition: ir_Technibel.cpp:336
-
const uint16_t kTechnibelAcDefaultRepeat
Definition: IRremoteESP8266.h:961
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Technibel.cpp:250
-
void setSwing(const bool on)
Set the (vertical) swing setting of the A/C.
Definition: ir_Technibel.cpp:298
-
uint16_t getTimer(void) const
Get the timer time for when the A/C unit will switch power state.
Definition: ir_Technibel.cpp:359
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Technibel.cpp:391
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Technibel.h:88
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Technibel.cpp:240
-
const uint8_t kTechnibelAcFanMedium
Definition: ir_Technibel.h:60
-
uint8_t Fan
Definition: ir_Technibel.h:33
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
static bool convertSwing(const stdAc::swingv_t swing)
Convert a stdAc::swingv_t enum into it's native swing.
Definition: ir_Technibel.cpp:311
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Technibel.cpp:275
-
const uint8_t kTechnibelAcDry
Definition: ir_Technibel.h:64
-
const uint8_t kTechnibelAcTempMaxF
Definition: ir_Technibel.h:56
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Technibel.cpp:330
-
IRsend _irsend
Definition: ir_Technibel.h:126
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Technibel.cpp:158
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Technibel.cpp:324
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Technibel.cpp:200
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8cpp.html deleted file mode 100644 index 56e288060..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8cpp.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Teco.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Teco.cpp File Reference
-
-
- -

Support for Teco protocols. -More...

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

-Variables

const uint16_t kTecoHdrMark = 9000
 
const uint16_t kTecoHdrSpace = 4440
 
const uint16_t kTecoBitMark = 620
 
const uint16_t kTecoOneSpace = 1650
 
const uint16_t kTecoZeroSpace = 580
 
const uint32_t kTecoGap = kDefaultMessageGap
 
-

Detailed Description

-

Support for Teco protocols.

-

Variable Documentation

- -

◆ kTecoBitMark

- -
-
- - - - -
const uint16_t kTecoBitMark = 620
-
- -
-
- -

◆ kTecoGap

- -
-
- - - - -
const uint32_t kTecoGap = kDefaultMessageGap
-
- -
-
- -

◆ kTecoHdrMark

- -
-
- - - - -
const uint16_t kTecoHdrMark = 9000
-
- -
-
- -

◆ kTecoHdrSpace

- -
-
- - - - -
const uint16_t kTecoHdrSpace = 4440
-
- -
-
- -

◆ kTecoOneSpace

- -
-
- - - - -
const uint16_t kTecoOneSpace = 1650
-
- -
-
- -

◆ kTecoZeroSpace

- -
-
- - - - -
const uint16_t kTecoZeroSpace = 580
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h.html deleted file mode 100644 index e156d0ddc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Teco.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Teco.h File Reference
-
-
- -

Support for Teco protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  TecoProtocol
 Native representation of a Teco A/C message. More...
 
class  IRTecoAc
 Class for handling detailed Teco A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kTecoAuto = 0
 
const uint8_t kTecoCool = 1
 
const uint8_t kTecoDry = 2
 
const uint8_t kTecoFan = 3
 
const uint8_t kTecoHeat = 4
 
const uint8_t kTecoFanAuto = 0
 
const uint8_t kTecoFanLow = 1
 
const uint8_t kTecoFanMed = 2
 
const uint8_t kTecoFanHigh = 3
 
const uint8_t kTecoMinTemp = 16
 
const uint8_t kTecoMaxTemp = 30
 
const uint64_t kTecoReset = 0b01001010000000000000010000000000000
 
-

Detailed Description

-

Support for Teco protocols.

-

Variable Documentation

- -

◆ kTecoAuto

- -
-
- - - - -
const uint8_t kTecoAuto = 0
-
- -
-
- -

◆ kTecoCool

- -
-
- - - - -
const uint8_t kTecoCool = 1
-
- -
-
- -

◆ kTecoDry

- -
-
- - - - -
const uint8_t kTecoDry = 2
-
- -
-
- -

◆ kTecoFan

- -
-
- - - - -
const uint8_t kTecoFan = 3
-
- -
-
- -

◆ kTecoFanAuto

- -
-
- - - - -
const uint8_t kTecoFanAuto = 0
-
- -
-
- -

◆ kTecoFanHigh

- -
-
- - - - -
const uint8_t kTecoFanHigh = 3
-
- -
-
- -

◆ kTecoFanLow

- -
-
- - - - -
const uint8_t kTecoFanLow = 1
-
- -
-
- -

◆ kTecoFanMed

- -
-
- - - - -
const uint8_t kTecoFanMed = 2
-
- -
-
- -

◆ kTecoHeat

- -
-
- - - - -
const uint8_t kTecoHeat = 4
-
- -
-
- -

◆ kTecoMaxTemp

- -
-
- - - - -
const uint8_t kTecoMaxTemp = 30
-
- -
-
- -

◆ kTecoMinTemp

- -
-
- - - - -
const uint8_t kTecoMinTemp = 16
-
- -
-
- -

◆ kTecoReset

- -
-
- - - - -
const uint64_t kTecoReset = 0b01001010000000000000010000000000000
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h_source.html deleted file mode 100644 index c6260eb6a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Teco_8h_source.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Teco.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Teco.h
-
-
-Go to the documentation of this file.
1 // Copyright 2019 Fabien Valthier
-
2 
-
5 
-
6 // Supports:
-
7 // Brand: Alaska, Model: SAC9010QC A/C
-
8 // Brand: Alaska, Model: SAC9010QC remote
-
9 
-
10 #ifndef IR_TECO_H_
-
11 #define IR_TECO_H_
-
12 
-
13 #ifndef UNIT_TEST
-
14 #include <Arduino.h>
-
15 #endif
-
16 #include "IRremoteESP8266.h"
-
17 #include "IRsend.h"
-
18 #ifdef UNIT_TEST
-
19 #include "IRsend_test.h"
-
20 #endif
-
21 
- -
24  uint64_t raw;
-
25  struct {
-
26  uint8_t Mode :3;
-
27  uint8_t Power :1;
-
28  uint8_t Fan :2;
-
29  uint8_t Swing :1;
-
30  uint8_t Sleep :1;
-
31  uint8_t Temp :4;
-
32  uint8_t HalfHour :1;
-
33  uint8_t TensHours :2; // number of 10hours
-
34  uint8_t TimerOn :1;
-
35  uint8_t UnitHours :4; // unit, not thenth
-
36  uint8_t Humid :1;
-
37  uint8_t Light :1;
-
38  uint8_t :1; // "Tree with bubbles" / Filter?? (Not Implemented)
-
39  uint8_t Save :1;
-
40  uint8_t :8; // Cst 0x50
-
41  uint8_t :8; // Cst 0x02
-
42  };
-
43 };
-
44 
-
45 // Constants.
-
46 const uint8_t kTecoAuto = 0; // temp = 25C
-
47 const uint8_t kTecoCool = 1;
-
48 const uint8_t kTecoDry = 2; // temp = 25C, but not shown
-
49 const uint8_t kTecoFan = 3;
-
50 const uint8_t kTecoHeat = 4;
-
51 const uint8_t kTecoFanAuto = 0; // 0b00
-
52 const uint8_t kTecoFanLow = 1; // 0b01
-
53 const uint8_t kTecoFanMed = 2; // 0b10
-
54 const uint8_t kTecoFanHigh = 3; // 0b11
-
55 const uint8_t kTecoMinTemp = 16; // 16C
-
56 const uint8_t kTecoMaxTemp = 30; // 30C
-
57 
-
58 const uint64_t kTecoReset = 0b01001010000000000000010000000000000;
-
59 
-
60 // Classes
-
62 class IRTecoAc {
-
63  public:
-
64  explicit IRTecoAc(const uint16_t pin, const bool inverted = false,
-
65  const bool use_modulation = true);
-
66  void stateReset(void);
-
67 #if SEND_TECO
-
68  void send(const uint16_t repeat = kTecoDefaultRepeat);
-
73  int8_t calibrate(void) { return _irsend.calibrate(); }
-
74 #endif // SEND_TECO
-
75  void begin(void);
-
76  void on(void);
-
77  void off(void);
-
78 
-
79  void setPower(const bool on);
-
80  bool getPower(void) const;
-
81 
-
82  void setTemp(const uint8_t temp);
-
83  uint8_t getTemp(void) const;
-
84 
-
85  void setFan(const uint8_t fan);
-
86  uint8_t getFan(void) const;
-
87 
-
88  void setMode(const uint8_t mode);
-
89  uint8_t getMode(void) const;
-
90 
-
91  void setSwing(const bool on);
-
92  bool getSwing(void) const;
-
93 
-
94  void setSleep(const bool on);
-
95  bool getSleep(void) const;
-
96 
-
97  void setLight(const bool on);
-
98  bool getLight(void) const;
-
99 
-
100  void setHumid(const bool on);
-
101  bool getHumid(void) const;
-
102 
-
103  void setSave(const bool on);
-
104  bool getSave(void) const;
-
105 
-
106  uint16_t getTimer(void) const;
-
107  void setTimer(const uint16_t mins);
-
108 
-
109  uint64_t getRaw(void) const;
-
110  void setRaw(const uint64_t new_code);
-
111 
-
112  static uint8_t convertMode(const stdAc::opmode_t mode);
-
113  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
114  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
115  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
116  stdAc::state_t toCommon(void) const;
-
117  String toString(void) const;
-
118 #ifndef UNIT_TEST
-
119 
-
120  private:
- -
122 #else // UNIT_TEST
-
123  IRsendTest _irsend;
-
125 #endif // UNIT_TEST
- -
128  bool getTimerEnabled(void) const;
-
129 };
-
130 
-
131 #endif // IR_TECO_H_
-
-
uint8_t TensHours
Definition: ir_Teco.h:33
-
uint8_t TimerOn
Definition: ir_Teco.h:34
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Teco.cpp:322
-
const uint8_t kTecoFanMed
Definition: ir_Teco.h:53
-
const uint64_t kTecoReset
Definition: ir_Teco.h:58
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Teco.cpp:272
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Teco.cpp:82
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
bool getLight(void) const
Get the Light (LED/Display) setting of the A/C.
Definition: ir_Teco.cpp:184
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Teco.cpp:245
-
uint8_t Swing
Definition: ir_Teco.h:29
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Teco.cpp:148
-
uint8_t Humid
Definition: ir_Teco.h:36
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Teco.h:73
- -
uint8_t Save
Definition: ir_Teco.h:39
-
const uint8_t kTecoMinTemp
Definition: ir_Teco.h:55
-
void setRaw(const uint64_t new_code)
Set the internal state from a valid code for this protocol.
Definition: ir_Teco.cpp:76
-
IRTecoAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Teco.cpp:49
-
const uint8_t kTecoMaxTemp
Definition: ir_Teco.h:56
-
uint8_t UnitHours
Definition: ir_Teco.h:35
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Teco.cpp:79
-
const uint8_t kTecoDry
Definition: ir_Teco.h:48
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kTecoHeat
Definition: ir_Teco.h:50
-
uint16_t getTimer(void) const
Get the timer time for when the A/C unit will switch power state.
Definition: ir_Teco.cpp:220
-
std::string String
Definition: IRremoteESP8266.h:1217
-
Native representation of a Teco A/C message.
Definition: ir_Teco.h:23
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Teco.cpp:86
-
void setSwing(const bool on)
Set the (vertical) swing setting of the A/C.
Definition: ir_Teco.cpp:154
- -
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Teco.cpp:107
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Teco.cpp:172
-
void setHumid(const bool on)
Set the Humid setting of the A/C.
Definition: ir_Teco.cpp:190
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Teco.cpp:92
-
void setTimer(const uint16_t mins)
Set the timer for when the A/C unit will switch power state.
Definition: ir_Teco.cpp:233
-
const uint8_t kTecoFanLow
Definition: ir_Teco.h:52
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Teco.cpp:166
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Teco.cpp:54
-
const uint16_t kTecoDefaultRepeat
Definition: IRremoteESP8266.h:1109
-
uint8_t Temp
Definition: ir_Teco.h:31
-
const uint8_t kTecoFanAuto
Definition: ir_Teco.h:51
-
uint8_t Fan
Definition: ir_Teco.h:28
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Teco.cpp:127
-
const uint8_t kTecoCool
Definition: ir_Teco.h:47
-
bool getTimerEnabled(void) const
Is the timer function enabled?
Definition: ir_Teco.cpp:214
-
bool getSwing(void) const
Get the (vertical) swing setting of the A/C.
Definition: ir_Teco.cpp:160
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Teco.cpp:98
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Teco.cpp:133
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Teco.cpp:285
-
bool getHumid(void) const
Get the Humid setting of the A/C.
Definition: ir_Teco.cpp:196
-
void setSave(const bool on)
Set the Save setting of the A/C.
Definition: ir_Teco.cpp:202
-
void stateReset(void)
Reset the internal state of the emulation.
Definition: ir_Teco.cpp:66
-
TecoProtocol _
Definition: ir_Teco.h:127
-
uint8_t HalfHour
Definition: ir_Teco.h:32
-
uint64_t getRaw(void) const
Get a copy of the internal state/code for this protocol.
Definition: ir_Teco.cpp:72
-
const uint8_t kTecoFan
Definition: ir_Teco.h:49
-
uint8_t Light
Definition: ir_Teco.h:37
-
bool getSave(void) const
Get the Save setting of the A/C.
Definition: ir_Teco.cpp:208
-
uint8_t Power
Definition: ir_Teco.h:27
-
Class for handling detailed Teco A/C messages.
Definition: ir_Teco.h:62
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Teco.cpp:258
-
uint8_t Sleep
Definition: ir_Teco.h:30
-
uint8_t Mode
Definition: ir_Teco.h:26
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Teco.h:121
-
uint64_t raw
The state of the IR remote in IR code form.
Definition: ir_Teco.h:24
-
void setLight(const bool on)
Set the Light (LED/Display) setting of the A/C.
Definition: ir_Teco.cpp:178
-
void send(const uint16_t repeat=kTecoDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Teco.cpp:59
-
const uint8_t kTecoFanHigh
Definition: ir_Teco.h:54
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Teco.cpp:296
-
const uint8_t kTecoAuto
Definition: ir_Teco.h:46
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Teco.cpp:113
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8cpp.html deleted file mode 100644 index d1cd1e179..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8cpp.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Toshiba.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Toshiba.cpp File Reference
-
-
- -

Support for Toshiba protocols. -More...

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

-Variables

const uint16_t kToshibaAcHdrMark = 4400
 
const uint16_t kToshibaAcHdrSpace = 4300
 
const uint16_t kToshibaAcBitMark = 580
 
const uint16_t kToshibaAcOneSpace = 1600
 
const uint16_t kToshibaAcZeroSpace = 490
 
const uint16_t kToshibaAcMinGap = 4600
 
const uint16_t kToshibaAcUsualGap = 7400
 
-

Detailed Description

-

Variable Documentation

- -

◆ kToshibaAcBitMark

- -
-
- - - - -
const uint16_t kToshibaAcBitMark = 580
-
- -
-
- -

◆ kToshibaAcHdrMark

- -
-
- - - - -
const uint16_t kToshibaAcHdrMark = 4400
-
- -
-
- -

◆ kToshibaAcHdrSpace

- -
-
- - - - -
const uint16_t kToshibaAcHdrSpace = 4300
-
- -
-
- -

◆ kToshibaAcMinGap

- -
-
- - - - -
const uint16_t kToshibaAcMinGap = 4600
-
- -
-
- -

◆ kToshibaAcOneSpace

- -
-
- - - - -
const uint16_t kToshibaAcOneSpace = 1600
-
- -
-
- -

◆ kToshibaAcUsualGap

- -
-
- - - - -
const uint16_t kToshibaAcUsualGap = 7400
-
- -
-
- -

◆ kToshibaAcZeroSpace

- -
-
- - - - -
const uint16_t kToshibaAcZeroSpace = 490
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h.html deleted file mode 100644 index 44622ba9d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h.html +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Toshiba.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Toshiba.h File Reference
-
-
- -

Support for Toshiba protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  ToshibaProtocol
 Native representation of a Toshiba A/C message. More...
 
class  IRToshibaAC
 Class for handling detailed Toshiba A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kToshibaAcLengthByte = 2
 Byte pos of the "length" attribute. More...
 
const uint8_t kToshibaAcMinLength = 6
 Min Nr. of bytes in a message. More...
 
const uint16_t kToshibaAcInvertedLength = 4
 Nr. of leading bytes in inverted pairs. More...
 
const uint8_t kToshibaAcSwingStep = 0
 0b000 More...
 
const uint8_t kToshibaAcSwingOn = 1
 0b001 More...
 
const uint8_t kToshibaAcSwingOff = 2
 0b010 More...
 
const uint8_t kToshibaAcSwingToggle = 4
 0b100 More...
 
const uint8_t kToshibaAcMinTemp = 17
 17C More...
 
const uint8_t kToshibaAcMaxTemp = 30
 30C More...
 
const uint8_t kToshibaAcAuto = 0
 
const uint8_t kToshibaAcCool = 1
 
const uint8_t kToshibaAcDry = 2
 
const uint8_t kToshibaAcHeat = 3
 
const uint8_t kToshibaAcFan = 4
 
const uint8_t kToshibaAcOff = 7
 
const uint8_t kToshibaAcFanAuto = 0
 
const uint8_t kToshibaAcFanMin = 1
 
const uint8_t kToshibaAcFanMed = 3
 
const uint8_t kToshibaAcFanMax = 5
 
const uint8_t kToshibaAcTurboOn = 1
 
const uint8_t kToshibaAcEconoOn = 3
 
-

Detailed Description

-

Variable Documentation

- -

◆ kToshibaAcAuto

- -
-
- - - - -
const uint8_t kToshibaAcAuto = 0
-
- -
-
- -

◆ kToshibaAcCool

- -
-
- - - - -
const uint8_t kToshibaAcCool = 1
-
- -
-
- -

◆ kToshibaAcDry

- -
-
- - - - -
const uint8_t kToshibaAcDry = 2
-
- -
-
- -

◆ kToshibaAcEconoOn

- -
-
- - - - -
const uint8_t kToshibaAcEconoOn = 3
-
- -
-
- -

◆ kToshibaAcFan

- -
-
- - - - -
const uint8_t kToshibaAcFan = 4
-
- -
-
- -

◆ kToshibaAcFanAuto

- -
-
- - - - -
const uint8_t kToshibaAcFanAuto = 0
-
- -
-
- -

◆ kToshibaAcFanMax

- -
-
- - - - -
const uint8_t kToshibaAcFanMax = 5
-
- -
-
- -

◆ kToshibaAcFanMed

- -
-
- - - - -
const uint8_t kToshibaAcFanMed = 3
-
- -
-
- -

◆ kToshibaAcFanMin

- -
-
- - - - -
const uint8_t kToshibaAcFanMin = 1
-
- -
-
- -

◆ kToshibaAcHeat

- -
-
- - - - -
const uint8_t kToshibaAcHeat = 3
-
- -
-
- -

◆ kToshibaAcInvertedLength

- -
-
- - - - -
const uint16_t kToshibaAcInvertedLength = 4
-
- -

Nr. of leading bytes in inverted pairs.

- -
-
- -

◆ kToshibaAcLengthByte

- -
-
- - - - -
const uint8_t kToshibaAcLengthByte = 2
-
- -

Byte pos of the "length" attribute.

- -
-
- -

◆ kToshibaAcMaxTemp

- -
-
- - - - -
const uint8_t kToshibaAcMaxTemp = 30
-
- -

30C

- -
-
- -

◆ kToshibaAcMinLength

- -
-
- - - - -
const uint8_t kToshibaAcMinLength = 6
-
- -

Min Nr. of bytes in a message.

- -
-
- -

◆ kToshibaAcMinTemp

- -
-
- - - - -
const uint8_t kToshibaAcMinTemp = 17
-
- -

17C

- -
-
- -

◆ kToshibaAcOff

- -
-
- - - - -
const uint8_t kToshibaAcOff = 7
-
- -
-
- -

◆ kToshibaAcSwingOff

- -
-
- - - - -
const uint8_t kToshibaAcSwingOff = 2
-
- -

0b010

- -
-
- -

◆ kToshibaAcSwingOn

- -
-
- - - - -
const uint8_t kToshibaAcSwingOn = 1
-
- -

0b001

- -
-
- -

◆ kToshibaAcSwingStep

- -
-
- - - - -
const uint8_t kToshibaAcSwingStep = 0
-
- -

0b000

- -
-
- -

◆ kToshibaAcSwingToggle

- -
-
- - - - -
const uint8_t kToshibaAcSwingToggle = 4
-
- -

0b100

- -
-
- -

◆ kToshibaAcTurboOn

- -
-
- - - - -
const uint8_t kToshibaAcTurboOn = 1
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h_source.html deleted file mode 100644 index 953a63b6f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Toshiba_8h_source.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Toshiba.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Toshiba.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 David Conran
-
2 
-
11 
-
12 // Supports:
-
13 // Brand: Toshiba, Model: RAS-B13N3KV2
-
14 // Brand: Toshiba, Model: Akita EVO II
-
15 // Brand: Toshiba, Model: RAS-B13N3KVP-E
-
16 // Brand: Toshiba, Model: RAS 18SKP-ES
-
17 // Brand: Toshiba, Model: WH-TA04NE
-
18 // Brand: Toshiba, Model: WC-L03SE
-
19 // Brand: Toshiba, Model: WH-UB03NJ remote
-
20 // Brand: Toshiba, Model: RAS-2558V A/C
-
21 // Brand: Carrier, Model: 42NQV060M2 / 38NYV060M2 A/C
-
22 // Brand: Carrier, Model: 42NQV050M2 / 38NYV050M2 A/C
-
23 // Brand: Carrier, Model: 42NQV035M2 / 38NYV035M2 A/C
-
24 // Brand: Carrier, Model: 42NQV025M2 / 38NYV025M2 A/C
-
25 
-
26 #ifndef IR_TOSHIBA_H_
-
27 #define IR_TOSHIBA_H_
-
28 
-
29 #define __STDC_LIMIT_MACROS
-
30 #include <stdint.h>
-
31 #ifdef ARDUINO
-
32 #include <Arduino.h>
-
33 #endif
-
34 #include "IRremoteESP8266.h"
-
35 #include "IRsend.h"
-
36 #ifdef UNIT_TEST
-
37 #include "IRsend_test.h"
-
38 #endif
-
39 
- - -
43  struct {
-
44  // Byte[0] - 0xF2
-
45  uint8_t :8;
-
46  // Byte[1] - 0x0D (inverted previous byte's value)
-
47  uint8_t :8;
-
48  // Byte[2] - The expected payload length (in bytes) past the Byte[4].
-
53  uint8_t Length :8;
-
54  // Byte[3] - The bit-inverted value of the "length" byte.
-
55  uint8_t :8;
-
56  // Byte[4]
-
57  uint8_t :3;
-
58  uint8_t LongMsg :1;
-
59  uint8_t :1;
-
60  uint8_t ShortMsg:1;
-
61  uint8_t :2;
-
62  // Byte[5]
-
63  uint8_t Swing :3;
-
64  uint8_t :1;
-
65  uint8_t Temp :4;
-
66  // Byte[6]
-
67  uint8_t Mode :3;
-
68  uint8_t :2;
-
69  uint8_t Fan :3;
-
70  // Byte[7]
-
71  uint8_t :8;
-
72  // Byte[8]
-
73  // (Checksum for 72 bit messages, Eco/Turbo for long 80 bit messages)
-
74  uint8_t EcoTurbo :8;
-
75  };
-
76 };
-
77 
-
78 // Constants
-
79 
-
80 const uint8_t kToshibaAcLengthByte = 2;
-
81 const uint8_t kToshibaAcMinLength = 6;
-
82 
-
83 const uint16_t kToshibaAcInvertedLength = 4;
-
84 
-
86 const uint8_t kToshibaAcSwingStep = 0;
-
87 const uint8_t kToshibaAcSwingOn = 1;
-
88 const uint8_t kToshibaAcSwingOff = 2;
-
89 const uint8_t kToshibaAcSwingToggle = 4;
-
90 
-
91 const uint8_t kToshibaAcMinTemp = 17;
-
92 const uint8_t kToshibaAcMaxTemp = 30;
-
93 
-
94 const uint8_t kToshibaAcAuto = 0; // 0b000
-
95 const uint8_t kToshibaAcCool = 1; // 0b001
-
96 const uint8_t kToshibaAcDry = 2; // 0b010
-
97 const uint8_t kToshibaAcHeat = 3; // 0b011
-
98 const uint8_t kToshibaAcFan = 4; // 0b100
-
99 const uint8_t kToshibaAcOff = 7; // 0b111
-
100 const uint8_t kToshibaAcFanAuto = 0; // 0b000
-
101 const uint8_t kToshibaAcFanMin = 1; // 0b001
-
102 const uint8_t kToshibaAcFanMed = 3; // 0b011
-
103 const uint8_t kToshibaAcFanMax = 5; // 0b101
-
104 
-
105 const uint8_t kToshibaAcTurboOn = 1; // 0b01
-
106 const uint8_t kToshibaAcEconoOn = 3; // 0b11
-
107 
-
108 // Legacy defines. (Deprecated)
-
109 #define TOSHIBA_AC_AUTO kToshibaAcAuto
-
110 #define TOSHIBA_AC_COOL kToshibaAcCool
-
111 #define TOSHIBA_AC_DRY kToshibaAcDry
-
112 #define TOSHIBA_AC_HEAT kToshibaAcHeat
-
113 #define TOSHIBA_AC_POWER kToshibaAcPower
-
114 #define TOSHIBA_AC_FAN_AUTO kToshibaAcFanAuto
-
115 #define TOSHIBA_AC_FAN_MAX kToshibaAcFanMax
-
116 #define TOSHIBA_AC_MIN_TEMP kToshibaAcMinTemp
-
117 #define TOSHIBA_AC_MAX_TEMP kToshibaAcMaxTemp
-
118 
-
119 // Classes
-
121 class IRToshibaAC {
-
122  public:
-
123  explicit IRToshibaAC(const uint16_t pin, const bool inverted = false,
-
124  const bool use_modulation = true);
-
125  void stateReset(void);
-
126 #if SEND_TOSHIBA_AC
-
127  void send(const uint16_t repeat = kToshibaACMinRepeat);
-
132  int8_t calibrate(void) { return _irsend.calibrate(); }
-
133 #endif // SEND_TOSHIBA_AC
-
134  void begin(void);
-
135  void on(void);
-
136  void off(void);
-
137  void setPower(const bool on);
-
138  bool getPower(void) const;
-
139  void setTemp(const uint8_t degrees);
-
140  uint8_t getTemp(void) const;
-
141  void setFan(const uint8_t speed);
-
142  uint8_t getFan(void) const;
-
143  void setTurbo(const bool on);
-
144  bool getTurbo(void) const;
-
145  void setEcono(const bool on);
-
146  bool getEcono(void) const;
-
147  void setMode(const uint8_t mode);
-
148  uint8_t getMode(const bool raw = false) const;
-
149  void setRaw(const uint8_t newState[],
-
150  const uint16_t length = kToshibaACStateLength);
-
151  uint8_t* getRaw(void);
-
152  static uint16_t getInternalStateLength(const uint8_t state[],
-
153  const uint16_t size);
-
154  uint16_t getStateLength(void) const;
-
155  static bool validChecksum(const uint8_t state[],
-
156  const uint16_t length = kToshibaACStateLength);
-
157  uint8_t getSwing(const bool raw = true) const;
-
158  void setSwing(const uint8_t setting);
-
159  static uint8_t convertMode(const stdAc::opmode_t mode);
-
160  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
161  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
162  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
163  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
164  String toString(void) const;
-
165 #ifndef UNIT_TEST
-
166 
-
167  private:
- -
169 #else // UNIT_TEST
-
170  IRsendTest _irsend;
-
172 #endif // UNIT_TEST
- - -
176  uint8_t _prev_mode;
-
177  bool _send_swing;
-
178  uint8_t _swing_mode;
-
179  void checksum(const uint16_t length = kToshibaACStateLength);
-
180  static uint8_t calcChecksum(const uint8_t state[],
-
181  const uint16_t length = kToshibaACStateLength);
-
182  void setStateLength(const uint16_t size);
-
183  void _backupState(void);
-
184  void _restoreState(void);
-
185 };
-
186 
-
187 #endif // IR_TOSHIBA_H_
-
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Toshiba.cpp:190
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Toshiba.cpp:373
-
Class for handling detailed Toshiba A/C messages.
Definition: ir_Toshiba.h:121
-
bool getEcono(void) const
Get the Economy mode setting of the A/C.
Definition: ir_Toshiba.cpp:324
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Toshiba.cpp:400
-
void setSwing(const uint8_t setting)
Set the swing setting of the A/C.
Definition: ir_Toshiba.cpp:251
-
const uint8_t kToshibaAcCool
Definition: ir_Toshiba.h:95
-
void setTurbo(const bool on)
Set the Turbo (Powerful) setting of the A/C.
Definition: ir_Toshiba.cpp:313
-
uint8_t getSwing(const bool raw=true) const
Get the swing setting of the A/C.
Definition: ir_Toshiba.cpp:245
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kToshibaACStateLength)
Calculate the checksum for a given state.
Definition: ir_Toshiba.cpp:155
-
uint8_t _swing_mode
The saved swing state/mode/command.
Definition: ir_Toshiba.h:178
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Toshiba.cpp:187
-
void _backupState(void)
Make a copy of the internal code-form A/C state.
Definition: ir_Toshiba.cpp:125
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Toshiba.cpp:345
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
static uint16_t getInternalStateLength(const uint8_t state[], const uint16_t size)
Get the length of the supplied Toshiba state per it's protocol structure.
Definition: ir_Toshiba.cpp:104
-
const uint8_t kToshibaAcFanAuto
Definition: ir_Toshiba.h:100
-
void send(const uint16_t repeat=kToshibaACMinRepeat)
Send the current internal state as IR messages.
Definition: ir_Toshiba.cpp:84
-
void setRaw(const uint8_t newState[], const uint16_t length=kToshibaACStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Toshiba.cpp:145
-
void setEcono(const bool on)
Set the Economy mode setting of the A/C.
Definition: ir_Toshiba.cpp:333
-
const uint16_t kToshibaAcInvertedLength
Nr. of leading bytes in inverted pairs.
Definition: ir_Toshiba.h:83
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Toshiba.cpp:225
-
const uint8_t kToshibaAcMinTemp
17C
Definition: ir_Toshiba.h:91
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Toshiba.h:168
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Toshiba.h:132
- -
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol with all integrity checks passing.
Definition: ir_Toshiba.cpp:137
-
void checksum(const uint16_t length=kToshibaACStateLength)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Toshiba.cpp:173
-
uint8_t raw[kToshibaACStateLengthLong]
The state in code form.
Definition: ir_Toshiba.h:42
-
uint8_t EcoTurbo
Definition: ir_Toshiba.h:74
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kToshibaAcSwingOn
0b001
Definition: ir_Toshiba.h:87
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Toshiba.cpp:194
-
std::string String
Definition: IRremoteESP8266.h:1217
-
IRToshibaAC(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Toshiba.cpp:63
-
uint8_t Fan
Definition: ir_Toshiba.h:69
-
uint16_t getStateLength(void) const
Get the length of the current internal state per the protocol structure.
Definition: ir_Toshiba.cpp:113
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Toshiba.cpp:451
-
uint8_t LongMsg
Definition: ir_Toshiba.h:58
-
const uint8_t kToshibaAcSwingOff
0b010
Definition: ir_Toshiba.h:88
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Toshiba.cpp:205
-
const uint8_t kToshibaAcFanMed
Definition: ir_Toshiba.h:102
- -
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Toshiba.cpp:79
-
const uint8_t kToshibaAcMinLength
Min Nr. of bytes in a message.
Definition: ir_Toshiba.h:81
-
const uint8_t kToshibaAcSwingStep
0b000
Definition: ir_Toshiba.h:86
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Toshiba.cpp:69
-
void _restoreState(void)
Recover the internal code-form A/C state from the backup.
Definition: ir_Toshiba.cpp:130
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Toshiba.cpp:219
-
const uint8_t kToshibaAcFan
Definition: ir_Toshiba.h:98
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Toshiba.cpp:387
-
const uint8_t kToshibaAcHeat
Definition: ir_Toshiba.h:97
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Toshiba.cpp:280
-
uint8_t Length
< Known lengths are: 1 (56 bit message) 3 (72 bit message) 4 (80 bit message)
Definition: ir_Toshiba.h:53
-
const uint8_t kToshibaAcTurboOn
Definition: ir_Toshiba.h:105
-
Native representation of a Toshiba A/C message.
Definition: ir_Toshiba.h:41
-
uint8_t Swing
Definition: ir_Toshiba.h:63
-
const uint8_t kToshibaAcLengthByte
Byte pos of the "length" attribute.
Definition: ir_Toshiba.h:80
-
uint8_t getMode(const bool raw=false) const
Get the operating mode setting of the A/C.
Definition: ir_Toshiba.cpp:267
-
uint8_t Mode
Definition: ir_Toshiba.h:67
-
const uint16_t kToshibaACMinRepeat
Definition: IRremoteESP8266.h:1112
-
const uint16_t kToshibaACStateLength
Definition: IRremoteESP8266.h:1110
-
bool _send_swing
Flag indicating if we need to send a swing message.
Definition: ir_Toshiba.h:177
-
const uint8_t kToshibaAcSwingToggle
0b100
Definition: ir_Toshiba.h:89
-
const uint16_t kToshibaACStateLengthLong
Definition: IRremoteESP8266.h:1115
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kToshibaACStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Toshiba.cpp:164
-
const uint8_t kToshibaAcDry
Definition: ir_Toshiba.h:96
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Toshiba.cpp:236
-
uint8_t backup[kToshibaACStateLengthLong]
A backup copy of the state.
Definition: ir_Toshiba.h:175
-
uint8_t ShortMsg
Definition: ir_Toshiba.h:60
-
bool getTurbo(void) const
Get the Turbo (Powerful) setting of the A/C.
Definition: ir_Toshiba.cpp:304
-
const uint8_t kToshibaAcAuto
Definition: ir_Toshiba.h:94
-
const uint8_t kToshibaAcMaxTemp
30C
Definition: ir_Toshiba.h:92
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Toshiba.cpp:359
-
void setTemp(const uint8_t degrees)
Set the temperature.
Definition: ir_Toshiba.cpp:211
-
uint8_t Temp
Definition: ir_Toshiba.h:65
-
uint8_t _prev_mode
Store of the previously set mode.
Definition: ir_Toshiba.h:176
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kToshibaAcFanMax
Definition: ir_Toshiba.h:103
-
const uint8_t kToshibaAcEconoOn
Definition: ir_Toshiba.h:106
-
ToshibaProtocol _
Definition: ir_Toshiba.h:174
-
const uint8_t kToshibaAcFanMin
Definition: ir_Toshiba.h:101
-
void setStateLength(const uint16_t size)
Set the internal length of the current internal state per the protocol.
Definition: ir_Toshiba.cpp:119
-
const uint8_t kToshibaAcOff
Definition: ir_Toshiba.h:99
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8cpp.html deleted file mode 100644 index 1da5d4788..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8cpp.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Transcold.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Transcold.cpp File Reference
-
-
- -

Support for Transcold A/C protocols. -More...

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

-Variables

const uint16_t kTranscoldHdrMark = 5944
 uSeconds. More...
 
const uint16_t kTranscoldBitMark = 555
 uSeconds. More...
 
const uint16_t kTranscoldHdrSpace = 7563
 uSeconds. More...
 
const uint16_t kTranscoldOneSpace = 3556
 uSeconds. More...
 
const uint16_t kTranscoldZeroSpace = 1526
 uSeconds. More...
 
-

Detailed Description

-

Support for Transcold A/C protocols.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1256
-

Variable Documentation

- -

◆ kTranscoldBitMark

- -
-
- - - - -
const uint16_t kTranscoldBitMark = 555
-
- -

uSeconds.

- -
-
- -

◆ kTranscoldHdrMark

- -
-
- - - - -
const uint16_t kTranscoldHdrMark = 5944
-
- -

uSeconds.

- -
-
- -

◆ kTranscoldHdrSpace

- -
-
- - - - -
const uint16_t kTranscoldHdrSpace = 7563
-
- -

uSeconds.

- -
-
- -

◆ kTranscoldOneSpace

- -
-
- - - - -
const uint16_t kTranscoldOneSpace = 3556
-
- -

uSeconds.

- -
-
- -

◆ kTranscoldZeroSpace

- -
-
- - - - -
const uint16_t kTranscoldZeroSpace = 1526
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h.html deleted file mode 100644 index a5f83afdc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h.html +++ /dev/null @@ -1,491 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Transcold.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Transcold.h File Reference
-
-
- -

Support for Transcold A/C protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  TranscoldProtocol
 Native representation of a Transcold A/C message. More...
 
class  IRTranscoldAc
 Class for handling detailed Transcold A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kTranscoldCool = 0b0110
 
const uint8_t kTranscoldDry = 0b1100
 
const uint8_t kTranscoldAuto = 0b1110
 
const uint8_t kTranscoldHeat = 0b1010
 
const uint8_t kTranscoldFan = 0b0010
 
const uint8_t kTranscoldFanMin = 0b1001
 
const uint8_t kTranscoldFanMed = 0b1101
 
const uint8_t kTranscoldFanMax = 0b1011
 
const uint8_t kTranscoldFanAuto = 0b1111
 
const uint8_t kTranscoldFanAuto0 = 0b0110
 
const uint8_t kTranscoldFanZoneFollow = 0b0000
 
const uint8_t kTranscoldFanFixed = 0b1100
 
const uint8_t kTranscoldTempMin = 18
 
const uint8_t kTranscoldTempMax = 30
 
const uint8_t kTranscoldFanTempCode = 0b1111
 
const uint8_t kTranscoldTempSize = 4
 
const uint8_t kTranscoldPrefix = 0b0000
 
const uint8_t kTranscoldUnknown = 0xFF
 
const uint32_t kTranscoldOff = 0b111011110111100101010100
 
const uint32_t kTranscoldSwing = 0b111001110110000101010100
 
const uint32_t kTranscoldSwingH = 0b111101110110000101010100
 
const uint32_t kTranscoldSwingV = 0b111001110110000101010100
 
const uint32_t kTranscoldCmdFan = 0b111011110110000101010100
 
const uint32_t kTranscoldKnownGoodState = 0xE96554
 
-

Detailed Description

-

Variable Documentation

- -

◆ kTranscoldAuto

- -
-
- - - - -
const uint8_t kTranscoldAuto = 0b1110
-
- -
-
- -

◆ kTranscoldCmdFan

- -
-
- - - - -
const uint32_t kTranscoldCmdFan = 0b111011110110000101010100
-
- -
-
- -

◆ kTranscoldCool

- -
-
- - - - -
const uint8_t kTranscoldCool = 0b0110
-
- -
-
- -

◆ kTranscoldDry

- -
-
- - - - -
const uint8_t kTranscoldDry = 0b1100
-
- -
-
- -

◆ kTranscoldFan

- -
-
- - - - -
const uint8_t kTranscoldFan = 0b0010
-
- -
-
- -

◆ kTranscoldFanAuto

- -
-
- - - - -
const uint8_t kTranscoldFanAuto = 0b1111
-
- -
-
- -

◆ kTranscoldFanAuto0

- -
-
- - - - -
const uint8_t kTranscoldFanAuto0 = 0b0110
-
- -
-
- -

◆ kTranscoldFanFixed

- -
-
- - - - -
const uint8_t kTranscoldFanFixed = 0b1100
-
- -
-
- -

◆ kTranscoldFanMax

- -
-
- - - - -
const uint8_t kTranscoldFanMax = 0b1011
-
- -
-
- -

◆ kTranscoldFanMed

- -
-
- - - - -
const uint8_t kTranscoldFanMed = 0b1101
-
- -
-
- -

◆ kTranscoldFanMin

- -
-
- - - - -
const uint8_t kTranscoldFanMin = 0b1001
-
- -
-
- -

◆ kTranscoldFanTempCode

- -
-
- - - - -
const uint8_t kTranscoldFanTempCode = 0b1111
-
- -
-
- -

◆ kTranscoldFanZoneFollow

- -
-
- - - - -
const uint8_t kTranscoldFanZoneFollow = 0b0000
-
- -
-
- -

◆ kTranscoldHeat

- -
-
- - - - -
const uint8_t kTranscoldHeat = 0b1010
-
- -
-
- -

◆ kTranscoldKnownGoodState

- -
-
- - - - -
const uint32_t kTranscoldKnownGoodState = 0xE96554
-
- -
-
- -

◆ kTranscoldOff

- -
-
- - - - -
const uint32_t kTranscoldOff = 0b111011110111100101010100
-
- -
-
- -

◆ kTranscoldPrefix

- -
-
- - - - -
const uint8_t kTranscoldPrefix = 0b0000
-
- -
-
- -

◆ kTranscoldSwing

- -
-
- - - - -
const uint32_t kTranscoldSwing = 0b111001110110000101010100
-
- -
-
- -

◆ kTranscoldSwingH

- -
-
- - - - -
const uint32_t kTranscoldSwingH = 0b111101110110000101010100
-
- -
-
- -

◆ kTranscoldSwingV

- -
-
- - - - -
const uint32_t kTranscoldSwingV = 0b111001110110000101010100
-
- -
-
- -

◆ kTranscoldTempMax

- -
-
- - - - -
const uint8_t kTranscoldTempMax = 30
-
- -
-
- -

◆ kTranscoldTempMin

- -
-
- - - - -
const uint8_t kTranscoldTempMin = 18
-
- -
-
- -

◆ kTranscoldTempSize

- -
-
- - - - -
const uint8_t kTranscoldTempSize = 4
-
- -
-
- -

◆ kTranscoldUnknown

- -
-
- - - - -
const uint8_t kTranscoldUnknown = 0xFF
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h_source.html deleted file mode 100644 index 291b32d2c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Transcold_8h_source.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Transcold.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Transcold.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 Chandrashekar Shetty (iamDshetty)
-
2 // Copyright 2020 crankyoldgit
-
3 // Copyright 2021 siriuslzx
-
4 
-
9 
-
10 // Supports:
-
11 // Brand: Transcold, Model: M1-F-NO-6 A/C
-
12 
-
13 /***************************************************************************************************************
-
14 
-
15  Raw Data Calculation: (UR 12)
-
16 //ON button
-
17 ON 24 Auto cool close (right) 111011110001000001100001100111100101010010101011
-
18 
-
19 //OFF button
-
20 OFF 24 Auto cool close (right) 111011110001000001110001100011100101010010101011
-
21 
-
22 // MODE
-
23 Hot mode 24 auto hot close (right) 111010010001011010100001010111100101010010101011
-
24 Fan mode 0 (prev24) low fan close (right) "11101001 0001011000100001110111100101010010101011"
-
25 Dry mode 24 low dry close (right) "11101001 0001011011000001 00111110 0101010010101011"
-
26 Auto Mode 0(prev24) low auto close (right) "11101001 0001011011100001 00011110 0101010010101011"
-
27 Cool Mode 24 low cool close (right) "11101001 0001011001100001 10011110 0101010010101011"
-
28 
-
29 //FAN SPEED
-
30 fan Speed low 24 low cool close (right) "11101001 0001011001100001 10011110 0101010010101011"
-
31 fan Speed medium 24 medium cool close (right) "11101101 000100100110000110011110 0101010010101011"
-
32 fan Speed high 24 high cool close (right) "11101011 000101000110000110011110 0101010010101011"
-
33 fan Speed auto 24 auto cool close (right) "11101111 000100000110000110011110 0101010010101011"
-
34 
-
35 //SWING
-
36 Swing open 24 auto cool open (left) "11110111 000010000110000110011110 0101010010101011"
-
37 Swing close 24 auto cool close (right) "11101111 000100000110000110011110 0101010010101011"
-
38 
-
39 //TEMPERATURE
-
40 temp 30degC Auto cool close (right) 111011110001000001100100100100010101010010101011
-
41 temp 29 Auto cool close (right) 111011110001000001101100100100010101010010101011
-
42 temp 28 Auto cool close (right) 111011110001000001100010100100010101010010101011
-
43 temp 27 Auto cool close (right) 111011110001000001101010100100010101010010101011
-
44 temp 26 Auto cool close (right) 111011110001000001100110100100010101010010101011
-
45 temp 25 Auto cool close (right) 111011110001000001101110100100010101010010101011
-
46 temp 24 Auto cool close (right) 111011110001000001100001100111100101010010101011
-
47 temp 23 Auto cool close (right) 111011110001000001101001100101100101010010101011
-
48 temp 22 Auto cool close (right) 111011110001000001100101100101100101010010101011
-
49 temp 21 Auto cool close (right) 111011110001000001101101100101100101010010101011
-
50 temp 20 Auto cool close (right) 111011110001000001100011100101100101010010101011
-
51 temp 19 Auto cool close (right) 111011110001000001101011100101100101010010101011
-
52 temp 18 Auto cool close (right) 111011110001000001100111100110000101010010101011
-
53 temp 17 Auto cool close (right) 111011110001000001100111100110000101010010101011
-
54 temp 16 Auto cool close (right) 111011110001000001100111100110000101010010101011
-
55 
-
56  **************************************************************************************************************/
-
57 
-
58 #ifndef IR_TRANSCOLD_H_
-
59 #define IR_TRANSCOLD_H_
-
60 
-
61 #define __STDC_LIMIT_MACROS
-
62 #include <stdint.h>
-
63 #ifndef UNIT_TEST
-
64 #include <Arduino.h>
-
65 #endif
-
66 #include "IRremoteESP8266.h"
-
67 #include "IRsend.h"
-
68 #ifdef UNIT_TEST
-
69 #include "IRsend_test.h"
-
70 #endif
-
71 
- -
74  uint32_t raw;
-
75  struct {
-
76  uint8_t :8;
-
77  uint8_t Temp :4;
-
78  uint8_t Mode :4;
-
79  uint8_t Fan :4;
-
80  uint8_t :4;
-
81  uint8_t :8;
-
82  };
-
83 };
-
84 
-
85 // Constants
-
86 // Modes
-
87 const uint8_t kTranscoldCool = 0b0110;
-
88 const uint8_t kTranscoldDry = 0b1100;
-
89 const uint8_t kTranscoldAuto = 0b1110;
-
90 const uint8_t kTranscoldHeat = 0b1010;
-
91 const uint8_t kTranscoldFan = 0b0010;
-
92 
-
93 // Fan Control
-
94 const uint8_t kTranscoldFanMin = 0b1001;
-
95 const uint8_t kTranscoldFanMed = 0b1101;
-
96 const uint8_t kTranscoldFanMax = 0b1011;
-
97 const uint8_t kTranscoldFanAuto = 0b1111;
-
98 const uint8_t kTranscoldFanAuto0 = 0b0110;
-
99 const uint8_t kTranscoldFanZoneFollow = 0b0000;
-
100 const uint8_t kTranscoldFanFixed = 0b1100;
-
101 
-
102 // Temperature
-
103 const uint8_t kTranscoldTempMin = 18; // Celsius
-
104 const uint8_t kTranscoldTempMax = 30; // Celsius
-
105 const uint8_t kTranscoldFanTempCode = 0b1111; // Part of Fan Mode.
-
106 const uint8_t kTranscoldTempSize = 4;
-
107 
-
108 const uint8_t kTranscoldPrefix = 0b0000;
-
109 const uint8_t kTranscoldUnknown = 0xFF;
-
110 const uint32_t kTranscoldOff = 0b111011110111100101010100;
-
111 const uint32_t kTranscoldSwing = 0b111001110110000101010100;
-
112 const uint32_t kTranscoldSwingH = 0b111101110110000101010100; // NA
-
113 const uint32_t kTranscoldSwingV = 0b111001110110000101010100; // NA
-
114 const uint32_t kTranscoldCmdFan = 0b111011110110000101010100; // NA
-
115 
-
116 const uint32_t kTranscoldKnownGoodState = 0xE96554;
-
117 
-
118 // Classes
- -
121  public:
-
122  explicit IRTranscoldAc(const uint16_t pin, const bool inverted = false,
-
123  const bool use_modulation = true);
-
124  void stateReset(void);
-
125 #if SEND_TRANSCOLD
-
126  void send(const uint16_t repeat = kTranscoldDefaultRepeat);
-
131  int8_t calibrate(void) { return _irsend.calibrate(); }
-
132 #endif // SEND_TRANSCOLD
-
133  void begin(void);
-
134  void on(void);
-
135  void off(void);
-
136  void setPower(const bool state);
-
137  bool getPower(void) const;
-
138  void setTemp(const uint8_t temp);
-
139  uint8_t getTemp(void) const;
-
140  void setFan(const uint8_t speed, const bool modecheck = true);
-
141  uint8_t getFan(void) const;
-
142  void setMode(const uint8_t mode);
-
143  uint8_t getMode(void) const;
-
144  void setSwing(void);
-
145  bool getSwing(void) const;
-
146  uint32_t getRaw(void) const;
-
147  void setRaw(const uint32_t new_code);
-
148  static uint8_t convertMode(const stdAc::opmode_t mode);
-
149  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
150  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
151  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
152  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
153  String toString(void) const;
-
154 #ifndef UNIT_TEST
-
155 
-
156  private:
- -
158 #else
-
159  IRsendTest _irsend;
-
161 #endif
-
163  // internal state
-
164  bool swingFlag;
- - -
167 
- -
169  uint32_t special_state;
-
170  bool isSpecialState(void) const;
-
171  bool handleSpecialState(const uint32_t data);
-
172 };
-
173 
-
174 #endif // IR_TRANSCOLD_H_
-
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition: ir_Transcold.cpp:316
-
const uint8_t kTranscoldFanFixed
Definition: ir_Transcold.h:100
-
String toString(void) const
Convert the internal state into a human readable string.
Definition: ir_Transcold.cpp:388
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Transcold.cpp:88
-
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition: ir_Transcold.cpp:79
-
const uint32_t kTranscoldSwing
Definition: ir_Transcold.h:111
-
IRTranscoldAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Transcold.cpp:74
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kTranscoldFanMed
Definition: ir_Transcold.h:95
-
const uint32_t kTranscoldOff
Definition: ir_Transcold.h:110
-
bool getSwing(void) const
Get the Swing setting of the A/C.
Definition: ir_Transcold.cpp:201
-
const uint8_t kTranscoldUnknown
Definition: ir_Transcold.h:109
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Transcold.cpp:213
-
uint32_t raw
The state of the IR remote in IR code form.
Definition: ir_Transcold.h:74
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Transcold.cpp:329
-
const uint32_t kTranscoldSwingH
Definition: ir_Transcold.h:112
-
void setRaw(const uint32_t new_code)
Set the internal state from a valid code for this protocol.
Definition: ir_Transcold.cpp:114
-
const uint16_t kTranscoldDefaultRepeat
Definition: IRremoteESP8266.h:1118
-
void setPower(const bool state)
Change the power setting.
Definition: ir_Transcold.cpp:185
-
const uint8_t kTranscoldPrefix
Definition: ir_Transcold.h:108
- -
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
void setFan(const uint8_t speed, const bool modecheck=true)
Set the speed of the fan.
Definition: ir_Transcold.cpp:256
-
void on(void)
Change the power setting to On.
Definition: ir_Transcold.cpp:194
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kTranscoldCool
Definition: ir_Transcold.h:87
-
const uint8_t kTranscoldHeat
Definition: ir_Transcold.h:90
-
const uint8_t kTranscoldFanAuto0
Definition: ir_Transcold.h:98
-
bool handleSpecialState(const uint32_t data)
Adjust any internal settings based on the type of special state we are supplied. Does nothing if it i...
Definition: ir_Transcold.cpp:146
-
uint32_t getRaw(void) const
Get a copy of the internal state as a valid code for this protocol.
Definition: ir_Transcold.cpp:105
- -
bool swingHFlag
Definition: ir_Transcold.h:165
-
const uint8_t kTranscoldFanZoneFollow
Definition: ir_Transcold.h:99
-
uint8_t Mode
Definition: ir_Transcold.h:78
-
TranscoldProtocol _
Definition: ir_Transcold.h:168
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Transcold.h:157
-
const uint8_t kTranscoldTempSize
Definition: ir_Transcold.h:106
-
bool isSpecialState(void) const
Is the current state is a special state?
Definition: ir_Transcold.cpp:132
-
const uint32_t kTranscoldKnownGoodState
Definition: ir_Transcold.h:116
-
const uint8_t kTranscoldFanAuto
Definition: ir_Transcold.h:97
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Transcold.cpp:161
-
Native representation of a Transcold A/C message.
Definition: ir_Transcold.h:73
-
bool swingFlag
Definition: ir_Transcold.h:164
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Transcold.cpp:178
-
const uint8_t kTranscoldFanTempCode
Definition: ir_Transcold.h:105
-
const uint8_t kTranscoldFanMax
Definition: ir_Transcold.h:96
-
void off(void)
Change the power setting to Off.
Definition: ir_Transcold.cpp:197
-
void setSwing(void)
Toggle the Swing mode of the A/C.
Definition: ir_Transcold.cpp:204
-
const uint8_t kTranscoldTempMin
Definition: ir_Transcold.h:103
-
bool swingVFlag
Definition: ir_Transcold.h:166
-
uint8_t Temp
Definition: ir_Transcold.h:77
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the A/C state to it's common stdAc::state_t equivalent.
Definition: ir_Transcold.cpp:341
-
Class for handling detailed Transcold A/C messages.
Definition: ir_Transcold.h:120
-
const uint32_t kTranscoldSwingV
Definition: ir_Transcold.h:113
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Transcold.cpp:249
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Transcold.cpp:302
-
uint32_t special_state
special mode.
Definition: ir_Transcold.h:169
-
const uint8_t kTranscoldAuto
Definition: ir_Transcold.h:89
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Transcold.cpp:171
-
void send(const uint16_t repeat=kTranscoldDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Transcold.cpp:93
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition: ir_Transcold.cpp:289
-
const uint32_t kTranscoldCmdFan
Definition: ir_Transcold.h:114
-
const uint8_t kTranscoldFanMin
Definition: ir_Transcold.h:94
-
const uint8_t kTranscoldFan
Definition: ir_Transcold.h:91
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Transcold.cpp:240
-
const uint8_t kTranscoldTempMax
Definition: ir_Transcold.h:104
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kTranscoldDry
Definition: ir_Transcold.h:88
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Transcold.h:131
-
uint8_t Fan
Definition: ir_Transcold.h:79
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8cpp.html deleted file mode 100644 index 3d4b6e325..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8cpp.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Trotec.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Trotec.cpp File Reference
-
-
- -

Support for Trotec protocols. -More...

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

-Variables

const uint16_t kTrotecHdrMark = 5952
 
const uint16_t kTrotecHdrSpace = 7364
 
const uint16_t kTrotecBitMark = 592
 
const uint16_t kTrotecOneSpace = 1560
 
const uint16_t kTrotecZeroSpace = 592
 
const uint16_t kTrotecGap = 6184
 
const uint16_t kTrotecGapEnd = 1500
 
-

Detailed Description

-

Variable Documentation

- -

◆ kTrotecBitMark

- -
-
- - - - -
const uint16_t kTrotecBitMark = 592
-
- -
-
- -

◆ kTrotecGap

- -
-
- - - - -
const uint16_t kTrotecGap = 6184
-
- -
-
- -

◆ kTrotecGapEnd

- -
-
- - - - -
const uint16_t kTrotecGapEnd = 1500
-
- -
-
- -

◆ kTrotecHdrMark

- -
-
- - - - -
const uint16_t kTrotecHdrMark = 5952
-
- -
-
- -

◆ kTrotecHdrSpace

- -
-
- - - - -
const uint16_t kTrotecHdrSpace = 7364
-
- -
-
- -

◆ kTrotecOneSpace

- -
-
- - - - -
const uint16_t kTrotecOneSpace = 1560
-
- -
-
- -

◆ kTrotecZeroSpace

- -
-
- - - - -
const uint16_t kTrotecZeroSpace = 592
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h.html deleted file mode 100644 index 551181c55..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Trotec.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Trotec.h File Reference
-
-
- -

Support for Trotec protocols. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  TrotecProtocol
 Native representation of a Trotec A/C message. More...
 
class  IRTrotecESP
 Class for handling detailed Trotec A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kTrotecIntro1 = 0x12
 
const uint8_t kTrotecIntro2 = 0x34
 
const uint8_t kTrotecAuto = 0
 
const uint8_t kTrotecCool = 1
 
const uint8_t kTrotecDry = 2
 
const uint8_t kTrotecFan = 3
 
const uint8_t kTrotecFanLow = 1
 
const uint8_t kTrotecFanMed = 2
 
const uint8_t kTrotecFanHigh = 3
 
const uint8_t kTrotecMinTemp = 18
 
const uint8_t kTrotecDefTemp = 25
 
const uint8_t kTrotecMaxTemp = 32
 
const uint8_t kTrotecMaxTimer = 23
 
-

Detailed Description

-

Variable Documentation

- -

◆ kTrotecAuto

- -
-
- - - - -
const uint8_t kTrotecAuto = 0
-
- -
-
- -

◆ kTrotecCool

- -
-
- - - - -
const uint8_t kTrotecCool = 1
-
- -
-
- -

◆ kTrotecDefTemp

- -
-
- - - - -
const uint8_t kTrotecDefTemp = 25
-
- -
-
- -

◆ kTrotecDry

- -
-
- - - - -
const uint8_t kTrotecDry = 2
-
- -
-
- -

◆ kTrotecFan

- -
-
- - - - -
const uint8_t kTrotecFan = 3
-
- -
-
- -

◆ kTrotecFanHigh

- -
-
- - - - -
const uint8_t kTrotecFanHigh = 3
-
- -
-
- -

◆ kTrotecFanLow

- -
-
- - - - -
const uint8_t kTrotecFanLow = 1
-
- -
-
- -

◆ kTrotecFanMed

- -
-
- - - - -
const uint8_t kTrotecFanMed = 2
-
- -
-
- -

◆ kTrotecIntro1

- -
-
- - - - -
const uint8_t kTrotecIntro1 = 0x12
-
- -
-
- -

◆ kTrotecIntro2

- -
-
- - - - -
const uint8_t kTrotecIntro2 = 0x34
-
- -
-
- -

◆ kTrotecMaxTemp

- -
-
- - - - -
const uint8_t kTrotecMaxTemp = 32
-
- -
-
- -

◆ kTrotecMaxTimer

- -
-
- - - - -
const uint8_t kTrotecMaxTimer = 23
-
- -
-
- -

◆ kTrotecMinTemp

- -
-
- - - - -
const uint8_t kTrotecMinTemp = 18
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h_source.html deleted file mode 100644 index 7c89f212d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Trotec_8h_source.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Trotec.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Trotec.h
-
-
-Go to the documentation of this file.
1 // Copyright 2017 stufisher
-
2 // Copyright 2019 crankyoldgit
-
3 
-
8 
-
9 // Supports:
-
10 // Brand: Trotec, Model: PAC 3200 A/C
-
11 // Brand: Duux, Model: Blizzard Smart 10K / DXMA04 A/C
-
12 
-
13 #ifndef IR_TROTEC_H_
-
14 #define IR_TROTEC_H_
-
15 
-
16 #ifndef UNIT_TEST
-
17 #include <Arduino.h>
-
18 #endif
-
19 #include "IRremoteESP8266.h"
-
20 #include "IRsend.h"
-
21 #ifdef UNIT_TEST
-
22 #include "IRsend_test.h"
-
23 #endif
-
24 
- - -
28  struct {
-
29  // Byte 0
-
30  uint8_t Intro1:8; // fixed value
-
31  // Byte 1
-
32  uint8_t Intro2:8; // fixed value
-
33  // Byte 2
-
34  uint8_t Mode :2;
-
35  uint8_t :1;
-
36  uint8_t Power :1;
-
37  uint8_t Fan :2;
-
38  uint8_t :2;
-
39  // Byte 3
-
40  uint8_t Temp :4;
-
41  uint8_t :3;
-
42  uint8_t Sleep :1;
-
43  // Byte 4
-
44  uint8_t :8;
-
45  // Byte 5
-
46  uint8_t :6;
-
47  uint8_t Timer :1;
-
48  uint8_t :1;
-
49  // Byte 6
-
50  uint8_t Hours :8;
-
51  // Byte 7
-
52  uint8_t :8;
-
53  // Byte 8
-
54  uint8_t Sum :8;
-
55  };
-
56 };
-
57 
-
58 // Constants
-
59 const uint8_t kTrotecIntro1 = 0x12;
-
60 const uint8_t kTrotecIntro2 = 0x34;
-
61 
-
62 const uint8_t kTrotecAuto = 0;
-
63 const uint8_t kTrotecCool = 1;
-
64 const uint8_t kTrotecDry = 2;
-
65 const uint8_t kTrotecFan = 3;
-
66 
-
67 const uint8_t kTrotecFanLow = 1;
-
68 const uint8_t kTrotecFanMed = 2;
-
69 const uint8_t kTrotecFanHigh = 3;
-
70 
-
71 const uint8_t kTrotecMinTemp = 18;
-
72 const uint8_t kTrotecDefTemp = 25;
-
73 const uint8_t kTrotecMaxTemp = 32;
-
74 
-
75 const uint8_t kTrotecMaxTimer = 23;
-
76 
-
77 // Legacy defines. (Deprecated)
-
78 #define TROTEC_AUTO kTrotecAuto
-
79 #define TROTEC_COOL kTrotecCool
-
80 #define TROTEC_DRY kTrotecDry
-
81 #define TROTEC_FAN kTrotecFan
-
82 #define TROTEC_FAN_LOW kTrotecFanLow
-
83 #define TROTEC_FAN_MED kTrotecFanMed
-
84 #define TROTEC_FAN_HIGH kTrotecFanHigh
-
85 #define TROTEC_MIN_TEMP kTrotecMinTemp
-
86 #define TROTEC_MAX_TEMP kTrotecMaxTemp
-
87 #define TROTEC_MAX_TIMER kTrotecMaxTimer
-
88 
-
89 // Class
-
91 class IRTrotecESP {
-
92  public:
-
93  explicit IRTrotecESP(const uint16_t pin, const bool inverted = false,
-
94  const bool use_modulation = true);
-
95 #if SEND_TROTEC
-
96  void send(const uint16_t repeat = kTrotecDefaultRepeat);
-
101  int8_t calibrate(void) { return _irsend.calibrate(); }
-
102 #endif // SEND_TROTEC
-
103  void begin(void);
-
104  void stateReset(void);
-
105 
-
106  void on(void);
-
107  void off(void);
-
108  void setPower(const bool state);
-
109  bool getPower(void) const;
-
110 
-
111  void setTemp(const uint8_t celsius);
-
112  uint8_t getTemp(void) const;
-
113 
-
114  void setSpeed(const uint8_t fan);
-
115  uint8_t getSpeed(void) const;
-
116 
-
117  void setFan(const uint8_t fan) { setSpeed(fan); }
-
118  uint8_t getFan(void) const { return getSpeed(); }
-
119 
-
120  uint8_t getMode(void) const;
-
121  void setMode(const uint8_t mode);
-
122 
-
123  bool getSleep(void) const;
-
124  void setSleep(const bool on);
-
125 
-
126  uint8_t getTimer(void) const;
-
127  void setTimer(const uint8_t timer);
-
128 
-
129  uint8_t* getRaw(void);
-
130  void setRaw(const uint8_t state[]);
-
131  static bool validChecksum(const uint8_t state[],
-
132  const uint16_t length = kTrotecStateLength);
-
133  static uint8_t convertMode(const stdAc::opmode_t mode);
-
134  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
135  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
136  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
137  stdAc::state_t toCommon(void) const;
-
138  String toString(void) const;
-
139 #ifndef UNIT_TEST
-
140 
-
141  private:
- -
143 #else // UNIT_TEST
-
144  IRsendTest _irsend;
-
146 #endif // UNIT_TEST
- -
149  static uint8_t calcChecksum(const uint8_t state[],
-
150  const uint16_t length = kTrotecStateLength);
-
151  void checksum(void);
-
152 };
-
153 
-
154 #endif // IR_TROTEC_H_
-
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Trotec.cpp:259
-
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Trotec.cpp:96
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Trotec.cpp:165
-
uint8_t Hours
Definition: ir_Trotec.h:50
-
const uint16_t kTrotecDefaultRepeat
Definition: IRremoteESP8266.h:1121
-
uint8_t Sleep
Definition: ir_Trotec.h:42
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Trotec.cpp:285
-
void setFan(const uint8_t fan)
Definition: ir_Trotec.h:117
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Trotec.cpp:68
-
uint8_t Intro1
Definition: ir_Trotec.h:30
-
const uint8_t kTrotecFanMed
Definition: ir_Trotec.h:68
-
uint8_t getTimer(void) const
Get the timer time in nr. of Hours.
Definition: ir_Trotec.cpp:204
- -
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Trotec.cpp:115
-
const uint8_t kTrotecIntro2
Definition: ir_Trotec.h:60
-
uint8_t Power
Definition: ir_Trotec.h:36
-
const uint8_t kTrotecFanHigh
Definition: ir_Trotec.h:69
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
uint8_t Sum
Definition: ir_Trotec.h:54
-
std::string String
Definition: IRremoteESP8266.h:1217
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Trotec.cpp:140
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kTrotecStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Trotec.cpp:91
-
const uint8_t kTrotecMinTemp
Definition: ir_Trotec.h:71
-
const uint8_t kTrotecDefTemp
Definition: ir_Trotec.h:72
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Trotec.cpp:127
-
const uint8_t kTrotecMaxTimer
Definition: ir_Trotec.h:75
- -
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Trotec.cpp:191
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Trotec.cpp:209
-
Native representation of a Trotec A/C message.
Definition: ir_Trotec.h:26
-
const uint8_t kTrotecDry
Definition: ir_Trotec.h:64
-
void setTemp(const uint8_t celsius)
Set the temperature.
Definition: ir_Trotec.cpp:171
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Trotec.cpp:159
-
const uint16_t kTrotecStateLength
Definition: IRremoteESP8266.h:1119
-
uint8_t Temp
Definition: ir_Trotec.h:40
-
const uint8_t kTrotecMaxTemp
Definition: ir_Trotec.h:73
-
const uint8_t kTrotecFanLow
Definition: ir_Trotec.h:67
-
uint8_t raw[kTrotecStateLength]
Remote state in IR code form.
Definition: ir_Trotec.h:27
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Trotec.cpp:101
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Trotec.h:101
-
void setTimer(const uint8_t timer)
Set the timer time in nr. of Hours.
Definition: ir_Trotec.cpp:197
-
uint8_t Mode
Definition: ir_Trotec.h:34
-
uint8_t getFan(void) const
Definition: ir_Trotec.h:118
-
void setPower(const bool state)
Change the power setting.
Definition: ir_Trotec.cpp:134
-
const uint8_t kTrotecFan
Definition: ir_Trotec.h:65
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Trotec.cpp:236
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Trotec.h:142
-
const uint8_t kTrotecCool
Definition: ir_Trotec.h:63
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Trotec.cpp:185
-
uint8_t getSpeed(void) const
Get the current fan speed setting.
Definition: ir_Trotec.cpp:153
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Trotec.cpp:130
-
uint8_t Intro2
Definition: ir_Trotec.h:32
-
TrotecProtocol _
Definition: ir_Trotec.h:148
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kTrotecStateLength)
Calculate the checksum for a given state.
Definition: ir_Trotec.cpp:82
-
void send(const uint16_t repeat=kTrotecDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Trotec.cpp:73
-
uint8_t Fan
Definition: ir_Trotec.h:37
-
const uint8_t kTrotecAuto
Definition: ir_Trotec.h:62
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Trotec.cpp:248
-
Class for handling detailed Trotec A/C messages.
Definition: ir_Trotec.h:91
-
IRTrotecESP(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Trotec.cpp:63
-
uint8_t Timer
Definition: ir_Trotec.h:47
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Trotec.cpp:222
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kTrotecIntro1
Definition: ir_Trotec.h:59
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Trotec.cpp:179
-
void setRaw(const uint8_t state[])
Set the internal state from a valid code for this protocol.
Definition: ir_Trotec.cpp:122
-
void setSpeed(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Trotec.cpp:146
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8cpp.html deleted file mode 100644 index 50403bc0c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8cpp.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Truma.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Truma.cpp File Reference
-
-
- -

Support for Truma protocol. This protocol uses mark length bit encoding. -More...

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

-Variables

const uint16_t kTrumaLdrMark = 20200
 
const uint16_t kTrumaLdrSpace = 1000
 
const uint16_t kTrumaHdrMark = 1800
 
const uint16_t kTrumaSpace = 630
 
const uint16_t kTrumaOneMark = 600
 
const uint16_t kTrumaZeroMark = 1200
 
const uint16_t kTrumaFooterMark = kTrumaOneMark
 
const uint32_t kTrumaGap = kDefaultMessageGap
 
-

Detailed Description

-

Variable Documentation

- -

◆ kTrumaFooterMark

- -
-
- - - - -
const uint16_t kTrumaFooterMark = kTrumaOneMark
-
- -
-
- -

◆ kTrumaGap

- -
-
- - - - -
const uint32_t kTrumaGap = kDefaultMessageGap
-
- -
-
- -

◆ kTrumaHdrMark

- -
-
- - - - -
const uint16_t kTrumaHdrMark = 1800
-
- -
-
- -

◆ kTrumaLdrMark

- -
-
- - - - -
const uint16_t kTrumaLdrMark = 20200
-
- -
-
- -

◆ kTrumaLdrSpace

- -
-
- - - - -
const uint16_t kTrumaLdrSpace = 1000
-
- -
-
- -

◆ kTrumaOneMark

- -
-
- - - - -
const uint16_t kTrumaOneMark = 600
-
- -
-
- -

◆ kTrumaSpace

- -
-
- - - - -
const uint16_t kTrumaSpace = 630
-
- -
-
- -

◆ kTrumaZeroMark

- -
-
- - - - -
const uint16_t kTrumaZeroMark = 1200
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h.html deleted file mode 100644 index e53122cd8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Truma.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Truma.h File Reference
-
-
- -

Support for Truma protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  TrumaProtocol
 Native representation of a Truma A/C message. More...
 
class  IRTrumaAc
 Class for handling detailed Truma A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint64_t kTrumaDefaultState = 0x50FFFFFFE6E781
 Off, Auto, 16C, High. More...
 
const uint8_t kTrumaChecksumInit = 5
 
const uint8_t kTrumaAuto = 0
 
const uint8_t kTrumaCool = 2
 
const uint8_t kTrumaFan = 3
 
const uint8_t kTrumaFanQuiet = 3
 
const uint8_t kTrumaFanHigh = 4
 
const uint8_t kTrumaFanMed = 5
 
const uint8_t kTrumaFanLow = 6
 
const uint8_t kTrumaTempOffset = 10
 
const uint8_t kTrumaMinTemp = 16
 
const uint8_t kTrumaMaxTemp = 31
 
-

Detailed Description

-

Variable Documentation

- -

◆ kTrumaAuto

- -
-
- - - - -
const uint8_t kTrumaAuto = 0
-
- -
-
- -

◆ kTrumaChecksumInit

- -
-
- - - - -
const uint8_t kTrumaChecksumInit = 5
-
- -
-
- -

◆ kTrumaCool

- -
-
- - - - -
const uint8_t kTrumaCool = 2
-
- -
-
- -

◆ kTrumaDefaultState

- -
-
- - - - -
const uint64_t kTrumaDefaultState = 0x50FFFFFFE6E781
-
- -

Off, Auto, 16C, High.

- -
-
- -

◆ kTrumaFan

- -
-
- - - - -
const uint8_t kTrumaFan = 3
-
- -
-
- -

◆ kTrumaFanHigh

- -
-
- - - - -
const uint8_t kTrumaFanHigh = 4
-
- -
-
- -

◆ kTrumaFanLow

- -
-
- - - - -
const uint8_t kTrumaFanLow = 6
-
- -
-
- -

◆ kTrumaFanMed

- -
-
- - - - -
const uint8_t kTrumaFanMed = 5
-
- -
-
- -

◆ kTrumaFanQuiet

- -
-
- - - - -
const uint8_t kTrumaFanQuiet = 3
-
- -
-
- -

◆ kTrumaMaxTemp

- -
-
- - - - -
const uint8_t kTrumaMaxTemp = 31
-
- -
-
- -

◆ kTrumaMinTemp

- -
-
- - - - -
const uint8_t kTrumaMinTemp = 16
-
- -
-
- -

◆ kTrumaTempOffset

- -
-
- - - - -
const uint8_t kTrumaTempOffset = 10
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h_source.html deleted file mode 100644 index 5ce3adee8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Truma_8h_source.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Truma.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Truma.h
-
-
-Go to the documentation of this file.
1 // Copyright 2021 David Conran (crankyoldgit)
-
2 
-
7 
-
8 // Supports:
-
9 // Brand: Truma, Model: Aventa A/C
-
10 // Brand: Truma, Model: 40091-86700 remote
-
11 
-
12 #ifndef IR_TRUMA_H_
-
13 #define IR_TRUMA_H_
-
14 
-
15 #ifndef UNIT_TEST
-
16 #include <Arduino.h>
-
17 #endif
-
18 #include "IRremoteESP8266.h"
-
19 #include "IRsend.h"
-
20 #ifdef UNIT_TEST
-
21 #include "IRsend_test.h"
-
22 #endif
-
23 
- -
26  uint64_t raw;
-
27  struct {
-
28  // Byte 0 (least significant byte)
-
29  uint8_t :8; // fixed value (0x81)
-
30  // Byte 1
-
31  uint8_t Mode :2;
-
32  uint8_t PowerOff :1;
-
33  uint8_t Fan :3;
-
34  uint8_t :2; // fixed value (0b11)
-
35  // Byte 2
-
36  uint8_t Temp:5;
-
37  uint8_t :3;
-
38  // Byte 3
-
39  uint8_t :8; // fixed value (0xFF)
-
40  // Byte 4
-
41  uint8_t :8; // fixed value (0xFF)
-
42  // Byte 5
-
43  uint8_t :8; // fixed value (0xFF)
-
44  // Byte 6
-
45  uint8_t Sum:8;
-
46  };
-
47 };
-
48 
-
49 // Constants
-
50 const uint64_t kTrumaDefaultState = 0x50FFFFFFE6E781;
-
51 const uint8_t kTrumaChecksumInit = 5;
-
52 
-
53 const uint8_t kTrumaAuto = 0; // 0b00
-
54 const uint8_t kTrumaCool = 2; // 0b10
-
55 const uint8_t kTrumaFan = 3; // 0b11
-
56 
-
57 const uint8_t kTrumaFanQuiet = 3; // 0b011
-
58 const uint8_t kTrumaFanHigh = 4; // 0b100
-
59 const uint8_t kTrumaFanMed = 5; // 0b101
-
60 const uint8_t kTrumaFanLow = 6; // 0b110
-
61 
-
62 const uint8_t kTrumaTempOffset = 10;
-
63 const uint8_t kTrumaMinTemp = 16;
-
64 const uint8_t kTrumaMaxTemp = 31;
-
65 
-
66 
-
67 // Class
-
69 class IRTrumaAc {
-
70  public:
-
71  explicit IRTrumaAc(const uint16_t pin, const bool inverted = false,
-
72  const bool use_modulation = true);
-
73 #if SEND_TRUMA
-
74  void send(const uint16_t repeat = kNoRepeat);
-
79  int8_t calibrate(void) { return _irsend.calibrate(); }
-
80 #endif // SEND_TRUMA
-
81  void begin(void);
-
82  void stateReset(void);
-
83 
-
84  void on(void);
-
85  void off(void);
-
86  void setPower(const bool on);
-
87  bool getPower(void) const;
-
88 
-
89  void setTemp(const uint8_t celsius);
-
90  uint8_t getTemp(void) const;
-
91 
-
92  void setFan(const uint8_t speed);
-
93  uint8_t getFan(void) const;
-
94 
-
95  uint8_t getMode(void) const;
-
96  void setMode(const uint8_t mode);
-
97 
-
98  void setQuiet(const bool on);
-
99  bool getQuiet(void) const;
-
100 
-
101  uint64_t getRaw(void);
-
102  void setRaw(const uint64_t state);
-
103  static bool validChecksum(const uint64_t state);
-
104  static uint8_t convertMode(const stdAc::opmode_t mode);
-
105  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
106  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
107  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
108  stdAc::state_t toCommon(void) const;
-
109  String toString(void) const;
-
110 #ifndef UNIT_TEST
-
111 
-
112  private:
- -
114 #else // UNIT_TEST
-
115  IRsendTest _irsend;
-
117 #endif // UNIT_TEST
- -
120  uint8_t _lastfan; // Last user chosen/valid fan speed.
-
121  uint8_t _lastmode; // Last user chosen operation mode.
-
122  static uint8_t calcChecksum(const uint64_t state);
-
123  void checksum(void);
-
124 };
-
125 
-
126 #endif // IR_TRUMA_H_
-
-
void setTemp(const uint8_t celsius)
Set the temperature.
Definition: ir_Truma.cpp:225
-
const uint8_t kTrumaFanQuiet
Definition: ir_Truma.h:57
-
const uint8_t kTrumaCool
Definition: ir_Truma.h:54
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Truma.cpp:275
-
void setQuiet(const bool on)
Change the Quiet setting.
Definition: ir_Truma.cpp:238
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Truma.cpp:200
-
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Truma.cpp:143
-
const uint8_t kTrumaMaxTemp
Definition: ir_Truma.h:64
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Truma.cpp:221
-
const uint64_t kTrumaDefaultState
Off, Auto, 16C, High.
Definition: ir_Truma.h:50
-
const uint8_t kTrumaMinTemp
Definition: ir_Truma.h:63
-
const uint8_t kTrumaAuto
Definition: ir_Truma.h:53
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Truma.cpp:286
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Truma.h:79
-
uint8_t Fan
Definition: ir_Truma.h:33
- -
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Truma.cpp:204
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Truma.cpp:146
-
const uint8_t kTrumaTempOffset
Definition: ir_Truma.h:62
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint64_t raw
Remote state in IR code form.
Definition: ir_Truma.h:26
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Truma.cpp:110
-
const uint8_t kTrumaChecksumInit
Definition: ir_Truma.h:51
-
std::string String
Definition: IRremoteESP8266.h:1217
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Truma.cpp:167
-
bool getQuiet(void) const
Get the value of the current quiet setting.
Definition: ir_Truma.cpp:247
- -
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Truma.cpp:157
-
TrumaProtocol _
Definition: ir_Truma.h:119
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Truma.cpp:136
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Truma.cpp:171
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Truma.h:113
-
uint8_t Mode
Definition: ir_Truma.h:31
-
uint8_t Temp
Temp in DegC minus 10(DEC).
Definition: ir_Truma.h:36
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Truma.cpp:233
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Truma.cpp:182
-
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_Truma.cpp:115
-
uint8_t _lastfan
Definition: ir_Truma.h:120
-
IRTrumaAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Truma.cpp:105
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Truma.cpp:327
-
Native representation of a Truma A/C message.
Definition: ir_Truma.h:25
-
uint8_t Sum
Checksum value.
Definition: ir_Truma.h:45
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Truma.cpp:297
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Truma.cpp:164
-
const uint8_t kTrumaFan
Definition: ir_Truma.h:55
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Truma.cpp:263
-
const uint8_t kTrumaFanMed
Definition: ir_Truma.h:59
-
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Truma.cpp:150
-
Class for handling detailed Truma A/C messages.
Definition: ir_Truma.h:69
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Truma.cpp:123
-
uint8_t PowerOff
Definition: ir_Truma.h:32
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Truma.cpp:178
-
const uint8_t kTrumaFanHigh
Definition: ir_Truma.h:58
-
uint8_t _lastmode
Definition: ir_Truma.h:121
-
const uint8_t kTrumaFanLow
Definition: ir_Truma.h:60
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Truma.cpp:252
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8cpp.html deleted file mode 100644 index 36b147b25..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8cpp.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Vestel.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Vestel.cpp File Reference
-
-
- -

Support for Vestel protocols. Vestel added by Erdem U. Altinyurt. -More...

-

Detailed Description

-

Support for Vestel protocols. Vestel added by Erdem U. Altinyurt.

-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h.html deleted file mode 100644 index 865c3b883..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Vestel.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Vestel.h File Reference
-
-
- -

Support for Vestel protocols. Vestel added by Erdem U. Altinyurt. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  VestelProtocol
 Native representation of a Vestel A/C message. More...
 
class  IRVestelAc
 Class for handling detailed Vestel A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kVestelAcHdrMark = 3110
 
const uint16_t kVestelAcHdrSpace = 9066
 
const uint16_t kVestelAcBitMark = 520
 
const uint16_t kVestelAcOneSpace = 1535
 
const uint16_t kVestelAcZeroSpace = 480
 
const uint16_t kVestelAcTolerance = 30
 
const uint8_t kVestelAcMinTempH = 16
 
const uint8_t kVestelAcMinTempC = 18
 
const uint8_t kVestelAcMaxTemp = 30
 
const uint8_t kVestelAcAuto = 0
 
const uint8_t kVestelAcCool = 1
 
const uint8_t kVestelAcDry = 2
 
const uint8_t kVestelAcFan = 3
 
const uint8_t kVestelAcHeat = 4
 
const uint8_t kVestelAcFanAuto = 1
 
const uint8_t kVestelAcFanLow = 5
 
const uint8_t kVestelAcFanMed = 9
 
const uint8_t kVestelAcFanHigh = 0xB
 
const uint8_t kVestelAcFanAutoCool = 0xC
 
const uint8_t kVestelAcFanAutoHot = 0xD
 
const uint8_t kVestelAcNormal = 1
 
const uint8_t kVestelAcSleep = 3
 
const uint8_t kVestelAcTurbo = 7
 
const uint8_t kVestelAcIon = 4
 
const uint8_t kVestelAcSwing = 0xA
 
const uint64_t kVestelAcStateDefault = 0x0F00D9001FEF201ULL
 
const uint64_t kVestelAcTimeStateDefault = 0x201ULL
 
-

Detailed Description

-

Support for Vestel protocols. Vestel added by Erdem U. Altinyurt.

-

Variable Documentation

- -

◆ kVestelAcAuto

- -
-
- - - - -
const uint8_t kVestelAcAuto = 0
-
- -
-
- -

◆ kVestelAcBitMark

- -
-
- - - - -
const uint16_t kVestelAcBitMark = 520
-
- -
-
- -

◆ kVestelAcCool

- -
-
- - - - -
const uint8_t kVestelAcCool = 1
-
- -
-
- -

◆ kVestelAcDry

- -
-
- - - - -
const uint8_t kVestelAcDry = 2
-
- -
-
- -

◆ kVestelAcFan

- -
-
- - - - -
const uint8_t kVestelAcFan = 3
-
- -
-
- -

◆ kVestelAcFanAuto

- -
-
- - - - -
const uint8_t kVestelAcFanAuto = 1
-
- -
-
- -

◆ kVestelAcFanAutoCool

- -
-
- - - - -
const uint8_t kVestelAcFanAutoCool = 0xC
-
- -
-
- -

◆ kVestelAcFanAutoHot

- -
-
- - - - -
const uint8_t kVestelAcFanAutoHot = 0xD
-
- -
-
- -

◆ kVestelAcFanHigh

- -
-
- - - - -
const uint8_t kVestelAcFanHigh = 0xB
-
- -
-
- -

◆ kVestelAcFanLow

- -
-
- - - - -
const uint8_t kVestelAcFanLow = 5
-
- -
-
- -

◆ kVestelAcFanMed

- -
-
- - - - -
const uint8_t kVestelAcFanMed = 9
-
- -
-
- -

◆ kVestelAcHdrMark

- -
-
- - - - -
const uint16_t kVestelAcHdrMark = 3110
-
- -
-
- -

◆ kVestelAcHdrSpace

- -
-
- - - - -
const uint16_t kVestelAcHdrSpace = 9066
-
- -
-
- -

◆ kVestelAcHeat

- -
-
- - - - -
const uint8_t kVestelAcHeat = 4
-
- -
-
- -

◆ kVestelAcIon

- -
-
- - - - -
const uint8_t kVestelAcIon = 4
-
- -
-
- -

◆ kVestelAcMaxTemp

- -
-
- - - - -
const uint8_t kVestelAcMaxTemp = 30
-
- -
-
- -

◆ kVestelAcMinTempC

- -
-
- - - - -
const uint8_t kVestelAcMinTempC = 18
-
- -
-
- -

◆ kVestelAcMinTempH

- -
-
- - - - -
const uint8_t kVestelAcMinTempH = 16
-
- -
-
- -

◆ kVestelAcNormal

- -
-
- - - - -
const uint8_t kVestelAcNormal = 1
-
- -
-
- -

◆ kVestelAcOneSpace

- -
-
- - - - -
const uint16_t kVestelAcOneSpace = 1535
-
- -
-
- -

◆ kVestelAcSleep

- -
-
- - - - -
const uint8_t kVestelAcSleep = 3
-
- -
-
- -

◆ kVestelAcStateDefault

- -
-
- - - - -
const uint64_t kVestelAcStateDefault = 0x0F00D9001FEF201ULL
-
- -
-
- -

◆ kVestelAcSwing

- -
-
- - - - -
const uint8_t kVestelAcSwing = 0xA
-
- -
-
- -

◆ kVestelAcTimeStateDefault

- -
-
- - - - -
const uint64_t kVestelAcTimeStateDefault = 0x201ULL
-
- -
-
- -

◆ kVestelAcTolerance

- -
-
- - - - -
const uint16_t kVestelAcTolerance = 30
-
- -
-
- -

◆ kVestelAcTurbo

- -
-
- - - - -
const uint8_t kVestelAcTurbo = 7
-
- -
-
- -

◆ kVestelAcZeroSpace

- -
-
- - - - -
const uint16_t kVestelAcZeroSpace = 480
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h_source.html deleted file mode 100644 index a7463b9b5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Vestel_8h_source.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Vestel.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Vestel.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 Erdem U. Altinyurt
-
2 // Copyright 2019 David Conran
-
3 
-
7 
-
8 // Supports:
-
9 // Brand: Vestel, Model: BIOX CXP-9 A/C (9K BTU)
-
10 
-
11 #ifndef IR_VESTEL_H_
-
12 #define IR_VESTEL_H_
-
13 
-
14 #define __STDC_LIMIT_MACROS
-
15 #include <stdint.h>
-
16 #ifdef ARDUINO
-
17 #include <Arduino.h>
-
18 #endif
-
19 #include "IRremoteESP8266.h"
-
20 #include "IRsend.h"
-
21 #ifdef UNIT_TEST
-
22 #include "IRsend_test.h"
-
23 #endif
-
24 
- -
27  struct {
-
28  uint64_t cmdState;
-
29  uint64_t timeState;
-
30  };
-
31  struct {
-
32  // Command
-
33  uint64_t Signature :12; // 0x201
-
34  uint64_t CmdSum :8;
-
35  uint64_t Swing :4; // auto 0xA, stop 0xF
-
36  uint64_t TurboSleep :4; // normal 0x1, sleep 0x3, turbo 0x7
-
37  uint64_t :8;
-
38  uint64_t Temp :4;
-
39  uint64_t Fan :4;
-
40  uint64_t Mode :3;
-
41  uint64_t :3;
-
42  uint64_t Ion :1;
-
43  uint64_t :1;
-
44  uint64_t Power :2;
-
45  uint64_t UseCmd :1;
-
46  uint64_t :0;
-
47  // Time
-
48  uint64_t :12;
-
49  uint64_t TimeSum :8;
-
50  uint64_t OffTenMins :3;
-
51  uint64_t OffHours :5;
-
52  uint64_t OnTenMins :3;
-
53  uint64_t OnHours :5;
-
54  uint64_t Hours :5;
-
55  uint64_t OnTimer :1;
-
56  uint64_t OffTimer :1;
-
57  uint64_t Timer :1;
-
58  uint64_t Minutes :8;
-
59  uint64_t :0;
-
60  };
-
61 };
-
62 
-
63 // Constants
-
64 const uint16_t kVestelAcHdrMark = 3110;
-
65 const uint16_t kVestelAcHdrSpace = 9066;
-
66 const uint16_t kVestelAcBitMark = 520;
-
67 const uint16_t kVestelAcOneSpace = 1535;
-
68 const uint16_t kVestelAcZeroSpace = 480;
-
69 const uint16_t kVestelAcTolerance = 30;
-
70 
-
71 const uint8_t kVestelAcMinTempH = 16;
-
72 const uint8_t kVestelAcMinTempC = 18;
-
73 const uint8_t kVestelAcMaxTemp = 30;
-
74 
-
75 const uint8_t kVestelAcAuto = 0;
-
76 const uint8_t kVestelAcCool = 1;
-
77 const uint8_t kVestelAcDry = 2;
-
78 const uint8_t kVestelAcFan = 3;
-
79 const uint8_t kVestelAcHeat = 4;
-
80 
-
81 const uint8_t kVestelAcFanAuto = 1;
-
82 const uint8_t kVestelAcFanLow = 5;
-
83 const uint8_t kVestelAcFanMed = 9;
-
84 const uint8_t kVestelAcFanHigh = 0xB;
-
85 const uint8_t kVestelAcFanAutoCool = 0xC;
-
86 const uint8_t kVestelAcFanAutoHot = 0xD;
-
87 
-
88 const uint8_t kVestelAcNormal = 1;
-
89 const uint8_t kVestelAcSleep = 3;
-
90 const uint8_t kVestelAcTurbo = 7;
-
91 const uint8_t kVestelAcIon = 4;
-
92 const uint8_t kVestelAcSwing = 0xA;
-
93 
-
94 // Default states
-
95 const uint64_t kVestelAcStateDefault = 0x0F00D9001FEF201ULL;
-
96 const uint64_t kVestelAcTimeStateDefault = 0x201ULL;
-
97 
-
98 // Classes
-
100 class IRVestelAc {
-
101  public:
-
102  explicit IRVestelAc(const uint16_t pin, const bool inverted = false,
-
103  const bool use_modulation = true);
-
104  void stateReset(void);
-
105 #if SEND_VESTEL_AC
-
106  void send(const uint16_t repeat = kNoRepeat);
-
111  int8_t calibrate(void) { return _irsend.calibrate(); }
-
112 #endif // SEND_VESTEL_AC
-
113  void begin(void);
-
114  void on(void);
-
115  void off(void);
-
116  void setPower(const bool on);
-
117  bool getPower(void) const;
-
118  void setAuto(const int8_t autoLevel);
-
119  void setTimer(const uint16_t minutes);
-
120  uint16_t getTimer(void) const;
-
121  void setTime(const uint16_t minutes);
-
122  uint16_t getTime(void) const;
-
123  void setOnTimer(const uint16_t minutes);
-
124  uint16_t getOnTimer(void) const;
-
125  void setOffTimer(const uint16_t minutes);
-
126  uint16_t getOffTimer(void) const;
-
127  void setTemp(const uint8_t temp);
-
128  uint8_t getTemp(void) const;
-
129  void setFan(const uint8_t fan);
-
130  uint8_t getFan(void) const;
-
131  void setMode(const uint8_t mode);
-
132  uint8_t getMode(void) const;
-
133  void setRaw(const uint8_t* newState);
-
134  void setRaw(const uint64_t newState);
-
135  uint64_t getRaw(void);
-
136  static bool validChecksum(const uint64_t state);
-
137  void setSwing(const bool on);
-
138  bool getSwing(void) const;
-
139  void setSleep(const bool on);
-
140  bool getSleep(void) const;
-
141  void setTurbo(const bool on);
-
142  bool getTurbo(void) const;
-
143  void setIon(const bool on);
-
144  bool getIon(void) const;
-
145  bool isTimeCommand(void) const;
-
146  bool isOnTimerActive(void) const;
-
147  void setOnTimerActive(const bool on);
-
148  bool isOffTimerActive(void) const;
-
149  void setOffTimerActive(const bool on);
-
150  bool isTimerActive(void) const;
-
151  void setTimerActive(const bool on);
-
152  static uint8_t calcChecksum(const uint64_t state);
-
153  static uint8_t convertMode(const stdAc::opmode_t mode);
-
154  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
155  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
156  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
157  stdAc::state_t toCommon(void) const;
-
158  String toString(void) const;
-
159 #ifndef UNIT_TEST
-
160 
-
161  private:
- -
163 #else // UNIT_TEST
-
164  IRsendTest _irsend;
-
166 #endif // UNIT_TEST
- -
169  void checksum(void);
-
170 };
-
171 
-
172 #endif // IR_VESTEL_H_
-
-
const uint16_t kVestelAcHdrSpace
Definition: ir_Vestel.h:65
-
const uint8_t kVestelAcFanAutoHot
Definition: ir_Vestel.h:86
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Vestel.cpp:58
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Vestel.cpp:64
-
void setFan(const uint8_t fan)
Set the speed of the fan.
Definition: ir_Vestel.cpp:140
-
uint64_t Timer
Definition: ir_Vestel.h:57
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Vestel.cpp:125
-
void setOffTimerActive(const bool on)
Set the Off timer to be active on the A/C.
Definition: ir_Vestel.cpp:282
-
void setTime(const uint16_t minutes)
Set the A/C's internal clock.
Definition: ir_Vestel.cpp:240
-
uint64_t OffHours
Definition: ir_Vestel.h:51
-
const uint8_t kVestelAcMaxTemp
Definition: ir_Vestel.h:73
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Vestel.cpp:112
-
uint16_t getOnTimer(void) const
Get the A/C's On Timer time.
Definition: ir_Vestel.cpp:276
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Vestel.cpp:158
-
uint16_t getTimer(void) const
Get the Timer time of A/C.
Definition: ir_Vestel.cpp:236
-
bool isOnTimerActive(void) const
Get if the On Timer is active on the A/C.
Definition: ir_Vestel.cpp:261
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint64_t Swing
Definition: ir_Vestel.h:35
-
const uint8_t kVestelAcSleep
Definition: ir_Vestel.h:89
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Vestel.h:111
-
const uint8_t kVestelAcDry
Definition: ir_Vestel.h:77
-
bool getIon(void) const
Get the Ion (Filter) setting of the A/C.
Definition: ir_Vestel.cpp:343
-
const uint16_t kVestelAcBitMark
Definition: ir_Vestel.h:66
-
const uint8_t kVestelAcAuto
Definition: ir_Vestel.h:75
-
const uint8_t kVestelAcFanMed
Definition: ir_Vestel.h:83
-
void setTurbo(const bool on)
Set the Turbo setting of the A/C.
Definition: ir_Vestel.cpp:323
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Vestel.h:162
-
void setTimer(const uint16_t minutes)
Set Timer option of A/C.
Definition: ir_Vestel.cpp:221
-
void on(void)
Set the requested power state of the A/C to on.
Definition: ir_Vestel.cpp:105
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Vestel.cpp:171
- -
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Vestel.cpp:471
-
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Vestel.cpp:444
-
const uint8_t kVestelAcMinTempC
Definition: ir_Vestel.h:72
-
Native representation of a Vestel A/C message.
Definition: ir_Vestel.h:26
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint16_t getTime(void) const
Get the A/C's internal clock's time.
Definition: ir_Vestel.cpp:248
-
uint64_t CmdSum
Definition: ir_Vestel.h:34
-
void setRaw(const uint8_t *newState)
Set the internal state from a valid code for this protocol.
Definition: ir_Vestel.cpp:84
-
const uint8_t kVestelAcFan
Definition: ir_Vestel.h:78
-
bool isOffTimerActive(void) const
Get if the Off Timer is active on the A/C.
Definition: ir_Vestel.cpp:289
- -
const uint8_t kVestelAcMinTempH
Definition: ir_Vestel.h:71
-
uint64_t OffTimer
Definition: ir_Vestel.h:56
-
const uint16_t kVestelAcHdrMark
Definition: ir_Vestel.h:64
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
bool isTimeCommand(void) const
Is the current state a time command?
Definition: ir_Vestel.cpp:386
-
uint64_t Power
Definition: ir_Vestel.h:44
-
uint16_t getOffTimer(void) const
Get the A/C's Off Timer time.
Definition: ir_Vestel.cpp:304
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Vestel.cpp:420
-
bool getTurbo(void) const
Get the Turbo setting of the A/C.
Definition: ir_Vestel.cpp:330
-
uint64_t Ion
Definition: ir_Vestel.h:42
-
const uint16_t kVestelAcOneSpace
Definition: ir_Vestel.h:67
-
uint64_t Hours
Definition: ir_Vestel.h:54
-
void checksum(void)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Vestel.cpp:378
-
void setSwing(const bool on)
Set the Swing Roaming setting of the A/C.
Definition: ir_Vestel.cpp:349
-
bool getSwing(void) const
Get the Swing Roaming setting of the A/C.
Definition: ir_Vestel.cpp:356
-
uint64_t OffTenMins
Definition: ir_Vestel.h:50
-
void setOffTimer(const uint16_t minutes)
Set the Off timer time on the A/C.
Definition: ir_Vestel.cpp:295
-
uint64_t timeState
Definition: ir_Vestel.h:29
-
uint64_t OnHours
Definition: ir_Vestel.h:53
-
uint64_t TurboSleep
Definition: ir_Vestel.h:36
-
void setOnTimerActive(const bool on)
Set the On timer to be active on the A/C.
Definition: ir_Vestel.cpp:254
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Vestel.cpp:433
-
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_Vestel.cpp:69
-
void off(void)
Set the requested power state of the A/C to off.
Definition: ir_Vestel.cpp:108
-
const uint8_t kVestelAcFanAutoCool
Definition: ir_Vestel.h:85
-
const uint64_t kVestelAcStateDefault
Definition: ir_Vestel.h:95
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Vestel.cpp:393
-
void setIon(const bool on)
Set the Ion (Filter) setting of the A/C.
Definition: ir_Vestel.cpp:336
-
const uint16_t kVestelAcTolerance
Definition: ir_Vestel.h:69
-
const uint8_t kVestelAcFanLow
Definition: ir_Vestel.h:82
-
uint64_t Mode
Definition: ir_Vestel.h:40
-
uint64_t Fan
Definition: ir_Vestel.h:39
-
const uint8_t kVestelAcSwing
Definition: ir_Vestel.h:92
-
const uint16_t kVestelAcZeroSpace
Definition: ir_Vestel.h:68
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Vestel.cpp:317
-
const uint64_t kVestelAcTimeStateDefault
Definition: ir_Vestel.h:96
-
uint64_t OnTenMins
Definition: ir_Vestel.h:52
-
const uint8_t kVestelAcTurbo
Definition: ir_Vestel.h:90
-
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum for a given state.
Definition: ir_Vestel.cpp:363
-
uint64_t getRaw(void)
Get a copy of the internal state/code for this protocol.
Definition: ir_Vestel.cpp:76
-
const uint8_t kVestelAcHeat
Definition: ir_Vestel.h:79
-
const uint8_t kVestelAcNormal
Definition: ir_Vestel.h:88
-
const uint8_t kVestelAcFanHigh
Definition: ir_Vestel.h:84
-
uint64_t Signature
Definition: ir_Vestel.h:33
-
IRVestelAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Vestel.cpp:52
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Vestel.cpp:119
-
Class for handling detailed Vestel A/C messages.
Definition: ir_Vestel.h:100
-
const uint8_t kVestelAcCool
Definition: ir_Vestel.h:76
-
VestelProtocol _
Definition: ir_Vestel.h:168
-
uint64_t cmdState
Definition: ir_Vestel.h:28
-
bool isTimerActive(void) const
Get if the Timer is active on the A/C.
Definition: ir_Vestel.cpp:213
-
void setTimerActive(const bool on)
Set the timer to be active on the A/C.
Definition: ir_Vestel.cpp:206
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Vestel.cpp:310
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Vestel.cpp:164
-
uint64_t UseCmd
Definition: ir_Vestel.h:45
-
uint64_t OnTimer
Definition: ir_Vestel.h:55
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Vestel.cpp:134
-
const uint8_t kVestelAcIon
Definition: ir_Vestel.h:91
-
uint64_t Minutes
Definition: ir_Vestel.h:58
-
uint64_t Temp
Definition: ir_Vestel.h:38
-
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition: ir_Vestel.cpp:371
-
void setAuto(const int8_t autoLevel)
Set Auto mode/level of the A/C.
Definition: ir_Vestel.cpp:188
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
const uint8_t kVestelAcFanAuto
Definition: ir_Vestel.h:81
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Vestel.cpp:406
-
void setOnTimer(const uint16_t minutes)
Set the On timer time on the A/C.
Definition: ir_Vestel.cpp:267
-
uint64_t TimeSum
Definition: ir_Vestel.h:49
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8cpp.html deleted file mode 100644 index 1ce153339..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8cpp.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Voltas.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Voltas.cpp File Reference
-
-
- -

Support for Voltas A/C protocol. -More...

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

-Variables

const uint16_t kVoltasBitMark = 1026
 uSeconds. More...
 
const uint16_t kVoltasOneSpace = 2553
 uSeconds. More...
 
const uint16_t kVoltasZeroSpace = 554
 uSeconds. More...
 
const uint16_t kVoltasFreq = 38000
 Hz. More...
 
-

Detailed Description

-

Support for Voltas A/C protocol.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1238
-

Variable Documentation

- -

◆ kVoltasBitMark

- -
-
- - - - -
const uint16_t kVoltasBitMark = 1026
-
- -

uSeconds.

- -
-
- -

◆ kVoltasFreq

- -
-
- - - - -
const uint16_t kVoltasFreq = 38000
-
- -

Hz.

- -
-
- -

◆ kVoltasOneSpace

- -
-
- - - - -
const uint16_t kVoltasOneSpace = 2553
-
- -

uSeconds.

- -
-
- -

◆ kVoltasZeroSpace

- -
-
- - - - -
const uint16_t kVoltasZeroSpace = 554
-
- -

uSeconds.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h.html deleted file mode 100644 index 48fb1bde3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h.html +++ /dev/null @@ -1,352 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Voltas.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Voltas.h File Reference
-
-
- -

Support for Voltas A/C protocol. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  VoltasProtocol
 Native representation of a Voltas A/C message. More...
 
class  IRVoltas
 Class for handling detailed Voltas A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kVoltasFan = 0b0001
 1 More...
 
const uint8_t kVoltasHeat = 0b0010
 2 More...
 
const uint8_t kVoltasDry = 0b0100
 4 More...
 
const uint8_t kVoltasCool = 0b1000
 8 More...
 
const uint8_t kVoltasMinTemp = 16
 Celsius. More...
 
const uint8_t kVoltasDryTemp = 24
 Celsius. More...
 
const uint8_t kVoltasMaxTemp = 30
 Celsius. More...
 
const uint8_t kVoltasFanHigh = 0b001
 1 More...
 
const uint8_t kVoltasFanMed = 0b010
 2 More...
 
const uint8_t kVoltasFanLow = 0b100
 4 More...
 
const uint8_t kVoltasFanAuto = 0b111
 7 More...
 
const uint8_t kVoltasSwingHChange = 0b1111100
 0x7D More...
 
const uint8_t kVoltasSwingHNoChange = 0b0011001
 0x19 More...
 
-

Detailed Description

-

Support for Voltas A/C protocol.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/1238
-

Variable Documentation

- -

◆ kVoltasCool

- -
-
- - - - -
const uint8_t kVoltasCool = 0b1000
-
- -

8

- -
-
- -

◆ kVoltasDry

- -
-
- - - - -
const uint8_t kVoltasDry = 0b0100
-
- -

4

- -
-
- -

◆ kVoltasDryTemp

- -
-
- - - - -
const uint8_t kVoltasDryTemp = 24
-
- -

Celsius.

- -
-
- -

◆ kVoltasFan

- -
-
- - - - -
const uint8_t kVoltasFan = 0b0001
-
- -

1

- -
-
- -

◆ kVoltasFanAuto

- -
-
- - - - -
const uint8_t kVoltasFanAuto = 0b111
-
- -

7

- -
-
- -

◆ kVoltasFanHigh

- -
-
- - - - -
const uint8_t kVoltasFanHigh = 0b001
-
- -

1

- -
-
- -

◆ kVoltasFanLow

- -
-
- - - - -
const uint8_t kVoltasFanLow = 0b100
-
- -

4

- -
-
- -

◆ kVoltasFanMed

- -
-
- - - - -
const uint8_t kVoltasFanMed = 0b010
-
- -

2

- -
-
- -

◆ kVoltasHeat

- -
-
- - - - -
const uint8_t kVoltasHeat = 0b0010
-
- -

2

- -
-
- -

◆ kVoltasMaxTemp

- -
-
- - - - -
const uint8_t kVoltasMaxTemp = 30
-
- -

Celsius.

- -
-
- -

◆ kVoltasMinTemp

- -
-
- - - - -
const uint8_t kVoltasMinTemp = 16
-
- -

Celsius.

- -
-
- -

◆ kVoltasSwingHChange

- -
-
- - - - -
const uint8_t kVoltasSwingHChange = 0b1111100
-
- -

0x7D

- -
-
- -

◆ kVoltasSwingHNoChange

- -
-
- - - - -
const uint8_t kVoltasSwingHNoChange = 0b0011001
-
- -

0x19

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h_source.html deleted file mode 100644 index 4cf78627e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Voltas_8h_source.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Voltas.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Voltas.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 David Conran (crankyoldgit)
-
2 // Copyright 2020 manj9501
-
6 
-
7 // Supports:
-
8 // Brand: Voltas, Model: 122LZF 4011252 Window A/C
-
9 //
-
10 // Ref: https://docs.google.com/spreadsheets/d/1zzDEUQ52y7MZ7_xCU3pdjdqbRXOwZLsbTGvKWcicqCI/
-
11 // Ref: https://www.corona.co.jp/box/download.php?id=145060636229
-
12 
-
13 #ifndef IR_VOLTAS_H_
-
14 #define IR_VOLTAS_H_
-
15 
-
16 #define __STDC_LIMIT_MACROS
-
17 #include <stdint.h>
-
18 #ifndef UNIT_TEST
-
19 #include <Arduino.h>
-
20 #endif
-
21 #include "IRremoteESP8266.h"
-
22 #include "IRsend.h"
-
23 #ifdef UNIT_TEST
-
24 #include "IRsend_test.h"
-
25 #endif
-
26 
- - -
30  struct {
-
31  // Byte 0
-
32  uint8_t SwingH :1;
-
33  uint8_t SwingHChange :7;
-
34  // Byte 1
-
35  uint8_t Mode :4;
-
36  uint8_t :1; // Unknown/Unused
-
37  uint8_t FanSpeed :3;
-
38  // Byte 2
-
39  uint8_t SwingV :3;
-
40  uint8_t Wifi :1;
-
41  uint8_t :1; // Unknown/Unused
-
42  uint8_t Turbo :1;
-
43  uint8_t Sleep :1;
-
44  uint8_t Power :1;
-
45  // Byte 3
-
46  uint8_t Temp :4;
-
47  uint8_t :2; // Typically 0b01
-
48  uint8_t Econo :1;
-
49  uint8_t TempSet :1;
-
50  // Byte 4
-
51  uint8_t OnTimerMins :6; // 0-59
-
52  uint8_t :1; // Unknown/Unused
-
53  uint8_t OnTimer12Hr :1; // (Nr of Hours + 1) % 12.
-
54  // Byte 5
-
55  uint8_t OffTimerMins :6; // 0-59
-
56  uint8_t :1; // Unknown/Unused
-
57  uint8_t OffTimer12Hr :1; // (Nr of Hours + 1) % 12.
-
58  // Byte 6
-
59  uint8_t :8; // Typically 0b00111011(0x3B)
-
60  // Byte 7
-
61  uint8_t OnTimerHrs :4; // (Nr of Hours + 1) % 12.
-
62  uint8_t OffTimerHrs :4; // (Nr of Hours + 1) % 12.
-
63  // Byte 8
-
64  uint8_t :5; // Typically 0b00000
-
65  uint8_t Light :1;
-
66  uint8_t OffTimerEnable :1;
-
67  uint8_t OnTimerEnable :1;
-
68  // Byte 9
-
69  uint8_t Checksum :8;
-
70  };
-
71 };
-
72 
-
73 // Constants
-
74 const uint8_t kVoltasFan = 0b0001;
-
75 const uint8_t kVoltasHeat = 0b0010;
-
76 const uint8_t kVoltasDry = 0b0100;
-
77 const uint8_t kVoltasCool = 0b1000;
-
78 const uint8_t kVoltasMinTemp = 16;
-
79 const uint8_t kVoltasDryTemp = 24;
-
80 const uint8_t kVoltasMaxTemp = 30;
-
81 const uint8_t kVoltasFanHigh = 0b001;
-
82 const uint8_t kVoltasFanMed = 0b010;
-
83 const uint8_t kVoltasFanLow = 0b100;
-
84 const uint8_t kVoltasFanAuto = 0b111;
-
85 const uint8_t kVoltasSwingHChange = 0b1111100;
-
86 const uint8_t kVoltasSwingHNoChange = 0b0011001;
-
87 
-
88 // Classes
-
90 class IRVoltas {
-
91  public:
-
92  explicit IRVoltas(const uint16_t pin, const bool inverted = false,
-
93  const bool use_modulation = true);
-
94  void stateReset();
-
95 #if SEND_VOLTAS
-
96  void send(const uint16_t repeat = kNoRepeat);
-
101  int8_t calibrate(void) { return _irsend.calibrate(); }
-
102 #endif // SEND_VOLTAS
-
103  void begin();
-
104  static bool validChecksum(const uint8_t state[],
-
105  const uint16_t length = kVoltasStateLength);
-
106  void setModel(const voltas_ac_remote_model_t model);
-
107  voltas_ac_remote_model_t getModel(const bool raw = false) const;
-
108  void setPower(const bool on);
-
109  bool getPower(void) const;
-
110  void on(void);
-
111  void off(void);
-
112  void setWifi(const bool on);
-
113  bool getWifi(void) const;
-
114  void setTemp(const uint8_t temp);
-
115  uint8_t getTemp(void);
-
116  void setFan(const uint8_t speed);
-
117  uint8_t getFan(void);
-
118  void setMode(const uint8_t mode);
-
119  uint8_t getMode(void);
-
120  void setSwingH(const bool on);
-
121  bool getSwingH(void) const;
-
122  void setSwingHChange(const bool on);
-
123  bool getSwingHChange(void) const;
-
124  void setSwingV(const bool on);
-
125  bool getSwingV(void) const;
-
126  void setEcono(const bool on);
-
127  bool getEcono(void) const;
-
128  void setLight(const bool on);
-
129  bool getLight(void) const;
-
130  void setTurbo(const bool on);
-
131  bool getTurbo(void) const;
-
132  void setSleep(const bool on);
-
133  bool getSleep(void) const;
-
134  uint16_t getOnTime(void) const;
-
135  void setOnTime(const uint16_t nr_of_mins);
-
136  uint16_t getOffTime(void) const;
-
137  void setOffTime(const uint16_t nr_of_mins);
-
138  uint8_t* getRaw(void);
-
139  void setRaw(const uint8_t new_code[]);
-
140  uint8_t convertMode(const stdAc::opmode_t mode);
-
141  uint8_t convertFan(const stdAc::fanspeed_t speed);
-
142  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
143  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
144  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL);
-
145  String toString(void);
-
146 #ifndef UNIT_TEST
-
147 
-
148  private:
- -
150 #else
-
151  IRsendTest _irsend;
-
153 #endif
- - -
157  void checksum(void);
-
158  static uint8_t calcChecksum(const uint8_t state[],
-
159  const uint16_t length = kVoltasStateLength);
-
160 };
-
161 #endif // IR_VOLTAS_H_
-
-
void setOnTime(const uint16_t nr_of_mins)
Set the value of the On Timer time.
Definition: ir_Voltas.cpp:423
-
uint8_t getTemp(void)
Get the current temperature setting.
Definition: ir_Voltas.cpp:258
-
uint8_t Temp
Definition: ir_Voltas.h:46
-
const uint8_t kVoltasFan
1
Definition: ir_Voltas.h:74
-
uint8_t getFan(void)
Get the current fan speed setting.
Definition: ir_Voltas.cpp:282
-
uint8_t Mode
Definition: ir_Voltas.h:35
-
uint16_t getOnTime(void) const
Get the value of the On Timer time.
Definition: ir_Voltas.cpp:415
-
bool getEcono(void) const
Get the value of the current Econo setting.
Definition: ir_Voltas.cpp:389
-
uint8_t getMode(void)
Get the operating mode setting of the A/C.
Definition: ir_Voltas.cpp:222
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t OnTimerMins
Definition: ir_Voltas.h:51
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Voltas.cpp:301
-
uint8_t Wifi
Definition: ir_Voltas.h:40
-
bool getSwingHChange(void) const
Are the Horizontal Swing change bits set in the message?
Definition: ir_Voltas.cpp:351
-
const uint8_t kVoltasFanMed
2
Definition: ir_Voltas.h:82
-
const uint8_t kVoltasSwingHNoChange
0x19
Definition: ir_Voltas.h:86
- -
uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Voltas.cpp:227
-
uint8_t SwingH
Definition: ir_Voltas.h:32
-
Class for handling detailed Voltas A/C messages.
Definition: ir_Voltas.h:90
-
Native representation of a Voltas A/C message.
Definition: ir_Voltas.h:28
-
const uint8_t kVoltasFanAuto
7
Definition: ir_Voltas.h:84
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
voltas_ac_remote_model_t _model
Model type.
Definition: ir_Voltas.h:156
-
const uint16_t kVoltasStateLength
Definition: IRremoteESP8266.h:1132
-
uint8_t SwingV
Definition: ir_Voltas.h:39
-
void off(void)
Change the power setting to Off.
Definition: ir_Voltas.cpp:184
-
uint8_t Light
Definition: ir_Voltas.h:65
-
uint8_t OffTimerMins
Definition: ir_Voltas.h:55
-
std::string String
Definition: IRremoteESP8266.h:1217
-
uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Voltas.cpp:287
-
void setSleep(const bool on)
Change the Sleep setting.
Definition: ir_Voltas.cpp:402
-
bool getWifi(void) const
Get the value of the current Wifi setting.
Definition: ir_Voltas.cpp:361
-
IRVoltas(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Voltas.cpp:87
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Voltas.cpp:262
-
uint8_t Econo
Definition: ir_Voltas.h:48
-
void on(void)
Change the power setting to On.
Definition: ir_Voltas.cpp:181
- -
void setPower(const bool on)
Change the power setting.
Definition: ir_Voltas.cpp:188
-
uint8_t OffTimerEnable
Definition: ir_Voltas.h:66
-
uint8_t OffTimer12Hr
Definition: ir_Voltas.h:57
-
bool getSwingV(void) const
Get the Vertical Swing setting of the A/C.
Definition: ir_Voltas.cpp:316
-
const uint16_t kNoRepeat
Definition: IRremoteESP8266.h:907
-
const uint8_t kVoltasHeat
2
Definition: ir_Voltas.h:75
-
void setSwingV(const bool on)
Set the Vertical Swing setting of the A/C.
Definition: ir_Voltas.cpp:312
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL)
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Voltas.cpp:456
-
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Voltas.cpp:250
-
void setRaw(const uint8_t new_code[])
Set the internal state from a valid code for this protocol.
Definition: ir_Voltas.cpp:150
-
uint8_t OffTimerHrs
Definition: ir_Voltas.h:62
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Voltas.h:149
-
void setTurbo(const bool on)
Change the Turbo setting.
Definition: ir_Voltas.cpp:366
-
uint8_t FanSpeed
Definition: ir_Voltas.h:37
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Voltas.cpp:103
-
uint8_t OnTimerHrs
Definition: ir_Voltas.h:61
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Voltas.cpp:197
-
uint8_t Turbo
Definition: ir_Voltas.h:42
-
void setSwingH(const bool on)
Set the Horizontal Swing setting of the A/C.
Definition: ir_Voltas.cpp:320
-
void setWifi(const bool on)
Change the Wifi setting.
Definition: ir_Voltas.cpp:357
-
void setSwingHChange(const bool on)
Set the bits for changing the Horizontal Swing setting of the A/C.
Definition: ir_Voltas.cpp:344
-
uint8_t Power
Definition: ir_Voltas.h:44
-
uint16_t getOffTime(void) const
Get the value of the On Timer time.
Definition: ir_Voltas.cpp:435
-
String toString(void)
Convert the current internal state into a human readable string.
Definition: ir_Voltas.cpp:491
-
void setModel(const voltas_ac_remote_model_t model)
Set the current model for the remote.
Definition: ir_Voltas.cpp:131
-
void stateReset()
Definition: ir_Voltas.cpp:94
-
void setEcono(const bool on)
Change the Economy setting.
Definition: ir_Voltas.cpp:380
-
uint8_t OnTimerEnable
Definition: ir_Voltas.h:67
-
const uint8_t kVoltasMaxTemp
Celsius.
Definition: ir_Voltas.h:80
-
const uint8_t kVoltasDry
4
Definition: ir_Voltas.h:76
-
uint8_t raw[kVoltasStateLength]
The state in native IR code form.
Definition: ir_Voltas.h:29
-
uint8_t TempSet
Definition: ir_Voltas.h:49
-
uint8_t Checksum
Definition: ir_Voltas.h:69
-
const uint8_t kVoltasSwingHChange
0x7D
Definition: ir_Voltas.h:85
-
static uint8_t calcChecksum(const uint8_t state[], const uint16_t length=kVoltasStateLength)
Calculate the checksum is valid for a given state.
Definition: ir_Voltas.cpp:173
-
const uint8_t kVoltasMinTemp
Celsius.
Definition: ir_Voltas.h:78
-
void checksum(void)
Calculate and set the checksum values for the internal state.
Definition: ir_Voltas.cpp:156
-
const uint8_t kVoltasDryTemp
Celsius.
Definition: ir_Voltas.h:79
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Voltas.cpp:239
-
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition: ir_Voltas.cpp:108
-
const uint8_t kVoltasFanHigh
1
Definition: ir_Voltas.h:81
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Voltas.h:101
-
uint8_t Sleep
Definition: ir_Voltas.h:43
-
bool getSwingH(void) const
Get the Horizontal Swing setting of the A/C.
Definition: ir_Voltas.cpp:332
-
void setOffTime(const uint16_t nr_of_mins)
Set the value of the Off Timer time.
Definition: ir_Voltas.cpp:443
-
uint8_t OnTimer12Hr
Definition: ir_Voltas.h:53
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kVoltasStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Voltas.cpp:164
-
const uint8_t kVoltasFanLow
4
Definition: ir_Voltas.h:83
-
bool getSleep(void) const
Get the value of the current Sleep setting.
Definition: ir_Voltas.cpp:411
-
const uint8_t kVoltasCool
8
Definition: ir_Voltas.h:77
-
bool getPower(void) const
Get the value of the current power setting.
Definition: ir_Voltas.cpp:192
-
uint8_t * getRaw(void)
Get a PTR to the internal state/code for this protocol.
Definition: ir_Voltas.cpp:143
-
VoltasProtocol _
The state of the IR remote.
Definition: ir_Voltas.h:155
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
bool getLight(void) const
Get the value of the current Light setting.
Definition: ir_Voltas.cpp:397
-
void setLight(const bool on)
Change the Light setting.
Definition: ir_Voltas.cpp:393
-
voltas_ac_remote_model_t getModel(const bool raw=false) const
Get the model information currently known.
Definition: ir_Voltas.cpp:116
-
bool getTurbo(void) const
Get the value of the current Turbo setting.
Definition: ir_Voltas.cpp:375
-
voltas_ac_remote_model_t
Voltas A/C model numbers.
Definition: IRsend.h:164
-
uint8_t SwingHChange
Definition: ir_Voltas.h:33
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8cpp.html deleted file mode 100644 index 95fcdadbf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8cpp.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Whirlpool.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Whirlpool.cpp File Reference
-
-
- -

Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea. -More...

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

-Variables

const uint16_t kWhirlpoolAcHdrMark = 8950
 
const uint16_t kWhirlpoolAcHdrSpace = 4484
 
const uint16_t kWhirlpoolAcBitMark = 597
 
const uint16_t kWhirlpoolAcOneSpace = 1649
 
const uint16_t kWhirlpoolAcZeroSpace = 533
 
const uint16_t kWhirlpoolAcGap = 7920
 
const uint32_t kWhirlpoolAcMinGap = kDefaultMessageGap
 
const uint8_t kWhirlpoolAcSections = 3
 
-

Detailed Description

-

Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/509
-
Note
Smart, iFeel, AroundU, PowerSave, & Silent modes are unsupported. Advanced 6thSense, Dehumidify, & Sleep modes are not supported.
-
-Dim == !Light, Jet == Super == Turbo
-

Variable Documentation

- -

◆ kWhirlpoolAcBitMark

- -
-
- - - - -
const uint16_t kWhirlpoolAcBitMark = 597
-
- -
-
- -

◆ kWhirlpoolAcGap

- -
-
- - - - -
const uint16_t kWhirlpoolAcGap = 7920
-
- -
-
- -

◆ kWhirlpoolAcHdrMark

- -
-
- - - - -
const uint16_t kWhirlpoolAcHdrMark = 8950
-
- -
-
- -

◆ kWhirlpoolAcHdrSpace

- -
-
- - - - -
const uint16_t kWhirlpoolAcHdrSpace = 4484
-
- -
-
- -

◆ kWhirlpoolAcMinGap

- -
-
- - - - -
const uint32_t kWhirlpoolAcMinGap = kDefaultMessageGap
-
- -
-
- -

◆ kWhirlpoolAcOneSpace

- -
-
- - - - -
const uint16_t kWhirlpoolAcOneSpace = 1649
-
- -
-
- -

◆ kWhirlpoolAcSections

- -
-
- - - - -
const uint8_t kWhirlpoolAcSections = 3
-
- -
-
- -

◆ kWhirlpoolAcZeroSpace

- -
-
- - - - -
const uint16_t kWhirlpoolAcZeroSpace = 533
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h.html deleted file mode 100644 index 5d793bfef..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Whirlpool.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Whirlpool.h File Reference
-
-
- -

Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea. -More...

- -

Go to the source code of this file.

- - - - - - - - -

-Classes

union  WhirlpoolProtocol
 Native representation of a Whirlpool A/C message. More...
 
class  IRWhirlpoolAc
 Class for handling detailed Whirlpool A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kWhirlpoolAcChecksumByte1 = 13
 
const uint8_t kWhirlpoolAcChecksumByte2 = kWhirlpoolAcStateLength - 1
 
const uint8_t kWhirlpoolAcHeat = 0
 
const uint8_t kWhirlpoolAcAuto = 1
 
const uint8_t kWhirlpoolAcCool = 2
 
const uint8_t kWhirlpoolAcDry = 3
 
const uint8_t kWhirlpoolAcFan = 4
 
const uint8_t kWhirlpoolAcFanAuto = 0
 
const uint8_t kWhirlpoolAcFanHigh = 1
 
const uint8_t kWhirlpoolAcFanMedium = 2
 
const uint8_t kWhirlpoolAcFanLow = 3
 
const uint8_t kWhirlpoolAcMinTemp = 18
 
const uint8_t kWhirlpoolAcMaxTemp = 32
 
const uint8_t kWhirlpoolAcAutoTemp = 23
 
const uint8_t kWhirlpoolAcCommandLight = 0x00
 
const uint8_t kWhirlpoolAcCommandPower = 0x01
 
const uint8_t kWhirlpoolAcCommandTemp = 0x02
 
const uint8_t kWhirlpoolAcCommandSleep = 0x03
 
const uint8_t kWhirlpoolAcCommandSuper = 0x04
 
const uint8_t kWhirlpoolAcCommandOnTimer = 0x05
 
const uint8_t kWhirlpoolAcCommandMode = 0x06
 
const uint8_t kWhirlpoolAcCommandSwing = 0x07
 
const uint8_t kWhirlpoolAcCommandIFeel = 0x0D
 
const uint8_t kWhirlpoolAcCommandFanSpeed = 0x11
 
const uint8_t kWhirlpoolAcCommand6thSense = 0x17
 
const uint8_t kWhirlpoolAcCommandOffTimer = 0x1D
 
-

Detailed Description

-

Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.

-
See also
https://github.com/crankyoldgit/IRremoteESP8266/issues/509
-
Note
Smart, iFeel, AroundU, PowerSave, & Silent modes are unsupported. Advanced 6thSense, Dehumidify, & Sleep modes are not supported.
-
-Dim == !Light, Jet == Super == Turbo
-

Variable Documentation

- -

◆ kWhirlpoolAcAuto

- -
-
- - - - -
const uint8_t kWhirlpoolAcAuto = 1
-
- -
-
- -

◆ kWhirlpoolAcAutoTemp

- -
-
- - - - -
const uint8_t kWhirlpoolAcAutoTemp = 23
-
- -
-
- -

◆ kWhirlpoolAcChecksumByte1

- -
-
- - - - -
const uint8_t kWhirlpoolAcChecksumByte1 = 13
-
- -
-
- -

◆ kWhirlpoolAcChecksumByte2

- -
-
- - - - -
const uint8_t kWhirlpoolAcChecksumByte2 = kWhirlpoolAcStateLength - 1
-
- -
-
- -

◆ kWhirlpoolAcCommand6thSense

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommand6thSense = 0x17
-
- -
-
- -

◆ kWhirlpoolAcCommandFanSpeed

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandFanSpeed = 0x11
-
- -
-
- -

◆ kWhirlpoolAcCommandIFeel

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandIFeel = 0x0D
-
- -
-
- -

◆ kWhirlpoolAcCommandLight

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandLight = 0x00
-
- -
-
- -

◆ kWhirlpoolAcCommandMode

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandMode = 0x06
-
- -
-
- -

◆ kWhirlpoolAcCommandOffTimer

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandOffTimer = 0x1D
-
- -
-
- -

◆ kWhirlpoolAcCommandOnTimer

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandOnTimer = 0x05
-
- -
-
- -

◆ kWhirlpoolAcCommandPower

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandPower = 0x01
-
- -
-
- -

◆ kWhirlpoolAcCommandSleep

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandSleep = 0x03
-
- -
-
- -

◆ kWhirlpoolAcCommandSuper

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandSuper = 0x04
-
- -
-
- -

◆ kWhirlpoolAcCommandSwing

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandSwing = 0x07
-
- -
-
- -

◆ kWhirlpoolAcCommandTemp

- -
-
- - - - -
const uint8_t kWhirlpoolAcCommandTemp = 0x02
-
- -
-
- -

◆ kWhirlpoolAcCool

- -
-
- - - - -
const uint8_t kWhirlpoolAcCool = 2
-
- -
-
- -

◆ kWhirlpoolAcDry

- -
-
- - - - -
const uint8_t kWhirlpoolAcDry = 3
-
- -
-
- -

◆ kWhirlpoolAcFan

- -
-
- - - - -
const uint8_t kWhirlpoolAcFan = 4
-
- -
-
- -

◆ kWhirlpoolAcFanAuto

- -
-
- - - - -
const uint8_t kWhirlpoolAcFanAuto = 0
-
- -
-
- -

◆ kWhirlpoolAcFanHigh

- -
-
- - - - -
const uint8_t kWhirlpoolAcFanHigh = 1
-
- -
-
- -

◆ kWhirlpoolAcFanLow

- -
-
- - - - -
const uint8_t kWhirlpoolAcFanLow = 3
-
- -
-
- -

◆ kWhirlpoolAcFanMedium

- -
-
- - - - -
const uint8_t kWhirlpoolAcFanMedium = 2
-
- -
-
- -

◆ kWhirlpoolAcHeat

- -
-
- - - - -
const uint8_t kWhirlpoolAcHeat = 0
-
- -
-
- -

◆ kWhirlpoolAcMaxTemp

- -
-
- - - - -
const uint8_t kWhirlpoolAcMaxTemp = 32
-
- -
-
- -

◆ kWhirlpoolAcMinTemp

- -
-
- - - - -
const uint8_t kWhirlpoolAcMinTemp = 18
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h_source.html deleted file mode 100644 index 993781cf4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whirlpool_8h_source.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Whirlpool.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Whirlpool.h
-
-
-Go to the documentation of this file.
1 // Copyright 2018 David Conran
-
2 
-
10 
-
11 // Supports:
-
12 // Brand: Whirlpool, Model: DG11J1-3A remote
-
13 // Brand: Whirlpool, Model: DG11J1-04 remote
-
14 // Brand: Whirlpool, Model: DG11J1-91 remote
-
15 // Brand: Whirlpool, Model: SPIS409L A/C
-
16 // Brand: Whirlpool, Model: SPIS412L A/C
-
17 // Brand: Whirlpool, Model: SPIW409L A/C
-
18 // Brand: Whirlpool, Model: SPIW412L A/C
-
19 // Brand: Whirlpool, Model: SPIW418L A/C
-
20 
-
21 #ifndef IR_WHIRLPOOL_H_
-
22 #define IR_WHIRLPOOL_H_
-
23 
-
24 #define __STDC_LIMIT_MACROS
-
25 #include <stdint.h>
-
26 #ifndef UNIT_TEST
-
27 #include <Arduino.h>
-
28 #endif
-
29 #include "IRremoteESP8266.h"
-
30 #include "IRsend.h"
-
31 #ifdef UNIT_TEST
-
32 #include "IRsend_test.h"
-
33 #endif
-
34 
- - -
38  struct {
-
39  // Byte 0~1
-
40  uint8_t pad0[2];
-
41  // Byte 2
-
42  uint8_t Fan :2;
-
43  uint8_t Power :1;
-
44  uint8_t Sleep :1;
-
45  uint8_t :3;
-
46  uint8_t Swing1 :1;
-
47  // Byte 3
-
48  uint8_t Mode :3;
-
49  uint8_t :1;
-
50  uint8_t Temp :4;
-
51  // Byte 4
-
52  uint8_t :8;
-
53  // Byte 5
-
54  uint8_t :4;
-
55  uint8_t Super1 :1;
-
56  uint8_t :2;
-
57  uint8_t Super2 :1;
-
58  // Byte 6
-
59  uint8_t ClockHours :5;
-
60  uint8_t LightOff :1;
-
61  uint8_t :2;
-
62  // Byte 7
-
63  uint8_t ClockMins :6;
-
64  uint8_t :1;
-
65  uint8_t OffTimerEnabled :1;
-
66  // Byte 8
-
67  uint8_t OffHours :5;
-
68  uint8_t :1;
-
69  uint8_t Swing2 :1;
-
70  uint8_t :1;
-
71  // Byte 9
-
72  uint8_t OffMins :6;
-
73  uint8_t :1;
-
74  uint8_t OnTimerEnabled :1;
-
75  // Byte 10
-
76  uint8_t OnHours :5;
-
77  uint8_t :3;
-
78  // Byte 11
-
79  uint8_t OnMins :6;
-
80  uint8_t :2;
-
81  // Byte 12
-
82  uint8_t :8;
-
83  // Byte 13
-
84  uint8_t Sum1 :8;
-
85  // Byte 14
-
86  uint8_t :8;
-
87  // Byte 15
-
88  uint8_t Cmd :8;
-
89  // Byte 16~17
-
90  uint8_t pad1[2];
-
91  // Byte 18
-
92  uint8_t :3;
-
93  uint8_t J191 :1;
-
94  uint8_t :4;
-
95  // Byte 19
-
96  uint8_t :8;
-
97  // Byte 20
-
98  uint8_t Sum2 :8;
-
99  };
-
100 };
-
101 
-
102 // Constants
-
103 const uint8_t kWhirlpoolAcChecksumByte1 = 13;
- -
105 const uint8_t kWhirlpoolAcHeat = 0;
-
106 const uint8_t kWhirlpoolAcAuto = 1;
-
107 const uint8_t kWhirlpoolAcCool = 2;
-
108 const uint8_t kWhirlpoolAcDry = 3;
-
109 const uint8_t kWhirlpoolAcFan = 4;
-
110 const uint8_t kWhirlpoolAcFanAuto = 0;
-
111 const uint8_t kWhirlpoolAcFanHigh = 1;
-
112 const uint8_t kWhirlpoolAcFanMedium = 2;
-
113 const uint8_t kWhirlpoolAcFanLow = 3;
-
114 const uint8_t kWhirlpoolAcMinTemp = 18; // 18C (DG11J1-3A), 16C (DG11J1-91)
-
115 const uint8_t kWhirlpoolAcMaxTemp = 32; // 32C (DG11J1-3A), 30C (DG11J1-91)
-
116 const uint8_t kWhirlpoolAcAutoTemp = 23; // 23C
-
117 const uint8_t kWhirlpoolAcCommandLight = 0x00;
-
118 const uint8_t kWhirlpoolAcCommandPower = 0x01;
-
119 const uint8_t kWhirlpoolAcCommandTemp = 0x02;
-
120 const uint8_t kWhirlpoolAcCommandSleep = 0x03;
-
121 const uint8_t kWhirlpoolAcCommandSuper = 0x04;
-
122 const uint8_t kWhirlpoolAcCommandOnTimer = 0x05;
-
123 const uint8_t kWhirlpoolAcCommandMode = 0x06;
-
124 const uint8_t kWhirlpoolAcCommandSwing = 0x07;
-
125 const uint8_t kWhirlpoolAcCommandIFeel = 0x0D;
-
126 const uint8_t kWhirlpoolAcCommandFanSpeed = 0x11;
-
127 const uint8_t kWhirlpoolAcCommand6thSense = 0x17;
-
128 const uint8_t kWhirlpoolAcCommandOffTimer = 0x1D;
-
129 
-
130 // Classes
- -
133  public:
-
134  explicit IRWhirlpoolAc(const uint16_t pin, const bool inverted = false,
-
135  const bool use_modulation = true);
-
136  void stateReset(void);
-
137 #if SEND_WHIRLPOOL_AC
-
138  void send(const uint16_t repeat = kWhirlpoolAcDefaultRepeat,
-
139  const bool calcchecksum = true);
-
144  int8_t calibrate(void) { return _irsend.calibrate(); }
-
145 #endif // SEND_WHIRLPOOL_AC
-
146  void begin(void);
-
147  void setPowerToggle(const bool on);
-
148  bool getPowerToggle(void) const;
-
149  void setSleep(const bool on);
-
150  bool getSleep(void) const;
-
151  void setSuper(const bool on);
-
152  bool getSuper(void) const;
-
153  void setTemp(const uint8_t temp);
-
154  uint8_t getTemp(void) const;
-
155  void setFan(const uint8_t speed);
-
156  uint8_t getFan(void) const;
-
157  void setMode(const uint8_t mode);
-
158  uint8_t getMode(void) const;
-
159  void setSwing(const bool on);
-
160  bool getSwing(void) const;
-
161  void setLight(const bool on);
-
162  bool getLight(void) const;
-
163  uint16_t getClock(void) const;
-
164  void setClock(const uint16_t minspastmidnight);
-
165  uint16_t getOnTimer(void) const;
-
166  void setOnTimer(const uint16_t minspastmidnight);
-
167  void enableOnTimer(const bool on);
-
168  bool isOnTimerEnabled(void) const;
-
169  uint16_t getOffTimer(void) const;
-
170  void setOffTimer(const uint16_t minspastmidnight);
-
171  void enableOffTimer(const bool on);
-
172  bool isOffTimerEnabled(void) const;
-
173  void setCommand(const uint8_t code);
-
174  uint8_t getCommand(void) const;
- -
176  void setModel(const whirlpool_ac_remote_model_t model);
-
177  uint8_t* getRaw(const bool calcchecksum = true);
-
178  void setRaw(const uint8_t new_code[],
-
179  const uint16_t length = kWhirlpoolAcStateLength);
-
180  static bool validChecksum(const uint8_t state[],
-
181  const uint16_t length = kWhirlpoolAcStateLength);
-
182  static uint8_t convertMode(const stdAc::opmode_t mode);
-
183  static uint8_t convertFan(const stdAc::fanspeed_t speed);
-
184  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
185  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
186  stdAc::state_t toCommon(const stdAc::state_t *prev = NULL) const;
-
187  String toString(void) const;
-
188 #ifndef UNIT_TEST
-
189 
-
190  private:
- -
192 #else // UNIT_TEST
-
193  IRsendTest _irsend;
-
195 #endif // UNIT_TEST
- -
198  uint8_t _desiredtemp;
-
199  void checksum(const uint16_t length = kWhirlpoolAcStateLength);
-
200  void _setTemp(const uint8_t temp, const bool remember = true);
-
201  void _setMode(const uint8_t mode);
-
202  int8_t getTempOffset(void) const;
-
203 };
-
204 
-
205 #endif // IR_WHIRLPOOL_H_
-
-
uint16_t getClock(void) const
Get the clock time in nr. of minutes past midnight.
Definition: ir_Whirlpool.cpp:314
-
void send(const uint16_t repeat=kWhirlpoolAcDefaultRepeat, const bool calcchecksum=true)
Send the current internal state as an IR message.
Definition: ir_Whirlpool.cpp:142
-
void stateReset(void)
Reset the state of the remote to a known good state/sequence.
Definition: ir_Whirlpool.cpp:94
-
uint8_t raw[kWhirlpoolAcStateLength]
The state in IR code form.
Definition: ir_Whirlpool.h:37
-
bool getSwing(void) const
Get the (vertical) swing setting of the A/C.
Definition: ir_Whirlpool.cpp:289
-
uint8_t getFan(void) const
Get the current fan speed setting.
Definition: ir_Whirlpool.cpp:275
-
uint8_t Swing1
Definition: ir_Whirlpool.h:46
-
const uint8_t kWhirlpoolAcCommandSuper
Definition: ir_Whirlpool.h:121
-
uint8_t Swing2
Definition: ir_Whirlpool.h:69
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Whirlpool.h:144
-
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Whirlpool.cpp:441
-
uint8_t getCommand(void) const
Get the Command (Button) setting of the A/C.
Definition: ir_Whirlpool.cpp:384
-
void _setTemp(const uint8_t temp, const bool remember=true)
Set the temperature.
Definition: ir_Whirlpool.cpp:200
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition: ir_Whirlpool.cpp:254
-
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition: IRsend.h:170
-
const uint8_t kWhirlpoolAcAutoTemp
Definition: ir_Whirlpool.h:116
-
uint8_t OnMins
Definition: ir_Whirlpool.h:79
-
const uint8_t kWhirlpoolAcFanHigh
Definition: ir_Whirlpool.h:111
-
stdAc::state_t toCommon(const stdAc::state_t *prev=NULL) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Whirlpool.cpp:495
-
const uint8_t kWhirlpoolAcMaxTemp
Definition: ir_Whirlpool.h:115
-
const uint8_t kWhirlpoolAcAuto
Definition: ir_Whirlpool.h:106
-
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Whirlpool.cpp:456
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Whirlpool.cpp:483
-
uint16_t getOffTimer(void) const
Get the Off Timer time..
Definition: ir_Whirlpool.cpp:326
-
bool getSleep(void) const
Get the Sleep setting of the A/C.
Definition: ir_Whirlpool.cpp:398
-
IRWhirlpoolAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Whirlpool.cpp:89
-
String toString(void) const
Convert the current internal state into a human readable string.
Definition: ir_Whirlpool.cpp:530
-
const uint8_t kWhirlpoolAcCommandOnTimer
Definition: ir_Whirlpool.h:122
- -
void setTemp(const uint8_t temp)
Set the temperature.
Definition: ir_Whirlpool.cpp:210
-
const uint8_t kWhirlpoolAcCommandIFeel
Definition: ir_Whirlpool.h:125
-
whirlpool_ac_remote_model_t getModel(void) const
Get/Detect the model of the A/C.
Definition: ir_Whirlpool.cpp:165
-
void setClock(const uint16_t minspastmidnight)
Set the clock time in nr. of minutes past midnight.
Definition: ir_Whirlpool.cpp:308
-
int8_t getTempOffset(void) const
Calculate the temp. offset in deg C for the current model.
Definition: ir_Whirlpool.cpp:189
-
Class for sending all basic IR protocols.
Definition: IRsend.h:188
-
uint8_t Super1
Definition: ir_Whirlpool.h:55
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
const uint8_t kWhirlpoolAcChecksumByte1
Definition: ir_Whirlpool.h:103
-
Class for handling detailed Whirlpool A/C messages.
Definition: ir_Whirlpool.h:132
-
std::string String
Definition: IRremoteESP8266.h:1217
-
const uint8_t kWhirlpoolAcCommandMode
Definition: ir_Whirlpool.h:123
-
uint8_t getTemp(void) const
Get the current temperature setting.
Definition: ir_Whirlpool.cpp:218
-
bool isOffTimerEnabled(void) const
Is the Off timer enabled?
Definition: ir_Whirlpool.cpp:332
-
uint8_t pad1[2]
Definition: ir_Whirlpool.h:90
-
const uint8_t kWhirlpoolAcCool
Definition: ir_Whirlpool.h:107
-
const uint8_t kWhirlpoolAcCommandOffTimer
Definition: ir_Whirlpool.h:128
- -
bool getPowerToggle(void) const
Get the value of the current power toggle setting.
Definition: ir_Whirlpool.cpp:378
-
const uint8_t kWhirlpoolAcCommandSwing
Definition: ir_Whirlpool.h:124
-
uint8_t OffHours
Definition: ir_Whirlpool.h:67
-
Native representation of a Whirlpool A/C message.
Definition: ir_Whirlpool.h:36
-
WhirlpoolProtocol _
Definition: ir_Whirlpool.h:197
-
static bool validChecksum(const uint8_t state[], const uint16_t length=kWhirlpoolAcStateLength)
Verify the checksum is valid for a given state.
Definition: ir_Whirlpool.cpp:109
-
const uint8_t kWhirlpoolAcFanMedium
Definition: ir_Whirlpool.h:112
-
const uint8_t kWhirlpoolAcDry
Definition: ir_Whirlpool.h:108
-
void setPowerToggle(const bool on)
Change the power toggle setting.
Definition: ir_Whirlpool.cpp:370
-
void setOffTimer(const uint16_t minspastmidnight)
Set the Off Timer time.
Definition: ir_Whirlpool.cpp:320
-
uint8_t Sleep
Definition: ir_Whirlpool.h:44
-
const uint8_t kWhirlpoolAcCommandLight
Definition: ir_Whirlpool.h:117
-
void _setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Whirlpool.cpp:225
-
uint8_t ClockMins
Definition: ir_Whirlpool.h:63
-
const uint8_t kWhirlpoolAcFanLow
Definition: ir_Whirlpool.h:113
-
const uint16_t kWhirlpoolAcDefaultRepeat
Definition: IRremoteESP8266.h:1125
-
void setModel(const whirlpool_ac_remote_model_t model)
Set the model of the A/C to emulate.
Definition: ir_Whirlpool.cpp:174
-
void setSuper(const bool on)
Set the Super (Turbo/Jet) setting of the A/C.
Definition: ir_Whirlpool.cpp:404
-
uint8_t Power
Definition: ir_Whirlpool.h:43
-
const uint8_t kWhirlpoolAcChecksumByte2
Definition: ir_Whirlpool.h:104
-
const uint8_t kWhirlpoolAcFan
Definition: ir_Whirlpool.h:109
-
uint8_t OffMins
Definition: ir_Whirlpool.h:72
-
const uint8_t kWhirlpoolAcCommandFanSpeed
Definition: ir_Whirlpool.h:126
-
void setCommand(const uint8_t code)
Set the Command (Button) setting of the A/C.
Definition: ir_Whirlpool.cpp:434
-
const uint16_t kWhirlpoolAcStateLength
Definition: IRremoteESP8266.h:1123
-
uint8_t Cmd
Definition: ir_Whirlpool.h:88
-
void setRaw(const uint8_t new_code[], const uint16_t length=kWhirlpoolAcStateLength)
Set the internal state from a valid code for this protocol.
Definition: ir_Whirlpool.cpp:159
-
const uint8_t kWhirlpoolAcMinTemp
Definition: ir_Whirlpool.h:114
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Whirlpool.cpp:390
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Whirlpool.cpp:247
-
uint8_t OnTimerEnabled
Definition: ir_Whirlpool.h:74
-
const uint8_t kWhirlpoolAcHeat
Definition: ir_Whirlpool.h:105
-
void checksum(const uint16_t length=kWhirlpoolAcStateLength)
Calculate & set the checksum for the current internal state of the remote.
Definition: ir_Whirlpool.cpp:130
-
bool isOnTimerEnabled(void) const
Is the On timer enabled?
Definition: ir_Whirlpool.cpp:357
-
void enableOffTimer(const bool on)
Enable the Off Timer.
Definition: ir_Whirlpool.cpp:338
-
const uint8_t kWhirlpoolAcCommandPower
Definition: ir_Whirlpool.h:118
-
void enableOnTimer(const bool on)
Enable the On Timer.
Definition: ir_Whirlpool.cpp:363
-
IRsend _irsend
Instance of the IR send class.
Definition: ir_Whirlpool.h:191
-
void setOnTimer(const uint16_t minspastmidnight)
Set the On Timer time.
Definition: ir_Whirlpool.cpp:345
-
uint8_t _desiredtemp
The last user explicitly set temperature.
Definition: ir_Whirlpool.h:198
-
uint8_t LightOff
Definition: ir_Whirlpool.h:60
-
uint8_t OnHours
Definition: ir_Whirlpool.h:76
-
uint8_t Fan
Definition: ir_Whirlpool.h:42
-
uint8_t OffTimerEnabled
Definition: ir_Whirlpool.h:65
-
const uint8_t kWhirlpoolAcCommandTemp
Definition: ir_Whirlpool.h:119
-
uint8_t Super2
Definition: ir_Whirlpool.h:57
-
const uint8_t kWhirlpoolAcCommand6thSense
Definition: ir_Whirlpool.h:127
-
const uint8_t kWhirlpoolAcCommandSleep
Definition: ir_Whirlpool.h:120
-
uint8_t Sum1
Definition: ir_Whirlpool.h:84
-
uint8_t Sum2
Definition: ir_Whirlpool.h:98
-
uint8_t J191
Definition: ir_Whirlpool.h:93
-
uint8_t ClockHours
Definition: ir_Whirlpool.h:59
-
void begin(void)
Set up hardware to be able to send a message.
Definition: ir_Whirlpool.cpp:103
-
bool getLight(void) const
Get the Light (Display/LED) setting of the A/C.
Definition: ir_Whirlpool.cpp:302
-
uint8_t pad0[2]
Definition: ir_Whirlpool.h:40
-
uint16_t getOnTimer(void) const
Get the On Timer time..
Definition: ir_Whirlpool.cpp:351
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Whirlpool.cpp:260
-
void setLight(const bool on)
Set the Light (Display/LED) setting of the A/C.
Definition: ir_Whirlpool.cpp:295
-
uint8_t Mode
Definition: ir_Whirlpool.h:48
-
void setSwing(const bool on)
Set the (vertical) swing setting of the A/C.
Definition: ir_Whirlpool.cpp:281
-
uint8_t Temp
Definition: ir_Whirlpool.h:50
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Whirlpool.cpp:470
-
bool getSuper(void) const
Get the Super (Turbo/Jet) setting of the A/C.
Definition: ir_Whirlpool.cpp:428
-
const uint8_t kWhirlpoolAcFanAuto
Definition: ir_Whirlpool.h:110
-
uint8_t * getRaw(const bool calcchecksum=true)
Get a copy of the internal state/code for this protocol.
Definition: ir_Whirlpool.cpp:151
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whynter_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whynter_8cpp.html deleted file mode 100644 index 8e3336398..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Whynter_8cpp.html +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Whynter.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Whynter.cpp File Reference
-
-
- -

Support for Whynter protocols. Whynter A/C ARC-110WD added by Francesco Meschia Whynter originally added from https://github.com/shirriff/Arduino-IRremote/. -More...

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

-Variables

const uint16_t kWhynterTick = 50
 
const uint16_t kWhynterHdrMarkTicks = 57
 
const uint16_t kWhynterHdrMark = kWhynterHdrMarkTicks * kWhynterTick
 
const uint16_t kWhynterHdrSpaceTicks = 57
 
const uint16_t kWhynterHdrSpace = kWhynterHdrSpaceTicks * kWhynterTick
 
const uint16_t kWhynterBitMarkTicks = 15
 
const uint16_t kWhynterBitMark = kWhynterBitMarkTicks * kWhynterTick
 
const uint16_t kWhynterOneSpaceTicks = 43
 
const uint16_t kWhynterOneSpace = kWhynterOneSpaceTicks * kWhynterTick
 
const uint16_t kWhynterZeroSpaceTicks = 15
 
const uint16_t kWhynterZeroSpace = kWhynterZeroSpaceTicks * kWhynterTick
 
const uint16_t kWhynterMinCommandLengthTicks = 2160
 
const uint32_t kWhynterMinCommandLength
 
const uint16_t kWhynterMinGapTicks
 
const uint16_t kWhynterMinGap = kWhynterMinGapTicks * kWhynterTick
 
-

Detailed Description

-

Support for Whynter protocols. Whynter A/C ARC-110WD added by Francesco Meschia Whynter originally added from https://github.com/shirriff/Arduino-IRremote/.

-

Variable Documentation

- -

◆ kWhynterBitMark

- -
-
- - - - -
const uint16_t kWhynterBitMark = kWhynterBitMarkTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterBitMarkTicks

- -
-
- - - - -
const uint16_t kWhynterBitMarkTicks = 15
-
- -
-
- -

◆ kWhynterHdrMark

- -
-
- - - - -
const uint16_t kWhynterHdrMark = kWhynterHdrMarkTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterHdrMarkTicks

- -
-
- - - - -
const uint16_t kWhynterHdrMarkTicks = 57
-
- -
-
- -

◆ kWhynterHdrSpace

- -
-
- - - - -
const uint16_t kWhynterHdrSpace = kWhynterHdrSpaceTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterHdrSpaceTicks

- -
-
- - - - -
const uint16_t kWhynterHdrSpaceTicks = 57
-
- -
-
- -

◆ kWhynterMinCommandLength

- -
-
- - - - -
const uint32_t kWhynterMinCommandLength
-
-
- -

◆ kWhynterMinCommandLengthTicks

- -
-
- - - - -
const uint16_t kWhynterMinCommandLengthTicks = 2160
-
- -
-
- -

◆ kWhynterMinGap

- -
-
- - - - -
const uint16_t kWhynterMinGap = kWhynterMinGapTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterMinGapTicks

- -
-
- - - - -
const uint16_t kWhynterMinGapTicks
-
-
- -

◆ kWhynterOneSpace

- -
-
- - - - -
const uint16_t kWhynterOneSpace = kWhynterOneSpaceTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterOneSpaceTicks

- -
-
- - - - -
const uint16_t kWhynterOneSpaceTicks = 43
-
- -
-
- -

◆ kWhynterTick

- -
-
- - - - -
const uint16_t kWhynterTick = 50
-
- -
-
- -

◆ kWhynterZeroSpace

- -
-
- - - - -
const uint16_t kWhynterZeroSpace = kWhynterZeroSpaceTicks * kWhynterTick
-
- -
-
- -

◆ kWhynterZeroSpaceTicks

- -
-
- - - - -
const uint16_t kWhynterZeroSpaceTicks = 15
-
- -
-
-
-
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1126
-
const uint16_t kWhynterZeroSpaceTicks
Definition: ir_Whynter.cpp:27
-
const uint16_t kWhynterMinCommandLengthTicks
Definition: ir_Whynter.cpp:29
-
const uint16_t kWhynterBitMarkTicks
Definition: ir_Whynter.cpp:23
-
const uint16_t kWhynterTick
Definition: ir_Whynter.cpp:18
-
const uint16_t kWhynterOneSpaceTicks
Definition: ir_Whynter.cpp:25
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Xmp_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Xmp_8cpp.html deleted file mode 100644 index b32dafe4d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Xmp_8cpp.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Xmp.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Xmp.cpp File Reference
-
-
- -

Support for XMP protocols. -More...

- - - - -

-Namespaces

 IRXmpUtils
 
- - - - - - - - - - - - - - - - - - - -

-Functions

uint8_t IRXmpUtils::getSectionChecksum (const uint32_t data, const uint16_t nbits)
 Get the current checksum value from an XMP data section. More...
 
uint8_t IRXmpUtils::calcSectionChecksum (const uint32_t data, const uint16_t nbits)
 Calculate the correct checksum value for an XMP data section. More...
 
uint64_t IRXmpUtils::updateChecksums (const uint64_t data, const uint16_t nbits)
 Recalculate a XMP message code ensuring it has the checksums valid. More...
 
uint16_t IRXmpUtils::calcRepeatOffset (const uint16_t nbits)
 Calculate the bit offset the repeat nibble in an XMP code. More...
 
bool IRXmpUtils::isRepeat (const uint64_t data, const uint16_t nbits)
 Test if an XMP message code is a repeat or not. More...
 
uint64_t IRXmpUtils::adjustRepeat (const uint64_t data, const uint16_t nbits, const uint8_t repeat_code)
 Adjust an XMP message code to make it a valid repeat or non-repeat code. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint16_t kXmpMark = 210
 uSeconds. More...
 
const uint16_t kXmpBaseSpace = 760
 uSeconds More...
 
const uint16_t kXmpSpaceStep = 135
 uSeconds More...
 
const uint16_t kXmpFooterSpace = 13000
 uSeconds. More...
 
const uint32_t kXmpMessageGap = 80400
 uSeconds. More...
 
const uint8_t kXmpWordSize = kNibbleSize
 nr. of Bits in a word. More...
 
const uint8_t kXmpMaxWordValue = (1 << kXmpWordSize) - 1
 
const uint8_t kXmpSections = 2
 Nr. of Data sections. More...
 
const uint8_t kXmpRepeatCode = 0b1000
 
const uint8_t kXmpRepeatCodeAlt = 0b1001
 
-

Detailed Description

-

Variable Documentation

- -

◆ kXmpBaseSpace

- -
-
- - - - -
const uint16_t kXmpBaseSpace = 760
-
- -

uSeconds

- -
-
- -

◆ kXmpFooterSpace

- -
-
- - - - -
const uint16_t kXmpFooterSpace = 13000
-
- -

uSeconds.

- -
-
- -

◆ kXmpMark

- -
-
- - - - -
const uint16_t kXmpMark = 210
-
- -

uSeconds.

- -
-
- -

◆ kXmpMaxWordValue

- -
-
- - - - -
const uint8_t kXmpMaxWordValue = (1 << kXmpWordSize) - 1
-
- -
-
- -

◆ kXmpMessageGap

- -
-
- - - - -
const uint32_t kXmpMessageGap = 80400
-
- -

uSeconds.

- -
-
- -

◆ kXmpRepeatCode

- -
-
- - - - -
const uint8_t kXmpRepeatCode = 0b1000
-
- -
-
- -

◆ kXmpRepeatCodeAlt

- -
-
- - - - -
const uint8_t kXmpRepeatCodeAlt = 0b1001
-
- -
-
- -

◆ kXmpSections

- -
-
- - - - -
const uint8_t kXmpSections = 2
-
- -

Nr. of Data sections.

- -
-
- -

◆ kXmpSpaceStep

- -
-
- - - - -
const uint16_t kXmpSpaceStep = 135
-
- -

uSeconds

- -
-
- -

◆ kXmpWordSize

- -
-
- - - - -
const uint8_t kXmpWordSize = kNibbleSize
-
- -

nr. of Bits in a word.

- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Zepeal_8cpp.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Zepeal_8cpp.html deleted file mode 100644 index a28b6cdcd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/ir__Zepeal_8cpp.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Zepeal.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Zepeal.cpp File Reference
-
-
- -

Support for Zepeal protocol. This protocol uses fixed length bit encoding. Most official information about Zepeal seems to be from Denkyosha. -More...

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

-Variables

const uint16_t kZepealHdrMark = 2330
 
const uint16_t kZepealHdrSpace = 3380
 
const uint16_t kZepealOneMark = 1300
 
const uint16_t kZepealZeroMark = 420
 
const uint16_t kZepealOneSpace = kZepealZeroMark
 
const uint16_t kZepealZeroSpace = kZepealOneMark
 
const uint16_t kZepealFooterMark = 420
 
const uint16_t kZepealGap = 6750
 
const uint8_t kZepealTolerance = 40
 
const uint8_t kZepealSignature = 0x6C
 
const uint16_t kZepealCommandSpeed = 0x6C82
 
const uint16_t kZepealCommandOffOn = 0x6C81
 
const uint16_t kZepealCommandRhythm = 0x6C84
 
const uint16_t kZepealCommandOffTimer = 0x6C88
 
const uint16_t kZepealCommandOnTimer = 0x6CC3
 
-

Detailed Description

-

Support for Zepeal protocol. This protocol uses fixed length bit encoding. Most official information about Zepeal seems to be from Denkyosha.

-
See also
https://www.denkyosha.co.jp/
-

Variable Documentation

- -

◆ kZepealCommandOffOn

- -
-
- - - - -
const uint16_t kZepealCommandOffOn = 0x6C81
-
- -
-
- -

◆ kZepealCommandOffTimer

- -
-
- - - - -
const uint16_t kZepealCommandOffTimer = 0x6C88
-
- -
-
- -

◆ kZepealCommandOnTimer

- -
-
- - - - -
const uint16_t kZepealCommandOnTimer = 0x6CC3
-
- -
-
- -

◆ kZepealCommandRhythm

- -
-
- - - - -
const uint16_t kZepealCommandRhythm = 0x6C84
-
- -
-
- -

◆ kZepealCommandSpeed

- -
-
- - - - -
const uint16_t kZepealCommandSpeed = 0x6C82
-
- -
-
- -

◆ kZepealFooterMark

- -
-
- - - - -
const uint16_t kZepealFooterMark = 420
-
- -
-
- -

◆ kZepealGap

- -
-
- - - - -
const uint16_t kZepealGap = 6750
-
- -
-
- -

◆ kZepealHdrMark

- -
-
- - - - -
const uint16_t kZepealHdrMark = 2330
-
- -
-
- -

◆ kZepealHdrSpace

- -
-
- - - - -
const uint16_t kZepealHdrSpace = 3380
-
- -
-
- -

◆ kZepealOneMark

- -
-
- - - - -
const uint16_t kZepealOneMark = 1300
-
- -
-
- -

◆ kZepealOneSpace

- -
-
- - - - -
const uint16_t kZepealOneSpace = kZepealZeroMark
-
- -
-
- -

◆ kZepealSignature

- -
-
- - - - -
const uint8_t kZepealSignature = 0x6C
-
- -
-
- -

◆ kZepealTolerance

- -
-
- - - - -
const uint8_t kZepealTolerance = 40
-
- -
-
- -

◆ kZepealZeroMark

- -
-
- - - - -
const uint16_t kZepealZeroMark = 420
-
- -
-
- -

◆ kZepealZeroSpace

- -
-
- - - - -
const uint16_t kZepealZeroSpace = kZepealOneMark
-
- -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h.html deleted file mode 100644 index 8bd3af9fa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/it-IT.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
it-IT.h File Reference
-
- - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h_source.html deleted file mode 100644 index 4b554dec9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/it-IT_8h_source.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/it-IT.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
it-IT.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 - Enrico Gueli (@egueli)
-
2 // Locale/language file for Italian.
-
3 // This file will override the default values located in `defaults.h`.
-
4 
-
5 #ifndef LOCALE_IT_IT_H_
-
6 #define LOCALE_IT_IT_H_
-
7 
-
8 #define D_STR_UNKNOWN "SCONOSCIUTO"
-
9 #define D_STR_PROTOCOL "Protocollo"
-
10 #define D_STR_POWER "Accensione"
-
11 #define D_STR_PREVIOUS "Precedente"
-
12 #define D_STR_PREVIOUSPOWER D_STR_POWER " " D_STR_PREVIOUS
-
13 #define D_STR_ON "Acceso"
-
14 #define D_STR_OFF "Spento"
-
15 #define D_STR_MODE "Modalità"
-
16 #define D_STR_TOGGLE "Alterna"
-
17 #define D_STR_SLEEP "Sonno"
-
18 #define D_STR_LIGHT "Leggero"
-
19 #define D_STR_POWERFUL "Forte"
-
20 #define D_STR_QUIET "Silenzioso"
-
21 #define D_STR_ECONO "Eco"
-
22 #define D_STR_SWING "Swing"
-
23 #define D_STR_SWINGH D_STR_SWING"(O)" // Set `D_STR_SWING` first!
-
24 #define D_STR_SWINGV D_STR_SWING"(V)" // Set `D_STR_SWING` first!
-
25 #define D_STR_MOULD "Muffa"
-
26 #define D_STR_CLEAN "Pulizia"
-
27 #define D_STR_PURIFY "Purifica"
-
28 #define D_STR_TIMER "Timer"
-
29 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER // Set `D_STR_ON` first!
-
30 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER // Set `D_STR_OFF` first!
-
31 #define D_STR_CLOCK "Orologio"
-
32 #define D_STR_COMMAND "Comando"
-
33 #define D_STR_MODEL "Modello"
-
34 #define D_STR_TEMP "Temp"
-
35 #define D_STR_HUMID "Umido"
-
36 #define D_STR_SAVE "Salva"
-
37 #define D_STR_EYE "Occhio"
-
38 #define D_STR_FOLLOW "Segui"
-
39 #define D_STR_ION "Ioni"
-
40 #define D_STR_FRESH "Fresco"
-
41 #define D_STR_HOLD "Mantieni"
-
42 #define D_STR_8C_HEAT "8C " D_STR_HEAT // Set `D_STR_HEAT` first!
-
43 #define D_STR_BUTTON "Pulsante"
-
44 #define D_STR_NIGHT "Notte"
-
45 #define D_STR_SILENT "Silenzioso"
-
46 #define D_STR_FILTER "Filtro"
-
47 #define D_STR_UP "Su"
-
48 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP // Set `D_STR_TEMP` first!
-
49 #define D_STR_DOWN "Giù"
-
50 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN // Set `D_STR_TEMP` first!
-
51 #define D_STR_CHANGE "Cambia"
-
52 #define D_STR_START "Avvia"
-
53 #define D_STR_STOP "Ferma"
-
54 #define D_STR_MOVE "Muovi"
-
55 #define D_STR_SET "Imposta"
-
56 #define D_STR_CANCEL "Annulla"
-
57 #define D_STR_SENSOR "Sensore"
-
58 #define D_STR_WEEKLY "Settimanale"
-
59 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER // Needs `D_STR_WEEKLY`!
-
60 #define D_STR_LAST "Ultimo"
-
61 #define D_STR_FAST "Veloce"
-
62 #define D_STR_SLOW "Lento"
-
63 #define D_STR_AIRFLOW "Flusso d'aria"
-
64 #define D_STR_STEP "Passo"
-
65 #define D_STR_NA "N/D"
-
66 #define D_STR_OUTSIDE "Esterno"
-
67 #define D_STR_LOUD "Rumoroso"
-
68 #define D_STR_UPPER "Superiore"
-
69 #define D_STR_LOWER "Inferiore"
-
70 #define D_STR_CIRCULATE "Circolare"
-
71 #define D_STR_CEILING "Soffitto"
-
72 #define D_STR_WALL "Muro"
-
73 #define D_STR_ROOM "Camera"
-
74 #define D_STR_FIXED "Fisso"
-
75 
-
76 #define D_STR_AUTO "Auto"
-
77 #define D_STR_AUTOMATIC "Automatico"
-
78 #define D_STR_MANUAL "Manuale"
-
79 #define D_STR_COOL "Fresco"
-
80 #define D_STR_HEAT "Caldo"
-
81 #define D_STR_FAN "Ventola"
-
82 #define D_STR_FANONLY "solo_ventola"
-
83 #define D_STR_DRY "Secco"
-
84 
-
85 #define D_STR_MAX "Max"
-
86 #define D_STR_MAXIMUM "Massimo"
-
87 #define D_STR_MINIMUM "Minimo"
-
88 #define D_STR_MEDIUM "Medio"
-
89 
-
90 #define D_STR_HIGHEST "Molto alto"
-
91 #define D_STR_HIGH "Alto"
-
92 #define D_STR_MID "Med"
-
93 #define D_STR_MIDDLE "Medio"
-
94 #define D_STR_LOW "Basso"
-
95 #define D_STR_LOWEST "Bassissimo"
-
96 #define D_STR_RIGHT "Destra"
-
97 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT // Set `D_STR_MAX` first!
-
98 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX // Set `D_STR_MAX` first!
-
99 #define D_STR_LEFT "Sinistra"
-
100 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT // Set `D_STR_MAX` first!
-
101 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX // Set `D_STR_MAX` first!
-
102 #define D_STR_WIDE "Largo"
-
103 #define D_STR_CENTRE "Centro"
-
104 #define D_STR_TOP "Superiore"
-
105 #define D_STR_BOTTOM "Inferiore"
-
106 // Compound words/phrases/descriptions from pre-defined words.
-
107 // Note: Obviously these need to be defined *after* their component words.
-
108 
-
109 #define D_STR_EYEAUTO D_STR_EYE " " D_STR_AUTO
-
110 #define D_STR_LIGHTTOGGLE D_STR_LIGHT " " D_STR_TOGGLE
-
111 #define D_STR_OUTSIDEQUIET D_STR_OUTSIDE " " D_STR_QUIET
-
112 #define D_STR_POWERTOGGLE D_STR_POWER " " D_STR_TOGGLE
-
113 #define D_STR_SENSORTEMP D_STR_SENSOR " " D_STR_TEMP
-
114 #define D_STR_SLEEP_TIMER D_STR_SLEEP " " D_STR_TIMER
-
115 #define D_STR_SWINGVMODE D_STR_SWINGV " " D_STR_MODE
-
116 #define D_STR_SWINGVTOGGLE D_STR_SWINGV " " D_STR_TOGGLE
-
117 // Separators
-
118 #ifndef D_CHR_TIME_SEP
-
119 #define D_CHR_TIME_SEP '.'
-
120 #endif // D_CHR_TIME_SEP
-
121 
-
122 #define D_STR_SPACELBRACE " ("
-
123 #define D_STR_COMMASPACE ", "
-
124 #define D_STR_COLONSPACE ": "
-
125 
-
126 #define D_STR_DAY "Giorno"
-
127 #define D_STR_DAYS D_STR_DAY "s"
-
128 #define D_STR_HOUR "Ore"
-
129 #define D_STR_HOURS D_STR_HOUR "s"
-
130 #define D_STR_MINUTE "Minuti"
-
131 #define D_STR_MINUTES D_STR_MINUTE "s"
-
132 #define D_STR_SECOND "Secondi"
-
133 #define D_STR_SECONDS D_STR_SECOND "s"
-
134 #define D_STR_NOW "Adesso"
-
135 #define D_STR_THREELETTERDAYS "DomLunMarMerGioVenSab"
-
136 
-
137 #define D_STR_YES "Sì"
-
138 #define D_STR_TRUE "Vero"
-
139 #define D_STR_FALSE "Falso"
-
140 
-
141 #define D_STR_REPEAT "Ripeti"
-
142 #define D_STR_CODE "Codice"
-
143 #define D_STR_BITS "Bit"
-
144 
-
145 // IRrecvDumpV2+
-
146 #define D_STR_LIBRARY "Libreria"
-
147 #define D_STR_MESGDESC "Desc. Mess."
-
148 #define D_STR_IRRECVDUMP_STARTUP \
-
149  "IRrecvDump è ora attivo e in attesa di segnali IR dal pin %d"
-
150 
-
151 #ifndef D_WARN_BUFFERFULL
-
152 #define D_WARN_BUFFERFULL \
-
153  "ATTENZIONE: il codice IR è troppo grande per il buffer (>= %d). " \
-
154  "Non fare affidamento a questi risultati finché questo problema " \
-
155  "non è risolto." \
-
156  "Modifica e aumenta `kCaptureBufferSize`."
-
157 #endif // D_WARN_BUFFERFULL
-
158 
-
159 #endif // LOCALE_IT_IT_H_
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/jquery.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/jquery.js deleted file mode 100644 index 103c32d79..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/jquery.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/md_src_locale_README.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/md_src_locale_README.html deleted file mode 100644 index 2289f61b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/md_src_locale_README.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -IRremoteESP8266: Internationalisation (I18N) & Locale Files - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Internationalisation (I18N) & Locale Files
-
-
-

This directory contains the files used by the library to store the text it uses. If you want to add support for a language, this is the correct place. If you are adding text strings to a routine, you should use the ones here.

-

-Changing the language/locale used by the library.

-

There are several ways to change which locale file is used by the library. Use which ever one suits your needs best. To keep the space used by the library to a minimum, all methods require the change to happen at compile time. There is no runtime option to change locales.

-

-Change <tt>_IR_LOCALE_</tt> in the <tt>src/IRremoteESP8266.h</tt> file.

-

In the IRremoteESP8266.h file, find and locate the lines that look like:

{c++}
-
#ifndef _IR_LOCALE_
-
#define _IR_LOCALE_ en-AU
-
#endif // _IR_LOCALE_
-

Change en-AU to the language & country that best suits your needs. e.g. de-DE for Germany/German.

-

-Use a compile-time build flag.

-

Use the compiler flag: -D_IR_LOCALE_=en-AU when compiling the library. Especially when compiling the IRtext.cpp file. Change en-AU to a value which matches one of the file names in this directory. e.g. de-DE for Germany/German, which will use the de_DE.h file.

-

-Use the appropriate pre-prepared build environment. _(PlatformIO only)_

-

If you examine the platformio.ini file located in the same directory as the example code you may find pre-setup compile environments for the different supported locales. Choose the appropriate one for you language by asking PlatformIO to build or upload using that environment. e.g. See IRrecvDumpV2's platformio.ini

-

-Use a custom <tt>build_flags</tt>. _(PlatformIO only)_

-

Edit the platformio.ini file in the directory containing your example/source code. Either in the default PlatformIO environment ([env]), or in which ever PlatformIO environment you using, change or add the following line:

build_flags = -D_IR_LOCALE_=en-AU ; Or use which ever locale variable you want.
-

Every time you change that line, you should do a pio clean or choose the clean option from the build menu, to ensure a fresh copy of IRtext.o is created.

-

-Adding support for a new locale/language.

-

Only ASCII/UTF-8 8-bit characters are supported. Unicode is not supported. Unicode may work. It may not. It's just not supported. i.e. If Arduino's Serial.print() can handle it, it will probably work.

-

-Copy/create a new locale file in this directory.

-

Copy en-AU.h or which every is a closer fit for your language to xx-YY.h where xx is the ISO code for the language. e.g. en is English. de is German etc. and YY is the ISO country code. e.g. AU is Australia. Modify the comments and all LOCALE_EN_AU_H_s in the file to LOCALE_XX_YY_H_ for your locale.

-

-Override any <tt>#‍define</tt> values that reside in <tt>defaults.h</tt>

-

Go through the defaults.h file, and find any #‍define lines that define a macro starting with D_ that has text that needs to change for your locale. Copy or create a corresponding #‍define D_STR_HELLOWORLD "Hello World" in your xx-YY.h file, and translate the text appropriately e.g. #‍define D_STR_HELLOWORLD "Bonjour le monde" (French)

-

Any values you #‍define in xx-YY.h will override the corresponding value in the defaults.h file.

-

-Supporting a dialect/regional variant of another <em>existing</em> language/locale.

-

Similar to the previous step, if you only need to modify a small subset of the strings used in another locale file, then include the other locale file and then make sure to #‍undef any strings that need to be (re-)changed. See the Swiss-German for an example of how to do this. i.e. It #‍include "locale/de-DE.h"s the German locale, and redefines any strings that are not standard German.

-

-Adding new text strings to the library.

-

If you need to add an entirely new string to the library to support some feature etc. e.g. _"Widget"_. You should first understand how the library tries to do this such that it is easy to support different languages for it.

-
    -
  1. Use a constant named kWidgetStr in the appropriate statement in the .cpp file.
  2. -
  3. Edit IRtext.cpp, and add the appropriate line for your new constant. e.g.
    {c++}
    -
    String kWidgetStr = D_STR_WIDGET;
    -
  4. -
-

The kWidgetStr variable will house the sole copy of the string for the entire library. This limits any duplication. The D_STR_WIDGET macro will be what is targeted by the different language / locales files.

-
    -
  1. Edit locale/defaults.h, and add the appropriate stanza for your new string. e.g.
    {c++}
    -
    #ifndef D_STR_WIDGET
    -
    #define D_STR_WIDGET "Turbo"
    -
    #endif // D_STR_WIDGET
    -
  2. -
  3. _(Manual)_ Update IRtext.h, and add the appropriate line for your new constant. e.g.
    {c++}
    -
    extern const String kWidgetStr;
    -
  4. -
-

For any file that #‍include <IRtext.h>s this file, it will tell it that the string is stored elsewhere, and to look for it elsewhere at the object linking stage of the build. This is what makes the string be referenced from a central location.

-
    -
  1. _(Automatic)_ Run tools/generate_irtext_h.sh to update IRtext.h. In the src/locale directory. Run the ../../tools/generate_irtext_h.sh command. It will update the file for you automatically.
  2. -
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menu.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menu.js deleted file mode 100644 index 433c15b8f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menu.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menudata.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menudata.js deleted file mode 100644 index e2ef9b24f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/menudata.js +++ /dev/null @@ -1,210 +0,0 @@ -/* -@licstart The following is the entire license notice for the -JavaScript code in this file. - -Copyright (C) 1997-2019 by Dimitri van Heesch - -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -@licend The above is the entire license notice -for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Related Pages",url:"pages.html"}, -{text:"Namespaces",url:"namespaces.html",children:[ -{text:"Namespace List",url:"namespaces.html"}, -{text:"Namespace Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html",children:[ -{text:"a",url:"namespacemembers.html#index_a"}, -{text:"b",url:"namespacemembers.html#index_b"}, -{text:"c",url:"namespacemembers.html#index_c"}, -{text:"d",url:"namespacemembers.html#index_d"}, -{text:"f",url:"namespacemembers.html#index_f"}, -{text:"g",url:"namespacemembers.html#index_g"}, -{text:"h",url:"namespacemembers.html#index_h"}, -{text:"i",url:"namespacemembers.html#index_i"}, -{text:"l",url:"namespacemembers.html#index_l"}, -{text:"m",url:"namespacemembers.html#index_m"}, -{text:"o",url:"namespacemembers.html#index_o"}, -{text:"p",url:"namespacemembers.html#index_p"}, -{text:"r",url:"namespacemembers.html#index_r"}, -{text:"s",url:"namespacemembers.html#index_s"}, -{text:"u",url:"namespacemembers.html#index_u"}]}, -{text:"Functions",url:"namespacemembers_func.html",children:[ -{text:"a",url:"namespacemembers_func.html#index_a"}, -{text:"b",url:"namespacemembers_func.html#index_b"}, -{text:"c",url:"namespacemembers_func.html#index_c"}, -{text:"d",url:"namespacemembers_func.html#index_d"}, -{text:"g",url:"namespacemembers_func.html#index_g"}, -{text:"h",url:"namespacemembers_func.html#index_h"}, -{text:"i",url:"namespacemembers_func.html#index_i"}, -{text:"l",url:"namespacemembers_func.html#index_l"}, -{text:"m",url:"namespacemembers_func.html#index_m"}, -{text:"r",url:"namespacemembers_func.html#index_r"}, -{text:"s",url:"namespacemembers_func.html#index_s"}, -{text:"u",url:"namespacemembers_func.html#index_u"}]}, -{text:"Variables",url:"namespacemembers_vars.html"}, -{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, -{text:"Classes",url:"annotated.html",children:[ -{text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"inherits.html"}, -{text:"Class Members",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"_",url:"functions.html#index__5F"}, -{text:"a",url:"functions_a.html#index_a"}, -{text:"b",url:"functions_b.html#index_b"}, -{text:"c",url:"functions_c.html#index_c"}, -{text:"d",url:"functions_d.html#index_d"}, -{text:"e",url:"functions_e.html#index_e"}, -{text:"f",url:"functions_f.html#index_f"}, -{text:"g",url:"functions_g.html#index_g"}, -{text:"h",url:"functions_h.html#index_h"}, -{text:"i",url:"functions_i.html#index_i"}, -{text:"j",url:"functions_j.html#index_j"}, -{text:"k",url:"functions_k.html#index_k"}, -{text:"l",url:"functions_l.html#index_l"}, -{text:"m",url:"functions_m.html#index_m"}, -{text:"n",url:"functions_n.html#index_n"}, -{text:"o",url:"functions_o.html#index_o"}, -{text:"p",url:"functions_p.html#index_p"}, -{text:"q",url:"functions_q.html#index_q"}, -{text:"r",url:"functions_r.html#index_r"}, -{text:"s",url:"functions_s.html#index_s"}, -{text:"t",url:"functions_t.html#index_t"}, -{text:"u",url:"functions_u.html#index_u"}, -{text:"v",url:"functions_v.html#index_v"}, -{text:"w",url:"functions_w.html#index_w"}, -{text:"x",url:"functions_x.html#index_x"}, -{text:"z",url:"functions_z.html#index_z"}, -{text:"~",url:"functions_~.html#index__7E"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"_",url:"functions_func.html#index__5F"}, -{text:"a",url:"functions_func_a.html#index_a"}, -{text:"b",url:"functions_func_b.html#index_b"}, -{text:"c",url:"functions_func_c.html#index_c"}, -{text:"d",url:"functions_func_d.html#index_d"}, -{text:"e",url:"functions_func_e.html#index_e"}, -{text:"f",url:"functions_func_f.html#index_f"}, -{text:"g",url:"functions_func_g.html#index_g"}, -{text:"h",url:"functions_func_h.html#index_h"}, -{text:"i",url:"functions_func_i.html#index_i"}, -{text:"k",url:"functions_func_k.html#index_k"}, -{text:"l",url:"functions_func_l.html#index_l"}, -{text:"m",url:"functions_func_m.html#index_m"}, -{text:"n",url:"functions_func_n.html#index_n"}, -{text:"o",url:"functions_func_o.html#index_o"}, -{text:"p",url:"functions_func_p.html#index_p"}, -{text:"r",url:"functions_func_r.html#index_r"}, -{text:"s",url:"functions_func_s.html#index_s"}, -{text:"t",url:"functions_func_t.html#index_t"}, -{text:"u",url:"functions_func_u.html#index_u"}, -{text:"v",url:"functions_func_v.html#index_v"}, -{text:"w",url:"functions_func_w.html#index_w"}, -{text:"~",url:"functions_func_~.html#index__7E"}]}, -{text:"Variables",url:"functions_vars.html",children:[ -{text:"_",url:"functions_vars.html#index__5F"}, -{text:"a",url:"functions_vars_a.html#index_a"}, -{text:"b",url:"functions_vars_b.html#index_b"}, -{text:"c",url:"functions_vars_c.html#index_c"}, -{text:"d",url:"functions_vars_d.html#index_d"}, -{text:"e",url:"functions_vars_e.html#index_e"}, -{text:"f",url:"functions_vars_f.html#index_f"}, -{text:"h",url:"functions_vars_h.html#index_h"}, -{text:"i",url:"functions_vars_i.html#index_i"}, -{text:"j",url:"functions_vars_j.html#index_j"}, -{text:"l",url:"functions_vars_l.html#index_l"}, -{text:"m",url:"functions_vars_m.html#index_m"}, -{text:"n",url:"functions_vars_n.html#index_n"}, -{text:"o",url:"functions_vars_o.html#index_o"}, -{text:"p",url:"functions_vars_p.html#index_p"}, -{text:"q",url:"functions_vars_q.html#index_q"}, -{text:"r",url:"functions_vars_r.html#index_r"}, -{text:"s",url:"functions_vars_s.html#index_s"}, -{text:"t",url:"functions_vars_t.html#index_t"}, -{text:"u",url:"functions_vars_u.html#index_u"}, -{text:"v",url:"functions_vars_v.html#index_v"}, -{text:"w",url:"functions_vars_w.html#index_w"}, -{text:"x",url:"functions_vars_x.html#index_x"}, -{text:"z",url:"functions_vars_z.html#index_z"}]}, -{text:"Related Functions",url:"functions_rela.html"}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"File Members",url:"globals.html",children:[ -{text:"All",url:"globals.html",children:[ -{text:"_",url:"globals.html#index__5F"}, -{text:"a",url:"globals_a.html#index_a"}, -{text:"c",url:"globals_c.html#index_c"}, -{text:"d",url:"globals_d.html#index_d"}, -{text:"e",url:"globals_e.html#index_e"}, -{text:"f",url:"globals_f.html#index_f"}, -{text:"g",url:"globals_g.html#index_g"}, -{text:"h",url:"globals_h.html#index_h"}, -{text:"i",url:"globals_i.html#index_i"}, -{text:"j",url:"globals_j.html#index_j"}, -{text:"k",url:"globals_k.html#index_k"}, -{text:"l",url:"globals_l.html#index_l"}, -{text:"m",url:"globals_m.html#index_m"}, -{text:"n",url:"globals_n.html#index_n"}, -{text:"p",url:"globals_p.html#index_p"}, -{text:"r",url:"globals_r.html#index_r"}, -{text:"s",url:"globals_s.html#index_s"}, -{text:"t",url:"globals_t.html#index_t"}, -{text:"u",url:"globals_u.html#index_u"}, -{text:"v",url:"globals_v.html#index_v"}, -{text:"w",url:"globals_w.html#index_w"}, -{text:"x",url:"globals_x.html#index_x"}, -{text:"y",url:"globals_y.html#index_y"}, -{text:"z",url:"globals_z.html#index_z"}]}, -{text:"Functions",url:"globals_func.html",children:[ -{text:"c",url:"globals_func.html#index_c"}, -{text:"f",url:"globals_func.html#index_f"}, -{text:"g",url:"globals_func.html#index_g"}, -{text:"h",url:"globals_func.html#index_h"}, -{text:"i",url:"globals_func.html#index_i"}, -{text:"r",url:"globals_func.html#index_r"}, -{text:"s",url:"globals_func.html#index_s"}, -{text:"t",url:"globals_func.html#index_t"}, -{text:"u",url:"globals_func.html#index_u"}, -{text:"x",url:"globals_func.html#index_x"}]}, -{text:"Variables",url:"globals_vars.html",children:[ -{text:"_",url:"globals_vars.html#index__5F"}, -{text:"k",url:"globals_vars_k.html#index_k"}]}, -{text:"Typedefs",url:"globals_type.html"}, -{text:"Enumerations",url:"globals_enum.html"}, -{text:"Enumerator",url:"globals_eval.html",children:[ -{text:"a",url:"globals_eval.html#index_a"}, -{text:"c",url:"globals_eval.html#index_c"}, -{text:"d",url:"globals_eval.html#index_d"}, -{text:"e",url:"globals_eval.html#index_e"}, -{text:"f",url:"globals_eval.html#index_f"}, -{text:"g",url:"globals_eval.html#index_g"}, -{text:"h",url:"globals_eval.html#index_h"}, -{text:"i",url:"globals_eval.html#index_i"}, -{text:"j",url:"globals_eval.html#index_j"}, -{text:"k",url:"globals_eval.html#index_k"}, -{text:"l",url:"globals_eval.html#index_l"}, -{text:"m",url:"globals_eval.html#index_m"}, -{text:"n",url:"globals_eval.html#index_n"}, -{text:"p",url:"globals_eval.html#index_p"}, -{text:"r",url:"globals_eval.html#index_r"}, -{text:"s",url:"globals_eval.html#index_s"}, -{text:"t",url:"globals_eval.html#index_t"}, -{text:"u",url:"globals_eval.html#index_u"}, -{text:"v",url:"globals_eval.html#index_v"}, -{text:"w",url:"globals_eval.html#index_w"}, -{text:"x",url:"globals_eval.html#index_x"}, -{text:"y",url:"globals_eval.html#index_y"}, -{text:"z",url:"globals_eval.html#index_z"}]}]}]}]} diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRAcUtils.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRAcUtils.html deleted file mode 100644 index e633a29ed..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRAcUtils.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - -IRremoteESP8266: IRAcUtils Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    IRAcUtils Namespace Reference
    -
    -
    - -

    Common functions for use with all A/Cs supported by the IRac class. -More...

    - - - - - - - - -

    -Functions

    String resultAcToString (const decode_results *const result)
     Display the human readable state of an A/C message if we can. More...
     
    bool decodeToState (const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
     Convert a valid IR A/C remote message that we understand enough into a Common A/C state. More...
     
    -

    Detailed Description

    -

    Common functions for use with all A/Cs supported by the IRac class.

    -

    Function Documentation

    - -

    ◆ decodeToState()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool IRAcUtils::decodeToState (const decode_resultsdecode,
    stdAc::state_tresult,
    const stdAc::state_tprev 
    )
    -
    - -

    Convert a valid IR A/C remote message that we understand enough into a Common A/C state.

    -
    Parameters
    - - - - -
    [in]decodeA PTR to a successful raw IR decode object.
    [in]resultA PTR to a state structure to store the result in.
    [in]prevA PTR to a state structure which has the prev. state.
    -
    -
    -
    Returns
    A boolean indicating success or failure.
    - -
    -
    - -

    ◆ resultAcToString()

    - -
    -
    - - - - - - - - -
    String IRAcUtils::resultAcToString (const decode_results *const result)
    -
    - -

    Display the human readable state of an A/C message if we can.

    -
    Parameters
    - - -
    [in]resultA Ptr to the captured decode_results that contains an A/C mesg.
    -
    -
    -
    Returns
    A string with the human description of the A/C message. An empty string if we can't.
    - -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRXmpUtils.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRXmpUtils.html deleted file mode 100644 index 0bbf4b203..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceIRXmpUtils.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - - -IRremoteESP8266: IRXmpUtils Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    IRXmpUtils Namespace Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - -

    -Functions

    uint8_t getSectionChecksum (const uint32_t data, const uint16_t nbits)
     Get the current checksum value from an XMP data section. More...
     
    uint8_t calcSectionChecksum (const uint32_t data, const uint16_t nbits)
     Calculate the correct checksum value for an XMP data section. More...
     
    uint64_t updateChecksums (const uint64_t data, const uint16_t nbits)
     Recalculate a XMP message code ensuring it has the checksums valid. More...
     
    uint16_t calcRepeatOffset (const uint16_t nbits)
     Calculate the bit offset the repeat nibble in an XMP code. More...
     
    bool isRepeat (const uint64_t data, const uint16_t nbits)
     Test if an XMP message code is a repeat or not. More...
     
    uint64_t adjustRepeat (const uint64_t data, const uint16_t nbits, const uint8_t repeat_code)
     Adjust an XMP message code to make it a valid repeat or non-repeat code. More...
     
    -

    Function Documentation

    - -

    ◆ adjustRepeat()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uint64_t IRXmpUtils::adjustRepeat (const uint64_t data,
    const uint16_t nbits,
    const uint8_t repeat_code 
    )
    -
    - -

    Adjust an XMP message code to make it a valid repeat or non-repeat code.

    -
    Parameters
    - - - - -
    [in]dataThe value of the XMP message code.
    [in]nbitsThe number of data bits in the entire message code.
    [in]repeat_codeThe value of the XMP repeat nibble to use. A value of 8 is the normal value for a repeat. 9 has also been seen. A value of 0 will convert the code to a non-repeat code.
    -
    -
    -
    Returns
    The valud of the modified XMP code.
    - -
    -
    - -

    ◆ calcRepeatOffset()

    - -
    -
    - - - - - - - - -
    uint16_t IRXmpUtils::calcRepeatOffset (const uint16_t nbits)
    -
    - -

    Calculate the bit offset the repeat nibble in an XMP code.

    -
    Parameters
    - - -
    [in]nbitsThe number of data bits in the entire message code.
    -
    -
    -
    Returns
    The offset to the start of the XMP repeat nibble.
    - -
    -
    - -

    ◆ calcSectionChecksum()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uint8_t IRXmpUtils::calcSectionChecksum (const uint32_t data,
    const uint16_t nbits 
    )
    -
    - -

    Calculate the correct checksum value for an XMP data section.

    -
    Parameters
    - - - -
    [in]dataThe value of the data section.
    [in]nbitsThe number of data bits in the section.
    -
    -
    -
    Returns
    The value of the correct checksum.
    - -
    -
    - -

    ◆ getSectionChecksum()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uint8_t IRXmpUtils::getSectionChecksum (const uint32_t data,
    const uint16_t nbits 
    )
    -
    - -

    Get the current checksum value from an XMP data section.

    -
    Parameters
    - - - -
    [in]dataThe value of the data section.
    [in]nbitsThe number of data bits in the section.
    -
    -
    -
    Returns
    The value of the stored checksum.
    -
    Warning
    Returns 0 if we can't obtain a valid checksum.
    - -
    -
    - -

    ◆ isRepeat()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool IRXmpUtils::isRepeat (const uint64_t data,
    const uint16_t nbits 
    )
    -
    - -

    Test if an XMP message code is a repeat or not.

    -
    Parameters
    - - - -
    [in]dataThe value of the XMP message code.
    [in]nbitsThe number of data bits in the entire message code.
    -
    -
    -
    Returns
    true, if it looks like a repeat, false if not.
    - -
    -
    - -

    ◆ updateChecksums()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uint64_t IRXmpUtils::updateChecksums (const uint64_t data,
    const uint16_t nbits 
    )
    -
    - -

    Recalculate a XMP message code ensuring it has the checksums valid.

    -
    Parameters
    - - - -
    [in]dataThe value of the XMP message code.
    [in]nbitsThe number of data bits in the entire message code.
    -
    -
    -
    Returns
    The corrected XMP message with valid checksum sections.
    - -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespace__IRrecv.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespace__IRrecv.html deleted file mode 100644 index 88eb2798b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespace__IRrecv.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -IRremoteESP8266: _IRrecv Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    _IRrecv Namespace Reference
    -
    -
    - - - - - - - - -

    -Variables

    portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED
     
    volatile irparams_t params
     
    irparams_tparams_save
     
    -

    Variable Documentation

    - -

    ◆ mux

    - -
    -
    - - - - -
    portMUX_TYPE _IRrecv::mux = portMUX_INITIALIZER_UNLOCKED
    -
    - -
    -
    - -

    ◆ params

    - -
    -
    - - - - -
    volatile irparams_t _IRrecv::params
    -
    - -
    -
    - -

    ◆ params_save

    - -
    -
    - - - - -
    irparams_t* _IRrecv::params_save
    -
    - -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceirutils.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceirutils.html deleted file mode 100644 index b1a7234ca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaceirutils.html +++ /dev/null @@ -1,1695 +0,0 @@ - - - - - - - -IRremoteESP8266: irutils Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    irutils Namespace Reference
    -
    -
    - -

    Namespace for covering common functions & procedures for advancd protocol handlers. -More...

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

    -Functions

    String addLabeledString (const String value, const String label, const bool precomma)
     Create a String with a colon separated "label: value" pair suitable for Humans. More...
     
    String addBoolToString (const bool value, const String label, const bool precomma)
     Create a String with a colon separated flag suitable for Humans. e.g. "Power: On". More...
     
    String addIntToString (const uint16_t value, const String label, const bool precomma)
     Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23". More...
     
    String modelToStr (const decode_type_t protocol, const int16_t model)
     Generate the model string for a given Protocol/Model pair. More...
     
    String addModelToString (const decode_type_t protocol, const int16_t model, const bool precomma)
     Create a String of human output for a given protocol model number. e.g. "Model: JKE". More...
     
    String addTempToString (const uint16_t degrees, const bool celsius, const bool precomma)
     Create a String of human output for a given temperature. e.g. "Temp: 25C". More...
     
    String addTempFloatToString (const float degrees, const bool celsius, const bool precomma)
     Create a String of human output for a given temperature. e.g. "Temp: 25.5C". More...
     
    String addModeToString (const uint8_t mode, const uint8_t automatic, const uint8_t cool, const uint8_t heat, const uint8_t dry, const uint8_t fan)
     Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)". More...
     
    String addDayToString (const uint8_t day_of_week, const int8_t offset, const bool precomma)
     Create a String of the 3-letter day of the week from a numerical day of the week. e.g. "Day: 1 (Mon)". More...
     
    String addFanToString (const uint8_t speed, const uint8_t high, const uint8_t low, const uint8_t automatic, const uint8_t quiet, const uint8_t medium, const uint8_t maximum)
     Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)". More...
     
    String addSwingHToString (const uint8_t position, const uint8_t automatic, const uint8_t maxleft, const uint8_t left, const uint8_t middle, const uint8_t right, const uint8_t maxright, const uint8_t off, const uint8_t leftright, const uint8_t rightleft, const uint8_t threed, const uint8_t wide)
     Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)". More...
     
    String addSwingVToString (const uint8_t position, const uint8_t automatic, const uint8_t highest, const uint8_t high, const uint8_t uppermiddle, const uint8_t middle, const uint8_t lowermiddle, const uint8_t low, const uint8_t lowest, const uint8_t off, const uint8_t swing, const uint8_t breeze, const uint8_t circulate)
     Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)". More...
     
    String htmlEscape (const String unescaped)
     Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS. More...
     
    String msToString (uint32_t const msecs)
     Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds". More...
     
    String minsToString (const uint16_t mins)
     Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59". More...
     
    uint8_t sumNibbles (const uint8_t *const start, const uint16_t length, const uint8_t init)
     Sum all the nibbles together in a series of bytes. More...
     
    uint8_t sumNibbles (const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)
     Sum all the nibbles together in an integer. More...
     
    uint8_t bcdToUint8 (const uint8_t bcd)
     Convert a byte of Binary Coded Decimal(BCD) into an Integer. More...
     
    uint8_t uint8ToBcd (const uint8_t integer)
     Convert an Integer into a byte of Binary Coded Decimal(BCD). More...
     
    bool getBit (const uint64_t data, const uint8_t position, const uint8_t size)
     Return the value of positionth bit of an Integer. More...
     
    bool getBit (const uint8_t data, const uint8_t position)
     Return the value of positionth bit of an Integer. More...
     
    uint64_t setBit (const uint64_t data, const uint8_t position, const bool on, const uint8_t size)
     Return the value of an Integer with the positionth bit changed. More...
     
    uint8_t setBit (const uint8_t data, const uint8_t position, const bool on)
     Return the value of an Integer with the positionth bit changed. More...
     
    void setBit (uint8_t *const data, const uint8_t position, const bool on)
     Alter the value of an Integer with the positionth bit changed. More...
     
    void setBit (uint32_t *const data, const uint8_t position, const bool on)
     Alter the value of an Integer with the positionth bit changed. More...
     
    void setBit (uint64_t *const data, const uint8_t position, const bool on)
     Alter the value of an Integer with the positionth bit changed. More...
     
    void setBits (uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)
     Alter an uint8_t value by overwriting an arbitrary given number of bits. More...
     
    void setBits (uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)
     Alter an uint32_t value by overwriting an arbitrary given number of bits. More...
     
    void setBits (uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)
     Alter an uint64_t value by overwriting an arbitrary given number of bits. More...
     
    uint8_t * invertBytePairs (uint8_t *ptr, const uint16_t length)
     Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
     
    bool checkInvertedBytePairs (const uint8_t *const ptr, const uint16_t length)
     Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/previous byte of the pair. More...
     
    uint8_t lowLevelSanityCheck (void)
     Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler operation. Calls to this should return 0 if everything is as expected, anything else means the library won't work as expected. More...
     
    -

    Detailed Description

    -

    Namespace for covering common functions & procedures for advancd protocol handlers.

    -

    Function Documentation

    - -

    ◆ addBoolToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addBoolToString (const bool value,
    const String label,
    const bool precomma 
    )
    -
    - -

    Create a String with a colon separated flag suitable for Humans. e.g. "Power: On".

    -
    Parameters
    - - - - -
    [in]valueThe value to come after the label.
    [in]labelThe label to precede the value.
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addDayToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addDayToString (const uint8_t day_of_week,
    const int8_t offset,
    const bool precomma 
    )
    -
    - -

    Create a String of the 3-letter day of the week from a numerical day of the week. e.g. "Day: 1 (Mon)".

    -
    Parameters
    - - - - -
    [in]day_of_weekA numerical version of the sequential day of the week. e.g. Saturday = 7 etc.
    [in]offsetDays to offset by. e.g. For different day starting the week.
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addFanToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addFanToString (const uint8_t speed,
    const uint8_t high,
    const uint8_t low,
    const uint8_t automatic,
    const uint8_t quiet,
    const uint8_t medium,
    const uint8_t maximum 
    )
    -
    - -

    Create a String of human output for the given fan speed. e.g. "Fan: 0 (Auto)".

    -
    Parameters
    - - - - - - - - -
    [in]speedThe numeric speed of the fan to display.
    [in]highThe numeric value for High speed.
    [in]lowThe numeric value for Low speed.
    [in]automaticThe numeric value for Auto speed.
    [in]quietThe numeric value for Quiet speed.
    [in]mediumThe numeric value for Medium speed.
    [in]maximumThe numeric value for Highest speed. (if > high)
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addIntToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addIntToString (const uint16_t value,
    const String label,
    const bool precomma 
    )
    -
    - -

    Create a String with a colon separated labeled Integer suitable for Humans. e.g. "Foo: 23".

    -
    Parameters
    - - - - -
    [in]valueThe value to come after the label.
    [in]labelThe label to precede the value.
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addLabeledString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addLabeledString (const String value,
    const String label,
    const bool precomma 
    )
    -
    - -

    Create a String with a colon separated "label: value" pair suitable for Humans.

    -
    Parameters
    - - - - -
    [in]valueThe value to come after the label.
    [in]labelThe label to precede the value.
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addModelToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addModelToString (const decode_type_t protocol,
    const int16_t model,
    const bool precomma 
    )
    -
    - -

    Create a String of human output for a given protocol model number. e.g. "Model: JKE".

    -
    Parameters
    - - - - -
    [in]protocolThe IR protocol.
    [in]modelThe model number for that protocol.
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addModeToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addModeToString (const uint8_t mode,
    const uint8_t automatic,
    const uint8_t cool,
    const uint8_t heat,
    const uint8_t dry,
    const uint8_t fan 
    )
    -
    - -

    Create a String of human output for the given operating mode. e.g. "Mode: 1 (Cool)".

    -
    Parameters
    - - - - - - - -
    [in]modeThe operating mode to display.
    [in]automaticThe numeric value for Auto mode.
    [in]coolThe numeric value for Cool mode.
    [in]heatThe numeric value for Heat mode.
    [in]dryThe numeric value for Dry mode.
    [in]fanThe numeric value for Fan mode.
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addSwingHToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addSwingHToString (const uint8_t position,
    const uint8_t automatic,
    const uint8_t maxleft,
    const uint8_t left,
    const uint8_t middle,
    const uint8_t right,
    const uint8_t maxright,
    const uint8_t off,
    const uint8_t leftright,
    const uint8_t rightleft,
    const uint8_t threed,
    const uint8_t wide 
    )
    -
    - -

    Create a String of human output for the given horizontal swing setting. e.g. "Swing(H): 0 (Auto)".

    -
    Parameters
    - - - - - - - - - - - - - -
    [in]positionThe numeric position of the swing to display.
    [in]automaticThe numeric value for Auto position.
    [in]maxleftThe numeric value for most left position.
    [in]leftThe numeric value for Left position.
    [in]middleThe numeric value for Middle position.
    [in]rightThe numeric value for Right position.
    [in]maxrightThe numeric value for most right position.
    [in]offThe numeric value for Off position.
    [in]leftrightThe numeric value for "left right" position.
    [in]rightleftThe numeric value for "right left" position.
    [in]threedThe numeric value for 3D setting.
    [in]wideThe numeric value for Wide position.
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addSwingVToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addSwingVToString (const uint8_t position,
    const uint8_t automatic,
    const uint8_t highest,
    const uint8_t high,
    const uint8_t uppermiddle,
    const uint8_t middle,
    const uint8_t lowermiddle,
    const uint8_t low,
    const uint8_t lowest,
    const uint8_t off,
    const uint8_t swing,
    const uint8_t breeze,
    const uint8_t circulate 
    )
    -
    - -

    Create a String of human output for the given vertical swing setting. e.g. "Swing(V): 0 (Auto)".

    -
    Parameters
    - - - - - - - - - - - - - - -
    [in]positionThe numeric position of the swing to display.
    [in]automaticThe numeric value for Auto position.
    [in]highestThe numeric value for Highest position.
    [in]highThe numeric value for High position.
    [in]uppermiddleThe numeric value for Upper Middle position.
    [in]middleThe numeric value for Middle position.
    [in]lowermiddleThe numeric value for Lower Middle position.
    [in]lowThe numeric value for Low position.
    [in]lowestThe numeric value for Low position.
    [in]offThe numeric value for Off position.
    [in]swingThe numeric value for Swing setting.
    [in]breezeThe numeric value for Breeze setting.
    [in]circulateThe numeric value for Circulate setting.
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addTempFloatToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addTempFloatToString (const float degrees,
    const bool celsius,
    const bool precomma 
    )
    -
    - -

    Create a String of human output for a given temperature. e.g. "Temp: 25.5C".

    -
    Parameters
    - - - - -
    [in]degreesThe temperature in degrees.
    [in]celsiusIs the temp Celsius or Fahrenheit. true is C, false is F
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ addTempToString()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    String irutils::addTempToString (const uint16_t degrees,
    const bool celsius,
    const bool precomma 
    )
    -
    - -

    Create a String of human output for a given temperature. e.g. "Temp: 25C".

    -
    Parameters
    - - - - -
    [in]degreesThe temperature in degrees.
    [in]celsiusIs the temp Celsius or Fahrenheit. true is C, false is F
    [in]precommaShould the output string start with ", " or not?
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ bcdToUint8()

    - -
    -
    - - - - - - - - -
    uint8_t irutils::bcdToUint8 (const uint8_t bcd)
    -
    - -

    Convert a byte of Binary Coded Decimal(BCD) into an Integer.

    -
    Parameters
    - - -
    [in]bcdThe BCD value.
    -
    -
    -
    Returns
    A normal Integer value.
    - -
    -
    - -

    ◆ checkInvertedBytePairs()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool irutils::checkInvertedBytePairs (const uint8_t *const ptr,
    const uint16_t length 
    )
    -
    - -

    Check an array to see if every second byte of a pair is a bit inverted/flipped copy of the first/previous byte of the pair.

    -
    Parameters
    - - - -
    [in]ptrA pointer to the start of array to check.
    [in]lengthThe byte size of the array.
    -
    -
    -
    Note
    A length of <= 1 will always return true.
    -
    Returns
    true, if every second byte is inverted. Otherwise false.
    - -
    -
    - -

    ◆ getBit() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool irutils::getBit (const uint64_t data,
    const uint8_t position,
    const uint8_t size 
    )
    -
    - -

    Return the value of positionth bit of an Integer.

    -
    Parameters
    - - - - -
    [in]dataValue to be examined.
    [in]positionNr. of the Nth bit to be examined. 0 is the LSB.
    [in]sizeNr. of bits in data.
    -
    -
    -
    Returns
    The bit's value.
    - -
    -
    - -

    ◆ getBit() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool irutils::getBit (const uint8_t data,
    const uint8_t position 
    )
    -
    - -

    Return the value of positionth bit of an Integer.

    -
    Parameters
    - - - -
    [in]dataValue to be examined.
    [in]positionNr. of the Nth bit to be examined. 0 is the LSB.
    -
    -
    -
    Returns
    The bit's value.
    - -
    -
    - -

    ◆ htmlEscape()

    - -
    -
    - - - - - - - - -
    String irutils::htmlEscape (const String unescaped)
    -
    - -

    Escape any special HTML (unsafe) characters in a string. e.g. anti-XSS.

    -
    Parameters
    - - -
    [in]unescapedA String containing text to make HTML safe.
    -
    -
    -
    Returns
    A string that is HTML safe.
    - -
    -
    - -

    ◆ invertBytePairs()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    uint8_t * irutils::invertBytePairs (uint8_t * ptr,
    const uint16_t length 
    )
    -
    - -

    Create byte pairs where the second byte of the pair is a bit inverted/flipped copy of the first/previous byte of the pair.

    -
    Parameters
    - - - -
    [in,out]ptrA pointer to the start of array to modify.
    [in]lengthThe byte size of the array.
    -
    -
    -
    Note
    A length of <= 1 will do nothing.
    -
    Returns
    A ptr to the modified array.
    - -
    -
    - -

    ◆ lowLevelSanityCheck()

    - -
    -
    - - - - - - - - -
    uint8_t irutils::lowLevelSanityCheck (void )
    -
    - -

    Perform a low level bit manipulation sanity check for the given cpu architecture and the compiler operation. Calls to this should return 0 if everything is as expected, anything else means the library won't work as expected.

    -
    Returns
    A bit mask value of potential issues. 0: (e.g. 0b00000000) Everything appears okay. 0th bit set: (0b1) Unexpected bit field/packing encountered. Try a different compiler. 1st bit set: (0b10) Unexpected Endianness. Try a different compiler flag or use a CPU different architecture. e.g. A result of 3 (0b11) would mean both a bit field and an Endianness issue has been found.
    - -
    -
    - -

    ◆ minsToString()

    - -
    -
    - - - - - - - - -
    String irutils::minsToString (const uint16_t mins)
    -
    - -

    Convert a nr. of minutes into a 24h clock format Human-readable string. e.g. "23:59".

    -
    Parameters
    - - -
    [in]minsNr. of Minutes.
    -
    -
    -
    Returns
    A human readable string.
    - -
    -
    - -

    ◆ modelToStr()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    String irutils::modelToStr (const decode_type_t protocol,
    const int16_t model 
    )
    -
    - -

    Generate the model string for a given Protocol/Model pair.

    -
    Parameters
    - - - -
    [in]protocolThe IR protocol.
    [in]modelThe model number for that protocol.
    -
    -
    -
    Returns
    The resulting String.
    - -
    -
    - -

    ◆ msToString()

    - -
    -
    - - - - - - - - -
    String irutils::msToString (uint32_t const msecs)
    -
    - -

    Convert a nr. of milliSeconds into a Human-readable string. e.g. "1 Day 6 Hours 34 Minutes 17 Seconds".

    -
    Parameters
    - - -
    [in]msecsNr. of milliSeconds (ms).
    -
    -
    -
    Returns
    A human readable string.
    - -
    -
    - -

    ◆ setBit() [1/5]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    uint64_t irutils::setBit (const uint64_t data,
    const uint8_t position,
    const bool on,
    const uint8_t size 
    )
    -
    - -

    Return the value of an Integer with the positionth bit changed.

    -
    Parameters
    - - - - - -
    [in]dataValue to be changed.
    [in]positionNr. of the bit to be changed. 0 is the LSB.
    [in]onValue to set the position'th bit to.
    [in]sizeNr. of bits in data.
    -
    -
    -
    Returns
    A suitably modified integer.
    - -
    -
    - -

    ◆ setBit() [2/5]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uint8_t irutils::setBit (const uint8_t data,
    const uint8_t position,
    const bool on 
    )
    -
    - -

    Return the value of an Integer with the positionth bit changed.

    -
    Parameters
    - - - - -
    [in]dataValue to be changed.
    [in]positionNr. of the bit to be changed. 0 is the LSB.
    [in]onValue to set the position'th bit to.
    -
    -
    -
    Returns
    A suitably modified integer.
    - -
    -
    - -

    ◆ setBit() [3/5]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBit (uint32_t *const data,
    const uint8_t position,
    const bool on 
    )
    -
    - -

    Alter the value of an Integer with the positionth bit changed.

    -
    Parameters
    - - - - -
    [in,out]dataA pointer to the 32-bit integer to be changed.
    [in]positionNr. of the bit to be changed. 0 is the LSB.
    [in]onValue to set the position'th bit to.
    -
    -
    - -
    -
    - -

    ◆ setBit() [4/5]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBit (uint64_t *const data,
    const uint8_t position,
    const bool on 
    )
    -
    - -

    Alter the value of an Integer with the positionth bit changed.

    -
    Parameters
    - - - - -
    [in,out]dataA pointer to the 64-bit integer to be changed.
    [in]positionNr. of the bit to be changed. 0 is the LSB.
    [in]onValue to set the position'th bit to.
    -
    -
    - -
    -
    - -

    ◆ setBit() [5/5]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBit (uint8_t *const data,
    const uint8_t position,
    const bool on 
    )
    -
    - -

    Alter the value of an Integer with the positionth bit changed.

    -
    Parameters
    - - - - -
    [in,out]dataA pointer to the 8-bit integer to be changed.
    [in]positionNr. of the bit to be changed. 0 is the LSB.
    [in]onValue to set the position'th bit to.
    -
    -
    - -
    -
    - -

    ◆ setBits() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBits (uint32_t *const dst,
    const uint8_t offset,
    const uint8_t nbits,
    const uint32_t data 
    )
    -
    - -

    Alter an uint32_t value by overwriting an arbitrary given number of bits.

    -
    Parameters
    - - - - - -
    [in,out]dstA pointer to the value to be changed.
    [in]offsetNr. of bits from the Least Significant Bit to be ignored
    [in]nbitsNr of bits of data to be placed into the destination.
    [in]dataThe value to be placed.
    -
    -
    - -
    -
    - -

    ◆ setBits() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBits (uint64_t *const dst,
    const uint8_t offset,
    const uint8_t nbits,
    const uint64_t data 
    )
    -
    - -

    Alter an uint64_t value by overwriting an arbitrary given number of bits.

    -
    Parameters
    - - - - - -
    [in,out]dstA pointer to the value to be changed.
    [in]offsetNr. of bits from the Least Significant Bit to be ignored
    [in]nbitsNr of bits of data to be placed into the destination.
    [in]dataThe value to be placed.
    -
    -
    - -
    -
    - -

    ◆ setBits() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void irutils::setBits (uint8_t *const dst,
    const uint8_t offset,
    const uint8_t nbits,
    const uint8_t data 
    )
    -
    - -

    Alter an uint8_t value by overwriting an arbitrary given number of bits.

    -
    Parameters
    - - - - - -
    [in,out]dstA pointer to the value to be changed.
    [in]offsetNr. of bits from the Least Significant Bit to be ignored
    [in]nbitsNr of bits of data to be placed into the destination.
    [in]dataThe value to be placed.
    -
    -
    - -
    -
    - -

    ◆ sumNibbles() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    uint8_t irutils::sumNibbles (const uint64_t data,
    const uint8_t count,
    const uint8_t init,
    const bool nibbleonly 
    )
    -
    - -

    Sum all the nibbles together in an integer.

    -
    Parameters
    - - - - - -
    [in]dataThe integer to be summed.
    [in]countThe number of nibbles to sum. Starts from LSB. Max of 16.
    [in]initStarting value of the calculation to use. (Default is 0)
    [in]nibbleonlytrue, the result is 4 bits. false, it's 8 bits.
    -
    -
    -
    Returns
    The 4/8-bit calculated result of all the nibbles and init value.
    - -
    -
    - -

    ◆ sumNibbles() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    uint8_t irutils::sumNibbles (const uint8_t *const start,
    const uint16_t length,
    const uint8_t init 
    )
    -
    - -

    Sum all the nibbles together in a series of bytes.

    -
    Parameters
    - - - - -
    [in]startA ptr to the start of the byte array to calculate over.
    [in]lengthHow many bytes to use in the calculation.
    [in]initStarting value of the calculation to use. (Default is 0)
    -
    -
    -
    Returns
    The 8-bit calculated result of all the bytes and init value.
    - -
    -
    - -

    ◆ uint8ToBcd()

    - -
    -
    - - - - - - - - -
    uint8_t irutils::uint8ToBcd (const uint8_t integer)
    -
    - -

    Convert an Integer into a byte of Binary Coded Decimal(BCD).

    -
    Parameters
    - - -
    [in]integerThe number to convert.
    -
    -
    -
    Returns
    An 8-bit BCD value.
    - -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers.html deleted file mode 100644 index b86ad435c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - -IRremoteESP8266: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    - -

    - a -

    - - -

    - b -

    - - -

    - c -

    - - -

    - d -

    - - -

    - f -

      -
    • fanspeed_t -: stdAc -
    • -
    - - -

    - g -

    - - -

    - h -

    - - -

    - i -

    - - -

    - l -

      -
    • lowLevelSanityCheck() -: irutils -
    • -
    - - -

    - m -

    - - -

    - o -

    - - -

    - p -

    - - -

    - r -

    - - -

    - s -

    - - -

    - u -

    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_enum.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_enum.html deleted file mode 100644 index 20b291697..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_enum.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_func.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_func.html deleted file mode 100644 index 61634a708..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_func.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -IRremoteESP8266: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - a -

    - - -

    - b -

    - - -

    - c -

    - - -

    - d -

    - - -

    - g -

    - - -

    - h -

    - - -

    - i -

    - - -

    - l -

      -
    • lowLevelSanityCheck() -: irutils -
    • -
    - - -

    - m -

    - - -

    - r -

    - - -

    - s -

    - - -

    - u -

    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_vars.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_vars.html deleted file mode 100644 index 815962a0a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacemembers_vars.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -IRremoteESP8266: Namespace Members - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaces.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaces.html deleted file mode 100644 index 6bf789ce5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespaces.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -IRremoteESP8266: Namespace List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Namespace List
    -
    -
    -
    Here is a list of all namespaces with brief descriptions:
    - - - - - - -
     N_IRrecv
     NIRAcUtilsCommon functions for use with all A/Cs supported by the IRac class
     NirutilsNamespace for covering common functions & procedures for advancd protocol handlers
     NIRXmpUtils
     NstdAcEnumerators and Structures for the Common A/C API
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacestdAc.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacestdAc.html deleted file mode 100644 index 59ba02326..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/namespacestdAc.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - -IRremoteESP8266: stdAc Namespace Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    stdAc Namespace Reference
    -
    -
    - -

    Enumerators and Structures for the Common A/C API. -More...

    - - - - - -

    -Classes

    struct  state_t
     Structure to hold a common A/C state. More...
     
    - - - - - - - - - - - - - -

    -Enumerations

    enum  opmode_t {
    -  opmode_t::kOff = -1, -opmode_t::kAuto = 0, -opmode_t::kCool = 1, -opmode_t::kHeat = 2, -
    -  opmode_t::kDry = 3, -opmode_t::kFan = 4, -opmode_t::kLastOpmodeEnum = kFan -
    - }
     Common A/C settings for A/C operating modes. More...
     
    enum  fanspeed_t {
    -  fanspeed_t::kAuto = 0, -fanspeed_t::kMin = 1, -fanspeed_t::kLow = 2, -fanspeed_t::kMedium = 3, -
    -  fanspeed_t::kHigh = 4, -fanspeed_t::kMax = 5, -fanspeed_t::kLastFanspeedEnum = kMax -
    - }
     Common A/C settings for Fan Speeds. More...
     
    enum  swingv_t {
    -  swingv_t::kOff = -1, -swingv_t::kAuto = 0, -swingv_t::kHighest = 1, -swingv_t::kHigh = 2, -
    -  swingv_t::kMiddle = 3, -swingv_t::kLow = 4, -swingv_t::kLowest = 5, -swingv_t::kLastSwingvEnum = kLowest -
    - }
     Common A/C settings for Vertical Swing. More...
     
    enum  swingh_t {
    -  swingh_t::kOff = -1, -swingh_t::kAuto = 0, -swingh_t::kLeftMax = 1, -swingh_t::kLeft = 2, -
    -  swingh_t::kMiddle = 3, -swingh_t::kRight = 4, -swingh_t::kRightMax = 5, -swingh_t::kWide = 6, -
    -  swingh_t::kLastSwinghEnum = kWide -
    - }
     Common A/C settings for Horizontal Swing. More...
     
    -

    Detailed Description

    -

    Enumerators and Structures for the Common A/C API.

    -

    Enumeration Type Documentation

    - -

    ◆ fanspeed_t

    - -
    -
    - - - - - -
    - - - - -
    enum stdAc::fanspeed_t
    -
    -strong
    -
    - -

    Common A/C settings for Fan Speeds.

    - - - - - - - - -
    Enumerator
    kAuto 
    kMin 
    kLow 
    kMedium 
    kHigh 
    kMax 
    kLastFanspeedEnum 
    - -
    -
    - -

    ◆ opmode_t

    - -
    -
    - - - - - -
    - - - - -
    enum stdAc::opmode_t
    -
    -strong
    -
    - -

    Common A/C settings for A/C operating modes.

    - - - - - - - - -
    Enumerator
    kOff 
    kAuto 
    kCool 
    kHeat 
    kDry 
    kFan 
    kLastOpmodeEnum 
    - -
    -
    - -

    ◆ swingh_t

    - -
    -
    - - - - - -
    - - - - -
    enum stdAc::swingh_t
    -
    -strong
    -
    - -

    Common A/C settings for Horizontal Swing.

    - - - - - - - - - - -
    Enumerator
    kOff 
    kAuto 
    kLeftMax 
    kLeft 
    kMiddle 
    kRight 
    kRightMax 
    kWide 
    kLastSwinghEnum 
    - -
    -
    - -

    ◆ swingv_t

    - -
    -
    - - - - - -
    - - - - -
    enum stdAc::swingv_t
    -
    -strong
    -
    - -

    Common A/C settings for Vertical Swing.

    - - - - - - - - - -
    Enumerator
    kOff 
    kAuto 
    kHighest 
    kHigh 
    kMiddle 
    kLow 
    kLowest 
    kLastSwingvEnum 
    - -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_f.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_f.png deleted file mode 100644 index 72a58a529..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_f.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_g.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_g.png deleted file mode 100644 index 2093a237a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_g.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_h.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_h.png deleted file mode 100644 index 33389b101..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/nav_h.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/open.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/open.png deleted file mode 100644 index 30f75c7ef..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/open.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pages.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pages.html deleted file mode 100644 index 8cc753069..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pages.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -IRremoteESP8266: Related Pages - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Related Pages
    -
    -
    -
    Here is a list of all related documentation pages:
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h.html deleted file mode 100644 index c781e38f4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/pt-BR.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pt-BR.h File Reference
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h_source.html deleted file mode 100644 index 82254cbe4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/pt-BR_8h_source.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/pt-BR.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    pt-BR.h
    -
    -
    -Go to the documentation of this file.
    1 // Copyright 2020 - Guilherme (@guieiras)
    -
    2 // Locale/language file for Portuguese / Brazil.
    -
    3 // This file will override the default values located in `defaults.h`.
    -
    4 #ifndef LOCALE_PT_BR_H_
    -
    5 #define LOCALE_PT_BR_H_
    -
    6 
    -
    7 #define D_STR_UNKNOWN "DESCONHECIDO"
    -
    8 #define D_STR_PROTOCOL "Protocolo"
    -
    9 #define D_STR_POWER "Energia"
    -
    10 #define D_STR_PREVIOUS "Anterior"
    -
    11 #define D_STR_ON "Ligado"
    -
    12 #define D_STR_OFF "Desligado"
    -
    13 #define D_STR_MODE "Modo"
    -
    14 #define D_STR_TOGGLE "Alterar"
    -
    15 #define D_STR_TURBO "Turbo"
    -
    16 #define D_STR_SUPER "Super"
    -
    17 #define D_STR_SLEEP "Dormir"
    -
    18 #define D_STR_LIGHT "Luz"
    -
    19 #define D_STR_POWERFUL "Potente"
    -
    20 #define D_STR_QUIET "Silencioso"
    -
    21 #define D_STR_ECONO "Econômico"
    -
    22 #define D_STR_SWING "Girar"
    -
    23 #define D_STR_SWINGH D_STR_SWING"(H)"
    -
    24 #define D_STR_SWINGV D_STR_SWING"(V)"
    -
    25 #define D_STR_BEEP "Tocar beep"
    -
    26 #define D_STR_MOULD "Moldar"
    -
    27 #define D_STR_CLEAN "Limpar"
    -
    28 #define D_STR_PURIFY "Purificar"
    -
    29 #define D_STR_TIMER "Timer"
    -
    30 #define D_STR_ONTIMER D_STR_TIMER " " D_STR_ON
    -
    31 #define D_STR_OFFTIMER D_STR_TIMER " " D_STR_OFF
    -
    32 #define D_STR_CLOCK "Relógio"
    -
    33 #define D_STR_COMMAND "Comando"
    -
    34 #define D_STR_HEALTH "Saúde"
    -
    35 #define D_STR_MODEL "Modelo"
    -
    36 #define D_STR_TEMP "Temperatura"
    -
    37 #define D_STR_HUMID "Umidificar"
    -
    38 #define D_STR_SAVE "Salvar"
    -
    39 #define D_STR_EYE "Ver"
    -
    40 #define D_STR_FOLLOW "Acompanhar"
    -
    41 #define D_STR_ION "Ionizar"
    -
    42 #define D_STR_FRESH "Refrescar"
    -
    43 #define D_STR_HOLD "Manter"
    -
    44 #define D_STR_BUTTON "Botão"
    -
    45 #define D_STR_NIGHT "Noite"
    -
    46 #define D_STR_SILENT "Silencioso"
    -
    47 #define D_STR_FILTER "Filtrar"
    -
    48 #define D_STR_3D "3D"
    -
    49 #define D_STR_CELSIUS "Celsius"
    -
    50 #define D_STR_FAHRENHEIT "Fahrenheit"
    -
    51 #define D_STR_CELSIUS_FAHRENHEIT D_STR_CELSIUS "/" D_STR_FAHRENHEIT
    -
    52 #define D_STR_UP "Aumentar"
    -
    53 #define D_STR_TEMPUP D_STR_UP " " D_STR_TEMP
    -
    54 #define D_STR_DOWN "Diminuir"
    -
    55 #define D_STR_TEMPDOWN D_STR_DOWN " " D_STR_TEMP
    -
    56 #define D_STR_CHANGE "Alterar"
    -
    57 #define D_STR_START "Iniciar"
    -
    58 #define D_STR_STOP "Parar"
    -
    59 #define D_STR_MOVE "Mover"
    -
    60 #define D_STR_SET "Definir"
    -
    61 #define D_STR_CANCEL "Cancelar"
    -
    62 #define D_STR_COMFORT "Conforto"
    -
    63 #define D_STR_SENSOR "Sensor"
    -
    64 #define D_STR_DISPLAY "Mostrar"
    -
    65 #define D_STR_WEEKLY "Semanal"
    -
    66 #define D_STR_WEEKLYTIMER D_STR_TIMER " " D_STR_WEEKLY
    -
    67 #define D_STR_WIFI "WiFi"
    -
    68 #define D_STR_LAST "Último"
    -
    69 #define D_STR_FAST "Rápido"
    -
    70 #define D_STR_SLOW "Devagar"
    -
    71 #define D_STR_AIRFLOW "Fluxo de Ar"
    -
    72 #define D_STR_STEP "Etapa"
    -
    73 #define D_STR_NA "N/A"
    -
    74 #define D_STR_INSIDE "Interno"
    -
    75 #define D_STR_OUTSIDE "Externo"
    -
    76 #define D_STR_LOUD "Alto"
    -
    77 #define D_STR_UPPER "Mais alto"
    -
    78 #define D_STR_LOWER "Mais baixo"
    -
    79 #define D_STR_BREEZE "Brisa"
    -
    80 #define D_STR_CIRCULATE "Circular"
    -
    81 #define D_STR_CEILING "Teto"
    -
    82 #define D_STR_WALL "Parede"
    -
    83 #define D_STR_ROOM "Sala"
    -
    84 #define D_STR_6THSENSE "Sexto sentido"
    -
    85 #define D_STR_ZONEFOLLOW "Acompanhar ambiente"
    -
    86 #define D_STR_FIXED "Fixo"
    -
    87 
    -
    88 #define D_STR_AUTO "Auto"
    -
    89 #define D_STR_AUTOMATIC "Automático"
    -
    90 #define D_STR_MANUAL "Manual"
    -
    91 #define D_STR_COOL "Esfriar"
    -
    92 #define D_STR_HEAT "Aquecer"
    -
    93 #define D_STR_FAN "Ventilar"
    -
    94 #define D_STR_FANONLY "Apenas ventilar"
    -
    95 #define D_STR_DRY "Secar"
    -
    96 #define D_STR_8C_HEAT D_STR_HEAT " 8C"
    -
    97 
    -
    98 #define D_STR_MAX "Max"
    -
    99 #define D_STR_MAXIMUM "Máximo"
    -
    100 #define D_STR_MIN "Min"
    -
    101 #define D_STR_MINIMUM "Mínimo"
    -
    102 #define D_STR_MED "Med"
    -
    103 #define D_STR_MEDIUM "Médio"
    -
    104 
    -
    105 #define D_STR_HIGHEST "Mais alto"
    -
    106 #define D_STR_HIGH "Alto"
    -
    107 #define D_STR_HI "Médio alto"
    -
    108 #define D_STR_MID "Médio"
    -
    109 #define D_STR_MIDDLE "Médio baixo"
    -
    110 #define D_STR_LOW "Inferior"
    -
    111 #define D_STR_LO "Baixo"
    -
    112 #define D_STR_LOWEST "Mais baixo"
    -
    113 #define D_STR_RIGHT "Direita"
    -
    114 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT
    -
    115 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT " (" D_STR_MAX ")"
    -
    116 #define D_STR_LEFT "Esquerda"
    -
    117 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT
    -
    118 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT " (" D_STR_MAX ")"
    -
    119 #define D_STR_WIDE "Amplo"
    -
    120 #define D_STR_CENTRE "Centro"
    -
    121 #define D_STR_TOP "Topo"
    -
    122 #define D_STR_BOTTOM "Baixo"
    -
    123 
    -
    124 // Separators
    -
    125 #define D_CHR_TIME_SEP ':'
    -
    126 #define D_STR_SPACELBRACE " ("
    -
    127 #define D_STR_COMMASPACE ", "
    -
    128 #define D_STR_COLONSPACE ": "
    -
    129 
    -
    130 #define D_STR_DAY "Dia"
    -
    131 #define D_STR_DAYS D_STR_DAY "s"
    -
    132 #define D_STR_HOUR "Hora"
    -
    133 #define D_STR_HOURS D_STR_HOUR "s"
    -
    134 #define D_STR_MINUTE "Minuto"
    -
    135 #define D_STR_MINUTES D_STR_MINUTE "s"
    -
    136 #define D_STR_SECOND "Segundo"
    -
    137 #define D_STR_SECONDS D_STR_SECOND "s"
    -
    138 #define D_STR_NOW "Agora"
    -
    139 #define D_STR_THREELETTERDAYS "DomSegTerQuaQuiSexSab"
    -
    140 
    -
    141 #define D_STR_YES "Sim"
    -
    142 #define D_STR_NO "Não"
    -
    143 #define D_STR_TRUE "Verdadeiro"
    -
    144 #define D_STR_FALSE "Falso"
    -
    145 
    -
    146 #define D_STR_REPEAT "Repetir"
    -
    147 #define D_STR_CODE "Código"
    -
    148 #define D_STR_BITS "Bits"
    -
    149 
    -
    150 // IRrecvDumpV2+
    -
    151 #define D_STR_TIMESTAMP "Timestamp"
    -
    152 #define D_STR_LIBRARY "Biblioteca"
    -
    153 #define D_STR_MESGDESC "Descrição da mensagem"
    -
    154 #define D_STR_TOLERANCE "Tolerância"
    -
    155 #ifndef D_STR_IRRECVDUMP_STARTUP
    -
    156 #define D_STR_IRRECVDUMP_STARTUP \
    -
    157  "IRrecvDump está rodando e aguardando por entradas IR no pino %d"
    -
    158 #endif // D_STR_IRRECVDUMP_STARTUP
    -
    159 
    -
    160 #ifndef D_WARN_BUFFERFULL
    -
    161 #define D_WARN_BUFFERFULL \
    -
    162  "AVISO: O código IR é muito grande para o buffer (>= %d). " \
    -
    163  "Esse resultado não é confiavel e precisa ser resolvido. " \
    -
    164  "Edite e aumente o valor de `kCaptureBufferSize`."
    -
    165 #endif // D_WARN_BUFFERFULL
    -
    166 
    -
    167 #endif // LOCALE_PT_BR_H_
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.html deleted file mode 100644 index 26dd244fd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.js deleted file mode 100644 index 7bace694e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_0.js +++ /dev/null @@ -1,85 +0,0 @@ -var searchData= -[ - ['_5f_0',['_',['../classIRAirwellAc.html#af5675d200cdc571911162ecf8c74fdc0',1,'IRAirwellAc::_()'],['../classIRAmcorAc.html#a57bd1149a63a8c2373eeced414ed0a80',1,'IRAmcorAc::_()'],['../classIRArgoAC.html#a748a4828682df0f98226754123fe2142',1,'IRArgoAC::_()'],['../classIRCarrierAc64.html#a79ddb0fb877232a581d0142949a7c356',1,'IRCarrierAc64::_()'],['../classIRCoolixAC.html#a35c7cd549fcd37c60199b53d67fb9dd2',1,'IRCoolixAC::_()'],['../classIRCoronaAc.html#aa6e07135d66fda5c609c0d6a317bb0de',1,'IRCoronaAc::_()'],['../classIRDaikinESP.html#abbdecc7d713255021360094f720b03d4',1,'IRDaikinESP::_()'],['../classIRDaikin2.html#a656fd69f0163ba8685e537d122355f13',1,'IRDaikin2::_()'],['../classIRDaikin216.html#a41e9c282f84a853782dae90736d29b4b',1,'IRDaikin216::_()'],['../classIRDaikin160.html#a391d29ba41097a521b25af3b24554191',1,'IRDaikin160::_()'],['../classIRDaikin176.html#a82ad91178ed497d7087c758cd92635c5',1,'IRDaikin176::_()'],['../classIRDaikin128.html#aa5f2c8742a4127d76c28c96b02700af1',1,'IRDaikin128::_()'],['../classIRDaikin152.html#ad21ebef489e09af9ace1aea71c9a3606',1,'IRDaikin152::_()'],['../classIRDaikin64.html#a21b23d9ffbb8df86160affa249c86e40',1,'IRDaikin64::_()'],['../classIRDelonghiAc.html#a85f522b680c0fb5974d741c8f399e691',1,'IRDelonghiAc::_()'],['../classIREcoclimAc.html#a8bb20ae92cb32b3a083f43eea7be5f9a',1,'IREcoclimAc::_()'],['../classIRElectraAc.html#a4e6db6134d2e8915c4f2ad2e7e41ca83',1,'IRElectraAc::_()'],['../classIRFujitsuAC.html#ac26150793cfe7cc627e9721031f870e1',1,'IRFujitsuAC::_()'],['../classIRGoodweatherAc.html#a357e8f133b16a086c3100eb1e7b35279',1,'IRGoodweatherAc::_()'],['../classIRGreeAC.html#a9c048fe707312bdfd30c29fe8d6ab4b5',1,'IRGreeAC::_()'],['../classIRHaierAC.html#a523b6e63f16c5f817d82bcdbf351d7e7',1,'IRHaierAC::_()'],['../classIRHaierACYRW02.html#aaa31ae12544758f57f0dcd11b20fe285',1,'IRHaierACYRW02::_()'],['../classIRHitachiAc.html#a437587da1c6f0946dfbf9a0666123f4d',1,'IRHitachiAc::_()'],['../classIRHitachiAc1.html#ac2195f94ff673d24ac9f33b9463d5680',1,'IRHitachiAc1::_()'],['../classIRHitachiAc424.html#aa3e49f9ccda3b94099a11b4fba87fb3e',1,'IRHitachiAc424::_()'],['../classIRKelvinatorAC.html#ada1ada9d4441938af9f98e03b11f2b65',1,'IRKelvinatorAC::_()'],['../classIRLgAc.html#a2d337e8d615c8e526d5620206f7b45cf',1,'IRLgAc::_()'],['../classIRMideaAC.html#a43e44a594e00ed14c9b6aca4a862ea9e',1,'IRMideaAC::_()'],['../classIRMitsubishiAC.html#a418d0c771b50d014a1027cffcf53ca27',1,'IRMitsubishiAC::_()'],['../classIRMitsubishi136.html#ac38f8620a8cb3ada2f6a2e5c300b9a60',1,'IRMitsubishi136::_()'],['../classIRMitsubishi112.html#a5e4c08c77bfc74b1c0f8b407f020aa2e',1,'IRMitsubishi112::_()'],['../classIRMitsubishiHeavy152Ac.html#aba9d9871ddd93dc2f1e32fc773fadb86',1,'IRMitsubishiHeavy152Ac::_()'],['../classIRMitsubishiHeavy88Ac.html#a01ba20c205e3650a31ba605e291c0d65',1,'IRMitsubishiHeavy88Ac::_()'],['../classIRNeoclimaAc.html#a46453121ea930c6b356dd752fdaaec51',1,'IRNeoclimaAc::_()'],['../classIRPanasonicAc32.html#a9d6fab2a42e831ab00ab5364ad8d3de4',1,'IRPanasonicAc32::_()'],['../classIRSamsungAc.html#a7ac33928a62f2f4e487509490ed64814',1,'IRSamsungAc::_()'],['../classIRSanyoAc.html#ad849828b1fa034d851cdadfee43108aa',1,'IRSanyoAc::_()'],['../classIRSharpAc.html#a4687771aefa4879b4c9f331976ceb4bc',1,'IRSharpAc::_()'],['../classIRTcl112Ac.html#a905e47d5236b5dbbcc0aeadfc3fc9339',1,'IRTcl112Ac::_()'],['../classIRTechnibelAc.html#ae5bd8b758ef88ce473b38f93db207b13',1,'IRTechnibelAc::_()'],['../classIRTecoAc.html#a1d46a7c59ae9a0d87e092231de2d2510',1,'IRTecoAc::_()'],['../classIRToshibaAC.html#ae8a3a6ff11a38c11cdddb79af98c796f',1,'IRToshibaAC::_()'],['../classIRTranscoldAc.html#a50d0d2c8a2f25855ca721ef3f477284b',1,'IRTranscoldAc::_()'],['../classIRTrotecESP.html#a989eeedd017943dec0a3337f4e0bf23a',1,'IRTrotecESP::_()'],['../classIRTrumaAc.html#ac756f5efa2a62a36495def7b4ca755c7',1,'IRTrumaAc::_()'],['../classIRVestelAc.html#a1445480ae91942e752beb2facc9b151b',1,'IRVestelAc::_()'],['../classIRVoltas.html#a251065338907253521a12e5e0f8aeb26',1,'IRVoltas::_()'],['../classIRWhirlpoolAc.html#a62d86151ac9fae122927f588953c9712',1,'IRWhirlpoolAc::_()']]], - ['_5f_5fpad0_5f_5f_1',['__pad0__',['../unionAirwellProtocol.html#ac8190704f390caf41b76dc0ee3377056',1,'AirwellProtocol::__pad0__()'],['../unionAmcorProtocol.html#a8678a5bf4a4d917d8b02d854114b2cc0',1,'AmcorProtocol::__pad0__()'],['../unionArgoProtocol.html#a2b15de65bd2368c53c07850b32c240f1',1,'ArgoProtocol::__pad0__()'],['../unionCarrierProtocol.html#a8187ddda3722f75d7260b9a20147b2d3',1,'CarrierProtocol::__pad0__()'],['../unionCoolixProtocol.html#aed69535018e1a145ecadf868b9285cce',1,'CoolixProtocol::__pad0__()'],['../unionCoronaProtocol.html#a06ac994ce787d3f1c65529e99d87d146',1,'CoronaProtocol::__pad0__()'],['../unionDaikinESPProtocol.html#a4b6340f47c0b18f3ca03527c075370a8',1,'DaikinESPProtocol::__pad0__()'],['../unionDaikin2Protocol.html#a862b1116a11ccc47c197da1c45bcf939',1,'Daikin2Protocol::__pad0__()'],['../unionDaikin216Protocol.html#a34e330a1e718719a36fbcf1630d3a329',1,'Daikin216Protocol::__pad0__()'],['../unionDaikin160Protocol.html#a004c3ba468c671d18e6777b97caa5118',1,'Daikin160Protocol::__pad0__()'],['../unionDaikin176Protocol.html#a8c63d7ff706301c55b9b82669b93504b',1,'Daikin176Protocol::__pad0__()'],['../unionDaikin128Protocol.html#a95b62a4448251a23cb7b8448da6db90a',1,'Daikin128Protocol::__pad0__()'],['../unionDaikin152Protocol.html#ae12253e3f2a43142a7a9e508a49ac97b',1,'Daikin152Protocol::__pad0__()'],['../unionDaikin64Protocol.html#a4311ec81ff9b3b13466b2fe3da4fb9be',1,'Daikin64Protocol::__pad0__()'],['../unionDelonghiProtocol.html#add514a227f6b9dcbaa41eaa5c81d6be2',1,'DelonghiProtocol::__pad0__()'],['../unionEcoclimProtocol.html#af8ab3b4b36c8d226267bd9d408a247b5',1,'EcoclimProtocol::__pad0__()'],['../unionElectraProtocol.html#a607d7c92e7a627b9afccf9022f379184',1,'ElectraProtocol::__pad0__()'],['../unionFujitsuProtocol.html#ae09a6236e9c28edcec7192b2f2527d94',1,'FujitsuProtocol::__pad0__()'],['../unionGoodweatherProtocol.html#a58bfae03b0e7faeb4a5eb2baa7027499',1,'GoodweatherProtocol::__pad0__()'],['../unionGreeProtocol.html#a06baff7b648875f337ea4d099f8ba73d',1,'GreeProtocol::__pad0__()'],['../unionHaierProtocol.html#a2648f0ff2bc5a6481e9fd2017408a590',1,'HaierProtocol::__pad0__()'],['../unionHaierYRW02Protocol.html#a48fb1f12d6902568da902b5de7e1bfef',1,'HaierYRW02Protocol::__pad0__()'],['../unionHitachiProtocol.html#a59198deea3c754055b8db3c53597b28a',1,'HitachiProtocol::__pad0__()'],['../unionHitachi424Protocol.html#a8bbd10b57407543a47af052d3ad7d45d',1,'Hitachi424Protocol::__pad0__()'],['../unionHitachi1Protocol.html#aef99c45f1361f6f3af5384e388e769f0',1,'Hitachi1Protocol::__pad0__()'],['../unionKelvinatorProtocol.html#a1c5a62ea69b305fe7c842ed06201544e',1,'KelvinatorProtocol::__pad0__()'],['../unionLGProtocol.html#a56f4b64eddafae10e174097f17129672',1,'LGProtocol::__pad0__()'],['../unionMideaProtocol.html#ab48c834ee5a37297d04e71e6e32468d2',1,'MideaProtocol::__pad0__()'],['../unionMitsubishi144Protocol.html#a54a33f76ce69f4ffb355bbd80b40333e',1,'Mitsubishi144Protocol::__pad0__()'],['../unionMitsubishi136Protocol.html#ac7c07e05f6b9ab112db05bfc0e50b8fe',1,'Mitsubishi136Protocol::__pad0__()'],['../unionMitsubishi112Protocol.html#a10e85997ccda345c41d243d621f5c6c5',1,'Mitsubishi112Protocol::__pad0__()'],['../unionMitsubishi152Protocol.html#afe483629cb0b355cc9dc24720a3dbfc1',1,'Mitsubishi152Protocol::__pad0__()'],['../unionMitsubishi88Protocol.html#ad271ae6069331e7de5173eda076391bf',1,'Mitsubishi88Protocol::__pad0__()'],['../unionNeoclimaProtocol.html#ab7283cca22005d0a4a16349a10443c75',1,'NeoclimaProtocol::__pad0__()'],['../unionPanasonicAc32Protocol.html#aa1aac1cdb8d947e7ecea4a487e2a184f',1,'PanasonicAc32Protocol::__pad0__()'],['../unionSamsungProtocol.html#a5828729c8465645c7953f33f7a759b66',1,'SamsungProtocol::__pad0__()'],['../unionSanyoProtocol.html#ab545036dab31de4c9fed22c3b69a8956',1,'SanyoProtocol::__pad0__()'],['../unionSharpProtocol.html#a1849030fb0a1228c149773fc59cd5a3a',1,'SharpProtocol::__pad0__()'],['../unionTcl112Protocol.html#ac6a87b38987b8acf6a4f2e8c56915e9b',1,'Tcl112Protocol::__pad0__()'],['../unionTechnibelProtocol.html#a867176d7b37eea700911a9e1436fd759',1,'TechnibelProtocol::__pad0__()'],['../unionTecoProtocol.html#a4f28c648b1ea808fa3f85dccd9aa7f0e',1,'TecoProtocol::__pad0__()'],['../unionToshibaProtocol.html#afcaa4bab05d9b9a178d377981963804f',1,'ToshibaProtocol::__pad0__()'],['../unionTranscoldProtocol.html#ae31134005dcf214468c247c1a8e0c3c2',1,'TranscoldProtocol::__pad0__()'],['../unionTrotecProtocol.html#a5a595bd97622b796cc790b3781b5f945',1,'TrotecProtocol::__pad0__()'],['../unionTrumaProtocol.html#ae1dba9448f8eafde9880dd3c62d0d6eb',1,'TrumaProtocol::__pad0__()'],['../unionVestelProtocol.html#ae1c70f14718a4374f62db9a5ee047525',1,'VestelProtocol::__pad0__()'],['../unionVoltasProtocol.html#a6a9f9ff0c3c7b691ed78738138467afa',1,'VoltasProtocol::__pad0__()'],['../unionWhirlpoolProtocol.html#a346c5be5f86c773065807453a37b1803',1,'WhirlpoolProtocol::__pad0__()']]], - ['_5f_5fpad10_5f_5f_2',['__pad10__',['../unionArgoProtocol.html#aa2c0eb524c5870ea14aac018834c203f',1,'ArgoProtocol::__pad10__()'],['../unionDaikinESPProtocol.html#ab5f4cadf160b7b0cd86d23f0d29226b5',1,'DaikinESPProtocol::__pad10__()'],['../unionDaikin2Protocol.html#a6c39db0f9d872e4e955d95530e364f8c',1,'Daikin2Protocol::__pad10__()'],['../unionElectraProtocol.html#a1c6c36949391af9da5dbb39a7ab9894b',1,'ElectraProtocol::__pad10__()'],['../unionFujitsuProtocol.html#a401eaf495ccd6f029263af08c6b810b0',1,'FujitsuProtocol::__pad10__()'],['../unionHaierYRW02Protocol.html#abc9d14dbc6ab798a389244499fad7d96',1,'HaierYRW02Protocol::__pad10__()'],['../unionKelvinatorProtocol.html#aa2ce27bd061f2e9a44fd01b3c5abcd0a',1,'KelvinatorProtocol::__pad10__()'],['../unionMitsubishi152Protocol.html#a05b638b3d3727c028e00c7e0826988ac',1,'Mitsubishi152Protocol::__pad10__()'],['../unionNeoclimaProtocol.html#a035ce50ea046d70206a899b022514fc1',1,'NeoclimaProtocol::__pad10__()'],['../unionSamsungProtocol.html#ad142f78386bc81486c7237de5c9dba02',1,'SamsungProtocol::__pad10__()'],['../unionSharpProtocol.html#a38bc19719f1597b4b2f412eda520edff',1,'SharpProtocol::__pad10__()'],['../unionWhirlpoolProtocol.html#a08e2114e6ecd39db2d05d4fbe6f331eb',1,'WhirlpoolProtocol::__pad10__()']]], - ['_5f_5fpad11_5f_5f_3',['__pad11__',['../unionArgoProtocol.html#a6ccde46c9c033ca08161da12a2657187',1,'ArgoProtocol::__pad11__()'],['../unionDaikinESPProtocol.html#a63226f3ed0f535ecc6575d68e402aca4',1,'DaikinESPProtocol::__pad11__()'],['../unionDaikin2Protocol.html#a4dbf000916d610dd6f7779702b827a32',1,'Daikin2Protocol::__pad11__()'],['../unionElectraProtocol.html#a60df01dbc021ccb4167bf05b6cfb3575',1,'ElectraProtocol::__pad11__()'],['../unionHaierYRW02Protocol.html#a033dacb9a8b936c0187e86c585431198',1,'HaierYRW02Protocol::__pad11__()'],['../unionKelvinatorProtocol.html#a154ce4b17b1920eeeed576a84c42078c',1,'KelvinatorProtocol::__pad11__()'],['../unionMitsubishi152Protocol.html#a613a6a6436459e9c0e50ea9dbe98adb7',1,'Mitsubishi152Protocol::__pad11__()'],['../unionSamsungProtocol.html#adbacd1c9f1da9e52897e371932448104',1,'SamsungProtocol::__pad11__()'],['../unionWhirlpoolProtocol.html#a2298dc17501470bc907c2942b3b78a31',1,'WhirlpoolProtocol::__pad11__()']]], - ['_5f_5fpad12_5f_5f_4',['__pad12__',['../unionArgoProtocol.html#a338bbbc882a3409af4ff510a9b7c001b',1,'ArgoProtocol::__pad12__()'],['../unionDaikinESPProtocol.html#acb1fbea3c23fc3cd9171e8dc5ec6c704',1,'DaikinESPProtocol::__pad12__()'],['../unionDaikin2Protocol.html#a8ed55611b407b4565879d1c590d9db97',1,'Daikin2Protocol::__pad12__()'],['../unionElectraProtocol.html#af6cc114e85af4dc98468b8912d9550e1',1,'ElectraProtocol::__pad12__()'],['../unionHaierYRW02Protocol.html#a3df5d93e5f676ff44b32227a44be98ac',1,'HaierYRW02Protocol::__pad12__()'],['../unionKelvinatorProtocol.html#aca9a8e9d3bfae177addbbf5cf59be5b9',1,'KelvinatorProtocol::__pad12__()'],['../unionMitsubishi152Protocol.html#a79605175bd897bb9d9dbde5e2a5e75cd',1,'Mitsubishi152Protocol::__pad12__()'],['../unionSamsungProtocol.html#a3498152c423584a34036a0004965e483',1,'SamsungProtocol::__pad12__()'],['../unionWhirlpoolProtocol.html#a5bb903a38e613af99420d157b6a4497c',1,'WhirlpoolProtocol::__pad12__()']]], - ['_5f_5fpad13_5f_5f_5',['__pad13__',['../unionArgoProtocol.html#a093e716979933669e589fb5ead32a3a5',1,'ArgoProtocol::__pad13__()'],['../unionDaikinESPProtocol.html#ad00fd7a0383f41faa020b5468f326d40',1,'DaikinESPProtocol::__pad13__()'],['../unionDaikin2Protocol.html#a71b32e066737020b4b50752a1b49aa59',1,'Daikin2Protocol::__pad13__()'],['../unionKelvinatorProtocol.html#a7791a8425a444901bba50c314ea72f07',1,'KelvinatorProtocol::__pad13__()'],['../unionSamsungProtocol.html#a0cc6887b0f67b3478679612a61f53494',1,'SamsungProtocol::__pad13__()'],['../unionWhirlpoolProtocol.html#aee015ccecfa7008bf16b9c94c471d611',1,'WhirlpoolProtocol::__pad13__()']]], - ['_5f_5fpad14_5f_5f_6',['__pad14__',['../unionArgoProtocol.html#ab35dfc5963cfdcf5a776c78d3ea5f423',1,'ArgoProtocol::__pad14__()'],['../unionDaikinESPProtocol.html#af60b5d6127571efd945834134e9820cf',1,'DaikinESPProtocol::__pad14__()'],['../unionDaikin2Protocol.html#a775f2fb0cb2c7814487a595d7dbf9433',1,'Daikin2Protocol::__pad14__()'],['../unionKelvinatorProtocol.html#aae165412d5c955b14dce78a4793c1196',1,'KelvinatorProtocol::__pad14__()'],['../unionSamsungProtocol.html#a18c1a85c27a25cfd52ea3894770e046d',1,'SamsungProtocol::__pad14__()'],['../unionWhirlpoolProtocol.html#a3d91bff7afe79cceb9410303625501e8',1,'WhirlpoolProtocol::__pad14__()']]], - ['_5f_5fpad15_5f_5f_7',['__pad15__',['../unionArgoProtocol.html#a1a3263d128339d19b1dfa2857da3475b',1,'ArgoProtocol::__pad15__()'],['../unionDaikinESPProtocol.html#aa50501fc2b9f3c687fdc6ffae01b0b26',1,'DaikinESPProtocol::__pad15__()'],['../unionDaikin2Protocol.html#a8e3e56e3e43e01196aa76b26746a7793',1,'Daikin2Protocol::__pad15__()'],['../unionKelvinatorProtocol.html#ab92ccd2d83d1f6a8ac071a6bf964192f',1,'KelvinatorProtocol::__pad15__()'],['../unionSamsungProtocol.html#a432749e94e913ec1070a6eaa189d28cc',1,'SamsungProtocol::__pad15__()'],['../unionWhirlpoolProtocol.html#a3befb6d4bc7900b5ce1521557b7ac1da',1,'WhirlpoolProtocol::__pad15__()']]], - ['_5f_5fpad16_5f_5f_8',['__pad16__',['../unionArgoProtocol.html#a0e901bceaaa0cc966eabb937ad4b549a',1,'ArgoProtocol::__pad16__()'],['../unionDaikinESPProtocol.html#a25289149f23cde94303b04579ef5ab51',1,'DaikinESPProtocol::__pad16__()'],['../unionDaikin2Protocol.html#a1cc01ee37d30381041627a436b12b06e',1,'Daikin2Protocol::__pad16__()'],['../unionKelvinatorProtocol.html#a3a2a481ac55f63f010954be00839e9f5',1,'KelvinatorProtocol::__pad16__()'],['../unionSamsungProtocol.html#a4d5d840172077977f2019a57c359fa3e',1,'SamsungProtocol::__pad16__()'],['../unionWhirlpoolProtocol.html#ac1c4612fadecbcbcf3afb7cd3b5ae2ec',1,'WhirlpoolProtocol::__pad16__()']]], - ['_5f_5fpad17_5f_5f_9',['__pad17__',['../unionDaikinESPProtocol.html#a4f5109e7102aa264f0769b3c8e59143e',1,'DaikinESPProtocol::__pad17__()'],['../unionDaikin2Protocol.html#a95ba00e7fe66eb4461df6185a4203272',1,'Daikin2Protocol::__pad17__()']]], - ['_5f_5fpad18_5f_5f_10',['__pad18__',['../unionDaikin2Protocol.html#a0f1bbafed357f2b8c3792072edcd024f',1,'Daikin2Protocol']]], - ['_5f_5fpad19_5f_5f_11',['__pad19__',['../unionDaikin2Protocol.html#a8625b24852e8b61e99608d3ed6108060',1,'Daikin2Protocol']]], - ['_5f_5fpad1_5f_5f_12',['__pad1__',['../unionAirwellProtocol.html#ab2a20785c417317ac37cd1b5ef795249',1,'AirwellProtocol::__pad1__()'],['../unionAmcorProtocol.html#a9603d27ed81d3efc3b1fff2d6a877f6f',1,'AmcorProtocol::__pad1__()'],['../unionArgoProtocol.html#a87ef29a274368f72fe0e8aee0d09c241',1,'ArgoProtocol::__pad1__()'],['../unionCarrierProtocol.html#a344e5a62f7624bdc8d6b53c89d53ff01',1,'CarrierProtocol::__pad1__()'],['../unionCoolixProtocol.html#a40ad4befacf2e80aa8b58ffa009282d8',1,'CoolixProtocol::__pad1__()'],['../unionCoronaProtocol.html#a562183bf52e393fb07ca57f5f8341bfd',1,'CoronaProtocol::__pad1__()'],['../unionDaikinESPProtocol.html#a171688991f490457597ef35ae981364c',1,'DaikinESPProtocol::__pad1__()'],['../unionDaikin2Protocol.html#adcfa8f9e936b2d3847bf2a916398a2c6',1,'Daikin2Protocol::__pad1__()'],['../unionDaikin216Protocol.html#a195343e0e34535032963cf7a2e860310',1,'Daikin216Protocol::__pad1__()'],['../unionDaikin160Protocol.html#a019c8599ff9271e4d85294aa9d30f7b3',1,'Daikin160Protocol::__pad1__()'],['../unionDaikin176Protocol.html#a4bc397de2956316e96548d0d91c9e853',1,'Daikin176Protocol::__pad1__()'],['../unionDaikin128Protocol.html#acbbe6f9c88b1ac0e0accc9e7da3d6f56',1,'Daikin128Protocol::__pad1__()'],['../unionDaikin152Protocol.html#aa0078b4986f0c5af41e4eb6c66bbbcdf',1,'Daikin152Protocol::__pad1__()'],['../unionDaikin64Protocol.html#a85e8ad5d286b0c048651a22939185f46',1,'Daikin64Protocol::__pad1__()'],['../unionDelonghiProtocol.html#a26a942f261b6d45e3d3a9734b8535c8d',1,'DelonghiProtocol::__pad1__()'],['../unionEcoclimProtocol.html#af5e0d8721a854eacd373ba6b3907bfcc',1,'EcoclimProtocol::__pad1__()'],['../unionElectraProtocol.html#a144dab2a792292298898217b72ffe95a',1,'ElectraProtocol::__pad1__()'],['../unionFujitsuProtocol.html#a419bfbb3660ce591194319f23f7b03e3',1,'FujitsuProtocol::__pad1__()'],['../unionGoodweatherProtocol.html#af377b40f40c2182c39892322d48b6e41',1,'GoodweatherProtocol::__pad1__()'],['../unionGreeProtocol.html#a094751746e21e5ae70ff7ace3b84c75d',1,'GreeProtocol::__pad1__()'],['../unionHaierProtocol.html#a8e91589ca0e2db529f73e3f8ecbb00a0',1,'HaierProtocol::__pad1__()'],['../unionHaierYRW02Protocol.html#aa20f4bbeb35dfa6afe0af4c7ea1cc498',1,'HaierYRW02Protocol::__pad1__()'],['../unionHitachiProtocol.html#a1c8b361a818c9c39d4fa68e89f9a8e22',1,'HitachiProtocol::__pad1__()'],['../unionHitachi424Protocol.html#a242455776887250de614f82c786a7305',1,'Hitachi424Protocol::__pad1__()'],['../unionHitachi1Protocol.html#a5a1391e156a30793572f4fe2b0b09bce',1,'Hitachi1Protocol::__pad1__()'],['../unionKelvinatorProtocol.html#a3e434ffef93cd99fe33800f87f5f4c02',1,'KelvinatorProtocol::__pad1__()'],['../unionLGProtocol.html#a6ed86f00b55c5e136039ccb4d8b92bc9',1,'LGProtocol::__pad1__()'],['../unionMideaProtocol.html#a3351e3af6d3f214536e593c450fa0915',1,'MideaProtocol::__pad1__()'],['../unionMitsubishi144Protocol.html#a73a24c6aed86265c733bd65c52c71a2b',1,'Mitsubishi144Protocol::__pad1__()'],['../unionMitsubishi136Protocol.html#abf3c48fa8afee2e538c4edd691df1cc3',1,'Mitsubishi136Protocol::__pad1__()'],['../unionMitsubishi112Protocol.html#ab9760331882703b5b80a30f9ba008e66',1,'Mitsubishi112Protocol::__pad1__()'],['../unionMitsubishi152Protocol.html#a758cb7e9d347f8642f680ec803e12282',1,'Mitsubishi152Protocol::__pad1__()'],['../unionMitsubishi88Protocol.html#aa46d6fc69b2de17ea7fd1c3e06b953c0',1,'Mitsubishi88Protocol::__pad1__()'],['../unionNeoclimaProtocol.html#a76421acbe5fd17e423d2e1159261f4e2',1,'NeoclimaProtocol::__pad1__()'],['../unionPanasonicAc32Protocol.html#a5cda61ba9d077c018393878bac8ef02e',1,'PanasonicAc32Protocol::__pad1__()'],['../unionSamsungProtocol.html#a9cee9377b1f9e1481ddc996c20d17fa0',1,'SamsungProtocol::__pad1__()'],['../unionSanyoProtocol.html#afcd8e773058c6c1c61c1ca8fadec557a',1,'SanyoProtocol::__pad1__()'],['../unionSharpProtocol.html#abd9e4cc871884cfc1fa50c0785e20dca',1,'SharpProtocol::__pad1__()'],['../unionTcl112Protocol.html#a4eadf5f4b418c756332c565db930bc4b',1,'Tcl112Protocol::__pad1__()'],['../unionTechnibelProtocol.html#a21dcbf63bcb5f9a2071d186d8d0ee7f7',1,'TechnibelProtocol::__pad1__()'],['../unionTecoProtocol.html#a5fc378f32498bb71500d9ca68ccd71d6',1,'TecoProtocol::__pad1__()'],['../unionToshibaProtocol.html#a33806189420dacc911832a0290364acc',1,'ToshibaProtocol::__pad1__()'],['../unionTranscoldProtocol.html#a3dc6ac4b02073bd781632c1f1f7c8805',1,'TranscoldProtocol::__pad1__()'],['../unionTrotecProtocol.html#a0e7816aae4f8d5f604103a5e25ad5c4d',1,'TrotecProtocol::__pad1__()'],['../unionTrumaProtocol.html#a8124c299b6ad13bc42bfd0c18b774d62',1,'TrumaProtocol::__pad1__()'],['../unionVestelProtocol.html#a30aa4f861223ae78a3735cbefb71b894',1,'VestelProtocol::__pad1__()'],['../unionVoltasProtocol.html#a80c4eeb8eea30866ef991cab330f6def',1,'VoltasProtocol::__pad1__()'],['../unionWhirlpoolProtocol.html#a1a6a151ac226c361d7fb9c5775959719',1,'WhirlpoolProtocol::__pad1__()']]], - ['_5f_5fpad20_5f_5f_13',['__pad20__',['../unionDaikin2Protocol.html#a5263b84da0ca6a26a32f9235054d975a',1,'Daikin2Protocol']]], - ['_5f_5fpad21_5f_5f_14',['__pad21__',['../unionDaikin2Protocol.html#a2d1fa760cd0d6e2420a63dac338d5c72',1,'Daikin2Protocol']]], - ['_5f_5fpad22_5f_5f_15',['__pad22__',['../unionDaikin2Protocol.html#aec8c4d930e4d316428d9f0aa52fa307a',1,'Daikin2Protocol']]], - ['_5f_5fpad23_5f_5f_16',['__pad23__',['../unionDaikin2Protocol.html#a1d13146bb96e0f1a38f61ff473a95787',1,'Daikin2Protocol']]], - ['_5f_5fpad24_5f_5f_17',['__pad24__',['../unionDaikin2Protocol.html#a1c39c5b58eea52a36b52d6a69d841368',1,'Daikin2Protocol']]], - ['_5f_5fpad2_5f_5f_18',['__pad2__',['../unionAirwellProtocol.html#a3ba38aea4ada26e1936478d737e2080a',1,'AirwellProtocol::__pad2__()'],['../unionAmcorProtocol.html#afefa908f10f814fadde57efdc4dce76c',1,'AmcorProtocol::__pad2__()'],['../unionArgoProtocol.html#a44dff1537c390a45ee43c57f2b80050d',1,'ArgoProtocol::__pad2__()'],['../unionCarrierProtocol.html#aac511fa89b32f24a01d179c37fffc2fa',1,'CarrierProtocol::__pad2__()'],['../unionCoolixProtocol.html#a6d0452c77ec2042ecd9f6067fae5333d',1,'CoolixProtocol::__pad2__()'],['../unionCoronaProtocol.html#a53c510747a6970ea6f0172a39194369d',1,'CoronaProtocol::__pad2__()'],['../unionDaikinESPProtocol.html#a01827591728378573fa1c6de1d0fb047',1,'DaikinESPProtocol::__pad2__()'],['../unionDaikin2Protocol.html#a18d60de4ac1cd64c9544d275bd2f0d77',1,'Daikin2Protocol::__pad2__()'],['../unionDaikin216Protocol.html#a1c7d014ca2fbab35649ac04e711090e4',1,'Daikin216Protocol::__pad2__()'],['../unionDaikin160Protocol.html#a18fa821c54eaebb5b728914976f33c10',1,'Daikin160Protocol::__pad2__()'],['../unionDaikin176Protocol.html#ae78012028d2d6983028aed4206347f68',1,'Daikin176Protocol::__pad2__()'],['../unionDaikin128Protocol.html#af5cb68ecd15fba7cafa9252479f8f8bd',1,'Daikin128Protocol::__pad2__()'],['../unionDaikin152Protocol.html#af147c5af64b24303b2975f44d73b6e60',1,'Daikin152Protocol::__pad2__()'],['../unionDelonghiProtocol.html#a78b2654018ed1c8c9a762ee6b1241bdc',1,'DelonghiProtocol::__pad2__()'],['../unionEcoclimProtocol.html#a8e6682232e119fc85a7de034a454072b',1,'EcoclimProtocol::__pad2__()'],['../unionElectraProtocol.html#abcc4e66431cd1ffadcdd3e25c611e306',1,'ElectraProtocol::__pad2__()'],['../unionFujitsuProtocol.html#af4b24c6663c4b4b94ea13c66ee3a122d',1,'FujitsuProtocol::__pad2__()'],['../unionGoodweatherProtocol.html#af9191479578e5541782ab08dca536cd8',1,'GoodweatherProtocol::__pad2__()'],['../unionGreeProtocol.html#a715441faac2bdd5dc37d6a3efcc99c4f',1,'GreeProtocol::__pad2__()'],['../unionHaierYRW02Protocol.html#a51178359e3860a50dbf53bda14b5a88c',1,'HaierYRW02Protocol::__pad2__()'],['../unionHitachiProtocol.html#a057c243efc8dea1fb191a5e46e919945',1,'HitachiProtocol::__pad2__()'],['../unionHitachi424Protocol.html#af8456076f173c8ba3fe398a4b603d7f9',1,'Hitachi424Protocol::__pad2__()'],['../unionHitachi1Protocol.html#a8817d394030fff87bf433137fc7cd616',1,'Hitachi1Protocol::__pad2__()'],['../unionKelvinatorProtocol.html#a612fd8e28cb1ca0b675f6397465422fb',1,'KelvinatorProtocol::__pad2__()'],['../unionMideaProtocol.html#ab638086cc0b8d25fba57278c7ba881cb',1,'MideaProtocol::__pad2__()'],['../unionMitsubishi144Protocol.html#a8adaf8e3c219a7deb561bd54783d58c8',1,'Mitsubishi144Protocol::__pad2__()'],['../unionMitsubishi136Protocol.html#a787183f490db45ea0421cd90aa8ee58b',1,'Mitsubishi136Protocol::__pad2__()'],['../unionMitsubishi112Protocol.html#aec7545bf250d0f8a5035d518258978d7',1,'Mitsubishi112Protocol::__pad2__()'],['../unionMitsubishi152Protocol.html#aebca5fcc9d424d56fb46ba275c5b9f9b',1,'Mitsubishi152Protocol::__pad2__()'],['../unionMitsubishi88Protocol.html#ad644461a3b45b36ee3feabee34897e90',1,'Mitsubishi88Protocol::__pad2__()'],['../unionNeoclimaProtocol.html#ae25f51e0b116bf7587527b8b41b27bec',1,'NeoclimaProtocol::__pad2__()'],['../unionPanasonicAc32Protocol.html#ab2296c3c02d374663675d476bc0b2b0c',1,'PanasonicAc32Protocol::__pad2__()'],['../unionSamsungProtocol.html#a3594b63392afa71e288b96e0ee488690',1,'SamsungProtocol::__pad2__()'],['../unionSanyoProtocol.html#af762ec4bca951f0a8193be08692a9b3e',1,'SanyoProtocol::__pad2__()'],['../unionSharpProtocol.html#af02d3d154667f63afbacb9f50e40ddd2',1,'SharpProtocol::__pad2__()'],['../unionTcl112Protocol.html#ac3ca9623e507753cacd7303b1a0272b2',1,'Tcl112Protocol::__pad2__()'],['../unionTechnibelProtocol.html#a76022ef93412caed8f938cd76eae288e',1,'TechnibelProtocol::__pad2__()'],['../unionTecoProtocol.html#a6f255afef8feea0838b60ca308a3fe15',1,'TecoProtocol::__pad2__()'],['../unionToshibaProtocol.html#ab976a3d007474db50729a9d315ea2ddf',1,'ToshibaProtocol::__pad2__()'],['../unionTranscoldProtocol.html#a72050e0bc1c4828c9277b67803315868',1,'TranscoldProtocol::__pad2__()'],['../unionTrotecProtocol.html#af25bde6df1a74da8fecada128f23ba48',1,'TrotecProtocol::__pad2__()'],['../unionTrumaProtocol.html#a86e5187205b4ca9a16147160de04585d',1,'TrumaProtocol::__pad2__()'],['../unionVestelProtocol.html#a4a611ce846177ae4b9bc7cd6a60bf17f',1,'VestelProtocol::__pad2__()'],['../unionVoltasProtocol.html#a4c2798df803074bcde8ddf6c7e855d91',1,'VoltasProtocol::__pad2__()'],['../unionWhirlpoolProtocol.html#ab7f93602ea91e831fbb1d0d5862c690b',1,'WhirlpoolProtocol::__pad2__()']]], - ['_5f_5fpad3_5f_5f_19',['__pad3__',['../unionAmcorProtocol.html#a25002ba50158c3ee26d20d94d3507a9b',1,'AmcorProtocol::__pad3__()'],['../unionArgoProtocol.html#a6b383394993c83f6ed098826e5c02a4a',1,'ArgoProtocol::__pad3__()'],['../unionCarrierProtocol.html#a50193ce74f535d6dad154a96f54adb48',1,'CarrierProtocol::__pad3__()'],['../unionCoronaProtocol.html#a5f0dd8e7b0d0b5673088416e2f88df6e',1,'CoronaProtocol::__pad3__()'],['../unionDaikinESPProtocol.html#a2ef5628a9259b528c700a990bf411c01',1,'DaikinESPProtocol::__pad3__()'],['../unionDaikin2Protocol.html#aa6331c57c9e4a96077f449839fdf44e4',1,'Daikin2Protocol::__pad3__()'],['../unionDaikin216Protocol.html#a8c2dd3c46d384ce286dc4790afe31ffd',1,'Daikin216Protocol::__pad3__()'],['../unionDaikin160Protocol.html#ac3a48f7a81ec67c0d4cc1b4ac8ba7f59',1,'Daikin160Protocol::__pad3__()'],['../unionDaikin176Protocol.html#ab630c3dd3b3f6c733b255a4de5ca7642',1,'Daikin176Protocol::__pad3__()'],['../unionDaikin128Protocol.html#ac7a7623a3947b3cdd43a49ccd6359f3b',1,'Daikin128Protocol::__pad3__()'],['../unionDaikin152Protocol.html#a46b0a6cc3b11fc0f6c9a636be660cc42',1,'Daikin152Protocol::__pad3__()'],['../unionDelonghiProtocol.html#a98b1173e0d07b4a29506f5df0f396e72',1,'DelonghiProtocol::__pad3__()'],['../unionEcoclimProtocol.html#acddb949003223952f34beba59abbe319',1,'EcoclimProtocol::__pad3__()'],['../unionElectraProtocol.html#a6403f6b51a0deec451ccc385663ac0ab',1,'ElectraProtocol::__pad3__()'],['../unionFujitsuProtocol.html#a3f6c0bc00666716575cb48805f88fc80',1,'FujitsuProtocol::__pad3__()'],['../unionGoodweatherProtocol.html#ac9e781a9b5d7f9631c0b4696bca0bcef',1,'GoodweatherProtocol::__pad3__()'],['../unionGreeProtocol.html#a7291d729f3b5638cb160afbda37baba1',1,'GreeProtocol::__pad3__()'],['../unionHaierYRW02Protocol.html#ad2c1066a2d796f49424feb2612df3d98',1,'HaierYRW02Protocol::__pad3__()'],['../unionHitachiProtocol.html#a81ef6998c55ca142aa0418bfcdcfa3f1',1,'HitachiProtocol::__pad3__()'],['../unionHitachi424Protocol.html#aa0c15cc7acbf16f76a5194d1b2512cce',1,'Hitachi424Protocol::__pad3__()'],['../unionHitachi1Protocol.html#a8f53a39a6f727509b9faa1e41df34e65',1,'Hitachi1Protocol::__pad3__()'],['../unionKelvinatorProtocol.html#a35b5c9cd85f4b8c9eeec9231321acb5e',1,'KelvinatorProtocol::__pad3__()'],['../unionMitsubishi144Protocol.html#a5fd5cf0329ffc81873452121bc6c694b',1,'Mitsubishi144Protocol::__pad3__()'],['../unionMitsubishi136Protocol.html#aac4daa062404ef7de66285c661bd07c1',1,'Mitsubishi136Protocol::__pad3__()'],['../unionMitsubishi112Protocol.html#a61f23d1857c90d6bbb6c2c4bdd5f4366',1,'Mitsubishi112Protocol::__pad3__()'],['../unionMitsubishi152Protocol.html#a46ae84f569070c49ac38f922cb1ef418',1,'Mitsubishi152Protocol::__pad3__()'],['../unionMitsubishi88Protocol.html#a32d9cf7a2c286e7a54700685c8c7f971',1,'Mitsubishi88Protocol::__pad3__()'],['../unionNeoclimaProtocol.html#af6dbc91124759aa129d1f90e6dc72018',1,'NeoclimaProtocol::__pad3__()'],['../unionPanasonicAc32Protocol.html#a7c4bfcb851fdb80a894a63b2315735d8',1,'PanasonicAc32Protocol::__pad3__()'],['../unionSamsungProtocol.html#a604db5fe346dd0260352ceb8110fa9fc',1,'SamsungProtocol::__pad3__()'],['../unionSanyoProtocol.html#a8361c7d8c6d8c29cb32cf8fc767af20d',1,'SanyoProtocol::__pad3__()'],['../unionSharpProtocol.html#a16dd55080d92063e1f94a8d0001f5422',1,'SharpProtocol::__pad3__()'],['../unionTcl112Protocol.html#affe38fa7d2100bea87de4071e21fc2b6',1,'Tcl112Protocol::__pad3__()'],['../unionToshibaProtocol.html#a98c82a98cf2cdaf6a90689a56a76b3d5',1,'ToshibaProtocol::__pad3__()'],['../unionTrotecProtocol.html#aa8d15923ce801a0066bc656f1de7c022',1,'TrotecProtocol::__pad3__()'],['../unionTrumaProtocol.html#a37e7eac9fb988eaf6e09b5006c38fcac',1,'TrumaProtocol::__pad3__()'],['../unionVestelProtocol.html#a0c33c79555a228be2c4daf1fc67d5916',1,'VestelProtocol::__pad3__()'],['../unionVoltasProtocol.html#aa63b5dd18bc7376a712e7dd16d594525',1,'VoltasProtocol::__pad3__()'],['../unionWhirlpoolProtocol.html#a6bbb9f4faf465e74c2d3a66f17b1df48',1,'WhirlpoolProtocol::__pad3__()']]], - ['_5f_5fpad4_5f_5f_20',['__pad4__',['../unionAmcorProtocol.html#a4375506f729c9d45a1269aea9d968889',1,'AmcorProtocol::__pad4__()'],['../unionArgoProtocol.html#a2c425c7f223a53cdb33a783d133f5a77',1,'ArgoProtocol::__pad4__()'],['../unionCarrierProtocol.html#ade0f53c0cd05eaad14f0a3f0121e7b5e',1,'CarrierProtocol::__pad4__()'],['../unionCoronaProtocol.html#a58df374f27d3733fc63d3cc040478293',1,'CoronaProtocol::__pad4__()'],['../unionDaikinESPProtocol.html#a7014ed7555ab0ee36e2579fcb8df1f98',1,'DaikinESPProtocol::__pad4__()'],['../unionDaikin2Protocol.html#a62d5a48a2ed939f962d01ccc36240140',1,'Daikin2Protocol::__pad4__()'],['../unionDaikin216Protocol.html#a0b0ecd2afae9e01895d9eb9d7006ed79',1,'Daikin216Protocol::__pad4__()'],['../unionDaikin160Protocol.html#a74bccea5226643c27859b38a12a59be9',1,'Daikin160Protocol::__pad4__()'],['../unionDaikin176Protocol.html#a7a87ca0ff85353e3a3e0853af8784f0e',1,'Daikin176Protocol::__pad4__()'],['../unionDaikin128Protocol.html#a6646f9ae8d244cfd6ce6ae8444c26ee9',1,'Daikin128Protocol::__pad4__()'],['../unionDaikin152Protocol.html#afe5f17c62a8ba5ae29e4e2bb59aa1529',1,'Daikin152Protocol::__pad4__()'],['../unionDelonghiProtocol.html#a4cc4153806e037068b52d1f356bca2ef',1,'DelonghiProtocol::__pad4__()'],['../unionElectraProtocol.html#aca5ea0ef13aa3ad08fc35e0a5ba90b44',1,'ElectraProtocol::__pad4__()'],['../unionFujitsuProtocol.html#a62ccdc24ef47c68b3b13e35becaec99a',1,'FujitsuProtocol::__pad4__()'],['../unionGoodweatherProtocol.html#a15507e180c97e420b5d6fe3c0bc61fb8',1,'GoodweatherProtocol::__pad4__()'],['../unionGreeProtocol.html#a6caf58eb68a83c0686dbd65d7a35cb58',1,'GreeProtocol::__pad4__()'],['../unionHaierYRW02Protocol.html#a62e17795ebcaea82715972f98d5408ca',1,'HaierYRW02Protocol::__pad4__()'],['../unionHitachiProtocol.html#ad774d48d4f5aeea2866393fdfe3f555d',1,'HitachiProtocol::__pad4__()'],['../unionHitachi424Protocol.html#ae8a14021f2ffbbc8e371a98746f48254',1,'Hitachi424Protocol::__pad4__()'],['../unionKelvinatorProtocol.html#ac5dfd253e66fe1ec3e81861ff9831152',1,'KelvinatorProtocol::__pad4__()'],['../unionMitsubishi144Protocol.html#a3b863e77427d3a0e1aa253a78f7b74a2',1,'Mitsubishi144Protocol::__pad4__()'],['../unionMitsubishi136Protocol.html#abccf31e8af18978d9a1a88e89d940e09',1,'Mitsubishi136Protocol::__pad4__()'],['../unionMitsubishi112Protocol.html#a85d5019e05dd9f03a1f7ee064a88a942',1,'Mitsubishi112Protocol::__pad4__()'],['../unionMitsubishi152Protocol.html#a433f0416bbb79637c6f9fbe2acceac87',1,'Mitsubishi152Protocol::__pad4__()'],['../unionMitsubishi88Protocol.html#a9ea2db6c6894570bca8d28ca291257d4',1,'Mitsubishi88Protocol::__pad4__()'],['../unionNeoclimaProtocol.html#a8a71980caab28f7ec1d9db296e59b9b6',1,'NeoclimaProtocol::__pad4__()'],['../unionSamsungProtocol.html#aa760a13dc0616a19bdb0d26247f4069c',1,'SamsungProtocol::__pad4__()'],['../unionSanyoProtocol.html#a02c7bd013488fa887bb5c7f769ae7701',1,'SanyoProtocol::__pad4__()'],['../unionSharpProtocol.html#ad2f9ae4c63f0e3d7bf5ea29641f64f45',1,'SharpProtocol::__pad4__()'],['../unionTcl112Protocol.html#ae6dae45ebb41b93a08a5279123f2eb2c',1,'Tcl112Protocol::__pad4__()'],['../unionToshibaProtocol.html#a1dda567a649fbc2b9c62b88453d91a95',1,'ToshibaProtocol::__pad4__()'],['../unionTrotecProtocol.html#ad029528c5697ef44f4398297626ed3b0',1,'TrotecProtocol::__pad4__()'],['../unionTrumaProtocol.html#a47b0981e1af1482b07426ab2556239c4',1,'TrumaProtocol::__pad4__()'],['../unionVestelProtocol.html#aec62b8fe14c683d97ecae5f35c114a36',1,'VestelProtocol::__pad4__()'],['../unionVoltasProtocol.html#ab0ec8c8b4f98d8ad2185259a1013f20b',1,'VoltasProtocol::__pad4__()'],['../unionWhirlpoolProtocol.html#a4dd07f43eb81c73da20b4090a808cfb4',1,'WhirlpoolProtocol::__pad4__()']]], - ['_5f_5fpad5_5f_5f_21',['__pad5__',['../unionAmcorProtocol.html#aa2fa57304833e2067f438d74f898dfc8',1,'AmcorProtocol::__pad5__()'],['../unionArgoProtocol.html#aa3990245fbd608c4a4e7fef690532656',1,'ArgoProtocol::__pad5__()'],['../unionCarrierProtocol.html#a635772a0e49e2a82b7e665b1f8d42148',1,'CarrierProtocol::__pad5__()'],['../unionCoronaProtocol.html#a8a34423073c0a91ace50605fc8337bc0',1,'CoronaProtocol::__pad5__()'],['../unionDaikinESPProtocol.html#a2fd0730f664fb53db682583eec683655',1,'DaikinESPProtocol::__pad5__()'],['../unionDaikin2Protocol.html#ae8820509ea3d0d469eeaf2c6b24b1cc6',1,'Daikin2Protocol::__pad5__()'],['../unionDaikin216Protocol.html#af741df8a92304153646c72e327a1f84c',1,'Daikin216Protocol::__pad5__()'],['../unionDaikin160Protocol.html#a3d27052aa6059811302d7b55c0f937f4',1,'Daikin160Protocol::__pad5__()'],['../unionDaikin176Protocol.html#a3072452ff1a6f05474bf41e1a9ceed9c',1,'Daikin176Protocol::__pad5__()'],['../unionDaikin152Protocol.html#a341c6fab12f9de609675822e437033dc',1,'Daikin152Protocol::__pad5__()'],['../unionDelonghiProtocol.html#a09090f4876d843dc6c4425e2f2e9b285',1,'DelonghiProtocol::__pad5__()'],['../unionElectraProtocol.html#a104239d43eacdb9a3a02a390f0162e90',1,'ElectraProtocol::__pad5__()'],['../unionFujitsuProtocol.html#aee4a515da60b77610fd3f6ae79d23693',1,'FujitsuProtocol::__pad5__()'],['../unionGoodweatherProtocol.html#a30b3e624d81d69c2a3f1365692b6a1e9',1,'GoodweatherProtocol::__pad5__()'],['../unionHaierYRW02Protocol.html#a7405f45e3dfb5230a6e531c3ea5bd2cc',1,'HaierYRW02Protocol::__pad5__()'],['../unionHitachi424Protocol.html#aa366817e22645701ccd3ffa37d7317eb',1,'Hitachi424Protocol::__pad5__()'],['../unionKelvinatorProtocol.html#a57849bb224e56d4cee776299d1ca04b4',1,'KelvinatorProtocol::__pad5__()'],['../unionMitsubishi144Protocol.html#ae4e8f971ea13ebced975441862bc9ae8',1,'Mitsubishi144Protocol::__pad5__()'],['../unionMitsubishi112Protocol.html#ab2ef871a7872995119e7c0055bd532ca',1,'Mitsubishi112Protocol::__pad5__()'],['../unionMitsubishi152Protocol.html#a9041f537b5d1dafd244c48d8f9a6e7ee',1,'Mitsubishi152Protocol::__pad5__()'],['../unionNeoclimaProtocol.html#aabf9592dcc470f8eba1a39e8633cf597',1,'NeoclimaProtocol::__pad5__()'],['../unionSamsungProtocol.html#a81057e26a43dcb99dc5b14d31dc900f5',1,'SamsungProtocol::__pad5__()'],['../unionSanyoProtocol.html#afe99c3e0bad0c7da17cf26a2fab655fc',1,'SanyoProtocol::__pad5__()'],['../unionSharpProtocol.html#a3ab9b37f4ad117e094210d7576e38d92',1,'SharpProtocol::__pad5__()'],['../unionTcl112Protocol.html#af7625c2439f53ca9b9865056d8c304b0',1,'Tcl112Protocol::__pad5__()'],['../unionToshibaProtocol.html#aea55884c83704873093edf6aa89e5515',1,'ToshibaProtocol::__pad5__()'],['../unionTrotecProtocol.html#a44b5f228f9f74a83f93d5d4d772b5b4c',1,'TrotecProtocol::__pad5__()'],['../unionTrumaProtocol.html#a158f1727d5503b42fa8b8289f5077c1c',1,'TrumaProtocol::__pad5__()'],['../unionVestelProtocol.html#a59279963eb0888f6f0669987f43c7440',1,'VestelProtocol::__pad5__()'],['../unionVoltasProtocol.html#af25903098b89acf7d2b6ebc08eea3ce5',1,'VoltasProtocol::__pad5__()'],['../unionWhirlpoolProtocol.html#a6cd9a96ce3841158165039b0e7e85bcc',1,'WhirlpoolProtocol::__pad5__()']]], - ['_5f_5fpad6_5f_5f_22',['__pad6__',['../unionAmcorProtocol.html#ac7c9258f0465028a4d95468e9289a95e',1,'AmcorProtocol::__pad6__()'],['../unionArgoProtocol.html#a644f13f404fc89ac769437a1cf6ef5cc',1,'ArgoProtocol::__pad6__()'],['../unionCarrierProtocol.html#a683b70f292ffed7253b8956225a71a51',1,'CarrierProtocol::__pad6__()'],['../unionCoronaProtocol.html#aabdd6e87ab321b893f07461f755094c0',1,'CoronaProtocol::__pad6__()'],['../unionDaikinESPProtocol.html#a90b66e353330ccc293e1eb1011fd867c',1,'DaikinESPProtocol::__pad6__()'],['../unionDaikin2Protocol.html#a7ab72b8638708e7ccd77a8eddcd16222',1,'Daikin2Protocol::__pad6__()'],['../unionDaikin216Protocol.html#a69c25d121679d7f9809d7aaf3fd7dc2e',1,'Daikin216Protocol::__pad6__()'],['../unionDaikin160Protocol.html#af942373e7f265b12c5e1f8421384eec2',1,'Daikin160Protocol::__pad6__()'],['../unionDaikin152Protocol.html#a1767202bcd8ceb6e74af8a4ca0d2bee0',1,'Daikin152Protocol::__pad6__()'],['../unionElectraProtocol.html#a9e6ecfaa9e412c66289ce7053adb0b9b',1,'ElectraProtocol::__pad6__()'],['../unionFujitsuProtocol.html#a7cf469c79816ca98736f98ddb5748bd1',1,'FujitsuProtocol::__pad6__()'],['../unionGoodweatherProtocol.html#a426e1226b9b4427db41ab2b05ee6ed41',1,'GoodweatherProtocol::__pad6__()'],['../unionHaierYRW02Protocol.html#a03595ed00f070b0eecc647f426c2c9b1',1,'HaierYRW02Protocol::__pad6__()'],['../unionHitachi424Protocol.html#a6493b7bbcf755459eac23c47752c2ec4',1,'Hitachi424Protocol::__pad6__()'],['../unionKelvinatorProtocol.html#aa66ce8c926b143fa20f625272327f562',1,'KelvinatorProtocol::__pad6__()'],['../unionMitsubishi144Protocol.html#a4c0c204c7b2a5e74501064c648e2208e',1,'Mitsubishi144Protocol::__pad6__()'],['../unionMitsubishi112Protocol.html#aa4d66539685a6f96e7dd8fbe3d8e0107',1,'Mitsubishi112Protocol::__pad6__()'],['../unionMitsubishi152Protocol.html#abff52e55e71cd57b440094cd3dd9e115',1,'Mitsubishi152Protocol::__pad6__()'],['../unionNeoclimaProtocol.html#aad51233672b91f2ce68e950d4c50765e',1,'NeoclimaProtocol::__pad6__()'],['../unionSamsungProtocol.html#afa02814c4753f639a90ab6a23ef110d9',1,'SamsungProtocol::__pad6__()'],['../unionSanyoProtocol.html#a791ae08f3ba857068ae743192b59c82b',1,'SanyoProtocol::__pad6__()'],['../unionSharpProtocol.html#abedfd3c4badb1196e3e9b70a74288a56',1,'SharpProtocol::__pad6__()'],['../unionTcl112Protocol.html#a61cf175094f4bc60ab3af7f92d47d3ee',1,'Tcl112Protocol::__pad6__()'],['../unionToshibaProtocol.html#a70a740582720c7e99c1f0a19373e69eb',1,'ToshibaProtocol::__pad6__()'],['../unionTrotecProtocol.html#a66ea84463a2951cdc77ae7f08cd91600',1,'TrotecProtocol::__pad6__()'],['../unionVoltasProtocol.html#a1fc2d4c2b5792d53d364e61b84ca1fb0',1,'VoltasProtocol::__pad6__()'],['../unionWhirlpoolProtocol.html#a2918410c20d3861dda9c03e3ede1d802',1,'WhirlpoolProtocol::__pad6__()']]], - ['_5f_5fpad7_5f_5f_23',['__pad7__',['../unionAmcorProtocol.html#a06dbf04a6bb3326c3277308bee61e375',1,'AmcorProtocol::__pad7__()'],['../unionArgoProtocol.html#a981cc0905966560692835630b870bc96',1,'ArgoProtocol::__pad7__()'],['../unionCarrierProtocol.html#a21fe681b7a9b1a507d03b6eef716f57d',1,'CarrierProtocol::__pad7__()'],['../unionCoronaProtocol.html#aa833c2aa87c8b67ded46784d9d9fd506',1,'CoronaProtocol::__pad7__()'],['../unionDaikinESPProtocol.html#a6800cde1656446518ea87f1118439b03',1,'DaikinESPProtocol::__pad7__()'],['../unionDaikin2Protocol.html#a6aa60bc17385c5e18c12e384a1d4c0a8',1,'Daikin2Protocol::__pad7__()'],['../unionDaikin152Protocol.html#ac4382a8fab79df328801f8ec55dc8e57',1,'Daikin152Protocol::__pad7__()'],['../unionElectraProtocol.html#a985fb931c2ddcc73fefd4c207ed3e1a9',1,'ElectraProtocol::__pad7__()'],['../unionFujitsuProtocol.html#adeff2904e753c8d964465732b86fc2c5',1,'FujitsuProtocol::__pad7__()'],['../unionHaierYRW02Protocol.html#a13f95461887012ca8a0d27ce71c65cb6',1,'HaierYRW02Protocol::__pad7__()'],['../unionKelvinatorProtocol.html#a02e3f067fc93fae6f5656abe574bb440',1,'KelvinatorProtocol::__pad7__()'],['../unionMitsubishi152Protocol.html#ae9fcb056173bc5189802a0854b86ec45',1,'Mitsubishi152Protocol::__pad7__()'],['../unionNeoclimaProtocol.html#a141f688a97a101159035a384da7aba21',1,'NeoclimaProtocol::__pad7__()'],['../unionSamsungProtocol.html#a9566b98e808ae427eb3f6091c46ba8cb',1,'SamsungProtocol::__pad7__()'],['../unionSanyoProtocol.html#a1193bfb80754a3d4393bb638f17bafc4',1,'SanyoProtocol::__pad7__()'],['../unionSharpProtocol.html#a97bd3208dfa6bc72a37aee33c419b1ec',1,'SharpProtocol::__pad7__()'],['../unionTcl112Protocol.html#adc928f47f29d1b4bf33e7bd35c9987bd',1,'Tcl112Protocol::__pad7__()'],['../unionToshibaProtocol.html#a722c3fbf8955ca74f2ce7d8c5106301e',1,'ToshibaProtocol::__pad7__()'],['../unionWhirlpoolProtocol.html#a06cd885d96a9cb40b173ed243e1c68f1',1,'WhirlpoolProtocol::__pad7__()']]], - ['_5f_5fpad8_5f_5f_24',['__pad8__',['../unionAmcorProtocol.html#a7a602c91754a62acb96b65fad3ed5009',1,'AmcorProtocol::__pad8__()'],['../unionArgoProtocol.html#aada1e2f63bf852c820d3313d6bf55e2e',1,'ArgoProtocol::__pad8__()'],['../unionDaikinESPProtocol.html#a5257adef869633be571d00ff185e177b',1,'DaikinESPProtocol::__pad8__()'],['../unionDaikin2Protocol.html#ab0e5af627d95aa7d2a7ffecbeb34cd1e',1,'Daikin2Protocol::__pad8__()'],['../unionDaikin152Protocol.html#a36da6d6a07db0d3c4c559fb5319cf653',1,'Daikin152Protocol::__pad8__()'],['../unionElectraProtocol.html#aad3d9638d69b6a92f8e4205456d7b1e4',1,'ElectraProtocol::__pad8__()'],['../unionFujitsuProtocol.html#aaf3462eb6604ea7875995797805e69b1',1,'FujitsuProtocol::__pad8__()'],['../unionHaierYRW02Protocol.html#ab0640cdf0ae186ef0a75699bb2ab2247',1,'HaierYRW02Protocol::__pad8__()'],['../unionKelvinatorProtocol.html#ab2101275d6280bc95665d64ca936d4d2',1,'KelvinatorProtocol::__pad8__()'],['../unionMitsubishi152Protocol.html#acac643d9404b978f6f23e10dedee0076',1,'Mitsubishi152Protocol::__pad8__()'],['../unionNeoclimaProtocol.html#a96a021ba5d0cf5ffa0d8389b8c71f572',1,'NeoclimaProtocol::__pad8__()'],['../unionSamsungProtocol.html#a9c421e874b7ef2943cc7dfd37b35585f',1,'SamsungProtocol::__pad8__()'],['../unionSanyoProtocol.html#a41960ddb576d82e70010fa0699d88c74',1,'SanyoProtocol::__pad8__()'],['../unionSharpProtocol.html#a69a77f391ddca92c6ec7b26de9e1a4ea',1,'SharpProtocol::__pad8__()'],['../unionToshibaProtocol.html#afff1b9b96aa68e6d0772f361019e2684',1,'ToshibaProtocol::__pad8__()'],['../unionWhirlpoolProtocol.html#a00025b90681d37c8ee3daa93cf870a3d',1,'WhirlpoolProtocol::__pad8__()']]], - ['_5f_5fpad9_5f_5f_25',['__pad9__',['../unionArgoProtocol.html#a38bc056c18e086e4ff91d86e33b0bc08',1,'ArgoProtocol::__pad9__()'],['../unionDaikinESPProtocol.html#a73486ab8f7374a19e40ffd20daae2304',1,'DaikinESPProtocol::__pad9__()'],['../unionDaikin2Protocol.html#a68031d2df7b64929392f391f0e37fdeb',1,'Daikin2Protocol::__pad9__()'],['../unionElectraProtocol.html#af1e208eaa64b08e027265f302e3fbe9d',1,'ElectraProtocol::__pad9__()'],['../unionFujitsuProtocol.html#a80f43087377c73374eacb06691dd8ba0',1,'FujitsuProtocol::__pad9__()'],['../unionHaierYRW02Protocol.html#ad5c197a23df2a768d022946347d765fe',1,'HaierYRW02Protocol::__pad9__()'],['../unionKelvinatorProtocol.html#aec71a5df4da5fd9a10e199d2112a88ce',1,'KelvinatorProtocol::__pad9__()'],['../unionMitsubishi152Protocol.html#aa96a8fa1d266927c2673472d459b0d66',1,'Mitsubishi152Protocol::__pad9__()'],['../unionNeoclimaProtocol.html#a1440db9fae372808b6360bcf60c39f03',1,'NeoclimaProtocol::__pad9__()'],['../unionSamsungProtocol.html#abcda913039808cf6b1cd7d6d8b01ce13',1,'SamsungProtocol::__pad9__()'],['../unionSanyoProtocol.html#ad6d6489ed793360fdee4b2167d1b4efb',1,'SanyoProtocol::__pad9__()'],['../unionSharpProtocol.html#a02c515fbdde1a15a8f19af0d9154e9d2',1,'SharpProtocol::__pad9__()'],['../unionWhirlpoolProtocol.html#aa7006fe4a8c77706762ec523838a7d5e',1,'WhirlpoolProtocol::__pad9__()']]], - ['_5fbackupstate_26',['_backupState',['../classIRToshibaAC.html#a108c23cb859a64228166e5385295a1e5',1,'IRToshibaAC']]], - ['_5fcancelofftimer_27',['_cancelOffTimer',['../classIRCarrierAc64.html#a4a0fdf34836b1c954b27c9b242324679',1,'IRCarrierAc64']]], - ['_5fcancelontimer_28',['_cancelOnTimer',['../classIRCarrierAc64.html#a43e7be5a1a6fe2dbfe245e99d2205779',1,'IRCarrierAc64']]], - ['_5fcmd_29',['_cmd',['../classIRFujitsuAC.html#a5e66bc4a24b892525cfa02bb4d741cbf',1,'IRFujitsuAC']]], - ['_5fdelaymicroseconds_30',['_delayMicroseconds',['../classIRsend.html#a61ceb32aa53f538b93377b10e58b45c9',1,'IRsend']]], - ['_5fdesiredtemp_31',['_desiredtemp',['../classIRWhirlpoolAc.html#aee17cfa10f19e0df992b25cff58e9613',1,'IRWhirlpoolAc']]], - ['_5fdutycycle_32',['_dutycycle',['../classIRsend.html#a602e96e8cdbd6af41d288d905043e51f',1,'IRsend']]], - ['_5feconotoggle_33',['_EconoToggle',['../classIRMideaAC.html#a30f184751948b4412da46577578b625a',1,'IRMideaAC']]], - ['_5ffan_34',['_fan',['../classIRSharpAc.html#ad0f4e6025f2952c477bbd3f72a64d2fe',1,'IRSharpAc']]], - ['_5fforcepower_35',['_forcepower',['../classIRSamsungAc.html#a022c96bfab671b1d0b6b5b331be31993',1,'IRSamsungAc']]], - ['_5ffreq_5funittest_36',['_freq_unittest',['../classIRsend.html#a2caec2f35ecdb890b1e34d9eb3642363',1,'IRsend']]], - ['_5fgeteconotoggle_37',['_getEconoToggle',['../classIRSharpAc.html#a4cbf2b92302a8b0a40e76e7431c82745',1,'IRSharpAc']]], - ['_5fgettime_38',['_getTime',['../classIRPanasonicAc.html#ab0a592b759daf90be548ac69ae99f40f',1,'IRPanasonicAc']]], - ['_5fgettimer_39',['_getTimer',['../classIRCoronaAc.html#a352fedb1c80549d2b580e538d8ba7901',1,'IRCoronaAc']]], - ['_5finverted_40',['_inverted',['../classIRac.html#a9cfaa0b92819f06b3aa5b3e9e48b9d51',1,'IRac']]], - ['_5firrecv_41',['_IRrecv',['../namespace__IRrecv.html',1,'']]], - ['_5firsend_42',['_irsend',['../classIRAirwellAc.html#a57a01d6e65f6fa1127f8d3dc86ff8071',1,'IRAirwellAc::_irsend()'],['../classIRAmcorAc.html#a6245bb51fa206031c3348e3eb6cb096d',1,'IRAmcorAc::_irsend()'],['../classIRArgoAC.html#a1abd8d958c3e153c4f2aaf7a3716414e',1,'IRArgoAC::_irsend()'],['../classIRCarrierAc64.html#a17270f2b1d6cab828e2a51fc23b36437',1,'IRCarrierAc64::_irsend()'],['../classIRCoolixAC.html#a6c7033e72fb860bca600ba6ea6e7afef',1,'IRCoolixAC::_irsend()'],['../classIRCoronaAc.html#afba5a3c3cff3859303a91d136ad00b66',1,'IRCoronaAc::_irsend()'],['../classIRDaikinESP.html#a2f5a8cb170d54f06bfa3eeb9b8ff838e',1,'IRDaikinESP::_irsend()'],['../classIRDaikin2.html#aa8ba00ae2c09af098146452164c4cb3b',1,'IRDaikin2::_irsend()'],['../classIRDaikin216.html#ac0e88b92a5c75138ce5b3a31f0c09be2',1,'IRDaikin216::_irsend()'],['../classIRDaikin160.html#a3094f35b359d8774a95dd3896c0e45e4',1,'IRDaikin160::_irsend()'],['../classIRDaikin176.html#a24f7022eb1c1936f5ee95ac0d732584c',1,'IRDaikin176::_irsend()'],['../classIRDaikin128.html#a1f155cc34e6c21d206962239d0135d1b',1,'IRDaikin128::_irsend()'],['../classIRDaikin152.html#a9b203215156d48dabac0fa8fd19dc613',1,'IRDaikin152::_irsend()'],['../classIRDaikin64.html#a6eb57b0eb12dab12bd9cf2fe4fded2c7',1,'IRDaikin64::_irsend()'],['../classIRDelonghiAc.html#a8cbe8b6857b7492c108118b4eda3ecb0',1,'IRDelonghiAc::_irsend()'],['../classIREcoclimAc.html#aa34348b379abce3ae540987c3b83ec4c',1,'IREcoclimAc::_irsend()'],['../classIRElectraAc.html#af8732b31f2a4421226220dd8a4a4f985',1,'IRElectraAc::_irsend()'],['../classIRFujitsuAC.html#a2b7fec218b3530b06ce8b49f472e9595',1,'IRFujitsuAC::_irsend()'],['../classIRGoodweatherAc.html#acf606eb9e024c99407138dbd058e98d9',1,'IRGoodweatherAc::_irsend()'],['../classIRGreeAC.html#a36390655badf0ad5b5809499a8634f70',1,'IRGreeAC::_irsend()'],['../classIRHaierAC.html#aec69643fe633a57d635754690225fdd1',1,'IRHaierAC::_irsend()'],['../classIRHaierACYRW02.html#a24dd00bfa5e062c5c7f459bcd60213b7',1,'IRHaierACYRW02::_irsend()'],['../classIRHitachiAc.html#a0e296fa54cc4c56e16c6fc58c7ad827f',1,'IRHitachiAc::_irsend()'],['../classIRHitachiAc1.html#a61ad6289fc3719a850299788e642b98b',1,'IRHitachiAc1::_irsend()'],['../classIRHitachiAc424.html#a39157a1bda46304429570be2880c6ec4',1,'IRHitachiAc424::_irsend()'],['../classIRHitachiAc3.html#a8dc3b713e29f3ea96a106868451ba728',1,'IRHitachiAc3::_irsend()'],['../classIRKelvinatorAC.html#ae3571bf6de20e47f81ad1da8f1d13118',1,'IRKelvinatorAC::_irsend()'],['../classIRLgAc.html#a779f321b65db6ad05ab3e578b38cf093',1,'IRLgAc::_irsend()'],['../classIRMideaAC.html#ae2b6068355ecdc360c4c2ca2fd8d921b',1,'IRMideaAC::_irsend()'],['../classIRMitsubishiAC.html#a6753b676690f35bc8ba73504fdc34946',1,'IRMitsubishiAC::_irsend()'],['../classIRMitsubishi136.html#acd14c7bb6b26d0603ee552a000e16d43',1,'IRMitsubishi136::_irsend()'],['../classIRMitsubishi112.html#af858d640f9b2fca053287f280c8a27c0',1,'IRMitsubishi112::_irsend()'],['../classIRMitsubishiHeavy152Ac.html#a1ebd4c8b06d64e0944358156f58d414e',1,'IRMitsubishiHeavy152Ac::_irsend()'],['../classIRMitsubishiHeavy88Ac.html#a1e999c9ee028d35c03cd6b4751bcb8be',1,'IRMitsubishiHeavy88Ac::_irsend()'],['../classIRNeoclimaAc.html#a43e42b1c7e68e5a85ed10454c6210be5',1,'IRNeoclimaAc::_irsend()'],['../classIRPanasonicAc.html#a065dcc65ef3dbb8f2384f883fb97d102',1,'IRPanasonicAc::_irsend()'],['../classIRPanasonicAc32.html#acc38daddd226f27b33835532041d5148',1,'IRPanasonicAc32::_irsend()'],['../classIRSamsungAc.html#a5815878dbebe512c41c26924cf9f5eeb',1,'IRSamsungAc::_irsend()'],['../classIRSanyoAc.html#a5dc78b02c5d10ac717542b67b65f15d6',1,'IRSanyoAc::_irsend()'],['../classIRSharpAc.html#a10ee598c31c0f8179ace953ed88e37c6',1,'IRSharpAc::_irsend()'],['../classIRTcl112Ac.html#a3f10e710a44c3a80f4f9ed5247b28058',1,'IRTcl112Ac::_irsend()'],['../classIRTechnibelAc.html#adb30f91c384028cc53aaae6edaacf3b0',1,'IRTechnibelAc::_irsend()'],['../classIRTechnibelAc.html#a9db7b15e279e0c17e0eafd8201d5c7dc',1,'IRTechnibelAc::_irsend()'],['../classIRTecoAc.html#a283ff8b73ef2998f0668d0a03cba0938',1,'IRTecoAc::_irsend()'],['../classIRToshibaAC.html#a694609136a9cbdb9af5f8bb98411c2eb',1,'IRToshibaAC::_irsend()'],['../classIRTranscoldAc.html#a3f7136d98c100a67b97f4f8afb750fc4',1,'IRTranscoldAc::_irsend()'],['../classIRTrotecESP.html#a1faa968fc2651dc1774160950e97a74e',1,'IRTrotecESP::_irsend()'],['../classIRTrumaAc.html#abd9d54c3185e53d25c870a8e89cb0e90',1,'IRTrumaAc::_irsend()'],['../classIRVestelAc.html#a56d35fc5d39c97b4c6f2decf176e2cae',1,'IRVestelAc::_irsend()'],['../classIRVoltas.html#a09225bcf0cdff72f0fe35a88a91a88ad',1,'IRVoltas::_irsend()'],['../classIRWhirlpoolAc.html#af4fdac2382048e2776c787bebd482e9e',1,'IRWhirlpoolAc::_irsend()']]], - ['_5firtimer_5funittest_5fnow_43',['_IRtimer_unittest_now',['../IRtimer_8cpp.html#a4ac531aa761a28d68edbc12967038180',1,'IRtimer.cpp']]], - ['_5flastfan_44',['_lastfan',['../classIRTrumaAc.html#a7793142d962316d930372ea6beac2069',1,'IRTrumaAc']]], - ['_5flastmode_45',['_lastmode',['../classIRTrumaAc.html#a9e72a42def9956635765c6bfb54f333b',1,'IRTrumaAc']]], - ['_5flastsentpowerstate_46',['_lastsentpowerstate',['../classIRSamsungAc.html#af1c6712dc05a451e815675abe972d9b4',1,'IRSamsungAc']]], - ['_5flighttoggle_47',['_LightToggle',['../classIRMideaAC.html#ab466b5939e796f818203220e0ca6896d',1,'IRMideaAC']]], - ['_5fmatchgeneric_48',['_matchGeneric',['../classIRrecv.html#af0b300fe6fdff58324525e8208be3024',1,'IRrecv']]], - ['_5fmode_49',['_mode',['../classIRSharpAc.html#a169d5636aead556234dc301729050619',1,'IRSharpAc']]], - ['_5fmodel_50',['_model',['../classIRFujitsuAC.html#a181c71dbd46ceabdcfe08448ee32bba7',1,'IRFujitsuAC::_model()'],['../classIRGreeAC.html#ae357bf1611f349e2686f4f46c2581c47',1,'IRGreeAC::_model()'],['../classIRSharpAc.html#a93ef10252142effe9fe52d2ad9787c6c',1,'IRSharpAc::_model()'],['../classIRVoltas.html#a01270b3d5e2b0d85a3ee860edb5c3232',1,'IRVoltas::_model()']]], - ['_5fmodulation_51',['_modulation',['../classIRac.html#acc6b7380f11c38d13fffa99ca2189a9b',1,'IRac']]], - ['_5fpin_52',['_pin',['../classIRac.html#aba78a2510d8cdcaf4c601e8b0574ae6c',1,'IRac']]], - ['_5fprev_53',['_prev',['../classIRac.html#a8c63dc78c49f3714887fea0feefffd44',1,'IRac']]], - ['_5fprev_5fmode_54',['_prev_mode',['../classIRToshibaAC.html#aed47a2b5df2c06438942b00852c45ace',1,'IRToshibaAC']]], - ['_5fprevioustemp_55',['_previoustemp',['../classIRHitachiAc.html#a1368dcd7f4c0049822fd2b9b1e0acb5e',1,'IRHitachiAc::_previoustemp()'],['../classIRHitachiAc424.html#aba6c17936775e268744af23a4a533f92',1,'IRHitachiAc424::_previoustemp()']]], - ['_5fprotocol_56',['_protocol',['../classIRLgAc.html#a9bd32e865a7358bbf32830d888e2786a',1,'IRLgAc']]], - ['_5frestorestate_57',['_restoreState',['../classIRToshibaAC.html#a23fb190770159f8f1e9bf64df22e8a26',1,'IRToshibaAC']]], - ['_5fsaved_58',['_saved',['../classIRCoolixAC.html#a24160742d72e8b1ee1069c9c6ddc57fa',1,'IRCoolixAC']]], - ['_5fsaved_5ftemp_59',['_saved_temp',['../classIRDaikin176.html#a8f1d6c765bf09c1a3dc9678c3939a5be',1,'IRDaikin176::_saved_temp()'],['../classIRDelonghiAc.html#a724aa5748e714a7f0109a2f3502cd1d1',1,'IRDelonghiAc::_saved_temp()'],['../classIRTechnibelAc.html#a0b98069ac7367419f736fa0e639e4847',1,'IRTechnibelAc::_saved_temp()']]], - ['_5fsaved_5ftemp_5funits_60',['_saved_temp_units',['../classIRDelonghiAc.html#a14fba6ccbc25da76744d28e7a40c385b',1,'IRDelonghiAc::_saved_temp_units()'],['../classIRTechnibelAc.html#a8d5a8e132e1d5884564f3212d396d160',1,'IRTechnibelAc::_saved_temp_units()']]], - ['_5fsend_5fswing_61',['_send_swing',['../classIRToshibaAC.html#a3c0873667deefce7b13a051910d13046',1,'IRToshibaAC']]], - ['_5fsendsony_62',['_sendSony',['../classIRsend.html#a21352b4499f976872a74bae36ea10338',1,'IRsend']]], - ['_5fseteconotoggle_63',['_setEconoToggle',['../classIRSharpAc.html#a959d422c7e5a5204909b299a5fbb2a69',1,'IRSharpAc']]], - ['_5fsetmode_64',['_setMode',['../classIRWhirlpoolAc.html#a60fd8da35d6e0137711e114a5307d664',1,'IRWhirlpoolAc']]], - ['_5fsettemp_65',['_setTemp',['../classIRLgAc.html#a39aca9861608211c8e74c89a7ccc97cd',1,'IRLgAc::_setTemp()'],['../classIRWhirlpoolAc.html#abb221e09077efd96304f84e8ca130458',1,'IRWhirlpoolAc::_setTemp()']]], - ['_5fsettime_66',['_setTime',['../classIRPanasonicAc.html#a51e306dd7a3e4d580ed5396fcd166141',1,'IRPanasonicAc']]], - ['_5fsettimer_67',['_setTimer',['../classIRCoronaAc.html#a0ea9319987de7cb7f3dcb9fbefb60a2c',1,'IRCoronaAc']]], - ['_5fstate_5flength_68',['_state_length',['../classIRFujitsuAC.html#aea1819d0041f305e2c990f6f3eced865',1,'IRFujitsuAC']]], - ['_5fstate_5flength_5fshort_69',['_state_length_short',['../classIRFujitsuAC.html#a7093cf32cd2e856ff692aebc732c1d50',1,'IRFujitsuAC']]], - ['_5fswing_5fmode_70',['_swing_mode',['../classIRToshibaAC.html#a3d782a316cbadf2128a1392feda5c21b',1,'IRToshibaAC']]], - ['_5fswingh_71',['_swingh',['../classIRPanasonicAc.html#ad0300ee66bcab38e13724520cb3226f9',1,'IRPanasonicAc']]], - ['_5fswingvstep_72',['_SwingVStep',['../classIRMideaAC.html#a8a1c79c8a4b61075790faef879928c4b',1,'IRMideaAC']]], - ['_5fswingvtoggle_73',['_SwingVToggle',['../classIRMideaAC.html#adb4318940487aea09116fe6b9f061470',1,'IRMideaAC']]], - ['_5ftemp_74',['_temp',['../classIRLgAc.html#a1eeb727ee96c26b784a607aabd4577c9',1,'IRLgAc::_temp()'],['../classIRPanasonicAc.html#af6511e3c9745ff6750dc6fc3fdda21b3',1,'IRPanasonicAc::_temp()'],['../classIRSharpAc.html#a1d0a6274534123133217175920c7cd95',1,'IRSharpAc::_temp()']]], - ['_5ftimer_5fnum_75',['_timer_num',['../classIRrecv.html#aff11c0c20735b16ce411088003607911',1,'IRrecv']]], - ['_5ftimerms_5funittest_5fnow_76',['_TimerMs_unittest_now',['../IRtimer_8cpp.html#aed35ce7fa92ebb856a03f81e756cb2c6',1,'IRtimer.cpp']]], - ['_5ftolerance_77',['_tolerance',['../classIRrecv.html#a0459a65dd31b215713ad66a1e4f3540e',1,'IRrecv']]], - ['_5ftostring_78',['_toString',['../classIRHitachiAc424.html#af8ff90fe9beb31d8f44310a9e646a230',1,'IRHitachiAc424']]], - ['_5fturbotoggle_79',['_TurboToggle',['../classIRMideaAC.html#a86ee53513a7f47556f9cfe44d060e94c',1,'IRMideaAC']]], - ['_5funknown_5fthreshold_80',['_unknown_threshold',['../classIRrecv.html#adb8cbc5c1cb739f33f5be25b3a6c79bd',1,'IRrecv']]], - ['_5fvalidtolerance_81',['_validTolerance',['../classIRrecv.html#a0b4221970de0d027b5ae99648fa1c003',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.html deleted file mode 100644 index 8eb215b90..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.js deleted file mode 100644 index 807315634..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1.js +++ /dev/null @@ -1,36 +0,0 @@ -var searchData= -[ - ['a705_82',['A705',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a7478bee154c89b576fd478d9623d9281',1,'IRsend.h']]], - ['a903_83',['A903',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a2357513b74e874971927b6b08dcc1655',1,'IRsend.h']]], - ['a907_84',['A907',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a11c3296670bdeab9ddd87e4edb875e64',1,'IRsend.h']]], - ['add_85',['add',['../classIRtimer.html#aa8e3ff975ae5468b4727790c828fa032',1,'IRtimer::add()'],['../classTimerMs.html#a77bfc23a029a9172c3dbac03f746b0cb',1,'TimerMs::add()']]], - ['addbooltostring_86',['addBoolToString',['../namespaceirutils.html#a12ba9cf1830a886649a80c3cc5fdce2b',1,'irutils']]], - ['adddaytostring_87',['addDayToString',['../namespaceirutils.html#a6ead1d10578c64627f8a24b5d8a7444f',1,'irutils']]], - ['addfantostring_88',['addFanToString',['../namespaceirutils.html#af222d5a977e2cd2c979184c449d3c2f8',1,'irutils']]], - ['addinttostring_89',['addIntToString',['../namespaceirutils.html#a772e623c4b60208200e02afbaec66651',1,'irutils']]], - ['addlabeledstring_90',['addLabeledString',['../namespaceirutils.html#ac98793392d1e65c1b8d6895eb9d9b75b',1,'irutils']]], - ['addmodeltostring_91',['addModelToString',['../namespaceirutils.html#a06e5a5c2b6f6649035dfa5eb19801367',1,'irutils']]], - ['addmodetostring_92',['addModeToString',['../namespaceirutils.html#a8b74ae0258e98aa0eaebc6f3efe1481e',1,'irutils']]], - ['address_93',['address',['../classdecode__results.html#a2858c3a5e28eccca95d44aaa87b70e9e',1,'decode_results']]], - ['addswinghtostring_94',['addSwingHToString',['../namespaceirutils.html#ae9eeea9379788b856d148ca5bc7eaf7a',1,'irutils']]], - ['addswingvtostring_95',['addSwingVToString',['../namespaceirutils.html#a4921dc8d85aa1cc3e89aaa64c24abd58',1,'irutils']]], - ['addtempfloattostring_96',['addTempFloatToString',['../namespaceirutils.html#a3a47e2b142c7738958e367b0c80a79e7',1,'irutils']]], - ['addtemptostring_97',['addTempToString',['../namespaceirutils.html#a0cef0634f4db979a93b7dc19cc2b4a85',1,'irutils']]], - ['adjustrepeat_98',['adjustRepeat',['../namespaceIRXmpUtils.html#a8e7705ba4373589a651e662a3debb0a8',1,'IRXmpUtils']]], - ['airflow_99',['AirFlow',['../unionGoodweatherProtocol.html#a7b876552a27a7a9bf84b1009f7b12f7a',1,'GoodweatherProtocol']]], - ['airwell_100',['airwell',['../classIRac.html#a26cd62e09250d87b652d35406ebfb159',1,'IRac::airwell()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0cd75c2edaa4c674d679dbb39635990a',1,'AIRWELL(): IRremoteESP8266.h']]], - ['airwellprotocol_101',['AirwellProtocol',['../unionAirwellProtocol.html',1,'']]], - ['aiwa_5frc_5ft501_102',['AIWA_RC_T501',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7dc14b2c4769ef9de663c2e2165d8f75',1,'IRremoteESP8266.h']]], - ['akb75215403_103',['AKB75215403',['../IRsend_8h.html#a50c54713e16502d280723334879dc83ba37d3851f43307f1e1eac46c5fbf3f08a',1,'IRsend.h']]], - ['altmode_104',['AltMode',['../unionDaikin176Protocol.html#a05511938e152951723792dc08b33d0dd',1,'Daikin176Protocol']]], - ['amcor_105',['amcor',['../classIRac.html#a4bad16621b232572e14fe4a53f678131',1,'IRac::amcor()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1325ba25674d7a99562f15a1b392086b',1,'AMCOR(): IRremoteESP8266.h']]], - ['amcorprotocol_106',['AmcorProtocol',['../unionAmcorProtocol.html',1,'']]], - ['ardb1_107',['ARDB1',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6f6fcd0be917d91b71c1b80b5446ee5b',1,'IRsend.h']]], - ['argo_108',['argo',['../classIRac.html#aa06ee1314529dbf96f4e6f3c28ea6821',1,'IRac::argo()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac9ff1fa84905b54238b16d31197efb72',1,'ARGO(): IRremoteESP8266.h']]], - ['argoprotocol_109',['ArgoProtocol',['../unionArgoProtocol.html',1,'']]], - ['arjw2_110',['ARJW2',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0acbca1f3d199103d8cb9d856b9089cdc4',1,'IRsend.h']]], - ['arrah2e_111',['ARRAH2E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6ccf47af1067e794e02e21f03389297b',1,'IRsend.h']]], - ['arreb1e_112',['ARREB1E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a2443ff6f0181dbc1af275c709d67147a',1,'IRsend.h']]], - ['arrew4e_113',['ARREW4E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a15f4cef920f6b63156a209dd97189a3b',1,'IRsend.h']]], - ['arry4_114',['ARRY4',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0aee3994c5a4a8447463d67df2cdf5a946',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.html deleted file mode 100644 index 6fd3a4aa2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.js deleted file mode 100644 index 06fbd3d4e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_10.js +++ /dev/null @@ -1,36 +0,0 @@ -var searchData= -[ - ['pad_3120',['pad',['../unionDaikin2Protocol.html#ac6b425dc516537ae3178583ff26e0948',1,'Daikin2Protocol::pad()'],['../unionDaikin128Protocol.html#aeef026f1ecb9696a7bf01b17de88951e',1,'Daikin128Protocol::pad()'],['../unionHitachi1Protocol.html#a17a8788deccc8c3648b91be5de4e1964',1,'Hitachi1Protocol::pad()'],['../unionMitsubishi136Protocol.html#a66638db2b4d4c1d969d0c6809b991ed0',1,'Mitsubishi136Protocol::pad()'],['../unionSharpProtocol.html#a315ed64d8b03c559003aa032152c742e',1,'SharpProtocol::pad()']]], - ['pad0_3121',['pad0',['../unionDaikin216Protocol.html#ac7e3625c88ded6bf5e9e744b78af3877',1,'Daikin216Protocol::pad0()'],['../unionDaikin160Protocol.html#a422b94d3ddc17dafac919a04b6779e0e',1,'Daikin160Protocol::pad0()'],['../unionDaikin176Protocol.html#a1c883c0473df6419fa79d9e7ec044400',1,'Daikin176Protocol::pad0()'],['../unionDaikin152Protocol.html#accd26b9ae5a2b4689b1d44715cdedae5',1,'Daikin152Protocol::pad0()'],['../unionHitachiProtocol.html#a9141747df7882925a8442ae0f261e1cc',1,'HitachiProtocol::pad0()'],['../unionHitachi424Protocol.html#aca5baed417c2c06be4e912c596b5cacf',1,'Hitachi424Protocol::pad0()'],['../unionKelvinatorProtocol.html#aa67bf941395c4a614f8cc70ce29bffcf',1,'KelvinatorProtocol::pad0()'],['../unionMitsubishi144Protocol.html#a7771c9cd00799d3bed0ee73d3a3172bd',1,'Mitsubishi144Protocol::pad0()'],['../unionMitsubishi112Protocol.html#a07a1682430a0a2c63614d09ad0a7a5a0',1,'Mitsubishi112Protocol::pad0()'],['../unionSamsungProtocol.html#adcf56d5e9d61401deba67ae4bed32797',1,'SamsungProtocol::pad0()'],['../unionTcl112Protocol.html#a8da5d4f35f677c8d81ea628a753e110f',1,'Tcl112Protocol::pad0()'],['../unionWhirlpoolProtocol.html#a85afaae2ea603ff9aad240a67b9a770f',1,'WhirlpoolProtocol::pad0()']]], - ['pad1_3122',['pad1',['../unionDaikin216Protocol.html#a3953e06ed7903c50cdfa7fa4dad77c93',1,'Daikin216Protocol::pad1()'],['../unionDaikin160Protocol.html#a55ae3e21ecc536fdeb8f773beaedf1bf',1,'Daikin160Protocol::pad1()'],['../unionDaikin176Protocol.html#a336e5ffedd9eda2778f8e1652cd3f349',1,'Daikin176Protocol::pad1()'],['../unionDaikin152Protocol.html#a4c24a70b48139610acb457eb915e76bf',1,'Daikin152Protocol::pad1()'],['../unionHitachiProtocol.html#a28391ab1e1994d254d9abf057c2b87ba',1,'HitachiProtocol::pad1()'],['../unionHitachi424Protocol.html#abb196383de210b25ec3d56b7f02ca9c3',1,'Hitachi424Protocol::pad1()'],['../unionKelvinatorProtocol.html#a9feee780a54bfb86968f137080d3d68e',1,'KelvinatorProtocol::pad1()'],['../unionMitsubishi144Protocol.html#ad256f8e7f36c654002807b7fbb5038dd',1,'Mitsubishi144Protocol::pad1()'],['../unionMitsubishi112Protocol.html#af5c30781b3183c3530b4e401952a5666',1,'Mitsubishi112Protocol::pad1()'],['../unionSamsungProtocol.html#a197a2005789029b5037840fa5f0945f1',1,'SamsungProtocol::pad1()'],['../unionTcl112Protocol.html#a701ddcba3061c25b515a1d7788ddec12',1,'Tcl112Protocol::pad1()'],['../unionWhirlpoolProtocol.html#aed57244f4451176e68ce407ced81eb2c',1,'WhirlpoolProtocol::pad1()']]], - ['pad2_3123',['pad2',['../unionDaikin216Protocol.html#a2ad46cbab590d8ce0fcf43004a77a759',1,'Daikin216Protocol::pad2()'],['../unionDaikin160Protocol.html#a9465c279ea0be201cf8417fe3ede965d',1,'Daikin160Protocol::pad2()'],['../unionDaikin176Protocol.html#aae23dc257ea77a204fd2b6b22c9fd91b',1,'Daikin176Protocol::pad2()'],['../unionDaikin152Protocol.html#ab66afe90c383d6a24224327a88a10acc',1,'Daikin152Protocol::pad2()'],['../unionHitachi424Protocol.html#ab8325b434d355655f432d1d400a651ee',1,'Hitachi424Protocol::pad2()']]], - ['pad3_3124',['pad3',['../unionDaikin216Protocol.html#aeef7d4b689a7dccc73c201d1b5d96a2f',1,'Daikin216Protocol::pad3()'],['../unionDaikin176Protocol.html#a9959937c9a6bffc149060886f1ebb9b3',1,'Daikin176Protocol::pad3()']]], - ['padding_3125',['padding',['../unionmagiquest.html#a28ca4be56c78ef762f87171506dc6e93',1,'magiquest']]], - ['panasonic_3126',['panasonic',['../classIRac.html#af873db2b9735127eb6f079861daed67a',1,'IRac::panasonic()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf87c99938d26a1f77d4f082c070d4660',1,'PANASONIC(): IRremoteESP8266.h']]], - ['panasonic32_3127',['panasonic32',['../classIRac.html#a66ed34d5686ad25a1659862f3b683f68',1,'IRac']]], - ['panasonic_5fac_3128',['PANASONIC_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada02178d0c70511011d5f381291bb7e491',1,'IRremoteESP8266.h']]], - ['panasonic_5fac32_3129',['PANASONIC_AC32',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada790ec65ea3e5d3ef9dc19614521c889e',1,'IRremoteESP8266.h']]], - ['panasonic_5fac_5fremote_5fmodel_5ft_3130',['panasonic_ac_remote_model_t',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6f',1,'IRsend.h']]], - ['panasonicac32protocol_3131',['PanasonicAc32Protocol',['../unionPanasonicAc32Protocol.html',1,'']]], - ['params_3132',['params',['../namespace__IRrecv.html#a75e3f81d5e64fd51c049231876a37906',1,'_IRrecv']]], - ['params_5fsave_3133',['params_save',['../namespace__IRrecv.html#af604d4630a17b4113c0e086e513187d1',1,'_IRrecv']]], - ['periodoffset_3134',['periodOffset',['../classIRsend.html#a1b5180cbf4f88f19fca3f677e1e91b96',1,'IRsend']]], - ['pioneer_3135',['PIONEER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadadf49fef8f6e9740c92af2e25384f7846',1,'IRremoteESP8266.h']]], - ['power_3136',['Power',['../unionAmcorProtocol.html#ab6d6b470c8e3c80ee37eb31a048919db',1,'AmcorProtocol::Power()'],['../unionArgoProtocol.html#a72c5dbd39ccbac31d5cfc39beaa87d92',1,'ArgoProtocol::Power()'],['../unionCarrierProtocol.html#a9f039bf33bbe868118f14c28d6731718',1,'CarrierProtocol::Power()'],['../unionCoronaProtocol.html#a7da68dc07f9ef4ab0545e9156f9408c4',1,'CoronaProtocol::Power()'],['../unionDaikinESPProtocol.html#a8a5b839b9908359b382a105068eaf840',1,'DaikinESPProtocol::Power()'],['../unionDaikin2Protocol.html#a31d4d361af1f3c7f6eb4021a520f4572',1,'Daikin2Protocol::Power()'],['../unionDaikin216Protocol.html#ade14eb9841ea4bc09157b145145bfda8',1,'Daikin216Protocol::Power()'],['../unionDaikin160Protocol.html#a520571b287c0db8a941fc1f9e030ef0c',1,'Daikin160Protocol::Power()'],['../unionDaikin176Protocol.html#a80fd9f79014f0fe3f2fa91ee6a3e7bc2',1,'Daikin176Protocol::Power()'],['../unionDaikin128Protocol.html#aba3cecc50eee1143e2f6eadd6d2026b4',1,'Daikin128Protocol::Power()'],['../unionDaikin152Protocol.html#a5cdf563830a35ee28d239d912bd5c95c',1,'Daikin152Protocol::Power()'],['../unionDaikin64Protocol.html#a4290051abed062bb5993db071a28ef61',1,'Daikin64Protocol::Power()'],['../unionDelonghiProtocol.html#a5dccd7aa1927571e12d4244e1c179578',1,'DelonghiProtocol::Power()'],['../unionEcoclimProtocol.html#ae022c9f0fe7a6912f0b9c335388cd386',1,'EcoclimProtocol::Power()'],['../unionElectraProtocol.html#a907a426aa30a50667d5e4f4615d71518',1,'ElectraProtocol::Power()'],['../unionFujitsuProtocol.html#ad6ac9cd452bac615abf2015e5baeb934',1,'FujitsuProtocol::Power()'],['../unionGoodweatherProtocol.html#ac3a2cf92410edd8ad11550f6aa051bac',1,'GoodweatherProtocol::Power()'],['../unionGreeProtocol.html#ab04d1d5bdaf8fb0b7129e210de14a772',1,'GreeProtocol::Power()'],['../unionHaierYRW02Protocol.html#ae87a93806911792662391a671607a760',1,'HaierYRW02Protocol::Power()'],['../unionHitachiProtocol.html#abec059afed0891f40f50b1024f211ee1',1,'HitachiProtocol::Power()'],['../unionHitachi424Protocol.html#a03af2b7a7c333c9069c4a689631cbc84',1,'Hitachi424Protocol::Power()'],['../unionHitachi1Protocol.html#a67b84f1d4c3720692e8de833b3910b88',1,'Hitachi1Protocol::Power()'],['../unionKelvinatorProtocol.html#a4bc98c7ae62273e8d8d60d71fdb44750',1,'KelvinatorProtocol::Power()'],['../unionLGProtocol.html#a5748d31340964b885933fbb6ee7fd235',1,'LGProtocol::Power()'],['../unionMideaProtocol.html#a6b534bb5845c3c184ee43b87995cff32',1,'MideaProtocol::Power()'],['../unionMitsubishi144Protocol.html#af99f269ce1b905c47b9417c41189c94b',1,'Mitsubishi144Protocol::Power()'],['../unionMitsubishi136Protocol.html#aa5df3d147cbd1c2dd3f17028c0ff36dc',1,'Mitsubishi136Protocol::Power()'],['../unionMitsubishi112Protocol.html#ad4c47f745c6ff6a349457ccc66f4e091',1,'Mitsubishi112Protocol::Power()'],['../unionMitsubishi152Protocol.html#abb8ac556d7ead5d1083af940130a9805',1,'Mitsubishi152Protocol::Power()'],['../unionMitsubishi88Protocol.html#a48eb181bcb178491d0cd399d69487f2b',1,'Mitsubishi88Protocol::Power()'],['../unionNeoclimaProtocol.html#a25d1e93aeea3a386d31bc5f665a52444',1,'NeoclimaProtocol::Power()'],['../unionSanyoProtocol.html#ae3626ac8b929a397f19705a29368d457',1,'SanyoProtocol::Power()'],['../unionTcl112Protocol.html#af087805327d98279e00c8f6427a2f9e7',1,'Tcl112Protocol::Power()'],['../unionTechnibelProtocol.html#aaab9c2a129506d34f9f0879cb2657f4d',1,'TechnibelProtocol::Power()'],['../unionTecoProtocol.html#a43035d0a8a9f00c5330a776a26b70465',1,'TecoProtocol::Power()'],['../unionTrotecProtocol.html#aabb71ec60601e95b6d6613e4407262cc',1,'TrotecProtocol::Power()'],['../unionVestelProtocol.html#aeca45915cf95898c9baa0e77d3a6e517',1,'VestelProtocol::Power()'],['../unionVoltasProtocol.html#a554e4bce95426a096f090cc6890f46f2',1,'VoltasProtocol::Power()'],['../unionWhirlpoolProtocol.html#a33653fd6f01c43852cf44b5feb0cb349',1,'WhirlpoolProtocol::Power()'],['../structstdAc_1_1state__t.html#ab85d37cc99bbbc4915331369c4ea622e',1,'stdAc::state_t::power()']]], - ['power1_3137',['Power1',['../unionSamsungProtocol.html#af389a11a1f56c92dfe67ce151310d0d8',1,'SamsungProtocol']]], - ['power2_3138',['Power2',['../unionDaikin2Protocol.html#ad38268911be9104ab7fcaf0d35dd4c6f',1,'Daikin2Protocol']]], - ['power6_3139',['Power6',['../unionSamsungProtocol.html#a4b30b11279244b37fa5b82a5203a3a77',1,'SamsungProtocol']]], - ['powerbutton_3140',['PowerButton',['../unionCoronaProtocol.html#abceccc1306d3a78be6177758f3056a5a',1,'CoronaProtocol']]], - ['powerflag_3141',['powerFlag',['../classIRCoolixAC.html#a5984ff64ff14df92291618a647da08f9',1,'IRCoolixAC']]], - ['powerful_3142',['Powerful',['../unionDaikinESPProtocol.html#a16b091d1faf200607bd37ff48ddfb940',1,'DaikinESPProtocol::Powerful()'],['../unionDaikin2Protocol.html#ac7b3b9d7f424ccc78749d944b59c7372',1,'Daikin2Protocol::Powerful()'],['../unionDaikin216Protocol.html#a2cb72f5fea3b5298b8de45060c476a17',1,'Daikin216Protocol::Powerful()'],['../unionDaikin152Protocol.html#aa4cdbef46c721491cb854b36d6de89a3',1,'Daikin152Protocol::Powerful()']]], - ['powerful10_3143',['Powerful10',['../unionSamsungProtocol.html#a500901489b00950de98ea922c7e8adcf',1,'SamsungProtocol']]], - ['powerful8_3144',['Powerful8',['../unionSamsungProtocol.html#a4fe9bf8b0d5d30af2b9b4dc20d8f68e3',1,'SamsungProtocol']]], - ['poweroff_3145',['PowerOff',['../unionTrumaProtocol.html#ac245b1ff37fb967f363cd8cae8b12b22',1,'TrumaProtocol']]], - ['powerspecial_3146',['PowerSpecial',['../unionSharpProtocol.html#aa2fd90d4f6117177dec13282ccc13ead',1,'SharpProtocol']]], - ['powertoggle_3147',['PowerToggle',['../unionAirwellProtocol.html#a9a3893a0ec7811202697adeb60d89775',1,'AirwellProtocol::PowerToggle()'],['../unionHitachi1Protocol.html#adf8067b7e2d7ea3afb6ffae08a9cf609',1,'Hitachi1Protocol::PowerToggle()'],['../unionPanasonicAc32Protocol.html#a5d6c6d8100c60323449ba5f96e147172',1,'PanasonicAc32Protocol::PowerToggle()']]], - ['prefix_3148',['Prefix',['../unionHaierProtocol.html#a6c15a8e22231dae23ffa8bef78420054',1,'HaierProtocol::Prefix()'],['../unionHaierYRW02Protocol.html#af55185fad3229f2011b5917412ad8c1b',1,'HaierYRW02Protocol::Prefix()']]], - ['pronto_3149',['PRONTO',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5b68c32f80c4afa6e61039843b2d1f97',1,'IRremoteESP8266.h']]], - ['protocol_3150',['Protocol',['../unionFujitsuProtocol.html#acf8b6b900c9dab936b4888b52e92e3b5',1,'FujitsuProtocol::Protocol()'],['../structstdAc_1_1state__t.html#af59897778be0e571f77dd11337352c27',1,'stdAc::state_t::protocol()']]], - ['pt_2dbr_2eh_3151',['pt-BR.h',['../pt-BR_8h.html',1,'']]], - ['purify_3152',['Purify',['../unionDaikin2Protocol.html#ad3c5427e7d4d0182bb86f61fa2c2484a',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.html deleted file mode 100644 index f78343b9b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.js deleted file mode 100644 index eaf948a28..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_11.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['quiet_3153',['Quiet',['../unionDaikinESPProtocol.html#af93324815f6be6cfc5d0d50af9e73aad',1,'DaikinESPProtocol::Quiet()'],['../unionDaikin2Protocol.html#afa111c9afbc94bcf52e9ba15b59c1bee',1,'Daikin2Protocol::Quiet()'],['../unionDaikin152Protocol.html#ac5bfe8541e53cb2732bfcbc71500ed32',1,'Daikin152Protocol::Quiet()'],['../unionKelvinatorProtocol.html#ac803fe14d6d21155418d2fe0543c9d9f',1,'KelvinatorProtocol::Quiet()'],['../structstdAc_1_1state__t.html#a251ad14e187a9905137e9e4e010c3e34',1,'stdAc::state_t::quiet()']]], - ['quiet1_3154',['Quiet1',['../unionSamsungProtocol.html#ac38e3f34f98ac3dae9738a1582dfeca6',1,'SamsungProtocol']]], - ['quiet5_3155',['Quiet5',['../unionSamsungProtocol.html#a94a9d2b42e1ab7a308d079322350c3f9',1,'SamsungProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.html deleted file mode 100644 index dd9ff1d59..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.js deleted file mode 100644 index c7799cdf3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_12.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['r_5flt0541_5fhta_5fa_3156',['R_LT0541_HTA_A',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49afed7c9dd67250bb1e72081e5f05b35f8',1,'IRsend.h']]], - ['r_5flt0541_5fhta_5fb_3157',['R_LT0541_HTA_B',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49a03b6e058b4cfeb6719906bc3cd57594f',1,'IRsend.h']]], - ['raw_3158',['raw',['../unionAirwellProtocol.html#a984e1bba5afac9887c2ebb976a38d560',1,'AirwellProtocol::raw()'],['../unionAmcorProtocol.html#a2044da7ab12175f20657f18f4b76728b',1,'AmcorProtocol::raw()'],['../unionArgoProtocol.html#a845151d1f5062ab0116f3a413e23da8f',1,'ArgoProtocol::raw()'],['../unionCarrierProtocol.html#a1a09f5c8340a2e7e074a332bf4906dfd',1,'CarrierProtocol::raw()'],['../unionCoolixProtocol.html#a41c5b4f502fedd08d691ee44b1767a11',1,'CoolixProtocol::raw()'],['../unionCoronaProtocol.html#a16cbcc7f8542e9367a815efa4491c71b',1,'CoronaProtocol::raw()'],['../unionDaikinESPProtocol.html#a2875b60fdac6547968cf71976a6f5101',1,'DaikinESPProtocol::raw()'],['../unionDaikin2Protocol.html#a66a685c572a98c1a4f5598c6e61082fa',1,'Daikin2Protocol::raw()'],['../unionDaikin216Protocol.html#adaca3670dfbb98c2fb08bb996d88ebfa',1,'Daikin216Protocol::raw()'],['../unionDaikin160Protocol.html#afde716be26af9cb415102171b68d63ee',1,'Daikin160Protocol::raw()'],['../unionDaikin176Protocol.html#aa037609a71d25ca0dd9be53e7e4bc138',1,'Daikin176Protocol::raw()'],['../unionDaikin128Protocol.html#a6c6ece8bed97c5eb4335d50229c8469f',1,'Daikin128Protocol::raw()'],['../unionDaikin152Protocol.html#a363f93d1bd9e1466222503a194449cab',1,'Daikin152Protocol::raw()'],['../unionDaikin64Protocol.html#aca4063a77b19390e61697478c2e6706d',1,'Daikin64Protocol::raw()'],['../unionDelonghiProtocol.html#a5e82aa5e22fdbdb64b5232766b9ac7c2',1,'DelonghiProtocol::raw()'],['../unionEcoclimProtocol.html#af4c52ba1cf4306ddf149d26fc93c14e2',1,'EcoclimProtocol::raw()'],['../unionElectraProtocol.html#aad34141d26a6673df8fcb2bbfe3b0439',1,'ElectraProtocol::raw()'],['../unionGoodweatherProtocol.html#aea5a3a02cea21af0f42b63b7145709c9',1,'GoodweatherProtocol::raw()'],['../unionHaierYRW02Protocol.html#aa1607ceff9c90cbb78e446a98eb0fe52',1,'HaierYRW02Protocol::raw()'],['../unionHitachiProtocol.html#ab39a02f7cdf88ea4cdcd71c2f4be409a',1,'HitachiProtocol::raw()'],['../unionHitachi424Protocol.html#a0d1b33b2122247103476e7d33a125672',1,'Hitachi424Protocol::raw()'],['../unionHitachi1Protocol.html#ad02b8338e2b099f371d3c7366087caf4',1,'Hitachi1Protocol::raw()'],['../unionKelvinatorProtocol.html#a9d16ef4663c237f8217a081f71e96e44',1,'KelvinatorProtocol::raw()'],['../unionLGProtocol.html#a3255b9b6a3069f7b749b98ed22bf5378',1,'LGProtocol::raw()'],['../unionMitsubishi144Protocol.html#aae639c8be3c729e29b68e29ed7141d45',1,'Mitsubishi144Protocol::raw()'],['../unionMitsubishi136Protocol.html#ace7d2ec3beca925e4e8ede3398d13684',1,'Mitsubishi136Protocol::raw()'],['../unionMitsubishi112Protocol.html#adf74af634ab8ebeb0fd06e37fe86c641',1,'Mitsubishi112Protocol::raw()'],['../unionMitsubishi152Protocol.html#af0b9754d5fe5437768100f2e50581929',1,'Mitsubishi152Protocol::raw()'],['../unionMitsubishi88Protocol.html#a9b54684f51573a21d26d816df376ac6e',1,'Mitsubishi88Protocol::raw()'],['../unionNeoclimaProtocol.html#aa7591e6333f5266d5f9592c4c623083e',1,'NeoclimaProtocol::raw()'],['../unionPanasonicAc32Protocol.html#a3e93ce14cef274f4ac003f8ba54cec5d',1,'PanasonicAc32Protocol::raw()'],['../unionSamsungProtocol.html#ac0883f3aa613c5ff7c234a2a16a2585f',1,'SamsungProtocol::raw()'],['../unionSanyoProtocol.html#a5213248c1834d15af3d3f1ba94d4481e',1,'SanyoProtocol::raw()'],['../unionSharpProtocol.html#a0013861cb2cd4bc466177ea07d4dfdb8',1,'SharpProtocol::raw()'],['../unionTcl112Protocol.html#a1d1a6ffcb7076b1d6c742de1178c2420',1,'Tcl112Protocol::raw()'],['../unionTechnibelProtocol.html#a56e1c8a038404cd900e438f3e0db8567',1,'TechnibelProtocol::raw()'],['../unionTecoProtocol.html#aaab0e91ca6ea4d346589d4b8db12b72c',1,'TecoProtocol::raw()'],['../unionToshibaProtocol.html#a2f5742d891e33106fd55acc4f2898012',1,'ToshibaProtocol::raw()'],['../unionTranscoldProtocol.html#a054af4c474a87583c1106a5f2a7e83e7',1,'TranscoldProtocol::raw()'],['../unionTrotecProtocol.html#aaf54633e6ddaf5dddf63adc904f117dd',1,'TrotecProtocol::raw()'],['../unionTrumaProtocol.html#aa4902b2b89193e0c317bbb46208a0730',1,'TrumaProtocol::raw()'],['../unionVoltasProtocol.html#aef55de7b215b4dd5d36d0bd7b542a85b',1,'VoltasProtocol::raw()'],['../unionWhirlpoolProtocol.html#a6b9f13431fc739a77cc719e69a0b0467',1,'WhirlpoolProtocol::raw()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadabdeded99fe7d3f2773014a9a2cfb73d7',1,'RAW(): IRremoteESP8266.h']]], - ['rawbuf_3159',['rawbuf',['../structirparams__t.html#a6f8a82b51fa206a8cb195e5838aa0cb3',1,'irparams_t::rawbuf()'],['../classdecode__results.html#a19043dc161cd5e0d3dcc82b5a7470e49',1,'decode_results::rawbuf()']]], - ['rawlen_3160',['rawlen',['../structirparams__t.html#a08e83386c65a90038e0d4922f1f6aa84',1,'irparams_t::rawlen()'],['../classdecode__results.html#a913e19fc5032fa1f97cf8afe0fa450ec',1,'decode_results::rawlen()']]], - ['rc5_3161',['RC5',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac3c0a3883a1488209bcd91730ece33b2',1,'IRremoteESP8266.h']]], - ['rc5x_3162',['RC5X',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8a3ac4419806a34ba566bfcbbb0e4f1d',1,'IRremoteESP8266.h']]], - ['rc6_3163',['RC6',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7f7247f15587eb3812846f424b941abe',1,'IRremoteESP8266.h']]], - ['rcmm_3164',['RCMM',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada79204b7ae26be334cebf3ea8268c34ab',1,'IRremoteESP8266.h']]], - ['rcvstate_3165',['rcvstate',['../structirparams__t.html#a63354788dab4569f4092cd05e77f0260',1,'irparams_t']]], - ['readme_2emd_3166',['README.md',['../README_8md.html',1,'']]], - ['recoversavedstate_3167',['recoverSavedState',['../classIRCoolixAC.html#a134cb36681c3fab53074b402bba0a45c',1,'IRCoolixAC']]], - ['recvpin_3168',['recvpin',['../structirparams__t.html#a50da5aa1c42a69b01d50ea688db67d14',1,'irparams_t']]], - ['remote_5fstate_3169',['remote_state',['../unionGreeProtocol.html#ae034ac3966312175d26fe1817108d7a4',1,'GreeProtocol::remote_state()'],['../unionHaierProtocol.html#af8966fa819bcb51f496ec185130bcf0f',1,'HaierProtocol::remote_state()'],['../classIRHitachiAc3.html#a5602ded229a41796c205519449f7d509',1,'IRHitachiAc3::remote_state()'],['../unionMideaProtocol.html#a8d696bb16d652ef6d582014049be2bbb',1,'MideaProtocol::remote_state()'],['../classIRPanasonicAc.html#a85d5118c0ed947cc77f2ed94b0d44e4a',1,'IRPanasonicAc::remote_state()']]], - ['repeat_3170',['repeat',['../classdecode__results.html#a09da48786fe3966cd5621840fd771bfa',1,'decode_results']]], - ['reset_3171',['reset',['../classIRtimer.html#aaaf886de2c9533a8c791242dc575db1a',1,'IRtimer::reset()'],['../classTimerMs.html#a25ab025793a4d432e7d4180cbd31157b',1,'TimerMs::reset()']]], - ['restlength_3172',['RestLength',['../unionFujitsuProtocol.html#aa402d7b8ee039662954138ec4863fbcb',1,'FujitsuProtocol']]], - ['resultactostring_3173',['resultAcToString',['../namespaceIRAcUtils.html#ac3d2683bc26edc2bf58916187b5349c3',1,'IRAcUtils']]], - ['resulttohexidecimal_3174',['resultToHexidecimal',['../IRutils_8cpp.html#a25a669d53f231de6152f8e60cedf39f7',1,'resultToHexidecimal(const decode_results *const result): IRutils.cpp'],['../IRutils_8h.html#a25a669d53f231de6152f8e60cedf39f7',1,'resultToHexidecimal(const decode_results *const result): IRutils.cpp']]], - ['resulttohumanreadablebasic_3175',['resultToHumanReadableBasic',['../IRutils_8cpp.html#a0cc6ae1b9649b1ea1d2bfe7e7b03b6d8',1,'resultToHumanReadableBasic(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#a0cc6ae1b9649b1ea1d2bfe7e7b03b6d8',1,'resultToHumanReadableBasic(const decode_results *const results): IRutils.cpp']]], - ['resulttorawarray_3176',['resultToRawArray',['../IRutils_8cpp.html#a7b3bbfa1f2bf2dea2fc40a2fefe05a2a',1,'resultToRawArray(const decode_results *const decode): IRutils.cpp'],['../IRutils_8h.html#a7b3bbfa1f2bf2dea2fc40a2fefe05a2a',1,'resultToRawArray(const decode_results *const decode): IRutils.cpp']]], - ['resulttosourcecode_3177',['resultToSourceCode',['../IRutils_8cpp.html#a10fc00c8b399dddb67a228325e6e2f79',1,'resultToSourceCode(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#a10fc00c8b399dddb67a228325e6e2f79',1,'resultToSourceCode(const decode_results *const results): IRutils.cpp']]], - ['resulttotiminginfo_3178',['resultToTimingInfo',['../IRutils_8cpp.html#afbfdef125ff077431f3abc27a1eeb800',1,'resultToTimingInfo(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#afbfdef125ff077431f3abc27a1eeb800',1,'resultToTimingInfo(const decode_results *const results): IRutils.cpp']]], - ['resume_3179',['resume',['../classIRrecv.html#a6b5beb7348d807d8d98ae929d005510e',1,'IRrecv']]], - ['reversebits_3180',['reverseBits',['../IRutils_8cpp.html#a366219b6f1c46f41c6573b3e5e875e41',1,'reverseBits(uint64_t input, uint16_t nbits): IRutils.cpp'],['../IRutils_8h.html#a366219b6f1c46f41c6573b3e5e875e41',1,'reverseBits(uint64_t input, uint16_t nbits): IRutils.cpp']]], - ['roomtemp_3181',['RoomTemp',['../unionArgoProtocol.html#a35f91863997bb886da9fc6a303e62c65',1,'ArgoProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.html deleted file mode 100644 index 2611a100d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.js deleted file mode 100644 index b70fe1d09..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_13.js +++ /dev/null @@ -1,306 +0,0 @@ -var searchData= -[ - ['samsung_3182',['samsung',['../classIRac.html#a619c659a11c258ea9623eaa37689ba4c',1,'IRac::samsung()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada2b451b6e7bebbf070d0913ec77d5d438',1,'SAMSUNG(): IRremoteESP8266.h']]], - ['samsung36_3183',['SAMSUNG36',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa0d1be0c368e3594bc546c241d031fd4',1,'IRremoteESP8266.h']]], - ['samsung_5fac_3184',['SAMSUNG_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada39f991023009d760432489e7ad7ad4df',1,'IRremoteESP8266.h']]], - ['samsungprotocol_3185',['SamsungProtocol',['../unionSamsungProtocol.html',1,'']]], - ['sanyo_3186',['sanyo',['../classIRac.html#a9b0e12748dc25a1d224993b2a013e822',1,'IRac::sanyo()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac1cf5078ebfd7ff83c70e8ec8522b288',1,'SANYO(): IRremoteESP8266.h']]], - ['sanyo_5fac_3187',['SANYO_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf85e76d33b94649a2ecc957acd214209',1,'IRremoteESP8266.h']]], - ['sanyo_5flc7461_3188',['SANYO_LC7461',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada558721044a11b1d4b491343f02267e1d',1,'IRremoteESP8266.h']]], - ['sanyoprotocol_3189',['SanyoProtocol',['../unionSanyoProtocol.html',1,'']]], - ['save_3190',['Save',['../unionTecoProtocol.html#ae724fb83aed6d33cc43ec4ded5307983',1,'TecoProtocol']]], - ['savedfan_3191',['savedFan',['../classIRCoolixAC.html#a5645cc98a1b1c509729544c09dc77fbf',1,'IRCoolixAC']]], - ['scrap_3192',['scrap',['../unionmagiquest.html#afd0bcf9a87f0fa2db87b68b211952a73',1,'magiquest']]], - ['sections_3193',['sections',['../unionCoronaProtocol.html#ae7cdfa7315fae2be9aa64f57b10b325a',1,'CoronaProtocol']]], - ['send_3194',['send',['../classIRAirwellAc.html#a503a7879c5739041bb97ad80128287ba',1,'IRAirwellAc::send()'],['../classIRAmcorAc.html#a4fa894c01a8baabfeadb39634a850fd9',1,'IRAmcorAc::send()'],['../classIRArgoAC.html#a0e4793a4f6fc537ec1450f5a42206dae',1,'IRArgoAC::send()'],['../classIRCarrierAc64.html#aace8aa2d125c6e80bcdd6d96eac722c2',1,'IRCarrierAc64::send()'],['../classIRCoolixAC.html#aaaa681d6cfcf04d110b913e8bb27a53c',1,'IRCoolixAC::send()'],['../classIRCoronaAc.html#aa0c8a1ef4473a3c7d02e1a04c7678fa6',1,'IRCoronaAc::send()'],['../classIRDaikinESP.html#a9f0d2641b54e97da943fceb0ba3f67eb',1,'IRDaikinESP::send()'],['../classIRDaikin2.html#aae2db88038d8d02617f16588e6a82b64',1,'IRDaikin2::send()'],['../classIRDaikin216.html#ab1061620f838cf7774c16c593b4ada8c',1,'IRDaikin216::send()'],['../classIRDaikin160.html#a0e1c74070c03be02e40fdd05ed56465c',1,'IRDaikin160::send()'],['../classIRDaikin176.html#affd71592fa8ed05816d94edbf94d2c0a',1,'IRDaikin176::send()'],['../classIRDaikin128.html#aae7fec91ad2265e8b0378c6b99379e89',1,'IRDaikin128::send()'],['../classIRDaikin152.html#a205de6821effc077f51d941d369791e4',1,'IRDaikin152::send()'],['../classIRDaikin64.html#a904eec38045d9ddc8a97ab33c8a2ac4d',1,'IRDaikin64::send()'],['../classIRDelonghiAc.html#afba831b6884771b84bab684732e0f4f5',1,'IRDelonghiAc::send()'],['../classIREcoclimAc.html#a8f254f318d13695ce9e4096ed5693769',1,'IREcoclimAc::send()'],['../classIRElectraAc.html#a30170a65de1161e26daeddf694f8afdb',1,'IRElectraAc::send()'],['../classIRFujitsuAC.html#a1f1aa593cc4503d14c0fbea5cd9823a1',1,'IRFujitsuAC::send()'],['../classIRGoodweatherAc.html#abcc3c9d9b0912b09d3c0b0c1affb8cc8',1,'IRGoodweatherAc::send()'],['../classIRGreeAC.html#a9823578040c2d15e2b3e8e3a17a9e220',1,'IRGreeAC::send()'],['../classIRHaierAC.html#a9fe53d04965efca6daf234f20d20eb5a',1,'IRHaierAC::send()'],['../classIRHaierACYRW02.html#a65a5d5840dddac505b009e899a0dada7',1,'IRHaierACYRW02::send()'],['../classIRHitachiAc.html#afc53e562370bbaba8b5dda26a62de427',1,'IRHitachiAc::send()'],['../classIRHitachiAc1.html#aafad51c226066b8697cf00661ef38d99',1,'IRHitachiAc1::send()'],['../classIRHitachiAc424.html#adf15121bb329e1bb061f9e5efb848764',1,'IRHitachiAc424::send()'],['../classIRHitachiAc3.html#ab95fd527a4841c44d6e91c8b4afee8b4',1,'IRHitachiAc3::send()'],['../classIRHitachiAc344.html#ab11947f9c2a7272d35d75ce3ddbe6581',1,'IRHitachiAc344::send()'],['../classIRKelvinatorAC.html#aa55fbfefbaca1acf5bc9ba796bea8464',1,'IRKelvinatorAC::send()'],['../classIRLgAc.html#aea85c840161b48f2e8d31e7e6e7da532',1,'IRLgAc::send()'],['../classIRMideaAC.html#af66b9f76ad794450a0a7eace4bb59300',1,'IRMideaAC::send()'],['../classIRMitsubishiAC.html#a2467ad33d88af8f6244e7cd0620e012e',1,'IRMitsubishiAC::send()'],['../classIRMitsubishi136.html#a41295e551acf428e76b9b404af2381ad',1,'IRMitsubishi136::send()'],['../classIRMitsubishi112.html#a8f813da813b1a281654147ada2e63eba',1,'IRMitsubishi112::send()'],['../classIRMitsubishiHeavy152Ac.html#acc53c5c136c6987c420d48bddcf9b2da',1,'IRMitsubishiHeavy152Ac::send()'],['../classIRMitsubishiHeavy88Ac.html#a707cb3ec3e3c18bedeb12205580d5048',1,'IRMitsubishiHeavy88Ac::send()'],['../classIRNeoclimaAc.html#a2220bbb1d928b8f6490cd43b702ef430',1,'IRNeoclimaAc::send()'],['../classIRPanasonicAc.html#a778420ebe52aa6422ba5633ce91676df',1,'IRPanasonicAc::send()'],['../classIRPanasonicAc32.html#aae5867f05744ebcac4720b31b6fc9021',1,'IRPanasonicAc32::send()'],['../classIRSamsungAc.html#a8128429fcb1828a049784d832cafc9fe',1,'IRSamsungAc::send()'],['../classIRSanyoAc.html#aa8be9e2e0c63646ce39425c9e58e4ca1',1,'IRSanyoAc::send()'],['../classIRSharpAc.html#a829872744bf9fef51dccd89584ddffe6',1,'IRSharpAc::send()'],['../classIRTcl112Ac.html#a9aa8c67e167a3d241157306d0668ff15',1,'IRTcl112Ac::send()'],['../classIRTechnibelAc.html#ad3a94fdd7b718d8d4ba3ffdb84cf0ebb',1,'IRTechnibelAc::send()'],['../classIRTecoAc.html#ad5785e93e8c0c95a8618b0e371adaa79',1,'IRTecoAc::send()'],['../classIRToshibaAC.html#a14b155d3a20fb9c127eb7f3fe1fd16cd',1,'IRToshibaAC::send()'],['../classIRTranscoldAc.html#ad9807a5c56b9797e4d9ef2fe4b95d3bf',1,'IRTranscoldAc::send()'],['../classIRTrotecESP.html#add228d50195d7b9b43346a90bf959512',1,'IRTrotecESP::send()'],['../classIRTrumaAc.html#ac429be41669c7ea395a4f57b99f90642',1,'IRTrumaAc::send()'],['../classIRVestelAc.html#a606497754b381e70d13ddef5643c9d0b',1,'IRVestelAc::send()'],['../classIRVoltas.html#ab06af0578b5137c53af6e641bfcbee9a',1,'IRVoltas::send()'],['../classIRWhirlpoolAc.html#a0c043b3d7cc993940941351e6c63b5cc',1,'IRWhirlpoolAc::send()'],['../classIRsend.html#a204eedc3ad182fb2f40c42ef58f78cfc',1,'IRsend::send(const decode_type_t type, const uint64_t data, const uint16_t nbits, const uint16_t repeat=kNoRepeat)'],['../classIRsend.html#ac684c209ea8722f0a377070752df0040',1,'IRsend::send(const decode_type_t type, const uint8_t *state, const uint16_t nbytes)']]], - ['sendac_3195',['sendAc',['../classIRac.html#a0cea80b7bab92c9dc4f18c61f5762130',1,'IRac::sendAc(void)'],['../classIRac.html#aa33c42968acafc5cf479574483f94ea9',1,'IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)'],['../classIRac.html#ad60fbe1488efe2d02307d81b090b3b72',1,'IRac::sendAc(const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)']]], - ['sendairwell_3196',['sendAirwell',['../classIRsend.html#a5b180d3845b45af38a19b72e6fa8e0c0',1,'IRsend']]], - ['sendaiwarct501_3197',['sendAiwaRCT501',['../classIRsend.html#ad39a4b13ad2e8500c95db49265e7c771',1,'IRsend']]], - ['sendamcor_3198',['sendAmcor',['../classIRsend.html#acd64b100eb155f90451d467188a83e92',1,'IRsend']]], - ['sendargo_3199',['sendArgo',['../classIRsend.html#a59668b767e4ad4966fe0bc259c3bd34f',1,'IRsend']]], - ['sendcarrierac_3200',['sendCarrierAC',['../classIRsend.html#a9e859a8b5eaea2e64978c8f93b78d159',1,'IRsend']]], - ['sendcarrierac40_3201',['sendCarrierAC40',['../classIRsend.html#a4342b775777d2ff9371f48aa39ad9b69',1,'IRsend']]], - ['sendcarrierac64_3202',['sendCarrierAC64',['../classIRsend.html#abf755688d87fcef5aee86c6a2c89e7c4',1,'IRsend']]], - ['sendcoolix_3203',['sendCOOLIX',['../classIRsend.html#a088af5f0d76965c61fe5716f7b8f2b61',1,'IRsend']]], - ['sendcoronaac_3204',['sendCoronaAc',['../classIRsend.html#a81f82b8248b324799a48a7685d62aaa5',1,'IRsend']]], - ['senddaikin_3205',['sendDaikin',['../classIRsend.html#a3010546144b5ca3b3c94f5881050dbd0',1,'IRsend']]], - ['senddaikin128_3206',['sendDaikin128',['../classIRsend.html#a72a41a704d48750c144c6467ae9a1430',1,'IRsend']]], - ['senddaikin152_3207',['sendDaikin152',['../classIRsend.html#a4ad420eb86e0ae38b12e983f7eaa912c',1,'IRsend']]], - ['senddaikin160_3208',['sendDaikin160',['../classIRsend.html#ab144a86def38f9f5c98701742683c004',1,'IRsend']]], - ['senddaikin176_3209',['sendDaikin176',['../classIRsend.html#ac4b5bcb95d3aff70b2f84074177e9e92',1,'IRsend']]], - ['senddaikin2_3210',['sendDaikin2',['../classIRsend.html#a34262e579cbb6634459bc09c5b15dfa0',1,'IRsend']]], - ['senddaikin216_3211',['sendDaikin216',['../classIRsend.html#aa99bfdaa71ff5bf088faaa17d304f45d',1,'IRsend']]], - ['senddaikin64_3212',['sendDaikin64',['../classIRsend.html#aa403d2192a6eb57910e6f84695475b27',1,'IRsend']]], - ['senddata_3213',['sendData',['../classIRsend.html#a4f8cd77dab7ce6c406029fe87674858f',1,'IRsend']]], - ['senddelonghiac_3214',['sendDelonghiAc',['../classIRsend.html#a35dc18f9abbffa8da40816a8a9df1093',1,'IRsend']]], - ['senddenon_3215',['sendDenon',['../classIRsend.html#a2618e000bf91cf1585329308a078653a',1,'IRsend']]], - ['senddish_3216',['sendDISH',['../classIRsend.html#ac7a72d61af219d983409911bdc1769b8',1,'IRsend']]], - ['senddoshisha_3217',['sendDoshisha',['../classIRsend.html#a3a9a8247e470975137b37f474bb97639',1,'IRsend']]], - ['sendecoclim_3218',['sendEcoclim',['../classIRsend.html#a63f0d3f7ed8433c7dd18114d50e5d076',1,'IRsend']]], - ['sendelectraac_3219',['sendElectraAC',['../classIRsend.html#a52526c4e7bc4402e57ecf81e0047d49c',1,'IRsend']]], - ['sendelitescreens_3220',['sendElitescreens',['../classIRsend.html#a37c6fac0e447fd9e4d3dc3ca23f8936f',1,'IRsend']]], - ['sendepson_3221',['sendEpson',['../classIRsend.html#a063168fd82f6a88cca7253b42b9c0b28',1,'IRsend']]], - ['sendextended_3222',['sendExtended',['../classIRSamsungAc.html#a16a8dbd8f3fd34a6e681125b276acfd9',1,'IRSamsungAc']]], - ['sendfujitsuac_3223',['sendFujitsuAC',['../classIRsend.html#a1a3d3f83d0b7a59ff5510b038f658eb6',1,'IRsend']]], - ['sendgc_3224',['sendGC',['../classIRsend.html#acf987a501326d9c945cd8dbeb0806e17',1,'IRsend']]], - ['sendgeneric_3225',['sendGeneric',['../classIRsend.html#a5215fd797dfd490816f31bb99b38c273',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)'],['../classIRsend.html#aaace48306af9c020c18848db1a05e641',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint32_t mesgtime, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)'],['../classIRsend.html#a4f5ad649827692b4b42d15b45c7f684b',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint8_t *dataptr, const uint16_t nbytes, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)']]], - ['sendgicable_3226',['sendGICable',['../classIRsend.html#a61dd16bc150473bbfd998dada72b205f',1,'IRsend']]], - ['sendgoodweather_3227',['sendGoodweather',['../classIRsend.html#a8e2d98ae5c39ee07a61f08facecbaa1e',1,'IRsend']]], - ['sendgree_3228',['sendGree',['../classIRsend.html#aca81ea348ceb6b0c9e62073b57bc0b17',1,'IRsend::sendGree(const uint64_t data, const uint16_t nbits=kGreeBits, const uint16_t repeat=kGreeDefaultRepeat)'],['../classIRsend.html#af788e7d9a2ad2483313434f9b5196753',1,'IRsend::sendGree(const uint8_t data[], const uint16_t nbytes=kGreeStateLength, const uint16_t repeat=kGreeDefaultRepeat)']]], - ['sendhaierac_3229',['sendHaierAC',['../classIRsend.html#a6b4b9144d56dda302f5b321f1c5017ff',1,'IRsend']]], - ['sendhaieracyrw02_3230',['sendHaierACYRW02',['../classIRsend.html#a6aa1c1a6880872c87a46e4e0ead5d9b0',1,'IRsend']]], - ['sendhitachiac_3231',['sendHitachiAC',['../classIRsend.html#a8e6079b8b1b69ad7d7f8d05c492becbe',1,'IRsend']]], - ['sendhitachiac1_3232',['sendHitachiAC1',['../classIRsend.html#a5be9a87ce052e4f056766919247e0b22',1,'IRsend']]], - ['sendhitachiac2_3233',['sendHitachiAC2',['../classIRsend.html#a451b1913608a4ba8c26d9af8c85d16f1',1,'IRsend']]], - ['sendhitachiac3_3234',['sendHitachiAc3',['../classIRsend.html#aec7e67f4292622521b5a0a8cfdd21d84',1,'IRsend']]], - ['sendhitachiac344_3235',['sendHitachiAc344',['../classIRsend.html#a5fb28d54f2832651d992450673d05c01',1,'IRsend']]], - ['sendhitachiac424_3236',['sendHitachiAc424',['../classIRsend.html#a2a9676de30bb868b313cc9c30025f790',1,'IRsend']]], - ['sendinax_3237',['sendInax',['../classIRsend.html#a5fa5ff62276d9d680fb1255cc8b99eec',1,'IRsend']]], - ['sendjvc_3238',['sendJVC',['../classIRsend.html#aaa10c899768a5b4cdb1a7913d06141ca',1,'IRsend']]], - ['sendkelvinator_3239',['sendKelvinator',['../classIRsend.html#a8cba9df982fc91f895196d61d2e65b0e',1,'IRsend']]], - ['sendlasertag_3240',['sendLasertag',['../classIRsend.html#a55a79f9727590044751f291a4df83892',1,'IRsend']]], - ['sendlegopf_3241',['sendLegoPf',['../classIRsend.html#a4e38273aeacf01873a013c02d41a44e4',1,'IRsend']]], - ['sendlg_3242',['sendLG',['../classIRsend.html#a079a84c82f360d6d55fde5c27634f51c',1,'IRsend']]], - ['sendlg2_3243',['sendLG2',['../classIRsend.html#a5b6be1ceac8a4bc4ef55dc12eb060531',1,'IRsend']]], - ['sendlutron_3244',['sendLutron',['../classIRsend.html#a85f2a98255d3af7b7407c082ea7b7c16',1,'IRsend']]], - ['sendmagiquest_3245',['sendMagiQuest',['../classIRsend.html#af1d0e9ec0f735fc5fb9011d4f4cb8327',1,'IRsend']]], - ['sendmanchester_3246',['sendManchester',['../classIRsend.html#a7862231cbb1d50f42996c25e2f05b93e',1,'IRsend']]], - ['sendmanchesterdata_3247',['sendManchesterData',['../classIRsend.html#aa76aa33785827c1278eb57d1c15236f8',1,'IRsend']]], - ['sendmetz_3248',['sendMetz',['../classIRsend.html#ab98023283eca787f7bb8bcb47f79ed01',1,'IRsend']]], - ['sendmidea_3249',['sendMidea',['../classIRsend.html#a37d91b3a77b36509abdc53e2fec20a67',1,'IRsend']]], - ['sendmidea24_3250',['sendMidea24',['../classIRsend.html#a103d79e8df7954e9ab6284fa9f3daf02',1,'IRsend']]], - ['sendmilestag2_3251',['sendMilestag2',['../classIRsend.html#a1a506824c7668e58f35351ad400051b1',1,'IRsend']]], - ['sendmirage_3252',['sendMirage',['../classIRsend.html#a03427bab21dd5a04121c652103c2ef97',1,'IRsend']]], - ['sendmitsubishi_3253',['sendMitsubishi',['../classIRsend.html#a59e8941a25c5c0bbc839fba5b1a22813',1,'IRsend']]], - ['sendmitsubishi112_3254',['sendMitsubishi112',['../classIRsend.html#a0a55e688c6aad015494168f25eb337b5',1,'IRsend']]], - ['sendmitsubishi136_3255',['sendMitsubishi136',['../classIRsend.html#a988a8b7dda3563977d537d6ac448ebc8',1,'IRsend']]], - ['sendmitsubishi2_3256',['sendMitsubishi2',['../classIRsend.html#ac54e50a6819f5c39e060891f1f6ea0f2',1,'IRsend']]], - ['sendmitsubishiac_3257',['sendMitsubishiAC',['../classIRsend.html#a3600527a82f9f22387c9f16ae51fb06f',1,'IRsend']]], - ['sendmitsubishiheavy152_3258',['sendMitsubishiHeavy152',['../classIRsend.html#ae1cffc4882c63f192c231397d19a4032',1,'IRsend']]], - ['sendmitsubishiheavy88_3259',['sendMitsubishiHeavy88',['../classIRsend.html#afaf4fd0c3dabd1bd6f8fe421294c5063',1,'IRsend']]], - ['sendmultibrackets_3260',['sendMultibrackets',['../classIRsend.html#a9026d42480b85270e560e122b8be3b6c',1,'IRsend']]], - ['sendmwm_3261',['sendMWM',['../classIRsend.html#a98301801daf929ec8ce022987ae394f2',1,'IRsend']]], - ['sendnec_3262',['sendNEC',['../classIRsend.html#a324c9e455c0bae51ebe9bc07e915c043',1,'IRsend']]], - ['sendneoclima_3263',['sendNeoclima',['../classIRsend.html#a71e1b5e780851210465bbf061b9c095b',1,'IRsend']]], - ['sendnikai_3264',['sendNikai',['../classIRsend.html#a693e6616b81509cf27d1345c140acc96',1,'IRsend']]], - ['sendoff_3265',['sendOff',['../classIRSamsungAc.html#a96e2ae87f3ffcf1ad812f256f31e4898',1,'IRSamsungAc']]], - ['sendon_3266',['sendOn',['../classIRSamsungAc.html#a7e6980c829dfd143d4d19abaf5d65678',1,'IRSamsungAc']]], - ['sendpanasonic_3267',['sendPanasonic',['../classIRsend.html#a92192475f89b19cfdf7fd0416a263145',1,'IRsend']]], - ['sendpanasonic64_3268',['sendPanasonic64',['../classIRsend.html#adc4fd287f3546f7ff0b67e177a42b560',1,'IRsend']]], - ['sendpanasonicac_3269',['sendPanasonicAC',['../classIRsend.html#a10a3c387a328dbb11733a251f4db7614',1,'IRsend']]], - ['sendpanasonicac32_3270',['sendPanasonicAC32',['../classIRsend.html#af281c7e8e09bb547bf7236dfd8b42154',1,'IRsend']]], - ['sendpioneer_3271',['sendPioneer',['../classIRsend.html#a11f099f3768a659d1f996589cea8a313',1,'IRsend']]], - ['sendpronto_3272',['sendPronto',['../classIRsend.html#a0b349351e2ba19f87e6b01cde7e67c49',1,'IRsend']]], - ['sendraw_3273',['sendRaw',['../classIRsend.html#a2b9b84f828918f933bd1764d113b53f8',1,'IRsend']]], - ['sendrc5_3274',['sendRC5',['../classIRsend.html#a2bd2ccb27ecd57e14b36f76d82af308a',1,'IRsend']]], - ['sendrc6_3275',['sendRC6',['../classIRsend.html#a2192a95e0d162f9b1775fc2a47f65c37',1,'IRsend']]], - ['sendrcmm_3276',['sendRCMM',['../classIRsend.html#a3cafe475a58234a0d3aa655a2464be75',1,'IRsend']]], - ['sendsamsung_3277',['sendSAMSUNG',['../classIRsend.html#a5252dd159aad713c099de6728ac56d81',1,'IRsend']]], - ['sendsamsung36_3278',['sendSamsung36',['../classIRsend.html#ab5dcd4ec5ddb0b0351870ddf54e5ba66',1,'IRsend']]], - ['sendsamsungac_3279',['sendSamsungAC',['../classIRsend.html#a2773d251da1d35b964810c8cc4cb438b',1,'IRsend']]], - ['sendsanyoac_3280',['sendSanyoAc',['../classIRsend.html#ab606c11f7bdc726289ba4dadf8bd9da6',1,'IRsend']]], - ['sendsanyolc7461_3281',['sendSanyoLC7461',['../classIRsend.html#aa23e51a97a0ec1907d22623fed6dd223',1,'IRsend']]], - ['sendsharp_3282',['sendSharp',['../classIRsend.html#a801ae78ac5a72116c566c4ac5f99c6bd',1,'IRsend']]], - ['sendsharpac_3283',['sendSharpAc',['../classIRsend.html#a438e4c9d50e62da7d772d8d638728213',1,'IRsend']]], - ['sendsharpraw_3284',['sendSharpRaw',['../classIRsend.html#aa1f12fd537ca8c21c183ee41d17a3afc',1,'IRsend']]], - ['sendsherwood_3285',['sendSherwood',['../classIRsend.html#afb3a89acfb868c92a997a3000e70c6e8',1,'IRsend']]], - ['sendsony_3286',['sendSony',['../classIRsend.html#a02bb64503474a0841c51664cf4668d85',1,'IRsend']]], - ['sendsony38_3287',['sendSony38',['../classIRsend.html#a558442f49b32453f0fb987c29e1ec6d3',1,'IRsend']]], - ['sendsymphony_3288',['sendSymphony',['../classIRsend.html#a1f1d5a30660ab0061f64d559d4916d4e',1,'IRsend']]], - ['sendtcl112ac_3289',['sendTcl112Ac',['../classIRsend.html#a2dedce2841e4a6445a98f03393fce823',1,'IRsend']]], - ['sendtechnibelac_3290',['sendTechnibelAc',['../classIRsend.html#afcc65332acb4b5a1edc623194cc2ac7e',1,'IRsend']]], - ['sendteco_3291',['sendTeco',['../classIRsend.html#ac6300f977fe94119813481ba682ce33f',1,'IRsend']]], - ['sendtoshibaac_3292',['sendToshibaAC',['../classIRsend.html#a5554dd976b56148e214dca9891d2810c',1,'IRsend']]], - ['sendtranscold_3293',['sendTranscold',['../classIRsend.html#aba4e3420174de6b5538ae91f20d19e21',1,'IRsend']]], - ['sendtrotec_3294',['sendTrotec',['../classIRsend.html#a135796327b5db127473f4d198e663c00',1,'IRsend']]], - ['sendtruma_3295',['sendTruma',['../classIRsend.html#addb8dc185e7d96d3186dad362a6e1445',1,'IRsend']]], - ['sendvestelac_3296',['sendVestelAc',['../classIRsend.html#a129a40f9d344cb0fadfd4cca53ca6b44',1,'IRsend']]], - ['sendvoltas_3297',['sendVoltas',['../classIRsend.html#a3bda5e5e44d2c0e811e9fe3d42b241bf',1,'IRsend']]], - ['sendwhirlpoolac_3298',['sendWhirlpoolAC',['../classIRsend.html#aa440a50000a259072f93ad6c0e42ec22',1,'IRsend']]], - ['sendwhynter_3299',['sendWhynter',['../classIRsend.html#a07188366deed3dd902cba80a711cf220',1,'IRsend']]], - ['sendxmp_3300',['sendXmp',['../classIRsend.html#a79e650dedb19f37601600c8cb16e4c8e',1,'IRsend']]], - ['sendzepeal_3301',['sendZepeal',['../classIRsend.html#a9bcba8bbac41d679b5b930e67d3e1b7f',1,'IRsend']]], - ['sensor_3302',['Sensor',['../unionDaikinESPProtocol.html#a9cdca7efde034c19bc1bd3da5c204ec9',1,'DaikinESPProtocol::Sensor()'],['../unionDaikin152Protocol.html#a4bbb04adc012732ba03820a2f8632a2a',1,'Daikin152Protocol::Sensor()'],['../unionSanyoProtocol.html#ad71145ae23e81d6a934149402788d6c8',1,'SanyoProtocol::Sensor()']]], - ['sensortemp_3303',['SensorTemp',['../unionCoolixProtocol.html#a3213a8e821e4f8dc89240b1aa429ab9d',1,'CoolixProtocol::SensorTemp()'],['../unionEcoclimProtocol.html#a35648af709ab62a606481bd73cc72e14',1,'EcoclimProtocol::SensorTemp()'],['../unionMideaProtocol.html#a2ce21157e61749f4d1c3b14fd0b6cfe8',1,'MideaProtocol::SensorTemp()'],['../unionSanyoProtocol.html#a2221111b02f522b4e482b21edfd3dd39',1,'SanyoProtocol::SensorTemp()']]], - ['serialprintuint64_3304',['serialPrintUint64',['../IRutils_8cpp.html#ad2b0a4b9a1a7fca3d5f5afc14b682433',1,'serialPrintUint64(uint64_t input, uint8_t base): IRutils.cpp'],['../IRutils_8h.html#a315d5f05fb572564025bc9ce9b820243',1,'serialPrintUint64(uint64_t input, uint8_t base=10): IRutils.cpp']]], - ['set10cheat_3305',['set10CHeat',['../classIRFujitsuAC.html#a0352fca45ddb7b05277cd3fd66b5a6ca',1,'IRFujitsuAC']]], - ['set3d_3306',['set3D',['../classIRMitsubishiHeavy152Ac.html#ab22654d492a4b0e82efcd0c96fc9bbe3',1,'IRMitsubishiHeavy152Ac::set3D()'],['../classIRMitsubishiHeavy88Ac.html#ae0b7eac743a8de6852722f067e010ba7',1,'IRMitsubishiHeavy88Ac::set3D()']]], - ['set8cheat_3307',['set8CHeat',['../classIRNeoclimaAc.html#a3176c5fe3251bd6a31a3a0ddc2c294be',1,'IRNeoclimaAc']]], - ['setauto_3308',['setAuto',['../classIRVestelAc.html#a2509eed2e0d7b23595bbe6dd7df17d74',1,'IRVestelAc']]], - ['setbeep_3309',['setBeep',['../classIRDaikin2.html#a4c0588887a45403a0a9f2cf95f847889',1,'IRDaikin2::setBeep()'],['../classIRSamsungAc.html#a092ccbea031dd4be747076530117649d',1,'IRSamsungAc::setBeep()'],['../classIRSanyoAc.html#a420e2cc1f1d2590e7582f3f3a3b5c536',1,'IRSanyoAc::setBeep()']]], - ['setbit_3310',['setBit',['../namespaceirutils.html#a316301577d2ff338bfba6605df2cc46b',1,'irutils::setBit(const uint64_t data, const uint8_t position, const bool on, const uint8_t size)'],['../namespaceirutils.html#a2e9e858b490fa3328b4c5bd01adedb8c',1,'irutils::setBit(const uint8_t data, const uint8_t position, const bool on)'],['../namespaceirutils.html#ac1b3de6e733d9c4d614a8239f5bd3220',1,'irutils::setBit(uint8_t *const data, const uint8_t position, const bool on)'],['../namespaceirutils.html#a86bbcf05c1601712b1d587b87035f09b',1,'irutils::setBit(uint32_t *const data, const uint8_t position, const bool on)'],['../namespaceirutils.html#a9e7814e2274f02df0dac0106c293c487',1,'irutils::setBit(uint64_t *const data, const uint8_t position, const bool on)']]], - ['setbits_3311',['setBits',['../namespaceirutils.html#ab4f5e3eb26e111909ddc93a8b018ba78',1,'irutils::setBits(uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)'],['../namespaceirutils.html#a3fd8b18a76f0ae8f730b4de55fc9486e',1,'irutils::setBits(uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)'],['../namespaceirutils.html#a4dfb0984a9ea38602805987a7845839c',1,'irutils::setBits(uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)']]], - ['setboost_3312',['setBoost',['../classIRDelonghiAc.html#a827d1e43e9252657147226aa3f8e4eb8',1,'IRDelonghiAc']]], - ['setbreeze_3313',['setBreeze',['../classIRSamsungAc.html#a310a73f15a0274fbaf15b981abaae592',1,'IRSamsungAc']]], - ['setbutton_3314',['setButton',['../classIRHaierACYRW02.html#aa0f1561e2446f6231f722581f5bae34d',1,'IRHaierACYRW02::setButton()'],['../classIRHitachiAc424.html#af4ded7ea8aa94271d5135eebd3bb80a8',1,'IRHitachiAc424::setButton()'],['../classIRNeoclimaAc.html#a7e2e6e646411b4f5ea3c1ce1e944581c',1,'IRNeoclimaAc::setButton()']]], - ['setcelsius_3315',['setCelsius',['../classIRFujitsuAC.html#a29050c9b6174ac038d85ef8983fe8940',1,'IRFujitsuAC']]], - ['setclean_3316',['setClean',['../classIRCoolixAC.html#a4ca2c23f44ae56d80dcb7a7424ec17b3',1,'IRCoolixAC::setClean()'],['../classIRDaikin2.html#a21e09b867710a225d5cf53006f723326',1,'IRDaikin2::setClean()'],['../classIRElectraAc.html#a4aa44fc40196067469dfa8a722e33115',1,'IRElectraAc::setClean()'],['../classIRFujitsuAC.html#a7f6f18ea39bf28717cb65ff348b1b2f5',1,'IRFujitsuAC::setClean()'],['../classIRMitsubishiHeavy152Ac.html#a11678e7eb906414770938f6efce266f1',1,'IRMitsubishiHeavy152Ac::setClean()'],['../classIRMitsubishiHeavy88Ac.html#a65968304e4aaf025dfefc49d5d777cbd',1,'IRMitsubishiHeavy88Ac::setClean()'],['../classIRSamsungAc.html#a911ca57dfb0e6787cba330e8d49b2496',1,'IRSamsungAc::setClean()'],['../classIRSharpAc.html#ace6e7b98496a594031809fe8a535c429',1,'IRSharpAc::setClean()']]], - ['setclock_3317',['setClock',['../classIRDaikin128.html#aa9928ac010ec79ddab4f551eedf2f5d9',1,'IRDaikin128::setClock()'],['../classIRDaikin64.html#a655f1cec5e28f79e5718573678c535ec',1,'IRDaikin64::setClock()'],['../classIREcoclimAc.html#af81295d2878131c0302902b9a1f80db2',1,'IREcoclimAc::setClock()'],['../classIRMitsubishiAC.html#a7abe34adf36bdd1a65a17f56ee8af1f6',1,'IRMitsubishiAC::setClock()'],['../classIRPanasonicAc.html#a3f76c6aca94f52c227c2e259512fd101',1,'IRPanasonicAc::setClock()'],['../classIRWhirlpoolAc.html#aab09aae7de733414bf480c3df22b83f8',1,'IRWhirlpoolAc::setClock()']]], - ['setcmd_3318',['setCmd',['../classIRFujitsuAC.html#a7579944c11b3d31bb069303926307617',1,'IRFujitsuAC']]], - ['setcomfort_3319',['setComfort',['../classIRDaikinESP.html#aaa15c0be7ffb8e845a03d193583a58d1',1,'IRDaikinESP::setComfort()'],['../classIRDaikin152.html#a95de2dc0a90fe4212cb60973b9430486',1,'IRDaikin152::setComfort()']]], - ['setcommand_3320',['setCommand',['../classIRGoodweatherAc.html#a4e266f42b7a82c49208e2acc7813e07b',1,'IRGoodweatherAc::setCommand()'],['../classIRHaierAC.html#ade34c951e72a794c2ff7fa0d1595d68f',1,'IRHaierAC::setCommand()'],['../classIRWhirlpoolAc.html#aaea26b1388489dff70a98fde1e6185be',1,'IRWhirlpoolAc::setCommand()']]], - ['setcurrentday_3321',['setCurrentDay',['../classIRDaikinESP.html#a5465b9857fd73b82362f766368717d16',1,'IRDaikinESP']]], - ['setcurrenttime_3322',['setCurrentTime',['../classIRDaikinESP.html#ae6559268982ae0968358a885c7dbba6e',1,'IRDaikinESP::setCurrentTime()'],['../classIRDaikin2.html#a8b32b1b9a87c9b671af6aeedb709d520',1,'IRDaikin2::setCurrentTime()']]], - ['setcurrtime_3323',['setCurrTime',['../classIRHaierAC.html#a53500ebdec058d27396e5906a572fe15',1,'IRHaierAC']]], - ['setdisplay_3324',['setDisplay',['../classIRSamsungAc.html#ad20199bed3a01208ec694b9d4eb7ef98',1,'IRSamsungAc']]], - ['setdisplaytempsource_3325',['setDisplayTempSource',['../classIRGreeAC.html#a1d073c31ea169d0e5cf33c8592982035',1,'IRGreeAC']]], - ['setecono_3326',['setEcono',['../classIRCoronaAc.html#abb5624317fff60674bed410be3a3fa52',1,'IRCoronaAc::setEcono()'],['../classIRDaikinESP.html#a12129aedd6320522a9b6e811e347089c',1,'IRDaikinESP::setEcono()'],['../classIRDaikin2.html#a42a44a6cefa6bf6f45148d39c216ebc0',1,'IRDaikin2::setEcono()'],['../classIRDaikin128.html#a07fb5289ee476e0335fec4845254b7ce',1,'IRDaikin128::setEcono()'],['../classIRDaikin152.html#a8062d16f7aefb7586e3d3bdfea8755b4',1,'IRDaikin152::setEcono()'],['../classIRMitsubishiHeavy152Ac.html#ab3964219ee3c0c5112bb38c892a01784',1,'IRMitsubishiHeavy152Ac::setEcono()'],['../classIRMitsubishiHeavy88Ac.html#a7612448f1cceaa6aeee1697f51adaf43',1,'IRMitsubishiHeavy88Ac::setEcono()'],['../classIRNeoclimaAc.html#af6748510814a39756263916913890844',1,'IRNeoclimaAc::setEcono()'],['../classIRTcl112Ac.html#a48ac7acfa8fed8e9da39907282f4f377',1,'IRTcl112Ac::setEcono()'],['../classIRToshibaAC.html#a780040755a8061107f655e060f2da206',1,'IRToshibaAC::setEcono()'],['../classIRVoltas.html#a0e9ebffcb4a62afc68722e8abf9f9adb',1,'IRVoltas::setEcono()']]], - ['seteconotoggle_3327',['setEconoToggle',['../classIRMideaAC.html#aef83db5c3d13273541039d9e03e3230e',1,'IRMideaAC::setEconoToggle()'],['../classIRSharpAc.html#ae3495676b8bffecba5c56fbf1ab9ee4d',1,'IRSharpAc::setEconoToggle()']]], - ['setenablesensortemp_3328',['setEnableSensorTemp',['../classIRMideaAC.html#a89eede8ecf61bc05a7c53e49706361a2',1,'IRMideaAC']]], - ['seteye_3329',['setEye',['../classIRDaikin2.html#a5ba8e5d5dd4aba45a90de1d450a7a88b',1,'IRDaikin2::setEye()'],['../classIRNeoclimaAc.html#aaf433cab785db382c55a420e68e7d7ec',1,'IRNeoclimaAc::setEye()']]], - ['seteyeauto_3330',['setEyeAuto',['../classIRDaikin2.html#a975c2fdb261d6d2b6c8e196fbd074899',1,'IRDaikin2']]], - ['setfan_3331',['setFan',['../classIRAirwellAc.html#a3b3acc1670d7057e7c36fc2bd0a71232',1,'IRAirwellAc::setFan()'],['../classIRAmcorAc.html#acf26fc65363e2734e4dc6eb562812553',1,'IRAmcorAc::setFan()'],['../classIRArgoAC.html#a8144f003628e128ec6630aef49ed5cb5',1,'IRArgoAC::setFan()'],['../classIRCarrierAc64.html#a312027468b508e9d38dd9e23ee99f9e4',1,'IRCarrierAc64::setFan()'],['../classIRCoolixAC.html#aff4189cb1000c6db7d88624fbadbe0cb',1,'IRCoolixAC::setFan()'],['../classIRCoronaAc.html#aa4da12502bf85438846bdde56391ee5c',1,'IRCoronaAc::setFan()'],['../classIRDaikinESP.html#a1f191f45e473482a86aad9a1c879e083',1,'IRDaikinESP::setFan()'],['../classIRDaikin2.html#af9f3ddbdd1f1d5d99c84846b73c5daa1',1,'IRDaikin2::setFan()'],['../classIRDaikin216.html#a8fadfb1e61deca74a2d1b9c1d5ae62e1',1,'IRDaikin216::setFan()'],['../classIRDaikin160.html#a7f507c64dc7a9fa1e9391e9e8473af1b',1,'IRDaikin160::setFan()'],['../classIRDaikin176.html#a050a9943dc7d8289472e6b9dbdcb06c1',1,'IRDaikin176::setFan()'],['../classIRDaikin128.html#a0495834250e97e7831e9906ab548fe44',1,'IRDaikin128::setFan()'],['../classIRDaikin152.html#a385a4f65dfccd0a9e94be06ae60c5343',1,'IRDaikin152::setFan()'],['../classIRDaikin64.html#af39206f90b99fd5ee340923b196368b8',1,'IRDaikin64::setFan()'],['../classIRDelonghiAc.html#a440f1e0efa18c6b1a8e18e0a97fbfb79',1,'IRDelonghiAc::setFan()'],['../classIREcoclimAc.html#a5760f762c04f950566b51b34bee2b013',1,'IREcoclimAc::setFan()'],['../classIRElectraAc.html#aa338ce18cafaf9c7b9aa3385e681bbe7',1,'IRElectraAc::setFan()'],['../classIRGoodweatherAc.html#af8cf9ba59af548677e586cd59e8a6cc2',1,'IRGoodweatherAc::setFan()'],['../classIRGreeAC.html#a9bb570e71df5002298505d49473e6bac',1,'IRGreeAC::setFan()'],['../classIRHaierAC.html#a42ee1c5889f07bf7615c8f853bca2261',1,'IRHaierAC::setFan()'],['../classIRHaierACYRW02.html#ae9c3a7bffc08d9d5204616823f709889',1,'IRHaierACYRW02::setFan()'],['../classIRHitachiAc.html#a0760b07502b976880ee8499dc6fa61ff',1,'IRHitachiAc::setFan()'],['../classIRHitachiAc1.html#a7294dc1324877d4a64f7b4373d97d745',1,'IRHitachiAc1::setFan()'],['../classIRHitachiAc424.html#afd69bcff56224f39af92fc2d334b67bb',1,'IRHitachiAc424::setFan()'],['../classIRKelvinatorAC.html#af08e94be9699983c0087c9b059aad319',1,'IRKelvinatorAC::setFan()'],['../classIRLgAc.html#a0f1901a21ffb93641d3481417d74bb4e',1,'IRLgAc::setFan()'],['../classIRMideaAC.html#a546eeca4eea015899a5ad9f5d1c6fafb',1,'IRMideaAC::setFan()'],['../classIRMitsubishiAC.html#a4e88e50b2eddd0233aade5c1bf7819f1',1,'IRMitsubishiAC::setFan()'],['../classIRMitsubishi136.html#a2aa62126614f734ec3d1b7b3cb653e9e',1,'IRMitsubishi136::setFan()'],['../classIRMitsubishi112.html#ab681e78572c869a8c57079a660fe1505',1,'IRMitsubishi112::setFan()'],['../classIRMitsubishiHeavy152Ac.html#ac8d8eceba935aa626cb229d1c41081bb',1,'IRMitsubishiHeavy152Ac::setFan()'],['../classIRMitsubishiHeavy88Ac.html#a4f8c934a82091547c36da512329e76d7',1,'IRMitsubishiHeavy88Ac::setFan()'],['../classIRNeoclimaAc.html#a8db9d2d446e8614b2fc4583a454d7cee',1,'IRNeoclimaAc::setFan()'],['../classIRPanasonicAc.html#a8d77292226f55601c30ee53252ba83cd',1,'IRPanasonicAc::setFan()'],['../classIRPanasonicAc32.html#aaa15347ebf0eb6db7abb64553f3eb3d7',1,'IRPanasonicAc32::setFan()'],['../classIRSamsungAc.html#a6c7571e14fe6629348273a2b49a0a824',1,'IRSamsungAc::setFan()'],['../classIRSanyoAc.html#a400ec91300c0bfa5dd329dc0414d078b',1,'IRSanyoAc::setFan()'],['../classIRSharpAc.html#a5138068f8ba4c51939ff3bb14f0aae45',1,'IRSharpAc::setFan()'],['../classIRTcl112Ac.html#a0dab8ad6675c4ec122d0d7e28a557cba',1,'IRTcl112Ac::setFan()'],['../classIRTechnibelAc.html#a885f272cfa47004dfd8d19a6e251a337',1,'IRTechnibelAc::setFan()'],['../classIRTecoAc.html#afda9a33ca450568f968217bedc9ad7f2',1,'IRTecoAc::setFan()'],['../classIRToshibaAC.html#a020ba3e95c607f52ce091193fc5825fc',1,'IRToshibaAC::setFan()'],['../classIRTranscoldAc.html#a444593321998f04b4ef5e9c9ceb5b511',1,'IRTranscoldAc::setFan()'],['../classIRTrotecESP.html#a01b26cb6e671298f8a77a54dafdb27e3',1,'IRTrotecESP::setFan()'],['../classIRTrumaAc.html#a6e650fb764693da7ab1b863b43a667e1',1,'IRTrumaAc::setFan()'],['../classIRVestelAc.html#af53dfd0a0372c878b6ba2ca1cfc21ccd',1,'IRVestelAc::setFan()'],['../classIRVoltas.html#a013f93d588f57b8e62d059984fbf6173',1,'IRVoltas::setFan()'],['../classIRWhirlpoolAc.html#a8da28ee25fdc91d55a9f6ab5dab3af81',1,'IRWhirlpoolAc::setFan()']]], - ['setfanspeed_3332',['setFanSpeed',['../classIRFujitsuAC.html#af0fc10ec0a606434477cb41c60eb49e5',1,'IRFujitsuAC']]], - ['setfilter_3333',['setFilter',['../classIRFujitsuAC.html#aec0048efe87f60406c76ad6bc3ffbc61',1,'IRFujitsuAC::setFilter()'],['../classIRMitsubishiHeavy152Ac.html#aaf76ac48228d3a7b8490e684407e65b1',1,'IRMitsubishiHeavy152Ac::setFilter()']]], - ['setflap_3334',['setFlap',['../classIRArgoAC.html#a55a6402ffc3fe7fb59775050901416ca',1,'IRArgoAC']]], - ['setfresh_3335',['setFresh',['../classIRNeoclimaAc.html#a6354d8b902ffc1e7c044a61185504404',1,'IRNeoclimaAc']]], - ['setfreshair_3336',['setFreshAir',['../classIRDaikin2.html#a6e0596c7b9f9b43b8d241340ae08e886',1,'IRDaikin2']]], - ['setfreshairhigh_3337',['setFreshAirHigh',['../classIRDaikin2.html#a044471f2298a1942bcc2f859f9459924',1,'IRDaikin2']]], - ['sethealth_3338',['setHealth',['../classIRHaierAC.html#a48c9ae91809d63156eeb3889f2e908f4',1,'IRHaierAC::setHealth()'],['../classIRHaierACYRW02.html#a79673650a2285f029a35ab69edeb0e74',1,'IRHaierACYRW02::setHealth()'],['../classIRTcl112Ac.html#a28ed509977d8642174bc6c9aa97ae1c3',1,'IRTcl112Ac::setHealth()']]], - ['sethold_3339',['setHold',['../classIRNeoclimaAc.html#a2eb4e0a2ff39ceb1b6b571998d91b31e',1,'IRNeoclimaAc']]], - ['sethumid_3340',['setHumid',['../classIRTecoAc.html#a4ab07a7c95f34d3b292926c719aeb303',1,'IRTecoAc']]], - ['setid_3341',['setId',['../classIRFujitsuAC.html#a5f87182e0eea7bba7ed50b9942565c91',1,'IRFujitsuAC']]], - ['setifeel_3342',['setiFeel',['../classIRArgoAC.html#ae59f903855961441b676b7f662602554',1,'IRArgoAC::setiFeel()'],['../classIRGreeAC.html#a68a670156a5e0a91a8a3cf9225263e0b',1,'IRGreeAC::setIFeel()']]], - ['setinvertedstates_3343',['setInvertedStates',['../classIRHitachiAc424.html#ad18528cf83e863b98cb1609eec970ac5',1,'IRHitachiAc424::setInvertedStates()'],['../classIRHitachiAc3.html#af37c710449cd32df4753509749e31cad',1,'IRHitachiAc3::setInvertedStates()']]], - ['setion_3344',['setIon',['../classIRNeoclimaAc.html#a504fc5e371746fda8e7eb7cc0abf137a',1,'IRNeoclimaAc::setIon()'],['../classIRPanasonicAc.html#a5a1c4f5b9eb7a3a1a81a6acd0491c3cd',1,'IRPanasonicAc::setIon()'],['../classIRSamsungAc.html#aeee65ca6d2100635a517077f01053bed',1,'IRSamsungAc::setIon()'],['../classIRSharpAc.html#af6a390362bc5b40eecc6564b16b3379b',1,'IRSharpAc::setIon()'],['../classIRVestelAc.html#acf860da68a15d463dab437a808c9c8c6',1,'IRVestelAc::setIon()']]], - ['setionfilter_3345',['setIonFilter',['../classIRKelvinatorAC.html#a6a219c481ddc21d93028f5c799c25883',1,'IRKelvinatorAC']]], - ['setled_3346',['setLed',['../classIRCoolixAC.html#aee6c7fd3a065ff14425fc02cb2ed8354',1,'IRCoolixAC']]], - ['setlight_3347',['setLight',['../classIRDaikin2.html#a7ecadb3335e9b22729a89b4c41456242',1,'IRDaikin2::setLight()'],['../classIRGoodweatherAc.html#a3f149ff426b236ba9f90659a6daf4a9c',1,'IRGoodweatherAc::setLight()'],['../classIRGreeAC.html#a702bbba38e11bb8f3428ee707fc82311',1,'IRGreeAC::setLight()'],['../classIRKelvinatorAC.html#a870890c2bc8510f8f7351ca21db8d855',1,'IRKelvinatorAC::setLight()'],['../classIRNeoclimaAc.html#a1d7a6ec6d319544bee907a23a1d14084',1,'IRNeoclimaAc::setLight()'],['../classIRTcl112Ac.html#a7dec5b0559f996df8a4fc259ab6012e9',1,'IRTcl112Ac::setLight()'],['../classIRTecoAc.html#a25d97c1e7be31d80a4ffad0026e633d7',1,'IRTecoAc::setLight()'],['../classIRVoltas.html#aedd6ca44b32c6da83da997d7048a82f4',1,'IRVoltas::setLight()'],['../classIRWhirlpoolAc.html#a70b4c0467a7747f9cf9e106af1025771',1,'IRWhirlpoolAc::setLight()']]], - ['setlighttoggle_3348',['setLightToggle',['../classIRDaikin128.html#a6361c789141ccecb729c104e71ddcc41',1,'IRDaikin128::setLightToggle()'],['../classIRElectraAc.html#a15373982641e36f4b68258368700be7d',1,'IRElectraAc::setLightToggle()'],['../classIRMideaAC.html#a84daaa272cedd6f5e74b03a9f3962cba',1,'IRMideaAC::setLightToggle()'],['../classIRSharpAc.html#a7b3b5ef00b94366feb42cc1e4781ae57',1,'IRSharpAc::setLightToggle()']]], - ['setmax_3349',['setMax',['../classIRAmcorAc.html#a1250c6b106378286d9db013296c9b16f',1,'IRAmcorAc::setMax()'],['../classIRArgoAC.html#a909c1f74e9452d0e19fc3ffd28b1b81b',1,'IRArgoAC::setMax()']]], - ['setmode_3350',['setMode',['../classIRAirwellAc.html#a3cbc12fee37b9b2b19aa5455ace9d46e',1,'IRAirwellAc::setMode()'],['../classIRAmcorAc.html#afa9c2d080ed5c4c7bc64eb13a07eab68',1,'IRAmcorAc::setMode()'],['../classIRArgoAC.html#a8575f0ef967b09308ed6a453857e65c7',1,'IRArgoAC::setMode()'],['../classIRCarrierAc64.html#ae462eeec49ff91358f1b9921750ee36d',1,'IRCarrierAc64::setMode()'],['../classIRCoolixAC.html#a5c0094d32aca6a5323f4dc72a03f02e9',1,'IRCoolixAC::setMode()'],['../classIRCoronaAc.html#aedeeedd176c89e5b7b650a4311e712be',1,'IRCoronaAc::setMode()'],['../classIRDaikinESP.html#af0f463201c877d33fa8680053dda7551',1,'IRDaikinESP::setMode()'],['../classIRDaikin2.html#a24ef3b53f22fe3557ed2dbc98a5bc6d2',1,'IRDaikin2::setMode()'],['../classIRDaikin216.html#a1d0dfce75ac95df9125b2cfe7c955080',1,'IRDaikin216::setMode()'],['../classIRDaikin160.html#a48e6fff63fd8b894c649fb495a467faa',1,'IRDaikin160::setMode()'],['../classIRDaikin176.html#a7ce82479f5ae2721baae8119b711c112',1,'IRDaikin176::setMode()'],['../classIRDaikin128.html#a9693e9931449f39253ca9102ac5cbfe9',1,'IRDaikin128::setMode()'],['../classIRDaikin152.html#aad0a46c751b73792282d6614103f57d8',1,'IRDaikin152::setMode()'],['../classIRDaikin64.html#a04dff0d273457a7bc3f3e0e1af4f7cd9',1,'IRDaikin64::setMode()'],['../classIRDelonghiAc.html#a62392c26321f038a84d99d54039bcfae',1,'IRDelonghiAc::setMode()'],['../classIREcoclimAc.html#a0d240abafeed17a9e0d3dca9804e03d2',1,'IREcoclimAc::setMode()'],['../classIRElectraAc.html#a911b7410fd2f29464c1505e183c04c5d',1,'IRElectraAc::setMode()'],['../classIRFujitsuAC.html#ac125c320f9794aae931bc59ba332a4a8',1,'IRFujitsuAC::setMode()'],['../classIRGoodweatherAc.html#a8eed6b70b7b1c2e8a9620db7462e1fb5',1,'IRGoodweatherAc::setMode()'],['../classIRGreeAC.html#a9d9dbd416e3dc270fcfda620b3bb4fe2',1,'IRGreeAC::setMode()'],['../classIRHaierAC.html#a3ad0317f2fd4f57d8ce61353ab3e48c7',1,'IRHaierAC::setMode()'],['../classIRHaierACYRW02.html#ae762c5f5422b4af612fa00f7c26452ed',1,'IRHaierACYRW02::setMode()'],['../classIRHitachiAc.html#a208f73a42484a1555145b41849e8c51f',1,'IRHitachiAc::setMode()'],['../classIRHitachiAc1.html#a1f3ced601e1131b70f840820ecb3feaa',1,'IRHitachiAc1::setMode()'],['../classIRHitachiAc424.html#a373a51d207674e35e00762b057f73cd5',1,'IRHitachiAc424::setMode()'],['../classIRKelvinatorAC.html#af55cc77892bc960587037c337b90d1bc',1,'IRKelvinatorAC::setMode()'],['../classIRLgAc.html#a5e1b21d9121c6bf6507f615f470b5890',1,'IRLgAc::setMode()'],['../classIRMideaAC.html#a3b92f25a82741ae404e8f9af8dbca3a8',1,'IRMideaAC::setMode()'],['../classIRMitsubishiAC.html#a2b4e2f00ee5a385172b13e8d9858ac0b',1,'IRMitsubishiAC::setMode()'],['../classIRMitsubishi136.html#aaef2ed81bdeb183995e2342c2ca17a8b',1,'IRMitsubishi136::setMode()'],['../classIRMitsubishi112.html#a0c1434e1d8dd513007400042324e868e',1,'IRMitsubishi112::setMode()'],['../classIRMitsubishiHeavy152Ac.html#a5a68388f337d7ba80289359903a1d01d',1,'IRMitsubishiHeavy152Ac::setMode()'],['../classIRMitsubishiHeavy88Ac.html#a1802cc8a382d6161b83f8947137d941d',1,'IRMitsubishiHeavy88Ac::setMode()'],['../classIRNeoclimaAc.html#adabd715c4a2ec34dd88330b97a1f0ecd',1,'IRNeoclimaAc::setMode()'],['../classIRPanasonicAc.html#add025b64e736d5120abeb2564a2849a4',1,'IRPanasonicAc::setMode()'],['../classIRPanasonicAc32.html#a3bd5cef91112ddb0913685e64d3f60ae',1,'IRPanasonicAc32::setMode()'],['../classIRSamsungAc.html#a708d9c6c91d774d6eeadbc0bd7f350af',1,'IRSamsungAc::setMode()'],['../classIRSanyoAc.html#a47521969475393eafe94faeb51204132',1,'IRSanyoAc::setMode()'],['../classIRSharpAc.html#ab51c207de90391cb7190e3ec95adc16e',1,'IRSharpAc::setMode()'],['../classIRTcl112Ac.html#a1a050c9b238691ba6d4764beeb788778',1,'IRTcl112Ac::setMode()'],['../classIRTechnibelAc.html#a04917b3760ed658d88ad2dae976d7a64',1,'IRTechnibelAc::setMode()'],['../classIRTecoAc.html#aba404540b723fa4687a4fda954221130',1,'IRTecoAc::setMode()'],['../classIRToshibaAC.html#aa001cddc464d6cbcc342e5e4c7af13ff',1,'IRToshibaAC::setMode()'],['../classIRTranscoldAc.html#a9371bf7cdc08067d4afb2dffa1c584c4',1,'IRTranscoldAc::setMode()'],['../classIRTrotecESP.html#a5d34e8d1e1be765e51cbfb6874482997',1,'IRTrotecESP::setMode()'],['../classIRTrumaAc.html#ae244a2be001cc99946f59cd3c178d95a',1,'IRTrumaAc::setMode()'],['../classIRVestelAc.html#a470e14ab5623386c0fa2b02fd15ea1d8',1,'IRVestelAc::setMode()'],['../classIRVoltas.html#afa1407bb1cfac30bdb762f7131dc9136',1,'IRVoltas::setMode()'],['../classIRWhirlpoolAc.html#ab09869929f5cc1fd0cc5dede93bba1c5',1,'IRWhirlpoolAc::setMode()']]], - ['setmodel_3351',['setModel',['../classIRFujitsuAC.html#a5393698000d8becf33ff332b32b97c73',1,'IRFujitsuAC::setModel()'],['../classIRGreeAC.html#a1075a08c30a2de97892e0842cb30e451',1,'IRGreeAC::setModel()'],['../classIRHitachiAc1.html#abb8c2c87e87f9d538f171e842c9d309a',1,'IRHitachiAc1::setModel()'],['../classIRLgAc.html#ae4b8758ecf10bd7e25ed401593692821',1,'IRLgAc::setModel()'],['../classIRPanasonicAc.html#a342531bfea3b05484de84e537bde390c',1,'IRPanasonicAc::setModel()'],['../classIRSharpAc.html#a35eb3241339c663db31002738b9632d3',1,'IRSharpAc::setModel()'],['../classIRVoltas.html#aa642fcbc4b0da48ef26c4e8c79f3e8b4',1,'IRVoltas::setModel()'],['../classIRWhirlpoolAc.html#accfa1660ed792acc3cf48ff60d9570f0',1,'IRWhirlpoolAc::setModel()']]], - ['setmold_3352',['setMold',['../classIRDaikinESP.html#a1616d08c8fd3c628fc45a76c32743ac9',1,'IRDaikinESP::setMold()'],['../classIRDaikin2.html#ad53e046e545f3b6c5418dfbaf58653ca',1,'IRDaikin2::setMold()']]], - ['setnight_3353',['setNight',['../classIRArgoAC.html#a769dd3b538653940e41883848bc1e19c',1,'IRArgoAC::setNight()'],['../classIRMitsubishiHeavy152Ac.html#a6920a1aad327e2f347b09da12f11cf8c',1,'IRMitsubishiHeavy152Ac::setNight()']]], - ['setoffsleeptimer_3354',['setOffSleepTimer',['../classIRFujitsuAC.html#acc78790fa33d24c5e068200ec3109798',1,'IRFujitsuAC']]], - ['setofftime_3355',['setOffTime',['../classIRDaikin64.html#a46a0b1e2438087ba557494b0b4fce4a5',1,'IRDaikin64::setOffTime()'],['../classIRVoltas.html#ad5977a24ef551ad0a19b5e61bae0482a',1,'IRVoltas::setOffTime()']]], - ['setofftimeenabled_3356',['setOffTimeEnabled',['../classIRDaikin64.html#aea59ae39ddd0fc33a6941d0affceae9a',1,'IRDaikin64']]], - ['setofftimer_3357',['setOffTimer',['../classIRCarrierAc64.html#a92b1066e783db1bdffabfdc57699deef',1,'IRCarrierAc64::setOffTimer()'],['../classIRCoronaAc.html#a00f269b6389bf65d1816e80b835aa9b0',1,'IRCoronaAc::setOffTimer()'],['../classIRDaikin128.html#a30ca067676dfde963986e25c84616368',1,'IRDaikin128::setOffTimer()'],['../classIRDelonghiAc.html#a9602c652b10b06c6eeae0e6158c42c68',1,'IRDelonghiAc::setOffTimer()'],['../classIREcoclimAc.html#a9a1b8b23de45b38eff74d10f5dfdd7bf',1,'IREcoclimAc::setOffTimer()'],['../classIRFujitsuAC.html#a3f69df43ab82f08c84782585b90437a2',1,'IRFujitsuAC::setOffTimer()'],['../classIRHaierAC.html#aa16b36aa7ef07628343dbd2dfe5157a2',1,'IRHaierAC::setOffTimer()'],['../classIRHitachiAc1.html#a62e9c7b68e63d1791d79805f2bce99df',1,'IRHitachiAc1::setOffTimer()'],['../classIRMideaAC.html#a1f5e4e75987a11300f29355bae12d9e5',1,'IRMideaAC::setOffTimer()'],['../classIRPanasonicAc.html#a08e097f40cee6c614ec1a8de716222cf',1,'IRPanasonicAc::setOffTimer()'],['../classIRSanyoAc.html#a6f5edbc22b039191500845ffd3ec77b5',1,'IRSanyoAc::setOffTimer()'],['../classIRVestelAc.html#acc61cd785d2f668a86ecefb243d63549',1,'IRVestelAc::setOffTimer()'],['../classIRWhirlpoolAc.html#a69f3555c9b27f3cfd9167ed3239804b8',1,'IRWhirlpoolAc::setOffTimer()']]], - ['setofftimeractive_3358',['setOffTimerActive',['../classIRVestelAc.html#a8a023f5594b446f0c20f66c4ee584d8e',1,'IRVestelAc']]], - ['setofftimerenabled_3359',['setOffTimerEnabled',['../classIRDaikin128.html#aac8a178bdaf7de7a183991e710a9a9d8',1,'IRDaikin128::setOffTimerEnabled()'],['../classIRDelonghiAc.html#a5cf81c9864f3c3728d4dd65e4d9c49c8',1,'IRDelonghiAc::setOffTimerEnabled()']]], - ['setontime_3360',['setOnTime',['../classIRDaikin64.html#aaada482820a90492a933f368fafaebb7',1,'IRDaikin64::setOnTime()'],['../classIRVoltas.html#a260ef77c26d2c987122391378ff5e876',1,'IRVoltas::setOnTime()']]], - ['setontimeenabled_3361',['setOnTimeEnabled',['../classIRDaikin64.html#a8e7a7c1f775f8ddf9d48a96915751c7a',1,'IRDaikin64']]], - ['setontimer_3362',['setOnTimer',['../classIRCarrierAc64.html#a9049a8d91200b878cc2a1b9b80a280ea',1,'IRCarrierAc64::setOnTimer()'],['../classIRCoronaAc.html#aae4142f45cc9c2b3e392b72cb404a2d8',1,'IRCoronaAc::setOnTimer()'],['../classIRDaikin128.html#a21773493eafae741b5716ac569eaf0a8',1,'IRDaikin128::setOnTimer()'],['../classIRDelonghiAc.html#a9a478f463a632893be7c4f5223c188ad',1,'IRDelonghiAc::setOnTimer()'],['../classIREcoclimAc.html#ae09d0b632cf657769d23f201284aa08f',1,'IREcoclimAc::setOnTimer()'],['../classIRFujitsuAC.html#a500fd3371c360b446b0cc14e994b77db',1,'IRFujitsuAC::setOnTimer()'],['../classIRHaierAC.html#aa5e95aa05749f6d35dd31b021fea2f5b',1,'IRHaierAC::setOnTimer()'],['../classIRHitachiAc1.html#a51ed6155f228628942ba08ea2ff5c547',1,'IRHitachiAc1::setOnTimer()'],['../classIRMideaAC.html#a99ae120368751b88b73d3b0fe9b426ce',1,'IRMideaAC::setOnTimer()'],['../classIRPanasonicAc.html#a51fdaa11e4e3f77189a94007a5acbec2',1,'IRPanasonicAc::setOnTimer()'],['../classIRVestelAc.html#af19bb7704326eb5688f2a2fa08e10ee2',1,'IRVestelAc::setOnTimer()'],['../classIRWhirlpoolAc.html#a1cb0e346e6f40b65b98a768df7fdace8',1,'IRWhirlpoolAc::setOnTimer()']]], - ['setontimeractive_3363',['setOnTimerActive',['../classIRVestelAc.html#a16ef4ecb7c76bef89b6e0ca36746d606',1,'IRVestelAc']]], - ['setontimerenabled_3364',['setOnTimerEnabled',['../classIRDaikin128.html#a07f693fac3de101c91c190e5e70edb57',1,'IRDaikin128::setOnTimerEnabled()'],['../classIRDelonghiAc.html#af6b956c273284e287093260039003362',1,'IRDelonghiAc::setOnTimerEnabled()']]], - ['setoutsidequiet_3365',['setOutsideQuiet',['../classIRFujitsuAC.html#a9a0533cba18739e52014307bf4b1ad07',1,'IRFujitsuAC']]], - ['setpower_3366',['setPower',['../classIRAmcorAc.html#a2ccfb2c2f0feb8a8cea9e10e30035988',1,'IRAmcorAc::setPower()'],['../classIRArgoAC.html#a991f73d84952c1d8ac86c579d1b01785',1,'IRArgoAC::setPower()'],['../classIRCarrierAc64.html#a8acf59cbf3b02381b5188324030b7727',1,'IRCarrierAc64::setPower()'],['../classIRCoolixAC.html#a975b59045a3c2a50392fdade2743e4e6',1,'IRCoolixAC::setPower()'],['../classIRCoronaAc.html#adc636402b51e0c78c4797aea5f80915d',1,'IRCoronaAc::setPower()'],['../classIRDaikinESP.html#aa0fb65d01bb203d17d923504ddd60984',1,'IRDaikinESP::setPower()'],['../classIRDaikin2.html#a3adfe1a80a702b7098ccd0e18225396e',1,'IRDaikin2::setPower()'],['../classIRDaikin216.html#a130a98bb2422a228977dea8a4e068ace',1,'IRDaikin216::setPower()'],['../classIRDaikin160.html#af1a800ef7494c49a868d01039f5c37e4',1,'IRDaikin160::setPower()'],['../classIRDaikin176.html#a58c755ba53d1f14a51b0c64ff4ef0669',1,'IRDaikin176::setPower()'],['../classIRDaikin152.html#a887f7340b9c3e7933f5d06bc5f59ee91',1,'IRDaikin152::setPower()'],['../classIRDelonghiAc.html#aa1ebbf63aa2331b87b95df9c5bdb41dc',1,'IRDelonghiAc::setPower()'],['../classIREcoclimAc.html#acca0a0d62568abd6f62c6f403e99847f',1,'IREcoclimAc::setPower()'],['../classIRElectraAc.html#abd04ffe9a77a97d4fafbcecd3a7949a4',1,'IRElectraAc::setPower()'],['../classIRFujitsuAC.html#a8d8211f20c8ec299e1fcb588a0846ac2',1,'IRFujitsuAC::setPower()'],['../classIRGoodweatherAc.html#ac49e30082777b10fe9edf6ec7bd76ea5',1,'IRGoodweatherAc::setPower()'],['../classIRGreeAC.html#a16b8c6af038752cd2b416cdcf9e2fb51',1,'IRGreeAC::setPower()'],['../classIRHaierACYRW02.html#a32e4a52cf31b43ad96ff3d8f0f390620',1,'IRHaierACYRW02::setPower()'],['../classIRHitachiAc.html#ad78a7176ded93735a296eefbf75cbc06',1,'IRHitachiAc::setPower()'],['../classIRHitachiAc1.html#a4dd034793018ea58d0cc32e7a47e8f35',1,'IRHitachiAc1::setPower()'],['../classIRHitachiAc424.html#a7b0b2e2c631d1bce2dd4677bb71e79b4',1,'IRHitachiAc424::setPower()'],['../classIRKelvinatorAC.html#a517a0193a9236a28a20d1760d7401efd',1,'IRKelvinatorAC::setPower()'],['../classIRLgAc.html#a175e6482fd1565d43906c527f911b59e',1,'IRLgAc::setPower()'],['../classIRMideaAC.html#ab8341f8d3d553d8b0ed9270cc15fc8ec',1,'IRMideaAC::setPower()'],['../classIRMitsubishiAC.html#a13f26de3c35b01470176b6fd9efda566',1,'IRMitsubishiAC::setPower()'],['../classIRMitsubishi136.html#a4bf52b3784faaca95ff97a09b8be322a',1,'IRMitsubishi136::setPower()'],['../classIRMitsubishi112.html#a0545da32a5048bc9d857ffb05767d3a6',1,'IRMitsubishi112::setPower()'],['../classIRMitsubishiHeavy152Ac.html#a08202752226ff3295eb8ccd637b0158b',1,'IRMitsubishiHeavy152Ac::setPower()'],['../classIRMitsubishiHeavy88Ac.html#ac2ee9dd82e84a3735e8a0c69e64cb02e',1,'IRMitsubishiHeavy88Ac::setPower()'],['../classIRNeoclimaAc.html#ac19bea3b79cdfc868bd137b0a70c0718',1,'IRNeoclimaAc::setPower()'],['../classIRPanasonicAc.html#ad60bf8a88d041f8e8ab3d728831ee8f3',1,'IRPanasonicAc::setPower()'],['../classIRSamsungAc.html#a4af21fa0dcbf5595386f67db676a443c',1,'IRSamsungAc::setPower()'],['../classIRSanyoAc.html#a13b080b4244e027460af90740ed0ff45',1,'IRSanyoAc::setPower()'],['../classIRSharpAc.html#a6b57a66878f125f86d2aed8bd7545000',1,'IRSharpAc::setPower()'],['../classIRTcl112Ac.html#ad2367d2481f94f14b9c4f7b378711b7e',1,'IRTcl112Ac::setPower()'],['../classIRTechnibelAc.html#a935f26d55d7d5c7024e8b298fda9aeb4',1,'IRTechnibelAc::setPower()'],['../classIRTecoAc.html#a989e48a889b36ec36386a532c81872d9',1,'IRTecoAc::setPower()'],['../classIRToshibaAC.html#a100f01c014582e162f9fd287beb91dff',1,'IRToshibaAC::setPower()'],['../classIRTranscoldAc.html#a3a19128eaf81ec52f752d79d718d43a3',1,'IRTranscoldAc::setPower()'],['../classIRTrotecESP.html#a0f3f5f5db367cb5a9adb936fada94fd5',1,'IRTrotecESP::setPower()'],['../classIRTrumaAc.html#aaff68f98a079f0596440a0915409a6c1',1,'IRTrumaAc::setPower()'],['../classIRVestelAc.html#a01e06ff3916d4a14f9ca49f22918a47b',1,'IRVestelAc::setPower()'],['../classIRVoltas.html#a0ee0be11284527861476091c855a8606',1,'IRVoltas::setPower()']]], - ['setpowerbutton_3367',['setPowerButton',['../classIRCoronaAc.html#a518471d42a62863953c97334cad348be',1,'IRCoronaAc']]], - ['setpowerful_3368',['setPowerful',['../classIRDaikinESP.html#a4c0da54ee1639a3bf813cb3f3afee064',1,'IRDaikinESP::setPowerful()'],['../classIRDaikin2.html#a6538104cdcf1b55e480aaddd51116d9a',1,'IRDaikin2::setPowerful()'],['../classIRDaikin216.html#a5cb6e958f3b9789828738defe4d12c7b',1,'IRDaikin216::setPowerful()'],['../classIRDaikin128.html#aeb3aa5013b1746ed714146ca7f233119',1,'IRDaikin128::setPowerful()'],['../classIRDaikin152.html#a6477111b5662146e937c10cf02423e10',1,'IRDaikin152::setPowerful()'],['../classIRPanasonicAc.html#a6357688bc9cca92ab222343ee045f4f4',1,'IRPanasonicAc::setPowerful()'],['../classIRSamsungAc.html#ab657b79740e0f84c09611ea3b10d06f0',1,'IRSamsungAc::setPowerful()']]], - ['setpowerspecial_3369',['setPowerSpecial',['../classIRSharpAc.html#af7dd64c6d82a8502d2ee176f7b0f5abb',1,'IRSharpAc']]], - ['setpowertoggle_3370',['setPowerToggle',['../classIRAirwellAc.html#a1b6aa498d9766b041d39a7b3d73653e7',1,'IRAirwellAc::setPowerToggle()'],['../classIRDaikin128.html#a5d7edaa44f0c9ca55ef1040dd42e42e3',1,'IRDaikin128::setPowerToggle()'],['../classIRDaikin64.html#ac7f673619842d217d4eda893da2f35fd',1,'IRDaikin64::setPowerToggle()'],['../classIRHitachiAc1.html#ae30430edd92ec4b848c8a105a78e8068',1,'IRHitachiAc1::setPowerToggle()'],['../classIRPanasonicAc32.html#ad0206dff39920f1407ed52256ee1b083',1,'IRPanasonicAc32::setPowerToggle()'],['../classIRWhirlpoolAc.html#a61bec25edce5bc244acb41f79df561e7',1,'IRWhirlpoolAc::setPowerToggle()']]], - ['setpurify_3371',['setPurify',['../classIRDaikin2.html#accd4430e998a8c9be80b5a708be9337e',1,'IRDaikin2']]], - ['setquiet_3372',['setQuiet',['../classIRDaikinESP.html#a4927eb8b2db2540efa90b37f4c3cc733',1,'IRDaikinESP::setQuiet()'],['../classIRDaikin2.html#a61ca7e72f850d0f9600fa9d8a336a8ef',1,'IRDaikin2::setQuiet()'],['../classIRDaikin216.html#a062528f54412cd3d2339c7bf82305ebb',1,'IRDaikin216::setQuiet()'],['../classIRDaikin128.html#a89c49332006831debbabbfcb5ec30249',1,'IRDaikin128::setQuiet()'],['../classIRDaikin152.html#a3aadf5f0ae11c5c6c53f351dd6b9c1a4',1,'IRDaikin152::setQuiet()'],['../classIRDaikin64.html#a7e3fb8debcefb76e76dda5612e28f377',1,'IRDaikin64::setQuiet()'],['../classIRKelvinatorAC.html#a2a3ca238649c55cd4f6f92f48eddf9ac',1,'IRKelvinatorAC::setQuiet()'],['../classIRMitsubishi136.html#a70c8a44f93e90ba025a8909c004c3a7b',1,'IRMitsubishi136::setQuiet()'],['../classIRMitsubishi112.html#a9fbbfb7bb1f6cccfcdcfbc4dcc335169',1,'IRMitsubishi112::setQuiet()'],['../classIRPanasonicAc.html#a51b6ae49cb490f697adeaf7f9f466518',1,'IRPanasonicAc::setQuiet()'],['../classIRSamsungAc.html#a6b3dd7d83c613a06f3499f1c8b26a67b',1,'IRSamsungAc::setQuiet()'],['../classIRTrumaAc.html#a5c1bc2a26b75c50a723cc4d29d121a9d',1,'IRTrumaAc::setQuiet()']]], - ['setraw_3373',['setRaw',['../classIRAirwellAc.html#a56e90d8b7e902be15c5db12be872d0fb',1,'IRAirwellAc::setRaw()'],['../classIRAmcorAc.html#ac0520033d7a59c817ca8ec08462fe39b',1,'IRAmcorAc::setRaw()'],['../classIRArgoAC.html#a98db56256eb71bf2e8da419007145e2b',1,'IRArgoAC::setRaw()'],['../classIRCarrierAc64.html#af49cf0b53bf8ff946a63bae94be0251d',1,'IRCarrierAc64::setRaw()'],['../classIRCoolixAC.html#aed28d08743c529a5715331255a8d5507',1,'IRCoolixAC::setRaw()'],['../classIRCoronaAc.html#a9ccf78675a3c175209c8d0ef08e2e671',1,'IRCoronaAc::setRaw()'],['../classIRDaikinESP.html#a7c69fc77ead837e5b4f1ececd9f43ca9',1,'IRDaikinESP::setRaw()'],['../classIRDaikin2.html#a132001e73eb5744a3a174c5517c9bbda',1,'IRDaikin2::setRaw()'],['../classIRDaikin216.html#a49f6a2ffc2e76ec4ff020e773bd70160',1,'IRDaikin216::setRaw()'],['../classIRDaikin160.html#a22e8a1600f612dd4326b2f9722d3a269',1,'IRDaikin160::setRaw()'],['../classIRDaikin176.html#a51e5f74b532eca958c09998727064e8d',1,'IRDaikin176::setRaw()'],['../classIRDaikin128.html#a25db29e01def45e8850ac9da68aa7ea7',1,'IRDaikin128::setRaw()'],['../classIRDaikin152.html#aab10e030ebe66e44607e9f35af1eb4cb',1,'IRDaikin152::setRaw()'],['../classIRDaikin64.html#a5f081026aca2bccc6fdeef8199e80779',1,'IRDaikin64::setRaw()'],['../classIRDelonghiAc.html#a219bafa7839f10acca33526cf585152a',1,'IRDelonghiAc::setRaw()'],['../classIREcoclimAc.html#ac88006b639a05c9605548db1af672fb0',1,'IREcoclimAc::setRaw()'],['../classIRElectraAc.html#ae57c51cd3f5d1ebfb2fe7b926d149dd6',1,'IRElectraAc::setRaw()'],['../classIRFujitsuAC.html#a9b89d756948affa7029eeeed51916cbb',1,'IRFujitsuAC::setRaw()'],['../classIRGoodweatherAc.html#a2eae4bbdb14fea9e3004d656f852df59',1,'IRGoodweatherAc::setRaw()'],['../classIRGreeAC.html#a588f526f2f5500c7c2933ca91ccaf865',1,'IRGreeAC::setRaw()'],['../classIRHaierAC.html#a152961e20b5a5bed2ea03cbc65d65ce9',1,'IRHaierAC::setRaw()'],['../classIRHaierACYRW02.html#a389e711e128533c409731d2c87868c85',1,'IRHaierACYRW02::setRaw()'],['../classIRHitachiAc.html#a3b67215c162ef508c68c49b621c5199b',1,'IRHitachiAc::setRaw()'],['../classIRHitachiAc1.html#ae2d40bc477e30ee574f5c5e2ba4e09c2',1,'IRHitachiAc1::setRaw()'],['../classIRHitachiAc424.html#adc24b8b984ff20cebdf81f65843bb283',1,'IRHitachiAc424::setRaw()'],['../classIRHitachiAc3.html#acff4faf79a30df7b7e7c183dec4153a7',1,'IRHitachiAc3::setRaw()'],['../classIRHitachiAc344.html#a8bf02e3923d881436a9578532ed3c024',1,'IRHitachiAc344::setRaw()'],['../classIRKelvinatorAC.html#a4a32bbf1a7ee8a089ea1e4e7c750433b',1,'IRKelvinatorAC::setRaw()'],['../classIRLgAc.html#a0da8ea4946826736f526386dc4d115cc',1,'IRLgAc::setRaw()'],['../classIRMideaAC.html#ab24da22531f5b2823551501642ec1b94',1,'IRMideaAC::setRaw()'],['../classIRMitsubishiAC.html#ac7bb79f91d5a9296c2b2b74aae1bfb53',1,'IRMitsubishiAC::setRaw()'],['../classIRMitsubishi136.html#abf0487a6fb163bf896e09b2cae6ee939',1,'IRMitsubishi136::setRaw()'],['../classIRMitsubishi112.html#a5c82f92d4a1ba1477ae7738ed5ade368',1,'IRMitsubishi112::setRaw()'],['../classIRMitsubishiHeavy152Ac.html#a8d42a2d87bf889ab4b233ea0c239f4c2',1,'IRMitsubishiHeavy152Ac::setRaw()'],['../classIRMitsubishiHeavy88Ac.html#abf01e448da9ec6e3b4512f58c3020299',1,'IRMitsubishiHeavy88Ac::setRaw()'],['../classIRNeoclimaAc.html#a607ea7df35572578ef86da7f505ab407',1,'IRNeoclimaAc::setRaw()'],['../classIRPanasonicAc.html#a63308883e8447aa5cdf7d29107be220f',1,'IRPanasonicAc::setRaw()'],['../classIRPanasonicAc32.html#a349462a31274f3785effdb249b485368',1,'IRPanasonicAc32::setRaw()'],['../classIRSamsungAc.html#a95377e8c73b51e73e78b51a2b2fa16d4',1,'IRSamsungAc::setRaw()'],['../classIRSanyoAc.html#a0fb38af499c140401396831665f862bd',1,'IRSanyoAc::setRaw()'],['../classIRSharpAc.html#a89b18c4ee29afa56ebed5fa32e578df7',1,'IRSharpAc::setRaw()'],['../classIRTcl112Ac.html#a5b0994f37df6846137b564eeb322f21b',1,'IRTcl112Ac::setRaw()'],['../classIRTechnibelAc.html#aed63ea8dd6ba08a13623be756462a997',1,'IRTechnibelAc::setRaw()'],['../classIRTecoAc.html#a1ef3423214f55a2e2695cc1180f94bcc',1,'IRTecoAc::setRaw()'],['../classIRToshibaAC.html#a58313e235136bf8f9e36dee59857cebc',1,'IRToshibaAC::setRaw()'],['../classIRTranscoldAc.html#ac8d5395411aa44efffe3bb1a068eaf4f',1,'IRTranscoldAc::setRaw()'],['../classIRTrotecESP.html#a4ffe5ee2559828a61af710bb7d892b6c',1,'IRTrotecESP::setRaw()'],['../classIRTrumaAc.html#a80eec53fa6df87174eb2212eee01f4fa',1,'IRTrumaAc::setRaw()'],['../classIRVestelAc.html#a617bf1f4b5596d5ad005237e8445c12e',1,'IRVestelAc::setRaw(const uint8_t *newState)'],['../classIRVestelAc.html#a5cc86216d33f228c0648d6c66526b0eb',1,'IRVestelAc::setRaw(const uint64_t newState)'],['../classIRVoltas.html#a5e946ed52c025643b4fc6b89619c90b5',1,'IRVoltas::setRaw()'],['../classIRWhirlpoolAc.html#afa9c66ea36c970f80c88a0489448ab5b',1,'IRWhirlpoolAc::setRaw()']]], - ['setroomtemp_3374',['setRoomTemp',['../classIRArgoAC.html#aec5a2edc6f414aab201a18defaa78c5b',1,'IRArgoAC']]], - ['setsave_3375',['setSave',['../classIRTecoAc.html#a0f7d203d44d4040be3a4b28fcd5dd34c',1,'IRTecoAc']]], - ['setsensor_3376',['setSensor',['../classIRDaikinESP.html#ae1c95533934fffb29eed3e9a27e8f636',1,'IRDaikinESP::setSensor()'],['../classIRDaikin152.html#af418dbf2bb79dab0193801167dfb5b78',1,'IRDaikin152::setSensor()'],['../classIRSanyoAc.html#a287d7b6c417151d303cb7d731ae349be',1,'IRSanyoAc::setSensor()']]], - ['setsensortemp_3377',['setSensorTemp',['../classIRCoolixAC.html#a9bf364245a05818ced3e8fb79d725d9c',1,'IRCoolixAC::setSensorTemp()'],['../classIREcoclimAc.html#a371062a46e92fec628be150bd0eada96',1,'IREcoclimAc::setSensorTemp()'],['../classIRMideaAC.html#a99270b5f488ebcf3b0ef73d9697399a0',1,'IRMideaAC::setSensorTemp()'],['../classIRSanyoAc.html#a22aa95f76076a3a9634609a27bbc1a7f',1,'IRSanyoAc::setSensorTemp()']]], - ['setsensortempraw_3378',['setSensorTempRaw',['../classIRCoolixAC.html#a425c3f5fb26330266156c133fb9104eb',1,'IRCoolixAC']]], - ['setsilent_3379',['setSilent',['../classIRMitsubishiHeavy152Ac.html#ab398b9ea2965f059903137ab088791c0',1,'IRMitsubishiHeavy152Ac']]], - ['setsleep_3380',['setSleep',['../classIRCarrierAc64.html#aa729dbef39afeeed8e83f26b927d3b21',1,'IRCarrierAc64::setSleep()'],['../classIRCoolixAC.html#af0108f5a5ae0049fd296307a7cef605e',1,'IRCoolixAC::setSleep()'],['../classIRDaikin128.html#ac43854ae557ec5582f2bfd9150fd57f2',1,'IRDaikin128::setSleep()'],['../classIRDaikin64.html#a7faf8e018179fed2b091a78d0d69a9b8',1,'IRDaikin64::setSleep()'],['../classIRDelonghiAc.html#aa74806e520b2b01a5b0c87ee32ce427e',1,'IRDelonghiAc::setSleep()'],['../classIRGoodweatherAc.html#a30987629a159c5112649f0973895c9c1',1,'IRGoodweatherAc::setSleep()'],['../classIRGreeAC.html#ac9c11817d15bc5c82732a901cd95e07c',1,'IRGreeAC::setSleep()'],['../classIRHaierAC.html#acb72b89fa53b565f9d32db4d8960f988',1,'IRHaierAC::setSleep()'],['../classIRHaierACYRW02.html#ad63834eb1a91ed974af988c385570457',1,'IRHaierACYRW02::setSleep()'],['../classIRHitachiAc1.html#a2ddb6a5d446b379884828e81df0806ee',1,'IRHitachiAc1::setSleep()'],['../classIRMideaAC.html#a1e008ff673450060bf39a65f1cb926e6',1,'IRMideaAC::setSleep()'],['../classIRNeoclimaAc.html#ad01a62fb369c6894333adb2fe0f52b79',1,'IRNeoclimaAc::setSleep()'],['../classIRSanyoAc.html#af0bb8ab84d7ee2e9bd1848582f54ff74',1,'IRSanyoAc::setSleep()'],['../classIRTechnibelAc.html#a2df311dc104af45a281c7d87512248d4',1,'IRTechnibelAc::setSleep()'],['../classIRTecoAc.html#a1e989a4fbd21c507ba13014b1e336ce2',1,'IRTecoAc::setSleep()'],['../classIRTrotecESP.html#a41c558c6937e61e77269139f96135420',1,'IRTrotecESP::setSleep()'],['../classIRVestelAc.html#a4b93d5585b7fb9d509e7fcf84e2b4abc',1,'IRVestelAc::setSleep()'],['../classIRVoltas.html#a64210225e6c0bf89944b4b12fda2c799',1,'IRVoltas::setSleep()'],['../classIRWhirlpoolAc.html#a6eaa24abc9eac64d9cbe79205a239474',1,'IRWhirlpoolAc::setSleep()']]], - ['setsleeptimer_3381',['setSleepTimer',['../classIRFujitsuAC.html#aebed4f746874057d7a8a50bbc88e74a5',1,'IRFujitsuAC']]], - ['setspecial_3382',['setSpecial',['../classIRSharpAc.html#ad7d2eca8b863569a1b17fdca4930d84f',1,'IRSharpAc']]], - ['setspeed_3383',['setSpeed',['../classIRTrotecESP.html#a268146141ce0358c2353c0ff59cfbad3',1,'IRTrotecESP']]], - ['setstartclock_3384',['setStartClock',['../classIRMitsubishiAC.html#a22d8c0dfd8098cb274d915476ed4caae',1,'IRMitsubishiAC']]], - ['setstatelength_3385',['setStateLength',['../classIRToshibaAC.html#a9ee4c6cff9be72455b6133a6280c65c4',1,'IRToshibaAC']]], - ['setstopclock_3386',['setStopClock',['../classIRMitsubishiAC.html#a228dafbf1ea3e9c3487506a5ca2ea274',1,'IRMitsubishiAC']]], - ['setsuper_3387',['setSuper',['../classIRWhirlpoolAc.html#a19a14674b0bae79d3aee81b8d48aacc7',1,'IRWhirlpoolAc']]], - ['setswing_3388',['setSwing',['../classIRCoolixAC.html#a8e8a76617d06d8ad8a74bc8af3512d95',1,'IRCoolixAC::setSwing()'],['../classIRFujitsuAC.html#a60ab8f21b5561e94a322b72a606468b9',1,'IRFujitsuAC::setSwing()'],['../classIRGoodweatherAc.html#a4d11a6885a5e7851e7c941b559159c35',1,'IRGoodweatherAc::setSwing()'],['../classIRHaierAC.html#a28c8bf6e0f45e074bf5eb13c25805627',1,'IRHaierAC::setSwing()'],['../classIRHaierACYRW02.html#ab9152dd09dec2db522dd96778f3b1556',1,'IRHaierACYRW02::setSwing()'],['../classIRSamsungAc.html#aaa7aaca1134e1565f527fcaa96a2fa6e',1,'IRSamsungAc::setSwing()'],['../classIRTechnibelAc.html#ad6c991f62d9ff127e662b8bbfe0376ca',1,'IRTechnibelAc::setSwing()'],['../classIRTecoAc.html#aaaeb10176c0b73e72fdb63b53fdcd5d0',1,'IRTecoAc::setSwing()'],['../classIRToshibaAC.html#aec1cf1c148197e22a30d578043ce1912',1,'IRToshibaAC::setSwing()'],['../classIRTranscoldAc.html#a8ee39074ca2ac9fc6546be09b5f67e6b',1,'IRTranscoldAc::setSwing()'],['../classIRVestelAc.html#a6c98427df6e5e8081a6dcbfcd436ff0d',1,'IRVestelAc::setSwing()'],['../classIRWhirlpoolAc.html#a6fec80710ba87599840e576f37e0c944',1,'IRWhirlpoolAc::setSwing()']]], - ['setswingh_3389',['setSwingH',['../classIRElectraAc.html#afcd40681003d57b4f1b652175fc276a8',1,'IRElectraAc::setSwingH()'],['../classIRHitachiAc1.html#af6cc42d52dfed89e23d3d180e7b69af9',1,'IRHitachiAc1::setSwingH()'],['../classIRHitachiAc344.html#a5651cb90ba9b87ef841f8987bad267d4',1,'IRHitachiAc344::setSwingH()'],['../classIRMitsubishi112.html#a99f97b04ac22a7942ea371f470faaf49',1,'IRMitsubishi112::setSwingH()'],['../classIRNeoclimaAc.html#a1aeebc60d7bbd0fb801ad88f639cb6a0',1,'IRNeoclimaAc::setSwingH()'],['../classIRVoltas.html#a6069eea71ca7e48326f8155df950e798',1,'IRVoltas::setSwingH()']]], - ['setswinghchange_3390',['setSwingHChange',['../classIRVoltas.html#acf7be0544dabb18ac29975b0f7ec9773',1,'IRVoltas']]], - ['setswinghorizontal_3391',['setSwingHorizontal',['../classIRDaikinESP.html#a5a7ec7b00811138879c636b03ae58606',1,'IRDaikinESP::setSwingHorizontal()'],['../classIRDaikin2.html#a75b6d6fb5bab0a9c951ad35e3e1d07c5',1,'IRDaikin2::setSwingHorizontal()'],['../classIRDaikin216.html#af8a1525cbe8d813c419d17ee6776a7d9',1,'IRDaikin216::setSwingHorizontal()'],['../classIRDaikin176.html#a9e63cf22410ffad45f6b308674079ee8',1,'IRDaikin176::setSwingHorizontal()'],['../classIRHitachiAc.html#ae70600f4a6f9fd7579221b11cd73062f',1,'IRHitachiAc::setSwingHorizontal()'],['../classIRKelvinatorAC.html#a2f1731f71bc74fb7ad6fec1210ecb1c7',1,'IRKelvinatorAC::setSwingHorizontal()'],['../classIRMitsubishiHeavy152Ac.html#a8713144e057424809292494a663dcd22',1,'IRMitsubishiHeavy152Ac::setSwingHorizontal()'],['../classIRMitsubishiHeavy88Ac.html#aaceffdd4e631fb2d4c404de0c8ff8cdb',1,'IRMitsubishiHeavy88Ac::setSwingHorizontal()'],['../classIRPanasonicAc.html#a32f3f07813165a39359887485dd87254',1,'IRPanasonicAc::setSwingHorizontal()'],['../classIRPanasonicAc32.html#a3361eb1f7e4da86290ad3f2c3e68340b',1,'IRPanasonicAc32::setSwingHorizontal()'],['../classIRTcl112Ac.html#aedc63c59a924d64048bc034a752ce7ed',1,'IRTcl112Ac::setSwingHorizontal()']]], - ['setswingtoggle_3392',['setSwingToggle',['../classIRHitachiAc1.html#a24ec128b6bb27cfc4be4dda9ece003d6',1,'IRHitachiAc1::setSwingToggle()'],['../classIRSharpAc.html#a0d397009ecf213111207fcebb12b95fb',1,'IRSharpAc::setSwingToggle()']]], - ['setswingv_3393',['setSwingV',['../classIRCarrierAc64.html#a61a3f9f29cabc0634a9a74fc2227d8c5',1,'IRCarrierAc64::setSwingV()'],['../classIRDaikin152.html#ad151bb85529d46f7e3e3e65dbf446ff0',1,'IRDaikin152::setSwingV()'],['../classIRElectraAc.html#ae5b33942670e0033cbb9b9c7a1524e93',1,'IRElectraAc::setSwingV()'],['../classIRHitachiAc1.html#a1bcc61a9a33a3ddec41d44d52e7df0d3',1,'IRHitachiAc1::setSwingV()'],['../classIRHitachiAc344.html#a3982f110de8ff9881cf4070902294285',1,'IRHitachiAc344::setSwingV()'],['../classIRMitsubishi136.html#a0d54bc6dd55da18b05f723a1b61e575e',1,'IRMitsubishi136::setSwingV()'],['../classIRMitsubishi112.html#ae33b469f1b67616f101f4a3df874fb78',1,'IRMitsubishi112::setSwingV()'],['../classIRNeoclimaAc.html#aa6e5f6f092f52c5c289642c9576c8bc0',1,'IRNeoclimaAc::setSwingV()'],['../classIRSanyoAc.html#a4d159778cd93caaecdb57d5c9417a2c9',1,'IRSanyoAc::setSwingV()'],['../classIRVoltas.html#aff014fc2f818a0bdb22cb89bd074c555',1,'IRVoltas::setSwingV()']]], - ['setswingvertical_3394',['setSwingVertical',['../classIRDaikinESP.html#a9200ef5751df5d488d7e08b138ec6356',1,'IRDaikinESP::setSwingVertical()'],['../classIRDaikin2.html#a35e72dc8e7967ee8ca8e84a6344468f3',1,'IRDaikin2::setSwingVertical()'],['../classIRDaikin216.html#a851484d5a37ceb1b0fc32e2e4bc2bcbb',1,'IRDaikin216::setSwingVertical()'],['../classIRDaikin160.html#a1683a255393f233d3e5b46d186d62881',1,'IRDaikin160::setSwingVertical()'],['../classIRDaikin128.html#a961aceb41145001003a50c5988f04c4d',1,'IRDaikin128::setSwingVertical()'],['../classIRDaikin64.html#afca186067111fa7181916a218c2800ec',1,'IRDaikin64::setSwingVertical()'],['../classIRGreeAC.html#a1b571dea8a5bf553554e45074f3a01c0',1,'IRGreeAC::setSwingVertical()'],['../classIRHitachiAc.html#a7e3ee78e4835fe402095b544c1e52f9f',1,'IRHitachiAc::setSwingVertical()'],['../classIRKelvinatorAC.html#a7334fbf8f2a67b33562ecea6b6e66f0e',1,'IRKelvinatorAC::setSwingVertical()'],['../classIRMitsubishiHeavy152Ac.html#aea3ac937feff058feef321bfe7357145',1,'IRMitsubishiHeavy152Ac::setSwingVertical()'],['../classIRMitsubishiHeavy88Ac.html#a9406e1890483703afb7b383e1363f8ec',1,'IRMitsubishiHeavy88Ac::setSwingVertical()'],['../classIRPanasonicAc.html#a48f31b1f85c92fac22f85a1aa8074c6e',1,'IRPanasonicAc::setSwingVertical()'],['../classIRPanasonicAc32.html#ab6af790d2828a64e5b5cb70bf818a578',1,'IRPanasonicAc32::setSwingVertical()'],['../classIRTcl112Ac.html#a53f702dcc66de81f6e7e03d538a6946d',1,'IRTcl112Ac::setSwingVertical()']]], - ['setswingvstep_3395',['setSwingVStep',['../classIRCoolixAC.html#af0659a8a63004a5f9833ca3c565afff4',1,'IRCoolixAC::setSwingVStep()'],['../classIRMideaAC.html#a0dc0122ffcc2fccba4f044fbf755b924',1,'IRMideaAC::setSwingVStep()']]], - ['setswingvtoggle_3396',['setSwingVToggle',['../classIRCoronaAc.html#a7cb31da86353ec637239cb747890bd7b',1,'IRCoronaAc::setSwingVToggle()'],['../classIRHitachiAc424.html#a220fd85bd213dd13ee9c609d4d7d20c1',1,'IRHitachiAc424::setSwingVToggle()'],['../classIRMideaAC.html#a7fce182bff4f5bc2c6679b20f344837b',1,'IRMideaAC::setSwingVToggle()']]], - ['settemp_3397',['setTemp',['../classIRAirwellAc.html#a30883e7b4f7933b6fa2258736995d295',1,'IRAirwellAc::setTemp()'],['../classIRAmcorAc.html#af4b2c476b76534687f14e9be963e9522',1,'IRAmcorAc::setTemp()'],['../classIRArgoAC.html#abad424a3cf1894715baa03780fa9b53b',1,'IRArgoAC::setTemp()'],['../classIRCarrierAc64.html#a79e193514ac6d07be537a78887426311',1,'IRCarrierAc64::setTemp()'],['../classIRCoolixAC.html#a1d4b4fb810b9f3835ee585b2aa66088f',1,'IRCoolixAC::setTemp()'],['../classIRCoronaAc.html#a9b1d5223cbb6ae6ba07f32871b27d9c6',1,'IRCoronaAc::setTemp()'],['../classIRDaikinESP.html#a631db8830684b745711667aed73a6433',1,'IRDaikinESP::setTemp()'],['../classIRDaikin2.html#a7f752c785fe180d5038e35bb07ff965a',1,'IRDaikin2::setTemp()'],['../classIRDaikin216.html#a8735732d3264eec119127d4353990669',1,'IRDaikin216::setTemp()'],['../classIRDaikin160.html#abedd99ed838478a7ef856537c6fabb82',1,'IRDaikin160::setTemp()'],['../classIRDaikin176.html#acb3b296f4c87a5a37258c666ef886ff3',1,'IRDaikin176::setTemp()'],['../classIRDaikin128.html#aba143a1b80e6de7d1c7b987eeda6b0db',1,'IRDaikin128::setTemp()'],['../classIRDaikin152.html#a97567ade1c0262b3f95f23f171936d8c',1,'IRDaikin152::setTemp()'],['../classIRDaikin64.html#adb1eb657998c05a143365755da0a1e81',1,'IRDaikin64::setTemp()'],['../classIRDelonghiAc.html#a08cc3e32c50277e3f986ed2c3945ce0d',1,'IRDelonghiAc::setTemp()'],['../classIREcoclimAc.html#a4e176cd0def4fccc15bac1bc1dcf023b',1,'IREcoclimAc::setTemp()'],['../classIRElectraAc.html#a5f986d9a376b6d5348fcb021d66d235b',1,'IRElectraAc::setTemp()'],['../classIRFujitsuAC.html#add8b65e2f16c36c6ccdf00bd19c34366',1,'IRFujitsuAC::setTemp()'],['../classIRGoodweatherAc.html#a8b1c90f69a3a2e412020d07809d180cc',1,'IRGoodweatherAc::setTemp()'],['../classIRGreeAC.html#a1890c6d134183beb89b791ec565623bb',1,'IRGreeAC::setTemp()'],['../classIRHaierAC.html#a9fb2a375cc1b8692fe4d5dcdd765cc46',1,'IRHaierAC::setTemp()'],['../classIRHaierACYRW02.html#a80170879e7bd391e360d41f18f6fa52b',1,'IRHaierACYRW02::setTemp()'],['../classIRHitachiAc.html#a9f416886ae341cdb6d449572e4d168a9',1,'IRHitachiAc::setTemp()'],['../classIRHitachiAc1.html#a10ba2dcbe447e505cbaa1a9b63f4823c',1,'IRHitachiAc1::setTemp()'],['../classIRHitachiAc424.html#a5cca8f31d07ce87b6e4a0ff0c22b1be8',1,'IRHitachiAc424::setTemp()'],['../classIRKelvinatorAC.html#ab098a376c7393d377abcc6c1f504d372',1,'IRKelvinatorAC::setTemp()'],['../classIRLgAc.html#ad9924a8bc9737ec6007d76ec47b34142',1,'IRLgAc::setTemp()'],['../classIRMideaAC.html#a42f79e73f418d5267eed7ba5b0e266f5',1,'IRMideaAC::setTemp()'],['../classIRMitsubishiAC.html#a0a043ce8a1a9e27ae3ac84be5b207d72',1,'IRMitsubishiAC::setTemp()'],['../classIRMitsubishi136.html#ac19c9234a5f65cae50b64d56c4bebb8f',1,'IRMitsubishi136::setTemp()'],['../classIRMitsubishi112.html#a03ba44a6d2f152b7afade423f12c8726',1,'IRMitsubishi112::setTemp()'],['../classIRMitsubishiHeavy152Ac.html#ad4f9ae94b8ab1fff8fc99b8d7818a8fe',1,'IRMitsubishiHeavy152Ac::setTemp()'],['../classIRMitsubishiHeavy88Ac.html#aa4a92e5334aebdca5d2b26b642e9b9e8',1,'IRMitsubishiHeavy88Ac::setTemp()'],['../classIRNeoclimaAc.html#ae9d6cd2de77ac324550d69cfc80b0e3f',1,'IRNeoclimaAc::setTemp()'],['../classIRPanasonicAc.html#a58376c311177e701333f4915515d49f1',1,'IRPanasonicAc::setTemp()'],['../classIRPanasonicAc32.html#a697a5816a4bed187e2245fe626727395',1,'IRPanasonicAc32::setTemp()'],['../classIRSamsungAc.html#a94a71e82321343220836aa614b231bd0',1,'IRSamsungAc::setTemp()'],['../classIRSanyoAc.html#ab1346677e0e9f6828629f3f7d50ef656',1,'IRSanyoAc::setTemp()'],['../classIRSharpAc.html#a151f88799cdab6fda4cfef83b30e5917',1,'IRSharpAc::setTemp()'],['../classIRTcl112Ac.html#a110bae0201b63db0409c352dd8d62786',1,'IRTcl112Ac::setTemp()'],['../classIRTechnibelAc.html#add05b89590340e891e2e1e666c5d033b',1,'IRTechnibelAc::setTemp()'],['../classIRTecoAc.html#a405106cb572dac338d79da48fe7a7cb3',1,'IRTecoAc::setTemp()'],['../classIRToshibaAC.html#a923fad1f637e1851a77a063978994604',1,'IRToshibaAC::setTemp()'],['../classIRTranscoldAc.html#aa183d51c121c70704f6b0a5957911986',1,'IRTranscoldAc::setTemp()'],['../classIRTrotecESP.html#ad467e7fe9ff61fec4ec10b367c0f9279',1,'IRTrotecESP::setTemp()'],['../classIRTrumaAc.html#ae6cb4a1fa7671a9162145b6a4e8bd08b',1,'IRTrumaAc::setTemp()'],['../classIRVestelAc.html#a8c4eddfba4edfa16e317e12677736756',1,'IRVestelAc::setTemp()'],['../classIRVoltas.html#a328a8ed84e89d44c13ca6e641c4b6f97',1,'IRVoltas::setTemp()'],['../classIRWhirlpoolAc.html#afff1ae75ffa362abb791c97c20023755',1,'IRWhirlpoolAc::setTemp()']]], - ['settempraw_3398',['setTempRaw',['../classIRCoolixAC.html#ae9371280e92daa8e1441523026f1ef0a',1,'IRCoolixAC']]], - ['settempunit_3399',['setTempUnit',['../classIRDelonghiAc.html#a4e3681e49065ba232577ca05157a5ef2',1,'IRDelonghiAc::setTempUnit()'],['../classIRTechnibelAc.html#a48ea1ac452c84b0a6c705a5c341c8ad5',1,'IRTechnibelAc::setTempUnit()']]], - ['settime_3400',['setTime',['../classIRArgoAC.html#ae285801cde19da82e128098097624852',1,'IRArgoAC::setTime()'],['../classIRVestelAc.html#afc5dedf83855a8fea8b29494bfb07d64',1,'IRVestelAc::setTime()']]], - ['settimer_3401',['setTimer',['../classIRGreeAC.html#a84debd45d2f2ba221f825257e0bc6294',1,'IRGreeAC::setTimer()'],['../classIRMitsubishiAC.html#acb56c91ef0db6ace7782d356af2dcd4d',1,'IRMitsubishiAC::setTimer()'],['../classIRSharpAc.html#a8782543c33e48af0a09e548276eb6413',1,'IRSharpAc::setTimer()'],['../classIRTechnibelAc.html#a940a048710432db01bcd1be34ea5324e',1,'IRTechnibelAc::setTimer()'],['../classIRTecoAc.html#a88a84e22d53a204da754c04210fadd04',1,'IRTecoAc::setTimer()'],['../classIRTrotecESP.html#a92bfed0f247b21c77737b720151dbb88',1,'IRTrotecESP::setTimer()'],['../classIRVestelAc.html#a7c66e1ec13c827714eaa2233f50f072b',1,'IRVestelAc::setTimer()']]], - ['settimeractive_3402',['setTimerActive',['../classIRVestelAc.html#a77f78e534b19a8dca776b17aa06739aa',1,'IRVestelAc']]], - ['settimerenabled_3403',['setTimerEnabled',['../classIRGreeAC.html#a1002d6dfe409076fa7ef252589d5043c',1,'IRGreeAC::setTimerEnabled()'],['../classIRTechnibelAc.html#a0fc61ce2941376e03d8285495e1fe2b2',1,'IRTechnibelAc::setTimerEnabled()']]], - ['settimertype_3404',['setTimerType',['../classIRFujitsuAC.html#a58670cab1b422527897da9e5ae821b0c',1,'IRFujitsuAC']]], - ['settolerance_3405',['setTolerance',['../classIRrecv.html#aa091c449db70c65fd0221669df7438ea',1,'IRrecv']]], - ['setturbo_3406',['setTurbo',['../classIRCoolixAC.html#a857c14452f80d3d332729b2bdd04f92d',1,'IRCoolixAC::setTurbo()'],['../classIRDaikin64.html#a734cc23f79a4de4099a4ceb1aff14762',1,'IRDaikin64::setTurbo()'],['../classIRElectraAc.html#adb40e95465788b03e4cb845bd481f7ed',1,'IRElectraAc::setTurbo()'],['../classIRGoodweatherAc.html#a7827fc5a8f85b284c0121727dba34f11',1,'IRGoodweatherAc::setTurbo()'],['../classIRGreeAC.html#ae873023ad81f7dcb12ee5b061e160bea',1,'IRGreeAC::setTurbo()'],['../classIRHaierACYRW02.html#aba5f028ee1ebf7be2d4de5a66237f01b',1,'IRHaierACYRW02::setTurbo()'],['../classIRKelvinatorAC.html#a7d9c44970e85f23c83723f27e96260ee',1,'IRKelvinatorAC::setTurbo()'],['../classIRMitsubishiHeavy152Ac.html#a275e8ae44e2018a848b3e8f0893c8023',1,'IRMitsubishiHeavy152Ac::setTurbo()'],['../classIRMitsubishiHeavy88Ac.html#a39ac892d349180327cce92c6f82bea30',1,'IRMitsubishiHeavy88Ac::setTurbo()'],['../classIRNeoclimaAc.html#aa2a9563d9e3c5c95dfa512c0bb87e16f',1,'IRNeoclimaAc::setTurbo()'],['../classIRSharpAc.html#a8a184ae8eeb07704b9b69849421e3172',1,'IRSharpAc::setTurbo()'],['../classIRTcl112Ac.html#a99e3b3e2f0cc627b6d872d04b35d6230',1,'IRTcl112Ac::setTurbo()'],['../classIRToshibaAC.html#a5d1d6b00a9b99bf29496fbd6af5cce31',1,'IRToshibaAC::setTurbo()'],['../classIRVestelAc.html#afa762d0fa63ecc7444c1c107f8f07cdb',1,'IRVestelAc::setTurbo()'],['../classIRVoltas.html#ac7418f197deb96c0fef5d2c36732f5af',1,'IRVoltas::setTurbo()']]], - ['setturbotoggle_3407',['setTurboToggle',['../classIRMideaAC.html#a05b58666391bb204cef6fff288ed7660',1,'IRMideaAC']]], - ['settype_3408',['setType',['../classIREcoclimAc.html#a0b196d1f8079d5336de11ba6ddf0a039',1,'IREcoclimAc::setType()'],['../classIRMideaAC.html#a89a6990ce864d111ccb97a1d37acc379',1,'IRMideaAC::setType()']]], - ['setunknownthreshold_3409',['setUnknownThreshold',['../classIRrecv.html#a02693553aad1decd67bdae60402e48bf',1,'IRrecv']]], - ['setusecelsius_3410',['setUseCelsius',['../classIRMideaAC.html#a1eeb72ddd2b9867c2f9c392080b9c1ed',1,'IRMideaAC']]], - ['setusefahrenheit_3411',['setUseFahrenheit',['../classIRGreeAC.html#af559afaa9da5fd27cdb516355da67bd6',1,'IRGreeAC']]], - ['setvane_3412',['setVane',['../classIRMitsubishiAC.html#abb247f1dca5cf23a7b8a16852dcf32f1',1,'IRMitsubishiAC']]], - ['setweeklytimerenable_3413',['setWeeklyTimerEnable',['../classIRDaikinESP.html#a0db67d46b13acfad9b94c7e4691777b8',1,'IRDaikinESP']]], - ['setweeklytimerenabled_3414',['setWeeklyTimerEnabled',['../classIRMitsubishiAC.html#ac872db2785dd08da86dfff04921b7df3',1,'IRMitsubishiAC']]], - ['setwidevane_3415',['setWideVane',['../classIRMitsubishiAC.html#a02b2b3d7456e6123c60dca70de346c25',1,'IRMitsubishiAC']]], - ['setwifi_3416',['setWiFi',['../classIRGreeAC.html#afde745ceaa97f9608195b2ba9fce6c5c',1,'IRGreeAC::setWiFi()'],['../classIRVoltas.html#a3aa24f471e306abfe7fd7af2b74c7ca0',1,'IRVoltas::setWifi()']]], - ['setxfan_3417',['setXFan',['../classIRGreeAC.html#af465c607222fa433f54c2ce56ced2474',1,'IRGreeAC::setXFan()'],['../classIRKelvinatorAC.html#af02da81109109cf1cb44057fd1a40164',1,'IRKelvinatorAC::setXFan()']]], - ['setzonefollow_3418',['setZoneFollow',['../classIRCoolixAC.html#a0c0f39d8e2e79d8259000695263ec3fa',1,'IRCoolixAC']]], - ['sharp_3419',['sharp',['../classIRac.html#a13494c43813e857bdeaa2cc95e2cb5bd',1,'IRac::sharp()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaad63db67a2284cd7e3ffe382b6d6ea82',1,'SHARP(): IRremoteESP8266.h']]], - ['sharp_5fac_3420',['SHARP_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada353a9d71906702ae10aa4f803a04ca68',1,'IRremoteESP8266.h']]], - ['sharp_5fac_5fremote_5fmodel_5ft_3421',['sharp_ac_remote_model_t',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7',1,'IRsend.h']]], - ['sharpprotocol_3422',['SharpProtocol',['../unionSharpProtocol.html',1,'']]], - ['sherwood_3423',['SHERWOOD',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1412522651b0c8f1a35e1db3807466bb',1,'IRremoteESP8266.h']]], - ['shortcode_3424',['shortcode',['../unionFujitsuProtocol.html#a37fb86943f1b72293a8ac515b42ea4a0',1,'FujitsuProtocol']]], - ['shortmsg_3425',['ShortMsg',['../unionToshibaProtocol.html#ad82a92de12d4bf814dd93cbde958a9b8',1,'ToshibaProtocol']]], - ['sig_3426',['Sig',['../unionMitsubishi152Protocol.html#a3e212768123e252ab4c17cec54084ddc',1,'Mitsubishi152Protocol::Sig()'],['../unionMitsubishi88Protocol.html#a7334ae1a2beac4e7db68817d715780f8',1,'Mitsubishi88Protocol::Sig()']]], - ['sign_3427',['Sign',['../unionLGProtocol.html#a0ce79a58c9afe05d8f88a246f1e4e38c',1,'LGProtocol']]], - ['signature_3428',['Signature',['../unionVestelProtocol.html#a04f21c296b64b6446e084286042cc43e',1,'VestelProtocol']]], - ['silent_3429',['Silent',['../unionMitsubishi152Protocol.html#af3a374268ed6de973571de1104a1e3b6',1,'Mitsubishi152Protocol']]], - ['sleep_3430',['Sleep',['../unionCarrierProtocol.html#a957ac027dec4e1942d88ac8f7bcbc767',1,'CarrierProtocol::Sleep()'],['../unionDaikin128Protocol.html#a6d8c864358deaac3e8af9e3c7160acdb',1,'Daikin128Protocol::Sleep()'],['../unionDaikin64Protocol.html#ad97e50c0e3dee468254d84f0ffeab71a',1,'Daikin64Protocol::Sleep()'],['../unionDelonghiProtocol.html#a8ae7e6b8982693fc0cff79dcc5352cc5',1,'DelonghiProtocol::Sleep()'],['../unionGoodweatherProtocol.html#ab5b363c97de0b9ea362335914202aa5d',1,'GoodweatherProtocol::Sleep()'],['../unionGreeProtocol.html#a1ea579a0c99eb1dc8fd72867519ab258',1,'GreeProtocol::Sleep()'],['../unionHaierProtocol.html#a88942d48d868ff5697040d5a89f93099',1,'HaierProtocol::Sleep()'],['../unionHaierYRW02Protocol.html#a0b0ad77222892e9fccf122fcee95d87d',1,'HaierYRW02Protocol::Sleep()'],['../unionHitachi1Protocol.html#a6f7f771174da0e309c817d1e1b8dad04',1,'Hitachi1Protocol::Sleep()'],['../unionMideaProtocol.html#aeea5e2520e4cd1773c1eddc8a84af2d3',1,'MideaProtocol::Sleep()'],['../unionNeoclimaProtocol.html#ac43619a2a36e6e904f1ccfc727705d0f',1,'NeoclimaProtocol::Sleep()'],['../unionSanyoProtocol.html#a30ddc4048f18df21a0ba9a1ceb6ed04f',1,'SanyoProtocol::Sleep()'],['../unionTechnibelProtocol.html#a0b2415893ee58c78aab7d5da9dc0ac9a',1,'TechnibelProtocol::Sleep()'],['../unionTecoProtocol.html#a1e154eb394b329d0a4bcda1f99f10b3a',1,'TecoProtocol::Sleep()'],['../unionTrotecProtocol.html#a7e608cfd2be86c98ef165d82224d12e0',1,'TrotecProtocol::Sleep()'],['../unionVoltasProtocol.html#a1a47a7e57717d28e610e97b40e86b1ca',1,'VoltasProtocol::Sleep()'],['../unionWhirlpoolProtocol.html#aa8c066a535606fca820875eb16275b04',1,'WhirlpoolProtocol::Sleep()'],['../structstdAc_1_1state__t.html#a94fa6098d7422292a1c6943973cd106a',1,'stdAc::state_t::sleep()']]], - ['sleepflag_3431',['sleepFlag',['../classIRCoolixAC.html#a26560e04d1f77830e40e5570845b9e06',1,'IRCoolixAC']]], - ['sleeptimer_3432',['SleepTimer',['../unionDaikin2Protocol.html#a08f4a54ef2100e9afc8d360d6f1f809b',1,'Daikin2Protocol']]], - ['sony_3433',['SONY',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada72d58193d4d25517202d22b7e57a65c3',1,'IRremoteESP8266.h']]], - ['sony_5f38k_3434',['SONY_38K',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0027bcfbb78c0c2b951dfff1102a027b',1,'IRremoteESP8266.h']]], - ['space_3435',['space',['../classIRsend.html#a0417b10d4e16718a87f8b2062a7d04a1',1,'IRsend']]], - ['special_3436',['Special',['../unionSharpProtocol.html#a6a7b512b5cfb2103b562ba7ceb8ab318',1,'SharpProtocol']]], - ['special_5fstate_3437',['special_state',['../classIRTranscoldAc.html#a634858a8d3987fa95cb355083c1276da',1,'IRTranscoldAc']]], - ['start_3438',['start',['../classIRtimer.html#aaa087b8688ff8150e0fc1ec6d5c4a52a',1,'IRtimer::start()'],['../classTimerMs.html#a15ad2e08a5931397391d48f040722f65',1,'TimerMs::start()']]], - ['startclock_3439',['StartClock',['../unionMitsubishi144Protocol.html#a2b3fcf0371639b6c73c152c671ae3b66',1,'Mitsubishi144Protocol']]], - ['state_3440',['state',['../classdecode__results.html#aaeb4b1b2e950bdd181582c385b2f4305',1,'decode_results']]], - ['state_5ft_3441',['state_t',['../structstdAc_1_1state__t.html',1,'stdAc']]], - ['statereset_3442',['stateReset',['../classIRAirwellAc.html#a82591a86e031ef30b58f9565b6233953',1,'IRAirwellAc::stateReset()'],['../classIRAmcorAc.html#a018ab4ca4d738d848d3388ea1300b83b',1,'IRAmcorAc::stateReset()'],['../classIRArgoAC.html#af34a99bc37c4496c9fd68856aa065a13',1,'IRArgoAC::stateReset()'],['../classIRCarrierAc64.html#abe58c8f97ab4c34fd0cf198b07589694',1,'IRCarrierAc64::stateReset()'],['../classIRCoolixAC.html#a0048b9ef226f8f4312cf8221ee3123f8',1,'IRCoolixAC::stateReset()'],['../classIRCoronaAc.html#a47726d4ff93528bd8a5a6f1b47ba7141',1,'IRCoronaAc::stateReset()'],['../classIRDaikinESP.html#a49f6b90336225f7e94b8aefd066e1993',1,'IRDaikinESP::stateReset()'],['../classIRDaikin2.html#a93928b703f9b72218f2a607879cb401d',1,'IRDaikin2::stateReset()'],['../classIRDaikin216.html#a8456bd9981063019d48c59e5050680ed',1,'IRDaikin216::stateReset()'],['../classIRDaikin160.html#a72f9f1526907f1076348666eb9151f75',1,'IRDaikin160::stateReset()'],['../classIRDaikin176.html#a7f0b4b6c0a4a8b0680a8b8cd0eda8127',1,'IRDaikin176::stateReset()'],['../classIRDaikin128.html#ab604a7594c3b0131c5d977e3fc3b3565',1,'IRDaikin128::stateReset()'],['../classIRDaikin152.html#adde28c0b529d4a32dc0b702746026b6a',1,'IRDaikin152::stateReset()'],['../classIRDaikin64.html#a5fd1412719c648212978d80474f256e4',1,'IRDaikin64::stateReset()'],['../classIRDelonghiAc.html#acadbed22a27f2376c1e8424dec0caa35',1,'IRDelonghiAc::stateReset()'],['../classIREcoclimAc.html#a2b88c0636f3947e48fc4aa48ade74e2e',1,'IREcoclimAc::stateReset()'],['../classIRElectraAc.html#ab8035c14158fcf3758f46f6976b814f7',1,'IRElectraAc::stateReset()'],['../classIRFujitsuAC.html#a603a0e1870f406e4e746a7bb4c37fb70',1,'IRFujitsuAC::stateReset()'],['../classIRGoodweatherAc.html#ae7f8873ad58e553dc89307220628bebf',1,'IRGoodweatherAc::stateReset()'],['../classIRGreeAC.html#a61356a0dfb4656ac438c3629c591b165',1,'IRGreeAC::stateReset()'],['../classIRHaierAC.html#a62fbae1d2bac01ac3a2194274aa839d9',1,'IRHaierAC::stateReset()'],['../classIRHaierACYRW02.html#a106e7ffa0d69cdf976087c6e190d03ea',1,'IRHaierACYRW02::stateReset()'],['../classIRHitachiAc.html#a0564c00c60e64e57e20f3c1a4bd3d894',1,'IRHitachiAc::stateReset()'],['../classIRHitachiAc1.html#a9764b329d982d018b15098b3044f9596',1,'IRHitachiAc1::stateReset()'],['../classIRHitachiAc424.html#afd8d5b21086b34cdc07b498157240f8f',1,'IRHitachiAc424::stateReset()'],['../classIRHitachiAc3.html#a7bdcddf9c7f85b7cb43a92198e422549',1,'IRHitachiAc3::stateReset()'],['../classIRHitachiAc344.html#a481cbfb0420ba884a7eb4c2ba82bd666',1,'IRHitachiAc344::stateReset()'],['../classIRKelvinatorAC.html#ad6fefe85023c3fc318b0e45924874f9f',1,'IRKelvinatorAC::stateReset()'],['../classIRLgAc.html#a5959000c9f0b2cf64742d6a2f1c4c9b9',1,'IRLgAc::stateReset()'],['../classIRMideaAC.html#acc584e07406e1811acfb26f6cd5383cd',1,'IRMideaAC::stateReset()'],['../classIRMitsubishiAC.html#a8da4be360c8e2fd3a5a40cb4049b5d84',1,'IRMitsubishiAC::stateReset()'],['../classIRMitsubishi136.html#a67556dab7ed42c68a274f4f24ecc35bb',1,'IRMitsubishi136::stateReset()'],['../classIRMitsubishi112.html#a9c601ba34e10d5c63886c2c5b405d9ae',1,'IRMitsubishi112::stateReset()'],['../classIRMitsubishiHeavy152Ac.html#a0b239cacd3a8a96f2e3d7047f26119da',1,'IRMitsubishiHeavy152Ac::stateReset()'],['../classIRMitsubishiHeavy88Ac.html#a1cf118f435c99372c89a140a79c67f1f',1,'IRMitsubishiHeavy88Ac::stateReset()'],['../classIRNeoclimaAc.html#a5ce32a6e6195b246696cb609994f3762',1,'IRNeoclimaAc::stateReset()'],['../classIRPanasonicAc.html#a9a9fbf531f04c486edf913c382351b2b',1,'IRPanasonicAc::stateReset()'],['../classIRPanasonicAc32.html#ac38e1daa7107f90d2d1984940c72c4a1',1,'IRPanasonicAc32::stateReset()'],['../classIRSamsungAc.html#a52186401655966b3103d3d73fb77e7f0',1,'IRSamsungAc::stateReset()'],['../classIRSanyoAc.html#aeba68a833d8756a9a6069edc3fef58cb',1,'IRSanyoAc::stateReset()'],['../classIRSharpAc.html#aa151c704ba4f5690a7cfadaf90c4b60d',1,'IRSharpAc::stateReset()'],['../classIRTcl112Ac.html#a049f475c1af7b62b9f3482dcf9e66d4a',1,'IRTcl112Ac::stateReset()'],['../classIRTechnibelAc.html#ae72f22533fc9b05169ac66ac034ca4d8',1,'IRTechnibelAc::stateReset()'],['../classIRTecoAc.html#ad53e6f3d3693ee6efb419326a3d4c492',1,'IRTecoAc::stateReset()'],['../classIRToshibaAC.html#a3d3c3df261b4db7a9d831c94cc206e8a',1,'IRToshibaAC::stateReset()'],['../classIRTranscoldAc.html#a88018c184feed75774ad01a41fdb3e69',1,'IRTranscoldAc::stateReset()'],['../classIRTrotecESP.html#a86c3415d8c1880c325bc22c2c4ca44e0',1,'IRTrotecESP::stateReset()'],['../classIRTrumaAc.html#a8a028e5859735ecfd11cbef649dd51d3',1,'IRTrumaAc::stateReset()'],['../classIRVestelAc.html#a921100234f5751f8b94d9673a5d217f9',1,'IRVestelAc::stateReset()'],['../classIRVoltas.html#a07cde80e35d990733c41d6b0e4dcafda',1,'IRVoltas::stateReset()'],['../classIRWhirlpoolAc.html#a371a6f48a2f4f66e4243dacbbf4471be',1,'IRWhirlpoolAc::stateReset()']]], - ['stdac_3443',['stdAc',['../namespacestdAc.html',1,'']]], - ['stephoriz_3444',['stepHoriz',['../classIRFujitsuAC.html#a53c48bc1f32c849263a3aa86ff06b1d4',1,'IRFujitsuAC']]], - ['stepvert_3445',['stepVert',['../classIRFujitsuAC.html#a942f106c27ce04094b5b615f2e174022',1,'IRFujitsuAC']]], - ['stopclock_3446',['StopClock',['../unionMitsubishi144Protocol.html#a827da42e7df246a6849223430412e051',1,'Mitsubishi144Protocol']]], - ['string_3447',['String',['../IRremoteESP8266_8h.html#afbeda3fd1bdc8c37d01bdf9f5c8274ff',1,'IRremoteESP8266.h']]], - ['strtobool_3448',['strToBool',['../classIRac.html#a3dba736fe25bd3a3a47b9ec7dae51728',1,'IRac']]], - ['strtodecodetype_3449',['strToDecodeType',['../IRutils_8cpp.html#ae1614f315c1ebc44eaf1ac62055cc1ff',1,'strToDecodeType(const char *const str): IRutils.cpp'],['../IRutils_8h.html#a10b9312e4ac9c96d895af83db01ed72e',1,'strToDecodeType(const char *str): IRutils.cpp']]], - ['strtofanspeed_3450',['strToFanspeed',['../classIRac.html#a7173b12c155d04dd1db07a055f4ecb03',1,'IRac']]], - ['strtomodel_3451',['strToModel',['../classIRac.html#a7036fbbb918d644a98b5efa16374a256',1,'IRac']]], - ['strtoopmode_3452',['strToOpmode',['../classIRac.html#a251fa76ddacc84d2655bac723b7dea28',1,'IRac']]], - ['strtoswingh_3453',['strToSwingH',['../classIRac.html#a294d6040909519f465945245df56e56d',1,'IRac']]], - ['strtoswingv_3454',['strToSwingV',['../classIRac.html#a538c861d79afabb11fb8becedd3962f8',1,'IRac']]], - ['success_3455',['success',['../structmatch__result__t.html#a13fe18ae6cf89364df443a64295b2f90',1,'match_result_t']]], - ['sum_3456',['Sum',['../unionAmcorProtocol.html#a108cf161abbbdd7ae4178f70066e8ae6',1,'AmcorProtocol::Sum()'],['../unionArgoProtocol.html#ab0ec3039d81a3a2a6c8b44f5c64d2fae',1,'ArgoProtocol::Sum()'],['../unionCarrierProtocol.html#acbbf207e7a0e79d74713e6f8598c16c2',1,'CarrierProtocol::Sum()'],['../unionDaikin152Protocol.html#ab9d2826560480612000ff57967c949ce',1,'Daikin152Protocol::Sum()'],['../unionDaikin64Protocol.html#add19fb01e106fe9dd759a33870378b64',1,'Daikin64Protocol::Sum()'],['../unionDelonghiProtocol.html#a9f7a2ecd94db83a8673e8929b373a036',1,'DelonghiProtocol::Sum()'],['../unionElectraProtocol.html#a06f949386cbc460b017f5a2da4a2c557',1,'ElectraProtocol::Sum()'],['../unionGreeProtocol.html#a7502111538873c23d70129b77a26019e',1,'GreeProtocol::Sum()'],['../unionHaierProtocol.html#a5842a170e3cdd0ad823cf244c7b8dd51',1,'HaierProtocol::Sum()'],['../unionHaierYRW02Protocol.html#a656449e6901b3333ca0efe4a2e662fc7',1,'HaierYRW02Protocol::Sum()'],['../unionHitachiProtocol.html#a7917d5fe64dc17c4240286d113edffbf',1,'HitachiProtocol::Sum()'],['../unionHitachi1Protocol.html#af8695d17dd292292c1a395fca1052d0d',1,'Hitachi1Protocol::Sum()'],['../unionLGProtocol.html#a8f527a8f4b6235ca01bb96ed9cce8fcd',1,'LGProtocol::Sum()'],['../unionMideaProtocol.html#a3d4afe5411a769c48e8bfaa3a9e8e84c',1,'MideaProtocol::Sum()'],['../unionMitsubishi144Protocol.html#a50ccc136c9cb813e62731c0e91e1bb18',1,'Mitsubishi144Protocol::Sum()'],['../unionMitsubishi112Protocol.html#a167d9e324351844304624224ebd6c54e',1,'Mitsubishi112Protocol::Sum()'],['../unionNeoclimaProtocol.html#aa1be79f892a05e91733539899ce243d1',1,'NeoclimaProtocol::Sum()'],['../unionSanyoProtocol.html#a4873098c3fca0d6f9b43ba1ecdfb5252',1,'SanyoProtocol::Sum()'],['../unionSharpProtocol.html#a4cfdeea6c7a9b0e808e1b6dcf1584710',1,'SharpProtocol::Sum()'],['../unionTcl112Protocol.html#a5d46a94c80989ecfd47c86028ab69662',1,'Tcl112Protocol::Sum()'],['../unionTechnibelProtocol.html#ac749e8bb30f13d62819204deb36256bb',1,'TechnibelProtocol::Sum()'],['../unionTrotecProtocol.html#a6b4daa2398f213d1002d48e1371cd6c0',1,'TrotecProtocol::Sum()'],['../unionTrumaProtocol.html#a3d8915bbafe0bb431a89310ff8a43653',1,'TrumaProtocol::Sum()']]], - ['sum1_3457',['Sum1',['../unionDaikinESPProtocol.html#a149da481f13ce5a29ce31a3dce8e8cb0',1,'DaikinESPProtocol::Sum1()'],['../unionDaikin2Protocol.html#ab38b622ad6d915d30d696b31664a94f4',1,'Daikin2Protocol::Sum1()'],['../unionDaikin216Protocol.html#af5a0be12a198c7398a3b85aea0ca321f',1,'Daikin216Protocol::Sum1()'],['../unionDaikin160Protocol.html#ade9652651eb01aab9777c9a6244d41a1',1,'Daikin160Protocol::Sum1()'],['../unionDaikin176Protocol.html#a2acfd274cfe47a17603ff382c2948695',1,'Daikin176Protocol::Sum1()'],['../unionDaikin128Protocol.html#a72cbe31d6a6efa72c3be3a5f97a33d9a',1,'Daikin128Protocol::Sum1()'],['../unionKelvinatorProtocol.html#a11960442c40eb23519d44c3daa354d4f',1,'KelvinatorProtocol::Sum1()'],['../unionSamsungProtocol.html#a1fe6cb13d6faf1b6d671ca057558669e',1,'SamsungProtocol::Sum1()'],['../unionWhirlpoolProtocol.html#a2d9fc7639cd9b5bd18b125d99fa0a26e',1,'WhirlpoolProtocol::Sum1()']]], - ['sum2_3458',['Sum2',['../unionDaikinESPProtocol.html#a23ab8932c3c7fc9ffb79a4540458f1e8',1,'DaikinESPProtocol::Sum2()'],['../unionDaikin2Protocol.html#a8c6c9f26a55cf656e4dd7043e3c8e9cb',1,'Daikin2Protocol::Sum2()'],['../unionDaikin216Protocol.html#a190893ad04cf10e16f2c15dc025bb683',1,'Daikin216Protocol::Sum2()'],['../unionDaikin160Protocol.html#a0c0c7e34389309a1b780f2518d0528bd',1,'Daikin160Protocol::Sum2()'],['../unionDaikin176Protocol.html#ae797bea46028cd4a19c42746ba4f3d65',1,'Daikin176Protocol::Sum2()'],['../unionDaikin128Protocol.html#a19162e554dbd868382130d39e4fbf221',1,'Daikin128Protocol::Sum2()'],['../unionKelvinatorProtocol.html#aade6e576f735c6ef84c11062175f0013',1,'KelvinatorProtocol::Sum2()'],['../unionSamsungProtocol.html#a73be0a77d7bd16a28befba84eafe79fa',1,'SamsungProtocol::Sum2()'],['../unionWhirlpoolProtocol.html#a17ac6562d12278e9fe52695e5175e8ed',1,'WhirlpoolProtocol::Sum2()']]], - ['sum3_3459',['Sum3',['../unionDaikinESPProtocol.html#a94351ee2b8b5090cb0934f21ebcd195c',1,'DaikinESPProtocol']]], - ['sumbytes_3460',['sumBytes',['../IRutils_8cpp.html#abfbd3d7cc33d0aac341e6619f3390108',1,'sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init): IRutils.cpp'],['../IRutils_8h.html#a3f33bdd680bea210b212d4e9925eb8eb',1,'sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0): IRutils.cpp']]], - ['sumnibbles_3461',['sumNibbles',['../namespaceirutils.html#a4752ecc3eafa3ca2e13344a52519b343',1,'irutils::sumNibbles(const uint8_t *const start, const uint16_t length, const uint8_t init)'],['../namespaceirutils.html#aeb5202fa0093ee6b7e07d4290229fbd2',1,'irutils::sumNibbles(const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)']]], - ['super1_3462',['Super1',['../unionWhirlpoolProtocol.html#abed3697b1a9697d1b95991c6ee7cded8',1,'WhirlpoolProtocol']]], - ['super2_3463',['Super2',['../unionWhirlpoolProtocol.html#ae61909ca04d65db8282a51aa697a519f',1,'WhirlpoolProtocol']]], - ['swing_3464',['Swing',['../unionFujitsuProtocol.html#af86bba40fd05a9538d1dca0a02196282',1,'FujitsuProtocol::Swing()'],['../unionGoodweatherProtocol.html#a0a9be72f6b174f5bc4f4082f3afd93b1',1,'GoodweatherProtocol::Swing()'],['../unionGreeProtocol.html#a6ee1b2c7459fcd5ed839a7730a2c5931',1,'GreeProtocol::Swing()'],['../unionHaierProtocol.html#afc7ba334ae13911868d90c2fe37813b9',1,'HaierProtocol::Swing()'],['../unionHaierYRW02Protocol.html#a671ff83501bd3e6f6e5c2b08bb6d26d1',1,'HaierYRW02Protocol::Swing()'],['../unionSamsungProtocol.html#ad63e66ad39ded5ff568325b2cc2913e6',1,'SamsungProtocol::Swing()'],['../unionSharpProtocol.html#aaf3716e85768e55ae39083b702e51b23',1,'SharpProtocol::Swing()'],['../unionTechnibelProtocol.html#ad65f35496e1a8801807f12b0fb151bfd',1,'TechnibelProtocol::Swing()'],['../unionTecoProtocol.html#a515148adf18ffca1dcab693a8e063479',1,'TecoProtocol::Swing()'],['../unionToshibaProtocol.html#a7055dad465b9500ce8654ebb517cb363',1,'ToshibaProtocol::Swing()'],['../unionVestelProtocol.html#a885f7bf3caef01109e22fa376e39b272',1,'VestelProtocol::Swing()']]], - ['swing1_3465',['Swing1',['../unionWhirlpoolProtocol.html#a0553a73ef3aa9a490e461ab9e8258084',1,'WhirlpoolProtocol']]], - ['swing2_3466',['Swing2',['../unionWhirlpoolProtocol.html#a0b7a02e7a75a8a761a4bbafd77c0d355',1,'WhirlpoolProtocol']]], - ['swingauto_3467',['SwingAuto',['../unionGreeProtocol.html#a866257731360d655ffa24ba3fbdfa3cc',1,'GreeProtocol']]], - ['swingflag_3468',['swingFlag',['../classIRCoolixAC.html#a6d61903a90cebef56b931bebbfa5cba3',1,'IRCoolixAC::swingFlag()'],['../classIRTranscoldAc.html#acaaa6c7fc022b3a259692bfd61258f49',1,'IRTranscoldAc::swingFlag()']]], - ['swingh_3469',['swingh',['../structstdAc_1_1state__t.html#a761bb702891ed1fa35906929a4c8a3f8',1,'stdAc::state_t::swingh()'],['../unionDaikinESPProtocol.html#af3dacc4757d42c204532551565d05013',1,'DaikinESPProtocol::SwingH()'],['../unionDaikin2Protocol.html#a2763869384806cdbb8b9eeec419fddb5',1,'Daikin2Protocol::SwingH()'],['../unionDaikin216Protocol.html#a3e024277a27b1bb20d66c8a01a5d4abf',1,'Daikin216Protocol::SwingH()'],['../unionDaikin176Protocol.html#a1c66607da26b68ab359def3884112bbc',1,'Daikin176Protocol::SwingH()'],['../unionElectraProtocol.html#ac265663bdb90f785a5c3a3d452101a03',1,'ElectraProtocol::SwingH()'],['../unionHitachiProtocol.html#adc2e2a72df76b96392db614103476ad1',1,'HitachiProtocol::SwingH()'],['../unionHitachi424Protocol.html#aca9d734f4809828027727ba0ec5fb56f',1,'Hitachi424Protocol::SwingH()'],['../unionHitachi1Protocol.html#a8d623507f6042e6a2a7b38711d972b1d',1,'Hitachi1Protocol::SwingH()'],['../unionKelvinatorProtocol.html#aa00bcaec92896c766d0c59edfd19fa0c',1,'KelvinatorProtocol::SwingH()'],['../unionMitsubishi112Protocol.html#a06f3c53c43e8e12a171570bcbc44b722',1,'Mitsubishi112Protocol::SwingH()'],['../unionMitsubishi152Protocol.html#a6ff8b8c4309663ca8abffc6d5022e13a',1,'Mitsubishi152Protocol::SwingH()'],['../unionNeoclimaProtocol.html#a2df2379997121fa8e22a98d7ccfe7b0a',1,'NeoclimaProtocol::SwingH()'],['../unionPanasonicAc32Protocol.html#ad2150fa0dbf816d48818969100ea1ac1',1,'PanasonicAc32Protocol::SwingH()'],['../unionTcl112Protocol.html#ac10dd12d472bf3a9f632b645e48a1c7f',1,'Tcl112Protocol::SwingH()'],['../unionVoltasProtocol.html#a55094a8796bf95e81eb7dd9a91d7a127',1,'VoltasProtocol::SwingH()']]], - ['swingh1_3470',['SwingH1',['../unionMitsubishi88Protocol.html#a25360a714725166199b45ee26ddbe6d7',1,'Mitsubishi88Protocol']]], - ['swingh2_3471',['SwingH2',['../unionMitsubishi88Protocol.html#ad175a3bea6aa442e1de553be6f352b32',1,'Mitsubishi88Protocol']]], - ['swingh_5ft_3472',['swingh_t',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147',1,'stdAc']]], - ['swinghchange_3473',['SwingHChange',['../unionVoltasProtocol.html#a32c53808a0f8b6574025f2b3c721ae47',1,'VoltasProtocol']]], - ['swinghflag_3474',['swingHFlag',['../classIRTranscoldAc.html#a15da6840a234b2ff739a86d19f15c58d',1,'IRTranscoldAc']]], - ['swinghtostring_3475',['swinghToString',['../classIRac.html#a21c9d71bbf229fd8369480e50a7c3689',1,'IRac']]], - ['swingtoggle_3476',['SwingToggle',['../unionHitachi1Protocol.html#a479a73b38e4f079d7d0e221bb6814a45',1,'Hitachi1Protocol']]], - ['swingv_3477',['swingv',['../structstdAc_1_1state__t.html#a35477d368350d8981ad8b7b09505857e',1,'stdAc::state_t::swingv()'],['../unionCarrierProtocol.html#a9d08c75d7f8357139cd3d844cf29ca22',1,'CarrierProtocol::SwingV()'],['../unionDaikinESPProtocol.html#abaa6622e63357ff194ec473d763e6347',1,'DaikinESPProtocol::SwingV()'],['../unionDaikin2Protocol.html#ad54bd084ae49600bc02d5de9d557b24f',1,'Daikin2Protocol::SwingV()'],['../unionDaikin216Protocol.html#a09abba3b50a33d8d549a0554099b639b',1,'Daikin216Protocol::SwingV()'],['../unionDaikin160Protocol.html#af3ecc8b83528477acdfc2a10352f09e3',1,'Daikin160Protocol::SwingV()'],['../unionDaikin128Protocol.html#a9c0f7c9d691a97ce316ef5b76fb1cafd',1,'Daikin128Protocol::SwingV()'],['../unionDaikin152Protocol.html#a72a99dc5a7497285a7f1e2a0cac7dab8',1,'Daikin152Protocol::SwingV()'],['../unionDaikin64Protocol.html#a5c14fc6cba6aa76a75452808717ee507',1,'Daikin64Protocol::SwingV()'],['../unionElectraProtocol.html#a1f04f248d66f0890548f3cfe4e269beb',1,'ElectraProtocol::SwingV()'],['../unionHitachiProtocol.html#a31530689da10bfae60d005039c6ab596',1,'HitachiProtocol::SwingV()'],['../unionHitachi424Protocol.html#afa4ca85beef441434700d09a09fb60c7',1,'Hitachi424Protocol::SwingV()'],['../unionHitachi1Protocol.html#a73473181cf6a1fce2ea4874ba29552be',1,'Hitachi1Protocol::SwingV()'],['../unionKelvinatorProtocol.html#abd01a8f9d88b44f59484955107d9b7bb',1,'KelvinatorProtocol::SwingV()'],['../unionMitsubishi136Protocol.html#a24b4d22d88ac7630c1fcdccd964d013b',1,'Mitsubishi136Protocol::SwingV()'],['../unionMitsubishi112Protocol.html#a4de8c60641ea95f8f2b875d13f87f594',1,'Mitsubishi112Protocol::SwingV()'],['../unionMitsubishi152Protocol.html#a3ae158a863e0ade1d64cc62a9cc7a374',1,'Mitsubishi152Protocol::SwingV()'],['../unionNeoclimaProtocol.html#a5c8407706693a73ff3716ba857e56e8f',1,'NeoclimaProtocol::SwingV()'],['../unionPanasonicAc32Protocol.html#ad72c8342fd1bcf04c0244934ac6a1172',1,'PanasonicAc32Protocol::SwingV()'],['../unionSanyoProtocol.html#ad3384be2dd09a39be41ebf2bae5e7480',1,'SanyoProtocol::SwingV()'],['../unionTcl112Protocol.html#a4d4ec9093ad1cb4457e004e21545d1a7',1,'Tcl112Protocol::SwingV()'],['../unionVoltasProtocol.html#ac2a240ab6b19af0e472c3134331a6e68',1,'VoltasProtocol::SwingV()']]], - ['swingv5_3478',['SwingV5',['../unionMitsubishi88Protocol.html#aaa1b4fc42a673c7437373d85b2e22c26',1,'Mitsubishi88Protocol']]], - ['swingv7_3479',['SwingV7',['../unionMitsubishi88Protocol.html#aa56bc52d2d6ec0d2f76aea923e084856',1,'Mitsubishi88Protocol']]], - ['swingv_5ft_3480',['swingv_t',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43',1,'stdAc']]], - ['swingvflag_3481',['swingVFlag',['../classIRTranscoldAc.html#ae2aa4d5a19dd9056606ca20d03c893df',1,'IRTranscoldAc']]], - ['swingvtoggle_3482',['SwingVToggle',['../unionCoronaProtocol.html#a3b21dc7f46b2153be56daeca1b0b40e8',1,'CoronaProtocol']]], - ['swingvtostring_3483',['swingvToString',['../classIRac.html#a641b59e48183a8f6d9b739ce7210f142',1,'IRac']]], - ['symphony_3484',['SYMPHONY',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada44c4a84d776e02328ef3b169e743e5ec',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.html deleted file mode 100644 index 72d12e90e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.js deleted file mode 100644 index 9bef1e275..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_14.js +++ /dev/null @@ -1,58 +0,0 @@ -var searchData= -[ - ['tcl112_3485',['tcl112',['../classIRac.html#a3028bd9e83956d57b592bb96638b3f59',1,'IRac']]], - ['tcl112ac_3486',['TCL112AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac4a6ebe702365620ed65ac6f484afda6',1,'IRremoteESP8266.h']]], - ['tcl112protocol_3487',['Tcl112Protocol',['../unionTcl112Protocol.html',1,'']]], - ['technibel_3488',['technibel',['../classIRac.html#a13fbfbf7d6368a10b7526c1c1cedfa5a',1,'IRac']]], - ['technibel_5fac_3489',['TECHNIBEL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada11b133c97acd985c6eed8815ae0baf21',1,'IRremoteESP8266.h']]], - ['technibelprotocol_3490',['TechnibelProtocol',['../unionTechnibelProtocol.html',1,'']]], - ['teco_3491',['teco',['../classIRac.html#a9e612e04e270dd5710e8a63a64b56064',1,'IRac::teco()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3a15ee4466478d484508acc3d4d7a050',1,'TECO(): IRremoteESP8266.h']]], - ['tecoprotocol_3492',['TecoProtocol',['../unionTecoProtocol.html',1,'']]], - ['temp_3493',['Temp',['../unionAirwellProtocol.html#a5a6bd2772f3b9b5898ea84cf272cdf87',1,'AirwellProtocol::Temp()'],['../unionAmcorProtocol.html#a93dac8f8fa9796452fc67be02ac154cd',1,'AmcorProtocol::Temp()'],['../unionArgoProtocol.html#a928a356c79acc2b56ffeea8e536d9e98',1,'ArgoProtocol::Temp()'],['../unionCarrierProtocol.html#a43fb183022e8b4aef36bee0cb0cd9aaa',1,'CarrierProtocol::Temp()'],['../unionCoolixProtocol.html#a3d7fee6490b9d5f1a66e2f229760d7b7',1,'CoolixProtocol::Temp()'],['../unionCoronaProtocol.html#a18002c42df09d30705af1ebd4c5cd2e3',1,'CoronaProtocol::Temp()'],['../unionDaikinESPProtocol.html#a0ad595273164311e5038c0fac53145a5',1,'DaikinESPProtocol::Temp()'],['../unionDaikin2Protocol.html#ab028d2a7dc019e9389134bcc9bc89e7f',1,'Daikin2Protocol::Temp()'],['../unionDaikin216Protocol.html#adedf9354b1605903bb0fc69dfc087fed',1,'Daikin216Protocol::Temp()'],['../unionDaikin160Protocol.html#ac050e5317af867a602da555ff5c0f445',1,'Daikin160Protocol::Temp()'],['../unionDaikin176Protocol.html#ad6de066afd97c966ad50bb2e578102c2',1,'Daikin176Protocol::Temp()'],['../unionDaikin128Protocol.html#a38ecd43c273a4460417218c1dbd5002f',1,'Daikin128Protocol::Temp()'],['../unionDaikin152Protocol.html#a53bd877ac22cf1beee6a369e94f6ef8b',1,'Daikin152Protocol::Temp()'],['../unionDaikin64Protocol.html#a2d5cc94de8060dc28a611f417a67cdf6',1,'Daikin64Protocol::Temp()'],['../unionDelonghiProtocol.html#a39bdc64b05d4cc3c55c9b33779a2b673',1,'DelonghiProtocol::Temp()'],['../unionEcoclimProtocol.html#af88e83a0f5f4ef72e44070afc5db6acb',1,'EcoclimProtocol::Temp()'],['../unionElectraProtocol.html#acfa59481898d71fc31174c82ff30a7cf',1,'ElectraProtocol::Temp()'],['../unionFujitsuProtocol.html#a44d3a88ea8d71a78f6905571154872a5',1,'FujitsuProtocol::Temp()'],['../unionGoodweatherProtocol.html#a52cc284981b27dab58eb8c6ccce164aa',1,'GoodweatherProtocol::Temp()'],['../unionGreeProtocol.html#a46075a9f5fbd0d3829a84cca3d4a9d4f',1,'GreeProtocol::Temp()'],['../unionHaierProtocol.html#affb6ef60b50ae3351393e3f168ae8f2f',1,'HaierProtocol::Temp()'],['../unionHaierYRW02Protocol.html#a19211a1af7d11da6034b87cb7a042fcd',1,'HaierYRW02Protocol::Temp()'],['../unionHitachiProtocol.html#a82506fdbc1e1dded01ff0b148b63aefc',1,'HitachiProtocol::Temp()'],['../unionHitachi424Protocol.html#a55d9783eb1187ac86d1cf7ef97c220c4',1,'Hitachi424Protocol::Temp()'],['../unionHitachi1Protocol.html#acec70cd3c02926c3cfb596a30795d576',1,'Hitachi1Protocol::Temp()'],['../unionKelvinatorProtocol.html#a2ad164ea50b7501e9b04352aa283ddce',1,'KelvinatorProtocol::Temp()'],['../unionLGProtocol.html#ae556c7e3100b062ec21581cbe61f126a',1,'LGProtocol::Temp()'],['../unionMideaProtocol.html#a4206c02c5cafe996c05d92beb7a7e8d6',1,'MideaProtocol::Temp()'],['../unionMitsubishi144Protocol.html#a1bd567c01d07cedb0475097b4fc46195',1,'Mitsubishi144Protocol::Temp()'],['../unionMitsubishi136Protocol.html#abd84c910c48418162a7647cda2d13b48',1,'Mitsubishi136Protocol::Temp()'],['../unionMitsubishi112Protocol.html#aa15bf2e818b1988fa790e36d2237f105',1,'Mitsubishi112Protocol::Temp()'],['../unionMitsubishi152Protocol.html#a2608f42bbdacb6b5cca759affaa57fce',1,'Mitsubishi152Protocol::Temp()'],['../unionMitsubishi88Protocol.html#abae8097bf27a43d95fb486ba7ca50e03',1,'Mitsubishi88Protocol::Temp()'],['../unionNeoclimaProtocol.html#a6b12bad4406a2c89aae3db1b1614d980',1,'NeoclimaProtocol::Temp()'],['../unionPanasonicAc32Protocol.html#ad0ab801a8f4ec655d176bb900d50245d',1,'PanasonicAc32Protocol::Temp()'],['../unionSamsungProtocol.html#aee5c202d59174c4c85900054001ed679',1,'SamsungProtocol::Temp()'],['../unionSanyoProtocol.html#a3a3e20f65bcb220f84aee2f48d05d986',1,'SanyoProtocol::Temp()'],['../unionSharpProtocol.html#a4b5dfbe7c378055840a1a51b7035234d',1,'SharpProtocol::Temp()'],['../unionTcl112Protocol.html#adac34333fb283e85dbbae7f82464034c',1,'Tcl112Protocol::Temp()'],['../unionTechnibelProtocol.html#a77c1358fde3dc80d152bcbdf277152be',1,'TechnibelProtocol::Temp()'],['../unionTecoProtocol.html#aa65998afac0fcadca42ce5c1262793a2',1,'TecoProtocol::Temp()'],['../unionToshibaProtocol.html#abe862f03c3a5fc68d199e0514c4d05e2',1,'ToshibaProtocol::Temp()'],['../unionTranscoldProtocol.html#a6e743702012bdb7037a96bcef630d30f',1,'TranscoldProtocol::Temp()'],['../unionTrotecProtocol.html#a89cfb912a2a4177485c588b707cedf83',1,'TrotecProtocol::Temp()'],['../unionTrumaProtocol.html#aada7b9bcdd6de808da5a1b7804f359cf',1,'TrumaProtocol::Temp()'],['../unionVestelProtocol.html#a1227bbe21da25c259103e9861e7c4c95',1,'VestelProtocol::Temp()'],['../unionVoltasProtocol.html#a23efaf01747b58d1e77c101f99bc2b4c',1,'VoltasProtocol::Temp()'],['../unionWhirlpoolProtocol.html#a9df58d0ddd25b06a5fb03db2a3bc379e',1,'WhirlpoolProtocol::Temp()']]], - ['tempchange_3494',['TempChange',['../unionTechnibelProtocol.html#a1defef3843fa2d57a84857f573bc646f',1,'TechnibelProtocol']]], - ['tempextradegreef_3495',['TempExtraDegreeF',['../unionGreeProtocol.html#ae093878b66b84bbc4f5c5df5e59fd639',1,'GreeProtocol']]], - ['tempset_3496',['TempSet',['../unionVoltasProtocol.html#a16ae188cb58127b21fb905f3b1d8653c',1,'VoltasProtocol']]], - ['tenshours_3497',['TensHours',['../unionTecoProtocol.html#a666e09f45c649f518b68b575dc8212bb',1,'TecoProtocol']]], - ['three_3498',['Three',['../unionMitsubishi152Protocol.html#afdd9554bfc3ac476ca87acd69eba3bc3',1,'Mitsubishi152Protocol']]], - ['tickshigh_3499',['ticksHigh',['../classIRrecv.html#a573dbb20695f2ffc808623df8c36280c',1,'IRrecv']]], - ['tickslow_3500',['ticksLow',['../classIRrecv.html#ac08e50c5eec10c0095157f4bdd4051c8',1,'IRrecv']]], - ['timeout_3501',['timeout',['../structirparams__t.html#a132d6448ad59f03f6b35c4b04a6d1af4',1,'irparams_t']]], - ['timer_3502',['timer',['../structirparams__t.html#a6d4594a4d6bf8a2587095be7adfc018d',1,'irparams_t::timer()'],['../unionMitsubishi144Protocol.html#a29613b47de756a0e67c42d41fd44a77a',1,'Mitsubishi144Protocol::Timer()'],['../unionTrotecProtocol.html#a02e56a4ff6210117c5519ef568203d0c',1,'TrotecProtocol::Timer()'],['../unionVestelProtocol.html#a9aeab043445a2195de7761d99ff45611',1,'VestelProtocol::Timer()']]], - ['timerchange_3503',['TimerChange',['../unionTechnibelProtocol.html#ac3999a3162e2f7de613c9d61eacabde1',1,'TechnibelProtocol']]], - ['timerenable_3504',['TimerEnable',['../unionTechnibelProtocol.html#a40dfea84eea20bb0fc0168b2074f95e0',1,'TechnibelProtocol']]], - ['timerenabled_3505',['TimerEnabled',['../unionGreeProtocol.html#a603b0bde826287c2ddddb4d17cf9acd0',1,'GreeProtocol::TimerEnabled()'],['../unionSharpProtocol.html#abdf436472440de69d9bc86fadf4d719b',1,'SharpProtocol::TimerEnabled()']]], - ['timerhalfhr_3506',['TimerHalfHr',['../unionGreeProtocol.html#a3e9fe2455001daec79f687797842239c',1,'GreeProtocol']]], - ['timerhours_3507',['TimerHours',['../unionGreeProtocol.html#a7cc95f9868755876049dbe2b3ce4c730',1,'GreeProtocol::TimerHours()'],['../unionSharpProtocol.html#a7872b52282ecd70b49c17db87d04c8dd',1,'SharpProtocol::TimerHours()'],['../unionTechnibelProtocol.html#a058b2d15d4b2f3974e0271ef24228478',1,'TechnibelProtocol::TimerHours()']]], - ['timerms_3508',['TimerMs',['../classTimerMs.html',1,'TimerMs'],['../classTimerMs.html#a7bf7f8d2fcf76b27b34ea4705810eef5',1,'TimerMs::TimerMs()']]], - ['timeron_3509',['TimerOn',['../unionTecoProtocol.html#ab6a0e79403cd997d43487d939e37be2b',1,'TecoProtocol']]], - ['timertenshr_3510',['TimerTensHr',['../unionGreeProtocol.html#a21cc20bf1a214a17c735e5997f236ee9',1,'GreeProtocol']]], - ['timertype_3511',['TimerType',['../unionFujitsuProtocol.html#a5f80e90a7c02237d38d2e0f97bbdc573',1,'FujitsuProtocol::TimerType()'],['../unionSharpProtocol.html#af29fb49abd51a5a979c7dbb03d440b7e',1,'SharpProtocol::TimerType()']]], - ['timestate_3512',['timeState',['../unionVestelProtocol.html#a64f74ca21d2e21004fe70db529297b99',1,'VestelProtocol']]], - ['timesum_3513',['TimeSum',['../unionVestelProtocol.html#a6d7fee68c9fa0b80e8ff64e01f9ab2e4',1,'VestelProtocol']]], - ['tocommon_3514',['toCommon',['../classIRAirwellAc.html#a279b9cf59acf8462ea99ffcd7d08b919',1,'IRAirwellAc::toCommon()'],['../classIRAmcorAc.html#a67b9fc041a0de132cfac901d1bfd1313',1,'IRAmcorAc::toCommon()'],['../classIRArgoAC.html#ad799686591d91845d526fc3a5db42171',1,'IRArgoAC::toCommon()'],['../classIRCarrierAc64.html#a6cef4a532c3f4c961500e51598a6df80',1,'IRCarrierAc64::toCommon()'],['../classIRCoolixAC.html#a533c6341065b5e47d56771d13c0c248a',1,'IRCoolixAC::toCommon()'],['../classIRCoronaAc.html#a38fbd2262153c740a71bb373a6672096',1,'IRCoronaAc::toCommon()'],['../classIRDaikinESP.html#ab636c6718d8663a98be0e32b189e6d44',1,'IRDaikinESP::toCommon()'],['../classIRDaikin2.html#a8d6c439465779b8febe9eb977e4542c0',1,'IRDaikin2::toCommon()'],['../classIRDaikin216.html#a4e1de110bf0c7a50fb8c2243b7f87524',1,'IRDaikin216::toCommon()'],['../classIRDaikin160.html#a70778c17bcdd6c8adf50af209406fad5',1,'IRDaikin160::toCommon()'],['../classIRDaikin176.html#aee7d30b9935881513afafa5291dd8c0c',1,'IRDaikin176::toCommon()'],['../classIRDaikin128.html#a03c0403dadb7377b463373dc67431b7a',1,'IRDaikin128::toCommon()'],['../classIRDaikin152.html#a0bd5276ee23cf56c75d8a84d8c4bf17a',1,'IRDaikin152::toCommon()'],['../classIRDaikin64.html#abcdf16d946975a35292168d4548999ab',1,'IRDaikin64::toCommon()'],['../classIRDelonghiAc.html#a30c2463464576889af014f8e15d59c75',1,'IRDelonghiAc::toCommon()'],['../classIREcoclimAc.html#a239da399ed837c535538e2321839746c',1,'IREcoclimAc::toCommon()'],['../classIRElectraAc.html#a8ea21abd10c629bd3dd9673ce36b07ed',1,'IRElectraAc::toCommon()'],['../classIRFujitsuAC.html#ae878d663cdcd9f40cb3ae348b03a4cb2',1,'IRFujitsuAC::toCommon()'],['../classIRGoodweatherAc.html#abaaa40915d93e8c6bd5dd49d8e02b510',1,'IRGoodweatherAc::toCommon()'],['../classIRGreeAC.html#ac28c640aa4b5dd0dbbca42b056f877f7',1,'IRGreeAC::toCommon()'],['../classIRHaierAC.html#a738de44369e3322d264c8ee78cc72ab6',1,'IRHaierAC::toCommon()'],['../classIRHaierACYRW02.html#a0189f929df672e9996d9c2959378d4af',1,'IRHaierACYRW02::toCommon()'],['../classIRHitachiAc.html#a2d4aa7ff76dfef5055e051e347c8552f',1,'IRHitachiAc::toCommon()'],['../classIRHitachiAc1.html#ad5819257f1042fa97689fc70e578adaa',1,'IRHitachiAc1::toCommon()'],['../classIRHitachiAc424.html#ad33ed9dfd26bb513e113549b932f2f3f',1,'IRHitachiAc424::toCommon()'],['../classIRHitachiAc344.html#a2bdc3e19a6125d107844f548e4321f6e',1,'IRHitachiAc344::toCommon()'],['../classIRKelvinatorAC.html#a4f44754277101b80574ce66b02bdbe06',1,'IRKelvinatorAC::toCommon()'],['../classIRLgAc.html#ab7c25ce38605a54204f761f8aa7f24e1',1,'IRLgAc::toCommon()'],['../classIRMideaAC.html#a62086b58f71908b75e28a61bd4f6bf15',1,'IRMideaAC::toCommon()'],['../classIRMitsubishiAC.html#af794d838a5f4ca75ac8e581d8d06c945',1,'IRMitsubishiAC::toCommon()'],['../classIRMitsubishi136.html#ad03ce7834e5b928cf9e2c7c266bc567e',1,'IRMitsubishi136::toCommon()'],['../classIRMitsubishi112.html#abe39fadc87c09105bdc330069ee7ce20',1,'IRMitsubishi112::toCommon()'],['../classIRMitsubishiHeavy152Ac.html#a37d7bbd42a6816c9c5639ed1080b1371',1,'IRMitsubishiHeavy152Ac::toCommon()'],['../classIRMitsubishiHeavy88Ac.html#a0e3ec0c4a3ffc9c0c5b5342e4d697601',1,'IRMitsubishiHeavy88Ac::toCommon()'],['../classIRNeoclimaAc.html#a068f762e89180f80011b25323a0b5c1a',1,'IRNeoclimaAc::toCommon()'],['../classIRPanasonicAc.html#af2218f117db06424ced00ba6c0cc3234',1,'IRPanasonicAc::toCommon()'],['../classIRPanasonicAc32.html#a49749cb320f52c62fd51a6d271277696',1,'IRPanasonicAc32::toCommon()'],['../classIRSamsungAc.html#a47fb72f99ca6dfba378e2ce60e4c1246',1,'IRSamsungAc::toCommon()'],['../classIRSanyoAc.html#a408e12d69a26c62d53254e4b7c29a925',1,'IRSanyoAc::toCommon()'],['../classIRSharpAc.html#a4fa96fdd02031b1b46736befcd8bae1a',1,'IRSharpAc::toCommon()'],['../classIRTcl112Ac.html#afa6cacde7053c502f66f227c9eb1e82d',1,'IRTcl112Ac::toCommon()'],['../classIRTechnibelAc.html#acafa5e84c84ca1e1299b7dbced6cdc17',1,'IRTechnibelAc::toCommon()'],['../classIRTecoAc.html#a35b2c56f7667d4f1ebe81ac28e7a38c7',1,'IRTecoAc::toCommon()'],['../classIRToshibaAC.html#a533cc022b014adff376c0dfc319242ca',1,'IRToshibaAC::toCommon()'],['../classIRTranscoldAc.html#abbd4d9ba01a8e27a719dcf00c2890d38',1,'IRTranscoldAc::toCommon()'],['../classIRTrotecESP.html#afc86878429018657442ce1fd1863ae06',1,'IRTrotecESP::toCommon()'],['../classIRTrumaAc.html#a71cbcde09a100df106dc86a6e9022958',1,'IRTrumaAc::toCommon()'],['../classIRVestelAc.html#ad31b99f939667487b6f04acace6a29bd',1,'IRVestelAc::toCommon()'],['../classIRVoltas.html#a79c76ddd91237e624115aaf0e183f3f0',1,'IRVoltas::toCommon()'],['../classIRWhirlpoolAc.html#a3fbdadc6b064cdb72358c220ce56ca41',1,'IRWhirlpoolAc::toCommon()']]], - ['tocommonfanspeed_3515',['toCommonFanSpeed',['../classIRAirwellAc.html#a38a93fc115fbe4deb0a5ee82a913c166',1,'IRAirwellAc::toCommonFanSpeed()'],['../classIRAmcorAc.html#a951aa81d98c66138f61069431e13f35a',1,'IRAmcorAc::toCommonFanSpeed()'],['../classIRArgoAC.html#a334afe3ce6536089bc2832985067f029',1,'IRArgoAC::toCommonFanSpeed()'],['../classIRCarrierAc64.html#a5a9149acc82fcc22a5be8dcbe791ab77',1,'IRCarrierAc64::toCommonFanSpeed()'],['../classIRCoolixAC.html#a6a0e7219c667eb06897b47a7c36f5fbc',1,'IRCoolixAC::toCommonFanSpeed()'],['../classIRCoronaAc.html#a6d5d0015f01acc97badff7edda964485',1,'IRCoronaAc::toCommonFanSpeed()'],['../classIRDaikinESP.html#a6855a423f10a2230953646d478400574',1,'IRDaikinESP::toCommonFanSpeed()'],['../classIRDaikin176.html#a6f9b7dddcf98c7a42495c900dddf505d',1,'IRDaikin176::toCommonFanSpeed()'],['../classIRDaikin128.html#a1c53a27678731229308e355eb94ec762',1,'IRDaikin128::toCommonFanSpeed()'],['../classIRDaikin64.html#acd24c4932e2bfd6bffbb9a90da2028a6',1,'IRDaikin64::toCommonFanSpeed()'],['../classIRDelonghiAc.html#a231e26843e3616e7455fd020dbb8807b',1,'IRDelonghiAc::toCommonFanSpeed()'],['../classIREcoclimAc.html#aee569b3f1c6e5f7209da6a5acd37ec66',1,'IREcoclimAc::toCommonFanSpeed()'],['../classIRElectraAc.html#a5d53fb85582344cfdbfa33da6acbdb7d',1,'IRElectraAc::toCommonFanSpeed()'],['../classIRFujitsuAC.html#a93a35e42d887b5ca6414b295a4a91526',1,'IRFujitsuAC::toCommonFanSpeed()'],['../classIRGoodweatherAc.html#aff899c76d5b808ee35c9f88c116b5dc4',1,'IRGoodweatherAc::toCommonFanSpeed()'],['../classIRGreeAC.html#ade6cb54e99b6dab1df708cbf25fc5967',1,'IRGreeAC::toCommonFanSpeed()'],['../classIRHaierAC.html#ad67ee0b7299d041aad77382dde893229',1,'IRHaierAC::toCommonFanSpeed()'],['../classIRHaierACYRW02.html#a15402e3ba2a9875d5b49f6dab3e85034',1,'IRHaierACYRW02::toCommonFanSpeed()'],['../classIRHitachiAc.html#afba02d48c4a023ed800abf38d5314c7e',1,'IRHitachiAc::toCommonFanSpeed()'],['../classIRHitachiAc1.html#a99f205391deb75d23d08d63e1feff0d4',1,'IRHitachiAc1::toCommonFanSpeed()'],['../classIRHitachiAc424.html#a16abdf55ea3ae4b06e2a23dad3496738',1,'IRHitachiAc424::toCommonFanSpeed()'],['../classIRKelvinatorAC.html#a0ebd262c554c5c843bc3f710570e1401',1,'IRKelvinatorAC::toCommonFanSpeed()'],['../classIRLgAc.html#af47317ba139a4b1e5961b9a45db974df',1,'IRLgAc::toCommonFanSpeed()'],['../classIRMideaAC.html#acd89d4864a46b146ac4f648c4406ded5',1,'IRMideaAC::toCommonFanSpeed()'],['../classIRMitsubishiAC.html#aa7dd30cde520b14575d7fcd992c3bbf1',1,'IRMitsubishiAC::toCommonFanSpeed()'],['../classIRMitsubishi136.html#aaf9f9f17f3ac59ef325b57b9110faa34',1,'IRMitsubishi136::toCommonFanSpeed()'],['../classIRMitsubishi112.html#aaeee082d9adbf7b0d91316c703571f1a',1,'IRMitsubishi112::toCommonFanSpeed()'],['../classIRMitsubishiHeavy152Ac.html#a5e26c3121aceb944fc688e6f641dd5b1',1,'IRMitsubishiHeavy152Ac::toCommonFanSpeed()'],['../classIRMitsubishiHeavy88Ac.html#aa5dae03951ba9a9aeac62184c27f9439',1,'IRMitsubishiHeavy88Ac::toCommonFanSpeed()'],['../classIRNeoclimaAc.html#a5d87285928bd8bfa2abad92fbdf384b5',1,'IRNeoclimaAc::toCommonFanSpeed()'],['../classIRPanasonicAc.html#a1eff8e4d670abc303a02d8baeeb58f8c',1,'IRPanasonicAc::toCommonFanSpeed()'],['../classIRPanasonicAc32.html#acbe96fc57d66d4759e007d97b2cba8b6',1,'IRPanasonicAc32::toCommonFanSpeed()'],['../classIRSamsungAc.html#a2905b33c273d2be6cabfc3b16b51a5b4',1,'IRSamsungAc::toCommonFanSpeed()'],['../classIRSanyoAc.html#a3bcd35a2e4933ddac55a4e27d9d43359',1,'IRSanyoAc::toCommonFanSpeed()'],['../classIRSharpAc.html#a4436ad5eadfc422a6f111ca07c08397b',1,'IRSharpAc::toCommonFanSpeed()'],['../classIRTcl112Ac.html#a66843ee5b53ce9be1aef3774b8df5c84',1,'IRTcl112Ac::toCommonFanSpeed()'],['../classIRTechnibelAc.html#aece92f0e3f4dd4c3b25a8b0408926d45',1,'IRTechnibelAc::toCommonFanSpeed()'],['../classIRTecoAc.html#ac3ad2828770440695969d696ca6ff46d',1,'IRTecoAc::toCommonFanSpeed()'],['../classIRToshibaAC.html#a6c77121c9aba3928e676394f88e88dee',1,'IRToshibaAC::toCommonFanSpeed()'],['../classIRTranscoldAc.html#ad373dbb4df435d9a191710e5bce56883',1,'IRTranscoldAc::toCommonFanSpeed()'],['../classIRTrotecESP.html#a4aaf17993757533370290fffb728befc',1,'IRTrotecESP::toCommonFanSpeed()'],['../classIRTrumaAc.html#ac91956eb18e0339cfa6280104737e22c',1,'IRTrumaAc::toCommonFanSpeed()'],['../classIRVestelAc.html#a6dfd46f56f2d6b15344722cde0741500',1,'IRVestelAc::toCommonFanSpeed()'],['../classIRVoltas.html#a822ac5b90857b912649601a2f7e75ac8',1,'IRVoltas::toCommonFanSpeed()'],['../classIRWhirlpoolAc.html#a61ef6661a985763540b7c2273b8b1b9c',1,'IRWhirlpoolAc::toCommonFanSpeed()']]], - ['tocommonmode_3516',['toCommonMode',['../classIRAirwellAc.html#ad2c717b7750e43894197ee8b292ba23b',1,'IRAirwellAc::toCommonMode()'],['../classIRAmcorAc.html#a6da2f34f1e044f815e94ede578f4c26f',1,'IRAmcorAc::toCommonMode()'],['../classIRArgoAC.html#a8ccd3f5398f50548fda3a9e0172fb5fa',1,'IRArgoAC::toCommonMode()'],['../classIRCarrierAc64.html#ab17b24d0306b8983886d15175898909e',1,'IRCarrierAc64::toCommonMode()'],['../classIRCoolixAC.html#a789fb5d5eab2e78d392c8e0b9a194b18',1,'IRCoolixAC::toCommonMode()'],['../classIRCoronaAc.html#a04ca6532beb099893eb1dd5d01bb4d31',1,'IRCoronaAc::toCommonMode()'],['../classIRDaikinESP.html#a3a7543204520da36547c163a96e30deb',1,'IRDaikinESP::toCommonMode()'],['../classIRDaikin176.html#aa0b9c96d3bf08400a5110bcfa9f1ec9d',1,'IRDaikin176::toCommonMode()'],['../classIRDaikin128.html#a105a4fc511feba96afc956bb36d2dc50',1,'IRDaikin128::toCommonMode()'],['../classIRDaikin64.html#a80b9dd0fbf935bed5035463af2ad0102',1,'IRDaikin64::toCommonMode()'],['../classIRDelonghiAc.html#a5a3eef369009836a629369cf835741c4',1,'IRDelonghiAc::toCommonMode()'],['../classIREcoclimAc.html#a0355e830df179eb4f006b473d30e3117',1,'IREcoclimAc::toCommonMode()'],['../classIRElectraAc.html#a01bd399c3b8908083b95f31d97ddb26f',1,'IRElectraAc::toCommonMode()'],['../classIRFujitsuAC.html#a96140e74d31631581003064f70041d02',1,'IRFujitsuAC::toCommonMode()'],['../classIRGoodweatherAc.html#ab3bcd1354b715179f67499c28fb219fb',1,'IRGoodweatherAc::toCommonMode()'],['../classIRGreeAC.html#a3f393071163fd1577c772a8515e2b5a9',1,'IRGreeAC::toCommonMode()'],['../classIRHaierAC.html#a4d73f75516afff0ef18bdbb7ed9c26ed',1,'IRHaierAC::toCommonMode()'],['../classIRHaierACYRW02.html#a24007a5be360c93ec157b95c8cc06493',1,'IRHaierACYRW02::toCommonMode()'],['../classIRHitachiAc.html#ab7edc0f5571100e1778779081e1c1114',1,'IRHitachiAc::toCommonMode()'],['../classIRHitachiAc1.html#a5cbca62775089593fe2447a77d84b3d5',1,'IRHitachiAc1::toCommonMode()'],['../classIRHitachiAc424.html#a2a725d8dc2178975c977a7496792e667',1,'IRHitachiAc424::toCommonMode()'],['../classIRKelvinatorAC.html#ae2683d38ae72b99e6843e37d36f96db2',1,'IRKelvinatorAC::toCommonMode()'],['../classIRLgAc.html#ac3436968a4445f0210403c353d766b73',1,'IRLgAc::toCommonMode()'],['../classIRMideaAC.html#ac2e0ff374678aadd7fea80194aef8bca',1,'IRMideaAC::toCommonMode()'],['../classIRMitsubishiAC.html#a7eae5da584faf41139be597d6a5e7210',1,'IRMitsubishiAC::toCommonMode()'],['../classIRMitsubishi136.html#a2771fd09b2e953b037c0c65c4e4029ee',1,'IRMitsubishi136::toCommonMode()'],['../classIRMitsubishi112.html#a6da77ebe6e03cfc09aa35e531c292ed1',1,'IRMitsubishi112::toCommonMode()'],['../classIRMitsubishiHeavy152Ac.html#a9faaff371ad3ec33de5646a1afd1992a',1,'IRMitsubishiHeavy152Ac::toCommonMode()'],['../classIRNeoclimaAc.html#a2a220b673c96e54e675d8296aa8b2303',1,'IRNeoclimaAc::toCommonMode()'],['../classIRPanasonicAc.html#a1ace0180b9ac3f4bd17357a03c64792e',1,'IRPanasonicAc::toCommonMode()'],['../classIRPanasonicAc32.html#a396a35813eef61112168f4700eb6e4f7',1,'IRPanasonicAc32::toCommonMode()'],['../classIRSamsungAc.html#a39820a05a9650e9da8a44109234a8d87',1,'IRSamsungAc::toCommonMode()'],['../classIRSanyoAc.html#abd8441f70245dd1225aeebf5f9b42e9b',1,'IRSanyoAc::toCommonMode()'],['../classIRSharpAc.html#a3f97044325d19f3d0987c6fe5b22f6d0',1,'IRSharpAc::toCommonMode()'],['../classIRTcl112Ac.html#a230a8d768089d869efdea6589b0a9e37',1,'IRTcl112Ac::toCommonMode()'],['../classIRTechnibelAc.html#a1a75968674695a9a6b3da2bc979e6cac',1,'IRTechnibelAc::toCommonMode()'],['../classIRTecoAc.html#ac6c7011b31208887de6d15edbffb211a',1,'IRTecoAc::toCommonMode()'],['../classIRToshibaAC.html#a77871a927ee67460b7bdcb8f204297bc',1,'IRToshibaAC::toCommonMode()'],['../classIRTranscoldAc.html#a4316d539b0a5270fab794fc7c3cef20a',1,'IRTranscoldAc::toCommonMode()'],['../classIRTrotecESP.html#a2b28b06bd25234427d90172b27d57092',1,'IRTrotecESP::toCommonMode()'],['../classIRTrumaAc.html#a7d07273e6fb55fd9ad0e328054e1bfd0',1,'IRTrumaAc::toCommonMode()'],['../classIRVestelAc.html#add602c0f052c8ada3b3b5748dda50a58',1,'IRVestelAc::toCommonMode()'],['../classIRVoltas.html#adcf63c5e8c0f2e88c103ee82cfd6a5a9',1,'IRVoltas::toCommonMode()'],['../classIRWhirlpoolAc.html#a748caa4e22f2f1f47e6334b1a031c4d8',1,'IRWhirlpoolAc::toCommonMode()']]], - ['tocommonswing_3517',['toCommonSwing',['../classIRTechnibelAc.html#ac379ff8f6f84fd93aa503269c36d6b49',1,'IRTechnibelAc']]], - ['tocommonswingh_3518',['toCommonSwingH',['../classIRDaikin2.html#a85bb152a4bdcc2798270ee58a3cfe2ae',1,'IRDaikin2::toCommonSwingH()'],['../classIRDaikin176.html#a6a3b66c9777992ed9fcab4e26c1d74dc',1,'IRDaikin176::toCommonSwingH()'],['../classIRHitachiAc344.html#a31562e32ccdf179032e75334b16279f0',1,'IRHitachiAc344::toCommonSwingH()'],['../classIRMitsubishiAC.html#ad7446e0a4ea8d349004c2b4224e69cd9',1,'IRMitsubishiAC::toCommonSwingH()'],['../classIRMitsubishi112.html#a17cfee6dc9ddc38465539ca46f29b263',1,'IRMitsubishi112::toCommonSwingH()'],['../classIRMitsubishiHeavy152Ac.html#afb9e039776c77e898928e9139a21a2b8',1,'IRMitsubishiHeavy152Ac::toCommonSwingH()'],['../classIRMitsubishiHeavy88Ac.html#aead69a01407729240055bd64e583b51b',1,'IRMitsubishiHeavy88Ac::toCommonSwingH()'],['../classIRPanasonicAc.html#aa4241990c350ca936c73b8391c2a11fc',1,'IRPanasonicAc::toCommonSwingH()']]], - ['tocommonswingv_3519',['toCommonSwingV',['../classIRDaikin2.html#a1f3e17757bd4beb0330d75ec3df9788b',1,'IRDaikin2::toCommonSwingV()'],['../classIRDaikin160.html#afae9b50e59c0efa46b96eef9f05a95b7',1,'IRDaikin160::toCommonSwingV()'],['../classIRGreeAC.html#a537d17801a90e22ad2baba7145b038cb',1,'IRGreeAC::toCommonSwingV()'],['../classIRHaierAC.html#aac354e2e4ad72d91667509398078b309',1,'IRHaierAC::toCommonSwingV()'],['../classIRHaierACYRW02.html#a0e426a3479fd80bb3816f016fac22f19',1,'IRHaierACYRW02::toCommonSwingV()'],['../classIRMitsubishiAC.html#a173e3c22f4173f235e7213e41925fdd9',1,'IRMitsubishiAC::toCommonSwingV()'],['../classIRMitsubishi136.html#aca5e6ac2d886083c8c56e2949f9d11e9',1,'IRMitsubishi136::toCommonSwingV()'],['../classIRMitsubishi112.html#a0e577d8554a090d7f2ac2a9ddd3bf15c',1,'IRMitsubishi112::toCommonSwingV()'],['../classIRMitsubishiHeavy152Ac.html#ae4dd9b8f0b5b4becb07618e859a09a51',1,'IRMitsubishiHeavy152Ac::toCommonSwingV()'],['../classIRMitsubishiHeavy88Ac.html#a0597303839e79c97b0fafe6c9ddbcf9a',1,'IRMitsubishiHeavy88Ac::toCommonSwingV()'],['../classIRPanasonicAc.html#adae801e0a2641c196a59d65c26404a13',1,'IRPanasonicAc::toCommonSwingV()'],['../classIRPanasonicAc32.html#a3118f4625c25c450a0dccf34568ea726',1,'IRPanasonicAc32::toCommonSwingV()'],['../classIRSanyoAc.html#a25f99385761bab4f7ae055b7dad9be3b',1,'IRSanyoAc::toCommonSwingV()']]], - ['todo_20list_3520',['Todo List',['../todo.html',1,'']]], - ['togglerc5_3521',['toggleRC5',['../classIRsend.html#a42a78d4a3ef0f88b54bee488320344da',1,'IRsend']]], - ['togglerc6_3522',['toggleRC6',['../classIRsend.html#a5a0e8778394021ea12a8b8c2daf0add6',1,'IRsend']]], - ['toggleswinghoriz_3523',['toggleSwingHoriz',['../classIRFujitsuAC.html#aeba829bb9a9934ad9246a5ba4f4c03fc',1,'IRFujitsuAC']]], - ['toggleswingvert_3524',['toggleSwingVert',['../classIRFujitsuAC.html#a6dc9cc4bda83215fa97896c41b01e584',1,'IRFujitsuAC']]], - ['toshiba_3525',['toshiba',['../classIRac.html#a9bb89d95bd06eb04efb4999baee63725',1,'IRac']]], - ['toshiba_5fac_3526',['TOSHIBA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada66de3fced9e8f97d1919bcf4d5726f3e',1,'IRremoteESP8266.h']]], - ['toshibaprotocol_3527',['ToshibaProtocol',['../unionToshibaProtocol.html',1,'']]], - ['tostring_3528',['toString',['../classIRAirwellAc.html#acbd6772f93e897308db4f606d1f56eac',1,'IRAirwellAc::toString()'],['../classIRAmcorAc.html#acf007ffc602b69ebbb7ed680e683fa25',1,'IRAmcorAc::toString()'],['../classIRArgoAC.html#ad8cbbda40a07a4300a68712e45dd4c2d',1,'IRArgoAC::toString()'],['../classIRCarrierAc64.html#a2807d30650f50653118dad5d10c52921',1,'IRCarrierAc64::toString()'],['../classIRCoolixAC.html#af4e833be17070157662c6fe01545b5f4',1,'IRCoolixAC::toString()'],['../classIRCoronaAc.html#a5ba0f7cd5d990a02bcdfe16ea95296ba',1,'IRCoronaAc::toString()'],['../classIRDaikinESP.html#aa167e4a9d3447c42f9fcbf185a7cd54c',1,'IRDaikinESP::toString()'],['../classIRDaikin2.html#ac714e4a88f2b129920a7813d3e1658b7',1,'IRDaikin2::toString()'],['../classIRDaikin216.html#ade381807ebfe6c1ac36ff256a28dca16',1,'IRDaikin216::toString()'],['../classIRDaikin160.html#a9608db210fb2df94e1889eced9a63f79',1,'IRDaikin160::toString()'],['../classIRDaikin176.html#a1f72e3a2d9cbb075956b5cbec4a41412',1,'IRDaikin176::toString()'],['../classIRDaikin128.html#ad93d8f524671a086732d7b727e46dc6c',1,'IRDaikin128::toString()'],['../classIRDaikin152.html#a138c4a4bb302490201b7628107ce20f3',1,'IRDaikin152::toString()'],['../classIRDaikin64.html#af156a0f84732988a8545f0161cb5599c',1,'IRDaikin64::toString()'],['../classIRDelonghiAc.html#a8b186047aab8735e2f33dd5bdc4b72c9',1,'IRDelonghiAc::toString()'],['../classIREcoclimAc.html#a2f82f6da12f5f7fa66e8c136df535aa9',1,'IREcoclimAc::toString()'],['../classIRElectraAc.html#af496feed11da67a84efd565b435c1d67',1,'IRElectraAc::toString()'],['../classIRFujitsuAC.html#a418e1c0ded978d80f85ec0fda813c8f3',1,'IRFujitsuAC::toString()'],['../classIRGoodweatherAc.html#a95b191495e9cf0c603b407d5e466661a',1,'IRGoodweatherAc::toString()'],['../classIRGreeAC.html#a1f18b275e0e3d10fbc952d1da9613074',1,'IRGreeAC::toString()'],['../classIRHaierAC.html#af52b438cc7c6b0600793a0eb3c8f6419',1,'IRHaierAC::toString()'],['../classIRHaierACYRW02.html#a306eae31da6256f46e0a3cb5c54711a3',1,'IRHaierACYRW02::toString()'],['../classIRHitachiAc.html#aa7a28c8cf15c06b01681feb17e8bb6fc',1,'IRHitachiAc::toString()'],['../classIRHitachiAc1.html#a20b176622eceed9b7f15091966d86f56',1,'IRHitachiAc1::toString()'],['../classIRHitachiAc424.html#a2fa426e756e6b94a480ddeba4bcde25c',1,'IRHitachiAc424::toString()'],['../classIRHitachiAc344.html#a62c4b681346bb8def0dacda3c92af4b1',1,'IRHitachiAc344::toString()'],['../classIRKelvinatorAC.html#a6635961df47a9847ace3185598750616',1,'IRKelvinatorAC::toString()'],['../classIRLgAc.html#a4a8711f21c894afd2653835be5bcdd9f',1,'IRLgAc::toString()'],['../classIRMideaAC.html#a4980fbb52145e1d12a6fa5601f75018a',1,'IRMideaAC::toString()'],['../classIRMitsubishiAC.html#a2bc1502cc0c28b098d3fb74f3bc83654',1,'IRMitsubishiAC::toString()'],['../classIRMitsubishi136.html#a9b8f30de94d7903ed73e19d55a93ab95',1,'IRMitsubishi136::toString()'],['../classIRMitsubishi112.html#a0a82daa2e90f9080da1a1bce2af95ca7',1,'IRMitsubishi112::toString()'],['../classIRMitsubishiHeavy152Ac.html#a76ae555f0d30b8cf87b4625c14301b44',1,'IRMitsubishiHeavy152Ac::toString()'],['../classIRMitsubishiHeavy88Ac.html#a9647e2c511ba34dbfdc0e4956953691f',1,'IRMitsubishiHeavy88Ac::toString()'],['../classIRNeoclimaAc.html#a5f285a0eb02b57ae0f8dc6d29e7aba83',1,'IRNeoclimaAc::toString()'],['../classIRPanasonicAc.html#ada0b3e2bf11123d0a2f5df8692ae73ad',1,'IRPanasonicAc::toString()'],['../classIRPanasonicAc32.html#a4aee4f688769c04453ac275ffdb1a94c',1,'IRPanasonicAc32::toString()'],['../classIRSamsungAc.html#a9e1b126cbbd3a90e275e632aaa8fd506',1,'IRSamsungAc::toString()'],['../classIRSanyoAc.html#aec5e4f0371da52f752919f510ee1d106',1,'IRSanyoAc::toString()'],['../classIRSharpAc.html#a995b6d988725b60a02dbcf1e0b5b9e5f',1,'IRSharpAc::toString()'],['../classIRTcl112Ac.html#af9bed8c8ef7e25e624f1f4765722acc5',1,'IRTcl112Ac::toString()'],['../classIRTechnibelAc.html#aa7b74876e99ee837f789640403b9c952',1,'IRTechnibelAc::toString()'],['../classIRTecoAc.html#a9fe1e8da3cc963d5d55a4967fe83dcce',1,'IRTecoAc::toString()'],['../classIRToshibaAC.html#a2d83a10c921398a1b32888c68bb4a35d',1,'IRToshibaAC::toString()'],['../classIRTranscoldAc.html#a8be351a7df54e6606eeebc8630ee4029',1,'IRTranscoldAc::toString()'],['../classIRTrotecESP.html#a0c7c6f4b33efcea9332d464908d7c87f',1,'IRTrotecESP::toString()'],['../classIRTrumaAc.html#a0250f4a833b4ec583d28e85dd5ec6f7a',1,'IRTrumaAc::toString()'],['../classIRVestelAc.html#ab13d9ddf1d487acb12a4d8e3cee72b1b',1,'IRVestelAc::toString()'],['../classIRVoltas.html#af650633516b67861f6f074f3be943bbd',1,'IRVoltas::toString()'],['../classIRWhirlpoolAc.html#a26912db41a4e5afa2b3ad2bf537b9170',1,'IRWhirlpoolAc::toString()']]], - ['transcold_3529',['transcold',['../classIRac.html#a788f29495e5ac706bdb4f4efabcb26d0',1,'IRac::transcold()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada67cbbd63e69dfc1ff147fc2a070222ef',1,'TRANSCOLD(): IRremoteESP8266.h']]], - ['transcoldprotocol_3530',['TranscoldProtocol',['../unionTranscoldProtocol.html',1,'']]], - ['trotec_3531',['trotec',['../classIRac.html#aed1a012c0546c2b1d53e86871a42ba1a',1,'IRac::trotec()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7d0f8056d221b37f68f80bace2b794b9',1,'TROTEC(): IRremoteESP8266.h']]], - ['trotecprotocol_3532',['TrotecProtocol',['../unionTrotecProtocol.html',1,'']]], - ['truma_3533',['truma',['../classIRac.html#ab4cffb706bed9926b5eb600eba083482',1,'IRac::truma()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada89f82e81dfba292febe62858976e9e91',1,'TRUMA(): IRremoteESP8266.h']]], - ['trumaprotocol_3534',['TrumaProtocol',['../unionTrumaProtocol.html',1,'']]], - ['turbo_3535',['Turbo',['../unionElectraProtocol.html#af812a40c2acfafe8134e9299d2b80a7a',1,'ElectraProtocol::Turbo()'],['../unionGoodweatherProtocol.html#a007f6dd38f4e7137d08278355941885d',1,'GoodweatherProtocol::Turbo()'],['../unionGreeProtocol.html#a36add055a70df62e09bca1e031314a4d',1,'GreeProtocol::Turbo()'],['../unionHaierYRW02Protocol.html#a1cea874c8398b49e704ba0943284c64a',1,'HaierYRW02Protocol::Turbo()'],['../unionKelvinatorProtocol.html#a53c157f2b60f079f5ce77798084888a5',1,'KelvinatorProtocol::Turbo()'],['../unionNeoclimaProtocol.html#a36e23b1343d0638516232bb44c49416b',1,'NeoclimaProtocol::Turbo()'],['../unionTcl112Protocol.html#a2b994555374f08b3c9f6654211cb698a',1,'Tcl112Protocol::Turbo()'],['../unionVoltasProtocol.html#aa0bfed2718430a9cffdfdc02b345971b',1,'VoltasProtocol::Turbo()'],['../structstdAc_1_1state__t.html#aae084b686685f2b2a07ccdda649e358c',1,'stdAc::state_t::turbo()']]], - ['turboflag_3536',['turboFlag',['../classIRCoolixAC.html#a60a8a848951555dba34f2a317d6611ea',1,'IRCoolixAC']]], - ['turbosleep_3537',['TurboSleep',['../unionVestelProtocol.html#a160beacb49f68008f6f9ecf51b99b84a',1,'VestelProtocol']]], - ['type_3538',['Type',['../unionMideaProtocol.html#ae6deb4675602e9d1be3f8a49c601cdce',1,'MideaProtocol']]], - ['typetostring_3539',['typeToString',['../IRutils_8cpp.html#a9e98a1b929f36dfa75c2e325bf281cd1',1,'typeToString(const decode_type_t protocol, const bool isRepeat): IRutils.cpp'],['../IRutils_8h.html#a7f49135f3d160700eb12ff6b7309341c',1,'typeToString(const decode_type_t protocol, const bool isRepeat=false): IRutils.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.html deleted file mode 100644 index 767aec361..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.js deleted file mode 100644 index 3ea6f143f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_15.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['uint64tostring_3540',['uint64ToString',['../IRutils_8cpp.html#a9f6ddef74b41ef6f8d2805fcfc396420',1,'uint64ToString(uint64_t input, uint8_t base): IRutils.cpp'],['../IRutils_8h.html#a781650451d38303e80da677539f574ee',1,'uint64ToString(uint64_t input, uint8_t base=10): IRutils.cpp']]], - ['uint8tobcd_3541',['uint8ToBcd',['../namespaceirutils.html#a534704a52b75acd46f687cc0a2b91bf1',1,'irutils']]], - ['unithours_3542',['UnitHours',['../unionTecoProtocol.html#a53501f83a1d730135ec75bfb5838821b',1,'TecoProtocol']]], - ['unknown_3543',['unknown',['../unionFujitsuProtocol.html#a1ffda1931475b743913abe2aad2138e3',1,'FujitsuProtocol::unknown()'],['../unionHaierProtocol.html#aabc2a684c5936858544c02ec8a68afb9',1,'HaierProtocol::unknown()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada6ce26a62afab55d7606ad4e92428b30c',1,'UNKNOWN(): IRremoteESP8266.h']]], - ['unknown1_3544',['unknown1',['../unionGreeProtocol.html#ae973c1c723b7162959374e1fd8ecab61',1,'GreeProtocol']]], - ['unknown2_3545',['unknown2',['../unionGreeProtocol.html#aa102f7d68c26f5b8644b13113a5b05f4',1,'GreeProtocol']]], - ['unused_3546',['UNUSED',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa09b651ef326a9d8efcee5cc5b720ab4',1,'IRremoteESP8266.h']]], - ['updateandsavestate_3547',['updateAndSaveState',['../classIRCoolixAC.html#a2681a6affc5fb542584b1ef241bc38af',1,'IRCoolixAC']]], - ['updatechecksums_3548',['updateChecksums',['../namespaceIRXmpUtils.html#a0ada8200316c402f268dd621a3b0695a',1,'IRXmpUtils']]], - ['updateuselongorshort_3549',['updateUseLongOrShort',['../classIRFujitsuAC.html#a0c2aed356899787b8cd51b76b59e01bb',1,'IRFujitsuAC']]], - ['usecmd_3550',['UseCmd',['../unionVestelProtocol.html#ae82716fdc06ba75def19a130d60d9e83',1,'VestelProtocol']]], - ['used_3551',['used',['../structmatch__result__t.html#a26cea305aa83ed65b88ac0b6ed6de54a',1,'match_result_t']]], - ['usefah_3552',['UseFah',['../unionNeoclimaProtocol.html#ae60408715008e78ab8058ab024669955',1,'NeoclimaProtocol::UseFah()'],['../unionTechnibelProtocol.html#a118cbcb15250c35ee423062e5f397662',1,'TechnibelProtocol::UseFah()']]], - ['usefahrenheit_3553',['UseFahrenheit',['../unionGreeProtocol.html#a47c79761efe40c00e6bb01b7712b272c',1,'GreeProtocol::UseFahrenheit()'],['../unionMideaProtocol.html#a1b1258107620bb83fd6356815242e19b',1,'MideaProtocol::useFahrenheit()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.html deleted file mode 100644 index 7bd7afe63..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.js deleted file mode 100644 index c14618bf4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_16.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['validchecksum_3554',['validChecksum',['../classIRAmcorAc.html#a1ad297a62ac3152c9d957cef38757d28',1,'IRAmcorAc::validChecksum()'],['../classIRArgoAC.html#acfa5a9df8273123e6f4c48684ef60006',1,'IRArgoAC::validChecksum()'],['../classIRCarrierAc64.html#affa23f178e079cd3a6c933240759fe80',1,'IRCarrierAc64::validChecksum()'],['../classIRDaikinESP.html#ad766e60827f80b96a66449bddc621d87',1,'IRDaikinESP::validChecksum()'],['../classIRDaikin2.html#ade5c0dbfe38d9ac0c4bc009c897af04d',1,'IRDaikin2::validChecksum()'],['../classIRDaikin216.html#a663c11977545ba01b34715a61a26ab88',1,'IRDaikin216::validChecksum()'],['../classIRDaikin160.html#a0d9f3af404e3b6c116e8c27e938f8479',1,'IRDaikin160::validChecksum()'],['../classIRDaikin176.html#abc97abc68f535f7ad801b393e0a795d5',1,'IRDaikin176::validChecksum()'],['../classIRDaikin128.html#ad0b16e48bff00c5cdeffa1419c003946',1,'IRDaikin128::validChecksum()'],['../classIRDaikin152.html#ade1c641eecea63857115fc20f1811fe7',1,'IRDaikin152::validChecksum()'],['../classIRDaikin64.html#ab04287881112ff21d1ea541c0f21b507',1,'IRDaikin64::validChecksum()'],['../classIRDelonghiAc.html#ae39b20bcea2b7090ac2e29d8cd28e5f6',1,'IRDelonghiAc::validChecksum()'],['../classIRElectraAc.html#a60034a18e7574844fb59a03e7789f419',1,'IRElectraAc::validChecksum()'],['../classIRFujitsuAC.html#a26153c647d127356e47d35a7456c6235',1,'IRFujitsuAC::validChecksum()'],['../classIRGreeAC.html#a74e7df0634f0a60110db8c033d9d5b1d',1,'IRGreeAC::validChecksum()'],['../classIRHaierAC.html#ad7aae554b8f0a76493efc2a43ac0f780',1,'IRHaierAC::validChecksum()'],['../classIRHaierACYRW02.html#a3f6d071d215b0316cccc2e94c4786954',1,'IRHaierACYRW02::validChecksum()'],['../classIRHitachiAc.html#a2549c1fd2e8a603eb8924fbba8b26e87',1,'IRHitachiAc::validChecksum()'],['../classIRHitachiAc1.html#aa6b7ab76567ee15aa08b1594c67bd29d',1,'IRHitachiAc1::validChecksum()'],['../classIRKelvinatorAC.html#aaa915fa5eb3f7e5c7a3dc143b6fda826',1,'IRKelvinatorAC::validChecksum()'],['../classIRLgAc.html#a51748fa24de24049a2fafb4590e84176',1,'IRLgAc::validChecksum()'],['../classIRMideaAC.html#a971ab4af0267bb732834e7e1f7b8e354',1,'IRMideaAC::validChecksum()'],['../classIRMitsubishiAC.html#ad74885e17434aa9038dc19ad74de4cd0',1,'IRMitsubishiAC::validChecksum()'],['../classIRMitsubishi136.html#a666d1268a93e96b50ac9012c09320de9',1,'IRMitsubishi136::validChecksum()'],['../classIRMitsubishiHeavy152Ac.html#abef94200719da0c14e211315ffc8bede',1,'IRMitsubishiHeavy152Ac::validChecksum()'],['../classIRMitsubishiHeavy88Ac.html#aabd9d8f81108f20f1d7adff3ac6c2fd4',1,'IRMitsubishiHeavy88Ac::validChecksum()'],['../classIRNeoclimaAc.html#a32e4b4444e0a97b6da4447e977f74f94',1,'IRNeoclimaAc::validChecksum()'],['../classIRPanasonicAc.html#a6a084754596f7840dd308041d11a822d',1,'IRPanasonicAc::validChecksum()'],['../classIRSamsungAc.html#a4f7339bce78ce2b656fc597b4c88db22',1,'IRSamsungAc::validChecksum()'],['../classIRSanyoAc.html#a77844e855a875ff0f5dc79200a3d2777',1,'IRSanyoAc::validChecksum()'],['../classIRSharpAc.html#acb7fb0ac19e09da02d36cb73c808420d',1,'IRSharpAc::validChecksum()'],['../classIRTcl112Ac.html#a204bc37ffadf72ed31b305197c4803f4',1,'IRTcl112Ac::validChecksum()'],['../classIRTechnibelAc.html#ac0bc7bfe24f72255230c8a4c1c7eb192',1,'IRTechnibelAc::validChecksum()'],['../classIRToshibaAC.html#adc7c1eee14e4de896121ad06e88b61eb',1,'IRToshibaAC::validChecksum()'],['../classIRTrotecESP.html#ae08748e33ed12c536b18f6d0dc4da1c7',1,'IRTrotecESP::validChecksum()'],['../classIRTrumaAc.html#abd89085aeaa1847e37e14c01ac874c69',1,'IRTrumaAc::validChecksum()'],['../classIRVestelAc.html#ad3bcc08fb4242af7dcc65e534816a219',1,'IRVestelAc::validChecksum()'],['../classIRVoltas.html#a020336b6c8fd363d50ca44ba2b78181d',1,'IRVoltas::validChecksum()'],['../classIRWhirlpoolAc.html#a2d891069ebdecc62b03e8c92befa15c6',1,'IRWhirlpoolAc::validChecksum()']]], - ['validsection_3555',['validSection',['../classIRCoronaAc.html#af36894d88e7fb45affc883ba0b077862',1,'IRCoronaAc']]], - ['value_3556',['value',['../classdecode__results.html#a033502b7a6b4b0412e5a2062e33c5f47',1,'decode_results']]], - ['vane_3557',['Vane',['../unionMitsubishi144Protocol.html#af4cb685d4c5f87f6ff61d1305ccd6967',1,'Mitsubishi144Protocol']]], - ['vanebit_3558',['VaneBit',['../unionMitsubishi144Protocol.html#aaefd53cd1441b57b90dc3d21488bbdd3',1,'Mitsubishi144Protocol']]], - ['vent_3559',['Vent',['../unionAmcorProtocol.html#a289bcba64f01cd2c847845f41978d400',1,'AmcorProtocol']]], - ['ventswing_3560',['VentSwing',['../unionKelvinatorProtocol.html#af7cd4e8ebfaa36812d09105c54f868f2',1,'KelvinatorProtocol']]], - ['vestel_3561',['vestel',['../classIRac.html#a9b1cd1a4d44bc56e62128b9dbc178bba',1,'IRac']]], - ['vestel_5fac_3562',['VESTEL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada165413c6395bde985757b5b446f76569',1,'IRremoteESP8266.h']]], - ['vestelprotocol_3563',['VestelProtocol',['../unionVestelProtocol.html',1,'']]], - ['voltas_3564',['voltas',['../classIRac.html#aab4cf3b1872a94835cf1c885b767adb6',1,'IRac::voltas()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada507821565df57e34d8806d2613b1533c',1,'VOLTAS(): IRremoteESP8266.h']]], - ['voltas_5fac_5fremote_5fmodel_5ft_3565',['voltas_ac_remote_model_t',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2',1,'IRsend.h']]], - ['voltasprotocol_3566',['VoltasProtocol',['../unionVoltasProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.html deleted file mode 100644 index 35702ecdd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.js deleted file mode 100644 index 813e1b0e5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_17.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['wall_3567',['Wall',['../unionDaikin128Protocol.html#aed2c5bc365820f2c0a5f27dd68fa8a05',1,'Daikin128Protocol']]], - ['wand_5fid_3568',['wand_id',['../unionmagiquest.html#a1b159cd47635d548e1d4198cd6d41e93',1,'magiquest']]], - ['weeklytimer_3569',['WeeklyTimer',['../unionDaikinESPProtocol.html#a25e632da82856caebd233699fda8d796',1,'DaikinESPProtocol::WeeklyTimer()'],['../unionMitsubishi144Protocol.html#a313d3721705676e04d73aee8a29c4a37',1,'Mitsubishi144Protocol::WeeklyTimer()']]], - ['whirlpool_3570',['whirlpool',['../classIRac.html#ae5f7a03589f614c03c5ad8629100b05a',1,'IRac']]], - ['whirlpool_5fac_3571',['WHIRLPOOL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9faf927323d110269541b356f079b85a',1,'IRremoteESP8266.h']]], - ['whirlpool_5fac_5fremote_5fmodel_5ft_3572',['whirlpool_ac_remote_model_t',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2',1,'IRsend.h']]], - ['whirlpoolprotocol_3573',['WhirlpoolProtocol',['../unionWhirlpoolProtocol.html',1,'']]], - ['whynter_3574',['WHYNTER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada458cdd7fa2b29dc8617c694696580c0c',1,'IRremoteESP8266.h']]], - ['widevane_3575',['WideVane',['../unionMitsubishi144Protocol.html#ad0c48e95ca7e0658edf7c2ac2b541c3c',1,'Mitsubishi144Protocol']]], - ['wifi_3576',['Wifi',['../unionVoltasProtocol.html#aae1406825a156f159c5ad4b28d20364c',1,'VoltasProtocol::Wifi()'],['../unionGreeProtocol.html#a6cf8e0a6c54a5d2b6f14074c6f3dcc92',1,'GreeProtocol::WiFi()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.html deleted file mode 100644 index 540cdb6a5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.js deleted file mode 100644 index 532b01859..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_18.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['xfan_3577',['XFan',['../unionKelvinatorProtocol.html#a44a0ba82ee5dc39f64215d26edb9636c',1,'KelvinatorProtocol::XFan()'],['../unionGreeProtocol.html#a3fbf66dfc2043710c5e00f8230eddb48',1,'GreeProtocol::Xfan()']]], - ['xmp_3578',['XMP',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada009e712c328b21b54c2a099ec8520585',1,'IRremoteESP8266.h']]], - ['xorbytes_3579',['xorBytes',['../IRutils_8cpp.html#aaa2a3fb714375e61051a0b24623b9cc9',1,'xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init): IRutils.cpp'],['../IRutils_8h.html#ab030689a93499311ee8e6621ac8757aa',1,'xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0): IRutils.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.html deleted file mode 100644 index 14e13e7d2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.js deleted file mode 100644 index 318174531..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_19.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['yaw1f_3580',['YAW1F',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9a6b29d752ac8bafc8fedabc1282fccfb6',1,'IRsend.h']]], - ['ybofb_3581',['YBOFB',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9a5d6dadebb4f337aa20ea06a87ae9b34a',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.html deleted file mode 100644 index 233281a12..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.js deleted file mode 100644 index b70d43d8a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1a.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['zepeal_3582',['ZEPEAL',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1622e3d0835b4d47add716811c7bf797',1,'IRremoteESP8266.h']]], - ['zh_2dcn_2eh_3583',['zh-CN.h',['../zh-CN_8h.html',1,'']]], - ['zonefollow1_3584',['ZoneFollow1',['../unionCoolixProtocol.html#a5f19a21823bbdb6d5deceb03db0d3d5b',1,'CoolixProtocol']]], - ['zonefollow2_3585',['ZoneFollow2',['../unionCoolixProtocol.html#ade33ba99bcfcf9d7dac334e56e9bb167',1,'CoolixProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.html deleted file mode 100644 index 470a5bffa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.js deleted file mode 100644 index 1a7279710..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_1b.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_7eirrecv_3586',['~IRrecv',['../classIRrecv.html#a87d4cca5e350177cb0922842dda1eb5b',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.html deleted file mode 100644 index b26d91650..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.js deleted file mode 100644 index 7fd3a76a9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_2.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['backup_115',['backup',['../classIRToshibaAC.html#adc8d8c6918cd110f524f6bedf6f2bb6e',1,'IRToshibaAC']]], - ['basicfan_116',['BasicFan',['../unionKelvinatorProtocol.html#a9237eb894fd7d6807169d18655bb3261',1,'KelvinatorProtocol']]], - ['bcdtouint8_117',['bcdToUint8',['../namespaceirutils.html#af18c4abfd0ed9f4b3a099ecec1999ee7',1,'irutils']]], - ['beep_118',['Beep',['../unionDaikin2Protocol.html#ae464d693bde12c9a0085cf268010d158',1,'Daikin2Protocol::Beep()'],['../unionSamsungProtocol.html#a80645f900ef2b45b44b0b9522f4265cc',1,'SamsungProtocol::Beep()'],['../unionSanyoProtocol.html#a56e41c218b229561ee48e9e0184981bd',1,'SanyoProtocol::Beep()'],['../structstdAc_1_1state__t.html#a468ce4cf8b68467964b1f1840257663d',1,'stdAc::state_t::beep()']]], - ['beepdisable_119',['BeepDisable',['../unionMideaProtocol.html#a2a1d3b51765737427adb5dddcda84d60',1,'MideaProtocol']]], - ['begin_120',['begin',['../classIRAirwellAc.html#a09a142457af5e012405da80ddaef1dc0',1,'IRAirwellAc::begin()'],['../classIRAmcorAc.html#aa723533eea981f79844f241d5bb84654',1,'IRAmcorAc::begin()'],['../classIRArgoAC.html#aca61a63c37797699540c180354809bd8',1,'IRArgoAC::begin()'],['../classIRCarrierAc64.html#a7d9800edffad8a529971535ada5c00ad',1,'IRCarrierAc64::begin()'],['../classIRCoolixAC.html#a089744bd3bfd65253cd507192afc5311',1,'IRCoolixAC::begin()'],['../classIRCoronaAc.html#a7db1a8eb9c3c7f76091b2707458e54a9',1,'IRCoronaAc::begin()'],['../classIRDaikinESP.html#accd087c48f246a71898cc6fd7afc2cc7',1,'IRDaikinESP::begin()'],['../classIRDaikin2.html#a0fc6c2ca326a1f3b3e4e2b87643d044b',1,'IRDaikin2::begin()'],['../classIRDaikin216.html#ab78433160895dd26cabf4fd2c4b7515d',1,'IRDaikin216::begin()'],['../classIRDaikin160.html#a653727b34a1e50bef14ef0033a4f013a',1,'IRDaikin160::begin()'],['../classIRDaikin176.html#a0e41b220033f16e57664f8d59b6e890b',1,'IRDaikin176::begin()'],['../classIRDaikin128.html#ac1687817fe17f87e0962eb07be81c84d',1,'IRDaikin128::begin()'],['../classIRDaikin152.html#a06039da8e295b6cc785489989c2b012d',1,'IRDaikin152::begin()'],['../classIRDaikin64.html#a9af2d9d594db9114397fb87d19bbb459',1,'IRDaikin64::begin()'],['../classIRDelonghiAc.html#af3e6d5f445b5968fc69792a1c06f6d5b',1,'IRDelonghiAc::begin()'],['../classIREcoclimAc.html#a828ba8b5663d3ceabe8529d4ece87400',1,'IREcoclimAc::begin()'],['../classIRElectraAc.html#afff519ff9e81ec4aa03ff337f8efef13',1,'IRElectraAc::begin()'],['../classIRFujitsuAC.html#af0dc3fffdafae5970bc367f31029464b',1,'IRFujitsuAC::begin()'],['../classIRGoodweatherAc.html#abace3c8b25d4737a83fe33f94fc741d9',1,'IRGoodweatherAc::begin()'],['../classIRGreeAC.html#a44cf8f0e09248741094af4b35321ab1c',1,'IRGreeAC::begin()'],['../classIRHaierAC.html#ab92fd48ccb5707cb6d14e9d46ce42e17',1,'IRHaierAC::begin()'],['../classIRHaierACYRW02.html#addc01e60e8c4045fab6f22c852eb620f',1,'IRHaierACYRW02::begin()'],['../classIRHitachiAc.html#a62817c840f352bb01a394c37fc95f0f0',1,'IRHitachiAc::begin()'],['../classIRHitachiAc1.html#a28d5d351003d3e0bc1506b06cac8b3d6',1,'IRHitachiAc1::begin()'],['../classIRHitachiAc424.html#a11866bba49e9b976eb22b1039787ecae',1,'IRHitachiAc424::begin()'],['../classIRHitachiAc3.html#a6d79ac7b8ce977e8059019349d6991a7',1,'IRHitachiAc3::begin()'],['../classIRKelvinatorAC.html#a4591bf4e8131aa2a228cbc611156e7f4',1,'IRKelvinatorAC::begin()'],['../classIRLgAc.html#ac08ada1c67ace5ee2ebe4d325aa8c25d',1,'IRLgAc::begin()'],['../classIRMideaAC.html#ac36b6aa76b6b98ab186cd1d5ad9246b4',1,'IRMideaAC::begin()'],['../classIRMitsubishiAC.html#aa6e58080fd811f5b6d0f90c4ef5917df',1,'IRMitsubishiAC::begin()'],['../classIRMitsubishi136.html#abbcd8307862beee2899d2b9900537520',1,'IRMitsubishi136::begin()'],['../classIRMitsubishi112.html#a1d00958556872286b1818d0dbf02e112',1,'IRMitsubishi112::begin()'],['../classIRMitsubishiHeavy152Ac.html#afd649a53d9f7d9b31b7a5732d6cd0857',1,'IRMitsubishiHeavy152Ac::begin()'],['../classIRMitsubishiHeavy88Ac.html#a9bcf18c942ad4df4856bd319215a2002',1,'IRMitsubishiHeavy88Ac::begin()'],['../classIRNeoclimaAc.html#a8f82159b94d86cc4e3d4719441bfa96e',1,'IRNeoclimaAc::begin()'],['../classIRPanasonicAc.html#af48075dc4eb84fcc7f718375d4b0e00a',1,'IRPanasonicAc::begin()'],['../classIRPanasonicAc32.html#a8f57fefe38eac51f49113a21defadc4c',1,'IRPanasonicAc32::begin()'],['../classIRSamsungAc.html#a89f1f902042cd6c6ba9d0f0c6d2cc581',1,'IRSamsungAc::begin()'],['../classIRSanyoAc.html#af4859c4049a35b7f82cf91d326c9a957',1,'IRSanyoAc::begin()'],['../classIRSharpAc.html#ab87e5b599b7e8fc387fff25b5e13e34f',1,'IRSharpAc::begin()'],['../classIRTcl112Ac.html#a5b9983ab4027951679f0dc31b33cbadf',1,'IRTcl112Ac::begin()'],['../classIRTechnibelAc.html#a094f2f3b3690ddd773a175bacd99f894',1,'IRTechnibelAc::begin()'],['../classIRTecoAc.html#a3b23a8556686c83b146101fc31b0dff3',1,'IRTecoAc::begin()'],['../classIRToshibaAC.html#a41e847f399e42c91b0f4aa2ef5d36cba',1,'IRToshibaAC::begin()'],['../classIRTranscoldAc.html#ad3daf2c7108712b6e54eba9c68071910',1,'IRTranscoldAc::begin()'],['../classIRTrotecESP.html#a093b874287adb8ef2cc60c832765ff58',1,'IRTrotecESP::begin()'],['../classIRTrumaAc.html#a46d8ace3fd0d30f07c35b52c4d9ff71a',1,'IRTrumaAc::begin()'],['../classIRVestelAc.html#a794808d49eb6ce1521ff800b2b15a580',1,'IRVestelAc::begin()'],['../classIRVoltas.html#a1b895fa945ce8c6f81444d9306a59d65',1,'IRVoltas::begin()'],['../classIRWhirlpoolAc.html#a21db8b31504d416efb2511a33bdc2209',1,'IRWhirlpoolAc::begin()'],['../classIRsend.html#a386f026bf739b0718efde4cffa6ce129',1,'IRsend::begin()']]], - ['bits_121',['bits',['../classdecode__results.html#aa5ba2fd53bdb36bdc120d8eabd9f36d7',1,'decode_results']]], - ['booltostring_122',['boolToString',['../classIRac.html#a9bbd9e6b72e82a752df56e8c489668cf',1,'IRac']]], - ['boost_123',['Boost',['../unionDelonghiProtocol.html#ad3347e0739d5c00f3fb5cba7c9f53bcd',1,'DelonghiProtocol']]], - ['breeze_124',['Breeze',['../unionSamsungProtocol.html#a5b60f239d70e2005e14e0f4c3c9f8986',1,'SamsungProtocol']]], - ['bufsize_125',['bufsize',['../structirparams__t.html#a2b34d697b85ee6a0ce08344c941e50ec',1,'irparams_t']]], - ['buildfromstate_126',['buildFromState',['../classIRFujitsuAC.html#a6fc8d7d0f649185e0858974394636a8d',1,'IRFujitsuAC']]], - ['button_127',['Button',['../unionHaierYRW02Protocol.html#ab5b13626ecf6214cc1be52d47909915d',1,'HaierYRW02Protocol::Button()'],['../unionHitachi424Protocol.html#aaadfa5a2e789fb1159ce795f833b83e5',1,'Hitachi424Protocol::Button()'],['../unionNeoclimaProtocol.html#aedacead75ecd658f9e2c8c3a23d2bc58',1,'NeoclimaProtocol::Button()']]], - ['byte_128',['byte',['../unionmagiquest.html#af1a9c9a147a1610fe5f0e77ca3e09e44',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.html deleted file mode 100644 index b61b96f83..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.js deleted file mode 100644 index 7b9906bc1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_3.js +++ /dev/null @@ -1,67 +0,0 @@ -var searchData= -[ - ['calcblockchecksum_129',['calcBlockChecksum',['../classIRKelvinatorAC.html#a22f561397c526ed6cc3f69a5d527d8d6',1,'IRKelvinatorAC']]], - ['calcchecksum_130',['calcChecksum',['../classIRAmcorAc.html#aec764cf4d88bb3fcbe3f36d24780f6a9',1,'IRAmcorAc::calcChecksum()'],['../classIRArgoAC.html#acab2fe3b9f77f57f0e99da0bec0d7392',1,'IRArgoAC::calcChecksum()'],['../classIRCarrierAc64.html#a20676dcf4b0a6510cc3bce282fbf8504',1,'IRCarrierAc64::calcChecksum()'],['../classIRDaikin64.html#ac29c18fde1b0cd98991e68c0f672d0e9',1,'IRDaikin64::calcChecksum()'],['../classIRDelonghiAc.html#a14d7629bb888deb02e83886191f44c2d',1,'IRDelonghiAc::calcChecksum()'],['../classIRElectraAc.html#aa8063d07e41ca2cc0fd27093a2e67bb2',1,'IRElectraAc::calcChecksum()'],['../classIRHitachiAc.html#a6e5da77c12ad105439eb159b6a58104a',1,'IRHitachiAc::calcChecksum()'],['../classIRHitachiAc1.html#a6995513d5b59cd7b14cfff39c8843e8d',1,'IRHitachiAc1::calcChecksum()'],['../classIRLgAc.html#a96024e736cf87e65b4e2db7c4c269520',1,'IRLgAc::calcChecksum()'],['../classIRMideaAC.html#ac8733348b311ecf8eed87021cdf4ee31',1,'IRMideaAC::calcChecksum()'],['../classIRNeoclimaAc.html#ac75f316cd1813cdb4e8a6d45d10ddd57',1,'IRNeoclimaAc::calcChecksum()'],['../classIRPanasonicAc.html#a0e38b0f3c54e49cdb59f92279e19840f',1,'IRPanasonicAc::calcChecksum()'],['../classIRSamsungAc.html#a00f9b2a1480d2ed45bdea5d236c77d0f',1,'IRSamsungAc::calcChecksum()'],['../classIRSanyoAc.html#a7836c947d6d725d6c55ae2ca9e8b445d',1,'IRSanyoAc::calcChecksum()'],['../classIRSharpAc.html#af3655c9c394b1391572e8ffab70881ff',1,'IRSharpAc::calcChecksum()'],['../classIRTcl112Ac.html#a0973a1c8a53661ee7720ecb5d08e6dcc',1,'IRTcl112Ac::calcChecksum()'],['../classIRTechnibelAc.html#a1762ef4003cec898543cebe0957e2c8b',1,'IRTechnibelAc::calcChecksum()'],['../classIRToshibaAC.html#a0d91d32d0d9d722f750eb423d88509f4',1,'IRToshibaAC::calcChecksum()'],['../classIRTrotecESP.html#ac1fdbcbbb8dd1ca50ccf2b55c7281c89',1,'IRTrotecESP::calcChecksum()'],['../classIRTrumaAc.html#a88f8ba515492d3d217f6476e0f386f1e',1,'IRTrumaAc::calcChecksum()'],['../classIRVestelAc.html#ac0ba3de4de70350c5325b3d5e0b39e58',1,'IRVestelAc::calcChecksum()'],['../classIRVoltas.html#a0069131bedc4b97a61547abe9640fd09',1,'IRVoltas::calcChecksum()']]], - ['calcfirstchecksum_131',['calcFirstChecksum',['../classIRDaikin128.html#a25b25f6b73bb5f1fd17a16080179d4bc',1,'IRDaikin128']]], - ['calcrepeatoffset_132',['calcRepeatOffset',['../namespaceIRXmpUtils.html#adbf7d8c8f73c5c9beca3094871d6a7c2',1,'IRXmpUtils']]], - ['calcsecondchecksum_133',['calcSecondChecksum',['../classIRDaikin128.html#aea8da64300afe0d62ddf3082a72251f2',1,'IRDaikin128']]], - ['calcsectionchecksum_134',['calcSectionChecksum',['../namespaceIRXmpUtils.html#a170c46b9aa59d1717fdff6f932353dca',1,'IRXmpUtils']]], - ['calculatechecksum_135',['calculateChecksum',['../classIRMitsubishiAC.html#aaadefc5880dcd48e3fb2f12b59101f71',1,'IRMitsubishiAC']]], - ['calcusecperiod_136',['calcUSecPeriod',['../classIRsend.html#ae9e68c0ed22e27c8f7ff82cec7ca3e33',1,'IRsend']]], - ['calibrate_137',['calibrate',['../classIRAirwellAc.html#ae7a80cbb217d35835961477caaea3218',1,'IRAirwellAc::calibrate()'],['../classIRAmcorAc.html#a6206e866e859bc4690cb014c49c1ff80',1,'IRAmcorAc::calibrate()'],['../classIRArgoAC.html#a63cd2f350a7f249c020439543ef3c6d5',1,'IRArgoAC::calibrate()'],['../classIRCarrierAc64.html#a0718376156750e66f98ea0549c75b21b',1,'IRCarrierAc64::calibrate()'],['../classIRCoolixAC.html#a9e39ce5050888210d6ba9b79ae3763e3',1,'IRCoolixAC::calibrate()'],['../classIRCoronaAc.html#a5b10141e4a6e3d8511fb7f9f46d00a96',1,'IRCoronaAc::calibrate()'],['../classIRDaikinESP.html#a638a49f49275a2ab0affb09088794e1b',1,'IRDaikinESP::calibrate()'],['../classIRDaikin2.html#a96c62125bddf113c6524960062d05a57',1,'IRDaikin2::calibrate()'],['../classIRDaikin216.html#a49d7501966528c0a690cfb505f163e26',1,'IRDaikin216::calibrate()'],['../classIRDaikin160.html#a608b5556f316c31e3a8aa73684e4e10d',1,'IRDaikin160::calibrate()'],['../classIRDaikin176.html#a1f5989110782c18aa18e3757c50f4a31',1,'IRDaikin176::calibrate()'],['../classIRDaikin128.html#a281396f4c632899648694e3139c3acd0',1,'IRDaikin128::calibrate()'],['../classIRDaikin152.html#a82fa8bfb3384ed09473345b6e194c3ba',1,'IRDaikin152::calibrate()'],['../classIRDaikin64.html#a12a1e21ba1b06f9b3ffac56691ff2206',1,'IRDaikin64::calibrate()'],['../classIRDelonghiAc.html#aab8f78adcd7fcbea0be753a4fc7696e0',1,'IRDelonghiAc::calibrate()'],['../classIREcoclimAc.html#a20a2b503f5125a90c4ab183dfe92446b',1,'IREcoclimAc::calibrate()'],['../classIRElectraAc.html#af333e90117ab035ff92389d4eefb3649',1,'IRElectraAc::calibrate()'],['../classIRFujitsuAC.html#a8bb6d8456561dfb04ccac95e0e489558',1,'IRFujitsuAC::calibrate()'],['../classIRGoodweatherAc.html#a8a747144587cf38d64bb32a7f86432b3',1,'IRGoodweatherAc::calibrate()'],['../classIRGreeAC.html#a8069d00a16ed04fd6fa10d84b364bca7',1,'IRGreeAC::calibrate()'],['../classIRHaierAC.html#a448b1d5db05f7722db4758e968ea3171',1,'IRHaierAC::calibrate()'],['../classIRHaierACYRW02.html#a2081b29d0526e339a6b94fc41c854197',1,'IRHaierACYRW02::calibrate()'],['../classIRHitachiAc.html#aaabd743da491ef5d73c4b8c46f11241a',1,'IRHitachiAc::calibrate()'],['../classIRHitachiAc1.html#a847a26df2e19668b147cba2eef595a21',1,'IRHitachiAc1::calibrate()'],['../classIRHitachiAc424.html#aae5e5c13767f335331c5fab8d8ba55d6',1,'IRHitachiAc424::calibrate()'],['../classIRHitachiAc3.html#a02e065c08f9ec4a3d9e6f71432087595',1,'IRHitachiAc3::calibrate()'],['../classIRKelvinatorAC.html#aee8863c1678b09432618bb4ca734db95',1,'IRKelvinatorAC::calibrate()'],['../classIRLgAc.html#a4fd11e935c781319b29f606f2f4b2570',1,'IRLgAc::calibrate()'],['../classIRMideaAC.html#a4077604c2af56783f95a0a64eda7148b',1,'IRMideaAC::calibrate()'],['../classIRMitsubishiAC.html#a973c876e34942776ac98f27de96c5228',1,'IRMitsubishiAC::calibrate()'],['../classIRMitsubishi136.html#a76133542efc3763cb7edc9809ad8d93c',1,'IRMitsubishi136::calibrate()'],['../classIRMitsubishi112.html#ad148250070a3f4ac57ed6cb957ffdefb',1,'IRMitsubishi112::calibrate()'],['../classIRMitsubishiHeavy152Ac.html#a5d4c4ce0e69ed33a2f1db2af127c13c5',1,'IRMitsubishiHeavy152Ac::calibrate()'],['../classIRMitsubishiHeavy88Ac.html#a027423ffbee92ef65b02423f7cbaeca8',1,'IRMitsubishiHeavy88Ac::calibrate()'],['../classIRNeoclimaAc.html#a636dd97ca22c847f966eca8112c8eede',1,'IRNeoclimaAc::calibrate()'],['../classIRPanasonicAc.html#a3f850333f2aa7ce40856c99ef85ffd79',1,'IRPanasonicAc::calibrate()'],['../classIRPanasonicAc32.html#a99218b5c80a3cedda986df9bfbcf5065',1,'IRPanasonicAc32::calibrate()'],['../classIRSamsungAc.html#a5cc7486ae41f61cbe0bb053dd7c9e9e3',1,'IRSamsungAc::calibrate()'],['../classIRSanyoAc.html#a603f8f7dcfa1c3707a64ee092c72cb09',1,'IRSanyoAc::calibrate()'],['../classIRSharpAc.html#ac37b1a5679ce90e84f6f95c5df1526bb',1,'IRSharpAc::calibrate()'],['../classIRTcl112Ac.html#a435744e4c6ef31b362d15523ce0584f5',1,'IRTcl112Ac::calibrate()'],['../classIRTechnibelAc.html#a137e375497c699b0e7bfd8a7d46f087c',1,'IRTechnibelAc::calibrate()'],['../classIRTecoAc.html#ad700578cbae74857483372597a399ff3',1,'IRTecoAc::calibrate()'],['../classIRToshibaAC.html#a74c66bba288cb3cbb43008edb7b376bf',1,'IRToshibaAC::calibrate()'],['../classIRTranscoldAc.html#ae91dbd4a94ff4cd648c283b9f18bc149',1,'IRTranscoldAc::calibrate()'],['../classIRTrotecESP.html#a56de318a27011e0bddb40738c18dbcf2',1,'IRTrotecESP::calibrate()'],['../classIRTrumaAc.html#a6596a2fd4644358a6f122db2a94447e7',1,'IRTrumaAc::calibrate()'],['../classIRVestelAc.html#aae91667d96d86de824a20c256c311f15',1,'IRVestelAc::calibrate()'],['../classIRVoltas.html#ac264033a983290d9c194fde822ed63a4',1,'IRVoltas::calibrate()'],['../classIRWhirlpoolAc.html#a006c59c1c84c62fccd3730bec30ef5e8',1,'IRWhirlpoolAc::calibrate()'],['../classIRsend.html#ad1776aa6c699f9eeca1eef9bb4fe355b',1,'IRsend::calibrate()']]], - ['cancelofftimer_138',['cancelOffTimer',['../classIRPanasonicAc.html#a6d202284320c59205cb0d02cb613cada',1,'IRPanasonicAc']]], - ['cancelontimer_139',['cancelOnTimer',['../classIRPanasonicAc.html#a102e7c029a923e121e40326859f2e4a3',1,'IRPanasonicAc']]], - ['canceltimers_140',['cancelTimers',['../classIRHaierAC.html#a1cccc733f74232751f95c32e47795638',1,'IRHaierAC']]], - ['carrier64_141',['carrier64',['../classIRac.html#a8090f2d79a31b81a0342b2e9efb9d555',1,'IRac']]], - ['carrier_5fac_142',['CARRIER_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4d7328071e0a48bc828fccb02f969c20',1,'IRremoteESP8266.h']]], - ['carrier_5fac40_143',['CARRIER_AC40',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1340c578f7986b0ed126744127af3907',1,'IRremoteESP8266.h']]], - ['carrier_5fac64_144',['CARRIER_AC64',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4122973f5d8ce282457d348857ba0af0',1,'IRremoteESP8266.h']]], - ['carrierprotocol_145',['CarrierProtocol',['../unionCarrierProtocol.html',1,'']]], - ['ceiling_146',['Ceiling',['../unionDaikin128Protocol.html#a8d2eb9c3a65bd4ecd111d1eccbb4ebe1',1,'Daikin128Protocol']]], - ['celsius_147',['celsius',['../structstdAc_1_1state__t.html#a235b17f3979b155b368bfdc2b14123f5',1,'stdAc::state_t']]], - ['celsiustofahrenheit_148',['celsiusToFahrenheit',['../IRutils_8cpp.html#a19b940e26a4f8ddcaf86cce1ec62d563',1,'celsiusToFahrenheit(const float deg): IRutils.cpp'],['../IRutils_8h.html#a19b940e26a4f8ddcaf86cce1ec62d563',1,'celsiusToFahrenheit(const float deg): IRutils.cpp']]], - ['cheat_149',['CHeat',['../unionNeoclimaProtocol.html#aba91857f67b7039783cd6c504de1ad64',1,'NeoclimaProtocol']]], - ['checkinvertedbytepairs_150',['checkInvertedBytePairs',['../namespaceirutils.html#ab27a18cec663509b4d0df094575c2f64',1,'irutils']]], - ['checksum_151',['checkSum',['../classIRFujitsuAC.html#ad89b20a62f08acb326d7f6613b815eaf',1,'IRFujitsuAC::checkSum()'],['../unionVoltasProtocol.html#a4349ae4488d2d9c9dd5606502d486b19',1,'VoltasProtocol::Checksum()'],['../classIRAmcorAc.html#a67244a75731be6a3bd96ecc0384d0113',1,'IRAmcorAc::checksum()'],['../classIRArgoAC.html#ab0fe4e42d1c1201a92f5c4738b869763',1,'IRArgoAC::checksum()'],['../classIRCarrierAc64.html#a005fab56acf94fe97db7fa92651b2882',1,'IRCarrierAc64::checksum()'],['../classIRCoronaAc.html#ae0257fdafacf7fd2e7ac6ca3f8ae3168',1,'IRCoronaAc::checksum()'],['../classIRDaikinESP.html#ac8ac2a0674dc5cfaf514d319b51b20ab',1,'IRDaikinESP::checksum()'],['../classIRDaikin2.html#a0d418ae9490b2a24d680998209e5c7ea',1,'IRDaikin2::checksum()'],['../classIRDaikin216.html#ae9d7d1ed13a6f32e5a30975f72554fba',1,'IRDaikin216::checksum()'],['../classIRDaikin160.html#aac3b34aeae49f5179aa3f06fad28925d',1,'IRDaikin160::checksum()'],['../classIRDaikin176.html#a155e0dc2c7fcc334fffdef64c31c33fd',1,'IRDaikin176::checksum()'],['../classIRDaikin128.html#a747c906808c269581de6cf9b02e5c0a7',1,'IRDaikin128::checksum()'],['../classIRDaikin152.html#a2e39f879606a7b2c72869f3c9537cb07',1,'IRDaikin152::checksum()'],['../classIRDaikin64.html#a796e6a58cbb6f1920349db019952f355',1,'IRDaikin64::checksum()'],['../classIRDelonghiAc.html#ae4c4e7140a763eee159991f5c8afc54f',1,'IRDelonghiAc::checksum()'],['../classIRElectraAc.html#a73dc5b9a038669cc1f00f5b64ad458d1',1,'IRElectraAc::checksum()'],['../classIRGreeAC.html#aaa6b2702d79a7a3db454b99d71064679',1,'IRGreeAC::checksum()'],['../classIRHaierAC.html#ab7faae274ff7f30bf7df3c58d6e7e210',1,'IRHaierAC::checksum()'],['../classIRHaierACYRW02.html#a18045defdd5641ae13c7c75dda0cf23a',1,'IRHaierACYRW02::checksum()'],['../classIRHitachiAc.html#a3b65ccbd6de6b5dcb5a794b471e363f5',1,'IRHitachiAc::checksum()'],['../classIRHitachiAc1.html#aa6687d6282b134d508d6534e8446b341',1,'IRHitachiAc1::checksum()'],['../classIRKelvinatorAC.html#aad752fda68767a47d77ae4e1eeb550f7',1,'IRKelvinatorAC::checksum()'],['../classIRLgAc.html#a438cbbb77668205c3f2b59b8f28585cd',1,'IRLgAc::checksum()'],['../classIRMideaAC.html#a418b7cbb4b388dba732176d891bb499d',1,'IRMideaAC::checksum()'],['../classIRMitsubishiAC.html#a7c5b1e5c53d99f1564d8a0424f626adb',1,'IRMitsubishiAC::checksum()'],['../classIRMitsubishi136.html#aa2c6fe9b28462052cf6627960126a783',1,'IRMitsubishi136::checksum()'],['../classIRMitsubishi112.html#a65ee232bfc09d05724b8ec5ada538ccf',1,'IRMitsubishi112::checksum()'],['../classIRMitsubishiHeavy152Ac.html#a14cdcaeefef283f707d0fae5108d65f4',1,'IRMitsubishiHeavy152Ac::checksum()'],['../classIRMitsubishiHeavy88Ac.html#acb03ef0da10d3fec14c71bfa087a02b8',1,'IRMitsubishiHeavy88Ac::checksum()'],['../classIRNeoclimaAc.html#acba18ea35a59f6f1ccbcfd75e7979feb',1,'IRNeoclimaAc::checksum()'],['../classIRSamsungAc.html#a75c5886916dd3ef3aa6f96f04934048d',1,'IRSamsungAc::checksum()'],['../classIRSanyoAc.html#abeb47f286c0228d5694a0b8218a29408',1,'IRSanyoAc::checksum()'],['../classIRSharpAc.html#ad87f46ad9220213d77022dc34920d802',1,'IRSharpAc::checksum()'],['../classIRTcl112Ac.html#a2486f46c7db6a3dfbe3af9c842ff37fa',1,'IRTcl112Ac::checksum()'],['../classIRTechnibelAc.html#af93f984eacd2820cad58400a85b0f05b',1,'IRTechnibelAc::checksum()'],['../classIRToshibaAC.html#a5aa2c6fc3b07830f872f98906df7e9ec',1,'IRToshibaAC::checksum()'],['../classIRTrotecESP.html#a5e416e083653ab365f65b3f645f60e8c',1,'IRTrotecESP::checksum()'],['../classIRTrumaAc.html#a5bdb72773b8b2583754227d4f22e4573',1,'IRTrumaAc::checksum()'],['../classIRVestelAc.html#a7a9046e7b5ff57864862bf5f7ad23c4d',1,'IRVestelAc::checksum()'],['../classIRVoltas.html#acd7b669c0ef94959f1fc9d7a8f7abe8a',1,'IRVoltas::checksum()'],['../classIRWhirlpoolAc.html#a7790be3df6c4609e5c08c17c5ee52047',1,'IRWhirlpoolAc::checksum()']]], - ['checkzjssig_152',['checkZjsSig',['../classIRMitsubishiHeavy88Ac.html#a6aaf8ae4c9b52d73229b20414099f309',1,'IRMitsubishiHeavy88Ac']]], - ['checkzmssig_153',['checkZmsSig',['../classIRMitsubishiHeavy152Ac.html#a3d1c9d2c98945d21eb1ce82fac1771d2',1,'IRMitsubishiHeavy152Ac']]], - ['clean_154',['Clean',['../unionDaikin2Protocol.html#a064d834228a18ca64cefc3d246db9bad',1,'Daikin2Protocol::Clean()'],['../unionElectraProtocol.html#aa51de8a1e38d432aad7d2e0a656db86e',1,'ElectraProtocol::Clean()'],['../unionFujitsuProtocol.html#a0080a99d466ee4924b128fb3271edfee',1,'FujitsuProtocol::Clean()'],['../unionMitsubishi152Protocol.html#aef8f83b0301182a5f75f604b473b7c10',1,'Mitsubishi152Protocol::Clean()'],['../unionMitsubishi88Protocol.html#a458d9bec45523636e7caf452bf5e46c6',1,'Mitsubishi88Protocol::Clean()'],['../unionSharpProtocol.html#ad5b81ea43a14061b02bed374bce16ce5',1,'SharpProtocol::Clean()'],['../structstdAc_1_1state__t.html#a703fa57ade60d68deccbb2a59258b32a',1,'stdAc::state_t::clean()']]], - ['clean10_155',['Clean10',['../unionSamsungProtocol.html#a4d3bce30e1795bc4e95c0209c5e702b2',1,'SamsungProtocol']]], - ['clean11_156',['Clean11',['../unionSamsungProtocol.html#af33c314cfb3a42cb7536c4a809a9fa0c',1,'SamsungProtocol']]], - ['cleanflag_157',['cleanFlag',['../classIRCoolixAC.html#a9280bc7517713dae451a64e35674804d',1,'IRCoolixAC']]], - ['cleanstate_158',['cleanState',['../classIRac.html#aad988dc123495012758307213a933f37',1,'IRac']]], - ['clear_159',['Clear',['../unionEcoclimProtocol.html#a424f9fd7d803ad18d4bf32ff0f3342b3',1,'EcoclimProtocol']]], - ['clearontimerflag_160',['clearOnTimerFlag',['../classIRDaikin2.html#a1e6507bb20167547d175496ffc5ed39d',1,'IRDaikin2']]], - ['clearpowerspecial_161',['clearPowerSpecial',['../classIRSharpAc.html#a3c98c96a66dff560941e461a70efdb1a',1,'IRSharpAc']]], - ['clearsensortemp_162',['clearSensorTemp',['../classIRCoolixAC.html#a1881a0c74685920b54cbbbfb6adbb0c6',1,'IRCoolixAC']]], - ['clearsleeptimerflag_163',['clearSleepTimerFlag',['../classIRDaikin2.html#a2e00f01a66257966c7a166d66d01de93',1,'IRDaikin2']]], - ['clock_164',['Clock',['../unionEcoclimProtocol.html#a521fbbb17cf7755806d62ede90144f5c',1,'EcoclimProtocol::Clock()'],['../unionMitsubishi144Protocol.html#a61b5a9fa2305eedb437c8e9d01b3a7fe',1,'Mitsubishi144Protocol::Clock()'],['../structstdAc_1_1state__t.html#ab1d76172930ebfe992fd9b700369e787',1,'stdAc::state_t::clock()']]], - ['clockhours_165',['ClockHours',['../unionDaikin128Protocol.html#a1de4c4ec4a98bcfff4d515d0c84f5c4d',1,'Daikin128Protocol::ClockHours()'],['../unionDaikin64Protocol.html#a0405fde38f8da649561cb58df28ac5b7',1,'Daikin64Protocol::ClockHours()'],['../unionWhirlpoolProtocol.html#a5241ed48023d1b4dd8042a39d9ef83fe',1,'WhirlpoolProtocol::ClockHours()']]], - ['clockmins_166',['ClockMins',['../unionDaikin128Protocol.html#afbed1ec9c718f417c25968a3f3b14681',1,'Daikin128Protocol::ClockMins()'],['../unionDaikin64Protocol.html#a5263808e2456f707bded2d8f244ca370',1,'Daikin64Protocol::ClockMins()'],['../unionWhirlpoolProtocol.html#aebb367f02ac1b311c75236ad44e5666a',1,'WhirlpoolProtocol::ClockMins()']]], - ['cmd_167',['Cmd',['../unionFujitsuProtocol.html#a9361fb99d71caae87e3f7c10b7f1bd5f',1,'FujitsuProtocol::Cmd()'],['../unionWhirlpoolProtocol.html#a19b065181eaf22cf7878176a2914100e',1,'WhirlpoolProtocol::Cmd()'],['../unionmagiquest.html#a2cee09c24c7304674f6f8df60c159540',1,'magiquest::cmd()']]], - ['cmdstate_168',['cmdState',['../unionVestelProtocol.html#a823af315c3a09e3deaefa838b8c9deb5',1,'VestelProtocol']]], - ['cmdsum_169',['CmdSum',['../unionVestelProtocol.html#acc13a6d521b86c1a1e03e98a6b67eeef',1,'VestelProtocol']]], - ['cmpstates_170',['cmpStates',['../classIRac.html#a3ba4eee08650dfcdd6d492a67c86f016',1,'IRac']]], - ['comfort_171',['Comfort',['../unionDaikinESPProtocol.html#a276e609fab153bdac93341ac4f76a09c',1,'DaikinESPProtocol::Comfort()'],['../unionDaikin152Protocol.html#a1fa909ea9a26e65e354aa6a59c69d163',1,'Daikin152Protocol::Comfort()']]], - ['command_172',['Command',['../unionGoodweatherProtocol.html#acaa336e2b9915da4dfb51e4738af9265',1,'GoodweatherProtocol::Command()'],['../unionHaierProtocol.html#aeb39971e74e12fb0c7463006d6c644bd',1,'HaierProtocol::Command()'],['../classdecode__results.html#a9b750d09f713b0693472f815fd0fd402',1,'decode_results::command()']]], - ['compare_173',['compare',['../classIRrecv.html#ad7347c72b14d9f2f20f65bcf235ab3dc',1,'IRrecv']]], - ['convertfan_174',['convertFan',['../classIRAirwellAc.html#a44091f4d58b8078df1a93170cb9900d8',1,'IRAirwellAc::convertFan()'],['../classIRAmcorAc.html#ad0f8b7cdf5942c3680639d410f53d18c',1,'IRAmcorAc::convertFan()'],['../classIRArgoAC.html#acd147993fb998a0e7015173b9514d4a2',1,'IRArgoAC::convertFan()'],['../classIRCarrierAc64.html#a255e6679397434877f1c6c9ac70fff50',1,'IRCarrierAc64::convertFan()'],['../classIRCoolixAC.html#a7ffa1cfcf82bd905b0f607401200c895',1,'IRCoolixAC::convertFan()'],['../classIRCoronaAc.html#a6826036fcabbb45e7369f42912fae02f',1,'IRCoronaAc::convertFan()'],['../classIRDaikinESP.html#ab58be19636d41d60b9c62d658ca18cae',1,'IRDaikinESP::convertFan()'],['../classIRDaikin2.html#ad147ea14695c9498bb091862e172dc81',1,'IRDaikin2::convertFan()'],['../classIRDaikin216.html#a520cc65161290f15022b4108f7049a83',1,'IRDaikin216::convertFan()'],['../classIRDaikin160.html#a32658c0f24d0b0c398d54ef648d717a9',1,'IRDaikin160::convertFan()'],['../classIRDaikin176.html#ae3dda9a55f851b5253d0677835a2c3dd',1,'IRDaikin176::convertFan()'],['../classIRDaikin128.html#a983c13bc608fbfa32d7ea2c36dc84116',1,'IRDaikin128::convertFan()'],['../classIRDaikin152.html#a5e2e79252602ca3493baf00cf3fe7787',1,'IRDaikin152::convertFan()'],['../classIRDaikin64.html#a109ff0c33b0a7dfd763683538915c811',1,'IRDaikin64::convertFan()'],['../classIRDelonghiAc.html#aeff2970b20963ae59b99464ae683113f',1,'IRDelonghiAc::convertFan()'],['../classIREcoclimAc.html#a308c50e46019d174b8b62bf5b7b8feaf',1,'IREcoclimAc::convertFan()'],['../classIRElectraAc.html#afcf3ef62d69e370cb88dd2036e5a1357',1,'IRElectraAc::convertFan()'],['../classIRFujitsuAC.html#a111060b7c93e77fdbd1dc96fc8a6c10f',1,'IRFujitsuAC::convertFan()'],['../classIRGoodweatherAc.html#abb443826453a65e87f6dedddf2dd74d5',1,'IRGoodweatherAc::convertFan()'],['../classIRGreeAC.html#a39aa0e4759330aef39382813d3aa96a4',1,'IRGreeAC::convertFan()'],['../classIRHaierAC.html#a58628dd19a7247fc5358c0dc8c30baba',1,'IRHaierAC::convertFan()'],['../classIRHaierACYRW02.html#a66e42d018f3d86b136624a347d333401',1,'IRHaierACYRW02::convertFan()'],['../classIRHitachiAc.html#a5c632c9efc42d9378fdefe608c9bb771',1,'IRHitachiAc::convertFan()'],['../classIRHitachiAc1.html#a96c22fddcd7dfcc5b8f205cc5c7efdef',1,'IRHitachiAc1::convertFan()'],['../classIRHitachiAc424.html#a4f502b779f9fe4aca3a2f649c4cfbda3',1,'IRHitachiAc424::convertFan()'],['../classIRLgAc.html#a71ce8d1be4222ecae26fcea3b71a1ba6',1,'IRLgAc::convertFan()'],['../classIRMideaAC.html#a08a8e49986ce808fd7edd8aee7399a64',1,'IRMideaAC::convertFan()'],['../classIRMitsubishiAC.html#a58ce95e1ae198a9855ee5e81335570cf',1,'IRMitsubishiAC::convertFan()'],['../classIRMitsubishi136.html#a81e691b386950859d1ad0a3c7faf7e49',1,'IRMitsubishi136::convertFan()'],['../classIRMitsubishi112.html#a4194e5b076687b79153bc8cd50c9bc86',1,'IRMitsubishi112::convertFan()'],['../classIRMitsubishiHeavy152Ac.html#ae11040290301b5fe66dfe79e8ea9512b',1,'IRMitsubishiHeavy152Ac::convertFan()'],['../classIRMitsubishiHeavy88Ac.html#acd69c45dbc3f5a150e17b82b5eae7b3f',1,'IRMitsubishiHeavy88Ac::convertFan()'],['../classIRNeoclimaAc.html#a8c3ac622428f118b28d53a3a82740993',1,'IRNeoclimaAc::convertFan()'],['../classIRPanasonicAc.html#aeada51b2d1ff51ff81dfc5c996b416df',1,'IRPanasonicAc::convertFan()'],['../classIRPanasonicAc32.html#a35814ff1a9625da3380482d039665b0b',1,'IRPanasonicAc32::convertFan()'],['../classIRSamsungAc.html#a6be52cc6980ad0bf80261c2a48eb3c87',1,'IRSamsungAc::convertFan()'],['../classIRSanyoAc.html#ab8bc1d3df116aa4a4b86c9faea2b4f40',1,'IRSanyoAc::convertFan()'],['../classIRSharpAc.html#a7b332ac755592ee643ac698654a63270',1,'IRSharpAc::convertFan()'],['../classIRTcl112Ac.html#a3f8178f8f646ed9892eefa40bbff4fb1',1,'IRTcl112Ac::convertFan()'],['../classIRTechnibelAc.html#aa59bf477a0ed2b814096f135cc5fe7c6',1,'IRTechnibelAc::convertFan()'],['../classIRTecoAc.html#a262aead12607ff962dd97c73e6dea078',1,'IRTecoAc::convertFan()'],['../classIRToshibaAC.html#aeef5cfb840f3058629b486232b7efb22',1,'IRToshibaAC::convertFan()'],['../classIRTranscoldAc.html#a5d67793bc5174f1c9f415b43fe6fb584',1,'IRTranscoldAc::convertFan()'],['../classIRTrotecESP.html#a905d4d5bd298db8c2e1a9b004fd541e8',1,'IRTrotecESP::convertFan()'],['../classIRTrumaAc.html#a3b7bbb494fcb23b7b154e89587eb871a',1,'IRTrumaAc::convertFan()'],['../classIRVestelAc.html#aa7702b0e50b6c8073cd7740a630b19dd',1,'IRVestelAc::convertFan()'],['../classIRVoltas.html#a83022d8acc690f1a9672566ae4845e9e',1,'IRVoltas::convertFan()'],['../classIRWhirlpoolAc.html#a3004feef0ec5fe327d6a43d68d029377',1,'IRWhirlpoolAc::convertFan()']]], - ['convertmode_175',['convertMode',['../classIRAirwellAc.html#a20f9a804b2f8774165befc43d434ad84',1,'IRAirwellAc::convertMode()'],['../classIRAmcorAc.html#ab57117e1072b5265ac9ab5be6d58bccc',1,'IRAmcorAc::convertMode()'],['../classIRArgoAC.html#ad242e7b18dea9768b9fad6b1e0e12f65',1,'IRArgoAC::convertMode()'],['../classIRCarrierAc64.html#a8e94b1526b26cec55f1e700c86aaf74e',1,'IRCarrierAc64::convertMode()'],['../classIRCoolixAC.html#acfb0d2c20322cb4d3cd681a3a54b30fe',1,'IRCoolixAC::convertMode()'],['../classIRCoronaAc.html#a9f9cf8e38285cb2f3caf79e14516bda1',1,'IRCoronaAc::convertMode()'],['../classIRDaikinESP.html#aa96f52596148cab1f806faf190a0aa0a',1,'IRDaikinESP::convertMode()'],['../classIRDaikin2.html#a10aae6ec9783eac9d89ff98b947767dd',1,'IRDaikin2::convertMode()'],['../classIRDaikin216.html#a4fa9eca71ee6ad66b3fffd8b779f5fb0',1,'IRDaikin216::convertMode()'],['../classIRDaikin160.html#ac69861fdbde341fc75d90a5e4918aa56',1,'IRDaikin160::convertMode()'],['../classIRDaikin176.html#ab07fd6eab0ac6132625a291dae8cfc78',1,'IRDaikin176::convertMode()'],['../classIRDaikin128.html#a0bad4830267887299b2773075a16b283',1,'IRDaikin128::convertMode()'],['../classIRDaikin152.html#a25592419c95c0271d8a0c4203a2919c3',1,'IRDaikin152::convertMode()'],['../classIRDaikin64.html#a595d91c0294c9482aa453f077eebf882',1,'IRDaikin64::convertMode()'],['../classIRDelonghiAc.html#a51a6eab431f81fa448a48c0ec071e706',1,'IRDelonghiAc::convertMode()'],['../classIREcoclimAc.html#aa685f7824b36e3c80926d9ab96faf623',1,'IREcoclimAc::convertMode()'],['../classIRElectraAc.html#a0026a1981e713ce1f6916203717e0a00',1,'IRElectraAc::convertMode()'],['../classIRFujitsuAC.html#a242504a5b97c19ff7e369efcadd3916e',1,'IRFujitsuAC::convertMode()'],['../classIRGoodweatherAc.html#aef14e2b6c220e556300d286922da1f54',1,'IRGoodweatherAc::convertMode()'],['../classIRGreeAC.html#a609e87ad4926f150b44426caf79fd38e',1,'IRGreeAC::convertMode()'],['../classIRHaierAC.html#af6188dbed5cae022b4fd1eef358f594c',1,'IRHaierAC::convertMode()'],['../classIRHaierACYRW02.html#a9a51f3d4b4c60ed7d99f9836a57bb3e5',1,'IRHaierACYRW02::convertMode()'],['../classIRHitachiAc.html#af1bdc5e22e5e24218421bd3bbb436301',1,'IRHitachiAc::convertMode()'],['../classIRHitachiAc1.html#a6211c96f463353791e5d922d9939f23c',1,'IRHitachiAc1::convertMode()'],['../classIRHitachiAc424.html#a974bf3ada7117e463b8c23e2158902be',1,'IRHitachiAc424::convertMode()'],['../classIRKelvinatorAC.html#acc9d70a94dd3813005ca0381b80a35e4',1,'IRKelvinatorAC::convertMode()'],['../classIRLgAc.html#a114eca216b7c9c7be33d4527f848311e',1,'IRLgAc::convertMode()'],['../classIRMideaAC.html#a0ca16c8bc2232be467baba8ea69b40d4',1,'IRMideaAC::convertMode()'],['../classIRMitsubishiAC.html#a86d069e406d247bafbefbdd09b22894f',1,'IRMitsubishiAC::convertMode()'],['../classIRMitsubishi136.html#a43b8ff1083d09563a5d3a25b24e480ea',1,'IRMitsubishi136::convertMode()'],['../classIRMitsubishi112.html#aa41d6ec8bc6dc91891aaddbd996f6040',1,'IRMitsubishi112::convertMode()'],['../classIRMitsubishiHeavy152Ac.html#a067ca776edc19a577e8bcda5013e1d0f',1,'IRMitsubishiHeavy152Ac::convertMode()'],['../classIRMitsubishiHeavy88Ac.html#ad0419d176d70935fc535cdcc47ffba02',1,'IRMitsubishiHeavy88Ac::convertMode()'],['../classIRNeoclimaAc.html#a61335773816ecbbeb949e5da78d07e50',1,'IRNeoclimaAc::convertMode()'],['../classIRPanasonicAc.html#a3f3bc3e4b73338351f33f26c635075bb',1,'IRPanasonicAc::convertMode()'],['../classIRPanasonicAc32.html#a229264735483d62735dc3b32c42fb718',1,'IRPanasonicAc32::convertMode()'],['../classIRSamsungAc.html#a76f7fed436bdfcd9c9a9da8dd99cb9f7',1,'IRSamsungAc::convertMode()'],['../classIRSanyoAc.html#a12a355a527ba5d572448d420e1cad9a7',1,'IRSanyoAc::convertMode()'],['../classIRSharpAc.html#a340d60b4b24c10479b3fed4409e0834b',1,'IRSharpAc::convertMode()'],['../classIRTcl112Ac.html#ac063653636319a9451590b08abbfecdc',1,'IRTcl112Ac::convertMode()'],['../classIRTechnibelAc.html#a2e9eef25e288656e7840b09cda0f9aa5',1,'IRTechnibelAc::convertMode()'],['../classIRTecoAc.html#a5f95c5aacd8fc312acd0f36fd9dc33f2',1,'IRTecoAc::convertMode()'],['../classIRToshibaAC.html#a1cdcb695e128d57c721623cfdc9a8e8d',1,'IRToshibaAC::convertMode()'],['../classIRTranscoldAc.html#a45372965e8735a1fb54173eb1ed31c9d',1,'IRTranscoldAc::convertMode()'],['../classIRTrotecESP.html#a114a7022f0382275a55a2775d3d8e894',1,'IRTrotecESP::convertMode()'],['../classIRTrumaAc.html#a5d300dcade65104145b253110862aa2f',1,'IRTrumaAc::convertMode()'],['../classIRVestelAc.html#a5bb967d4972374254dad2c0a6fac7ed2',1,'IRVestelAc::convertMode()'],['../classIRVoltas.html#a3086d4e457769916808b3aef151c9b6b',1,'IRVoltas::convertMode()'],['../classIRWhirlpoolAc.html#afbf2f473c98f480d68c8bb28e1202d56',1,'IRWhirlpoolAc::convertMode()']]], - ['convertswing_176',['convertSwing',['../classIRTechnibelAc.html#a9368635dd24b042066094bfca13e8a17',1,'IRTechnibelAc']]], - ['convertswingh_177',['convertSwingH',['../classIRDaikin2.html#a79a989ad0221157c4dd8d992cc2863dc',1,'IRDaikin2::convertSwingH()'],['../classIRDaikin176.html#a2387b8dff2a9c9cd164034977b03f192',1,'IRDaikin176::convertSwingH()'],['../classIRHitachiAc344.html#a34d0fa5b522b51dac46f33cbb0a0a389',1,'IRHitachiAc344::convertSwingH()'],['../classIRMitsubishiAC.html#a8235a527a178486bb58ce62749aaf2fb',1,'IRMitsubishiAC::convertSwingH()'],['../classIRMitsubishi112.html#ab17598ce693475ef167525b8408e2da4',1,'IRMitsubishi112::convertSwingH()'],['../classIRMitsubishiHeavy152Ac.html#a0183cf4fcefb60ac61060dde698efbd1',1,'IRMitsubishiHeavy152Ac::convertSwingH()'],['../classIRMitsubishiHeavy88Ac.html#a8b995256a6651822731da7a912c01f19',1,'IRMitsubishiHeavy88Ac::convertSwingH()'],['../classIRPanasonicAc.html#abb17db3452ae347101dc6eaa8e84433b',1,'IRPanasonicAc::convertSwingH()']]], - ['convertswingv_178',['convertSwingV',['../classIRArgoAC.html#ac23ff32b45c3fc5402e7e303ad9b5d54',1,'IRArgoAC::convertSwingV()'],['../classIRDaikin2.html#aa3de8468b869989ec52a5f9f57ff4a77',1,'IRDaikin2::convertSwingV()'],['../classIRDaikin160.html#a615f599f3bc3e8dec5e5ef92512a2301',1,'IRDaikin160::convertSwingV()'],['../classIRGoodweatherAc.html#a3b37c04fd9b60b63052d93374fc15d4f',1,'IRGoodweatherAc::convertSwingV()'],['../classIRGreeAC.html#ae3717400d1dc0336bcc5fa17c1397a9b',1,'IRGreeAC::convertSwingV()'],['../classIRHaierAC.html#a34053c32ba50ff3b81b208d068efe2a4',1,'IRHaierAC::convertSwingV()'],['../classIRHaierACYRW02.html#a1f7dffe29fbe67989b2f425d629850db',1,'IRHaierACYRW02::convertSwingV()'],['../classIRMitsubishiAC.html#ab561f6421b2f3e0d92d9fab685da639a',1,'IRMitsubishiAC::convertSwingV()'],['../classIRMitsubishi136.html#a59dee0c57d3ca2bdf4c7839142d23059',1,'IRMitsubishi136::convertSwingV()'],['../classIRMitsubishi112.html#a95c545497e0acc6f78ec229a2ada9de0',1,'IRMitsubishi112::convertSwingV()'],['../classIRMitsubishiHeavy152Ac.html#a93f2678fce3b35cfe3e31221d3355291',1,'IRMitsubishiHeavy152Ac::convertSwingV()'],['../classIRMitsubishiHeavy88Ac.html#abeba5346e1fc2223838fbc5d3ed03f23',1,'IRMitsubishiHeavy88Ac::convertSwingV()'],['../classIRPanasonicAc.html#a024e64fe32848e9b0b72e9c04db0fd98',1,'IRPanasonicAc::convertSwingV()'],['../classIRPanasonicAc32.html#a0487f241fd414aa20d2f352203c72a26',1,'IRPanasonicAc32::convertSwingV()'],['../classIRSanyoAc.html#a944cd3b85d0510b5a0b0fa45604e5977',1,'IRSanyoAc::convertSwingV()']]], - ['cool_5fmode_179',['cool_mode',['../classIRArgoAC.html#a74e7e489d743f213664d9259f1e7a431',1,'IRArgoAC']]], - ['coolix_180',['coolix',['../classIRac.html#a4750db3b06db51f5a23c22538c41b7b3',1,'IRac::coolix()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadae561d1d82d90c1b54a1a502431749873',1,'COOLIX(): IRremoteESP8266.h']]], - ['coolixprotocol_181',['CoolixProtocol',['../unionCoolixProtocol.html',1,'']]], - ['copyirparams_182',['copyIrParams',['../classIRrecv.html#ab017a0f9256954bb7d943e3c6b7e31bf',1,'IRrecv']]], - ['corona_183',['corona',['../classIRac.html#adcf2bdb1ef6dc057532ae7d188557dac',1,'IRac']]], - ['corona_5fac_184',['CORONA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf61f2c360f487309cfa466a44fcae106',1,'IRremoteESP8266.h']]], - ['coronaprotocol_185',['CoronaProtocol',['../unionCoronaProtocol.html',1,'']]], - ['coronasection_186',['CoronaSection',['../structCoronaSection.html',1,'']]], - ['countbits_187',['countBits',['../IRutils_8cpp.html#a84621a9f7fb2d57bd425f9f0d662cf7d',1,'countBits(const uint8_t *const start, const uint16_t length, const bool ones, const uint16_t init): IRutils.cpp'],['../IRutils_8cpp.html#aae8042367bb94df81672603270fa7342',1,'countBits(const uint64_t data, const uint8_t length, const bool ones, const uint16_t init): IRutils.cpp'],['../IRutils_8h.html#a27816eac50afafa9e53ba4b53675da20',1,'countBits(const uint8_t *const start, const uint16_t length, const bool ones=true, const uint16_t init=0): IRutils.cpp'],['../IRutils_8h.html#a5a719829db11f5d5560b4367c0d2d365',1,'countBits(const uint64_t data, const uint8_t length, const bool ones=true, const uint16_t init=0): IRutils.cpp']]], - ['crudenoisefilter_188',['crudeNoiseFilter',['../classIRrecv.html#ae833bdb8fccc676043fc4ccae432fab1',1,'IRrecv']]], - ['currentday_189',['CurrentDay',['../unionDaikinESPProtocol.html#ae47c0fdc9517ad7d16cda183c4317dcb',1,'DaikinESPProtocol']]], - ['currenttime_190',['CurrentTime',['../unionDaikinESPProtocol.html#af46e520574bb6a20c10a4cbe9bfeda27',1,'DaikinESPProtocol::CurrentTime()'],['../unionDaikin2Protocol.html#a4ccf50fbb1af1fbf0c20dbd1fb400f38',1,'Daikin2Protocol::CurrentTime()']]], - ['currhours_191',['CurrHours',['../unionHaierProtocol.html#a093d2441856e448462551ac7bc1b8d9b',1,'HaierProtocol']]], - ['currmins_192',['CurrMins',['../unionHaierProtocol.html#a70abde8bccafd39cf1a1506f63481893',1,'HaierProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.html deleted file mode 100644 index 06de1550e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.js deleted file mode 100644 index 62b597fd4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_4.js +++ /dev/null @@ -1,141 +0,0 @@ -var searchData= -[ - ['d_193',['D',['../unionMitsubishi152Protocol.html#ac493830f3bf09e178aa09b24368746c9',1,'Mitsubishi152Protocol']]], - ['daikin_194',['daikin',['../classIRac.html#afb6d77bbeb5b2465437cef4f58b83e0e',1,'IRac::daikin()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad8dc0597fd237d7098246334f3b5f37e',1,'DAIKIN(): IRremoteESP8266.h']]], - ['daikin128_195',['daikin128',['../classIRac.html#a8fe7c254e1bcb32b6b6fdc1f91693a50',1,'IRac::daikin128()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4b26fb376f6375dd6d1d4be186438f88',1,'DAIKIN128(): IRremoteESP8266.h']]], - ['daikin128protocol_196',['Daikin128Protocol',['../unionDaikin128Protocol.html',1,'']]], - ['daikin152_197',['daikin152',['../classIRac.html#a6dff8e608e3e9fecffe71c3fd1ebe74e',1,'IRac::daikin152()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad3f5f7ca39aee5fdab671a1b0d647ae4',1,'DAIKIN152(): IRremoteESP8266.h']]], - ['daikin152protocol_198',['Daikin152Protocol',['../unionDaikin152Protocol.html',1,'']]], - ['daikin160_199',['daikin160',['../classIRac.html#a3b34f44d713efa52f30d43405cde831c',1,'IRac::daikin160()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4db6a848df3aed4289801e1b2bbbf6aa',1,'DAIKIN160(): IRremoteESP8266.h']]], - ['daikin160protocol_200',['Daikin160Protocol',['../unionDaikin160Protocol.html',1,'']]], - ['daikin176_201',['daikin176',['../classIRac.html#aaae173fd58a7b53c3f4d2edbf7c4afe7',1,'IRac::daikin176()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada57f78a3b04d904f19d10bac13483deab',1,'DAIKIN176(): IRremoteESP8266.h']]], - ['daikin176protocol_202',['Daikin176Protocol',['../unionDaikin176Protocol.html',1,'']]], - ['daikin2_203',['daikin2',['../classIRac.html#a89eddc0e1b3c41c608208d2752dc954c',1,'IRac::daikin2()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab37b344f84d575ec78a92ca55e153586',1,'DAIKIN2(): IRremoteESP8266.h']]], - ['daikin216_204',['daikin216',['../classIRac.html#a101ac8b9e9564e557ef1a1f61ff111d9',1,'IRac::daikin216()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa833fa3a20c3cbb7e6206dac4da30ffb',1,'DAIKIN216(): IRremoteESP8266.h']]], - ['daikin216protocol_205',['Daikin216Protocol',['../unionDaikin216Protocol.html',1,'']]], - ['daikin2protocol_206',['Daikin2Protocol',['../unionDaikin2Protocol.html',1,'']]], - ['daikin64_207',['daikin64',['../classIRac.html#a074db6fc0cff2878d80a397020e1b249',1,'IRac::daikin64()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada70581853ce4883b747d22fdfd74409c4',1,'DAIKIN64(): IRremoteESP8266.h']]], - ['daikin64protocol_208',['Daikin64Protocol',['../unionDaikin64Protocol.html',1,'']]], - ['daikinespprotocol_209',['DaikinESPProtocol',['../unionDaikinESPProtocol.html',1,'']]], - ['data_210',['data',['../structmatch__result__t.html#ae88be61a6d1ffa7c3525aa958f4c0d25',1,'match_result_t']]], - ['data0_211',['Data0',['../structCoronaSection.html#a975b14d8bc30807013714158ef7474ea',1,'CoronaSection']]], - ['data0inv_212',['Data0Inv',['../structCoronaSection.html#ab05024b8314929dcd8ccdda9b497be8c',1,'CoronaSection']]], - ['data1_213',['Data1',['../structCoronaSection.html#a59d97a1bc0a1be50b6f96c4d70673425',1,'CoronaSection']]], - ['data1inv_214',['Data1Inv',['../structCoronaSection.html#ada247bbfb60f24cd9e9a612c9621cbb4',1,'CoronaSection']]], - ['de_2dch_2eh_215',['de-CH.h',['../de-CH_8h.html',1,'']]], - ['de_2dde_2eh_216',['de-DE.h',['../de-DE_8h.html',1,'']]], - ['decode_217',['decode',['../classIRrecv.html#aeaa5c07a8b46f8fbb982f996cc1f9f4b',1,'IRrecv']]], - ['decode_5fresults_218',['decode_results',['../classdecode__results.html',1,'']]], - ['decode_5ftype_219',['decode_type',['../classdecode__results.html#a9c0e9f161b9c90dc10b7561d4c0b50fa',1,'decode_results']]], - ['decode_5ftype_5ft_220',['decode_type_t',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fad',1,'IRremoteESP8266.h']]], - ['decodeairwell_221',['decodeAirwell',['../classIRrecv.html#acf4635d5ee146a82498cb0c269b6af41',1,'IRrecv']]], - ['decodeaiwarct501_222',['decodeAiwaRCT501',['../classIRrecv.html#aa4d678376a4c0f8ea953474a6f5ef9d2',1,'IRrecv']]], - ['decodeamcor_223',['decodeAmcor',['../classIRrecv.html#a8d81fcfb47e36925975d313027689a44',1,'IRrecv']]], - ['decodeargo_224',['decodeArgo',['../classIRrecv.html#a94f12dc000a6e7b75ea8680fd48fc487',1,'IRrecv']]], - ['decodecarrierac_225',['decodeCarrierAC',['../classIRrecv.html#acf3d1c37038120a5c0996d92577ce74a',1,'IRrecv']]], - ['decodecarrierac40_226',['decodeCarrierAC40',['../classIRrecv.html#a4bdb35ec34f49401a6b9becd15b8a3b5',1,'IRrecv']]], - ['decodecarrierac64_227',['decodeCarrierAC64',['../classIRrecv.html#a79d03c31da48a385ab47cc8f342ef9b3',1,'IRrecv']]], - ['decodecoolix_228',['decodeCOOLIX',['../classIRrecv.html#a964af7e72e2133688f0596c718cb98ca',1,'IRrecv']]], - ['decodecoronaac_229',['decodeCoronaAc',['../classIRrecv.html#a981cba14551c93af57f9c1c0e1775d12',1,'IRrecv']]], - ['decodedaikin_230',['decodeDaikin',['../classIRrecv.html#a141f0de9f4cae8daeb025aff3904ecaa',1,'IRrecv']]], - ['decodedaikin128_231',['decodeDaikin128',['../classIRrecv.html#ac7188577c874d9f8f19304a3ec775415',1,'IRrecv']]], - ['decodedaikin152_232',['decodeDaikin152',['../classIRrecv.html#ab20a6586b4e56cc428012ec96f5ccc2c',1,'IRrecv']]], - ['decodedaikin160_233',['decodeDaikin160',['../classIRrecv.html#af0b9822defe6b29099079d664d9dc413',1,'IRrecv']]], - ['decodedaikin176_234',['decodeDaikin176',['../classIRrecv.html#aa142d1340201b6fdc5b462f46fe21ee0',1,'IRrecv']]], - ['decodedaikin2_235',['decodeDaikin2',['../classIRrecv.html#a4c4799a0d45ea5562159c46939617d80',1,'IRrecv']]], - ['decodedaikin216_236',['decodeDaikin216',['../classIRrecv.html#a7f860686a5c58aa8f4d1842cfb15b2f9',1,'IRrecv']]], - ['decodedaikin64_237',['decodeDaikin64',['../classIRrecv.html#a030701f081a9c6eab0c07b75433b524c',1,'IRrecv']]], - ['decodedelonghiac_238',['decodeDelonghiAc',['../classIRrecv.html#a8c91cc83770d243e942387cc16e9ca6f',1,'IRrecv']]], - ['decodedenon_239',['decodeDenon',['../classIRrecv.html#a0b1bd1c817cb43bc3755126191b7f4a2',1,'IRrecv']]], - ['decodedish_240',['decodeDISH',['../classIRrecv.html#a851776d9178aeb706d9a1abd3f254e31',1,'IRrecv']]], - ['decodedoshisha_241',['decodeDoshisha',['../classIRrecv.html#a675c45e6b32aaeca3de734ccf2f0c819',1,'IRrecv']]], - ['decodeecoclim_242',['decodeEcoclim',['../classIRrecv.html#a823387b95b6adb676e976a8eeaf01a0b',1,'IRrecv']]], - ['decodeelectraac_243',['decodeElectraAC',['../classIRrecv.html#ad3a7be8afc36451c8e28e27f3c3e9aaa',1,'IRrecv']]], - ['decodeelitescreens_244',['decodeElitescreens',['../classIRrecv.html#ac830ece2c2c200b8c13fcd66828e2846',1,'IRrecv']]], - ['decodeepson_245',['decodeEpson',['../classIRrecv.html#aaadef8415f273ba25f4086fecd681d2e',1,'IRrecv']]], - ['decodefujitsuac_246',['decodeFujitsuAC',['../classIRrecv.html#aa3778bdf994bf9c99ac48ef95434a826',1,'IRrecv']]], - ['decodegicable_247',['decodeGICable',['../classIRrecv.html#afade8dac9b1d023e5e0946e6b2c08aea',1,'IRrecv']]], - ['decodegoodweather_248',['decodeGoodweather',['../classIRrecv.html#a64650ce7dbaf5fc860a6a253d906e9de',1,'IRrecv']]], - ['decodegree_249',['decodeGree',['../classIRrecv.html#a2e756342d7524a13d53d6c656700638c',1,'IRrecv']]], - ['decodehaierac_250',['decodeHaierAC',['../classIRrecv.html#ad97403174f05197a7fa9a4a0107e3111',1,'IRrecv']]], - ['decodehaieracyrw02_251',['decodeHaierACYRW02',['../classIRrecv.html#a281fb9d972fee75db49209c42f649822',1,'IRrecv']]], - ['decodehash_252',['decodeHash',['../classIRrecv.html#a7c15fbfa7936ca474712a1953911fd06',1,'IRrecv']]], - ['decodehitachiac_253',['decodeHitachiAC',['../classIRrecv.html#aa42facfffc0e304005272b6ddd4583c8',1,'IRrecv']]], - ['decodehitachiac1_254',['decodeHitachiAC1',['../classIRrecv.html#a122e0dcbf14c90ec2d77399acce21459',1,'IRrecv']]], - ['decodehitachiac3_255',['decodeHitachiAc3',['../classIRrecv.html#a113bc834eff00f55d5545ce3fa1ab203',1,'IRrecv']]], - ['decodehitachiac424_256',['decodeHitachiAc424',['../classIRrecv.html#a01c3dda56d6d916076fa1affa2213129',1,'IRrecv']]], - ['decodeinax_257',['decodeInax',['../classIRrecv.html#a94545c6a8da027b9cb0e23ecba4c29d8',1,'IRrecv']]], - ['decodejvc_258',['decodeJVC',['../classIRrecv.html#a25ab71efc223a418e9630d8421f44bc9',1,'IRrecv']]], - ['decodekelvinator_259',['decodeKelvinator',['../classIRrecv.html#a0ac82f20b48b2d71ee07eb392578b226',1,'IRrecv']]], - ['decodelasertag_260',['decodeLasertag',['../classIRrecv.html#ae4af614a45ea65cb3304ef5bd7965122',1,'IRrecv']]], - ['decodelegopf_261',['decodeLegoPf',['../classIRrecv.html#aea75ad0ba1d8fec33de16501940f2553',1,'IRrecv']]], - ['decodelg_262',['decodeLG',['../classIRrecv.html#afe70015c36b1477a5de0c193163e13a7',1,'IRrecv']]], - ['decodelutron_263',['decodeLutron',['../classIRrecv.html#a6093c4404a9a9d415c5bfeab5ec53be5',1,'IRrecv']]], - ['decodemagiquest_264',['decodeMagiQuest',['../classIRrecv.html#a6f3bfcc6767484151dee758bcf94fb0b',1,'IRrecv']]], - ['decodemetz_265',['decodeMetz',['../classIRrecv.html#ac39aa52eec10d1c92b6e9713a22252b6',1,'IRrecv']]], - ['decodemidea_266',['decodeMidea',['../classIRrecv.html#a255b15601f7439a09ab5e77ad78816fb',1,'IRrecv']]], - ['decodemidea24_267',['decodeMidea24',['../classIRrecv.html#a62a04019308b29ae2aea4b3a83ba9155',1,'IRrecv']]], - ['decodemilestag2_268',['decodeMilestag2',['../classIRrecv.html#adddf192765ba0d9c233833bdda9b266e',1,'IRrecv']]], - ['decodemirage_269',['decodeMirage',['../classIRrecv.html#aa88813f830a6ff6bfd6e7bde6728a3d5',1,'IRrecv']]], - ['decodemitsubishi_270',['decodeMitsubishi',['../classIRrecv.html#a6efe3be80f0ebef3ff94ed0e56c5c52a',1,'IRrecv']]], - ['decodemitsubishi112_271',['decodeMitsubishi112',['../classIRrecv.html#ae0690ff3cb5a5cdcdb6a514bb7bf0cdd',1,'IRrecv']]], - ['decodemitsubishi136_272',['decodeMitsubishi136',['../classIRrecv.html#a87b3ee57dbdf762a0e305ddd43eec629',1,'IRrecv']]], - ['decodemitsubishi2_273',['decodeMitsubishi2',['../classIRrecv.html#a9514197850491a5b8c30ae9ffc89d895',1,'IRrecv']]], - ['decodemitsubishiac_274',['decodeMitsubishiAC',['../classIRrecv.html#a942c5f41df5cbff32a8b7703673cb621',1,'IRrecv']]], - ['decodemitsubishiheavy_275',['decodeMitsubishiHeavy',['../classIRrecv.html#aef9cedf79793806df4cc5376710781bc',1,'IRrecv']]], - ['decodemultibrackets_276',['decodeMultibrackets',['../classIRrecv.html#af61afacc9865232643164ba824e665ab',1,'IRrecv']]], - ['decodemwm_277',['decodeMWM',['../classIRrecv.html#a27518b5d792cdf3ab333b324f409f328',1,'IRrecv']]], - ['decodenec_278',['decodeNEC',['../classIRrecv.html#a52b844f80df7f64edf9ce9cc189ac5b9',1,'IRrecv']]], - ['decodeneoclima_279',['decodeNeoclima',['../classIRrecv.html#a4729ee949e533448b481ae33bbbf1adf',1,'IRrecv']]], - ['decodenikai_280',['decodeNikai',['../classIRrecv.html#abbcbf5fc07d7e37d7724acc37bb5f592',1,'IRrecv']]], - ['decodepanasonic_281',['decodePanasonic',['../classIRrecv.html#aa8dd5f24d28576c6db03cc463bd0a865',1,'IRrecv']]], - ['decodepanasonicac_282',['decodePanasonicAC',['../classIRrecv.html#a0f78e180ed731e8fb16d1c85aa721c95',1,'IRrecv']]], - ['decodepanasonicac32_283',['decodePanasonicAC32',['../classIRrecv.html#a89ce20e483b1297cae05ab1ae96d24ec',1,'IRrecv']]], - ['decodepioneer_284',['decodePioneer',['../classIRrecv.html#a78a9487cbe8a562392a07a4090b3091e',1,'IRrecv']]], - ['decoderc5_285',['decodeRC5',['../classIRrecv.html#adab9dffbeceee514520fababd0e721bd',1,'IRrecv']]], - ['decoderc6_286',['decodeRC6',['../classIRrecv.html#a67316499ef37db82e3b3ecaac25c5980',1,'IRrecv']]], - ['decodercmm_287',['decodeRCMM',['../classIRrecv.html#a0e7bf769cb5bebf174e852e4b0b08cf3',1,'IRrecv']]], - ['decodesamsung_288',['decodeSAMSUNG',['../classIRrecv.html#a18b6cf177364faf11b9a076dd2025eec',1,'IRrecv']]], - ['decodesamsung36_289',['decodeSamsung36',['../classIRrecv.html#a290a9e6a0b12ef1fe02a92a456c8ad57',1,'IRrecv']]], - ['decodesamsungac_290',['decodeSamsungAC',['../classIRrecv.html#ae779c76ebd0f3cd1fc13abaa55f80d67',1,'IRrecv']]], - ['decodesanyoac_291',['decodeSanyoAc',['../classIRrecv.html#ab6c02d8b8079d7f344e141e6a4e7e225',1,'IRrecv']]], - ['decodesanyolc7461_292',['decodeSanyoLC7461',['../classIRrecv.html#a01a165bf2e7d16dbbb916d1eae740bc5',1,'IRrecv']]], - ['decodesharp_293',['decodeSharp',['../classIRrecv.html#a3390d63ba21a835d7c74c261532a22a7',1,'IRrecv']]], - ['decodesharpac_294',['decodeSharpAc',['../classIRrecv.html#a8a9b920079f783e236f8a938e20b9743',1,'IRrecv']]], - ['decodesony_295',['decodeSony',['../classIRrecv.html#ab03227955cf7d1d00c1620c55d7f9f18',1,'IRrecv']]], - ['decodesymphony_296',['decodeSymphony',['../classIRrecv.html#a61cdf4d891654521afbc6ca9fb415745',1,'IRrecv']]], - ['decodetechnibelac_297',['decodeTechnibelAc',['../classIRrecv.html#a2f022741309ad814bf11aec440a838d0',1,'IRrecv']]], - ['decodeteco_298',['decodeTeco',['../classIRrecv.html#a950711d7df8dfe4cda86f53650cd9f56',1,'IRrecv']]], - ['decodetoshibaac_299',['decodeToshibaAC',['../classIRrecv.html#aae6ab687ae319ae50a52238916bcfb1a',1,'IRrecv']]], - ['decodetostate_300',['decodeToState',['../namespaceIRAcUtils.html#ac5eb498bf12cb6cba023c9c1e9726949',1,'IRAcUtils']]], - ['decodetranscold_301',['decodeTranscold',['../classIRrecv.html#a16c44538d7e01d9b118d983de39d18e3',1,'IRrecv']]], - ['decodetrotec_302',['decodeTrotec',['../classIRrecv.html#ae2920c488173f3fa37f5325438157ced',1,'IRrecv']]], - ['decodetruma_303',['decodeTruma',['../classIRrecv.html#a76a85fb183cc943532bc9c589c42a17a',1,'IRrecv']]], - ['decodevestelac_304',['decodeVestelAc',['../classIRrecv.html#a5d48b3c91434c18c7726cca504d75b73',1,'IRrecv']]], - ['decodevoltas_305',['decodeVoltas',['../classIRrecv.html#a43539320036ba1c17e9875e4dc9fd055',1,'IRrecv']]], - ['decodewhirlpoolac_306',['decodeWhirlpoolAC',['../classIRrecv.html#a0d1eec83cf092f5621cb34b3e94777c4',1,'IRrecv']]], - ['decodewhynter_307',['decodeWhynter',['../classIRrecv.html#a66289f6a462557ad26e6c0a64f36cf02',1,'IRrecv']]], - ['decodexmp_308',['decodeXmp',['../classIRrecv.html#a9c7c5cdee244070d5999232a1bcdae60',1,'IRrecv']]], - ['decodezepeal_309',['decodeZepeal',['../classIRrecv.html#a72afd857c8b2e0192021a40afc96c2d8',1,'IRrecv']]], - ['defaultbits_310',['defaultBits',['../classIRsend.html#a70a2256bee8ad9b8ea8571dd4f26596f',1,'IRsend']]], - ['defaults_2eh_311',['defaults.h',['../defaults_8h.html',1,'']]], - ['degrees_312',['degrees',['../structstdAc_1_1state__t.html#a3d1ff0ff2e0035db4ee8ead5c53b2dbd',1,'stdAc::state_t']]], - ['delonghi_5fac_313',['DELONGHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada149190c9dec98e9c3f4a2bd530b154a3',1,'IRremoteESP8266.h']]], - ['delonghiac_314',['delonghiac',['../classIRac.html#af290b0b08cff5121bb88c62051ed1074',1,'IRac']]], - ['delonghiprotocol_315',['DelonghiProtocol',['../unionDelonghiProtocol.html',1,'']]], - ['denon_316',['DENON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada2bda37b76abb290d1675c3e027e3c2e1',1,'IRremoteESP8266.h']]], - ['deprecated_20list_317',['Deprecated List',['../deprecated.html',1,'']]], - ['dg11j13a_318',['DG11J13A',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2a868d69f0605cf9151b0163a3481e2fb9',1,'IRsend.h']]], - ['dg11j191_319',['DG11J191',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2adaecfc16f36975f231db2507a8a36c0c',1,'IRsend.h']]], - ['dipconfig_320',['DipConfig',['../unionEcoclimProtocol.html#a6635a22deb4d5db6b320828a183df6bd',1,'EcoclimProtocol']]], - ['disableirin_321',['disableIRIn',['../classIRrecv.html#a9f4a719e756ad78c7dd47186f8bef087',1,'IRrecv']]], - ['disableofftimer_322',['disableOffTimer',['../classIRDaikinESP.html#a1e4e05ad0799002d0ab25db92dcaac06',1,'IRDaikinESP::disableOffTimer()'],['../classIRDaikin2.html#a8cbdbc0de31b14f974cd8cd87f3ca54a',1,'IRDaikin2::disableOffTimer()'],['../classIREcoclimAc.html#a8278eec1b47aff9304cb255be5b561bb',1,'IREcoclimAc::disableOffTimer()']]], - ['disableontimer_323',['disableOnTimer',['../classIRDaikinESP.html#a0733e4a15d76baac23493926ef1765b1',1,'IRDaikinESP::disableOnTimer()'],['../classIRDaikin2.html#a170a1e9ddb7873dc1392184a85387cc3',1,'IRDaikin2::disableOnTimer()'],['../classIREcoclimAc.html#adddfdb01de28e0dda5f8c919ee0cd0fa',1,'IREcoclimAc::disableOnTimer()']]], - ['disablesensor_324',['disableSensor',['../unionMideaProtocol.html#a20cc2079eae404c980cc75101b4a3116',1,'MideaProtocol']]], - ['disablesleeptimer_325',['disableSleepTimer',['../classIRDaikin2.html#a152532ef9d905e26930ae145a9623877',1,'IRDaikin2']]], - ['dish_326',['DISH',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac27c6ac38ba872593af8e46ac2fdc85a',1,'IRremoteESP8266.h']]], - ['display_327',['Display',['../unionSamsungProtocol.html#aac97ebabee022e772aa00d4357079eb4',1,'SamsungProtocol']]], - ['displaytemp_328',['DisplayTemp',['../unionGreeProtocol.html#ad0756a64f9c90c9dd12ca6cd71c78bb2',1,'GreeProtocol']]], - ['doshisha_329',['DOSHISHA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab4566b260773b60c85450f40fa5b4341',1,'IRremoteESP8266.h']]], - ['doxygen_5findex_2emd_330',['doxygen_index.md',['../doxygen__index_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.html deleted file mode 100644 index 2544c4e5b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.js deleted file mode 100644 index daaa90aaa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_5.js +++ /dev/null @@ -1,41 +0,0 @@ -var searchData= -[ - ['ecoclim_331',['ecoclim',['../classIRac.html#a3ef3fd7283a1578963ca314a6f1cbd71',1,'IRac::ecoclim()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab7e60c2218bac76695bcff178366ec8d',1,'ECOCLIM(): IRremoteESP8266.h']]], - ['ecoclimprotocol_332',['EcoclimProtocol',['../unionEcoclimProtocol.html',1,'']]], - ['econo_333',['Econo',['../unionCoronaProtocol.html#a1076afecc4292c370fed27ce380a1ed5',1,'CoronaProtocol::Econo()'],['../unionDaikinESPProtocol.html#a29138c4ff722520ca23863568a96bf53',1,'DaikinESPProtocol::Econo()'],['../unionDaikin2Protocol.html#aa715d01b8972f98a41829ed976932ef7',1,'Daikin2Protocol::Econo()'],['../unionDaikin128Protocol.html#a8920f30a9d4bb0132762d80c8297d5f2',1,'Daikin128Protocol::Econo()'],['../unionDaikin152Protocol.html#ad9c7903f82a89b94e0c9dfe8b7298658',1,'Daikin152Protocol::Econo()'],['../unionNeoclimaProtocol.html#ae6e84df0fe5279729c8980c68db35c50',1,'NeoclimaProtocol::Econo()'],['../unionTcl112Protocol.html#a5791daa5a91ae0bfff5db2b42472b218',1,'Tcl112Protocol::Econo()'],['../unionVoltasProtocol.html#a4f44e3e3a68988d25173b2aab1c32e53',1,'VoltasProtocol::Econo()'],['../structstdAc_1_1state__t.html#a580c826c6d9671715adfe8445531b957',1,'stdAc::state_t::econo()']]], - ['ecoturbo_334',['EcoTurbo',['../unionToshibaProtocol.html#a59ebff5274a795d94fdbc735f847274d',1,'ToshibaProtocol']]], - ['elapsed_335',['elapsed',['../classIRtimer.html#ad655e585f053580d49d8de7d52cd62a1',1,'IRtimer::elapsed()'],['../classTimerMs.html#ad4aa759c58727393f69863b3461dfc09',1,'TimerMs::elapsed()']]], - ['electra_336',['electra',['../classIRac.html#abb847bd5e09feb293432b8a8cf0dd9de',1,'IRac']]], - ['electra_5fac_337',['ELECTRA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada05f193ef4ead3e54624bd92dc3203fac',1,'IRremoteESP8266.h']]], - ['electraprotocol_338',['ElectraProtocol',['../unionElectraProtocol.html',1,'']]], - ['elitescreens_339',['ELITESCREENS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafebe19d5453be4c99de8c031508b7cb1',1,'IRremoteESP8266.h']]], - ['en_2dau_2eh_340',['en-AU.h',['../en-AU_8h.html',1,'']]], - ['en_2die_2eh_341',['en-IE.h',['../en-IE_8h.html',1,'']]], - ['en_2duk_2eh_342',['en-UK.h',['../en-UK_8h.html',1,'']]], - ['en_2dus_2eh_343',['en-US.h',['../en-US_8h.html',1,'']]], - ['enableirin_344',['enableIRIn',['../classIRrecv.html#a52c05ec6d8f3dbfb75f21f3b4fe7be3d',1,'IRrecv']]], - ['enableirout_345',['enableIROut',['../classIRsend.html#ab3b6d36c9b5d26c400526717d433ed2d',1,'IRsend']]], - ['enableofftimer_346',['enableOffTimer',['../classIRDaikinESP.html#a8a5686066bfc86f1d7cc454e793d3357',1,'IRDaikinESP::enableOffTimer()'],['../classIRDaikin2.html#afc7ba7d7de2976e010a72778091d633a',1,'IRDaikin2::enableOffTimer()'],['../classIRWhirlpoolAc.html#abb1c3685d90d81b44e72050cd0e042f6',1,'IRWhirlpoolAc::enableOffTimer()']]], - ['enableontimer_347',['enableOnTimer',['../classIRDaikinESP.html#aac4d0f5f60c9f4c41d3bb1e0f24bc4bc',1,'IRDaikinESP::enableOnTimer()'],['../classIRDaikin2.html#a91ec5f7c67cb87102a5eb030e0763b50',1,'IRDaikin2::enableOnTimer()'],['../classIRWhirlpoolAc.html#aa3edd58882cf4fc65172e490c9e0bb2e',1,'IRWhirlpoolAc::enableOnTimer()']]], - ['enablesleeptimer_348',['enableSleepTimer',['../classIRDaikin2.html#a9c86782a98a54818ae92419eec5a060b',1,'IRDaikin2']]], - ['encodedoshisha_349',['encodeDoshisha',['../classIRsend.html#a0522a2256e8358df715065530be6317d',1,'IRsend']]], - ['encodejvc_350',['encodeJVC',['../classIRsend.html#a6303b991c0545443e7ccf63ba89dbf18',1,'IRsend']]], - ['encodelg_351',['encodeLG',['../classIRsend.html#a109b67a68e7a33900cb5c5017ed4578b',1,'IRsend']]], - ['encodemagiquest_352',['encodeMagiQuest',['../classIRsend.html#a4ee40126279dbde8bb02888115577563',1,'IRsend']]], - ['encodemetz_353',['encodeMetz',['../classIRsend.html#a99c88ec9f8426003738a9a1682595b9a',1,'IRsend']]], - ['encodenec_354',['encodeNEC',['../classIRsend.html#ab2e1ce918e4e06b955c3d2a089ce189c',1,'IRsend']]], - ['encodepanasonic_355',['encodePanasonic',['../classIRsend.html#a8340497ae75f00c844e53dfc73700d9c',1,'IRsend']]], - ['encodepioneer_356',['encodePioneer',['../classIRsend.html#ae0686829eba31587b71034a1c0495971',1,'IRsend']]], - ['encoderc5_357',['encodeRC5',['../classIRsend.html#a88457fd4cc01d6e8097e04c022ede74a',1,'IRsend']]], - ['encoderc5x_358',['encodeRC5X',['../classIRsend.html#ae760ef1be11f25f7a61237f96a8871d9',1,'IRsend']]], - ['encoderc6_359',['encodeRC6',['../classIRsend.html#ac0e341462426ea146b944502a6d3fde0',1,'IRsend']]], - ['encodesamsung_360',['encodeSAMSUNG',['../classIRsend.html#a4ab0579bd854306b2667de19207e4ffb',1,'IRsend']]], - ['encodesanyolc7461_361',['encodeSanyoLC7461',['../classIRsend.html#a864bef0dc48f6af4b59057362906cf5d',1,'IRsend']]], - ['encodesharp_362',['encodeSharp',['../classIRsend.html#a8f4c7a36380ba31155eba5ff8f5f631e',1,'IRsend']]], - ['encodesony_363',['encodeSony',['../classIRsend.html#aa0aea2cb04f0a7ee9056f15fecfc08c3',1,'IRsend']]], - ['encodetime_364',['encodeTime',['../classIRPanasonicAc.html#a0eee4ad6105d35ee6c34c4666174b04b',1,'IRPanasonicAc']]], - ['epson_365',['EPSON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaf677fd380c38297264a10732631927c',1,'IRremoteESP8266.h']]], - ['es_2des_2eh_366',['es-ES.h',['../es-ES_8h.html',1,'']]], - ['eye_367',['Eye',['../unionDaikin2Protocol.html#aa8351138b8db3b8be5f40d1515802381',1,'Daikin2Protocol::Eye()'],['../unionNeoclimaProtocol.html#a61b0055d4d939dc85ee204e4f3b6ab46',1,'NeoclimaProtocol::Eye()']]], - ['eyeauto_368',['EyeAuto',['../unionDaikin2Protocol.html#a22f2288452065069018bef94d2505ab7',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.html deleted file mode 100644 index 43f14eab3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.js deleted file mode 100644 index d7d7c7422..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_6.js +++ /dev/null @@ -1,26 +0,0 @@ -var searchData= -[ - ['fahrenheit_369',['Fahrenheit',['../unionDelonghiProtocol.html#a8fe11756b36ba6f55eaccf553cc0dea3',1,'DelonghiProtocol::Fahrenheit()'],['../unionFujitsuProtocol.html#a23e44e249fba92fdf6b723e2e3a38218',1,'FujitsuProtocol::Fahrenheit()']]], - ['fahrenheittocelsius_370',['fahrenheitToCelsius',['../IRutils_8cpp.html#a83538e86145850c24b1c824723089502',1,'fahrenheitToCelsius(const float deg): IRutils.cpp'],['../IRutils_8h.html#a83538e86145850c24b1c824723089502',1,'fahrenheitToCelsius(const float deg): IRutils.cpp']]], - ['fan_371',['Fan',['../unionAirwellProtocol.html#a7d38043e982231fb6a331d72f7407c10',1,'AirwellProtocol::Fan()'],['../unionAmcorProtocol.html#a208edfb233f0747b5abe8911fe55bfb3',1,'AmcorProtocol::Fan()'],['../unionArgoProtocol.html#a9247f87997f4fda42940ca204b8363d6',1,'ArgoProtocol::Fan()'],['../unionCarrierProtocol.html#ab7e563e2015627a65259b0190908034b',1,'CarrierProtocol::Fan()'],['../unionCoolixProtocol.html#ad534acc857b6693327880b8a420da4dc',1,'CoolixProtocol::Fan()'],['../unionCoronaProtocol.html#a981185f964fcaa1dc657a7ad770c446d',1,'CoronaProtocol::Fan()'],['../unionDaikinESPProtocol.html#ad93d41ea1d921579aead9d8be78f52ac',1,'DaikinESPProtocol::Fan()'],['../unionDaikin2Protocol.html#a7928d4eecb9d5ba004ccedb304c06829',1,'Daikin2Protocol::Fan()'],['../unionDaikin216Protocol.html#a6da4ec3880fbd895aa969b8daf4ed7cc',1,'Daikin216Protocol::Fan()'],['../unionDaikin160Protocol.html#a263a50340360eff5bb161658046fd968',1,'Daikin160Protocol::Fan()'],['../unionDaikin176Protocol.html#aadaabe83d23d12554d3431fa0939c18c',1,'Daikin176Protocol::Fan()'],['../unionDaikin128Protocol.html#ac5cf543511bf5baaaa1ad593c726640f',1,'Daikin128Protocol::Fan()'],['../unionDaikin152Protocol.html#aa880c1bf93598c7d2c355ce9e8af79f1',1,'Daikin152Protocol::Fan()'],['../unionDaikin64Protocol.html#a11aceeeaf3b80ee0ce9aa23b88bcb2e6',1,'Daikin64Protocol::Fan()'],['../unionDelonghiProtocol.html#ab3a1bc23e8349851f7d813b117426518',1,'DelonghiProtocol::Fan()'],['../unionEcoclimProtocol.html#ac3dadf32f707065b79c7ff0677c9f192',1,'EcoclimProtocol::Fan()'],['../unionElectraProtocol.html#a4aca91a79fad6a2ce08ac6e5f854ab96',1,'ElectraProtocol::Fan()'],['../unionFujitsuProtocol.html#a649627976dbf420ab80c9a73e9d78d31',1,'FujitsuProtocol::Fan()'],['../unionGoodweatherProtocol.html#a7dd02188438a4e2b37c70a2b3913e550',1,'GoodweatherProtocol::Fan()'],['../unionGreeProtocol.html#af6f917228f457a24e70256d7c132289c',1,'GreeProtocol::Fan()'],['../unionHaierProtocol.html#a44e6a58782f4c6d5e532c715e9050b5b',1,'HaierProtocol::Fan()'],['../unionHaierYRW02Protocol.html#a4ecca9653d14ccd283e44f6e385ff36a',1,'HaierYRW02Protocol::Fan()'],['../unionHitachiProtocol.html#ae451ce39e2ba32da81580c2bf5c5d6d9',1,'HitachiProtocol::Fan()'],['../unionHitachi424Protocol.html#a45907766ba99132b300f50f7c194fee6',1,'Hitachi424Protocol::Fan()'],['../unionHitachi1Protocol.html#ad74c329496f93855ffec6e0a16cda338',1,'Hitachi1Protocol::Fan()'],['../unionKelvinatorProtocol.html#a720843565363129441f5db98a166f439',1,'KelvinatorProtocol::Fan()'],['../unionLGProtocol.html#ad8132d6e5603d1eb3b51b28165fe3803',1,'LGProtocol::Fan()'],['../unionMideaProtocol.html#a04b0f344ec9b7cf2bdbd2c530b409fcb',1,'MideaProtocol::Fan()'],['../unionMitsubishi144Protocol.html#a0bc3dfc7954983752b0e30abb84c00e6',1,'Mitsubishi144Protocol::Fan()'],['../unionMitsubishi136Protocol.html#ae39096aaafd4e93a122a1f9942668031',1,'Mitsubishi136Protocol::Fan()'],['../unionMitsubishi112Protocol.html#af559efed44be81781556e2ce1b668fae',1,'Mitsubishi112Protocol::Fan()'],['../unionMitsubishi152Protocol.html#a2b91b3185aa9f05d4b32b1628c693c3f',1,'Mitsubishi152Protocol::Fan()'],['../unionMitsubishi88Protocol.html#a0b895ed43f664b7298d6ab7b2eda8e06',1,'Mitsubishi88Protocol::Fan()'],['../unionNeoclimaProtocol.html#acdf888082bd07c6b1b061f928295bdd9',1,'NeoclimaProtocol::Fan()'],['../unionPanasonicAc32Protocol.html#aff4c3aeb5a2724653c334f5ea75b6435',1,'PanasonicAc32Protocol::Fan()'],['../unionSamsungProtocol.html#a5eae02eead5032f6fa7ce3bc891122b6',1,'SamsungProtocol::Fan()'],['../unionSanyoProtocol.html#aaf3dc81d03fcb6ad893cd5647cd95213',1,'SanyoProtocol::Fan()'],['../unionSharpProtocol.html#acb0819fc971fc7d7206785aaad4b82b2',1,'SharpProtocol::Fan()'],['../unionTcl112Protocol.html#a8aefa398eb58112b2f39ead30c3953a9',1,'Tcl112Protocol::Fan()'],['../unionTechnibelProtocol.html#a7e78bd68b747186143648fedbe29f75a',1,'TechnibelProtocol::Fan()'],['../unionTecoProtocol.html#a9be4d4e129beee82ff43ac6b09dd7f58',1,'TecoProtocol::Fan()'],['../unionToshibaProtocol.html#ade6e7b0543cd68c41cff2fc240f874ff',1,'ToshibaProtocol::Fan()'],['../unionTranscoldProtocol.html#a1b3c9da9be9dfe9c3306f562655900e1',1,'TranscoldProtocol::Fan()'],['../unionTrotecProtocol.html#ac42d9f97612c5b6f1aa42d95639b6492',1,'TrotecProtocol::Fan()'],['../unionTrumaProtocol.html#a3199edc177e0308ba0c2aa3b3485841d',1,'TrumaProtocol::Fan()'],['../unionVestelProtocol.html#a6c2a667af849583af46b3f40ca56bca3',1,'VestelProtocol::Fan()'],['../unionWhirlpoolProtocol.html#ad81249077201513dc772e6baba34c363',1,'WhirlpoolProtocol::Fan()']]], - ['fanauto_372',['FanAuto',['../unionMitsubishi144Protocol.html#a50a10d24ada3c67f778438e3dae9fe73',1,'Mitsubishi144Protocol']]], - ['fanchange_373',['FanChange',['../unionTechnibelProtocol.html#a2a733692b8c56270ec1b94e450caf4a8',1,'TechnibelProtocol']]], - ['fanspeed_374',['FanSpeed',['../unionVoltasProtocol.html#a7a2326d3ecf316e1a4e0a5db0523cad6',1,'VoltasProtocol::FanSpeed()'],['../structstdAc_1_1state__t.html#a28a50c877a0eaa71689ccc3bf9c957d7',1,'stdAc::state_t::fanspeed()']]], - ['fanspeed_5ft_375',['fanspeed_t',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383',1,'stdAc']]], - ['fanspeedtostring_376',['fanspeedToString',['../classIRac.html#ab8d8a1ce5de8970c07c90fb41731e2e6',1,'IRac']]], - ['filter_377',['Filter',['../unionFujitsuProtocol.html#a00c5204defd34eb3e8d1d8a53ccd7810',1,'FujitsuProtocol::Filter()'],['../unionMitsubishi152Protocol.html#ac228a2f41e4267c919df440bde470a86',1,'Mitsubishi152Protocol::Filter()'],['../structstdAc_1_1state__t.html#a41e4b957f9e011ddb32d35bfcd56c0e7',1,'stdAc::state_t::filter()']]], - ['fixchecksum_378',['fixChecksum',['../classIRPanasonicAc.html#aa40bef35000ddf6d14e286b3f2044897',1,'IRPanasonicAc']]], - ['fixup_379',['fixup',['../classIRGreeAC.html#a5bbdcc83f9d49e32379cd27cad0ba130',1,'IRGreeAC::fixup()'],['../classIRKelvinatorAC.html#a389af589003c39794ae5d4bd572fa485',1,'IRKelvinatorAC::fixup()']]], - ['flap_380',['Flap',['../unionArgoProtocol.html#ab7d5a6a5d6849160b5980de7615dd5d1',1,'ArgoProtocol']]], - ['flap_5fmode_381',['flap_mode',['../classIRArgoAC.html#abfc383d92ced7d47945cc5ac996e5fc4',1,'IRArgoAC']]], - ['follow_382',['Follow',['../unionNeoclimaProtocol.html#a8d506fa694026184d0c82016e99ae3c0',1,'NeoclimaProtocol']]], - ['footer_383',['Footer',['../unionTechnibelProtocol.html#a5e575790ca9af8f8975065aee10fe44e',1,'TechnibelProtocol']]], - ['fr_2dfr_2eh_384',['fr-FR.h',['../fr-FR_8h.html',1,'']]], - ['fresh_385',['Fresh',['../unionNeoclimaProtocol.html#ad521881ecb1973370c82d63d6b917023',1,'NeoclimaProtocol']]], - ['freshair_386',['FreshAir',['../unionDaikin2Protocol.html#a6cfb49a475f49f34ad0a239b10b73385',1,'Daikin2Protocol']]], - ['freshairhigh_387',['FreshAirHigh',['../unionDaikin2Protocol.html#a538ce0c2496f8514fbb4ea1d1706e210',1,'Daikin2Protocol']]], - ['fujitsu_388',['fujitsu',['../classIRac.html#ae951653fc030f30a989dd40f53d30b35',1,'IRac']]], - ['fujitsu_5fac_389',['FUJITSU_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad8cf99a3a8776d644b78313306a2108c',1,'IRremoteESP8266.h']]], - ['fujitsu_5fac_5fremote_5fmodel_5ft_390',['fujitsu_ac_remote_model_t',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0',1,'IRsend.h']]], - ['fujitsuprotocol_391',['FujitsuProtocol',['../unionFujitsuProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.html deleted file mode 100644 index af52f82a4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.js deleted file mode 100644 index 919e2262d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_7.js +++ /dev/null @@ -1,133 +0,0 @@ -var searchData= -[ - ['ge6711ar2853m_392',['GE6711AR2853M',['../IRsend_8h.html#a50c54713e16502d280723334879dc83bada534bddbb58907faa6c7eae385ec790',1,'IRsend.h']]], - ['get10cheat_393',['get10CHeat',['../classIRFujitsuAC.html#a3c096987c44aa7dcc3c682fb372f585a',1,'IRFujitsuAC']]], - ['get3d_394',['get3D',['../classIRMitsubishiHeavy152Ac.html#aa1fc0f9cb991ae5fa4320bfe75037791',1,'IRMitsubishiHeavy152Ac::get3D()'],['../classIRMitsubishiHeavy88Ac.html#acdebce895deab9d8c19b63e43dcd55ce',1,'IRMitsubishiHeavy88Ac::get3D()']]], - ['get8cheat_395',['get8CHeat',['../classIRNeoclimaAc.html#abebfca9eeb51d23d194162a6570b1d39',1,'IRNeoclimaAc']]], - ['getbeep_396',['getBeep',['../classIRDaikin2.html#ac952fe406ec76350b80b94c1237d0db9',1,'IRDaikin2::getBeep()'],['../classIRSamsungAc.html#a17412aeb213d2800fa106b7af6c3933f',1,'IRSamsungAc::getBeep()'],['../classIRSanyoAc.html#ae7f3e043b55bdb1a54d1fd29a025a893',1,'IRSanyoAc::getBeep()']]], - ['getbit_397',['getBit',['../namespaceirutils.html#ac0756774b20e4f7c836abee466800ee6',1,'irutils::getBit(const uint64_t data, const uint8_t position, const uint8_t size)'],['../namespaceirutils.html#a27f90f74ed0b7af37c7bd8cd2a059dee',1,'irutils::getBit(const uint8_t data, const uint8_t position)']]], - ['getboost_398',['getBoost',['../classIRDelonghiAc.html#a6f49f15cba66d184b9bdc950114d4ff0',1,'IRDelonghiAc']]], - ['getbreeze_399',['getBreeze',['../classIRSamsungAc.html#ae442d9d84a1058196620ab6f0c994cc7',1,'IRSamsungAc']]], - ['getbufsize_400',['getBufSize',['../classIRrecv.html#a69ab02ea6823ccf18d1f6be87ca1b92e',1,'IRrecv']]], - ['getbutton_401',['getButton',['../classIRHaierACYRW02.html#a58f8df6244a91d02e109b91197d535b9',1,'IRHaierACYRW02::getButton()'],['../classIRHitachiAc424.html#a8f3342235b1f69fdcdc942147ac3a909',1,'IRHitachiAc424::getButton()'],['../classIRNeoclimaAc.html#a21c11784fc1504688164b2c8a01a8e06',1,'IRNeoclimaAc::getButton()']]], - ['getcelsius_402',['getCelsius',['../classIRFujitsuAC.html#af91371d9fc03c014dad0a6f2abb56df1',1,'IRFujitsuAC']]], - ['getclean_403',['getClean',['../classIRCoolixAC.html#a7f4c287068939ff94f03a005d9c7e4b4',1,'IRCoolixAC::getClean()'],['../classIRDaikin2.html#a742d3167334e11c6386906ed7f4ba044',1,'IRDaikin2::getClean()'],['../classIRElectraAc.html#af48c261ceb93568010c57a61bf0f882d',1,'IRElectraAc::getClean()'],['../classIRFujitsuAC.html#a8b356ce721c4b7d4845d27f43adb0e2a',1,'IRFujitsuAC::getClean()'],['../classIRMitsubishiHeavy152Ac.html#acecd9523961d07dd0cf7644a7008e59f',1,'IRMitsubishiHeavy152Ac::getClean()'],['../classIRMitsubishiHeavy88Ac.html#a6eeaeca11d48df313f8da364e2a91e2e',1,'IRMitsubishiHeavy88Ac::getClean()'],['../classIRSamsungAc.html#a8980cc9a230a78ec76a190056a8b9be6',1,'IRSamsungAc::getClean()'],['../classIRSharpAc.html#a1e3be9f825418843393c15715944da63',1,'IRSharpAc::getClean()']]], - ['getclock_404',['getClock',['../classIRDaikin128.html#a21ac762a97228b2183d247e27b9f471d',1,'IRDaikin128::getClock()'],['../classIRDaikin64.html#aafc78cfd252453c559080eb4b1bdc7a2',1,'IRDaikin64::getClock()'],['../classIREcoclimAc.html#a2313035ff6dfece5dc716bc59c95f843',1,'IREcoclimAc::getClock()'],['../classIRMitsubishiAC.html#ad6ba27d19cce9528ce869c8a9b9752f2',1,'IRMitsubishiAC::getClock()'],['../classIRPanasonicAc.html#a084479e8f23f7dbb8f155209b36efb3b',1,'IRPanasonicAc::getClock()'],['../classIRWhirlpoolAc.html#a97ab57772b05bc674c43000a57bb05de',1,'IRWhirlpoolAc::getClock()']]], - ['getcmd_405',['getCmd',['../classIRFujitsuAC.html#a59d6739d40ebb0beaef3504de7cecbfd',1,'IRFujitsuAC']]], - ['getcomfort_406',['getComfort',['../classIRDaikinESP.html#a61a4d8bf064dc4f2f1af768062950931',1,'IRDaikinESP::getComfort()'],['../classIRDaikin152.html#a7021aedd84115062149369a167f76d00',1,'IRDaikin152::getComfort()']]], - ['getcommand_407',['getCommand',['../classIRGoodweatherAc.html#ac46149fab1211f16891ffe31fa55b1b8',1,'IRGoodweatherAc::getCommand()'],['../classIRHaierAC.html#a0e9bea37c9f3a43ad205994b396d5cd2',1,'IRHaierAC::getCommand()'],['../classIRWhirlpoolAc.html#ac5f07ffc689770b0327279df09ac1f1e',1,'IRWhirlpoolAc::getCommand()']]], - ['getcorrectedrawlength_408',['getCorrectedRawLength',['../IRutils_8cpp.html#aad5f25cf6a2dded8b48f4a6dd16857be',1,'getCorrectedRawLength(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#aad5f25cf6a2dded8b48f4a6dd16857be',1,'getCorrectedRawLength(const decode_results *const results): IRutils.cpp']]], - ['getcurrentday_409',['getCurrentDay',['../classIRDaikinESP.html#a2f4db9739f130e013b047847bb01e4a6',1,'IRDaikinESP']]], - ['getcurrenttime_410',['getCurrentTime',['../classIRDaikinESP.html#aa32d285bba6557a9f375b309ea697dec',1,'IRDaikinESP::getCurrentTime()'],['../classIRDaikin2.html#ac6350e7bc0af04e7a5e49b8d35c5883a',1,'IRDaikin2::getCurrentTime()']]], - ['getcurrtime_411',['getCurrTime',['../classIRHaierAC.html#ace3a6ad8816dbf5d4a9f8595cc621b09',1,'IRHaierAC']]], - ['getdisplay_412',['getDisplay',['../classIRSamsungAc.html#a05e2c47fc5c63782f2420feb1337014c',1,'IRSamsungAc']]], - ['getdisplaytempsource_413',['getDisplayTempSource',['../classIRGreeAC.html#a2ed802a668c53499133d7b5be9b287ec',1,'IRGreeAC']]], - ['getecono_414',['getEcono',['../classIRCoronaAc.html#a4b379e29e5784c33a6ee73b3e81844e4',1,'IRCoronaAc::getEcono()'],['../classIRDaikinESP.html#af683032a0602275c3e64aa1eaec8bce0',1,'IRDaikinESP::getEcono()'],['../classIRDaikin2.html#aa0471ba51480c60af811b157c98945b8',1,'IRDaikin2::getEcono()'],['../classIRDaikin128.html#a4f1de86c0086aeb02444c11ff12dfb90',1,'IRDaikin128::getEcono()'],['../classIRDaikin152.html#a55f1ba2167dfab3571c8d9cc8df9da1b',1,'IRDaikin152::getEcono()'],['../classIRMitsubishiHeavy152Ac.html#ad9269cfab5a568131885133993d76ae7',1,'IRMitsubishiHeavy152Ac::getEcono()'],['../classIRMitsubishiHeavy88Ac.html#a589bd953d2f7e73c5e2802d145891d7c',1,'IRMitsubishiHeavy88Ac::getEcono()'],['../classIRNeoclimaAc.html#aed7b9c7b8a1686a1e2850c9b9347d868',1,'IRNeoclimaAc::getEcono()'],['../classIRTcl112Ac.html#a7a097fd243a9f0c9f965d2299996cd32',1,'IRTcl112Ac::getEcono()'],['../classIRToshibaAC.html#a13c884468baf27828c61ffd526d0e297',1,'IRToshibaAC::getEcono()'],['../classIRVoltas.html#a7849e211bf16bf5bd6d0d940bd3e6431',1,'IRVoltas::getEcono()']]], - ['geteconotoggle_415',['getEconoToggle',['../classIRMideaAC.html#a69839c88534920e667e56750c83f926f',1,'IRMideaAC::getEconoToggle()'],['../classIRSharpAc.html#a39c6c18289eb2deee80fa7584d19b89a',1,'IRSharpAc::getEconoToggle()']]], - ['getenablesensortemp_416',['getEnableSensorTemp',['../classIRMideaAC.html#a313effc2012af55df719edff56c9ccea',1,'IRMideaAC']]], - ['geteye_417',['getEye',['../classIRDaikin2.html#a7de3421d44db047fdbdfa6bad20a71e8',1,'IRDaikin2::getEye()'],['../classIRNeoclimaAc.html#a2a5d21b3109a9105db9e2445bf8358b4',1,'IRNeoclimaAc::getEye()']]], - ['geteyeauto_418',['getEyeAuto',['../classIRDaikin2.html#ad3de9384586e091b85065a1f2c359295',1,'IRDaikin2']]], - ['getfan_419',['getFan',['../classIRAirwellAc.html#aa24f7ff64fcb1cea358f7b5288eb7aa1',1,'IRAirwellAc::getFan()'],['../classIRAmcorAc.html#a06e64e42bb7bc26afc17e504bf57616a',1,'IRAmcorAc::getFan()'],['../classIRArgoAC.html#aee8a1870fc079b0c8679c403b6cd6806',1,'IRArgoAC::getFan()'],['../classIRCarrierAc64.html#a0426f9c043b65b0d0d870f7ef5474ed9',1,'IRCarrierAc64::getFan()'],['../classIRCoolixAC.html#a2ef6155c4a8880481a996fdf9462a8e9',1,'IRCoolixAC::getFan()'],['../classIRCoronaAc.html#aaf36811405387c3fb14a8019ce0ffb4b',1,'IRCoronaAc::getFan()'],['../classIRDaikinESP.html#a35585fa7c6742031a1c23b724096fa2b',1,'IRDaikinESP::getFan()'],['../classIRDaikin2.html#a5ba2b2a1cd20916b3dc0f5f57dd265e3',1,'IRDaikin2::getFan()'],['../classIRDaikin216.html#abc21da328afcf0831d6cd834c954f7a0',1,'IRDaikin216::getFan()'],['../classIRDaikin160.html#a2b0d39a508521a2ee982ed8d012b5e07',1,'IRDaikin160::getFan()'],['../classIRDaikin176.html#af4d75131b7912d499af590fdc2be03d5',1,'IRDaikin176::getFan()'],['../classIRDaikin128.html#afda28bc88f4b4f1db5ee4229634cef8c',1,'IRDaikin128::getFan()'],['../classIRDaikin152.html#a3e40410ddd64a6417ad4a43301ad8c09',1,'IRDaikin152::getFan()'],['../classIRDaikin64.html#ac510c4758eb52d703840e85c88108bfb',1,'IRDaikin64::getFan()'],['../classIRDelonghiAc.html#a897dd29a58fed41abb4a6bbe10527188',1,'IRDelonghiAc::getFan()'],['../classIREcoclimAc.html#a61740f93abcbb3af61b89ed754d71700',1,'IREcoclimAc::getFan()'],['../classIRElectraAc.html#a5d6c472701f93579341c34f2b14a5238',1,'IRElectraAc::getFan()'],['../classIRGoodweatherAc.html#a58839f0a332a1db1d808c608aa718031',1,'IRGoodweatherAc::getFan()'],['../classIRGreeAC.html#af5586de05500d3f11307a387ef91bb22',1,'IRGreeAC::getFan()'],['../classIRHaierAC.html#a20efaa79ca7ead0b08f19a4b41c198aa',1,'IRHaierAC::getFan()'],['../classIRHaierACYRW02.html#a543f7d2ce346b94a7ae29d50d1189f27',1,'IRHaierACYRW02::getFan()'],['../classIRHitachiAc.html#addc6c94839c7d994573029b66e7fbe94',1,'IRHitachiAc::getFan()'],['../classIRHitachiAc1.html#a7cb01dc7abf8f7c45c8690134c71e7a8',1,'IRHitachiAc1::getFan()'],['../classIRHitachiAc424.html#a2d105be99f05794ce845db06e17bffcd',1,'IRHitachiAc424::getFan()'],['../classIRKelvinatorAC.html#ae96f43f14a7df9f23be734d1f9b09b37',1,'IRKelvinatorAC::getFan()'],['../classIRLgAc.html#a38a3fed9066641cd80208d330c92ef9b',1,'IRLgAc::getFan()'],['../classIRMideaAC.html#a38a0c175fead133026a0079c36e3e8ce',1,'IRMideaAC::getFan()'],['../classIRMitsubishiAC.html#ad7bda7fc858dd11c242f563bdda9c8a9',1,'IRMitsubishiAC::getFan()'],['../classIRMitsubishi136.html#aed870bd56c47808c6b3dae878ba6cf7f',1,'IRMitsubishi136::getFan()'],['../classIRMitsubishi112.html#a18bf39ff526ead69eb91854c5f0b48cc',1,'IRMitsubishi112::getFan()'],['../classIRMitsubishiHeavy152Ac.html#ae4e0a08c61289443fdd3e928b91568b3',1,'IRMitsubishiHeavy152Ac::getFan()'],['../classIRMitsubishiHeavy88Ac.html#a43f25d927d54712384a632228544c124',1,'IRMitsubishiHeavy88Ac::getFan()'],['../classIRNeoclimaAc.html#a60c4e4b50c2bcd07991eaff73c031834',1,'IRNeoclimaAc::getFan()'],['../classIRPanasonicAc.html#a302ba64400c820a5a0d822315516564a',1,'IRPanasonicAc::getFan()'],['../classIRPanasonicAc32.html#a03a6d54ef606dcb67931a7e42532fb34',1,'IRPanasonicAc32::getFan()'],['../classIRSamsungAc.html#a924701fc0a10c1bae8a93749658abff5',1,'IRSamsungAc::getFan()'],['../classIRSanyoAc.html#a01ecbebadcdb81220ab1f2cbe239c6c0',1,'IRSanyoAc::getFan()'],['../classIRSharpAc.html#ad9881478c89a4852f2fccb7623843b4c',1,'IRSharpAc::getFan()'],['../classIRTcl112Ac.html#a4c7f0b599c415406274bfba4f0e65984',1,'IRTcl112Ac::getFan()'],['../classIRTechnibelAc.html#a71a97d77ffe257518d9a72b716bd5373',1,'IRTechnibelAc::getFan()'],['../classIRTecoAc.html#ad7c6b4f2a79582deb67e4928796392a6',1,'IRTecoAc::getFan()'],['../classIRToshibaAC.html#abd5191c603faef027ad6bc4b8abe82ae',1,'IRToshibaAC::getFan()'],['../classIRTranscoldAc.html#a084be3ebe2b371a4b7ff3d08f287d56e',1,'IRTranscoldAc::getFan()'],['../classIRTrotecESP.html#af7546138743b6e7a63e5566d3a6ba6bf',1,'IRTrotecESP::getFan()'],['../classIRTrumaAc.html#a5e96e2b872dcb6cccff9f8231b3374c4',1,'IRTrumaAc::getFan()'],['../classIRVestelAc.html#a510b05386df2578a3241929cffcfa13e',1,'IRVestelAc::getFan()'],['../classIRVoltas.html#afbe5c3cda5fa2233b29a582de71d4723',1,'IRVoltas::getFan()'],['../classIRWhirlpoolAc.html#aa1a1077dd30b0b244c90ac8c7387e33c',1,'IRWhirlpoolAc::getFan()']]], - ['getfanspeed_420',['getFanSpeed',['../classIRFujitsuAC.html#a38016d2f305ff0d17c57e60c77ad77f8',1,'IRFujitsuAC']]], - ['getfilter_421',['getFilter',['../classIRFujitsuAC.html#af76f83d0e31fd33caf2360e4f26bdfe4',1,'IRFujitsuAC::getFilter()'],['../classIRMitsubishiHeavy152Ac.html#aea4bdebc0a2b63bb621cb9236e113bd2',1,'IRMitsubishiHeavy152Ac::getFilter()']]], - ['getflap_422',['getFlap',['../classIRArgoAC.html#ae0cb1c5df94fc38cccc14f313296c280',1,'IRArgoAC']]], - ['getfollow_423',['getFollow',['../classIRNeoclimaAc.html#a7223965174db938d90b5324e3d601d4e',1,'IRNeoclimaAc']]], - ['getfresh_424',['getFresh',['../classIRNeoclimaAc.html#ad22722bde267db7ecfd99298bde0165e',1,'IRNeoclimaAc']]], - ['getfreshair_425',['getFreshAir',['../classIRDaikin2.html#a5a7f38e358d0968d9af6ffca76248330',1,'IRDaikin2']]], - ['getfreshairhigh_426',['getFreshAirHigh',['../classIRDaikin2.html#a0e1d1a46a38c722943bc212cdc09ab97',1,'IRDaikin2']]], - ['gethealth_427',['getHealth',['../classIRHaierAC.html#aff4e7de97c375daf881249eefc1c60f8',1,'IRHaierAC::getHealth()'],['../classIRHaierACYRW02.html#a3de686bdee579703b8203acec3353b01',1,'IRHaierACYRW02::getHealth()'],['../classIRTcl112Ac.html#a37015a710d0c3b6278874fd5a5673e0f',1,'IRTcl112Ac::getHealth()']]], - ['gethold_428',['getHold',['../classIRNeoclimaAc.html#adbbd41de5f5f4cd7fb89ebc6e20e81cd',1,'IRNeoclimaAc']]], - ['gethumid_429',['getHumid',['../classIRTecoAc.html#a47072d5984da8284b28ac9ab093f275c',1,'IRTecoAc']]], - ['getid_430',['getId',['../classIRFujitsuAC.html#a51369012283f84ff52d733138a690340',1,'IRFujitsuAC']]], - ['getifeel_431',['getIFeel',['../classIRGreeAC.html#a73a8de0e0e9d7fc8ce9a0b44cffc2357',1,'IRGreeAC::getIFeel()'],['../classIRArgoAC.html#ac1b4819a4cc035b7cc8317892a412348',1,'IRArgoAC::getiFeel()']]], - ['getinternalstatelength_432',['getInternalStateLength',['../classIRToshibaAC.html#a146624d75ab5f6c23a75fe87918edadd',1,'IRToshibaAC']]], - ['getion_433',['getIon',['../classIRNeoclimaAc.html#a4e76b4f123a6138712834c12ef8a6f50',1,'IRNeoclimaAc::getIon()'],['../classIRPanasonicAc.html#a6d6909b7b96815c227f0009dcbd3ce8c',1,'IRPanasonicAc::getIon()'],['../classIRSamsungAc.html#a4b29304810f8e619123553ffd40b35c1',1,'IRSamsungAc::getIon()'],['../classIRSharpAc.html#a63739c8f8aea457fbaa260983a1b828d',1,'IRSharpAc::getIon()'],['../classIRVestelAc.html#a9b31dcca090f98b575a97fd6cb397eb3',1,'IRVestelAc::getIon()']]], - ['getionfilter_434',['getIonFilter',['../classIRKelvinatorAC.html#ae1cb7be762f306bd007976dc0feb788e',1,'IRKelvinatorAC']]], - ['getled_435',['getLed',['../classIRCoolixAC.html#a5eb13d05cf8aff9cfe8d5f437b8042e4',1,'IRCoolixAC']]], - ['getlight_436',['getLight',['../classIRDaikin2.html#a100812aedfaa32830dfb59c7857b4af5',1,'IRDaikin2::getLight()'],['../classIRGoodweatherAc.html#addd2e3cb3824ce4ca8f15bee468b1a16',1,'IRGoodweatherAc::getLight()'],['../classIRGreeAC.html#a65293afe8c8c0c95a47d577326d06893',1,'IRGreeAC::getLight()'],['../classIRKelvinatorAC.html#aafda5580f46145f2b1843d1d4b7dc055',1,'IRKelvinatorAC::getLight()'],['../classIRNeoclimaAc.html#a2c1cd7460cd82b302f9e1373c7ffe738',1,'IRNeoclimaAc::getLight()'],['../classIRTcl112Ac.html#a058bdb5e3191ba900aeb68a02290ef7f',1,'IRTcl112Ac::getLight()'],['../classIRTecoAc.html#ab5135b0873c172036f1a2426c96504ce',1,'IRTecoAc::getLight()'],['../classIRVoltas.html#aab64c21de6d129af4379e32731cea163',1,'IRVoltas::getLight()'],['../classIRWhirlpoolAc.html#a4583ad4468e9bc736e77c8ea63bcdcbd',1,'IRWhirlpoolAc::getLight()']]], - ['getlighttoggle_437',['getLightToggle',['../classIRDaikin128.html#a3825b86cffe11409447f5c41bc3a469f',1,'IRDaikin128::getLightToggle()'],['../classIRElectraAc.html#aed9858539f66d98e065532f0a6bac048',1,'IRElectraAc::getLightToggle()'],['../classIRMideaAC.html#a770500c76c09ea7a7a7f6d0967c5f348',1,'IRMideaAC::getLightToggle()'],['../classIRSharpAc.html#a0bef3a8c41ca85ac84607606fe3a1728',1,'IRSharpAc::getLightToggle()']]], - ['getmax_438',['getMax',['../classIRAmcorAc.html#a9cff471d660dd92a48cc8f76b8ee5009',1,'IRAmcorAc::getMax()'],['../classIRArgoAC.html#a70186816a8981ca1d29b86df3bb8d36b',1,'IRArgoAC::getMax()']]], - ['getmode_439',['getMode',['../classIRAirwellAc.html#a9a1d651c8b71703212207888ddb4be14',1,'IRAirwellAc::getMode()'],['../classIRAmcorAc.html#a2309c3eba2ce3ec506ce0bb11639d47a',1,'IRAmcorAc::getMode()'],['../classIRArgoAC.html#a3c9c49e32fe2f06e218a1b8278ab4db2',1,'IRArgoAC::getMode()'],['../classIRCarrierAc64.html#a554d655ebd58aa90375cad18de24cc0d',1,'IRCarrierAc64::getMode()'],['../classIRCoolixAC.html#a8fb9a73b6c3540bc395682bb32ef8a27',1,'IRCoolixAC::getMode()'],['../classIRCoronaAc.html#a4ea2e6e8e5b19c8bfc4b5625bcd308ad',1,'IRCoronaAc::getMode()'],['../classIRDaikinESP.html#abc4417c6d46ba7e7f15e80984ed458f4',1,'IRDaikinESP::getMode()'],['../classIRDaikin2.html#ab89325df2b63faccaa82c7708cae894e',1,'IRDaikin2::getMode()'],['../classIRDaikin216.html#a4ec4d63df2c3536bc9b10c1a883123f2',1,'IRDaikin216::getMode()'],['../classIRDaikin160.html#a177d6e5e5957f64e6e71e3792d94188a',1,'IRDaikin160::getMode()'],['../classIRDaikin176.html#a06d4d50b48a3d10c882342c582d46402',1,'IRDaikin176::getMode()'],['../classIRDaikin128.html#ae0aaea03e3da871673212c92bc166bb2',1,'IRDaikin128::getMode()'],['../classIRDaikin152.html#ae08cda442b9495cd23d40184efb27b45',1,'IRDaikin152::getMode()'],['../classIRDaikin64.html#adea9511f98273e2f4e8fcb47ddfa0a5a',1,'IRDaikin64::getMode()'],['../classIRDelonghiAc.html#a09ff883265f23bf67d73e11755155600',1,'IRDelonghiAc::getMode()'],['../classIREcoclimAc.html#a93a69322013b546dc4e1ddb2b2dc4a2f',1,'IREcoclimAc::getMode()'],['../classIRElectraAc.html#ab38a479c1947f1758a882ec8df2e1fc9',1,'IRElectraAc::getMode()'],['../classIRFujitsuAC.html#addabed92c560d2a97743f2fd074fab4d',1,'IRFujitsuAC::getMode()'],['../classIRGoodweatherAc.html#a7a33c367d8cb64ec85afc37bbdda3ab1',1,'IRGoodweatherAc::getMode()'],['../classIRGreeAC.html#a52d00282331a137869f3e1e165d8fe41',1,'IRGreeAC::getMode()'],['../classIRHaierAC.html#a2ddf59c6ce732c23a9898dfc6679be02',1,'IRHaierAC::getMode()'],['../classIRHaierACYRW02.html#a36be68111465fb0161aa22cfac8cbe55',1,'IRHaierACYRW02::getMode()'],['../classIRHitachiAc.html#ab0fa1185703c71d2558260cb5e3e40dc',1,'IRHitachiAc::getMode()'],['../classIRHitachiAc1.html#ac10580db160a458a97168e6f0e8a9970',1,'IRHitachiAc1::getMode()'],['../classIRHitachiAc424.html#a94c44ea44ec395351715f28d2067bdca',1,'IRHitachiAc424::getMode()'],['../classIRHitachiAc3.html#a511c9b731a0367fd05b32b42a69adec2',1,'IRHitachiAc3::getMode()'],['../classIRKelvinatorAC.html#af878b8867a65e62e1208e8358cfffa7c',1,'IRKelvinatorAC::getMode()'],['../classIRLgAc.html#a684e35c0c7f4dafbaf6d53230e7ee643',1,'IRLgAc::getMode()'],['../classIRMideaAC.html#aa024806cd5fce842e031f130d1f70ec6',1,'IRMideaAC::getMode()'],['../classIRMitsubishiAC.html#a6aa36b5cdb80acf93d0a2bb413ef5c6c',1,'IRMitsubishiAC::getMode()'],['../classIRMitsubishi136.html#a2930dc65d4e9d193a1763c836ab6d1cd',1,'IRMitsubishi136::getMode()'],['../classIRMitsubishi112.html#adf3365711e44842586a776030c52fd23',1,'IRMitsubishi112::getMode()'],['../classIRMitsubishiHeavy152Ac.html#a948571778a16aa7a7256773a101e81b0',1,'IRMitsubishiHeavy152Ac::getMode()'],['../classIRMitsubishiHeavy88Ac.html#a5004a26143481a3baa658026d1eed32f',1,'IRMitsubishiHeavy88Ac::getMode()'],['../classIRNeoclimaAc.html#a305db84bf11bd9f226db7dbec73e7dd3',1,'IRNeoclimaAc::getMode()'],['../classIRPanasonicAc.html#a5ffd59dd87b047e172ba74866267a9f3',1,'IRPanasonicAc::getMode()'],['../classIRPanasonicAc32.html#a353b10038a47d96ec12ea233b8160031',1,'IRPanasonicAc32::getMode()'],['../classIRSamsungAc.html#adcfed1f2123c48715cb6f3623ecf3f58',1,'IRSamsungAc::getMode()'],['../classIRSanyoAc.html#a8ec24049c1eb0e68f7c29c8a26c4faf2',1,'IRSanyoAc::getMode()'],['../classIRSharpAc.html#a36018c943865f189a32abae85a2b111b',1,'IRSharpAc::getMode()'],['../classIRTcl112Ac.html#a923f20af1fafa75feba9fabe0a39aa0a',1,'IRTcl112Ac::getMode()'],['../classIRTechnibelAc.html#ad1361f45fd3cc86105fc77aeffef1796',1,'IRTechnibelAc::getMode()'],['../classIRTecoAc.html#ad62055752174ef33b5444419162291aa',1,'IRTecoAc::getMode()'],['../classIRToshibaAC.html#a748c242e280954ef4b0efea6d47c1471',1,'IRToshibaAC::getMode()'],['../classIRTranscoldAc.html#a12e32c7b7a708ff6ee6b895ca3a884a8',1,'IRTranscoldAc::getMode()'],['../classIRTrotecESP.html#a734686c303babb58d836eb035ed11081',1,'IRTrotecESP::getMode()'],['../classIRTrumaAc.html#ac5190d6978631080f1617d3feec6f239',1,'IRTrumaAc::getMode()'],['../classIRVestelAc.html#a38e48fa0f7ddbc0b16983d84824a198b',1,'IRVestelAc::getMode()'],['../classIRVoltas.html#acedc05af3702d4beb98ebd5717b5f06c',1,'IRVoltas::getMode()'],['../classIRWhirlpoolAc.html#a82e7290554e4504d8fce19cdec1e2d0f',1,'IRWhirlpoolAc::getMode()']]], - ['getmodel_440',['getModel',['../classIRFujitsuAC.html#a13a66019e2ba72e0b6e6bfa9c525f4a7',1,'IRFujitsuAC::getModel()'],['../classIRGreeAC.html#ae45f26fe0726c0730628624a271532fa',1,'IRGreeAC::getModel()'],['../classIRHitachiAc1.html#a9f84923ef60194ed218321fcdcf5adc7',1,'IRHitachiAc1::getModel()'],['../classIRLgAc.html#a15f94c5fc2b4dfabe1ae0e0bad3f1f37',1,'IRLgAc::getModel()'],['../classIRPanasonicAc.html#a625be846baf3ec556a59379785e642e8',1,'IRPanasonicAc::getModel()'],['../classIRSharpAc.html#a2274a217db53ba0363def8fb3fc5c88f',1,'IRSharpAc::getModel()'],['../classIRVoltas.html#a64e24f4f6aefa66ffa2f4a953f4ab205',1,'IRVoltas::getModel()'],['../classIRWhirlpoolAc.html#a96b0339714de063febd68829a8eea94f',1,'IRWhirlpoolAc::getModel()']]], - ['getmold_441',['getMold',['../classIRDaikinESP.html#a6e940bd512a5ee0ffafa203b0fe4b360',1,'IRDaikinESP::getMold()'],['../classIRDaikin2.html#a6fdc34fe5e43a9df5677bb54315359fb',1,'IRDaikin2::getMold()']]], - ['getnight_442',['getNight',['../classIRArgoAC.html#a4b50f226061301149107ce34dbf76daf',1,'IRArgoAC::getNight()'],['../classIRMitsubishiHeavy152Ac.html#ae8e193a64044e17493878dcc558a88da',1,'IRMitsubishiHeavy152Ac::getNight()']]], - ['getnormalstate_443',['getNormalState',['../classIRCoolixAC.html#a458618f926f8b57e4b9bdeae0d13a70d',1,'IRCoolixAC']]], - ['getoffsleeptimer_444',['getOffSleepTimer',['../classIRFujitsuAC.html#a24f5928580566b3db7a14d0366a3b6e6',1,'IRFujitsuAC']]], - ['getofftime_445',['getOffTime',['../classIRDaikinESP.html#a8e57cf94a231ad5d029bad4a4c029191',1,'IRDaikinESP::getOffTime()'],['../classIRDaikin2.html#a8556aa0c7343343efda80246aebd44cb',1,'IRDaikin2::getOffTime()'],['../classIRDaikin64.html#a7c6a4e163f01be4017cb028470c7d4d7',1,'IRDaikin64::getOffTime()'],['../classIRVoltas.html#a9f6d0e9c6ea6e71177df4d8d8dcb34b8',1,'IRVoltas::getOffTime()']]], - ['getofftimeenabled_446',['getOffTimeEnabled',['../classIRDaikin64.html#a8f02ea1c216886ebbed4369797329e40',1,'IRDaikin64']]], - ['getofftimer_447',['getOffTimer',['../classIRCarrierAc64.html#ae777fcdb402eb862a1e4a5912ff39fae',1,'IRCarrierAc64::getOffTimer()'],['../classIRCoronaAc.html#ad46f8bd5c50ebd4de3354a77deac2518',1,'IRCoronaAc::getOffTimer()'],['../classIRDaikin128.html#a7550e40a909b21d8357871983951e02d',1,'IRDaikin128::getOffTimer()'],['../classIRDelonghiAc.html#a825e23b338644cd7b41a6529b2a38ee9',1,'IRDelonghiAc::getOffTimer()'],['../classIREcoclimAc.html#ae74a5c07d7840e00a69b8f92cda8fcf8',1,'IREcoclimAc::getOffTimer()'],['../classIRHaierAC.html#a4760af54cbc1618b2dc4c1bf57884ebb',1,'IRHaierAC::getOffTimer()'],['../classIRHitachiAc1.html#a37988864a631c1cd7df1bd09cc3878ba',1,'IRHitachiAc1::getOffTimer()'],['../classIRMideaAC.html#a280b85deb97232f03d6d9953f309926f',1,'IRMideaAC::getOffTimer()'],['../classIRPanasonicAc.html#a4bce377d32504f666662f1d93645761f',1,'IRPanasonicAc::getOffTimer()'],['../classIRSanyoAc.html#a754239cad3d588083a2dba5e933f0306',1,'IRSanyoAc::getOffTimer()'],['../classIRVestelAc.html#a45c725deb349e357b8c52ab3dcf51bdb',1,'IRVestelAc::getOffTimer()'],['../classIRWhirlpoolAc.html#a597de82026cdb3ebf12319ad5b6f7314',1,'IRWhirlpoolAc::getOffTimer()']]], - ['getofftimerenabled_448',['getOffTimerEnabled',['../classIRDaikinESP.html#ae17795e1e1d4f0d3c6898a0d3188366e',1,'IRDaikinESP::getOffTimerEnabled()'],['../classIRDaikin2.html#ab6c48355e0a0c80d3cd99ae276df80a5',1,'IRDaikin2::getOffTimerEnabled()'],['../classIRDaikin128.html#a7437b509c7c26d94e5f5224d4375578e',1,'IRDaikin128::getOffTimerEnabled()'],['../classIRDelonghiAc.html#ae48767203f462ac02441c635328ef7aa',1,'IRDelonghiAc::getOffTimerEnabled()']]], - ['getontime_449',['getOnTime',['../classIRDaikinESP.html#ab11a5aae3cd055f3c9b61dbf9fdb3ef9',1,'IRDaikinESP::getOnTime()'],['../classIRDaikin2.html#a7e98e1f9211e7e8885c503a7f724030f',1,'IRDaikin2::getOnTime()'],['../classIRDaikin64.html#a24536b3bce2d3e55f9a75ac093621cbc',1,'IRDaikin64::getOnTime()'],['../classIRVoltas.html#a96578f6ff015d5791a172fd9d0d0916f',1,'IRVoltas::getOnTime()']]], - ['getontimeenabled_450',['getOnTimeEnabled',['../classIRDaikin64.html#a2e64a60c10bd8508a9d4b1373e2aab22',1,'IRDaikin64']]], - ['getontimer_451',['getOnTimer',['../classIRCarrierAc64.html#a57f606d89eb29dafc18a2461467ad74f',1,'IRCarrierAc64::getOnTimer()'],['../classIRCoronaAc.html#a1a2f65c1eb0df18246d5088ef1a80e2f',1,'IRCoronaAc::getOnTimer()'],['../classIRDaikin128.html#a012991ae4e0bfce0dec50dce7e79b3d6',1,'IRDaikin128::getOnTimer()'],['../classIRDelonghiAc.html#a15c948b5ab0ea17298c95dc8b9fd5887',1,'IRDelonghiAc::getOnTimer()'],['../classIREcoclimAc.html#afdb831e4920ab2e11b63e10f8dfabf7d',1,'IREcoclimAc::getOnTimer()'],['../classIRFujitsuAC.html#ae7a012df0406b90d6ff6197334eb7bf3',1,'IRFujitsuAC::getOnTimer()'],['../classIRHaierAC.html#a1c71cd51382036c4548b460a13072e91',1,'IRHaierAC::getOnTimer()'],['../classIRHitachiAc1.html#a4f850fa34340b4cd976b514c355b0f99',1,'IRHitachiAc1::getOnTimer()'],['../classIRMideaAC.html#a4b8c1124bde8fab95f82ea57c0a77c39',1,'IRMideaAC::getOnTimer()'],['../classIRPanasonicAc.html#a51d50a59e09f0911022c59ab60bf4889',1,'IRPanasonicAc::getOnTimer()'],['../classIRVestelAc.html#a3b93b975802111973241d2c57d691bd0',1,'IRVestelAc::getOnTimer()'],['../classIRWhirlpoolAc.html#a3af30bd17c4facd9f93c21e740095222',1,'IRWhirlpoolAc::getOnTimer()']]], - ['getontimerenabled_452',['getOnTimerEnabled',['../classIRDaikinESP.html#a1305a311d2cb6acc8fd4b26d0b9b5e57',1,'IRDaikinESP::getOnTimerEnabled()'],['../classIRDaikin2.html#a635bd00eff13041b284566936af0d589',1,'IRDaikin2::getOnTimerEnabled()'],['../classIRDaikin128.html#aebe10daacaf0629ed451624b776981fd',1,'IRDaikin128::getOnTimerEnabled()'],['../classIRDelonghiAc.html#afdd8284ec6c1d31b0cc943a49bdf3f0e',1,'IRDelonghiAc::getOnTimerEnabled()']]], - ['getoutsidequiet_453',['getOutsideQuiet',['../classIRFujitsuAC.html#a706456b7e46a3da48483fa61e11c8e86',1,'IRFujitsuAC']]], - ['getpower_454',['getPower',['../classIRAmcorAc.html#aa5c0a82e7425f9e71d303ebcd6af22aa',1,'IRAmcorAc::getPower()'],['../classIRArgoAC.html#a0784b8dec8e3e136b263a8c6387b7819',1,'IRArgoAC::getPower()'],['../classIRCarrierAc64.html#a61422ae8089453a26f1eea4fc0a57489',1,'IRCarrierAc64::getPower()'],['../classIRCoolixAC.html#a733ea01983f9936fbcee4c313c2ff54a',1,'IRCoolixAC::getPower()'],['../classIRCoronaAc.html#a0616dcf381d95d40138fb549e54eb7c4',1,'IRCoronaAc::getPower()'],['../classIRDaikinESP.html#acb6694d29a241e0a82b50212f46363f7',1,'IRDaikinESP::getPower()'],['../classIRDaikin2.html#a742026c183ee2bf5be1aafd0b6bbec20',1,'IRDaikin2::getPower()'],['../classIRDaikin216.html#aaafa8df6d9e1c74fcc94de4630746642',1,'IRDaikin216::getPower()'],['../classIRDaikin160.html#a0c5e6157a818d2c67046fd4560db7859',1,'IRDaikin160::getPower()'],['../classIRDaikin176.html#aa095669914397f51729b0f6bd8d9c094',1,'IRDaikin176::getPower()'],['../classIRDaikin152.html#a3ebf05f9b7dab1d1a78c4a1a2c8a03eb',1,'IRDaikin152::getPower()'],['../classIRDelonghiAc.html#a88a2ef78cf091f9b4ab38536b6cbe25e',1,'IRDelonghiAc::getPower()'],['../classIREcoclimAc.html#acccf77fc5f0151a3414cfea45491c110',1,'IREcoclimAc::getPower()'],['../classIRElectraAc.html#a776fdad40d191f04356f8366ff6128d3',1,'IRElectraAc::getPower()'],['../classIRFujitsuAC.html#a0b77519e85271d48bcd2a151b603d288',1,'IRFujitsuAC::getPower()'],['../classIRGoodweatherAc.html#ac07f4c3c4e064a13f1f90d0c227d8ec0',1,'IRGoodweatherAc::getPower()'],['../classIRGreeAC.html#a72ba2c19cc104ae8307b3d7ca533d4c1',1,'IRGreeAC::getPower()'],['../classIRHaierACYRW02.html#a242508ff127e27ac644c195b3d572baf',1,'IRHaierACYRW02::getPower()'],['../classIRHitachiAc.html#a8d94eb158971fcc28c85ce81443795f1',1,'IRHitachiAc::getPower()'],['../classIRHitachiAc1.html#a0183bbe39cfdda9d3b43e6d9c87df714',1,'IRHitachiAc1::getPower()'],['../classIRHitachiAc424.html#a025b0e8cd50111555d55fea481ca7b1c',1,'IRHitachiAc424::getPower()'],['../classIRKelvinatorAC.html#adfbe7efd74ec16f339c21983967920f9',1,'IRKelvinatorAC::getPower()'],['../classIRLgAc.html#a592403e1602a3b92f75d0e07756cc86e',1,'IRLgAc::getPower()'],['../classIRMideaAC.html#ad4dd8a532419cd2d8f5656df3e5a23e2',1,'IRMideaAC::getPower()'],['../classIRMitsubishiAC.html#abd4e2414d75b61c5d9d3693568dff791',1,'IRMitsubishiAC::getPower()'],['../classIRMitsubishi136.html#a2ebea047c764746524163f8c35dbe660',1,'IRMitsubishi136::getPower()'],['../classIRMitsubishi112.html#a04af02100d0cbad644d890f249f383ce',1,'IRMitsubishi112::getPower()'],['../classIRMitsubishiHeavy152Ac.html#afd5016f6c87fe822e6fe0e80d450f07b',1,'IRMitsubishiHeavy152Ac::getPower()'],['../classIRMitsubishiHeavy88Ac.html#a217d1f049e5046f5f0b5abd5c9cff422',1,'IRMitsubishiHeavy88Ac::getPower()'],['../classIRNeoclimaAc.html#a0bca526fcbe79a1ef3a6f281ef0f916b',1,'IRNeoclimaAc::getPower()'],['../classIRPanasonicAc.html#a2d50ed3994f6cc6e205d2c5fb6c0cc55',1,'IRPanasonicAc::getPower()'],['../classIRSamsungAc.html#aecb2a7187ea08433bed9c6a6f5dfc7e2',1,'IRSamsungAc::getPower()'],['../classIRSanyoAc.html#a0ad0e3522dc1ac2af56812540bbd2c5b',1,'IRSanyoAc::getPower()'],['../classIRSharpAc.html#a5d763e7c40eb7310789444b8746c50c8',1,'IRSharpAc::getPower()'],['../classIRTcl112Ac.html#a631d9d1addb03f18708fbec9d2480651',1,'IRTcl112Ac::getPower()'],['../classIRTechnibelAc.html#a1321272ac58e24e827a194965bb2b7a4',1,'IRTechnibelAc::getPower()'],['../classIRTecoAc.html#a66002ccce4fb4537ac5d937bc3ade7b5',1,'IRTecoAc::getPower()'],['../classIRToshibaAC.html#aacaa7c9c50b96de92f5947b87f4f3829',1,'IRToshibaAC::getPower()'],['../classIRTranscoldAc.html#a6ac4a00b6b9340e2a6ce304a928b148b',1,'IRTranscoldAc::getPower()'],['../classIRTrotecESP.html#a3c3e20f1b0edfe11c65c8e4ec1c0347c',1,'IRTrotecESP::getPower()'],['../classIRTrumaAc.html#a3a27b6b42bcd57cd1acfc2a7d6c4389c',1,'IRTrumaAc::getPower()'],['../classIRVestelAc.html#a88e2b24cc600488a6a27a1e616c80580',1,'IRVestelAc::getPower()'],['../classIRVoltas.html#aec20c3251f68bacf925406f243eb1b1a',1,'IRVoltas::getPower()']]], - ['getpowerbutton_455',['getPowerButton',['../classIRCoronaAc.html#ab1ec9772fae659e91c4939afab8e77ca',1,'IRCoronaAc']]], - ['getpowerful_456',['getPowerful',['../classIRDaikinESP.html#af70b79d4d3eaf91db08a1d597ce3e092',1,'IRDaikinESP::getPowerful()'],['../classIRDaikin2.html#a91ddd73b1b38fe74233765feecbd1055',1,'IRDaikin2::getPowerful()'],['../classIRDaikin216.html#a062077a6948d16de8b5f01522a989b2e',1,'IRDaikin216::getPowerful()'],['../classIRDaikin128.html#ab4eef7bc4e0d0ac29f465334687a65dc',1,'IRDaikin128::getPowerful()'],['../classIRDaikin152.html#a0668484f94dcb8ccdb13dba4f7782f7f',1,'IRDaikin152::getPowerful()'],['../classIRPanasonicAc.html#a736b77df0563705095d8f4241a80b1cb',1,'IRPanasonicAc::getPowerful()'],['../classIRSamsungAc.html#acea93892d56221b2563d0db1c09589d1',1,'IRSamsungAc::getPowerful()']]], - ['getpowerspecial_457',['getPowerSpecial',['../classIRSharpAc.html#af9b74287cfd37c600371e266bffb5be4',1,'IRSharpAc']]], - ['getpowertoggle_458',['getPowerToggle',['../classIRAirwellAc.html#a73ae0827f0235788d5d6149ea4de8eb0',1,'IRAirwellAc::getPowerToggle()'],['../classIRDaikin128.html#a7bcc31cfbaa886481831236268ba51a2',1,'IRDaikin128::getPowerToggle()'],['../classIRDaikin64.html#a0bb829722a7cdc6625a5a6684c7a7d95',1,'IRDaikin64::getPowerToggle()'],['../classIRHitachiAc1.html#a1028550ea882741a0f98d974671f1fd7',1,'IRHitachiAc1::getPowerToggle()'],['../classIRPanasonicAc32.html#afbbae70ea168e39a3adcf6846e981bd8',1,'IRPanasonicAc32::getPowerToggle()'],['../classIRWhirlpoolAc.html#a23aebd8217ea671f5e847a1eb70e61de',1,'IRWhirlpoolAc::getPowerToggle()']]], - ['getpurify_459',['getPurify',['../classIRDaikin2.html#a73b691ef3fa4a555f7557d0cad63ef02',1,'IRDaikin2']]], - ['getquiet_460',['getQuiet',['../classIRDaikinESP.html#ae066d6fd02d78021bb6d1b4cfa2e2ad8',1,'IRDaikinESP::getQuiet()'],['../classIRDaikin2.html#ae77c687b5e258baf941181ae0a261aae',1,'IRDaikin2::getQuiet()'],['../classIRDaikin216.html#adb59e4a7e933c1daa5456b9561710913',1,'IRDaikin216::getQuiet()'],['../classIRDaikin128.html#a0d59cd6b8a05a397d8cda84ecfeea426',1,'IRDaikin128::getQuiet()'],['../classIRDaikin152.html#a2ff46afdbce630536ce80066f8505aad',1,'IRDaikin152::getQuiet()'],['../classIRDaikin64.html#a2ee30dde1870871eaefe246c30990e59',1,'IRDaikin64::getQuiet()'],['../classIRKelvinatorAC.html#a3ecb10d41670852841c2543e6e97c781',1,'IRKelvinatorAC::getQuiet()'],['../classIRMitsubishi136.html#a9ea4cb8a87988cc6c97d7116d154448f',1,'IRMitsubishi136::getQuiet()'],['../classIRMitsubishi112.html#a28b91ee196fc212f7e3259e7429dc770',1,'IRMitsubishi112::getQuiet()'],['../classIRPanasonicAc.html#a8d7dfc9b5f7c7a4523c0bfa4e0bc415a',1,'IRPanasonicAc::getQuiet()'],['../classIRSamsungAc.html#a4296eb88c1b349206d7a0bd551d33ee6',1,'IRSamsungAc::getQuiet()'],['../classIRTrumaAc.html#a5102362a518e49176b3605d6fddf027e',1,'IRTrumaAc::getQuiet()']]], - ['getraw_461',['getRaw',['../classIRAirwellAc.html#aec84bac505703ad872cd4b6391fbe748',1,'IRAirwellAc::getRaw()'],['../classIRAmcorAc.html#a4dc24f5aa597dba421fdb0e2e0481875',1,'IRAmcorAc::getRaw()'],['../classIRArgoAC.html#ac9e8b45dbbef453a54e3593d7e2927fb',1,'IRArgoAC::getRaw()'],['../classIRCarrierAc64.html#a6f83fc571d5d7d3e3af2237367e66884',1,'IRCarrierAc64::getRaw()'],['../classIRCoolixAC.html#ada7799bf0e9fb40e7475a510187ff762',1,'IRCoolixAC::getRaw()'],['../classIRCoronaAc.html#ac2ba3b4bcefb801da345c9da5daa85fc',1,'IRCoronaAc::getRaw()'],['../classIRDaikinESP.html#ab100221dacc23402f486dee038df046d',1,'IRDaikinESP::getRaw()'],['../classIRDaikin2.html#af4bcf5f856169761c9b0f1fb6607af21',1,'IRDaikin2::getRaw()'],['../classIRDaikin216.html#a178e2dd3578a53356e1cebdbac6024a7',1,'IRDaikin216::getRaw()'],['../classIRDaikin160.html#accccba95fee75626871f91861678c57e',1,'IRDaikin160::getRaw()'],['../classIRDaikin176.html#acd84f4e9f36a91264290a7a0cf0f519e',1,'IRDaikin176::getRaw()'],['../classIRDaikin128.html#a05669c2b1a6720b95d9a5fb898179a10',1,'IRDaikin128::getRaw()'],['../classIRDaikin152.html#af6c492ed5216aedbd5ad922437e842fd',1,'IRDaikin152::getRaw()'],['../classIRDaikin64.html#aa3a947da9925c0f2568eeeeb0d9632b0',1,'IRDaikin64::getRaw()'],['../classIRDelonghiAc.html#a17159362299572642e485a7f815220d7',1,'IRDelonghiAc::getRaw()'],['../classIREcoclimAc.html#aec7b0bf1c542ce8141333a84ca3afcbd',1,'IREcoclimAc::getRaw()'],['../classIRElectraAc.html#a7674d29474ecbbb6366d96056794314c',1,'IRElectraAc::getRaw()'],['../classIRFujitsuAC.html#ae4dce44cab1f26756d63728cb8d55e65',1,'IRFujitsuAC::getRaw()'],['../classIRGoodweatherAc.html#a82d973e562b2425e8823fbc7332c06de',1,'IRGoodweatherAc::getRaw()'],['../classIRGreeAC.html#afa1595d4f69200b0076db1b9f8f2ea73',1,'IRGreeAC::getRaw()'],['../classIRHaierAC.html#abf72eed86c2c86c4f0f5f49f6a788b82',1,'IRHaierAC::getRaw()'],['../classIRHaierACYRW02.html#abca7bbe8c723551723f24f186343b764',1,'IRHaierACYRW02::getRaw()'],['../classIRHitachiAc.html#a8dafb9436f63cfc2d7e4f558fbd6e1ab',1,'IRHitachiAc::getRaw()'],['../classIRHitachiAc1.html#ad850b6364603880ccc444381e85af564',1,'IRHitachiAc1::getRaw()'],['../classIRHitachiAc424.html#acd8388f938feeaf6808ff65779435b5d',1,'IRHitachiAc424::getRaw()'],['../classIRHitachiAc3.html#a915605ca6d0bf3ff6fc9b376ddd394ae',1,'IRHitachiAc3::getRaw()'],['../classIRKelvinatorAC.html#a09149dd7bc45ca50b0c490b9c1f1e6f4',1,'IRKelvinatorAC::getRaw()'],['../classIRLgAc.html#afcb529d2f2c9016388264b80e6a99351',1,'IRLgAc::getRaw()'],['../classIRMideaAC.html#ae0b2c3a5a0a1d84eaeb462bbbe944d97',1,'IRMideaAC::getRaw()'],['../classIRMitsubishiAC.html#a1f2d0ea70bdeb71efab4c20ccd876aa9',1,'IRMitsubishiAC::getRaw()'],['../classIRMitsubishi136.html#a61cceec2bf241a75be1389391e8f3d9a',1,'IRMitsubishi136::getRaw()'],['../classIRMitsubishi112.html#a5e47e892921b8464652b55f41f42fd9a',1,'IRMitsubishi112::getRaw()'],['../classIRMitsubishiHeavy152Ac.html#a34ae73479c76b08512eaa87ed0662c0a',1,'IRMitsubishiHeavy152Ac::getRaw()'],['../classIRMitsubishiHeavy88Ac.html#af96915ac45861327ed7d55803dadd4fd',1,'IRMitsubishiHeavy88Ac::getRaw()'],['../classIRNeoclimaAc.html#a1f67329cad92d4252b0d33effce6380e',1,'IRNeoclimaAc::getRaw()'],['../classIRPanasonicAc.html#ad65c2bcdc3984a986f5ef2f03b5574d4',1,'IRPanasonicAc::getRaw()'],['../classIRPanasonicAc32.html#a9128df3724e0767070718c9811ce7d2d',1,'IRPanasonicAc32::getRaw()'],['../classIRSamsungAc.html#a96c6ac410053f0f2804160040d9fcf12',1,'IRSamsungAc::getRaw()'],['../classIRSanyoAc.html#a0ae6388f53eaf58d9c9276ab192e846b',1,'IRSanyoAc::getRaw()'],['../classIRSharpAc.html#a9d680b0145c376060bd2d2e4c2630162',1,'IRSharpAc::getRaw()'],['../classIRTcl112Ac.html#a517375b764d1381aa5a7d4ec962346ec',1,'IRTcl112Ac::getRaw()'],['../classIRTechnibelAc.html#ad606f7448fdb0813f52f253fd218562d',1,'IRTechnibelAc::getRaw()'],['../classIRTecoAc.html#ab88386c5c7669437dfbb91b1fa6321ed',1,'IRTecoAc::getRaw()'],['../classIRToshibaAC.html#a3572a06423851d2c4da5f85133a1a8ff',1,'IRToshibaAC::getRaw()'],['../classIRTranscoldAc.html#aaf7aa5d00d7447bfcb82d17ed1f66a6d',1,'IRTranscoldAc::getRaw()'],['../classIRTrotecESP.html#a412dd2cf9dcb711003bcbb5b579cb2b8',1,'IRTrotecESP::getRaw()'],['../classIRTrumaAc.html#a96c74884f744b75ba230bb7a4464fd21',1,'IRTrumaAc::getRaw()'],['../classIRVestelAc.html#afffd1dbcdec22ecca4efe9a996bf27e5',1,'IRVestelAc::getRaw()'],['../classIRVoltas.html#a8718fd8231a8b1c282c5c2a4b2e9c176',1,'IRVoltas::getRaw()'],['../classIRWhirlpoolAc.html#a788a6a5373256e10200969cc5c73da63',1,'IRWhirlpoolAc::getRaw()']]], - ['getrclevel_462',['getRClevel',['../classIRrecv.html#a8e32daaa903a8e42dad7faaf405b33dc',1,'IRrecv']]], - ['getroomtemp_463',['getRoomTemp',['../classIRArgoAC.html#aeae1c1fb6f1a3eeb4296849b0be6c44c',1,'IRArgoAC']]], - ['getsave_464',['getSave',['../classIRTecoAc.html#a75175a6a3bbe4bc37323042c1f902a34',1,'IRTecoAc']]], - ['getsectionbyte_465',['getSectionByte',['../classIRCoronaAc.html#aed9181df842370739a5b4977b20769f9',1,'IRCoronaAc']]], - ['getsectionchecksum_466',['getSectionChecksum',['../namespaceIRXmpUtils.html#a60f5e4774b9ff0e08ae54844b132d5fb',1,'IRXmpUtils']]], - ['getsensor_467',['getSensor',['../classIRDaikinESP.html#a6493face77cd685c85d080dd45decbc7',1,'IRDaikinESP::getSensor()'],['../classIRDaikin152.html#af07ad5e4e1b0f3b1cae18d3f4ef0a15f',1,'IRDaikin152::getSensor()'],['../classIRSanyoAc.html#abb18cd13144d0481f7547b7826a381f6',1,'IRSanyoAc::getSensor()']]], - ['getsensortemp_468',['getSensorTemp',['../classIRCoolixAC.html#ab2f86254c73285bbd420d90d6f089dfd',1,'IRCoolixAC::getSensorTemp()'],['../classIREcoclimAc.html#ac0395413439cc393a8d39a6fb26e1553',1,'IREcoclimAc::getSensorTemp()'],['../classIRMideaAC.html#a3ed0a7ef0acb6e7b7c83ed6722a80a7f',1,'IRMideaAC::getSensorTemp()'],['../classIRSanyoAc.html#abff813c8f55d9f52d705e10fab214963',1,'IRSanyoAc::getSensorTemp()']]], - ['getsilent_469',['getSilent',['../classIRMitsubishiHeavy152Ac.html#a352fe50eeb18db9f74114dd95e8754dc',1,'IRMitsubishiHeavy152Ac']]], - ['getsleep_470',['getSleep',['../classIRCarrierAc64.html#ae999122072e0dd1e9b83120292bc6256',1,'IRCarrierAc64::getSleep()'],['../classIRCoolixAC.html#a3baf61e1d13863681ce57f9465c42c65',1,'IRCoolixAC::getSleep()'],['../classIRDaikin128.html#a49f5b2bca44efadb585ec067deed39c3',1,'IRDaikin128::getSleep()'],['../classIRDaikin64.html#a6c158e0701a9b7d821c7a2c3c90d4bea',1,'IRDaikin64::getSleep()'],['../classIRDelonghiAc.html#ab41702206eb36ca6e1cc8689ce259861',1,'IRDelonghiAc::getSleep()'],['../classIRGoodweatherAc.html#a17ddc9ee4e4200176ede62817ed7cb7f',1,'IRGoodweatherAc::getSleep()'],['../classIRGreeAC.html#a54b727511a82eca6fb712bea3ae357bb',1,'IRGreeAC::getSleep()'],['../classIRHaierAC.html#af88bef780a4f14f44cd7d2549f3838b3',1,'IRHaierAC::getSleep()'],['../classIRHaierACYRW02.html#afcd1dc8fbf846040ead3122d2b5ea3b7',1,'IRHaierACYRW02::getSleep()'],['../classIRHitachiAc1.html#a7bd7318f8b02e1f0db1d4b23f8845f03',1,'IRHitachiAc1::getSleep()'],['../classIRMideaAC.html#a2cef1181e13416425edb1bac972c4adf',1,'IRMideaAC::getSleep()'],['../classIRNeoclimaAc.html#a139adc7789bcbc3914906331759fac48',1,'IRNeoclimaAc::getSleep()'],['../classIRSanyoAc.html#ab0a41518ea6ed5005141bef874ab09af',1,'IRSanyoAc::getSleep()'],['../classIRTechnibelAc.html#a36da9a7b867fb8b4b36812f0bb9abf8f',1,'IRTechnibelAc::getSleep()'],['../classIRTecoAc.html#a3a86eb6a4d6d1b4ae0069aea245c0d86',1,'IRTecoAc::getSleep()'],['../classIRTrotecESP.html#a71743691c207d13115383899cdbd26fe',1,'IRTrotecESP::getSleep()'],['../classIRVestelAc.html#a31143f56418da08af313eccf0fd46c40',1,'IRVestelAc::getSleep()'],['../classIRVoltas.html#a56795d5b7cb4a42df4d1289363bfe276',1,'IRVoltas::getSleep()'],['../classIRWhirlpoolAc.html#ab8bcb6bce16a10c7184bf7226c9cb9c7',1,'IRWhirlpoolAc::getSleep()']]], - ['getsleeptime_471',['getSleepTime',['../classIRDaikin2.html#a267a7975e882ffc884eccbdc16a0df5f',1,'IRDaikin2']]], - ['getsleeptimerenabled_472',['getSleepTimerEnabled',['../classIRDaikin2.html#a763e88c841fc6b32521787d3f1df32e4',1,'IRDaikin2']]], - ['getspecial_473',['getSpecial',['../classIRSharpAc.html#a3d0a128734a796557dcda8054e3056fd',1,'IRSharpAc']]], - ['getspeed_474',['getSpeed',['../classIRTrotecESP.html#ae0ede3d969d6f3903dca7899efd674fd',1,'IRTrotecESP']]], - ['getstartclock_475',['getStartClock',['../classIRMitsubishiAC.html#aac0b7c36e9eb1b5254fe6f6966cc0206',1,'IRMitsubishiAC']]], - ['getstate_476',['getState',['../classIRac.html#af0122722691881b04c312bb30efcc3f2',1,'IRac']]], - ['getstatelength_477',['getStateLength',['../classIRFujitsuAC.html#a02636372996211d464c7394329921ea0',1,'IRFujitsuAC::getStateLength()'],['../classIRToshibaAC.html#af65addadf7cf47d2178fdf9c9fa16bd8',1,'IRToshibaAC::getStateLength()']]], - ['getstateprev_478',['getStatePrev',['../classIRac.html#adf582223eae0127491c7f1db38f101d3',1,'IRac']]], - ['getstopclock_479',['getStopClock',['../classIRMitsubishiAC.html#affbddec76d8f00f9a2cbf568b2e69233',1,'IRMitsubishiAC']]], - ['getsuper_480',['getSuper',['../classIRWhirlpoolAc.html#af9e4fd82307476b1fb71db980949c970',1,'IRWhirlpoolAc']]], - ['getswing_481',['getSwing',['../classIRCoolixAC.html#a59b96858b6fe88f46de40fd3c743f0e0',1,'IRCoolixAC::getSwing()'],['../classIRFujitsuAC.html#ac0f7128a617e01440bb4f12321cd81f7',1,'IRFujitsuAC::getSwing()'],['../classIRGoodweatherAc.html#a4112cccacc2f8ea30c7d8bdb068beae0',1,'IRGoodweatherAc::getSwing()'],['../classIRHaierAC.html#ac1192427f02d7f77bb88105d74fc8276',1,'IRHaierAC::getSwing()'],['../classIRHaierACYRW02.html#aca4d95809fad3e6851bb9af20e00b520',1,'IRHaierACYRW02::getSwing()'],['../classIRSamsungAc.html#a5627d39ea3af4d1e948fc4b8339baf9b',1,'IRSamsungAc::getSwing()'],['../classIRTechnibelAc.html#a8f5265c3752c98a48a6be0ef443a9248',1,'IRTechnibelAc::getSwing()'],['../classIRTecoAc.html#a91d2fb0dfbbfb3c97ec9691655ee111f',1,'IRTecoAc::getSwing()'],['../classIRToshibaAC.html#a18998242b9d04a6702585d489f25c56f',1,'IRToshibaAC::getSwing()'],['../classIRTranscoldAc.html#a9d427219a71afa71fb5518b2abb6d202',1,'IRTranscoldAc::getSwing()'],['../classIRVestelAc.html#a5f1d1009cc3cd29123a0db815e437c3a',1,'IRVestelAc::getSwing()'],['../classIRWhirlpoolAc.html#aeb6a97f0407caf9a7a98098397e68335',1,'IRWhirlpoolAc::getSwing()']]], - ['getswingh_482',['getSwingH',['../classIRElectraAc.html#ae71e3f7bb1a4caa54c9cdbc99d29c381',1,'IRElectraAc::getSwingH()'],['../classIRHitachiAc1.html#a18a07374143855102df4aa1e6415f524',1,'IRHitachiAc1::getSwingH()'],['../classIRHitachiAc344.html#ad3a2a8cfda11640d3c163ab09d84c2b3',1,'IRHitachiAc344::getSwingH()'],['../classIRMitsubishi112.html#ab760d57617d2a085be1e09c1dc6fb314',1,'IRMitsubishi112::getSwingH()'],['../classIRNeoclimaAc.html#aa0e598394a411e627a684525053a6500',1,'IRNeoclimaAc::getSwingH()'],['../classIRVoltas.html#a681b2f013a436bc1a117071ccc36c1cf',1,'IRVoltas::getSwingH()']]], - ['getswinghchange_483',['getSwingHChange',['../classIRVoltas.html#ac7f222cb487a772d77dea53e489ef614',1,'IRVoltas']]], - ['getswinghorizontal_484',['getSwingHorizontal',['../classIRDaikinESP.html#aff785e5f56246db3bebff7cfe09417ed',1,'IRDaikinESP::getSwingHorizontal()'],['../classIRDaikin2.html#adec30b33929a1cd219ae6d50eb44fe17',1,'IRDaikin2::getSwingHorizontal()'],['../classIRDaikin216.html#afb800780b003ad6b77f310e168ea8024',1,'IRDaikin216::getSwingHorizontal()'],['../classIRDaikin176.html#a4cf043df8f6f2e5a3554208dff0d963d',1,'IRDaikin176::getSwingHorizontal()'],['../classIRHitachiAc.html#a04734465f6c3c5deb28f0a42d0d6bc84',1,'IRHitachiAc::getSwingHorizontal()'],['../classIRKelvinatorAC.html#ab24237062a73a8c236b6691a0277c1f3',1,'IRKelvinatorAC::getSwingHorizontal()'],['../classIRMitsubishiHeavy152Ac.html#aa16ca11537459dbbad1267e227898aef',1,'IRMitsubishiHeavy152Ac::getSwingHorizontal()'],['../classIRMitsubishiHeavy88Ac.html#a90065b9855d805e7cec4d4d6c596f956',1,'IRMitsubishiHeavy88Ac::getSwingHorizontal()'],['../classIRPanasonicAc.html#a37d9b268b3c8527be0939e0a24b02ef6',1,'IRPanasonicAc::getSwingHorizontal()'],['../classIRPanasonicAc32.html#aa1d2c9d265db4c3395376c45ba6b5bba',1,'IRPanasonicAc32::getSwingHorizontal()'],['../classIRTcl112Ac.html#aa39f0f91e6a59477c914189817ae5518',1,'IRTcl112Ac::getSwingHorizontal()']]], - ['getswingtoggle_485',['getSwingToggle',['../classIRHitachiAc1.html#a79aea8264a5d6b4bfd2d2ce6651ac8a5',1,'IRHitachiAc1::getSwingToggle()'],['../classIRSharpAc.html#af3191879408c280c108fd0afdbce475d',1,'IRSharpAc::getSwingToggle()']]], - ['getswingv_486',['getSwingV',['../classIRCarrierAc64.html#a22e14700eb0efe9f28c8008297a21ced',1,'IRCarrierAc64::getSwingV()'],['../classIRDaikin152.html#aa728135169cbe54291e362dcffebc23a',1,'IRDaikin152::getSwingV()'],['../classIRElectraAc.html#a5ea68ed936a2395ea72eac562420f4ee',1,'IRElectraAc::getSwingV()'],['../classIRHitachiAc1.html#a66f24e20b53a1d40d465b36d7bb0b6b2',1,'IRHitachiAc1::getSwingV()'],['../classIRHitachiAc344.html#a86f1db7b42edf48e751b2a6a0bca8c47',1,'IRHitachiAc344::getSwingV()'],['../classIRMitsubishi136.html#a3bd3e55f343c18e915549f94ca2f42a6',1,'IRMitsubishi136::getSwingV()'],['../classIRMitsubishi112.html#a42ef9d26b85d9dac34730e7f65c6256b',1,'IRMitsubishi112::getSwingV()'],['../classIRNeoclimaAc.html#aaaac3278cfe3120e3973b38ade87b904',1,'IRNeoclimaAc::getSwingV()'],['../classIRSanyoAc.html#abcb0f05930ac13b9229a8575a99c9159',1,'IRSanyoAc::getSwingV()'],['../classIRVoltas.html#a20360a21d87672e3a2f569be29c840f4',1,'IRVoltas::getSwingV()']]], - ['getswingvertical_487',['getSwingVertical',['../classIRDaikinESP.html#a2c50ee50ce429da67ec00182151ff4ff',1,'IRDaikinESP::getSwingVertical()'],['../classIRDaikin2.html#a411a950d43da08070ef1ad744f7188f1',1,'IRDaikin2::getSwingVertical()'],['../classIRDaikin216.html#af00b48f968c5ab428c36bde8886c9e31',1,'IRDaikin216::getSwingVertical()'],['../classIRDaikin160.html#ace47ac509abe05ad9c97eeeb7e9916db',1,'IRDaikin160::getSwingVertical()'],['../classIRDaikin128.html#a66b247675babf3d4f571c2c6e7237b14',1,'IRDaikin128::getSwingVertical()'],['../classIRDaikin64.html#a71b4190e3f871815b549c531d134f925',1,'IRDaikin64::getSwingVertical()'],['../classIRHitachiAc.html#ad494c4e80fd7f041e4ab7d9f18f0985a',1,'IRHitachiAc::getSwingVertical()'],['../classIRKelvinatorAC.html#aafb8deadf87564b4111a44ffaf9c866a',1,'IRKelvinatorAC::getSwingVertical()'],['../classIRMitsubishiHeavy152Ac.html#ab8fe96c4c97c3621e006326a849f25fe',1,'IRMitsubishiHeavy152Ac::getSwingVertical()'],['../classIRMitsubishiHeavy88Ac.html#a68dc25472a3a8c652b62ca9c0265ae07',1,'IRMitsubishiHeavy88Ac::getSwingVertical()'],['../classIRPanasonicAc.html#a7a35303cd4fb4b23c0e5a25777d5819c',1,'IRPanasonicAc::getSwingVertical()'],['../classIRPanasonicAc32.html#a93326072ab7684c147673ff7a5074799',1,'IRPanasonicAc32::getSwingVertical()'],['../classIRTcl112Ac.html#ac997659c2ab82cfa1bf8eaa11fc0efc1',1,'IRTcl112Ac::getSwingVertical()']]], - ['getswingverticalauto_488',['getSwingVerticalAuto',['../classIRGreeAC.html#afaeb34a429e75989593d1311e4487ae5',1,'IRGreeAC']]], - ['getswingverticalposition_489',['getSwingVerticalPosition',['../classIRGreeAC.html#a55f30d5b23edc18dd873f9a1fbace43c',1,'IRGreeAC']]], - ['getswingvstep_490',['getSwingVStep',['../classIRCoolixAC.html#af1324a62bdb4d847bf02b635d3a1df05',1,'IRCoolixAC::getSwingVStep()'],['../classIRMideaAC.html#ab963d4e492689a669cd97345859f7d41',1,'IRMideaAC::getSwingVStep()']]], - ['getswingvtoggle_491',['getSwingVToggle',['../classIRCoronaAc.html#a1d9dd3fae0695522cbb2a97a110c4428',1,'IRCoronaAc::getSwingVToggle()'],['../classIRHitachiAc424.html#aafd0dd25455dd9743cf4fd879a843e54',1,'IRHitachiAc424::getSwingVToggle()'],['../classIRMideaAC.html#a50b260d69bc0df8851bfccb003971dfe',1,'IRMideaAC::getSwingVToggle()']]], - ['gettemp_492',['getTemp',['../classIRAirwellAc.html#aee52deba26ba5b217704667d159d1110',1,'IRAirwellAc::getTemp()'],['../classIRAmcorAc.html#a5a16756250e4331fffb74608439a5813',1,'IRAmcorAc::getTemp()'],['../classIRArgoAC.html#a061fa1b6c4472f8d59a3a3469a6dd514',1,'IRArgoAC::getTemp()'],['../classIRCarrierAc64.html#a38583e54e47ae08b2ce3469f55797e63',1,'IRCarrierAc64::getTemp()'],['../classIRCoolixAC.html#a5861b7089a7fb2dab02be36b287a42e8',1,'IRCoolixAC::getTemp()'],['../classIRCoronaAc.html#acab661bc33a7bc8bc1da85af70eab334',1,'IRCoronaAc::getTemp()'],['../classIRDaikinESP.html#a8aa56cf86e6b417dfaea77d9c0eada06',1,'IRDaikinESP::getTemp()'],['../classIRDaikin2.html#ad5c2f9113952e82329d943565445074c',1,'IRDaikin2::getTemp()'],['../classIRDaikin216.html#ac6413e168b366658396b4c90ecd0d243',1,'IRDaikin216::getTemp()'],['../classIRDaikin160.html#a3e3e27cc129f49117fa6da49e24f3b1f',1,'IRDaikin160::getTemp()'],['../classIRDaikin176.html#a9d1edc9dbb661deec9b6a22e3d3ab307',1,'IRDaikin176::getTemp()'],['../classIRDaikin128.html#ab54d88d9d00263102856483cebd00ec6',1,'IRDaikin128::getTemp()'],['../classIRDaikin152.html#a2090bcca7631181cf8ad1551b56f4df9',1,'IRDaikin152::getTemp()'],['../classIRDaikin64.html#a32860d84a3a5378d753a533d948a1a33',1,'IRDaikin64::getTemp()'],['../classIRDelonghiAc.html#a1c2d1e8a10cac59b9ef925a26191c99c',1,'IRDelonghiAc::getTemp()'],['../classIREcoclimAc.html#a4a0a22deb136371f5d93c40363cc65e9',1,'IREcoclimAc::getTemp()'],['../classIRElectraAc.html#ab3ac984ca54b6a7f7b89db6c6c664c1b',1,'IRElectraAc::getTemp()'],['../classIRFujitsuAC.html#aba877f65241647ab1e59f3d68026c906',1,'IRFujitsuAC::getTemp()'],['../classIRGoodweatherAc.html#a253e92453136f37c3082a5d492d45c82',1,'IRGoodweatherAc::getTemp()'],['../classIRGreeAC.html#a909b49c3ca07a8b38e1fe1ceae668998',1,'IRGreeAC::getTemp()'],['../classIRHaierAC.html#aa6f23534e63039527bf92fc85fed2e2c',1,'IRHaierAC::getTemp()'],['../classIRHaierACYRW02.html#a29cf50881ef62c18499e81a43c717c46',1,'IRHaierACYRW02::getTemp()'],['../classIRHitachiAc.html#a480338cf955af5d613f28f7f227f4b96',1,'IRHitachiAc::getTemp()'],['../classIRHitachiAc1.html#a3ce1fdb58c722d78ca2f94ed81b5a12c',1,'IRHitachiAc1::getTemp()'],['../classIRHitachiAc424.html#a166d3d7cd9028d906a7a259902c8898c',1,'IRHitachiAc424::getTemp()'],['../classIRKelvinatorAC.html#a6b7c66f0bc68f2d43fbbabce7933e0a5',1,'IRKelvinatorAC::getTemp()'],['../classIRLgAc.html#ab31fa58db72e02efe836e398d8c4ac85',1,'IRLgAc::getTemp()'],['../classIRMideaAC.html#a319f5ca24e977a6b7f0df93324dab63e',1,'IRMideaAC::getTemp()'],['../classIRMitsubishiAC.html#ae77c2975bd1a0fd3dcebff4fc4a8ac1b',1,'IRMitsubishiAC::getTemp()'],['../classIRMitsubishi136.html#ab6bb4c13ee3507fd048e5213eca9be4f',1,'IRMitsubishi136::getTemp()'],['../classIRMitsubishi112.html#a0076a6a8181b50148a7aff68637c040d',1,'IRMitsubishi112::getTemp()'],['../classIRMitsubishiHeavy152Ac.html#a78bf8b8e2af65a8800bb1f0c7e6c2ec6',1,'IRMitsubishiHeavy152Ac::getTemp()'],['../classIRMitsubishiHeavy88Ac.html#aa8bf74217098c414306d0fc50e0beaa7',1,'IRMitsubishiHeavy88Ac::getTemp()'],['../classIRNeoclimaAc.html#a08bf660c8662806e60cf1024eb219b60',1,'IRNeoclimaAc::getTemp()'],['../classIRPanasonicAc.html#af8a5607c317e541752fada6ca79ee80f',1,'IRPanasonicAc::getTemp()'],['../classIRPanasonicAc32.html#a1813480b9ecf4cee49d41f3da84f2e9f',1,'IRPanasonicAc32::getTemp()'],['../classIRSamsungAc.html#a1e770b7736fe5602bb49d82a5c3b0dd2',1,'IRSamsungAc::getTemp()'],['../classIRSanyoAc.html#a92c72388fd6c948f1869f7b4e46ee1ee',1,'IRSanyoAc::getTemp()'],['../classIRSharpAc.html#af92f3a2d3932cbd21373f556a49c90a5',1,'IRSharpAc::getTemp()'],['../classIRTcl112Ac.html#a0b67c42831d2f6af39a5512bbf290ec7',1,'IRTcl112Ac::getTemp()'],['../classIRTechnibelAc.html#aef4e87289ee51b68ef8da511833c15f4',1,'IRTechnibelAc::getTemp()'],['../classIRTecoAc.html#adb87a792c60fd2698f9333d96327dba7',1,'IRTecoAc::getTemp()'],['../classIRToshibaAC.html#af7321d15910eef276a6a716e868f9fcf',1,'IRToshibaAC::getTemp()'],['../classIRTranscoldAc.html#a73c260bf13212948872a96ce17d5adb7',1,'IRTranscoldAc::getTemp()'],['../classIRTrotecESP.html#a387cfde6cb1911aa0605f4215527e1b0',1,'IRTrotecESP::getTemp()'],['../classIRTrumaAc.html#a779a279fe607c42f2b4a7b4ff8eaf13f',1,'IRTrumaAc::getTemp()'],['../classIRVestelAc.html#a822bb550803b7fbb1ae9f00c51279259',1,'IRVestelAc::getTemp()'],['../classIRVoltas.html#a94571ef1d0844e0e6ca1b9a82b69ce10',1,'IRVoltas::getTemp()'],['../classIRWhirlpoolAc.html#ae9b6764f01ea525e86bdd5288715992d',1,'IRWhirlpoolAc::getTemp()']]], - ['gettempoffset_493',['getTempOffset',['../classIRWhirlpoolAc.html#abb44b09321ea607d170b59bbc30d5c49',1,'IRWhirlpoolAc']]], - ['gettempraw_494',['getTempRaw',['../classIRCoolixAC.html#a83e88b3f9d648ffd607db457fea401bc',1,'IRCoolixAC']]], - ['gettempunit_495',['getTempUnit',['../classIRDelonghiAc.html#a444276a706d2b5099eab4452cfe4712d',1,'IRDelonghiAc::getTempUnit()'],['../classIRTechnibelAc.html#a19c61ade2ad976dd93108cafabe6a23f',1,'IRTechnibelAc::getTempUnit()']]], - ['gettempunits_496',['getTempUnits',['../classIRNeoclimaAc.html#a14074dc932bd554c3c1746e6b0ecf43c',1,'IRNeoclimaAc']]], - ['gettime_497',['getTime',['../classIRVestelAc.html#a7310f2d251aaba0467718fb8c8983f3d',1,'IRVestelAc']]], - ['gettimer_498',['getTimer',['../classIRGreeAC.html#a3e58e19819ae3b74d8fa9c9eca2f8be9',1,'IRGreeAC::getTimer()'],['../classIRMitsubishiAC.html#a595e06747e8d1b2d7bc22dad17c0e9d2',1,'IRMitsubishiAC::getTimer()'],['../classIRTechnibelAc.html#a631b234cfb8445785ee3cfbbeb1366d3',1,'IRTechnibelAc::getTimer()'],['../classIRTecoAc.html#a3a9a48da5f42ae26f1c2f250702744f6',1,'IRTecoAc::getTimer()'],['../classIRTrotecESP.html#a85fb0a416c58c4f05af3abae2ae5c115',1,'IRTrotecESP::getTimer()'],['../classIRVestelAc.html#afa445ac18ef2b872a10c6048b222e90c',1,'IRVestelAc::getTimer()']]], - ['gettimerenabled_499',['getTimerEnabled',['../classIRGreeAC.html#a483ddaec91302343cef14b0c5024b965',1,'IRGreeAC::getTimerEnabled()'],['../classIRSharpAc.html#ae9147b6dd3011b223e811dff34b08e20',1,'IRSharpAc::getTimerEnabled()'],['../classIRTechnibelAc.html#a86d21954cfc55f2dbb9d3ee8adb1a5d6',1,'IRTechnibelAc::getTimerEnabled()'],['../classIRTecoAc.html#a82ab7f210c10406b2a30f41f129d4a39',1,'IRTecoAc::getTimerEnabled()']]], - ['gettimertime_500',['getTimerTime',['../classIRSharpAc.html#a1a035d3d9da5998a342e6a644a8ac1ba',1,'IRSharpAc']]], - ['gettimertype_501',['getTimerType',['../classIRFujitsuAC.html#a9bbc0e019e58bb990318432db75e8468',1,'IRFujitsuAC::getTimerType()'],['../classIRSharpAc.html#aeab6fe3c2c2777db4d09375868008f00',1,'IRSharpAc::getTimerType()']]], - ['gettolerance_502',['getTolerance',['../classIRrecv.html#a144f64da3b44708394c06b0fbefb6347',1,'IRrecv']]], - ['getturbo_503',['getTurbo',['../classIRCoolixAC.html#a31f5e82c5e68b1a0b41f4025885bf0cb',1,'IRCoolixAC::getTurbo()'],['../classIRDaikin64.html#a78016d0d11e22ad12020bf96125426d9',1,'IRDaikin64::getTurbo()'],['../classIRElectraAc.html#abfc42bc97c9dc41115383895abe15292',1,'IRElectraAc::getTurbo()'],['../classIRGoodweatherAc.html#a2f15a3c8063af85bc81f3a5f3bcacb5e',1,'IRGoodweatherAc::getTurbo()'],['../classIRGreeAC.html#a3558ad573c7762c1d0f076fd336805eb',1,'IRGreeAC::getTurbo()'],['../classIRHaierACYRW02.html#a0cd7297948d7dd8aafe35775cf26b543',1,'IRHaierACYRW02::getTurbo()'],['../classIRKelvinatorAC.html#aee37bb608940cb0214e1d0c0046c8eee',1,'IRKelvinatorAC::getTurbo()'],['../classIRMitsubishiHeavy152Ac.html#a39a5bfc53cc81ab08835e8e4c30854de',1,'IRMitsubishiHeavy152Ac::getTurbo()'],['../classIRMitsubishiHeavy88Ac.html#a4f1281e42d3eee7824233d8a4f8d37cb',1,'IRMitsubishiHeavy88Ac::getTurbo()'],['../classIRNeoclimaAc.html#a95af8bbe9500fc2f99d30214e38fae85',1,'IRNeoclimaAc::getTurbo()'],['../classIRSharpAc.html#a6b38ef7a3a8fdc4e6f8f3e02336a4e19',1,'IRSharpAc::getTurbo()'],['../classIRTcl112Ac.html#a044a8f5f05a4bbc10bac155b49d27ee5',1,'IRTcl112Ac::getTurbo()'],['../classIRToshibaAC.html#aaf9aa3601885a3d869c2e9dbcd581a93',1,'IRToshibaAC::getTurbo()'],['../classIRVestelAc.html#aa492c2fc2d3ff33cdcc53abe8ecd6ea5',1,'IRVestelAc::getTurbo()'],['../classIRVoltas.html#a0fa61b04f473f208a40059554f6a054b',1,'IRVoltas::getTurbo()']]], - ['getturbotoggle_504',['getTurboToggle',['../classIRMideaAC.html#a33cf363d9dd94f46005a0be40bd224ff',1,'IRMideaAC']]], - ['gettype_505',['getType',['../classIREcoclimAc.html#a3a924cc4b0cc7dc1b6eb4a8423785ddb',1,'IREcoclimAc::getType()'],['../classIRMideaAC.html#a1b1c0afbb0b9d7ba93e61df2b339cd14',1,'IRMideaAC::getType()']]], - ['getusecelsius_506',['getUseCelsius',['../classIRMideaAC.html#a7904de4572d80c0eafe4975682b3ea29',1,'IRMideaAC']]], - ['getusefahrenheit_507',['getUseFahrenheit',['../classIRGreeAC.html#a55b6dd1354b7246ce959d563dfdfcba4',1,'IRGreeAC']]], - ['getvane_508',['getVane',['../classIRMitsubishiAC.html#a547a2d4fd52162ece0276978da22d456',1,'IRMitsubishiAC']]], - ['getweeklytimerenable_509',['getWeeklyTimerEnable',['../classIRDaikinESP.html#a59a0e9726b97887b27a2f869d249b1b7',1,'IRDaikinESP']]], - ['getweeklytimerenabled_510',['getWeeklyTimerEnabled',['../classIRMitsubishiAC.html#a6da4a89e5ce71c2283d9318c2f26e46e',1,'IRMitsubishiAC']]], - ['getwidevane_511',['getWideVane',['../classIRMitsubishiAC.html#a6d6008f7d374113cc6b5c3a4f298a287',1,'IRMitsubishiAC']]], - ['getwifi_512',['getWiFi',['../classIRGreeAC.html#a9e9fb9867977764cac7afdee7083d0a1',1,'IRGreeAC::getWiFi()'],['../classIRVoltas.html#a13460412829d204fe2e51e75188998d2',1,'IRVoltas::getWifi()']]], - ['getxfan_513',['getXFan',['../classIRGreeAC.html#aa8111e44470062729b56b24268d20eed',1,'IRGreeAC::getXFan()'],['../classIRKelvinatorAC.html#a3ba6705529806f3ca083dd45f4b28377',1,'IRKelvinatorAC::getXFan()']]], - ['getzonefollow_514',['getZoneFollow',['../classIRCoolixAC.html#acf811a44dfd28627ce352fd79e7ffec5',1,'IRCoolixAC']]], - ['gicable_515',['GICABLE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac8f9010b746a07a7a6329d1b336b68cf',1,'IRremoteESP8266.h']]], - ['globalcache_516',['GLOBALCACHE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf8c11b983768907fdb625ff9fb3729d2',1,'IRremoteESP8266.h']]], - ['goodweather_517',['goodweather',['../classIRac.html#ac47ff5c6faf41e6fb37df258a8bafc08',1,'IRac::goodweather()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9e8d893590b745f6b1b5ffcb556d9cba',1,'GOODWEATHER(): IRremoteESP8266.h']]], - ['goodweatherprotocol_518',['GoodweatherProtocol',['../unionGoodweatherProtocol.html',1,'']]], - ['gree_519',['gree',['../classIRac.html#ab66e48b039c9990bf97cd8c2512a6c70',1,'IRac::gree()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadae3a5e7c315f6f88b34a4c856f280ed83',1,'GREE(): IRremoteESP8266.h']]], - ['gree_5fac_5fremote_5fmodel_5ft_520',['gree_ac_remote_model_t',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9',1,'IRsend.h']]], - ['greeprotocol_521',['GreeProtocol',['../unionGreeProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.html deleted file mode 100644 index cf2b5df92..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.js deleted file mode 100644 index dcda84bfb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_8.js +++ /dev/null @@ -1,40 +0,0 @@ -var searchData= -[ - ['haier_522',['haier',['../classIRac.html#ae0a29a4cb8c7a4707a7725c576822a58',1,'IRac']]], - ['haier_5fac_523',['HAIER_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1f232bcdf330ec2e353196941b9f1628',1,'IRremoteESP8266.h']]], - ['haier_5fac_5fyrw02_524',['HAIER_AC_YRW02',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaacda5821835865551f6df46c76282fa4',1,'IRremoteESP8266.h']]], - ['haierprotocol_525',['HaierProtocol',['../unionHaierProtocol.html',1,'']]], - ['haieryrw02protocol_526',['HaierYRW02Protocol',['../unionHaierYRW02Protocol.html',1,'']]], - ['haieryrwo2_527',['haierYrwo2',['../classIRac.html#a7bc779a162dd9a1b4c925febec443353',1,'IRac']]], - ['halfdegree_528',['HalfDegree',['../unionMitsubishi144Protocol.html#a5dd9bbf66e0f25d17a836346ad37d303',1,'Mitsubishi144Protocol::HalfDegree()'],['../unionTcl112Protocol.html#a38ef38c4d67dfae2a1927ce756bba84a',1,'Tcl112Protocol::HalfDegree()']]], - ['halfhour_529',['HalfHour',['../unionTecoProtocol.html#ae7eed85a01e7041535279d98ef65cf6a',1,'TecoProtocol']]], - ['handlespecialstate_530',['handleSpecialState',['../classIRCoolixAC.html#af78090c6d8b45b4202a80f1223640390',1,'IRCoolixAC::handleSpecialState()'],['../classIRTranscoldAc.html#a01a3e3f8f92b8fb3b6d023e595f3ce17',1,'IRTranscoldAc::handleSpecialState()']]], - ['handletoggles_531',['handleToggles',['../classIRac.html#a36833999dce4ad608a5a0f084988cfd1',1,'IRac']]], - ['hasacstate_532',['hasACState',['../IRutils_8cpp.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp'],['../IRutils_8h.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp']]], - ['hasinvertedstates_533',['hasInvertedStates',['../classIRHitachiAc3.html#ac06b36245c85480d97c1a9f49cfaa005',1,'IRHitachiAc3']]], - ['hasstatechanged_534',['hasStateChanged',['../classIRac.html#a35258c35a2d2b19886292b22b2aa053a',1,'IRac']]], - ['header_535',['Header',['../unionMideaProtocol.html#a892508b7b4cade91dd2e315b678f5f1b',1,'MideaProtocol::Header()'],['../unionTechnibelProtocol.html#a54fd7409b3eb2ccb826ab55f7ab3a4c9',1,'TechnibelProtocol::Header()']]], - ['header0_536',['Header0',['../structCoronaSection.html#a3b3c0a1a42da65bb4b481e59b42f26a6',1,'CoronaSection']]], - ['header1_537',['Header1',['../structCoronaSection.html#a3d6d6c1e31f82a76cd88f81bcdb83a3a',1,'CoronaSection']]], - ['health_538',['Health',['../unionHaierProtocol.html#a4cf70c633e33066e3fc0f98bb2ad3820',1,'HaierProtocol::Health()'],['../unionHaierYRW02Protocol.html#a7fa39803fd72a788736bb8f00acfa76f',1,'HaierYRW02Protocol::Health()'],['../unionTcl112Protocol.html#a2dce97bdebb2d9a2648d7e8e83ed892d',1,'Tcl112Protocol::Health()']]], - ['heat_5fmode_539',['heat_mode',['../classIRArgoAC.html#a255762f71502b9ffeb0686759991ec53',1,'IRArgoAC']]], - ['hitachi_540',['hitachi',['../classIRac.html#acd0f2fcf03aabf947a19a195000add3c',1,'IRac']]], - ['hitachi1_541',['hitachi1',['../classIRac.html#ac8807d62f6ae87af72d44b50bed3f17b',1,'IRac']]], - ['hitachi1protocol_542',['Hitachi1Protocol',['../unionHitachi1Protocol.html',1,'']]], - ['hitachi344_543',['hitachi344',['../classIRac.html#a0bc34635a1a349816344916a82585460',1,'IRac']]], - ['hitachi424_544',['hitachi424',['../classIRac.html#aec6de0752ddd3a3e7c6824cb1b692508',1,'IRac']]], - ['hitachi424protocol_545',['Hitachi424Protocol',['../unionHitachi424Protocol.html',1,'']]], - ['hitachi_5fac_546',['HITACHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9020fb54ac69d8aec0185f7e80c962ca',1,'IRremoteESP8266.h']]], - ['hitachi_5fac1_547',['HITACHI_AC1',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7d9a74161d95e62bece3c0e48900cb35',1,'IRremoteESP8266.h']]], - ['hitachi_5fac1_5fremote_5fmodel_5ft_548',['hitachi_ac1_remote_model_t',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49',1,'IRsend.h']]], - ['hitachi_5fac2_549',['HITACHI_AC2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab5a44068d519506efa8a3113aa44c9c0',1,'IRremoteESP8266.h']]], - ['hitachi_5fac3_550',['HITACHI_AC3',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac3487c47b14da6af922f5b27992b30f3',1,'IRremoteESP8266.h']]], - ['hitachi_5fac344_551',['HITACHI_AC344',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1e147eb39adc40e4181940cc2357f070',1,'IRremoteESP8266.h']]], - ['hitachi_5fac424_552',['HITACHI_AC424',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada85af068f8964d4359512265d8cc27a31',1,'IRremoteESP8266.h']]], - ['hitachiprotocol_553',['HitachiProtocol',['../unionHitachiProtocol.html',1,'']]], - ['hold_554',['Hold',['../unionNeoclimaProtocol.html#aaf3af5b5ab99978fb669e75949bfe136',1,'NeoclimaProtocol']]], - ['hours_555',['Hours',['../unionTrotecProtocol.html#acbcd8e075d48cdd5c4570cbab50643b1',1,'TrotecProtocol::Hours()'],['../unionVestelProtocol.html#a38a88b6bd1cbf6eb2a47fcc53768397f',1,'VestelProtocol::Hours()']]], - ['htmlescape_556',['htmlEscape',['../namespaceirutils.html#a6e55c6fdcc82e1ef8bd5f73df83609a7',1,'irutils']]], - ['humid_557',['Humid',['../unionTecoProtocol.html#a37db4d115d1b1bef9f71fa7bccb1865f',1,'TecoProtocol']]], - ['hw_5ftimer_5ft_558',['hw_timer_t',['../IRrecv_8cpp.html#a6d06e662914b9ad7eeaea3cb650292c0',1,'IRrecv.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.html deleted file mode 100644 index 690785a5d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.js deleted file mode 100644 index 395c5e3a3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_9.js +++ /dev/null @@ -1,210 +0,0 @@ -var searchData= -[ - ['i18n_2eh_559',['i18n.h',['../i18n_8h.html',1,'']]], - ['id_560',['Id',['../unionFujitsuProtocol.html#ac3f6bb6208623f0842fa640fb183305c',1,'FujitsuProtocol']]], - ['ifeel_561',['iFeel',['../unionArgoProtocol.html#a9d51b32b8e2b2ff08339be238a775097',1,'ArgoProtocol::iFeel()'],['../unionGreeProtocol.html#a592364307a4b11064888bda76c403142',1,'GreeProtocol::IFeel()']]], - ['inax_562',['INAX',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafc566aab3afb8face6d8965ca4d0eab7',1,'IRremoteESP8266.h']]], - ['irremoteesp8266_20library_20api_20documentation_563',['IRremoteESP8266 Library API Documentation',['../index.html',1,'']]], - ['initstate_564',['initState',['../classIRac.html#af1c4ae70e61298c0be8d350d67e7c342',1,'IRac::initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)'],['../classIRac.html#a165b7fdb9b3a02b1fb5ff2c2c3747958',1,'IRac::initState(stdAc::state_t *state)']]], - ['intro1_565',['Intro1',['../unionTrotecProtocol.html#afc82e5449c9d83af40c7235e220eb237',1,'TrotecProtocol']]], - ['intro2_566',['Intro2',['../unionTrotecProtocol.html#a2f665441f11df93e2c779ce4343a8441',1,'TrotecProtocol']]], - ['invertbits_567',['invertBits',['../IRutils_8cpp.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp'],['../IRutils_8h.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp']]], - ['invertbytepairs_568',['invertBytePairs',['../namespaceirutils.html#ad818a474349546c84824451a5468f4fe',1,'irutils']]], - ['ion_569',['Ion',['../unionNeoclimaProtocol.html#aeee2a3f53f997ad7ffdbef2b5b6ee31a',1,'NeoclimaProtocol::Ion()'],['../unionSamsungProtocol.html#a977ae7e0e4cea918e4b4a714b25bb4ca',1,'SamsungProtocol::Ion()'],['../unionSharpProtocol.html#ae744f63f03d1c13fbd5bbcf8f40aea0e',1,'SharpProtocol::Ion()'],['../unionVestelProtocol.html#a532ca8ba3bbebc8e61853409aacd7ad9',1,'VestelProtocol::Ion()']]], - ['ionfilter_570',['IonFilter',['../unionKelvinatorProtocol.html#ad7c762e410c8cba234614563cdc9d384',1,'KelvinatorProtocol']]], - ['ir_5fairwell_2ecpp_571',['ir_Airwell.cpp',['../ir__Airwell_8cpp.html',1,'']]], - ['ir_5fairwell_2eh_572',['ir_Airwell.h',['../ir__Airwell_8h.html',1,'']]], - ['ir_5faiwa_2ecpp_573',['ir_Aiwa.cpp',['../ir__Aiwa_8cpp.html',1,'']]], - ['ir_5famcor_2ecpp_574',['ir_Amcor.cpp',['../ir__Amcor_8cpp.html',1,'']]], - ['ir_5famcor_2eh_575',['ir_Amcor.h',['../ir__Amcor_8h.html',1,'']]], - ['ir_5fargo_2ecpp_576',['ir_Argo.cpp',['../ir__Argo_8cpp.html',1,'']]], - ['ir_5fargo_2eh_577',['ir_Argo.h',['../ir__Argo_8h.html',1,'']]], - ['ir_5fcarrier_2ecpp_578',['ir_Carrier.cpp',['../ir__Carrier_8cpp.html',1,'']]], - ['ir_5fcarrier_2eh_579',['ir_Carrier.h',['../ir__Carrier_8h.html',1,'']]], - ['ir_5fcoolix_2ecpp_580',['ir_Coolix.cpp',['../ir__Coolix_8cpp.html',1,'']]], - ['ir_5fcoolix_2eh_581',['ir_Coolix.h',['../ir__Coolix_8h.html',1,'']]], - ['ir_5fcorona_2ecpp_582',['ir_Corona.cpp',['../ir__Corona_8cpp.html',1,'']]], - ['ir_5fcorona_2eh_583',['ir_Corona.h',['../ir__Corona_8h.html',1,'']]], - ['ir_5fdaikin_2ecpp_584',['ir_Daikin.cpp',['../ir__Daikin_8cpp.html',1,'']]], - ['ir_5fdaikin_2eh_585',['ir_Daikin.h',['../ir__Daikin_8h.html',1,'']]], - ['ir_5fdelonghi_2ecpp_586',['ir_Delonghi.cpp',['../ir__Delonghi_8cpp.html',1,'']]], - ['ir_5fdelonghi_2eh_587',['ir_Delonghi.h',['../ir__Delonghi_8h.html',1,'']]], - ['ir_5fdenon_2ecpp_588',['ir_Denon.cpp',['../ir__Denon_8cpp.html',1,'']]], - ['ir_5fdish_2ecpp_589',['ir_Dish.cpp',['../ir__Dish_8cpp.html',1,'']]], - ['ir_5fdoshisha_2ecpp_590',['ir_Doshisha.cpp',['../ir__Doshisha_8cpp.html',1,'']]], - ['ir_5fecoclim_2ecpp_591',['ir_Ecoclim.cpp',['../ir__Ecoclim_8cpp.html',1,'']]], - ['ir_5fecoclim_2eh_592',['ir_Ecoclim.h',['../ir__Ecoclim_8h.html',1,'']]], - ['ir_5felectra_2ecpp_593',['ir_Electra.cpp',['../ir__Electra_8cpp.html',1,'']]], - ['ir_5felectra_2eh_594',['ir_Electra.h',['../ir__Electra_8h.html',1,'']]], - ['ir_5felitescreens_2ecpp_595',['ir_EliteScreens.cpp',['../ir__EliteScreens_8cpp.html',1,'']]], - ['ir_5fepson_2ecpp_596',['ir_Epson.cpp',['../ir__Epson_8cpp.html',1,'']]], - ['ir_5ffujitsu_2ecpp_597',['ir_Fujitsu.cpp',['../ir__Fujitsu_8cpp.html',1,'']]], - ['ir_5ffujitsu_2eh_598',['ir_Fujitsu.h',['../ir__Fujitsu_8h.html',1,'']]], - ['ir_5fgicable_2ecpp_599',['ir_GICable.cpp',['../ir__GICable_8cpp.html',1,'']]], - ['ir_5fglobalcache_2ecpp_600',['ir_GlobalCache.cpp',['../ir__GlobalCache_8cpp.html',1,'']]], - ['ir_5fgoodweather_2ecpp_601',['ir_Goodweather.cpp',['../ir__Goodweather_8cpp.html',1,'']]], - ['ir_5fgoodweather_2eh_602',['ir_Goodweather.h',['../ir__Goodweather_8h.html',1,'']]], - ['ir_5fgree_2ecpp_603',['ir_Gree.cpp',['../ir__Gree_8cpp.html',1,'']]], - ['ir_5fgree_2eh_604',['ir_Gree.h',['../ir__Gree_8h.html',1,'']]], - ['ir_5fhaier_2ecpp_605',['ir_Haier.cpp',['../ir__Haier_8cpp.html',1,'']]], - ['ir_5fhaier_2eh_606',['ir_Haier.h',['../ir__Haier_8h.html',1,'']]], - ['ir_5fhitachi_2ecpp_607',['ir_Hitachi.cpp',['../ir__Hitachi_8cpp.html',1,'']]], - ['ir_5fhitachi_2eh_608',['ir_Hitachi.h',['../ir__Hitachi_8h.html',1,'']]], - ['ir_5finax_2ecpp_609',['ir_Inax.cpp',['../ir__Inax_8cpp.html',1,'']]], - ['ir_5fjvc_2ecpp_610',['ir_JVC.cpp',['../ir__JVC_8cpp.html',1,'']]], - ['ir_5fkelvinator_2ecpp_611',['ir_Kelvinator.cpp',['../ir__Kelvinator_8cpp.html',1,'']]], - ['ir_5fkelvinator_2eh_612',['ir_Kelvinator.h',['../ir__Kelvinator_8h.html',1,'']]], - ['ir_5flasertag_2ecpp_613',['ir_Lasertag.cpp',['../ir__Lasertag_8cpp.html',1,'']]], - ['ir_5flego_2ecpp_614',['ir_Lego.cpp',['../ir__Lego_8cpp.html',1,'']]], - ['ir_5flg_2ecpp_615',['ir_LG.cpp',['../ir__LG_8cpp.html',1,'']]], - ['ir_5flg_2eh_616',['ir_LG.h',['../ir__LG_8h.html',1,'']]], - ['ir_5flutron_2ecpp_617',['ir_Lutron.cpp',['../ir__Lutron_8cpp.html',1,'']]], - ['ir_5fmagiquest_2ecpp_618',['ir_Magiquest.cpp',['../ir__Magiquest_8cpp.html',1,'']]], - ['ir_5fmagiquest_2eh_619',['ir_Magiquest.h',['../ir__Magiquest_8h.html',1,'']]], - ['ir_5fmetz_2ecpp_620',['ir_Metz.cpp',['../ir__Metz_8cpp.html',1,'']]], - ['ir_5fmidea_2ecpp_621',['ir_Midea.cpp',['../ir__Midea_8cpp.html',1,'']]], - ['ir_5fmidea_2eh_622',['ir_Midea.h',['../ir__Midea_8h.html',1,'']]], - ['ir_5fmilestag2_2ecpp_623',['ir_MilesTag2.cpp',['../ir__MilesTag2_8cpp.html',1,'']]], - ['ir_5fmirage_2ecpp_624',['ir_Mirage.cpp',['../ir__Mirage_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2ecpp_625',['ir_Mitsubishi.cpp',['../ir__Mitsubishi_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2eh_626',['ir_Mitsubishi.h',['../ir__Mitsubishi_8h.html',1,'']]], - ['ir_5fmitsubishiheavy_2ecpp_627',['ir_MitsubishiHeavy.cpp',['../ir__MitsubishiHeavy_8cpp.html',1,'']]], - ['ir_5fmitsubishiheavy_2eh_628',['ir_MitsubishiHeavy.h',['../ir__MitsubishiHeavy_8h.html',1,'']]], - ['ir_5fmultibrackets_2ecpp_629',['ir_Multibrackets.cpp',['../ir__Multibrackets_8cpp.html',1,'']]], - ['ir_5fmwm_2ecpp_630',['ir_MWM.cpp',['../ir__MWM_8cpp.html',1,'']]], - ['ir_5fnec_2ecpp_631',['ir_NEC.cpp',['../ir__NEC_8cpp.html',1,'']]], - ['ir_5fnec_2eh_632',['ir_NEC.h',['../ir__NEC_8h.html',1,'']]], - ['ir_5fneoclima_2ecpp_633',['ir_Neoclima.cpp',['../ir__Neoclima_8cpp.html',1,'']]], - ['ir_5fneoclima_2eh_634',['ir_Neoclima.h',['../ir__Neoclima_8h.html',1,'']]], - ['ir_5fnikai_2ecpp_635',['ir_Nikai.cpp',['../ir__Nikai_8cpp.html',1,'']]], - ['ir_5fpanasonic_2ecpp_636',['ir_Panasonic.cpp',['../ir__Panasonic_8cpp.html',1,'']]], - ['ir_5fpanasonic_2eh_637',['ir_Panasonic.h',['../ir__Panasonic_8h.html',1,'']]], - ['ir_5fpioneer_2ecpp_638',['ir_Pioneer.cpp',['../ir__Pioneer_8cpp.html',1,'']]], - ['ir_5fpronto_2ecpp_639',['ir_Pronto.cpp',['../ir__Pronto_8cpp.html',1,'']]], - ['ir_5frc5_5frc6_2ecpp_640',['ir_RC5_RC6.cpp',['../ir__RC5__RC6_8cpp.html',1,'']]], - ['ir_5frcmm_2ecpp_641',['ir_RCMM.cpp',['../ir__RCMM_8cpp.html',1,'']]], - ['ir_5fsamsung_2ecpp_642',['ir_Samsung.cpp',['../ir__Samsung_8cpp.html',1,'']]], - ['ir_5fsamsung_2eh_643',['ir_Samsung.h',['../ir__Samsung_8h.html',1,'']]], - ['ir_5fsanyo_2ecpp_644',['ir_Sanyo.cpp',['../ir__Sanyo_8cpp.html',1,'']]], - ['ir_5fsanyo_2eh_645',['ir_Sanyo.h',['../ir__Sanyo_8h.html',1,'']]], - ['ir_5fsharp_2ecpp_646',['ir_Sharp.cpp',['../ir__Sharp_8cpp.html',1,'']]], - ['ir_5fsharp_2eh_647',['ir_Sharp.h',['../ir__Sharp_8h.html',1,'']]], - ['ir_5fsherwood_2ecpp_648',['ir_Sherwood.cpp',['../ir__Sherwood_8cpp.html',1,'']]], - ['ir_5fsony_2ecpp_649',['ir_Sony.cpp',['../ir__Sony_8cpp.html',1,'']]], - ['ir_5fsymphony_2ecpp_650',['ir_Symphony.cpp',['../ir__Symphony_8cpp.html',1,'']]], - ['ir_5ftcl_2ecpp_651',['ir_Tcl.cpp',['../ir__Tcl_8cpp.html',1,'']]], - ['ir_5ftcl_2eh_652',['ir_Tcl.h',['../ir__Tcl_8h.html',1,'']]], - ['ir_5ftechnibel_2ecpp_653',['ir_Technibel.cpp',['../ir__Technibel_8cpp.html',1,'']]], - ['ir_5ftechnibel_2eh_654',['ir_Technibel.h',['../ir__Technibel_8h.html',1,'']]], - ['ir_5fteco_2ecpp_655',['ir_Teco.cpp',['../ir__Teco_8cpp.html',1,'']]], - ['ir_5fteco_2eh_656',['ir_Teco.h',['../ir__Teco_8h.html',1,'']]], - ['ir_5ftoshiba_2ecpp_657',['ir_Toshiba.cpp',['../ir__Toshiba_8cpp.html',1,'']]], - ['ir_5ftoshiba_2eh_658',['ir_Toshiba.h',['../ir__Toshiba_8h.html',1,'']]], - ['ir_5ftranscold_2ecpp_659',['ir_Transcold.cpp',['../ir__Transcold_8cpp.html',1,'']]], - ['ir_5ftranscold_2eh_660',['ir_Transcold.h',['../ir__Transcold_8h.html',1,'']]], - ['ir_5ftrotec_2ecpp_661',['ir_Trotec.cpp',['../ir__Trotec_8cpp.html',1,'']]], - ['ir_5ftrotec_2eh_662',['ir_Trotec.h',['../ir__Trotec_8h.html',1,'']]], - ['ir_5ftruma_2ecpp_663',['ir_Truma.cpp',['../ir__Truma_8cpp.html',1,'']]], - ['ir_5ftruma_2eh_664',['ir_Truma.h',['../ir__Truma_8h.html',1,'']]], - ['ir_5fvestel_2ecpp_665',['ir_Vestel.cpp',['../ir__Vestel_8cpp.html',1,'']]], - ['ir_5fvestel_2eh_666',['ir_Vestel.h',['../ir__Vestel_8h.html',1,'']]], - ['ir_5fvoltas_2ecpp_667',['ir_Voltas.cpp',['../ir__Voltas_8cpp.html',1,'']]], - ['ir_5fvoltas_2eh_668',['ir_Voltas.h',['../ir__Voltas_8h.html',1,'']]], - ['ir_5fwhirlpool_2ecpp_669',['ir_Whirlpool.cpp',['../ir__Whirlpool_8cpp.html',1,'']]], - ['ir_5fwhirlpool_2eh_670',['ir_Whirlpool.h',['../ir__Whirlpool_8h.html',1,'']]], - ['ir_5fwhynter_2ecpp_671',['ir_Whynter.cpp',['../ir__Whynter_8cpp.html',1,'']]], - ['ir_5fxmp_2ecpp_672',['ir_Xmp.cpp',['../ir__Xmp_8cpp.html',1,'']]], - ['ir_5fzepeal_2ecpp_673',['ir_Zepeal.cpp',['../ir__Zepeal_8cpp.html',1,'']]], - ['irac_674',['IRac',['../classIRac.html',1,'IRac'],['../classIRac.html#abb0864e277d4f6c68a92c2729112a40d',1,'IRac::IRac()']]], - ['irac_2ecpp_675',['IRac.cpp',['../IRac_8cpp.html',1,'']]], - ['irac_2eh_676',['IRac.h',['../IRac_8h.html',1,'']]], - ['iracutils_677',['IRAcUtils',['../namespaceIRAcUtils.html',1,'']]], - ['irairwellac_678',['IRAirwellAc',['../classIRAirwellAc.html',1,'IRAirwellAc'],['../classIRAirwellAc.html#a38cfe20bff4522034b16d64df64750e8',1,'IRAirwellAc::IRAirwellAc()']]], - ['iramcorac_679',['IRAmcorAc',['../classIRAmcorAc.html',1,'IRAmcorAc'],['../classIRAmcorAc.html#a92db59a33c861dcd3b2960e9711f97c4',1,'IRAmcorAc::IRAmcorAc()']]], - ['irargoac_680',['IRArgoAC',['../classIRArgoAC.html',1,'IRArgoAC'],['../classIRArgoAC.html#ad6c2250738397441b8f956d1477b7d70',1,'IRArgoAC::IRArgoAC()']]], - ['ircarrierac64_681',['IRCarrierAc64',['../classIRCarrierAc64.html',1,'IRCarrierAc64'],['../classIRCarrierAc64.html#ac225c0f24a0e385a145375ff447ab79b',1,'IRCarrierAc64::IRCarrierAc64()']]], - ['ircoolixac_682',['IRCoolixAC',['../classIRCoolixAC.html',1,'IRCoolixAC'],['../classIRCoolixAC.html#a043ad3b74e964e39b111e1fcf9e55f42',1,'IRCoolixAC::IRCoolixAC()']]], - ['ircoronaac_683',['IRCoronaAc',['../classIRCoronaAc.html',1,'IRCoronaAc'],['../classIRCoronaAc.html#aa96f1ffce21cdec5b3901ebbb1c63fbb',1,'IRCoronaAc::IRCoronaAc()']]], - ['irdaikin128_684',['IRDaikin128',['../classIRDaikin128.html',1,'IRDaikin128'],['../classIRDaikin128.html#aa669739541daf1a2b39ce1cd0424c43b',1,'IRDaikin128::IRDaikin128()']]], - ['irdaikin152_685',['IRDaikin152',['../classIRDaikin152.html',1,'IRDaikin152'],['../classIRDaikin152.html#a68dce79bab5890d9aea325a45ef8e4a3',1,'IRDaikin152::IRDaikin152()']]], - ['irdaikin160_686',['IRDaikin160',['../classIRDaikin160.html',1,'IRDaikin160'],['../classIRDaikin160.html#a76fb744b041c38abb730bce0538a497a',1,'IRDaikin160::IRDaikin160()']]], - ['irdaikin176_687',['IRDaikin176',['../classIRDaikin176.html',1,'IRDaikin176'],['../classIRDaikin176.html#accfe7c3f34351844d12059455f65f312',1,'IRDaikin176::IRDaikin176()']]], - ['irdaikin2_688',['IRDaikin2',['../classIRDaikin2.html',1,'IRDaikin2'],['../classIRDaikin2.html#a3ffe908313f162b92e92307578592fca',1,'IRDaikin2::IRDaikin2()']]], - ['irdaikin216_689',['IRDaikin216',['../classIRDaikin216.html',1,'IRDaikin216'],['../classIRDaikin216.html#ad802bde79e5ee2d16e3b09fbc8bbe8df',1,'IRDaikin216::IRDaikin216()']]], - ['irdaikin64_690',['IRDaikin64',['../classIRDaikin64.html',1,'IRDaikin64'],['../classIRDaikin64.html#a88855df33ce903884b21d2ef4771e94f',1,'IRDaikin64::IRDaikin64()']]], - ['irdaikinesp_691',['IRDaikinESP',['../classIRDaikinESP.html',1,'IRDaikinESP'],['../classIRDaikinESP.html#a2652cb45e07e8a4329c16cded9f6ad9a',1,'IRDaikinESP::IRDaikinESP()']]], - ['irdelonghiac_692',['IRDelonghiAc',['../classIRDelonghiAc.html',1,'IRDelonghiAc'],['../classIRDelonghiAc.html#aa6f8661cf6baa369a0a5b9d775c392e0',1,'IRDelonghiAc::IRDelonghiAc()']]], - ['irecoclimac_693',['IREcoclimAc',['../classIREcoclimAc.html',1,'IREcoclimAc'],['../classIREcoclimAc.html#a72a2d765c86a780162c59041e7146f19',1,'IREcoclimAc::IREcoclimAc()']]], - ['irelectraac_694',['IRElectraAc',['../classIRElectraAc.html',1,'IRElectraAc'],['../classIRElectraAc.html#a2f56ad22943c3d261b1d2ef88d86e300',1,'IRElectraAc::IRElectraAc()']]], - ['irfujitsuac_695',['IRFujitsuAC',['../classIRFujitsuAC.html',1,'IRFujitsuAC'],['../classIRFujitsuAC.html#acdb70f239884507f540b872ba25747ce',1,'IRFujitsuAC::IRFujitsuAC()']]], - ['irgoodweatherac_696',['IRGoodweatherAc',['../classIRGoodweatherAc.html',1,'IRGoodweatherAc'],['../classIRGoodweatherAc.html#a681feff1a58125cde97b2d7ed0ba775e',1,'IRGoodweatherAc::IRGoodweatherAc()']]], - ['irgreeac_697',['IRGreeAC',['../classIRGreeAC.html',1,'IRGreeAC'],['../classIRGreeAC.html#abf7ead6ebee4bc776f83fb55f6fe6b63',1,'IRGreeAC::IRGreeAC()']]], - ['irhaierac_698',['IRHaierAC',['../classIRHaierAC.html',1,'IRHaierAC'],['../classIRHaierAC.html#a0b78060cbd150cd886a409adc2dea49c',1,'IRHaierAC::IRHaierAC()']]], - ['irhaieracyrw02_699',['IRHaierACYRW02',['../classIRHaierACYRW02.html',1,'IRHaierACYRW02'],['../classIRHaierACYRW02.html#afd9354c36df33434840bbc5f38d4e7ed',1,'IRHaierACYRW02::IRHaierACYRW02()']]], - ['irhitachiac_700',['IRHitachiAc',['../classIRHitachiAc.html',1,'IRHitachiAc'],['../classIRHitachiAc.html#a4c43e95e0cc28339e7162d7090ae16bf',1,'IRHitachiAc::IRHitachiAc()']]], - ['irhitachiac1_701',['IRHitachiAc1',['../classIRHitachiAc1.html',1,'IRHitachiAc1'],['../classIRHitachiAc1.html#ac00cfd9a60e08d34f292878de47f622f',1,'IRHitachiAc1::IRHitachiAc1()']]], - ['irhitachiac3_702',['IRHitachiAc3',['../classIRHitachiAc3.html',1,'IRHitachiAc3'],['../classIRHitachiAc3.html#adef0e7ad217f078ce418e3aa82b9cb86',1,'IRHitachiAc3::IRHitachiAc3()']]], - ['irhitachiac344_703',['IRHitachiAc344',['../classIRHitachiAc344.html',1,'IRHitachiAc344'],['../classIRHitachiAc424.html#a3c885313a79bf8c02bc5eb9f7d80088b',1,'IRHitachiAc424::IRHitachiAc344()'],['../classIRHitachiAc344.html#afbff8a1dd2777880d2d1713d07e1d419',1,'IRHitachiAc344::IRHitachiAc344()']]], - ['irhitachiac424_704',['IRHitachiAc424',['../classIRHitachiAc424.html',1,'IRHitachiAc424'],['../classIRHitachiAc424.html#add708c10a56d20621ef65a0ddcc2aac1',1,'IRHitachiAc424::IRHitachiAc424()']]], - ['irkelvinatorac_705',['IRKelvinatorAC',['../classIRKelvinatorAC.html',1,'IRKelvinatorAC'],['../classIRKelvinatorAC.html#a111dd384b1898a4fb880a19b6d1b1635',1,'IRKelvinatorAC::IRKelvinatorAC()']]], - ['irlgac_706',['IRLgAc',['../classIRLgAc.html',1,'IRLgAc'],['../classIRLgAc.html#a290636496526a9ed2057532649709375',1,'IRLgAc::IRLgAc()']]], - ['irmideaac_707',['IRMideaAC',['../classIRMideaAC.html',1,'IRMideaAC'],['../classIRMideaAC.html#a1ef2f532a1e6c6bfe89617d3fd0d9082',1,'IRMideaAC::IRMideaAC()']]], - ['irmitsubishi112_708',['IRMitsubishi112',['../classIRMitsubishi112.html',1,'IRMitsubishi112'],['../classIRMitsubishi112.html#adea6f3b7b7619b0bf6da4a94cec9d712',1,'IRMitsubishi112::IRMitsubishi112()']]], - ['irmitsubishi136_709',['IRMitsubishi136',['../classIRMitsubishi136.html',1,'IRMitsubishi136'],['../classIRMitsubishi136.html#ad92926b993869d0695f11ddb999b2090',1,'IRMitsubishi136::IRMitsubishi136()']]], - ['irmitsubishiac_710',['IRMitsubishiAC',['../classIRMitsubishiAC.html',1,'IRMitsubishiAC'],['../classIRMitsubishiAC.html#a83fabfd9ebed5cef8dd2a18a85fdf4e6',1,'IRMitsubishiAC::IRMitsubishiAC()']]], - ['irmitsubishiheavy152ac_711',['IRMitsubishiHeavy152Ac',['../classIRMitsubishiHeavy152Ac.html',1,'IRMitsubishiHeavy152Ac'],['../classIRMitsubishiHeavy152Ac.html#a704e9f96c2d0a07f9ba16a400d9c97aa',1,'IRMitsubishiHeavy152Ac::IRMitsubishiHeavy152Ac()']]], - ['irmitsubishiheavy88ac_712',['IRMitsubishiHeavy88Ac',['../classIRMitsubishiHeavy88Ac.html',1,'IRMitsubishiHeavy88Ac'],['../classIRMitsubishiHeavy88Ac.html#aceabecf4a615e807a4636ff5990d77d7',1,'IRMitsubishiHeavy88Ac::IRMitsubishiHeavy88Ac()']]], - ['irneoclimaac_713',['IRNeoclimaAc',['../classIRNeoclimaAc.html',1,'IRNeoclimaAc'],['../classIRNeoclimaAc.html#a99ed2962176e5f12f8387fab977c6395',1,'IRNeoclimaAc::IRNeoclimaAc()']]], - ['irpanasonicac_714',['IRPanasonicAc',['../classIRPanasonicAc.html',1,'IRPanasonicAc'],['../classIRPanasonicAc.html#ae8b0f4518ee1a913d47a7101b0a11185',1,'IRPanasonicAc::IRPanasonicAc()']]], - ['irpanasonicac32_715',['IRPanasonicAc32',['../classIRPanasonicAc32.html',1,'IRPanasonicAc32'],['../classIRPanasonicAc32.html#ade8637984d8c1d5d881dc636d501676d',1,'IRPanasonicAc32::IRPanasonicAc32()']]], - ['irparams_5fsave_716',['irparams_save',['../classIRrecv.html#a6fdac84ce51ce119972bf121ccc95aab',1,'IRrecv']]], - ['irparams_5ft_717',['irparams_t',['../structirparams__t.html',1,'']]], - ['irpin_718',['IRpin',['../classIRsend.html#ae4a6ea1e72f4861167002d6e7bf17b7c',1,'IRsend']]], - ['irrecv_719',['IRrecv',['../classIRrecv.html',1,'IRrecv'],['../classIRrecv.html#a8fe4d26ef1f863db1db9994fed5fc209',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)'],['../classIRrecv.html#a3bb1bcc1c1a3184294dd35c8f6f758b1',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false)']]], - ['irrecv_2ecpp_720',['IRrecv.cpp',['../IRrecv_8cpp.html',1,'']]], - ['irrecv_2eh_721',['IRrecv.h',['../IRrecv_8h.html',1,'']]], - ['irremoteesp8266_2eh_722',['IRremoteESP8266.h',['../IRremoteESP8266_8h.html',1,'']]], - ['irsamsungac_723',['IRSamsungAc',['../classIRSamsungAc.html',1,'IRSamsungAc'],['../classIRSamsungAc.html#a0db771b80d7d7a63b5ecb4b25efee609',1,'IRSamsungAc::IRSamsungAc()']]], - ['irsanyoac_724',['IRSanyoAc',['../classIRSanyoAc.html',1,'IRSanyoAc'],['../classIRSanyoAc.html#ab7b9a1f1685993b95807f7e48624e4e2',1,'IRSanyoAc::IRSanyoAc()']]], - ['irsend_725',['IRsend',['../classIRsend.html',1,'IRsend'],['../classIRsend.html#a792780b7de996c90c86dd7b700eaf271',1,'IRsend::IRsend()']]], - ['irsend_2ecpp_726',['IRsend.cpp',['../IRsend_8cpp.html',1,'']]], - ['irsend_2eh_727',['IRsend.h',['../IRsend_8h.html',1,'']]], - ['irsharpac_728',['IRSharpAc',['../classIRSharpAc.html',1,'IRSharpAc'],['../classIRSharpAc.html#a30b5f8f634a41c943b4e1453d12bc980',1,'IRSharpAc::IRSharpAc()']]], - ['irtcl112ac_729',['IRTcl112Ac',['../classIRTcl112Ac.html',1,'IRTcl112Ac'],['../classIRTcl112Ac.html#a061bdfdf4444cb5e06fa90824985c1ec',1,'IRTcl112Ac::IRTcl112Ac()']]], - ['irtechnibelac_730',['IRTechnibelAc',['../classIRTechnibelAc.html',1,'IRTechnibelAc'],['../classIRTechnibelAc.html#a799407de348870d5765acf163ab92a75',1,'IRTechnibelAc::IRTechnibelAc()']]], - ['irtecoac_731',['IRTecoAc',['../classIRTecoAc.html',1,'IRTecoAc'],['../classIRTecoAc.html#a56e3f31a080bfd565570bf3b165e71d4',1,'IRTecoAc::IRTecoAc()']]], - ['irtext_2ecpp_732',['IRtext.cpp',['../IRtext_8cpp.html',1,'']]], - ['irtext_2eh_733',['IRtext.h',['../IRtext_8h.html',1,'']]], - ['irtimer_734',['IRtimer',['../classIRtimer.html',1,'IRtimer'],['../classIRtimer.html#a09d64d689137ef8ca68973bb9e550e76',1,'IRtimer::IRtimer()']]], - ['irtimer_2ecpp_735',['IRtimer.cpp',['../IRtimer_8cpp.html',1,'']]], - ['irtimer_2eh_736',['IRtimer.h',['../IRtimer_8h.html',1,'']]], - ['irtoshibaac_737',['IRToshibaAC',['../classIRToshibaAC.html',1,'IRToshibaAC'],['../classIRToshibaAC.html#abf2b3db316f7d6acb20c4f7ea2476ec2',1,'IRToshibaAC::IRToshibaAC()']]], - ['irtranscoldac_738',['IRTranscoldAc',['../classIRTranscoldAc.html',1,'IRTranscoldAc'],['../classIRTranscoldAc.html#a155278b9e5803aacf69a1ae20ed5b652',1,'IRTranscoldAc::IRTranscoldAc()']]], - ['irtrotecesp_739',['IRTrotecESP',['../classIRTrotecESP.html',1,'IRTrotecESP'],['../classIRTrotecESP.html#a1b56b6e55bf133ccab6a482090408ee5',1,'IRTrotecESP::IRTrotecESP()']]], - ['irtrumaac_740',['IRTrumaAc',['../classIRTrumaAc.html',1,'IRTrumaAc'],['../classIRTrumaAc.html#a02171342bc69c38b9d13930bfd5c44ff',1,'IRTrumaAc::IRTrumaAc()']]], - ['irutils_741',['irutils',['../namespaceirutils.html',1,'']]], - ['irutils_2ecpp_742',['IRutils.cpp',['../IRutils_8cpp.html',1,'']]], - ['irutils_2eh_743',['IRutils.h',['../IRutils_8h.html',1,'']]], - ['irvestelac_744',['IRVestelAc',['../classIRVestelAc.html',1,'IRVestelAc'],['../classIRVestelAc.html#af1583ef81331edf112a0d04771c2cbec',1,'IRVestelAc::IRVestelAc()']]], - ['irvoltas_745',['IRVoltas',['../classIRVoltas.html',1,'IRVoltas'],['../classIRVoltas.html#a4bfb0c5b16507d330abea2a9147f8332',1,'IRVoltas::IRVoltas()']]], - ['irwhirlpoolac_746',['IRWhirlpoolAc',['../classIRWhirlpoolAc.html',1,'IRWhirlpoolAc'],['../classIRWhirlpoolAc.html#a89bc9d440a5f7d04a602d7bc73904bc2',1,'IRWhirlpoolAc::IRWhirlpoolAc()']]], - ['irxmputils_747',['IRXmpUtils',['../namespaceIRXmpUtils.html',1,'']]], - ['iseconotoggle_748',['isEconoToggle',['../classIRMideaAC.html#a227aeed678af6da49b510cb67b02991e',1,'IRMideaAC']]], - ['islighttoggle_749',['isLightToggle',['../classIRMideaAC.html#ac0f321a8a38bd2cecf453c6aff9020e6',1,'IRMideaAC']]], - ['isofftimeractive_750',['isOffTimerActive',['../classIRVestelAc.html#ae000ce54cedc707ba8e3dc025b506b54',1,'IRVestelAc']]], - ['isofftimerenabled_751',['isOffTimerEnabled',['../classIREcoclimAc.html#aa819b7f8deff0823a6e6b59d2decace1',1,'IREcoclimAc::isOffTimerEnabled()'],['../classIRMideaAC.html#a10aa3386a15b46c62083baaca3bcf699',1,'IRMideaAC::isOffTimerEnabled()'],['../classIRPanasonicAc.html#ac8e218b4886d66889734b01232767c8a',1,'IRPanasonicAc::isOffTimerEnabled()'],['../classIRWhirlpoolAc.html#a00ee5757db34855f39d225a9467f2268',1,'IRWhirlpoolAc::isOffTimerEnabled()']]], - ['isontimeractive_752',['isOnTimerActive',['../classIRVestelAc.html#ad9d0a8755026644b8198398278f2457b',1,'IRVestelAc']]], - ['isontimerenabled_753',['isOnTimerEnabled',['../classIREcoclimAc.html#acfa7fbedf65508a7e0cea30f8d87edfd',1,'IREcoclimAc::isOnTimerEnabled()'],['../classIRMideaAC.html#a61f53e462caa1bc8329a6ebadbe47f93',1,'IRMideaAC::isOnTimerEnabled()'],['../classIRPanasonicAc.html#a04cbf8f5063a3892020d383c77abc57c',1,'IRPanasonicAc::isOnTimerEnabled()'],['../classIRWhirlpoolAc.html#a5cf82e21ff75cc6edb39a42b369240a0',1,'IRWhirlpoolAc::isOnTimerEnabled()']]], - ['ispowerspecial_754',['isPowerSpecial',['../classIRSharpAc.html#ae18f76e03fd9ee8cb5bb8e9b41718e9d',1,'IRSharpAc']]], - ['isprotocolsupported_755',['isProtocolSupported',['../classIRac.html#ad9c2fc9d07db70704f78a2d5f7be5b1c',1,'IRac']]], - ['isrepeat_756',['isRepeat',['../namespaceIRXmpUtils.html#a25e2d3af57d86fecf7b01b6a0639d0cc',1,'IRXmpUtils']]], - ['isspecialstate_757',['isSpecialState',['../classIRCoolixAC.html#aa9bfc6c78fca87962c9335d60f625322',1,'IRCoolixAC::isSpecialState()'],['../classIRTranscoldAc.html#aacef65f9dc6c1315db1e1af7a09a5dc6',1,'IRTranscoldAc::isSpecialState()']]], - ['isswingvstep_758',['isSwingVStep',['../classIRMideaAC.html#a360aa29e0f6817709644f6b36abce754',1,'IRMideaAC']]], - ['isswingvtoggle_759',['isSwingVToggle',['../classIRMideaAC.html#a5277fa1d077650be0edcf284db50d38b',1,'IRMideaAC']]], - ['istimecommand_760',['isTimeCommand',['../classIRVestelAc.html#a6dd52adaef191c8e735e2d13bc489a9f',1,'IRVestelAc']]], - ['istimeractive_761',['isTimerActive',['../classIRVestelAc.html#a06a63f80a7cdadac86ffbd4f5795b14b',1,'IRVestelAc']]], - ['isturbotoggle_762',['isTurboToggle',['../classIRMideaAC.html#ae40e95fbee35ecc00ebff23c0b64e56d',1,'IRMideaAC']]], - ['isvalidlgac_763',['isValidLgAc',['../classIRLgAc.html#ad35d47f590ee4bd51bfdf9d911bce242',1,'IRLgAc']]], - ['it_2dit_2eh_764',['it-IT.h',['../it-IT_8h.html',1,'']]], - ['internationalisation_20_28i18n_29_20_26_20locale_20files_765',['Internationalisation (I18N) & Locale Files',['../md_src_locale_README.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.html deleted file mode 100644 index f2f3d3a38..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.js deleted file mode 100644 index 9b4cc6507..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['j191_766',['J191',['../unionWhirlpoolProtocol.html#a225b788d0993185a994893fdc572dad1',1,'WhirlpoolProtocol']]], - ['jvc_767',['JVC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5b6f507fb4bbd70ee70be4e2e0b0371d',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.html deleted file mode 100644 index 14f34036c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.js deleted file mode 100644 index 8d0754a64..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_b.js +++ /dev/null @@ -1,2238 +0,0 @@ -var searchData= -[ - ['k10cheatstr_768',['k10CHeatStr',['../IRtext_8cpp.html#afeaf1a56a8fc5d1071593ef1eb6d80b1',1,'k10CHeatStr(): IRtext.cpp'],['../IRtext_8h.html#ac71f0df9b9047c57d22ca4b3d3c3ea82',1,'k10CHeatStr(): IRtext.cpp']]], - ['k3dstr_769',['k3DStr',['../IRtext_8cpp.html#aedbfd5e861447c2cde9f7bb6aade1370',1,'k3DStr(): IRtext.cpp'],['../IRtext_8h.html#a084c940b7221cd1d85d4a3b58063051d',1,'k3DStr(): IRtext.cpp']]], - ['k6thsensestr_770',['k6thSenseStr',['../IRtext_8cpp.html#ad0bfc24932f22a599c7e7bf04fb57b10',1,'k6thSenseStr(): IRtext.cpp'],['../IRtext_8h.html#a7425119d393b134c4659db9d35691e35',1,'k6thSenseStr(): IRtext.cpp']]], - ['k8cheatstr_771',['k8CHeatStr',['../IRtext_8cpp.html#ac6ab822edcfe7768cd1a8b0426a1bd59',1,'k8CHeatStr(): IRtext.cpp'],['../IRtext_8h.html#acfcc1bc573f4520f3e37977a949b74e8',1,'k8CHeatStr(): IRtext.cpp']]], - ['kairflowstr_772',['kAirFlowStr',['../IRtext_8cpp.html#a7ecf1c6454bbf9963ca85a2bd7d4a34a',1,'kAirFlowStr(): IRtext.cpp'],['../IRtext_8h.html#a0f7e35a10e28e403da578c85b0e6b180',1,'kAirFlowStr(): IRtext.cpp']]], - ['kairwellauto_773',['kAirwellAuto',['../ir__Airwell_8h.html#a5f3dbadb46874c672e093c5bbb59a97e',1,'ir_Airwell.h']]], - ['kairwellbits_774',['kAirwellBits',['../IRremoteESP8266_8h.html#a570219a14f2d19c7a6ce0aecd37a3b1f',1,'IRremoteESP8266.h']]], - ['kairwellcool_775',['kAirwellCool',['../ir__Airwell_8h.html#ab82c81efca876184ab30f24347dfa6af',1,'ir_Airwell.h']]], - ['kairwelldry_776',['kAirwellDry',['../ir__Airwell_8h.html#a1274093143c10ea0208fdfe7b4ebdb02',1,'ir_Airwell.h']]], - ['kairwellfan_777',['kAirwellFan',['../ir__Airwell_8h.html#abcdf6dac387c3fa5bb2eeb0327250ac7',1,'ir_Airwell.h']]], - ['kairwellfanauto_778',['kAirwellFanAuto',['../ir__Airwell_8h.html#a40c8e262e6e6084c1d069bebb6a0fcb1',1,'ir_Airwell.h']]], - ['kairwellfanhigh_779',['kAirwellFanHigh',['../ir__Airwell_8h.html#ab269b3942bee5458ec89a917d2ab0288',1,'ir_Airwell.h']]], - ['kairwellfanlow_780',['kAirwellFanLow',['../ir__Airwell_8h.html#ab105d4d9a63166f9fbf2dfb47a58a3b7',1,'ir_Airwell.h']]], - ['kairwellfanmedium_781',['kAirwellFanMedium',['../ir__Airwell_8h.html#ac755543eac2fad7bbd1f2727e11aee21',1,'ir_Airwell.h']]], - ['kairwellfootermark_782',['kAirwellFooterMark',['../ir__Airwell_8cpp.html#a2f41c6fe12eb5b3369ffb67fc6333431',1,'ir_Airwell.cpp']]], - ['kairwellhalfclockperiod_783',['kAirwellHalfClockPeriod',['../ir__Airwell_8cpp.html#a955f70631a1bc9be8453ccc9fbb3ecfc',1,'ir_Airwell.cpp']]], - ['kairwellhdrmark_784',['kAirwellHdrMark',['../ir__Airwell_8cpp.html#ad0c7b6c28df61b706eef2ec05506d8c2',1,'ir_Airwell.cpp']]], - ['kairwellhdrspace_785',['kAirwellHdrSpace',['../ir__Airwell_8cpp.html#ad7e80d679eaa5742f261619cc1115567',1,'ir_Airwell.cpp']]], - ['kairwellheat_786',['kAirwellHeat',['../ir__Airwell_8h.html#a0f6e36670946f015d4599ad626300ef7',1,'ir_Airwell.h']]], - ['kairwellknowngoodstate_787',['kAirwellKnownGoodState',['../ir__Airwell_8h.html#ae907f815fab982317d7865525b0294d5',1,'ir_Airwell.h']]], - ['kairwellmaxtemp_788',['kAirwellMaxTemp',['../ir__Airwell_8h.html#adccc14f29d12b3c1e38a2e6a7b820b5f',1,'ir_Airwell.h']]], - ['kairwellminrepeats_789',['kAirwellMinRepeats',['../IRremoteESP8266_8h.html#a669217ae5aa0baa159f7452f53551875',1,'IRremoteESP8266.h']]], - ['kairwellmintemp_790',['kAirwellMinTemp',['../ir__Airwell_8h.html#ad8eef8b76485134c1c5278cae460e028',1,'ir_Airwell.h']]], - ['kairwelloverhead_791',['kAirwellOverhead',['../ir__Airwell_8cpp.html#a8365fb4b254f5eeb6fed59cdc627fead',1,'ir_Airwell.cpp']]], - ['kaiwarct501bits_792',['kAiwaRcT501Bits',['../IRremoteESP8266_8h.html#a9078adf040d21c9c3eb10ed69f9dced6',1,'IRremoteESP8266.h']]], - ['kaiwarct501minrepeats_793',['kAiwaRcT501MinRepeats',['../IRremoteESP8266_8h.html#ad796714d955b6cc8e207b03058eae5a3',1,'IRremoteESP8266.h']]], - ['kaiwarct501postbits_794',['kAiwaRcT501PostBits',['../ir__Aiwa_8cpp.html#a1ad2ad119febec79cb20bf2356ae4dd4',1,'ir_Aiwa.cpp']]], - ['kaiwarct501postdata_795',['kAiwaRcT501PostData',['../ir__Aiwa_8cpp.html#a5c8aa67edc9ceed9dc398f878930b1cb',1,'ir_Aiwa.cpp']]], - ['kaiwarct501prebits_796',['kAiwaRcT501PreBits',['../ir__Aiwa_8cpp.html#a614f30df204126f234ce1d256406f075',1,'ir_Aiwa.cpp']]], - ['kaiwarct501predata_797',['kAiwaRcT501PreData',['../ir__Aiwa_8cpp.html#a9aafbd2938553c9b97dac6f4e3edee6e',1,'ir_Aiwa.cpp']]], - ['kallprotocolnamesstr_798',['kAllProtocolNamesStr',['../IRtext_8cpp.html#a3ef36cf85e44181ecc4d11085b7abed6',1,'kAllProtocolNamesStr(): IRtext.cpp'],['../IRtext_8h.html#aa0dfe94cd4cba3bec642328f399dc775',1,'kAllProtocolNamesStr(): IRtext.cpp']]], - ['kalokabits_799',['kAlokaBits',['../IRremoteESP8266_8h.html#a864918ca63a5fe7345688a72d61ddf23',1,'IRremoteESP8266.h']]], - ['kalokaledblue_800',['kAlokaLedBlue',['../ir__NEC_8h.html#a49908cff59d8e7a4926638c74b796c61',1,'ir_NEC.h']]], - ['kalokaledgreen_801',['kAlokaLedGreen',['../ir__NEC_8h.html#aa6c6afc878f4b2a8d4b9349bf6766fb6',1,'ir_NEC.h']]], - ['kalokaledlightgreen_802',['kAlokaLedLightGreen',['../ir__NEC_8h.html#ab2daa6b17fd2d5e30fc47105e4c3c6b6',1,'ir_NEC.h']]], - ['kalokaledmidblue_803',['kAlokaLedMidBlue',['../ir__NEC_8h.html#a47d88027186cd96216bea935ca93d7bc',1,'ir_NEC.h']]], - ['kalokaledorange_804',['kAlokaLedOrange',['../ir__NEC_8h.html#a40f8ae5d6ec8f6aa887c73f032ce03bb',1,'ir_NEC.h']]], - ['kalokaledpink_805',['kAlokaLedPink',['../ir__NEC_8h.html#a53cf14e43062b82259e8d171a992ceff',1,'ir_NEC.h']]], - ['kalokaledpinkred_806',['kAlokaLedPinkRed',['../ir__NEC_8h.html#a20ef8a4a844577849b4b3bc7a86fe352',1,'ir_NEC.h']]], - ['kalokaledrainbow_807',['kAlokaLedRainbow',['../ir__NEC_8h.html#a724ce8d8c71c07a019ed2ddfba269151',1,'ir_NEC.h']]], - ['kalokaledred_808',['kAlokaLedRed',['../ir__NEC_8h.html#ade8f47e4607be919ca05b6dd6ed23ae9',1,'ir_NEC.h']]], - ['kalokaledtreegrow_809',['kAlokaLedTreeGrow',['../ir__NEC_8h.html#a5ecb76db25229f9f05044e54239144ee',1,'ir_NEC.h']]], - ['kalokaledwhite_810',['kAlokaLedWhite',['../ir__NEC_8h.html#a0c0b35e9d905de0b299e38e5807f363e',1,'ir_NEC.h']]], - ['kalokaledyellow_811',['kAlokaLedYellow',['../ir__NEC_8h.html#a1853a0e8856b8af97f458a180c41d6d5',1,'ir_NEC.h']]], - ['kalokanightfade_812',['kAlokaNightFade',['../ir__NEC_8h.html#adb8489faf42032a38187759b5f1037a1',1,'ir_NEC.h']]], - ['kalokanighttimer_813',['kAlokaNightTimer',['../ir__NEC_8h.html#a1b48b8bbd71fbe3728487f36123f4e4b',1,'ir_NEC.h']]], - ['kalokapower_814',['kAlokaPower',['../ir__NEC_8h.html#a147ecbccf8f11976f65b3f374b6ab2d0',1,'ir_NEC.h']]], - ['kamcorauto_815',['kAmcorAuto',['../ir__Amcor_8h.html#a9c02a27d5ed80963ff3b1ff32fc261c5',1,'ir_Amcor.h']]], - ['kamcorbits_816',['kAmcorBits',['../IRremoteESP8266_8h.html#a34bcab75a8ab94adfd46a245dd0748db',1,'IRremoteESP8266.h']]], - ['kamcorcool_817',['kAmcorCool',['../ir__Amcor_8h.html#a221c452a3323bd4d39a6084f84ecefbd',1,'ir_Amcor.h']]], - ['kamcordefaultrepeat_818',['kAmcorDefaultRepeat',['../IRremoteESP8266_8h.html#a746e1ce73c2ebd9bd1f5300494820a0c',1,'IRremoteESP8266.h']]], - ['kamcordry_819',['kAmcorDry',['../ir__Amcor_8h.html#a4d285053d14cf85d0c17e738c53538cd',1,'ir_Amcor.h']]], - ['kamcorfan_820',['kAmcorFan',['../ir__Amcor_8h.html#a5fa0c6e3a73c94fc419ff8d1aa1423c2',1,'ir_Amcor.h']]], - ['kamcorfanauto_821',['kAmcorFanAuto',['../ir__Amcor_8h.html#a3199dbace6444ed6ca7ff2e55a8a3a24',1,'ir_Amcor.h']]], - ['kamcorfanmax_822',['kAmcorFanMax',['../ir__Amcor_8h.html#a08ea054d4121220ba758a0e0cacef8ca',1,'ir_Amcor.h']]], - ['kamcorfanmed_823',['kAmcorFanMed',['../ir__Amcor_8h.html#a9ef019a27cf0724ff1f1ff39e06c0c87',1,'ir_Amcor.h']]], - ['kamcorfanmin_824',['kAmcorFanMin',['../ir__Amcor_8h.html#a0276f72dc5b39557850838c8c70fd157',1,'ir_Amcor.h']]], - ['kamcorfootermark_825',['kAmcorFooterMark',['../ir__Amcor_8cpp.html#a3f877b05b07810ff43712dd4412af4f5',1,'ir_Amcor.cpp']]], - ['kamcorgap_826',['kAmcorGap',['../ir__Amcor_8cpp.html#a090f83ec3d4f3fd10baa16bf512dca23',1,'ir_Amcor.cpp']]], - ['kamcorhdrmark_827',['kAmcorHdrMark',['../ir__Amcor_8cpp.html#ab528f545e9af4ffb0f13d5674cfd1589',1,'ir_Amcor.cpp']]], - ['kamcorhdrspace_828',['kAmcorHdrSpace',['../ir__Amcor_8cpp.html#ae0e00c60c4220d27ef7051b45f2ae8b5',1,'ir_Amcor.cpp']]], - ['kamcorheat_829',['kAmcorHeat',['../ir__Amcor_8h.html#a9467539574a0030d166fac79684216f8',1,'ir_Amcor.h']]], - ['kamcormax_830',['kAmcorMax',['../ir__Amcor_8h.html#afac44479dc50e3885e474d2cf8d1f878',1,'ir_Amcor.h']]], - ['kamcormaxtemp_831',['kAmcorMaxTemp',['../ir__Amcor_8h.html#a6460abc4e2b44e4ef3f680c7e195c019',1,'ir_Amcor.h']]], - ['kamcormintemp_832',['kAmcorMinTemp',['../ir__Amcor_8h.html#a2d952bf3f43cb55253a89db1bcc0b568',1,'ir_Amcor.h']]], - ['kamcoronemark_833',['kAmcorOneMark',['../ir__Amcor_8cpp.html#a402a3643dc6b85813eb5f28d742c4e7f',1,'ir_Amcor.cpp']]], - ['kamcoronespace_834',['kAmcorOneSpace',['../ir__Amcor_8cpp.html#a51163573fdc7b8017c7311f0e4011b1b',1,'ir_Amcor.cpp']]], - ['kamcorpoweroff_835',['kAmcorPowerOff',['../ir__Amcor_8h.html#aeccd11f34ca0a93f682ab6c144f07fb7',1,'ir_Amcor.h']]], - ['kamcorpoweron_836',['kAmcorPowerOn',['../ir__Amcor_8h.html#adf21c2364e64c818ba5379e78cae9d5c',1,'ir_Amcor.h']]], - ['kamcorstatelength_837',['kAmcorStateLength',['../IRremoteESP8266_8h.html#a62866e6918602533d590912487150bc7',1,'IRremoteESP8266.h']]], - ['kamcortolerance_838',['kAmcorTolerance',['../ir__Amcor_8cpp.html#ad7a4b72f06c5e71002a44c3e4d483bef',1,'ir_Amcor.cpp']]], - ['kamcorventon_839',['kAmcorVentOn',['../ir__Amcor_8h.html#a0774a9180ab233da61c77c717be02521',1,'ir_Amcor.h']]], - ['kamcorzeromark_840',['kAmcorZeroMark',['../ir__Amcor_8cpp.html#a6f16bcf81087461a4e196a2c670f29ee',1,'ir_Amcor.cpp']]], - ['kamcorzerospace_841',['kAmcorZeroSpace',['../ir__Amcor_8cpp.html#a0cbb87d1a5bb594cf428c79cd96c8733',1,'ir_Amcor.cpp']]], - ['kargoauto_842',['kArgoAuto',['../ir__Argo_8h.html#a527fa5776cb58f88013de5062c620b12',1,'ir_Argo.h']]], - ['kargobitmark_843',['kArgoBitMark',['../ir__Argo_8cpp.html#aa15902c11e3a7d3cbb25504764b163c1',1,'ir_Argo.cpp']]], - ['kargobits_844',['kArgoBits',['../IRremoteESP8266_8h.html#a351efcd1805c87bd338de81dab3f8fb2',1,'IRremoteESP8266.h']]], - ['kargocool_845',['kArgoCool',['../ir__Argo_8h.html#ab331356887b5f8f04f5ffdf9031fde71',1,'ir_Argo.h']]], - ['kargodefaultrepeat_846',['kArgoDefaultRepeat',['../IRremoteESP8266_8h.html#a9a2190c526885753c676db666e48b764',1,'IRremoteESP8266.h']]], - ['kargodry_847',['kArgoDry',['../ir__Argo_8h.html#ae119706139f65f730db477d060a7bc5d',1,'ir_Argo.h']]], - ['kargofan1_848',['kArgoFan1',['../ir__Argo_8h.html#abfbde2676afb8b027a26a49d947a1396',1,'ir_Argo.h']]], - ['kargofan2_849',['kArgoFan2',['../ir__Argo_8h.html#a7b544220198b6aa311da78bc02b0e211',1,'ir_Argo.h']]], - ['kargofan3_850',['kArgoFan3',['../ir__Argo_8h.html#aa34af62e7134bbca2028d74ba7dfed4e',1,'ir_Argo.h']]], - ['kargofanauto_851',['kArgoFanAuto',['../ir__Argo_8h.html#a3b17c0ba868b439135e6e016452f1623',1,'ir_Argo.h']]], - ['kargoflap1_852',['kArgoFlap1',['../ir__Argo_8h.html#a477dac25a687b9d875cf9e94623d5e84',1,'ir_Argo.h']]], - ['kargoflap2_853',['kArgoFlap2',['../ir__Argo_8h.html#aa72401adcdd23c12d36f98370c605ef6',1,'ir_Argo.h']]], - ['kargoflap3_854',['kArgoFlap3',['../ir__Argo_8h.html#ab18e2931823d631b533c14f417ed4adb',1,'ir_Argo.h']]], - ['kargoflap4_855',['kArgoFlap4',['../ir__Argo_8h.html#a59204076030de56e1160fc599879b142',1,'ir_Argo.h']]], - ['kargoflap5_856',['kArgoFlap5',['../ir__Argo_8h.html#a5a3f4c1b1303b177a924c61dfdcce3e6',1,'ir_Argo.h']]], - ['kargoflap6_857',['kArgoFlap6',['../ir__Argo_8h.html#ac11d6b575b4abc7ac5aec9006ac41634',1,'ir_Argo.h']]], - ['kargoflapauto_858',['kArgoFlapAuto',['../ir__Argo_8h.html#af7f4a97011f94e4bf453e7cfd01fd780',1,'ir_Argo.h']]], - ['kargoflapfull_859',['kArgoFlapFull',['../ir__Argo_8h.html#a8befe8d8b6826fc79176b66eea8352b7',1,'ir_Argo.h']]], - ['kargogap_860',['kArgoGap',['../ir__Argo_8cpp.html#a1a28fc063dea8beacbaac39cf8e9b81b',1,'ir_Argo.cpp']]], - ['kargohdrmark_861',['kArgoHdrMark',['../ir__Argo_8cpp.html#a5c25d5a07e397fe86378021e7c3f2980',1,'ir_Argo.cpp']]], - ['kargohdrspace_862',['kArgoHdrSpace',['../ir__Argo_8cpp.html#a10e8a2ac55f8b123093cd92757d1603d',1,'ir_Argo.cpp']]], - ['kargoheat_863',['kArgoHeat',['../ir__Argo_8h.html#a431536a03ef985b53a4147df5a043b21',1,'ir_Argo.h']]], - ['kargoheatauto_864',['kArgoHeatAuto',['../ir__Argo_8h.html#a154f8b3e0d600d87b2822027bf0c6619',1,'ir_Argo.h']]], - ['kargoheatbit_865',['kArgoHeatBit',['../ir__Argo_8h.html#ada4b42336f3d423e3ef1060605c7f7f1',1,'ir_Argo.h']]], - ['kargoheatblink_866',['kArgoHeatBlink',['../ir__Argo_8h.html#ad29933c939f9364399dfa0f7eaa8cce6',1,'ir_Argo.h']]], - ['kargomaxroomtemp_867',['kArgoMaxRoomTemp',['../ir__Argo_8h.html#a27427d4479dc126e8782985008d4dd7d',1,'ir_Argo.h']]], - ['kargomaxtemp_868',['kArgoMaxTemp',['../ir__Argo_8h.html#a2409d2f472fb950c070fa5c0a07f69ce',1,'ir_Argo.h']]], - ['kargomintemp_869',['kArgoMinTemp',['../ir__Argo_8h.html#a4bc4e4cfe12af43730cb128f4043ad11',1,'ir_Argo.h']]], - ['kargooff_870',['kArgoOff',['../ir__Argo_8h.html#af3c6e4f7b18095179ea9e20e45e1890a',1,'ir_Argo.h']]], - ['kargoonespace_871',['kArgoOneSpace',['../ir__Argo_8cpp.html#a47131b446d160fed9c7af1886d3580e4',1,'ir_Argo.cpp']]], - ['kargostatelength_872',['kArgoStateLength',['../IRremoteESP8266_8h.html#a5f38a56eacd9964a8514cb57de287a45',1,'IRremoteESP8266.h']]], - ['kargotempdelta_873',['kArgoTempDelta',['../ir__Argo_8h.html#a7256560730a73dcaaa60cdfc8140fc0b',1,'ir_Argo.h']]], - ['kargozerospace_874',['kArgoZeroSpace',['../ir__Argo_8cpp.html#a5e06b6d522b35f503ca1e5db27f32ff6',1,'ir_Argo.cpp']]], - ['kauto_875',['kAuto',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444faa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()']]], - ['kautomaticstr_876',['kAutomaticStr',['../IRtext_8cpp.html#a66a32b6387a99572644e91f3299910a6',1,'kAutomaticStr(): IRtext.cpp'],['../IRtext_8h.html#a0fc9126a02b933a2af702cd6fdcb47ea',1,'kAutomaticStr(): IRtext.cpp']]], - ['kautostr_877',['kAutoStr',['../IRtext_8cpp.html#ae8ec328761b0218d0b18479a972b1121',1,'kAutoStr(): IRtext.cpp'],['../IRtext_8h.html#a15a085c4f9e89926d2c165de4b1755d9',1,'kAutoStr(): IRtext.cpp']]], - ['kbeepstr_878',['kBeepStr',['../IRtext_8cpp.html#a429f5c2f5aea162bd1568e8489aecb28',1,'kBeepStr(): IRtext.cpp'],['../IRtext_8h.html#a2e98c29968ade682d94f35e28364c878',1,'kBeepStr(): IRtext.cpp']]], - ['kbitsstr_879',['kBitsStr',['../IRtext_8cpp.html#aaabaca413c37bb6b18dc13daf5b335c1',1,'kBitsStr(): IRtext.cpp'],['../IRtext_8h.html#aaf3e1b0041b00b261dfd949b41569d94',1,'kBitsStr(): IRtext.cpp']]], - ['kbottomstr_880',['kBottomStr',['../IRtext_8cpp.html#ab0bd355efc13bd278a0e33765a783cd0',1,'kBottomStr(): IRtext.cpp'],['../IRtext_8h.html#accfb2322a40cfaf6707394e43f39e2a3',1,'kBottomStr(): IRtext.cpp']]], - ['kbreezestr_881',['kBreezeStr',['../IRtext_8cpp.html#ab0317e8cf720936fb02816e7827bea9e',1,'kBreezeStr(): IRtext.cpp'],['../IRtext_8h.html#af4f31b53c295a877507e3ef5a5fbbc9d',1,'kBreezeStr(): IRtext.cpp']]], - ['kbuttonstr_882',['kButtonStr',['../IRtext_8cpp.html#a6ee11e0a45632c54e34bed14c3a971ce',1,'kButtonStr(): IRtext.cpp'],['../IRtext_8h.html#a58bf62453a96d4e84bd1da3449b8799e',1,'kButtonStr(): IRtext.cpp']]], - ['kcancelstr_883',['kCancelStr',['../IRtext_8cpp.html#af79c3879bac5ca97947f16c3a6a03321',1,'kCancelStr(): IRtext.cpp'],['../IRtext_8h.html#ab64c4cdebbc72cbb62ae6cd9a449876b',1,'kCancelStr(): IRtext.cpp']]], - ['kcarrierac40bitmark_884',['kCarrierAc40BitMark',['../ir__Carrier_8cpp.html#a3f8996aa3a7b9b871bc6556f98efb345',1,'ir_Carrier.cpp']]], - ['kcarrierac40bits_885',['kCarrierAc40Bits',['../IRremoteESP8266_8h.html#a56d1176a7b3fe59aeb3f4f39926c617d',1,'IRremoteESP8266.h']]], - ['kcarrierac40gap_886',['kCarrierAc40Gap',['../ir__Carrier_8cpp.html#aa5f0d39a4e12645a6fb477efb3191384',1,'ir_Carrier.cpp']]], - ['kcarrierac40hdrmark_887',['kCarrierAc40HdrMark',['../ir__Carrier_8cpp.html#a4b77665ded6dab393779d2763bc367f0',1,'ir_Carrier.cpp']]], - ['kcarrierac40hdrspace_888',['kCarrierAc40HdrSpace',['../ir__Carrier_8cpp.html#a5ea98bc575a7ac8d7f5da937feeaeed4',1,'ir_Carrier.cpp']]], - ['kcarrierac40minrepeat_889',['kCarrierAc40MinRepeat',['../IRremoteESP8266_8h.html#a222aa743f398883a4910fbbb6d408bdc',1,'IRremoteESP8266.h']]], - ['kcarrierac40onespace_890',['kCarrierAc40OneSpace',['../ir__Carrier_8cpp.html#a79073c06820817e077c5bd8d9b8acfbd',1,'ir_Carrier.cpp']]], - ['kcarrierac40zerospace_891',['kCarrierAc40ZeroSpace',['../ir__Carrier_8cpp.html#a2ee9b60c12887983a6f4f123db6fd5e9',1,'ir_Carrier.cpp']]], - ['kcarrierac64bitmark_892',['kCarrierAc64BitMark',['../ir__Carrier_8cpp.html#ae32b2dab6a654fa293f54684da45c5c0',1,'ir_Carrier.cpp']]], - ['kcarrierac64bits_893',['kCarrierAc64Bits',['../IRremoteESP8266_8h.html#a41bc7ab7289e499ad33901da3eab661a',1,'IRremoteESP8266.h']]], - ['kcarrierac64checksumoffset_894',['kCarrierAc64ChecksumOffset',['../ir__Carrier_8h.html#a3aa65474b5be8c77d498b7e83d8b8f31',1,'ir_Carrier.h']]], - ['kcarrierac64checksumsize_895',['kCarrierAc64ChecksumSize',['../ir__Carrier_8h.html#a0b446c17c4965508f335e68c786f0596',1,'ir_Carrier.h']]], - ['kcarrierac64cool_896',['kCarrierAc64Cool',['../ir__Carrier_8h.html#aa75d5965da484d09f6f4c645cdb23869',1,'ir_Carrier.h']]], - ['kcarrierac64fan_897',['kCarrierAc64Fan',['../ir__Carrier_8h.html#a57655ceea762b18e0dd96724ddf888bd',1,'ir_Carrier.h']]], - ['kcarrierac64fanauto_898',['kCarrierAc64FanAuto',['../ir__Carrier_8h.html#a12d1fb295a0d9cf407040ab544acc245',1,'ir_Carrier.h']]], - ['kcarrierac64fanhigh_899',['kCarrierAc64FanHigh',['../ir__Carrier_8h.html#a099f2e82998bd78d25cec17a4be5f230',1,'ir_Carrier.h']]], - ['kcarrierac64fanlow_900',['kCarrierAc64FanLow',['../ir__Carrier_8h.html#aaeee61e5924bdc8028c4775f96ba14d2',1,'ir_Carrier.h']]], - ['kcarrierac64fanmedium_901',['kCarrierAc64FanMedium',['../ir__Carrier_8h.html#aeb8943f8d9f2bd95a9df6500eea7cba4',1,'ir_Carrier.h']]], - ['kcarrierac64gap_902',['kCarrierAc64Gap',['../ir__Carrier_8cpp.html#a6f7ba77f1350126d78a23d7ba967e258',1,'ir_Carrier.cpp']]], - ['kcarrierac64hdrmark_903',['kCarrierAc64HdrMark',['../ir__Carrier_8cpp.html#a19dc2108d4490c82c03c87c625bc5f31',1,'ir_Carrier.cpp']]], - ['kcarrierac64hdrspace_904',['kCarrierAc64HdrSpace',['../ir__Carrier_8cpp.html#ad73dbf55f5ffa03d92ec699b23e8ca8d',1,'ir_Carrier.cpp']]], - ['kcarrierac64heat_905',['kCarrierAc64Heat',['../ir__Carrier_8h.html#ac261ba8bff6f103bb9043c85a6f21d58',1,'ir_Carrier.h']]], - ['kcarrierac64maxtemp_906',['kCarrierAc64MaxTemp',['../ir__Carrier_8h.html#a5653bc180a4c849b5e0b33b957255ae4',1,'ir_Carrier.h']]], - ['kcarrierac64minrepeat_907',['kCarrierAc64MinRepeat',['../IRremoteESP8266_8h.html#a8b2b3670dc74ce9fbf3c8b511422a06c',1,'IRremoteESP8266.h']]], - ['kcarrierac64mintemp_908',['kCarrierAc64MinTemp',['../ir__Carrier_8h.html#a9e7a88bf52839ecb34da1966bb8a956b',1,'ir_Carrier.h']]], - ['kcarrierac64onespace_909',['kCarrierAc64OneSpace',['../ir__Carrier_8cpp.html#a58ea051d56227a4037682f5d612b4cc7',1,'ir_Carrier.cpp']]], - ['kcarrierac64timermax_910',['kCarrierAc64TimerMax',['../ir__Carrier_8h.html#a78a34b51e51dc3b4129f350673c9fa96',1,'ir_Carrier.h']]], - ['kcarrierac64timermin_911',['kCarrierAc64TimerMin',['../ir__Carrier_8h.html#aeebac3e61246f2e148806d4b4e8ac13e',1,'ir_Carrier.h']]], - ['kcarrierac64zerospace_912',['kCarrierAc64ZeroSpace',['../ir__Carrier_8cpp.html#af28d4332e0f1ad19aa743b993f44cdc7',1,'ir_Carrier.cpp']]], - ['kcarrieracbitmark_913',['kCarrierAcBitMark',['../ir__Carrier_8cpp.html#af4a608f81c745734499ec1842167940b',1,'ir_Carrier.cpp']]], - ['kcarrieracbits_914',['kCarrierAcBits',['../IRremoteESP8266_8h.html#a668d9ac84f7dae61c35534b842d4956b',1,'IRremoteESP8266.h']]], - ['kcarrieracfreq_915',['kCarrierAcFreq',['../ir__Carrier_8cpp.html#a795dc2d9b122bd3794fddbddef571058',1,'ir_Carrier.cpp']]], - ['kcarrieracgap_916',['kCarrierAcGap',['../ir__Carrier_8cpp.html#a00767c0b503a7fc8f0b2ddfac24a4f85',1,'ir_Carrier.cpp']]], - ['kcarrierachdrmark_917',['kCarrierAcHdrMark',['../ir__Carrier_8cpp.html#ad9a7754e77cfcfd6c6032d497bc4528d',1,'ir_Carrier.cpp']]], - ['kcarrierachdrspace_918',['kCarrierAcHdrSpace',['../ir__Carrier_8cpp.html#a8e09857e2fe15d6983ec0384c57140d4',1,'ir_Carrier.cpp']]], - ['kcarrieracminrepeat_919',['kCarrierAcMinRepeat',['../IRremoteESP8266_8h.html#a78c8a8b11179e8fd20bf09fa35f6b886',1,'IRremoteESP8266.h']]], - ['kcarrieraconespace_920',['kCarrierAcOneSpace',['../ir__Carrier_8cpp.html#ab04a214a7c2e0439384736c46ddc6c61',1,'ir_Carrier.cpp']]], - ['kcarrieraczerospace_921',['kCarrierAcZeroSpace',['../ir__Carrier_8cpp.html#a51c9c4bbd6e2927baac15dc60c1e60fa',1,'ir_Carrier.cpp']]], - ['kceilingstr_922',['kCeilingStr',['../IRtext_8cpp.html#a5258c9d80502d5a8e14bb324a394452b',1,'kCeilingStr(): IRtext.cpp'],['../IRtext_8h.html#aa47afe8f4c175954e9439c0c9e48c83e',1,'kCeilingStr(): IRtext.cpp']]], - ['kcelsiusfahrenheitstr_923',['kCelsiusFahrenheitStr',['../IRtext_8cpp.html#ab24f542059d0c1c1352686469c9fde7d',1,'kCelsiusFahrenheitStr(): IRtext.cpp'],['../IRtext_8h.html#a9bd25ef522ae667d9869b6f6ea937f5d',1,'kCelsiusFahrenheitStr(): IRtext.cpp']]], - ['kcelsiusstr_924',['kCelsiusStr',['../IRtext_8cpp.html#af0ad7ca76c659a17872960bcbcfbdbbf',1,'kCelsiusStr(): IRtext.cpp'],['../IRtext_8h.html#aae21484e9f049a7cfa507068abd3915e',1,'kCelsiusStr(): IRtext.cpp']]], - ['kcentrestr_925',['kCentreStr',['../IRtext_8cpp.html#a87a4151e0361c9f75d0d5c00f9bad1ee',1,'kCentreStr(): IRtext.cpp'],['../IRtext_8h.html#aab13bc11db65584fbb8a61c686d67228',1,'kCentreStr(): IRtext.cpp']]], - ['kchangestr_926',['kChangeStr',['../IRtext_8cpp.html#a1f6396eb9bd4327a7a2307e5724c1dd7',1,'kChangeStr(): IRtext.cpp'],['../IRtext_8h.html#a46e6bd06cfbf5f462042d7c720db01ae',1,'kChangeStr(): IRtext.cpp']]], - ['kcirculatestr_927',['kCirculateStr',['../IRtext_8cpp.html#a869ef1f579373ff4b5b61b1cba215680',1,'kCirculateStr(): IRtext.cpp'],['../IRtext_8h.html#a0ba8b339babc7f7f26dbab2399bcc578',1,'kCirculateStr(): IRtext.cpp']]], - ['kcleanstr_928',['kCleanStr',['../IRtext_8cpp.html#ad2d97c52e8df2704654fdbd0a7a0561e',1,'kCleanStr(): IRtext.cpp'],['../IRtext_8h.html#a45c17b23773e9dcded65a82577b00263',1,'kCleanStr(): IRtext.cpp']]], - ['kclockstr_929',['kClockStr',['../IRtext_8cpp.html#ad39bd469d5474159463543184cfae321',1,'kClockStr(): IRtext.cpp'],['../IRtext_8h.html#a6e4b8f591a1d3d399a559d41847b3fa8',1,'kClockStr(): IRtext.cpp']]], - ['kcodestr_930',['kCodeStr',['../IRtext_8cpp.html#a26e4bf74871ce457f42ec839545987f4',1,'kCodeStr(): IRtext.cpp'],['../IRtext_8h.html#a58a9da5cec40746dbe20455c6ef6c8fd',1,'kCodeStr(): IRtext.cpp']]], - ['kcolonspacestr_931',['kColonSpaceStr',['../IRtext_8cpp.html#a5d978c9ac25163a9629b7e8e2d37d25e',1,'kColonSpaceStr(): IRtext.cpp'],['../IRtext_8h.html#aab1b0d2ea5169c1e1d8eff4daef36512',1,'kColonSpaceStr(): IRtext.cpp']]], - ['kcomfortstr_932',['kComfortStr',['../IRtext_8cpp.html#aa7f0cfdb126ff7b0f8db6033bb51f36d',1,'kComfortStr(): IRtext.cpp'],['../IRtext_8h.html#a20037561545d4ba4cfe66c1e103ecde1',1,'kComfortStr(): IRtext.cpp']]], - ['kcommandstr_933',['kCommandStr',['../IRtext_8cpp.html#afd5865ea8c0f8565369dd2c4ee4622d6',1,'kCommandStr(): IRtext.cpp'],['../IRtext_8h.html#afdc9e8cc5c8c5c03749898d4f2d38606',1,'kCommandStr(): IRtext.cpp']]], - ['kcommaspacestr_934',['kCommaSpaceStr',['../IRtext_8cpp.html#ac8a9678d4c9eeee17a9dc28624c0ab49',1,'kCommaSpaceStr(): IRtext.cpp'],['../IRtext_8h.html#a48f5dfcf2e0f13f502980d42e879aec3',1,'kCommaSpaceStr(): IRtext.cpp']]], - ['kcool_935',['kCool',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fab9480fe865ab6bbfb66c8308068a06c2',1,'stdAc']]], - ['kcoolixauto_936',['kCoolixAuto',['../ir__Coolix_8h.html#a73c1ef7c2c80c861256a14a9f256b125',1,'ir_Coolix.h']]], - ['kcoolixbitmark_937',['kCoolixBitMark',['../ir__Coolix_8cpp.html#acd8562a27ec6c0a6c2cf9480082e04cd',1,'ir_Coolix.cpp']]], - ['kcoolixbitmarkticks_938',['kCoolixBitMarkTicks',['../ir__Coolix_8cpp.html#aefaa206b4316a4fd921f7171295d1232',1,'ir_Coolix.cpp']]], - ['kcoolixbits_939',['kCoolixBits',['../IRremoteESP8266_8h.html#aed48c68a637e4b45b80bbf4964ea79f9',1,'IRremoteESP8266.h']]], - ['kcoolixclean_940',['kCoolixClean',['../ir__Coolix_8h.html#a5cc9fcde4a6da54917b4d69bb352bc86',1,'ir_Coolix.h']]], - ['kcoolixcmdfan_941',['kCoolixCmdFan',['../ir__Coolix_8h.html#a7d5ff02f4a0c379322877b3dcf934c77',1,'ir_Coolix.h']]], - ['kcoolixcool_942',['kCoolixCool',['../ir__Coolix_8h.html#ae285ee4206fe45d25bb1d99b848c7e65',1,'ir_Coolix.h']]], - ['kcoolixdefaultrepeat_943',['kCoolixDefaultRepeat',['../IRremoteESP8266_8h.html#aa89410d369d71738c8cbefae6ac3b00f',1,'IRremoteESP8266.h']]], - ['kcoolixdefaultstate_944',['kCoolixDefaultState',['../ir__Coolix_8h.html#ad54ebf20658c33e5ad54fc54a513511e',1,'ir_Coolix.h']]], - ['kcoolixdry_945',['kCoolixDry',['../ir__Coolix_8h.html#a904c4135f61120e71577f6830adae689',1,'ir_Coolix.h']]], - ['kcoolixfan_946',['kCoolixFan',['../ir__Coolix_8h.html#a2e050321c994844f2ff6668ba6973ac4',1,'ir_Coolix.h']]], - ['kcoolixfanauto_947',['kCoolixFanAuto',['../ir__Coolix_8h.html#ac25d3c45ed7d7d30ff2ebf617d8265f0',1,'ir_Coolix.h']]], - ['kcoolixfanauto0_948',['kCoolixFanAuto0',['../ir__Coolix_8h.html#a38cccd1edee2c88c1b080f1d5600ead7',1,'ir_Coolix.h']]], - ['kcoolixfanfixed_949',['kCoolixFanFixed',['../ir__Coolix_8h.html#a37a3a23d8fe30df024cb844f82f90b2a',1,'ir_Coolix.h']]], - ['kcoolixfanmax_950',['kCoolixFanMax',['../ir__Coolix_8h.html#aabb349ee111467088b9a292950aba753',1,'ir_Coolix.h']]], - ['kcoolixfanmed_951',['kCoolixFanMed',['../ir__Coolix_8h.html#a2750626cda2e389df901b459805e09bd',1,'ir_Coolix.h']]], - ['kcoolixfanmin_952',['kCoolixFanMin',['../ir__Coolix_8h.html#a6c0086075cce1698c48cc30e045ab5bf',1,'ir_Coolix.h']]], - ['kcoolixfantempcode_953',['kCoolixFanTempCode',['../ir__Coolix_8h.html#a6d2d6f2fd8f5e9a4491623b9351efcba',1,'ir_Coolix.h']]], - ['kcoolixfanzonefollow_954',['kCoolixFanZoneFollow',['../ir__Coolix_8h.html#a5a71c6acd18b3198c7900e2de34c48a3',1,'ir_Coolix.h']]], - ['kcoolixhdrmark_955',['kCoolixHdrMark',['../ir__Coolix_8cpp.html#a746299797d958ccf116e6d1cdab3ad06',1,'ir_Coolix.cpp']]], - ['kcoolixhdrmarkticks_956',['kCoolixHdrMarkTicks',['../ir__Coolix_8cpp.html#a04d520a0fe3d773f377810174e5463a4',1,'ir_Coolix.cpp']]], - ['kcoolixhdrspace_957',['kCoolixHdrSpace',['../ir__Coolix_8cpp.html#ab7ff2a6bd99e0e6a0db3f14350cca84c',1,'ir_Coolix.cpp']]], - ['kcoolixhdrspaceticks_958',['kCoolixHdrSpaceTicks',['../ir__Coolix_8cpp.html#a58951e9800513b019ccb9f04ae55716f',1,'ir_Coolix.cpp']]], - ['kcoolixheat_959',['kCoolixHeat',['../ir__Coolix_8h.html#a234b39696f0b2fac6b37aa309082505e',1,'ir_Coolix.h']]], - ['kcoolixled_960',['kCoolixLed',['../ir__Coolix_8h.html#a68ae46e117caf0d7a3cc2ef9492495f1',1,'ir_Coolix.h']]], - ['kcoolixmingap_961',['kCoolixMinGap',['../ir__Coolix_8cpp.html#a46da2480f6850af899db74a4f2270cdc',1,'ir_Coolix.cpp']]], - ['kcoolixmingapticks_962',['kCoolixMinGapTicks',['../ir__Coolix_8cpp.html#a94f47fbf027fcb90664b302ff123f535',1,'ir_Coolix.cpp']]], - ['kcoolixoff_963',['kCoolixOff',['../ir__Coolix_8h.html#aef6f59b83a14b8505f395b2eb8d8ad39',1,'ir_Coolix.h']]], - ['kcoolixonespace_964',['kCoolixOneSpace',['../ir__Coolix_8cpp.html#a97a8439ace71584e36ab7306c3d53749',1,'ir_Coolix.cpp']]], - ['kcoolixonespaceticks_965',['kCoolixOneSpaceTicks',['../ir__Coolix_8cpp.html#a78770eaf597e4aa2ed539248ef10ec11',1,'ir_Coolix.cpp']]], - ['kcoolixsensortempignorecode_966',['kCoolixSensorTempIgnoreCode',['../ir__Coolix_8h.html#ae3aba531b0c0053424786ec4bb2be934',1,'ir_Coolix.h']]], - ['kcoolixsensortempmax_967',['kCoolixSensorTempMax',['../ir__Coolix_8h.html#a71641b1240ee439e77128165cedf899f',1,'ir_Coolix.h']]], - ['kcoolixsleep_968',['kCoolixSleep',['../ir__Coolix_8h.html#aa7f9f96e56bd3f6b814bc84b947b2417',1,'ir_Coolix.h']]], - ['kcoolixswing_969',['kCoolixSwing',['../ir__Coolix_8h.html#a799ad5ab7cf43f0aac3c342305f14b90',1,'ir_Coolix.h']]], - ['kcoolixswingh_970',['kCoolixSwingH',['../ir__Coolix_8h.html#a877bd2731dfc86d864e38a5ceb4ede6e',1,'ir_Coolix.h']]], - ['kcoolixswingv_971',['kCoolixSwingV',['../ir__Coolix_8h.html#ab9fcaf25426f1f9ad293e165f8c0bf38',1,'ir_Coolix.h']]], - ['kcoolixtempmap_972',['kCoolixTempMap',['../ir__Coolix_8h.html#a9c8931df1dbed38c8119f6605266c710',1,'ir_Coolix.h']]], - ['kcoolixtempmax_973',['kCoolixTempMax',['../ir__Coolix_8h.html#afbbb02bfeaaf5cb558ca28cdd5cfc4c3',1,'ir_Coolix.h']]], - ['kcoolixtempmin_974',['kCoolixTempMin',['../ir__Coolix_8h.html#accd37cf257fa5fbeb64e28f0d63888fb',1,'ir_Coolix.h']]], - ['kcoolixtemprange_975',['kCoolixTempRange',['../ir__Coolix_8h.html#a74e3e75466fd27672968d660e3fddc9a',1,'ir_Coolix.h']]], - ['kcoolixtick_976',['kCoolixTick',['../ir__Coolix_8cpp.html#a61ddf842920e2b3e33fdb856bd911eae',1,'ir_Coolix.cpp']]], - ['kcoolixturbo_977',['kCoolixTurbo',['../ir__Coolix_8h.html#ade957b6f4a6cdb064c709972a5c31a4b',1,'ir_Coolix.h']]], - ['kcoolixzerospace_978',['kCoolixZeroSpace',['../ir__Coolix_8cpp.html#a1a9ccf6b91e786f310ffe53d55cfd6d1',1,'ir_Coolix.cpp']]], - ['kcoolixzerospaceticks_979',['kCoolixZeroSpaceTicks',['../ir__Coolix_8cpp.html#af1a750cb3e1f142326cd177118c27136',1,'ir_Coolix.cpp']]], - ['kcoolstr_980',['kCoolStr',['../IRtext_8cpp.html#a31258a2210b16dc977bcfd96938a8937',1,'kCoolStr(): IRtext.cpp'],['../IRtext_8h.html#ac25d86b97b8e53292dc8d0604ae263a3',1,'kCoolStr(): IRtext.cpp']]], - ['kcoronaacbitmark_981',['kCoronaAcBitMark',['../ir__Corona_8cpp.html#a1ecb863f625463289d34e210885238db',1,'ir_Corona.cpp']]], - ['kcoronaacbits_982',['kCoronaAcBits',['../IRremoteESP8266_8h.html#aaf59be616d7e3a5e605b8d1e08f20686',1,'IRremoteESP8266.h']]], - ['kcoronaacbitsshort_983',['kCoronaAcBitsShort',['../IRremoteESP8266_8h.html#a1191a9293b03aa14426083b6f411a4e3',1,'IRremoteESP8266.h']]], - ['kcoronaacfanauto_984',['kCoronaAcFanAuto',['../ir__Corona_8h.html#a8c97a0c674c000e4486159d628f1aa0a',1,'ir_Corona.h']]], - ['kcoronaacfanhigh_985',['kCoronaAcFanHigh',['../ir__Corona_8h.html#a4f58be196a744892402e287b12502dcb',1,'ir_Corona.h']]], - ['kcoronaacfanlow_986',['kCoronaAcFanLow',['../ir__Corona_8h.html#af9e5c729be856bf4b1bc10568f96c183',1,'ir_Corona.h']]], - ['kcoronaacfanmedium_987',['kCoronaAcFanMedium',['../ir__Corona_8h.html#a9d6b46c006bd6ea54a14b92a2d7a3dff',1,'ir_Corona.h']]], - ['kcoronaacfreq_988',['kCoronaAcFreq',['../ir__Corona_8cpp.html#a0cb56860c88e9503743bcf94068bbf56',1,'ir_Corona.cpp']]], - ['kcoronaachdrmark_989',['kCoronaAcHdrMark',['../ir__Corona_8cpp.html#a697d84f13a1228dbae3cfb491124689a',1,'ir_Corona.cpp']]], - ['kcoronaachdrspace_990',['kCoronaAcHdrSpace',['../ir__Corona_8cpp.html#ad2425c406aa36c7752832d19f4a735f7',1,'ir_Corona.cpp']]], - ['kcoronaacmaxtemp_991',['kCoronaAcMaxTemp',['../ir__Corona_8h.html#aa6d199e5bb8382443da4e1f303dd7988',1,'ir_Corona.h']]], - ['kcoronaacmintemp_992',['kCoronaAcMinTemp',['../ir__Corona_8h.html#ae984b624da5e2d5ef1405e1b8d9424ba',1,'ir_Corona.h']]], - ['kcoronaacmodecool_993',['kCoronaAcModeCool',['../ir__Corona_8h.html#a6f8bb2e27990014686828b4b7e2c84c6',1,'ir_Corona.h']]], - ['kcoronaacmodedry_994',['kCoronaAcModeDry',['../ir__Corona_8h.html#afd47996b221103ae142363f04014fb4b',1,'ir_Corona.h']]], - ['kcoronaacmodefan_995',['kCoronaAcModeFan',['../ir__Corona_8h.html#ab8098af3e0f9cd82a7c9c771ffd8ad15',1,'ir_Corona.h']]], - ['kcoronaacmodeheat_996',['kCoronaAcModeHeat',['../ir__Corona_8h.html#a7f3c7c051ae3ee07621c47505a87bec1',1,'ir_Corona.h']]], - ['kcoronaacofftimersection_997',['kCoronaAcOffTimerSection',['../ir__Corona_8h.html#ac2cfdbf9b3ed3d85c0e298c3de8f357b',1,'ir_Corona.h']]], - ['kcoronaaconespace_998',['kCoronaAcOneSpace',['../ir__Corona_8cpp.html#a6d9c199bdefbbb30b9561c5498c5a76e',1,'ir_Corona.cpp']]], - ['kcoronaacontimersection_999',['kCoronaAcOnTimerSection',['../ir__Corona_8h.html#a711b7b5bd2081ca9b1e7ab25573ff612',1,'ir_Corona.h']]], - ['kcoronaacoverhead_1000',['kCoronaAcOverhead',['../ir__Corona_8cpp.html#aaef71b297a7868863a2ad7219bafabeb',1,'ir_Corona.cpp']]], - ['kcoronaacoverheadshort_1001',['kCoronaAcOverheadShort',['../ir__Corona_8cpp.html#a56010f67a047f551db681bb0ec8c35f7',1,'ir_Corona.cpp']]], - ['kcoronaacsectionbytes_1002',['kCoronaAcSectionBytes',['../ir__Corona_8h.html#a094063159064053dd5e5059eb0d90f7c',1,'ir_Corona.h']]], - ['kcoronaacsectiondata0base_1003',['kCoronaAcSectionData0Base',['../ir__Corona_8h.html#a2d0b1f5a0839839a17947bde624d4c74',1,'ir_Corona.h']]], - ['kcoronaacsectionheader0_1004',['kCoronaAcSectionHeader0',['../ir__Corona_8h.html#a39a2c0d214a10f8f9685e9955c0be0a4',1,'ir_Corona.h']]], - ['kcoronaacsectionheader1_1005',['kCoronaAcSectionHeader1',['../ir__Corona_8h.html#a8a661569fc7b97ba2e9e755b944162f8',1,'ir_Corona.h']]], - ['kcoronaacsectionlabelbase_1006',['kCoronaAcSectionLabelBase',['../ir__Corona_8h.html#a6ff8a3461b87df048878faf49c12d064',1,'ir_Corona.h']]], - ['kcoronaacsections_1007',['kCoronaAcSections',['../ir__Corona_8h.html#a37e6cc5e2e186b2f5c5c938496ece111',1,'ir_Corona.h']]], - ['kcoronaacsettingssection_1008',['kCoronaAcSettingsSection',['../ir__Corona_8h.html#a5a83a045fd9878eae073f25e6c5b4753',1,'ir_Corona.h']]], - ['kcoronaacspacegap_1009',['kCoronaAcSpaceGap',['../ir__Corona_8cpp.html#a50f46039059d2a427bc9bc93c53df4fd',1,'ir_Corona.cpp']]], - ['kcoronaacstatelength_1010',['kCoronaAcStateLength',['../IRremoteESP8266_8h.html#ab18df94a82b365ff30caaabb05a9fcaf',1,'IRremoteESP8266.h']]], - ['kcoronaacstatelengthshort_1011',['kCoronaAcStateLengthShort',['../IRremoteESP8266_8h.html#a32b65ada4941a9622fbbc60f01b82425',1,'IRremoteESP8266.h']]], - ['kcoronaactimermax_1012',['kCoronaAcTimerMax',['../ir__Corona_8h.html#af0428879b0fd39def7ea41e2906d9127',1,'ir_Corona.h']]], - ['kcoronaactimeroff_1013',['kCoronaAcTimerOff',['../ir__Corona_8h.html#af0feaf445fae561c3fa18ec68a19edef',1,'ir_Corona.h']]], - ['kcoronaactimerunitspermin_1014',['kCoronaAcTimerUnitsPerMin',['../ir__Corona_8h.html#a7f76e80480abdbdcdaf39186901950a4',1,'ir_Corona.h']]], - ['kcoronaaczerospace_1015',['kCoronaAcZeroSpace',['../ir__Corona_8cpp.html#af64bbcaf63ca9d06089de382354eb2d9',1,'ir_Corona.cpp']]], - ['kcoronatolerance_1016',['kCoronaTolerance',['../ir__Corona_8cpp.html#aad3726c95bfd7a9f79ba1e0c7058bb7b',1,'ir_Corona.cpp']]], - ['kdaikin128auto_1017',['kDaikin128Auto',['../ir__Daikin_8h.html#a1d2a0f9db8e1be93bff12ec23ba212e0',1,'ir_Daikin.h']]], - ['kdaikin128bitceiling_1018',['kDaikin128BitCeiling',['../ir__Daikin_8h.html#a0e1d1c1e7544eb455187290dbe4a1520',1,'ir_Daikin.h']]], - ['kdaikin128bitmark_1019',['kDaikin128BitMark',['../ir__Daikin_8h.html#a5178ac70eb4e134597e504d373d52fcd',1,'ir_Daikin.h']]], - ['kdaikin128bits_1020',['kDaikin128Bits',['../IRremoteESP8266_8h.html#a5bb2e6f8acbc0123de5ac0fd76e1646a',1,'IRremoteESP8266.h']]], - ['kdaikin128bitwall_1021',['kDaikin128BitWall',['../ir__Daikin_8h.html#a842b3b696f95c5515ee4180626d78973',1,'ir_Daikin.h']]], - ['kdaikin128cool_1022',['kDaikin128Cool',['../ir__Daikin_8h.html#a24ee5ffe877d7caa964256e5723af7e1',1,'ir_Daikin.h']]], - ['kdaikin128defaultrepeat_1023',['kDaikin128DefaultRepeat',['../IRremoteESP8266_8h.html#a5c116cb58be005468de125f6ee651ccb',1,'IRremoteESP8266.h']]], - ['kdaikin128dry_1024',['kDaikin128Dry',['../ir__Daikin_8h.html#ac4da761bf3b0ce12e6513a2718b3a907',1,'ir_Daikin.h']]], - ['kdaikin128fan_1025',['kDaikin128Fan',['../ir__Daikin_8h.html#ac1c41d54f27d1653181ac69384f1130f',1,'ir_Daikin.h']]], - ['kdaikin128fanauto_1026',['kDaikin128FanAuto',['../ir__Daikin_8h.html#aec2fe4618978c17e60a1ea8b1a89c263',1,'ir_Daikin.h']]], - ['kdaikin128fanhigh_1027',['kDaikin128FanHigh',['../ir__Daikin_8h.html#a7ffd52eb15f6ffb5a0ffcddf39aa8f0d',1,'ir_Daikin.h']]], - ['kdaikin128fanlow_1028',['kDaikin128FanLow',['../ir__Daikin_8h.html#a505c58ff23c5a551c6e2e356f66e9cc1',1,'ir_Daikin.h']]], - ['kdaikin128fanmed_1029',['kDaikin128FanMed',['../ir__Daikin_8h.html#a4eb21add9bfb6774047a8a2c8b87ebbf',1,'ir_Daikin.h']]], - ['kdaikin128fanpowerful_1030',['kDaikin128FanPowerful',['../ir__Daikin_8h.html#ae0899153669a6e8848556cd65c26c8b5',1,'ir_Daikin.h']]], - ['kdaikin128fanquiet_1031',['kDaikin128FanQuiet',['../ir__Daikin_8h.html#a54777f468236bf4b342240e8c523308d',1,'ir_Daikin.h']]], - ['kdaikin128footermark_1032',['kDaikin128FooterMark',['../ir__Daikin_8h.html#ad5668b12e38afa4b44a8e214dac22f2e',1,'ir_Daikin.h']]], - ['kdaikin128freq_1033',['kDaikin128Freq',['../ir__Daikin_8h.html#a5a76fc08310d517cb7e182c287e77df1',1,'ir_Daikin.h']]], - ['kdaikin128gap_1034',['kDaikin128Gap',['../ir__Daikin_8h.html#a6323c59eb5906ac2887a02f9cd09a329',1,'ir_Daikin.h']]], - ['kdaikin128hdrmark_1035',['kDaikin128HdrMark',['../ir__Daikin_8h.html#a6257375541b6e10bda4083d9529e80f0',1,'ir_Daikin.h']]], - ['kdaikin128hdrspace_1036',['kDaikin128HdrSpace',['../ir__Daikin_8h.html#a114a4cef444d4c552b90701cb7debc73',1,'ir_Daikin.h']]], - ['kdaikin128heat_1037',['kDaikin128Heat',['../ir__Daikin_8h.html#ada28db809b26e2ae9e927650d4cb4f7a',1,'ir_Daikin.h']]], - ['kdaikin128leadermark_1038',['kDaikin128LeaderMark',['../ir__Daikin_8h.html#ab609b8979a2d2bf4fa5b7164590b2bfb',1,'ir_Daikin.h']]], - ['kdaikin128leaderspace_1039',['kDaikin128LeaderSpace',['../ir__Daikin_8h.html#a259bfa510a9ec06049c0a7bf6563eb35',1,'ir_Daikin.h']]], - ['kdaikin128maxtemp_1040',['kDaikin128MaxTemp',['../ir__Daikin_8h.html#a7dcd514d292ef98d70083227d046baad',1,'ir_Daikin.h']]], - ['kdaikin128mintemp_1041',['kDaikin128MinTemp',['../ir__Daikin_8h.html#aad27f3ff311f1defc5ac9fb3be0ad504',1,'ir_Daikin.h']]], - ['kdaikin128onespace_1042',['kDaikin128OneSpace',['../ir__Daikin_8h.html#ac6a9a48ae0037b889a6619361fd090ac',1,'ir_Daikin.h']]], - ['kdaikin128sectionlength_1043',['kDaikin128SectionLength',['../ir__Daikin_8h.html#a204a306e7d7071d4b798f7947c232520',1,'ir_Daikin.h']]], - ['kdaikin128sections_1044',['kDaikin128Sections',['../ir__Daikin_8h.html#a81f0cfda4d8452d6053cc6999a270b1f',1,'ir_Daikin.h']]], - ['kdaikin128statelength_1045',['kDaikin128StateLength',['../IRremoteESP8266_8h.html#a4279ccd14a3af2046e393661a7b4879f',1,'IRremoteESP8266.h']]], - ['kdaikin128zerospace_1046',['kDaikin128ZeroSpace',['../ir__Daikin_8h.html#a1ca69805ada8ec451199c18d9da6f02a',1,'ir_Daikin.h']]], - ['kdaikin152bitmark_1047',['kDaikin152BitMark',['../ir__Daikin_8h.html#afd50318eaa383a7e85f0d0c2866bc9d5',1,'ir_Daikin.h']]], - ['kdaikin152bits_1048',['kDaikin152Bits',['../IRremoteESP8266_8h.html#af056e1ac2d00c6d6440c3dd2ae283f09',1,'IRremoteESP8266.h']]], - ['kdaikin152defaultrepeat_1049',['kDaikin152DefaultRepeat',['../IRremoteESP8266_8h.html#a9407eebab271524e74bc3ddddb1a2e0b',1,'IRremoteESP8266.h']]], - ['kdaikin152drytemp_1050',['kDaikin152DryTemp',['../ir__Daikin_8h.html#a86e9308c00dbdd79546687af412c4156',1,'ir_Daikin.h']]], - ['kdaikin152fantemp_1051',['kDaikin152FanTemp',['../ir__Daikin_8h.html#ad5c5bb7e8b181c79fe68607c1a4d202f',1,'ir_Daikin.h']]], - ['kdaikin152freq_1052',['kDaikin152Freq',['../ir__Daikin_8h.html#aa45492ae186142971975b7da56658a0b',1,'ir_Daikin.h']]], - ['kdaikin152gap_1053',['kDaikin152Gap',['../ir__Daikin_8h.html#aee02d3b17db4a382035c00329c6c2a0a',1,'ir_Daikin.h']]], - ['kdaikin152hdrmark_1054',['kDaikin152HdrMark',['../ir__Daikin_8h.html#a85fad797a9b43cb317fdb2e2c254a3bb',1,'ir_Daikin.h']]], - ['kdaikin152hdrspace_1055',['kDaikin152HdrSpace',['../ir__Daikin_8h.html#a0eb0b1b5fabab75a5956b6b939696a12',1,'ir_Daikin.h']]], - ['kdaikin152leaderbits_1056',['kDaikin152LeaderBits',['../ir__Daikin_8h.html#a432454efd5ea7457d34fe014b0d328c1',1,'ir_Daikin.h']]], - ['kdaikin152onespace_1057',['kDaikin152OneSpace',['../ir__Daikin_8h.html#a1f96172c74b261a26ec6d71201f7c589',1,'ir_Daikin.h']]], - ['kdaikin152statelength_1058',['kDaikin152StateLength',['../IRremoteESP8266_8h.html#ae7579708922ffd3e44295f8770878983',1,'IRremoteESP8266.h']]], - ['kdaikin152zerospace_1059',['kDaikin152ZeroSpace',['../ir__Daikin_8h.html#aec201aee71c0e301e8e191ddcaadb2de',1,'ir_Daikin.h']]], - ['kdaikin160bitmark_1060',['kDaikin160BitMark',['../ir__Daikin_8h.html#a852c2268ed7a8dd42c629e8a0706b6f5',1,'ir_Daikin.h']]], - ['kdaikin160bits_1061',['kDaikin160Bits',['../IRremoteESP8266_8h.html#aa6f1d6dded2ae3500cd52aa0c482a1b6',1,'IRremoteESP8266.h']]], - ['kdaikin160defaultrepeat_1062',['kDaikin160DefaultRepeat',['../IRremoteESP8266_8h.html#a82f4f1d8fae51c7e2f1f6753ca6e6053',1,'IRremoteESP8266.h']]], - ['kdaikin160freq_1063',['kDaikin160Freq',['../ir__Daikin_8h.html#a69e8abb57aecc6b99c60c5df7e18ff39',1,'ir_Daikin.h']]], - ['kdaikin160gap_1064',['kDaikin160Gap',['../ir__Daikin_8h.html#a8d107f0d63ef6951d657a55a370e8a8b',1,'ir_Daikin.h']]], - ['kdaikin160hdrmark_1065',['kDaikin160HdrMark',['../ir__Daikin_8h.html#a96043b43ba4d963456206e2d02639325',1,'ir_Daikin.h']]], - ['kdaikin160hdrspace_1066',['kDaikin160HdrSpace',['../ir__Daikin_8h.html#aefa7b5de43483951e00bd5d2cdbe5665',1,'ir_Daikin.h']]], - ['kdaikin160onespace_1067',['kDaikin160OneSpace',['../ir__Daikin_8h.html#a068c2252191675dca6503bfc37e4785e',1,'ir_Daikin.h']]], - ['kdaikin160section1length_1068',['kDaikin160Section1Length',['../ir__Daikin_8h.html#a06b59ee56cddcdcd9dfa375663da0c2d',1,'ir_Daikin.h']]], - ['kdaikin160section2length_1069',['kDaikin160Section2Length',['../ir__Daikin_8h.html#a7d6194a363661e11167cc972f1b92f68',1,'ir_Daikin.h']]], - ['kdaikin160sections_1070',['kDaikin160Sections',['../ir__Daikin_8h.html#afcc5de2994c1cd618437f1c67a5754d0',1,'ir_Daikin.h']]], - ['kdaikin160statelength_1071',['kDaikin160StateLength',['../IRremoteESP8266_8h.html#a09f022a12a40a8fae09bfbddfbee6d62',1,'IRremoteESP8266.h']]], - ['kdaikin160swingvauto_1072',['kDaikin160SwingVAuto',['../ir__Daikin_8h.html#aa6d9ee84d2c15c69ed8dbbc832285baf',1,'ir_Daikin.h']]], - ['kdaikin160swingvhigh_1073',['kDaikin160SwingVHigh',['../ir__Daikin_8h.html#abf542bd70d12534af72fb4ec8df5d265',1,'ir_Daikin.h']]], - ['kdaikin160swingvhighest_1074',['kDaikin160SwingVHighest',['../ir__Daikin_8h.html#a2a48ca041acbde68b902a4d0be4aeec5',1,'ir_Daikin.h']]], - ['kdaikin160swingvlow_1075',['kDaikin160SwingVLow',['../ir__Daikin_8h.html#a04ff7cb63db6b281ced56283288f05c0',1,'ir_Daikin.h']]], - ['kdaikin160swingvlowest_1076',['kDaikin160SwingVLowest',['../ir__Daikin_8h.html#ac4f34c7862802b21dede2ac0b534c8d8',1,'ir_Daikin.h']]], - ['kdaikin160swingvmiddle_1077',['kDaikin160SwingVMiddle',['../ir__Daikin_8h.html#a620b644f07f9b664f09417bb362dc216',1,'ir_Daikin.h']]], - ['kdaikin160zerospace_1078',['kDaikin160ZeroSpace',['../ir__Daikin_8h.html#a2b4591126c0b26ab16b5611dbfa4d5f6',1,'ir_Daikin.h']]], - ['kdaikin176auto_1079',['kDaikin176Auto',['../ir__Daikin_8h.html#a692292ea29754f646f3611326899a3c4',1,'ir_Daikin.h']]], - ['kdaikin176bitmark_1080',['kDaikin176BitMark',['../ir__Daikin_8h.html#a4be0185fb8f65c0286cbf55dfd63a40f',1,'ir_Daikin.h']]], - ['kdaikin176bits_1081',['kDaikin176Bits',['../IRremoteESP8266_8h.html#a78baf9c97c548618428d2fcfd7cc91d7',1,'IRremoteESP8266.h']]], - ['kdaikin176cool_1082',['kDaikin176Cool',['../ir__Daikin_8h.html#ab67e912a9abdda7dcbe52ce90b70a3b5',1,'ir_Daikin.h']]], - ['kdaikin176defaultrepeat_1083',['kDaikin176DefaultRepeat',['../IRremoteESP8266_8h.html#a0228803e8fff3c73227214d4bb3d8b05',1,'IRremoteESP8266.h']]], - ['kdaikin176dry_1084',['kDaikin176Dry',['../ir__Daikin_8h.html#a23bf5f3e572d11fb38476a5118382b35',1,'ir_Daikin.h']]], - ['kdaikin176dryfantemp_1085',['kDaikin176DryFanTemp',['../ir__Daikin_8h.html#a462ad30312f13443f51b510e5b391f42',1,'ir_Daikin.h']]], - ['kdaikin176fan_1086',['kDaikin176Fan',['../ir__Daikin_8h.html#ace1184864858e862a66be779cbe698b1',1,'ir_Daikin.h']]], - ['kdaikin176fanmax_1087',['kDaikin176FanMax',['../ir__Daikin_8h.html#a97e77d2a09bc753c17104f9695a0c0b1',1,'ir_Daikin.h']]], - ['kdaikin176freq_1088',['kDaikin176Freq',['../ir__Daikin_8h.html#a7f0c76e579dad510f21c34ba57cbf8dc',1,'ir_Daikin.h']]], - ['kdaikin176gap_1089',['kDaikin176Gap',['../ir__Daikin_8h.html#a0309c9d689f64e2d57ab09a2bb27bc18',1,'ir_Daikin.h']]], - ['kdaikin176hdrmark_1090',['kDaikin176HdrMark',['../ir__Daikin_8h.html#a9ff1ca660571d09caa0de39ce1370720',1,'ir_Daikin.h']]], - ['kdaikin176hdrspace_1091',['kDaikin176HdrSpace',['../ir__Daikin_8h.html#a64c4874b5d92682911ca84e826e1ff0b',1,'ir_Daikin.h']]], - ['kdaikin176heat_1092',['kDaikin176Heat',['../ir__Daikin_8h.html#a16500da7848870fdda27209906d56ead',1,'ir_Daikin.h']]], - ['kdaikin176modebutton_1093',['kDaikin176ModeButton',['../ir__Daikin_8h.html#a5c8602d17e9f70eefd735741b9d714eb',1,'ir_Daikin.h']]], - ['kdaikin176onespace_1094',['kDaikin176OneSpace',['../ir__Daikin_8h.html#a86ed046d66daf884ac0f06722991f5ba',1,'ir_Daikin.h']]], - ['kdaikin176section1length_1095',['kDaikin176Section1Length',['../ir__Daikin_8h.html#a4c5ce7df75834c77c0908cc40dbe02ed',1,'ir_Daikin.h']]], - ['kdaikin176section2length_1096',['kDaikin176Section2Length',['../ir__Daikin_8h.html#a9e2bb25a1d64d2c042e7eef38f5347d0',1,'ir_Daikin.h']]], - ['kdaikin176sections_1097',['kDaikin176Sections',['../ir__Daikin_8h.html#a177d12ac0f4fe8b5c5aeaf8f72579607',1,'ir_Daikin.h']]], - ['kdaikin176statelength_1098',['kDaikin176StateLength',['../IRremoteESP8266_8h.html#aa71fc87dcb6f14b82997e1d2269429d2',1,'IRremoteESP8266.h']]], - ['kdaikin176swinghauto_1099',['kDaikin176SwingHAuto',['../ir__Daikin_8h.html#a326ffcf00330a1759e4f71f8f8603f23',1,'ir_Daikin.h']]], - ['kdaikin176swinghoff_1100',['kDaikin176SwingHOff',['../ir__Daikin_8h.html#a8672ccb9016808c84b1b06de6584188a',1,'ir_Daikin.h']]], - ['kdaikin176zerospace_1101',['kDaikin176ZeroSpace',['../ir__Daikin_8h.html#a4db8836caa6cae0bab6fbde94409c879',1,'ir_Daikin.h']]], - ['kdaikin216bitmark_1102',['kDaikin216BitMark',['../ir__Daikin_8h.html#ada7cf9c593d716617ff4436755eef4f9',1,'ir_Daikin.h']]], - ['kdaikin216bits_1103',['kDaikin216Bits',['../IRremoteESP8266_8h.html#a317bf475ee4c6ddd802995dc535377d9',1,'IRremoteESP8266.h']]], - ['kdaikin216defaultrepeat_1104',['kDaikin216DefaultRepeat',['../IRremoteESP8266_8h.html#a9d14d424d5a93de62f3e6f453db112db',1,'IRremoteESP8266.h']]], - ['kdaikin216freq_1105',['kDaikin216Freq',['../ir__Daikin_8h.html#aa3a9753c90ecb6d7f5ee3e5a16c79217',1,'ir_Daikin.h']]], - ['kdaikin216gap_1106',['kDaikin216Gap',['../ir__Daikin_8h.html#ab807adaab8afbeb97afaa9ddb2ec2c63',1,'ir_Daikin.h']]], - ['kdaikin216hdrmark_1107',['kDaikin216HdrMark',['../ir__Daikin_8h.html#a24163655b3d374aa643506c2bf4a2406',1,'ir_Daikin.h']]], - ['kdaikin216hdrspace_1108',['kDaikin216HdrSpace',['../ir__Daikin_8h.html#a2e69973e9a4aee29668597d09fcd70a4',1,'ir_Daikin.h']]], - ['kdaikin216onespace_1109',['kDaikin216OneSpace',['../ir__Daikin_8h.html#a1edeb73093bdea23e6cfb39c31ca1fce',1,'ir_Daikin.h']]], - ['kdaikin216section1length_1110',['kDaikin216Section1Length',['../ir__Daikin_8h.html#a5aacc812feb33ef954adc49086036859',1,'ir_Daikin.h']]], - ['kdaikin216section2length_1111',['kDaikin216Section2Length',['../ir__Daikin_8h.html#aade497bb9aad663a9e1e9403188d2154',1,'ir_Daikin.h']]], - ['kdaikin216sections_1112',['kDaikin216Sections',['../ir__Daikin_8h.html#a0ecd54bb733b982e3e5adf0c13ac9f6b',1,'ir_Daikin.h']]], - ['kdaikin216statelength_1113',['kDaikin216StateLength',['../IRremoteESP8266_8h.html#a70a1a65c1947b440e4ff27477de5ddc7',1,'IRremoteESP8266.h']]], - ['kdaikin216swingoff_1114',['kDaikin216SwingOff',['../ir__Daikin_8h.html#a84d6bb74c705dfbcd558f0b411a2a88e',1,'ir_Daikin.h']]], - ['kdaikin216swingon_1115',['kDaikin216SwingOn',['../ir__Daikin_8h.html#a4b2d77aafd84ed004390b5d4c7ad0455',1,'ir_Daikin.h']]], - ['kdaikin216zerospace_1116',['kDaikin216ZeroSpace',['../ir__Daikin_8h.html#a448250dbb5a3a9733f21a0e347d17999',1,'ir_Daikin.h']]], - ['kdaikin2bitmark_1117',['kDaikin2BitMark',['../ir__Daikin_8h.html#a226f10b7216d4f039cf79af823673a18',1,'ir_Daikin.h']]], - ['kdaikin2bits_1118',['kDaikin2Bits',['../IRremoteESP8266_8h.html#affd9b805fff390d05a83ff4eaa1c98de',1,'IRremoteESP8266.h']]], - ['kdaikin2defaultrepeat_1119',['kDaikin2DefaultRepeat',['../IRremoteESP8266_8h.html#a2dde8fd00f8a28e35da04cff9a3a1908',1,'IRremoteESP8266.h']]], - ['kdaikin2freq_1120',['kDaikin2Freq',['../ir__Daikin_8h.html#ab82e4836d9023c4ba3041d1226761461',1,'ir_Daikin.h']]], - ['kdaikin2gap_1121',['kDaikin2Gap',['../ir__Daikin_8h.html#afe14712c1be4ca14d5cd41e77d4bada0',1,'ir_Daikin.h']]], - ['kdaikin2hdrmark_1122',['kDaikin2HdrMark',['../ir__Daikin_8h.html#ab679ef183af5b94f53697d434e6540c3',1,'ir_Daikin.h']]], - ['kdaikin2hdrspace_1123',['kDaikin2HdrSpace',['../ir__Daikin_8h.html#a557f8eeaf55ff7fda0cacd0245ac27d3',1,'ir_Daikin.h']]], - ['kdaikin2leadermark_1124',['kDaikin2LeaderMark',['../ir__Daikin_8h.html#a533c7ea8f968502d4b31e14eb2b1f614',1,'ir_Daikin.h']]], - ['kdaikin2leaderspace_1125',['kDaikin2LeaderSpace',['../ir__Daikin_8h.html#a9d48d64e470ff0318bd62b3385433f57',1,'ir_Daikin.h']]], - ['kdaikin2mincooltemp_1126',['kDaikin2MinCoolTemp',['../ir__Daikin_8h.html#a78b37644f9327537d35bec4c0fd8faee',1,'ir_Daikin.h']]], - ['kdaikin2onespace_1127',['kDaikin2OneSpace',['../ir__Daikin_8h.html#a70a96368500562fa95f88dc2f203c194',1,'ir_Daikin.h']]], - ['kdaikin2section1length_1128',['kDaikin2Section1Length',['../ir__Daikin_8h.html#a463878e9bfb22ca3c64a40259598872c',1,'ir_Daikin.h']]], - ['kdaikin2section2length_1129',['kDaikin2Section2Length',['../ir__Daikin_8h.html#a8cb956f86fdf487b1ea7ac388eeda2b5',1,'ir_Daikin.h']]], - ['kdaikin2sections_1130',['kDaikin2Sections',['../ir__Daikin_8h.html#a770cef4efa5d5668b063cf0e26f1b134',1,'ir_Daikin.h']]], - ['kdaikin2statelength_1131',['kDaikin2StateLength',['../IRremoteESP8266_8h.html#a349e4d17f83bb3e707ff19c0255c1644',1,'IRremoteESP8266.h']]], - ['kdaikin2swinghauto_1132',['kDaikin2SwingHAuto',['../ir__Daikin_8h.html#a834a3138b0f9bfdac98d26aa63bc951e',1,'ir_Daikin.h']]], - ['kdaikin2swinghleft_1133',['kDaikin2SwingHLeft',['../ir__Daikin_8h.html#aa9b294b2f12660081171df290a7e874f',1,'ir_Daikin.h']]], - ['kdaikin2swinghleftmax_1134',['kDaikin2SwingHLeftMax',['../ir__Daikin_8h.html#aac08696fc9734996537204c089db2f7c',1,'ir_Daikin.h']]], - ['kdaikin2swinghmiddle_1135',['kDaikin2SwingHMiddle',['../ir__Daikin_8h.html#ab882d68819344e622182b07ded30cccf',1,'ir_Daikin.h']]], - ['kdaikin2swinghoff_1136',['kDaikin2SwingHOff',['../ir__Daikin_8h.html#ae49a187598033a7cd1c6bd33295670cf',1,'ir_Daikin.h']]], - ['kdaikin2swinghright_1137',['kDaikin2SwingHRight',['../ir__Daikin_8h.html#a8d7c79266bedbb722dc1a74c8b727a27',1,'ir_Daikin.h']]], - ['kdaikin2swinghrightmax_1138',['kDaikin2SwingHRightMax',['../ir__Daikin_8h.html#a843ad9ee10eccd799814ca9fff57f481',1,'ir_Daikin.h']]], - ['kdaikin2swinghswing_1139',['kDaikin2SwingHSwing',['../ir__Daikin_8h.html#a3776d46e94a771a6dc94d14257f34d09',1,'ir_Daikin.h']]], - ['kdaikin2swinghwide_1140',['kDaikin2SwingHWide',['../ir__Daikin_8h.html#a93157e048486e564757ba737551cf481',1,'ir_Daikin.h']]], - ['kdaikin2swingvauto_1141',['kDaikin2SwingVAuto',['../ir__Daikin_8h.html#aa91228576ef22854a693c86df5276cbb',1,'ir_Daikin.h']]], - ['kdaikin2swingvbreeze_1142',['kDaikin2SwingVBreeze',['../ir__Daikin_8h.html#a5646d38fff6a985314158796665d9d76',1,'ir_Daikin.h']]], - ['kdaikin2swingvcirculate_1143',['kDaikin2SwingVCirculate',['../ir__Daikin_8h.html#a717bb32ce20e6d65ee78a9e8ba0f5490',1,'ir_Daikin.h']]], - ['kdaikin2swingvhigh_1144',['kDaikin2SwingVHigh',['../ir__Daikin_8h.html#a2d25d46fb289c3450ed6817a45982e27',1,'ir_Daikin.h']]], - ['kdaikin2swingvhighest_1145',['kDaikin2SwingVHighest',['../ir__Daikin_8h.html#a19a1466e7c23d4713026d6713ee301dc',1,'ir_Daikin.h']]], - ['kdaikin2swingvlow_1146',['kDaikin2SwingVLow',['../ir__Daikin_8h.html#accae3be213670675f8dfc974fe19f2cf',1,'ir_Daikin.h']]], - ['kdaikin2swingvlowermiddle_1147',['kDaikin2SwingVLowerMiddle',['../ir__Daikin_8h.html#afc89861dee46baa67b4beaa4a970a579',1,'ir_Daikin.h']]], - ['kdaikin2swingvlowest_1148',['kDaikin2SwingVLowest',['../ir__Daikin_8h.html#a7fd3777c7c574d773ede3d1c2d72301d',1,'ir_Daikin.h']]], - ['kdaikin2swingvoff_1149',['kDaikin2SwingVOff',['../ir__Daikin_8h.html#a30cfd294ea52a0ef736ebcc38a79aa71',1,'ir_Daikin.h']]], - ['kdaikin2swingvswing_1150',['kDaikin2SwingVSwing',['../ir__Daikin_8h.html#a2a62938481ba7b4374df50867295c07d',1,'ir_Daikin.h']]], - ['kdaikin2swingvuppermiddle_1151',['kDaikin2SwingVUpperMiddle',['../ir__Daikin_8h.html#a9f12c68db1a0af6e3defbc2bb8f3b8bc',1,'ir_Daikin.h']]], - ['kdaikin2tolerance_1152',['kDaikin2Tolerance',['../ir__Daikin_8h.html#ac428e884b15026c0610cc1b0b8b46154',1,'ir_Daikin.h']]], - ['kdaikin2zerospace_1153',['kDaikin2ZeroSpace',['../ir__Daikin_8h.html#a91b023ce8679d8d0e4434e014e746f99',1,'ir_Daikin.h']]], - ['kdaikin64bitmark_1154',['kDaikin64BitMark',['../ir__Daikin_8h.html#a6d89c1acd56b670b2aba65429d6fbf00',1,'ir_Daikin.h']]], - ['kdaikin64bits_1155',['kDaikin64Bits',['../IRremoteESP8266_8h.html#a89266e9211a81eda22475fb5a258484f',1,'IRremoteESP8266.h']]], - ['kdaikin64checksumoffset_1156',['kDaikin64ChecksumOffset',['../ir__Daikin_8h.html#a5c47c0a0b1d2a23620beb2496af958c5',1,'ir_Daikin.h']]], - ['kdaikin64checksumsize_1157',['kDaikin64ChecksumSize',['../ir__Daikin_8h.html#a0c068274c73deb732e70a7daf6684391',1,'ir_Daikin.h']]], - ['kdaikin64cool_1158',['kDaikin64Cool',['../ir__Daikin_8h.html#a1ed020e8e7b5b741e90c4a27ca9f3a91',1,'ir_Daikin.h']]], - ['kdaikin64defaultrepeat_1159',['kDaikin64DefaultRepeat',['../IRremoteESP8266_8h.html#aca64338c3e3bbe52f8ec5688317041b3',1,'IRremoteESP8266.h']]], - ['kdaikin64dry_1160',['kDaikin64Dry',['../ir__Daikin_8h.html#aa494c8e2a54209c7467fdd7f40655b0b',1,'ir_Daikin.h']]], - ['kdaikin64fan_1161',['kDaikin64Fan',['../ir__Daikin_8h.html#aa1f4bb12be0f74af35ee54a5540f8a7b',1,'ir_Daikin.h']]], - ['kdaikin64fanauto_1162',['kDaikin64FanAuto',['../ir__Daikin_8h.html#a6fbc965cb8194048ed27d586321c01b2',1,'ir_Daikin.h']]], - ['kdaikin64fanhigh_1163',['kDaikin64FanHigh',['../ir__Daikin_8h.html#a122d57c30d1f4ad8f20d44077b0a1970',1,'ir_Daikin.h']]], - ['kdaikin64fanlow_1164',['kDaikin64FanLow',['../ir__Daikin_8h.html#a5a692fdcb373acf101536adb4c18384f',1,'ir_Daikin.h']]], - ['kdaikin64fanmed_1165',['kDaikin64FanMed',['../ir__Daikin_8h.html#a9b2737ba57e38d4c3dfe7bc65de4c944',1,'ir_Daikin.h']]], - ['kdaikin64fanquiet_1166',['kDaikin64FanQuiet',['../ir__Daikin_8h.html#a1a7d78b2ed8ca5b83d6422d659ecb296',1,'ir_Daikin.h']]], - ['kdaikin64fanturbo_1167',['kDaikin64FanTurbo',['../ir__Daikin_8h.html#ae6d370916c0897bc82346136d7922f5d',1,'ir_Daikin.h']]], - ['kdaikin64freq_1168',['kDaikin64Freq',['../ir__Daikin_8h.html#a7b63829df4d0e1de61ed396c3b07e988',1,'ir_Daikin.h']]], - ['kdaikin64gap_1169',['kDaikin64Gap',['../ir__Daikin_8h.html#ae191cb5f6c65b944970158caaf56618d',1,'ir_Daikin.h']]], - ['kdaikin64hdrmark_1170',['kDaikin64HdrMark',['../ir__Daikin_8h.html#abe7b92798de08dfc5f044869891bdec5',1,'ir_Daikin.h']]], - ['kdaikin64hdrspace_1171',['kDaikin64HdrSpace',['../ir__Daikin_8h.html#a1eac122554acda264f9aa48261b2a884',1,'ir_Daikin.h']]], - ['kdaikin64knowngoodstate_1172',['kDaikin64KnownGoodState',['../ir__Daikin_8h.html#a09f0aa8c586b35b79bbceb19e822eb48',1,'ir_Daikin.h']]], - ['kdaikin64ldrmark_1173',['kDaikin64LdrMark',['../ir__Daikin_8h.html#aca20b8ee0fa9a8aa2d676ef12bd5ba97',1,'ir_Daikin.h']]], - ['kdaikin64ldrspace_1174',['kDaikin64LdrSpace',['../ir__Daikin_8h.html#ada1084c119abe58dadcb17eb4cfed072',1,'ir_Daikin.h']]], - ['kdaikin64maxtemp_1175',['kDaikin64MaxTemp',['../ir__Daikin_8h.html#a495e3b77590263a2c043c1ba12489fac',1,'ir_Daikin.h']]], - ['kdaikin64mintemp_1176',['kDaikin64MinTemp',['../ir__Daikin_8h.html#a209cb1798ae64de1f5274fb167ee62ea',1,'ir_Daikin.h']]], - ['kdaikin64onespace_1177',['kDaikin64OneSpace',['../ir__Daikin_8h.html#ab3129b72f5300893d04b47e72dd420e1',1,'ir_Daikin.h']]], - ['kdaikin64overhead_1178',['kDaikin64Overhead',['../ir__Daikin_8h.html#af0dafe45d0127430e05f2312e8ba99bb',1,'ir_Daikin.h']]], - ['kdaikin64tolerancedelta_1179',['kDaikin64ToleranceDelta',['../ir__Daikin_8h.html#ae0b22a140c2727de9a347e8ab8d554e9',1,'ir_Daikin.h']]], - ['kdaikin64zerospace_1180',['kDaikin64ZeroSpace',['../ir__Daikin_8h.html#a142e45c289af1e9802254b9c138003fa',1,'ir_Daikin.h']]], - ['kdaikinauto_1181',['kDaikinAuto',['../ir__Daikin_8h.html#af3a0e7c149d020002cdf345a15606542',1,'ir_Daikin.h']]], - ['kdaikinbeeploud_1182',['kDaikinBeepLoud',['../ir__Daikin_8h.html#a4eb2b3899076882e3ed23220138ebac1',1,'ir_Daikin.h']]], - ['kdaikinbeepoff_1183',['kDaikinBeepOff',['../ir__Daikin_8h.html#a8271934c8bbd4b8e4d6aacdee5a038cf',1,'ir_Daikin.h']]], - ['kdaikinbeepquiet_1184',['kDaikinBeepQuiet',['../ir__Daikin_8h.html#a11008f7d6afc934426b88704d47301e7',1,'ir_Daikin.h']]], - ['kdaikinbitmark_1185',['kDaikinBitMark',['../ir__Daikin_8h.html#ae109b9ea2120f989dac2529345e38adb',1,'ir_Daikin.h']]], - ['kdaikinbits_1186',['kDaikinBits',['../IRremoteESP8266_8h.html#a657f8e60bc1f896d4a46ec101c289485',1,'IRremoteESP8266.h']]], - ['kdaikinbitsshort_1187',['kDaikinBitsShort',['../IRremoteESP8266_8h.html#aebaa8eb786747761fb369cfd34181cb7',1,'IRremoteESP8266.h']]], - ['kdaikinbytechecksum1_1188',['kDaikinByteChecksum1',['../ir__Daikin_8h.html#a887d8d38cf4330e1107443471fa119ca',1,'ir_Daikin.h']]], - ['kdaikinbytechecksum2_1189',['kDaikinByteChecksum2',['../ir__Daikin_8h.html#ab27225f21b29e617bf03fc68cc6e8e0f',1,'ir_Daikin.h']]], - ['kdaikincool_1190',['kDaikinCool',['../ir__Daikin_8h.html#aa57615a0a9f79b97139580a807bf095f',1,'ir_Daikin.h']]], - ['kdaikincurbit_1191',['kDaikinCurBit',['../ir__Daikin_8h.html#afccfde2b46f5fcb425f02a79a9c20494',1,'ir_Daikin.h']]], - ['kdaikincurindex_1192',['kDaikinCurIndex',['../ir__Daikin_8h.html#a5c01a0bfbd92b337d2e4a5c3df381865',1,'ir_Daikin.h']]], - ['kdaikindefaultrepeat_1193',['kDaikinDefaultRepeat',['../IRremoteESP8266_8h.html#af691d5202b7f121a16b2d9871ee14d9c',1,'IRremoteESP8266.h']]], - ['kdaikindry_1194',['kDaikinDry',['../ir__Daikin_8h.html#ab6143bef74a122c3fba3a3b29df0cf29',1,'ir_Daikin.h']]], - ['kdaikinfan_1195',['kDaikinFan',['../ir__Daikin_8h.html#a616df34328cdac764aecc9ffb0f16f09',1,'ir_Daikin.h']]], - ['kdaikinfanauto_1196',['kDaikinFanAuto',['../ir__Daikin_8h.html#a87807bd5727d9da1b615fca2bd732292',1,'ir_Daikin.h']]], - ['kdaikinfanmax_1197',['kDaikinFanMax',['../ir__Daikin_8h.html#ab483f3913a909884f44f8cd8f779bca0',1,'ir_Daikin.h']]], - ['kdaikinfanmed_1198',['kDaikinFanMed',['../ir__Daikin_8h.html#ab6eb2c902c2b5f927160efc9fb9ab08c',1,'ir_Daikin.h']]], - ['kdaikinfanmin_1199',['kDaikinFanMin',['../ir__Daikin_8h.html#a83ad300b9374e50c22211501ee2d1a7a',1,'ir_Daikin.h']]], - ['kdaikinfanquiet_1200',['kDaikinFanQuiet',['../ir__Daikin_8h.html#aae481cf166671c30bccdc7f47aa6666e',1,'ir_Daikin.h']]], - ['kdaikinfirstheader64_1201',['kDaikinFirstHeader64',['../ir__Daikin_8h.html#a0bd3b36061d545bb21562622642f4196',1,'ir_Daikin.h']]], - ['kdaikingap_1202',['kDaikinGap',['../ir__Daikin_8h.html#aed68991584125a277593c339ab387276',1,'ir_Daikin.h']]], - ['kdaikinhdrmark_1203',['kDaikinHdrMark',['../ir__Daikin_8h.html#a0a38b3bdfd8f4f7a18f969188388e29e',1,'ir_Daikin.h']]], - ['kdaikinhdrspace_1204',['kDaikinHdrSpace',['../ir__Daikin_8h.html#ac4ca6c53faeec7d7a7ccfb50802087dc',1,'ir_Daikin.h']]], - ['kdaikinheaderlength_1205',['kDaikinHeaderLength',['../ir__Daikin_8h.html#a476ca864b6791439549bb4257ca78b23',1,'ir_Daikin.h']]], - ['kdaikinheat_1206',['kDaikinHeat',['../ir__Daikin_8h.html#a05824dc5af4ed0d3eceda540ad0e7a9f',1,'ir_Daikin.h']]], - ['kdaikinlightbright_1207',['kDaikinLightBright',['../ir__Daikin_8h.html#a20a3103d8d0a672c0c05c1679bf3b2ab',1,'ir_Daikin.h']]], - ['kdaikinlightdim_1208',['kDaikinLightDim',['../ir__Daikin_8h.html#a1093baf5b62fca42f9361715be2198a3',1,'ir_Daikin.h']]], - ['kdaikinlightoff_1209',['kDaikinLightOff',['../ir__Daikin_8h.html#ae57f7d2ea43e865ebf8175a8dbacab45',1,'ir_Daikin.h']]], - ['kdaikinmarkexcess_1210',['kDaikinMarkExcess',['../ir__Daikin_8h.html#a5331e1ee51bd7b001346aa41ee5d26cc',1,'ir_Daikin.h']]], - ['kdaikinmaxtemp_1211',['kDaikinMaxTemp',['../ir__Daikin_8h.html#aab7be756494a5ed23e9202af769e0012',1,'ir_Daikin.h']]], - ['kdaikinmintemp_1212',['kDaikinMinTemp',['../ir__Daikin_8h.html#af257feb15dc282c7d06351ee9eed666b',1,'ir_Daikin.h']]], - ['kdaikinonespace_1213',['kDaikinOneSpace',['../ir__Daikin_8h.html#a6653082dcfde989bd2c5810809fc18a9',1,'ir_Daikin.h']]], - ['kdaikinsection1length_1214',['kDaikinSection1Length',['../ir__Daikin_8h.html#ab3b8aacbebe6c1c5514141102d1ca26f',1,'ir_Daikin.h']]], - ['kdaikinsection2length_1215',['kDaikinSection2Length',['../ir__Daikin_8h.html#a2e65cdf05d22a20f01ae5f6d3e222218',1,'ir_Daikin.h']]], - ['kdaikinsection3length_1216',['kDaikinSection3Length',['../ir__Daikin_8h.html#ae7dbaf6b4034267e4610087f9f2f51e3',1,'ir_Daikin.h']]], - ['kdaikinsections_1217',['kDaikinSections',['../ir__Daikin_8h.html#aad822c70789b861fa5beb839833e0b4c',1,'ir_Daikin.h']]], - ['kdaikinstatelength_1218',['kDaikinStateLength',['../IRremoteESP8266_8h.html#af1fda5b9f355e526dc66cf58824315a7',1,'IRremoteESP8266.h']]], - ['kdaikinstatelengthshort_1219',['kDaikinStateLengthShort',['../IRremoteESP8266_8h.html#ae94c897cb0bd25ca7a4d693c7be9be3d',1,'IRremoteESP8266.h']]], - ['kdaikinswingoff_1220',['kDaikinSwingOff',['../ir__Daikin_8h.html#abc9194f48f63632b87c6139dd8ab6ecf',1,'ir_Daikin.h']]], - ['kdaikinswingon_1221',['kDaikinSwingOn',['../ir__Daikin_8h.html#af19ec29dc79837deca05f6061f2e6524',1,'ir_Daikin.h']]], - ['kdaikintolerance_1222',['kDaikinTolerance',['../ir__Daikin_8h.html#aea3938d1522df0040ddb9775075d6669',1,'ir_Daikin.h']]], - ['kdaikinunusedtime_1223',['kDaikinUnusedTime',['../ir__Daikin_8h.html#af60d27bb9d08317498b35f62c167f6a4',1,'ir_Daikin.h']]], - ['kdaikinzerospace_1224',['kDaikinZeroSpace',['../ir__Daikin_8h.html#ace5b2c2be3b58f22248eafb2148d059c',1,'ir_Daikin.h']]], - ['kdaysstr_1225',['kDaysStr',['../IRtext_8cpp.html#a4269111ae41c3a673ec0a87fca0fd78b',1,'kDaysStr(): IRtext.cpp'],['../IRtext_8h.html#aa779ae24412ef82ee3d1eade3f0381ae',1,'kDaysStr(): IRtext.cpp']]], - ['kdaystr_1226',['kDayStr',['../IRtext_8cpp.html#ab6fb8803c6a95d1926abb56b7ecb2e09',1,'kDayStr(): IRtext.cpp'],['../IRtext_8h.html#adb64531a5054629613696f9af39420e2',1,'kDayStr(): IRtext.cpp']]], - ['kdefaultesp32timer_1227',['kDefaultESP32Timer',['../IRrecv_8h.html#a80a2d3445a1752d18caf307d7677b709',1,'IRrecv.h']]], - ['kdefaultmessagegap_1228',['kDefaultMessageGap',['../IRsend_8h.html#ad49e9828319afbad49fd5082c50ef4a7',1,'IRsend.h']]], - ['kdelonghiacauto_1229',['kDelonghiAcAuto',['../ir__Delonghi_8h.html#ab10d4fe0b9dbe99ed942b73a6ff61d37',1,'ir_Delonghi.h']]], - ['kdelonghiacbitmark_1230',['kDelonghiAcBitMark',['../ir__Delonghi_8cpp.html#aa70f02d16b78f513e245871d4db0785a',1,'ir_Delonghi.cpp']]], - ['kdelonghiacbits_1231',['kDelonghiAcBits',['../IRremoteESP8266_8h.html#a7b9fba82b602cf38147f0586e037f909',1,'IRremoteESP8266.h']]], - ['kdelonghiacchecksumoffset_1232',['kDelonghiAcChecksumOffset',['../ir__Delonghi_8h.html#a4b5e3d9874b016f60b7f9c26e7cf0cfd',1,'ir_Delonghi.h']]], - ['kdelonghiaccool_1233',['kDelonghiAcCool',['../ir__Delonghi_8h.html#a9447cc3a3f6f4e0603ecc99104523119',1,'ir_Delonghi.h']]], - ['kdelonghiacdefaultrepeat_1234',['kDelonghiAcDefaultRepeat',['../IRremoteESP8266_8h.html#a8f18256a0a6893e077e253e5e80da164',1,'IRremoteESP8266.h']]], - ['kdelonghiacdry_1235',['kDelonghiAcDry',['../ir__Delonghi_8h.html#a1c83f080ac1f48548fcfa5d691ef893d',1,'ir_Delonghi.h']]], - ['kdelonghiacfan_1236',['kDelonghiAcFan',['../ir__Delonghi_8h.html#af494534acfb8ae1c0f9c15bc13e2d0c8',1,'ir_Delonghi.h']]], - ['kdelonghiacfanauto_1237',['kDelonghiAcFanAuto',['../ir__Delonghi_8h.html#adf2286936d79d8c899283fa6e3838ebb',1,'ir_Delonghi.h']]], - ['kdelonghiacfanhigh_1238',['kDelonghiAcFanHigh',['../ir__Delonghi_8h.html#a03027eb1a6a382479b44db0699aee30b',1,'ir_Delonghi.h']]], - ['kdelonghiacfanlow_1239',['kDelonghiAcFanLow',['../ir__Delonghi_8h.html#a053a51021679cd5c4720e7ec68fa43eb',1,'ir_Delonghi.h']]], - ['kdelonghiacfanmedium_1240',['kDelonghiAcFanMedium',['../ir__Delonghi_8h.html#ac748c5e0b7c5acb108086f90c088028f',1,'ir_Delonghi.h']]], - ['kdelonghiacfreq_1241',['kDelonghiAcFreq',['../ir__Delonghi_8cpp.html#a9425e4f71aa6454a89b55f3b5789d94d',1,'ir_Delonghi.cpp']]], - ['kdelonghiacgap_1242',['kDelonghiAcGap',['../ir__Delonghi_8cpp.html#ab1cd2481fc96811ed822c8c9f63420c3',1,'ir_Delonghi.cpp']]], - ['kdelonghiachdrmark_1243',['kDelonghiAcHdrMark',['../ir__Delonghi_8cpp.html#a0feead944883173788b8d02b7ae94ef8',1,'ir_Delonghi.cpp']]], - ['kdelonghiachdrspace_1244',['kDelonghiAcHdrSpace',['../ir__Delonghi_8cpp.html#a606ea96746b1b6471b1d76f05bdc7e5a',1,'ir_Delonghi.cpp']]], - ['kdelonghiaconespace_1245',['kDelonghiAcOneSpace',['../ir__Delonghi_8cpp.html#a8805fdc60cd3537ba2d94038610a3490',1,'ir_Delonghi.cpp']]], - ['kdelonghiacoverhead_1246',['kDelonghiAcOverhead',['../ir__Delonghi_8cpp.html#ac265c123c0cd7492d26f030d129f3475',1,'ir_Delonghi.cpp']]], - ['kdelonghiactempautodrymode_1247',['kDelonghiAcTempAutoDryMode',['../ir__Delonghi_8h.html#add6f728d2746a089e00a35644d664a6c',1,'ir_Delonghi.h']]], - ['kdelonghiactempfanmode_1248',['kDelonghiAcTempFanMode',['../ir__Delonghi_8h.html#a120ae31fac35c33214317c3187aae15c',1,'ir_Delonghi.h']]], - ['kdelonghiactempmaxc_1249',['kDelonghiAcTempMaxC',['../ir__Delonghi_8h.html#a476922b8d240c46cf092897f6c701e87',1,'ir_Delonghi.h']]], - ['kdelonghiactempmaxf_1250',['kDelonghiAcTempMaxF',['../ir__Delonghi_8h.html#abc11f81bc221aa3789258b7a990633b3',1,'ir_Delonghi.h']]], - ['kdelonghiactempminc_1251',['kDelonghiAcTempMinC',['../ir__Delonghi_8h.html#ad31267284f7dd8f533fc978ed7e92428',1,'ir_Delonghi.h']]], - ['kdelonghiactempminf_1252',['kDelonghiAcTempMinF',['../ir__Delonghi_8h.html#a0311abab5eff5a8c47261db8e3d40ed5',1,'ir_Delonghi.h']]], - ['kdelonghiactimermax_1253',['kDelonghiAcTimerMax',['../ir__Delonghi_8h.html#a44d3f0d850c5cd5ad8c0e2dc7c2bd860',1,'ir_Delonghi.h']]], - ['kdelonghiaczerospace_1254',['kDelonghiAcZeroSpace',['../ir__Delonghi_8cpp.html#a4c1a9a70a50c7da9aa6cf91af85c695e',1,'ir_Delonghi.cpp']]], - ['kdenon48bits_1255',['kDenon48Bits',['../IRremoteESP8266_8h.html#ad7389b5b4f01a16dbf940eaae005c805',1,'IRremoteESP8266.h']]], - ['kdenonbitmark_1256',['kDenonBitMark',['../ir__Denon_8cpp.html#a1cd978061cfdc9bf1d5e1142dad86e59',1,'ir_Denon.cpp']]], - ['kdenonbitmarkticks_1257',['kDenonBitMarkTicks',['../ir__Denon_8cpp.html#ae6dddc89296abc186ac524c3f1efbe63',1,'ir_Denon.cpp']]], - ['kdenonbits_1258',['kDenonBits',['../IRremoteESP8266_8h.html#a29160117e25f3dfc1cb899a4a53bc238',1,'IRremoteESP8266.h']]], - ['kdenonhdrmark_1259',['kDenonHdrMark',['../ir__Denon_8cpp.html#a6f7b5da8c723615200109f425df72254',1,'ir_Denon.cpp']]], - ['kdenonhdrmarkticks_1260',['kDenonHdrMarkTicks',['../ir__Denon_8cpp.html#a484a90cdd15de164c931f1c70ab02938',1,'ir_Denon.cpp']]], - ['kdenonhdrspace_1261',['kDenonHdrSpace',['../ir__Denon_8cpp.html#a758b11259a5dcab3e949739cf67106be',1,'ir_Denon.cpp']]], - ['kdenonhdrspaceticks_1262',['kDenonHdrSpaceTicks',['../ir__Denon_8cpp.html#afe6cb1be37dcea0251ebf0fc43640fe1',1,'ir_Denon.cpp']]], - ['kdenonlegacybits_1263',['kDenonLegacyBits',['../IRremoteESP8266_8h.html#aacf2eea1349016ccbc96e97a0976f4ec',1,'IRremoteESP8266.h']]], - ['kdenonmanufacturer_1264',['kDenonManufacturer',['../ir__Denon_8cpp.html#abd89138765e21d25991fd5857506491b',1,'ir_Denon.cpp']]], - ['kdenonmincommandlengthticks_1265',['kDenonMinCommandLengthTicks',['../ir__Denon_8cpp.html#abb20f9f6053e0d46399011de71697a6a',1,'ir_Denon.cpp']]], - ['kdenonmingap_1266',['kDenonMinGap',['../ir__Denon_8cpp.html#a19b3fe79e06b3ece2cb167d5e14b2c11',1,'ir_Denon.cpp']]], - ['kdenonmingapticks_1267',['kDenonMinGapTicks',['../ir__Denon_8cpp.html#a191e0cfcf8167805ef9bfdc05463c313',1,'ir_Denon.cpp']]], - ['kdenononespace_1268',['kDenonOneSpace',['../ir__Denon_8cpp.html#a150b22eeeb64b59a3d9df51904fdda3f',1,'ir_Denon.cpp']]], - ['kdenononespaceticks_1269',['kDenonOneSpaceTicks',['../ir__Denon_8cpp.html#ad15a88b8f6b953918799eac1e814d107',1,'ir_Denon.cpp']]], - ['kdenontick_1270',['kDenonTick',['../ir__Denon_8cpp.html#a6cc0eba04ca4a2362068bf47d1869752',1,'ir_Denon.cpp']]], - ['kdenonzerospace_1271',['kDenonZeroSpace',['../ir__Denon_8cpp.html#ad8f53f000727e66938d086eadb5bf6eb',1,'ir_Denon.cpp']]], - ['kdenonzerospaceticks_1272',['kDenonZeroSpaceTicks',['../ir__Denon_8cpp.html#aed0c86367586cd043d8381499b3a4bdd',1,'ir_Denon.cpp']]], - ['kdishbitmark_1273',['kDishBitMark',['../ir__Dish_8cpp.html#aabe7f9815a2f5e65558b0f482e2ac50e',1,'ir_Dish.cpp']]], - ['kdishbitmarkticks_1274',['kDishBitMarkTicks',['../ir__Dish_8cpp.html#a1cfd9b730c78aac35f6c2cb56367c7bb',1,'ir_Dish.cpp']]], - ['kdishbits_1275',['kDishBits',['../IRremoteESP8266_8h.html#aea0cc15e1c7a6edcd6b60d9ac62d4831',1,'IRremoteESP8266.h']]], - ['kdishhdrmark_1276',['kDishHdrMark',['../ir__Dish_8cpp.html#ac4311aaed27b1f37a41a2a9cced0ecc5',1,'ir_Dish.cpp']]], - ['kdishhdrmarkticks_1277',['kDishHdrMarkTicks',['../ir__Dish_8cpp.html#a8dce19ee6e3a6859bd2d43c0c9e90517',1,'ir_Dish.cpp']]], - ['kdishhdrspace_1278',['kDishHdrSpace',['../ir__Dish_8cpp.html#ac68dfa9e554c919fd51b379621b2fbc4',1,'ir_Dish.cpp']]], - ['kdishhdrspaceticks_1279',['kDishHdrSpaceTicks',['../ir__Dish_8cpp.html#ab212535e169722d7f23b461b011400c2',1,'ir_Dish.cpp']]], - ['kdishminrepeat_1280',['kDishMinRepeat',['../IRremoteESP8266_8h.html#a5c2263819b032e3af4d416ab41126bd8',1,'IRremoteESP8266.h']]], - ['kdishonespace_1281',['kDishOneSpace',['../ir__Dish_8cpp.html#a6f1986377a4571c8eba5f401b772c194',1,'ir_Dish.cpp']]], - ['kdishonespaceticks_1282',['kDishOneSpaceTicks',['../ir__Dish_8cpp.html#ade25414e4747c56303752060d9f89446',1,'ir_Dish.cpp']]], - ['kdishrptspace_1283',['kDishRptSpace',['../ir__Dish_8cpp.html#a67628a3581fe85638f72711581ec0e42',1,'ir_Dish.cpp']]], - ['kdishrptspaceticks_1284',['kDishRptSpaceTicks',['../ir__Dish_8cpp.html#a801af68fd07720f74abcf2712e3228dd',1,'ir_Dish.cpp']]], - ['kdishtick_1285',['kDishTick',['../ir__Dish_8cpp.html#aa1eccae3b18a457c7cec248d483e808a',1,'ir_Dish.cpp']]], - ['kdishzerospace_1286',['kDishZeroSpace',['../ir__Dish_8cpp.html#acde5c5a789af871f7b5aacdf3f0efeb7',1,'ir_Dish.cpp']]], - ['kdishzerospaceticks_1287',['kDishZeroSpaceTicks',['../ir__Dish_8cpp.html#a68a0f2b9e2e457c8a58fa533e0ca5336',1,'ir_Dish.cpp']]], - ['kdisplaytempstr_1288',['kDisplayTempStr',['../IRtext_8cpp.html#a018814e961b4eb51b91680db3be7d17c',1,'kDisplayTempStr(): IRtext.cpp'],['../IRtext_8h.html#a98f3ba92617c82c9091f155eebcdb3f3',1,'kDisplayTempStr(): IRtext.cpp']]], - ['kdoshishabitmark_1289',['kDoshishaBitMark',['../ir__Doshisha_8cpp.html#a50a4feaff92c4a9fbba6128638fdb2fb',1,'ir_Doshisha.cpp']]], - ['kdoshishabits_1290',['kDoshishaBits',['../IRremoteESP8266_8h.html#aedc53534cf6a40144be80abeee498362',1,'IRremoteESP8266.h']]], - ['kdoshishahdrmark_1291',['kDoshishaHdrMark',['../ir__Doshisha_8cpp.html#adbfc15a1abb62540538afc9c645c1875',1,'ir_Doshisha.cpp']]], - ['kdoshishahdrspace_1292',['kDoshishaHdrSpace',['../ir__Doshisha_8cpp.html#a95a58b09fde0ee9ba59fcf838d16f736',1,'ir_Doshisha.cpp']]], - ['kdoshishaonespace_1293',['kDoshishaOneSpace',['../ir__Doshisha_8cpp.html#a48f3b70ddd3bc06c628ebe7ce29e74d3',1,'ir_Doshisha.cpp']]], - ['kdoshishazerospace_1294',['kDoshishaZeroSpace',['../ir__Doshisha_8cpp.html#a055ae27320600bc7e100ea7e147775f9',1,'ir_Doshisha.cpp']]], - ['kdownstr_1295',['kDownStr',['../IRtext_8cpp.html#a24998688cbbe54780843983394e925e5',1,'kDownStr(): IRtext.cpp'],['../IRtext_8h.html#a1f452a2ac1a2b89b9c71cf64c177f6bd',1,'kDownStr(): IRtext.cpp']]], - ['kdry_1296',['kDry',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa0d254f21cc940f41cf7cc1c8ff46ce1f',1,'stdAc']]], - ['kdrystr_1297',['kDryStr',['../IRtext_8cpp.html#a149780a7bbdd13757ee4336c281ccd9d',1,'kDryStr(): IRtext.cpp'],['../IRtext_8h.html#aa0f25fa3aa8d26f4635c38e563a974f5',1,'kDryStr(): IRtext.cpp']]], - ['kdutydefault_1298',['kDutyDefault',['../IRsend_8h.html#affa33c170fe058b783372852fca7cc5b',1,'IRsend.h']]], - ['kdutymax_1299',['kDutyMax',['../IRsend_8h.html#ac076e3f79a3d8d2dae9fc248a6f571e2',1,'IRsend.h']]], - ['kecoclimauto_1300',['kEcoclimAuto',['../ir__Ecoclim_8h.html#ae9de485f87949561850847b66ac81e47',1,'ir_Ecoclim.h']]], - ['kecoclimbitmark_1301',['kEcoclimBitMark',['../ir__Ecoclim_8cpp.html#ad03f638e01d2fdce86fe9a89f3f8dab2',1,'ir_Ecoclim.cpp']]], - ['kecoclimbits_1302',['kEcoclimBits',['../IRremoteESP8266_8h.html#accd38d1019bde991e9a887f853f295d0',1,'IRremoteESP8266.h']]], - ['kecoclimcool_1303',['kEcoclimCool',['../ir__Ecoclim_8h.html#ad6adc2787f3c3bf0116994d0966cfe20',1,'ir_Ecoclim.h']]], - ['kecoclimdefaultstate_1304',['kEcoclimDefaultState',['../ir__Ecoclim_8h.html#a7bf25176d3b9648e53c7a04334878d90',1,'ir_Ecoclim.h']]], - ['kecoclimdipmaster_1305',['kEcoclimDipMaster',['../ir__Ecoclim_8h.html#a69ebcc54bc7c25ce02557b7274a97641',1,'ir_Ecoclim.h']]], - ['kecoclimdipslave_1306',['kEcoclimDipSlave',['../ir__Ecoclim_8h.html#a118d61dbd264ffee7536e987dbf027df',1,'ir_Ecoclim.h']]], - ['kecoclimdry_1307',['kEcoclimDry',['../ir__Ecoclim_8h.html#a4533dbeddf89b4a95eb808e6284eb2af',1,'ir_Ecoclim.h']]], - ['kecoclimextratolerance_1308',['kEcoclimExtraTolerance',['../ir__Ecoclim_8cpp.html#a2b6fe32f39ac739d6dc0cbbd17dcf2af',1,'ir_Ecoclim.cpp']]], - ['kecoclimfan_1309',['kEcoclimFan',['../ir__Ecoclim_8h.html#aac7d10152a70e17e9338e61f477faa68',1,'ir_Ecoclim.h']]], - ['kecoclimfanauto_1310',['kEcoclimFanAuto',['../ir__Ecoclim_8h.html#a0675f3a9fa7a4308ca4cbee9b70c91b4',1,'ir_Ecoclim.h']]], - ['kecoclimfanmax_1311',['kEcoclimFanMax',['../ir__Ecoclim_8h.html#a1653fffcdcfdad604304f30c3e01969b',1,'ir_Ecoclim.h']]], - ['kecoclimfanmed_1312',['kEcoclimFanMed',['../ir__Ecoclim_8h.html#a6cb9ba6ffc6db3bb1a76a46d08e9a3e1',1,'ir_Ecoclim.h']]], - ['kecoclimfanmin_1313',['kEcoclimFanMin',['../ir__Ecoclim_8h.html#a2e6a1af18f73cefe4f1549b60c7a2199',1,'ir_Ecoclim.h']]], - ['kecoclimfootermark_1314',['kEcoclimFooterMark',['../ir__Ecoclim_8cpp.html#a911b6a39dd4e76eb7a5dc6945dad0f83',1,'ir_Ecoclim.cpp']]], - ['kecoclimgap_1315',['kEcoclimGap',['../ir__Ecoclim_8cpp.html#a95241311f503991fd423d224df9caa8e',1,'ir_Ecoclim.cpp']]], - ['kecoclimhdrmark_1316',['kEcoclimHdrMark',['../ir__Ecoclim_8cpp.html#af1cadad08d1adb19ae89ec05731a18e1',1,'ir_Ecoclim.cpp']]], - ['kecoclimhdrspace_1317',['kEcoclimHdrSpace',['../ir__Ecoclim_8cpp.html#a13d0809cbb678d064f411fb00633e5ed',1,'ir_Ecoclim.cpp']]], - ['kecoclimheat_1318',['kEcoclimHeat',['../ir__Ecoclim_8h.html#a38c275b9ee8e0a3c409190aefb1e06a3',1,'ir_Ecoclim.h']]], - ['kecoclimonespace_1319',['kEcoclimOneSpace',['../ir__Ecoclim_8cpp.html#a31fe81e18ee98b39c380b4687860fd7a',1,'ir_Ecoclim.cpp']]], - ['kecoclimrecycle_1320',['kEcoclimRecycle',['../ir__Ecoclim_8h.html#abb1183a1acbe1b3257dbf05cc72380f3',1,'ir_Ecoclim.h']]], - ['kecoclimsections_1321',['kEcoclimSections',['../ir__Ecoclim_8cpp.html#a94df888067ef8ddfac32741199631964',1,'ir_Ecoclim.cpp']]], - ['kecoclimshortbits_1322',['kEcoclimShortBits',['../IRremoteESP8266_8h.html#aff612cce1271e3254664c2efc7a2a9d5',1,'IRremoteESP8266.h']]], - ['kecoclimsleep_1323',['kEcoclimSleep',['../ir__Ecoclim_8h.html#adaeffa57c2e26d64e8afde8e296212dc',1,'ir_Ecoclim.h']]], - ['kecoclimtempmax_1324',['kEcoclimTempMax',['../ir__Ecoclim_8h.html#a748f159701406c4d149ec10765423acb',1,'ir_Ecoclim.h']]], - ['kecoclimtempmin_1325',['kEcoclimTempMin',['../ir__Ecoclim_8h.html#a52a5e38c10e8aa1fa350ea1d71180a15',1,'ir_Ecoclim.h']]], - ['kecoclimtimerdisable_1326',['kEcoclimTimerDisable',['../ir__Ecoclim_8h.html#ab271e282eeb7486f4fabfdc14368e161',1,'ir_Ecoclim.h']]], - ['kecoclimzerospace_1327',['kEcoclimZeroSpace',['../ir__Ecoclim_8cpp.html#a5c8f6e7dd7f1bb97124852ec4c274683',1,'ir_Ecoclim.cpp']]], - ['keconostr_1328',['kEconoStr',['../IRtext_8cpp.html#a4e3bee67564fe8f13d1d4f997924f464',1,'kEconoStr(): IRtext.cpp'],['../IRtext_8h.html#ab0b71c4429416a581a393f07e898bade',1,'kEconoStr(): IRtext.cpp']]], - ['keconotogglestr_1329',['kEconoToggleStr',['../IRtext_8cpp.html#abd6fd4c918a7911bfa223cd87e6f3d32',1,'kEconoToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a03bbafdddd086cacd34dca1a32d540f6',1,'kEconoToggleStr(): IRtext.cpp']]], - ['kelectraacauto_1330',['kElectraAcAuto',['../ir__Electra_8h.html#a536965f5003a474d68860005883afb5a',1,'ir_Electra.h']]], - ['kelectraacbitmark_1331',['kElectraAcBitMark',['../ir__Electra_8cpp.html#a41f7254b061b099b8131ec4d2a775116',1,'ir_Electra.cpp']]], - ['kelectraacbits_1332',['kElectraAcBits',['../IRremoteESP8266_8h.html#aa46876681f26ccf39c6d341fef041a16',1,'IRremoteESP8266.h']]], - ['kelectraaccool_1333',['kElectraAcCool',['../ir__Electra_8h.html#a6a37f4e24aad54a982994599a1bca59d',1,'ir_Electra.h']]], - ['kelectraacdry_1334',['kElectraAcDry',['../ir__Electra_8h.html#a9b8636631c22e003072bf84a9e30ddff',1,'ir_Electra.h']]], - ['kelectraacfan_1335',['kElectraAcFan',['../ir__Electra_8h.html#a28047c7d083d8bc9d9e34ab210c28185',1,'ir_Electra.h']]], - ['kelectraacfanauto_1336',['kElectraAcFanAuto',['../ir__Electra_8h.html#a48b3067393d4dc1e3461db4535212bff',1,'ir_Electra.h']]], - ['kelectraacfanhigh_1337',['kElectraAcFanHigh',['../ir__Electra_8h.html#a5cbf3118669f056f377b4625e8e97d8c',1,'ir_Electra.h']]], - ['kelectraacfanlow_1338',['kElectraAcFanLow',['../ir__Electra_8h.html#a9a5663e86cb766a4e4579d1b81473c44',1,'ir_Electra.h']]], - ['kelectraacfanmed_1339',['kElectraAcFanMed',['../ir__Electra_8h.html#a4e906bcb7aa6c0fc5c71bd06c43c3993',1,'ir_Electra.h']]], - ['kelectraachdrmark_1340',['kElectraAcHdrMark',['../ir__Electra_8cpp.html#a1200826684547765f1e526f362408e2e',1,'ir_Electra.cpp']]], - ['kelectraachdrspace_1341',['kElectraAcHdrSpace',['../ir__Electra_8cpp.html#a28cd57057c52b0def3683e71ee92c5d3',1,'ir_Electra.cpp']]], - ['kelectraacheat_1342',['kElectraAcHeat',['../ir__Electra_8h.html#af764a4738f146b752b8e29357af257e3',1,'ir_Electra.h']]], - ['kelectraaclighttogglemask_1343',['kElectraAcLightToggleMask',['../ir__Electra_8h.html#aa51ccef46052dd988ac1bccc4f2303f6',1,'ir_Electra.h']]], - ['kelectraaclighttoggleoff_1344',['kElectraAcLightToggleOff',['../ir__Electra_8h.html#ae98c4a00f003cc98c253b9367226c5c5',1,'ir_Electra.h']]], - ['kelectraaclighttoggleon_1345',['kElectraAcLightToggleOn',['../ir__Electra_8h.html#aa9ca231e98b7e529b081c3aaa1876df9',1,'ir_Electra.h']]], - ['kelectraacmaxtemp_1346',['kElectraAcMaxTemp',['../ir__Electra_8h.html#a3962ca1ae42f006baa1181683cbcbf86',1,'ir_Electra.h']]], - ['kelectraacmessagegap_1347',['kElectraAcMessageGap',['../ir__Electra_8cpp.html#adbcde2296ebf6ea93c7c95ce6d0b264e',1,'ir_Electra.cpp']]], - ['kelectraacminrepeat_1348',['kElectraAcMinRepeat',['../IRremoteESP8266_8h.html#a2ca237d578ca9a59aecac9813ab851ba',1,'IRremoteESP8266.h']]], - ['kelectraacmintemp_1349',['kElectraAcMinTemp',['../ir__Electra_8h.html#ad6f62477d70b59c958ba347c228f8e2b',1,'ir_Electra.h']]], - ['kelectraaconespace_1350',['kElectraAcOneSpace',['../ir__Electra_8cpp.html#aeb59d520635a93f5dd7acdbe4327174d',1,'ir_Electra.cpp']]], - ['kelectraacstatelength_1351',['kElectraAcStateLength',['../IRremoteESP8266_8h.html#a8fb8c5778feaa94114218c36e8e43641',1,'IRremoteESP8266.h']]], - ['kelectraacswingoff_1352',['kElectraAcSwingOff',['../ir__Electra_8h.html#ade2211d0bd695daf490300db856d660a',1,'ir_Electra.h']]], - ['kelectraacswingon_1353',['kElectraAcSwingOn',['../ir__Electra_8h.html#a4ef75911d929752357d727aee339563e',1,'ir_Electra.h']]], - ['kelectraactempdelta_1354',['kElectraAcTempDelta',['../ir__Electra_8h.html#ac3310f7b0d4b9fbe22d7192465669487',1,'ir_Electra.h']]], - ['kelectraaczerospace_1355',['kElectraAcZeroSpace',['../ir__Electra_8cpp.html#a1453e0796cfe6ca169fd3c56e2595082',1,'ir_Electra.cpp']]], - ['kelitescreensbits_1356',['kEliteScreensBits',['../IRremoteESP8266_8h.html#a102ebea398ea7b155e1e5212676af6dd',1,'IRremoteESP8266.h']]], - ['kelitescreensdefaultrepeat_1357',['kEliteScreensDefaultRepeat',['../IRremoteESP8266_8h.html#a9b23f59f288fc2ab9ee171436c11b04b',1,'IRremoteESP8266.h']]], - ['kelitescreensgap_1358',['kEliteScreensGap',['../ir__EliteScreens_8cpp.html#a7023784c82a3973e638245bf774adb34',1,'ir_EliteScreens.cpp']]], - ['kelitescreensone_1359',['kEliteScreensOne',['../ir__EliteScreens_8cpp.html#a9e53ba0d824f43cc70b489b95055007f',1,'ir_EliteScreens.cpp']]], - ['kelitescreenszero_1360',['kEliteScreensZero',['../ir__EliteScreens_8cpp.html#ae2d4b6fd6aec50baa7173d302a629438',1,'ir_EliteScreens.cpp']]], - ['kelvinator_1361',['kelvinator',['../classIRac.html#a6e4d8061841a7271205f81bd8e7d6171',1,'IRac::kelvinator()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab3a52797572065c912c34c976c08c542',1,'KELVINATOR(): IRremoteESP8266.h']]], - ['kelvinatorprotocol_1362',['KelvinatorProtocol',['../unionKelvinatorProtocol.html',1,'']]], - ['kepsonbits_1363',['kEpsonBits',['../IRremoteESP8266_8h.html#a77a0ed1143f5bfec87e0c9fde5c2c425',1,'IRremoteESP8266.h']]], - ['kepsonminrepeat_1364',['kEpsonMinRepeat',['../IRremoteESP8266_8h.html#ac8738cb054de937b77269acb973c5133',1,'IRremoteESP8266.h']]], - ['keyeautostr_1365',['kEyeAutoStr',['../IRtext_8cpp.html#ab7c525442638022439c7a277e1edf694',1,'kEyeAutoStr(): IRtext.cpp'],['../IRtext_8h.html#ae1395c08682a2b858261d76b97311f4f',1,'kEyeAutoStr(): IRtext.cpp']]], - ['keyestr_1366',['kEyeStr',['../IRtext_8cpp.html#a1d8dc83e7f15aacd013509e36a49a9d8',1,'kEyeStr(): IRtext.cpp'],['../IRtext_8h.html#a84f6d62456976cc31fe6b1648182a885',1,'kEyeStr(): IRtext.cpp']]], - ['kfalsestr_1367',['kFalseStr',['../IRtext_8cpp.html#a338ee31c8fb5a1c74c0640b279051cd2',1,'kFalseStr(): IRtext.cpp'],['../IRtext_8h.html#a3dc9321c4146369e0e0794e6a4de1988',1,'kFalseStr(): IRtext.cpp']]], - ['kfan_1368',['kFan',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa03b7310c6ec7018a07ee9e3ffb95a34b',1,'stdAc']]], - ['kfanonlystr_1369',['kFanOnlyStr',['../IRtext_8cpp.html#adada7550fa28466a6db6f4544f8c7063',1,'kFanOnlyStr(): IRtext.cpp'],['../IRtext_8h.html#a220378c7b69db06362af5ad932965628',1,'kFanOnlyStr(): IRtext.cpp']]], - ['kfanstr_1370',['kFanStr',['../IRtext_8cpp.html#aaab703dfae684a786852a55c0f7f61ec',1,'kFanStr(): IRtext.cpp'],['../IRtext_8h.html#af7a0d76c40f3173a3e1367665d789300',1,'kFanStr(): IRtext.cpp']]], - ['kfaststr_1371',['kFastStr',['../IRtext_8cpp.html#ad6084cb569cd62bb1199c6ecc8ac4126',1,'kFastStr(): IRtext.cpp'],['../IRtext_8h.html#a82c26d9c7690ce001223e2a7cf8664d8',1,'kFastStr(): IRtext.cpp']]], - ['kfilterstr_1372',['kFilterStr',['../IRtext_8cpp.html#af287ead64de5dc3b1cbafe7bc945e519',1,'kFilterStr(): IRtext.cpp'],['../IRtext_8h.html#a5b3133e24c729077da411e08119033be',1,'kFilterStr(): IRtext.cpp']]], - ['kfixedstr_1373',['kFixedStr',['../IRtext_8cpp.html#ab45f91a889dae134e48c86586608bfc9',1,'kFixedStr(): IRtext.cpp'],['../IRtext_8h.html#ad9112f221a20ab498c5f133c4cea0b14',1,'kFixedStr(): IRtext.cpp']]], - ['kfnvbasis32_1374',['kFnvBasis32',['../IRrecv_8h.html#a04d9b0c909b377b36af3ece668482ca3',1,'IRrecv.h']]], - ['kfnvprime32_1375',['kFnvPrime32',['../IRrecv_8h.html#abcfcce36d3e2faef742aa3529c22f23f',1,'IRrecv.h']]], - ['kfollowstr_1376',['kFollowStr',['../IRtext_8cpp.html#a5477068666c86b3d605df8cf0240c86f',1,'kFollowStr(): IRtext.cpp'],['../IRtext_8h.html#a47a659e1c6373c4af92f4261148f695b',1,'kFollowStr(): IRtext.cpp']]], - ['kfooter_1377',['kFooter',['../IRrecv_8h.html#a5abb2b821f207ee9cf35f889f86d0ea3',1,'IRrecv.h']]], - ['kfreshstr_1378',['kFreshStr',['../IRtext_8cpp.html#ae416979803b912c932aa5eda837fc471',1,'kFreshStr(): IRtext.cpp'],['../IRtext_8h.html#adc8991e424df3ebf2f47ffc2854057f2',1,'kFreshStr(): IRtext.cpp']]], - ['kfujitsuacbitmark_1379',['kFujitsuAcBitMark',['../ir__Fujitsu_8cpp.html#a2e01906b1317da42fcc204284646e3db',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacbits_1380',['kFujitsuAcBits',['../IRremoteESP8266_8h.html#aecd63891cac014d1b7e344638086ad47',1,'IRremoteESP8266.h']]], - ['kfujitsuaccmdecono_1381',['kFujitsuAcCmdEcono',['../ir__Fujitsu_8h.html#a1e1eb4274232c43769f70b40f395a084',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdpowerful_1382',['kFujitsuAcCmdPowerful',['../ir__Fujitsu_8h.html#a69349537a37674a82b8ca630e6ca1b5a',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstayon_1383',['kFujitsuAcCmdStayOn',['../ir__Fujitsu_8h.html#acc729a2cd570761f97c63b98024c157d',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstephoriz_1384',['kFujitsuAcCmdStepHoriz',['../ir__Fujitsu_8h.html#ac67e3fa9ab8f1e1146bed1296f9a2131',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstepvert_1385',['kFujitsuAcCmdStepVert',['../ir__Fujitsu_8h.html#a5dda60d753d93089fc323bfcd9567afd',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdtoggleswinghoriz_1386',['kFujitsuAcCmdToggleSwingHoriz',['../ir__Fujitsu_8h.html#a43b5912e65a8e6d3f1c672b155135f27',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdtoggleswingvert_1387',['kFujitsuAcCmdToggleSwingVert',['../ir__Fujitsu_8h.html#a66960882cee5d109f332917fe1f8067c',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdturnoff_1388',['kFujitsuAcCmdTurnOff',['../ir__Fujitsu_8h.html#a073903b56c40d89b9999ee9b7dc48f00',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdturnon_1389',['kFujitsuAcCmdTurnOn',['../ir__Fujitsu_8h.html#a51c2abda78c7d6ced59f88acb857281e',1,'ir_Fujitsu.h']]], - ['kfujitsuacextratolerance_1390',['kFujitsuAcExtraTolerance',['../ir__Fujitsu_8cpp.html#ad89512dbc470982174d236be27caf071',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacfanauto_1391',['kFujitsuAcFanAuto',['../ir__Fujitsu_8h.html#a55bbb5a5b1760515f070d302c9fa4cbb',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanhigh_1392',['kFujitsuAcFanHigh',['../ir__Fujitsu_8h.html#a30b11ea24865a00b10468015aae77886',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanlow_1393',['kFujitsuAcFanLow',['../ir__Fujitsu_8h.html#aa0162cde862a3c02dd877a3a7933c130',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanmed_1394',['kFujitsuAcFanMed',['../ir__Fujitsu_8h.html#a0efcb8e8a6521e4788a82ff6c556b67b',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanquiet_1395',['kFujitsuAcFanQuiet',['../ir__Fujitsu_8h.html#a9abb4ec5fe9f27c6acd62273329490b6',1,'ir_Fujitsu.h']]], - ['kfujitsuachdrmark_1396',['kFujitsuAcHdrMark',['../ir__Fujitsu_8cpp.html#a96402e0aed6962a8a72cc736fa9bbc08',1,'ir_Fujitsu.cpp']]], - ['kfujitsuachdrspace_1397',['kFujitsuAcHdrSpace',['../ir__Fujitsu_8cpp.html#a655e37e172ab06dc06ca69f3c06223b2',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacmaxtemp_1398',['kFujitsuAcMaxTemp',['../ir__Fujitsu_8h.html#ac3b4c1f7a9c8aa63da0307d9b32e839e',1,'ir_Fujitsu.h']]], - ['kfujitsuacmaxtempf_1399',['kFujitsuAcMaxTempF',['../ir__Fujitsu_8h.html#ac799d71f9add0ec307f783dc93272f41',1,'ir_Fujitsu.h']]], - ['kfujitsuacminbits_1400',['kFujitsuAcMinBits',['../IRremoteESP8266_8h.html#a025caa6d0ae6becdd5ee58b5ac6ed61f',1,'IRremoteESP8266.h']]], - ['kfujitsuacmingap_1401',['kFujitsuAcMinGap',['../ir__Fujitsu_8cpp.html#a255fab3b9047b34cf6c4d42c0c82c485',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacminrepeat_1402',['kFujitsuAcMinRepeat',['../IRremoteESP8266_8h.html#a9dd52420366167afb4c8831b4ccd02fa',1,'IRremoteESP8266.h']]], - ['kfujitsuacmintemp_1403',['kFujitsuAcMinTemp',['../ir__Fujitsu_8h.html#ada381853475c2f25b9fc6536de175e8d',1,'ir_Fujitsu.h']]], - ['kfujitsuacmintempf_1404',['kFujitsuAcMinTempF',['../ir__Fujitsu_8h.html#a83abf89b7e533db047f6d178df7a0ad5',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodeauto_1405',['kFujitsuAcModeAuto',['../ir__Fujitsu_8h.html#acf0aa6d1d033c893a3acd5b8d7756a5b',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodecool_1406',['kFujitsuAcModeCool',['../ir__Fujitsu_8h.html#a782e226fadab0a256144821cacea2314',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodedry_1407',['kFujitsuAcModeDry',['../ir__Fujitsu_8h.html#ae66f2ed2e554a6befdf0377d01bce257',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodefan_1408',['kFujitsuAcModeFan',['../ir__Fujitsu_8h.html#a7cc07ec4747b5cebc50257ec02297800',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodeheat_1409',['kFujitsuAcModeHeat',['../ir__Fujitsu_8h.html#ad9b47b7419853a4cb1cf072023dac69b',1,'ir_Fujitsu.h']]], - ['kfujitsuacofftimer_1410',['kFujitsuAcOffTimer',['../ir__Fujitsu_8h.html#ad2f217a98a0062d488ffd0586dc0d011',1,'ir_Fujitsu.h']]], - ['kfujitsuaconespace_1411',['kFujitsuAcOneSpace',['../ir__Fujitsu_8cpp.html#a4f5246e6428cc701dbaa18923904713a',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacontimer_1412',['kFujitsuAcOnTimer',['../ir__Fujitsu_8h.html#abad3816a098ecc96bde57d1ff820552c',1,'ir_Fujitsu.h']]], - ['kfujitsuacsleeptimer_1413',['kFujitsuAcSleepTimer',['../ir__Fujitsu_8h.html#a53c550f5e4d63c54b6962f47d281bec6',1,'ir_Fujitsu.h']]], - ['kfujitsuacstatelength_1414',['kFujitsuAcStateLength',['../IRremoteESP8266_8h.html#ac3aa33a8386f73de0f57fc1ff7c6e7d9',1,'IRremoteESP8266.h']]], - ['kfujitsuacstatelengthshort_1415',['kFujitsuAcStateLengthShort',['../IRremoteESP8266_8h.html#a81cb09663eedbdc3888ee68438f0a5d3',1,'IRremoteESP8266.h']]], - ['kfujitsuacstoptimers_1416',['kFujitsuAcStopTimers',['../ir__Fujitsu_8h.html#a0f416a0f84e4100a702528664c9df177',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingboth_1417',['kFujitsuAcSwingBoth',['../ir__Fujitsu_8h.html#a07c5a757b0c3bbe07412813807272434',1,'ir_Fujitsu.h']]], - ['kfujitsuacswinghoriz_1418',['kFujitsuAcSwingHoriz',['../ir__Fujitsu_8h.html#a8875f62d61afb8cbf468207aedcb8982',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingoff_1419',['kFujitsuAcSwingOff',['../ir__Fujitsu_8h.html#a7f8109a1b8fd13a93d6b0255d05413df',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingvert_1420',['kFujitsuAcSwingVert',['../ir__Fujitsu_8h.html#a5c532a43ab11bf7cb353de2081260f40',1,'ir_Fujitsu.h']]], - ['kfujitsuactempoffsetc_1421',['kFujitsuAcTempOffsetC',['../ir__Fujitsu_8h.html#a84f16db63e1d1a47a4e41874d6c9c397',1,'ir_Fujitsu.h']]], - ['kfujitsuactempoffsetf_1422',['kFujitsuAcTempOffsetF',['../ir__Fujitsu_8h.html#a9530a57830aa1e45efe0368928a02a8b',1,'ir_Fujitsu.h']]], - ['kfujitsuactimermax_1423',['kFujitsuAcTimerMax',['../ir__Fujitsu_8h.html#adaec1744905feeb18af4ebe9ea2f6aae',1,'ir_Fujitsu.h']]], - ['kfujitsuaczerospace_1424',['kFujitsuAcZeroSpace',['../ir__Fujitsu_8cpp.html#a3815b89a2037cd0c8d774217df603d6e',1,'ir_Fujitsu.cpp']]], - ['kgicablebitmark_1425',['kGicableBitMark',['../ir__GICable_8cpp.html#ac315be0b5e02fb4c7109a6f67c4fac8e',1,'ir_GICable.cpp']]], - ['kgicablebits_1426',['kGicableBits',['../IRremoteESP8266_8h.html#aceb5cbd7ba5d8bc11560ba29137b10fa',1,'IRremoteESP8266.h']]], - ['kgicablehdrmark_1427',['kGicableHdrMark',['../ir__GICable_8cpp.html#a0388e7a2030246928029ed1c79ba819d',1,'ir_GICable.cpp']]], - ['kgicablehdrspace_1428',['kGicableHdrSpace',['../ir__GICable_8cpp.html#ab357b0a095155eab6206245008387fc0',1,'ir_GICable.cpp']]], - ['kgicablemincommandlength_1429',['kGicableMinCommandLength',['../ir__GICable_8cpp.html#a79db5de95ff6b42259f0a54fa59f46f6',1,'ir_GICable.cpp']]], - ['kgicablemingap_1430',['kGicableMinGap',['../ir__GICable_8cpp.html#aff7027ab4b933e4a7f5506590c25f699',1,'ir_GICable.cpp']]], - ['kgicableminrepeat_1431',['kGicableMinRepeat',['../IRremoteESP8266_8h.html#ad8142649290db6fc337ac839d4078aef',1,'IRremoteESP8266.h']]], - ['kgicableonespace_1432',['kGicableOneSpace',['../ir__GICable_8cpp.html#a31300a6f41363cbc22d40f26e693b8be',1,'ir_GICable.cpp']]], - ['kgicablerptspace_1433',['kGicableRptSpace',['../ir__GICable_8cpp.html#a9e0d82ed05e210dec2980a7d1a2e081b',1,'ir_GICable.cpp']]], - ['kgicablezerospace_1434',['kGicableZeroSpace',['../ir__GICable_8cpp.html#a1383f274e701ad5c8141beb7703783ff',1,'ir_GICable.cpp']]], - ['kglobalcachefreqindex_1435',['kGlobalCacheFreqIndex',['../ir__GlobalCache_8cpp.html#aaa0bdfe1eb76e8519a111b6588a5a3ff',1,'ir_GlobalCache.cpp']]], - ['kglobalcachemaxrepeat_1436',['kGlobalCacheMaxRepeat',['../ir__GlobalCache_8cpp.html#ae4a19c45ab538e8a386769cd98943a0d',1,'ir_GlobalCache.cpp']]], - ['kglobalcacheminusec_1437',['kGlobalCacheMinUsec',['../ir__GlobalCache_8cpp.html#a133cf089a7b40516fac3b1143981b2a6',1,'ir_GlobalCache.cpp']]], - ['kglobalcacherptindex_1438',['kGlobalCacheRptIndex',['../ir__GlobalCache_8cpp.html#ad4d55ed7e89cfc6d513dae6ecb211fe9',1,'ir_GlobalCache.cpp']]], - ['kglobalcacherptstartindex_1439',['kGlobalCacheRptStartIndex',['../ir__GlobalCache_8cpp.html#afde4c65e9e75558df6ac7aa479bf507a',1,'ir_GlobalCache.cpp']]], - ['kglobalcachestartindex_1440',['kGlobalCacheStartIndex',['../ir__GlobalCache_8cpp.html#a8640be7a67ce3f49452b28bc24912637',1,'ir_GlobalCache.cpp']]], - ['kgoodweatherauto_1441',['kGoodweatherAuto',['../ir__Goodweather_8h.html#a2fc5f0f7d0f68dcff193548830f50528',1,'ir_Goodweather.h']]], - ['kgoodweatherbitmark_1442',['kGoodweatherBitMark',['../ir__Goodweather_8h.html#acb9fb47b2a207997fda0244d1bafbe89',1,'ir_Goodweather.h']]], - ['kgoodweatherbits_1443',['kGoodweatherBits',['../IRremoteESP8266_8h.html#afa2675ce42d00175ec95caa6cd87a425',1,'IRremoteESP8266.h']]], - ['kgoodweathercmdairflow_1444',['kGoodweatherCmdAirFlow',['../ir__Goodweather_8h.html#aa51248353573abd95af37e46f0a2c4a7',1,'ir_Goodweather.h']]], - ['kgoodweathercmddowntemp_1445',['kGoodweatherCmdDownTemp',['../ir__Goodweather_8h.html#a8a0b72bf745b6003fb460a3c917eecff',1,'ir_Goodweather.h']]], - ['kgoodweathercmdfan_1446',['kGoodweatherCmdFan',['../ir__Goodweather_8h.html#a4a0881f87af157fdf9ed3d9f342f1ac5',1,'ir_Goodweather.h']]], - ['kgoodweathercmdhold_1447',['kGoodweatherCmdHold',['../ir__Goodweather_8h.html#ac0f3b1413228cb7e86822c5690f20344',1,'ir_Goodweather.h']]], - ['kgoodweathercmdlight_1448',['kGoodweatherCmdLight',['../ir__Goodweather_8h.html#ae70c4e66b17db9caf4800eb57a50706f',1,'ir_Goodweather.h']]], - ['kgoodweathercmdmode_1449',['kGoodweatherCmdMode',['../ir__Goodweather_8h.html#a6042296931ab29e9dfa5a701f3e42175',1,'ir_Goodweather.h']]], - ['kgoodweathercmdpower_1450',['kGoodweatherCmdPower',['../ir__Goodweather_8h.html#a3f1bf85bb10343512bb276adfc64b3b2',1,'ir_Goodweather.h']]], - ['kgoodweathercmdsleep_1451',['kGoodweatherCmdSleep',['../ir__Goodweather_8h.html#a3f4d72b620c73aec68c2125430ca709d',1,'ir_Goodweather.h']]], - ['kgoodweathercmdswing_1452',['kGoodweatherCmdSwing',['../ir__Goodweather_8h.html#ab4ceedbe859811a9fb394f6ebf233cb5',1,'ir_Goodweather.h']]], - ['kgoodweathercmdtimer_1453',['kGoodweatherCmdTimer',['../ir__Goodweather_8h.html#ad4d247ea6c9fc237e0acda84fdaa2eb6',1,'ir_Goodweather.h']]], - ['kgoodweathercmdturbo_1454',['kGoodweatherCmdTurbo',['../ir__Goodweather_8h.html#aebc6d53b3e7d1769bff47968c19c09c9',1,'ir_Goodweather.h']]], - ['kgoodweathercmduptemp_1455',['kGoodweatherCmdUpTemp',['../ir__Goodweather_8h.html#a51a089b03bd72a247a4c35c2ff3f3dc6',1,'ir_Goodweather.h']]], - ['kgoodweathercool_1456',['kGoodweatherCool',['../ir__Goodweather_8h.html#a92c807d6ff8a3356e65f04e82b99aba4',1,'ir_Goodweather.h']]], - ['kgoodweatherdry_1457',['kGoodweatherDry',['../ir__Goodweather_8h.html#ac5174a3e2c64361c25adcf7caa5b714c',1,'ir_Goodweather.h']]], - ['kgoodweatherextratolerance_1458',['kGoodweatherExtraTolerance',['../ir__Goodweather_8h.html#aae814dfbd574241d3b434d0bf2d38939',1,'ir_Goodweather.h']]], - ['kgoodweatherfan_1459',['kGoodweatherFan',['../ir__Goodweather_8h.html#ad56f00c7e39df93d28419d6a4afa360b',1,'ir_Goodweather.h']]], - ['kgoodweatherfanauto_1460',['kGoodweatherFanAuto',['../ir__Goodweather_8h.html#a9cc119524ac1cb93395dff3bb44b85cc',1,'ir_Goodweather.h']]], - ['kgoodweatherfanhigh_1461',['kGoodweatherFanHigh',['../ir__Goodweather_8h.html#af2b24de50923a0aabd4379dc6d3ef10f',1,'ir_Goodweather.h']]], - ['kgoodweatherfanlow_1462',['kGoodweatherFanLow',['../ir__Goodweather_8h.html#a7bc7c0cf9f2df574a7c087542991ab9b',1,'ir_Goodweather.h']]], - ['kgoodweatherfanmed_1463',['kGoodweatherFanMed',['../ir__Goodweather_8h.html#a5174245e9369a488332b32dfa416963e',1,'ir_Goodweather.h']]], - ['kgoodweatherhdrmark_1464',['kGoodweatherHdrMark',['../ir__Goodweather_8h.html#a5c39e33226770babb4b0e89fc0cde709',1,'ir_Goodweather.h']]], - ['kgoodweatherhdrspace_1465',['kGoodweatherHdrSpace',['../ir__Goodweather_8h.html#a837bfeaa111b00e2744c4ada89281bfb',1,'ir_Goodweather.h']]], - ['kgoodweatherheat_1466',['kGoodweatherHeat',['../ir__Goodweather_8h.html#a17d223f03df2718151a426582a224a2e',1,'ir_Goodweather.h']]], - ['kgoodweatherminrepeat_1467',['kGoodweatherMinRepeat',['../IRremoteESP8266_8h.html#a885bc5a3a5ba2d8827a62d07a43d0321',1,'IRremoteESP8266.h']]], - ['kgoodweatheronespace_1468',['kGoodweatherOneSpace',['../ir__Goodweather_8h.html#a8efa251085a8f434cb91c049e65cda56',1,'ir_Goodweather.h']]], - ['kgoodweatherstateinit_1469',['kGoodweatherStateInit',['../ir__Goodweather_8h.html#a5ec0e7ca097241d6bef0cbf2135c8fca',1,'ir_Goodweather.h']]], - ['kgoodweatherswingfast_1470',['kGoodweatherSwingFast',['../ir__Goodweather_8h.html#a2d2fa76fa35cf7d450aaf0b980660514',1,'ir_Goodweather.h']]], - ['kgoodweatherswingoff_1471',['kGoodweatherSwingOff',['../ir__Goodweather_8h.html#aa2c53f56daa2820351924d91b542bb67',1,'ir_Goodweather.h']]], - ['kgoodweatherswingslow_1472',['kGoodweatherSwingSlow',['../ir__Goodweather_8h.html#ad2c87d849af2c77088ffc533d279aadb',1,'ir_Goodweather.h']]], - ['kgoodweathertempmax_1473',['kGoodweatherTempMax',['../ir__Goodweather_8h.html#abec401548ce2221a9c668318a33a039c',1,'ir_Goodweather.h']]], - ['kgoodweathertempmin_1474',['kGoodweatherTempMin',['../ir__Goodweather_8h.html#a8e76c0ec1bd5e124d9cee5742a2d1cfe',1,'ir_Goodweather.h']]], - ['kgoodweatherzerospace_1475',['kGoodweatherZeroSpace',['../ir__Goodweather_8h.html#a411cbfb812d102daeaf6a83c742f9a9a',1,'ir_Goodweather.h']]], - ['kgpiounused_1476',['kGpioUnused',['../IRac_8h.html#afd817f0bc02c516b6430098dcecde383',1,'IRac.h']]], - ['kgreeauto_1477',['kGreeAuto',['../ir__Gree_8h.html#a65d2d0192a1baff86b859da1018ef2f8',1,'ir_Gree.h']]], - ['kgreebitmark_1478',['kGreeBitMark',['../ir__Gree_8cpp.html#ad7e23346f6d793cc2469e4c8a5650397',1,'ir_Gree.cpp']]], - ['kgreebits_1479',['kGreeBits',['../IRremoteESP8266_8h.html#acadcc5d03e09784642f008d4d2913c7d',1,'IRremoteESP8266.h']]], - ['kgreeblockfooter_1480',['kGreeBlockFooter',['../ir__Gree_8cpp.html#ae6d01cfa7ee2ef6ff27c1ecd7cd9be51',1,'ir_Gree.cpp']]], - ['kgreeblockfooterbits_1481',['kGreeBlockFooterBits',['../ir__Gree_8cpp.html#ae866eef4c729c703597a266917799cbd',1,'ir_Gree.cpp']]], - ['kgreecool_1482',['kGreeCool',['../ir__Gree_8h.html#a1e1eeab696b43864cec66e6485487cea',1,'ir_Gree.h']]], - ['kgreedefaultrepeat_1483',['kGreeDefaultRepeat',['../IRremoteESP8266_8h.html#a6816d2cb11b99a61fb63e6d0928e6706',1,'IRremoteESP8266.h']]], - ['kgreedisplaytempinside_1484',['kGreeDisplayTempInside',['../ir__Gree_8h.html#a7495e5873f63135490090929ed79e994',1,'ir_Gree.h']]], - ['kgreedisplaytempoff_1485',['kGreeDisplayTempOff',['../ir__Gree_8h.html#aa5881910d1c01b816f3ac22ddf0f89a8',1,'ir_Gree.h']]], - ['kgreedisplaytempoutside_1486',['kGreeDisplayTempOutside',['../ir__Gree_8h.html#a737c90e90897053623b15b5579cdb6a1',1,'ir_Gree.h']]], - ['kgreedisplaytempset_1487',['kGreeDisplayTempSet',['../ir__Gree_8h.html#a20f7d0948b158f83655ee4187a104176',1,'ir_Gree.h']]], - ['kgreedry_1488',['kGreeDry',['../ir__Gree_8h.html#aa818bcc036988ee24fe0467d128d174f',1,'ir_Gree.h']]], - ['kgreefan_1489',['kGreeFan',['../ir__Gree_8h.html#aa1513ffe43257664f761e4e1a5c2a38f',1,'ir_Gree.h']]], - ['kgreefanauto_1490',['kGreeFanAuto',['../ir__Gree_8h.html#aaad16357e34078257315aad7155b2cd1',1,'ir_Gree.h']]], - ['kgreefanmax_1491',['kGreeFanMax',['../ir__Gree_8h.html#a8753f860f2f503a4a70609fb000654f2',1,'ir_Gree.h']]], - ['kgreefanmed_1492',['kGreeFanMed',['../ir__Gree_8h.html#a674d096a91a5db4b5b7f1b0650c833de',1,'ir_Gree.h']]], - ['kgreefanmin_1493',['kGreeFanMin',['../ir__Gree_8h.html#a34ca09b196c41acc85a4fa0036f3ac3b',1,'ir_Gree.h']]], - ['kgreehdrmark_1494',['kGreeHdrMark',['../ir__Gree_8cpp.html#aaae182fb09bed73e37a5b5d3aee6a5fb',1,'ir_Gree.cpp']]], - ['kgreehdrspace_1495',['kGreeHdrSpace',['../ir__Gree_8cpp.html#a96b50632219c2b5808aea4ee9077b15c',1,'ir_Gree.cpp']]], - ['kgreeheat_1496',['kGreeHeat',['../ir__Gree_8h.html#ada5dac7b789497bf7a434a809d4070f6',1,'ir_Gree.h']]], - ['kgreemaxtempc_1497',['kGreeMaxTempC',['../ir__Gree_8h.html#a4c01aedfff06ed5a028c40010ad7bfa0',1,'ir_Gree.h']]], - ['kgreemaxtempf_1498',['kGreeMaxTempF',['../ir__Gree_8h.html#a6495898a7a6ddda1473b55820f4b6c44',1,'ir_Gree.h']]], - ['kgreemintempc_1499',['kGreeMinTempC',['../ir__Gree_8h.html#ad127acfc710e281a7b29023c8d1da8f6',1,'ir_Gree.h']]], - ['kgreemintempf_1500',['kGreeMinTempF',['../ir__Gree_8h.html#acf0ecb1b535894e3e790b668333fb66b',1,'ir_Gree.h']]], - ['kgreemsgspace_1501',['kGreeMsgSpace',['../ir__Gree_8cpp.html#a619ed3a2915196ab91d87db2b5a829fd',1,'ir_Gree.cpp']]], - ['kgreeonespace_1502',['kGreeOneSpace',['../ir__Gree_8cpp.html#ab139138084643ea0fca13b28412904e9',1,'ir_Gree.cpp']]], - ['kgreestatelength_1503',['kGreeStateLength',['../IRremoteESP8266_8h.html#a5558b24542873d8475e1ee0e2439839f',1,'IRremoteESP8266.h']]], - ['kgreeswingauto_1504',['kGreeSwingAuto',['../ir__Gree_8h.html#a414a503ad11c1d1d3b68d8b630df1f3a',1,'ir_Gree.h']]], - ['kgreeswingdown_1505',['kGreeSwingDown',['../ir__Gree_8h.html#abbe69b966ceb1f9eb60fe9c3fb18088d',1,'ir_Gree.h']]], - ['kgreeswingdownauto_1506',['kGreeSwingDownAuto',['../ir__Gree_8h.html#abc7d7b7de5dd2eb9c0a6ca28827aeb06',1,'ir_Gree.h']]], - ['kgreeswinglastpos_1507',['kGreeSwingLastPos',['../ir__Gree_8h.html#a630cd8fec01f13bfda0fffc1a0e59199',1,'ir_Gree.h']]], - ['kgreeswingmiddle_1508',['kGreeSwingMiddle',['../ir__Gree_8h.html#a12a7caa871f33a5bb83611b4efc7a42b',1,'ir_Gree.h']]], - ['kgreeswingmiddleauto_1509',['kGreeSwingMiddleAuto',['../ir__Gree_8h.html#ac9f85ef5c1bfeac1e4c759742e2d147f',1,'ir_Gree.h']]], - ['kgreeswingmiddledown_1510',['kGreeSwingMiddleDown',['../ir__Gree_8h.html#acad74b8154d73786e093fa215ab800b0',1,'ir_Gree.h']]], - ['kgreeswingmiddleup_1511',['kGreeSwingMiddleUp',['../ir__Gree_8h.html#aefbdd203df5b35eb61be1d0edd712c80',1,'ir_Gree.h']]], - ['kgreeswingup_1512',['kGreeSwingUp',['../ir__Gree_8h.html#adad431eb1010951fcf77dc4dac6449c6',1,'ir_Gree.h']]], - ['kgreeswingupauto_1513',['kGreeSwingUpAuto',['../ir__Gree_8h.html#a63f04add215785d4ccfe6ccec03d7667',1,'ir_Gree.h']]], - ['kgreetimermax_1514',['kGreeTimerMax',['../ir__Gree_8h.html#a76048e03908dd0d22cc8cacfbd99a40b',1,'ir_Gree.h']]], - ['kgreezerospace_1515',['kGreeZeroSpace',['../ir__Gree_8cpp.html#aa4694ba8ff0e14cd6b9c4730675c385f',1,'ir_Gree.cpp']]], - ['khaieracauto_1516',['kHaierAcAuto',['../ir__Haier_8h.html#ac33a02f63ee77e0d3050598511730865',1,'ir_Haier.h']]], - ['khaieracbitmark_1517',['kHaierAcBitMark',['../ir__Haier_8cpp.html#a4dec38325834c873c03588a8046f0963',1,'ir_Haier.cpp']]], - ['khaieracbits_1518',['kHaierACBits',['../IRremoteESP8266_8h.html#ad44cfa0951c24d1f0c67b2fba997f720',1,'IRremoteESP8266.h']]], - ['khaieraccmdfan_1519',['kHaierAcCmdFan',['../ir__Haier_8h.html#a447818ec7970e2ca09540afe44ecf90d',1,'ir_Haier.h']]], - ['khaieraccmdhealth_1520',['kHaierAcCmdHealth',['../ir__Haier_8h.html#a83cd0b5f307d9ae3ed0a3c6ed8fef94d',1,'ir_Haier.h']]], - ['khaieraccmdmode_1521',['kHaierAcCmdMode',['../ir__Haier_8h.html#a4543aa4ee28323bb9cb5c077f9bf9da1',1,'ir_Haier.h']]], - ['khaieraccmdoff_1522',['kHaierAcCmdOff',['../ir__Haier_8h.html#a96599917176ee244874926d1a530dd7e',1,'ir_Haier.h']]], - ['khaieraccmdon_1523',['kHaierAcCmdOn',['../ir__Haier_8h.html#a83973c2ad2b7b95611c81628c387e0d8',1,'ir_Haier.h']]], - ['khaieraccmdsleep_1524',['kHaierAcCmdSleep',['../ir__Haier_8h.html#abe52b62dd513395f2a8c7d47fa2fc514',1,'ir_Haier.h']]], - ['khaieraccmdswing_1525',['kHaierAcCmdSwing',['../ir__Haier_8h.html#afab164c2aabf39fdc1e956ff88af19d9',1,'ir_Haier.h']]], - ['khaieraccmdtempdown_1526',['kHaierAcCmdTempDown',['../ir__Haier_8h.html#aecc31139b4e45a7784669554c6fdbb54',1,'ir_Haier.h']]], - ['khaieraccmdtempup_1527',['kHaierAcCmdTempUp',['../ir__Haier_8h.html#aab5363f07920971c31d6acf8e70d392c',1,'ir_Haier.h']]], - ['khaieraccmdtimercancel_1528',['kHaierAcCmdTimerCancel',['../ir__Haier_8h.html#ab780da80fc471f004c5b34dc8f347d00',1,'ir_Haier.h']]], - ['khaieraccmdtimerset_1529',['kHaierAcCmdTimerSet',['../ir__Haier_8h.html#a9bd7c081d460a4ae5e3eac977f3916e4',1,'ir_Haier.h']]], - ['khaieraccool_1530',['kHaierAcCool',['../ir__Haier_8h.html#a83cd81ea1115f42a403ea5ee07a32bbb',1,'ir_Haier.h']]], - ['khaieracdefaultrepeat_1531',['kHaierAcDefaultRepeat',['../IRremoteESP8266_8h.html#a882914932449e33933b6f8e224cbaf3c',1,'IRremoteESP8266.h']]], - ['khaieracdeftemp_1532',['kHaierAcDefTemp',['../ir__Haier_8h.html#a86c9e8176fc01e52e883cadcc1d31763',1,'ir_Haier.h']]], - ['khaieracdry_1533',['kHaierAcDry',['../ir__Haier_8h.html#a3d36fbe1308221248f45044e5a671636',1,'ir_Haier.h']]], - ['khaieracfan_1534',['kHaierAcFan',['../ir__Haier_8h.html#af4049629b2139ca82471dfed1e1ced15',1,'ir_Haier.h']]], - ['khaieracfanauto_1535',['kHaierAcFanAuto',['../ir__Haier_8h.html#a8a34e74f7083caa98ed4afc31294539e',1,'ir_Haier.h']]], - ['khaieracfanhigh_1536',['kHaierAcFanHigh',['../ir__Haier_8h.html#aa4d9e45ca5777707778ef78a3284da19',1,'ir_Haier.h']]], - ['khaieracfanlow_1537',['kHaierAcFanLow',['../ir__Haier_8h.html#ae31e878b09284a6730a11e2017cfd7a8',1,'ir_Haier.h']]], - ['khaieracfanmed_1538',['kHaierAcFanMed',['../ir__Haier_8h.html#a5dfa833768e549964aa0bf8a336c32b0',1,'ir_Haier.h']]], - ['khaierachdr_1539',['kHaierAcHdr',['../ir__Haier_8cpp.html#a0f5dbd2eb92f10bc354e6b0a7a074084',1,'ir_Haier.cpp']]], - ['khaierachdrgap_1540',['kHaierAcHdrGap',['../ir__Haier_8cpp.html#a4c3fe62f8e5abf5d084009bbd4c4f878',1,'ir_Haier.cpp']]], - ['khaieracheat_1541',['kHaierAcHeat',['../ir__Haier_8h.html#a0edb011bdf85197e63a32d37f8517dd2',1,'ir_Haier.h']]], - ['khaieracmaxtemp_1542',['kHaierAcMaxTemp',['../ir__Haier_8h.html#a925252489fe34d9932151817d0dbe90b',1,'ir_Haier.h']]], - ['khaieracmaxtime_1543',['kHaierAcMaxTime',['../ir__Haier_8h.html#ae04e48e926a7533c3b62f0ff991e1f88',1,'ir_Haier.h']]], - ['khaieracmingap_1544',['kHaierAcMinGap',['../ir__Haier_8cpp.html#a7ab1f44876a931da765b52e4633e5e82',1,'ir_Haier.cpp']]], - ['khaieracmintemp_1545',['kHaierAcMinTemp',['../ir__Haier_8h.html#aafd2a4f38ecf78482a5a94e9c6c23f1c',1,'ir_Haier.h']]], - ['khaieraconespace_1546',['kHaierAcOneSpace',['../ir__Haier_8cpp.html#a43739aa786e08fca2a4a62a680b5c38b',1,'ir_Haier.cpp']]], - ['khaieracprefix_1547',['kHaierAcPrefix',['../ir__Haier_8h.html#a8502c9bea40205e01e6a01b47354272a',1,'ir_Haier.h']]], - ['khaieracsleepbit_1548',['kHaierAcSleepBit',['../ir__Haier_8h.html#ac63b91acdffa55d440b08aee05bda5dc',1,'ir_Haier.h']]], - ['khaieracstatelength_1549',['kHaierACStateLength',['../IRremoteESP8266_8h.html#afb4cd0c1a9c689d862e7095f0ab6dbe5',1,'IRremoteESP8266.h']]], - ['khaieracswingchg_1550',['kHaierAcSwingChg',['../ir__Haier_8h.html#af65a92a0b9d29a52ac882d4457e954e8',1,'ir_Haier.h']]], - ['khaieracswingdown_1551',['kHaierAcSwingDown',['../ir__Haier_8h.html#a2cf3a2102c6d4f9aede44efe853ffaa8',1,'ir_Haier.h']]], - ['khaieracswingoff_1552',['kHaierAcSwingOff',['../ir__Haier_8h.html#ac21f78c3cef931154b3fc953bbebc3b4',1,'ir_Haier.h']]], - ['khaieracswingup_1553',['kHaierAcSwingUp',['../ir__Haier_8h.html#a4bff8829604ee927dda5cfc54bd6cfe6',1,'ir_Haier.h']]], - ['khaieracyrw02auto_1554',['kHaierAcYrw02Auto',['../ir__Haier_8h.html#aa025eeba1c344c50cc98334c97a3c174',1,'ir_Haier.h']]], - ['khaieracyrw02bits_1555',['kHaierACYRW02Bits',['../IRremoteESP8266_8h.html#aab346c5ad482113978e5a2cbb7a06f27',1,'IRremoteESP8266.h']]], - ['khaieracyrw02buttonfan_1556',['kHaierAcYrw02ButtonFan',['../ir__Haier_8h.html#a0f9c265510e1e27f38817f08ef9c622b',1,'ir_Haier.h']]], - ['khaieracyrw02buttonhealth_1557',['kHaierAcYrw02ButtonHealth',['../ir__Haier_8h.html#ab1dc6c0a4ed59446bb69c4dd671c78cd',1,'ir_Haier.h']]], - ['khaieracyrw02buttonmode_1558',['kHaierAcYrw02ButtonMode',['../ir__Haier_8h.html#a74466c50b450b08407c9f226a5d657e5',1,'ir_Haier.h']]], - ['khaieracyrw02buttonpower_1559',['kHaierAcYrw02ButtonPower',['../ir__Haier_8h.html#af36b9c628a697f6c596052ecd143d80b',1,'ir_Haier.h']]], - ['khaieracyrw02buttonsleep_1560',['kHaierAcYrw02ButtonSleep',['../ir__Haier_8h.html#a5c7b8ff351e3d0167ec2c897c4820c40',1,'ir_Haier.h']]], - ['khaieracyrw02buttonswing_1561',['kHaierAcYrw02ButtonSwing',['../ir__Haier_8h.html#aa10c558317448783535e96be5876505c',1,'ir_Haier.h']]], - ['khaieracyrw02buttontempdown_1562',['kHaierAcYrw02ButtonTempDown',['../ir__Haier_8h.html#af4a9e5f7f705c331531ea2863dbbd11d',1,'ir_Haier.h']]], - ['khaieracyrw02buttontempup_1563',['kHaierAcYrw02ButtonTempUp',['../ir__Haier_8h.html#a3b24373f9c812f93eca05ee47e61d6e0',1,'ir_Haier.h']]], - ['khaieracyrw02buttonturbo_1564',['kHaierAcYrw02ButtonTurbo',['../ir__Haier_8h.html#ad80547c526b2eba142297715c0a0636d',1,'ir_Haier.h']]], - ['khaieracyrw02cool_1565',['kHaierAcYrw02Cool',['../ir__Haier_8h.html#a30c5d4e61ae3112a8a3e3622eecbb10b',1,'ir_Haier.h']]], - ['khaieracyrw02defaultrepeat_1566',['kHaierAcYrw02DefaultRepeat',['../IRremoteESP8266_8h.html#a62412e221207dbc2660f93dc265b4218',1,'IRremoteESP8266.h']]], - ['khaieracyrw02dry_1567',['kHaierAcYrw02Dry',['../ir__Haier_8h.html#a66cd902f2d35b4c8f66f085a0950a5fc',1,'ir_Haier.h']]], - ['khaieracyrw02fan_1568',['kHaierAcYrw02Fan',['../ir__Haier_8h.html#a35f50f043a2dda75c59507c1ed845b5d',1,'ir_Haier.h']]], - ['khaieracyrw02fanauto_1569',['kHaierAcYrw02FanAuto',['../ir__Haier_8h.html#ad554d38035ac15e4ea8b855802886989',1,'ir_Haier.h']]], - ['khaieracyrw02fanhigh_1570',['kHaierAcYrw02FanHigh',['../ir__Haier_8h.html#ab47bc48ac77fbf6734a41d10f0a53e4a',1,'ir_Haier.h']]], - ['khaieracyrw02fanlow_1571',['kHaierAcYrw02FanLow',['../ir__Haier_8h.html#a9a0a14ab98e1e52b60b9b9bf611c20cc',1,'ir_Haier.h']]], - ['khaieracyrw02fanmed_1572',['kHaierAcYrw02FanMed',['../ir__Haier_8h.html#a65583649324c6039112e7db26d685afc',1,'ir_Haier.h']]], - ['khaieracyrw02heat_1573',['kHaierAcYrw02Heat',['../ir__Haier_8h.html#aa0873975b6649294a3c9943130cb7a38',1,'ir_Haier.h']]], - ['khaieracyrw02prefix_1574',['kHaierAcYrw02Prefix',['../ir__Haier_8h.html#ac62d0f7ca94e064712f8a7a80da2f11e',1,'ir_Haier.h']]], - ['khaieracyrw02statelength_1575',['kHaierACYRW02StateLength',['../IRremoteESP8266_8h.html#a8f52b7d4595c117cf0b81ffbd1148cda',1,'IRremoteESP8266.h']]], - ['khaieracyrw02swingauto_1576',['kHaierAcYrw02SwingAuto',['../ir__Haier_8h.html#a95ae88223d910d4d966949241bccff8d',1,'ir_Haier.h']]], - ['khaieracyrw02swingbottom_1577',['kHaierAcYrw02SwingBottom',['../ir__Haier_8h.html#aa4b64385da5e9b2a89e15f70cd8c89e9',1,'ir_Haier.h']]], - ['khaieracyrw02swingdown_1578',['kHaierAcYrw02SwingDown',['../ir__Haier_8h.html#aab380411ac07b2b7f67956a5bbc362fb',1,'ir_Haier.h']]], - ['khaieracyrw02swingmiddle_1579',['kHaierAcYrw02SwingMiddle',['../ir__Haier_8h.html#a32d6dd98a050711bf928bf250b769839',1,'ir_Haier.h']]], - ['khaieracyrw02swingoff_1580',['kHaierAcYrw02SwingOff',['../ir__Haier_8h.html#a62570c15418cf24a94c92b162967f892',1,'ir_Haier.h']]], - ['khaieracyrw02swingtop_1581',['kHaierAcYrw02SwingTop',['../ir__Haier_8h.html#adf10f1bc1b293c684232cb6398631f70',1,'ir_Haier.h']]], - ['khaieracyrw02turbohigh_1582',['kHaierAcYrw02TurboHigh',['../ir__Haier_8h.html#ab096c15c69f242b99fbc1e4d7bd7548e',1,'ir_Haier.h']]], - ['khaieracyrw02turbolow_1583',['kHaierAcYrw02TurboLow',['../ir__Haier_8h.html#a19b7f4aee8115eb77267c415d8b3bd82',1,'ir_Haier.h']]], - ['khaieracyrw02turbooff_1584',['kHaierAcYrw02TurboOff',['../ir__Haier_8h.html#aa06ba46287b5806a6373e921cee34a51',1,'ir_Haier.h']]], - ['khaieraczerospace_1585',['kHaierAcZeroSpace',['../ir__Haier_8cpp.html#af2b1a4f27c7b50a1e60ae00bbbec7a16',1,'ir_Haier.cpp']]], - ['kheader_1586',['kHeader',['../IRrecv_8h.html#a0eac186845b9b998a252a3bdfa72e8ed',1,'IRrecv.h']]], - ['khealthstr_1587',['kHealthStr',['../IRtext_8cpp.html#a12474bbd4a7f700c922bcc1de240894f',1,'kHealthStr(): IRtext.cpp'],['../IRtext_8h.html#a7ef833cf90df2c97ef46c5c4b6225a42',1,'kHealthStr(): IRtext.cpp']]], - ['kheat_1588',['kHeat',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444faece059b52386d38cd6da9729cca08b4e',1,'stdAc']]], - ['kheatstr_1589',['kHeatStr',['../IRtext_8cpp.html#a3a16f1dabca01c8f8e5ba1516408ba39',1,'kHeatStr(): IRtext.cpp'],['../IRtext_8h.html#a058df7d2db245e307719d025352d464d',1,'kHeatStr(): IRtext.cpp']]], - ['khigh_1590',['kHigh',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa022f15e910eb36278094efb6e808a07',1,'stdAc::kHigh()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43aa022f15e910eb36278094efb6e808a07',1,'stdAc::kHigh()']]], - ['khighest_1591',['kHighest',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a24d8e31603e486f788826bc24e3a2e1d',1,'stdAc']]], - ['khigheststr_1592',['kHighestStr',['../IRtext_8cpp.html#a219f1d54c5ea75bd5c736efc0d7d7275',1,'kHighestStr(): IRtext.cpp'],['../IRtext_8h.html#ad7706307f507466526b4288e33385bde',1,'kHighestStr(): IRtext.cpp']]], - ['khighnibble_1593',['kHighNibble',['../IRutils_8h.html#a26dd96e82207f707c21e696a60b9c032',1,'IRutils.h']]], - ['khighstr_1594',['kHighStr',['../IRtext_8cpp.html#a127a20ad54e671f48a8faa822ff006f4',1,'kHighStr(): IRtext.cpp'],['../IRtext_8h.html#a5b4ade5e08f30c5e9a61c813bb2046f1',1,'kHighStr(): IRtext.cpp']]], - ['khistr_1595',['kHiStr',['../IRtext_8cpp.html#a7f4994ce51aed70ce6b5b4c88b886466',1,'kHiStr(): IRtext.cpp'],['../IRtext_8h.html#aa6fe661cdd9e2f1dc30d6fee2980cadd',1,'kHiStr(): IRtext.cpp']]], - ['khitachiac1auto_1596',['kHitachiAc1Auto',['../ir__Hitachi_8h.html#a2689ef34702107dc3dce3d1cfa260fc9',1,'ir_Hitachi.h']]], - ['khitachiac1bits_1597',['kHitachiAc1Bits',['../IRremoteESP8266_8h.html#aae6947c431d2c9da4fe2fdd9428012c1',1,'IRremoteESP8266.h']]], - ['khitachiac1checksumstartbyte_1598',['kHitachiAc1ChecksumStartByte',['../ir__Hitachi_8h.html#afafa689c5e922b812f63e08941feb2a7',1,'ir_Hitachi.h']]], - ['khitachiac1cool_1599',['kHitachiAc1Cool',['../ir__Hitachi_8h.html#a1146eda7688843d16094acf7a19a75ac',1,'ir_Hitachi.h']]], - ['khitachiac1dry_1600',['kHitachiAc1Dry',['../ir__Hitachi_8h.html#a82895db5201610844da803bf333102a3',1,'ir_Hitachi.h']]], - ['khitachiac1fan_1601',['kHitachiAc1Fan',['../ir__Hitachi_8h.html#ac5a3ba0e0e4ed02d4792d5a8e6a22654',1,'ir_Hitachi.h']]], - ['khitachiac1fanauto_1602',['kHitachiAc1FanAuto',['../ir__Hitachi_8h.html#a6f9adda7b08ec4b8566ceb4d79966689',1,'ir_Hitachi.h']]], - ['khitachiac1fanhigh_1603',['kHitachiAc1FanHigh',['../ir__Hitachi_8h.html#ace677cf030da9d74eda0f50d54c91411',1,'ir_Hitachi.h']]], - ['khitachiac1fanlow_1604',['kHitachiAc1FanLow',['../ir__Hitachi_8h.html#a011219de5c0e2ba043a8be6345f8cb05',1,'ir_Hitachi.h']]], - ['khitachiac1fanmed_1605',['kHitachiAc1FanMed',['../ir__Hitachi_8h.html#afbc2a535d85adb80cbcbac63e2432b1a',1,'ir_Hitachi.h']]], - ['khitachiac1hdrmark_1606',['kHitachiAc1HdrMark',['../ir__Hitachi_8cpp.html#a2b1891174c78be6f960e92b389d25fe7',1,'ir_Hitachi.cpp']]], - ['khitachiac1hdrspace_1607',['kHitachiAc1HdrSpace',['../ir__Hitachi_8cpp.html#a93f34ee53a375dd7f4ccf82458453701',1,'ir_Hitachi.cpp']]], - ['khitachiac1heat_1608',['kHitachiAc1Heat',['../ir__Hitachi_8h.html#abd5d4db30d6be3b990a74d4481e7eabe',1,'ir_Hitachi.h']]], - ['khitachiac1model_5fa_1609',['kHitachiAc1Model_A',['../ir__Hitachi_8h.html#a5f8fc3bb000d46705e4530ca0a8f7b60',1,'ir_Hitachi.h']]], - ['khitachiac1model_5fb_1610',['kHitachiAc1Model_B',['../ir__Hitachi_8h.html#a2d894a528c538b8a3922e2500241a55b',1,'ir_Hitachi.h']]], - ['khitachiac1sleep1_1611',['kHitachiAc1Sleep1',['../ir__Hitachi_8h.html#ab4ca89a9d8c8034e6a3d8ff17b09f3d5',1,'ir_Hitachi.h']]], - ['khitachiac1sleep2_1612',['kHitachiAc1Sleep2',['../ir__Hitachi_8h.html#a1e1a1ea1743b38da6bc6be63fa796689',1,'ir_Hitachi.h']]], - ['khitachiac1sleep3_1613',['kHitachiAc1Sleep3',['../ir__Hitachi_8h.html#a17eaa63f13a3c04aede9f485c310a930',1,'ir_Hitachi.h']]], - ['khitachiac1sleep4_1614',['kHitachiAc1Sleep4',['../ir__Hitachi_8h.html#a21360448a538fbd9491aa9dd28e6c545',1,'ir_Hitachi.h']]], - ['khitachiac1sleepoff_1615',['kHitachiAc1SleepOff',['../ir__Hitachi_8h.html#a96f87cb3838a1e1aab4b8407dcfc5b78',1,'ir_Hitachi.h']]], - ['khitachiac1statelength_1616',['kHitachiAc1StateLength',['../IRremoteESP8266_8h.html#abb5e2ddb1a8d3c6fa7a94dbe1989ec5d',1,'IRremoteESP8266.h']]], - ['khitachiac1tempauto_1617',['kHitachiAc1TempAuto',['../ir__Hitachi_8h.html#ad402dff999a97b50b392572899522b6a',1,'ir_Hitachi.h']]], - ['khitachiac1tempdelta_1618',['kHitachiAc1TempDelta',['../ir__Hitachi_8h.html#a279c856a2b4d25651b117a8c654cb48d',1,'ir_Hitachi.h']]], - ['khitachiac1tempsize_1619',['kHitachiAc1TempSize',['../ir__Hitachi_8h.html#affb52642edc8f2231f0dc83bc5271885',1,'ir_Hitachi.h']]], - ['khitachiac1timersize_1620',['kHitachiAc1TimerSize',['../ir__Hitachi_8h.html#afd7f469f67f55263b0031b325232751b',1,'ir_Hitachi.h']]], - ['khitachiac2bits_1621',['kHitachiAc2Bits',['../IRremoteESP8266_8h.html#a362a0b0b0afc216cf8162a3724cf073a',1,'IRremoteESP8266.h']]], - ['khitachiac2statelength_1622',['kHitachiAc2StateLength',['../IRremoteESP8266_8h.html#a10377a40053a12e091dbff2869db0352',1,'IRremoteESP8266.h']]], - ['khitachiac344bits_1623',['kHitachiAc344Bits',['../IRremoteESP8266_8h.html#a204fc2410c3d555a37b152a01dceead0',1,'IRremoteESP8266.h']]], - ['khitachiac344buttonfan_1624',['kHitachiAc344ButtonFan',['../ir__Hitachi_8h.html#a5f33b956ec83ee0004785a9c44bd5b0b',1,'ir_Hitachi.h']]], - ['khitachiac344buttonpowermode_1625',['kHitachiAc344ButtonPowerMode',['../ir__Hitachi_8h.html#a3816a8ad86e03f8c5870057e7ad86335',1,'ir_Hitachi.h']]], - ['khitachiac344buttonswingh_1626',['kHitachiAc344ButtonSwingH',['../ir__Hitachi_8h.html#a10dea534868d76d99e91458ee28f5fe9',1,'ir_Hitachi.h']]], - ['khitachiac344buttonswingv_1627',['kHitachiAc344ButtonSwingV',['../ir__Hitachi_8h.html#a95c1b0ee7e3802631f4c2708371e7d34',1,'ir_Hitachi.h']]], - ['khitachiac344buttontempdown_1628',['kHitachiAc344ButtonTempDown',['../ir__Hitachi_8h.html#a05d9bd95037669f1d3743d935471db33',1,'ir_Hitachi.h']]], - ['khitachiac344buttontempup_1629',['kHitachiAc344ButtonTempUp',['../ir__Hitachi_8h.html#a74abf2ce4ed5918bf68f485eff179578',1,'ir_Hitachi.h']]], - ['khitachiac344cool_1630',['kHitachiAc344Cool',['../ir__Hitachi_8h.html#a92d4d8dea34a9387e55852b6b5289328',1,'ir_Hitachi.h']]], - ['khitachiac344dry_1631',['kHitachiAc344Dry',['../ir__Hitachi_8h.html#a37697339ddc2ffaf4ee13b5e140adf2c',1,'ir_Hitachi.h']]], - ['khitachiac344fan_1632',['kHitachiAc344Fan',['../ir__Hitachi_8h.html#a296cd0fc1f414a4e15ce228b5a794bcb',1,'ir_Hitachi.h']]], - ['khitachiac344fanauto_1633',['kHitachiAc344FanAuto',['../ir__Hitachi_8h.html#a6439744edb1ae4dd9e8ea2097fac7a9d',1,'ir_Hitachi.h']]], - ['khitachiac344fanhigh_1634',['kHitachiAc344FanHigh',['../ir__Hitachi_8h.html#a83ea1924948ce9ac8266ab64a41f3ebd',1,'ir_Hitachi.h']]], - ['khitachiac344fanlow_1635',['kHitachiAc344FanLow',['../ir__Hitachi_8h.html#acbbb61fde653c84a8e35865fa724872c',1,'ir_Hitachi.h']]], - ['khitachiac344fanmax_1636',['kHitachiAc344FanMax',['../ir__Hitachi_8h.html#af041ed41027b8e444e3069d9a3481c51',1,'ir_Hitachi.h']]], - ['khitachiac344fanmedium_1637',['kHitachiAc344FanMedium',['../ir__Hitachi_8h.html#aa6d47b5c28f758aa297b345cbf853c9a',1,'ir_Hitachi.h']]], - ['khitachiac344fanmin_1638',['kHitachiAc344FanMin',['../ir__Hitachi_8h.html#ac4bafed10c76739698e9a35183beb970',1,'ir_Hitachi.h']]], - ['khitachiac344heat_1639',['kHitachiAc344Heat',['../ir__Hitachi_8h.html#a6c4102910d21dc838efee1fb2477218d',1,'ir_Hitachi.h']]], - ['khitachiac344maxtemp_1640',['kHitachiAc344MaxTemp',['../ir__Hitachi_8h.html#a4a394fc23fb119ba67e3ca53e4b88f7f',1,'ir_Hitachi.h']]], - ['khitachiac344mintemp_1641',['kHitachiAc344MinTemp',['../ir__Hitachi_8h.html#a7322f7769c9c1af2311180474e5b0f57',1,'ir_Hitachi.h']]], - ['khitachiac344statelength_1642',['kHitachiAc344StateLength',['../IRremoteESP8266_8h.html#a2192f6b7c353f7f124dff3b57eab0659',1,'IRremoteESP8266.h']]], - ['khitachiac344swinghauto_1643',['kHitachiAc344SwingHAuto',['../ir__Hitachi_8h.html#a4f93eccee6e3e5f5c49c84034ca25af3',1,'ir_Hitachi.h']]], - ['khitachiac344swinghleft_1644',['kHitachiAc344SwingHLeft',['../ir__Hitachi_8h.html#af714a1eb296b05f3fc8167aff5419764',1,'ir_Hitachi.h']]], - ['khitachiac344swinghleftmax_1645',['kHitachiAc344SwingHLeftMax',['../ir__Hitachi_8h.html#ad0c5636ac0ccfd7e9cd087101bd5d204',1,'ir_Hitachi.h']]], - ['khitachiac344swinghmiddle_1646',['kHitachiAc344SwingHMiddle',['../ir__Hitachi_8h.html#a7e4372e02d72723049b378e955070c21',1,'ir_Hitachi.h']]], - ['khitachiac344swinghright_1647',['kHitachiAc344SwingHRight',['../ir__Hitachi_8h.html#af4b087dec06cfd86920dbf9df22aca63',1,'ir_Hitachi.h']]], - ['khitachiac344swinghrightmax_1648',['kHitachiAc344SwingHRightMax',['../ir__Hitachi_8h.html#a90cffc131be89a36d352c462403f689f',1,'ir_Hitachi.h']]], - ['khitachiac3bitmark_1649',['kHitachiAc3BitMark',['../ir__Hitachi_8cpp.html#a68269a88e02a3030749061e5f28f74cc',1,'ir_Hitachi.cpp']]], - ['khitachiac3bits_1650',['kHitachiAc3Bits',['../IRremoteESP8266_8h.html#ac26b896cdc17018269fa881e10e3aabb',1,'IRremoteESP8266.h']]], - ['khitachiac3hdrmark_1651',['kHitachiAc3HdrMark',['../ir__Hitachi_8cpp.html#af0a80a66094e67b4a78e8dfa539cd22f',1,'ir_Hitachi.cpp']]], - ['khitachiac3hdrspace_1652',['kHitachiAc3HdrSpace',['../ir__Hitachi_8cpp.html#aca4dc0b851c69a5e640337d68eb6f412',1,'ir_Hitachi.cpp']]], - ['khitachiac3minbits_1653',['kHitachiAc3MinBits',['../IRremoteESP8266_8h.html#a66ebaf70d2b4018371825c9cd3078a42',1,'IRremoteESP8266.h']]], - ['khitachiac3minstatelength_1654',['kHitachiAc3MinStateLength',['../IRremoteESP8266_8h.html#ac3becb270bfddaa1c64b1f8582dfc902',1,'IRremoteESP8266.h']]], - ['khitachiac3onespace_1655',['kHitachiAc3OneSpace',['../ir__Hitachi_8cpp.html#a0e630e38b4bffd5ec931153c20e41d97',1,'ir_Hitachi.cpp']]], - ['khitachiac3statelength_1656',['kHitachiAc3StateLength',['../IRremoteESP8266_8h.html#a9cc230bac4f902d46049c7b2c2fdbd3d',1,'IRremoteESP8266.h']]], - ['khitachiac3zerospace_1657',['kHitachiAc3ZeroSpace',['../ir__Hitachi_8cpp.html#a7cf96a2734bcc9a5eb390b8647666925',1,'ir_Hitachi.cpp']]], - ['khitachiac424bitmark_1658',['kHitachiAc424BitMark',['../ir__Hitachi_8cpp.html#acf5f9d83873a74688eb0413708e26eed',1,'ir_Hitachi.cpp']]], - ['khitachiac424bits_1659',['kHitachiAc424Bits',['../IRremoteESP8266_8h.html#ab466e28528a0d688a1b91e8af69025cb',1,'IRremoteESP8266.h']]], - ['khitachiac424buttonfan_1660',['kHitachiAc424ButtonFan',['../ir__Hitachi_8h.html#a4aa278fb1983213a2506c71debe035aa',1,'ir_Hitachi.h']]], - ['khitachiac424buttonpowermode_1661',['kHitachiAc424ButtonPowerMode',['../ir__Hitachi_8h.html#a2dd37a36c6ad928ad0c3485ae4ea78fd',1,'ir_Hitachi.h']]], - ['khitachiac424buttonswingh_1662',['kHitachiAc424ButtonSwingH',['../ir__Hitachi_8h.html#af3a0d9499fab327bc7dfb5d57562a946',1,'ir_Hitachi.h']]], - ['khitachiac424buttonswingv_1663',['kHitachiAc424ButtonSwingV',['../ir__Hitachi_8h.html#a59d8e5407daf37d38e0c76ab3abdec9d',1,'ir_Hitachi.h']]], - ['khitachiac424buttontempdown_1664',['kHitachiAc424ButtonTempDown',['../ir__Hitachi_8h.html#ad909ee0bc97e24aa70ff6ecd1cffe6c2',1,'ir_Hitachi.h']]], - ['khitachiac424buttontempup_1665',['kHitachiAc424ButtonTempUp',['../ir__Hitachi_8h.html#ac8885804fb276f6327beb2018b204359',1,'ir_Hitachi.h']]], - ['khitachiac424cool_1666',['kHitachiAc424Cool',['../ir__Hitachi_8h.html#a64c1e01c222e6dec001a7052e822d64f',1,'ir_Hitachi.h']]], - ['khitachiac424dry_1667',['kHitachiAc424Dry',['../ir__Hitachi_8h.html#a56bfde42914bc92f47929179cddcbdf3',1,'ir_Hitachi.h']]], - ['khitachiac424fan_1668',['kHitachiAc424Fan',['../ir__Hitachi_8h.html#a35db6fdcedeb3de0ffb0bb72f1e60a0b',1,'ir_Hitachi.h']]], - ['khitachiac424fanauto_1669',['kHitachiAc424FanAuto',['../ir__Hitachi_8h.html#add1ec95cfd4e388f90154b25410471d0',1,'ir_Hitachi.h']]], - ['khitachiac424fanhigh_1670',['kHitachiAc424FanHigh',['../ir__Hitachi_8h.html#aacabc41baea6c3ddf711424a400144a3',1,'ir_Hitachi.h']]], - ['khitachiac424fanlow_1671',['kHitachiAc424FanLow',['../ir__Hitachi_8h.html#acae66b060db5cd03732ccbf808c6049e',1,'ir_Hitachi.h']]], - ['khitachiac424fanmax_1672',['kHitachiAc424FanMax',['../ir__Hitachi_8h.html#a6298e6dee6ff9f5fc57cfc9ccf30c073',1,'ir_Hitachi.h']]], - ['khitachiac424fanmaxdry_1673',['kHitachiAc424FanMaxDry',['../ir__Hitachi_8h.html#af770b29d838610b87463551444548ac0',1,'ir_Hitachi.h']]], - ['khitachiac424fanmedium_1674',['kHitachiAc424FanMedium',['../ir__Hitachi_8h.html#a3d6479f2e76bd84eeda9f5c0772210c5',1,'ir_Hitachi.h']]], - ['khitachiac424fanmin_1675',['kHitachiAc424FanMin',['../ir__Hitachi_8h.html#aacf1d4b99d89a0e24622ca02402c683b',1,'ir_Hitachi.h']]], - ['khitachiac424fantemp_1676',['kHitachiAc424FanTemp',['../ir__Hitachi_8h.html#a874362698fad488da1a477c4f99923aa',1,'ir_Hitachi.h']]], - ['khitachiac424hdrmark_1677',['kHitachiAc424HdrMark',['../ir__Hitachi_8cpp.html#a7b1dcaa7569237831b08ea061fd403fb',1,'ir_Hitachi.cpp']]], - ['khitachiac424hdrspace_1678',['kHitachiAc424HdrSpace',['../ir__Hitachi_8cpp.html#a9309b801d147dd3eba96ed15245f7445',1,'ir_Hitachi.cpp']]], - ['khitachiac424heat_1679',['kHitachiAc424Heat',['../ir__Hitachi_8h.html#a5cfd38c9e7aa2c39dfa38b1ef4b33b4c',1,'ir_Hitachi.h']]], - ['khitachiac424ldrmark_1680',['kHitachiAc424LdrMark',['../ir__Hitachi_8cpp.html#a0e2a88cb5930fb9726a453bdefe33bae',1,'ir_Hitachi.cpp']]], - ['khitachiac424ldrspace_1681',['kHitachiAc424LdrSpace',['../ir__Hitachi_8cpp.html#ad6285b55ed74e0e1087c3eb12d63b39c',1,'ir_Hitachi.cpp']]], - ['khitachiac424maxtemp_1682',['kHitachiAc424MaxTemp',['../ir__Hitachi_8h.html#a22574044b5a9163aca1f0581b9fa9241',1,'ir_Hitachi.h']]], - ['khitachiac424mintemp_1683',['kHitachiAc424MinTemp',['../ir__Hitachi_8h.html#a3d4311f1f28bbe31a22b80556e678b22',1,'ir_Hitachi.h']]], - ['khitachiac424onespace_1684',['kHitachiAc424OneSpace',['../ir__Hitachi_8cpp.html#a9b9cd22801f17acac593a8bcf334fd71',1,'ir_Hitachi.cpp']]], - ['khitachiac424poweroff_1685',['kHitachiAc424PowerOff',['../ir__Hitachi_8h.html#affc2d076cc0de329466ecbde7186d4eb',1,'ir_Hitachi.h']]], - ['khitachiac424poweron_1686',['kHitachiAc424PowerOn',['../ir__Hitachi_8h.html#a922478904efd86c6ecf7dabec3dd759f',1,'ir_Hitachi.h']]], - ['khitachiac424statelength_1687',['kHitachiAc424StateLength',['../IRremoteESP8266_8h.html#aff17d9c0ccf683895d2c868094679f0a',1,'IRremoteESP8266.h']]], - ['khitachiac424zerospace_1688',['kHitachiAc424ZeroSpace',['../ir__Hitachi_8cpp.html#a0f2032ac476bf344df31dc9351b2b98a',1,'ir_Hitachi.cpp']]], - ['khitachiacauto_1689',['kHitachiAcAuto',['../ir__Hitachi_8h.html#af8c74a8388361162b93339e1b0bc94d9',1,'ir_Hitachi.h']]], - ['khitachiacautotemp_1690',['kHitachiAcAutoTemp',['../ir__Hitachi_8h.html#aaa28bb683fefc065cb115fbfb66994ec',1,'ir_Hitachi.h']]], - ['khitachiacbitmark_1691',['kHitachiAcBitMark',['../ir__Hitachi_8cpp.html#a0993bf3d527a12bfe51c7bbfcf788c59',1,'ir_Hitachi.cpp']]], - ['khitachiacbits_1692',['kHitachiAcBits',['../IRremoteESP8266_8h.html#aec91e459b1e52765c700f8f7a4723f3b',1,'IRremoteESP8266.h']]], - ['khitachiaccool_1693',['kHitachiAcCool',['../ir__Hitachi_8h.html#a2b40b07601fdf8b038c97bb8bd2bec59',1,'ir_Hitachi.h']]], - ['khitachiacdefaultrepeat_1694',['kHitachiAcDefaultRepeat',['../IRremoteESP8266_8h.html#acc8510281d2ff9a808501d375c03ba21',1,'IRremoteESP8266.h']]], - ['khitachiacdry_1695',['kHitachiAcDry',['../ir__Hitachi_8h.html#a19730b13fca736392600580c156ae3c3',1,'ir_Hitachi.h']]], - ['khitachiacfan_1696',['kHitachiAcFan',['../ir__Hitachi_8h.html#a69626883b6fdbd3ccd26bb3123bf1883',1,'ir_Hitachi.h']]], - ['khitachiacfanauto_1697',['kHitachiAcFanAuto',['../ir__Hitachi_8h.html#a6be6f6eae193e784133be63d7cc5d75e',1,'ir_Hitachi.h']]], - ['khitachiacfanhigh_1698',['kHitachiAcFanHigh',['../ir__Hitachi_8h.html#a85ef905a1d3704237141f07defc128f5',1,'ir_Hitachi.h']]], - ['khitachiacfanlow_1699',['kHitachiAcFanLow',['../ir__Hitachi_8h.html#a0add8c3a3d00a81fcc3279af78256de2',1,'ir_Hitachi.h']]], - ['khitachiacfanmed_1700',['kHitachiAcFanMed',['../ir__Hitachi_8h.html#ac88b4cfdce5d69bf07316ddd716c2c11',1,'ir_Hitachi.h']]], - ['khitachiacfreq_1701',['kHitachiAcFreq',['../ir__Hitachi_8h.html#a443eaa664017d7b671bef0e9aa2d643b',1,'ir_Hitachi.h']]], - ['khitachiachdrmark_1702',['kHitachiAcHdrMark',['../ir__Hitachi_8cpp.html#aefe34d17f5c72ee05afb9a6302a450da',1,'ir_Hitachi.cpp']]], - ['khitachiachdrspace_1703',['kHitachiAcHdrSpace',['../ir__Hitachi_8cpp.html#a4a4352723f119ea070be1eba2aafe36b',1,'ir_Hitachi.cpp']]], - ['khitachiacheat_1704',['kHitachiAcHeat',['../ir__Hitachi_8h.html#add2498e77e5585fd8c82a553bb0c22c0',1,'ir_Hitachi.h']]], - ['khitachiacmaxtemp_1705',['kHitachiAcMaxTemp',['../ir__Hitachi_8h.html#a63e17171c40d770d25f24d018aee2c4c',1,'ir_Hitachi.h']]], - ['khitachiacmingap_1706',['kHitachiAcMinGap',['../ir__Hitachi_8cpp.html#a14016b9110c11423c628c8e220e50864',1,'ir_Hitachi.cpp']]], - ['khitachiacmintemp_1707',['kHitachiAcMinTemp',['../ir__Hitachi_8h.html#a9b4f3ea50cc0491f10ff8dc8eabb3ecd',1,'ir_Hitachi.h']]], - ['khitachiaconespace_1708',['kHitachiAcOneSpace',['../ir__Hitachi_8cpp.html#a79a79aaf52a05c021621335586dd928f',1,'ir_Hitachi.cpp']]], - ['khitachiacstatelength_1709',['kHitachiAcStateLength',['../IRremoteESP8266_8h.html#a8bef76bac826afbbc51c2a867af15ed8',1,'IRremoteESP8266.h']]], - ['khitachiaczerospace_1710',['kHitachiAcZeroSpace',['../ir__Hitachi_8cpp.html#a0b03a4abb11d69a8b8da56ca2abc50c8',1,'ir_Hitachi.cpp']]], - ['kholdstr_1711',['kHoldStr',['../IRtext_8cpp.html#a86fd1f86e4a513603449e90a47500986',1,'kHoldStr(): IRtext.cpp'],['../IRtext_8h.html#adb2d0f01f1429b0f3eb7193519fe3d6e',1,'kHoldStr(): IRtext.cpp']]], - ['khoursstr_1712',['kHoursStr',['../IRtext_8cpp.html#ae94260daddf2ea56e54d56bbad66526c',1,'kHoursStr(): IRtext.cpp'],['../IRtext_8h.html#a10ecbc18040f0d0ed88b728c18b0a161',1,'kHoursStr(): IRtext.cpp']]], - ['khourstr_1713',['kHourStr',['../IRtext_8cpp.html#a1d25a0bf2c8a638fff1557a0c5637977',1,'kHourStr(): IRtext.cpp'],['../IRtext_8h.html#a67a94ecb5a557b5335a8085cf1d8cdd6',1,'kHourStr(): IRtext.cpp']]], - ['khumidstr_1714',['kHumidStr',['../IRtext_8cpp.html#aae236cd2e7ed4961360fe687fe38170d',1,'kHumidStr(): IRtext.cpp'],['../IRtext_8h.html#a25365e722200ac40d581c4f585f9ae2f',1,'kHumidStr(): IRtext.cpp']]], - ['kidlestate_1715',['kIdleState',['../IRrecv_8h.html#aabba6fe7d7b97c45173eb7781a5d99bf',1,'IRrecv.h']]], - ['kidstr_1716',['kIdStr',['../IRtext_8cpp.html#a35dc8efdb79d96e4f0a48d3bd7993a6e',1,'kIdStr(): IRtext.cpp'],['../IRtext_8h.html#aed59ca935ee6bc14064af69bf50aa16b',1,'kIdStr(): IRtext.cpp']]], - ['kifeelstr_1717',['kIFeelStr',['../IRtext_8cpp.html#a3c7368d9138477f0eac2a6249ba2606b',1,'kIFeelStr(): IRtext.cpp'],['../IRtext_8h.html#a40f90b18252e14a73dd91527f621e35f',1,'kIFeelStr(): IRtext.cpp']]], - ['kinaxbitmark_1718',['kInaxBitMark',['../ir__Inax_8cpp.html#a84553819866dbfcfad8cba87f6c02e04',1,'ir_Inax.cpp']]], - ['kinaxbits_1719',['kInaxBits',['../IRremoteESP8266_8h.html#af8441f25b32d113096adeaff331c126a',1,'IRremoteESP8266.h']]], - ['kinaxhdrmark_1720',['kInaxHdrMark',['../ir__Inax_8cpp.html#ac467a96d91b6266c3ce9a2a4ec2a8b44',1,'ir_Inax.cpp']]], - ['kinaxhdrspace_1721',['kInaxHdrSpace',['../ir__Inax_8cpp.html#a6ddcc8ca7a5d05cee91e57b3e69cca33',1,'ir_Inax.cpp']]], - ['kinaxmingap_1722',['kInaxMinGap',['../ir__Inax_8cpp.html#a600f49303a77fbdc1d77aae2abe9b9aa',1,'ir_Inax.cpp']]], - ['kinaxminrepeat_1723',['kInaxMinRepeat',['../IRremoteESP8266_8h.html#a37a3d0ae51a6ce850a424fe77d5b22d2',1,'IRremoteESP8266.h']]], - ['kinaxonespace_1724',['kInaxOneSpace',['../ir__Inax_8cpp.html#aeb77e3a51838547a29c1b343eba4c7ef',1,'ir_Inax.cpp']]], - ['kinaxtick_1725',['kInaxTick',['../ir__Inax_8cpp.html#ad437f0beac0893853cc9d5cc214b03c6',1,'ir_Inax.cpp']]], - ['kinaxzerospace_1726',['kInaxZeroSpace',['../ir__Inax_8cpp.html#a115f1f061362c1c3c41e3bb20ea7e1c6',1,'ir_Inax.cpp']]], - ['kinsidestr_1727',['kInsideStr',['../IRtext_8cpp.html#aa94c7a9b472bcd2297b43a5b4008bc51',1,'kInsideStr(): IRtext.cpp'],['../IRtext_8h.html#a55c406749cb48970c11c58ec83ef97eb',1,'kInsideStr(): IRtext.cpp']]], - ['kionstr_1728',['kIonStr',['../IRtext_8cpp.html#afc36ce4beed72e662a8d9d1473dad235',1,'kIonStr(): IRtext.cpp'],['../IRtext_8h.html#add28006fe2f8ac70db1b5048c85be84b',1,'kIonStr(): IRtext.cpp']]], - ['kjvcbitmark_1729',['kJvcBitMark',['../ir__JVC_8cpp.html#a23c11d77431d37bba18776f9341c767f',1,'ir_JVC.cpp']]], - ['kjvcbitmarkticks_1730',['kJvcBitMarkTicks',['../ir__JVC_8cpp.html#aad7cf432a9bd0d2b4df66d5f903a70dd',1,'ir_JVC.cpp']]], - ['kjvcbits_1731',['kJvcBits',['../IRremoteESP8266_8h.html#a7c28467832e7480864a6be0ce87c608f',1,'IRremoteESP8266.h']]], - ['kjvchdrmark_1732',['kJvcHdrMark',['../ir__JVC_8cpp.html#a60d81ad0066288b602054bd24a912f1f',1,'ir_JVC.cpp']]], - ['kjvchdrmarkticks_1733',['kJvcHdrMarkTicks',['../ir__JVC_8cpp.html#abb12fba45b7a366e23849d693953e749',1,'ir_JVC.cpp']]], - ['kjvchdrspace_1734',['kJvcHdrSpace',['../ir__JVC_8cpp.html#a5444718f66ba8b43c1d7d99f7b378a0d',1,'ir_JVC.cpp']]], - ['kjvchdrspaceticks_1735',['kJvcHdrSpaceTicks',['../ir__JVC_8cpp.html#ae7cf6cb7b5ea5fe17a9b182d1ef3b008',1,'ir_JVC.cpp']]], - ['kjvcmingap_1736',['kJvcMinGap',['../ir__JVC_8cpp.html#ac19d8396c10adb687a883d016ec43aa5',1,'ir_JVC.cpp']]], - ['kjvcmingapticks_1737',['kJvcMinGapTicks',['../ir__JVC_8cpp.html#a525e7d672b148c02bdca1f66ab92e6c7',1,'ir_JVC.cpp']]], - ['kjvconespace_1738',['kJvcOneSpace',['../ir__JVC_8cpp.html#a8befef1d03f3a09541c2612c66c0256f',1,'ir_JVC.cpp']]], - ['kjvconespaceticks_1739',['kJvcOneSpaceTicks',['../ir__JVC_8cpp.html#a20d4f7737d71bdbec58694e775669df9',1,'ir_JVC.cpp']]], - ['kjvcrptlength_1740',['kJvcRptLength',['../ir__JVC_8cpp.html#a3896e40881e70c63234fecb88375b5a1',1,'ir_JVC.cpp']]], - ['kjvcrptlengthticks_1741',['kJvcRptLengthTicks',['../ir__JVC_8cpp.html#a75e03cf5739ab0ba67e5cfa426776d16',1,'ir_JVC.cpp']]], - ['kjvctick_1742',['kJvcTick',['../ir__JVC_8cpp.html#acd5a2ba251824cac5311adcc9a813b1a',1,'ir_JVC.cpp']]], - ['kjvczerospace_1743',['kJvcZeroSpace',['../ir__JVC_8cpp.html#a67c790b909f82e044b8c4e7227d9c189',1,'ir_JVC.cpp']]], - ['kjvczerospaceticks_1744',['kJvcZeroSpaceTicks',['../ir__JVC_8cpp.html#a0a5319df3b1e01741cd35a37087342f5',1,'ir_JVC.cpp']]], - ['kkelvinatorauto_1745',['kKelvinatorAuto',['../ir__Kelvinator_8h.html#a879b005fc5493a693b05e3bb7cbc8fbf',1,'ir_Kelvinator.h']]], - ['kkelvinatorautotemp_1746',['kKelvinatorAutoTemp',['../ir__Kelvinator_8h.html#afa9e7ea8c9fb86cb02358cc8221733b0',1,'ir_Kelvinator.h']]], - ['kkelvinatorbasicfanmax_1747',['kKelvinatorBasicFanMax',['../ir__Kelvinator_8h.html#a10624389f033451cf9a6f4530c2dfb98',1,'ir_Kelvinator.h']]], - ['kkelvinatorbitmark_1748',['kKelvinatorBitMark',['../ir__Kelvinator_8cpp.html#a2014f9f92f1e24a04341398e7e673807',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorbitmarkticks_1749',['kKelvinatorBitMarkTicks',['../ir__Kelvinator_8cpp.html#a2d6579257ab7f185e4f0fecdbdf03835',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorbits_1750',['kKelvinatorBits',['../IRremoteESP8266_8h.html#acfa71cb3caf4964829bb1f557dee5b86',1,'IRremoteESP8266.h']]], - ['kkelvinatorchecksumstart_1751',['kKelvinatorChecksumStart',['../ir__Kelvinator_8cpp.html#a0afa7cec1db6a5f46c1b30d7ce718ae6',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcmdfooter_1752',['kKelvinatorCmdFooter',['../ir__Kelvinator_8cpp.html#ad2361e09472fa03376b447114a19513f',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcmdfooterbits_1753',['kKelvinatorCmdFooterBits',['../ir__Kelvinator_8cpp.html#af6c85d3b30a5949da53ad9400734f203',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcool_1754',['kKelvinatorCool',['../ir__Kelvinator_8h.html#ad49a2e457470d6e16d001cdae3215606',1,'ir_Kelvinator.h']]], - ['kkelvinatordefaultrepeat_1755',['kKelvinatorDefaultRepeat',['../IRremoteESP8266_8h.html#a94c968c5cc929f189b8e578d2f55b132',1,'IRremoteESP8266.h']]], - ['kkelvinatordry_1756',['kKelvinatorDry',['../ir__Kelvinator_8h.html#a181b3d10b522f9afb29706da42afea55',1,'ir_Kelvinator.h']]], - ['kkelvinatorfan_1757',['kKelvinatorFan',['../ir__Kelvinator_8h.html#a8d6d97be2fd8a5aefa1319d3f662a50c',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanauto_1758',['kKelvinatorFanAuto',['../ir__Kelvinator_8h.html#ac4994c36634ca0ad8791807c9a992976',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanmax_1759',['kKelvinatorFanMax',['../ir__Kelvinator_8h.html#a889ce17d112d1a61420e1064d72c583a',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanmin_1760',['kKelvinatorFanMin',['../ir__Kelvinator_8h.html#a36a9422e2e6c6b7a87e8b2deffd1b189',1,'ir_Kelvinator.h']]], - ['kkelvinatorgapspace_1761',['kKelvinatorGapSpace',['../ir__Kelvinator_8cpp.html#abf66116a235a9d05089182f2f7fd7640',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorgapspaceticks_1762',['kKelvinatorGapSpaceTicks',['../ir__Kelvinator_8cpp.html#a6a81fb4c1cf1ad34f99f3ca87ab74a5c',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrmark_1763',['kKelvinatorHdrMark',['../ir__Kelvinator_8cpp.html#a413e824c6bdd4778e70f496917b3fe30',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrmarkticks_1764',['kKelvinatorHdrMarkTicks',['../ir__Kelvinator_8cpp.html#a8ad828958071c75a80928abfb916c0df',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrspace_1765',['kKelvinatorHdrSpace',['../ir__Kelvinator_8cpp.html#a9cab23fbd5ba62714fda24765db0e7d1',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrspaceticks_1766',['kKelvinatorHdrSpaceTicks',['../ir__Kelvinator_8cpp.html#ab4fbf899dcb2c2d510055215617d5b44',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorheat_1767',['kKelvinatorHeat',['../ir__Kelvinator_8h.html#a080eade5648791e37c76af7a52e85731',1,'ir_Kelvinator.h']]], - ['kkelvinatormaxtemp_1768',['kKelvinatorMaxTemp',['../ir__Kelvinator_8h.html#a14933442e718db1a87bae5d076ad228d',1,'ir_Kelvinator.h']]], - ['kkelvinatormintemp_1769',['kKelvinatorMinTemp',['../ir__Kelvinator_8h.html#a98871ce825dbbe80d072f25253142879',1,'ir_Kelvinator.h']]], - ['kkelvinatoronespace_1770',['kKelvinatorOneSpace',['../ir__Kelvinator_8cpp.html#aae5a009282517309b8fdbfdaced9d659',1,'ir_Kelvinator.cpp']]], - ['kkelvinatoronespaceticks_1771',['kKelvinatorOneSpaceTicks',['../ir__Kelvinator_8cpp.html#ac907f4495debdcaf680f6e6941b844d5',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorstatelength_1772',['kKelvinatorStateLength',['../IRremoteESP8266_8h.html#af68545e8c2fe9af3719fb74c5d21f0c9',1,'IRremoteESP8266.h']]], - ['kkelvinatortick_1773',['kKelvinatorTick',['../ir__Kelvinator_8cpp.html#a846cbb5609b1dff139a90487000c7393',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorzerospace_1774',['kKelvinatorZeroSpace',['../ir__Kelvinator_8cpp.html#a10469f76f50285a6084bb088fd601dea',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorzerospaceticks_1775',['kKelvinatorZeroSpaceTicks',['../ir__Kelvinator_8cpp.html#a0abc0fdc3d9ac9f12133a46e95d69432',1,'ir_Kelvinator.cpp']]], - ['klasertagbits_1776',['kLasertagBits',['../IRremoteESP8266_8h.html#a3ea0e89a8b6a3ffa4a2d346abeed851e',1,'IRremoteESP8266.h']]], - ['klasertagdelta_1777',['kLasertagDelta',['../ir__Lasertag_8cpp.html#a5c0e8e9c6dec0480c09fcd339ed62257',1,'ir_Lasertag.cpp']]], - ['klasertagexcess_1778',['kLasertagExcess',['../ir__Lasertag_8cpp.html#afa77dc5a431a8d851320e7623378983e',1,'ir_Lasertag.cpp']]], - ['klasertagmingap_1779',['kLasertagMinGap',['../ir__Lasertag_8cpp.html#a33762e2c44dac34e00d255b41d9f2822',1,'ir_Lasertag.cpp']]], - ['klasertagminrepeat_1780',['kLasertagMinRepeat',['../IRremoteESP8266_8h.html#a9b36135c3df24eab232a5edac8c58c5e',1,'IRremoteESP8266.h']]], - ['klasertagminsamples_1781',['kLasertagMinSamples',['../ir__Lasertag_8cpp.html#acbf98970106cadb43e0703ae2caab0c1',1,'ir_Lasertag.cpp']]], - ['klasertagtick_1782',['kLasertagTick',['../ir__Lasertag_8cpp.html#a878b5d53379f8b1b21dfe19f1f83a626',1,'ir_Lasertag.cpp']]], - ['klasertagtolerance_1783',['kLasertagTolerance',['../ir__Lasertag_8cpp.html#a6146bcf378515d31330b3fec5c967346',1,'ir_Lasertag.cpp']]], - ['klastdecodetype_1784',['kLastDecodeType',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab09881b84bf9d61af99e62a85cce0b59',1,'IRremoteESP8266.h']]], - ['klastfanspeedenum_1785',['kLastFanspeedEnum',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383ab2d2a6993491fd666f1fa0afff5913ad',1,'stdAc']]], - ['klastopmodeenum_1786',['kLastOpmodeEnum',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa8dd00ffd575f66172d594e78860aad9f',1,'stdAc']]], - ['klaststr_1787',['kLastStr',['../IRtext_8cpp.html#ad7c8430b935afb7aec114788a9c0bf7d',1,'kLastStr(): IRtext.cpp'],['../IRtext_8h.html#aa9ffd7c6e6921607653ed5dc1fea4f32',1,'kLastStr(): IRtext.cpp']]], - ['klastswinghenum_1788',['kLastSwinghEnum',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147ac5bc5e605db47897c114283926ba7fe4',1,'stdAc']]], - ['klastswingvenum_1789',['kLastSwingvEnum',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a4127912afc084d51c71c4ea0c7dd7b30',1,'stdAc']]], - ['kleft_1790',['kLeft',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a2d5fde1d924910a2a01ecd8e70a87c28',1,'stdAc']]], - ['kleftmax_1791',['kLeftMax',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a375fe2e8ea70186052eeb2983baa1d7d',1,'stdAc']]], - ['kleftmaxstr_1792',['kLeftMaxStr',['../IRtext_8cpp.html#a1a82999b6eb3b6637f51bb8ce6a46efd',1,'kLeftMaxStr(): IRtext.cpp'],['../IRtext_8h.html#ab2fd48f052fcfed8ca779ca499edcdbf',1,'kLeftMaxStr(): IRtext.cpp']]], - ['kleftstr_1793',['kLeftStr',['../IRtext_8cpp.html#a0bb005966f2ff2da12a542e713f7f1f2',1,'kLeftStr(): IRtext.cpp'],['../IRtext_8h.html#a001f11495c7c9452ceec68455ae524bf',1,'kLeftStr(): IRtext.cpp']]], - ['klegopfbitmark_1794',['kLegoPfBitMark',['../ir__Lego_8cpp.html#afdf76660f62bfefb4a813d57cd84b590',1,'ir_Lego.cpp']]], - ['klegopfbits_1795',['kLegoPfBits',['../IRremoteESP8266_8h.html#a8a7c7659250a81c7c84fc739eafed13e',1,'IRremoteESP8266.h']]], - ['klegopfhdrspace_1796',['kLegoPfHdrSpace',['../ir__Lego_8cpp.html#a140e8707900bfd4e3a9e2722a6b0bfb3',1,'ir_Lego.cpp']]], - ['klegopfmincommandlength_1797',['kLegoPfMinCommandLength',['../ir__Lego_8cpp.html#ad9a0c5184cc422ec1b32edf58c52d2b1',1,'ir_Lego.cpp']]], - ['klegopfminrepeat_1798',['kLegoPfMinRepeat',['../IRremoteESP8266_8h.html#a2614cf3cb840f028eb1dc684aeb1272c',1,'IRremoteESP8266.h']]], - ['klegopfonespace_1799',['kLegoPfOneSpace',['../ir__Lego_8cpp.html#a59a41085f2e8f81e1019fd40782269e3',1,'ir_Lego.cpp']]], - ['klegopfzerospace_1800',['kLegoPfZeroSpace',['../ir__Lego_8cpp.html#ada07e8aaf79cf58c46b301a410d9fb3e',1,'ir_Lego.cpp']]], - ['klg2bitmark_1801',['kLg2BitMark',['../ir__LG_8cpp.html#abf4db4647161db6fb2548b5200c41843',1,'ir_LG.cpp']]], - ['klg2hdrmark_1802',['kLg2HdrMark',['../ir__LG_8cpp.html#a5ca50077fba2d5130220255e1659e0c3',1,'ir_LG.cpp']]], - ['klg2hdrspace_1803',['kLg2HdrSpace',['../ir__LG_8cpp.html#a6637da052fea9320e97cff261f219cdb',1,'ir_LG.cpp']]], - ['klg32bits_1804',['kLg32Bits',['../IRremoteESP8266_8h.html#ae3c458814d7221b66d2f267cb2663bd2',1,'IRremoteESP8266.h']]], - ['klg32hdrmark_1805',['kLg32HdrMark',['../ir__LG_8cpp.html#a26cb3fb11b1a0bf0815868767e50f31b',1,'ir_LG.cpp']]], - ['klg32hdrspace_1806',['kLg32HdrSpace',['../ir__LG_8cpp.html#a59ddf2070642615e162c85b7575aff76',1,'ir_LG.cpp']]], - ['klg32rpthdrmark_1807',['kLg32RptHdrMark',['../ir__LG_8cpp.html#af19a674228bea82c1c588aa9dd974805',1,'ir_LG.cpp']]], - ['klgacauto_1808',['kLgAcAuto',['../ir__LG_8h.html#ae5e45a0f42ce7544d6fb7981a43fb932',1,'ir_LG.h']]], - ['klgaccool_1809',['kLgAcCool',['../ir__LG_8h.html#a3ba35885488bdda3d87ba344a5c58eb2',1,'ir_LG.h']]], - ['klgacdry_1810',['kLgAcDry',['../ir__LG_8h.html#ab3b9a106551be1217e0c824cffe1ea44',1,'ir_LG.h']]], - ['klgacfan_1811',['kLgAcFan',['../ir__LG_8h.html#afc12144673b8dd0555833427fa757275',1,'ir_LG.h']]], - ['klgacfanauto_1812',['kLgAcFanAuto',['../ir__LG_8h.html#a3dee1dc33f768d36a2216213c90a0a5c',1,'ir_LG.h']]], - ['klgacfanhigh_1813',['kLgAcFanHigh',['../ir__LG_8h.html#a89888f8d36899b5526e4c2ebb1097357',1,'ir_LG.h']]], - ['klgacfanlow_1814',['kLgAcFanLow',['../ir__LG_8h.html#afa3633c1b26d837f85b10a8a8d677efc',1,'ir_LG.h']]], - ['klgacfanlowest_1815',['kLgAcFanLowest',['../ir__LG_8h.html#a6b89a2e6a5bee761e1754fe520459d49',1,'ir_LG.h']]], - ['klgacfanmedium_1816',['kLgAcFanMedium',['../ir__LG_8h.html#abe0fb8a8f9d6ab9ebda36d0343841619',1,'ir_LG.h']]], - ['klgacheat_1817',['kLgAcHeat',['../ir__LG_8h.html#a6c17d61082cc24f9d714c5d4ac151933',1,'ir_LG.h']]], - ['klgacmaxtemp_1818',['kLgAcMaxTemp',['../ir__LG_8h.html#a0fab7b6e6d1138638bdeadeab85f5090',1,'ir_LG.h']]], - ['klgacmintemp_1819',['kLgAcMinTemp',['../ir__LG_8h.html#ae3bef99e329f057358001cacf67f6d70',1,'ir_LG.h']]], - ['klgacoffcommand_1820',['kLgAcOffCommand',['../ir__LG_8h.html#aecf8158eec1d9ec0d54056392b512296',1,'ir_LG.h']]], - ['klgacpoweroff_1821',['kLgAcPowerOff',['../ir__LG_8h.html#a3b2681e41071298197d849fbd7649318',1,'ir_LG.h']]], - ['klgacpoweron_1822',['kLgAcPowerOn',['../ir__LG_8h.html#a87d2f6e4e2755aaab4762952b1bf6108',1,'ir_LG.h']]], - ['klgacsignature_1823',['kLgAcSignature',['../ir__LG_8h.html#ab7c3589deb28829ad0313b1505ec196e',1,'ir_LG.h']]], - ['klgactempadjust_1824',['kLgAcTempAdjust',['../ir__LG_8h.html#a16210dc395a86dc4562436047c22600f',1,'ir_LG.h']]], - ['klgbitmark_1825',['kLgBitMark',['../ir__LG_8cpp.html#a9311195710d4c3a2ac48456390a03138',1,'ir_LG.cpp']]], - ['klgbits_1826',['kLgBits',['../IRremoteESP8266_8h.html#a256bd6093034b3e4c33324680f3a7102',1,'IRremoteESP8266.h']]], - ['klgdefaultrepeat_1827',['kLgDefaultRepeat',['../IRremoteESP8266_8h.html#a2d6832b3d214e0adad781c205993e461',1,'IRremoteESP8266.h']]], - ['klghdrmark_1828',['kLgHdrMark',['../ir__LG_8cpp.html#a74f253d9e4cc72148233021c47d59f35',1,'ir_LG.cpp']]], - ['klghdrspace_1829',['kLgHdrSpace',['../ir__LG_8cpp.html#a6eaf100cde647fc119d3e993680afd47',1,'ir_LG.cpp']]], - ['klgmingap_1830',['kLgMinGap',['../ir__LG_8cpp.html#a784323468e6b5ebc65bd2870a94fb553',1,'ir_LG.cpp']]], - ['klgminmessagelength_1831',['kLgMinMessageLength',['../ir__LG_8cpp.html#a4eb3f82ae2ca6c34b58e512848a6dc41',1,'ir_LG.cpp']]], - ['klgonespace_1832',['kLgOneSpace',['../ir__LG_8cpp.html#a05fe6a47f437efc686cb46ec805da4d4',1,'ir_LG.cpp']]], - ['klgrptspace_1833',['kLgRptSpace',['../ir__LG_8cpp.html#a834b8f08ee32030c51ea5e2c5bd5a73c',1,'ir_LG.cpp']]], - ['klgzerospace_1834',['kLgZeroSpace',['../ir__LG_8cpp.html#a981fe3cfc4adf0b3016a008ca1bbf734',1,'ir_LG.cpp']]], - ['klightstr_1835',['kLightStr',['../IRtext_8cpp.html#a2912b7dc11fd571706eaaf90e0095a4f',1,'kLightStr(): IRtext.cpp'],['../IRtext_8h.html#a926ebb4be14179afdc55d5524c8eb5da',1,'kLightStr(): IRtext.cpp']]], - ['klighttogglestr_1836',['kLightToggleStr',['../IRtext_8cpp.html#a74a3ef3c72995e19582be04a2716b285',1,'kLightToggleStr(): IRtext.cpp'],['../IRtext_8h.html#af9ac8ce54e78f0d8f7e0043d08e6256c',1,'kLightToggleStr(): IRtext.cpp']]], - ['klostr_1837',['kLoStr',['../IRtext_8cpp.html#a72fc3855eec7026260de3a6b3a25c377',1,'kLoStr(): IRtext.cpp'],['../IRtext_8h.html#abf3295aeb3dfb7048e677d8d6e65e47c',1,'kLoStr(): IRtext.cpp']]], - ['kloudstr_1838',['kLoudStr',['../IRtext_8cpp.html#a3b6d3eed96c5623cc95ebcfb93cb6f96',1,'kLoudStr(): IRtext.cpp'],['../IRtext_8h.html#a7d265b75ed59c0be3c6b72ec0eaf8aa2',1,'kLoudStr(): IRtext.cpp']]], - ['klow_1839',['kLow',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383acd8fe42741a3bbc973bbf1d404afeff4',1,'stdAc::kLow()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43acd8fe42741a3bbc973bbf1d404afeff4',1,'stdAc::kLow()']]], - ['klowerstr_1840',['kLowerStr',['../IRtext_8cpp.html#a518681524ec3c8f8bc993823003fe58a',1,'kLowerStr(): IRtext.cpp'],['../IRtext_8h.html#ae389ed4ed6982d4617ee3f3e82ce388c',1,'kLowerStr(): IRtext.cpp']]], - ['klowest_1841',['kLowest',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a334c684494b7f19d765cf062ae94a314',1,'stdAc']]], - ['kloweststr_1842',['kLowestStr',['../IRtext_8cpp.html#ae0c595955599a398669a372edd339f67',1,'kLowestStr(): IRtext.cpp'],['../IRtext_8h.html#a31a34e51d7f1f9360cc3a7ea3f2bf7a3',1,'kLowestStr(): IRtext.cpp']]], - ['klownibble_1843',['kLowNibble',['../IRutils_8h.html#ad0288cc71e1814a27c27393f06676eec',1,'IRutils.h']]], - ['klowstr_1844',['kLowStr',['../IRtext_8cpp.html#a18f69bf40b866ee1d30d1586757d5f41',1,'kLowStr(): IRtext.cpp'],['../IRtext_8h.html#a09c0f7f1b07f7591bdbe56fd8a18f7ea',1,'kLowStr(): IRtext.cpp']]], - ['klutronbits_1845',['kLutronBits',['../IRremoteESP8266_8h.html#a814dfab515b91887c494237b1f6ebd99',1,'IRremoteESP8266.h']]], - ['klutrondelta_1846',['kLutronDelta',['../ir__Lutron_8cpp.html#a4220004fac195ef46388199ad9624860',1,'ir_Lutron.cpp']]], - ['klutrongap_1847',['kLutronGap',['../ir__Lutron_8cpp.html#a18ffb51db0ae33904a64012cb72d6165',1,'ir_Lutron.cpp']]], - ['klutrontick_1848',['kLutronTick',['../ir__Lutron_8cpp.html#a04a84309978b79c0983c398a497a087a',1,'ir_Lutron.cpp']]], - ['kmagiquestbits_1849',['kMagiquestBits',['../IRremoteESP8266_8h.html#ad756bfec6eabbe2ac10b7847f87fb751',1,'IRremoteESP8266.h']]], - ['kmagiquestgap_1850',['kMagiQuestGap',['../ir__Magiquest_8h.html#aebdea5a1a55547d812f1f7bb2d3ddf1f',1,'ir_Magiquest.h']]], - ['kmagiquestmarkone_1851',['kMagiQuestMarkOne',['../ir__Magiquest_8h.html#a0d5d090015ecf49995514054c29cb4e2',1,'ir_Magiquest.h']]], - ['kmagiquestmarkzero_1852',['kMagiQuestMarkZero',['../ir__Magiquest_8h.html#a7240a15dbb9bc6a1e31575be7837c390',1,'ir_Magiquest.h']]], - ['kmagiquestoneratio_1853',['kMagiQuestOneRatio',['../ir__Magiquest_8h.html#a073cdb7ca4dd35b8fa05d99eb7da5b65',1,'ir_Magiquest.h']]], - ['kmagiquestspaceone_1854',['kMagiQuestSpaceOne',['../ir__Magiquest_8h.html#a92bad440c0291cbb903f08de08d96fb2',1,'ir_Magiquest.h']]], - ['kmagiquestspacezero_1855',['kMagiQuestSpaceZero',['../ir__Magiquest_8h.html#abe557052c5c3bef87e62daf71b4c8654',1,'ir_Magiquest.h']]], - ['kmagiquesttotalusec_1856',['kMagiQuestTotalUsec',['../ir__Magiquest_8h.html#a819dcf22b127f4f7b282d784490a83c3',1,'ir_Magiquest.h']]], - ['kmagiquestzeroratio_1857',['kMagiQuestZeroRatio',['../ir__Magiquest_8h.html#a41e5594b8e1510267e563ed78fbe98b0',1,'ir_Magiquest.h']]], - ['kmanualstr_1858',['kManualStr',['../IRtext_8cpp.html#a619896ae89717b2b0e1d3492bb528cbc',1,'kManualStr(): IRtext.cpp'],['../IRtext_8h.html#aa8d9143da032cdc1accf7f4441b05bc8',1,'kManualStr(): IRtext.cpp']]], - ['kmark_1859',['kMark',['../ir__Lasertag_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_Lasertag.cpp'],['../ir__MWM_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_MWM.cpp'],['../ir__RC5__RC6_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_RC5_RC6.cpp']]], - ['kmarkexcess_1860',['kMarkExcess',['../IRrecv_8h.html#a99bbffe986ad7ba86d2b11e75f4aa50e',1,'IRrecv.h']]], - ['kmarkstate_1861',['kMarkState',['../IRrecv_8h.html#acc85ad22929660bdc17fe185d87edfb2',1,'IRrecv.h']]], - ['kmax_1862',['kMax',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa0b1ac8aae6b1cfbbe89085c642b3b4b',1,'stdAc']]], - ['kmaxaccurateusecdelay_1863',['kMaxAccurateUsecDelay',['../IRsend_8h.html#a527e66125f3ae6ce87adbc72eab7d0b9',1,'IRsend.h']]], - ['kmaximumstr_1864',['kMaximumStr',['../IRtext_8cpp.html#af346693e98c91c7ce79bb22c7460dcee',1,'kMaximumStr(): IRtext.cpp'],['../IRtext_8h.html#a487173616cc3fced0489c01c11333912',1,'kMaximumStr(): IRtext.cpp']]], - ['kmaxleftstr_1865',['kMaxLeftStr',['../IRtext_8cpp.html#ae8ad7e46c3a33b4b9c5fa6545c9e3822',1,'kMaxLeftStr(): IRtext.cpp'],['../IRtext_8h.html#aac197960695463757652bc643efdcd59',1,'kMaxLeftStr(): IRtext.cpp']]], - ['kmaxrightstr_1866',['kMaxRightStr',['../IRtext_8cpp.html#a1ae3f331adb8ac6d1a27aa3d688fb65f',1,'kMaxRightStr(): IRtext.cpp'],['../IRtext_8h.html#a0f888d5c39cf82b2c02a7caad10c716e',1,'kMaxRightStr(): IRtext.cpp']]], - ['kmaxstr_1867',['kMaxStr',['../IRtext_8cpp.html#ad30e01090f06db0a3cb0c00bb6d2f0ca',1,'kMaxStr(): IRtext.cpp'],['../IRtext_8h.html#a7f4b2ff4134386a09e2bcb5f71f591cb',1,'kMaxStr(): IRtext.cpp']]], - ['kmaxtimeoutms_1868',['kMaxTimeoutMs',['../IRrecv_8h.html#a73391726d7caccb9b498bba73a969784',1,'IRrecv.h']]], - ['kmedium_1869',['kMedium',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383a3ce9d817402b59f65fb01ea044bb1ee9',1,'stdAc']]], - ['kmediumstr_1870',['kMediumStr',['../IRtext_8cpp.html#ac59539e93fdc7d8f15f1f55bcbf933c5',1,'kMediumStr(): IRtext.cpp'],['../IRtext_8h.html#a122ee1c6b866267f771888a7d7b2969b',1,'kMediumStr(): IRtext.cpp']]], - ['kmedstr_1871',['kMedStr',['../IRtext_8cpp.html#a4832f8f5118018fa3c6eae1cd652eabf',1,'kMedStr(): IRtext.cpp'],['../IRtext_8h.html#a18f613c7f11f6f746227cfa8cc1e00e0',1,'kMedStr(): IRtext.cpp']]], - ['kmetzaddressbits_1872',['kMetzAddressBits',['../ir__Metz_8cpp.html#accbe5b6fed5bd637faff4b6e04bd1ced',1,'ir_Metz.cpp']]], - ['kmetzbitmark_1873',['kMetzBitMark',['../ir__Metz_8cpp.html#a6aa8842178b5c67d709bca787a285301',1,'ir_Metz.cpp']]], - ['kmetzbits_1874',['kMetzBits',['../IRremoteESP8266_8h.html#ad07971b39dd912f9e01ab5912c0667e6',1,'IRremoteESP8266.h']]], - ['kmetzcommandbits_1875',['kMetzCommandBits',['../ir__Metz_8cpp.html#a71d1a54f579541d040640f468dbbd47f',1,'ir_Metz.cpp']]], - ['kmetzfreq_1876',['kMetzFreq',['../ir__Metz_8cpp.html#a4970bcdab10f7ccfc6d619f417c312ab',1,'ir_Metz.cpp']]], - ['kmetzhdrmark_1877',['kMetzHdrMark',['../ir__Metz_8cpp.html#a37d8db3081bb8155738a8e0ca3fb0f69',1,'ir_Metz.cpp']]], - ['kmetzhdrspace_1878',['kMetzHdrSpace',['../ir__Metz_8cpp.html#a0692936979b5453e9a3baf867ec8ed0e',1,'ir_Metz.cpp']]], - ['kmetzminrepeat_1879',['kMetzMinRepeat',['../IRremoteESP8266_8h.html#a06aa5d85cd9b325024d79ec9af9e30e4',1,'IRremoteESP8266.h']]], - ['kmetzonespace_1880',['kMetzOneSpace',['../ir__Metz_8cpp.html#a397415b944f0be2a3b87c6c8eaeddda0',1,'ir_Metz.cpp']]], - ['kmetzzerospace_1881',['kMetzZeroSpace',['../ir__Metz_8cpp.html#ac5eb86e56a2df05a02e1581d0f8595c5',1,'ir_Metz.cpp']]], - ['kmiddle_1882',['kMiddle',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43ab3199775e825c139b44e3e9ccf3cbc7e',1,'stdAc::kMiddle()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147ab3199775e825c139b44e3e9ccf3cbc7e',1,'stdAc::kMiddle()']]], - ['kmiddlestr_1883',['kMiddleStr',['../IRtext_8cpp.html#a536f05d84867cfae601d4c1a2312d755',1,'kMiddleStr(): IRtext.cpp'],['../IRtext_8h.html#abbd5b682b584b737c76bded900a6ffad',1,'kMiddleStr(): IRtext.cpp']]], - ['kmidea24bits_1884',['kMidea24Bits',['../IRremoteESP8266_8h.html#aff132faa67b1d07890378df5c9b52a14',1,'IRremoteESP8266.h']]], - ['kmidea24mingap_1885',['kMidea24MinGap',['../ir__Midea_8cpp.html#abfee73cafcc017c4742893908200dffc',1,'ir_Midea.cpp']]], - ['kmidea24minrepeat_1886',['kMidea24MinRepeat',['../IRremoteESP8266_8h.html#a8ed4bb62818fc64e4c4b60ef1094059e',1,'IRremoteESP8266.h']]], - ['kmideaacauto_1887',['kMideaACAuto',['../ir__Midea_8h.html#a379f580c4d1832a62fe49d66f7c13af6',1,'ir_Midea.h']]], - ['kmideaaccool_1888',['kMideaACCool',['../ir__Midea_8h.html#a94b1b18f6aa9c5010699ea9bfcc89b21',1,'ir_Midea.h']]], - ['kmideaacdry_1889',['kMideaACDry',['../ir__Midea_8h.html#a88c2d215406e337b437b99a04c4ca6c4',1,'ir_Midea.h']]], - ['kmideaacfan_1890',['kMideaACFan',['../ir__Midea_8h.html#ac92dd372bb18d43aea73d5ec511e1290',1,'ir_Midea.h']]], - ['kmideaacfanauto_1891',['kMideaACFanAuto',['../ir__Midea_8h.html#a334a64f653b141d67ffda2eca2a9851f',1,'ir_Midea.h']]], - ['kmideaacfanhigh_1892',['kMideaACFanHigh',['../ir__Midea_8h.html#a9c177aff562a19f32d6cf010704ac681',1,'ir_Midea.h']]], - ['kmideaacfanlow_1893',['kMideaACFanLow',['../ir__Midea_8h.html#a90ebe3812e8b554798a2083ddfe9fdff',1,'ir_Midea.h']]], - ['kmideaacfanmed_1894',['kMideaACFanMed',['../ir__Midea_8h.html#a9406c8d9ad79e6a121a29cd5455e8e7d',1,'ir_Midea.h']]], - ['kmideaacheat_1895',['kMideaACHeat',['../ir__Midea_8h.html#aa0fb74d8406327a9510f0efa8a16a488',1,'ir_Midea.h']]], - ['kmideaacmaxsensortempc_1896',['kMideaACMaxSensorTempC',['../ir__Midea_8h.html#a784d183233c97b36f18564c3079fa7df',1,'ir_Midea.h']]], - ['kmideaacmaxsensortempf_1897',['kMideaACMaxSensorTempF',['../ir__Midea_8h.html#a7255c3b9cc882762e015e23512cabc2b',1,'ir_Midea.h']]], - ['kmideaacmaxtempc_1898',['kMideaACMaxTempC',['../ir__Midea_8h.html#a0cccc3093cffabe1e512f298c04b3ba1',1,'ir_Midea.h']]], - ['kmideaacmaxtempf_1899',['kMideaACMaxTempF',['../ir__Midea_8h.html#ac7306c86080e934055d5be9728c91629',1,'ir_Midea.h']]], - ['kmideaacminsensortempc_1900',['kMideaACMinSensorTempC',['../ir__Midea_8h.html#afac831019875d12925c451bf77222a9e',1,'ir_Midea.h']]], - ['kmideaacminsensortempf_1901',['kMideaACMinSensorTempF',['../ir__Midea_8h.html#aae0e3970c0c9e9798797bb8a6b5cc2cc',1,'ir_Midea.h']]], - ['kmideaacmintempc_1902',['kMideaACMinTempC',['../ir__Midea_8h.html#ae849eb79db6c077d617283154edade84',1,'ir_Midea.h']]], - ['kmideaacmintempf_1903',['kMideaACMinTempF',['../ir__Midea_8h.html#a0b0bdf519164f793a129d0e32152069a',1,'ir_Midea.h']]], - ['kmideaacsensortempontimeroff_1904',['kMideaACSensorTempOnTimerOff',['../ir__Midea_8h.html#a009632051bf4eb07bf538df4dd88e395',1,'ir_Midea.h']]], - ['kmideaacswingvstep_1905',['kMideaACSwingVStep',['../ir__Midea_8h.html#a040f6f438909ede82e7c1cf6963a302e',1,'ir_Midea.h']]], - ['kmideaactimeroff_1906',['kMideaACTimerOff',['../ir__Midea_8h.html#aeca8c17c8b25199756e3decc283c1525',1,'ir_Midea.h']]], - ['kmideaactoggleecono_1907',['kMideaACToggleEcono',['../ir__Midea_8h.html#afae5d72469e092300eb740d696b27c2b',1,'ir_Midea.h']]], - ['kmideaactogglelight_1908',['kMideaACToggleLight',['../ir__Midea_8h.html#a76d6884a5bd3b8bfc72025f424820ce3',1,'ir_Midea.h']]], - ['kmideaactoggleswingv_1909',['kMideaACToggleSwingV',['../ir__Midea_8h.html#a5420b72289d3ae99a6dbc5c94914c473',1,'ir_Midea.h']]], - ['kmideaactoggleturbo_1910',['kMideaACToggleTurbo',['../ir__Midea_8h.html#a50f88772bb6bf8a4fd239cd6ca1f7e24',1,'ir_Midea.h']]], - ['kmideaactypecommand_1911',['kMideaACTypeCommand',['../ir__Midea_8h.html#a6df81f61bed8016ef5cad9d7a3bc89ba',1,'ir_Midea.h']]], - ['kmideaactypefollow_1912',['kMideaACTypeFollow',['../ir__Midea_8h.html#a0837f838d5b48d577a0941a1eab51bb2',1,'ir_Midea.h']]], - ['kmideaactypespecial_1913',['kMideaACTypeSpecial',['../ir__Midea_8h.html#af6ee12e87e831016f159aa2a480af8aa',1,'ir_Midea.h']]], - ['kmideabitmark_1914',['kMideaBitMark',['../ir__Midea_8cpp.html#a39dc2d03456f67418519dc0f5efde7e0',1,'ir_Midea.cpp']]], - ['kmideabitmarkticks_1915',['kMideaBitMarkTicks',['../ir__Midea_8cpp.html#ac4d9b1460516aa19913b5bd328c1e176',1,'ir_Midea.cpp']]], - ['kmideabits_1916',['kMideaBits',['../IRremoteESP8266_8h.html#afc98096b1e2945e2eaeb07d70d511239',1,'IRremoteESP8266.h']]], - ['kmideahdrmark_1917',['kMideaHdrMark',['../ir__Midea_8cpp.html#adcaa1ad6e2ba1022f3c90266f4fd0378',1,'ir_Midea.cpp']]], - ['kmideahdrmarkticks_1918',['kMideaHdrMarkTicks',['../ir__Midea_8cpp.html#af63b6cfcc5dc3e501b61c0d55d678f9e',1,'ir_Midea.cpp']]], - ['kmideahdrspace_1919',['kMideaHdrSpace',['../ir__Midea_8cpp.html#a8676eda087a85f6639b547140496c12f',1,'ir_Midea.cpp']]], - ['kmideahdrspaceticks_1920',['kMideaHdrSpaceTicks',['../ir__Midea_8cpp.html#aad99b5d8361733a9ca662735783e061c',1,'ir_Midea.cpp']]], - ['kmideamingap_1921',['kMideaMinGap',['../ir__Midea_8cpp.html#ad9ed8fb4841654fa756614862ac63be7',1,'ir_Midea.cpp']]], - ['kmideamingapticks_1922',['kMideaMinGapTicks',['../ir__Midea_8cpp.html#accd4e69e8fe0957ba013b97879fb1120',1,'ir_Midea.cpp']]], - ['kmideaminrepeat_1923',['kMideaMinRepeat',['../IRremoteESP8266_8h.html#aa8876e8e177b8e71154f8cfb42b19160',1,'IRremoteESP8266.h']]], - ['kmideaonespace_1924',['kMideaOneSpace',['../ir__Midea_8cpp.html#aabe187743f36e664c6069b004e9a82f7',1,'ir_Midea.cpp']]], - ['kmideaonespaceticks_1925',['kMideaOneSpaceTicks',['../ir__Midea_8cpp.html#a2cf0d5df2e5a3d7b1d24fd25ae3d7453',1,'ir_Midea.cpp']]], - ['kmideatick_1926',['kMideaTick',['../ir__Midea_8cpp.html#a878185258a4174978b072ac36aa377e2',1,'ir_Midea.cpp']]], - ['kmideatolerance_1927',['kMideaTolerance',['../ir__Midea_8cpp.html#a55553c3b8e7997fb1257ac2a37a929b6',1,'ir_Midea.cpp']]], - ['kmideazerospace_1928',['kMideaZeroSpace',['../ir__Midea_8cpp.html#a107d1d062e8475b84ec4ab548c3f01ef',1,'ir_Midea.cpp']]], - ['kmideazerospaceticks_1929',['kMideaZeroSpaceTicks',['../ir__Midea_8cpp.html#acd6580988c12ef5614727dd4d1b4c92d',1,'ir_Midea.cpp']]], - ['kmidstr_1930',['kMidStr',['../IRtext_8cpp.html#afd827d424c0bfdcc34b3607440fd2652',1,'kMidStr(): IRtext.cpp'],['../IRtext_8h.html#a571a28fe4174574caac4d93fb09ae196',1,'kMidStr(): IRtext.cpp']]], - ['kmilesminrepeat_1931',['kMilesMinRepeat',['../IRremoteESP8266_8h.html#aa92b00aa3423473fc42766d369ff99ad',1,'IRremoteESP8266.h']]], - ['kmilestag2hdrmark_1932',['kMilesTag2HdrMark',['../ir__MilesTag2_8cpp.html#af5598d2d156a1db3125f0e8a397cd137',1,'ir_MilesTag2.cpp']]], - ['kmilestag2msgbits_1933',['kMilesTag2MsgBits',['../IRremoteESP8266_8h.html#a09f5246478103197630f269ccb3b8c40',1,'IRremoteESP8266.h']]], - ['kmilestag2msgmask_1934',['kMilesTag2MsgMask',['../ir__MilesTag2_8cpp.html#ae92d8fa6c1c2e2320feb545a47aa3107',1,'ir_MilesTag2.cpp']]], - ['kmilestag2msgterminator_1935',['kMilesTag2MsgTerminator',['../ir__MilesTag2_8cpp.html#ab61102a594ad830baea09c17bb585f6d',1,'ir_MilesTag2.cpp']]], - ['kmilestag2onemark_1936',['kMilesTag2OneMark',['../ir__MilesTag2_8cpp.html#add084d40b9b206e86497b565f558c968',1,'ir_MilesTag2.cpp']]], - ['kmilestag2rptlength_1937',['kMilesTag2RptLength',['../ir__MilesTag2_8cpp.html#aa87dd4bd7d51c91df882f161a548de0b',1,'ir_MilesTag2.cpp']]], - ['kmilestag2shotbits_1938',['kMilesTag2ShotBits',['../IRremoteESP8266_8h.html#ae29b9f5dd6db067c17917417a3524905',1,'IRremoteESP8266.h']]], - ['kmilestag2shotmask_1939',['kMilesTag2ShotMask',['../ir__MilesTag2_8cpp.html#a4f436018ecf899050cc2da2d5a04f7c0',1,'ir_MilesTag2.cpp']]], - ['kmilestag2space_1940',['kMilesTag2Space',['../ir__MilesTag2_8cpp.html#aebc0f5dd66afa1556b25d9874a138b9d',1,'ir_MilesTag2.cpp']]], - ['kmilestag2stdduty_1941',['kMilesTag2StdDuty',['../ir__MilesTag2_8cpp.html#ada2b524ac46dda1c888fcd44a2929ce9',1,'ir_MilesTag2.cpp']]], - ['kmilestag2stdfreq_1942',['kMilesTag2StdFreq',['../ir__MilesTag2_8cpp.html#a3d6e6059094b8579e2344488f8b962fe',1,'ir_MilesTag2.cpp']]], - ['kmilestag2zeromark_1943',['kMilesTag2ZeroMark',['../ir__MilesTag2_8cpp.html#acceb49cb744e69d73c13ca234b300392',1,'ir_MilesTag2.cpp']]], - ['kmin_1944',['kMin',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383a8fbc2f6c44a6d70550df79903eb57d48',1,'stdAc']]], - ['kminimumstr_1945',['kMinimumStr',['../IRtext_8cpp.html#acbd869e5978b6fee053d33d8cf21e11a',1,'kMinimumStr(): IRtext.cpp'],['../IRtext_8h.html#a4f6fee52ae5f7f9c8fe791dbae762607',1,'kMinimumStr(): IRtext.cpp']]], - ['kminstr_1946',['kMinStr',['../IRtext_8cpp.html#a2b0c7369c1a93b8a7d5a87bf37fcee34',1,'kMinStr(): IRtext.cpp'],['../IRtext_8h.html#a4940a3f71a484f936d3e58b9573931a8',1,'kMinStr(): IRtext.cpp']]], - ['kminutesstr_1947',['kMinutesStr',['../IRtext_8cpp.html#a1c05b3e6af04586a0060c58979df002f',1,'kMinutesStr(): IRtext.cpp'],['../IRtext_8h.html#a3358666a695e8d54c23b20dc6a371a38',1,'kMinutesStr(): IRtext.cpp']]], - ['kminutestr_1948',['kMinuteStr',['../IRtext_8cpp.html#acab620931ba510a7bc395bad59169099',1,'kMinuteStr(): IRtext.cpp'],['../IRtext_8h.html#a54df015b1adadb211a30f826999c78f6',1,'kMinuteStr(): IRtext.cpp']]], - ['kmiragebitmark_1949',['kMirageBitMark',['../ir__Mirage_8cpp.html#a9ef6b7fd36c8457163384f5a5adec60a',1,'ir_Mirage.cpp']]], - ['kmiragebits_1950',['kMirageBits',['../IRremoteESP8266_8h.html#a700032ac17f14dc6d2782e141ce058f0',1,'IRremoteESP8266.h']]], - ['kmiragefreq_1951',['kMirageFreq',['../ir__Mirage_8cpp.html#aa2af21dba41dc6952e7bb98ba21a9cf0',1,'ir_Mirage.cpp']]], - ['kmiragegap_1952',['kMirageGap',['../ir__Mirage_8cpp.html#a06d54b8d7c95a5a913c87289b6ed5b43',1,'ir_Mirage.cpp']]], - ['kmiragehdrmark_1953',['kMirageHdrMark',['../ir__Mirage_8cpp.html#ad03f01d5212781babcc1f6664866e4df',1,'ir_Mirage.cpp']]], - ['kmiragehdrspace_1954',['kMirageHdrSpace',['../ir__Mirage_8cpp.html#a20c2e5c158c5f38403b0cf80fa25fd99',1,'ir_Mirage.cpp']]], - ['kmirageminrepeat_1955',['kMirageMinRepeat',['../IRremoteESP8266_8h.html#a86283c34cf9991bf8bfc29ee089a6a21',1,'IRremoteESP8266.h']]], - ['kmirageonespace_1956',['kMirageOneSpace',['../ir__Mirage_8cpp.html#af90d7f7221eedb4369fcd77142f65b51',1,'ir_Mirage.cpp']]], - ['kmiragestatelength_1957',['kMirageStateLength',['../IRremoteESP8266_8h.html#ab3b6bee4c5f483b4312a4b6eb5fcb146',1,'IRremoteESP8266.h']]], - ['kmiragezerospace_1958',['kMirageZeroSpace',['../ir__Mirage_8cpp.html#aeb32da61046362b4a2cbf366264dbd8d',1,'ir_Mirage.cpp']]], - ['kmitsubishi112auto_1959',['kMitsubishi112Auto',['../ir__Mitsubishi_8h.html#a6e38f06ff78e3406a4f2cf1e1b453402',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112bitmark_1960',['kMitsubishi112BitMark',['../ir__Mitsubishi_8cpp.html#aef96bbd77d5bd66ed220840c09f54c37',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112bits_1961',['kMitsubishi112Bits',['../IRremoteESP8266_8h.html#ae8349abe183be965e3d051cb736773a8',1,'IRremoteESP8266.h']]], - ['kmitsubishi112cool_1962',['kMitsubishi112Cool',['../ir__Mitsubishi_8h.html#aa9d1a63a8a275cda1794628f8d516963',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112dry_1963',['kMitsubishi112Dry',['../ir__Mitsubishi_8h.html#a4a3023d0342003b7947b19c9c5c25fb3',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanlow_1964',['kMitsubishi112FanLow',['../ir__Mitsubishi_8h.html#a4b8d6d04bb75ed98f6ed5bdff7472f50',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmax_1965',['kMitsubishi112FanMax',['../ir__Mitsubishi_8h.html#a5a3e7c72ed85864b34f8ee298b3adc49',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmed_1966',['kMitsubishi112FanMed',['../ir__Mitsubishi_8h.html#aa8a81057eeccbf528962b31a197b0319',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmin_1967',['kMitsubishi112FanMin',['../ir__Mitsubishi_8h.html#ad8b101130e781d30b5d4072b3c514c78',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanquiet_1968',['kMitsubishi112FanQuiet',['../ir__Mitsubishi_8h.html#addcf7a99c5ba2f4510754d22a4c0760f',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112gap_1969',['kMitsubishi112Gap',['../ir__Mitsubishi_8cpp.html#ab24cc7d395c1620b9519b5d0ce2a2023',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrmark_1970',['kMitsubishi112HdrMark',['../ir__Mitsubishi_8cpp.html#a3082567d58d6f8e6ef26714ff23f3728',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrmarktolerance_1971',['kMitsubishi112HdrMarkTolerance',['../ir__Mitsubishi_8cpp.html#a288931e01f8cffa1917fb7bc59710e20',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrspace_1972',['kMitsubishi112HdrSpace',['../ir__Mitsubishi_8cpp.html#a7b35ecbbc94f7ef622b20f21f83c0fba',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112heat_1973',['kMitsubishi112Heat',['../ir__Mitsubishi_8h.html#a260b6883e9433b466abf31618b1c4015',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112maxtemp_1974',['kMitsubishi112MaxTemp',['../ir__Mitsubishi_8h.html#afd968ea297ef8856b7266a8cc6e1bba0',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112minrepeat_1975',['kMitsubishi112MinRepeat',['../IRremoteESP8266_8h.html#a6bba58bb0f33feb9a6dfd20637d01d13',1,'IRremoteESP8266.h']]], - ['kmitsubishi112mintemp_1976',['kMitsubishi112MinTemp',['../ir__Mitsubishi_8h.html#acea288a8911a540cb9602d057eccb2a6',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112onespace_1977',['kMitsubishi112OneSpace',['../ir__Mitsubishi_8cpp.html#a8dd0d824826a7da007e78741015d418a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112statelength_1978',['kMitsubishi112StateLength',['../IRremoteESP8266_8h.html#a5ff0437b26e325bc2516a3e63c7ffe76',1,'IRremoteESP8266.h']]], - ['kmitsubishi112swinghauto_1979',['kMitsubishi112SwingHAuto',['../ir__Mitsubishi_8h.html#ab55e72c6d2b407868cda075efb24ac92',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghleft_1980',['kMitsubishi112SwingHLeft',['../ir__Mitsubishi_8h.html#a8299b42b0972bda8a4bc4f32527c33e9',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghleftmax_1981',['kMitsubishi112SwingHLeftMax',['../ir__Mitsubishi_8h.html#a48346e97056af670454bc77a64b904bc',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghmiddle_1982',['kMitsubishi112SwingHMiddle',['../ir__Mitsubishi_8h.html#a7adcab7d152d84adef2059339de4bb40',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghright_1983',['kMitsubishi112SwingHRight',['../ir__Mitsubishi_8h.html#a76cf277572a2b628d4a5353186ca2522',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghrightmax_1984',['kMitsubishi112SwingHRightMax',['../ir__Mitsubishi_8h.html#a1ff73f603b6e32075cbc9253d3090b49',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghwide_1985',['kMitsubishi112SwingHWide',['../ir__Mitsubishi_8h.html#afab80db45769ab2957afc0e4799b46e5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvauto_1986',['kMitsubishi112SwingVAuto',['../ir__Mitsubishi_8h.html#a1e16b172e864a74b426b1f823770cdaa',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvhigh_1987',['kMitsubishi112SwingVHigh',['../ir__Mitsubishi_8h.html#ab6e345e609d72f9ed903e30f3aa9a26f',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvhighest_1988',['kMitsubishi112SwingVHighest',['../ir__Mitsubishi_8h.html#a1cb8c62990dfb98a8ea228ad59cd88e5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvlow_1989',['kMitsubishi112SwingVLow',['../ir__Mitsubishi_8h.html#a515bea322889f619d64ae96c37eaba72',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvlowest_1990',['kMitsubishi112SwingVLowest',['../ir__Mitsubishi_8h.html#ac4dd729a11e3ece244df6b1ddc9250f8',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvmiddle_1991',['kMitsubishi112SwingVMiddle',['../ir__Mitsubishi_8h.html#a0ae62480999dc4cf8a223b59938a0d68',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112zerospace_1992',['kMitsubishi112ZeroSpace',['../ir__Mitsubishi_8cpp.html#ad70d1567dc2e4ea07a247f2555fc23b4',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136auto_1993',['kMitsubishi136Auto',['../ir__Mitsubishi_8h.html#ae10977a0d09f4c583b03fa05720c3aed',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136bitmark_1994',['kMitsubishi136BitMark',['../ir__Mitsubishi_8cpp.html#a3aa9c715088a58a8b4a97d5038dbf6d4',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136bits_1995',['kMitsubishi136Bits',['../IRremoteESP8266_8h.html#aa19f0122b2f906e5473a6ea232c38974',1,'IRremoteESP8266.h']]], - ['kmitsubishi136cool_1996',['kMitsubishi136Cool',['../ir__Mitsubishi_8h.html#a93332579055a07ea291b3caf9ad11944',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136dry_1997',['kMitsubishi136Dry',['../ir__Mitsubishi_8h.html#ad612c480e8664169e2b8e062d47bd8b9',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fan_1998',['kMitsubishi136Fan',['../ir__Mitsubishi_8h.html#a4445944955b9017fcd6d1ae447f1b0d7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanlow_1999',['kMitsubishi136FanLow',['../ir__Mitsubishi_8h.html#af0f7177491c4cb053e6811376be956ec',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmax_2000',['kMitsubishi136FanMax',['../ir__Mitsubishi_8h.html#a43a4337e20fbf4f6747a58c15213bd16',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmed_2001',['kMitsubishi136FanMed',['../ir__Mitsubishi_8h.html#a73ff7df8fe65829cfd5875dc5040dec7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmin_2002',['kMitsubishi136FanMin',['../ir__Mitsubishi_8h.html#a2623eaf6e7d2ceb20ee72faddf46569e',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanquiet_2003',['kMitsubishi136FanQuiet',['../ir__Mitsubishi_8h.html#af2f7483bbb99216614e01dd5aedc35d5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136gap_2004',['kMitsubishi136Gap',['../ir__Mitsubishi_8cpp.html#a3f9e0708bbe8ed3ff98a563c3ff1af2b',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136hdrmark_2005',['kMitsubishi136HdrMark',['../ir__Mitsubishi_8cpp.html#a49c54ff757d070de54e3739b775bea00',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136hdrspace_2006',['kMitsubishi136HdrSpace',['../ir__Mitsubishi_8cpp.html#a1ddd09e423c427b3956298c20725188a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136heat_2007',['kMitsubishi136Heat',['../ir__Mitsubishi_8h.html#a932f074e9348d35cea119c8141eeb7f2',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136maxtemp_2008',['kMitsubishi136MaxTemp',['../ir__Mitsubishi_8h.html#a2db420b28003dc3e05bf1c86830c61ed',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136minrepeat_2009',['kMitsubishi136MinRepeat',['../IRremoteESP8266_8h.html#a448bd7af5fdab67fb40901a3d6efed21',1,'IRremoteESP8266.h']]], - ['kmitsubishi136mintemp_2010',['kMitsubishi136MinTemp',['../ir__Mitsubishi_8h.html#a5e2e5783d33f927f941271a44d11434c',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136onespace_2011',['kMitsubishi136OneSpace',['../ir__Mitsubishi_8cpp.html#a9a0cfee8b6ea94d3f798d53d30c99d5f',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136powerbyte_2012',['kMitsubishi136PowerByte',['../ir__Mitsubishi_8h.html#aca06b9d066d3f1a322bbb0f3d1a874a7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136statelength_2013',['kMitsubishi136StateLength',['../IRremoteESP8266_8h.html#a01adbe4e1afb2ba26a5a60bf5b0b42f6',1,'IRremoteESP8266.h']]], - ['kmitsubishi136swingvauto_2014',['kMitsubishi136SwingVAuto',['../ir__Mitsubishi_8h.html#a828c2cc017cb7d00872137464d2119ae',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvhigh_2015',['kMitsubishi136SwingVHigh',['../ir__Mitsubishi_8h.html#a319b36df23511aba8fb16b13eda9333b',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvhighest_2016',['kMitsubishi136SwingVHighest',['../ir__Mitsubishi_8h.html#a5bd1dbb97df91dfec0f9493120ea1269',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvlow_2017',['kMitsubishi136SwingVLow',['../ir__Mitsubishi_8h.html#a1ba4f3f7eb75bb54a752cfb11f196af0',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvlowest_2018',['kMitsubishi136SwingVLowest',['../ir__Mitsubishi_8h.html#ab0701f0127b07780066040bc08e46a2e',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136zerospace_2019',['kMitsubishi136ZeroSpace',['../ir__Mitsubishi_8cpp.html#afaf1eca1169f492dcdd8a7266756c827',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2bitmark_2020',['kMitsubishi2BitMark',['../ir__Mitsubishi_8cpp.html#a8b0e87a15c51c3b62c14b4e7a071207f',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2hdrmark_2021',['kMitsubishi2HdrMark',['../ir__Mitsubishi_8cpp.html#a2d838e748f1f69165fb6b672955ea95e',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2hdrspace_2022',['kMitsubishi2HdrSpace',['../ir__Mitsubishi_8cpp.html#acd8994a08389c8d874afcbb8eb9c0861',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2mingap_2023',['kMitsubishi2MinGap',['../ir__Mitsubishi_8cpp.html#a7fa283a14968b582123a474c86a6fde9',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2onespace_2024',['kMitsubishi2OneSpace',['../ir__Mitsubishi_8cpp.html#aeee614cef3e95f661dca95b344edcf64',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2zerospace_2025',['kMitsubishi2ZeroSpace',['../ir__Mitsubishi_8cpp.html#a665522ccd10f4c9fba39e3f8f8a5cb95',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacauto_2026',['kMitsubishiAcAuto',['../ir__Mitsubishi_8h.html#a1fdbdc0906594e0efebbd05110877000',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacbitmark_2027',['kMitsubishiAcBitMark',['../ir__Mitsubishi_8cpp.html#a3787c48ffff208ef964886efab7e17ca',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacbits_2028',['kMitsubishiACBits',['../IRremoteESP8266_8h.html#a911a47148656b26da2e094a7ced1fc8b',1,'IRremoteESP8266.h']]], - ['kmitsubishiaccool_2029',['kMitsubishiAcCool',['../ir__Mitsubishi_8h.html#a434455f6c76f0ca354b01e6a8a6479e9',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacdry_2030',['kMitsubishiAcDry',['../ir__Mitsubishi_8h.html#a9875c4b91a1b155b5f2e12370c33e031',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacextratolerance_2031',['kMitsubishiAcExtraTolerance',['../ir__Mitsubishi_8cpp.html#a98a0e4182311d584d4de4632eb491f04',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacfanauto_2032',['kMitsubishiAcFanAuto',['../ir__Mitsubishi_8h.html#a302cfd0468875cff23c69f71c392ad36',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanmax_2033',['kMitsubishiAcFanMax',['../ir__Mitsubishi_8h.html#abbc2b87dfc6b2364d065f66f4d3e540c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanquiet_2034',['kMitsubishiAcFanQuiet',['../ir__Mitsubishi_8h.html#a90799250620dec05385b9e81cfcb83af',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanrealmax_2035',['kMitsubishiAcFanRealMax',['../ir__Mitsubishi_8h.html#aa28f81fbd686adb082786e7cda9a17fc',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfansilent_2036',['kMitsubishiAcFanSilent',['../ir__Mitsubishi_8h.html#a731206548afa4f2672a78dae677f6b44',1,'ir_Mitsubishi.h']]], - ['kmitsubishiachdrmark_2037',['kMitsubishiAcHdrMark',['../ir__Mitsubishi_8cpp.html#a11fcb08ce6bf9fa5fc50ca0e5c7d2d64',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiachdrspace_2038',['kMitsubishiAcHdrSpace',['../ir__Mitsubishi_8cpp.html#af0af560129a4666aeba1a4a9ab59e271',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacheat_2039',['kMitsubishiAcHeat',['../ir__Mitsubishi_8h.html#a6107df195ecf54ec4ef97b5ab82e911c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacmaxtemp_2040',['kMitsubishiAcMaxTemp',['../ir__Mitsubishi_8h.html#aa7178f9ba06fb137af022e629ebfabc3',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacminrepeat_2041',['kMitsubishiACMinRepeat',['../IRremoteESP8266_8h.html#a376653a421df42d889ac3b2a071de58b',1,'IRremoteESP8266.h']]], - ['kmitsubishiacmintemp_2042',['kMitsubishiAcMinTemp',['../ir__Mitsubishi_8h.html#ad9d7413138205abef46942a2144b9e98',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacnotimer_2043',['kMitsubishiAcNoTimer',['../ir__Mitsubishi_8h.html#a0f5da97478cd6cdf2ffab161657e4ab6',1,'ir_Mitsubishi.h']]], - ['kmitsubishiaconespace_2044',['kMitsubishiAcOneSpace',['../ir__Mitsubishi_8cpp.html#abdf26b381c5288556257fabf43458775',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacrptmark_2045',['kMitsubishiAcRptMark',['../ir__Mitsubishi_8cpp.html#a541d764aef906909a1a0d40466567c92',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacrptspace_2046',['kMitsubishiAcRptSpace',['../ir__Mitsubishi_8cpp.html#a4b120db1bd34c62778597abf05092d0a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacstartstoptimer_2047',['kMitsubishiAcStartStopTimer',['../ir__Mitsubishi_8h.html#aecbdc43fb4bd199c47cb5125816eab59',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacstarttimer_2048',['kMitsubishiAcStartTimer',['../ir__Mitsubishi_8h.html#a4107cbc35f18204f46adb57b0fd0f09c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacstatelength_2049',['kMitsubishiACStateLength',['../IRremoteESP8266_8h.html#a7d0d6dd6d5741f91a1afb641f11d9bc5',1,'IRremoteESP8266.h']]], - ['kmitsubishiacstoptimer_2050',['kMitsubishiAcStopTimer',['../ir__Mitsubishi_8h.html#a5e59039d523d15b145aa87222d52f2bf',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneauto_2051',['kMitsubishiAcVaneAuto',['../ir__Mitsubishi_8h.html#a1caff28ea3678cc5f655fc7147c5a15e',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneautomove_2052',['kMitsubishiAcVaneAutoMove',['../ir__Mitsubishi_8h.html#a2dc0b1ff66ffc21f626d7d8894a31fbb',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanehigh_2053',['kMitsubishiAcVaneHigh',['../ir__Mitsubishi_8h.html#a5f3d8906d4e1ddad1cc569f276f428d2',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanehighest_2054',['kMitsubishiAcVaneHighest',['../ir__Mitsubishi_8h.html#a8b587143d7fb6c766437d3257442c4cd',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanelow_2055',['kMitsubishiAcVaneLow',['../ir__Mitsubishi_8h.html#acd4f01209522f1cf5db3662a7c5e9df5',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanelowest_2056',['kMitsubishiAcVaneLowest',['../ir__Mitsubishi_8h.html#ae2cada87838e0f21886409cde4ef97e3',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanemiddle_2057',['kMitsubishiAcVaneMiddle',['../ir__Mitsubishi_8h.html#a2345713f7d81fb679e2af44fa8475945',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneswing_2058',['kMitsubishiAcVaneSwing',['../ir__Mitsubishi_8h.html#a0831abb1415db21ee9db0973b19f26fd',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneauto_2059',['kMitsubishiAcWideVaneAuto',['../ir__Mitsubishi_8h.html#a2081e2b8eb778e15b7d9f2f0f332c012',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneleft_2060',['kMitsubishiAcWideVaneLeft',['../ir__Mitsubishi_8h.html#a811260dcbb4aebb11f0ec1e2a7d0548b',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneleftmax_2061',['kMitsubishiAcWideVaneLeftMax',['../ir__Mitsubishi_8h.html#adb2917f8ccb3a6a4d72a07913ea4a9d7',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanemiddle_2062',['kMitsubishiAcWideVaneMiddle',['../ir__Mitsubishi_8h.html#ab35fe20c0aae6c3c23766b2d1ae8834e',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneright_2063',['kMitsubishiAcWideVaneRight',['../ir__Mitsubishi_8h.html#a5a315b92c684841eeb4bc97603979931',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanerightmax_2064',['kMitsubishiAcWideVaneRightMax',['../ir__Mitsubishi_8h.html#ab37f3da432a2561030bbc3ccbed3e3b2',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanewide_2065',['kMitsubishiAcWideVaneWide',['../ir__Mitsubishi_8h.html#a64714abaff784b87d326c7127674ad16',1,'ir_Mitsubishi.h']]], - ['kmitsubishiaczerospace_2066',['kMitsubishiAcZeroSpace',['../ir__Mitsubishi_8cpp.html#a9481515c349154bbb6f56cec2712ba85',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibitmark_2067',['kMitsubishiBitMark',['../ir__Mitsubishi_8cpp.html#a82c8e081b172080df14bdd6e3e6eb608',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibitmarkticks_2068',['kMitsubishiBitMarkTicks',['../ir__Mitsubishi_8cpp.html#a6daf88606f40b13bce698c73d00f5faf',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibits_2069',['kMitsubishiBits',['../IRremoteESP8266_8h.html#abd2187340d0b94996136081413e2ad22',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152bits_2070',['kMitsubishiHeavy152Bits',['../IRremoteESP8266_8h.html#ab973b35583dabc7e04b12018fac04cc9',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152fanauto_2071',['kMitsubishiHeavy152FanAuto',['../ir__MitsubishiHeavy_8h.html#ae1739c1b5cd00b28a06dfd96413570a8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanecono_2072',['kMitsubishiHeavy152FanEcono',['../ir__MitsubishiHeavy_8h.html#acf0522589438103f805889e980259eb8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanhigh_2073',['kMitsubishiHeavy152FanHigh',['../ir__MitsubishiHeavy_8h.html#a48881ddd596b6945d04465b3f7a9bee6',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanlow_2074',['kMitsubishiHeavy152FanLow',['../ir__MitsubishiHeavy_8h.html#acff7254b2ced32550ec9305dbaac3d95',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanmax_2075',['kMitsubishiHeavy152FanMax',['../ir__MitsubishiHeavy_8h.html#aa1e9a41137a7dd65fc049ae41856795f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanmed_2076',['kMitsubishiHeavy152FanMed',['../ir__MitsubishiHeavy_8h.html#ac432324a30abcc0e664cf0ff8e974516',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanturbo_2077',['kMitsubishiHeavy152FanTurbo',['../ir__MitsubishiHeavy_8h.html#a7665d1ecb52afabd0dd951f2ab54e59b',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152minrepeat_2078',['kMitsubishiHeavy152MinRepeat',['../IRremoteESP8266_8h.html#a789cbb74cf332f8440a4fcdcac188741',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152statelength_2079',['kMitsubishiHeavy152StateLength',['../IRremoteESP8266_8h.html#a31d12a44c8c3a3c4533f65b8213e2086',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152swinghauto_2080',['kMitsubishiHeavy152SwingHAuto',['../ir__MitsubishiHeavy_8h.html#ac0ed87ce67ece78e2e9f2b49da5ba152',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleft_2081',['kMitsubishiHeavy152SwingHLeft',['../ir__MitsubishiHeavy_8h.html#a1a20549b529745e913565e6d717d9f95',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleftmax_2082',['kMitsubishiHeavy152SwingHLeftMax',['../ir__MitsubishiHeavy_8h.html#a970e6b602f5bbd4d560249966f6de6c9',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleftright_2083',['kMitsubishiHeavy152SwingHLeftRight',['../ir__MitsubishiHeavy_8h.html#a24c71dc5a17affb2f2d136f6846befbc',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghmiddle_2084',['kMitsubishiHeavy152SwingHMiddle',['../ir__MitsubishiHeavy_8h.html#af1a02e21631c1efb12a01b3db065916c',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghoff_2085',['kMitsubishiHeavy152SwingHOff',['../ir__MitsubishiHeavy_8h.html#a246f8f9c9083f21ee22c2367ece2b9e2',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghright_2086',['kMitsubishiHeavy152SwingHRight',['../ir__MitsubishiHeavy_8h.html#aeec05249b3958f5a1cd629b328209e05',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghrightleft_2087',['kMitsubishiHeavy152SwingHRightLeft',['../ir__MitsubishiHeavy_8h.html#a43ddc14cc8707aa9743519b1c54eb776',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghrightmax_2088',['kMitsubishiHeavy152SwingHRightMax',['../ir__MitsubishiHeavy_8h.html#ae825ed46bf143bc6a01891a5f021c870',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvauto_2089',['kMitsubishiHeavy152SwingVAuto',['../ir__MitsubishiHeavy_8h.html#a31c20346b5538d74b58cb1fd499b5751',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvhigh_2090',['kMitsubishiHeavy152SwingVHigh',['../ir__MitsubishiHeavy_8h.html#a9ac8e39e46b43fb2276af7dd9724e3d4',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvhighest_2091',['kMitsubishiHeavy152SwingVHighest',['../ir__MitsubishiHeavy_8h.html#a554efbb611fd29a5d388d8195aa79993',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvlow_2092',['kMitsubishiHeavy152SwingVLow',['../ir__MitsubishiHeavy_8h.html#ad9a0b57ba70d318572b77236c23830a7',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvlowest_2093',['kMitsubishiHeavy152SwingVLowest',['../ir__MitsubishiHeavy_8h.html#a02f1b980aa78b4ff314209d16bf0a6e8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvmiddle_2094',['kMitsubishiHeavy152SwingVMiddle',['../ir__MitsubishiHeavy_8h.html#ae5c3ec8b8837dddff01d71c44a4ba813',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvoff_2095',['kMitsubishiHeavy152SwingVOff',['../ir__MitsubishiHeavy_8h.html#abb6905210a2f4021d157eeb61eaed7cd',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88bits_2096',['kMitsubishiHeavy88Bits',['../IRremoteESP8266_8h.html#aa80d389140df4ab7071bfb3510b35dda',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88fanauto_2097',['kMitsubishiHeavy88FanAuto',['../ir__MitsubishiHeavy_8h.html#a607cbc27223765b3dd1f9bfd77932d0f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanecono_2098',['kMitsubishiHeavy88FanEcono',['../ir__MitsubishiHeavy_8h.html#ab5fbaaffd9e0182fc7e60252f89da2c3',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanhigh_2099',['kMitsubishiHeavy88FanHigh',['../ir__MitsubishiHeavy_8h.html#aa45b29aaa7d8df7a34dfe6308a6b6412',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanlow_2100',['kMitsubishiHeavy88FanLow',['../ir__MitsubishiHeavy_8h.html#a92f0cba1aef78e5ade01c648837e7553',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanmed_2101',['kMitsubishiHeavy88FanMed',['../ir__MitsubishiHeavy_8h.html#aade681ee8ed4c4647a997a3caad093ea',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanturbo_2102',['kMitsubishiHeavy88FanTurbo',['../ir__MitsubishiHeavy_8h.html#a29201ebd9395edb2660337ee00efa1dd',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88minrepeat_2103',['kMitsubishiHeavy88MinRepeat',['../IRremoteESP8266_8h.html#ad7bccde1a9b32c962c99748fb130f711',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88statelength_2104',['kMitsubishiHeavy88StateLength',['../IRremoteESP8266_8h.html#a515e5a081c388dd4313b20ff2b6c7955',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88swingh3d_2105',['kMitsubishiHeavy88SwingH3D',['../ir__MitsubishiHeavy_8h.html#adfeb87be0ddfc6c06bbcb4a1506d3185',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghauto_2106',['kMitsubishiHeavy88SwingHAuto',['../ir__MitsubishiHeavy_8h.html#ac39f2339ab90bdc6d9c98dd6cf95fce2',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleft_2107',['kMitsubishiHeavy88SwingHLeft',['../ir__MitsubishiHeavy_8h.html#a32a76b07c6da2b09d04d985544d91af1',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleftmax_2108',['kMitsubishiHeavy88SwingHLeftMax',['../ir__MitsubishiHeavy_8h.html#a83340e32cff8ca09eb7596ec55a67853',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleftright_2109',['kMitsubishiHeavy88SwingHLeftRight',['../ir__MitsubishiHeavy_8h.html#a82f7addc930441b6e756d71ce3df24ca',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghmiddle_2110',['kMitsubishiHeavy88SwingHMiddle',['../ir__MitsubishiHeavy_8h.html#a7a4b00b2953f2bc068d83c2618484c69',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghoff_2111',['kMitsubishiHeavy88SwingHOff',['../ir__MitsubishiHeavy_8h.html#a5313aeb4115ca5a795c6ebb9871ce436',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghright_2112',['kMitsubishiHeavy88SwingHRight',['../ir__MitsubishiHeavy_8h.html#a35224e254d897b9d42e16f9dae04d984',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghrightleft_2113',['kMitsubishiHeavy88SwingHRightLeft',['../ir__MitsubishiHeavy_8h.html#aa913c0f1c61260c533c66aaa12dc83ac',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghrightmax_2114',['kMitsubishiHeavy88SwingHRightMax',['../ir__MitsubishiHeavy_8h.html#a83c481d42999e377a2c50cacc28017b0',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghsize_2115',['kMitsubishiHeavy88SwingHSize',['../ir__MitsubishiHeavy_8h.html#a46a3cb1874cf5d1875e971094527b98f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvauto_2116',['kMitsubishiHeavy88SwingVAuto',['../ir__MitsubishiHeavy_8h.html#a65c66f030afd2795d3132b3d0be2cabe',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvbyte5size_2117',['kMitsubishiHeavy88SwingVByte5Size',['../ir__MitsubishiHeavy_8h.html#ae0569562330f8c2af57a78764341c310',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvhigh_2118',['kMitsubishiHeavy88SwingVHigh',['../ir__MitsubishiHeavy_8h.html#af99a8f0925f184f56080ddf3e9a37606',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvhighest_2119',['kMitsubishiHeavy88SwingVHighest',['../ir__MitsubishiHeavy_8h.html#adc2a20b5ca5dda6417c60a1a3c321fc0',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvlow_2120',['kMitsubishiHeavy88SwingVLow',['../ir__MitsubishiHeavy_8h.html#adb086c76e06cbf6c8808470363da5e93',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvlowest_2121',['kMitsubishiHeavy88SwingVLowest',['../ir__MitsubishiHeavy_8h.html#a6f4af31ee9b187648c242aca2851d3ed',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvmiddle_2122',['kMitsubishiHeavy88SwingVMiddle',['../ir__MitsubishiHeavy_8h.html#aeaddb1d80dd777c0fdd8e77661479598',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvoff_2123',['kMitsubishiHeavy88SwingVOff',['../ir__MitsubishiHeavy_8h.html#ad29f5b94153e0fc9943a2c4c02aa1f61',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyauto_2124',['kMitsubishiHeavyAuto',['../ir__MitsubishiHeavy_8h.html#a1bcb7429a89904e3b431aaaff20e35fa',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavybitmark_2125',['kMitsubishiHeavyBitMark',['../ir__MitsubishiHeavy_8cpp.html#a54b398e130a1893bdc81067c636d6001',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavycool_2126',['kMitsubishiHeavyCool',['../ir__MitsubishiHeavy_8h.html#a5d819a9a6372fde79380a6890ffd3168',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavydry_2127',['kMitsubishiHeavyDry',['../ir__MitsubishiHeavy_8h.html#a749f4d74b6cce4ad29a7ab78bb780eaf',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyfan_2128',['kMitsubishiHeavyFan',['../ir__MitsubishiHeavy_8h.html#a55d9e0b9676da64dfdc888e7941665f8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavygap_2129',['kMitsubishiHeavyGap',['../ir__MitsubishiHeavy_8cpp.html#a92920bf4a95bccb9b55c623ff6dac96a',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyhdrmark_2130',['kMitsubishiHeavyHdrMark',['../ir__MitsubishiHeavy_8cpp.html#a9b1724efadc251117733297c424e76f4',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyhdrspace_2131',['kMitsubishiHeavyHdrSpace',['../ir__MitsubishiHeavy_8cpp.html#a9070250903c1d1653beb54ac3de27033',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyheat_2132',['kMitsubishiHeavyHeat',['../ir__MitsubishiHeavy_8h.html#a0b76a854d109dd0622155015edd31d74',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavymaxtemp_2133',['kMitsubishiHeavyMaxTemp',['../ir__MitsubishiHeavy_8h.html#a49abbf34671b67eb4ebbe881444180f4',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavymintemp_2134',['kMitsubishiHeavyMinTemp',['../ir__MitsubishiHeavy_8h.html#afa83fd435c67699da272b883277dbb98',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyonespace_2135',['kMitsubishiHeavyOneSpace',['../ir__MitsubishiHeavy_8cpp.html#adec6564e4af2886b4c7d44343d98b9dc',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavysiglength_2136',['kMitsubishiHeavySigLength',['../ir__MitsubishiHeavy_8h.html#af08e6fc65b10821e52dd4a0073033d14',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyzerospace_2137',['kMitsubishiHeavyZeroSpace',['../ir__MitsubishiHeavy_8cpp.html#a903c30cee53f76c7dc3d2fef74b6e4b2',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyzjssig_2138',['kMitsubishiHeavyZjsSig',['../ir__MitsubishiHeavy_8h.html#a01eb89bfc9d4b271a97fea566eb937ff',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyzmssig_2139',['kMitsubishiHeavyZmsSig',['../ir__MitsubishiHeavy_8h.html#a18761991123d121c8d40531d07922165',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishimincommandlength_2140',['kMitsubishiMinCommandLength',['../ir__Mitsubishi_8cpp.html#ad5a6d37e755ce1faa4cdb024d2bed26a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimincommandlengthticks_2141',['kMitsubishiMinCommandLengthTicks',['../ir__Mitsubishi_8cpp.html#a4f69a50c720c7a19f0ee04d262eb5948',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimingap_2142',['kMitsubishiMinGap',['../ir__Mitsubishi_8cpp.html#a66f6379ca4c0e5f03eda2d81be0a35b2',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimingapticks_2143',['kMitsubishiMinGapTicks',['../ir__Mitsubishi_8cpp.html#af9e8409306344cf4cd0117f2131fc67a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiminrepeat_2144',['kMitsubishiMinRepeat',['../IRremoteESP8266_8h.html#ad88bda81b48f25d30bb5a169d3b6bcec',1,'IRremoteESP8266.h']]], - ['kmitsubishionespace_2145',['kMitsubishiOneSpace',['../ir__Mitsubishi_8cpp.html#ab3c6a50b722402633aaf26e2a4a39ff0',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishionespaceticks_2146',['kMitsubishiOneSpaceTicks',['../ir__Mitsubishi_8cpp.html#a3b12f2aa2c3b4b7ef439f86356aab9cf',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishitick_2147',['kMitsubishiTick',['../ir__Mitsubishi_8cpp.html#a5197eb8b6e8de8fdfb9f056b6f7d9aa5',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishizerospace_2148',['kMitsubishiZeroSpace',['../ir__Mitsubishi_8cpp.html#a9660ac382e9a929f6acb73a32b2a1a3c',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishizerospaceticks_2149',['kMitsubishiZeroSpaceTicks',['../ir__Mitsubishi_8cpp.html#a18f364a0ba491236538bc9d086303d69',1,'ir_Mitsubishi.cpp']]], - ['kmodebitssize_2150',['kModeBitsSize',['../IRutils_8h.html#a5432915ab86062fceadc067a233f1627',1,'IRutils.h']]], - ['kmodelstr_2151',['kModelStr',['../IRtext_8cpp.html#a40905418e2934e539c50c6cfc2c4ffe3',1,'kModelStr(): IRtext.cpp'],['../IRtext_8h.html#a4a553cfcc7ca2a8cea8e1263f5f6c186',1,'kModelStr(): IRtext.cpp']]], - ['kmodestr_2152',['kModeStr',['../IRtext_8cpp.html#a7260c578d290c33b7705cd1439d992ee',1,'kModeStr(): IRtext.cpp'],['../IRtext_8h.html#a6666695e388b607bfd3bb0e6efd4193f',1,'kModeStr(): IRtext.cpp']]], - ['kmouldstr_2153',['kMouldStr',['../IRtext_8cpp.html#ac665ea584a4949565aa35629d791dbc5',1,'kMouldStr(): IRtext.cpp'],['../IRtext_8h.html#a693b29e4764d959dac781a0992f2bf30',1,'kMouldStr(): IRtext.cpp']]], - ['kmovestr_2154',['kMoveStr',['../IRtext_8cpp.html#a321f98699209fb487287c4911a0c0200',1,'kMoveStr(): IRtext.cpp'],['../IRtext_8h.html#ae99940df2a9243fd7fe6f3814c0802dd',1,'kMoveStr(): IRtext.cpp']]], - ['kmultibracketsbits_2155',['kMultibracketsBits',['../IRremoteESP8266_8h.html#aad7be0971479839493615cafcd654fc1',1,'IRremoteESP8266.h']]], - ['kmultibracketsdefaultrepeat_2156',['kMultibracketsDefaultRepeat',['../IRremoteESP8266_8h.html#a5aa418baefd018d5facc08d3bb721fe9',1,'IRremoteESP8266.h']]], - ['kmultibracketsfooterspace_2157',['kMultibracketsFooterSpace',['../ir__Multibrackets_8cpp.html#a738cde2d6a25611bea116d04375dd28a',1,'ir_Multibrackets.cpp']]], - ['kmultibracketsfreq_2158',['kMultibracketsFreq',['../ir__Multibrackets_8cpp.html#a38ba01a3c516f6018199aa9031a5fb4a',1,'ir_Multibrackets.cpp']]], - ['kmultibracketshdrmark_2159',['kMultibracketsHdrMark',['../ir__Multibrackets_8cpp.html#a4eaafbf701604ceb6591b8a8b9c1d202',1,'ir_Multibrackets.cpp']]], - ['kmultibracketstick_2160',['kMultibracketsTick',['../ir__Multibrackets_8cpp.html#aa528fbf06b8d5293d82b7efc2bcd1e9b',1,'ir_Multibrackets.cpp']]], - ['kmultibracketstolerance_2161',['kMultibracketsTolerance',['../ir__Multibrackets_8cpp.html#a242017fb86f015cdecbf31c278c43ccc',1,'ir_Multibrackets.cpp']]], - ['kmwmdelta_2162',['kMWMDelta',['../ir__MWM_8cpp.html#a4e32849a3c799af002d1290a8a33366e',1,'ir_MWM.cpp']]], - ['kmwmexcess_2163',['kMWMExcess',['../ir__MWM_8cpp.html#ab3ff88bfc09c94e70fb74a77dbdd87d7',1,'ir_MWM.cpp']]], - ['kmwmmaxwidth_2164',['kMWMMaxWidth',['../ir__MWM_8cpp.html#a833013dcb331ebce3b885b0ce73c9eaa',1,'ir_MWM.cpp']]], - ['kmwmmingap_2165',['kMWMMinGap',['../ir__MWM_8cpp.html#a4d1f9c5442390a5ba089270c1187e917',1,'ir_MWM.cpp']]], - ['kmwmminsamples_2166',['kMWMMinSamples',['../ir__MWM_8cpp.html#ad386c922a0fcbd0c5b904b9abdd8d582',1,'ir_MWM.cpp']]], - ['kmwmtick_2167',['kMWMTick',['../ir__MWM_8cpp.html#a42c39c0101ccad1e88fa206a26447256',1,'ir_MWM.cpp']]], - ['kmwmtolerance_2168',['kMWMTolerance',['../ir__MWM_8cpp.html#ae3a91ec66f51f50810229b4adc1264fd',1,'ir_MWM.cpp']]], - ['knastr_2169',['kNAStr',['../IRtext_8cpp.html#a1757349137713553454f405872bc4dcd',1,'kNAStr(): IRtext.cpp'],['../IRtext_8h.html#a5d094344fba1715dbde69ff947775264',1,'kNAStr(): IRtext.cpp']]], - ['knecbitmark_2170',['kNecBitMark',['../ir__NEC_8h.html#ab536a800ec8f7259fe7e485ea4aea465',1,'ir_NEC.h']]], - ['knecbitmarkticks_2171',['kNecBitMarkTicks',['../ir__NEC_8h.html#a84ca60f84d64d65872b40a87819eccc1',1,'ir_NEC.h']]], - ['knecbits_2172',['kNECBits',['../IRremoteESP8266_8h.html#a65e03baf646815b4b02f943bdd74a097',1,'IRremoteESP8266.h']]], - ['knechdrmark_2173',['kNecHdrMark',['../ir__NEC_8h.html#ac727ede47d30ec76b03e4a41b48ce8c7',1,'ir_NEC.h']]], - ['knechdrmarkticks_2174',['kNecHdrMarkTicks',['../ir__NEC_8h.html#ab1486c07a09bc4324c03b1c887f5c5f7',1,'ir_NEC.h']]], - ['knechdrspace_2175',['kNecHdrSpace',['../ir__NEC_8h.html#a8279410369d6ed266502615d3ff1750b',1,'ir_NEC.h']]], - ['knechdrspaceticks_2176',['kNecHdrSpaceTicks',['../ir__NEC_8h.html#a4470ee927c0c3447bdda20c52b0f8566',1,'ir_NEC.h']]], - ['knecmincommandlength_2177',['kNecMinCommandLength',['../ir__NEC_8h.html#ac7b8d897d9e5bbf29b9b1b899a2ef7d8',1,'ir_NEC.h']]], - ['knecmincommandlengthticks_2178',['kNecMinCommandLengthTicks',['../ir__NEC_8h.html#a78e411960e643495987b1cb53268bc46',1,'ir_NEC.h']]], - ['knecmingap_2179',['kNecMinGap',['../ir__NEC_8h.html#a3d6ecc128599df57dc98e97e51b2264e',1,'ir_NEC.h']]], - ['knecmingapticks_2180',['kNecMinGapTicks',['../ir__NEC_8h.html#a2e6d938510a34aa1217a56aa51ece9f5',1,'ir_NEC.h']]], - ['kneconespace_2181',['kNecOneSpace',['../ir__NEC_8h.html#af57080e9b7513d1c8e7e781f3d502fbd',1,'ir_NEC.h']]], - ['kneconespaceticks_2182',['kNecOneSpaceTicks',['../ir__NEC_8h.html#a2f1e5412d44816f92e4b6c72e16e8b1f',1,'ir_NEC.h']]], - ['knecrptlength_2183',['kNecRptLength',['../ir__NEC_8h.html#af4ab20595dfda177fbb06dd821ea14c7',1,'ir_NEC.h']]], - ['knecrptspace_2184',['kNecRptSpace',['../ir__NEC_8h.html#a9538478446b1ae5d72c8366dd6a11673',1,'ir_NEC.h']]], - ['knecrptspaceticks_2185',['kNecRptSpaceTicks',['../ir__NEC_8h.html#a91b5296d480008a4b44c5b084756f04b',1,'ir_NEC.h']]], - ['knectick_2186',['kNecTick',['../ir__NEC_8h.html#abe1ec110798236c7b626f7efe4cc5657',1,'ir_NEC.h']]], - ['kneczerospace_2187',['kNecZeroSpace',['../ir__NEC_8h.html#a00573a6bdb348339b9898173b644b693',1,'ir_NEC.h']]], - ['kneczerospaceticks_2188',['kNecZeroSpaceTicks',['../ir__NEC_8h.html#a80f316535d761c64f1d5752ef80a65ff',1,'ir_NEC.h']]], - ['kneoclimaauto_2189',['kNeoclimaAuto',['../ir__Neoclima_8h.html#a4574742c21aae9aafaff9b10f9423006',1,'ir_Neoclima.h']]], - ['kneoclimabitmark_2190',['kNeoclimaBitMark',['../ir__Neoclima_8cpp.html#ae34236a830ec2d200575ac33fda43689',1,'ir_Neoclima.cpp']]], - ['kneoclimabits_2191',['kNeoclimaBits',['../IRremoteESP8266_8h.html#afff9132e57296b4d7e04ec9e1e5ab04f',1,'IRremoteESP8266.h']]], - ['kneoclimabutton8cheat_2192',['kNeoclimaButton8CHeat',['../ir__Neoclima_8h.html#ad337d964ff800bea5c55f1fe69dfb7ff',1,'ir_Neoclima.h']]], - ['kneoclimabuttonairflow_2193',['kNeoclimaButtonAirFlow',['../ir__Neoclima_8h.html#ab5fff838f8e5ac9ff213fc69346ffa7c',1,'ir_Neoclima.h']]], - ['kneoclimabuttonecono_2194',['kNeoclimaButtonEcono',['../ir__Neoclima_8h.html#a3bf5508439a8af4543f95468fd32a8bb',1,'ir_Neoclima.h']]], - ['kneoclimabuttoneye_2195',['kNeoclimaButtonEye',['../ir__Neoclima_8h.html#a6cabdccd3c8d52cb2817f99454bdc884',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfanspeed_2196',['kNeoclimaButtonFanSpeed',['../ir__Neoclima_8h.html#ab41ffd863516b79b6c7e9b69e7d5a272',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfollow_2197',['kNeoclimaButtonFollow',['../ir__Neoclima_8h.html#a592017dce3bfa4ea2f0f341a818aff72',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfresh_2198',['kNeoclimaButtonFresh',['../ir__Neoclima_8h.html#a6a965f2dc7860879ccaf410405095e9c',1,'ir_Neoclima.h']]], - ['kneoclimabuttonhold_2199',['kNeoclimaButtonHold',['../ir__Neoclima_8h.html#aada6fdb6572bd7d841de89f1d1eed3fe',1,'ir_Neoclima.h']]], - ['kneoclimabuttonion_2200',['kNeoclimaButtonIon',['../ir__Neoclima_8h.html#a05dccf1c19237d315bb78f387f8fd57f',1,'ir_Neoclima.h']]], - ['kneoclimabuttonlight_2201',['kNeoclimaButtonLight',['../ir__Neoclima_8h.html#ac66b472b31f6183f4615584561baa284',1,'ir_Neoclima.h']]], - ['kneoclimabuttonmode_2202',['kNeoclimaButtonMode',['../ir__Neoclima_8h.html#a4cfee4b0898f1504be5cbd129cd99278',1,'ir_Neoclima.h']]], - ['kneoclimabuttonpower_2203',['kNeoclimaButtonPower',['../ir__Neoclima_8h.html#a047d19978c58b35dcd6a069fce04af87',1,'ir_Neoclima.h']]], - ['kneoclimabuttonsleep_2204',['kNeoclimaButtonSleep',['../ir__Neoclima_8h.html#adcbe2a89eecf41fe1fe2b8c62428084e',1,'ir_Neoclima.h']]], - ['kneoclimabuttonswing_2205',['kNeoclimaButtonSwing',['../ir__Neoclima_8h.html#aeea180bef85a40d8c7fe3f5facf7b199',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempdown_2206',['kNeoclimaButtonTempDown',['../ir__Neoclima_8h.html#aee91f1ebdf89b6fe9f3b31937d1185a0',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempunit_2207',['kNeoclimaButtonTempUnit',['../ir__Neoclima_8h.html#ad552c7576d7f6c89b3530bcddf15d00c',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempup_2208',['kNeoclimaButtonTempUp',['../ir__Neoclima_8h.html#abb093132f77d179ab02fc4a022d55236',1,'ir_Neoclima.h']]], - ['kneoclimabuttonturbo_2209',['kNeoclimaButtonTurbo',['../ir__Neoclima_8h.html#af156d94f9e47e8b5e2e2493308cca04c',1,'ir_Neoclima.h']]], - ['kneoclimacool_2210',['kNeoclimaCool',['../ir__Neoclima_8h.html#ac5d874e5ffce72ce68176f38e780c439',1,'ir_Neoclima.h']]], - ['kneoclimadry_2211',['kNeoclimaDry',['../ir__Neoclima_8h.html#ab68ba4480e1bcb685579c5f902d0709e',1,'ir_Neoclima.h']]], - ['kneoclimafan_2212',['kNeoclimaFan',['../ir__Neoclima_8h.html#aa6166bd65d80a708d790dbf703c83ea2',1,'ir_Neoclima.h']]], - ['kneoclimafanauto_2213',['kNeoclimaFanAuto',['../ir__Neoclima_8h.html#a7885fdbc4ae3336aac74d7ee3d8c3258',1,'ir_Neoclima.h']]], - ['kneoclimafanhigh_2214',['kNeoclimaFanHigh',['../ir__Neoclima_8h.html#a57ddf91c1cbb157b3a53b1082bac2d75',1,'ir_Neoclima.h']]], - ['kneoclimafanlow_2215',['kNeoclimaFanLow',['../ir__Neoclima_8h.html#ac9031328be51a46543ebd4360aaca55a',1,'ir_Neoclima.h']]], - ['kneoclimafanmed_2216',['kNeoclimaFanMed',['../ir__Neoclima_8h.html#a11faf2a34faf44460795b50bfbdab402',1,'ir_Neoclima.h']]], - ['kneoclimafollowme_2217',['kNeoclimaFollowMe',['../ir__Neoclima_8h.html#a493c1e6b8b8909f4201cd506a1f4804a',1,'ir_Neoclima.h']]], - ['kneoclimahdrmark_2218',['kNeoclimaHdrMark',['../ir__Neoclima_8cpp.html#aa392821c0ce822a7b7d67efd202bedd5',1,'ir_Neoclima.cpp']]], - ['kneoclimahdrspace_2219',['kNeoclimaHdrSpace',['../ir__Neoclima_8cpp.html#a3714ad66d75162ccb286152b70375588',1,'ir_Neoclima.cpp']]], - ['kneoclimaheat_2220',['kNeoclimaHeat',['../ir__Neoclima_8h.html#a5a5e53801c0f8e554c391ed56404b926',1,'ir_Neoclima.h']]], - ['kneoclimamaxtempc_2221',['kNeoclimaMaxTempC',['../ir__Neoclima_8h.html#a9333b62cef8e22e05a2fbfb566830bb6',1,'ir_Neoclima.h']]], - ['kneoclimamaxtempf_2222',['kNeoclimaMaxTempF',['../ir__Neoclima_8h.html#a7e1b67f87fbf56b52c4ad39c4865212d',1,'ir_Neoclima.h']]], - ['kneoclimamingap_2223',['kNeoclimaMinGap',['../ir__Neoclima_8cpp.html#a0e54c73eff563f6c3ec39a0951dd3d2d',1,'ir_Neoclima.cpp']]], - ['kneoclimaminrepeat_2224',['kNeoclimaMinRepeat',['../IRremoteESP8266_8h.html#a16fc26a3ff66a66068ac9638554df847',1,'IRremoteESP8266.h']]], - ['kneoclimamintempc_2225',['kNeoclimaMinTempC',['../ir__Neoclima_8h.html#a39d700251ad835e4b36ec6e9db667703',1,'ir_Neoclima.h']]], - ['kneoclimamintempf_2226',['kNeoclimaMinTempF',['../ir__Neoclima_8h.html#ac6159ea9bbc08e115c45b4611190fe9f',1,'ir_Neoclima.h']]], - ['kneoclimaonespace_2227',['kNeoclimaOneSpace',['../ir__Neoclima_8cpp.html#a5fd5f3b7f04134190aafc65762528da0',1,'ir_Neoclima.cpp']]], - ['kneoclimastatelength_2228',['kNeoclimaStateLength',['../IRremoteESP8266_8h.html#a5a871ed6d145c5ea3d50e96600c02e31',1,'IRremoteESP8266.h']]], - ['kneoclimaswingvoff_2229',['kNeoclimaSwingVOff',['../ir__Neoclima_8h.html#ad230a8c18e6edb5709cb29033f1fd221',1,'ir_Neoclima.h']]], - ['kneoclimaswingvon_2230',['kNeoclimaSwingVOn',['../ir__Neoclima_8h.html#a7021804eb30e7a7c5b9c9ababb1b8cad',1,'ir_Neoclima.h']]], - ['kneoclimazerospace_2231',['kNeoclimaZeroSpace',['../ir__Neoclima_8cpp.html#a0b98d84da4651d8d31f8f1d84621c21e',1,'ir_Neoclima.cpp']]], - ['knibblesize_2232',['kNibbleSize',['../IRutils_8h.html#aa72cd082cdde3d8d7473ed9d11ff6846',1,'IRutils.h']]], - ['knightstr_2233',['kNightStr',['../IRtext_8cpp.html#a01908d3c0f79bc015a699fc0576a8771',1,'kNightStr(): IRtext.cpp'],['../IRtext_8h.html#afe6519eaae5b1fb4d110529ce98f05b0',1,'kNightStr(): IRtext.cpp']]], - ['knikaibitmark_2234',['kNikaiBitMark',['../ir__Nikai_8cpp.html#ad665145b0ee9cc722d9fde43cbd3fd82',1,'ir_Nikai.cpp']]], - ['knikaibitmarkticks_2235',['kNikaiBitMarkTicks',['../ir__Nikai_8cpp.html#ac10d1b4c45af3ddbf3c50b85dbb0c2f0',1,'ir_Nikai.cpp']]], - ['knikaibits_2236',['kNikaiBits',['../IRremoteESP8266_8h.html#a9fce002592f9e2488b1b717d0b1a6a40',1,'IRremoteESP8266.h']]], - ['knikaihdrmark_2237',['kNikaiHdrMark',['../ir__Nikai_8cpp.html#ae0656b931e18e6e011a7c74cfaf4384b',1,'ir_Nikai.cpp']]], - ['knikaihdrmarkticks_2238',['kNikaiHdrMarkTicks',['../ir__Nikai_8cpp.html#a11671cee9a312ece8f1c90596eddd7ac',1,'ir_Nikai.cpp']]], - ['knikaihdrspace_2239',['kNikaiHdrSpace',['../ir__Nikai_8cpp.html#ae801e20e669f3039888bf48074988b84',1,'ir_Nikai.cpp']]], - ['knikaihdrspaceticks_2240',['kNikaiHdrSpaceTicks',['../ir__Nikai_8cpp.html#a83885a2fc573f947afe5015cd2f4d953',1,'ir_Nikai.cpp']]], - ['knikaimingap_2241',['kNikaiMinGap',['../ir__Nikai_8cpp.html#ad88846eaa7559df7fb944283fd292da1',1,'ir_Nikai.cpp']]], - ['knikaimingapticks_2242',['kNikaiMinGapTicks',['../ir__Nikai_8cpp.html#afdf938a763f30e3c5e534eba269dff1f',1,'ir_Nikai.cpp']]], - ['knikaionespace_2243',['kNikaiOneSpace',['../ir__Nikai_8cpp.html#a4bb69ab22b2abcd20ffff90f9267fa43',1,'ir_Nikai.cpp']]], - ['knikaionespaceticks_2244',['kNikaiOneSpaceTicks',['../ir__Nikai_8cpp.html#a25a4d289b7fad06c31312df552ee81ab',1,'ir_Nikai.cpp']]], - ['knikaitick_2245',['kNikaiTick',['../ir__Nikai_8cpp.html#a70eb8953509420081d0a294203eeb34b',1,'ir_Nikai.cpp']]], - ['knikaizerospace_2246',['kNikaiZeroSpace',['../ir__Nikai_8cpp.html#aa9af57c5c936107b00096e16cc6f57d9',1,'ir_Nikai.cpp']]], - ['knikaizerospaceticks_2247',['kNikaiZeroSpaceTicks',['../ir__Nikai_8cpp.html#a8df777a744c018e27c6969c2109d6d79',1,'ir_Nikai.cpp']]], - ['knorepeat_2248',['kNoRepeat',['../IRremoteESP8266_8h.html#a1a49dde7ffbd753f7756cf0c9dc6d826',1,'IRremoteESP8266.h']]], - ['knostr_2249',['kNoStr',['../IRtext_8cpp.html#a07897ceb4a6607d87ef37a517908a4b5',1,'kNoStr(): IRtext.cpp'],['../IRtext_8h.html#a51c9fb58ee7d01e96e2571018aea746d',1,'kNoStr(): IRtext.cpp']]], - ['knowstr_2250',['kNowStr',['../IRtext_8cpp.html#a09d8590020bcf998746528d0e50f7a20',1,'kNowStr(): IRtext.cpp'],['../IRtext_8h.html#a6a3c0965a32c36d9b5aa4918b473cc12',1,'kNowStr(): IRtext.cpp']]], - ['koff_2251',['kOff',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444facc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43acc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147acc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()']]], - ['koffstr_2252',['kOffStr',['../IRtext_8cpp.html#a9ce19a214db45b8cff83032ffa1ccdd8',1,'kOffStr(): IRtext.cpp'],['../IRtext_8h.html#a95f119413a113c9a2e8c246892b8c52a',1,'kOffStr(): IRtext.cpp']]], - ['kofftimerstr_2253',['kOffTimerStr',['../IRtext_8cpp.html#ae5faab97b26f9e877f79f49002bbba2c',1,'kOffTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a818275085f8a8d7c083b66f081689b1f',1,'kOffTimerStr(): IRtext.cpp']]], - ['konstr_2254',['kOnStr',['../IRtext_8cpp.html#ab3f42c8df156baa46326a57193f78c51',1,'kOnStr(): IRtext.cpp'],['../IRtext_8h.html#aaf4ffad7f827a2ce8512e644bc9c25c7',1,'kOnStr(): IRtext.cpp']]], - ['kontimerstr_2255',['kOnTimerStr',['../IRtext_8cpp.html#adaecb1b5526f2bb3a1334e816a414273',1,'kOnTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a9f355a0d834790287d95eea30b57564d',1,'kOnTimerStr(): IRtext.cpp']]], - ['koutsidequietstr_2256',['kOutsideQuietStr',['../IRtext_8cpp.html#a103f2a8a2a6d351cd8ea259de3c454ef',1,'kOutsideQuietStr(): IRtext.cpp'],['../IRtext_8h.html#afaf12ae53365f790b47ff3790e94cc1c',1,'kOutsideQuietStr(): IRtext.cpp']]], - ['koutsidestr_2257',['kOutsideStr',['../IRtext_8cpp.html#a8465ee1e8b1e5dd58a9cf872c9569e01',1,'kOutsideStr(): IRtext.cpp'],['../IRtext_8h.html#ada5c81e0fcc4073d6f51e7447e8c5da0',1,'kOutsideStr(): IRtext.cpp']]], - ['kpanasonicac32auto_2258',['kPanasonicAc32Auto',['../ir__Panasonic_8h.html#a3ddd918dd9ccd97fc591a795c665f275',1,'ir_Panasonic.h']]], - ['kpanasonicac32bitmark_2259',['kPanasonicAc32BitMark',['../ir__Panasonic_8cpp.html#acfabc49966b4de99f75af1e364785338',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32bits_2260',['kPanasonicAc32Bits',['../IRremoteESP8266_8h.html#adae68c6e0ebe7d18c344d9cad5ca49f0',1,'IRremoteESP8266.h']]], - ['kpanasonicac32blockspersection_2261',['kPanasonicAc32BlocksPerSection',['../ir__Panasonic_8cpp.html#a1fac8213c4bc8555ed0f3267b0f41d5f',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32cool_2262',['kPanasonicAc32Cool',['../ir__Panasonic_8h.html#afb25de760b1210efd2b6d34ddc1dcee8',1,'ir_Panasonic.h']]], - ['kpanasonicac32dry_2263',['kPanasonicAc32Dry',['../ir__Panasonic_8h.html#a92592f6e966de10510e8547e3863445a',1,'ir_Panasonic.h']]], - ['kpanasonicac32fan_2264',['kPanasonicAc32Fan',['../ir__Panasonic_8h.html#ab18e968771c2ace0b2e053ea61a0327a',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanauto_2265',['kPanasonicAc32FanAuto',['../ir__Panasonic_8h.html#aa093ff0443bb37cecd19331b2147ddb6',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanhigh_2266',['kPanasonicAc32FanHigh',['../ir__Panasonic_8h.html#a010754f8844452de684b2d346f6beb79',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanlow_2267',['kPanasonicAc32FanLow',['../ir__Panasonic_8h.html#af395ea1be8216b63320e7669f582e399',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmax_2268',['kPanasonicAc32FanMax',['../ir__Panasonic_8h.html#a7fa3122beae91071e2fde235a6b76da5',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmed_2269',['kPanasonicAc32FanMed',['../ir__Panasonic_8h.html#ad43a603c7c5d6d52ec7af7b6aa7258af',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmin_2270',['kPanasonicAc32FanMin',['../ir__Panasonic_8h.html#a3cc712e4dbf4d8ab9b60b4338a1c6831',1,'ir_Panasonic.h']]], - ['kpanasonicac32hdrmark_2271',['kPanasonicAc32HdrMark',['../ir__Panasonic_8cpp.html#a16e84fe3a68d385a51d92924a56edffe',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32hdrspace_2272',['kPanasonicAc32HdrSpace',['../ir__Panasonic_8cpp.html#a1eeb2e9362c9355ea34f6b73eded2612',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32heat_2273',['kPanasonicAc32Heat',['../ir__Panasonic_8h.html#a91581c58624da05d36e3807a4eecfd8a',1,'ir_Panasonic.h']]], - ['kpanasonicac32knowngood_2274',['kPanasonicAc32KnownGood',['../ir__Panasonic_8h.html#aeeca2ce0d19ad601e762a9f1858c2d50',1,'ir_Panasonic.h']]], - ['kpanasonicac32onespace_2275',['kPanasonicAc32OneSpace',['../ir__Panasonic_8cpp.html#aab874afd4e02b558e73ecfbc1c3b46ea',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32sectiongap_2276',['kPanasonicAc32SectionGap',['../ir__Panasonic_8cpp.html#a6e7bfebde7c0a307ce5dc6cbdb8626e0',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32sections_2277',['kPanasonicAc32Sections',['../ir__Panasonic_8cpp.html#a0108f19bc064d5bb55abb341048c298f',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32swingvauto_2278',['kPanasonicAc32SwingVAuto',['../ir__Panasonic_8h.html#a705b34ad74e271656bf8986740658321',1,'ir_Panasonic.h']]], - ['kpanasonicac32zerospace_2279',['kPanasonicAc32ZeroSpace',['../ir__Panasonic_8cpp.html#a5ec58e2129c493ebdb877f934a8af849',1,'ir_Panasonic.cpp']]], - ['kpanasonicacauto_2280',['kPanasonicAcAuto',['../ir__Panasonic_8h.html#aa7c839a4342205c384870e8a4f5ec36b',1,'ir_Panasonic.h']]], - ['kpanasonicacbits_2281',['kPanasonicAcBits',['../IRremoteESP8266_8h.html#a210f5c78b0f90b64dd5037698141433a',1,'IRremoteESP8266.h']]], - ['kpanasonicacchecksuminit_2282',['kPanasonicAcChecksumInit',['../ir__Panasonic_8h.html#a49329b4fef403696effcbcc5c8a86cd2',1,'ir_Panasonic.h']]], - ['kpanasonicaccool_2283',['kPanasonicAcCool',['../ir__Panasonic_8h.html#acfaa3d61fbb13fc6cd8d354f1c0a8dc7',1,'ir_Panasonic.h']]], - ['kpanasonicacdefaultrepeat_2284',['kPanasonicAcDefaultRepeat',['../IRremoteESP8266_8h.html#af6b7c6ad564253cb128ac92c00e86f0c',1,'IRremoteESP8266.h']]], - ['kpanasonicacdry_2285',['kPanasonicAcDry',['../ir__Panasonic_8h.html#a2d211bd2150a67819453f3220dc0cc91',1,'ir_Panasonic.h']]], - ['kpanasonicacexcess_2286',['kPanasonicAcExcess',['../ir__Panasonic_8h.html#adde8b69377faa9a4566dc15e95711257',1,'ir_Panasonic.h']]], - ['kpanasonicacfan_2287',['kPanasonicAcFan',['../ir__Panasonic_8h.html#a87e4dd423bbd1f879a9d5da31e1fea5e',1,'ir_Panasonic.h']]], - ['kpanasonicacfanauto_2288',['kPanasonicAcFanAuto',['../ir__Panasonic_8h.html#a7d4486fd68969af4f7230f12e865c698',1,'ir_Panasonic.h']]], - ['kpanasonicacfandelta_2289',['kPanasonicAcFanDelta',['../ir__Panasonic_8h.html#a2210f85a17fba2bbdfbb883e9fb57e52',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmax_2290',['kPanasonicAcFanMax',['../ir__Panasonic_8h.html#aa4599c84d72ab9c622b642870efb9cf1',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmed_2291',['kPanasonicAcFanMed',['../ir__Panasonic_8h.html#a978004e8e2c4122fec81c5a972b842a0',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmin_2292',['kPanasonicAcFanMin',['../ir__Panasonic_8h.html#a450c7951a525817d27351fb7c8ff2df9',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmodetemp_2293',['kPanasonicAcFanModeTemp',['../ir__Panasonic_8h.html#a76543f9d81c2d109e04359f0c61dcb99',1,'ir_Panasonic.h']]], - ['kpanasonicacheat_2294',['kPanasonicAcHeat',['../ir__Panasonic_8h.html#ac37bb7dd975a9aa803edfc108a5071ed',1,'ir_Panasonic.h']]], - ['kpanasonicacionfilterbyte_2295',['kPanasonicAcIonFilterByte',['../ir__Panasonic_8h.html#a16c946660d2ee3821dd2e30a69144a38',1,'ir_Panasonic.h']]], - ['kpanasonicacionfilteroffset_2296',['kPanasonicAcIonFilterOffset',['../ir__Panasonic_8h.html#a5c1b18d1b834e9d46cbd29c74a1b8269',1,'ir_Panasonic.h']]], - ['kpanasonicacmaxtemp_2297',['kPanasonicAcMaxTemp',['../ir__Panasonic_8h.html#a95fe6bc5b2565bf29d1a6dcee2f0c39f',1,'ir_Panasonic.h']]], - ['kpanasonicacmessagegap_2298',['kPanasonicAcMessageGap',['../ir__Panasonic_8cpp.html#a962cde97e8d98ad32f0b59172b641d6d',1,'ir_Panasonic.cpp']]], - ['kpanasonicacmintemp_2299',['kPanasonicAcMinTemp',['../ir__Panasonic_8h.html#a7861e8477904e1a572bcf35286fd3733',1,'ir_Panasonic.h']]], - ['kpanasonicacofftimeroffset_2300',['kPanasonicAcOffTimerOffset',['../ir__Panasonic_8h.html#a477b61044f1db5c296f13a404c536046',1,'ir_Panasonic.h']]], - ['kpanasonicacontimeroffset_2301',['kPanasonicAcOnTimerOffset',['../ir__Panasonic_8h.html#a64350202f82aabfd1673f0dda4d3c13d',1,'ir_Panasonic.h']]], - ['kpanasonicacpowerfulckpoffset_2302',['kPanasonicAcPowerfulCkpOffset',['../ir__Panasonic_8h.html#aa839301a08c8e49548f497e786dbb6fa',1,'ir_Panasonic.h']]], - ['kpanasonicacpowerfuloffset_2303',['kPanasonicAcPowerfulOffset',['../ir__Panasonic_8h.html#a27e9b1af4b65830015576beed69cb27d',1,'ir_Panasonic.h']]], - ['kpanasonicacpoweroffset_2304',['kPanasonicAcPowerOffset',['../ir__Panasonic_8h.html#a9e9b3d0c77ef93ab472ce14ed1534c77',1,'ir_Panasonic.h']]], - ['kpanasonicacquietckpoffset_2305',['kPanasonicAcQuietCkpOffset',['../ir__Panasonic_8h.html#a5a3779cd6fd8d573ae14ed4a6d676dba',1,'ir_Panasonic.h']]], - ['kpanasonicacquietoffset_2306',['kPanasonicAcQuietOffset',['../ir__Panasonic_8h.html#a1ec8db8798f79dead05233ee6333700d',1,'ir_Panasonic.h']]], - ['kpanasonicacsection1length_2307',['kPanasonicAcSection1Length',['../ir__Panasonic_8cpp.html#a34c6c085d468ed4b35f814452335d334',1,'ir_Panasonic.cpp']]], - ['kpanasonicacsectiongap_2308',['kPanasonicAcSectionGap',['../ir__Panasonic_8cpp.html#a3cf28f1268e8a35da220d42deda7c456',1,'ir_Panasonic.cpp']]], - ['kpanasonicacshortbits_2309',['kPanasonicAcShortBits',['../IRremoteESP8266_8h.html#a2fd1f84669f7994bb3c235a508333c6c',1,'IRremoteESP8266.h']]], - ['kpanasonicacstatelength_2310',['kPanasonicAcStateLength',['../IRremoteESP8266_8h.html#ab21d86545b57738354e7a3b833d38f94',1,'IRremoteESP8266.h']]], - ['kpanasonicacstateshortlength_2311',['kPanasonicAcStateShortLength',['../IRremoteESP8266_8h.html#a0a6ca8c1dfa6f313421ddf268d76d8e6',1,'IRremoteESP8266.h']]], - ['kpanasonicacswinghauto_2312',['kPanasonicAcSwingHAuto',['../ir__Panasonic_8h.html#a91e2933692ad98acf054c7a69f6c2018',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghfullleft_2313',['kPanasonicAcSwingHFullLeft',['../ir__Panasonic_8h.html#abf1d8c53a1b69d99019c6878f9ec220d',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghfullright_2314',['kPanasonicAcSwingHFullRight',['../ir__Panasonic_8h.html#a0e1b7a7591a0f14b2f8be3cb222f1187',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghleft_2315',['kPanasonicAcSwingHLeft',['../ir__Panasonic_8h.html#a853f2c2922e03a975bdd11efc474fa7e',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghmiddle_2316',['kPanasonicAcSwingHMiddle',['../ir__Panasonic_8h.html#afad8a7257fc178321867f16939fff7c7',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghright_2317',['kPanasonicAcSwingHRight',['../ir__Panasonic_8h.html#a282900f1c494efdc6ee057357e624d2e',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvauto_2318',['kPanasonicAcSwingVAuto',['../ir__Panasonic_8h.html#a218e2ea8c76966105c71edcb6e46cd12',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvhigh_2319',['kPanasonicAcSwingVHigh',['../ir__Panasonic_8h.html#a25c63195112c5aedc5b5bad40441c55a',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvhighest_2320',['kPanasonicAcSwingVHighest',['../ir__Panasonic_8h.html#ac1cea523d6e1da08d333e0b4acec81af',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvlow_2321',['kPanasonicAcSwingVLow',['../ir__Panasonic_8h.html#a3ae9b6c5581f1bfb5b31e252052a6c9d',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvlowest_2322',['kPanasonicAcSwingVLowest',['../ir__Panasonic_8h.html#af269e81dae5989c33199d607adcc04a0',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvmiddle_2323',['kPanasonicAcSwingVMiddle',['../ir__Panasonic_8h.html#a5d46c8234f97e10695507b17a7483d51',1,'ir_Panasonic.h']]], - ['kpanasonicactempoffset_2324',['kPanasonicAcTempOffset',['../ir__Panasonic_8h.html#a203e0351cd53db8376312a3289503175',1,'ir_Panasonic.h']]], - ['kpanasonicactempsize_2325',['kPanasonicAcTempSize',['../ir__Panasonic_8h.html#af30649a3489a4a1dc1f655d15c00e991',1,'ir_Panasonic.h']]], - ['kpanasonicactimemax_2326',['kPanasonicAcTimeMax',['../ir__Panasonic_8h.html#a61378ccad09d1a2e900123a8cbd34858',1,'ir_Panasonic.h']]], - ['kpanasonicactimeoverflowsize_2327',['kPanasonicAcTimeOverflowSize',['../ir__Panasonic_8h.html#ad7942b5ffbb2b1f7a5d9b3719592622b',1,'ir_Panasonic.h']]], - ['kpanasonicactimesize_2328',['kPanasonicAcTimeSize',['../ir__Panasonic_8h.html#a16577844a2f5ca46e2dff076952f2963',1,'ir_Panasonic.h']]], - ['kpanasonicactimespecial_2329',['kPanasonicAcTimeSpecial',['../ir__Panasonic_8h.html#aefb20e7cdbbc27e3c0725a8660a84a28',1,'ir_Panasonic.h']]], - ['kpanasonicactolerance_2330',['kPanasonicAcTolerance',['../ir__Panasonic_8h.html#a586a655b3afd82c38588fc1b61089aa1',1,'ir_Panasonic.h']]], - ['kpanasonicbitmark_2331',['kPanasonicBitMark',['../ir__Panasonic_8cpp.html#a428cd02c5dc3dc571e495efa0707cc99',1,'ir_Panasonic.cpp']]], - ['kpanasonicbits_2332',['kPanasonicBits',['../IRremoteESP8266_8h.html#aa148f54492be1cf8a8b285a96861a0b7',1,'IRremoteESP8266.h']]], - ['kpanasonicckp_2333',['kPanasonicCkp',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa537e8c640473597d2a1cb832498f9cb0',1,'IRsend.h']]], - ['kpanasonicdke_2334',['kPanasonicDke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fac8df2e0cfd553b0103f4c06a0fd573fd',1,'IRsend.h']]], - ['kpanasonicendgap_2335',['kPanasonicEndGap',['../ir__Panasonic_8cpp.html#a3cb2f7a925bb8374a90e3156febabb39',1,'ir_Panasonic.cpp']]], - ['kpanasonicfreq_2336',['kPanasonicFreq',['../ir__Panasonic_8h.html#af344612d7f1c0d3f8271c312f310243e',1,'ir_Panasonic.h']]], - ['kpanasonichdrmark_2337',['kPanasonicHdrMark',['../ir__Panasonic_8cpp.html#a0d36b699fead0e229c583dae94f5e8f9',1,'ir_Panasonic.cpp']]], - ['kpanasonichdrspace_2338',['kPanasonicHdrSpace',['../ir__Panasonic_8cpp.html#ae56b3eb80f186a63b0f69c6b4e9efce8',1,'ir_Panasonic.cpp']]], - ['kpanasonicjke_2339',['kPanasonicJke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fabf39cff180c071fbc44601eeded236c4',1,'IRsend.h']]], - ['kpanasonicknowngoodstate_2340',['kPanasonicKnownGoodState',['../ir__Panasonic_8h.html#a88a9678f8b00efa173b800b0b8441f87',1,'ir_Panasonic.h']]], - ['kpanasoniclke_2341',['kPanasonicLke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa71ceb4b576a03a47f0d945323b896cd6',1,'IRsend.h']]], - ['kpanasonicmanufacturer_2342',['kPanasonicManufacturer',['../IRremoteESP8266_8h.html#a1dd1a9799e5d20d39e82ff678bf07b47',1,'IRremoteESP8266.h']]], - ['kpanasonicmincommandlength_2343',['kPanasonicMinCommandLength',['../ir__Panasonic_8cpp.html#a5f191fff3eeb722cb03bee859a016132',1,'ir_Panasonic.cpp']]], - ['kpanasonicmingap_2344',['kPanasonicMinGap',['../ir__Panasonic_8cpp.html#a61592f3569c0ee4825cca185fb43236d',1,'ir_Panasonic.cpp']]], - ['kpanasonicnke_2345',['kPanasonicNke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6faf70fc847e204f60ab1dc5ecb330fc790',1,'IRsend.h']]], - ['kpanasoniconespace_2346',['kPanasonicOneSpace',['../ir__Panasonic_8cpp.html#a9069f2ab94cacbd301d7615795c155b1',1,'ir_Panasonic.cpp']]], - ['kpanasonicrkr_2347',['kPanasonicRkr',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fab809a062f38eb61589cf5aa2db5789db',1,'IRsend.h']]], - ['kpanasonicunknown_2348',['kPanasonicUnknown',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa3b23623c9580717d0ade5137200ae2a4',1,'IRsend.h']]], - ['kpanasoniczerospace_2349',['kPanasonicZeroSpace',['../ir__Panasonic_8cpp.html#a43f64a8326fd2447653c81488673fd21',1,'ir_Panasonic.cpp']]], - ['kperiodoffset_2350',['kPeriodOffset',['../IRsend_8h.html#a3a451a4e72e39a4bbf75c62af0ac62f5',1,'IRsend.h']]], - ['kpioneerbitmark_2351',['kPioneerBitMark',['../ir__Pioneer_8cpp.html#a6117fd080ad88efcf943aef53dadd1ad',1,'ir_Pioneer.cpp']]], - ['kpioneerbits_2352',['kPioneerBits',['../IRremoteESP8266_8h.html#a6a7ccd31e0a6f967a219b1a53b89653b',1,'IRremoteESP8266.h']]], - ['kpioneerhdrmark_2353',['kPioneerHdrMark',['../ir__Pioneer_8cpp.html#a03c4df7d9eba6ab56df0451a18e5adbd',1,'ir_Pioneer.cpp']]], - ['kpioneerhdrspace_2354',['kPioneerHdrSpace',['../ir__Pioneer_8cpp.html#a1308ff993ce7d030bdef919d65f35e62',1,'ir_Pioneer.cpp']]], - ['kpioneermincommandlength_2355',['kPioneerMinCommandLength',['../ir__Pioneer_8cpp.html#a22cb7d70bb0eb3b0ce6c7da3631d832f',1,'ir_Pioneer.cpp']]], - ['kpioneermingap_2356',['kPioneerMinGap',['../ir__Pioneer_8cpp.html#adc67bf557bd3474f18dfaa3125c1af41',1,'ir_Pioneer.cpp']]], - ['kpioneeronespace_2357',['kPioneerOneSpace',['../ir__Pioneer_8cpp.html#a5238b059346168128184bca93de16a54',1,'ir_Pioneer.cpp']]], - ['kpioneertick_2358',['kPioneerTick',['../ir__Pioneer_8cpp.html#a63de2364627344f86537ac82447c5cb4',1,'ir_Pioneer.cpp']]], - ['kpioneerzerospace_2359',['kPioneerZeroSpace',['../ir__Pioneer_8cpp.html#a3c6428f201dd3e32c171d6db44269d67',1,'ir_Pioneer.cpp']]], - ['kpowerbuttonstr_2360',['kPowerButtonStr',['../IRtext_8cpp.html#a69d36084b1410a06aa780edcda9428dd',1,'kPowerButtonStr(): IRtext.cpp'],['../IRtext_8h.html#adb54b8d070a4ba7f08b7d2d0f1c03d1c',1,'kPowerButtonStr(): IRtext.cpp']]], - ['kpowerfulstr_2361',['kPowerfulStr',['../IRtext_8cpp.html#a5dfc12bfa12ddf7da3ab6c216258284a',1,'kPowerfulStr(): IRtext.cpp'],['../IRtext_8h.html#a7980630cd028febca8245730dffa684b',1,'kPowerfulStr(): IRtext.cpp']]], - ['kpowerstr_2362',['kPowerStr',['../IRtext_8cpp.html#a5b4b43efe1f1c27d6aee90ebb3500792',1,'kPowerStr(): IRtext.cpp'],['../IRtext_8h.html#a47a76dc8d87d9694a36c6417d7e19dda',1,'kPowerStr(): IRtext.cpp']]], - ['kpowertogglestr_2363',['kPowerToggleStr',['../IRtext_8cpp.html#a2f7e242dc28cf61fb718bb5c1b681642',1,'kPowerToggleStr(): IRtext.cpp'],['../IRtext_8h.html#afd802a94c6146efb7812ef89f3bf0cc5',1,'kPowerToggleStr(): IRtext.cpp']]], - ['kpreviouspowerstr_2364',['kPreviousPowerStr',['../IRtext_8cpp.html#a2a5cd83ac519798debd7065eb03d5d72',1,'kPreviousPowerStr(): IRtext.cpp'],['../IRtext_8h.html#a9833364e538f50be227ff6c0b01f8f7c',1,'kPreviousPowerStr(): IRtext.cpp']]], - ['kprontodataoffset_2365',['kProntoDataOffset',['../ir__Pronto_8cpp.html#ac073b9ac759e09091b3d80af747656a1',1,'ir_Pronto.cpp']]], - ['kprontofreqfactor_2366',['kProntoFreqFactor',['../ir__Pronto_8cpp.html#aa63eef9baeb563c8494d85d13b956db8',1,'ir_Pronto.cpp']]], - ['kprontofreqoffset_2367',['kProntoFreqOffset',['../ir__Pronto_8cpp.html#a2fae4105559199e292121bcb847d9d52',1,'ir_Pronto.cpp']]], - ['kprontominlength_2368',['kProntoMinLength',['../IRremoteESP8266_8h.html#a25dd42234e21d41b0b4bc97e1fe921c4',1,'IRremoteESP8266.h']]], - ['kprontoseq1lenoffset_2369',['kProntoSeq1LenOffset',['../ir__Pronto_8cpp.html#a1df51305dddf233fc3963856e288366f',1,'ir_Pronto.cpp']]], - ['kprontoseq2lenoffset_2370',['kProntoSeq2LenOffset',['../ir__Pronto_8cpp.html#a708744a9f82547e5abc17d7ed866a648',1,'ir_Pronto.cpp']]], - ['kprontotypeoffset_2371',['kProntoTypeOffset',['../ir__Pronto_8cpp.html#a603ff34f28f270a98bf0bebdaf19bfbc',1,'ir_Pronto.cpp']]], - ['kprotocolstr_2372',['kProtocolStr',['../IRtext_8cpp.html#afb9e901ded9e88a48218282a7446ff63',1,'kProtocolStr(): IRtext.cpp'],['../IRtext_8h.html#ac50f97a0d33041fe4bba6e02c500c8ef',1,'kProtocolStr(): IRtext.cpp']]], - ['kpurifystr_2373',['kPurifyStr',['../IRtext_8cpp.html#a85c2b59f6cba1878648d3d8fe9d7f9a4',1,'kPurifyStr(): IRtext.cpp'],['../IRtext_8h.html#aae574dbb4b9f70db0e64386d61c21beb',1,'kPurifyStr(): IRtext.cpp']]], - ['kquietstr_2374',['kQuietStr',['../IRtext_8cpp.html#a6f85e3119eb884455f474ff909be6b53',1,'kQuietStr(): IRtext.cpp'],['../IRtext_8h.html#a7086660370d73d6f499972cf802db8f7',1,'kQuietStr(): IRtext.cpp']]], - ['krawbuf_2375',['kRawBuf',['../IRrecv_8h.html#aadfa37def10a1adeaf2cf4c09d7504e3',1,'IRrecv.h']]], - ['krawtick_2376',['kRawTick',['../IRrecv_8h.html#a373dde69c312b0122665e581eea1297b',1,'IRrecv.h']]], - ['krc5bits_2377',['kRC5Bits',['../IRremoteESP8266_8h.html#ad0935984e6518e340562665742199483',1,'IRremoteESP8266.h']]], - ['krc5mincommandlength_2378',['kRc5MinCommandLength',['../ir__RC5__RC6_8cpp.html#a32b5997148b53fd2984388f6d0384c35',1,'ir_RC5_RC6.cpp']]], - ['krc5mingap_2379',['kRc5MinGap',['../ir__RC5__RC6_8cpp.html#a26580409f593179d838c465647e35c41',1,'ir_RC5_RC6.cpp']]], - ['krc5rawbits_2380',['kRC5RawBits',['../IRremoteESP8266_8h.html#a955183d3358fcafea853014ddd890574',1,'IRremoteESP8266.h']]], - ['krc5samplesmin_2381',['kRc5SamplesMin',['../ir__RC5__RC6_8cpp.html#aa206173838597c760b4a01c36bbc771a',1,'ir_RC5_RC6.cpp']]], - ['krc5t1_2382',['kRc5T1',['../ir__RC5__RC6_8cpp.html#aa42cae15fa77a196eb8f198de09e19eb',1,'ir_RC5_RC6.cpp']]], - ['krc5togglemask_2383',['kRc5ToggleMask',['../ir__RC5__RC6_8cpp.html#ae3485c1c157d6d84a0385cb1bfb8833a',1,'ir_RC5_RC6.cpp']]], - ['krc5xbits_2384',['kRC5XBits',['../IRremoteESP8266_8h.html#abec3ebb217126560e824fa8b66d495bc',1,'IRremoteESP8266.h']]], - ['krc6_5f36bits_2385',['kRC6_36Bits',['../IRremoteESP8266_8h.html#a30a2cb328aa0d47f53aba56055ac74e0',1,'IRremoteESP8266.h']]], - ['krc6_5f36togglemask_2386',['kRc6_36ToggleMask',['../ir__RC5__RC6_8cpp.html#a31ae862ce2a43edd99bda647262b18fa',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrmark_2387',['kRc6HdrMark',['../ir__RC5__RC6_8cpp.html#ae05bbb9f690cc92feb0a9c14b3b8c477',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrmarkticks_2388',['kRc6HdrMarkTicks',['../ir__RC5__RC6_8cpp.html#aff2a5bc05ddf61d289c44a4fd093009c',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrspace_2389',['kRc6HdrSpace',['../ir__RC5__RC6_8cpp.html#a0196311c9b116cf48c8f901fb6c93ac3',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrspaceticks_2390',['kRc6HdrSpaceTicks',['../ir__RC5__RC6_8cpp.html#a35a9cc59fe5251a34c88e34b6a507fd3',1,'ir_RC5_RC6.cpp']]], - ['krc6mode0bits_2391',['kRC6Mode0Bits',['../IRremoteESP8266_8h.html#a84a6d3e15e98f7a4917d252d5665534a',1,'IRremoteESP8266.h']]], - ['krc6rptlength_2392',['kRc6RptLength',['../ir__RC5__RC6_8cpp.html#a4989f36b790a99545e708c8681b6b961',1,'ir_RC5_RC6.cpp']]], - ['krc6rptlengthticks_2393',['kRc6RptLengthTicks',['../ir__RC5__RC6_8cpp.html#acf2dc0074bfe7671deb8985eba4396e3',1,'ir_RC5_RC6.cpp']]], - ['krc6tick_2394',['kRc6Tick',['../ir__RC5__RC6_8cpp.html#aad98dc2541039634817609d4e297322f',1,'ir_RC5_RC6.cpp']]], - ['krc6togglemask_2395',['kRc6ToggleMask',['../ir__RC5__RC6_8cpp.html#a4df09270c1e9cda504026189e30829ff',1,'ir_RC5_RC6.cpp']]], - ['krcmmbitmark_2396',['kRcmmBitMark',['../ir__RCMM_8cpp.html#ad768f62bbd7e4df567c3e53ea0a8ed06',1,'ir_RCMM.cpp']]], - ['krcmmbitmarkticks_2397',['kRcmmBitMarkTicks',['../ir__RCMM_8cpp.html#a48aeb7992d30f8c7cfa04dbd14ea0996',1,'ir_RCMM.cpp']]], - ['krcmmbits_2398',['kRCMMBits',['../IRremoteESP8266_8h.html#a2bfaf393c2d77a594f2a0a5a763e84f5',1,'IRremoteESP8266.h']]], - ['krcmmbitspace0_2399',['kRcmmBitSpace0',['../ir__RCMM_8cpp.html#a34a7b22107461be18500f6d1ddf979e3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace0ticks_2400',['kRcmmBitSpace0Ticks',['../ir__RCMM_8cpp.html#a0864042e8c098169d1d221fbd798cda3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace1_2401',['kRcmmBitSpace1',['../ir__RCMM_8cpp.html#a812b9895f0eccaaf78752dc7030022aa',1,'ir_RCMM.cpp']]], - ['krcmmbitspace1ticks_2402',['kRcmmBitSpace1Ticks',['../ir__RCMM_8cpp.html#a89f945e0a91feccd505f0b8310a9ebb9',1,'ir_RCMM.cpp']]], - ['krcmmbitspace2_2403',['kRcmmBitSpace2',['../ir__RCMM_8cpp.html#aff0db6a8f28d3a307cd7bbb6dc90e3e3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace2ticks_2404',['kRcmmBitSpace2Ticks',['../ir__RCMM_8cpp.html#a592dda1dd9239c9a015163b80cddf859',1,'ir_RCMM.cpp']]], - ['krcmmbitspace3_2405',['kRcmmBitSpace3',['../ir__RCMM_8cpp.html#a5e6351cbcb4c576871584dbf61d87d33',1,'ir_RCMM.cpp']]], - ['krcmmbitspace3ticks_2406',['kRcmmBitSpace3Ticks',['../ir__RCMM_8cpp.html#aa3f7d7e37ffa6bf9649eef7720770767',1,'ir_RCMM.cpp']]], - ['krcmmexcess_2407',['kRcmmExcess',['../ir__RCMM_8cpp.html#a3845e23031e92fd008157b0f95827432',1,'ir_RCMM.cpp']]], - ['krcmmhdrmark_2408',['kRcmmHdrMark',['../ir__RCMM_8cpp.html#a7fc5d5c1dc89ef0615fcaebaacc504df',1,'ir_RCMM.cpp']]], - ['krcmmhdrmarkticks_2409',['kRcmmHdrMarkTicks',['../ir__RCMM_8cpp.html#a00e93c94548ac081083ed2cabd614330',1,'ir_RCMM.cpp']]], - ['krcmmhdrspace_2410',['kRcmmHdrSpace',['../ir__RCMM_8cpp.html#af4dc2548c8069caf889612b3b28895ea',1,'ir_RCMM.cpp']]], - ['krcmmhdrspaceticks_2411',['kRcmmHdrSpaceTicks',['../ir__RCMM_8cpp.html#a87cd8bb5322fb38aecd20362a7df5016',1,'ir_RCMM.cpp']]], - ['krcmmmingap_2412',['kRcmmMinGap',['../ir__RCMM_8cpp.html#a94f9533bf18c0a2c2b6511ffa95ff5dc',1,'ir_RCMM.cpp']]], - ['krcmmmingapticks_2413',['kRcmmMinGapTicks',['../ir__RCMM_8cpp.html#aacb274f2da878aed511f6ab400cd51e9',1,'ir_RCMM.cpp']]], - ['krcmmrptlength_2414',['kRcmmRptLength',['../ir__RCMM_8cpp.html#a1dccf2b944d4eeb8b7dd2a1f66548a68',1,'ir_RCMM.cpp']]], - ['krcmmrptlengthticks_2415',['kRcmmRptLengthTicks',['../ir__RCMM_8cpp.html#a4cd637fa0a6071f9ea0b52c346ffe7f0',1,'ir_RCMM.cpp']]], - ['krcmmtick_2416',['kRcmmTick',['../ir__RCMM_8cpp.html#a9e1a3a26185d58ff675eec7485bc671f',1,'ir_RCMM.cpp']]], - ['krcmmtolerance_2417',['kRcmmTolerance',['../ir__RCMM_8cpp.html#a4b95480078186b3498ca6426e5bbc428',1,'ir_RCMM.cpp']]], - ['krcz01channelmask_2418',['kRcz01ChannelMask',['../ir__Doshisha_8cpp.html#a085b3d47e4cf8d8b4ba999ae58ec3533',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel1_2419',['kRcz01CommandLevel1',['../ir__Doshisha_8cpp.html#a436b801a282374de0f28e27828e1c4bf',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel2_2420',['kRcz01CommandLevel2',['../ir__Doshisha_8cpp.html#a311ef41fff985236216238565219bfe7',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel3_2421',['kRcz01CommandLevel3',['../ir__Doshisha_8cpp.html#a879bd44f482c87fbaf9fecaad8ed4c6d',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel4_2422',['kRcz01CommandLevel4',['../ir__Doshisha_8cpp.html#a52bad85f1a3918e3031297a6c6074b45',1,'ir_Doshisha.cpp']]], - ['krcz01commandleveldown_2423',['kRcz01CommandLevelDown',['../ir__Doshisha_8cpp.html#a1678269506503f1abf871ed0af6dcc2b',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevelup_2424',['kRcz01CommandLevelUp',['../ir__Doshisha_8cpp.html#a4eba011d2b110a5348783534e957660e',1,'ir_Doshisha.cpp']]], - ['krcz01commandmask_2425',['kRcz01CommandMask',['../ir__Doshisha_8cpp.html#a148e2f676f895f4e3b77b39780e2ca94',1,'ir_Doshisha.cpp']]], - ['krcz01commandnightlight_2426',['kRcz01CommandNightLight',['../ir__Doshisha_8cpp.html#a47e9d5bf353cf8aef8199fb74693aa0f',1,'ir_Doshisha.cpp']]], - ['krcz01commandoff_2427',['kRcz01CommandOff',['../ir__Doshisha_8cpp.html#a97fd32975ab9fafa85e0704964780773',1,'ir_Doshisha.cpp']]], - ['krcz01commandon_2428',['kRcz01CommandOn',['../ir__Doshisha_8cpp.html#a7377eac8b1d938903fd43d7505dd8a49',1,'ir_Doshisha.cpp']]], - ['krcz01commandswitchchannel_2429',['kRcz01CommandSwitchChannel',['../ir__Doshisha_8cpp.html#afcd3fe98c34ef9572c1a68bd143e128b',1,'ir_Doshisha.cpp']]], - ['krcz01commandtimmer30_2430',['kRcz01CommandTimmer30',['../ir__Doshisha_8cpp.html#a3deebab67d01756f7776f0d11cbdef6e',1,'ir_Doshisha.cpp']]], - ['krcz01commandtimmer60_2431',['kRcz01CommandTimmer60',['../ir__Doshisha_8cpp.html#abac6b50227512508aeb5b6042a8380fd',1,'ir_Doshisha.cpp']]], - ['krcz01signature_2432',['kRcz01Signature',['../ir__Doshisha_8cpp.html#a35c6dff74ae1702933e33f02f743f616',1,'ir_Doshisha.cpp']]], - ['krcz01signaturemask_2433',['kRcz01SignatureMask',['../ir__Doshisha_8cpp.html#a1f3b9cdfba7cc7515611d7145b7318a5',1,'ir_Doshisha.cpp']]], - ['krecyclestr_2434',['kRecycleStr',['../IRtext_8cpp.html#a5159481cec97d0fdfbfac15e43a8c20a',1,'kRecycleStr(): IRtext.cpp'],['../IRtext_8h.html#a91ca83e3aebe460fe74314747580aefa',1,'kRecycleStr(): IRtext.cpp']]], - ['krepeat_2435',['kRepeat',['../IRrecv_8h.html#ae8b11750ba7f2e2d56343f770720ed89',1,'IRrecv.h']]], - ['krepeatstr_2436',['kRepeatStr',['../IRtext_8cpp.html#ad55ef2e023915f39c7ce77e7eeb1ad76',1,'kRepeatStr(): IRtext.cpp'],['../IRtext_8h.html#a74a53cc1564f75b36269eb1ca8c6235b',1,'kRepeatStr(): IRtext.cpp']]], - ['kright_2437',['kRight',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a2dd2b017192f8a09367d48c7648213c9',1,'stdAc']]], - ['krightmax_2438',['kRightMax',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a856bf9929ade459f451be17c97db4b32',1,'stdAc']]], - ['krightmaxstr_2439',['kRightMaxStr',['../IRtext_8cpp.html#af3e63659779f5fdb4aded4861521e564',1,'kRightMaxStr(): IRtext.cpp'],['../IRtext_8h.html#ac7a90008560fd1e7b4ed240f354d8fae',1,'kRightMaxStr(): IRtext.cpp']]], - ['krightstr_2440',['kRightStr',['../IRtext_8cpp.html#aacc9b0b21efb6053b75ed117d4ab9105',1,'kRightStr(): IRtext.cpp'],['../IRtext_8h.html#a953f9c48fcf87e81bf6f383e8fe8b1dd',1,'kRightStr(): IRtext.cpp']]], - ['kroomstr_2441',['kRoomStr',['../IRtext_8cpp.html#ab3f02ff54af9a94fd57d098838a4a642',1,'kRoomStr(): IRtext.cpp'],['../IRtext_8h.html#a5358a85538e4643c1cc109a7a0b90079',1,'kRoomStr(): IRtext.cpp']]], - ['ksamsung36bitmark_2442',['kSamsung36BitMark',['../ir__Samsung_8cpp.html#a2e9bc50c6320d7a1244713b4a1647e71',1,'ir_Samsung.cpp']]], - ['ksamsung36bits_2443',['kSamsung36Bits',['../IRremoteESP8266_8h.html#a5e1e6f30a41f0d94652429a9e1034179',1,'IRremoteESP8266.h']]], - ['ksamsung36hdrmark_2444',['kSamsung36HdrMark',['../ir__Samsung_8cpp.html#a47c0e69d6e21597ea15dc613c58861b6',1,'ir_Samsung.cpp']]], - ['ksamsung36hdrspace_2445',['kSamsung36HdrSpace',['../ir__Samsung_8cpp.html#a4761b62640c0a56ee641c9077fd800dd',1,'ir_Samsung.cpp']]], - ['ksamsung36onespace_2446',['kSamsung36OneSpace',['../ir__Samsung_8cpp.html#a3a913fe500926cf448d7408303e3698c',1,'ir_Samsung.cpp']]], - ['ksamsung36zerospace_2447',['kSamsung36ZeroSpace',['../ir__Samsung_8cpp.html#ac24972846bc1a2240537b212f5aa55d6',1,'ir_Samsung.cpp']]], - ['ksamsungacauto_2448',['kSamsungAcAuto',['../ir__Samsung_8h.html#a1b05ff970f45c57b13fc13d11e95396b',1,'ir_Samsung.h']]], - ['ksamsungacautotemp_2449',['kSamsungAcAutoTemp',['../ir__Samsung_8h.html#a87bb469afc0e2b6bad44634f3ba5e0ef',1,'ir_Samsung.h']]], - ['ksamsungacbitmark_2450',['kSamsungAcBitMark',['../ir__Samsung_8cpp.html#a37e6f36939f1a12ffe52907bbb64a4cf',1,'ir_Samsung.cpp']]], - ['ksamsungacbits_2451',['kSamsungAcBits',['../IRremoteESP8266_8h.html#adebe85ab48eb876ec15daacca246797c',1,'IRremoteESP8266.h']]], - ['ksamsungacbreezeon_2452',['kSamsungAcBreezeOn',['../ir__Samsung_8h.html#a06299ba6942969f7b9472e752b50d4d7',1,'ir_Samsung.h']]], - ['ksamsungaccool_2453',['kSamsungAcCool',['../ir__Samsung_8h.html#a24d40e01f046f887b7d41dad67ad7555',1,'ir_Samsung.h']]], - ['ksamsungacdefaultrepeat_2454',['kSamsungAcDefaultRepeat',['../IRremoteESP8266_8h.html#a973f4e0189fc10805f67b67f708be1e4',1,'IRremoteESP8266.h']]], - ['ksamsungacdry_2455',['kSamsungAcDry',['../ir__Samsung_8h.html#a6423976c7a41f526e7a878cecb257bbd',1,'ir_Samsung.h']]], - ['ksamsungacextendedbits_2456',['kSamsungAcExtendedBits',['../IRremoteESP8266_8h.html#a296e700965e70a622fe99675ff0438af',1,'IRremoteESP8266.h']]], - ['ksamsungacextendedstatelength_2457',['kSamsungAcExtendedStateLength',['../IRremoteESP8266_8h.html#a28039071f1130e9bc86efddd8265cbf9',1,'IRremoteESP8266.h']]], - ['ksamsungacfan_2458',['kSamsungAcFan',['../ir__Samsung_8h.html#a61d825254b26894a2f097ad92a7dbff2',1,'ir_Samsung.h']]], - ['ksamsungacfanauto_2459',['kSamsungAcFanAuto',['../ir__Samsung_8h.html#a37b29911f4d2b71dcdbd18a5d6dc301a',1,'ir_Samsung.h']]], - ['ksamsungacfanauto2_2460',['kSamsungAcFanAuto2',['../ir__Samsung_8h.html#aafa4319fb523b14d58371f757497e82a',1,'ir_Samsung.h']]], - ['ksamsungacfanhigh_2461',['kSamsungAcFanHigh',['../ir__Samsung_8h.html#a52cccad28fad5b9886ef408af02f56f9',1,'ir_Samsung.h']]], - ['ksamsungacfanlow_2462',['kSamsungAcFanLow',['../ir__Samsung_8h.html#a6f16b5b3f2dea3461f5d44379e8b8634',1,'ir_Samsung.h']]], - ['ksamsungacfanmed_2463',['kSamsungAcFanMed',['../ir__Samsung_8h.html#a798c3544dbd6bb6c8622cf45f88abc14',1,'ir_Samsung.h']]], - ['ksamsungacfanturbo_2464',['kSamsungAcFanTurbo',['../ir__Samsung_8h.html#af6c1432748eaa19df35531b87d197095',1,'ir_Samsung.h']]], - ['ksamsungachdrmark_2465',['kSamsungAcHdrMark',['../ir__Samsung_8cpp.html#ab7385ca5b7b417753b253a0f7cb3721b',1,'ir_Samsung.cpp']]], - ['ksamsungachdrspace_2466',['kSamsungAcHdrSpace',['../ir__Samsung_8cpp.html#a1b1f903fff13b10fb2431be9373e27cb',1,'ir_Samsung.cpp']]], - ['ksamsungacheat_2467',['kSamsungAcHeat',['../ir__Samsung_8h.html#a44ce6be7046ec4b4fe9caba7b71b8f0d',1,'ir_Samsung.h']]], - ['ksamsungacmaxtemp_2468',['kSamsungAcMaxTemp',['../ir__Samsung_8h.html#a0a994796db81a3d56dd2c27cad448a71',1,'ir_Samsung.h']]], - ['ksamsungacmintemp_2469',['kSamsungAcMinTemp',['../ir__Samsung_8h.html#ad5f46ccb96335519f5633c33de0d8018',1,'ir_Samsung.h']]], - ['ksamsungaconespace_2470',['kSamsungAcOneSpace',['../ir__Samsung_8cpp.html#ab106d9b7efb165eed83ae2ccef9a49b4',1,'ir_Samsung.cpp']]], - ['ksamsungacpowerful10on_2471',['kSamsungAcPowerful10On',['../ir__Samsung_8h.html#aa05bb4788febba1f56b2b3929ac273a3',1,'ir_Samsung.h']]], - ['ksamsungacpowerfulmask8_2472',['kSamsungAcPowerfulMask8',['../ir__Samsung_8h.html#a39e23325e35688a3641c467b720381ce',1,'ir_Samsung.h']]], - ['ksamsungacpowersection_2473',['kSamsungAcPowerSection',['../ir__Samsung_8h.html#a9264b5d640d9052c153562fd38415676',1,'ir_Samsung.h']]], - ['ksamsungacsectiongap_2474',['kSamsungAcSectionGap',['../ir__Samsung_8cpp.html#a9752fc615c215a93c1ee65edca3a359e',1,'ir_Samsung.cpp']]], - ['ksamsungacsectionlength_2475',['kSamsungAcSectionLength',['../ir__Samsung_8h.html#ad3faedf7b111f1b91d671666e38ce6f3',1,'ir_Samsung.h']]], - ['ksamsungacsectionmark_2476',['kSamsungAcSectionMark',['../ir__Samsung_8cpp.html#a4304073cddaa2da9613dedce499fee56',1,'ir_Samsung.cpp']]], - ['ksamsungacsections_2477',['kSamsungAcSections',['../ir__Samsung_8cpp.html#a86185d98d6e891a17688d9d2a0fa7114',1,'ir_Samsung.cpp']]], - ['ksamsungacsectionspace_2478',['kSamsungAcSectionSpace',['../ir__Samsung_8cpp.html#a4837f502ef9b7c972ec409cf4fc3c605',1,'ir_Samsung.cpp']]], - ['ksamsungacstatelength_2479',['kSamsungAcStateLength',['../IRremoteESP8266_8h.html#a2d07d8c8917fee072a261d00e67e0d36',1,'IRremoteESP8266.h']]], - ['ksamsungacswingmove_2480',['kSamsungAcSwingMove',['../ir__Samsung_8h.html#ab2d2b422e3972f77aef23f77c7cfbbac',1,'ir_Samsung.h']]], - ['ksamsungacswingstop_2481',['kSamsungAcSwingStop',['../ir__Samsung_8h.html#a37c1720d66c4ba02e368946e53036367',1,'ir_Samsung.h']]], - ['ksamsungaczerospace_2482',['kSamsungAcZeroSpace',['../ir__Samsung_8cpp.html#a7492a25e730f93f22c099ab687621b18',1,'ir_Samsung.cpp']]], - ['ksamsungbitmark_2483',['kSamsungBitMark',['../ir__Samsung_8cpp.html#a03f9ae317a7a701437c8015dfde4401f',1,'ir_Samsung.cpp']]], - ['ksamsungbitmarkticks_2484',['kSamsungBitMarkTicks',['../ir__Samsung_8cpp.html#afe1663f83396f7e5cf9bfc32f321e539',1,'ir_Samsung.cpp']]], - ['ksamsungbits_2485',['kSamsungBits',['../IRremoteESP8266_8h.html#a7c1c015cce09284799cbf5a2f21ee170',1,'IRremoteESP8266.h']]], - ['ksamsunghdrmark_2486',['kSamsungHdrMark',['../ir__Samsung_8cpp.html#a3d0598585af609af4c8d5004789d2df7',1,'ir_Samsung.cpp']]], - ['ksamsunghdrmarkticks_2487',['kSamsungHdrMarkTicks',['../ir__Samsung_8cpp.html#a0c81f486877d24bfd40215b089c52f2a',1,'ir_Samsung.cpp']]], - ['ksamsunghdrspace_2488',['kSamsungHdrSpace',['../ir__Samsung_8cpp.html#a2f55c53bfc72de06ff202c8ec401163d',1,'ir_Samsung.cpp']]], - ['ksamsunghdrspaceticks_2489',['kSamsungHdrSpaceTicks',['../ir__Samsung_8cpp.html#a1ae96cedfa4ed26869d295cfbb8056dd',1,'ir_Samsung.cpp']]], - ['ksamsungmingap_2490',['kSamsungMinGap',['../ir__Samsung_8cpp.html#ab13edb242547803b386aa8539a4b9470',1,'ir_Samsung.cpp']]], - ['ksamsungmingapticks_2491',['kSamsungMinGapTicks',['../ir__Samsung_8cpp.html#a55d79dcfcd43f05ebe456a9a2fce3ff0',1,'ir_Samsung.cpp']]], - ['ksamsungminmessagelength_2492',['kSamsungMinMessageLength',['../ir__Samsung_8cpp.html#ae2ec2e45f91f872e85c250c7aac0efc1',1,'ir_Samsung.cpp']]], - ['ksamsungminmessagelengthticks_2493',['kSamsungMinMessageLengthTicks',['../ir__Samsung_8cpp.html#a6d436a1b71158ff9b5d7ae21344cd7d2',1,'ir_Samsung.cpp']]], - ['ksamsungonespace_2494',['kSamsungOneSpace',['../ir__Samsung_8cpp.html#ab486b048d13f44623ee291d4221c2a1b',1,'ir_Samsung.cpp']]], - ['ksamsungonespaceticks_2495',['kSamsungOneSpaceTicks',['../ir__Samsung_8cpp.html#a484a1e3ce3dcbbef15be559bfb5822d0',1,'ir_Samsung.cpp']]], - ['ksamsungrptspace_2496',['kSamsungRptSpace',['../ir__Samsung_8cpp.html#a1cc2f3bcd7f2ca36f0a726828c14aa74',1,'ir_Samsung.cpp']]], - ['ksamsungrptspaceticks_2497',['kSamsungRptSpaceTicks',['../ir__Samsung_8cpp.html#a6864f78ad1428358acbc8b46796e50cc',1,'ir_Samsung.cpp']]], - ['ksamsungtick_2498',['kSamsungTick',['../ir__Samsung_8cpp.html#accd7d51c2714bd383170831372f57bc5',1,'ir_Samsung.cpp']]], - ['ksamsungzerospace_2499',['kSamsungZeroSpace',['../ir__Samsung_8cpp.html#ae2c828a3d099d6195208a3794022587e',1,'ir_Samsung.cpp']]], - ['ksamsungzerospaceticks_2500',['kSamsungZeroSpaceTicks',['../ir__Samsung_8cpp.html#aea63a73a5b0af2c173bc473ee2447a93',1,'ir_Samsung.cpp']]], - ['ksanyoacauto_2501',['kSanyoAcAuto',['../ir__Sanyo_8h.html#a80d3d83c1b85f8c44dd93cc44b30accb',1,'ir_Sanyo.h']]], - ['ksanyoacbitmark_2502',['kSanyoAcBitMark',['../ir__Sanyo_8cpp.html#af738984c8164ff32f3bd91b9263f55c2',1,'ir_Sanyo.cpp']]], - ['ksanyoacbits_2503',['kSanyoAcBits',['../IRremoteESP8266_8h.html#ad3931645167deda3fd0ec72ba33a4034',1,'IRremoteESP8266.h']]], - ['ksanyoaccool_2504',['kSanyoAcCool',['../ir__Sanyo_8h.html#ad6a49260b9097a821cf29fe87796456d',1,'ir_Sanyo.h']]], - ['ksanyoacdry_2505',['kSanyoAcDry',['../ir__Sanyo_8h.html#a5e0645e5f69dc627d130e4bca1751b5c',1,'ir_Sanyo.h']]], - ['ksanyoacfanauto_2506',['kSanyoAcFanAuto',['../ir__Sanyo_8h.html#a7bc8d0e04bdf32a3d7147a8ee4f0fc9c',1,'ir_Sanyo.h']]], - ['ksanyoacfanhigh_2507',['kSanyoAcFanHigh',['../ir__Sanyo_8h.html#a34a75f871c7b2648641830bf8210be0b',1,'ir_Sanyo.h']]], - ['ksanyoacfanlow_2508',['kSanyoAcFanLow',['../ir__Sanyo_8h.html#a3a0bfc84856de44bc2bce7cb63f61414',1,'ir_Sanyo.h']]], - ['ksanyoacfanmedium_2509',['kSanyoAcFanMedium',['../ir__Sanyo_8h.html#a54189bf27e6cbcbe03b9898985a3486f',1,'ir_Sanyo.h']]], - ['ksanyoacfreq_2510',['kSanyoAcFreq',['../ir__Sanyo_8cpp.html#a85397f4fba50f4409467435ae22a003c',1,'ir_Sanyo.cpp']]], - ['ksanyoacgap_2511',['kSanyoAcGap',['../ir__Sanyo_8cpp.html#a20213c79f423cb292a55be3618ff1f2f',1,'ir_Sanyo.cpp']]], - ['ksanyoachdrmark_2512',['kSanyoAcHdrMark',['../ir__Sanyo_8cpp.html#a0b1b08bcc921bbbe6686c699c1aaad2e',1,'ir_Sanyo.cpp']]], - ['ksanyoachdrspace_2513',['kSanyoAcHdrSpace',['../ir__Sanyo_8cpp.html#a8c09cce29f3791eb80c1546be5e5535c',1,'ir_Sanyo.cpp']]], - ['ksanyoacheat_2514',['kSanyoAcHeat',['../ir__Sanyo_8h.html#aacdcd75fdf538881354662454c95e8b5',1,'ir_Sanyo.h']]], - ['ksanyoachourmax_2515',['kSanyoAcHourMax',['../ir__Sanyo_8h.html#aeaa1ba34ec4f7bb2e66e1c63e78ad864',1,'ir_Sanyo.h']]], - ['ksanyoaconespace_2516',['kSanyoAcOneSpace',['../ir__Sanyo_8cpp.html#ac9e641f6e3e07a8938ed28a656281122',1,'ir_Sanyo.cpp']]], - ['ksanyoacpoweroff_2517',['kSanyoAcPowerOff',['../ir__Sanyo_8h.html#a1777504e5870f0e29846cda7a17bb3fd',1,'ir_Sanyo.h']]], - ['ksanyoacpoweron_2518',['kSanyoAcPowerOn',['../ir__Sanyo_8h.html#a6e3da0779d665696d36a03b445ca82ea',1,'ir_Sanyo.h']]], - ['ksanyoacstatelength_2519',['kSanyoAcStateLength',['../IRremoteESP8266_8h.html#ae3128c987a1571fb6b021ffe30079663',1,'IRremoteESP8266.h']]], - ['ksanyoacswingvauto_2520',['kSanyoAcSwingVAuto',['../ir__Sanyo_8h.html#afce45a19ba8cdff528dac0ee8b13bb66',1,'ir_Sanyo.h']]], - ['ksanyoacswingvhigh_2521',['kSanyoAcSwingVHigh',['../ir__Sanyo_8h.html#a4cdea5c3718a4a869d1e914a7a8ee2af',1,'ir_Sanyo.h']]], - ['ksanyoacswingvhighest_2522',['kSanyoAcSwingVHighest',['../ir__Sanyo_8h.html#a64b28da09adf0416c49640264ccb760b',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlow_2523',['kSanyoAcSwingVLow',['../ir__Sanyo_8h.html#aaef1fa9d1ef8f92f59525b09175f6048',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlowermiddle_2524',['kSanyoAcSwingVLowerMiddle',['../ir__Sanyo_8h.html#a11141a0d31bca64561eed3be5698a5a6',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlowest_2525',['kSanyoAcSwingVLowest',['../ir__Sanyo_8h.html#a3d97c9b2da1c26ba5943996f76aa4f3f',1,'ir_Sanyo.h']]], - ['ksanyoacswingvuppermiddle_2526',['kSanyoAcSwingVUpperMiddle',['../ir__Sanyo_8h.html#a314f05625e1985042dc6e2a4866c51df',1,'ir_Sanyo.h']]], - ['ksanyoactempdelta_2527',['kSanyoAcTempDelta',['../ir__Sanyo_8h.html#ac0991e0a826fae8228e1064d5d803edc',1,'ir_Sanyo.h']]], - ['ksanyoactempmax_2528',['kSanyoAcTempMax',['../ir__Sanyo_8h.html#aa4222421c4571c9e34d39f01a2c71394',1,'ir_Sanyo.h']]], - ['ksanyoactempmin_2529',['kSanyoAcTempMin',['../ir__Sanyo_8h.html#a59fb387ec5657ba8ff301b9198703b9a',1,'ir_Sanyo.h']]], - ['ksanyoaczerospace_2530',['kSanyoAcZeroSpace',['../ir__Sanyo_8cpp.html#a9a600476008e4462df534ee98c732c1b',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461addressbits_2531',['kSanyoLC7461AddressBits',['../IRremoteESP8266_8h.html#a7e15e988acbea0fb4dfaee6f5bfa12d0',1,'IRremoteESP8266.h']]], - ['ksanyolc7461addressmask_2532',['kSanyoLc7461AddressMask',['../ir__Sanyo_8cpp.html#a785ccc066e433f11791f8a30243944d3',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461bitmark_2533',['kSanyoLc7461BitMark',['../ir__Sanyo_8cpp.html#a1360ba5ac3f30715c00a6a65155cfec8',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461bits_2534',['kSanyoLC7461Bits',['../IRremoteESP8266_8h.html#ad067db05b273337e0df38d529094c9e8',1,'IRremoteESP8266.h']]], - ['ksanyolc7461commandbits_2535',['kSanyoLC7461CommandBits',['../IRremoteESP8266_8h.html#a5cd69a192be51634ce72a40398a6c0d7',1,'IRremoteESP8266.h']]], - ['ksanyolc7461commandmask_2536',['kSanyoLc7461CommandMask',['../ir__Sanyo_8cpp.html#abdd072e210a7616d564a9d4a7f798ad3',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461hdrmark_2537',['kSanyoLc7461HdrMark',['../ir__Sanyo_8cpp.html#a0b2e520442dd96f8cd77969230713277',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461hdrspace_2538',['kSanyoLc7461HdrSpace',['../ir__Sanyo_8cpp.html#aa9ca2469e22f66d6e5e3f4ef952484ba',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461mincommandlength_2539',['kSanyoLc7461MinCommandLength',['../ir__Sanyo_8cpp.html#a237fac9264bba0014124a815133868b2',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461mingap_2540',['kSanyoLc7461MinGap',['../ir__Sanyo_8cpp.html#aff7f31500dbe9939e223bed6b6c631a8',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461onespace_2541',['kSanyoLc7461OneSpace',['../ir__Sanyo_8cpp.html#a52716e37d6943b01e9df37956f1a83de',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461zerospace_2542',['kSanyoLc7461ZeroSpace',['../ir__Sanyo_8cpp.html#a4e386992c8fca642c259e86e34729a4d',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bbits_2543',['kSanyoSA8650BBits',['../IRremoteESP8266_8h.html#a2c572c8bfa811b7dc3a8a537cc642b85',1,'IRremoteESP8266.h']]], - ['ksanyosa8650bdoublespaceusecs_2544',['kSanyoSa8650bDoubleSpaceUsecs',['../ir__Sanyo_8cpp.html#a828caf6fd05e81cedee67c558b88a0b6',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bhdrmark_2545',['kSanyoSa8650bHdrMark',['../ir__Sanyo_8cpp.html#a9d0472d183a96b8ca71a2b704a06cac8',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bhdrspace_2546',['kSanyoSa8650bHdrSpace',['../ir__Sanyo_8cpp.html#ab432df3bd299b72b4449672d611798b7',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bonemark_2547',['kSanyoSa8650bOneMark',['../ir__Sanyo_8cpp.html#a8854c7bd32c1ec53e8e1869cd9dd8cdd',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650brptlength_2548',['kSanyoSa8650bRptLength',['../ir__Sanyo_8cpp.html#a327ee6de7027aacfa9aa6ee8bdc74e3e',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bzeromark_2549',['kSanyoSa8650bZeroMark',['../ir__Sanyo_8cpp.html#a516a45a7934f23274fa302d7e711b43c',1,'ir_Sanyo.cpp']]], - ['ksavestr_2550',['kSaveStr',['../IRtext_8cpp.html#a24f9462727ee596a3ae16393c33e3ebc',1,'kSaveStr(): IRtext.cpp'],['../IRtext_8h.html#acb40b78a5269c43cc3e4f44d3da01069',1,'kSaveStr(): IRtext.cpp']]], - ['ksecondsstr_2551',['kSecondsStr',['../IRtext_8cpp.html#a282cb9785839a9da66a9333d788c0fb1',1,'kSecondsStr(): IRtext.cpp'],['../IRtext_8h.html#ad736b59d3fe45b3c06bd301af4d7b455',1,'kSecondsStr(): IRtext.cpp']]], - ['ksecondstr_2552',['kSecondStr',['../IRtext_8cpp.html#a5ec55e16709cbd2c4b1ff8c72c01c1f5',1,'kSecondStr(): IRtext.cpp'],['../IRtext_8h.html#ad3489e1c008bc517b8bf0271c40252d1',1,'kSecondStr(): IRtext.cpp']]], - ['ksensorstr_2553',['kSensorStr',['../IRtext_8cpp.html#aa7e6eab2fbc832f98d6560f62453c934',1,'kSensorStr(): IRtext.cpp'],['../IRtext_8h.html#a56ee9a96dd0a7ee0a5f95c286f6ea7e8',1,'kSensorStr(): IRtext.cpp']]], - ['ksensortempstr_2554',['kSensorTempStr',['../IRtext_8cpp.html#a756daa989457676d2af255428a01e1d5',1,'kSensorTempStr(): IRtext.cpp'],['../IRtext_8h.html#a03e76a09bade0c229fea1ce31fe8c9a1',1,'kSensorTempStr(): IRtext.cpp']]], - ['ksetstr_2555',['kSetStr',['../IRtext_8cpp.html#a27b5e437df44d4d41db9b296a1f236a1',1,'kSetStr(): IRtext.cpp'],['../IRtext_8h.html#a31d3426b8a8d1a35c47c88ef00023fce',1,'kSetStr(): IRtext.cpp']]], - ['ksharpacauto_2556',['kSharpAcAuto',['../ir__Sharp_8h.html#ad4e228b234598a84e11a76e7f2d27199',1,'ir_Sharp.h']]], - ['ksharpacbitmark_2557',['kSharpAcBitMark',['../ir__Sharp_8h.html#ae73dd2c91b531bf3a52641b36f56ead7',1,'ir_Sharp.h']]], - ['ksharpacbits_2558',['kSharpAcBits',['../IRremoteESP8266_8h.html#a6c106a982acced5d8aeef98644002ca2',1,'IRremoteESP8266.h']]], - ['ksharpacbytetemp_2559',['kSharpAcByteTemp',['../ir__Sharp_8h.html#a1b67ab12ed664517124fe3c1d7325927',1,'ir_Sharp.h']]], - ['ksharpaccool_2560',['kSharpAcCool',['../ir__Sharp_8h.html#ae828d7e915f69cc1e9538839fc51c895',1,'ir_Sharp.h']]], - ['ksharpacdefaultrepeat_2561',['kSharpAcDefaultRepeat',['../IRremoteESP8266_8h.html#a7f0438831899e3df16f9002717c818b9',1,'IRremoteESP8266.h']]], - ['ksharpacdry_2562',['kSharpAcDry',['../ir__Sharp_8h.html#a50ae949b473ed4a6482fa00d747b2c0f',1,'ir_Sharp.h']]], - ['ksharpacfan_2563',['kSharpAcFan',['../ir__Sharp_8h.html#a4b8ec70fe3b83debdc6b3a1440cfe3e4',1,'ir_Sharp.h']]], - ['ksharpacfana705low_2564',['kSharpAcFanA705Low',['../ir__Sharp_8h.html#a49b66950f998c99cc516a68cd5490691',1,'ir_Sharp.h']]], - ['ksharpacfana705med_2565',['kSharpAcFanA705Med',['../ir__Sharp_8h.html#a80d5e21efa5286b1eff937913915c492',1,'ir_Sharp.h']]], - ['ksharpacfanauto_2566',['kSharpAcFanAuto',['../ir__Sharp_8h.html#a2ef78269271593420ea2bdc20025ca69',1,'ir_Sharp.h']]], - ['ksharpacfanhigh_2567',['kSharpAcFanHigh',['../ir__Sharp_8h.html#af29136d64c2f2a2515918ccf0ff0f594',1,'ir_Sharp.h']]], - ['ksharpacfanmax_2568',['kSharpAcFanMax',['../ir__Sharp_8h.html#a8b0aaa58a5f4caabea84e3b448793054',1,'ir_Sharp.h']]], - ['ksharpacfanmed_2569',['kSharpAcFanMed',['../ir__Sharp_8h.html#a7607f054da76f5e1508abf42d9cd71fc',1,'ir_Sharp.h']]], - ['ksharpacfanmin_2570',['kSharpAcFanMin',['../ir__Sharp_8h.html#a2372fdfbb0d8c2163a3eae5b8eda570a',1,'ir_Sharp.h']]], - ['ksharpacgap_2571',['kSharpAcGap',['../ir__Sharp_8h.html#a777eb0358ce3ef4528f086ff9ff7cd8d',1,'ir_Sharp.h']]], - ['ksharpachdrmark_2572',['kSharpAcHdrMark',['../ir__Sharp_8h.html#aff6f1e55de051762a0def881a5bb555c',1,'ir_Sharp.h']]], - ['ksharpachdrspace_2573',['kSharpAcHdrSpace',['../ir__Sharp_8h.html#a0ea5ff96afd358a8ad1be8d8ed808f04',1,'ir_Sharp.h']]], - ['ksharpacheat_2574',['kSharpAcHeat',['../ir__Sharp_8h.html#ab546d06a0b1f3477f88282f764f208cb',1,'ir_Sharp.h']]], - ['ksharpacmaxtemp_2575',['kSharpAcMaxTemp',['../ir__Sharp_8h.html#a6cfb060ea8c2f650fdd73b055cfda00a',1,'ir_Sharp.h']]], - ['ksharpacmintemp_2576',['kSharpAcMinTemp',['../ir__Sharp_8h.html#ad9ac5214b6cc780d9424ec7d038fe837',1,'ir_Sharp.h']]], - ['ksharpacofftimertype_2577',['kSharpAcOffTimerType',['../ir__Sharp_8h.html#ada633bea9c6c2ffd234c8262e92cebd5',1,'ir_Sharp.h']]], - ['ksharpaconespace_2578',['kSharpAcOneSpace',['../ir__Sharp_8h.html#a20e8eb7c8763fbddb20530badbaab38b',1,'ir_Sharp.h']]], - ['ksharpacontimertype_2579',['kSharpAcOnTimerType',['../ir__Sharp_8h.html#adce8625b00931645c7ccf54edf263c59',1,'ir_Sharp.h']]], - ['ksharpacpoweroff_2580',['kSharpAcPowerOff',['../ir__Sharp_8h.html#a5c13882a47bdd289507e8a5a23ec99d6',1,'ir_Sharp.h']]], - ['ksharpacpoweron_2581',['kSharpAcPowerOn',['../ir__Sharp_8h.html#af485487ea50dd2f9bc153e5f83dc5cf9',1,'ir_Sharp.h']]], - ['ksharpacpoweronfromoff_2582',['kSharpAcPowerOnFromOff',['../ir__Sharp_8h.html#ae484cf776fa47542f4d693c29052fc9f',1,'ir_Sharp.h']]], - ['ksharpacpowersetspecialoff_2583',['kSharpAcPowerSetSpecialOff',['../ir__Sharp_8h.html#a93b22ba4b5e68f8185ed28a6bb7c05dd',1,'ir_Sharp.h']]], - ['ksharpacpowersetspecialon_2584',['kSharpAcPowerSetSpecialOn',['../ir__Sharp_8h.html#a67aff6b22c0cfb89debb8ade7239f07e',1,'ir_Sharp.h']]], - ['ksharpacpowertimersetting_2585',['kSharpAcPowerTimerSetting',['../ir__Sharp_8h.html#a208cb9446ea1f42db42a1f6e24b61219',1,'ir_Sharp.h']]], - ['ksharpacpowerunknown_2586',['kSharpAcPowerUnknown',['../ir__Sharp_8h.html#ab20172b860fa1401607f0678c682640f',1,'ir_Sharp.h']]], - ['ksharpacspecialfan_2587',['kSharpAcSpecialFan',['../ir__Sharp_8h.html#a6c1a1c535150f973eecb1a131d0c4780',1,'ir_Sharp.h']]], - ['ksharpacspecialpower_2588',['kSharpAcSpecialPower',['../ir__Sharp_8h.html#a843585897995ee15e39af0d452d8660d',1,'ir_Sharp.h']]], - ['ksharpacspecialswing_2589',['kSharpAcSpecialSwing',['../ir__Sharp_8h.html#a34127a7df393d2a5a84ca90e60e8507a',1,'ir_Sharp.h']]], - ['ksharpacspecialtempecono_2590',['kSharpAcSpecialTempEcono',['../ir__Sharp_8h.html#af2dcb54fc26802d1818ef88e6ddfc819',1,'ir_Sharp.h']]], - ['ksharpacspecialtimer_2591',['kSharpAcSpecialTimer',['../ir__Sharp_8h.html#a539b21c344db53fbfd4f17c91ab98139',1,'ir_Sharp.h']]], - ['ksharpacspecialtimerhalfhour_2592',['kSharpAcSpecialTimerHalfHour',['../ir__Sharp_8h.html#a1f9bf40a4af95689947c09559ed049bf',1,'ir_Sharp.h']]], - ['ksharpacspecialturbo_2593',['kSharpAcSpecialTurbo',['../ir__Sharp_8h.html#a270bb2bc83d4eb8974f498dd8eb299bb',1,'ir_Sharp.h']]], - ['ksharpacstatelength_2594',['kSharpAcStateLength',['../IRremoteESP8266_8h.html#a5192edb9406a8572e393918bab69e3c6',1,'IRremoteESP8266.h']]], - ['ksharpacswingnotoggle_2595',['kSharpAcSwingNoToggle',['../ir__Sharp_8h.html#a9c56d4f694ea69921ba2cb75f67426d6',1,'ir_Sharp.h']]], - ['ksharpacswingtoggle_2596',['kSharpAcSwingToggle',['../ir__Sharp_8h.html#aa6db653d25f67214819292b8f86af0e6',1,'ir_Sharp.h']]], - ['ksharpactimerhoursmax_2597',['kSharpAcTimerHoursMax',['../ir__Sharp_8h.html#a63af01993ba1e539dfb8dae67f42b9ae',1,'ir_Sharp.h']]], - ['ksharpactimerhoursoff_2598',['kSharpAcTimerHoursOff',['../ir__Sharp_8h.html#a462c10c12d828ba58d589cc365bd7be3',1,'ir_Sharp.h']]], - ['ksharpactimerincrement_2599',['kSharpAcTimerIncrement',['../ir__Sharp_8h.html#af32638e308a7034eb013b7ea9569273e',1,'ir_Sharp.h']]], - ['ksharpaczerospace_2600',['kSharpAcZeroSpace',['../ir__Sharp_8h.html#a5310e0404daae1a6e534dbaeaa9a9939',1,'ir_Sharp.h']]], - ['ksharpaddressbits_2601',['kSharpAddressBits',['../IRremoteESP8266_8h.html#a79c2f3cc459267cf0261124ddef47f5e',1,'IRremoteESP8266.h']]], - ['ksharpaddressmask_2602',['kSharpAddressMask',['../ir__Sharp_8cpp.html#a84fba003383cd4652fc804b97002f464',1,'ir_Sharp.cpp']]], - ['ksharpbitmark_2603',['kSharpBitMark',['../ir__Sharp_8cpp.html#ae2adc2bffb2b024faab8da363621733f',1,'ir_Sharp.cpp']]], - ['ksharpbitmarkticks_2604',['kSharpBitMarkTicks',['../ir__Sharp_8cpp.html#aa64bd0c359add4038c0143b5774627bb',1,'ir_Sharp.cpp']]], - ['ksharpbits_2605',['kSharpBits',['../IRremoteESP8266_8h.html#a8a74f9d7cec751cc0945fd89fa6237ae',1,'IRremoteESP8266.h']]], - ['ksharpcommandbits_2606',['kSharpCommandBits',['../IRremoteESP8266_8h.html#ae4cdfc8e358ec738d20c1bda49842ccf',1,'IRremoteESP8266.h']]], - ['ksharpcommandmask_2607',['kSharpCommandMask',['../ir__Sharp_8cpp.html#ad44eda54ade4bef4fdf4451fdb784950',1,'ir_Sharp.cpp']]], - ['ksharpgap_2608',['kSharpGap',['../ir__Sharp_8cpp.html#a77015be2a04274bcb332ec21cb75251e',1,'ir_Sharp.cpp']]], - ['ksharpgapticks_2609',['kSharpGapTicks',['../ir__Sharp_8cpp.html#a4aa110ec2934797f71ddf9bcd34498d1',1,'ir_Sharp.cpp']]], - ['ksharponespace_2610',['kSharpOneSpace',['../ir__Sharp_8cpp.html#a3359539480a203db37c2cf2efd88fdcc',1,'ir_Sharp.cpp']]], - ['ksharponespaceticks_2611',['kSharpOneSpaceTicks',['../ir__Sharp_8cpp.html#a12e18dfd195faae6ca581936434c9063',1,'ir_Sharp.cpp']]], - ['ksharptick_2612',['kSharpTick',['../ir__Sharp_8cpp.html#af417ab19220576243753903657923ba7',1,'ir_Sharp.cpp']]], - ['ksharptogglemask_2613',['kSharpToggleMask',['../ir__Sharp_8cpp.html#a2701123f01683c6927c23c7699bce13a',1,'ir_Sharp.cpp']]], - ['ksharpzerospace_2614',['kSharpZeroSpace',['../ir__Sharp_8cpp.html#ac2ad6123d938999e234896e1635e3063',1,'ir_Sharp.cpp']]], - ['ksharpzerospaceticks_2615',['kSharpZeroSpaceTicks',['../ir__Sharp_8cpp.html#af8c638f77ff29c2d20555343be80e5f0',1,'ir_Sharp.cpp']]], - ['ksherwoodbits_2616',['kSherwoodBits',['../IRremoteESP8266_8h.html#a94abd640c9e7aa225f4a8873a1ddea6a',1,'IRremoteESP8266.h']]], - ['ksherwoodminrepeat_2617',['kSherwoodMinRepeat',['../IRremoteESP8266_8h.html#a2e00b92b55657fc4e140eb85e3a414dc',1,'IRremoteESP8266.h']]], - ['ksilentstr_2618',['kSilentStr',['../IRtext_8cpp.html#a398d3c627c5b95c5d7adfb5308fc7de0',1,'kSilentStr(): IRtext.cpp'],['../IRtext_8h.html#a8efb4256a49dc0acd27d6995851d585e',1,'kSilentStr(): IRtext.cpp']]], - ['ksinglerepeat_2619',['kSingleRepeat',['../IRremoteESP8266_8h.html#a46835b1e2d279570fd818749e88180d4',1,'IRremoteESP8266.h']]], - ['ksleepstr_2620',['kSleepStr',['../IRtext_8cpp.html#a38068788c0ef50e6034dbcffeec1eb36',1,'kSleepStr(): IRtext.cpp'],['../IRtext_8h.html#af9ac743c367e179723b128ad69f124c5',1,'kSleepStr(): IRtext.cpp']]], - ['ksleeptimerstr_2621',['kSleepTimerStr',['../IRtext_8cpp.html#a3402e1f6d78e3c59b71bd0dfdf020b51',1,'kSleepTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a86639857f884487cf3bedc91e71d6faa',1,'kSleepTimerStr(): IRtext.cpp']]], - ['kslowstr_2622',['kSlowStr',['../IRtext_8cpp.html#a3131a17a06dff31058579b301227a04f',1,'kSlowStr(): IRtext.cpp'],['../IRtext_8h.html#a171736ab5e3d59198ed740ea5fd93473',1,'kSlowStr(): IRtext.cpp']]], - ['ksony12bits_2623',['kSony12Bits',['../IRremoteESP8266_8h.html#aa16fdf708a67dbe22c85ad4bac9b05b6',1,'IRremoteESP8266.h']]], - ['ksony15bits_2624',['kSony15Bits',['../IRremoteESP8266_8h.html#ad868d68d289d618ace266519afa059f4',1,'IRremoteESP8266.h']]], - ['ksony20bits_2625',['kSony20Bits',['../IRremoteESP8266_8h.html#aa9cd1ff8036f6c3a288c4f34af4a5eb4',1,'IRremoteESP8266.h']]], - ['ksonyaltfreq_2626',['kSonyAltFreq',['../ir__Sony_8cpp.html#a05912a15a9a6a4a78416600adc7e526b',1,'ir_Sony.cpp']]], - ['ksonyhdrmark_2627',['kSonyHdrMark',['../ir__Sony_8cpp.html#afac5a232c82e81ac257ddfc94aa4f379',1,'ir_Sony.cpp']]], - ['ksonyhdrmarkticks_2628',['kSonyHdrMarkTicks',['../ir__Sony_8cpp.html#a89abc5f0556f38d462202d1de78cbddb',1,'ir_Sony.cpp']]], - ['ksonyminbits_2629',['kSonyMinBits',['../IRremoteESP8266_8h.html#a6f0794107a7643e0bec8de6de9e7621b',1,'IRremoteESP8266.h']]], - ['ksonymingap_2630',['kSonyMinGap',['../ir__Sony_8cpp.html#abfe3a5e1fa2a38ee556326b1ea0e7e11',1,'ir_Sony.cpp']]], - ['ksonymingapticks_2631',['kSonyMinGapTicks',['../ir__Sony_8cpp.html#a150d62f71f79295153bac4694bae0aa3',1,'ir_Sony.cpp']]], - ['ksonyminrepeat_2632',['kSonyMinRepeat',['../IRremoteESP8266_8h.html#a112408429fb4a5cca22a66a351453bad',1,'IRremoteESP8266.h']]], - ['ksonyonemark_2633',['kSonyOneMark',['../ir__Sony_8cpp.html#a490e7ca2b0f81848ae42eb57d0023d13',1,'ir_Sony.cpp']]], - ['ksonyonemarkticks_2634',['kSonyOneMarkTicks',['../ir__Sony_8cpp.html#ad41c0d0496661c2e066056de6974bfe9',1,'ir_Sony.cpp']]], - ['ksonyrptlength_2635',['kSonyRptLength',['../ir__Sony_8cpp.html#a24578b92cf53caa48fa3660f16ec90ec',1,'ir_Sony.cpp']]], - ['ksonyrptlengthticks_2636',['kSonyRptLengthTicks',['../ir__Sony_8cpp.html#a0a7f67ba27e03c35d5df35a2a14a1e19',1,'ir_Sony.cpp']]], - ['ksonyspace_2637',['kSonySpace',['../ir__Sony_8cpp.html#ad09a9eb0dc0b809cea0d0a2a8ff6b9fb',1,'ir_Sony.cpp']]], - ['ksonyspaceticks_2638',['kSonySpaceTicks',['../ir__Sony_8cpp.html#a80dccfab869821cadaf02df664d91eda',1,'ir_Sony.cpp']]], - ['ksonystdfreq_2639',['kSonyStdFreq',['../ir__Sony_8cpp.html#a5e5b14c45909411d160e051f0bc7c63d',1,'ir_Sony.cpp']]], - ['ksonytick_2640',['kSonyTick',['../ir__Sony_8cpp.html#a7ced75a5e9f06f5c68132665d27e01b8',1,'ir_Sony.cpp']]], - ['ksonyzeromark_2641',['kSonyZeroMark',['../ir__Sony_8cpp.html#a7808995a9d2755681f1461d578d5480b',1,'ir_Sony.cpp']]], - ['ksonyzeromarkticks_2642',['kSonyZeroMarkTicks',['../ir__Sony_8cpp.html#a542aed17f98a11ca89456eec507a5225',1,'ir_Sony.cpp']]], - ['kspace_2643',['kSpace',['../ir__Lasertag_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_Lasertag.cpp'],['../ir__MWM_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_MWM.cpp'],['../ir__RC5__RC6_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_RC5_RC6.cpp']]], - ['kspacelbracestr_2644',['kSpaceLBraceStr',['../IRtext_8cpp.html#a156ef0014809a3509e7b254a9585e0a1',1,'kSpaceLBraceStr(): IRtext.cpp'],['../IRtext_8h.html#a42a2d6b1e764138a5e20b7a34e0cff03',1,'kSpaceLBraceStr(): IRtext.cpp']]], - ['kspacestate_2645',['kSpaceState',['../IRrecv_8h.html#acc0d1931164a8967c210eb03a2d03e2a',1,'IRrecv.h']]], - ['kspecialstr_2646',['kSpecialStr',['../IRtext_8cpp.html#ae80b543c1a3933ec7da34b5a8880fde6',1,'kSpecialStr(): IRtext.cpp'],['../IRtext_8h.html#a37413264af775b482dec58e9fe3dbb44',1,'kSpecialStr(): IRtext.cpp']]], - ['kstartoffset_2647',['kStartOffset',['../IRrecv_8h.html#a44a836a34428f8f75b1ae566de4bb972',1,'IRrecv.h']]], - ['kstartstr_2648',['kStartStr',['../IRtext_8cpp.html#a2075a48eed571455a88e7dfbc3a547ef',1,'kStartStr(): IRtext.cpp'],['../IRtext_8h.html#ad030c0930697d3c295f3783e8519995c',1,'kStartStr(): IRtext.cpp']]], - ['kstatesizemax_2649',['kStateSizeMax',['../IRrecv_8h.html#ab7d82cf4c0937c9b1d59d75f6f347ab2',1,'IRrecv.h']]], - ['kstepstr_2650',['kStepStr',['../IRtext_8cpp.html#ac6c64c4bdc955b6528616db3a4b303c1',1,'kStepStr(): IRtext.cpp'],['../IRtext_8h.html#ad8cc5f179089e8497a9670492429d7e3',1,'kStepStr(): IRtext.cpp']]], - ['kstopstate_2651',['kStopState',['../IRrecv_8h.html#a0e87ae8496a061e394bc9f7f3415a9b3',1,'IRrecv.h']]], - ['kstopstr_2652',['kStopStr',['../IRtext_8cpp.html#a0466188f9064d18622304cd375b18390',1,'kStopStr(): IRtext.cpp'],['../IRtext_8h.html#a7037a67c71778fe06f9dc9b4363f6f9b',1,'kStopStr(): IRtext.cpp']]], - ['ksuperstr_2653',['kSuperStr',['../IRtext_8cpp.html#a81e6c76017bc819882a043ac8fcc2854',1,'kSuperStr(): IRtext.cpp'],['../IRtext_8h.html#af83fbe756a22ef800d40bc738be886c7',1,'kSuperStr(): IRtext.cpp']]], - ['kswinghstr_2654',['kSwingHStr',['../IRtext_8cpp.html#a12d4e0afe0f6b96af817ebc95eb0b6f4',1,'kSwingHStr(): IRtext.cpp'],['../IRtext_8h.html#acfad569446290c1da0c102b98344411c',1,'kSwingHStr(): IRtext.cpp']]], - ['kswingstr_2655',['kSwingStr',['../IRtext_8cpp.html#a106174aef3a46450c0a16bef7c36a8c5',1,'kSwingStr(): IRtext.cpp'],['../IRtext_8h.html#a56d1a94eae3422758b2762da008e243c',1,'kSwingStr(): IRtext.cpp']]], - ['kswingvmodestr_2656',['kSwingVModeStr',['../IRtext_8cpp.html#ab71be957190939e2b4643f2e56e1201f',1,'kSwingVModeStr(): IRtext.cpp'],['../IRtext_8h.html#a0c801e35becc1eab4cdf0076e1c99485',1,'kSwingVModeStr(): IRtext.cpp']]], - ['kswingvstr_2657',['kSwingVStr',['../IRtext_8cpp.html#a6dc1ec788e0659e82219534b5dbb79bc',1,'kSwingVStr(): IRtext.cpp'],['../IRtext_8h.html#a8415af77afcb671c3729d604be51fd22',1,'kSwingVStr(): IRtext.cpp']]], - ['kswingvtogglestr_2658',['kSwingVToggleStr',['../ir__Midea_8h.html#acb6aaab538b7aeb884e9c0fdb46cea90',1,'kSwingVToggleStr(): ir_Midea.h'],['../IRtext_8cpp.html#a3efcf06e5ac4d6309bad1b1d0e49a933',1,'kSwingVToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a27ae4d475898878bd8e71111066629c6',1,'kSwingVToggleStr(): ir_Midea.h']]], - ['ksymphonybits_2659',['kSymphonyBits',['../IRremoteESP8266_8h.html#abb5b89578ab0757999530c0383f38533',1,'IRremoteESP8266.h']]], - ['ksymphonydefaultrepeat_2660',['kSymphonyDefaultRepeat',['../IRremoteESP8266_8h.html#a219b8495f77932c200680f7a2b133880',1,'IRremoteESP8266.h']]], - ['ksymphonyfootergap_2661',['kSymphonyFooterGap',['../ir__Symphony_8cpp.html#a363cf54f4e752932d5e341975c2445f4',1,'ir_Symphony.cpp']]], - ['ksymphonyonemark_2662',['kSymphonyOneMark',['../ir__Symphony_8cpp.html#a469bfa8046ba75f9ba7cda4996dd785d',1,'ir_Symphony.cpp']]], - ['ksymphonyonespace_2663',['kSymphonyOneSpace',['../ir__Symphony_8cpp.html#ab699747bdf28d5a89920041e9c5bb01b',1,'ir_Symphony.cpp']]], - ['ksymphonyzeromark_2664',['kSymphonyZeroMark',['../ir__Symphony_8cpp.html#a58f27b1b9da16ffe73448c7ae3998fc9',1,'ir_Symphony.cpp']]], - ['ksymphonyzerospace_2665',['kSymphonyZeroSpace',['../ir__Symphony_8cpp.html#a9aaf8db419618de847573d2019155287',1,'ir_Symphony.cpp']]], - ['ktcl112acauto_2666',['kTcl112AcAuto',['../ir__Tcl_8h.html#a11a982cc182e446d53ded658cb7a08b6',1,'ir_Tcl.h']]], - ['ktcl112acbitmark_2667',['kTcl112AcBitMark',['../ir__Tcl_8h.html#a45360de532d2262246bf57cb7c08604d',1,'ir_Tcl.h']]], - ['ktcl112acbits_2668',['kTcl112AcBits',['../IRremoteESP8266_8h.html#a4a60d79056d70d3d56067b0bb2ec00f4',1,'IRremoteESP8266.h']]], - ['ktcl112accool_2669',['kTcl112AcCool',['../ir__Tcl_8h.html#a4a4b778086b3ebf856b750fe0c4bd2c0',1,'ir_Tcl.h']]], - ['ktcl112acdefaultrepeat_2670',['kTcl112AcDefaultRepeat',['../IRremoteESP8266_8h.html#a97c82cec6d72845d9ab8a201b0fa5034',1,'IRremoteESP8266.h']]], - ['ktcl112acdry_2671',['kTcl112AcDry',['../ir__Tcl_8h.html#a1d9ec40c278fedf87acb7420ef861101',1,'ir_Tcl.h']]], - ['ktcl112acfan_2672',['kTcl112AcFan',['../ir__Tcl_8h.html#ae07f3dd0a84be27bcb13ba60f4fd025b',1,'ir_Tcl.h']]], - ['ktcl112acfanauto_2673',['kTcl112AcFanAuto',['../ir__Tcl_8h.html#a099935d6d2bf6ebb28332005036c59c0',1,'ir_Tcl.h']]], - ['ktcl112acfanhigh_2674',['kTcl112AcFanHigh',['../ir__Tcl_8h.html#aab9672bac3e83b2e3b3d2cc5f1aa0e1f',1,'ir_Tcl.h']]], - ['ktcl112acfanlow_2675',['kTcl112AcFanLow',['../ir__Tcl_8h.html#a5114fe3f978672fc62c0cd16f6d46dd7',1,'ir_Tcl.h']]], - ['ktcl112acfanmed_2676',['kTcl112AcFanMed',['../ir__Tcl_8h.html#ad8f34f1972da347a169e2eb4ddf3d835',1,'ir_Tcl.h']]], - ['ktcl112acgap_2677',['kTcl112AcGap',['../ir__Tcl_8h.html#a9ccdf5ce9ce325b9813dadbdc855a469',1,'ir_Tcl.h']]], - ['ktcl112achdrmark_2678',['kTcl112AcHdrMark',['../ir__Tcl_8h.html#a56f9f7daf3ada77f8f844afd46a80de9',1,'ir_Tcl.h']]], - ['ktcl112achdrmarktolerance_2679',['kTcl112AcHdrMarkTolerance',['../ir__Tcl_8h.html#ab9d980747b2ddd1b7fb04f00d71af1e7',1,'ir_Tcl.h']]], - ['ktcl112achdrspace_2680',['kTcl112AcHdrSpace',['../ir__Tcl_8h.html#a9135b4d7496383ad3a7da7c3ac7c92b4',1,'ir_Tcl.h']]], - ['ktcl112acheat_2681',['kTcl112AcHeat',['../ir__Tcl_8h.html#ae573f856f0bdf50406e9be84b1aa8ade',1,'ir_Tcl.h']]], - ['ktcl112aconespace_2682',['kTcl112AcOneSpace',['../ir__Tcl_8h.html#af1e67019978260ba3f514cd895b54dad',1,'ir_Tcl.h']]], - ['ktcl112acstatelength_2683',['kTcl112AcStateLength',['../IRremoteESP8266_8h.html#a23ba2f5af02242e14ae7eefcd066152e',1,'IRremoteESP8266.h']]], - ['ktcl112acswingvoff_2684',['kTcl112AcSwingVOff',['../ir__Tcl_8h.html#aa78e1b544f392c251093d458e5d21e12',1,'ir_Tcl.h']]], - ['ktcl112acswingvon_2685',['kTcl112AcSwingVOn',['../ir__Tcl_8h.html#a5406fbabd66478d601aebc6939a3788f',1,'ir_Tcl.h']]], - ['ktcl112actempmax_2686',['kTcl112AcTempMax',['../ir__Tcl_8h.html#a60efbe31031e1e9c3a17c7d80cac54cb',1,'ir_Tcl.h']]], - ['ktcl112actempmin_2687',['kTcl112AcTempMin',['../ir__Tcl_8h.html#a30fe65ec015bc4d91cd35ead9cc43dcc',1,'ir_Tcl.h']]], - ['ktcl112actolerance_2688',['kTcl112AcTolerance',['../ir__Tcl_8h.html#a13bbe794b2b59763f7f93f15a3f26820',1,'ir_Tcl.h']]], - ['ktcl112aczerospace_2689',['kTcl112AcZeroSpace',['../ir__Tcl_8h.html#abc05edaeb1a4fa7e6ccf9bda1f66b483',1,'ir_Tcl.h']]], - ['ktechnibelacbitmark_2690',['kTechnibelAcBitMark',['../ir__Technibel_8cpp.html#a82529fd6c6fd51f036b1930613ed5e9b',1,'ir_Technibel.cpp']]], - ['ktechnibelacbits_2691',['kTechnibelAcBits',['../IRremoteESP8266_8h.html#a0c4bc77a2443037598940b955c83eb82',1,'IRremoteESP8266.h']]], - ['ktechnibelaccool_2692',['kTechnibelAcCool',['../ir__Technibel_8h.html#aa0a74f362c3d9160660763d89195b387',1,'ir_Technibel.h']]], - ['ktechnibelacdefaultrepeat_2693',['kTechnibelAcDefaultRepeat',['../IRremoteESP8266_8h.html#a0e797e69cca806e73c902f5d9dfe1bf1',1,'IRremoteESP8266.h']]], - ['ktechnibelacdry_2694',['kTechnibelAcDry',['../ir__Technibel_8h.html#afb6b5b6b2e88fb06f1706c57e03672d8',1,'ir_Technibel.h']]], - ['ktechnibelacfan_2695',['kTechnibelAcFan',['../ir__Technibel_8h.html#a9b9c7971f9f76dbb8b742727f48408d6',1,'ir_Technibel.h']]], - ['ktechnibelacfanhigh_2696',['kTechnibelAcFanHigh',['../ir__Technibel_8h.html#a7ec8f7e2911b0a8db8714aa06377a017',1,'ir_Technibel.h']]], - ['ktechnibelacfanlow_2697',['kTechnibelAcFanLow',['../ir__Technibel_8h.html#a3be4c4dbdfe0ef1ab7f7f2308ee5f906',1,'ir_Technibel.h']]], - ['ktechnibelacfanmedium_2698',['kTechnibelAcFanMedium',['../ir__Technibel_8h.html#ae390f138de9e24940a066a75f960ce67',1,'ir_Technibel.h']]], - ['ktechnibelacfansize_2699',['kTechnibelAcFanSize',['../ir__Technibel_8h.html#a29d3d827bd0486f4f1c6c8090bfae7b3',1,'ir_Technibel.h']]], - ['ktechnibelacfreq_2700',['kTechnibelAcFreq',['../ir__Technibel_8cpp.html#ab5e0c7c1bd254eb3dff6e81153cdce95',1,'ir_Technibel.cpp']]], - ['ktechnibelacgap_2701',['kTechnibelAcGap',['../ir__Technibel_8cpp.html#a9e400dd55fa32e3c91880a55a87e1e5e',1,'ir_Technibel.cpp']]], - ['ktechnibelachdrmark_2702',['kTechnibelAcHdrMark',['../ir__Technibel_8cpp.html#af72f1210a259c1dde24fc39e6b026521',1,'ir_Technibel.cpp']]], - ['ktechnibelachdrspace_2703',['kTechnibelAcHdrSpace',['../ir__Technibel_8cpp.html#a1703e3c4105c858b4534b0e40302cfae',1,'ir_Technibel.cpp']]], - ['ktechnibelacheader_2704',['kTechnibelAcHeader',['../ir__Technibel_8h.html#a11b2a3eaded5d7890c65f8eaa7c445a6',1,'ir_Technibel.h']]], - ['ktechnibelacheaderoffset_2705',['kTechnibelAcHeaderOffset',['../ir__Technibel_8h.html#a750df711adeb31d902ca20b572c6f541',1,'ir_Technibel.h']]], - ['ktechnibelacheat_2706',['kTechnibelAcHeat',['../ir__Technibel_8h.html#a517fa48501655e8d4f0f86146a8761d3',1,'ir_Technibel.h']]], - ['ktechnibelaconespace_2707',['kTechnibelAcOneSpace',['../ir__Technibel_8cpp.html#ae70ce0b82874c4bc0797f510353e2cc3',1,'ir_Technibel.cpp']]], - ['ktechnibelacresetstate_2708',['kTechnibelAcResetState',['../ir__Technibel_8h.html#a1c526f7f53f689c095c70687d6bd20ee',1,'ir_Technibel.h']]], - ['ktechnibelactempmaxc_2709',['kTechnibelAcTempMaxC',['../ir__Technibel_8h.html#a141efb22c7ac16c9218ecfde9577b132',1,'ir_Technibel.h']]], - ['ktechnibelactempmaxf_2710',['kTechnibelAcTempMaxF',['../ir__Technibel_8h.html#a048b6c574309291de654ee0340ffbe3c',1,'ir_Technibel.h']]], - ['ktechnibelactempminc_2711',['kTechnibelAcTempMinC',['../ir__Technibel_8h.html#a82962d65e7835dc589bd2a9ace171de7',1,'ir_Technibel.h']]], - ['ktechnibelactempminf_2712',['kTechnibelAcTempMinF',['../ir__Technibel_8h.html#acbe3d2e41a0c2bf1b8857ab97cbb7b3c',1,'ir_Technibel.h']]], - ['ktechnibelactimerhoursoffset_2713',['kTechnibelAcTimerHoursOffset',['../ir__Technibel_8h.html#a6f4c74a83e3734474d84dc305f975cd1',1,'ir_Technibel.h']]], - ['ktechnibelactimermax_2714',['kTechnibelAcTimerMax',['../ir__Technibel_8h.html#af689f2686034aa45b19be75077a0baa6',1,'ir_Technibel.h']]], - ['ktechnibelaczerospace_2715',['kTechnibelAcZeroSpace',['../ir__Technibel_8cpp.html#a28f5833aa7529badc4785fac661974b4',1,'ir_Technibel.cpp']]], - ['ktecoauto_2716',['kTecoAuto',['../ir__Teco_8h.html#a79178aa25d9f60c0a838285369e1b910',1,'ir_Teco.h']]], - ['ktecobitmark_2717',['kTecoBitMark',['../ir__Teco_8cpp.html#a0aa2e352f4a61027b17467e92863883b',1,'ir_Teco.cpp']]], - ['ktecobits_2718',['kTecoBits',['../IRremoteESP8266_8h.html#aee01958e9d97a70a6881cf560ca0ca9d',1,'IRremoteESP8266.h']]], - ['ktecocool_2719',['kTecoCool',['../ir__Teco_8h.html#a554686c72b6bc487d03c9461f9633a6b',1,'ir_Teco.h']]], - ['ktecodefaultrepeat_2720',['kTecoDefaultRepeat',['../IRremoteESP8266_8h.html#a095362359f34c1ee5ab71d56e6d64f64',1,'IRremoteESP8266.h']]], - ['ktecodry_2721',['kTecoDry',['../ir__Teco_8h.html#af7efcf371967eb97fd31d54016a82006',1,'ir_Teco.h']]], - ['ktecofan_2722',['kTecoFan',['../ir__Teco_8h.html#a7385fe198242c9203e3a5d5ffb7beb4d',1,'ir_Teco.h']]], - ['ktecofanauto_2723',['kTecoFanAuto',['../ir__Teco_8h.html#a43e58c0158efac1c4e5497c619b5674c',1,'ir_Teco.h']]], - ['ktecofanhigh_2724',['kTecoFanHigh',['../ir__Teco_8h.html#a0a73f5f892e7f9812793fbf5dab458dd',1,'ir_Teco.h']]], - ['ktecofanlow_2725',['kTecoFanLow',['../ir__Teco_8h.html#abac7443a86fb304376dd94a9c10e6940',1,'ir_Teco.h']]], - ['ktecofanmed_2726',['kTecoFanMed',['../ir__Teco_8h.html#a35f313943f9e2f5b69d5237fdaa64914',1,'ir_Teco.h']]], - ['ktecogap_2727',['kTecoGap',['../ir__Teco_8cpp.html#a6a153d84287fba3bd11e3e5054fd7e30',1,'ir_Teco.cpp']]], - ['ktecohdrmark_2728',['kTecoHdrMark',['../ir__Teco_8cpp.html#ada983ce2d6f03949cddfe06191ab05d9',1,'ir_Teco.cpp']]], - ['ktecohdrspace_2729',['kTecoHdrSpace',['../ir__Teco_8cpp.html#acf417d42fd39dbaf06282162ab5b17e2',1,'ir_Teco.cpp']]], - ['ktecoheat_2730',['kTecoHeat',['../ir__Teco_8h.html#ab6f9dbeb2838b124be12d08fd9b209bb',1,'ir_Teco.h']]], - ['ktecomaxtemp_2731',['kTecoMaxTemp',['../ir__Teco_8h.html#a1c24aa0cc4d475a5eb97d5208f4dcf06',1,'ir_Teco.h']]], - ['ktecomintemp_2732',['kTecoMinTemp',['../ir__Teco_8h.html#a54da99bfcbea5e076c3ca2934e769ab1',1,'ir_Teco.h']]], - ['ktecoonespace_2733',['kTecoOneSpace',['../ir__Teco_8cpp.html#a62eccbf6773ea8fbc18432627c62d0d5',1,'ir_Teco.cpp']]], - ['ktecoreset_2734',['kTecoReset',['../ir__Teco_8h.html#acf559a2cd772835ce46c3f673cd95806',1,'ir_Teco.h']]], - ['ktecozerospace_2735',['kTecoZeroSpace',['../ir__Teco_8cpp.html#a8dc1f6ea44519a0930b48f69a83a7363',1,'ir_Teco.cpp']]], - ['ktempdownstr_2736',['kTempDownStr',['../IRtext_8cpp.html#a3fa3262c5631c9357a5723c70dc3be12',1,'kTempDownStr(): IRtext.cpp'],['../IRtext_8h.html#a3d367a899d7e8ed20844bb3c48bf6395',1,'kTempDownStr(): IRtext.cpp']]], - ['ktempstr_2737',['kTempStr',['../IRtext_8cpp.html#a487bd9a4225536aba2595be0b5cb8039',1,'kTempStr(): IRtext.cpp'],['../IRtext_8h.html#a87652df1cf724353547f27a9ebde5edb',1,'kTempStr(): IRtext.cpp']]], - ['ktempupstr_2738',['kTempUpStr',['../IRtext_8cpp.html#a7c4f18322b600aaaf5a8716654d05dc3',1,'kTempUpStr(): IRtext.cpp'],['../IRtext_8h.html#a71687df5bc94e4ca18cf59c9ff238e86',1,'kTempUpStr(): IRtext.cpp']]], - ['kthreeletterdayofweekstr_2739',['kThreeLetterDayOfWeekStr',['../IRtext_8cpp.html#ae16da0464743313a1fbeae92dcfcebbd',1,'kThreeLetterDayOfWeekStr(): IRtext.cpp'],['../IRtext_8h.html#a837ecfeff9a1bc7546016229e9f2ddfb',1,'kThreeLetterDayOfWeekStr(): IRtext.cpp']]], - ['ktimeoutms_2740',['kTimeoutMs',['../IRrecv_8h.html#ad37e9659aaef29c541802d9759e0ab7b',1,'IRrecv.h']]], - ['ktimerstr_2741',['kTimerStr',['../IRtext_8cpp.html#a2b5219ba887cfbc578fb880ebada832a',1,'kTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a36fa3584a89f6e48757eba8f3df7e109',1,'kTimerStr(): IRtext.cpp']]], - ['ktimesep_2742',['kTimeSep',['../IRtext_8cpp.html#a277b588db53ec31ab7b0d287310c6d50',1,'kTimeSep(): IRtext.cpp'],['../IRtext_8h.html#a277b588db53ec31ab7b0d287310c6d50',1,'kTimeSep(): IRtext.cpp']]], - ['ktogglestr_2743',['kToggleStr',['../IRtext_8cpp.html#a33860b90859d19191c9759b099283b37',1,'kToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a05b1e2f809dadf05e22e1cb1d1a7f07e',1,'kToggleStr(): IRtext.cpp']]], - ['ktolerance_2744',['kTolerance',['../IRrecv_8h.html#a7884008b3a738dfc7bd8658655e10272',1,'IRrecv.h']]], - ['ktopstr_2745',['kTopStr',['../IRtext_8cpp.html#a65a8bf89c9dd0277607478277c0c7088',1,'kTopStr(): IRtext.cpp'],['../IRtext_8h.html#a6bb6abfc54409b801dcb591f036635d2',1,'kTopStr(): IRtext.cpp']]], - ['ktoshibaacauto_2746',['kToshibaAcAuto',['../ir__Toshiba_8h.html#a4730189595a884ae6535805948e096aa',1,'ir_Toshiba.h']]], - ['ktoshibaacbitmark_2747',['kToshibaAcBitMark',['../ir__Toshiba_8cpp.html#adff1c244103ff274243b8e20ca209866',1,'ir_Toshiba.cpp']]], - ['ktoshibaacbits_2748',['kToshibaACBits',['../IRremoteESP8266_8h.html#a172dde7867fa9a68902c3ad7ea9629b0',1,'IRremoteESP8266.h']]], - ['ktoshibaacbitslong_2749',['kToshibaACBitsLong',['../IRremoteESP8266_8h.html#aaf9e746cb8ee9e246f435ba4416a5428',1,'IRremoteESP8266.h']]], - ['ktoshibaacbitsshort_2750',['kToshibaACBitsShort',['../IRremoteESP8266_8h.html#a7483cfe84003b0e24bfa846c240afc4c',1,'IRremoteESP8266.h']]], - ['ktoshibaaccool_2751',['kToshibaAcCool',['../ir__Toshiba_8h.html#a2f30e65bb092365d1a8bcb1f3395333a',1,'ir_Toshiba.h']]], - ['ktoshibaacdry_2752',['kToshibaAcDry',['../ir__Toshiba_8h.html#a10b77d1038efc59775398789c33af91e',1,'ir_Toshiba.h']]], - ['ktoshibaaceconoon_2753',['kToshibaAcEconoOn',['../ir__Toshiba_8h.html#ab95da2ea12790cd327519615dbb48efe',1,'ir_Toshiba.h']]], - ['ktoshibaacfan_2754',['kToshibaAcFan',['../ir__Toshiba_8h.html#a4ecdbe268368c9d22a690bc5e394586f',1,'ir_Toshiba.h']]], - ['ktoshibaacfanauto_2755',['kToshibaAcFanAuto',['../ir__Toshiba_8h.html#a69f52e19a5b0e68abda00b680fbef7f6',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmax_2756',['kToshibaAcFanMax',['../ir__Toshiba_8h.html#a0f6ffde3491f464166d6064d7dfe5ba4',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmed_2757',['kToshibaAcFanMed',['../ir__Toshiba_8h.html#a3ff967af7d1a30c7c5cb958eaa5cbd58',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmin_2758',['kToshibaAcFanMin',['../ir__Toshiba_8h.html#ab2c5eea9ccabf2e0e56bc03baec5d898',1,'ir_Toshiba.h']]], - ['ktoshibaachdrmark_2759',['kToshibaAcHdrMark',['../ir__Toshiba_8cpp.html#a2eac25ff2a381ad6690623641153a780',1,'ir_Toshiba.cpp']]], - ['ktoshibaachdrspace_2760',['kToshibaAcHdrSpace',['../ir__Toshiba_8cpp.html#a0ae9047d5a204f320c06736fa40d0a7d',1,'ir_Toshiba.cpp']]], - ['ktoshibaacheat_2761',['kToshibaAcHeat',['../ir__Toshiba_8h.html#aa9ec24f9a5e460aa7017f642ce7a4c0d',1,'ir_Toshiba.h']]], - ['ktoshibaacinvertedlength_2762',['kToshibaAcInvertedLength',['../ir__Toshiba_8h.html#adfc646265ec1e4a03646d7f3b867d65b',1,'ir_Toshiba.h']]], - ['ktoshibaaclengthbyte_2763',['kToshibaAcLengthByte',['../ir__Toshiba_8h.html#a4e3f39edb4cc3a8c7b94ff9cce0e01d0',1,'ir_Toshiba.h']]], - ['ktoshibaacmaxtemp_2764',['kToshibaAcMaxTemp',['../ir__Toshiba_8h.html#a475028a2a519e3310506ceac0a5dc4e6',1,'ir_Toshiba.h']]], - ['ktoshibaacmingap_2765',['kToshibaAcMinGap',['../ir__Toshiba_8cpp.html#ade7642284aa7c6a638b9fab45610cc59',1,'ir_Toshiba.cpp']]], - ['ktoshibaacminlength_2766',['kToshibaAcMinLength',['../ir__Toshiba_8h.html#a105b24e11afdd102097c81bf050a0f3a',1,'ir_Toshiba.h']]], - ['ktoshibaacminrepeat_2767',['kToshibaACMinRepeat',['../IRremoteESP8266_8h.html#a8fca6a7c3cd608ff49cab35f24af0546',1,'IRremoteESP8266.h']]], - ['ktoshibaacmintemp_2768',['kToshibaAcMinTemp',['../ir__Toshiba_8h.html#ad0e8e76aabc38ac7ba2f13a009de98e0',1,'ir_Toshiba.h']]], - ['ktoshibaacoff_2769',['kToshibaAcOff',['../ir__Toshiba_8h.html#a58b75ee3ddd1325bd4da71902d840c1d',1,'ir_Toshiba.h']]], - ['ktoshibaaconespace_2770',['kToshibaAcOneSpace',['../ir__Toshiba_8cpp.html#a787330c9e5f9d30e8df157acc15f56dd',1,'ir_Toshiba.cpp']]], - ['ktoshibaacstatelength_2771',['kToshibaACStateLength',['../IRremoteESP8266_8h.html#ad3be6a1b9241c20bb1464a2cb80b97d2',1,'IRremoteESP8266.h']]], - ['ktoshibaacstatelengthlong_2772',['kToshibaACStateLengthLong',['../IRremoteESP8266_8h.html#a3c0ebc01f8a61422c26b84e78fcec8f7',1,'IRremoteESP8266.h']]], - ['ktoshibaacstatelengthshort_2773',['kToshibaACStateLengthShort',['../IRremoteESP8266_8h.html#a5fa111fa9d560834605eff2941c0cacc',1,'IRremoteESP8266.h']]], - ['ktoshibaacswingoff_2774',['kToshibaAcSwingOff',['../ir__Toshiba_8h.html#ab556d401c0f8d822a7ef9db5c89d9c87',1,'ir_Toshiba.h']]], - ['ktoshibaacswingon_2775',['kToshibaAcSwingOn',['../ir__Toshiba_8h.html#ac5815fcd06c734de58253e64f0b4fb7f',1,'ir_Toshiba.h']]], - ['ktoshibaacswingstep_2776',['kToshibaAcSwingStep',['../ir__Toshiba_8h.html#aff168c247bc0ea425f805f595cb14012',1,'ir_Toshiba.h']]], - ['ktoshibaacswingtoggle_2777',['kToshibaAcSwingToggle',['../ir__Toshiba_8h.html#a0a2c37d609c5085f68bdfcaef1d8a05e',1,'ir_Toshiba.h']]], - ['ktoshibaacturboon_2778',['kToshibaAcTurboOn',['../ir__Toshiba_8h.html#a8f84e028f12a8fac27366893b65faba7',1,'ir_Toshiba.h']]], - ['ktoshibaacusualgap_2779',['kToshibaAcUsualGap',['../ir__Toshiba_8cpp.html#ab8b9142b37e7cbecac3544f016791a78',1,'ir_Toshiba.cpp']]], - ['ktoshibaaczerospace_2780',['kToshibaAcZeroSpace',['../ir__Toshiba_8cpp.html#ab2fc2833cfb31d872894073687eebd99',1,'ir_Toshiba.cpp']]], - ['ktranscoldauto_2781',['kTranscoldAuto',['../ir__Transcold_8h.html#ad764a143afb464fe25fe5d670241ef87',1,'ir_Transcold.h']]], - ['ktranscoldbitmark_2782',['kTranscoldBitMark',['../ir__Transcold_8cpp.html#acc3092436f39e583e4a2e51851543fec',1,'ir_Transcold.cpp']]], - ['ktranscoldbits_2783',['kTranscoldBits',['../IRremoteESP8266_8h.html#abe50a182c1f65378337705d2784e2fdb',1,'IRremoteESP8266.h']]], - ['ktranscoldcmdfan_2784',['kTranscoldCmdFan',['../ir__Transcold_8h.html#a97b418d9a169e5e79f1ee08fd433c62f',1,'ir_Transcold.h']]], - ['ktranscoldcool_2785',['kTranscoldCool',['../ir__Transcold_8h.html#ad1fcfe19e632b7dc8489cee494d48436',1,'ir_Transcold.h']]], - ['ktranscolddefaultrepeat_2786',['kTranscoldDefaultRepeat',['../IRremoteESP8266_8h.html#a17cef98fbfae6a84c0a3e009fb3c31d0',1,'IRremoteESP8266.h']]], - ['ktranscolddry_2787',['kTranscoldDry',['../ir__Transcold_8h.html#a2f185d4fb3a103c15b537557e24aff09',1,'ir_Transcold.h']]], - ['ktranscoldfan_2788',['kTranscoldFan',['../ir__Transcold_8h.html#a7710625ad8497f1baa6a6d4de2ca8be1',1,'ir_Transcold.h']]], - ['ktranscoldfanauto_2789',['kTranscoldFanAuto',['../ir__Transcold_8h.html#a89f832806c8b3d7311070a285fc757ec',1,'ir_Transcold.h']]], - ['ktranscoldfanauto0_2790',['kTranscoldFanAuto0',['../ir__Transcold_8h.html#a813d31eace1b1a6c4d7b2efb5eddb9af',1,'ir_Transcold.h']]], - ['ktranscoldfanfixed_2791',['kTranscoldFanFixed',['../ir__Transcold_8h.html#ac3afe530635393f2d642cecd7e77b131',1,'ir_Transcold.h']]], - ['ktranscoldfanmax_2792',['kTranscoldFanMax',['../ir__Transcold_8h.html#aa5b9f6cd6aa930a856b26e7714575e85',1,'ir_Transcold.h']]], - ['ktranscoldfanmed_2793',['kTranscoldFanMed',['../ir__Transcold_8h.html#ad37f4a57666b991be80e647de6b4ca65',1,'ir_Transcold.h']]], - ['ktranscoldfanmin_2794',['kTranscoldFanMin',['../ir__Transcold_8h.html#a4ddaefba3d91ee7aa25b603f1034af9c',1,'ir_Transcold.h']]], - ['ktranscoldfantempcode_2795',['kTranscoldFanTempCode',['../ir__Transcold_8h.html#a57eef64332f604b0c71557270ae255ad',1,'ir_Transcold.h']]], - ['ktranscoldfanzonefollow_2796',['kTranscoldFanZoneFollow',['../ir__Transcold_8h.html#aa78ff958ca560d1db1e69e3bd2bcd5e3',1,'ir_Transcold.h']]], - ['ktranscoldhdrmark_2797',['kTranscoldHdrMark',['../ir__Transcold_8cpp.html#aa999da00de9866212cacc740bb66d5f6',1,'ir_Transcold.cpp']]], - ['ktranscoldhdrspace_2798',['kTranscoldHdrSpace',['../ir__Transcold_8cpp.html#a0568fcecce190a29828771add3386b6a',1,'ir_Transcold.cpp']]], - ['ktranscoldheat_2799',['kTranscoldHeat',['../ir__Transcold_8h.html#ad109eb1c3cb044994179fafdbfc107e2',1,'ir_Transcold.h']]], - ['ktranscoldknowngoodstate_2800',['kTranscoldKnownGoodState',['../ir__Transcold_8h.html#a385409f55006ad7fedca2d335b69bf39',1,'ir_Transcold.h']]], - ['ktranscoldoff_2801',['kTranscoldOff',['../ir__Transcold_8h.html#a55d930cdd8e4246de18832bbd88a7d99',1,'ir_Transcold.h']]], - ['ktranscoldonespace_2802',['kTranscoldOneSpace',['../ir__Transcold_8cpp.html#aadd9575e345b8c57b4e2c65bcdb3123d',1,'ir_Transcold.cpp']]], - ['ktranscoldprefix_2803',['kTranscoldPrefix',['../ir__Transcold_8h.html#aaef68d4ab70d54b64486b7ba27a15822',1,'ir_Transcold.h']]], - ['ktranscoldswing_2804',['kTranscoldSwing',['../ir__Transcold_8h.html#af467e8cfb7f71abb609f4b9673908937',1,'ir_Transcold.h']]], - ['ktranscoldswingh_2805',['kTranscoldSwingH',['../ir__Transcold_8h.html#a300cfff72391f0c7c0caa97d49a73918',1,'ir_Transcold.h']]], - ['ktranscoldswingv_2806',['kTranscoldSwingV',['../ir__Transcold_8h.html#acfb0faab9bcf147c5dab61bee2cd93c9',1,'ir_Transcold.h']]], - ['ktranscoldtempmax_2807',['kTranscoldTempMax',['../ir__Transcold_8h.html#a5c9be5911208f2f7062a966b3deda0cd',1,'ir_Transcold.h']]], - ['ktranscoldtempmin_2808',['kTranscoldTempMin',['../ir__Transcold_8h.html#a52ff579c8e54611aed6be38d9907af57',1,'ir_Transcold.h']]], - ['ktranscoldtempsize_2809',['kTranscoldTempSize',['../ir__Transcold_8h.html#adeffd84ae91146e1ac5b27735193ba55',1,'ir_Transcold.h']]], - ['ktranscoldunknown_2810',['kTranscoldUnknown',['../ir__Transcold_8h.html#af52672df48539c826ccf8ffc1e3f9927',1,'ir_Transcold.h']]], - ['ktranscoldzerospace_2811',['kTranscoldZeroSpace',['../ir__Transcold_8cpp.html#af932911d55d7eee66ee217cb8ad5d4d4',1,'ir_Transcold.cpp']]], - ['ktrotecauto_2812',['kTrotecAuto',['../ir__Trotec_8h.html#a53b2687b96f8e69ec6f57dd2ac7a6dfa',1,'ir_Trotec.h']]], - ['ktrotecbitmark_2813',['kTrotecBitMark',['../ir__Trotec_8cpp.html#a870b2da19855eff625a2834ca7fd8765',1,'ir_Trotec.cpp']]], - ['ktrotecbits_2814',['kTrotecBits',['../IRremoteESP8266_8h.html#ab819cb0a34937714dcb10059799c26e2',1,'IRremoteESP8266.h']]], - ['ktroteccool_2815',['kTrotecCool',['../ir__Trotec_8h.html#add33a35046e4270ad9ff3b998526d5d1',1,'ir_Trotec.h']]], - ['ktrotecdefaultrepeat_2816',['kTrotecDefaultRepeat',['../IRremoteESP8266_8h.html#a4c0411462f2854a8606deca09ed15df5',1,'IRremoteESP8266.h']]], - ['ktrotecdeftemp_2817',['kTrotecDefTemp',['../ir__Trotec_8h.html#ac28d1d0ea6db18716a7d9d21e84178c0',1,'ir_Trotec.h']]], - ['ktrotecdry_2818',['kTrotecDry',['../ir__Trotec_8h.html#abdaa1836c6bc90b1d5813df028a76e21',1,'ir_Trotec.h']]], - ['ktrotecfan_2819',['kTrotecFan',['../ir__Trotec_8h.html#a9309d528d50dd542a5184a51fb101a6a',1,'ir_Trotec.h']]], - ['ktrotecfanhigh_2820',['kTrotecFanHigh',['../ir__Trotec_8h.html#ae780f0bb6b9b83f3dbcc1c1e282e5436',1,'ir_Trotec.h']]], - ['ktrotecfanlow_2821',['kTrotecFanLow',['../ir__Trotec_8h.html#aa1c3695c1becc935d2a3b2691996a17b',1,'ir_Trotec.h']]], - ['ktrotecfanmed_2822',['kTrotecFanMed',['../ir__Trotec_8h.html#abae1944f529099ff4736b6cb13bcbeda',1,'ir_Trotec.h']]], - ['ktrotecgap_2823',['kTrotecGap',['../ir__Trotec_8cpp.html#a753ba93d7b757dc58fcf1b4a6bb65ff6',1,'ir_Trotec.cpp']]], - ['ktrotecgapend_2824',['kTrotecGapEnd',['../ir__Trotec_8cpp.html#a5fcc4a020bcebfe90abe12d4a47de372',1,'ir_Trotec.cpp']]], - ['ktrotechdrmark_2825',['kTrotecHdrMark',['../ir__Trotec_8cpp.html#a809faed7ee2fef78a5b8271a2c5ddd10',1,'ir_Trotec.cpp']]], - ['ktrotechdrspace_2826',['kTrotecHdrSpace',['../ir__Trotec_8cpp.html#a5d42cd98bf737dd8161572afa393be1e',1,'ir_Trotec.cpp']]], - ['ktrotecintro1_2827',['kTrotecIntro1',['../ir__Trotec_8h.html#aabc5c6a9b4867c25d84ffe2839e88564',1,'ir_Trotec.h']]], - ['ktrotecintro2_2828',['kTrotecIntro2',['../ir__Trotec_8h.html#ac33de8b2fc4b70bb272a56f6bbb68e34',1,'ir_Trotec.h']]], - ['ktrotecmaxtemp_2829',['kTrotecMaxTemp',['../ir__Trotec_8h.html#abfe4004dcac892f575ec1efb09567595',1,'ir_Trotec.h']]], - ['ktrotecmaxtimer_2830',['kTrotecMaxTimer',['../ir__Trotec_8h.html#a8467d1b9983d5750a61817cacb148efd',1,'ir_Trotec.h']]], - ['ktrotecmintemp_2831',['kTrotecMinTemp',['../ir__Trotec_8h.html#a091904af9fee2384e137feab274af7f8',1,'ir_Trotec.h']]], - ['ktroteconespace_2832',['kTrotecOneSpace',['../ir__Trotec_8cpp.html#a570aa73a82089906971932212d99a283',1,'ir_Trotec.cpp']]], - ['ktrotecstatelength_2833',['kTrotecStateLength',['../IRremoteESP8266_8h.html#ae1d2aa52fef81f03b92c35f4970728d2',1,'IRremoteESP8266.h']]], - ['ktroteczerospace_2834',['kTrotecZeroSpace',['../ir__Trotec_8cpp.html#a8e8f85e7b8a8157eb425316b5108d717',1,'ir_Trotec.cpp']]], - ['ktruestr_2835',['kTrueStr',['../IRtext_8cpp.html#a28a627d6f48d7d06a560f9613e4550fa',1,'kTrueStr(): IRtext.cpp'],['../IRtext_8h.html#aca6e78a25b9dacd2508069f0a6b919c0',1,'kTrueStr(): IRtext.cpp']]], - ['ktrumaauto_2836',['kTrumaAuto',['../ir__Truma_8h.html#aa539e7b75df4a2542db4fac86c341aae',1,'ir_Truma.h']]], - ['ktrumabits_2837',['kTrumaBits',['../IRremoteESP8266_8h.html#aa5ba6ea5669410e37620b616c75e766f',1,'IRremoteESP8266.h']]], - ['ktrumachecksuminit_2838',['kTrumaChecksumInit',['../ir__Truma_8h.html#aa5aadfae49e282d39b16edd75e3bfe4e',1,'ir_Truma.h']]], - ['ktrumacool_2839',['kTrumaCool',['../ir__Truma_8h.html#adfe6810b410e5c77d3faf5cc25d6cc3a',1,'ir_Truma.h']]], - ['ktrumadefaultstate_2840',['kTrumaDefaultState',['../ir__Truma_8h.html#a78982ad49a52d492472ea25b985f3b5e',1,'ir_Truma.h']]], - ['ktrumafan_2841',['kTrumaFan',['../ir__Truma_8h.html#ac1dfc97d02422f3d95c9aa6d85c4c24f',1,'ir_Truma.h']]], - ['ktrumafanhigh_2842',['kTrumaFanHigh',['../ir__Truma_8h.html#ab4e4af197a48a2fd6932a901c6ccd64e',1,'ir_Truma.h']]], - ['ktrumafanlow_2843',['kTrumaFanLow',['../ir__Truma_8h.html#a84f36ff984a23ec7613e72cf6bfb568a',1,'ir_Truma.h']]], - ['ktrumafanmed_2844',['kTrumaFanMed',['../ir__Truma_8h.html#acaabaf9fea52f17a4747ce7875ba2ed4',1,'ir_Truma.h']]], - ['ktrumafanquiet_2845',['kTrumaFanQuiet',['../ir__Truma_8h.html#a6582d41f790b9fc82fd9c30b913b0943',1,'ir_Truma.h']]], - ['ktrumafootermark_2846',['kTrumaFooterMark',['../ir__Truma_8cpp.html#afe540950135dbd3b355c7c480fd5e536',1,'ir_Truma.cpp']]], - ['ktrumagap_2847',['kTrumaGap',['../ir__Truma_8cpp.html#af9b738db46af724dbb04d2950ee744ab',1,'ir_Truma.cpp']]], - ['ktrumahdrmark_2848',['kTrumaHdrMark',['../ir__Truma_8cpp.html#a4cebd76faecf7a09c5a6c2ccb9b5f917',1,'ir_Truma.cpp']]], - ['ktrumaldrmark_2849',['kTrumaLdrMark',['../ir__Truma_8cpp.html#ab2986992a9aff6dec819d47bdee7b815',1,'ir_Truma.cpp']]], - ['ktrumaldrspace_2850',['kTrumaLdrSpace',['../ir__Truma_8cpp.html#ae0b8d934817dd611ad1a95d15970567d',1,'ir_Truma.cpp']]], - ['ktrumamaxtemp_2851',['kTrumaMaxTemp',['../ir__Truma_8h.html#ae569645f4f21a1c3fb39ed24dad4eef4',1,'ir_Truma.h']]], - ['ktrumamintemp_2852',['kTrumaMinTemp',['../ir__Truma_8h.html#a553ccb38aa5c0a202b2556d5e5664a2b',1,'ir_Truma.h']]], - ['ktrumaonemark_2853',['kTrumaOneMark',['../ir__Truma_8cpp.html#acd542e5de6ea90eccb341c62f7628204',1,'ir_Truma.cpp']]], - ['ktrumaspace_2854',['kTrumaSpace',['../ir__Truma_8cpp.html#a5f6941b73a61eff9c717a06866b5e028',1,'ir_Truma.cpp']]], - ['ktrumatempoffset_2855',['kTrumaTempOffset',['../ir__Truma_8h.html#ac377b70947017722c45a08278597d382',1,'ir_Truma.h']]], - ['ktrumazeromark_2856',['kTrumaZeroMark',['../ir__Truma_8cpp.html#a87a88430e179fe947c3180801cef25d5',1,'ir_Truma.cpp']]], - ['kturbostr_2857',['kTurboStr',['../IRtext_8cpp.html#a9f3f7395d980887699ac5a0c146d37d2',1,'kTurboStr(): IRtext.cpp'],['../IRtext_8h.html#a3ced6d2a545174133308d7803157f7f8',1,'kTurboStr(): IRtext.cpp']]], - ['kturbotogglestr_2858',['kTurboToggleStr',['../IRtext_8cpp.html#a22717e4f7c1683ae1b6feac88441ad2d',1,'kTurboToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a1cb328db0aaa0b2bbb4afa24c9f3d731',1,'kTurboToggleStr(): IRtext.cpp']]], - ['ktypestr_2859',['kTypeStr',['../IRtext_8cpp.html#a284508462cfcbfb66b3002f447e3a002',1,'kTypeStr(): IRtext.cpp'],['../IRtext_8h.html#ab6117f82c4dbbfc229d99cc613d62c94',1,'kTypeStr(): IRtext.cpp']]], - ['kunknownstr_2860',['kUnknownStr',['../IRtext_8cpp.html#a9c6c6d47ce3eb07cc607faa600978029',1,'kUnknownStr(): IRtext.cpp'],['../IRtext_8h.html#aa59176b31741b60729d4279817a7da1b',1,'kUnknownStr(): IRtext.cpp']]], - ['kunknownthreshold_2861',['kUnknownThreshold',['../IRrecv_8h.html#aa6b5a940c7a0432aa82a8d823202cd7f',1,'IRrecv.h']]], - ['kupperstr_2862',['kUpperStr',['../IRtext_8cpp.html#a887bb7c61f38014d21b025c67102fa0b',1,'kUpperStr(): IRtext.cpp'],['../IRtext_8h.html#a5aea60591627481d90688f655b2eb82a',1,'kUpperStr(): IRtext.cpp']]], - ['kupstr_2863',['kUpStr',['../IRtext_8cpp.html#ab970b3d5239f08f21a8e5e2eae49739f',1,'kUpStr(): IRtext.cpp'],['../IRtext_8h.html#a8672abbd2a279c032f0435ed75143b1a',1,'kUpStr(): IRtext.cpp']]], - ['kusedeftol_2864',['kUseDefTol',['../IRrecv_8h.html#a05025e8bd724ae2d0c7fea6e924ca84c',1,'IRrecv.h']]], - ['kvestelacauto_2865',['kVestelAcAuto',['../ir__Vestel_8h.html#a157e879cbe3b216075e3b7b2db5fdc3c',1,'ir_Vestel.h']]], - ['kvestelacbitmark_2866',['kVestelAcBitMark',['../ir__Vestel_8h.html#a70d7198002c61529956625986aa533f0',1,'ir_Vestel.h']]], - ['kvestelacbits_2867',['kVestelAcBits',['../IRremoteESP8266_8h.html#ae31945a1ce90b2d4c33b5c91d980d3a7',1,'IRremoteESP8266.h']]], - ['kvestelaccool_2868',['kVestelAcCool',['../ir__Vestel_8h.html#aa2ec681dd63a976a6b2b182ae590e020',1,'ir_Vestel.h']]], - ['kvestelacdry_2869',['kVestelAcDry',['../ir__Vestel_8h.html#a21a255842a75a932a3a0735851d9c197',1,'ir_Vestel.h']]], - ['kvestelacfan_2870',['kVestelAcFan',['../ir__Vestel_8h.html#aeabf5404a3f66fd1428b6e4c09f24c08',1,'ir_Vestel.h']]], - ['kvestelacfanauto_2871',['kVestelAcFanAuto',['../ir__Vestel_8h.html#ac2f3175c25844414de2c2489595dd851',1,'ir_Vestel.h']]], - ['kvestelacfanautocool_2872',['kVestelAcFanAutoCool',['../ir__Vestel_8h.html#ab40dc2ebe05c77e701e2d5acf16b2658',1,'ir_Vestel.h']]], - ['kvestelacfanautohot_2873',['kVestelAcFanAutoHot',['../ir__Vestel_8h.html#a95dee8baacedb7aa62edbdecf766cdc1',1,'ir_Vestel.h']]], - ['kvestelacfanhigh_2874',['kVestelAcFanHigh',['../ir__Vestel_8h.html#acae63d91ee2a2b448fe1a68b2472e4a3',1,'ir_Vestel.h']]], - ['kvestelacfanlow_2875',['kVestelAcFanLow',['../ir__Vestel_8h.html#a21ce5e539ecb764be8dbad33914f4b87',1,'ir_Vestel.h']]], - ['kvestelacfanmed_2876',['kVestelAcFanMed',['../ir__Vestel_8h.html#a265fa70e0e38caefb45ed007eb25a430',1,'ir_Vestel.h']]], - ['kvestelachdrmark_2877',['kVestelAcHdrMark',['../ir__Vestel_8h.html#a32871ab992bfee13918a50f04508a95a',1,'ir_Vestel.h']]], - ['kvestelachdrspace_2878',['kVestelAcHdrSpace',['../ir__Vestel_8h.html#a2389409048e409b411ea8416829c06ef',1,'ir_Vestel.h']]], - ['kvestelacheat_2879',['kVestelAcHeat',['../ir__Vestel_8h.html#a33d36614992862c41f5e48548b0a45f1',1,'ir_Vestel.h']]], - ['kvestelacion_2880',['kVestelAcIon',['../ir__Vestel_8h.html#a6a661c914fd67e261e2148d797789339',1,'ir_Vestel.h']]], - ['kvestelacmaxtemp_2881',['kVestelAcMaxTemp',['../ir__Vestel_8h.html#a4e49902b2e4fe049fd5969b4532cc7b4',1,'ir_Vestel.h']]], - ['kvestelacmintempc_2882',['kVestelAcMinTempC',['../ir__Vestel_8h.html#ae597f05d0886a5a2aa8c43db187a657b',1,'ir_Vestel.h']]], - ['kvestelacmintemph_2883',['kVestelAcMinTempH',['../ir__Vestel_8h.html#a06977d297c84adac7927c80c7b0e7297',1,'ir_Vestel.h']]], - ['kvestelacnormal_2884',['kVestelAcNormal',['../ir__Vestel_8h.html#afa4c0fafcc806cd22dfb45475631d754',1,'ir_Vestel.h']]], - ['kvestelaconespace_2885',['kVestelAcOneSpace',['../ir__Vestel_8h.html#a507a849ef5e031f40ecc0e5db6ac8dd6',1,'ir_Vestel.h']]], - ['kvestelacsleep_2886',['kVestelAcSleep',['../ir__Vestel_8h.html#abc4701f0a44ed48a139d192f86a7169b',1,'ir_Vestel.h']]], - ['kvestelacstatedefault_2887',['kVestelAcStateDefault',['../ir__Vestel_8h.html#a4207797ae1043280ec6364de5981a791',1,'ir_Vestel.h']]], - ['kvestelacswing_2888',['kVestelAcSwing',['../ir__Vestel_8h.html#aeb764aa28cb134348e64fde5cb4d40f0',1,'ir_Vestel.h']]], - ['kvestelactimestatedefault_2889',['kVestelAcTimeStateDefault',['../ir__Vestel_8h.html#aaf4d9b6a41269ede2101d45cc1549794',1,'ir_Vestel.h']]], - ['kvestelactolerance_2890',['kVestelAcTolerance',['../ir__Vestel_8h.html#a4abe236ac8a801aa03ab843c3e418711',1,'ir_Vestel.h']]], - ['kvestelacturbo_2891',['kVestelAcTurbo',['../ir__Vestel_8h.html#a85b8b744f201b1666f9608f693a61059',1,'ir_Vestel.h']]], - ['kvestelaczerospace_2892',['kVestelAcZeroSpace',['../ir__Vestel_8h.html#a2094b0ff279fb1696b51e57d657efd13',1,'ir_Vestel.h']]], - ['kvoltas122lzf_2893',['kVoltas122LZF',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2a8de4d20c3d39f984be46ee9ead3b2a59',1,'IRsend.h']]], - ['kvoltasbitmark_2894',['kVoltasBitMark',['../ir__Voltas_8cpp.html#aff3e77a8712c4b9132a36b1909727906',1,'ir_Voltas.cpp']]], - ['kvoltasbits_2895',['kVoltasBits',['../IRremoteESP8266_8h.html#ad13056674d7d5fc530123ee1bb754409',1,'IRremoteESP8266.h']]], - ['kvoltascool_2896',['kVoltasCool',['../ir__Voltas_8h.html#a60ce895195221d1344db3b6bfded5422',1,'ir_Voltas.h']]], - ['kvoltasdry_2897',['kVoltasDry',['../ir__Voltas_8h.html#a3a89e1bb4d6f9b0371cb2b1a77f95aa0',1,'ir_Voltas.h']]], - ['kvoltasdrytemp_2898',['kVoltasDryTemp',['../ir__Voltas_8h.html#abb138aeb435b0583c09042f01d7eb42b',1,'ir_Voltas.h']]], - ['kvoltasfan_2899',['kVoltasFan',['../ir__Voltas_8h.html#a5a32539c5a10fb63d4df009968a1cc90',1,'ir_Voltas.h']]], - ['kvoltasfanauto_2900',['kVoltasFanAuto',['../ir__Voltas_8h.html#a68fc7bebcc711e8ca00c664e09f0aff9',1,'ir_Voltas.h']]], - ['kvoltasfanhigh_2901',['kVoltasFanHigh',['../ir__Voltas_8h.html#a6d217a662dd1c9353f3899b2be2dc269',1,'ir_Voltas.h']]], - ['kvoltasfanlow_2902',['kVoltasFanLow',['../ir__Voltas_8h.html#a3b84c9d78f23e694b25edddf5e5ac94a',1,'ir_Voltas.h']]], - ['kvoltasfanmed_2903',['kVoltasFanMed',['../ir__Voltas_8h.html#a0bf9ee213cf9266ea29b6813dc79e165',1,'ir_Voltas.h']]], - ['kvoltasfreq_2904',['kVoltasFreq',['../ir__Voltas_8cpp.html#abf1ddb4b962572b4a4aae323f02d91f1',1,'ir_Voltas.cpp']]], - ['kvoltasheat_2905',['kVoltasHeat',['../ir__Voltas_8h.html#a9f131121d8bff4112de9878be5ce0330',1,'ir_Voltas.h']]], - ['kvoltasmaxtemp_2906',['kVoltasMaxTemp',['../ir__Voltas_8h.html#a21a7e03f17b6daacd82037b892177724',1,'ir_Voltas.h']]], - ['kvoltasmintemp_2907',['kVoltasMinTemp',['../ir__Voltas_8h.html#a85f2d29327aa19177ea026a049c0fe52',1,'ir_Voltas.h']]], - ['kvoltasonespace_2908',['kVoltasOneSpace',['../ir__Voltas_8cpp.html#a5ad53f57f302eb44dfb773304c872018',1,'ir_Voltas.cpp']]], - ['kvoltasstatelength_2909',['kVoltasStateLength',['../IRremoteESP8266_8h.html#a336bd721135fc8b869941cd3aa73646e',1,'IRremoteESP8266.h']]], - ['kvoltasswinghchange_2910',['kVoltasSwingHChange',['../ir__Voltas_8h.html#a92242c38b240f5134e1a6c2200b6d0de',1,'ir_Voltas.h']]], - ['kvoltasswinghnochange_2911',['kVoltasSwingHNoChange',['../ir__Voltas_8h.html#acb66394dca0f3606066f61077444b0d3',1,'ir_Voltas.h']]], - ['kvoltasunknown_2912',['kVoltasUnknown',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2aa804f5b34349056dea270669f8b67229',1,'IRsend.h']]], - ['kvoltaszerospace_2913',['kVoltasZeroSpace',['../ir__Voltas_8cpp.html#abcfc7887357e19c6d74b5befddfa7eb4',1,'ir_Voltas.cpp']]], - ['kwallstr_2914',['kWallStr',['../IRtext_8cpp.html#a860a71561b888c82318daad9f2c34592',1,'kWallStr(): IRtext.cpp'],['../IRtext_8h.html#add1af6d900b500ca7affff3c9ff02d29',1,'kWallStr(): IRtext.cpp']]], - ['kweeklytimerstr_2915',['kWeeklyTimerStr',['../IRtext_8cpp.html#aaf0b7bf26b4710a4c032cec9e55c545a',1,'kWeeklyTimerStr(): IRtext.cpp'],['../IRtext_8h.html#ab59fa6f63401196c0ff32aba6da9d9aa',1,'kWeeklyTimerStr(): IRtext.cpp']]], - ['kwhirlpoolacauto_2916',['kWhirlpoolAcAuto',['../ir__Whirlpool_8h.html#a2f3cc5447f8042e9c2eae0c2e0dc1b80',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacautotemp_2917',['kWhirlpoolAcAutoTemp',['../ir__Whirlpool_8h.html#a314b66dc86a7f622d73d3973d9dca86d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacbitmark_2918',['kWhirlpoolAcBitMark',['../ir__Whirlpool_8cpp.html#a5c076ca2e18927f8b0594cb74a7de1ff',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacbits_2919',['kWhirlpoolAcBits',['../IRremoteESP8266_8h.html#a149bd4f3fb9c83e683095d393209ede3',1,'IRremoteESP8266.h']]], - ['kwhirlpoolacchecksumbyte1_2920',['kWhirlpoolAcChecksumByte1',['../ir__Whirlpool_8h.html#ab199c13354730c715debbeed63182cbd',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacchecksumbyte2_2921',['kWhirlpoolAcChecksumByte2',['../ir__Whirlpool_8h.html#a37d1a2fd814ccf83062325225bddb9be',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommand6thsense_2922',['kWhirlpoolAcCommand6thSense',['../ir__Whirlpool_8h.html#a48b1309aab30dd871ce047881680efa2',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandfanspeed_2923',['kWhirlpoolAcCommandFanSpeed',['../ir__Whirlpool_8h.html#a4712f7dd6c5631f6aa692eeb99fa3963',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandifeel_2924',['kWhirlpoolAcCommandIFeel',['../ir__Whirlpool_8h.html#a5cb95c379d033d7f5b0c81755f1d376f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandlight_2925',['kWhirlpoolAcCommandLight',['../ir__Whirlpool_8h.html#af6ae6f50d9dbfa610b7033181e4f7eb1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandmode_2926',['kWhirlpoolAcCommandMode',['../ir__Whirlpool_8h.html#ab03770a941b7277a66fe65003497e183',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandofftimer_2927',['kWhirlpoolAcCommandOffTimer',['../ir__Whirlpool_8h.html#a072883e3780aa0970183ab330db26118',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandontimer_2928',['kWhirlpoolAcCommandOnTimer',['../ir__Whirlpool_8h.html#a54cbadf2ded73e66d6d12b6622249bdc',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandpower_2929',['kWhirlpoolAcCommandPower',['../ir__Whirlpool_8h.html#ac215c2827ebfe25a896d53e576b643d1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandsleep_2930',['kWhirlpoolAcCommandSleep',['../ir__Whirlpool_8h.html#a695c9d69953ad2663512ede38e619b09',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandsuper_2931',['kWhirlpoolAcCommandSuper',['../ir__Whirlpool_8h.html#a4da2162e70a7257c5f4149e8556816d4',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandswing_2932',['kWhirlpoolAcCommandSwing',['../ir__Whirlpool_8h.html#a320e57c0727a74f049883c77233647a9',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandtemp_2933',['kWhirlpoolAcCommandTemp',['../ir__Whirlpool_8h.html#a6e567d58af9bc3fb246e3d47a09fb065',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccool_2934',['kWhirlpoolAcCool',['../ir__Whirlpool_8h.html#a9574c0a604ffee1df43222344f649db8',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacdefaultrepeat_2935',['kWhirlpoolAcDefaultRepeat',['../IRremoteESP8266_8h.html#a3b41358898f69d96bdeece17ead13ee0',1,'IRremoteESP8266.h']]], - ['kwhirlpoolacdry_2936',['kWhirlpoolAcDry',['../ir__Whirlpool_8h.html#ab7433a4e3e8ad7ee665ab234df43e45f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfan_2937',['kWhirlpoolAcFan',['../ir__Whirlpool_8h.html#a91ecddbde81174268fdde3679565daeb',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanauto_2938',['kWhirlpoolAcFanAuto',['../ir__Whirlpool_8h.html#a133a436db244935a812beba78a1a9d05',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanhigh_2939',['kWhirlpoolAcFanHigh',['../ir__Whirlpool_8h.html#a93affe2700e13830ff09ee16801be56d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanlow_2940',['kWhirlpoolAcFanLow',['../ir__Whirlpool_8h.html#abdbd00636661a234d9e30521144d76e1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanmedium_2941',['kWhirlpoolAcFanMedium',['../ir__Whirlpool_8h.html#acf1ae9526d2fd3f49d484608730f607d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacgap_2942',['kWhirlpoolAcGap',['../ir__Whirlpool_8cpp.html#a5946b0c81f68442645f795f4f6518972',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolachdrmark_2943',['kWhirlpoolAcHdrMark',['../ir__Whirlpool_8cpp.html#ad2f759eb7426cfe5fb3421f101c926bb',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolachdrspace_2944',['kWhirlpoolAcHdrSpace',['../ir__Whirlpool_8cpp.html#a7a83a305cc6ebb7be7163bd1c3fb679d',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacheat_2945',['kWhirlpoolAcHeat',['../ir__Whirlpool_8h.html#a1e9290ec94cca537b5c44d2e4326b59c',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacmaxtemp_2946',['kWhirlpoolAcMaxTemp',['../ir__Whirlpool_8h.html#a08171b333f214963e21a0c574783299f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacmingap_2947',['kWhirlpoolAcMinGap',['../ir__Whirlpool_8cpp.html#aa6e5e114daf18d77914a08f831c37c7d',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacmintemp_2948',['kWhirlpoolAcMinTemp',['../ir__Whirlpool_8h.html#aeffef97e3247609d5731b525692f1e7b',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaconespace_2949',['kWhirlpoolAcOneSpace',['../ir__Whirlpool_8cpp.html#a7680ed11a0bc6b2f9340e3557681a470',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacsections_2950',['kWhirlpoolAcSections',['../ir__Whirlpool_8cpp.html#a75ebed07d288ac32a0138035279b41c7',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacstatelength_2951',['kWhirlpoolAcStateLength',['../IRremoteESP8266_8h.html#a0fff60a43f776fb999d0f1f91d88154f',1,'IRremoteESP8266.h']]], - ['kwhirlpoolaczerospace_2952',['kWhirlpoolAcZeroSpace',['../ir__Whirlpool_8cpp.html#af03c9ee4d432bbce7d2ee214dd5ca095',1,'ir_Whirlpool.cpp']]], - ['kwhynterbitmark_2953',['kWhynterBitMark',['../ir__Whynter_8cpp.html#a032043e058989b6402d8af99d2c20552',1,'ir_Whynter.cpp']]], - ['kwhynterbitmarkticks_2954',['kWhynterBitMarkTicks',['../ir__Whynter_8cpp.html#acfd8f04e0453ec1b9cd85837053a47e2',1,'ir_Whynter.cpp']]], - ['kwhynterbits_2955',['kWhynterBits',['../IRremoteESP8266_8h.html#a4553f6670e241a67104d45216a4ebd98',1,'IRremoteESP8266.h']]], - ['kwhynterhdrmark_2956',['kWhynterHdrMark',['../ir__Whynter_8cpp.html#a7d62b0e658fe6f697d41d6932e4e6662',1,'ir_Whynter.cpp']]], - ['kwhynterhdrmarkticks_2957',['kWhynterHdrMarkTicks',['../ir__Whynter_8cpp.html#a34da808cebff09fc038589c035f2d2fe',1,'ir_Whynter.cpp']]], - ['kwhynterhdrspace_2958',['kWhynterHdrSpace',['../ir__Whynter_8cpp.html#ad20c874e642238e299a44ead2ea592f1',1,'ir_Whynter.cpp']]], - ['kwhynterhdrspaceticks_2959',['kWhynterHdrSpaceTicks',['../ir__Whynter_8cpp.html#a8090f73380ea212e904402555156364d',1,'ir_Whynter.cpp']]], - ['kwhyntermincommandlength_2960',['kWhynterMinCommandLength',['../ir__Whynter_8cpp.html#a5e584a8d6aa8a146c9c8e74839b28e8f',1,'ir_Whynter.cpp']]], - ['kwhyntermincommandlengthticks_2961',['kWhynterMinCommandLengthTicks',['../ir__Whynter_8cpp.html#a65e8195824053403967573b7603059e7',1,'ir_Whynter.cpp']]], - ['kwhyntermingap_2962',['kWhynterMinGap',['../ir__Whynter_8cpp.html#ad09957f4c9c76d76ab55a74f440dad5f',1,'ir_Whynter.cpp']]], - ['kwhyntermingapticks_2963',['kWhynterMinGapTicks',['../ir__Whynter_8cpp.html#a89af5f0ab7af456f58052bf9256620a2',1,'ir_Whynter.cpp']]], - ['kwhynteronespace_2964',['kWhynterOneSpace',['../ir__Whynter_8cpp.html#a78993c22d94b107a37f61cddad728003',1,'ir_Whynter.cpp']]], - ['kwhynteronespaceticks_2965',['kWhynterOneSpaceTicks',['../ir__Whynter_8cpp.html#a95a5903a8f057df2b6587a331fec6f18',1,'ir_Whynter.cpp']]], - ['kwhyntertick_2966',['kWhynterTick',['../ir__Whynter_8cpp.html#a8f704cdf6cfd11455101919d7a772389',1,'ir_Whynter.cpp']]], - ['kwhynterzerospace_2967',['kWhynterZeroSpace',['../ir__Whynter_8cpp.html#a426deb9a35a1a6afdcbcfa58c6943490',1,'ir_Whynter.cpp']]], - ['kwhynterzerospaceticks_2968',['kWhynterZeroSpaceTicks',['../ir__Whynter_8cpp.html#ae38da416cd065b561287ebd2fe0257f0',1,'ir_Whynter.cpp']]], - ['kwide_2969',['kWide',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a9934dc3d02540583d5f13be6716739cd',1,'stdAc']]], - ['kwidestr_2970',['kWideStr',['../IRtext_8cpp.html#a19875c78e68ba6fdd78df3526f82969c',1,'kWideStr(): IRtext.cpp'],['../IRtext_8h.html#a6fe3dbd6899e85e79e517f71cc74a87b',1,'kWideStr(): IRtext.cpp']]], - ['kwifistr_2971',['kWifiStr',['../IRtext_8cpp.html#a3f2dddbcbc03e31ed6f1081fce001ea4',1,'kWifiStr(): IRtext.cpp'],['../IRtext_8h.html#a8bc9343f209803dbab3e765e39b41b4d',1,'kWifiStr(): IRtext.cpp']]], - ['kxfanstr_2972',['kXFanStr',['../IRtext_8cpp.html#ada36ab4b7555d38a76c4477971736cb7',1,'kXFanStr(): IRtext.cpp'],['../IRtext_8h.html#a7ddc859861308f2f9077abcec2a4b571',1,'kXFanStr(): IRtext.cpp']]], - ['kxmpbasespace_2973',['kXmpBaseSpace',['../ir__Xmp_8cpp.html#abefc09e9ed818c7efb3bbdda98e30be1',1,'ir_Xmp.cpp']]], - ['kxmpbits_2974',['kXmpBits',['../IRremoteESP8266_8h.html#adfcd08adae1243b1108353ef5cfe8776',1,'IRremoteESP8266.h']]], - ['kxmpfooterspace_2975',['kXmpFooterSpace',['../ir__Xmp_8cpp.html#a83012cfefe50c5f8b2b13315e72dc1f1',1,'ir_Xmp.cpp']]], - ['kxmpmark_2976',['kXmpMark',['../ir__Xmp_8cpp.html#a9c09decb9eaa8afd6b2053c142e87db9',1,'ir_Xmp.cpp']]], - ['kxmpmaxwordvalue_2977',['kXmpMaxWordValue',['../ir__Xmp_8cpp.html#ab54dbf1bdf33d8f7e7413723980dc518',1,'ir_Xmp.cpp']]], - ['kxmpmessagegap_2978',['kXmpMessageGap',['../ir__Xmp_8cpp.html#ad678abebb2d8ccfd578e7c1d70f44987',1,'ir_Xmp.cpp']]], - ['kxmprepeatcode_2979',['kXmpRepeatCode',['../ir__Xmp_8cpp.html#a7cdde1ffa7ba5186dfcfc3660966ce9d',1,'ir_Xmp.cpp']]], - ['kxmprepeatcodealt_2980',['kXmpRepeatCodeAlt',['../ir__Xmp_8cpp.html#a34460e1fdf809f8b87c1da2942124c49',1,'ir_Xmp.cpp']]], - ['kxmpsections_2981',['kXmpSections',['../ir__Xmp_8cpp.html#ab20e02ac019d4eb974f06e531a9af5c0',1,'ir_Xmp.cpp']]], - ['kxmpspacestep_2982',['kXmpSpaceStep',['../ir__Xmp_8cpp.html#a4f0b555035f665354c5743208d52d5b9',1,'ir_Xmp.cpp']]], - ['kxmpwordsize_2983',['kXmpWordSize',['../ir__Xmp_8cpp.html#a1974129b35ffdb85f3a1727aa5509b9f',1,'ir_Xmp.cpp']]], - ['kyesstr_2984',['kYesStr',['../IRtext_8cpp.html#a96492aa94d18702db41a639ae2a45423',1,'kYesStr(): IRtext.cpp'],['../IRtext_8h.html#a95ca78b5cc3caa31c564a28480379fae',1,'kYesStr(): IRtext.cpp']]], - ['kzepealbits_2985',['kZepealBits',['../IRremoteESP8266_8h.html#af09c9402a1c4fa24f692994498641296',1,'IRremoteESP8266.h']]], - ['kzepealcommandoffon_2986',['kZepealCommandOffOn',['../ir__Zepeal_8cpp.html#a37af9800da3144c218d422e54066e837',1,'ir_Zepeal.cpp']]], - ['kzepealcommandofftimer_2987',['kZepealCommandOffTimer',['../ir__Zepeal_8cpp.html#a87b136a95af4437182530d6f7cbc69ee',1,'ir_Zepeal.cpp']]], - ['kzepealcommandontimer_2988',['kZepealCommandOnTimer',['../ir__Zepeal_8cpp.html#aed4491019bb6575c113404a095e8b116',1,'ir_Zepeal.cpp']]], - ['kzepealcommandrhythm_2989',['kZepealCommandRhythm',['../ir__Zepeal_8cpp.html#aa3960b3bdaa77c060543881bdf71e46c',1,'ir_Zepeal.cpp']]], - ['kzepealcommandspeed_2990',['kZepealCommandSpeed',['../ir__Zepeal_8cpp.html#a1189a81901daaf4b8b45e8f45caf0f49',1,'ir_Zepeal.cpp']]], - ['kzepealfootermark_2991',['kZepealFooterMark',['../ir__Zepeal_8cpp.html#a83167e93978d9cec8cf2dfac980582ba',1,'ir_Zepeal.cpp']]], - ['kzepealgap_2992',['kZepealGap',['../ir__Zepeal_8cpp.html#ab5bea0fe08e14fa3d1812bea018f44f0',1,'ir_Zepeal.cpp']]], - ['kzepealhdrmark_2993',['kZepealHdrMark',['../ir__Zepeal_8cpp.html#abee2a1537cfff9481d3060fba94a4b04',1,'ir_Zepeal.cpp']]], - ['kzepealhdrspace_2994',['kZepealHdrSpace',['../ir__Zepeal_8cpp.html#ad49be13d3dd108a18e4e641a40ff0408',1,'ir_Zepeal.cpp']]], - ['kzepealminrepeat_2995',['kZepealMinRepeat',['../IRremoteESP8266_8h.html#afb5c734e808d8f108f976f0556bf6e58',1,'IRremoteESP8266.h']]], - ['kzepealonemark_2996',['kZepealOneMark',['../ir__Zepeal_8cpp.html#a4d9919883561086dd3e3060e93983480',1,'ir_Zepeal.cpp']]], - ['kzepealonespace_2997',['kZepealOneSpace',['../ir__Zepeal_8cpp.html#a88702dbff33a9dddcfd4b255637460a0',1,'ir_Zepeal.cpp']]], - ['kzepealsignature_2998',['kZepealSignature',['../ir__Zepeal_8cpp.html#a7994e564096ac01b77d9ebe3a753167d',1,'ir_Zepeal.cpp']]], - ['kzepealtolerance_2999',['kZepealTolerance',['../ir__Zepeal_8cpp.html#ab35f666ef98b24b8b4bacdf462a9fbe6',1,'ir_Zepeal.cpp']]], - ['kzepealzeromark_3000',['kZepealZeroMark',['../ir__Zepeal_8cpp.html#a94eac58ef78ea4e39687f54e381c3a00',1,'ir_Zepeal.cpp']]], - ['kzepealzerospace_3001',['kZepealZeroSpace',['../ir__Zepeal_8cpp.html#a1af802b587e8f0a88ae87ab964fde690',1,'ir_Zepeal.cpp']]], - ['kzonefollowstr_3002',['kZoneFollowStr',['../IRtext_8cpp.html#a9a112fb47e39e35d096fe09266d37db1',1,'kZoneFollowStr(): IRtext.cpp'],['../IRtext_8h.html#a100dc6d7c4d53bffa00a24a582ace80f',1,'kZoneFollowStr(): IRtext.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.html deleted file mode 100644 index da60ab8d5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.js deleted file mode 100644 index 009ab5a02..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_c.js +++ /dev/null @@ -1,23 +0,0 @@ -var searchData= -[ - ['label_3003',['Label',['../structCoronaSection.html#abc6d0caa713c73244c4bf2f602074d48',1,'CoronaSection']]], - ['lasertag_3004',['LASERTAG',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada92eadf4fa6dd16da5b79a2fcbf729894',1,'IRremoteESP8266.h']]], - ['ledflag_3005',['ledFlag',['../classIRCoolixAC.html#a03ba5e0a6cb47a7bb054155c2111a69c',1,'IRCoolixAC']]], - ['ledoff_3006',['ledOff',['../classIRsend.html#ae71cc5aa99f894785fb4f7abc05841b2',1,'IRsend']]], - ['ledon_3007',['ledOn',['../classIRsend.html#a13d804171fa7c14aff4def38c6ffb6c8',1,'IRsend']]], - ['legopf_3008',['LEGOPF',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9a31bf5555b17ea7b115a5c2550fc1de',1,'IRremoteESP8266.h']]], - ['length_3009',['Length',['../unionToshibaProtocol.html#aacb09c50f1892d3244b4dd0c14a12ed6',1,'ToshibaProtocol']]], - ['lg_3010',['lg',['../classIRac.html#afad31ecf9eae573882d53dd6629485fb',1,'IRac::lg()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadadf6c249ac7d923229f9e623eff9a61f4',1,'LG(): IRremoteESP8266.h']]], - ['lg2_3011',['LG2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8402547ec0b99b9b0efe97dec65badf9',1,'IRremoteESP8266.h']]], - ['lg_5fac_5fremote_5fmodel_5ft_3012',['lg_ac_remote_model_t',['../IRsend_8h.html#a50c54713e16502d280723334879dc83b',1,'IRsend.h']]], - ['lgprotocol_3013',['LGProtocol',['../unionLGProtocol.html',1,'']]], - ['light_3014',['Light',['../unionDaikin2Protocol.html#adaf55ec9e1b9ba278c7391d9d797f3ba',1,'Daikin2Protocol::Light()'],['../unionGoodweatherProtocol.html#a845565af7661af0c05290a7ce039f8e2',1,'GoodweatherProtocol::Light()'],['../unionGreeProtocol.html#a72092768725667d3bce381a6e2900c66',1,'GreeProtocol::Light()'],['../unionKelvinatorProtocol.html#a38f5b978fd63fda659f0e0b5f682440e',1,'KelvinatorProtocol::Light()'],['../unionNeoclimaProtocol.html#a598346f565ad6d57df03f5256a878dd6',1,'NeoclimaProtocol::Light()'],['../unionTcl112Protocol.html#a1787bdc0b636eeca6f85dcbec14aef6b',1,'Tcl112Protocol::Light()'],['../unionTecoProtocol.html#a00a2d53fdbfcb60461284374f8894b97',1,'TecoProtocol::Light()'],['../unionVoltasProtocol.html#a811a0de66771c693831740440aac460c',1,'VoltasProtocol::Light()'],['../structstdAc_1_1state__t.html#a51c3a5c4703ea49b420d70aeb18b6b9b',1,'stdAc::state_t::light()']]], - ['lightoff_3015',['LightOff',['../unionWhirlpoolProtocol.html#afb34ebe6d6b418f8398dd33b42bb4982',1,'WhirlpoolProtocol']]], - ['lighttoggle_3016',['LightToggle',['../unionElectraProtocol.html#aa2a5998cafd139e5ce7626edc4782c56',1,'ElectraProtocol']]], - ['llword_3017',['llword',['../unionmagiquest.html#ad57fbc75ab289c3e93b94be0b2187d65',1,'magiquest']]], - ['longcode_3018',['longcode',['../unionFujitsuProtocol.html#a3802bebe7a7e4d01f58fb191ffd8adca',1,'FujitsuProtocol']]], - ['longmsg_3019',['LongMsg',['../unionToshibaProtocol.html#ad1f3816fce9e7e7ca004870b264cca5d',1,'ToshibaProtocol']]], - ['lowlevelsanitycheck_3020',['lowLevelSanityCheck',['../namespaceirutils.html#af67b75834051c4aced358b274c1c55a8',1,'irutils']]], - ['lutron_3021',['LUTRON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada76cc459b9e26d82ed82cf120272fd8cb',1,'IRremoteESP8266.h']]], - ['lword_3022',['lword',['../unionmagiquest.html#ac87102145311831a232002b52fe2d02c',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.html deleted file mode 100644 index bc376fec3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.js deleted file mode 100644 index 822303209..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_d.js +++ /dev/null @@ -1,56 +0,0 @@ -var searchData= -[ - ['magiquest_3023',['magiquest',['../unionmagiquest.html',1,'magiquest'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3be750ce1687bc1a92fee05b0c511100',1,'MAGIQUEST(): IRremoteESP8266.h']]], - ['magnitude_3024',['magnitude',['../unionmagiquest.html#a8f687419a00322a04aab223dec093d6e',1,'magiquest']]], - ['mark_3025',['mark',['../classIRsend.html#a7399389d40bfe24bc062ffca88fc3780',1,'IRsend']]], - ['markassent_3026',['markAsSent',['../classIRac.html#ad0e45b13f477e29823b8c138704536c4',1,'IRac']]], - ['match_3027',['match',['../classIRrecv.html#a8bc218dae714ab189a3da4fff269cdaa',1,'IRrecv']]], - ['match_5fresult_5ft_3028',['match_result_t',['../structmatch__result__t.html',1,'']]], - ['matchatleast_3029',['matchAtLeast',['../classIRrecv.html#ae7bfd4ff689c7563c65c4e6e8c58187a',1,'IRrecv']]], - ['matchbytes_3030',['matchBytes',['../classIRrecv.html#a97534938349b52b46395be1d3e2f59fa',1,'IRrecv']]], - ['matchdata_3031',['matchData',['../classIRrecv.html#a1d8b50fcac074e71e9a92a62f62f0be7',1,'IRrecv']]], - ['matchgeneric_3032',['matchGeneric',['../classIRrecv.html#ab783f52acc2ff4052313d6947563e4fd',1,'IRrecv::matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)'],['../classIRrecv.html#a4448c1658383962d735353352987c9aa',1,'IRrecv::matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)']]], - ['matchgenericconstbittime_3033',['matchGenericConstBitTime',['../classIRrecv.html#a4582d75ef1d11aee35fce86c38dcccf0',1,'IRrecv']]], - ['matchmanchester_3034',['matchManchester',['../classIRrecv.html#ade70777ad0e047e11b99b03d8f5e3728',1,'IRrecv']]], - ['matchmanchesterdata_3035',['matchManchesterData',['../classIRrecv.html#ab44403411a217eb8ea75271575f8ab83',1,'IRrecv']]], - ['matchmark_3036',['matchMark',['../classIRrecv.html#ae78ef12b8194db5d3cb5a2605d29830d',1,'IRrecv']]], - ['matchmarkrange_3037',['matchMarkRange',['../classIRrecv.html#adf11286f0ef5e8984396b5f6331db87e',1,'IRrecv']]], - ['matchspace_3038',['matchSpace',['../classIRrecv.html#a9fd363e8b2edee2ed3c473349ecc58fc',1,'IRrecv']]], - ['matchspacerange_3039',['matchSpaceRange',['../classIRrecv.html#a2200a9c1064497838506eb278791bb03',1,'IRrecv']]], - ['max_3040',['Max',['../unionAmcorProtocol.html#a9e0ea99322601af4b09784da2cf21d7e',1,'AmcorProtocol::Max()'],['../unionArgoProtocol.html#ac3edf881406da0b9a253a7536ba3e810',1,'ArgoProtocol::Max()']]], - ['metz_3041',['METZ',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa77ca3ee98846eee35bd2995bf2ae25b',1,'IRremoteESP8266.h']]], - ['midea_3042',['midea',['../classIRac.html#a11765b1d08c0c02f5e08254bd870dae6',1,'IRac::midea()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1571f3cf72caf1cf23481802b450382a',1,'MIDEA(): IRremoteESP8266.h']]], - ['midea24_3043',['MIDEA24',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada59b5ac5c1d354e50932dc0208d9b0b43',1,'IRremoteESP8266.h']]], - ['mideaprotocol_3044',['MideaProtocol',['../unionMideaProtocol.html',1,'']]], - ['milestag2_3045',['MILESTAG2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5ffb7486d99840e02f2688e3d6605a14',1,'IRremoteESP8266.h']]], - ['minrepeats_3046',['minRepeats',['../classIRsend.html#ae02772f34180163861b7e4eb3520db2a',1,'IRsend']]], - ['minstostring_3047',['minsToString',['../namespaceirutils.html#aebab40a2c69624adc1a5a8a6db72952f',1,'irutils']]], - ['minutes_3048',['Minutes',['../unionVestelProtocol.html#a13e423c0ae919980baa57f0e9a22d59e',1,'VestelProtocol']]], - ['mirage_3049',['MIRAGE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9ab6dd14fa5c7d0d32c60d414c7df36a',1,'IRremoteESP8266.h']]], - ['mitsubishi_3050',['mitsubishi',['../classIRac.html#aaa60bcac75dc5dda40c78f8c227b19a3',1,'IRac::mitsubishi()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab98915357fe1cb91de0536136be20d07',1,'MITSUBISHI(): IRremoteESP8266.h']]], - ['mitsubishi112_3051',['mitsubishi112',['../classIRac.html#a2438b6e4403d5952adb299083e038e10',1,'IRac::mitsubishi112()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab8e5875a5959b72ca7ff17bccff97c4d',1,'MITSUBISHI112(): IRremoteESP8266.h']]], - ['mitsubishi112protocol_3052',['Mitsubishi112Protocol',['../unionMitsubishi112Protocol.html',1,'']]], - ['mitsubishi136_3053',['mitsubishi136',['../classIRac.html#aa3033eb835cf3cd313ee2c2f38357e8e',1,'IRac::mitsubishi136()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3c73724a654627a04cc96e280b9630fe',1,'MITSUBISHI136(): IRremoteESP8266.h']]], - ['mitsubishi136protocol_3054',['Mitsubishi136Protocol',['../unionMitsubishi136Protocol.html',1,'']]], - ['mitsubishi144protocol_3055',['Mitsubishi144Protocol',['../unionMitsubishi144Protocol.html',1,'']]], - ['mitsubishi152protocol_3056',['Mitsubishi152Protocol',['../unionMitsubishi152Protocol.html',1,'']]], - ['mitsubishi2_3057',['MITSUBISHI2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada66368850d567cbeb3b2c2233cae34cd0',1,'IRremoteESP8266.h']]], - ['mitsubishi88protocol_3058',['Mitsubishi88Protocol',['../unionMitsubishi88Protocol.html',1,'']]], - ['mitsubishi_5fac_3059',['MITSUBISHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada45198cb83bbf76b320eaa91d09c44b38',1,'IRremoteESP8266.h']]], - ['mitsubishi_5fheavy_5f152_3060',['MITSUBISHI_HEAVY_152',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada15c8d1d51d5f9e42fd03638cbdfb7cbf',1,'IRremoteESP8266.h']]], - ['mitsubishi_5fheavy_5f88_3061',['MITSUBISHI_HEAVY_88',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad303f6c0494d33354cb7c11af258f663',1,'IRremoteESP8266.h']]], - ['mitsubishiheavy152_3062',['mitsubishiHeavy152',['../classIRac.html#a635b89320d878c1e3f270d7146cb9b00',1,'IRac']]], - ['mitsubishiheavy88_3063',['mitsubishiHeavy88',['../classIRac.html#af6c9084c5e902f98a03ad0eaf3b9448e',1,'IRac']]], - ['mode_3064',['mode',['../structstdAc_1_1state__t.html#ae5e4b17fac2ea36300f796670337d7a7',1,'stdAc::state_t::mode()'],['../unionAirwellProtocol.html#a4a12b674ee9dcdbca592a1c5f3deb43e',1,'AirwellProtocol::Mode()'],['../unionAmcorProtocol.html#a5eca17db0b0ac0a2a46d72eaa4b098f8',1,'AmcorProtocol::Mode()'],['../unionArgoProtocol.html#afac4337c33e8a2b8e12b84890121e00c',1,'ArgoProtocol::Mode()'],['../unionCarrierProtocol.html#a5fed7d2b743b55fb9a95293f026a9c24',1,'CarrierProtocol::Mode()'],['../unionCoolixProtocol.html#a5f2ec6733ba352bd48657adbf4f30985',1,'CoolixProtocol::Mode()'],['../unionCoronaProtocol.html#aad77fd87c02ef022da013116123d3531',1,'CoronaProtocol::Mode()'],['../unionDaikinESPProtocol.html#aefdc3a04bf204c67e206fef9ed3f5437',1,'DaikinESPProtocol::Mode()'],['../unionDaikin2Protocol.html#acfbbd30de1109b5a9785a6b94ec90af0',1,'Daikin2Protocol::Mode()'],['../unionDaikin216Protocol.html#aebf6b168e83ebfac591e388406a30357',1,'Daikin216Protocol::Mode()'],['../unionDaikin160Protocol.html#a7a543fcb3ba65efbb38656d38eed1141',1,'Daikin160Protocol::Mode()'],['../unionDaikin176Protocol.html#a0293203bc447806c08ea522d6eb91495',1,'Daikin176Protocol::Mode()'],['../unionDaikin128Protocol.html#a14769c0405d7bcf2c45671c4c8c915ff',1,'Daikin128Protocol::Mode()'],['../unionDaikin152Protocol.html#af73fd18c8bd261cb38a36f9c8342b4bc',1,'Daikin152Protocol::Mode()'],['../unionDaikin64Protocol.html#a34934dd4432c5e99cdc2a17b6af803b9',1,'Daikin64Protocol::Mode()'],['../unionDelonghiProtocol.html#a41b3aa93923059ec0bc099a592318ff0',1,'DelonghiProtocol::Mode()'],['../unionEcoclimProtocol.html#a25d3ca6d95d9ed88e01f512aec8f0765',1,'EcoclimProtocol::Mode()'],['../unionElectraProtocol.html#a27e64c16e4cefeac55cd12165554e0b0',1,'ElectraProtocol::Mode()'],['../unionFujitsuProtocol.html#aa9260ff8cda7409dc14b9b057ad903a5',1,'FujitsuProtocol::Mode()'],['../unionGoodweatherProtocol.html#a28863cfa136ed7014d8ca982d38a4539',1,'GoodweatherProtocol::Mode()'],['../unionGreeProtocol.html#aacd25e508a37e0012295a87e712987ce',1,'GreeProtocol::Mode()'],['../unionHaierProtocol.html#aab10d402084329d472e08385cc9645ec',1,'HaierProtocol::Mode()'],['../unionHaierYRW02Protocol.html#a8b9060ce2e0b1e9192191e6ae68277dd',1,'HaierYRW02Protocol::Mode()'],['../unionHitachiProtocol.html#a33a6af1c7bb33cd97361f2602c215ab2',1,'HitachiProtocol::Mode()'],['../unionHitachi424Protocol.html#a6ddbf518e843e9021bbd0463911b4844',1,'Hitachi424Protocol::Mode()'],['../unionHitachi1Protocol.html#a0434892d9ad4acaa36ef10810fb4b8fe',1,'Hitachi1Protocol::Mode()'],['../unionKelvinatorProtocol.html#abd6a849c39d0e7e231a1cf42d32f52e7',1,'KelvinatorProtocol::Mode()'],['../unionLGProtocol.html#adea2990a6e13a31ecb6f8c70c0702543',1,'LGProtocol::Mode()'],['../unionMideaProtocol.html#aa0255e9e1351d594b2e2c8c6f9698e1a',1,'MideaProtocol::Mode()'],['../unionMitsubishi144Protocol.html#aa387b388f300a2098fe9c965e86b9d95',1,'Mitsubishi144Protocol::Mode()'],['../unionMitsubishi136Protocol.html#a4af660641dfa4412b4993f82eb241765',1,'Mitsubishi136Protocol::Mode()'],['../unionMitsubishi112Protocol.html#ae3ff03a52146e8dff59f0755b7d59333',1,'Mitsubishi112Protocol::Mode()'],['../unionMitsubishi152Protocol.html#a36477f5724467a75f32f2d25fee4db73',1,'Mitsubishi152Protocol::Mode()'],['../unionMitsubishi88Protocol.html#a947e25b4cfbb171aeb42d3a60404d751',1,'Mitsubishi88Protocol::Mode()'],['../unionNeoclimaProtocol.html#ad7f68fc3c6b62f74f4025edbd57a5e5b',1,'NeoclimaProtocol::Mode()'],['../unionPanasonicAc32Protocol.html#adc5a9e48b207202c5361e700a06157e2',1,'PanasonicAc32Protocol::Mode()'],['../unionSamsungProtocol.html#a46106899d30f8e503b4fc190d11d1c48',1,'SamsungProtocol::Mode()'],['../unionSanyoProtocol.html#a0c36d7f731d49be5baab0ea925401c93',1,'SanyoProtocol::Mode()'],['../unionSharpProtocol.html#a44a57c217d0f1065d4c480b32002455d',1,'SharpProtocol::Mode()'],['../unionTcl112Protocol.html#a96d87be2a38710de21cecfab0050ff95',1,'Tcl112Protocol::Mode()'],['../unionTechnibelProtocol.html#ad6b2e2f016fe885859bd6622ec37d7dd',1,'TechnibelProtocol::Mode()'],['../unionTecoProtocol.html#a40b8ca2a2126c4bde467a308472ca446',1,'TecoProtocol::Mode()'],['../unionToshibaProtocol.html#ae821300a670c95fb9e34243d8efec1bf',1,'ToshibaProtocol::Mode()'],['../unionTranscoldProtocol.html#a78a73050062dbb8aa24dce07a0a382ff',1,'TranscoldProtocol::Mode()'],['../unionTrotecProtocol.html#ae86771f0cdffdec88b0be265cd9e2524',1,'TrotecProtocol::Mode()'],['../unionTrumaProtocol.html#acf754cf5578169a1e94607c3f0c3916f',1,'TrumaProtocol::Mode()'],['../unionVestelProtocol.html#a60edaaaacdcfa5aefa957c14579f671a',1,'VestelProtocol::Mode()'],['../unionVoltasProtocol.html#ad991a7ccaf9caa0b9f7880f4138f1dab',1,'VoltasProtocol::Mode()'],['../unionWhirlpoolProtocol.html#a0196cbbf3d41cb867f857c786b45a580',1,'WhirlpoolProtocol::Mode()']]], - ['modebutton_3065',['ModeButton',['../unionDaikin176Protocol.html#af48f77b741bcfa7717497077c50ee240',1,'Daikin176Protocol']]], - ['model_3066',['Model',['../unionHitachi1Protocol.html#aad97f1edb72b8786423089f1dad70681',1,'Hitachi1Protocol::Model()'],['../unionSharpProtocol.html#acdaebb53185b4c6f59c9fedabe9586ba',1,'SharpProtocol::Model()'],['../structstdAc_1_1state__t.html#aa1a57a63b2ea80c1f9c4a1bcf16a4c62',1,'stdAc::state_t::model()']]], - ['model2_3067',['Model2',['../unionSharpProtocol.html#a4e9764f8c1b98a6108f0de676d618dd3',1,'SharpProtocol']]], - ['modela_3068',['ModelA',['../unionGreeProtocol.html#a66fdedd8318541269f0ab9ae3b832813',1,'GreeProtocol']]], - ['modeltostr_3069',['modelToStr',['../namespaceirutils.html#ae89b70ce66617a8707c1951eadbc6fbd',1,'irutils']]], - ['modulation_3070',['modulation',['../classIRsend.html#a11e26c03c87e2bed756eb7f318570bd8',1,'IRsend']]], - ['mold_3071',['Mold',['../unionDaikinESPProtocol.html#a61c7eeeb3589f775897d79a130dd1be8',1,'DaikinESPProtocol::Mold()'],['../unionDaikin2Protocol.html#a18207f0f0913ade09f16ba2e98a5dbf1',1,'Daikin2Protocol::Mold()']]], - ['mstostring_3072',['msToString',['../namespaceirutils.html#a9c59c8dd886c283fdb8adc9082c6890a',1,'irutils']]], - ['multibrackets_3073',['MULTIBRACKETS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaebb72f3ad9ff2a706d8041763de6e49',1,'IRremoteESP8266.h']]], - ['mux_3074',['mux',['../namespace__IRrecv.html#a1baf83e60312b43397ca8b9d185fb469',1,'_IRrecv']]], - ['mwm_3075',['MWM',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8a6938c955212e1fb81fb511437cbe56',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.html deleted file mode 100644 index 2e3c74dc6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.js deleted file mode 100644 index 404a148c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_e.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['nec_3076',['NEC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0811f93a25b0873e21979d569eeac05e',1,'IRremoteESP8266.h']]], - ['nec_5flike_3077',['NEC_LIKE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada97acfde550d201fa0abc3120098fb471',1,'IRremoteESP8266.h']]], - ['neoclima_3078',['neoclima',['../classIRac.html#a777da4b0552ee3b64d656c4592687f47',1,'IRac::neoclima()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac698e0c030768ed91207b0e63910c3e7',1,'NEOCLIMA(): IRremoteESP8266.h']]], - ['neoclimaprotocol_3079',['NeoclimaProtocol',['../unionNeoclimaProtocol.html',1,'']]], - ['next_3080',['next',['../classIRac.html#ae85d7ac0c58028b2547518f88d3e98fe',1,'IRac']]], - ['night_3081',['Night',['../unionArgoProtocol.html#a6dbfb2137f0e64a65e3aa45a50485fbe',1,'ArgoProtocol::Night()'],['../unionMitsubishi152Protocol.html#a2ad34c4b3a726495ec23ca7af5a2a540',1,'Mitsubishi152Protocol::Night()']]], - ['nikai_3082',['NIKAI',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0bc180c4ab5e68798451f4799f7f9377',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.html deleted file mode 100644 index 246f8ab12..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.js deleted file mode 100644 index 3ef1b9cfe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/all_f.js +++ /dev/null @@ -1,40 +0,0 @@ -var searchData= -[ - ['off_3083',['off',['../classIRAmcorAc.html#a184fbd76463e195beb67b4a8d2096941',1,'IRAmcorAc::off()'],['../classIRArgoAC.html#ab5ab7cc22bbce59bb02ca60431dca3fb',1,'IRArgoAC::off()'],['../classIRCarrierAc64.html#af11d8ea5ac93cbf2d9fe1419729168a5',1,'IRCarrierAc64::off()'],['../classIRCoolixAC.html#a7d6133fe102a5869beb9a5334ca749aa',1,'IRCoolixAC::off()'],['../classIRCoronaAc.html#a6f1335001f9e299340f658fbb777b630',1,'IRCoronaAc::off()'],['../classIRDaikinESP.html#a5d1d22f45d877660719916ca546bd3af',1,'IRDaikinESP::off()'],['../classIRDaikin2.html#ae9eee92387d78dad68fc98efc9371ea0',1,'IRDaikin2::off()'],['../classIRDaikin216.html#a086d8cea2d6dd0f74c5cbece79d91567',1,'IRDaikin216::off()'],['../classIRDaikin160.html#a95f8c71bbf861d3c884656364e04b02a',1,'IRDaikin160::off()'],['../classIRDaikin176.html#a4ad81df1fe4921abee3634bf19b0d0f7',1,'IRDaikin176::off()'],['../classIRDaikin152.html#a035588ad676a54d2b6ada8cefe10e114',1,'IRDaikin152::off()'],['../classIRDelonghiAc.html#ab584add0eb59acf3b209e7c252605304',1,'IRDelonghiAc::off()'],['../classIREcoclimAc.html#a9a0e2ee4ff9cbc6008cb359f2c3faf23',1,'IREcoclimAc::off()'],['../classIRElectraAc.html#afe3a9b789eafbef19d015cdebf71dc0d',1,'IRElectraAc::off()'],['../classIRFujitsuAC.html#ae7a320c2d2b8afbd9a04251053831cdd',1,'IRFujitsuAC::off()'],['../classIRGoodweatherAc.html#ad6863d837140951fcc0faf629025d48e',1,'IRGoodweatherAc::off()'],['../classIRGreeAC.html#a4cce897175ed731ab62402133089ed4f',1,'IRGreeAC::off()'],['../classIRHaierACYRW02.html#a9837ba26574f8bd452d616173819a9a4',1,'IRHaierACYRW02::off()'],['../classIRHitachiAc.html#a62be5ca181c8c9d11b65b38b1ed178b5',1,'IRHitachiAc::off()'],['../classIRHitachiAc1.html#a646b554980706d0dd2ac762be8458cdb',1,'IRHitachiAc1::off()'],['../classIRHitachiAc424.html#a0815a09fc49449bac03d996c63040a5f',1,'IRHitachiAc424::off()'],['../classIRKelvinatorAC.html#a4a759df902d1465c9520da7c7c595abc',1,'IRKelvinatorAC::off()'],['../classIRLgAc.html#a6d3d50b34575fecb93ed8bd5897c3f7c',1,'IRLgAc::off()'],['../classIRMideaAC.html#a29fbafcf47dc41475d009c4c92b2917b',1,'IRMideaAC::off()'],['../classIRMitsubishiAC.html#ac204620341200994c28411f53d5aa046',1,'IRMitsubishiAC::off()'],['../classIRMitsubishi136.html#a4122014509e9e755881920650f19baf3',1,'IRMitsubishi136::off()'],['../classIRMitsubishi112.html#ab5b6370edf2626da2e9f124a218678a8',1,'IRMitsubishi112::off()'],['../classIRMitsubishiHeavy152Ac.html#a93b603cc37d2dc7e3e7005ce21a0b2d7',1,'IRMitsubishiHeavy152Ac::off()'],['../classIRMitsubishiHeavy88Ac.html#a45c56c0454755d704a3df1f1f3647130',1,'IRMitsubishiHeavy88Ac::off()'],['../classIRNeoclimaAc.html#a9a277308bf8d8b0cd06a28964e7cbafb',1,'IRNeoclimaAc::off()'],['../classIRPanasonicAc.html#a03b706293c1c5b348bba536e6d8d33f5',1,'IRPanasonicAc::off()'],['../classIRSamsungAc.html#a34cb19bb4902441a2b9f10892eb17d83',1,'IRSamsungAc::off()'],['../classIRSanyoAc.html#a31f4c1d33875a99194b21f430c5467ef',1,'IRSanyoAc::off()'],['../classIRSharpAc.html#a178925a1d7ca01aae5c107fab5b32e93',1,'IRSharpAc::off()'],['../classIRTcl112Ac.html#ab2e39430629fcada55a584cff66d2749',1,'IRTcl112Ac::off()'],['../classIRTechnibelAc.html#a01f40042435f9472985853e40c1f9593',1,'IRTechnibelAc::off()'],['../classIRTecoAc.html#ade1b1541bf2de053c78657af1ebcd001',1,'IRTecoAc::off()'],['../classIRToshibaAC.html#a70b145f7b9c46790e4e5da812bb66e58',1,'IRToshibaAC::off()'],['../classIRTranscoldAc.html#a54ecdef5ff2c9a1ce8c476ff2ad16801',1,'IRTranscoldAc::off()'],['../classIRTrotecESP.html#a8f300ddaf255de1cdfee10b76b1f08e0',1,'IRTrotecESP::off()'],['../classIRTrumaAc.html#a82ef2f54b87332f6d2f1e3350544a3ec',1,'IRTrumaAc::off()'],['../classIRVestelAc.html#a59e90e51e3518ef26bb382903ce67357',1,'IRVestelAc::off()'],['../classIRVoltas.html#a472dd54afd93b595c8c5b78f6ba43008',1,'IRVoltas::off()']]], - ['offhalfhour_3084',['OffHalfHour',['../unionDaikin128Protocol.html#a95e474c4f74f8921d1bbe42a06c58aa6',1,'Daikin128Protocol::OffHalfHour()'],['../unionDaikin64Protocol.html#af27302ff8553d43234c782432556482b',1,'Daikin64Protocol::OffHalfHour()']]], - ['offhour_3085',['OffHour',['../unionSanyoProtocol.html#a819d8fa041aa52b94b366ced926828d9',1,'SanyoProtocol']]], - ['offhours_3086',['OffHours',['../unionDaikin128Protocol.html#a2cff2aa98cb96d420ee9f7745af05b2a',1,'Daikin128Protocol::OffHours()'],['../unionDaikin64Protocol.html#aa0be38e313504c06a83d613823b08d67',1,'Daikin64Protocol::OffHours()'],['../unionDelonghiProtocol.html#ae699f25608c0f66aafaf7cb50e9c0258',1,'DelonghiProtocol::OffHours()'],['../unionEcoclimProtocol.html#ab2b370d17c8b7153869a3efb6cc9af67',1,'EcoclimProtocol::OffHours()'],['../unionHaierProtocol.html#aecaad31185de1e7843047a9b9194d55b',1,'HaierProtocol::OffHours()'],['../unionVestelProtocol.html#ada82c37fc9adf2ed34735b0ff05b70b6',1,'VestelProtocol::OffHours()'],['../unionWhirlpoolProtocol.html#a70c2d80980c585fac6581d5a4da08447',1,'WhirlpoolProtocol::OffHours()']]], - ['offmins_3087',['OffMins',['../unionDelonghiProtocol.html#a0d0acd3e8c1ccd190076db4287251096',1,'DelonghiProtocol::OffMins()'],['../unionHaierProtocol.html#a6eec6ff574e93f327ca567251b37e33b',1,'HaierProtocol::OffMins()'],['../unionWhirlpoolProtocol.html#a4f3fecf53dab7c9ffb8ed02c71eb652d',1,'WhirlpoolProtocol::OffMins()']]], - ['offtenmins_3088',['OffTenMins',['../unionEcoclimProtocol.html#a453dcd8e81eced1362f352c21809deab',1,'EcoclimProtocol::OffTenMins()'],['../unionVestelProtocol.html#add80ad31a31c042837492ae558deb8ce',1,'VestelProtocol::OffTenMins()']]], - ['offtime_3089',['OffTime',['../unionDaikinESPProtocol.html#a1e74e0e3c6ba822ccb32aa052bb47f05',1,'DaikinESPProtocol::OffTime()'],['../unionDaikin2Protocol.html#ab0bdcd7cb92206426feae8bbf408fc0f',1,'Daikin2Protocol::OffTime()']]], - ['offtimeperiod_3090',['offTimePeriod',['../classIRsend.html#a9e45c9e4f54db86c1f3e506cd72fe4c1',1,'IRsend']]], - ['offtimer_3091',['OffTimer',['../unionCarrierProtocol.html#a42fcd3b5c796076fa372985b3b1cd473',1,'CarrierProtocol::OffTimer()'],['../unionDaikinESPProtocol.html#ad5c9be68e472eb538be020bc4595da61',1,'DaikinESPProtocol::OffTimer()'],['../unionDaikin2Protocol.html#a8064a7edb7a307331b5e7232adc09234',1,'Daikin2Protocol::OffTimer()'],['../unionDaikin128Protocol.html#aa9f559a12057893bb936b3972ff63972',1,'Daikin128Protocol::OffTimer()'],['../unionDaikin64Protocol.html#a6866d3ed0105d0bb807645723feab21f',1,'Daikin64Protocol::OffTimer()'],['../unionDelonghiProtocol.html#a0f27d98df3895d7cf8fef26602a2ea1d',1,'DelonghiProtocol::OffTimer()'],['../unionFujitsuProtocol.html#a28481e54ff98309f7456a870a987a0cc',1,'FujitsuProtocol::OffTimer()'],['../unionHaierProtocol.html#a6f3893711bffc1d59d8e3d76e7a954a2',1,'HaierProtocol::OffTimer()'],['../unionMideaProtocol.html#afd53c8223249e271fe48d03c67a74364',1,'MideaProtocol::OffTimer()'],['../unionSanyoProtocol.html#a8cd49c1eea805eb74af696079760a8fe',1,'SanyoProtocol::OffTimer()'],['../unionVestelProtocol.html#afe4ad429db29472e41a9db0f5eb927fe',1,'VestelProtocol::OffTimer()']]], - ['offtimer12hr_3092',['OffTimer12Hr',['../unionVoltasProtocol.html#a6d55446514c9a0209209504de336a0b5',1,'VoltasProtocol']]], - ['offtimerenable_3093',['OffTimerEnable',['../unionCarrierProtocol.html#a15e27c0710c706b2f1e8227a962fc722',1,'CarrierProtocol::OffTimerEnable()'],['../unionFujitsuProtocol.html#a9c8c3d1304617e70a0367f97d37eb98f',1,'FujitsuProtocol::OffTimerEnable()'],['../unionVoltasProtocol.html#a415a13e7722786f41b33c1db78771c8e',1,'VoltasProtocol::OffTimerEnable()']]], - ['offtimerenabled_3094',['OffTimerEnabled',['../unionWhirlpoolProtocol.html#a9288dc4e7ab5e59fc16885771268a856',1,'WhirlpoolProtocol']]], - ['offtimerhigh_3095',['OffTimerHigh',['../unionHitachi1Protocol.html#a10702ba90386aba2eb25280f54e7cf44',1,'Hitachi1Protocol']]], - ['offtimerhrs_3096',['OffTimerHrs',['../unionVoltasProtocol.html#aeef99d8c93860c34eb08f1c591d1da9f',1,'VoltasProtocol']]], - ['offtimerlow_3097',['OffTimerLow',['../unionHitachi1Protocol.html#ae724c85578d3d211ca17f3778a8cd599',1,'Hitachi1Protocol']]], - ['offtimermins_3098',['OffTimerMins',['../unionVoltasProtocol.html#a243f1a105ba96c4830d0b4ce66a75a4e',1,'VoltasProtocol']]], - ['on_3099',['on',['../classIRAmcorAc.html#a96a1d9858dcdc34a9859311e450e722e',1,'IRAmcorAc::on()'],['../classIRArgoAC.html#a70497752f7afd8e3274cf4d8b1e22628',1,'IRArgoAC::on()'],['../classIRCarrierAc64.html#a75ed9bf7501a31b74dcd42723e85b184',1,'IRCarrierAc64::on()'],['../classIRCoolixAC.html#a13f0346bf6450f3853c6dba6be8cb63a',1,'IRCoolixAC::on()'],['../classIRCoronaAc.html#a0348b6ee1226edfda1ab9aa424febb3c',1,'IRCoronaAc::on()'],['../classIRDaikinESP.html#a502e9dea10605d52e291d49af26b07eb',1,'IRDaikinESP::on()'],['../classIRDaikin2.html#aa3bdd3aa29a4db32f04411cbab27e570',1,'IRDaikin2::on()'],['../classIRDaikin216.html#a09f54bb4ed1d553b4bbf6ffe6992a755',1,'IRDaikin216::on()'],['../classIRDaikin160.html#a2b6c282ad5cb2a702857532ab020110b',1,'IRDaikin160::on()'],['../classIRDaikin176.html#a3ca59ccdad4b7958fc4dc1a4b0593f38',1,'IRDaikin176::on()'],['../classIRDaikin152.html#a10ee74aa43e3940d657ac88cb03b9138',1,'IRDaikin152::on()'],['../classIRDelonghiAc.html#ab919817947827f900e35080f63354ac3',1,'IRDelonghiAc::on()'],['../classIREcoclimAc.html#a32c37e30242f049190ab086d3beb8651',1,'IREcoclimAc::on()'],['../classIRElectraAc.html#a99e29f982435b01c726d0234a433cfa6',1,'IRElectraAc::on()'],['../classIRFujitsuAC.html#adcb24818d088c879beb7d76ada332f43',1,'IRFujitsuAC::on()'],['../classIRGoodweatherAc.html#a1e3c2a9f47376062ab66318d6af4324b',1,'IRGoodweatherAc::on()'],['../classIRGreeAC.html#a69e399e411a19e5669e752d52ae66f15',1,'IRGreeAC::on()'],['../classIRHaierACYRW02.html#aaeb257d68235278be272e521fdec7331',1,'IRHaierACYRW02::on()'],['../classIRHitachiAc.html#a855e95d55d4ebfb3958b9d80a7b42c6f',1,'IRHitachiAc::on()'],['../classIRHitachiAc1.html#aea4fe1fddb56c8df31077b301e9c6473',1,'IRHitachiAc1::on()'],['../classIRHitachiAc424.html#ad414bca642af40ed81a6cbf93a0bf40b',1,'IRHitachiAc424::on()'],['../classIRKelvinatorAC.html#a714d0e70f2996694e2c46afdd9996341',1,'IRKelvinatorAC::on()'],['../classIRLgAc.html#a171358340c1ba8f90fef0c5454f2aa41',1,'IRLgAc::on()'],['../classIRMideaAC.html#af8dde03cb641a5af4f2ef0dcf70f1ca0',1,'IRMideaAC::on()'],['../classIRMitsubishiAC.html#a2946d1b3b641d7b991c0d296d5c5e77e',1,'IRMitsubishiAC::on()'],['../classIRMitsubishi136.html#a74180e99a5f4f1f4b740b442a1b74a06',1,'IRMitsubishi136::on()'],['../classIRMitsubishi112.html#accd250f130b4d0cd61593982b84b9138',1,'IRMitsubishi112::on()'],['../classIRMitsubishiHeavy152Ac.html#a5c7aec50b53fdc3af591e077a4a268e4',1,'IRMitsubishiHeavy152Ac::on()'],['../classIRMitsubishiHeavy88Ac.html#a44ce2c4f03b8b8973922f5bf59a19d2c',1,'IRMitsubishiHeavy88Ac::on()'],['../classIRNeoclimaAc.html#ab4a23cefef02351883dc4088dec51071',1,'IRNeoclimaAc::on()'],['../classIRPanasonicAc.html#a88e6b0f607b17266567306576e623a0c',1,'IRPanasonicAc::on()'],['../classIRSamsungAc.html#a68cf52997489a1c835662c7cdf23463c',1,'IRSamsungAc::on()'],['../classIRSanyoAc.html#abe8f1be3ea8f861ab56ee4697cb9e731',1,'IRSanyoAc::on()'],['../classIRSharpAc.html#a5c8dad46c2965fc0d87780a8bd8b98f4',1,'IRSharpAc::on()'],['../classIRTcl112Ac.html#a0bbf7f0b9753b516fda0544c17b15b8a',1,'IRTcl112Ac::on()'],['../classIRTechnibelAc.html#a65558a08fbce34eedeb90d81e16140b1',1,'IRTechnibelAc::on()'],['../classIRTecoAc.html#af26015e5c663c346cf7db6d8af3f8c60',1,'IRTecoAc::on()'],['../classIRToshibaAC.html#abdc35338e4a18132d56bf6b46ddea590',1,'IRToshibaAC::on()'],['../classIRTranscoldAc.html#a4af8e44cb2d9c1751cd0dac3e096c06a',1,'IRTranscoldAc::on()'],['../classIRTrotecESP.html#a86c050edab8409a9b38d28f311f19404',1,'IRTrotecESP::on()'],['../classIRTrumaAc.html#a3c6f23621e34049df6ff135a4552f93a',1,'IRTrumaAc::on()'],['../classIRVestelAc.html#a4ed05fb5cbdfa5677ca238616bf03922',1,'IRVestelAc::on()'],['../classIRVoltas.html#a8c25557906af38ae41c47e39e90650a9',1,'IRVoltas::on()']]], - ['onhalfhour_3100',['OnHalfHour',['../unionDaikin128Protocol.html#a89c02e7657a06fe65f924480acdc9cf0',1,'Daikin128Protocol::OnHalfHour()'],['../unionDaikin64Protocol.html#a0a4c0f02f2dab9dfb9ec52f57b527d37',1,'Daikin64Protocol::OnHalfHour()']]], - ['onhours_3101',['OnHours',['../unionDaikin128Protocol.html#a25cb19708a89d2b685d09c6710155646',1,'Daikin128Protocol::OnHours()'],['../unionDaikin64Protocol.html#ab80c9a47ba53f044dc6f236bb635511e',1,'Daikin64Protocol::OnHours()'],['../unionDelonghiProtocol.html#af5cd29dcc62aa712c9754b9729e528bb',1,'DelonghiProtocol::OnHours()'],['../unionEcoclimProtocol.html#af4ae2762de59708ae92670a5deaaac61',1,'EcoclimProtocol::OnHours()'],['../unionHaierProtocol.html#af08311ee6680b3a6951bd200e2b8f310',1,'HaierProtocol::OnHours()'],['../unionVestelProtocol.html#adbcdeb4f7db89ef89217593f959f4592',1,'VestelProtocol::OnHours()'],['../unionWhirlpoolProtocol.html#a0ecde3649180f2d47e4932bb5e7cb558',1,'WhirlpoolProtocol::OnHours()']]], - ['onmins_3102',['OnMins',['../unionDelonghiProtocol.html#ace54d8cccf1885084f8c641d234b15fe',1,'DelonghiProtocol::OnMins()'],['../unionHaierProtocol.html#a65fe65bdfb819fec434eba573daccc34',1,'HaierProtocol::OnMins()'],['../unionWhirlpoolProtocol.html#ab27e3d443afec8d26d341e62fa4cbf7c',1,'WhirlpoolProtocol::OnMins()']]], - ['ontenmins_3103',['OnTenMins',['../unionEcoclimProtocol.html#afad5515fac563e6a74b2fc19032be0a6',1,'EcoclimProtocol::OnTenMins()'],['../unionVestelProtocol.html#a76f1a69f268607ff2b9b9728c50b013a',1,'VestelProtocol::OnTenMins()']]], - ['ontime_3104',['OnTime',['../unionDaikinESPProtocol.html#a95a27ed63686d577accdeefb407e3bc3',1,'DaikinESPProtocol::OnTime()'],['../unionDaikin2Protocol.html#a4fadf043415c8f20235a060f725fcd30',1,'Daikin2Protocol::OnTime()']]], - ['ontimeperiod_3105',['onTimePeriod',['../classIRsend.html#aaaa65f31dbea033f8130e847b0366d94',1,'IRsend']]], - ['ontimer_3106',['OnTimer',['../unionCarrierProtocol.html#a8b66fd8c444395f14d663000ea5a27ee',1,'CarrierProtocol::OnTimer()'],['../unionDaikinESPProtocol.html#aa39934433625161ff928097e52bff7d3',1,'DaikinESPProtocol::OnTimer()'],['../unionDaikin2Protocol.html#aa20abbbeb32f6c73e2f389b1e163814c',1,'Daikin2Protocol::OnTimer()'],['../unionDaikin128Protocol.html#a51462af9615909d23985476025d9a609',1,'Daikin128Protocol::OnTimer()'],['../unionDaikin64Protocol.html#a5ac7df474efab5bcb086df1c706d392b',1,'Daikin64Protocol::OnTimer()'],['../unionDelonghiProtocol.html#a742d638f420f489e67f03c98fab3cd9d',1,'DelonghiProtocol::OnTimer()'],['../unionFujitsuProtocol.html#af7cd4cf5d3e1fe208580a710901473d4',1,'FujitsuProtocol::OnTimer()'],['../unionHaierProtocol.html#ae5c9fd1397bcf3c6737c38d8e76682b1',1,'HaierProtocol::OnTimer()'],['../unionVestelProtocol.html#a1915bb5909374c75f4ec45ddb0584f9f',1,'VestelProtocol::OnTimer()']]], - ['ontimer12hr_3107',['OnTimer12Hr',['../unionVoltasProtocol.html#a600e00d4c64841f9ce11490197bfbc0d',1,'VoltasProtocol']]], - ['ontimerenable_3108',['OnTimerEnable',['../unionCarrierProtocol.html#aadf3236a9a5883fc7f263516be951e0c',1,'CarrierProtocol::OnTimerEnable()'],['../unionFujitsuProtocol.html#a7fc1d3edb5d3d604d13940e21d534d57',1,'FujitsuProtocol::OnTimerEnable()'],['../unionVoltasProtocol.html#a26f169f663b7cbac7e6235b7320929da',1,'VoltasProtocol::OnTimerEnable()']]], - ['ontimerenabled_3109',['OnTimerEnabled',['../unionWhirlpoolProtocol.html#a5e35f030a9ff30985738fd534154a122',1,'WhirlpoolProtocol']]], - ['ontimerhigh_3110',['OnTimerHigh',['../unionHitachi1Protocol.html#a74d9afe7eb31941ad8991d5a0533c67a',1,'Hitachi1Protocol']]], - ['ontimerhrs_3111',['OnTimerHrs',['../unionVoltasProtocol.html#ad38a8a291f71ccb4c34363c4662994d6',1,'VoltasProtocol']]], - ['ontimerlow_3112',['OnTimerLow',['../unionHitachi1Protocol.html#a682cda9a01e0f9f303b670164e0bce3b',1,'Hitachi1Protocol']]], - ['ontimermins_3113',['OnTimerMins',['../unionVoltasProtocol.html#a38cb13bbd23b5680bcdbfcf5b2223a71',1,'VoltasProtocol']]], - ['opmode_5ft_3114',['opmode_t',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444f',1,'stdAc']]], - ['opmodetostring_3115',['opmodeToString',['../classIRac.html#a6dd1b87f2477bc3721d207b1fed482b8',1,'IRac']]], - ['outputoff_3116',['outputOff',['../classIRsend.html#a5e80df8b2ee534dbd6ddc30a852a2791',1,'IRsend']]], - ['outputon_3117',['outputOn',['../classIRsend.html#a4acfc45b339e724e2dbdff24762dfa7d',1,'IRsend']]], - ['outsidequiet_3118',['OutsideQuiet',['../unionFujitsuProtocol.html#a5ddbee1e404cbabc7e203bbd886e7021',1,'FujitsuProtocol']]], - ['overflow_3119',['overflow',['../structirparams__t.html#aa39b4f38e0ffcd470766373e03548e58',1,'irparams_t::overflow()'],['../classdecode__results.html#a821bc53c006bab3283c6b8592f0c43d3',1,'decode_results::overflow()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.html deleted file mode 100644 index f7e4c14e1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.js deleted file mode 100644 index 502bf55bd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['airwellprotocol_3587',['AirwellProtocol',['../unionAirwellProtocol.html',1,'']]], - ['amcorprotocol_3588',['AmcorProtocol',['../unionAmcorProtocol.html',1,'']]], - ['argoprotocol_3589',['ArgoProtocol',['../unionArgoProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.html deleted file mode 100644 index c7ff4b311..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.js deleted file mode 100644 index 625f49c0d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['carrierprotocol_3590',['CarrierProtocol',['../unionCarrierProtocol.html',1,'']]], - ['coolixprotocol_3591',['CoolixProtocol',['../unionCoolixProtocol.html',1,'']]], - ['coronaprotocol_3592',['CoronaProtocol',['../unionCoronaProtocol.html',1,'']]], - ['coronasection_3593',['CoronaSection',['../structCoronaSection.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.html deleted file mode 100644 index abf37f539..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.js deleted file mode 100644 index c06b6a81f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_10.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['whirlpoolprotocol_3696',['WhirlpoolProtocol',['../unionWhirlpoolProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.html deleted file mode 100644 index 0d1e8a0cd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.js deleted file mode 100644 index 1dceb1ac6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['daikin128protocol_3594',['Daikin128Protocol',['../unionDaikin128Protocol.html',1,'']]], - ['daikin152protocol_3595',['Daikin152Protocol',['../unionDaikin152Protocol.html',1,'']]], - ['daikin160protocol_3596',['Daikin160Protocol',['../unionDaikin160Protocol.html',1,'']]], - ['daikin176protocol_3597',['Daikin176Protocol',['../unionDaikin176Protocol.html',1,'']]], - ['daikin216protocol_3598',['Daikin216Protocol',['../unionDaikin216Protocol.html',1,'']]], - ['daikin2protocol_3599',['Daikin2Protocol',['../unionDaikin2Protocol.html',1,'']]], - ['daikin64protocol_3600',['Daikin64Protocol',['../unionDaikin64Protocol.html',1,'']]], - ['daikinespprotocol_3601',['DaikinESPProtocol',['../unionDaikinESPProtocol.html',1,'']]], - ['decode_5fresults_3602',['decode_results',['../classdecode__results.html',1,'']]], - ['delonghiprotocol_3603',['DelonghiProtocol',['../unionDelonghiProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.html deleted file mode 100644 index 21025456b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.js deleted file mode 100644 index 6a7452d6c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['ecoclimprotocol_3604',['EcoclimProtocol',['../unionEcoclimProtocol.html',1,'']]], - ['electraprotocol_3605',['ElectraProtocol',['../unionElectraProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.html deleted file mode 100644 index 095ab5952..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.js deleted file mode 100644 index 99fb65bcf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fujitsuprotocol_3606',['FujitsuProtocol',['../unionFujitsuProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.html deleted file mode 100644 index fc9cdc996..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.js deleted file mode 100644 index abe80bab7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['goodweatherprotocol_3607',['GoodweatherProtocol',['../unionGoodweatherProtocol.html',1,'']]], - ['greeprotocol_3608',['GreeProtocol',['../unionGreeProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.html deleted file mode 100644 index 1ecfdddff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.js deleted file mode 100644 index a8fc6c103..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_6.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['haierprotocol_3609',['HaierProtocol',['../unionHaierProtocol.html',1,'']]], - ['haieryrw02protocol_3610',['HaierYRW02Protocol',['../unionHaierYRW02Protocol.html',1,'']]], - ['hitachi1protocol_3611',['Hitachi1Protocol',['../unionHitachi1Protocol.html',1,'']]], - ['hitachi424protocol_3612',['Hitachi424Protocol',['../unionHitachi424Protocol.html',1,'']]], - ['hitachiprotocol_3613',['HitachiProtocol',['../unionHitachiProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.html deleted file mode 100644 index 0fc6fc3ed..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.js deleted file mode 100644 index a0a5b8394..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_7.js +++ /dev/null @@ -1,59 +0,0 @@ -var searchData= -[ - ['irac_3614',['IRac',['../classIRac.html',1,'']]], - ['irairwellac_3615',['IRAirwellAc',['../classIRAirwellAc.html',1,'']]], - ['iramcorac_3616',['IRAmcorAc',['../classIRAmcorAc.html',1,'']]], - ['irargoac_3617',['IRArgoAC',['../classIRArgoAC.html',1,'']]], - ['ircarrierac64_3618',['IRCarrierAc64',['../classIRCarrierAc64.html',1,'']]], - ['ircoolixac_3619',['IRCoolixAC',['../classIRCoolixAC.html',1,'']]], - ['ircoronaac_3620',['IRCoronaAc',['../classIRCoronaAc.html',1,'']]], - ['irdaikin128_3621',['IRDaikin128',['../classIRDaikin128.html',1,'']]], - ['irdaikin152_3622',['IRDaikin152',['../classIRDaikin152.html',1,'']]], - ['irdaikin160_3623',['IRDaikin160',['../classIRDaikin160.html',1,'']]], - ['irdaikin176_3624',['IRDaikin176',['../classIRDaikin176.html',1,'']]], - ['irdaikin2_3625',['IRDaikin2',['../classIRDaikin2.html',1,'']]], - ['irdaikin216_3626',['IRDaikin216',['../classIRDaikin216.html',1,'']]], - ['irdaikin64_3627',['IRDaikin64',['../classIRDaikin64.html',1,'']]], - ['irdaikinesp_3628',['IRDaikinESP',['../classIRDaikinESP.html',1,'']]], - ['irdelonghiac_3629',['IRDelonghiAc',['../classIRDelonghiAc.html',1,'']]], - ['irecoclimac_3630',['IREcoclimAc',['../classIREcoclimAc.html',1,'']]], - ['irelectraac_3631',['IRElectraAc',['../classIRElectraAc.html',1,'']]], - ['irfujitsuac_3632',['IRFujitsuAC',['../classIRFujitsuAC.html',1,'']]], - ['irgoodweatherac_3633',['IRGoodweatherAc',['../classIRGoodweatherAc.html',1,'']]], - ['irgreeac_3634',['IRGreeAC',['../classIRGreeAC.html',1,'']]], - ['irhaierac_3635',['IRHaierAC',['../classIRHaierAC.html',1,'']]], - ['irhaieracyrw02_3636',['IRHaierACYRW02',['../classIRHaierACYRW02.html',1,'']]], - ['irhitachiac_3637',['IRHitachiAc',['../classIRHitachiAc.html',1,'']]], - ['irhitachiac1_3638',['IRHitachiAc1',['../classIRHitachiAc1.html',1,'']]], - ['irhitachiac3_3639',['IRHitachiAc3',['../classIRHitachiAc3.html',1,'']]], - ['irhitachiac344_3640',['IRHitachiAc344',['../classIRHitachiAc344.html',1,'']]], - ['irhitachiac424_3641',['IRHitachiAc424',['../classIRHitachiAc424.html',1,'']]], - ['irkelvinatorac_3642',['IRKelvinatorAC',['../classIRKelvinatorAC.html',1,'']]], - ['irlgac_3643',['IRLgAc',['../classIRLgAc.html',1,'']]], - ['irmideaac_3644',['IRMideaAC',['../classIRMideaAC.html',1,'']]], - ['irmitsubishi112_3645',['IRMitsubishi112',['../classIRMitsubishi112.html',1,'']]], - ['irmitsubishi136_3646',['IRMitsubishi136',['../classIRMitsubishi136.html',1,'']]], - ['irmitsubishiac_3647',['IRMitsubishiAC',['../classIRMitsubishiAC.html',1,'']]], - ['irmitsubishiheavy152ac_3648',['IRMitsubishiHeavy152Ac',['../classIRMitsubishiHeavy152Ac.html',1,'']]], - ['irmitsubishiheavy88ac_3649',['IRMitsubishiHeavy88Ac',['../classIRMitsubishiHeavy88Ac.html',1,'']]], - ['irneoclimaac_3650',['IRNeoclimaAc',['../classIRNeoclimaAc.html',1,'']]], - ['irpanasonicac_3651',['IRPanasonicAc',['../classIRPanasonicAc.html',1,'']]], - ['irpanasonicac32_3652',['IRPanasonicAc32',['../classIRPanasonicAc32.html',1,'']]], - ['irparams_5ft_3653',['irparams_t',['../structirparams__t.html',1,'']]], - ['irrecv_3654',['IRrecv',['../classIRrecv.html',1,'']]], - ['irsamsungac_3655',['IRSamsungAc',['../classIRSamsungAc.html',1,'']]], - ['irsanyoac_3656',['IRSanyoAc',['../classIRSanyoAc.html',1,'']]], - ['irsend_3657',['IRsend',['../classIRsend.html',1,'']]], - ['irsharpac_3658',['IRSharpAc',['../classIRSharpAc.html',1,'']]], - ['irtcl112ac_3659',['IRTcl112Ac',['../classIRTcl112Ac.html',1,'']]], - ['irtechnibelac_3660',['IRTechnibelAc',['../classIRTechnibelAc.html',1,'']]], - ['irtecoac_3661',['IRTecoAc',['../classIRTecoAc.html',1,'']]], - ['irtimer_3662',['IRtimer',['../classIRtimer.html',1,'']]], - ['irtoshibaac_3663',['IRToshibaAC',['../classIRToshibaAC.html',1,'']]], - ['irtranscoldac_3664',['IRTranscoldAc',['../classIRTranscoldAc.html',1,'']]], - ['irtrotecesp_3665',['IRTrotecESP',['../classIRTrotecESP.html',1,'']]], - ['irtrumaac_3666',['IRTrumaAc',['../classIRTrumaAc.html',1,'']]], - ['irvestelac_3667',['IRVestelAc',['../classIRVestelAc.html',1,'']]], - ['irvoltas_3668',['IRVoltas',['../classIRVoltas.html',1,'']]], - ['irwhirlpoolac_3669',['IRWhirlpoolAc',['../classIRWhirlpoolAc.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.html deleted file mode 100644 index ac8af7dca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.js deleted file mode 100644 index b64a84ff0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['kelvinatorprotocol_3670',['KelvinatorProtocol',['../unionKelvinatorProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.html deleted file mode 100644 index 86cad046a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.js deleted file mode 100644 index 83da530e6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['lgprotocol_3671',['LGProtocol',['../unionLGProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.html deleted file mode 100644 index 4201e97e3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.js deleted file mode 100644 index 3978e218a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_a.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['magiquest_3672',['magiquest',['../unionmagiquest.html',1,'']]], - ['match_5fresult_5ft_3673',['match_result_t',['../structmatch__result__t.html',1,'']]], - ['mideaprotocol_3674',['MideaProtocol',['../unionMideaProtocol.html',1,'']]], - ['mitsubishi112protocol_3675',['Mitsubishi112Protocol',['../unionMitsubishi112Protocol.html',1,'']]], - ['mitsubishi136protocol_3676',['Mitsubishi136Protocol',['../unionMitsubishi136Protocol.html',1,'']]], - ['mitsubishi144protocol_3677',['Mitsubishi144Protocol',['../unionMitsubishi144Protocol.html',1,'']]], - ['mitsubishi152protocol_3678',['Mitsubishi152Protocol',['../unionMitsubishi152Protocol.html',1,'']]], - ['mitsubishi88protocol_3679',['Mitsubishi88Protocol',['../unionMitsubishi88Protocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.html deleted file mode 100644 index f88a57801..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.js deleted file mode 100644 index 90126bd99..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_b.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['neoclimaprotocol_3680',['NeoclimaProtocol',['../unionNeoclimaProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.html deleted file mode 100644 index fa0cf4d6d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.js deleted file mode 100644 index 5bd8e4bbc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['panasonicac32protocol_3681',['PanasonicAc32Protocol',['../unionPanasonicAc32Protocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.html deleted file mode 100644 index 0b6b13710..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.js deleted file mode 100644 index 0ee619c01..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_d.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['samsungprotocol_3682',['SamsungProtocol',['../unionSamsungProtocol.html',1,'']]], - ['sanyoprotocol_3683',['SanyoProtocol',['../unionSanyoProtocol.html',1,'']]], - ['sharpprotocol_3684',['SharpProtocol',['../unionSharpProtocol.html',1,'']]], - ['state_5ft_3685',['state_t',['../structstdAc_1_1state__t.html',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.html deleted file mode 100644 index 2e42779f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.js deleted file mode 100644 index 4cefb030d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['tcl112protocol_3686',['Tcl112Protocol',['../unionTcl112Protocol.html',1,'']]], - ['technibelprotocol_3687',['TechnibelProtocol',['../unionTechnibelProtocol.html',1,'']]], - ['tecoprotocol_3688',['TecoProtocol',['../unionTecoProtocol.html',1,'']]], - ['timerms_3689',['TimerMs',['../classTimerMs.html',1,'']]], - ['toshibaprotocol_3690',['ToshibaProtocol',['../unionToshibaProtocol.html',1,'']]], - ['transcoldprotocol_3691',['TranscoldProtocol',['../unionTranscoldProtocol.html',1,'']]], - ['trotecprotocol_3692',['TrotecProtocol',['../unionTrotecProtocol.html',1,'']]], - ['trumaprotocol_3693',['TrumaProtocol',['../unionTrumaProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.html deleted file mode 100644 index e664ccd8e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.js deleted file mode 100644 index 7fd470fbe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/classes_f.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['vestelprotocol_3694',['VestelProtocol',['../unionVestelProtocol.html',1,'']]], - ['voltasprotocol_3695',['VoltasProtocol',['../unionVoltasProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/close.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/close.png deleted file mode 100644 index 9342d3dfe..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/close.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.html deleted file mode 100644 index 9669700af..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.js deleted file mode 100644 index 765d3bbb6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['decode_5ftype_5ft_7096',['decode_type_t',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fad',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.html deleted file mode 100644 index dfec174d1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.js deleted file mode 100644 index 9e6d685c6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['fanspeed_5ft_7097',['fanspeed_t',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383',1,'stdAc']]], - ['fujitsu_5fac_5fremote_5fmodel_5ft_7098',['fujitsu_ac_remote_model_t',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.html deleted file mode 100644 index db70c3668..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.js deleted file mode 100644 index a9a36ad42..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['gree_5fac_5fremote_5fmodel_5ft_7099',['gree_ac_remote_model_t',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.html deleted file mode 100644 index fb7ec1764..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.js deleted file mode 100644 index e7e97c815..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hitachi_5fac1_5fremote_5fmodel_5ft_7100',['hitachi_ac1_remote_model_t',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.html deleted file mode 100644 index b8b51ef8f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.js deleted file mode 100644 index 488001ec0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['lg_5fac_5fremote_5fmodel_5ft_7101',['lg_ac_remote_model_t',['../IRsend_8h.html#a50c54713e16502d280723334879dc83b',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.html deleted file mode 100644 index d39b033aa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.js deleted file mode 100644 index f03f81f40..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['opmode_5ft_7102',['opmode_t',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444f',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.html deleted file mode 100644 index 7dd141e97..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.js deleted file mode 100644 index 4748c2d83..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['panasonic_5fac_5fremote_5fmodel_5ft_7103',['panasonic_ac_remote_model_t',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6f',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.html deleted file mode 100644 index 2836f52ee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.js deleted file mode 100644 index 5ee57a85f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['sharp_5fac_5fremote_5fmodel_5ft_7104',['sharp_ac_remote_model_t',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7',1,'IRsend.h']]], - ['swingh_5ft_7105',['swingh_t',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147',1,'stdAc']]], - ['swingv_5ft_7106',['swingv_t',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.html deleted file mode 100644 index cf04f764b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.js deleted file mode 100644 index 714b3f5b1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['voltas_5fac_5fremote_5fmodel_5ft_7107',['voltas_ac_remote_model_t',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.html deleted file mode 100644 index cb330655d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.js deleted file mode 100644 index 065b3de6d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enums_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['whirlpool_5fac_5fremote_5fmodel_5ft_7108',['whirlpool_ac_remote_model_t',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.html deleted file mode 100644 index 928624899..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.js deleted file mode 100644 index 51d6eff94..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_0.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['a705_7109',['A705',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a7478bee154c89b576fd478d9623d9281',1,'IRsend.h']]], - ['a903_7110',['A903',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a2357513b74e874971927b6b08dcc1655',1,'IRsend.h']]], - ['a907_7111',['A907',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a11c3296670bdeab9ddd87e4edb875e64',1,'IRsend.h']]], - ['airwell_7112',['AIRWELL',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0cd75c2edaa4c674d679dbb39635990a',1,'IRremoteESP8266.h']]], - ['aiwa_5frc_5ft501_7113',['AIWA_RC_T501',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7dc14b2c4769ef9de663c2e2165d8f75',1,'IRremoteESP8266.h']]], - ['akb75215403_7114',['AKB75215403',['../IRsend_8h.html#a50c54713e16502d280723334879dc83ba37d3851f43307f1e1eac46c5fbf3f08a',1,'IRsend.h']]], - ['amcor_7115',['AMCOR',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1325ba25674d7a99562f15a1b392086b',1,'IRremoteESP8266.h']]], - ['ardb1_7116',['ARDB1',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6f6fcd0be917d91b71c1b80b5446ee5b',1,'IRsend.h']]], - ['argo_7117',['ARGO',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac9ff1fa84905b54238b16d31197efb72',1,'IRremoteESP8266.h']]], - ['arjw2_7118',['ARJW2',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0acbca1f3d199103d8cb9d856b9089cdc4',1,'IRsend.h']]], - ['arrah2e_7119',['ARRAH2E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6ccf47af1067e794e02e21f03389297b',1,'IRsend.h']]], - ['arreb1e_7120',['ARREB1E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a2443ff6f0181dbc1af275c709d67147a',1,'IRsend.h']]], - ['arrew4e_7121',['ARREW4E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a15f4cef920f6b63156a209dd97189a3b',1,'IRsend.h']]], - ['arry4_7122',['ARRY4',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0aee3994c5a4a8447463d67df2cdf5a946',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.html deleted file mode 100644 index e22a79fb9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.js deleted file mode 100644 index e7ebb7200..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['carrier_5fac_7123',['CARRIER_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4d7328071e0a48bc828fccb02f969c20',1,'IRremoteESP8266.h']]], - ['carrier_5fac40_7124',['CARRIER_AC40',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1340c578f7986b0ed126744127af3907',1,'IRremoteESP8266.h']]], - ['carrier_5fac64_7125',['CARRIER_AC64',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4122973f5d8ce282457d348857ba0af0',1,'IRremoteESP8266.h']]], - ['coolix_7126',['COOLIX',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadae561d1d82d90c1b54a1a502431749873',1,'IRremoteESP8266.h']]], - ['corona_5fac_7127',['CORONA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf61f2c360f487309cfa466a44fcae106',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.html deleted file mode 100644 index 7107c3d7d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.js deleted file mode 100644 index d3f24f525..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_10.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['tcl112ac_7244',['TCL112AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac4a6ebe702365620ed65ac6f484afda6',1,'IRremoteESP8266.h']]], - ['technibel_5fac_7245',['TECHNIBEL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada11b133c97acd985c6eed8815ae0baf21',1,'IRremoteESP8266.h']]], - ['teco_7246',['TECO',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3a15ee4466478d484508acc3d4d7a050',1,'IRremoteESP8266.h']]], - ['toshiba_5fac_7247',['TOSHIBA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada66de3fced9e8f97d1919bcf4d5726f3e',1,'IRremoteESP8266.h']]], - ['transcold_7248',['TRANSCOLD',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada67cbbd63e69dfc1ff147fc2a070222ef',1,'IRremoteESP8266.h']]], - ['trotec_7249',['TROTEC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7d0f8056d221b37f68f80bace2b794b9',1,'IRremoteESP8266.h']]], - ['truma_7250',['TRUMA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada89f82e81dfba292febe62858976e9e91',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.html deleted file mode 100644 index aab485d35..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.js deleted file mode 100644 index d22460ddd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_11.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['unknown_7251',['UNKNOWN',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada6ce26a62afab55d7606ad4e92428b30c',1,'IRremoteESP8266.h']]], - ['unused_7252',['UNUSED',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa09b651ef326a9d8efcee5cc5b720ab4',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.html deleted file mode 100644 index 9d9425504..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.js deleted file mode 100644 index 7da0e1609..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_12.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['vestel_5fac_7253',['VESTEL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada165413c6395bde985757b5b446f76569',1,'IRremoteESP8266.h']]], - ['voltas_7254',['VOLTAS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada507821565df57e34d8806d2613b1533c',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.html deleted file mode 100644 index f7dea3e56..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.js deleted file mode 100644 index 55d02178f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_13.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['whirlpool_5fac_7255',['WHIRLPOOL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9faf927323d110269541b356f079b85a',1,'IRremoteESP8266.h']]], - ['whynter_7256',['WHYNTER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada458cdd7fa2b29dc8617c694696580c0c',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.html deleted file mode 100644 index 6a7874ada..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.js deleted file mode 100644 index aa713596f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_14.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['xmp_7257',['XMP',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada009e712c328b21b54c2a099ec8520585',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.html deleted file mode 100644 index 1e778765b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.js deleted file mode 100644 index ed96e19f7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_15.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['yaw1f_7258',['YAW1F',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9a6b29d752ac8bafc8fedabc1282fccfb6',1,'IRsend.h']]], - ['ybofb_7259',['YBOFB',['../IRsend_8h.html#af65070c92b97fa00b2de3818c46039c9a5d6dadebb4f337aa20ea06a87ae9b34a',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.html deleted file mode 100644 index da0dcc8ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.js deleted file mode 100644 index 777f303f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_16.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zepeal_7260',['ZEPEAL',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1622e3d0835b4d47add716811c7bf797',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.html deleted file mode 100644 index 01a77bf7a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.js deleted file mode 100644 index 7a45b800c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_2.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['daikin_7128',['DAIKIN',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad8dc0597fd237d7098246334f3b5f37e',1,'IRremoteESP8266.h']]], - ['daikin128_7129',['DAIKIN128',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4b26fb376f6375dd6d1d4be186438f88',1,'IRremoteESP8266.h']]], - ['daikin152_7130',['DAIKIN152',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad3f5f7ca39aee5fdab671a1b0d647ae4',1,'IRremoteESP8266.h']]], - ['daikin160_7131',['DAIKIN160',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4db6a848df3aed4289801e1b2bbbf6aa',1,'IRremoteESP8266.h']]], - ['daikin176_7132',['DAIKIN176',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada57f78a3b04d904f19d10bac13483deab',1,'IRremoteESP8266.h']]], - ['daikin2_7133',['DAIKIN2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab37b344f84d575ec78a92ca55e153586',1,'IRremoteESP8266.h']]], - ['daikin216_7134',['DAIKIN216',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa833fa3a20c3cbb7e6206dac4da30ffb',1,'IRremoteESP8266.h']]], - ['daikin64_7135',['DAIKIN64',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada70581853ce4883b747d22fdfd74409c4',1,'IRremoteESP8266.h']]], - ['delonghi_5fac_7136',['DELONGHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada149190c9dec98e9c3f4a2bd530b154a3',1,'IRremoteESP8266.h']]], - ['denon_7137',['DENON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada2bda37b76abb290d1675c3e027e3c2e1',1,'IRremoteESP8266.h']]], - ['dg11j13a_7138',['DG11J13A',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2a868d69f0605cf9151b0163a3481e2fb9',1,'IRsend.h']]], - ['dg11j191_7139',['DG11J191',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2adaecfc16f36975f231db2507a8a36c0c',1,'IRsend.h']]], - ['dish_7140',['DISH',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac27c6ac38ba872593af8e46ac2fdc85a',1,'IRremoteESP8266.h']]], - ['doshisha_7141',['DOSHISHA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab4566b260773b60c85450f40fa5b4341',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.html deleted file mode 100644 index 4e761d602..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.js deleted file mode 100644 index dcd181284..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ecoclim_7142',['ECOCLIM',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab7e60c2218bac76695bcff178366ec8d',1,'IRremoteESP8266.h']]], - ['electra_5fac_7143',['ELECTRA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada05f193ef4ead3e54624bd92dc3203fac',1,'IRremoteESP8266.h']]], - ['elitescreens_7144',['ELITESCREENS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafebe19d5453be4c99de8c031508b7cb1',1,'IRremoteESP8266.h']]], - ['epson_7145',['EPSON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaf677fd380c38297264a10732631927c',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.html deleted file mode 100644 index e2977a05c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.js deleted file mode 100644 index 2368c5829..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fujitsu_5fac_7146',['FUJITSU_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad8cf99a3a8776d644b78313306a2108c',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.html deleted file mode 100644 index eabdd4be2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.js deleted file mode 100644 index d9ee4db26..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_5.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['ge6711ar2853m_7147',['GE6711AR2853M',['../IRsend_8h.html#a50c54713e16502d280723334879dc83bada534bddbb58907faa6c7eae385ec790',1,'IRsend.h']]], - ['gicable_7148',['GICABLE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac8f9010b746a07a7a6329d1b336b68cf',1,'IRremoteESP8266.h']]], - ['globalcache_7149',['GLOBALCACHE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf8c11b983768907fdb625ff9fb3729d2',1,'IRremoteESP8266.h']]], - ['goodweather_7150',['GOODWEATHER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9e8d893590b745f6b1b5ffcb556d9cba',1,'IRremoteESP8266.h']]], - ['gree_7151',['GREE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadae3a5e7c315f6f88b34a4c856f280ed83',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.html deleted file mode 100644 index 24764919a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.js deleted file mode 100644 index 930a78c0c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_6.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['haier_5fac_7152',['HAIER_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1f232bcdf330ec2e353196941b9f1628',1,'IRremoteESP8266.h']]], - ['haier_5fac_5fyrw02_7153',['HAIER_AC_YRW02',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaacda5821835865551f6df46c76282fa4',1,'IRremoteESP8266.h']]], - ['hitachi_5fac_7154',['HITACHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9020fb54ac69d8aec0185f7e80c962ca',1,'IRremoteESP8266.h']]], - ['hitachi_5fac1_7155',['HITACHI_AC1',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7d9a74161d95e62bece3c0e48900cb35',1,'IRremoteESP8266.h']]], - ['hitachi_5fac2_7156',['HITACHI_AC2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab5a44068d519506efa8a3113aa44c9c0',1,'IRremoteESP8266.h']]], - ['hitachi_5fac3_7157',['HITACHI_AC3',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac3487c47b14da6af922f5b27992b30f3',1,'IRremoteESP8266.h']]], - ['hitachi_5fac344_7158',['HITACHI_AC344',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1e147eb39adc40e4181940cc2357f070',1,'IRremoteESP8266.h']]], - ['hitachi_5fac424_7159',['HITACHI_AC424',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada85af068f8964d4359512265d8cc27a31',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.html deleted file mode 100644 index 5d5ce7ee6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.js deleted file mode 100644 index ed85b0e48..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['inax_7160',['INAX',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafc566aab3afb8face6d8965ca4d0eab7',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.html deleted file mode 100644 index be088de03..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.js deleted file mode 100644 index d9ef57896..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['jvc_7161',['JVC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5b6f507fb4bbd70ee70be4e2e0b0371d',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.html deleted file mode 100644 index b521e0972..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.js deleted file mode 100644 index f29483fee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_9.js +++ /dev/null @@ -1,37 +0,0 @@ -var searchData= -[ - ['kauto_7162',['kAuto',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444faa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147aa8c857c2f1b000c92f9794ebf53888d7',1,'stdAc::kAuto()']]], - ['kcool_7163',['kCool',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fab9480fe865ab6bbfb66c8308068a06c2',1,'stdAc']]], - ['kdry_7164',['kDry',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa0d254f21cc940f41cf7cc1c8ff46ce1f',1,'stdAc']]], - ['kelvinator_7165',['KELVINATOR',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab3a52797572065c912c34c976c08c542',1,'IRremoteESP8266.h']]], - ['kfan_7166',['kFan',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa03b7310c6ec7018a07ee9e3ffb95a34b',1,'stdAc']]], - ['kheat_7167',['kHeat',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444faece059b52386d38cd6da9729cca08b4e',1,'stdAc']]], - ['khigh_7168',['kHigh',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa022f15e910eb36278094efb6e808a07',1,'stdAc::kHigh()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43aa022f15e910eb36278094efb6e808a07',1,'stdAc::kHigh()']]], - ['khighest_7169',['kHighest',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a24d8e31603e486f788826bc24e3a2e1d',1,'stdAc']]], - ['klastdecodetype_7170',['kLastDecodeType',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab09881b84bf9d61af99e62a85cce0b59',1,'IRremoteESP8266.h']]], - ['klastfanspeedenum_7171',['kLastFanspeedEnum',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383ab2d2a6993491fd666f1fa0afff5913ad',1,'stdAc']]], - ['klastopmodeenum_7172',['kLastOpmodeEnum',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444fa8dd00ffd575f66172d594e78860aad9f',1,'stdAc']]], - ['klastswinghenum_7173',['kLastSwinghEnum',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147ac5bc5e605db47897c114283926ba7fe4',1,'stdAc']]], - ['klastswingvenum_7174',['kLastSwingvEnum',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a4127912afc084d51c71c4ea0c7dd7b30',1,'stdAc']]], - ['kleft_7175',['kLeft',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a2d5fde1d924910a2a01ecd8e70a87c28',1,'stdAc']]], - ['kleftmax_7176',['kLeftMax',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a375fe2e8ea70186052eeb2983baa1d7d',1,'stdAc']]], - ['klow_7177',['kLow',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383acd8fe42741a3bbc973bbf1d404afeff4',1,'stdAc::kLow()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43acd8fe42741a3bbc973bbf1d404afeff4',1,'stdAc::kLow()']]], - ['klowest_7178',['kLowest',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43a334c684494b7f19d765cf062ae94a314',1,'stdAc']]], - ['kmax_7179',['kMax',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383aa0b1ac8aae6b1cfbbe89085c642b3b4b',1,'stdAc']]], - ['kmedium_7180',['kMedium',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383a3ce9d817402b59f65fb01ea044bb1ee9',1,'stdAc']]], - ['kmiddle_7181',['kMiddle',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43ab3199775e825c139b44e3e9ccf3cbc7e',1,'stdAc::kMiddle()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147ab3199775e825c139b44e3e9ccf3cbc7e',1,'stdAc::kMiddle()']]], - ['kmin_7182',['kMin',['../namespacestdAc.html#a8bb0dbf18fe69f639f4ac0b3ff133383a8fbc2f6c44a6d70550df79903eb57d48',1,'stdAc']]], - ['koff_7183',['kOff',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444facc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()'],['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43acc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()'],['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147acc9ab5e60ac2a9a675ba64bf4bb49dc8',1,'stdAc::kOff()']]], - ['kpanasonicckp_7184',['kPanasonicCkp',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa537e8c640473597d2a1cb832498f9cb0',1,'IRsend.h']]], - ['kpanasonicdke_7185',['kPanasonicDke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fac8df2e0cfd553b0103f4c06a0fd573fd',1,'IRsend.h']]], - ['kpanasonicjke_7186',['kPanasonicJke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fabf39cff180c071fbc44601eeded236c4',1,'IRsend.h']]], - ['kpanasoniclke_7187',['kPanasonicLke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa71ceb4b576a03a47f0d945323b896cd6',1,'IRsend.h']]], - ['kpanasonicnke_7188',['kPanasonicNke',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6faf70fc847e204f60ab1dc5ecb330fc790',1,'IRsend.h']]], - ['kpanasonicrkr_7189',['kPanasonicRkr',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fab809a062f38eb61589cf5aa2db5789db',1,'IRsend.h']]], - ['kpanasonicunknown_7190',['kPanasonicUnknown',['../IRsend_8h.html#a1b797a5e5176ac0eef49810bf7f40e6fa3b23623c9580717d0ade5137200ae2a4',1,'IRsend.h']]], - ['kright_7191',['kRight',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a2dd2b017192f8a09367d48c7648213c9',1,'stdAc']]], - ['krightmax_7192',['kRightMax',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a856bf9929ade459f451be17c97db4b32',1,'stdAc']]], - ['kvoltas122lzf_7193',['kVoltas122LZF',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2a8de4d20c3d39f984be46ee9ead3b2a59',1,'IRsend.h']]], - ['kvoltasunknown_7194',['kVoltasUnknown',['../IRsend_8h.html#aaf962dae17f7186607a93128fc2d13e2aa804f5b34349056dea270669f8b67229',1,'IRsend.h']]], - ['kwide_7195',['kWide',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147a9934dc3d02540583d5f13be6716739cd',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.html deleted file mode 100644 index ea342169a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.js deleted file mode 100644 index 3f63d0544..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_a.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['lasertag_7196',['LASERTAG',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada92eadf4fa6dd16da5b79a2fcbf729894',1,'IRremoteESP8266.h']]], - ['legopf_7197',['LEGOPF',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9a31bf5555b17ea7b115a5c2550fc1de',1,'IRremoteESP8266.h']]], - ['lg_7198',['LG',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadadf6c249ac7d923229f9e623eff9a61f4',1,'IRremoteESP8266.h']]], - ['lg2_7199',['LG2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8402547ec0b99b9b0efe97dec65badf9',1,'IRremoteESP8266.h']]], - ['lutron_7200',['LUTRON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada76cc459b9e26d82ed82cf120272fd8cb',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.html deleted file mode 100644 index 0bb27ce3b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.js deleted file mode 100644 index 0940e021d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_b.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['magiquest_7201',['MAGIQUEST',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3be750ce1687bc1a92fee05b0c511100',1,'IRremoteESP8266.h']]], - ['metz_7202',['METZ',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa77ca3ee98846eee35bd2995bf2ae25b',1,'IRremoteESP8266.h']]], - ['midea_7203',['MIDEA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1571f3cf72caf1cf23481802b450382a',1,'IRremoteESP8266.h']]], - ['midea24_7204',['MIDEA24',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada59b5ac5c1d354e50932dc0208d9b0b43',1,'IRremoteESP8266.h']]], - ['milestag2_7205',['MILESTAG2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5ffb7486d99840e02f2688e3d6605a14',1,'IRremoteESP8266.h']]], - ['mirage_7206',['MIRAGE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9ab6dd14fa5c7d0d32c60d414c7df36a',1,'IRremoteESP8266.h']]], - ['mitsubishi_7207',['MITSUBISHI',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab98915357fe1cb91de0536136be20d07',1,'IRremoteESP8266.h']]], - ['mitsubishi112_7208',['MITSUBISHI112',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab8e5875a5959b72ca7ff17bccff97c4d',1,'IRremoteESP8266.h']]], - ['mitsubishi136_7209',['MITSUBISHI136',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada3c73724a654627a04cc96e280b9630fe',1,'IRremoteESP8266.h']]], - ['mitsubishi2_7210',['MITSUBISHI2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada66368850d567cbeb3b2c2233cae34cd0',1,'IRremoteESP8266.h']]], - ['mitsubishi_5fac_7211',['MITSUBISHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada45198cb83bbf76b320eaa91d09c44b38',1,'IRremoteESP8266.h']]], - ['mitsubishi_5fheavy_5f152_7212',['MITSUBISHI_HEAVY_152',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada15c8d1d51d5f9e42fd03638cbdfb7cbf',1,'IRremoteESP8266.h']]], - ['mitsubishi_5fheavy_5f88_7213',['MITSUBISHI_HEAVY_88',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad303f6c0494d33354cb7c11af258f663',1,'IRremoteESP8266.h']]], - ['multibrackets_7214',['MULTIBRACKETS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaebb72f3ad9ff2a706d8041763de6e49',1,'IRremoteESP8266.h']]], - ['mwm_7215',['MWM',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8a6938c955212e1fb81fb511437cbe56',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.html deleted file mode 100644 index 1ee90d91d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.js deleted file mode 100644 index d60bb10a5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_c.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['nec_7216',['NEC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0811f93a25b0873e21979d569eeac05e',1,'IRremoteESP8266.h']]], - ['nec_5flike_7217',['NEC_LIKE',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada97acfde550d201fa0abc3120098fb471',1,'IRremoteESP8266.h']]], - ['neoclima_7218',['NEOCLIMA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac698e0c030768ed91207b0e63910c3e7',1,'IRremoteESP8266.h']]], - ['nikai_7219',['NIKAI',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0bc180c4ab5e68798451f4799f7f9377',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.html deleted file mode 100644 index e1b3b48a0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.js deleted file mode 100644 index 0e542085a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_d.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['panasonic_7220',['PANASONIC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf87c99938d26a1f77d4f082c070d4660',1,'IRremoteESP8266.h']]], - ['panasonic_5fac_7221',['PANASONIC_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada02178d0c70511011d5f381291bb7e491',1,'IRremoteESP8266.h']]], - ['panasonic_5fac32_7222',['PANASONIC_AC32',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada790ec65ea3e5d3ef9dc19614521c889e',1,'IRremoteESP8266.h']]], - ['pioneer_7223',['PIONEER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadadf49fef8f6e9740c92af2e25384f7846',1,'IRremoteESP8266.h']]], - ['pronto_7224',['PRONTO',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada5b68c32f80c4afa6e61039843b2d1f97',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.html deleted file mode 100644 index c5d31975c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.js deleted file mode 100644 index 12a5d7df9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_e.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['r_5flt0541_5fhta_5fa_7225',['R_LT0541_HTA_A',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49afed7c9dd67250bb1e72081e5f05b35f8',1,'IRsend.h']]], - ['r_5flt0541_5fhta_5fb_7226',['R_LT0541_HTA_B',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49a03b6e058b4cfeb6719906bc3cd57594f',1,'IRsend.h']]], - ['raw_7227',['RAW',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadabdeded99fe7d3f2773014a9a2cfb73d7',1,'IRremoteESP8266.h']]], - ['rc5_7228',['RC5',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac3c0a3883a1488209bcd91730ece33b2',1,'IRremoteESP8266.h']]], - ['rc5x_7229',['RC5X',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8a3ac4419806a34ba566bfcbbb0e4f1d',1,'IRremoteESP8266.h']]], - ['rc6_7230',['RC6',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7f7247f15587eb3812846f424b941abe',1,'IRremoteESP8266.h']]], - ['rcmm_7231',['RCMM',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada79204b7ae26be334cebf3ea8268c34ab',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.html deleted file mode 100644 index 5de961d49..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.js deleted file mode 100644 index 06c0ff952..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/enumvalues_f.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['samsung_7232',['SAMSUNG',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada2b451b6e7bebbf070d0913ec77d5d438',1,'IRremoteESP8266.h']]], - ['samsung36_7233',['SAMSUNG36',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa0d1be0c368e3594bc546c241d031fd4',1,'IRremoteESP8266.h']]], - ['samsung_5fac_7234',['SAMSUNG_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada39f991023009d760432489e7ad7ad4df',1,'IRremoteESP8266.h']]], - ['sanyo_7235',['SANYO',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac1cf5078ebfd7ff83c70e8ec8522b288',1,'IRremoteESP8266.h']]], - ['sanyo_5fac_7236',['SANYO_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaf85e76d33b94649a2ecc957acd214209',1,'IRremoteESP8266.h']]], - ['sanyo_5flc7461_7237',['SANYO_LC7461',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada558721044a11b1d4b491343f02267e1d',1,'IRremoteESP8266.h']]], - ['sharp_7238',['SHARP',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaad63db67a2284cd7e3ffe382b6d6ea82',1,'IRremoteESP8266.h']]], - ['sharp_5fac_7239',['SHARP_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada353a9d71906702ae10aa4f803a04ca68',1,'IRremoteESP8266.h']]], - ['sherwood_7240',['SHERWOOD',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1412522651b0c8f1a35e1db3807466bb',1,'IRremoteESP8266.h']]], - ['sony_7241',['SONY',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada72d58193d4d25517202d22b7e57a65c3',1,'IRremoteESP8266.h']]], - ['sony_5f38k_7242',['SONY_38K',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0027bcfbb78c0c2b951dfff1102a027b',1,'IRremoteESP8266.h']]], - ['symphony_7243',['SYMPHONY',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada44c4a84d776e02328ef3b169e743e5ec',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.html deleted file mode 100644 index 737608e10..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.js deleted file mode 100644 index 4b7b2f92d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_0.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['de_2dch_2eh_3702',['de-CH.h',['../de-CH_8h.html',1,'']]], - ['de_2dde_2eh_3703',['de-DE.h',['../de-DE_8h.html',1,'']]], - ['defaults_2eh_3704',['defaults.h',['../defaults_8h.html',1,'']]], - ['doxygen_5findex_2emd_3705',['doxygen_index.md',['../doxygen__index_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.html deleted file mode 100644 index f27a62dee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.js deleted file mode 100644 index 17479838d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['en_2dau_2eh_3706',['en-AU.h',['../en-AU_8h.html',1,'']]], - ['en_2die_2eh_3707',['en-IE.h',['../en-IE_8h.html',1,'']]], - ['en_2duk_2eh_3708',['en-UK.h',['../en-UK_8h.html',1,'']]], - ['en_2dus_2eh_3709',['en-US.h',['../en-US_8h.html',1,'']]], - ['es_2des_2eh_3710',['es-ES.h',['../es-ES_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.html deleted file mode 100644 index a45066e93..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.js deleted file mode 100644 index db198f861..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fr_2dfr_2eh_3711',['fr-FR.h',['../fr-FR_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.html deleted file mode 100644 index 1076bc5a1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.js deleted file mode 100644 index ed6856922..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_3.js +++ /dev/null @@ -1,121 +0,0 @@ -var searchData= -[ - ['i18n_2eh_3712',['i18n.h',['../i18n_8h.html',1,'']]], - ['ir_5fairwell_2ecpp_3713',['ir_Airwell.cpp',['../ir__Airwell_8cpp.html',1,'']]], - ['ir_5fairwell_2eh_3714',['ir_Airwell.h',['../ir__Airwell_8h.html',1,'']]], - ['ir_5faiwa_2ecpp_3715',['ir_Aiwa.cpp',['../ir__Aiwa_8cpp.html',1,'']]], - ['ir_5famcor_2ecpp_3716',['ir_Amcor.cpp',['../ir__Amcor_8cpp.html',1,'']]], - ['ir_5famcor_2eh_3717',['ir_Amcor.h',['../ir__Amcor_8h.html',1,'']]], - ['ir_5fargo_2ecpp_3718',['ir_Argo.cpp',['../ir__Argo_8cpp.html',1,'']]], - ['ir_5fargo_2eh_3719',['ir_Argo.h',['../ir__Argo_8h.html',1,'']]], - ['ir_5fcarrier_2ecpp_3720',['ir_Carrier.cpp',['../ir__Carrier_8cpp.html',1,'']]], - ['ir_5fcarrier_2eh_3721',['ir_Carrier.h',['../ir__Carrier_8h.html',1,'']]], - ['ir_5fcoolix_2ecpp_3722',['ir_Coolix.cpp',['../ir__Coolix_8cpp.html',1,'']]], - ['ir_5fcoolix_2eh_3723',['ir_Coolix.h',['../ir__Coolix_8h.html',1,'']]], - ['ir_5fcorona_2ecpp_3724',['ir_Corona.cpp',['../ir__Corona_8cpp.html',1,'']]], - ['ir_5fcorona_2eh_3725',['ir_Corona.h',['../ir__Corona_8h.html',1,'']]], - ['ir_5fdaikin_2ecpp_3726',['ir_Daikin.cpp',['../ir__Daikin_8cpp.html',1,'']]], - ['ir_5fdaikin_2eh_3727',['ir_Daikin.h',['../ir__Daikin_8h.html',1,'']]], - ['ir_5fdelonghi_2ecpp_3728',['ir_Delonghi.cpp',['../ir__Delonghi_8cpp.html',1,'']]], - ['ir_5fdelonghi_2eh_3729',['ir_Delonghi.h',['../ir__Delonghi_8h.html',1,'']]], - ['ir_5fdenon_2ecpp_3730',['ir_Denon.cpp',['../ir__Denon_8cpp.html',1,'']]], - ['ir_5fdish_2ecpp_3731',['ir_Dish.cpp',['../ir__Dish_8cpp.html',1,'']]], - ['ir_5fdoshisha_2ecpp_3732',['ir_Doshisha.cpp',['../ir__Doshisha_8cpp.html',1,'']]], - ['ir_5fecoclim_2ecpp_3733',['ir_Ecoclim.cpp',['../ir__Ecoclim_8cpp.html',1,'']]], - ['ir_5fecoclim_2eh_3734',['ir_Ecoclim.h',['../ir__Ecoclim_8h.html',1,'']]], - ['ir_5felectra_2ecpp_3735',['ir_Electra.cpp',['../ir__Electra_8cpp.html',1,'']]], - ['ir_5felectra_2eh_3736',['ir_Electra.h',['../ir__Electra_8h.html',1,'']]], - ['ir_5felitescreens_2ecpp_3737',['ir_EliteScreens.cpp',['../ir__EliteScreens_8cpp.html',1,'']]], - ['ir_5fepson_2ecpp_3738',['ir_Epson.cpp',['../ir__Epson_8cpp.html',1,'']]], - ['ir_5ffujitsu_2ecpp_3739',['ir_Fujitsu.cpp',['../ir__Fujitsu_8cpp.html',1,'']]], - ['ir_5ffujitsu_2eh_3740',['ir_Fujitsu.h',['../ir__Fujitsu_8h.html',1,'']]], - ['ir_5fgicable_2ecpp_3741',['ir_GICable.cpp',['../ir__GICable_8cpp.html',1,'']]], - ['ir_5fglobalcache_2ecpp_3742',['ir_GlobalCache.cpp',['../ir__GlobalCache_8cpp.html',1,'']]], - ['ir_5fgoodweather_2ecpp_3743',['ir_Goodweather.cpp',['../ir__Goodweather_8cpp.html',1,'']]], - ['ir_5fgoodweather_2eh_3744',['ir_Goodweather.h',['../ir__Goodweather_8h.html',1,'']]], - ['ir_5fgree_2ecpp_3745',['ir_Gree.cpp',['../ir__Gree_8cpp.html',1,'']]], - ['ir_5fgree_2eh_3746',['ir_Gree.h',['../ir__Gree_8h.html',1,'']]], - ['ir_5fhaier_2ecpp_3747',['ir_Haier.cpp',['../ir__Haier_8cpp.html',1,'']]], - ['ir_5fhaier_2eh_3748',['ir_Haier.h',['../ir__Haier_8h.html',1,'']]], - ['ir_5fhitachi_2ecpp_3749',['ir_Hitachi.cpp',['../ir__Hitachi_8cpp.html',1,'']]], - ['ir_5fhitachi_2eh_3750',['ir_Hitachi.h',['../ir__Hitachi_8h.html',1,'']]], - ['ir_5finax_2ecpp_3751',['ir_Inax.cpp',['../ir__Inax_8cpp.html',1,'']]], - ['ir_5fjvc_2ecpp_3752',['ir_JVC.cpp',['../ir__JVC_8cpp.html',1,'']]], - ['ir_5fkelvinator_2ecpp_3753',['ir_Kelvinator.cpp',['../ir__Kelvinator_8cpp.html',1,'']]], - ['ir_5fkelvinator_2eh_3754',['ir_Kelvinator.h',['../ir__Kelvinator_8h.html',1,'']]], - ['ir_5flasertag_2ecpp_3755',['ir_Lasertag.cpp',['../ir__Lasertag_8cpp.html',1,'']]], - ['ir_5flego_2ecpp_3756',['ir_Lego.cpp',['../ir__Lego_8cpp.html',1,'']]], - ['ir_5flg_2ecpp_3757',['ir_LG.cpp',['../ir__LG_8cpp.html',1,'']]], - ['ir_5flg_2eh_3758',['ir_LG.h',['../ir__LG_8h.html',1,'']]], - ['ir_5flutron_2ecpp_3759',['ir_Lutron.cpp',['../ir__Lutron_8cpp.html',1,'']]], - ['ir_5fmagiquest_2ecpp_3760',['ir_Magiquest.cpp',['../ir__Magiquest_8cpp.html',1,'']]], - ['ir_5fmagiquest_2eh_3761',['ir_Magiquest.h',['../ir__Magiquest_8h.html',1,'']]], - ['ir_5fmetz_2ecpp_3762',['ir_Metz.cpp',['../ir__Metz_8cpp.html',1,'']]], - ['ir_5fmidea_2ecpp_3763',['ir_Midea.cpp',['../ir__Midea_8cpp.html',1,'']]], - ['ir_5fmidea_2eh_3764',['ir_Midea.h',['../ir__Midea_8h.html',1,'']]], - ['ir_5fmilestag2_2ecpp_3765',['ir_MilesTag2.cpp',['../ir__MilesTag2_8cpp.html',1,'']]], - ['ir_5fmirage_2ecpp_3766',['ir_Mirage.cpp',['../ir__Mirage_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2ecpp_3767',['ir_Mitsubishi.cpp',['../ir__Mitsubishi_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2eh_3768',['ir_Mitsubishi.h',['../ir__Mitsubishi_8h.html',1,'']]], - ['ir_5fmitsubishiheavy_2ecpp_3769',['ir_MitsubishiHeavy.cpp',['../ir__MitsubishiHeavy_8cpp.html',1,'']]], - ['ir_5fmitsubishiheavy_2eh_3770',['ir_MitsubishiHeavy.h',['../ir__MitsubishiHeavy_8h.html',1,'']]], - ['ir_5fmultibrackets_2ecpp_3771',['ir_Multibrackets.cpp',['../ir__Multibrackets_8cpp.html',1,'']]], - ['ir_5fmwm_2ecpp_3772',['ir_MWM.cpp',['../ir__MWM_8cpp.html',1,'']]], - ['ir_5fnec_2ecpp_3773',['ir_NEC.cpp',['../ir__NEC_8cpp.html',1,'']]], - ['ir_5fnec_2eh_3774',['ir_NEC.h',['../ir__NEC_8h.html',1,'']]], - ['ir_5fneoclima_2ecpp_3775',['ir_Neoclima.cpp',['../ir__Neoclima_8cpp.html',1,'']]], - ['ir_5fneoclima_2eh_3776',['ir_Neoclima.h',['../ir__Neoclima_8h.html',1,'']]], - ['ir_5fnikai_2ecpp_3777',['ir_Nikai.cpp',['../ir__Nikai_8cpp.html',1,'']]], - ['ir_5fpanasonic_2ecpp_3778',['ir_Panasonic.cpp',['../ir__Panasonic_8cpp.html',1,'']]], - ['ir_5fpanasonic_2eh_3779',['ir_Panasonic.h',['../ir__Panasonic_8h.html',1,'']]], - ['ir_5fpioneer_2ecpp_3780',['ir_Pioneer.cpp',['../ir__Pioneer_8cpp.html',1,'']]], - ['ir_5fpronto_2ecpp_3781',['ir_Pronto.cpp',['../ir__Pronto_8cpp.html',1,'']]], - ['ir_5frc5_5frc6_2ecpp_3782',['ir_RC5_RC6.cpp',['../ir__RC5__RC6_8cpp.html',1,'']]], - ['ir_5frcmm_2ecpp_3783',['ir_RCMM.cpp',['../ir__RCMM_8cpp.html',1,'']]], - ['ir_5fsamsung_2ecpp_3784',['ir_Samsung.cpp',['../ir__Samsung_8cpp.html',1,'']]], - ['ir_5fsamsung_2eh_3785',['ir_Samsung.h',['../ir__Samsung_8h.html',1,'']]], - ['ir_5fsanyo_2ecpp_3786',['ir_Sanyo.cpp',['../ir__Sanyo_8cpp.html',1,'']]], - ['ir_5fsanyo_2eh_3787',['ir_Sanyo.h',['../ir__Sanyo_8h.html',1,'']]], - ['ir_5fsharp_2ecpp_3788',['ir_Sharp.cpp',['../ir__Sharp_8cpp.html',1,'']]], - ['ir_5fsharp_2eh_3789',['ir_Sharp.h',['../ir__Sharp_8h.html',1,'']]], - ['ir_5fsherwood_2ecpp_3790',['ir_Sherwood.cpp',['../ir__Sherwood_8cpp.html',1,'']]], - ['ir_5fsony_2ecpp_3791',['ir_Sony.cpp',['../ir__Sony_8cpp.html',1,'']]], - ['ir_5fsymphony_2ecpp_3792',['ir_Symphony.cpp',['../ir__Symphony_8cpp.html',1,'']]], - ['ir_5ftcl_2ecpp_3793',['ir_Tcl.cpp',['../ir__Tcl_8cpp.html',1,'']]], - ['ir_5ftcl_2eh_3794',['ir_Tcl.h',['../ir__Tcl_8h.html',1,'']]], - ['ir_5ftechnibel_2ecpp_3795',['ir_Technibel.cpp',['../ir__Technibel_8cpp.html',1,'']]], - ['ir_5ftechnibel_2eh_3796',['ir_Technibel.h',['../ir__Technibel_8h.html',1,'']]], - ['ir_5fteco_2ecpp_3797',['ir_Teco.cpp',['../ir__Teco_8cpp.html',1,'']]], - ['ir_5fteco_2eh_3798',['ir_Teco.h',['../ir__Teco_8h.html',1,'']]], - ['ir_5ftoshiba_2ecpp_3799',['ir_Toshiba.cpp',['../ir__Toshiba_8cpp.html',1,'']]], - ['ir_5ftoshiba_2eh_3800',['ir_Toshiba.h',['../ir__Toshiba_8h.html',1,'']]], - ['ir_5ftranscold_2ecpp_3801',['ir_Transcold.cpp',['../ir__Transcold_8cpp.html',1,'']]], - ['ir_5ftranscold_2eh_3802',['ir_Transcold.h',['../ir__Transcold_8h.html',1,'']]], - ['ir_5ftrotec_2ecpp_3803',['ir_Trotec.cpp',['../ir__Trotec_8cpp.html',1,'']]], - ['ir_5ftrotec_2eh_3804',['ir_Trotec.h',['../ir__Trotec_8h.html',1,'']]], - ['ir_5ftruma_2ecpp_3805',['ir_Truma.cpp',['../ir__Truma_8cpp.html',1,'']]], - ['ir_5ftruma_2eh_3806',['ir_Truma.h',['../ir__Truma_8h.html',1,'']]], - ['ir_5fvestel_2ecpp_3807',['ir_Vestel.cpp',['../ir__Vestel_8cpp.html',1,'']]], - ['ir_5fvestel_2eh_3808',['ir_Vestel.h',['../ir__Vestel_8h.html',1,'']]], - ['ir_5fvoltas_2ecpp_3809',['ir_Voltas.cpp',['../ir__Voltas_8cpp.html',1,'']]], - ['ir_5fvoltas_2eh_3810',['ir_Voltas.h',['../ir__Voltas_8h.html',1,'']]], - ['ir_5fwhirlpool_2ecpp_3811',['ir_Whirlpool.cpp',['../ir__Whirlpool_8cpp.html',1,'']]], - ['ir_5fwhirlpool_2eh_3812',['ir_Whirlpool.h',['../ir__Whirlpool_8h.html',1,'']]], - ['ir_5fwhynter_2ecpp_3813',['ir_Whynter.cpp',['../ir__Whynter_8cpp.html',1,'']]], - ['ir_5fxmp_2ecpp_3814',['ir_Xmp.cpp',['../ir__Xmp_8cpp.html',1,'']]], - ['ir_5fzepeal_2ecpp_3815',['ir_Zepeal.cpp',['../ir__Zepeal_8cpp.html',1,'']]], - ['irac_2ecpp_3816',['IRac.cpp',['../IRac_8cpp.html',1,'']]], - ['irac_2eh_3817',['IRac.h',['../IRac_8h.html',1,'']]], - ['irrecv_2ecpp_3818',['IRrecv.cpp',['../IRrecv_8cpp.html',1,'']]], - ['irrecv_2eh_3819',['IRrecv.h',['../IRrecv_8h.html',1,'']]], - ['irremoteesp8266_2eh_3820',['IRremoteESP8266.h',['../IRremoteESP8266_8h.html',1,'']]], - ['irsend_2ecpp_3821',['IRsend.cpp',['../IRsend_8cpp.html',1,'']]], - ['irsend_2eh_3822',['IRsend.h',['../IRsend_8h.html',1,'']]], - ['irtext_2ecpp_3823',['IRtext.cpp',['../IRtext_8cpp.html',1,'']]], - ['irtext_2eh_3824',['IRtext.h',['../IRtext_8h.html',1,'']]], - ['irtimer_2ecpp_3825',['IRtimer.cpp',['../IRtimer_8cpp.html',1,'']]], - ['irtimer_2eh_3826',['IRtimer.h',['../IRtimer_8h.html',1,'']]], - ['irutils_2ecpp_3827',['IRutils.cpp',['../IRutils_8cpp.html',1,'']]], - ['irutils_2eh_3828',['IRutils.h',['../IRutils_8h.html',1,'']]], - ['it_2dit_2eh_3829',['it-IT.h',['../it-IT_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.html deleted file mode 100644 index e5cd7f43a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.js deleted file mode 100644 index 5942be18b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pt_2dbr_2eh_3830',['pt-BR.h',['../pt-BR_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.html deleted file mode 100644 index 2cc480f29..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.js deleted file mode 100644 index 79d0f67db..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['readme_2emd_3831',['README.md',['../README_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.html deleted file mode 100644 index 6510245ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.js deleted file mode 100644 index 208e301b3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/files_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zh_2dcn_2eh_3832',['zh-CN.h',['../zh-CN_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.html deleted file mode 100644 index e17c71111..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.js deleted file mode 100644 index f044220cc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_0.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['_5fbackupstate_3833',['_backupState',['../classIRToshibaAC.html#a108c23cb859a64228166e5385295a1e5',1,'IRToshibaAC']]], - ['_5fcancelofftimer_3834',['_cancelOffTimer',['../classIRCarrierAc64.html#a4a0fdf34836b1c954b27c9b242324679',1,'IRCarrierAc64']]], - ['_5fcancelontimer_3835',['_cancelOnTimer',['../classIRCarrierAc64.html#a43e7be5a1a6fe2dbfe245e99d2205779',1,'IRCarrierAc64']]], - ['_5fdelaymicroseconds_3836',['_delayMicroseconds',['../classIRsend.html#a61ceb32aa53f538b93377b10e58b45c9',1,'IRsend']]], - ['_5fgeteconotoggle_3837',['_getEconoToggle',['../classIRSharpAc.html#a4cbf2b92302a8b0a40e76e7431c82745',1,'IRSharpAc']]], - ['_5fgettime_3838',['_getTime',['../classIRPanasonicAc.html#ab0a592b759daf90be548ac69ae99f40f',1,'IRPanasonicAc']]], - ['_5fgettimer_3839',['_getTimer',['../classIRCoronaAc.html#a352fedb1c80549d2b580e538d8ba7901',1,'IRCoronaAc']]], - ['_5fmatchgeneric_3840',['_matchGeneric',['../classIRrecv.html#af0b300fe6fdff58324525e8208be3024',1,'IRrecv']]], - ['_5frestorestate_3841',['_restoreState',['../classIRToshibaAC.html#a23fb190770159f8f1e9bf64df22e8a26',1,'IRToshibaAC']]], - ['_5fsendsony_3842',['_sendSony',['../classIRsend.html#a21352b4499f976872a74bae36ea10338',1,'IRsend']]], - ['_5fseteconotoggle_3843',['_setEconoToggle',['../classIRSharpAc.html#a959d422c7e5a5204909b299a5fbb2a69',1,'IRSharpAc']]], - ['_5fsetmode_3844',['_setMode',['../classIRWhirlpoolAc.html#a60fd8da35d6e0137711e114a5307d664',1,'IRWhirlpoolAc']]], - ['_5fsettemp_3845',['_setTemp',['../classIRLgAc.html#a39aca9861608211c8e74c89a7ccc97cd',1,'IRLgAc::_setTemp()'],['../classIRWhirlpoolAc.html#abb221e09077efd96304f84e8ca130458',1,'IRWhirlpoolAc::_setTemp()']]], - ['_5fsettime_3846',['_setTime',['../classIRPanasonicAc.html#a51e306dd7a3e4d580ed5396fcd166141',1,'IRPanasonicAc']]], - ['_5fsettimer_3847',['_setTimer',['../classIRCoronaAc.html#a0ea9319987de7cb7f3dcb9fbefb60a2c',1,'IRCoronaAc']]], - ['_5ftostring_3848',['_toString',['../classIRHitachiAc424.html#af8ff90fe9beb31d8f44310a9e646a230',1,'IRHitachiAc424']]], - ['_5fvalidtolerance_3849',['_validTolerance',['../classIRrecv.html#a0b4221970de0d027b5ae99648fa1c003',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.html deleted file mode 100644 index 0ddac0a4f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.js deleted file mode 100644 index 559da734e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_1.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['add_3850',['add',['../classIRtimer.html#aa8e3ff975ae5468b4727790c828fa032',1,'IRtimer::add()'],['../classTimerMs.html#a77bfc23a029a9172c3dbac03f746b0cb',1,'TimerMs::add()']]], - ['addbooltostring_3851',['addBoolToString',['../namespaceirutils.html#a12ba9cf1830a886649a80c3cc5fdce2b',1,'irutils']]], - ['adddaytostring_3852',['addDayToString',['../namespaceirutils.html#a6ead1d10578c64627f8a24b5d8a7444f',1,'irutils']]], - ['addfantostring_3853',['addFanToString',['../namespaceirutils.html#af222d5a977e2cd2c979184c449d3c2f8',1,'irutils']]], - ['addinttostring_3854',['addIntToString',['../namespaceirutils.html#a772e623c4b60208200e02afbaec66651',1,'irutils']]], - ['addlabeledstring_3855',['addLabeledString',['../namespaceirutils.html#ac98793392d1e65c1b8d6895eb9d9b75b',1,'irutils']]], - ['addmodeltostring_3856',['addModelToString',['../namespaceirutils.html#a06e5a5c2b6f6649035dfa5eb19801367',1,'irutils']]], - ['addmodetostring_3857',['addModeToString',['../namespaceirutils.html#a8b74ae0258e98aa0eaebc6f3efe1481e',1,'irutils']]], - ['addswinghtostring_3858',['addSwingHToString',['../namespaceirutils.html#ae9eeea9379788b856d148ca5bc7eaf7a',1,'irutils']]], - ['addswingvtostring_3859',['addSwingVToString',['../namespaceirutils.html#a4921dc8d85aa1cc3e89aaa64c24abd58',1,'irutils']]], - ['addtempfloattostring_3860',['addTempFloatToString',['../namespaceirutils.html#a3a47e2b142c7738958e367b0c80a79e7',1,'irutils']]], - ['addtemptostring_3861',['addTempToString',['../namespaceirutils.html#a0cef0634f4db979a93b7dc19cc2b4a85',1,'irutils']]], - ['adjustrepeat_3862',['adjustRepeat',['../namespaceIRXmpUtils.html#a8e7705ba4373589a651e662a3debb0a8',1,'IRXmpUtils']]], - ['airwell_3863',['airwell',['../classIRac.html#a26cd62e09250d87b652d35406ebfb159',1,'IRac']]], - ['amcor_3864',['amcor',['../classIRac.html#a4bad16621b232572e14fe4a53f678131',1,'IRac']]], - ['argo_3865',['argo',['../classIRac.html#aa06ee1314529dbf96f4e6f3c28ea6821',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.html deleted file mode 100644 index 09422e1e5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.js deleted file mode 100644 index 5497cbf50..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_10.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['recoversavedstate_4283',['recoverSavedState',['../classIRCoolixAC.html#a134cb36681c3fab53074b402bba0a45c',1,'IRCoolixAC']]], - ['reset_4284',['reset',['../classIRtimer.html#aaaf886de2c9533a8c791242dc575db1a',1,'IRtimer::reset()'],['../classTimerMs.html#a25ab025793a4d432e7d4180cbd31157b',1,'TimerMs::reset()']]], - ['resultactostring_4285',['resultAcToString',['../namespaceIRAcUtils.html#ac3d2683bc26edc2bf58916187b5349c3',1,'IRAcUtils']]], - ['resulttohexidecimal_4286',['resultToHexidecimal',['../IRutils_8cpp.html#a25a669d53f231de6152f8e60cedf39f7',1,'resultToHexidecimal(const decode_results *const result): IRutils.cpp'],['../IRutils_8h.html#a25a669d53f231de6152f8e60cedf39f7',1,'resultToHexidecimal(const decode_results *const result): IRutils.cpp']]], - ['resulttohumanreadablebasic_4287',['resultToHumanReadableBasic',['../IRutils_8cpp.html#a0cc6ae1b9649b1ea1d2bfe7e7b03b6d8',1,'resultToHumanReadableBasic(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#a0cc6ae1b9649b1ea1d2bfe7e7b03b6d8',1,'resultToHumanReadableBasic(const decode_results *const results): IRutils.cpp']]], - ['resulttorawarray_4288',['resultToRawArray',['../IRutils_8cpp.html#a7b3bbfa1f2bf2dea2fc40a2fefe05a2a',1,'resultToRawArray(const decode_results *const decode): IRutils.cpp'],['../IRutils_8h.html#a7b3bbfa1f2bf2dea2fc40a2fefe05a2a',1,'resultToRawArray(const decode_results *const decode): IRutils.cpp']]], - ['resulttosourcecode_4289',['resultToSourceCode',['../IRutils_8cpp.html#a10fc00c8b399dddb67a228325e6e2f79',1,'resultToSourceCode(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#a10fc00c8b399dddb67a228325e6e2f79',1,'resultToSourceCode(const decode_results *const results): IRutils.cpp']]], - ['resulttotiminginfo_4290',['resultToTimingInfo',['../IRutils_8cpp.html#afbfdef125ff077431f3abc27a1eeb800',1,'resultToTimingInfo(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#afbfdef125ff077431f3abc27a1eeb800',1,'resultToTimingInfo(const decode_results *const results): IRutils.cpp']]], - ['resume_4291',['resume',['../classIRrecv.html#a6b5beb7348d807d8d98ae929d005510e',1,'IRrecv']]], - ['reversebits_4292',['reverseBits',['../IRutils_8cpp.html#a366219b6f1c46f41c6573b3e5e875e41',1,'reverseBits(uint64_t input, uint16_t nbits): IRutils.cpp'],['../IRutils_8h.html#a366219b6f1c46f41c6573b3e5e875e41',1,'reverseBits(uint64_t input, uint16_t nbits): IRutils.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.html deleted file mode 100644 index 1cde7b49e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.js deleted file mode 100644 index bcce89a83..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_11.js +++ /dev/null @@ -1,244 +0,0 @@ -var searchData= -[ - ['samsung_4293',['samsung',['../classIRac.html#a619c659a11c258ea9623eaa37689ba4c',1,'IRac']]], - ['sanyo_4294',['sanyo',['../classIRac.html#a9b0e12748dc25a1d224993b2a013e822',1,'IRac']]], - ['send_4295',['send',['../classIRAirwellAc.html#a503a7879c5739041bb97ad80128287ba',1,'IRAirwellAc::send()'],['../classIRAmcorAc.html#a4fa894c01a8baabfeadb39634a850fd9',1,'IRAmcorAc::send()'],['../classIRArgoAC.html#a0e4793a4f6fc537ec1450f5a42206dae',1,'IRArgoAC::send()'],['../classIRCarrierAc64.html#aace8aa2d125c6e80bcdd6d96eac722c2',1,'IRCarrierAc64::send()'],['../classIRCoolixAC.html#aaaa681d6cfcf04d110b913e8bb27a53c',1,'IRCoolixAC::send()'],['../classIRCoronaAc.html#aa0c8a1ef4473a3c7d02e1a04c7678fa6',1,'IRCoronaAc::send()'],['../classIRDaikinESP.html#a9f0d2641b54e97da943fceb0ba3f67eb',1,'IRDaikinESP::send()'],['../classIRDaikin2.html#aae2db88038d8d02617f16588e6a82b64',1,'IRDaikin2::send()'],['../classIRDaikin216.html#ab1061620f838cf7774c16c593b4ada8c',1,'IRDaikin216::send()'],['../classIRDaikin160.html#a0e1c74070c03be02e40fdd05ed56465c',1,'IRDaikin160::send()'],['../classIRDaikin176.html#affd71592fa8ed05816d94edbf94d2c0a',1,'IRDaikin176::send()'],['../classIRDaikin128.html#aae7fec91ad2265e8b0378c6b99379e89',1,'IRDaikin128::send()'],['../classIRDaikin152.html#a205de6821effc077f51d941d369791e4',1,'IRDaikin152::send()'],['../classIRDaikin64.html#a904eec38045d9ddc8a97ab33c8a2ac4d',1,'IRDaikin64::send()'],['../classIRDelonghiAc.html#afba831b6884771b84bab684732e0f4f5',1,'IRDelonghiAc::send()'],['../classIREcoclimAc.html#a8f254f318d13695ce9e4096ed5693769',1,'IREcoclimAc::send()'],['../classIRElectraAc.html#a30170a65de1161e26daeddf694f8afdb',1,'IRElectraAc::send()'],['../classIRFujitsuAC.html#a1f1aa593cc4503d14c0fbea5cd9823a1',1,'IRFujitsuAC::send()'],['../classIRGoodweatherAc.html#abcc3c9d9b0912b09d3c0b0c1affb8cc8',1,'IRGoodweatherAc::send()'],['../classIRGreeAC.html#a9823578040c2d15e2b3e8e3a17a9e220',1,'IRGreeAC::send()'],['../classIRHaierAC.html#a9fe53d04965efca6daf234f20d20eb5a',1,'IRHaierAC::send()'],['../classIRHaierACYRW02.html#a65a5d5840dddac505b009e899a0dada7',1,'IRHaierACYRW02::send()'],['../classIRHitachiAc.html#afc53e562370bbaba8b5dda26a62de427',1,'IRHitachiAc::send()'],['../classIRHitachiAc1.html#aafad51c226066b8697cf00661ef38d99',1,'IRHitachiAc1::send()'],['../classIRHitachiAc424.html#adf15121bb329e1bb061f9e5efb848764',1,'IRHitachiAc424::send()'],['../classIRHitachiAc3.html#ab95fd527a4841c44d6e91c8b4afee8b4',1,'IRHitachiAc3::send()'],['../classIRHitachiAc344.html#ab11947f9c2a7272d35d75ce3ddbe6581',1,'IRHitachiAc344::send()'],['../classIRKelvinatorAC.html#aa55fbfefbaca1acf5bc9ba796bea8464',1,'IRKelvinatorAC::send()'],['../classIRLgAc.html#aea85c840161b48f2e8d31e7e6e7da532',1,'IRLgAc::send()'],['../classIRMideaAC.html#af66b9f76ad794450a0a7eace4bb59300',1,'IRMideaAC::send()'],['../classIRMitsubishiAC.html#a2467ad33d88af8f6244e7cd0620e012e',1,'IRMitsubishiAC::send()'],['../classIRMitsubishi136.html#a41295e551acf428e76b9b404af2381ad',1,'IRMitsubishi136::send()'],['../classIRMitsubishi112.html#a8f813da813b1a281654147ada2e63eba',1,'IRMitsubishi112::send()'],['../classIRMitsubishiHeavy152Ac.html#acc53c5c136c6987c420d48bddcf9b2da',1,'IRMitsubishiHeavy152Ac::send()'],['../classIRMitsubishiHeavy88Ac.html#a707cb3ec3e3c18bedeb12205580d5048',1,'IRMitsubishiHeavy88Ac::send()'],['../classIRNeoclimaAc.html#a2220bbb1d928b8f6490cd43b702ef430',1,'IRNeoclimaAc::send()'],['../classIRPanasonicAc.html#a778420ebe52aa6422ba5633ce91676df',1,'IRPanasonicAc::send()'],['../classIRPanasonicAc32.html#aae5867f05744ebcac4720b31b6fc9021',1,'IRPanasonicAc32::send()'],['../classIRSamsungAc.html#a8128429fcb1828a049784d832cafc9fe',1,'IRSamsungAc::send()'],['../classIRSanyoAc.html#aa8be9e2e0c63646ce39425c9e58e4ca1',1,'IRSanyoAc::send()'],['../classIRSharpAc.html#a829872744bf9fef51dccd89584ddffe6',1,'IRSharpAc::send()'],['../classIRTcl112Ac.html#a9aa8c67e167a3d241157306d0668ff15',1,'IRTcl112Ac::send()'],['../classIRTechnibelAc.html#ad3a94fdd7b718d8d4ba3ffdb84cf0ebb',1,'IRTechnibelAc::send()'],['../classIRTecoAc.html#ad5785e93e8c0c95a8618b0e371adaa79',1,'IRTecoAc::send()'],['../classIRToshibaAC.html#a14b155d3a20fb9c127eb7f3fe1fd16cd',1,'IRToshibaAC::send()'],['../classIRTranscoldAc.html#ad9807a5c56b9797e4d9ef2fe4b95d3bf',1,'IRTranscoldAc::send()'],['../classIRTrotecESP.html#add228d50195d7b9b43346a90bf959512',1,'IRTrotecESP::send()'],['../classIRTrumaAc.html#ac429be41669c7ea395a4f57b99f90642',1,'IRTrumaAc::send()'],['../classIRVestelAc.html#a606497754b381e70d13ddef5643c9d0b',1,'IRVestelAc::send()'],['../classIRVoltas.html#ab06af0578b5137c53af6e641bfcbee9a',1,'IRVoltas::send()'],['../classIRWhirlpoolAc.html#a0c043b3d7cc993940941351e6c63b5cc',1,'IRWhirlpoolAc::send()'],['../classIRsend.html#a204eedc3ad182fb2f40c42ef58f78cfc',1,'IRsend::send(const decode_type_t type, const uint64_t data, const uint16_t nbits, const uint16_t repeat=kNoRepeat)'],['../classIRsend.html#ac684c209ea8722f0a377070752df0040',1,'IRsend::send(const decode_type_t type, const uint8_t *state, const uint16_t nbytes)']]], - ['sendac_4296',['sendAc',['../classIRac.html#a0cea80b7bab92c9dc4f18c61f5762130',1,'IRac::sendAc(void)'],['../classIRac.html#aa33c42968acafc5cf479574483f94ea9',1,'IRac::sendAc(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)'],['../classIRac.html#ad60fbe1488efe2d02307d81b090b3b72',1,'IRac::sendAc(const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)']]], - ['sendairwell_4297',['sendAirwell',['../classIRsend.html#a5b180d3845b45af38a19b72e6fa8e0c0',1,'IRsend']]], - ['sendaiwarct501_4298',['sendAiwaRCT501',['../classIRsend.html#ad39a4b13ad2e8500c95db49265e7c771',1,'IRsend']]], - ['sendamcor_4299',['sendAmcor',['../classIRsend.html#acd64b100eb155f90451d467188a83e92',1,'IRsend']]], - ['sendargo_4300',['sendArgo',['../classIRsend.html#a59668b767e4ad4966fe0bc259c3bd34f',1,'IRsend']]], - ['sendcarrierac_4301',['sendCarrierAC',['../classIRsend.html#a9e859a8b5eaea2e64978c8f93b78d159',1,'IRsend']]], - ['sendcarrierac40_4302',['sendCarrierAC40',['../classIRsend.html#a4342b775777d2ff9371f48aa39ad9b69',1,'IRsend']]], - ['sendcarrierac64_4303',['sendCarrierAC64',['../classIRsend.html#abf755688d87fcef5aee86c6a2c89e7c4',1,'IRsend']]], - ['sendcoolix_4304',['sendCOOLIX',['../classIRsend.html#a088af5f0d76965c61fe5716f7b8f2b61',1,'IRsend']]], - ['sendcoronaac_4305',['sendCoronaAc',['../classIRsend.html#a81f82b8248b324799a48a7685d62aaa5',1,'IRsend']]], - ['senddaikin_4306',['sendDaikin',['../classIRsend.html#a3010546144b5ca3b3c94f5881050dbd0',1,'IRsend']]], - ['senddaikin128_4307',['sendDaikin128',['../classIRsend.html#a72a41a704d48750c144c6467ae9a1430',1,'IRsend']]], - ['senddaikin152_4308',['sendDaikin152',['../classIRsend.html#a4ad420eb86e0ae38b12e983f7eaa912c',1,'IRsend']]], - ['senddaikin160_4309',['sendDaikin160',['../classIRsend.html#ab144a86def38f9f5c98701742683c004',1,'IRsend']]], - ['senddaikin176_4310',['sendDaikin176',['../classIRsend.html#ac4b5bcb95d3aff70b2f84074177e9e92',1,'IRsend']]], - ['senddaikin2_4311',['sendDaikin2',['../classIRsend.html#a34262e579cbb6634459bc09c5b15dfa0',1,'IRsend']]], - ['senddaikin216_4312',['sendDaikin216',['../classIRsend.html#aa99bfdaa71ff5bf088faaa17d304f45d',1,'IRsend']]], - ['senddaikin64_4313',['sendDaikin64',['../classIRsend.html#aa403d2192a6eb57910e6f84695475b27',1,'IRsend']]], - ['senddata_4314',['sendData',['../classIRsend.html#a4f8cd77dab7ce6c406029fe87674858f',1,'IRsend']]], - ['senddelonghiac_4315',['sendDelonghiAc',['../classIRsend.html#a35dc18f9abbffa8da40816a8a9df1093',1,'IRsend']]], - ['senddenon_4316',['sendDenon',['../classIRsend.html#a2618e000bf91cf1585329308a078653a',1,'IRsend']]], - ['senddish_4317',['sendDISH',['../classIRsend.html#ac7a72d61af219d983409911bdc1769b8',1,'IRsend']]], - ['senddoshisha_4318',['sendDoshisha',['../classIRsend.html#a3a9a8247e470975137b37f474bb97639',1,'IRsend']]], - ['sendecoclim_4319',['sendEcoclim',['../classIRsend.html#a63f0d3f7ed8433c7dd18114d50e5d076',1,'IRsend']]], - ['sendelectraac_4320',['sendElectraAC',['../classIRsend.html#a52526c4e7bc4402e57ecf81e0047d49c',1,'IRsend']]], - ['sendelitescreens_4321',['sendElitescreens',['../classIRsend.html#a37c6fac0e447fd9e4d3dc3ca23f8936f',1,'IRsend']]], - ['sendepson_4322',['sendEpson',['../classIRsend.html#a063168fd82f6a88cca7253b42b9c0b28',1,'IRsend']]], - ['sendextended_4323',['sendExtended',['../classIRSamsungAc.html#a16a8dbd8f3fd34a6e681125b276acfd9',1,'IRSamsungAc']]], - ['sendfujitsuac_4324',['sendFujitsuAC',['../classIRsend.html#a1a3d3f83d0b7a59ff5510b038f658eb6',1,'IRsend']]], - ['sendgc_4325',['sendGC',['../classIRsend.html#acf987a501326d9c945cd8dbeb0806e17',1,'IRsend']]], - ['sendgeneric_4326',['sendGeneric',['../classIRsend.html#a5215fd797dfd490816f31bb99b38c273',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)'],['../classIRsend.html#aaace48306af9c020c18848db1a05e641',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint32_t mesgtime, const uint64_t data, const uint16_t nbits, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)'],['../classIRsend.html#a4f5ad649827692b4b42d15b45c7f684b',1,'IRsend::sendGeneric(const uint16_t headermark, const uint32_t headerspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t gap, const uint8_t *dataptr, const uint16_t nbytes, const uint16_t frequency, const bool MSBfirst, const uint16_t repeat, const uint8_t dutycycle)']]], - ['sendgicable_4327',['sendGICable',['../classIRsend.html#a61dd16bc150473bbfd998dada72b205f',1,'IRsend']]], - ['sendgoodweather_4328',['sendGoodweather',['../classIRsend.html#a8e2d98ae5c39ee07a61f08facecbaa1e',1,'IRsend']]], - ['sendgree_4329',['sendGree',['../classIRsend.html#aca81ea348ceb6b0c9e62073b57bc0b17',1,'IRsend::sendGree(const uint64_t data, const uint16_t nbits=kGreeBits, const uint16_t repeat=kGreeDefaultRepeat)'],['../classIRsend.html#af788e7d9a2ad2483313434f9b5196753',1,'IRsend::sendGree(const uint8_t data[], const uint16_t nbytes=kGreeStateLength, const uint16_t repeat=kGreeDefaultRepeat)']]], - ['sendhaierac_4330',['sendHaierAC',['../classIRsend.html#a6b4b9144d56dda302f5b321f1c5017ff',1,'IRsend']]], - ['sendhaieracyrw02_4331',['sendHaierACYRW02',['../classIRsend.html#a6aa1c1a6880872c87a46e4e0ead5d9b0',1,'IRsend']]], - ['sendhitachiac_4332',['sendHitachiAC',['../classIRsend.html#a8e6079b8b1b69ad7d7f8d05c492becbe',1,'IRsend']]], - ['sendhitachiac1_4333',['sendHitachiAC1',['../classIRsend.html#a5be9a87ce052e4f056766919247e0b22',1,'IRsend']]], - ['sendhitachiac2_4334',['sendHitachiAC2',['../classIRsend.html#a451b1913608a4ba8c26d9af8c85d16f1',1,'IRsend']]], - ['sendhitachiac3_4335',['sendHitachiAc3',['../classIRsend.html#aec7e67f4292622521b5a0a8cfdd21d84',1,'IRsend']]], - ['sendhitachiac344_4336',['sendHitachiAc344',['../classIRsend.html#a5fb28d54f2832651d992450673d05c01',1,'IRsend']]], - ['sendhitachiac424_4337',['sendHitachiAc424',['../classIRsend.html#a2a9676de30bb868b313cc9c30025f790',1,'IRsend']]], - ['sendinax_4338',['sendInax',['../classIRsend.html#a5fa5ff62276d9d680fb1255cc8b99eec',1,'IRsend']]], - ['sendjvc_4339',['sendJVC',['../classIRsend.html#aaa10c899768a5b4cdb1a7913d06141ca',1,'IRsend']]], - ['sendkelvinator_4340',['sendKelvinator',['../classIRsend.html#a8cba9df982fc91f895196d61d2e65b0e',1,'IRsend']]], - ['sendlasertag_4341',['sendLasertag',['../classIRsend.html#a55a79f9727590044751f291a4df83892',1,'IRsend']]], - ['sendlegopf_4342',['sendLegoPf',['../classIRsend.html#a4e38273aeacf01873a013c02d41a44e4',1,'IRsend']]], - ['sendlg_4343',['sendLG',['../classIRsend.html#a079a84c82f360d6d55fde5c27634f51c',1,'IRsend']]], - ['sendlg2_4344',['sendLG2',['../classIRsend.html#a5b6be1ceac8a4bc4ef55dc12eb060531',1,'IRsend']]], - ['sendlutron_4345',['sendLutron',['../classIRsend.html#a85f2a98255d3af7b7407c082ea7b7c16',1,'IRsend']]], - ['sendmagiquest_4346',['sendMagiQuest',['../classIRsend.html#af1d0e9ec0f735fc5fb9011d4f4cb8327',1,'IRsend']]], - ['sendmanchester_4347',['sendManchester',['../classIRsend.html#a7862231cbb1d50f42996c25e2f05b93e',1,'IRsend']]], - ['sendmanchesterdata_4348',['sendManchesterData',['../classIRsend.html#aa76aa33785827c1278eb57d1c15236f8',1,'IRsend']]], - ['sendmetz_4349',['sendMetz',['../classIRsend.html#ab98023283eca787f7bb8bcb47f79ed01',1,'IRsend']]], - ['sendmidea_4350',['sendMidea',['../classIRsend.html#a37d91b3a77b36509abdc53e2fec20a67',1,'IRsend']]], - ['sendmidea24_4351',['sendMidea24',['../classIRsend.html#a103d79e8df7954e9ab6284fa9f3daf02',1,'IRsend']]], - ['sendmilestag2_4352',['sendMilestag2',['../classIRsend.html#a1a506824c7668e58f35351ad400051b1',1,'IRsend']]], - ['sendmirage_4353',['sendMirage',['../classIRsend.html#a03427bab21dd5a04121c652103c2ef97',1,'IRsend']]], - ['sendmitsubishi_4354',['sendMitsubishi',['../classIRsend.html#a59e8941a25c5c0bbc839fba5b1a22813',1,'IRsend']]], - ['sendmitsubishi112_4355',['sendMitsubishi112',['../classIRsend.html#a0a55e688c6aad015494168f25eb337b5',1,'IRsend']]], - ['sendmitsubishi136_4356',['sendMitsubishi136',['../classIRsend.html#a988a8b7dda3563977d537d6ac448ebc8',1,'IRsend']]], - ['sendmitsubishi2_4357',['sendMitsubishi2',['../classIRsend.html#ac54e50a6819f5c39e060891f1f6ea0f2',1,'IRsend']]], - ['sendmitsubishiac_4358',['sendMitsubishiAC',['../classIRsend.html#a3600527a82f9f22387c9f16ae51fb06f',1,'IRsend']]], - ['sendmitsubishiheavy152_4359',['sendMitsubishiHeavy152',['../classIRsend.html#ae1cffc4882c63f192c231397d19a4032',1,'IRsend']]], - ['sendmitsubishiheavy88_4360',['sendMitsubishiHeavy88',['../classIRsend.html#afaf4fd0c3dabd1bd6f8fe421294c5063',1,'IRsend']]], - ['sendmultibrackets_4361',['sendMultibrackets',['../classIRsend.html#a9026d42480b85270e560e122b8be3b6c',1,'IRsend']]], - ['sendmwm_4362',['sendMWM',['../classIRsend.html#a98301801daf929ec8ce022987ae394f2',1,'IRsend']]], - ['sendnec_4363',['sendNEC',['../classIRsend.html#a324c9e455c0bae51ebe9bc07e915c043',1,'IRsend']]], - ['sendneoclima_4364',['sendNeoclima',['../classIRsend.html#a71e1b5e780851210465bbf061b9c095b',1,'IRsend']]], - ['sendnikai_4365',['sendNikai',['../classIRsend.html#a693e6616b81509cf27d1345c140acc96',1,'IRsend']]], - ['sendoff_4366',['sendOff',['../classIRSamsungAc.html#a96e2ae87f3ffcf1ad812f256f31e4898',1,'IRSamsungAc']]], - ['sendon_4367',['sendOn',['../classIRSamsungAc.html#a7e6980c829dfd143d4d19abaf5d65678',1,'IRSamsungAc']]], - ['sendpanasonic_4368',['sendPanasonic',['../classIRsend.html#a92192475f89b19cfdf7fd0416a263145',1,'IRsend']]], - ['sendpanasonic64_4369',['sendPanasonic64',['../classIRsend.html#adc4fd287f3546f7ff0b67e177a42b560',1,'IRsend']]], - ['sendpanasonicac_4370',['sendPanasonicAC',['../classIRsend.html#a10a3c387a328dbb11733a251f4db7614',1,'IRsend']]], - ['sendpanasonicac32_4371',['sendPanasonicAC32',['../classIRsend.html#af281c7e8e09bb547bf7236dfd8b42154',1,'IRsend']]], - ['sendpioneer_4372',['sendPioneer',['../classIRsend.html#a11f099f3768a659d1f996589cea8a313',1,'IRsend']]], - ['sendpronto_4373',['sendPronto',['../classIRsend.html#a0b349351e2ba19f87e6b01cde7e67c49',1,'IRsend']]], - ['sendraw_4374',['sendRaw',['../classIRsend.html#a2b9b84f828918f933bd1764d113b53f8',1,'IRsend']]], - ['sendrc5_4375',['sendRC5',['../classIRsend.html#a2bd2ccb27ecd57e14b36f76d82af308a',1,'IRsend']]], - ['sendrc6_4376',['sendRC6',['../classIRsend.html#a2192a95e0d162f9b1775fc2a47f65c37',1,'IRsend']]], - ['sendrcmm_4377',['sendRCMM',['../classIRsend.html#a3cafe475a58234a0d3aa655a2464be75',1,'IRsend']]], - ['sendsamsung_4378',['sendSAMSUNG',['../classIRsend.html#a5252dd159aad713c099de6728ac56d81',1,'IRsend']]], - ['sendsamsung36_4379',['sendSamsung36',['../classIRsend.html#ab5dcd4ec5ddb0b0351870ddf54e5ba66',1,'IRsend']]], - ['sendsamsungac_4380',['sendSamsungAC',['../classIRsend.html#a2773d251da1d35b964810c8cc4cb438b',1,'IRsend']]], - ['sendsanyoac_4381',['sendSanyoAc',['../classIRsend.html#ab606c11f7bdc726289ba4dadf8bd9da6',1,'IRsend']]], - ['sendsanyolc7461_4382',['sendSanyoLC7461',['../classIRsend.html#aa23e51a97a0ec1907d22623fed6dd223',1,'IRsend']]], - ['sendsharp_4383',['sendSharp',['../classIRsend.html#a801ae78ac5a72116c566c4ac5f99c6bd',1,'IRsend']]], - ['sendsharpac_4384',['sendSharpAc',['../classIRsend.html#a438e4c9d50e62da7d772d8d638728213',1,'IRsend']]], - ['sendsharpraw_4385',['sendSharpRaw',['../classIRsend.html#aa1f12fd537ca8c21c183ee41d17a3afc',1,'IRsend']]], - ['sendsherwood_4386',['sendSherwood',['../classIRsend.html#afb3a89acfb868c92a997a3000e70c6e8',1,'IRsend']]], - ['sendsony_4387',['sendSony',['../classIRsend.html#a02bb64503474a0841c51664cf4668d85',1,'IRsend']]], - ['sendsony38_4388',['sendSony38',['../classIRsend.html#a558442f49b32453f0fb987c29e1ec6d3',1,'IRsend']]], - ['sendsymphony_4389',['sendSymphony',['../classIRsend.html#a1f1d5a30660ab0061f64d559d4916d4e',1,'IRsend']]], - ['sendtcl112ac_4390',['sendTcl112Ac',['../classIRsend.html#a2dedce2841e4a6445a98f03393fce823',1,'IRsend']]], - ['sendtechnibelac_4391',['sendTechnibelAc',['../classIRsend.html#afcc65332acb4b5a1edc623194cc2ac7e',1,'IRsend']]], - ['sendteco_4392',['sendTeco',['../classIRsend.html#ac6300f977fe94119813481ba682ce33f',1,'IRsend']]], - ['sendtoshibaac_4393',['sendToshibaAC',['../classIRsend.html#a5554dd976b56148e214dca9891d2810c',1,'IRsend']]], - ['sendtranscold_4394',['sendTranscold',['../classIRsend.html#aba4e3420174de6b5538ae91f20d19e21',1,'IRsend']]], - ['sendtrotec_4395',['sendTrotec',['../classIRsend.html#a135796327b5db127473f4d198e663c00',1,'IRsend']]], - ['sendtruma_4396',['sendTruma',['../classIRsend.html#addb8dc185e7d96d3186dad362a6e1445',1,'IRsend']]], - ['sendvestelac_4397',['sendVestelAc',['../classIRsend.html#a129a40f9d344cb0fadfd4cca53ca6b44',1,'IRsend']]], - ['sendvoltas_4398',['sendVoltas',['../classIRsend.html#a3bda5e5e44d2c0e811e9fe3d42b241bf',1,'IRsend']]], - ['sendwhirlpoolac_4399',['sendWhirlpoolAC',['../classIRsend.html#aa440a50000a259072f93ad6c0e42ec22',1,'IRsend']]], - ['sendwhynter_4400',['sendWhynter',['../classIRsend.html#a07188366deed3dd902cba80a711cf220',1,'IRsend']]], - ['sendxmp_4401',['sendXmp',['../classIRsend.html#a79e650dedb19f37601600c8cb16e4c8e',1,'IRsend']]], - ['sendzepeal_4402',['sendZepeal',['../classIRsend.html#a9bcba8bbac41d679b5b930e67d3e1b7f',1,'IRsend']]], - ['serialprintuint64_4403',['serialPrintUint64',['../IRutils_8cpp.html#ad2b0a4b9a1a7fca3d5f5afc14b682433',1,'serialPrintUint64(uint64_t input, uint8_t base): IRutils.cpp'],['../IRutils_8h.html#a315d5f05fb572564025bc9ce9b820243',1,'serialPrintUint64(uint64_t input, uint8_t base=10): IRutils.cpp']]], - ['set10cheat_4404',['set10CHeat',['../classIRFujitsuAC.html#a0352fca45ddb7b05277cd3fd66b5a6ca',1,'IRFujitsuAC']]], - ['set3d_4405',['set3D',['../classIRMitsubishiHeavy152Ac.html#ab22654d492a4b0e82efcd0c96fc9bbe3',1,'IRMitsubishiHeavy152Ac::set3D()'],['../classIRMitsubishiHeavy88Ac.html#ae0b7eac743a8de6852722f067e010ba7',1,'IRMitsubishiHeavy88Ac::set3D()']]], - ['set8cheat_4406',['set8CHeat',['../classIRNeoclimaAc.html#a3176c5fe3251bd6a31a3a0ddc2c294be',1,'IRNeoclimaAc']]], - ['setauto_4407',['setAuto',['../classIRVestelAc.html#a2509eed2e0d7b23595bbe6dd7df17d74',1,'IRVestelAc']]], - ['setbeep_4408',['setBeep',['../classIRDaikin2.html#a4c0588887a45403a0a9f2cf95f847889',1,'IRDaikin2::setBeep()'],['../classIRSamsungAc.html#a092ccbea031dd4be747076530117649d',1,'IRSamsungAc::setBeep()'],['../classIRSanyoAc.html#a420e2cc1f1d2590e7582f3f3a3b5c536',1,'IRSanyoAc::setBeep()']]], - ['setbit_4409',['setBit',['../namespaceirutils.html#a316301577d2ff338bfba6605df2cc46b',1,'irutils::setBit(const uint64_t data, const uint8_t position, const bool on, const uint8_t size)'],['../namespaceirutils.html#a2e9e858b490fa3328b4c5bd01adedb8c',1,'irutils::setBit(const uint8_t data, const uint8_t position, const bool on)'],['../namespaceirutils.html#ac1b3de6e733d9c4d614a8239f5bd3220',1,'irutils::setBit(uint8_t *const data, const uint8_t position, const bool on)'],['../namespaceirutils.html#a86bbcf05c1601712b1d587b87035f09b',1,'irutils::setBit(uint32_t *const data, const uint8_t position, const bool on)'],['../namespaceirutils.html#a9e7814e2274f02df0dac0106c293c487',1,'irutils::setBit(uint64_t *const data, const uint8_t position, const bool on)']]], - ['setbits_4410',['setBits',['../namespaceirutils.html#ab4f5e3eb26e111909ddc93a8b018ba78',1,'irutils::setBits(uint8_t *const dst, const uint8_t offset, const uint8_t nbits, const uint8_t data)'],['../namespaceirutils.html#a3fd8b18a76f0ae8f730b4de55fc9486e',1,'irutils::setBits(uint32_t *const dst, const uint8_t offset, const uint8_t nbits, const uint32_t data)'],['../namespaceirutils.html#a4dfb0984a9ea38602805987a7845839c',1,'irutils::setBits(uint64_t *const dst, const uint8_t offset, const uint8_t nbits, const uint64_t data)']]], - ['setboost_4411',['setBoost',['../classIRDelonghiAc.html#a827d1e43e9252657147226aa3f8e4eb8',1,'IRDelonghiAc']]], - ['setbreeze_4412',['setBreeze',['../classIRSamsungAc.html#a310a73f15a0274fbaf15b981abaae592',1,'IRSamsungAc']]], - ['setbutton_4413',['setButton',['../classIRHaierACYRW02.html#aa0f1561e2446f6231f722581f5bae34d',1,'IRHaierACYRW02::setButton()'],['../classIRHitachiAc424.html#af4ded7ea8aa94271d5135eebd3bb80a8',1,'IRHitachiAc424::setButton()'],['../classIRNeoclimaAc.html#a7e2e6e646411b4f5ea3c1ce1e944581c',1,'IRNeoclimaAc::setButton()']]], - ['setcelsius_4414',['setCelsius',['../classIRFujitsuAC.html#a29050c9b6174ac038d85ef8983fe8940',1,'IRFujitsuAC']]], - ['setclean_4415',['setClean',['../classIRCoolixAC.html#a4ca2c23f44ae56d80dcb7a7424ec17b3',1,'IRCoolixAC::setClean()'],['../classIRDaikin2.html#a21e09b867710a225d5cf53006f723326',1,'IRDaikin2::setClean()'],['../classIRElectraAc.html#a4aa44fc40196067469dfa8a722e33115',1,'IRElectraAc::setClean()'],['../classIRFujitsuAC.html#a7f6f18ea39bf28717cb65ff348b1b2f5',1,'IRFujitsuAC::setClean()'],['../classIRMitsubishiHeavy152Ac.html#a11678e7eb906414770938f6efce266f1',1,'IRMitsubishiHeavy152Ac::setClean()'],['../classIRMitsubishiHeavy88Ac.html#a65968304e4aaf025dfefc49d5d777cbd',1,'IRMitsubishiHeavy88Ac::setClean()'],['../classIRSamsungAc.html#a911ca57dfb0e6787cba330e8d49b2496',1,'IRSamsungAc::setClean()'],['../classIRSharpAc.html#ace6e7b98496a594031809fe8a535c429',1,'IRSharpAc::setClean()']]], - ['setclock_4416',['setClock',['../classIRDaikin128.html#aa9928ac010ec79ddab4f551eedf2f5d9',1,'IRDaikin128::setClock()'],['../classIRDaikin64.html#a655f1cec5e28f79e5718573678c535ec',1,'IRDaikin64::setClock()'],['../classIREcoclimAc.html#af81295d2878131c0302902b9a1f80db2',1,'IREcoclimAc::setClock()'],['../classIRMitsubishiAC.html#a7abe34adf36bdd1a65a17f56ee8af1f6',1,'IRMitsubishiAC::setClock()'],['../classIRPanasonicAc.html#a3f76c6aca94f52c227c2e259512fd101',1,'IRPanasonicAc::setClock()'],['../classIRWhirlpoolAc.html#aab09aae7de733414bf480c3df22b83f8',1,'IRWhirlpoolAc::setClock()']]], - ['setcmd_4417',['setCmd',['../classIRFujitsuAC.html#a7579944c11b3d31bb069303926307617',1,'IRFujitsuAC']]], - ['setcomfort_4418',['setComfort',['../classIRDaikinESP.html#aaa15c0be7ffb8e845a03d193583a58d1',1,'IRDaikinESP::setComfort()'],['../classIRDaikin152.html#a95de2dc0a90fe4212cb60973b9430486',1,'IRDaikin152::setComfort()']]], - ['setcommand_4419',['setCommand',['../classIRGoodweatherAc.html#a4e266f42b7a82c49208e2acc7813e07b',1,'IRGoodweatherAc::setCommand()'],['../classIRHaierAC.html#ade34c951e72a794c2ff7fa0d1595d68f',1,'IRHaierAC::setCommand()'],['../classIRWhirlpoolAc.html#aaea26b1388489dff70a98fde1e6185be',1,'IRWhirlpoolAc::setCommand()']]], - ['setcurrentday_4420',['setCurrentDay',['../classIRDaikinESP.html#a5465b9857fd73b82362f766368717d16',1,'IRDaikinESP']]], - ['setcurrenttime_4421',['setCurrentTime',['../classIRDaikinESP.html#ae6559268982ae0968358a885c7dbba6e',1,'IRDaikinESP::setCurrentTime()'],['../classIRDaikin2.html#a8b32b1b9a87c9b671af6aeedb709d520',1,'IRDaikin2::setCurrentTime()']]], - ['setcurrtime_4422',['setCurrTime',['../classIRHaierAC.html#a53500ebdec058d27396e5906a572fe15',1,'IRHaierAC']]], - ['setdisplay_4423',['setDisplay',['../classIRSamsungAc.html#ad20199bed3a01208ec694b9d4eb7ef98',1,'IRSamsungAc']]], - ['setdisplaytempsource_4424',['setDisplayTempSource',['../classIRGreeAC.html#a1d073c31ea169d0e5cf33c8592982035',1,'IRGreeAC']]], - ['setecono_4425',['setEcono',['../classIRCoronaAc.html#abb5624317fff60674bed410be3a3fa52',1,'IRCoronaAc::setEcono()'],['../classIRDaikinESP.html#a12129aedd6320522a9b6e811e347089c',1,'IRDaikinESP::setEcono()'],['../classIRDaikin2.html#a42a44a6cefa6bf6f45148d39c216ebc0',1,'IRDaikin2::setEcono()'],['../classIRDaikin128.html#a07fb5289ee476e0335fec4845254b7ce',1,'IRDaikin128::setEcono()'],['../classIRDaikin152.html#a8062d16f7aefb7586e3d3bdfea8755b4',1,'IRDaikin152::setEcono()'],['../classIRMitsubishiHeavy152Ac.html#ab3964219ee3c0c5112bb38c892a01784',1,'IRMitsubishiHeavy152Ac::setEcono()'],['../classIRMitsubishiHeavy88Ac.html#a7612448f1cceaa6aeee1697f51adaf43',1,'IRMitsubishiHeavy88Ac::setEcono()'],['../classIRNeoclimaAc.html#af6748510814a39756263916913890844',1,'IRNeoclimaAc::setEcono()'],['../classIRTcl112Ac.html#a48ac7acfa8fed8e9da39907282f4f377',1,'IRTcl112Ac::setEcono()'],['../classIRToshibaAC.html#a780040755a8061107f655e060f2da206',1,'IRToshibaAC::setEcono()'],['../classIRVoltas.html#a0e9ebffcb4a62afc68722e8abf9f9adb',1,'IRVoltas::setEcono()']]], - ['seteconotoggle_4426',['setEconoToggle',['../classIRMideaAC.html#aef83db5c3d13273541039d9e03e3230e',1,'IRMideaAC::setEconoToggle()'],['../classIRSharpAc.html#ae3495676b8bffecba5c56fbf1ab9ee4d',1,'IRSharpAc::setEconoToggle()']]], - ['setenablesensortemp_4427',['setEnableSensorTemp',['../classIRMideaAC.html#a89eede8ecf61bc05a7c53e49706361a2',1,'IRMideaAC']]], - ['seteye_4428',['setEye',['../classIRDaikin2.html#a5ba8e5d5dd4aba45a90de1d450a7a88b',1,'IRDaikin2::setEye()'],['../classIRNeoclimaAc.html#aaf433cab785db382c55a420e68e7d7ec',1,'IRNeoclimaAc::setEye()']]], - ['seteyeauto_4429',['setEyeAuto',['../classIRDaikin2.html#a975c2fdb261d6d2b6c8e196fbd074899',1,'IRDaikin2']]], - ['setfan_4430',['setFan',['../classIRAirwellAc.html#a3b3acc1670d7057e7c36fc2bd0a71232',1,'IRAirwellAc::setFan()'],['../classIRAmcorAc.html#acf26fc65363e2734e4dc6eb562812553',1,'IRAmcorAc::setFan()'],['../classIRArgoAC.html#a8144f003628e128ec6630aef49ed5cb5',1,'IRArgoAC::setFan()'],['../classIRCarrierAc64.html#a312027468b508e9d38dd9e23ee99f9e4',1,'IRCarrierAc64::setFan()'],['../classIRCoolixAC.html#aff4189cb1000c6db7d88624fbadbe0cb',1,'IRCoolixAC::setFan()'],['../classIRCoronaAc.html#aa4da12502bf85438846bdde56391ee5c',1,'IRCoronaAc::setFan()'],['../classIRDaikinESP.html#a1f191f45e473482a86aad9a1c879e083',1,'IRDaikinESP::setFan()'],['../classIRDaikin2.html#af9f3ddbdd1f1d5d99c84846b73c5daa1',1,'IRDaikin2::setFan()'],['../classIRDaikin216.html#a8fadfb1e61deca74a2d1b9c1d5ae62e1',1,'IRDaikin216::setFan()'],['../classIRDaikin160.html#a7f507c64dc7a9fa1e9391e9e8473af1b',1,'IRDaikin160::setFan()'],['../classIRDaikin176.html#a050a9943dc7d8289472e6b9dbdcb06c1',1,'IRDaikin176::setFan()'],['../classIRDaikin128.html#a0495834250e97e7831e9906ab548fe44',1,'IRDaikin128::setFan()'],['../classIRDaikin152.html#a385a4f65dfccd0a9e94be06ae60c5343',1,'IRDaikin152::setFan()'],['../classIRDaikin64.html#af39206f90b99fd5ee340923b196368b8',1,'IRDaikin64::setFan()'],['../classIRDelonghiAc.html#a440f1e0efa18c6b1a8e18e0a97fbfb79',1,'IRDelonghiAc::setFan()'],['../classIREcoclimAc.html#a5760f762c04f950566b51b34bee2b013',1,'IREcoclimAc::setFan()'],['../classIRElectraAc.html#aa338ce18cafaf9c7b9aa3385e681bbe7',1,'IRElectraAc::setFan()'],['../classIRGoodweatherAc.html#af8cf9ba59af548677e586cd59e8a6cc2',1,'IRGoodweatherAc::setFan()'],['../classIRGreeAC.html#a9bb570e71df5002298505d49473e6bac',1,'IRGreeAC::setFan()'],['../classIRHaierAC.html#a42ee1c5889f07bf7615c8f853bca2261',1,'IRHaierAC::setFan()'],['../classIRHaierACYRW02.html#ae9c3a7bffc08d9d5204616823f709889',1,'IRHaierACYRW02::setFan()'],['../classIRHitachiAc.html#a0760b07502b976880ee8499dc6fa61ff',1,'IRHitachiAc::setFan()'],['../classIRHitachiAc1.html#a7294dc1324877d4a64f7b4373d97d745',1,'IRHitachiAc1::setFan()'],['../classIRHitachiAc424.html#afd69bcff56224f39af92fc2d334b67bb',1,'IRHitachiAc424::setFan()'],['../classIRKelvinatorAC.html#af08e94be9699983c0087c9b059aad319',1,'IRKelvinatorAC::setFan()'],['../classIRLgAc.html#a0f1901a21ffb93641d3481417d74bb4e',1,'IRLgAc::setFan()'],['../classIRMideaAC.html#a546eeca4eea015899a5ad9f5d1c6fafb',1,'IRMideaAC::setFan()'],['../classIRMitsubishiAC.html#a4e88e50b2eddd0233aade5c1bf7819f1',1,'IRMitsubishiAC::setFan()'],['../classIRMitsubishi136.html#a2aa62126614f734ec3d1b7b3cb653e9e',1,'IRMitsubishi136::setFan()'],['../classIRMitsubishi112.html#ab681e78572c869a8c57079a660fe1505',1,'IRMitsubishi112::setFan()'],['../classIRMitsubishiHeavy152Ac.html#ac8d8eceba935aa626cb229d1c41081bb',1,'IRMitsubishiHeavy152Ac::setFan()'],['../classIRMitsubishiHeavy88Ac.html#a4f8c934a82091547c36da512329e76d7',1,'IRMitsubishiHeavy88Ac::setFan()'],['../classIRNeoclimaAc.html#a8db9d2d446e8614b2fc4583a454d7cee',1,'IRNeoclimaAc::setFan()'],['../classIRPanasonicAc.html#a8d77292226f55601c30ee53252ba83cd',1,'IRPanasonicAc::setFan()'],['../classIRPanasonicAc32.html#aaa15347ebf0eb6db7abb64553f3eb3d7',1,'IRPanasonicAc32::setFan()'],['../classIRSamsungAc.html#a6c7571e14fe6629348273a2b49a0a824',1,'IRSamsungAc::setFan()'],['../classIRSanyoAc.html#a400ec91300c0bfa5dd329dc0414d078b',1,'IRSanyoAc::setFan()'],['../classIRSharpAc.html#a5138068f8ba4c51939ff3bb14f0aae45',1,'IRSharpAc::setFan()'],['../classIRTcl112Ac.html#a0dab8ad6675c4ec122d0d7e28a557cba',1,'IRTcl112Ac::setFan()'],['../classIRTechnibelAc.html#a885f272cfa47004dfd8d19a6e251a337',1,'IRTechnibelAc::setFan()'],['../classIRTecoAc.html#afda9a33ca450568f968217bedc9ad7f2',1,'IRTecoAc::setFan()'],['../classIRToshibaAC.html#a020ba3e95c607f52ce091193fc5825fc',1,'IRToshibaAC::setFan()'],['../classIRTranscoldAc.html#a444593321998f04b4ef5e9c9ceb5b511',1,'IRTranscoldAc::setFan()'],['../classIRTrotecESP.html#a01b26cb6e671298f8a77a54dafdb27e3',1,'IRTrotecESP::setFan()'],['../classIRTrumaAc.html#a6e650fb764693da7ab1b863b43a667e1',1,'IRTrumaAc::setFan()'],['../classIRVestelAc.html#af53dfd0a0372c878b6ba2ca1cfc21ccd',1,'IRVestelAc::setFan()'],['../classIRVoltas.html#a013f93d588f57b8e62d059984fbf6173',1,'IRVoltas::setFan()'],['../classIRWhirlpoolAc.html#a8da28ee25fdc91d55a9f6ab5dab3af81',1,'IRWhirlpoolAc::setFan()']]], - ['setfanspeed_4431',['setFanSpeed',['../classIRFujitsuAC.html#af0fc10ec0a606434477cb41c60eb49e5',1,'IRFujitsuAC']]], - ['setfilter_4432',['setFilter',['../classIRFujitsuAC.html#aec0048efe87f60406c76ad6bc3ffbc61',1,'IRFujitsuAC::setFilter()'],['../classIRMitsubishiHeavy152Ac.html#aaf76ac48228d3a7b8490e684407e65b1',1,'IRMitsubishiHeavy152Ac::setFilter()']]], - ['setflap_4433',['setFlap',['../classIRArgoAC.html#a55a6402ffc3fe7fb59775050901416ca',1,'IRArgoAC']]], - ['setfresh_4434',['setFresh',['../classIRNeoclimaAc.html#a6354d8b902ffc1e7c044a61185504404',1,'IRNeoclimaAc']]], - ['setfreshair_4435',['setFreshAir',['../classIRDaikin2.html#a6e0596c7b9f9b43b8d241340ae08e886',1,'IRDaikin2']]], - ['setfreshairhigh_4436',['setFreshAirHigh',['../classIRDaikin2.html#a044471f2298a1942bcc2f859f9459924',1,'IRDaikin2']]], - ['sethealth_4437',['setHealth',['../classIRHaierAC.html#a48c9ae91809d63156eeb3889f2e908f4',1,'IRHaierAC::setHealth()'],['../classIRHaierACYRW02.html#a79673650a2285f029a35ab69edeb0e74',1,'IRHaierACYRW02::setHealth()'],['../classIRTcl112Ac.html#a28ed509977d8642174bc6c9aa97ae1c3',1,'IRTcl112Ac::setHealth()']]], - ['sethold_4438',['setHold',['../classIRNeoclimaAc.html#a2eb4e0a2ff39ceb1b6b571998d91b31e',1,'IRNeoclimaAc']]], - ['sethumid_4439',['setHumid',['../classIRTecoAc.html#a4ab07a7c95f34d3b292926c719aeb303',1,'IRTecoAc']]], - ['setid_4440',['setId',['../classIRFujitsuAC.html#a5f87182e0eea7bba7ed50b9942565c91',1,'IRFujitsuAC']]], - ['setifeel_4441',['setiFeel',['../classIRArgoAC.html#ae59f903855961441b676b7f662602554',1,'IRArgoAC::setiFeel()'],['../classIRGreeAC.html#a68a670156a5e0a91a8a3cf9225263e0b',1,'IRGreeAC::setIFeel()']]], - ['setinvertedstates_4442',['setInvertedStates',['../classIRHitachiAc424.html#ad18528cf83e863b98cb1609eec970ac5',1,'IRHitachiAc424::setInvertedStates()'],['../classIRHitachiAc3.html#af37c710449cd32df4753509749e31cad',1,'IRHitachiAc3::setInvertedStates()']]], - ['setion_4443',['setIon',['../classIRNeoclimaAc.html#a504fc5e371746fda8e7eb7cc0abf137a',1,'IRNeoclimaAc::setIon()'],['../classIRPanasonicAc.html#a5a1c4f5b9eb7a3a1a81a6acd0491c3cd',1,'IRPanasonicAc::setIon()'],['../classIRSamsungAc.html#aeee65ca6d2100635a517077f01053bed',1,'IRSamsungAc::setIon()'],['../classIRSharpAc.html#af6a390362bc5b40eecc6564b16b3379b',1,'IRSharpAc::setIon()'],['../classIRVestelAc.html#acf860da68a15d463dab437a808c9c8c6',1,'IRVestelAc::setIon()']]], - ['setionfilter_4444',['setIonFilter',['../classIRKelvinatorAC.html#a6a219c481ddc21d93028f5c799c25883',1,'IRKelvinatorAC']]], - ['setled_4445',['setLed',['../classIRCoolixAC.html#aee6c7fd3a065ff14425fc02cb2ed8354',1,'IRCoolixAC']]], - ['setlight_4446',['setLight',['../classIRDaikin2.html#a7ecadb3335e9b22729a89b4c41456242',1,'IRDaikin2::setLight()'],['../classIRGoodweatherAc.html#a3f149ff426b236ba9f90659a6daf4a9c',1,'IRGoodweatherAc::setLight()'],['../classIRGreeAC.html#a702bbba38e11bb8f3428ee707fc82311',1,'IRGreeAC::setLight()'],['../classIRKelvinatorAC.html#a870890c2bc8510f8f7351ca21db8d855',1,'IRKelvinatorAC::setLight()'],['../classIRNeoclimaAc.html#a1d7a6ec6d319544bee907a23a1d14084',1,'IRNeoclimaAc::setLight()'],['../classIRTcl112Ac.html#a7dec5b0559f996df8a4fc259ab6012e9',1,'IRTcl112Ac::setLight()'],['../classIRTecoAc.html#a25d97c1e7be31d80a4ffad0026e633d7',1,'IRTecoAc::setLight()'],['../classIRVoltas.html#aedd6ca44b32c6da83da997d7048a82f4',1,'IRVoltas::setLight()'],['../classIRWhirlpoolAc.html#a70b4c0467a7747f9cf9e106af1025771',1,'IRWhirlpoolAc::setLight()']]], - ['setlighttoggle_4447',['setLightToggle',['../classIRDaikin128.html#a6361c789141ccecb729c104e71ddcc41',1,'IRDaikin128::setLightToggle()'],['../classIRElectraAc.html#a15373982641e36f4b68258368700be7d',1,'IRElectraAc::setLightToggle()'],['../classIRMideaAC.html#a84daaa272cedd6f5e74b03a9f3962cba',1,'IRMideaAC::setLightToggle()'],['../classIRSharpAc.html#a7b3b5ef00b94366feb42cc1e4781ae57',1,'IRSharpAc::setLightToggle()']]], - ['setmax_4448',['setMax',['../classIRAmcorAc.html#a1250c6b106378286d9db013296c9b16f',1,'IRAmcorAc::setMax()'],['../classIRArgoAC.html#a909c1f74e9452d0e19fc3ffd28b1b81b',1,'IRArgoAC::setMax()']]], - ['setmode_4449',['setMode',['../classIRAirwellAc.html#a3cbc12fee37b9b2b19aa5455ace9d46e',1,'IRAirwellAc::setMode()'],['../classIRAmcorAc.html#afa9c2d080ed5c4c7bc64eb13a07eab68',1,'IRAmcorAc::setMode()'],['../classIRArgoAC.html#a8575f0ef967b09308ed6a453857e65c7',1,'IRArgoAC::setMode()'],['../classIRCarrierAc64.html#ae462eeec49ff91358f1b9921750ee36d',1,'IRCarrierAc64::setMode()'],['../classIRCoolixAC.html#a5c0094d32aca6a5323f4dc72a03f02e9',1,'IRCoolixAC::setMode()'],['../classIRCoronaAc.html#aedeeedd176c89e5b7b650a4311e712be',1,'IRCoronaAc::setMode()'],['../classIRDaikinESP.html#af0f463201c877d33fa8680053dda7551',1,'IRDaikinESP::setMode()'],['../classIRDaikin2.html#a24ef3b53f22fe3557ed2dbc98a5bc6d2',1,'IRDaikin2::setMode()'],['../classIRDaikin216.html#a1d0dfce75ac95df9125b2cfe7c955080',1,'IRDaikin216::setMode()'],['../classIRDaikin160.html#a48e6fff63fd8b894c649fb495a467faa',1,'IRDaikin160::setMode()'],['../classIRDaikin176.html#a7ce82479f5ae2721baae8119b711c112',1,'IRDaikin176::setMode()'],['../classIRDaikin128.html#a9693e9931449f39253ca9102ac5cbfe9',1,'IRDaikin128::setMode()'],['../classIRDaikin152.html#aad0a46c751b73792282d6614103f57d8',1,'IRDaikin152::setMode()'],['../classIRDaikin64.html#a04dff0d273457a7bc3f3e0e1af4f7cd9',1,'IRDaikin64::setMode()'],['../classIRDelonghiAc.html#a62392c26321f038a84d99d54039bcfae',1,'IRDelonghiAc::setMode()'],['../classIREcoclimAc.html#a0d240abafeed17a9e0d3dca9804e03d2',1,'IREcoclimAc::setMode()'],['../classIRElectraAc.html#a911b7410fd2f29464c1505e183c04c5d',1,'IRElectraAc::setMode()'],['../classIRFujitsuAC.html#ac125c320f9794aae931bc59ba332a4a8',1,'IRFujitsuAC::setMode()'],['../classIRGoodweatherAc.html#a8eed6b70b7b1c2e8a9620db7462e1fb5',1,'IRGoodweatherAc::setMode()'],['../classIRGreeAC.html#a9d9dbd416e3dc270fcfda620b3bb4fe2',1,'IRGreeAC::setMode()'],['../classIRHaierAC.html#a3ad0317f2fd4f57d8ce61353ab3e48c7',1,'IRHaierAC::setMode()'],['../classIRHaierACYRW02.html#ae762c5f5422b4af612fa00f7c26452ed',1,'IRHaierACYRW02::setMode()'],['../classIRHitachiAc.html#a208f73a42484a1555145b41849e8c51f',1,'IRHitachiAc::setMode()'],['../classIRHitachiAc1.html#a1f3ced601e1131b70f840820ecb3feaa',1,'IRHitachiAc1::setMode()'],['../classIRHitachiAc424.html#a373a51d207674e35e00762b057f73cd5',1,'IRHitachiAc424::setMode()'],['../classIRKelvinatorAC.html#af55cc77892bc960587037c337b90d1bc',1,'IRKelvinatorAC::setMode()'],['../classIRLgAc.html#a5e1b21d9121c6bf6507f615f470b5890',1,'IRLgAc::setMode()'],['../classIRMideaAC.html#a3b92f25a82741ae404e8f9af8dbca3a8',1,'IRMideaAC::setMode()'],['../classIRMitsubishiAC.html#a2b4e2f00ee5a385172b13e8d9858ac0b',1,'IRMitsubishiAC::setMode()'],['../classIRMitsubishi136.html#aaef2ed81bdeb183995e2342c2ca17a8b',1,'IRMitsubishi136::setMode()'],['../classIRMitsubishi112.html#a0c1434e1d8dd513007400042324e868e',1,'IRMitsubishi112::setMode()'],['../classIRMitsubishiHeavy152Ac.html#a5a68388f337d7ba80289359903a1d01d',1,'IRMitsubishiHeavy152Ac::setMode()'],['../classIRMitsubishiHeavy88Ac.html#a1802cc8a382d6161b83f8947137d941d',1,'IRMitsubishiHeavy88Ac::setMode()'],['../classIRNeoclimaAc.html#adabd715c4a2ec34dd88330b97a1f0ecd',1,'IRNeoclimaAc::setMode()'],['../classIRPanasonicAc.html#add025b64e736d5120abeb2564a2849a4',1,'IRPanasonicAc::setMode()'],['../classIRPanasonicAc32.html#a3bd5cef91112ddb0913685e64d3f60ae',1,'IRPanasonicAc32::setMode()'],['../classIRSamsungAc.html#a708d9c6c91d774d6eeadbc0bd7f350af',1,'IRSamsungAc::setMode()'],['../classIRSanyoAc.html#a47521969475393eafe94faeb51204132',1,'IRSanyoAc::setMode()'],['../classIRSharpAc.html#ab51c207de90391cb7190e3ec95adc16e',1,'IRSharpAc::setMode()'],['../classIRTcl112Ac.html#a1a050c9b238691ba6d4764beeb788778',1,'IRTcl112Ac::setMode()'],['../classIRTechnibelAc.html#a04917b3760ed658d88ad2dae976d7a64',1,'IRTechnibelAc::setMode()'],['../classIRTecoAc.html#aba404540b723fa4687a4fda954221130',1,'IRTecoAc::setMode()'],['../classIRToshibaAC.html#aa001cddc464d6cbcc342e5e4c7af13ff',1,'IRToshibaAC::setMode()'],['../classIRTranscoldAc.html#a9371bf7cdc08067d4afb2dffa1c584c4',1,'IRTranscoldAc::setMode()'],['../classIRTrotecESP.html#a5d34e8d1e1be765e51cbfb6874482997',1,'IRTrotecESP::setMode()'],['../classIRTrumaAc.html#ae244a2be001cc99946f59cd3c178d95a',1,'IRTrumaAc::setMode()'],['../classIRVestelAc.html#a470e14ab5623386c0fa2b02fd15ea1d8',1,'IRVestelAc::setMode()'],['../classIRVoltas.html#afa1407bb1cfac30bdb762f7131dc9136',1,'IRVoltas::setMode()'],['../classIRWhirlpoolAc.html#ab09869929f5cc1fd0cc5dede93bba1c5',1,'IRWhirlpoolAc::setMode()']]], - ['setmodel_4450',['setModel',['../classIRFujitsuAC.html#a5393698000d8becf33ff332b32b97c73',1,'IRFujitsuAC::setModel()'],['../classIRGreeAC.html#a1075a08c30a2de97892e0842cb30e451',1,'IRGreeAC::setModel()'],['../classIRHitachiAc1.html#abb8c2c87e87f9d538f171e842c9d309a',1,'IRHitachiAc1::setModel()'],['../classIRLgAc.html#ae4b8758ecf10bd7e25ed401593692821',1,'IRLgAc::setModel()'],['../classIRPanasonicAc.html#a342531bfea3b05484de84e537bde390c',1,'IRPanasonicAc::setModel()'],['../classIRSharpAc.html#a35eb3241339c663db31002738b9632d3',1,'IRSharpAc::setModel()'],['../classIRVoltas.html#aa642fcbc4b0da48ef26c4e8c79f3e8b4',1,'IRVoltas::setModel()'],['../classIRWhirlpoolAc.html#accfa1660ed792acc3cf48ff60d9570f0',1,'IRWhirlpoolAc::setModel()']]], - ['setmold_4451',['setMold',['../classIRDaikinESP.html#a1616d08c8fd3c628fc45a76c32743ac9',1,'IRDaikinESP::setMold()'],['../classIRDaikin2.html#ad53e046e545f3b6c5418dfbaf58653ca',1,'IRDaikin2::setMold()']]], - ['setnight_4452',['setNight',['../classIRArgoAC.html#a769dd3b538653940e41883848bc1e19c',1,'IRArgoAC::setNight()'],['../classIRMitsubishiHeavy152Ac.html#a6920a1aad327e2f347b09da12f11cf8c',1,'IRMitsubishiHeavy152Ac::setNight()']]], - ['setoffsleeptimer_4453',['setOffSleepTimer',['../classIRFujitsuAC.html#acc78790fa33d24c5e068200ec3109798',1,'IRFujitsuAC']]], - ['setofftime_4454',['setOffTime',['../classIRDaikin64.html#a46a0b1e2438087ba557494b0b4fce4a5',1,'IRDaikin64::setOffTime()'],['../classIRVoltas.html#ad5977a24ef551ad0a19b5e61bae0482a',1,'IRVoltas::setOffTime()']]], - ['setofftimeenabled_4455',['setOffTimeEnabled',['../classIRDaikin64.html#aea59ae39ddd0fc33a6941d0affceae9a',1,'IRDaikin64']]], - ['setofftimer_4456',['setOffTimer',['../classIRCarrierAc64.html#a92b1066e783db1bdffabfdc57699deef',1,'IRCarrierAc64::setOffTimer()'],['../classIRCoronaAc.html#a00f269b6389bf65d1816e80b835aa9b0',1,'IRCoronaAc::setOffTimer()'],['../classIRDaikin128.html#a30ca067676dfde963986e25c84616368',1,'IRDaikin128::setOffTimer()'],['../classIRDelonghiAc.html#a9602c652b10b06c6eeae0e6158c42c68',1,'IRDelonghiAc::setOffTimer()'],['../classIREcoclimAc.html#a9a1b8b23de45b38eff74d10f5dfdd7bf',1,'IREcoclimAc::setOffTimer()'],['../classIRFujitsuAC.html#a3f69df43ab82f08c84782585b90437a2',1,'IRFujitsuAC::setOffTimer()'],['../classIRHaierAC.html#aa16b36aa7ef07628343dbd2dfe5157a2',1,'IRHaierAC::setOffTimer()'],['../classIRHitachiAc1.html#a62e9c7b68e63d1791d79805f2bce99df',1,'IRHitachiAc1::setOffTimer()'],['../classIRMideaAC.html#a1f5e4e75987a11300f29355bae12d9e5',1,'IRMideaAC::setOffTimer()'],['../classIRPanasonicAc.html#a08e097f40cee6c614ec1a8de716222cf',1,'IRPanasonicAc::setOffTimer()'],['../classIRSanyoAc.html#a6f5edbc22b039191500845ffd3ec77b5',1,'IRSanyoAc::setOffTimer()'],['../classIRVestelAc.html#acc61cd785d2f668a86ecefb243d63549',1,'IRVestelAc::setOffTimer()'],['../classIRWhirlpoolAc.html#a69f3555c9b27f3cfd9167ed3239804b8',1,'IRWhirlpoolAc::setOffTimer()']]], - ['setofftimeractive_4457',['setOffTimerActive',['../classIRVestelAc.html#a8a023f5594b446f0c20f66c4ee584d8e',1,'IRVestelAc']]], - ['setofftimerenabled_4458',['setOffTimerEnabled',['../classIRDaikin128.html#aac8a178bdaf7de7a183991e710a9a9d8',1,'IRDaikin128::setOffTimerEnabled()'],['../classIRDelonghiAc.html#a5cf81c9864f3c3728d4dd65e4d9c49c8',1,'IRDelonghiAc::setOffTimerEnabled()']]], - ['setontime_4459',['setOnTime',['../classIRDaikin64.html#aaada482820a90492a933f368fafaebb7',1,'IRDaikin64::setOnTime()'],['../classIRVoltas.html#a260ef77c26d2c987122391378ff5e876',1,'IRVoltas::setOnTime()']]], - ['setontimeenabled_4460',['setOnTimeEnabled',['../classIRDaikin64.html#a8e7a7c1f775f8ddf9d48a96915751c7a',1,'IRDaikin64']]], - ['setontimer_4461',['setOnTimer',['../classIRCarrierAc64.html#a9049a8d91200b878cc2a1b9b80a280ea',1,'IRCarrierAc64::setOnTimer()'],['../classIRCoronaAc.html#aae4142f45cc9c2b3e392b72cb404a2d8',1,'IRCoronaAc::setOnTimer()'],['../classIRDaikin128.html#a21773493eafae741b5716ac569eaf0a8',1,'IRDaikin128::setOnTimer()'],['../classIRDelonghiAc.html#a9a478f463a632893be7c4f5223c188ad',1,'IRDelonghiAc::setOnTimer()'],['../classIREcoclimAc.html#ae09d0b632cf657769d23f201284aa08f',1,'IREcoclimAc::setOnTimer()'],['../classIRFujitsuAC.html#a500fd3371c360b446b0cc14e994b77db',1,'IRFujitsuAC::setOnTimer()'],['../classIRHaierAC.html#aa5e95aa05749f6d35dd31b021fea2f5b',1,'IRHaierAC::setOnTimer()'],['../classIRHitachiAc1.html#a51ed6155f228628942ba08ea2ff5c547',1,'IRHitachiAc1::setOnTimer()'],['../classIRMideaAC.html#a99ae120368751b88b73d3b0fe9b426ce',1,'IRMideaAC::setOnTimer()'],['../classIRPanasonicAc.html#a51fdaa11e4e3f77189a94007a5acbec2',1,'IRPanasonicAc::setOnTimer()'],['../classIRVestelAc.html#af19bb7704326eb5688f2a2fa08e10ee2',1,'IRVestelAc::setOnTimer()'],['../classIRWhirlpoolAc.html#a1cb0e346e6f40b65b98a768df7fdace8',1,'IRWhirlpoolAc::setOnTimer()']]], - ['setontimeractive_4462',['setOnTimerActive',['../classIRVestelAc.html#a16ef4ecb7c76bef89b6e0ca36746d606',1,'IRVestelAc']]], - ['setontimerenabled_4463',['setOnTimerEnabled',['../classIRDaikin128.html#a07f693fac3de101c91c190e5e70edb57',1,'IRDaikin128::setOnTimerEnabled()'],['../classIRDelonghiAc.html#af6b956c273284e287093260039003362',1,'IRDelonghiAc::setOnTimerEnabled()']]], - ['setoutsidequiet_4464',['setOutsideQuiet',['../classIRFujitsuAC.html#a9a0533cba18739e52014307bf4b1ad07',1,'IRFujitsuAC']]], - ['setpower_4465',['setPower',['../classIRAmcorAc.html#a2ccfb2c2f0feb8a8cea9e10e30035988',1,'IRAmcorAc::setPower()'],['../classIRArgoAC.html#a991f73d84952c1d8ac86c579d1b01785',1,'IRArgoAC::setPower()'],['../classIRCarrierAc64.html#a8acf59cbf3b02381b5188324030b7727',1,'IRCarrierAc64::setPower()'],['../classIRCoolixAC.html#a975b59045a3c2a50392fdade2743e4e6',1,'IRCoolixAC::setPower()'],['../classIRCoronaAc.html#adc636402b51e0c78c4797aea5f80915d',1,'IRCoronaAc::setPower()'],['../classIRDaikinESP.html#aa0fb65d01bb203d17d923504ddd60984',1,'IRDaikinESP::setPower()'],['../classIRDaikin2.html#a3adfe1a80a702b7098ccd0e18225396e',1,'IRDaikin2::setPower()'],['../classIRDaikin216.html#a130a98bb2422a228977dea8a4e068ace',1,'IRDaikin216::setPower()'],['../classIRDaikin160.html#af1a800ef7494c49a868d01039f5c37e4',1,'IRDaikin160::setPower()'],['../classIRDaikin176.html#a58c755ba53d1f14a51b0c64ff4ef0669',1,'IRDaikin176::setPower()'],['../classIRDaikin152.html#a887f7340b9c3e7933f5d06bc5f59ee91',1,'IRDaikin152::setPower()'],['../classIRDelonghiAc.html#aa1ebbf63aa2331b87b95df9c5bdb41dc',1,'IRDelonghiAc::setPower()'],['../classIREcoclimAc.html#acca0a0d62568abd6f62c6f403e99847f',1,'IREcoclimAc::setPower()'],['../classIRElectraAc.html#abd04ffe9a77a97d4fafbcecd3a7949a4',1,'IRElectraAc::setPower()'],['../classIRFujitsuAC.html#a8d8211f20c8ec299e1fcb588a0846ac2',1,'IRFujitsuAC::setPower()'],['../classIRGoodweatherAc.html#ac49e30082777b10fe9edf6ec7bd76ea5',1,'IRGoodweatherAc::setPower()'],['../classIRGreeAC.html#a16b8c6af038752cd2b416cdcf9e2fb51',1,'IRGreeAC::setPower()'],['../classIRHaierACYRW02.html#a32e4a52cf31b43ad96ff3d8f0f390620',1,'IRHaierACYRW02::setPower()'],['../classIRHitachiAc.html#ad78a7176ded93735a296eefbf75cbc06',1,'IRHitachiAc::setPower()'],['../classIRHitachiAc1.html#a4dd034793018ea58d0cc32e7a47e8f35',1,'IRHitachiAc1::setPower()'],['../classIRHitachiAc424.html#a7b0b2e2c631d1bce2dd4677bb71e79b4',1,'IRHitachiAc424::setPower()'],['../classIRKelvinatorAC.html#a517a0193a9236a28a20d1760d7401efd',1,'IRKelvinatorAC::setPower()'],['../classIRLgAc.html#a175e6482fd1565d43906c527f911b59e',1,'IRLgAc::setPower()'],['../classIRMideaAC.html#ab8341f8d3d553d8b0ed9270cc15fc8ec',1,'IRMideaAC::setPower()'],['../classIRMitsubishiAC.html#a13f26de3c35b01470176b6fd9efda566',1,'IRMitsubishiAC::setPower()'],['../classIRMitsubishi136.html#a4bf52b3784faaca95ff97a09b8be322a',1,'IRMitsubishi136::setPower()'],['../classIRMitsubishi112.html#a0545da32a5048bc9d857ffb05767d3a6',1,'IRMitsubishi112::setPower()'],['../classIRMitsubishiHeavy152Ac.html#a08202752226ff3295eb8ccd637b0158b',1,'IRMitsubishiHeavy152Ac::setPower()'],['../classIRMitsubishiHeavy88Ac.html#ac2ee9dd82e84a3735e8a0c69e64cb02e',1,'IRMitsubishiHeavy88Ac::setPower()'],['../classIRNeoclimaAc.html#ac19bea3b79cdfc868bd137b0a70c0718',1,'IRNeoclimaAc::setPower()'],['../classIRPanasonicAc.html#ad60bf8a88d041f8e8ab3d728831ee8f3',1,'IRPanasonicAc::setPower()'],['../classIRSamsungAc.html#a4af21fa0dcbf5595386f67db676a443c',1,'IRSamsungAc::setPower()'],['../classIRSanyoAc.html#a13b080b4244e027460af90740ed0ff45',1,'IRSanyoAc::setPower()'],['../classIRSharpAc.html#a6b57a66878f125f86d2aed8bd7545000',1,'IRSharpAc::setPower()'],['../classIRTcl112Ac.html#ad2367d2481f94f14b9c4f7b378711b7e',1,'IRTcl112Ac::setPower()'],['../classIRTechnibelAc.html#a935f26d55d7d5c7024e8b298fda9aeb4',1,'IRTechnibelAc::setPower()'],['../classIRTecoAc.html#a989e48a889b36ec36386a532c81872d9',1,'IRTecoAc::setPower()'],['../classIRToshibaAC.html#a100f01c014582e162f9fd287beb91dff',1,'IRToshibaAC::setPower()'],['../classIRTranscoldAc.html#a3a19128eaf81ec52f752d79d718d43a3',1,'IRTranscoldAc::setPower()'],['../classIRTrotecESP.html#a0f3f5f5db367cb5a9adb936fada94fd5',1,'IRTrotecESP::setPower()'],['../classIRTrumaAc.html#aaff68f98a079f0596440a0915409a6c1',1,'IRTrumaAc::setPower()'],['../classIRVestelAc.html#a01e06ff3916d4a14f9ca49f22918a47b',1,'IRVestelAc::setPower()'],['../classIRVoltas.html#a0ee0be11284527861476091c855a8606',1,'IRVoltas::setPower()']]], - ['setpowerbutton_4466',['setPowerButton',['../classIRCoronaAc.html#a518471d42a62863953c97334cad348be',1,'IRCoronaAc']]], - ['setpowerful_4467',['setPowerful',['../classIRDaikinESP.html#a4c0da54ee1639a3bf813cb3f3afee064',1,'IRDaikinESP::setPowerful()'],['../classIRDaikin2.html#a6538104cdcf1b55e480aaddd51116d9a',1,'IRDaikin2::setPowerful()'],['../classIRDaikin216.html#a5cb6e958f3b9789828738defe4d12c7b',1,'IRDaikin216::setPowerful()'],['../classIRDaikin128.html#aeb3aa5013b1746ed714146ca7f233119',1,'IRDaikin128::setPowerful()'],['../classIRDaikin152.html#a6477111b5662146e937c10cf02423e10',1,'IRDaikin152::setPowerful()'],['../classIRPanasonicAc.html#a6357688bc9cca92ab222343ee045f4f4',1,'IRPanasonicAc::setPowerful()'],['../classIRSamsungAc.html#ab657b79740e0f84c09611ea3b10d06f0',1,'IRSamsungAc::setPowerful()']]], - ['setpowerspecial_4468',['setPowerSpecial',['../classIRSharpAc.html#af7dd64c6d82a8502d2ee176f7b0f5abb',1,'IRSharpAc']]], - ['setpowertoggle_4469',['setPowerToggle',['../classIRAirwellAc.html#a1b6aa498d9766b041d39a7b3d73653e7',1,'IRAirwellAc::setPowerToggle()'],['../classIRDaikin128.html#a5d7edaa44f0c9ca55ef1040dd42e42e3',1,'IRDaikin128::setPowerToggle()'],['../classIRDaikin64.html#ac7f673619842d217d4eda893da2f35fd',1,'IRDaikin64::setPowerToggle()'],['../classIRHitachiAc1.html#ae30430edd92ec4b848c8a105a78e8068',1,'IRHitachiAc1::setPowerToggle()'],['../classIRPanasonicAc32.html#ad0206dff39920f1407ed52256ee1b083',1,'IRPanasonicAc32::setPowerToggle()'],['../classIRWhirlpoolAc.html#a61bec25edce5bc244acb41f79df561e7',1,'IRWhirlpoolAc::setPowerToggle()']]], - ['setpurify_4470',['setPurify',['../classIRDaikin2.html#accd4430e998a8c9be80b5a708be9337e',1,'IRDaikin2']]], - ['setquiet_4471',['setQuiet',['../classIRDaikinESP.html#a4927eb8b2db2540efa90b37f4c3cc733',1,'IRDaikinESP::setQuiet()'],['../classIRDaikin2.html#a61ca7e72f850d0f9600fa9d8a336a8ef',1,'IRDaikin2::setQuiet()'],['../classIRDaikin216.html#a062528f54412cd3d2339c7bf82305ebb',1,'IRDaikin216::setQuiet()'],['../classIRDaikin128.html#a89c49332006831debbabbfcb5ec30249',1,'IRDaikin128::setQuiet()'],['../classIRDaikin152.html#a3aadf5f0ae11c5c6c53f351dd6b9c1a4',1,'IRDaikin152::setQuiet()'],['../classIRDaikin64.html#a7e3fb8debcefb76e76dda5612e28f377',1,'IRDaikin64::setQuiet()'],['../classIRKelvinatorAC.html#a2a3ca238649c55cd4f6f92f48eddf9ac',1,'IRKelvinatorAC::setQuiet()'],['../classIRMitsubishi136.html#a70c8a44f93e90ba025a8909c004c3a7b',1,'IRMitsubishi136::setQuiet()'],['../classIRMitsubishi112.html#a9fbbfb7bb1f6cccfcdcfbc4dcc335169',1,'IRMitsubishi112::setQuiet()'],['../classIRPanasonicAc.html#a51b6ae49cb490f697adeaf7f9f466518',1,'IRPanasonicAc::setQuiet()'],['../classIRSamsungAc.html#a6b3dd7d83c613a06f3499f1c8b26a67b',1,'IRSamsungAc::setQuiet()'],['../classIRTrumaAc.html#a5c1bc2a26b75c50a723cc4d29d121a9d',1,'IRTrumaAc::setQuiet()']]], - ['setraw_4472',['setRaw',['../classIRAirwellAc.html#a56e90d8b7e902be15c5db12be872d0fb',1,'IRAirwellAc::setRaw()'],['../classIRAmcorAc.html#ac0520033d7a59c817ca8ec08462fe39b',1,'IRAmcorAc::setRaw()'],['../classIRArgoAC.html#a98db56256eb71bf2e8da419007145e2b',1,'IRArgoAC::setRaw()'],['../classIRCarrierAc64.html#af49cf0b53bf8ff946a63bae94be0251d',1,'IRCarrierAc64::setRaw()'],['../classIRCoolixAC.html#aed28d08743c529a5715331255a8d5507',1,'IRCoolixAC::setRaw()'],['../classIRCoronaAc.html#a9ccf78675a3c175209c8d0ef08e2e671',1,'IRCoronaAc::setRaw()'],['../classIRDaikinESP.html#a7c69fc77ead837e5b4f1ececd9f43ca9',1,'IRDaikinESP::setRaw()'],['../classIRDaikin2.html#a132001e73eb5744a3a174c5517c9bbda',1,'IRDaikin2::setRaw()'],['../classIRDaikin216.html#a49f6a2ffc2e76ec4ff020e773bd70160',1,'IRDaikin216::setRaw()'],['../classIRDaikin160.html#a22e8a1600f612dd4326b2f9722d3a269',1,'IRDaikin160::setRaw()'],['../classIRDaikin176.html#a51e5f74b532eca958c09998727064e8d',1,'IRDaikin176::setRaw()'],['../classIRDaikin128.html#a25db29e01def45e8850ac9da68aa7ea7',1,'IRDaikin128::setRaw()'],['../classIRDaikin152.html#aab10e030ebe66e44607e9f35af1eb4cb',1,'IRDaikin152::setRaw()'],['../classIRDaikin64.html#a5f081026aca2bccc6fdeef8199e80779',1,'IRDaikin64::setRaw()'],['../classIRDelonghiAc.html#a219bafa7839f10acca33526cf585152a',1,'IRDelonghiAc::setRaw()'],['../classIREcoclimAc.html#ac88006b639a05c9605548db1af672fb0',1,'IREcoclimAc::setRaw()'],['../classIRElectraAc.html#ae57c51cd3f5d1ebfb2fe7b926d149dd6',1,'IRElectraAc::setRaw()'],['../classIRFujitsuAC.html#a9b89d756948affa7029eeeed51916cbb',1,'IRFujitsuAC::setRaw()'],['../classIRGoodweatherAc.html#a2eae4bbdb14fea9e3004d656f852df59',1,'IRGoodweatherAc::setRaw()'],['../classIRGreeAC.html#a588f526f2f5500c7c2933ca91ccaf865',1,'IRGreeAC::setRaw()'],['../classIRHaierAC.html#a152961e20b5a5bed2ea03cbc65d65ce9',1,'IRHaierAC::setRaw()'],['../classIRHaierACYRW02.html#a389e711e128533c409731d2c87868c85',1,'IRHaierACYRW02::setRaw()'],['../classIRHitachiAc.html#a3b67215c162ef508c68c49b621c5199b',1,'IRHitachiAc::setRaw()'],['../classIRHitachiAc1.html#ae2d40bc477e30ee574f5c5e2ba4e09c2',1,'IRHitachiAc1::setRaw()'],['../classIRHitachiAc424.html#adc24b8b984ff20cebdf81f65843bb283',1,'IRHitachiAc424::setRaw()'],['../classIRHitachiAc3.html#acff4faf79a30df7b7e7c183dec4153a7',1,'IRHitachiAc3::setRaw()'],['../classIRHitachiAc344.html#a8bf02e3923d881436a9578532ed3c024',1,'IRHitachiAc344::setRaw()'],['../classIRKelvinatorAC.html#a4a32bbf1a7ee8a089ea1e4e7c750433b',1,'IRKelvinatorAC::setRaw()'],['../classIRLgAc.html#a0da8ea4946826736f526386dc4d115cc',1,'IRLgAc::setRaw()'],['../classIRMideaAC.html#ab24da22531f5b2823551501642ec1b94',1,'IRMideaAC::setRaw()'],['../classIRMitsubishiAC.html#ac7bb79f91d5a9296c2b2b74aae1bfb53',1,'IRMitsubishiAC::setRaw()'],['../classIRMitsubishi136.html#abf0487a6fb163bf896e09b2cae6ee939',1,'IRMitsubishi136::setRaw()'],['../classIRMitsubishi112.html#a5c82f92d4a1ba1477ae7738ed5ade368',1,'IRMitsubishi112::setRaw()'],['../classIRMitsubishiHeavy152Ac.html#a8d42a2d87bf889ab4b233ea0c239f4c2',1,'IRMitsubishiHeavy152Ac::setRaw()'],['../classIRMitsubishiHeavy88Ac.html#abf01e448da9ec6e3b4512f58c3020299',1,'IRMitsubishiHeavy88Ac::setRaw()'],['../classIRNeoclimaAc.html#a607ea7df35572578ef86da7f505ab407',1,'IRNeoclimaAc::setRaw()'],['../classIRPanasonicAc.html#a63308883e8447aa5cdf7d29107be220f',1,'IRPanasonicAc::setRaw()'],['../classIRPanasonicAc32.html#a349462a31274f3785effdb249b485368',1,'IRPanasonicAc32::setRaw()'],['../classIRSamsungAc.html#a95377e8c73b51e73e78b51a2b2fa16d4',1,'IRSamsungAc::setRaw()'],['../classIRSanyoAc.html#a0fb38af499c140401396831665f862bd',1,'IRSanyoAc::setRaw()'],['../classIRSharpAc.html#a89b18c4ee29afa56ebed5fa32e578df7',1,'IRSharpAc::setRaw()'],['../classIRTcl112Ac.html#a5b0994f37df6846137b564eeb322f21b',1,'IRTcl112Ac::setRaw()'],['../classIRTechnibelAc.html#aed63ea8dd6ba08a13623be756462a997',1,'IRTechnibelAc::setRaw()'],['../classIRTecoAc.html#a1ef3423214f55a2e2695cc1180f94bcc',1,'IRTecoAc::setRaw()'],['../classIRToshibaAC.html#a58313e235136bf8f9e36dee59857cebc',1,'IRToshibaAC::setRaw()'],['../classIRTranscoldAc.html#ac8d5395411aa44efffe3bb1a068eaf4f',1,'IRTranscoldAc::setRaw()'],['../classIRTrotecESP.html#a4ffe5ee2559828a61af710bb7d892b6c',1,'IRTrotecESP::setRaw()'],['../classIRTrumaAc.html#a80eec53fa6df87174eb2212eee01f4fa',1,'IRTrumaAc::setRaw()'],['../classIRVestelAc.html#a617bf1f4b5596d5ad005237e8445c12e',1,'IRVestelAc::setRaw(const uint8_t *newState)'],['../classIRVestelAc.html#a5cc86216d33f228c0648d6c66526b0eb',1,'IRVestelAc::setRaw(const uint64_t newState)'],['../classIRVoltas.html#a5e946ed52c025643b4fc6b89619c90b5',1,'IRVoltas::setRaw()'],['../classIRWhirlpoolAc.html#afa9c66ea36c970f80c88a0489448ab5b',1,'IRWhirlpoolAc::setRaw()']]], - ['setroomtemp_4473',['setRoomTemp',['../classIRArgoAC.html#aec5a2edc6f414aab201a18defaa78c5b',1,'IRArgoAC']]], - ['setsave_4474',['setSave',['../classIRTecoAc.html#a0f7d203d44d4040be3a4b28fcd5dd34c',1,'IRTecoAc']]], - ['setsensor_4475',['setSensor',['../classIRDaikinESP.html#ae1c95533934fffb29eed3e9a27e8f636',1,'IRDaikinESP::setSensor()'],['../classIRDaikin152.html#af418dbf2bb79dab0193801167dfb5b78',1,'IRDaikin152::setSensor()'],['../classIRSanyoAc.html#a287d7b6c417151d303cb7d731ae349be',1,'IRSanyoAc::setSensor()']]], - ['setsensortemp_4476',['setSensorTemp',['../classIRCoolixAC.html#a9bf364245a05818ced3e8fb79d725d9c',1,'IRCoolixAC::setSensorTemp()'],['../classIREcoclimAc.html#a371062a46e92fec628be150bd0eada96',1,'IREcoclimAc::setSensorTemp()'],['../classIRMideaAC.html#a99270b5f488ebcf3b0ef73d9697399a0',1,'IRMideaAC::setSensorTemp()'],['../classIRSanyoAc.html#a22aa95f76076a3a9634609a27bbc1a7f',1,'IRSanyoAc::setSensorTemp()']]], - ['setsensortempraw_4477',['setSensorTempRaw',['../classIRCoolixAC.html#a425c3f5fb26330266156c133fb9104eb',1,'IRCoolixAC']]], - ['setsilent_4478',['setSilent',['../classIRMitsubishiHeavy152Ac.html#ab398b9ea2965f059903137ab088791c0',1,'IRMitsubishiHeavy152Ac']]], - ['setsleep_4479',['setSleep',['../classIRCarrierAc64.html#aa729dbef39afeeed8e83f26b927d3b21',1,'IRCarrierAc64::setSleep()'],['../classIRCoolixAC.html#af0108f5a5ae0049fd296307a7cef605e',1,'IRCoolixAC::setSleep()'],['../classIRDaikin128.html#ac43854ae557ec5582f2bfd9150fd57f2',1,'IRDaikin128::setSleep()'],['../classIRDaikin64.html#a7faf8e018179fed2b091a78d0d69a9b8',1,'IRDaikin64::setSleep()'],['../classIRDelonghiAc.html#aa74806e520b2b01a5b0c87ee32ce427e',1,'IRDelonghiAc::setSleep()'],['../classIRGoodweatherAc.html#a30987629a159c5112649f0973895c9c1',1,'IRGoodweatherAc::setSleep()'],['../classIRGreeAC.html#ac9c11817d15bc5c82732a901cd95e07c',1,'IRGreeAC::setSleep()'],['../classIRHaierAC.html#acb72b89fa53b565f9d32db4d8960f988',1,'IRHaierAC::setSleep()'],['../classIRHaierACYRW02.html#ad63834eb1a91ed974af988c385570457',1,'IRHaierACYRW02::setSleep()'],['../classIRHitachiAc1.html#a2ddb6a5d446b379884828e81df0806ee',1,'IRHitachiAc1::setSleep()'],['../classIRMideaAC.html#a1e008ff673450060bf39a65f1cb926e6',1,'IRMideaAC::setSleep()'],['../classIRNeoclimaAc.html#ad01a62fb369c6894333adb2fe0f52b79',1,'IRNeoclimaAc::setSleep()'],['../classIRSanyoAc.html#af0bb8ab84d7ee2e9bd1848582f54ff74',1,'IRSanyoAc::setSleep()'],['../classIRTechnibelAc.html#a2df311dc104af45a281c7d87512248d4',1,'IRTechnibelAc::setSleep()'],['../classIRTecoAc.html#a1e989a4fbd21c507ba13014b1e336ce2',1,'IRTecoAc::setSleep()'],['../classIRTrotecESP.html#a41c558c6937e61e77269139f96135420',1,'IRTrotecESP::setSleep()'],['../classIRVestelAc.html#a4b93d5585b7fb9d509e7fcf84e2b4abc',1,'IRVestelAc::setSleep()'],['../classIRVoltas.html#a64210225e6c0bf89944b4b12fda2c799',1,'IRVoltas::setSleep()'],['../classIRWhirlpoolAc.html#a6eaa24abc9eac64d9cbe79205a239474',1,'IRWhirlpoolAc::setSleep()']]], - ['setsleeptimer_4480',['setSleepTimer',['../classIRFujitsuAC.html#aebed4f746874057d7a8a50bbc88e74a5',1,'IRFujitsuAC']]], - ['setspecial_4481',['setSpecial',['../classIRSharpAc.html#ad7d2eca8b863569a1b17fdca4930d84f',1,'IRSharpAc']]], - ['setspeed_4482',['setSpeed',['../classIRTrotecESP.html#a268146141ce0358c2353c0ff59cfbad3',1,'IRTrotecESP']]], - ['setstartclock_4483',['setStartClock',['../classIRMitsubishiAC.html#a22d8c0dfd8098cb274d915476ed4caae',1,'IRMitsubishiAC']]], - ['setstatelength_4484',['setStateLength',['../classIRToshibaAC.html#a9ee4c6cff9be72455b6133a6280c65c4',1,'IRToshibaAC']]], - ['setstopclock_4485',['setStopClock',['../classIRMitsubishiAC.html#a228dafbf1ea3e9c3487506a5ca2ea274',1,'IRMitsubishiAC']]], - ['setsuper_4486',['setSuper',['../classIRWhirlpoolAc.html#a19a14674b0bae79d3aee81b8d48aacc7',1,'IRWhirlpoolAc']]], - ['setswing_4487',['setSwing',['../classIRCoolixAC.html#a8e8a76617d06d8ad8a74bc8af3512d95',1,'IRCoolixAC::setSwing()'],['../classIRFujitsuAC.html#a60ab8f21b5561e94a322b72a606468b9',1,'IRFujitsuAC::setSwing()'],['../classIRGoodweatherAc.html#a4d11a6885a5e7851e7c941b559159c35',1,'IRGoodweatherAc::setSwing()'],['../classIRHaierAC.html#a28c8bf6e0f45e074bf5eb13c25805627',1,'IRHaierAC::setSwing()'],['../classIRHaierACYRW02.html#ab9152dd09dec2db522dd96778f3b1556',1,'IRHaierACYRW02::setSwing()'],['../classIRSamsungAc.html#aaa7aaca1134e1565f527fcaa96a2fa6e',1,'IRSamsungAc::setSwing()'],['../classIRTechnibelAc.html#ad6c991f62d9ff127e662b8bbfe0376ca',1,'IRTechnibelAc::setSwing()'],['../classIRTecoAc.html#aaaeb10176c0b73e72fdb63b53fdcd5d0',1,'IRTecoAc::setSwing()'],['../classIRToshibaAC.html#aec1cf1c148197e22a30d578043ce1912',1,'IRToshibaAC::setSwing()'],['../classIRTranscoldAc.html#a8ee39074ca2ac9fc6546be09b5f67e6b',1,'IRTranscoldAc::setSwing()'],['../classIRVestelAc.html#a6c98427df6e5e8081a6dcbfcd436ff0d',1,'IRVestelAc::setSwing()'],['../classIRWhirlpoolAc.html#a6fec80710ba87599840e576f37e0c944',1,'IRWhirlpoolAc::setSwing()']]], - ['setswingh_4488',['setSwingH',['../classIRElectraAc.html#afcd40681003d57b4f1b652175fc276a8',1,'IRElectraAc::setSwingH()'],['../classIRHitachiAc1.html#af6cc42d52dfed89e23d3d180e7b69af9',1,'IRHitachiAc1::setSwingH()'],['../classIRHitachiAc344.html#a5651cb90ba9b87ef841f8987bad267d4',1,'IRHitachiAc344::setSwingH()'],['../classIRMitsubishi112.html#a99f97b04ac22a7942ea371f470faaf49',1,'IRMitsubishi112::setSwingH()'],['../classIRNeoclimaAc.html#a1aeebc60d7bbd0fb801ad88f639cb6a0',1,'IRNeoclimaAc::setSwingH()'],['../classIRVoltas.html#a6069eea71ca7e48326f8155df950e798',1,'IRVoltas::setSwingH()']]], - ['setswinghchange_4489',['setSwingHChange',['../classIRVoltas.html#acf7be0544dabb18ac29975b0f7ec9773',1,'IRVoltas']]], - ['setswinghorizontal_4490',['setSwingHorizontal',['../classIRDaikinESP.html#a5a7ec7b00811138879c636b03ae58606',1,'IRDaikinESP::setSwingHorizontal()'],['../classIRDaikin2.html#a75b6d6fb5bab0a9c951ad35e3e1d07c5',1,'IRDaikin2::setSwingHorizontal()'],['../classIRDaikin216.html#af8a1525cbe8d813c419d17ee6776a7d9',1,'IRDaikin216::setSwingHorizontal()'],['../classIRDaikin176.html#a9e63cf22410ffad45f6b308674079ee8',1,'IRDaikin176::setSwingHorizontal()'],['../classIRHitachiAc.html#ae70600f4a6f9fd7579221b11cd73062f',1,'IRHitachiAc::setSwingHorizontal()'],['../classIRKelvinatorAC.html#a2f1731f71bc74fb7ad6fec1210ecb1c7',1,'IRKelvinatorAC::setSwingHorizontal()'],['../classIRMitsubishiHeavy152Ac.html#a8713144e057424809292494a663dcd22',1,'IRMitsubishiHeavy152Ac::setSwingHorizontal()'],['../classIRMitsubishiHeavy88Ac.html#aaceffdd4e631fb2d4c404de0c8ff8cdb',1,'IRMitsubishiHeavy88Ac::setSwingHorizontal()'],['../classIRPanasonicAc.html#a32f3f07813165a39359887485dd87254',1,'IRPanasonicAc::setSwingHorizontal()'],['../classIRPanasonicAc32.html#a3361eb1f7e4da86290ad3f2c3e68340b',1,'IRPanasonicAc32::setSwingHorizontal()'],['../classIRTcl112Ac.html#aedc63c59a924d64048bc034a752ce7ed',1,'IRTcl112Ac::setSwingHorizontal()']]], - ['setswingtoggle_4491',['setSwingToggle',['../classIRHitachiAc1.html#a24ec128b6bb27cfc4be4dda9ece003d6',1,'IRHitachiAc1::setSwingToggle()'],['../classIRSharpAc.html#a0d397009ecf213111207fcebb12b95fb',1,'IRSharpAc::setSwingToggle()']]], - ['setswingv_4492',['setSwingV',['../classIRCarrierAc64.html#a61a3f9f29cabc0634a9a74fc2227d8c5',1,'IRCarrierAc64::setSwingV()'],['../classIRDaikin152.html#ad151bb85529d46f7e3e3e65dbf446ff0',1,'IRDaikin152::setSwingV()'],['../classIRElectraAc.html#ae5b33942670e0033cbb9b9c7a1524e93',1,'IRElectraAc::setSwingV()'],['../classIRHitachiAc1.html#a1bcc61a9a33a3ddec41d44d52e7df0d3',1,'IRHitachiAc1::setSwingV()'],['../classIRHitachiAc344.html#a3982f110de8ff9881cf4070902294285',1,'IRHitachiAc344::setSwingV()'],['../classIRMitsubishi136.html#a0d54bc6dd55da18b05f723a1b61e575e',1,'IRMitsubishi136::setSwingV()'],['../classIRMitsubishi112.html#ae33b469f1b67616f101f4a3df874fb78',1,'IRMitsubishi112::setSwingV()'],['../classIRNeoclimaAc.html#aa6e5f6f092f52c5c289642c9576c8bc0',1,'IRNeoclimaAc::setSwingV()'],['../classIRSanyoAc.html#a4d159778cd93caaecdb57d5c9417a2c9',1,'IRSanyoAc::setSwingV()'],['../classIRVoltas.html#aff014fc2f818a0bdb22cb89bd074c555',1,'IRVoltas::setSwingV()']]], - ['setswingvertical_4493',['setSwingVertical',['../classIRDaikinESP.html#a9200ef5751df5d488d7e08b138ec6356',1,'IRDaikinESP::setSwingVertical()'],['../classIRDaikin2.html#a35e72dc8e7967ee8ca8e84a6344468f3',1,'IRDaikin2::setSwingVertical()'],['../classIRDaikin216.html#a851484d5a37ceb1b0fc32e2e4bc2bcbb',1,'IRDaikin216::setSwingVertical()'],['../classIRDaikin160.html#a1683a255393f233d3e5b46d186d62881',1,'IRDaikin160::setSwingVertical()'],['../classIRDaikin128.html#a961aceb41145001003a50c5988f04c4d',1,'IRDaikin128::setSwingVertical()'],['../classIRDaikin64.html#afca186067111fa7181916a218c2800ec',1,'IRDaikin64::setSwingVertical()'],['../classIRGreeAC.html#a1b571dea8a5bf553554e45074f3a01c0',1,'IRGreeAC::setSwingVertical()'],['../classIRHitachiAc.html#a7e3ee78e4835fe402095b544c1e52f9f',1,'IRHitachiAc::setSwingVertical()'],['../classIRKelvinatorAC.html#a7334fbf8f2a67b33562ecea6b6e66f0e',1,'IRKelvinatorAC::setSwingVertical()'],['../classIRMitsubishiHeavy152Ac.html#aea3ac937feff058feef321bfe7357145',1,'IRMitsubishiHeavy152Ac::setSwingVertical()'],['../classIRMitsubishiHeavy88Ac.html#a9406e1890483703afb7b383e1363f8ec',1,'IRMitsubishiHeavy88Ac::setSwingVertical()'],['../classIRPanasonicAc.html#a48f31b1f85c92fac22f85a1aa8074c6e',1,'IRPanasonicAc::setSwingVertical()'],['../classIRPanasonicAc32.html#ab6af790d2828a64e5b5cb70bf818a578',1,'IRPanasonicAc32::setSwingVertical()'],['../classIRTcl112Ac.html#a53f702dcc66de81f6e7e03d538a6946d',1,'IRTcl112Ac::setSwingVertical()']]], - ['setswingvstep_4494',['setSwingVStep',['../classIRCoolixAC.html#af0659a8a63004a5f9833ca3c565afff4',1,'IRCoolixAC::setSwingVStep()'],['../classIRMideaAC.html#a0dc0122ffcc2fccba4f044fbf755b924',1,'IRMideaAC::setSwingVStep()']]], - ['setswingvtoggle_4495',['setSwingVToggle',['../classIRCoronaAc.html#a7cb31da86353ec637239cb747890bd7b',1,'IRCoronaAc::setSwingVToggle()'],['../classIRHitachiAc424.html#a220fd85bd213dd13ee9c609d4d7d20c1',1,'IRHitachiAc424::setSwingVToggle()'],['../classIRMideaAC.html#a7fce182bff4f5bc2c6679b20f344837b',1,'IRMideaAC::setSwingVToggle()']]], - ['settemp_4496',['setTemp',['../classIRAirwellAc.html#a30883e7b4f7933b6fa2258736995d295',1,'IRAirwellAc::setTemp()'],['../classIRAmcorAc.html#af4b2c476b76534687f14e9be963e9522',1,'IRAmcorAc::setTemp()'],['../classIRArgoAC.html#abad424a3cf1894715baa03780fa9b53b',1,'IRArgoAC::setTemp()'],['../classIRCarrierAc64.html#a79e193514ac6d07be537a78887426311',1,'IRCarrierAc64::setTemp()'],['../classIRCoolixAC.html#a1d4b4fb810b9f3835ee585b2aa66088f',1,'IRCoolixAC::setTemp()'],['../classIRCoronaAc.html#a9b1d5223cbb6ae6ba07f32871b27d9c6',1,'IRCoronaAc::setTemp()'],['../classIRDaikinESP.html#a631db8830684b745711667aed73a6433',1,'IRDaikinESP::setTemp()'],['../classIRDaikin2.html#a7f752c785fe180d5038e35bb07ff965a',1,'IRDaikin2::setTemp()'],['../classIRDaikin216.html#a8735732d3264eec119127d4353990669',1,'IRDaikin216::setTemp()'],['../classIRDaikin160.html#abedd99ed838478a7ef856537c6fabb82',1,'IRDaikin160::setTemp()'],['../classIRDaikin176.html#acb3b296f4c87a5a37258c666ef886ff3',1,'IRDaikin176::setTemp()'],['../classIRDaikin128.html#aba143a1b80e6de7d1c7b987eeda6b0db',1,'IRDaikin128::setTemp()'],['../classIRDaikin152.html#a97567ade1c0262b3f95f23f171936d8c',1,'IRDaikin152::setTemp()'],['../classIRDaikin64.html#adb1eb657998c05a143365755da0a1e81',1,'IRDaikin64::setTemp()'],['../classIRDelonghiAc.html#a08cc3e32c50277e3f986ed2c3945ce0d',1,'IRDelonghiAc::setTemp()'],['../classIREcoclimAc.html#a4e176cd0def4fccc15bac1bc1dcf023b',1,'IREcoclimAc::setTemp()'],['../classIRElectraAc.html#a5f986d9a376b6d5348fcb021d66d235b',1,'IRElectraAc::setTemp()'],['../classIRFujitsuAC.html#add8b65e2f16c36c6ccdf00bd19c34366',1,'IRFujitsuAC::setTemp()'],['../classIRGoodweatherAc.html#a8b1c90f69a3a2e412020d07809d180cc',1,'IRGoodweatherAc::setTemp()'],['../classIRGreeAC.html#a1890c6d134183beb89b791ec565623bb',1,'IRGreeAC::setTemp()'],['../classIRHaierAC.html#a9fb2a375cc1b8692fe4d5dcdd765cc46',1,'IRHaierAC::setTemp()'],['../classIRHaierACYRW02.html#a80170879e7bd391e360d41f18f6fa52b',1,'IRHaierACYRW02::setTemp()'],['../classIRHitachiAc.html#a9f416886ae341cdb6d449572e4d168a9',1,'IRHitachiAc::setTemp()'],['../classIRHitachiAc1.html#a10ba2dcbe447e505cbaa1a9b63f4823c',1,'IRHitachiAc1::setTemp()'],['../classIRHitachiAc424.html#a5cca8f31d07ce87b6e4a0ff0c22b1be8',1,'IRHitachiAc424::setTemp()'],['../classIRKelvinatorAC.html#ab098a376c7393d377abcc6c1f504d372',1,'IRKelvinatorAC::setTemp()'],['../classIRLgAc.html#ad9924a8bc9737ec6007d76ec47b34142',1,'IRLgAc::setTemp()'],['../classIRMideaAC.html#a42f79e73f418d5267eed7ba5b0e266f5',1,'IRMideaAC::setTemp()'],['../classIRMitsubishiAC.html#a0a043ce8a1a9e27ae3ac84be5b207d72',1,'IRMitsubishiAC::setTemp()'],['../classIRMitsubishi136.html#ac19c9234a5f65cae50b64d56c4bebb8f',1,'IRMitsubishi136::setTemp()'],['../classIRMitsubishi112.html#a03ba44a6d2f152b7afade423f12c8726',1,'IRMitsubishi112::setTemp()'],['../classIRMitsubishiHeavy152Ac.html#ad4f9ae94b8ab1fff8fc99b8d7818a8fe',1,'IRMitsubishiHeavy152Ac::setTemp()'],['../classIRMitsubishiHeavy88Ac.html#aa4a92e5334aebdca5d2b26b642e9b9e8',1,'IRMitsubishiHeavy88Ac::setTemp()'],['../classIRNeoclimaAc.html#ae9d6cd2de77ac324550d69cfc80b0e3f',1,'IRNeoclimaAc::setTemp()'],['../classIRPanasonicAc.html#a58376c311177e701333f4915515d49f1',1,'IRPanasonicAc::setTemp()'],['../classIRPanasonicAc32.html#a697a5816a4bed187e2245fe626727395',1,'IRPanasonicAc32::setTemp()'],['../classIRSamsungAc.html#a94a71e82321343220836aa614b231bd0',1,'IRSamsungAc::setTemp()'],['../classIRSanyoAc.html#ab1346677e0e9f6828629f3f7d50ef656',1,'IRSanyoAc::setTemp()'],['../classIRSharpAc.html#a151f88799cdab6fda4cfef83b30e5917',1,'IRSharpAc::setTemp()'],['../classIRTcl112Ac.html#a110bae0201b63db0409c352dd8d62786',1,'IRTcl112Ac::setTemp()'],['../classIRTechnibelAc.html#add05b89590340e891e2e1e666c5d033b',1,'IRTechnibelAc::setTemp()'],['../classIRTecoAc.html#a405106cb572dac338d79da48fe7a7cb3',1,'IRTecoAc::setTemp()'],['../classIRToshibaAC.html#a923fad1f637e1851a77a063978994604',1,'IRToshibaAC::setTemp()'],['../classIRTranscoldAc.html#aa183d51c121c70704f6b0a5957911986',1,'IRTranscoldAc::setTemp()'],['../classIRTrotecESP.html#ad467e7fe9ff61fec4ec10b367c0f9279',1,'IRTrotecESP::setTemp()'],['../classIRTrumaAc.html#ae6cb4a1fa7671a9162145b6a4e8bd08b',1,'IRTrumaAc::setTemp()'],['../classIRVestelAc.html#a8c4eddfba4edfa16e317e12677736756',1,'IRVestelAc::setTemp()'],['../classIRVoltas.html#a328a8ed84e89d44c13ca6e641c4b6f97',1,'IRVoltas::setTemp()'],['../classIRWhirlpoolAc.html#afff1ae75ffa362abb791c97c20023755',1,'IRWhirlpoolAc::setTemp()']]], - ['settempraw_4497',['setTempRaw',['../classIRCoolixAC.html#ae9371280e92daa8e1441523026f1ef0a',1,'IRCoolixAC']]], - ['settempunit_4498',['setTempUnit',['../classIRDelonghiAc.html#a4e3681e49065ba232577ca05157a5ef2',1,'IRDelonghiAc::setTempUnit()'],['../classIRTechnibelAc.html#a48ea1ac452c84b0a6c705a5c341c8ad5',1,'IRTechnibelAc::setTempUnit()']]], - ['settime_4499',['setTime',['../classIRArgoAC.html#ae285801cde19da82e128098097624852',1,'IRArgoAC::setTime()'],['../classIRVestelAc.html#afc5dedf83855a8fea8b29494bfb07d64',1,'IRVestelAc::setTime()']]], - ['settimer_4500',['setTimer',['../classIRGreeAC.html#a84debd45d2f2ba221f825257e0bc6294',1,'IRGreeAC::setTimer()'],['../classIRMitsubishiAC.html#acb56c91ef0db6ace7782d356af2dcd4d',1,'IRMitsubishiAC::setTimer()'],['../classIRSharpAc.html#a8782543c33e48af0a09e548276eb6413',1,'IRSharpAc::setTimer()'],['../classIRTechnibelAc.html#a940a048710432db01bcd1be34ea5324e',1,'IRTechnibelAc::setTimer()'],['../classIRTecoAc.html#a88a84e22d53a204da754c04210fadd04',1,'IRTecoAc::setTimer()'],['../classIRTrotecESP.html#a92bfed0f247b21c77737b720151dbb88',1,'IRTrotecESP::setTimer()'],['../classIRVestelAc.html#a7c66e1ec13c827714eaa2233f50f072b',1,'IRVestelAc::setTimer()']]], - ['settimeractive_4501',['setTimerActive',['../classIRVestelAc.html#a77f78e534b19a8dca776b17aa06739aa',1,'IRVestelAc']]], - ['settimerenabled_4502',['setTimerEnabled',['../classIRGreeAC.html#a1002d6dfe409076fa7ef252589d5043c',1,'IRGreeAC::setTimerEnabled()'],['../classIRTechnibelAc.html#a0fc61ce2941376e03d8285495e1fe2b2',1,'IRTechnibelAc::setTimerEnabled()']]], - ['settimertype_4503',['setTimerType',['../classIRFujitsuAC.html#a58670cab1b422527897da9e5ae821b0c',1,'IRFujitsuAC']]], - ['settolerance_4504',['setTolerance',['../classIRrecv.html#aa091c449db70c65fd0221669df7438ea',1,'IRrecv']]], - ['setturbo_4505',['setTurbo',['../classIRCoolixAC.html#a857c14452f80d3d332729b2bdd04f92d',1,'IRCoolixAC::setTurbo()'],['../classIRDaikin64.html#a734cc23f79a4de4099a4ceb1aff14762',1,'IRDaikin64::setTurbo()'],['../classIRElectraAc.html#adb40e95465788b03e4cb845bd481f7ed',1,'IRElectraAc::setTurbo()'],['../classIRGoodweatherAc.html#a7827fc5a8f85b284c0121727dba34f11',1,'IRGoodweatherAc::setTurbo()'],['../classIRGreeAC.html#ae873023ad81f7dcb12ee5b061e160bea',1,'IRGreeAC::setTurbo()'],['../classIRHaierACYRW02.html#aba5f028ee1ebf7be2d4de5a66237f01b',1,'IRHaierACYRW02::setTurbo()'],['../classIRKelvinatorAC.html#a7d9c44970e85f23c83723f27e96260ee',1,'IRKelvinatorAC::setTurbo()'],['../classIRMitsubishiHeavy152Ac.html#a275e8ae44e2018a848b3e8f0893c8023',1,'IRMitsubishiHeavy152Ac::setTurbo()'],['../classIRMitsubishiHeavy88Ac.html#a39ac892d349180327cce92c6f82bea30',1,'IRMitsubishiHeavy88Ac::setTurbo()'],['../classIRNeoclimaAc.html#aa2a9563d9e3c5c95dfa512c0bb87e16f',1,'IRNeoclimaAc::setTurbo()'],['../classIRSharpAc.html#a8a184ae8eeb07704b9b69849421e3172',1,'IRSharpAc::setTurbo()'],['../classIRTcl112Ac.html#a99e3b3e2f0cc627b6d872d04b35d6230',1,'IRTcl112Ac::setTurbo()'],['../classIRToshibaAC.html#a5d1d6b00a9b99bf29496fbd6af5cce31',1,'IRToshibaAC::setTurbo()'],['../classIRVestelAc.html#afa762d0fa63ecc7444c1c107f8f07cdb',1,'IRVestelAc::setTurbo()'],['../classIRVoltas.html#ac7418f197deb96c0fef5d2c36732f5af',1,'IRVoltas::setTurbo()']]], - ['setturbotoggle_4506',['setTurboToggle',['../classIRMideaAC.html#a05b58666391bb204cef6fff288ed7660',1,'IRMideaAC']]], - ['settype_4507',['setType',['../classIREcoclimAc.html#a0b196d1f8079d5336de11ba6ddf0a039',1,'IREcoclimAc::setType()'],['../classIRMideaAC.html#a89a6990ce864d111ccb97a1d37acc379',1,'IRMideaAC::setType()']]], - ['setunknownthreshold_4508',['setUnknownThreshold',['../classIRrecv.html#a02693553aad1decd67bdae60402e48bf',1,'IRrecv']]], - ['setusecelsius_4509',['setUseCelsius',['../classIRMideaAC.html#a1eeb72ddd2b9867c2f9c392080b9c1ed',1,'IRMideaAC']]], - ['setusefahrenheit_4510',['setUseFahrenheit',['../classIRGreeAC.html#af559afaa9da5fd27cdb516355da67bd6',1,'IRGreeAC']]], - ['setvane_4511',['setVane',['../classIRMitsubishiAC.html#abb247f1dca5cf23a7b8a16852dcf32f1',1,'IRMitsubishiAC']]], - ['setweeklytimerenable_4512',['setWeeklyTimerEnable',['../classIRDaikinESP.html#a0db67d46b13acfad9b94c7e4691777b8',1,'IRDaikinESP']]], - ['setweeklytimerenabled_4513',['setWeeklyTimerEnabled',['../classIRMitsubishiAC.html#ac872db2785dd08da86dfff04921b7df3',1,'IRMitsubishiAC']]], - ['setwidevane_4514',['setWideVane',['../classIRMitsubishiAC.html#a02b2b3d7456e6123c60dca70de346c25',1,'IRMitsubishiAC']]], - ['setwifi_4515',['setWiFi',['../classIRGreeAC.html#afde745ceaa97f9608195b2ba9fce6c5c',1,'IRGreeAC::setWiFi()'],['../classIRVoltas.html#a3aa24f471e306abfe7fd7af2b74c7ca0',1,'IRVoltas::setWifi()']]], - ['setxfan_4516',['setXFan',['../classIRGreeAC.html#af465c607222fa433f54c2ce56ced2474',1,'IRGreeAC::setXFan()'],['../classIRKelvinatorAC.html#af02da81109109cf1cb44057fd1a40164',1,'IRKelvinatorAC::setXFan()']]], - ['setzonefollow_4517',['setZoneFollow',['../classIRCoolixAC.html#a0c0f39d8e2e79d8259000695263ec3fa',1,'IRCoolixAC']]], - ['sharp_4518',['sharp',['../classIRac.html#a13494c43813e857bdeaa2cc95e2cb5bd',1,'IRac']]], - ['space_4519',['space',['../classIRsend.html#a0417b10d4e16718a87f8b2062a7d04a1',1,'IRsend']]], - ['statereset_4520',['stateReset',['../classIRAirwellAc.html#a82591a86e031ef30b58f9565b6233953',1,'IRAirwellAc::stateReset()'],['../classIRAmcorAc.html#a018ab4ca4d738d848d3388ea1300b83b',1,'IRAmcorAc::stateReset()'],['../classIRArgoAC.html#af34a99bc37c4496c9fd68856aa065a13',1,'IRArgoAC::stateReset()'],['../classIRCarrierAc64.html#abe58c8f97ab4c34fd0cf198b07589694',1,'IRCarrierAc64::stateReset()'],['../classIRCoolixAC.html#a0048b9ef226f8f4312cf8221ee3123f8',1,'IRCoolixAC::stateReset()'],['../classIRCoronaAc.html#a47726d4ff93528bd8a5a6f1b47ba7141',1,'IRCoronaAc::stateReset()'],['../classIRDaikinESP.html#a49f6b90336225f7e94b8aefd066e1993',1,'IRDaikinESP::stateReset()'],['../classIRDaikin2.html#a93928b703f9b72218f2a607879cb401d',1,'IRDaikin2::stateReset()'],['../classIRDaikin216.html#a8456bd9981063019d48c59e5050680ed',1,'IRDaikin216::stateReset()'],['../classIRDaikin160.html#a72f9f1526907f1076348666eb9151f75',1,'IRDaikin160::stateReset()'],['../classIRDaikin176.html#a7f0b4b6c0a4a8b0680a8b8cd0eda8127',1,'IRDaikin176::stateReset()'],['../classIRDaikin128.html#ab604a7594c3b0131c5d977e3fc3b3565',1,'IRDaikin128::stateReset()'],['../classIRDaikin152.html#adde28c0b529d4a32dc0b702746026b6a',1,'IRDaikin152::stateReset()'],['../classIRDaikin64.html#a5fd1412719c648212978d80474f256e4',1,'IRDaikin64::stateReset()'],['../classIRDelonghiAc.html#acadbed22a27f2376c1e8424dec0caa35',1,'IRDelonghiAc::stateReset()'],['../classIREcoclimAc.html#a2b88c0636f3947e48fc4aa48ade74e2e',1,'IREcoclimAc::stateReset()'],['../classIRElectraAc.html#ab8035c14158fcf3758f46f6976b814f7',1,'IRElectraAc::stateReset()'],['../classIRFujitsuAC.html#a603a0e1870f406e4e746a7bb4c37fb70',1,'IRFujitsuAC::stateReset()'],['../classIRGoodweatherAc.html#ae7f8873ad58e553dc89307220628bebf',1,'IRGoodweatherAc::stateReset()'],['../classIRGreeAC.html#a61356a0dfb4656ac438c3629c591b165',1,'IRGreeAC::stateReset()'],['../classIRHaierAC.html#a62fbae1d2bac01ac3a2194274aa839d9',1,'IRHaierAC::stateReset()'],['../classIRHaierACYRW02.html#a106e7ffa0d69cdf976087c6e190d03ea',1,'IRHaierACYRW02::stateReset()'],['../classIRHitachiAc.html#a0564c00c60e64e57e20f3c1a4bd3d894',1,'IRHitachiAc::stateReset()'],['../classIRHitachiAc1.html#a9764b329d982d018b15098b3044f9596',1,'IRHitachiAc1::stateReset()'],['../classIRHitachiAc424.html#afd8d5b21086b34cdc07b498157240f8f',1,'IRHitachiAc424::stateReset()'],['../classIRHitachiAc3.html#a7bdcddf9c7f85b7cb43a92198e422549',1,'IRHitachiAc3::stateReset()'],['../classIRHitachiAc344.html#a481cbfb0420ba884a7eb4c2ba82bd666',1,'IRHitachiAc344::stateReset()'],['../classIRKelvinatorAC.html#ad6fefe85023c3fc318b0e45924874f9f',1,'IRKelvinatorAC::stateReset()'],['../classIRLgAc.html#a5959000c9f0b2cf64742d6a2f1c4c9b9',1,'IRLgAc::stateReset()'],['../classIRMideaAC.html#acc584e07406e1811acfb26f6cd5383cd',1,'IRMideaAC::stateReset()'],['../classIRMitsubishiAC.html#a8da4be360c8e2fd3a5a40cb4049b5d84',1,'IRMitsubishiAC::stateReset()'],['../classIRMitsubishi136.html#a67556dab7ed42c68a274f4f24ecc35bb',1,'IRMitsubishi136::stateReset()'],['../classIRMitsubishi112.html#a9c601ba34e10d5c63886c2c5b405d9ae',1,'IRMitsubishi112::stateReset()'],['../classIRMitsubishiHeavy152Ac.html#a0b239cacd3a8a96f2e3d7047f26119da',1,'IRMitsubishiHeavy152Ac::stateReset()'],['../classIRMitsubishiHeavy88Ac.html#a1cf118f435c99372c89a140a79c67f1f',1,'IRMitsubishiHeavy88Ac::stateReset()'],['../classIRNeoclimaAc.html#a5ce32a6e6195b246696cb609994f3762',1,'IRNeoclimaAc::stateReset()'],['../classIRPanasonicAc.html#a9a9fbf531f04c486edf913c382351b2b',1,'IRPanasonicAc::stateReset()'],['../classIRPanasonicAc32.html#ac38e1daa7107f90d2d1984940c72c4a1',1,'IRPanasonicAc32::stateReset()'],['../classIRSamsungAc.html#a52186401655966b3103d3d73fb77e7f0',1,'IRSamsungAc::stateReset()'],['../classIRSanyoAc.html#aeba68a833d8756a9a6069edc3fef58cb',1,'IRSanyoAc::stateReset()'],['../classIRSharpAc.html#aa151c704ba4f5690a7cfadaf90c4b60d',1,'IRSharpAc::stateReset()'],['../classIRTcl112Ac.html#a049f475c1af7b62b9f3482dcf9e66d4a',1,'IRTcl112Ac::stateReset()'],['../classIRTechnibelAc.html#ae72f22533fc9b05169ac66ac034ca4d8',1,'IRTechnibelAc::stateReset()'],['../classIRTecoAc.html#ad53e6f3d3693ee6efb419326a3d4c492',1,'IRTecoAc::stateReset()'],['../classIRToshibaAC.html#a3d3c3df261b4db7a9d831c94cc206e8a',1,'IRToshibaAC::stateReset()'],['../classIRTranscoldAc.html#a88018c184feed75774ad01a41fdb3e69',1,'IRTranscoldAc::stateReset()'],['../classIRTrotecESP.html#a86c3415d8c1880c325bc22c2c4ca44e0',1,'IRTrotecESP::stateReset()'],['../classIRTrumaAc.html#a8a028e5859735ecfd11cbef649dd51d3',1,'IRTrumaAc::stateReset()'],['../classIRVestelAc.html#a921100234f5751f8b94d9673a5d217f9',1,'IRVestelAc::stateReset()'],['../classIRVoltas.html#a07cde80e35d990733c41d6b0e4dcafda',1,'IRVoltas::stateReset()'],['../classIRWhirlpoolAc.html#a371a6f48a2f4f66e4243dacbbf4471be',1,'IRWhirlpoolAc::stateReset()']]], - ['stephoriz_4521',['stepHoriz',['../classIRFujitsuAC.html#a53c48bc1f32c849263a3aa86ff06b1d4',1,'IRFujitsuAC']]], - ['stepvert_4522',['stepVert',['../classIRFujitsuAC.html#a942f106c27ce04094b5b615f2e174022',1,'IRFujitsuAC']]], - ['strtobool_4523',['strToBool',['../classIRac.html#a3dba736fe25bd3a3a47b9ec7dae51728',1,'IRac']]], - ['strtodecodetype_4524',['strToDecodeType',['../IRutils_8cpp.html#ae1614f315c1ebc44eaf1ac62055cc1ff',1,'strToDecodeType(const char *const str): IRutils.cpp'],['../IRutils_8h.html#a10b9312e4ac9c96d895af83db01ed72e',1,'strToDecodeType(const char *str): IRutils.cpp']]], - ['strtofanspeed_4525',['strToFanspeed',['../classIRac.html#a7173b12c155d04dd1db07a055f4ecb03',1,'IRac']]], - ['strtomodel_4526',['strToModel',['../classIRac.html#a7036fbbb918d644a98b5efa16374a256',1,'IRac']]], - ['strtoopmode_4527',['strToOpmode',['../classIRac.html#a251fa76ddacc84d2655bac723b7dea28',1,'IRac']]], - ['strtoswingh_4528',['strToSwingH',['../classIRac.html#a294d6040909519f465945245df56e56d',1,'IRac']]], - ['strtoswingv_4529',['strToSwingV',['../classIRac.html#a538c861d79afabb11fb8becedd3962f8',1,'IRac']]], - ['sumbytes_4530',['sumBytes',['../IRutils_8cpp.html#abfbd3d7cc33d0aac341e6619f3390108',1,'sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init): IRutils.cpp'],['../IRutils_8h.html#a3f33bdd680bea210b212d4e9925eb8eb',1,'sumBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0): IRutils.cpp']]], - ['sumnibbles_4531',['sumNibbles',['../namespaceirutils.html#a4752ecc3eafa3ca2e13344a52519b343',1,'irutils::sumNibbles(const uint8_t *const start, const uint16_t length, const uint8_t init)'],['../namespaceirutils.html#aeb5202fa0093ee6b7e07d4290229fbd2',1,'irutils::sumNibbles(const uint64_t data, const uint8_t count, const uint8_t init, const bool nibbleonly)']]], - ['swinghtostring_4532',['swinghToString',['../classIRac.html#a21c9d71bbf229fd8369480e50a7c3689',1,'IRac']]], - ['swingvtostring_4533',['swingvToString',['../classIRac.html#a641b59e48183a8f6d9b739ce7210f142',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.html deleted file mode 100644 index 48e591559..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.js deleted file mode 100644 index d9a5c2494..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_12.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['tcl112_4534',['tcl112',['../classIRac.html#a3028bd9e83956d57b592bb96638b3f59',1,'IRac']]], - ['technibel_4535',['technibel',['../classIRac.html#a13fbfbf7d6368a10b7526c1c1cedfa5a',1,'IRac']]], - ['teco_4536',['teco',['../classIRac.html#a9e612e04e270dd5710e8a63a64b56064',1,'IRac']]], - ['tickshigh_4537',['ticksHigh',['../classIRrecv.html#a573dbb20695f2ffc808623df8c36280c',1,'IRrecv']]], - ['tickslow_4538',['ticksLow',['../classIRrecv.html#ac08e50c5eec10c0095157f4bdd4051c8',1,'IRrecv']]], - ['timerms_4539',['TimerMs',['../classTimerMs.html#a7bf7f8d2fcf76b27b34ea4705810eef5',1,'TimerMs']]], - ['tocommon_4540',['toCommon',['../classIRAirwellAc.html#a279b9cf59acf8462ea99ffcd7d08b919',1,'IRAirwellAc::toCommon()'],['../classIRAmcorAc.html#a67b9fc041a0de132cfac901d1bfd1313',1,'IRAmcorAc::toCommon()'],['../classIRArgoAC.html#ad799686591d91845d526fc3a5db42171',1,'IRArgoAC::toCommon()'],['../classIRCarrierAc64.html#a6cef4a532c3f4c961500e51598a6df80',1,'IRCarrierAc64::toCommon()'],['../classIRCoolixAC.html#a533c6341065b5e47d56771d13c0c248a',1,'IRCoolixAC::toCommon()'],['../classIRCoronaAc.html#a38fbd2262153c740a71bb373a6672096',1,'IRCoronaAc::toCommon()'],['../classIRDaikinESP.html#ab636c6718d8663a98be0e32b189e6d44',1,'IRDaikinESP::toCommon()'],['../classIRDaikin2.html#a8d6c439465779b8febe9eb977e4542c0',1,'IRDaikin2::toCommon()'],['../classIRDaikin216.html#a4e1de110bf0c7a50fb8c2243b7f87524',1,'IRDaikin216::toCommon()'],['../classIRDaikin160.html#a70778c17bcdd6c8adf50af209406fad5',1,'IRDaikin160::toCommon()'],['../classIRDaikin176.html#aee7d30b9935881513afafa5291dd8c0c',1,'IRDaikin176::toCommon()'],['../classIRDaikin128.html#a03c0403dadb7377b463373dc67431b7a',1,'IRDaikin128::toCommon()'],['../classIRDaikin152.html#a0bd5276ee23cf56c75d8a84d8c4bf17a',1,'IRDaikin152::toCommon()'],['../classIRDaikin64.html#abcdf16d946975a35292168d4548999ab',1,'IRDaikin64::toCommon()'],['../classIRDelonghiAc.html#a30c2463464576889af014f8e15d59c75',1,'IRDelonghiAc::toCommon()'],['../classIREcoclimAc.html#a239da399ed837c535538e2321839746c',1,'IREcoclimAc::toCommon()'],['../classIRElectraAc.html#a8ea21abd10c629bd3dd9673ce36b07ed',1,'IRElectraAc::toCommon()'],['../classIRFujitsuAC.html#ae878d663cdcd9f40cb3ae348b03a4cb2',1,'IRFujitsuAC::toCommon()'],['../classIRGoodweatherAc.html#abaaa40915d93e8c6bd5dd49d8e02b510',1,'IRGoodweatherAc::toCommon()'],['../classIRGreeAC.html#ac28c640aa4b5dd0dbbca42b056f877f7',1,'IRGreeAC::toCommon()'],['../classIRHaierAC.html#a738de44369e3322d264c8ee78cc72ab6',1,'IRHaierAC::toCommon()'],['../classIRHaierACYRW02.html#a0189f929df672e9996d9c2959378d4af',1,'IRHaierACYRW02::toCommon()'],['../classIRHitachiAc.html#a2d4aa7ff76dfef5055e051e347c8552f',1,'IRHitachiAc::toCommon()'],['../classIRHitachiAc1.html#ad5819257f1042fa97689fc70e578adaa',1,'IRHitachiAc1::toCommon()'],['../classIRHitachiAc424.html#ad33ed9dfd26bb513e113549b932f2f3f',1,'IRHitachiAc424::toCommon()'],['../classIRHitachiAc344.html#a2bdc3e19a6125d107844f548e4321f6e',1,'IRHitachiAc344::toCommon()'],['../classIRKelvinatorAC.html#a4f44754277101b80574ce66b02bdbe06',1,'IRKelvinatorAC::toCommon()'],['../classIRLgAc.html#ab7c25ce38605a54204f761f8aa7f24e1',1,'IRLgAc::toCommon()'],['../classIRMideaAC.html#a62086b58f71908b75e28a61bd4f6bf15',1,'IRMideaAC::toCommon()'],['../classIRMitsubishiAC.html#af794d838a5f4ca75ac8e581d8d06c945',1,'IRMitsubishiAC::toCommon()'],['../classIRMitsubishi136.html#ad03ce7834e5b928cf9e2c7c266bc567e',1,'IRMitsubishi136::toCommon()'],['../classIRMitsubishi112.html#abe39fadc87c09105bdc330069ee7ce20',1,'IRMitsubishi112::toCommon()'],['../classIRMitsubishiHeavy152Ac.html#a37d7bbd42a6816c9c5639ed1080b1371',1,'IRMitsubishiHeavy152Ac::toCommon()'],['../classIRMitsubishiHeavy88Ac.html#a0e3ec0c4a3ffc9c0c5b5342e4d697601',1,'IRMitsubishiHeavy88Ac::toCommon()'],['../classIRNeoclimaAc.html#a068f762e89180f80011b25323a0b5c1a',1,'IRNeoclimaAc::toCommon()'],['../classIRPanasonicAc.html#af2218f117db06424ced00ba6c0cc3234',1,'IRPanasonicAc::toCommon()'],['../classIRPanasonicAc32.html#a49749cb320f52c62fd51a6d271277696',1,'IRPanasonicAc32::toCommon()'],['../classIRSamsungAc.html#a47fb72f99ca6dfba378e2ce60e4c1246',1,'IRSamsungAc::toCommon()'],['../classIRSanyoAc.html#a408e12d69a26c62d53254e4b7c29a925',1,'IRSanyoAc::toCommon()'],['../classIRSharpAc.html#a4fa96fdd02031b1b46736befcd8bae1a',1,'IRSharpAc::toCommon()'],['../classIRTcl112Ac.html#afa6cacde7053c502f66f227c9eb1e82d',1,'IRTcl112Ac::toCommon()'],['../classIRTechnibelAc.html#acafa5e84c84ca1e1299b7dbced6cdc17',1,'IRTechnibelAc::toCommon()'],['../classIRTecoAc.html#a35b2c56f7667d4f1ebe81ac28e7a38c7',1,'IRTecoAc::toCommon()'],['../classIRToshibaAC.html#a533cc022b014adff376c0dfc319242ca',1,'IRToshibaAC::toCommon()'],['../classIRTranscoldAc.html#abbd4d9ba01a8e27a719dcf00c2890d38',1,'IRTranscoldAc::toCommon()'],['../classIRTrotecESP.html#afc86878429018657442ce1fd1863ae06',1,'IRTrotecESP::toCommon()'],['../classIRTrumaAc.html#a71cbcde09a100df106dc86a6e9022958',1,'IRTrumaAc::toCommon()'],['../classIRVestelAc.html#ad31b99f939667487b6f04acace6a29bd',1,'IRVestelAc::toCommon()'],['../classIRVoltas.html#a79c76ddd91237e624115aaf0e183f3f0',1,'IRVoltas::toCommon()'],['../classIRWhirlpoolAc.html#a3fbdadc6b064cdb72358c220ce56ca41',1,'IRWhirlpoolAc::toCommon()']]], - ['tocommonfanspeed_4541',['toCommonFanSpeed',['../classIRAirwellAc.html#a38a93fc115fbe4deb0a5ee82a913c166',1,'IRAirwellAc::toCommonFanSpeed()'],['../classIRAmcorAc.html#a951aa81d98c66138f61069431e13f35a',1,'IRAmcorAc::toCommonFanSpeed()'],['../classIRArgoAC.html#a334afe3ce6536089bc2832985067f029',1,'IRArgoAC::toCommonFanSpeed()'],['../classIRCarrierAc64.html#a5a9149acc82fcc22a5be8dcbe791ab77',1,'IRCarrierAc64::toCommonFanSpeed()'],['../classIRCoolixAC.html#a6a0e7219c667eb06897b47a7c36f5fbc',1,'IRCoolixAC::toCommonFanSpeed()'],['../classIRCoronaAc.html#a6d5d0015f01acc97badff7edda964485',1,'IRCoronaAc::toCommonFanSpeed()'],['../classIRDaikinESP.html#a6855a423f10a2230953646d478400574',1,'IRDaikinESP::toCommonFanSpeed()'],['../classIRDaikin176.html#a6f9b7dddcf98c7a42495c900dddf505d',1,'IRDaikin176::toCommonFanSpeed()'],['../classIRDaikin128.html#a1c53a27678731229308e355eb94ec762',1,'IRDaikin128::toCommonFanSpeed()'],['../classIRDaikin64.html#acd24c4932e2bfd6bffbb9a90da2028a6',1,'IRDaikin64::toCommonFanSpeed()'],['../classIRDelonghiAc.html#a231e26843e3616e7455fd020dbb8807b',1,'IRDelonghiAc::toCommonFanSpeed()'],['../classIREcoclimAc.html#aee569b3f1c6e5f7209da6a5acd37ec66',1,'IREcoclimAc::toCommonFanSpeed()'],['../classIRElectraAc.html#a5d53fb85582344cfdbfa33da6acbdb7d',1,'IRElectraAc::toCommonFanSpeed()'],['../classIRFujitsuAC.html#a93a35e42d887b5ca6414b295a4a91526',1,'IRFujitsuAC::toCommonFanSpeed()'],['../classIRGoodweatherAc.html#aff899c76d5b808ee35c9f88c116b5dc4',1,'IRGoodweatherAc::toCommonFanSpeed()'],['../classIRGreeAC.html#ade6cb54e99b6dab1df708cbf25fc5967',1,'IRGreeAC::toCommonFanSpeed()'],['../classIRHaierAC.html#ad67ee0b7299d041aad77382dde893229',1,'IRHaierAC::toCommonFanSpeed()'],['../classIRHaierACYRW02.html#a15402e3ba2a9875d5b49f6dab3e85034',1,'IRHaierACYRW02::toCommonFanSpeed()'],['../classIRHitachiAc.html#afba02d48c4a023ed800abf38d5314c7e',1,'IRHitachiAc::toCommonFanSpeed()'],['../classIRHitachiAc1.html#a99f205391deb75d23d08d63e1feff0d4',1,'IRHitachiAc1::toCommonFanSpeed()'],['../classIRHitachiAc424.html#a16abdf55ea3ae4b06e2a23dad3496738',1,'IRHitachiAc424::toCommonFanSpeed()'],['../classIRKelvinatorAC.html#a0ebd262c554c5c843bc3f710570e1401',1,'IRKelvinatorAC::toCommonFanSpeed()'],['../classIRLgAc.html#af47317ba139a4b1e5961b9a45db974df',1,'IRLgAc::toCommonFanSpeed()'],['../classIRMideaAC.html#acd89d4864a46b146ac4f648c4406ded5',1,'IRMideaAC::toCommonFanSpeed()'],['../classIRMitsubishiAC.html#aa7dd30cde520b14575d7fcd992c3bbf1',1,'IRMitsubishiAC::toCommonFanSpeed()'],['../classIRMitsubishi136.html#aaf9f9f17f3ac59ef325b57b9110faa34',1,'IRMitsubishi136::toCommonFanSpeed()'],['../classIRMitsubishi112.html#aaeee082d9adbf7b0d91316c703571f1a',1,'IRMitsubishi112::toCommonFanSpeed()'],['../classIRMitsubishiHeavy152Ac.html#a5e26c3121aceb944fc688e6f641dd5b1',1,'IRMitsubishiHeavy152Ac::toCommonFanSpeed()'],['../classIRMitsubishiHeavy88Ac.html#aa5dae03951ba9a9aeac62184c27f9439',1,'IRMitsubishiHeavy88Ac::toCommonFanSpeed()'],['../classIRNeoclimaAc.html#a5d87285928bd8bfa2abad92fbdf384b5',1,'IRNeoclimaAc::toCommonFanSpeed()'],['../classIRPanasonicAc.html#a1eff8e4d670abc303a02d8baeeb58f8c',1,'IRPanasonicAc::toCommonFanSpeed()'],['../classIRPanasonicAc32.html#acbe96fc57d66d4759e007d97b2cba8b6',1,'IRPanasonicAc32::toCommonFanSpeed()'],['../classIRSamsungAc.html#a2905b33c273d2be6cabfc3b16b51a5b4',1,'IRSamsungAc::toCommonFanSpeed()'],['../classIRSanyoAc.html#a3bcd35a2e4933ddac55a4e27d9d43359',1,'IRSanyoAc::toCommonFanSpeed()'],['../classIRSharpAc.html#a4436ad5eadfc422a6f111ca07c08397b',1,'IRSharpAc::toCommonFanSpeed()'],['../classIRTcl112Ac.html#a66843ee5b53ce9be1aef3774b8df5c84',1,'IRTcl112Ac::toCommonFanSpeed()'],['../classIRTechnibelAc.html#aece92f0e3f4dd4c3b25a8b0408926d45',1,'IRTechnibelAc::toCommonFanSpeed()'],['../classIRTecoAc.html#ac3ad2828770440695969d696ca6ff46d',1,'IRTecoAc::toCommonFanSpeed()'],['../classIRToshibaAC.html#a6c77121c9aba3928e676394f88e88dee',1,'IRToshibaAC::toCommonFanSpeed()'],['../classIRTranscoldAc.html#ad373dbb4df435d9a191710e5bce56883',1,'IRTranscoldAc::toCommonFanSpeed()'],['../classIRTrotecESP.html#a4aaf17993757533370290fffb728befc',1,'IRTrotecESP::toCommonFanSpeed()'],['../classIRTrumaAc.html#ac91956eb18e0339cfa6280104737e22c',1,'IRTrumaAc::toCommonFanSpeed()'],['../classIRVestelAc.html#a6dfd46f56f2d6b15344722cde0741500',1,'IRVestelAc::toCommonFanSpeed()'],['../classIRVoltas.html#a822ac5b90857b912649601a2f7e75ac8',1,'IRVoltas::toCommonFanSpeed()'],['../classIRWhirlpoolAc.html#a61ef6661a985763540b7c2273b8b1b9c',1,'IRWhirlpoolAc::toCommonFanSpeed()']]], - ['tocommonmode_4542',['toCommonMode',['../classIRAirwellAc.html#ad2c717b7750e43894197ee8b292ba23b',1,'IRAirwellAc::toCommonMode()'],['../classIRAmcorAc.html#a6da2f34f1e044f815e94ede578f4c26f',1,'IRAmcorAc::toCommonMode()'],['../classIRArgoAC.html#a8ccd3f5398f50548fda3a9e0172fb5fa',1,'IRArgoAC::toCommonMode()'],['../classIRCarrierAc64.html#ab17b24d0306b8983886d15175898909e',1,'IRCarrierAc64::toCommonMode()'],['../classIRCoolixAC.html#a789fb5d5eab2e78d392c8e0b9a194b18',1,'IRCoolixAC::toCommonMode()'],['../classIRCoronaAc.html#a04ca6532beb099893eb1dd5d01bb4d31',1,'IRCoronaAc::toCommonMode()'],['../classIRDaikinESP.html#a3a7543204520da36547c163a96e30deb',1,'IRDaikinESP::toCommonMode()'],['../classIRDaikin176.html#aa0b9c96d3bf08400a5110bcfa9f1ec9d',1,'IRDaikin176::toCommonMode()'],['../classIRDaikin128.html#a105a4fc511feba96afc956bb36d2dc50',1,'IRDaikin128::toCommonMode()'],['../classIRDaikin64.html#a80b9dd0fbf935bed5035463af2ad0102',1,'IRDaikin64::toCommonMode()'],['../classIRDelonghiAc.html#a5a3eef369009836a629369cf835741c4',1,'IRDelonghiAc::toCommonMode()'],['../classIREcoclimAc.html#a0355e830df179eb4f006b473d30e3117',1,'IREcoclimAc::toCommonMode()'],['../classIRElectraAc.html#a01bd399c3b8908083b95f31d97ddb26f',1,'IRElectraAc::toCommonMode()'],['../classIRFujitsuAC.html#a96140e74d31631581003064f70041d02',1,'IRFujitsuAC::toCommonMode()'],['../classIRGoodweatherAc.html#ab3bcd1354b715179f67499c28fb219fb',1,'IRGoodweatherAc::toCommonMode()'],['../classIRGreeAC.html#a3f393071163fd1577c772a8515e2b5a9',1,'IRGreeAC::toCommonMode()'],['../classIRHaierAC.html#a4d73f75516afff0ef18bdbb7ed9c26ed',1,'IRHaierAC::toCommonMode()'],['../classIRHaierACYRW02.html#a24007a5be360c93ec157b95c8cc06493',1,'IRHaierACYRW02::toCommonMode()'],['../classIRHitachiAc.html#ab7edc0f5571100e1778779081e1c1114',1,'IRHitachiAc::toCommonMode()'],['../classIRHitachiAc1.html#a5cbca62775089593fe2447a77d84b3d5',1,'IRHitachiAc1::toCommonMode()'],['../classIRHitachiAc424.html#a2a725d8dc2178975c977a7496792e667',1,'IRHitachiAc424::toCommonMode()'],['../classIRKelvinatorAC.html#ae2683d38ae72b99e6843e37d36f96db2',1,'IRKelvinatorAC::toCommonMode()'],['../classIRLgAc.html#ac3436968a4445f0210403c353d766b73',1,'IRLgAc::toCommonMode()'],['../classIRMideaAC.html#ac2e0ff374678aadd7fea80194aef8bca',1,'IRMideaAC::toCommonMode()'],['../classIRMitsubishiAC.html#a7eae5da584faf41139be597d6a5e7210',1,'IRMitsubishiAC::toCommonMode()'],['../classIRMitsubishi136.html#a2771fd09b2e953b037c0c65c4e4029ee',1,'IRMitsubishi136::toCommonMode()'],['../classIRMitsubishi112.html#a6da77ebe6e03cfc09aa35e531c292ed1',1,'IRMitsubishi112::toCommonMode()'],['../classIRMitsubishiHeavy152Ac.html#a9faaff371ad3ec33de5646a1afd1992a',1,'IRMitsubishiHeavy152Ac::toCommonMode()'],['../classIRNeoclimaAc.html#a2a220b673c96e54e675d8296aa8b2303',1,'IRNeoclimaAc::toCommonMode()'],['../classIRPanasonicAc.html#a1ace0180b9ac3f4bd17357a03c64792e',1,'IRPanasonicAc::toCommonMode()'],['../classIRPanasonicAc32.html#a396a35813eef61112168f4700eb6e4f7',1,'IRPanasonicAc32::toCommonMode()'],['../classIRSamsungAc.html#a39820a05a9650e9da8a44109234a8d87',1,'IRSamsungAc::toCommonMode()'],['../classIRSanyoAc.html#abd8441f70245dd1225aeebf5f9b42e9b',1,'IRSanyoAc::toCommonMode()'],['../classIRSharpAc.html#a3f97044325d19f3d0987c6fe5b22f6d0',1,'IRSharpAc::toCommonMode()'],['../classIRTcl112Ac.html#a230a8d768089d869efdea6589b0a9e37',1,'IRTcl112Ac::toCommonMode()'],['../classIRTechnibelAc.html#a1a75968674695a9a6b3da2bc979e6cac',1,'IRTechnibelAc::toCommonMode()'],['../classIRTecoAc.html#ac6c7011b31208887de6d15edbffb211a',1,'IRTecoAc::toCommonMode()'],['../classIRToshibaAC.html#a77871a927ee67460b7bdcb8f204297bc',1,'IRToshibaAC::toCommonMode()'],['../classIRTranscoldAc.html#a4316d539b0a5270fab794fc7c3cef20a',1,'IRTranscoldAc::toCommonMode()'],['../classIRTrotecESP.html#a2b28b06bd25234427d90172b27d57092',1,'IRTrotecESP::toCommonMode()'],['../classIRTrumaAc.html#a7d07273e6fb55fd9ad0e328054e1bfd0',1,'IRTrumaAc::toCommonMode()'],['../classIRVestelAc.html#add602c0f052c8ada3b3b5748dda50a58',1,'IRVestelAc::toCommonMode()'],['../classIRVoltas.html#adcf63c5e8c0f2e88c103ee82cfd6a5a9',1,'IRVoltas::toCommonMode()'],['../classIRWhirlpoolAc.html#a748caa4e22f2f1f47e6334b1a031c4d8',1,'IRWhirlpoolAc::toCommonMode()']]], - ['tocommonswing_4543',['toCommonSwing',['../classIRTechnibelAc.html#ac379ff8f6f84fd93aa503269c36d6b49',1,'IRTechnibelAc']]], - ['tocommonswingh_4544',['toCommonSwingH',['../classIRDaikin2.html#a85bb152a4bdcc2798270ee58a3cfe2ae',1,'IRDaikin2::toCommonSwingH()'],['../classIRDaikin176.html#a6a3b66c9777992ed9fcab4e26c1d74dc',1,'IRDaikin176::toCommonSwingH()'],['../classIRHitachiAc344.html#a31562e32ccdf179032e75334b16279f0',1,'IRHitachiAc344::toCommonSwingH()'],['../classIRMitsubishiAC.html#ad7446e0a4ea8d349004c2b4224e69cd9',1,'IRMitsubishiAC::toCommonSwingH()'],['../classIRMitsubishi112.html#a17cfee6dc9ddc38465539ca46f29b263',1,'IRMitsubishi112::toCommonSwingH()'],['../classIRMitsubishiHeavy152Ac.html#afb9e039776c77e898928e9139a21a2b8',1,'IRMitsubishiHeavy152Ac::toCommonSwingH()'],['../classIRMitsubishiHeavy88Ac.html#aead69a01407729240055bd64e583b51b',1,'IRMitsubishiHeavy88Ac::toCommonSwingH()'],['../classIRPanasonicAc.html#aa4241990c350ca936c73b8391c2a11fc',1,'IRPanasonicAc::toCommonSwingH()']]], - ['tocommonswingv_4545',['toCommonSwingV',['../classIRDaikin2.html#a1f3e17757bd4beb0330d75ec3df9788b',1,'IRDaikin2::toCommonSwingV()'],['../classIRDaikin160.html#afae9b50e59c0efa46b96eef9f05a95b7',1,'IRDaikin160::toCommonSwingV()'],['../classIRGreeAC.html#a537d17801a90e22ad2baba7145b038cb',1,'IRGreeAC::toCommonSwingV()'],['../classIRHaierAC.html#aac354e2e4ad72d91667509398078b309',1,'IRHaierAC::toCommonSwingV()'],['../classIRHaierACYRW02.html#a0e426a3479fd80bb3816f016fac22f19',1,'IRHaierACYRW02::toCommonSwingV()'],['../classIRMitsubishiAC.html#a173e3c22f4173f235e7213e41925fdd9',1,'IRMitsubishiAC::toCommonSwingV()'],['../classIRMitsubishi136.html#aca5e6ac2d886083c8c56e2949f9d11e9',1,'IRMitsubishi136::toCommonSwingV()'],['../classIRMitsubishi112.html#a0e577d8554a090d7f2ac2a9ddd3bf15c',1,'IRMitsubishi112::toCommonSwingV()'],['../classIRMitsubishiHeavy152Ac.html#ae4dd9b8f0b5b4becb07618e859a09a51',1,'IRMitsubishiHeavy152Ac::toCommonSwingV()'],['../classIRMitsubishiHeavy88Ac.html#a0597303839e79c97b0fafe6c9ddbcf9a',1,'IRMitsubishiHeavy88Ac::toCommonSwingV()'],['../classIRPanasonicAc.html#adae801e0a2641c196a59d65c26404a13',1,'IRPanasonicAc::toCommonSwingV()'],['../classIRPanasonicAc32.html#a3118f4625c25c450a0dccf34568ea726',1,'IRPanasonicAc32::toCommonSwingV()'],['../classIRSanyoAc.html#a25f99385761bab4f7ae055b7dad9be3b',1,'IRSanyoAc::toCommonSwingV()']]], - ['togglerc5_4546',['toggleRC5',['../classIRsend.html#a42a78d4a3ef0f88b54bee488320344da',1,'IRsend']]], - ['togglerc6_4547',['toggleRC6',['../classIRsend.html#a5a0e8778394021ea12a8b8c2daf0add6',1,'IRsend']]], - ['toggleswinghoriz_4548',['toggleSwingHoriz',['../classIRFujitsuAC.html#aeba829bb9a9934ad9246a5ba4f4c03fc',1,'IRFujitsuAC']]], - ['toggleswingvert_4549',['toggleSwingVert',['../classIRFujitsuAC.html#a6dc9cc4bda83215fa97896c41b01e584',1,'IRFujitsuAC']]], - ['toshiba_4550',['toshiba',['../classIRac.html#a9bb89d95bd06eb04efb4999baee63725',1,'IRac']]], - ['tostring_4551',['toString',['../classIRAirwellAc.html#acbd6772f93e897308db4f606d1f56eac',1,'IRAirwellAc::toString()'],['../classIRAmcorAc.html#acf007ffc602b69ebbb7ed680e683fa25',1,'IRAmcorAc::toString()'],['../classIRArgoAC.html#ad8cbbda40a07a4300a68712e45dd4c2d',1,'IRArgoAC::toString()'],['../classIRCarrierAc64.html#a2807d30650f50653118dad5d10c52921',1,'IRCarrierAc64::toString()'],['../classIRCoolixAC.html#af4e833be17070157662c6fe01545b5f4',1,'IRCoolixAC::toString()'],['../classIRCoronaAc.html#a5ba0f7cd5d990a02bcdfe16ea95296ba',1,'IRCoronaAc::toString()'],['../classIRDaikinESP.html#aa167e4a9d3447c42f9fcbf185a7cd54c',1,'IRDaikinESP::toString()'],['../classIRDaikin2.html#ac714e4a88f2b129920a7813d3e1658b7',1,'IRDaikin2::toString()'],['../classIRDaikin216.html#ade381807ebfe6c1ac36ff256a28dca16',1,'IRDaikin216::toString()'],['../classIRDaikin160.html#a9608db210fb2df94e1889eced9a63f79',1,'IRDaikin160::toString()'],['../classIRDaikin176.html#a1f72e3a2d9cbb075956b5cbec4a41412',1,'IRDaikin176::toString()'],['../classIRDaikin128.html#ad93d8f524671a086732d7b727e46dc6c',1,'IRDaikin128::toString()'],['../classIRDaikin152.html#a138c4a4bb302490201b7628107ce20f3',1,'IRDaikin152::toString()'],['../classIRDaikin64.html#af156a0f84732988a8545f0161cb5599c',1,'IRDaikin64::toString()'],['../classIRDelonghiAc.html#a8b186047aab8735e2f33dd5bdc4b72c9',1,'IRDelonghiAc::toString()'],['../classIREcoclimAc.html#a2f82f6da12f5f7fa66e8c136df535aa9',1,'IREcoclimAc::toString()'],['../classIRElectraAc.html#af496feed11da67a84efd565b435c1d67',1,'IRElectraAc::toString()'],['../classIRFujitsuAC.html#a418e1c0ded978d80f85ec0fda813c8f3',1,'IRFujitsuAC::toString()'],['../classIRGoodweatherAc.html#a95b191495e9cf0c603b407d5e466661a',1,'IRGoodweatherAc::toString()'],['../classIRGreeAC.html#a1f18b275e0e3d10fbc952d1da9613074',1,'IRGreeAC::toString()'],['../classIRHaierAC.html#af52b438cc7c6b0600793a0eb3c8f6419',1,'IRHaierAC::toString()'],['../classIRHaierACYRW02.html#a306eae31da6256f46e0a3cb5c54711a3',1,'IRHaierACYRW02::toString()'],['../classIRHitachiAc.html#aa7a28c8cf15c06b01681feb17e8bb6fc',1,'IRHitachiAc::toString()'],['../classIRHitachiAc1.html#a20b176622eceed9b7f15091966d86f56',1,'IRHitachiAc1::toString()'],['../classIRHitachiAc424.html#a2fa426e756e6b94a480ddeba4bcde25c',1,'IRHitachiAc424::toString()'],['../classIRHitachiAc344.html#a62c4b681346bb8def0dacda3c92af4b1',1,'IRHitachiAc344::toString()'],['../classIRKelvinatorAC.html#a6635961df47a9847ace3185598750616',1,'IRKelvinatorAC::toString()'],['../classIRLgAc.html#a4a8711f21c894afd2653835be5bcdd9f',1,'IRLgAc::toString()'],['../classIRMideaAC.html#a4980fbb52145e1d12a6fa5601f75018a',1,'IRMideaAC::toString()'],['../classIRMitsubishiAC.html#a2bc1502cc0c28b098d3fb74f3bc83654',1,'IRMitsubishiAC::toString()'],['../classIRMitsubishi136.html#a9b8f30de94d7903ed73e19d55a93ab95',1,'IRMitsubishi136::toString()'],['../classIRMitsubishi112.html#a0a82daa2e90f9080da1a1bce2af95ca7',1,'IRMitsubishi112::toString()'],['../classIRMitsubishiHeavy152Ac.html#a76ae555f0d30b8cf87b4625c14301b44',1,'IRMitsubishiHeavy152Ac::toString()'],['../classIRMitsubishiHeavy88Ac.html#a9647e2c511ba34dbfdc0e4956953691f',1,'IRMitsubishiHeavy88Ac::toString()'],['../classIRNeoclimaAc.html#a5f285a0eb02b57ae0f8dc6d29e7aba83',1,'IRNeoclimaAc::toString()'],['../classIRPanasonicAc.html#ada0b3e2bf11123d0a2f5df8692ae73ad',1,'IRPanasonicAc::toString()'],['../classIRPanasonicAc32.html#a4aee4f688769c04453ac275ffdb1a94c',1,'IRPanasonicAc32::toString()'],['../classIRSamsungAc.html#a9e1b126cbbd3a90e275e632aaa8fd506',1,'IRSamsungAc::toString()'],['../classIRSanyoAc.html#aec5e4f0371da52f752919f510ee1d106',1,'IRSanyoAc::toString()'],['../classIRSharpAc.html#a995b6d988725b60a02dbcf1e0b5b9e5f',1,'IRSharpAc::toString()'],['../classIRTcl112Ac.html#af9bed8c8ef7e25e624f1f4765722acc5',1,'IRTcl112Ac::toString()'],['../classIRTechnibelAc.html#aa7b74876e99ee837f789640403b9c952',1,'IRTechnibelAc::toString()'],['../classIRTecoAc.html#a9fe1e8da3cc963d5d55a4967fe83dcce',1,'IRTecoAc::toString()'],['../classIRToshibaAC.html#a2d83a10c921398a1b32888c68bb4a35d',1,'IRToshibaAC::toString()'],['../classIRTranscoldAc.html#a8be351a7df54e6606eeebc8630ee4029',1,'IRTranscoldAc::toString()'],['../classIRTrotecESP.html#a0c7c6f4b33efcea9332d464908d7c87f',1,'IRTrotecESP::toString()'],['../classIRTrumaAc.html#a0250f4a833b4ec583d28e85dd5ec6f7a',1,'IRTrumaAc::toString()'],['../classIRVestelAc.html#ab13d9ddf1d487acb12a4d8e3cee72b1b',1,'IRVestelAc::toString()'],['../classIRVoltas.html#af650633516b67861f6f074f3be943bbd',1,'IRVoltas::toString()'],['../classIRWhirlpoolAc.html#a26912db41a4e5afa2b3ad2bf537b9170',1,'IRWhirlpoolAc::toString()']]], - ['transcold_4552',['transcold',['../classIRac.html#a788f29495e5ac706bdb4f4efabcb26d0',1,'IRac']]], - ['trotec_4553',['trotec',['../classIRac.html#aed1a012c0546c2b1d53e86871a42ba1a',1,'IRac']]], - ['truma_4554',['truma',['../classIRac.html#ab4cffb706bed9926b5eb600eba083482',1,'IRac']]], - ['typetostring_4555',['typeToString',['../IRutils_8cpp.html#a9e98a1b929f36dfa75c2e325bf281cd1',1,'typeToString(const decode_type_t protocol, const bool isRepeat): IRutils.cpp'],['../IRutils_8h.html#a7f49135f3d160700eb12ff6b7309341c',1,'typeToString(const decode_type_t protocol, const bool isRepeat=false): IRutils.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.html deleted file mode 100644 index f1fc553fe..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.js deleted file mode 100644 index 97563a01f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_13.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['uint64tostring_4556',['uint64ToString',['../IRutils_8cpp.html#a9f6ddef74b41ef6f8d2805fcfc396420',1,'uint64ToString(uint64_t input, uint8_t base): IRutils.cpp'],['../IRutils_8h.html#a781650451d38303e80da677539f574ee',1,'uint64ToString(uint64_t input, uint8_t base=10): IRutils.cpp']]], - ['uint8tobcd_4557',['uint8ToBcd',['../namespaceirutils.html#a534704a52b75acd46f687cc0a2b91bf1',1,'irutils']]], - ['updateandsavestate_4558',['updateAndSaveState',['../classIRCoolixAC.html#a2681a6affc5fb542584b1ef241bc38af',1,'IRCoolixAC']]], - ['updatechecksums_4559',['updateChecksums',['../namespaceIRXmpUtils.html#a0ada8200316c402f268dd621a3b0695a',1,'IRXmpUtils']]], - ['updateuselongorshort_4560',['updateUseLongOrShort',['../classIRFujitsuAC.html#a0c2aed356899787b8cd51b76b59e01bb',1,'IRFujitsuAC']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.html deleted file mode 100644 index 0302cd989..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.js deleted file mode 100644 index 0b486f1ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_14.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['validchecksum_4561',['validChecksum',['../classIRAmcorAc.html#a1ad297a62ac3152c9d957cef38757d28',1,'IRAmcorAc::validChecksum()'],['../classIRArgoAC.html#acfa5a9df8273123e6f4c48684ef60006',1,'IRArgoAC::validChecksum()'],['../classIRCarrierAc64.html#affa23f178e079cd3a6c933240759fe80',1,'IRCarrierAc64::validChecksum()'],['../classIRDaikinESP.html#ad766e60827f80b96a66449bddc621d87',1,'IRDaikinESP::validChecksum()'],['../classIRDaikin2.html#ade5c0dbfe38d9ac0c4bc009c897af04d',1,'IRDaikin2::validChecksum()'],['../classIRDaikin216.html#a663c11977545ba01b34715a61a26ab88',1,'IRDaikin216::validChecksum()'],['../classIRDaikin160.html#a0d9f3af404e3b6c116e8c27e938f8479',1,'IRDaikin160::validChecksum()'],['../classIRDaikin176.html#abc97abc68f535f7ad801b393e0a795d5',1,'IRDaikin176::validChecksum()'],['../classIRDaikin128.html#ad0b16e48bff00c5cdeffa1419c003946',1,'IRDaikin128::validChecksum()'],['../classIRDaikin152.html#ade1c641eecea63857115fc20f1811fe7',1,'IRDaikin152::validChecksum()'],['../classIRDaikin64.html#ab04287881112ff21d1ea541c0f21b507',1,'IRDaikin64::validChecksum()'],['../classIRDelonghiAc.html#ae39b20bcea2b7090ac2e29d8cd28e5f6',1,'IRDelonghiAc::validChecksum()'],['../classIRElectraAc.html#a60034a18e7574844fb59a03e7789f419',1,'IRElectraAc::validChecksum()'],['../classIRFujitsuAC.html#a26153c647d127356e47d35a7456c6235',1,'IRFujitsuAC::validChecksum()'],['../classIRGreeAC.html#a74e7df0634f0a60110db8c033d9d5b1d',1,'IRGreeAC::validChecksum()'],['../classIRHaierAC.html#ad7aae554b8f0a76493efc2a43ac0f780',1,'IRHaierAC::validChecksum()'],['../classIRHaierACYRW02.html#a3f6d071d215b0316cccc2e94c4786954',1,'IRHaierACYRW02::validChecksum()'],['../classIRHitachiAc.html#a2549c1fd2e8a603eb8924fbba8b26e87',1,'IRHitachiAc::validChecksum()'],['../classIRHitachiAc1.html#aa6b7ab76567ee15aa08b1594c67bd29d',1,'IRHitachiAc1::validChecksum()'],['../classIRKelvinatorAC.html#aaa915fa5eb3f7e5c7a3dc143b6fda826',1,'IRKelvinatorAC::validChecksum()'],['../classIRLgAc.html#a51748fa24de24049a2fafb4590e84176',1,'IRLgAc::validChecksum()'],['../classIRMideaAC.html#a971ab4af0267bb732834e7e1f7b8e354',1,'IRMideaAC::validChecksum()'],['../classIRMitsubishiAC.html#ad74885e17434aa9038dc19ad74de4cd0',1,'IRMitsubishiAC::validChecksum()'],['../classIRMitsubishi136.html#a666d1268a93e96b50ac9012c09320de9',1,'IRMitsubishi136::validChecksum()'],['../classIRMitsubishiHeavy152Ac.html#abef94200719da0c14e211315ffc8bede',1,'IRMitsubishiHeavy152Ac::validChecksum()'],['../classIRMitsubishiHeavy88Ac.html#aabd9d8f81108f20f1d7adff3ac6c2fd4',1,'IRMitsubishiHeavy88Ac::validChecksum()'],['../classIRNeoclimaAc.html#a32e4b4444e0a97b6da4447e977f74f94',1,'IRNeoclimaAc::validChecksum()'],['../classIRPanasonicAc.html#a6a084754596f7840dd308041d11a822d',1,'IRPanasonicAc::validChecksum()'],['../classIRSamsungAc.html#a4f7339bce78ce2b656fc597b4c88db22',1,'IRSamsungAc::validChecksum()'],['../classIRSanyoAc.html#a77844e855a875ff0f5dc79200a3d2777',1,'IRSanyoAc::validChecksum()'],['../classIRSharpAc.html#acb7fb0ac19e09da02d36cb73c808420d',1,'IRSharpAc::validChecksum()'],['../classIRTcl112Ac.html#a204bc37ffadf72ed31b305197c4803f4',1,'IRTcl112Ac::validChecksum()'],['../classIRTechnibelAc.html#ac0bc7bfe24f72255230c8a4c1c7eb192',1,'IRTechnibelAc::validChecksum()'],['../classIRToshibaAC.html#adc7c1eee14e4de896121ad06e88b61eb',1,'IRToshibaAC::validChecksum()'],['../classIRTrotecESP.html#ae08748e33ed12c536b18f6d0dc4da1c7',1,'IRTrotecESP::validChecksum()'],['../classIRTrumaAc.html#abd89085aeaa1847e37e14c01ac874c69',1,'IRTrumaAc::validChecksum()'],['../classIRVestelAc.html#ad3bcc08fb4242af7dcc65e534816a219',1,'IRVestelAc::validChecksum()'],['../classIRVoltas.html#a020336b6c8fd363d50ca44ba2b78181d',1,'IRVoltas::validChecksum()'],['../classIRWhirlpoolAc.html#a2d891069ebdecc62b03e8c92befa15c6',1,'IRWhirlpoolAc::validChecksum()']]], - ['validsection_4562',['validSection',['../classIRCoronaAc.html#af36894d88e7fb45affc883ba0b077862',1,'IRCoronaAc']]], - ['vestel_4563',['vestel',['../classIRac.html#a9b1cd1a4d44bc56e62128b9dbc178bba',1,'IRac']]], - ['voltas_4564',['voltas',['../classIRac.html#aab4cf3b1872a94835cf1c885b767adb6',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.html deleted file mode 100644 index 18cf76b24..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.js deleted file mode 100644 index d096d2c6a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_15.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['whirlpool_4565',['whirlpool',['../classIRac.html#ae5f7a03589f614c03c5ad8629100b05a',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.html deleted file mode 100644 index 9182391d2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.js deleted file mode 100644 index fea443fd5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_16.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['xorbytes_4566',['xorBytes',['../IRutils_8cpp.html#aaa2a3fb714375e61051a0b24623b9cc9',1,'xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init): IRutils.cpp'],['../IRutils_8h.html#ab030689a93499311ee8e6621ac8757aa',1,'xorBytes(const uint8_t *const start, const uint16_t length, const uint8_t init=0): IRutils.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.html deleted file mode 100644 index 807950604..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.js deleted file mode 100644 index d990490d8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_17.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_7eirrecv_4567',['~IRrecv',['../classIRrecv.html#a87d4cca5e350177cb0922842dda1eb5b',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.html deleted file mode 100644 index 2737c5ac1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.js deleted file mode 100644 index 273b21af9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['bcdtouint8_3866',['bcdToUint8',['../namespaceirutils.html#af18c4abfd0ed9f4b3a099ecec1999ee7',1,'irutils']]], - ['begin_3867',['begin',['../classIRAirwellAc.html#a09a142457af5e012405da80ddaef1dc0',1,'IRAirwellAc::begin()'],['../classIRAmcorAc.html#aa723533eea981f79844f241d5bb84654',1,'IRAmcorAc::begin()'],['../classIRArgoAC.html#aca61a63c37797699540c180354809bd8',1,'IRArgoAC::begin()'],['../classIRCarrierAc64.html#a7d9800edffad8a529971535ada5c00ad',1,'IRCarrierAc64::begin()'],['../classIRCoolixAC.html#a089744bd3bfd65253cd507192afc5311',1,'IRCoolixAC::begin()'],['../classIRCoronaAc.html#a7db1a8eb9c3c7f76091b2707458e54a9',1,'IRCoronaAc::begin()'],['../classIRDaikinESP.html#accd087c48f246a71898cc6fd7afc2cc7',1,'IRDaikinESP::begin()'],['../classIRDaikin2.html#a0fc6c2ca326a1f3b3e4e2b87643d044b',1,'IRDaikin2::begin()'],['../classIRDaikin216.html#ab78433160895dd26cabf4fd2c4b7515d',1,'IRDaikin216::begin()'],['../classIRDaikin160.html#a653727b34a1e50bef14ef0033a4f013a',1,'IRDaikin160::begin()'],['../classIRDaikin176.html#a0e41b220033f16e57664f8d59b6e890b',1,'IRDaikin176::begin()'],['../classIRDaikin128.html#ac1687817fe17f87e0962eb07be81c84d',1,'IRDaikin128::begin()'],['../classIRDaikin152.html#a06039da8e295b6cc785489989c2b012d',1,'IRDaikin152::begin()'],['../classIRDaikin64.html#a9af2d9d594db9114397fb87d19bbb459',1,'IRDaikin64::begin()'],['../classIRDelonghiAc.html#af3e6d5f445b5968fc69792a1c06f6d5b',1,'IRDelonghiAc::begin()'],['../classIREcoclimAc.html#a828ba8b5663d3ceabe8529d4ece87400',1,'IREcoclimAc::begin()'],['../classIRElectraAc.html#afff519ff9e81ec4aa03ff337f8efef13',1,'IRElectraAc::begin()'],['../classIRFujitsuAC.html#af0dc3fffdafae5970bc367f31029464b',1,'IRFujitsuAC::begin()'],['../classIRGoodweatherAc.html#abace3c8b25d4737a83fe33f94fc741d9',1,'IRGoodweatherAc::begin()'],['../classIRGreeAC.html#a44cf8f0e09248741094af4b35321ab1c',1,'IRGreeAC::begin()'],['../classIRHaierAC.html#ab92fd48ccb5707cb6d14e9d46ce42e17',1,'IRHaierAC::begin()'],['../classIRHaierACYRW02.html#addc01e60e8c4045fab6f22c852eb620f',1,'IRHaierACYRW02::begin()'],['../classIRHitachiAc.html#a62817c840f352bb01a394c37fc95f0f0',1,'IRHitachiAc::begin()'],['../classIRHitachiAc1.html#a28d5d351003d3e0bc1506b06cac8b3d6',1,'IRHitachiAc1::begin()'],['../classIRHitachiAc424.html#a11866bba49e9b976eb22b1039787ecae',1,'IRHitachiAc424::begin()'],['../classIRHitachiAc3.html#a6d79ac7b8ce977e8059019349d6991a7',1,'IRHitachiAc3::begin()'],['../classIRKelvinatorAC.html#a4591bf4e8131aa2a228cbc611156e7f4',1,'IRKelvinatorAC::begin()'],['../classIRLgAc.html#ac08ada1c67ace5ee2ebe4d325aa8c25d',1,'IRLgAc::begin()'],['../classIRMideaAC.html#ac36b6aa76b6b98ab186cd1d5ad9246b4',1,'IRMideaAC::begin()'],['../classIRMitsubishiAC.html#aa6e58080fd811f5b6d0f90c4ef5917df',1,'IRMitsubishiAC::begin()'],['../classIRMitsubishi136.html#abbcd8307862beee2899d2b9900537520',1,'IRMitsubishi136::begin()'],['../classIRMitsubishi112.html#a1d00958556872286b1818d0dbf02e112',1,'IRMitsubishi112::begin()'],['../classIRMitsubishiHeavy152Ac.html#afd649a53d9f7d9b31b7a5732d6cd0857',1,'IRMitsubishiHeavy152Ac::begin()'],['../classIRMitsubishiHeavy88Ac.html#a9bcf18c942ad4df4856bd319215a2002',1,'IRMitsubishiHeavy88Ac::begin()'],['../classIRNeoclimaAc.html#a8f82159b94d86cc4e3d4719441bfa96e',1,'IRNeoclimaAc::begin()'],['../classIRPanasonicAc.html#af48075dc4eb84fcc7f718375d4b0e00a',1,'IRPanasonicAc::begin()'],['../classIRPanasonicAc32.html#a8f57fefe38eac51f49113a21defadc4c',1,'IRPanasonicAc32::begin()'],['../classIRSamsungAc.html#a89f1f902042cd6c6ba9d0f0c6d2cc581',1,'IRSamsungAc::begin()'],['../classIRSanyoAc.html#af4859c4049a35b7f82cf91d326c9a957',1,'IRSanyoAc::begin()'],['../classIRSharpAc.html#ab87e5b599b7e8fc387fff25b5e13e34f',1,'IRSharpAc::begin()'],['../classIRTcl112Ac.html#a5b9983ab4027951679f0dc31b33cbadf',1,'IRTcl112Ac::begin()'],['../classIRTechnibelAc.html#a094f2f3b3690ddd773a175bacd99f894',1,'IRTechnibelAc::begin()'],['../classIRTecoAc.html#a3b23a8556686c83b146101fc31b0dff3',1,'IRTecoAc::begin()'],['../classIRToshibaAC.html#a41e847f399e42c91b0f4aa2ef5d36cba',1,'IRToshibaAC::begin()'],['../classIRTranscoldAc.html#ad3daf2c7108712b6e54eba9c68071910',1,'IRTranscoldAc::begin()'],['../classIRTrotecESP.html#a093b874287adb8ef2cc60c832765ff58',1,'IRTrotecESP::begin()'],['../classIRTrumaAc.html#a46d8ace3fd0d30f07c35b52c4d9ff71a',1,'IRTrumaAc::begin()'],['../classIRVestelAc.html#a794808d49eb6ce1521ff800b2b15a580',1,'IRVestelAc::begin()'],['../classIRVoltas.html#a1b895fa945ce8c6f81444d9306a59d65',1,'IRVoltas::begin()'],['../classIRWhirlpoolAc.html#a21db8b31504d416efb2511a33bdc2209',1,'IRWhirlpoolAc::begin()'],['../classIRsend.html#a386f026bf739b0718efde4cffa6ce129',1,'IRsend::begin()']]], - ['booltostring_3868',['boolToString',['../classIRac.html#a9bbd9e6b72e82a752df56e8c489668cf',1,'IRac']]], - ['buildfromstate_3869',['buildFromState',['../classIRFujitsuAC.html#a6fc8d7d0f649185e0858974394636a8d',1,'IRFujitsuAC']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.html deleted file mode 100644 index 6da86e7da..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.js deleted file mode 100644 index 971a46a4f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_3.js +++ /dev/null @@ -1,38 +0,0 @@ -var searchData= -[ - ['calcblockchecksum_3870',['calcBlockChecksum',['../classIRKelvinatorAC.html#a22f561397c526ed6cc3f69a5d527d8d6',1,'IRKelvinatorAC']]], - ['calcchecksum_3871',['calcChecksum',['../classIRAmcorAc.html#aec764cf4d88bb3fcbe3f36d24780f6a9',1,'IRAmcorAc::calcChecksum()'],['../classIRArgoAC.html#acab2fe3b9f77f57f0e99da0bec0d7392',1,'IRArgoAC::calcChecksum()'],['../classIRCarrierAc64.html#a20676dcf4b0a6510cc3bce282fbf8504',1,'IRCarrierAc64::calcChecksum()'],['../classIRDaikin64.html#ac29c18fde1b0cd98991e68c0f672d0e9',1,'IRDaikin64::calcChecksum()'],['../classIRDelonghiAc.html#a14d7629bb888deb02e83886191f44c2d',1,'IRDelonghiAc::calcChecksum()'],['../classIRElectraAc.html#aa8063d07e41ca2cc0fd27093a2e67bb2',1,'IRElectraAc::calcChecksum()'],['../classIRHitachiAc.html#a6e5da77c12ad105439eb159b6a58104a',1,'IRHitachiAc::calcChecksum()'],['../classIRHitachiAc1.html#a6995513d5b59cd7b14cfff39c8843e8d',1,'IRHitachiAc1::calcChecksum()'],['../classIRLgAc.html#a96024e736cf87e65b4e2db7c4c269520',1,'IRLgAc::calcChecksum()'],['../classIRMideaAC.html#ac8733348b311ecf8eed87021cdf4ee31',1,'IRMideaAC::calcChecksum()'],['../classIRNeoclimaAc.html#ac75f316cd1813cdb4e8a6d45d10ddd57',1,'IRNeoclimaAc::calcChecksum()'],['../classIRPanasonicAc.html#a0e38b0f3c54e49cdb59f92279e19840f',1,'IRPanasonicAc::calcChecksum()'],['../classIRSamsungAc.html#a00f9b2a1480d2ed45bdea5d236c77d0f',1,'IRSamsungAc::calcChecksum()'],['../classIRSanyoAc.html#a7836c947d6d725d6c55ae2ca9e8b445d',1,'IRSanyoAc::calcChecksum()'],['../classIRSharpAc.html#af3655c9c394b1391572e8ffab70881ff',1,'IRSharpAc::calcChecksum()'],['../classIRTcl112Ac.html#a0973a1c8a53661ee7720ecb5d08e6dcc',1,'IRTcl112Ac::calcChecksum()'],['../classIRTechnibelAc.html#a1762ef4003cec898543cebe0957e2c8b',1,'IRTechnibelAc::calcChecksum()'],['../classIRToshibaAC.html#a0d91d32d0d9d722f750eb423d88509f4',1,'IRToshibaAC::calcChecksum()'],['../classIRTrotecESP.html#ac1fdbcbbb8dd1ca50ccf2b55c7281c89',1,'IRTrotecESP::calcChecksum()'],['../classIRTrumaAc.html#a88f8ba515492d3d217f6476e0f386f1e',1,'IRTrumaAc::calcChecksum()'],['../classIRVestelAc.html#ac0ba3de4de70350c5325b3d5e0b39e58',1,'IRVestelAc::calcChecksum()'],['../classIRVoltas.html#a0069131bedc4b97a61547abe9640fd09',1,'IRVoltas::calcChecksum()']]], - ['calcfirstchecksum_3872',['calcFirstChecksum',['../classIRDaikin128.html#a25b25f6b73bb5f1fd17a16080179d4bc',1,'IRDaikin128']]], - ['calcrepeatoffset_3873',['calcRepeatOffset',['../namespaceIRXmpUtils.html#adbf7d8c8f73c5c9beca3094871d6a7c2',1,'IRXmpUtils']]], - ['calcsecondchecksum_3874',['calcSecondChecksum',['../classIRDaikin128.html#aea8da64300afe0d62ddf3082a72251f2',1,'IRDaikin128']]], - ['calcsectionchecksum_3875',['calcSectionChecksum',['../namespaceIRXmpUtils.html#a170c46b9aa59d1717fdff6f932353dca',1,'IRXmpUtils']]], - ['calculatechecksum_3876',['calculateChecksum',['../classIRMitsubishiAC.html#aaadefc5880dcd48e3fb2f12b59101f71',1,'IRMitsubishiAC']]], - ['calcusecperiod_3877',['calcUSecPeriod',['../classIRsend.html#ae9e68c0ed22e27c8f7ff82cec7ca3e33',1,'IRsend']]], - ['calibrate_3878',['calibrate',['../classIRAirwellAc.html#ae7a80cbb217d35835961477caaea3218',1,'IRAirwellAc::calibrate()'],['../classIRAmcorAc.html#a6206e866e859bc4690cb014c49c1ff80',1,'IRAmcorAc::calibrate()'],['../classIRArgoAC.html#a63cd2f350a7f249c020439543ef3c6d5',1,'IRArgoAC::calibrate()'],['../classIRCarrierAc64.html#a0718376156750e66f98ea0549c75b21b',1,'IRCarrierAc64::calibrate()'],['../classIRCoolixAC.html#a9e39ce5050888210d6ba9b79ae3763e3',1,'IRCoolixAC::calibrate()'],['../classIRCoronaAc.html#a5b10141e4a6e3d8511fb7f9f46d00a96',1,'IRCoronaAc::calibrate()'],['../classIRDaikinESP.html#a638a49f49275a2ab0affb09088794e1b',1,'IRDaikinESP::calibrate()'],['../classIRDaikin2.html#a96c62125bddf113c6524960062d05a57',1,'IRDaikin2::calibrate()'],['../classIRDaikin216.html#a49d7501966528c0a690cfb505f163e26',1,'IRDaikin216::calibrate()'],['../classIRDaikin160.html#a608b5556f316c31e3a8aa73684e4e10d',1,'IRDaikin160::calibrate()'],['../classIRDaikin176.html#a1f5989110782c18aa18e3757c50f4a31',1,'IRDaikin176::calibrate()'],['../classIRDaikin128.html#a281396f4c632899648694e3139c3acd0',1,'IRDaikin128::calibrate()'],['../classIRDaikin152.html#a82fa8bfb3384ed09473345b6e194c3ba',1,'IRDaikin152::calibrate()'],['../classIRDaikin64.html#a12a1e21ba1b06f9b3ffac56691ff2206',1,'IRDaikin64::calibrate()'],['../classIRDelonghiAc.html#aab8f78adcd7fcbea0be753a4fc7696e0',1,'IRDelonghiAc::calibrate()'],['../classIREcoclimAc.html#a20a2b503f5125a90c4ab183dfe92446b',1,'IREcoclimAc::calibrate()'],['../classIRElectraAc.html#af333e90117ab035ff92389d4eefb3649',1,'IRElectraAc::calibrate()'],['../classIRFujitsuAC.html#a8bb6d8456561dfb04ccac95e0e489558',1,'IRFujitsuAC::calibrate()'],['../classIRGoodweatherAc.html#a8a747144587cf38d64bb32a7f86432b3',1,'IRGoodweatherAc::calibrate()'],['../classIRGreeAC.html#a8069d00a16ed04fd6fa10d84b364bca7',1,'IRGreeAC::calibrate()'],['../classIRHaierAC.html#a448b1d5db05f7722db4758e968ea3171',1,'IRHaierAC::calibrate()'],['../classIRHaierACYRW02.html#a2081b29d0526e339a6b94fc41c854197',1,'IRHaierACYRW02::calibrate()'],['../classIRHitachiAc.html#aaabd743da491ef5d73c4b8c46f11241a',1,'IRHitachiAc::calibrate()'],['../classIRHitachiAc1.html#a847a26df2e19668b147cba2eef595a21',1,'IRHitachiAc1::calibrate()'],['../classIRHitachiAc424.html#aae5e5c13767f335331c5fab8d8ba55d6',1,'IRHitachiAc424::calibrate()'],['../classIRHitachiAc3.html#a02e065c08f9ec4a3d9e6f71432087595',1,'IRHitachiAc3::calibrate()'],['../classIRKelvinatorAC.html#aee8863c1678b09432618bb4ca734db95',1,'IRKelvinatorAC::calibrate()'],['../classIRLgAc.html#a4fd11e935c781319b29f606f2f4b2570',1,'IRLgAc::calibrate()'],['../classIRMideaAC.html#a4077604c2af56783f95a0a64eda7148b',1,'IRMideaAC::calibrate()'],['../classIRMitsubishiAC.html#a973c876e34942776ac98f27de96c5228',1,'IRMitsubishiAC::calibrate()'],['../classIRMitsubishi136.html#a76133542efc3763cb7edc9809ad8d93c',1,'IRMitsubishi136::calibrate()'],['../classIRMitsubishi112.html#ad148250070a3f4ac57ed6cb957ffdefb',1,'IRMitsubishi112::calibrate()'],['../classIRMitsubishiHeavy152Ac.html#a5d4c4ce0e69ed33a2f1db2af127c13c5',1,'IRMitsubishiHeavy152Ac::calibrate()'],['../classIRMitsubishiHeavy88Ac.html#a027423ffbee92ef65b02423f7cbaeca8',1,'IRMitsubishiHeavy88Ac::calibrate()'],['../classIRNeoclimaAc.html#a636dd97ca22c847f966eca8112c8eede',1,'IRNeoclimaAc::calibrate()'],['../classIRPanasonicAc.html#a3f850333f2aa7ce40856c99ef85ffd79',1,'IRPanasonicAc::calibrate()'],['../classIRPanasonicAc32.html#a99218b5c80a3cedda986df9bfbcf5065',1,'IRPanasonicAc32::calibrate()'],['../classIRSamsungAc.html#a5cc7486ae41f61cbe0bb053dd7c9e9e3',1,'IRSamsungAc::calibrate()'],['../classIRSanyoAc.html#a603f8f7dcfa1c3707a64ee092c72cb09',1,'IRSanyoAc::calibrate()'],['../classIRSharpAc.html#ac37b1a5679ce90e84f6f95c5df1526bb',1,'IRSharpAc::calibrate()'],['../classIRTcl112Ac.html#a435744e4c6ef31b362d15523ce0584f5',1,'IRTcl112Ac::calibrate()'],['../classIRTechnibelAc.html#a137e375497c699b0e7bfd8a7d46f087c',1,'IRTechnibelAc::calibrate()'],['../classIRTecoAc.html#ad700578cbae74857483372597a399ff3',1,'IRTecoAc::calibrate()'],['../classIRToshibaAC.html#a74c66bba288cb3cbb43008edb7b376bf',1,'IRToshibaAC::calibrate()'],['../classIRTranscoldAc.html#ae91dbd4a94ff4cd648c283b9f18bc149',1,'IRTranscoldAc::calibrate()'],['../classIRTrotecESP.html#a56de318a27011e0bddb40738c18dbcf2',1,'IRTrotecESP::calibrate()'],['../classIRTrumaAc.html#a6596a2fd4644358a6f122db2a94447e7',1,'IRTrumaAc::calibrate()'],['../classIRVestelAc.html#aae91667d96d86de824a20c256c311f15',1,'IRVestelAc::calibrate()'],['../classIRVoltas.html#ac264033a983290d9c194fde822ed63a4',1,'IRVoltas::calibrate()'],['../classIRWhirlpoolAc.html#a006c59c1c84c62fccd3730bec30ef5e8',1,'IRWhirlpoolAc::calibrate()'],['../classIRsend.html#ad1776aa6c699f9eeca1eef9bb4fe355b',1,'IRsend::calibrate()']]], - ['cancelofftimer_3879',['cancelOffTimer',['../classIRPanasonicAc.html#a6d202284320c59205cb0d02cb613cada',1,'IRPanasonicAc']]], - ['cancelontimer_3880',['cancelOnTimer',['../classIRPanasonicAc.html#a102e7c029a923e121e40326859f2e4a3',1,'IRPanasonicAc']]], - ['canceltimers_3881',['cancelTimers',['../classIRHaierAC.html#a1cccc733f74232751f95c32e47795638',1,'IRHaierAC']]], - ['carrier64_3882',['carrier64',['../classIRac.html#a8090f2d79a31b81a0342b2e9efb9d555',1,'IRac']]], - ['celsiustofahrenheit_3883',['celsiusToFahrenheit',['../IRutils_8cpp.html#a19b940e26a4f8ddcaf86cce1ec62d563',1,'celsiusToFahrenheit(const float deg): IRutils.cpp'],['../IRutils_8h.html#a19b940e26a4f8ddcaf86cce1ec62d563',1,'celsiusToFahrenheit(const float deg): IRutils.cpp']]], - ['checkinvertedbytepairs_3884',['checkInvertedBytePairs',['../namespaceirutils.html#ab27a18cec663509b4d0df094575c2f64',1,'irutils']]], - ['checksum_3885',['checkSum',['../classIRFujitsuAC.html#ad89b20a62f08acb326d7f6613b815eaf',1,'IRFujitsuAC::checkSum()'],['../classIRAmcorAc.html#a67244a75731be6a3bd96ecc0384d0113',1,'IRAmcorAc::checksum()'],['../classIRArgoAC.html#ab0fe4e42d1c1201a92f5c4738b869763',1,'IRArgoAC::checksum()'],['../classIRCarrierAc64.html#a005fab56acf94fe97db7fa92651b2882',1,'IRCarrierAc64::checksum()'],['../classIRCoronaAc.html#ae0257fdafacf7fd2e7ac6ca3f8ae3168',1,'IRCoronaAc::checksum()'],['../classIRDaikinESP.html#ac8ac2a0674dc5cfaf514d319b51b20ab',1,'IRDaikinESP::checksum()'],['../classIRDaikin2.html#a0d418ae9490b2a24d680998209e5c7ea',1,'IRDaikin2::checksum()'],['../classIRDaikin216.html#ae9d7d1ed13a6f32e5a30975f72554fba',1,'IRDaikin216::checksum()'],['../classIRDaikin160.html#aac3b34aeae49f5179aa3f06fad28925d',1,'IRDaikin160::checksum()'],['../classIRDaikin176.html#a155e0dc2c7fcc334fffdef64c31c33fd',1,'IRDaikin176::checksum()'],['../classIRDaikin128.html#a747c906808c269581de6cf9b02e5c0a7',1,'IRDaikin128::checksum()'],['../classIRDaikin152.html#a2e39f879606a7b2c72869f3c9537cb07',1,'IRDaikin152::checksum()'],['../classIRDaikin64.html#a796e6a58cbb6f1920349db019952f355',1,'IRDaikin64::checksum()'],['../classIRDelonghiAc.html#ae4c4e7140a763eee159991f5c8afc54f',1,'IRDelonghiAc::checksum()'],['../classIRElectraAc.html#a73dc5b9a038669cc1f00f5b64ad458d1',1,'IRElectraAc::checksum()'],['../classIRGreeAC.html#aaa6b2702d79a7a3db454b99d71064679',1,'IRGreeAC::checksum()'],['../classIRHaierAC.html#ab7faae274ff7f30bf7df3c58d6e7e210',1,'IRHaierAC::checksum()'],['../classIRHaierACYRW02.html#a18045defdd5641ae13c7c75dda0cf23a',1,'IRHaierACYRW02::checksum()'],['../classIRHitachiAc.html#a3b65ccbd6de6b5dcb5a794b471e363f5',1,'IRHitachiAc::checksum()'],['../classIRHitachiAc1.html#aa6687d6282b134d508d6534e8446b341',1,'IRHitachiAc1::checksum()'],['../classIRKelvinatorAC.html#aad752fda68767a47d77ae4e1eeb550f7',1,'IRKelvinatorAC::checksum()'],['../classIRLgAc.html#a438cbbb77668205c3f2b59b8f28585cd',1,'IRLgAc::checksum()'],['../classIRMideaAC.html#a418b7cbb4b388dba732176d891bb499d',1,'IRMideaAC::checksum()'],['../classIRMitsubishiAC.html#a7c5b1e5c53d99f1564d8a0424f626adb',1,'IRMitsubishiAC::checksum()'],['../classIRMitsubishi136.html#aa2c6fe9b28462052cf6627960126a783',1,'IRMitsubishi136::checksum()'],['../classIRMitsubishi112.html#a65ee232bfc09d05724b8ec5ada538ccf',1,'IRMitsubishi112::checksum()'],['../classIRMitsubishiHeavy152Ac.html#a14cdcaeefef283f707d0fae5108d65f4',1,'IRMitsubishiHeavy152Ac::checksum()'],['../classIRMitsubishiHeavy88Ac.html#acb03ef0da10d3fec14c71bfa087a02b8',1,'IRMitsubishiHeavy88Ac::checksum()'],['../classIRNeoclimaAc.html#acba18ea35a59f6f1ccbcfd75e7979feb',1,'IRNeoclimaAc::checksum()'],['../classIRSamsungAc.html#a75c5886916dd3ef3aa6f96f04934048d',1,'IRSamsungAc::checksum()'],['../classIRSanyoAc.html#abeb47f286c0228d5694a0b8218a29408',1,'IRSanyoAc::checksum()'],['../classIRSharpAc.html#ad87f46ad9220213d77022dc34920d802',1,'IRSharpAc::checksum()'],['../classIRTcl112Ac.html#a2486f46c7db6a3dfbe3af9c842ff37fa',1,'IRTcl112Ac::checksum()'],['../classIRTechnibelAc.html#af93f984eacd2820cad58400a85b0f05b',1,'IRTechnibelAc::checksum()'],['../classIRToshibaAC.html#a5aa2c6fc3b07830f872f98906df7e9ec',1,'IRToshibaAC::checksum()'],['../classIRTrotecESP.html#a5e416e083653ab365f65b3f645f60e8c',1,'IRTrotecESP::checksum()'],['../classIRTrumaAc.html#a5bdb72773b8b2583754227d4f22e4573',1,'IRTrumaAc::checksum()'],['../classIRVestelAc.html#a7a9046e7b5ff57864862bf5f7ad23c4d',1,'IRVestelAc::checksum()'],['../classIRVoltas.html#acd7b669c0ef94959f1fc9d7a8f7abe8a',1,'IRVoltas::checksum()'],['../classIRWhirlpoolAc.html#a7790be3df6c4609e5c08c17c5ee52047',1,'IRWhirlpoolAc::checksum()']]], - ['checkzjssig_3886',['checkZjsSig',['../classIRMitsubishiHeavy88Ac.html#a6aaf8ae4c9b52d73229b20414099f309',1,'IRMitsubishiHeavy88Ac']]], - ['checkzmssig_3887',['checkZmsSig',['../classIRMitsubishiHeavy152Ac.html#a3d1c9d2c98945d21eb1ce82fac1771d2',1,'IRMitsubishiHeavy152Ac']]], - ['cleanstate_3888',['cleanState',['../classIRac.html#aad988dc123495012758307213a933f37',1,'IRac']]], - ['clearontimerflag_3889',['clearOnTimerFlag',['../classIRDaikin2.html#a1e6507bb20167547d175496ffc5ed39d',1,'IRDaikin2']]], - ['clearpowerspecial_3890',['clearPowerSpecial',['../classIRSharpAc.html#a3c98c96a66dff560941e461a70efdb1a',1,'IRSharpAc']]], - ['clearsensortemp_3891',['clearSensorTemp',['../classIRCoolixAC.html#a1881a0c74685920b54cbbbfb6adbb0c6',1,'IRCoolixAC']]], - ['clearsleeptimerflag_3892',['clearSleepTimerFlag',['../classIRDaikin2.html#a2e00f01a66257966c7a166d66d01de93',1,'IRDaikin2']]], - ['cmpstates_3893',['cmpStates',['../classIRac.html#a3ba4eee08650dfcdd6d492a67c86f016',1,'IRac']]], - ['compare_3894',['compare',['../classIRrecv.html#ad7347c72b14d9f2f20f65bcf235ab3dc',1,'IRrecv']]], - ['convertfan_3895',['convertFan',['../classIRAirwellAc.html#a44091f4d58b8078df1a93170cb9900d8',1,'IRAirwellAc::convertFan()'],['../classIRAmcorAc.html#ad0f8b7cdf5942c3680639d410f53d18c',1,'IRAmcorAc::convertFan()'],['../classIRArgoAC.html#acd147993fb998a0e7015173b9514d4a2',1,'IRArgoAC::convertFan()'],['../classIRCarrierAc64.html#a255e6679397434877f1c6c9ac70fff50',1,'IRCarrierAc64::convertFan()'],['../classIRCoolixAC.html#a7ffa1cfcf82bd905b0f607401200c895',1,'IRCoolixAC::convertFan()'],['../classIRCoronaAc.html#a6826036fcabbb45e7369f42912fae02f',1,'IRCoronaAc::convertFan()'],['../classIRDaikinESP.html#ab58be19636d41d60b9c62d658ca18cae',1,'IRDaikinESP::convertFan()'],['../classIRDaikin2.html#ad147ea14695c9498bb091862e172dc81',1,'IRDaikin2::convertFan()'],['../classIRDaikin216.html#a520cc65161290f15022b4108f7049a83',1,'IRDaikin216::convertFan()'],['../classIRDaikin160.html#a32658c0f24d0b0c398d54ef648d717a9',1,'IRDaikin160::convertFan()'],['../classIRDaikin176.html#ae3dda9a55f851b5253d0677835a2c3dd',1,'IRDaikin176::convertFan()'],['../classIRDaikin128.html#a983c13bc608fbfa32d7ea2c36dc84116',1,'IRDaikin128::convertFan()'],['../classIRDaikin152.html#a5e2e79252602ca3493baf00cf3fe7787',1,'IRDaikin152::convertFan()'],['../classIRDaikin64.html#a109ff0c33b0a7dfd763683538915c811',1,'IRDaikin64::convertFan()'],['../classIRDelonghiAc.html#aeff2970b20963ae59b99464ae683113f',1,'IRDelonghiAc::convertFan()'],['../classIREcoclimAc.html#a308c50e46019d174b8b62bf5b7b8feaf',1,'IREcoclimAc::convertFan()'],['../classIRElectraAc.html#afcf3ef62d69e370cb88dd2036e5a1357',1,'IRElectraAc::convertFan()'],['../classIRFujitsuAC.html#a111060b7c93e77fdbd1dc96fc8a6c10f',1,'IRFujitsuAC::convertFan()'],['../classIRGoodweatherAc.html#abb443826453a65e87f6dedddf2dd74d5',1,'IRGoodweatherAc::convertFan()'],['../classIRGreeAC.html#a39aa0e4759330aef39382813d3aa96a4',1,'IRGreeAC::convertFan()'],['../classIRHaierAC.html#a58628dd19a7247fc5358c0dc8c30baba',1,'IRHaierAC::convertFan()'],['../classIRHaierACYRW02.html#a66e42d018f3d86b136624a347d333401',1,'IRHaierACYRW02::convertFan()'],['../classIRHitachiAc.html#a5c632c9efc42d9378fdefe608c9bb771',1,'IRHitachiAc::convertFan()'],['../classIRHitachiAc1.html#a96c22fddcd7dfcc5b8f205cc5c7efdef',1,'IRHitachiAc1::convertFan()'],['../classIRHitachiAc424.html#a4f502b779f9fe4aca3a2f649c4cfbda3',1,'IRHitachiAc424::convertFan()'],['../classIRLgAc.html#a71ce8d1be4222ecae26fcea3b71a1ba6',1,'IRLgAc::convertFan()'],['../classIRMideaAC.html#a08a8e49986ce808fd7edd8aee7399a64',1,'IRMideaAC::convertFan()'],['../classIRMitsubishiAC.html#a58ce95e1ae198a9855ee5e81335570cf',1,'IRMitsubishiAC::convertFan()'],['../classIRMitsubishi136.html#a81e691b386950859d1ad0a3c7faf7e49',1,'IRMitsubishi136::convertFan()'],['../classIRMitsubishi112.html#a4194e5b076687b79153bc8cd50c9bc86',1,'IRMitsubishi112::convertFan()'],['../classIRMitsubishiHeavy152Ac.html#ae11040290301b5fe66dfe79e8ea9512b',1,'IRMitsubishiHeavy152Ac::convertFan()'],['../classIRMitsubishiHeavy88Ac.html#acd69c45dbc3f5a150e17b82b5eae7b3f',1,'IRMitsubishiHeavy88Ac::convertFan()'],['../classIRNeoclimaAc.html#a8c3ac622428f118b28d53a3a82740993',1,'IRNeoclimaAc::convertFan()'],['../classIRPanasonicAc.html#aeada51b2d1ff51ff81dfc5c996b416df',1,'IRPanasonicAc::convertFan()'],['../classIRPanasonicAc32.html#a35814ff1a9625da3380482d039665b0b',1,'IRPanasonicAc32::convertFan()'],['../classIRSamsungAc.html#a6be52cc6980ad0bf80261c2a48eb3c87',1,'IRSamsungAc::convertFan()'],['../classIRSanyoAc.html#ab8bc1d3df116aa4a4b86c9faea2b4f40',1,'IRSanyoAc::convertFan()'],['../classIRSharpAc.html#a7b332ac755592ee643ac698654a63270',1,'IRSharpAc::convertFan()'],['../classIRTcl112Ac.html#a3f8178f8f646ed9892eefa40bbff4fb1',1,'IRTcl112Ac::convertFan()'],['../classIRTechnibelAc.html#aa59bf477a0ed2b814096f135cc5fe7c6',1,'IRTechnibelAc::convertFan()'],['../classIRTecoAc.html#a262aead12607ff962dd97c73e6dea078',1,'IRTecoAc::convertFan()'],['../classIRToshibaAC.html#aeef5cfb840f3058629b486232b7efb22',1,'IRToshibaAC::convertFan()'],['../classIRTranscoldAc.html#a5d67793bc5174f1c9f415b43fe6fb584',1,'IRTranscoldAc::convertFan()'],['../classIRTrotecESP.html#a905d4d5bd298db8c2e1a9b004fd541e8',1,'IRTrotecESP::convertFan()'],['../classIRTrumaAc.html#a3b7bbb494fcb23b7b154e89587eb871a',1,'IRTrumaAc::convertFan()'],['../classIRVestelAc.html#aa7702b0e50b6c8073cd7740a630b19dd',1,'IRVestelAc::convertFan()'],['../classIRVoltas.html#a83022d8acc690f1a9672566ae4845e9e',1,'IRVoltas::convertFan()'],['../classIRWhirlpoolAc.html#a3004feef0ec5fe327d6a43d68d029377',1,'IRWhirlpoolAc::convertFan()']]], - ['convertmode_3896',['convertMode',['../classIRAirwellAc.html#a20f9a804b2f8774165befc43d434ad84',1,'IRAirwellAc::convertMode()'],['../classIRAmcorAc.html#ab57117e1072b5265ac9ab5be6d58bccc',1,'IRAmcorAc::convertMode()'],['../classIRArgoAC.html#ad242e7b18dea9768b9fad6b1e0e12f65',1,'IRArgoAC::convertMode()'],['../classIRCarrierAc64.html#a8e94b1526b26cec55f1e700c86aaf74e',1,'IRCarrierAc64::convertMode()'],['../classIRCoolixAC.html#acfb0d2c20322cb4d3cd681a3a54b30fe',1,'IRCoolixAC::convertMode()'],['../classIRCoronaAc.html#a9f9cf8e38285cb2f3caf79e14516bda1',1,'IRCoronaAc::convertMode()'],['../classIRDaikinESP.html#aa96f52596148cab1f806faf190a0aa0a',1,'IRDaikinESP::convertMode()'],['../classIRDaikin2.html#a10aae6ec9783eac9d89ff98b947767dd',1,'IRDaikin2::convertMode()'],['../classIRDaikin216.html#a4fa9eca71ee6ad66b3fffd8b779f5fb0',1,'IRDaikin216::convertMode()'],['../classIRDaikin160.html#ac69861fdbde341fc75d90a5e4918aa56',1,'IRDaikin160::convertMode()'],['../classIRDaikin176.html#ab07fd6eab0ac6132625a291dae8cfc78',1,'IRDaikin176::convertMode()'],['../classIRDaikin128.html#a0bad4830267887299b2773075a16b283',1,'IRDaikin128::convertMode()'],['../classIRDaikin152.html#a25592419c95c0271d8a0c4203a2919c3',1,'IRDaikin152::convertMode()'],['../classIRDaikin64.html#a595d91c0294c9482aa453f077eebf882',1,'IRDaikin64::convertMode()'],['../classIRDelonghiAc.html#a51a6eab431f81fa448a48c0ec071e706',1,'IRDelonghiAc::convertMode()'],['../classIREcoclimAc.html#aa685f7824b36e3c80926d9ab96faf623',1,'IREcoclimAc::convertMode()'],['../classIRElectraAc.html#a0026a1981e713ce1f6916203717e0a00',1,'IRElectraAc::convertMode()'],['../classIRFujitsuAC.html#a242504a5b97c19ff7e369efcadd3916e',1,'IRFujitsuAC::convertMode()'],['../classIRGoodweatherAc.html#aef14e2b6c220e556300d286922da1f54',1,'IRGoodweatherAc::convertMode()'],['../classIRGreeAC.html#a609e87ad4926f150b44426caf79fd38e',1,'IRGreeAC::convertMode()'],['../classIRHaierAC.html#af6188dbed5cae022b4fd1eef358f594c',1,'IRHaierAC::convertMode()'],['../classIRHaierACYRW02.html#a9a51f3d4b4c60ed7d99f9836a57bb3e5',1,'IRHaierACYRW02::convertMode()'],['../classIRHitachiAc.html#af1bdc5e22e5e24218421bd3bbb436301',1,'IRHitachiAc::convertMode()'],['../classIRHitachiAc1.html#a6211c96f463353791e5d922d9939f23c',1,'IRHitachiAc1::convertMode()'],['../classIRHitachiAc424.html#a974bf3ada7117e463b8c23e2158902be',1,'IRHitachiAc424::convertMode()'],['../classIRKelvinatorAC.html#acc9d70a94dd3813005ca0381b80a35e4',1,'IRKelvinatorAC::convertMode()'],['../classIRLgAc.html#a114eca216b7c9c7be33d4527f848311e',1,'IRLgAc::convertMode()'],['../classIRMideaAC.html#a0ca16c8bc2232be467baba8ea69b40d4',1,'IRMideaAC::convertMode()'],['../classIRMitsubishiAC.html#a86d069e406d247bafbefbdd09b22894f',1,'IRMitsubishiAC::convertMode()'],['../classIRMitsubishi136.html#a43b8ff1083d09563a5d3a25b24e480ea',1,'IRMitsubishi136::convertMode()'],['../classIRMitsubishi112.html#aa41d6ec8bc6dc91891aaddbd996f6040',1,'IRMitsubishi112::convertMode()'],['../classIRMitsubishiHeavy152Ac.html#a067ca776edc19a577e8bcda5013e1d0f',1,'IRMitsubishiHeavy152Ac::convertMode()'],['../classIRMitsubishiHeavy88Ac.html#ad0419d176d70935fc535cdcc47ffba02',1,'IRMitsubishiHeavy88Ac::convertMode()'],['../classIRNeoclimaAc.html#a61335773816ecbbeb949e5da78d07e50',1,'IRNeoclimaAc::convertMode()'],['../classIRPanasonicAc.html#a3f3bc3e4b73338351f33f26c635075bb',1,'IRPanasonicAc::convertMode()'],['../classIRPanasonicAc32.html#a229264735483d62735dc3b32c42fb718',1,'IRPanasonicAc32::convertMode()'],['../classIRSamsungAc.html#a76f7fed436bdfcd9c9a9da8dd99cb9f7',1,'IRSamsungAc::convertMode()'],['../classIRSanyoAc.html#a12a355a527ba5d572448d420e1cad9a7',1,'IRSanyoAc::convertMode()'],['../classIRSharpAc.html#a340d60b4b24c10479b3fed4409e0834b',1,'IRSharpAc::convertMode()'],['../classIRTcl112Ac.html#ac063653636319a9451590b08abbfecdc',1,'IRTcl112Ac::convertMode()'],['../classIRTechnibelAc.html#a2e9eef25e288656e7840b09cda0f9aa5',1,'IRTechnibelAc::convertMode()'],['../classIRTecoAc.html#a5f95c5aacd8fc312acd0f36fd9dc33f2',1,'IRTecoAc::convertMode()'],['../classIRToshibaAC.html#a1cdcb695e128d57c721623cfdc9a8e8d',1,'IRToshibaAC::convertMode()'],['../classIRTranscoldAc.html#a45372965e8735a1fb54173eb1ed31c9d',1,'IRTranscoldAc::convertMode()'],['../classIRTrotecESP.html#a114a7022f0382275a55a2775d3d8e894',1,'IRTrotecESP::convertMode()'],['../classIRTrumaAc.html#a5d300dcade65104145b253110862aa2f',1,'IRTrumaAc::convertMode()'],['../classIRVestelAc.html#a5bb967d4972374254dad2c0a6fac7ed2',1,'IRVestelAc::convertMode()'],['../classIRVoltas.html#a3086d4e457769916808b3aef151c9b6b',1,'IRVoltas::convertMode()'],['../classIRWhirlpoolAc.html#afbf2f473c98f480d68c8bb28e1202d56',1,'IRWhirlpoolAc::convertMode()']]], - ['convertswing_3897',['convertSwing',['../classIRTechnibelAc.html#a9368635dd24b042066094bfca13e8a17',1,'IRTechnibelAc']]], - ['convertswingh_3898',['convertSwingH',['../classIRDaikin2.html#a79a989ad0221157c4dd8d992cc2863dc',1,'IRDaikin2::convertSwingH()'],['../classIRDaikin176.html#a2387b8dff2a9c9cd164034977b03f192',1,'IRDaikin176::convertSwingH()'],['../classIRHitachiAc344.html#a34d0fa5b522b51dac46f33cbb0a0a389',1,'IRHitachiAc344::convertSwingH()'],['../classIRMitsubishiAC.html#a8235a527a178486bb58ce62749aaf2fb',1,'IRMitsubishiAC::convertSwingH()'],['../classIRMitsubishi112.html#ab17598ce693475ef167525b8408e2da4',1,'IRMitsubishi112::convertSwingH()'],['../classIRMitsubishiHeavy152Ac.html#a0183cf4fcefb60ac61060dde698efbd1',1,'IRMitsubishiHeavy152Ac::convertSwingH()'],['../classIRMitsubishiHeavy88Ac.html#a8b995256a6651822731da7a912c01f19',1,'IRMitsubishiHeavy88Ac::convertSwingH()'],['../classIRPanasonicAc.html#abb17db3452ae347101dc6eaa8e84433b',1,'IRPanasonicAc::convertSwingH()']]], - ['convertswingv_3899',['convertSwingV',['../classIRArgoAC.html#ac23ff32b45c3fc5402e7e303ad9b5d54',1,'IRArgoAC::convertSwingV()'],['../classIRDaikin2.html#aa3de8468b869989ec52a5f9f57ff4a77',1,'IRDaikin2::convertSwingV()'],['../classIRDaikin160.html#a615f599f3bc3e8dec5e5ef92512a2301',1,'IRDaikin160::convertSwingV()'],['../classIRGoodweatherAc.html#a3b37c04fd9b60b63052d93374fc15d4f',1,'IRGoodweatherAc::convertSwingV()'],['../classIRGreeAC.html#ae3717400d1dc0336bcc5fa17c1397a9b',1,'IRGreeAC::convertSwingV()'],['../classIRHaierAC.html#a34053c32ba50ff3b81b208d068efe2a4',1,'IRHaierAC::convertSwingV()'],['../classIRHaierACYRW02.html#a1f7dffe29fbe67989b2f425d629850db',1,'IRHaierACYRW02::convertSwingV()'],['../classIRMitsubishiAC.html#ab561f6421b2f3e0d92d9fab685da639a',1,'IRMitsubishiAC::convertSwingV()'],['../classIRMitsubishi136.html#a59dee0c57d3ca2bdf4c7839142d23059',1,'IRMitsubishi136::convertSwingV()'],['../classIRMitsubishi112.html#a95c545497e0acc6f78ec229a2ada9de0',1,'IRMitsubishi112::convertSwingV()'],['../classIRMitsubishiHeavy152Ac.html#a93f2678fce3b35cfe3e31221d3355291',1,'IRMitsubishiHeavy152Ac::convertSwingV()'],['../classIRMitsubishiHeavy88Ac.html#abeba5346e1fc2223838fbc5d3ed03f23',1,'IRMitsubishiHeavy88Ac::convertSwingV()'],['../classIRPanasonicAc.html#a024e64fe32848e9b0b72e9c04db0fd98',1,'IRPanasonicAc::convertSwingV()'],['../classIRPanasonicAc32.html#a0487f241fd414aa20d2f352203c72a26',1,'IRPanasonicAc32::convertSwingV()'],['../classIRSanyoAc.html#a944cd3b85d0510b5a0b0fa45604e5977',1,'IRSanyoAc::convertSwingV()']]], - ['coolix_3900',['coolix',['../classIRac.html#a4750db3b06db51f5a23c22538c41b7b3',1,'IRac']]], - ['copyirparams_3901',['copyIrParams',['../classIRrecv.html#ab017a0f9256954bb7d943e3c6b7e31bf',1,'IRrecv']]], - ['corona_3902',['corona',['../classIRac.html#adcf2bdb1ef6dc057532ae7d188557dac',1,'IRac']]], - ['countbits_3903',['countBits',['../IRutils_8cpp.html#a84621a9f7fb2d57bd425f9f0d662cf7d',1,'countBits(const uint8_t *const start, const uint16_t length, const bool ones, const uint16_t init): IRutils.cpp'],['../IRutils_8cpp.html#aae8042367bb94df81672603270fa7342',1,'countBits(const uint64_t data, const uint8_t length, const bool ones, const uint16_t init): IRutils.cpp'],['../IRutils_8h.html#a27816eac50afafa9e53ba4b53675da20',1,'countBits(const uint8_t *const start, const uint16_t length, const bool ones=true, const uint16_t init=0): IRutils.cpp'],['../IRutils_8h.html#a5a719829db11f5d5560b4367c0d2d365',1,'countBits(const uint64_t data, const uint8_t length, const bool ones=true, const uint16_t init=0): IRutils.cpp']]], - ['crudenoisefilter_3904',['crudeNoiseFilter',['../classIRrecv.html#ae833bdb8fccc676043fc4ccae432fab1',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.html deleted file mode 100644 index 911304e60..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.js deleted file mode 100644 index 51b69f416..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_4.js +++ /dev/null @@ -1,107 +0,0 @@ -var searchData= -[ - ['daikin_3905',['daikin',['../classIRac.html#afb6d77bbeb5b2465437cef4f58b83e0e',1,'IRac']]], - ['daikin128_3906',['daikin128',['../classIRac.html#a8fe7c254e1bcb32b6b6fdc1f91693a50',1,'IRac']]], - ['daikin152_3907',['daikin152',['../classIRac.html#a6dff8e608e3e9fecffe71c3fd1ebe74e',1,'IRac']]], - ['daikin160_3908',['daikin160',['../classIRac.html#a3b34f44d713efa52f30d43405cde831c',1,'IRac']]], - ['daikin176_3909',['daikin176',['../classIRac.html#aaae173fd58a7b53c3f4d2edbf7c4afe7',1,'IRac']]], - ['daikin2_3910',['daikin2',['../classIRac.html#a89eddc0e1b3c41c608208d2752dc954c',1,'IRac']]], - ['daikin216_3911',['daikin216',['../classIRac.html#a101ac8b9e9564e557ef1a1f61ff111d9',1,'IRac']]], - ['daikin64_3912',['daikin64',['../classIRac.html#a074db6fc0cff2878d80a397020e1b249',1,'IRac']]], - ['decode_3913',['decode',['../classIRrecv.html#aeaa5c07a8b46f8fbb982f996cc1f9f4b',1,'IRrecv']]], - ['decodeairwell_3914',['decodeAirwell',['../classIRrecv.html#acf4635d5ee146a82498cb0c269b6af41',1,'IRrecv']]], - ['decodeaiwarct501_3915',['decodeAiwaRCT501',['../classIRrecv.html#aa4d678376a4c0f8ea953474a6f5ef9d2',1,'IRrecv']]], - ['decodeamcor_3916',['decodeAmcor',['../classIRrecv.html#a8d81fcfb47e36925975d313027689a44',1,'IRrecv']]], - ['decodeargo_3917',['decodeArgo',['../classIRrecv.html#a94f12dc000a6e7b75ea8680fd48fc487',1,'IRrecv']]], - ['decodecarrierac_3918',['decodeCarrierAC',['../classIRrecv.html#acf3d1c37038120a5c0996d92577ce74a',1,'IRrecv']]], - ['decodecarrierac40_3919',['decodeCarrierAC40',['../classIRrecv.html#a4bdb35ec34f49401a6b9becd15b8a3b5',1,'IRrecv']]], - ['decodecarrierac64_3920',['decodeCarrierAC64',['../classIRrecv.html#a79d03c31da48a385ab47cc8f342ef9b3',1,'IRrecv']]], - ['decodecoolix_3921',['decodeCOOLIX',['../classIRrecv.html#a964af7e72e2133688f0596c718cb98ca',1,'IRrecv']]], - ['decodecoronaac_3922',['decodeCoronaAc',['../classIRrecv.html#a981cba14551c93af57f9c1c0e1775d12',1,'IRrecv']]], - ['decodedaikin_3923',['decodeDaikin',['../classIRrecv.html#a141f0de9f4cae8daeb025aff3904ecaa',1,'IRrecv']]], - ['decodedaikin128_3924',['decodeDaikin128',['../classIRrecv.html#ac7188577c874d9f8f19304a3ec775415',1,'IRrecv']]], - ['decodedaikin152_3925',['decodeDaikin152',['../classIRrecv.html#ab20a6586b4e56cc428012ec96f5ccc2c',1,'IRrecv']]], - ['decodedaikin160_3926',['decodeDaikin160',['../classIRrecv.html#af0b9822defe6b29099079d664d9dc413',1,'IRrecv']]], - ['decodedaikin176_3927',['decodeDaikin176',['../classIRrecv.html#aa142d1340201b6fdc5b462f46fe21ee0',1,'IRrecv']]], - ['decodedaikin2_3928',['decodeDaikin2',['../classIRrecv.html#a4c4799a0d45ea5562159c46939617d80',1,'IRrecv']]], - ['decodedaikin216_3929',['decodeDaikin216',['../classIRrecv.html#a7f860686a5c58aa8f4d1842cfb15b2f9',1,'IRrecv']]], - ['decodedaikin64_3930',['decodeDaikin64',['../classIRrecv.html#a030701f081a9c6eab0c07b75433b524c',1,'IRrecv']]], - ['decodedelonghiac_3931',['decodeDelonghiAc',['../classIRrecv.html#a8c91cc83770d243e942387cc16e9ca6f',1,'IRrecv']]], - ['decodedenon_3932',['decodeDenon',['../classIRrecv.html#a0b1bd1c817cb43bc3755126191b7f4a2',1,'IRrecv']]], - ['decodedish_3933',['decodeDISH',['../classIRrecv.html#a851776d9178aeb706d9a1abd3f254e31',1,'IRrecv']]], - ['decodedoshisha_3934',['decodeDoshisha',['../classIRrecv.html#a675c45e6b32aaeca3de734ccf2f0c819',1,'IRrecv']]], - ['decodeecoclim_3935',['decodeEcoclim',['../classIRrecv.html#a823387b95b6adb676e976a8eeaf01a0b',1,'IRrecv']]], - ['decodeelectraac_3936',['decodeElectraAC',['../classIRrecv.html#ad3a7be8afc36451c8e28e27f3c3e9aaa',1,'IRrecv']]], - ['decodeelitescreens_3937',['decodeElitescreens',['../classIRrecv.html#ac830ece2c2c200b8c13fcd66828e2846',1,'IRrecv']]], - ['decodeepson_3938',['decodeEpson',['../classIRrecv.html#aaadef8415f273ba25f4086fecd681d2e',1,'IRrecv']]], - ['decodefujitsuac_3939',['decodeFujitsuAC',['../classIRrecv.html#aa3778bdf994bf9c99ac48ef95434a826',1,'IRrecv']]], - ['decodegicable_3940',['decodeGICable',['../classIRrecv.html#afade8dac9b1d023e5e0946e6b2c08aea',1,'IRrecv']]], - ['decodegoodweather_3941',['decodeGoodweather',['../classIRrecv.html#a64650ce7dbaf5fc860a6a253d906e9de',1,'IRrecv']]], - ['decodegree_3942',['decodeGree',['../classIRrecv.html#a2e756342d7524a13d53d6c656700638c',1,'IRrecv']]], - ['decodehaierac_3943',['decodeHaierAC',['../classIRrecv.html#ad97403174f05197a7fa9a4a0107e3111',1,'IRrecv']]], - ['decodehaieracyrw02_3944',['decodeHaierACYRW02',['../classIRrecv.html#a281fb9d972fee75db49209c42f649822',1,'IRrecv']]], - ['decodehash_3945',['decodeHash',['../classIRrecv.html#a7c15fbfa7936ca474712a1953911fd06',1,'IRrecv']]], - ['decodehitachiac_3946',['decodeHitachiAC',['../classIRrecv.html#aa42facfffc0e304005272b6ddd4583c8',1,'IRrecv']]], - ['decodehitachiac1_3947',['decodeHitachiAC1',['../classIRrecv.html#a122e0dcbf14c90ec2d77399acce21459',1,'IRrecv']]], - ['decodehitachiac3_3948',['decodeHitachiAc3',['../classIRrecv.html#a113bc834eff00f55d5545ce3fa1ab203',1,'IRrecv']]], - ['decodehitachiac424_3949',['decodeHitachiAc424',['../classIRrecv.html#a01c3dda56d6d916076fa1affa2213129',1,'IRrecv']]], - ['decodeinax_3950',['decodeInax',['../classIRrecv.html#a94545c6a8da027b9cb0e23ecba4c29d8',1,'IRrecv']]], - ['decodejvc_3951',['decodeJVC',['../classIRrecv.html#a25ab71efc223a418e9630d8421f44bc9',1,'IRrecv']]], - ['decodekelvinator_3952',['decodeKelvinator',['../classIRrecv.html#a0ac82f20b48b2d71ee07eb392578b226',1,'IRrecv']]], - ['decodelasertag_3953',['decodeLasertag',['../classIRrecv.html#ae4af614a45ea65cb3304ef5bd7965122',1,'IRrecv']]], - ['decodelegopf_3954',['decodeLegoPf',['../classIRrecv.html#aea75ad0ba1d8fec33de16501940f2553',1,'IRrecv']]], - ['decodelg_3955',['decodeLG',['../classIRrecv.html#afe70015c36b1477a5de0c193163e13a7',1,'IRrecv']]], - ['decodelutron_3956',['decodeLutron',['../classIRrecv.html#a6093c4404a9a9d415c5bfeab5ec53be5',1,'IRrecv']]], - ['decodemagiquest_3957',['decodeMagiQuest',['../classIRrecv.html#a6f3bfcc6767484151dee758bcf94fb0b',1,'IRrecv']]], - ['decodemetz_3958',['decodeMetz',['../classIRrecv.html#ac39aa52eec10d1c92b6e9713a22252b6',1,'IRrecv']]], - ['decodemidea_3959',['decodeMidea',['../classIRrecv.html#a255b15601f7439a09ab5e77ad78816fb',1,'IRrecv']]], - ['decodemidea24_3960',['decodeMidea24',['../classIRrecv.html#a62a04019308b29ae2aea4b3a83ba9155',1,'IRrecv']]], - ['decodemilestag2_3961',['decodeMilestag2',['../classIRrecv.html#adddf192765ba0d9c233833bdda9b266e',1,'IRrecv']]], - ['decodemirage_3962',['decodeMirage',['../classIRrecv.html#aa88813f830a6ff6bfd6e7bde6728a3d5',1,'IRrecv']]], - ['decodemitsubishi_3963',['decodeMitsubishi',['../classIRrecv.html#a6efe3be80f0ebef3ff94ed0e56c5c52a',1,'IRrecv']]], - ['decodemitsubishi112_3964',['decodeMitsubishi112',['../classIRrecv.html#ae0690ff3cb5a5cdcdb6a514bb7bf0cdd',1,'IRrecv']]], - ['decodemitsubishi136_3965',['decodeMitsubishi136',['../classIRrecv.html#a87b3ee57dbdf762a0e305ddd43eec629',1,'IRrecv']]], - ['decodemitsubishi2_3966',['decodeMitsubishi2',['../classIRrecv.html#a9514197850491a5b8c30ae9ffc89d895',1,'IRrecv']]], - ['decodemitsubishiac_3967',['decodeMitsubishiAC',['../classIRrecv.html#a942c5f41df5cbff32a8b7703673cb621',1,'IRrecv']]], - ['decodemitsubishiheavy_3968',['decodeMitsubishiHeavy',['../classIRrecv.html#aef9cedf79793806df4cc5376710781bc',1,'IRrecv']]], - ['decodemultibrackets_3969',['decodeMultibrackets',['../classIRrecv.html#af61afacc9865232643164ba824e665ab',1,'IRrecv']]], - ['decodemwm_3970',['decodeMWM',['../classIRrecv.html#a27518b5d792cdf3ab333b324f409f328',1,'IRrecv']]], - ['decodenec_3971',['decodeNEC',['../classIRrecv.html#a52b844f80df7f64edf9ce9cc189ac5b9',1,'IRrecv']]], - ['decodeneoclima_3972',['decodeNeoclima',['../classIRrecv.html#a4729ee949e533448b481ae33bbbf1adf',1,'IRrecv']]], - ['decodenikai_3973',['decodeNikai',['../classIRrecv.html#abbcbf5fc07d7e37d7724acc37bb5f592',1,'IRrecv']]], - ['decodepanasonic_3974',['decodePanasonic',['../classIRrecv.html#aa8dd5f24d28576c6db03cc463bd0a865',1,'IRrecv']]], - ['decodepanasonicac_3975',['decodePanasonicAC',['../classIRrecv.html#a0f78e180ed731e8fb16d1c85aa721c95',1,'IRrecv']]], - ['decodepanasonicac32_3976',['decodePanasonicAC32',['../classIRrecv.html#a89ce20e483b1297cae05ab1ae96d24ec',1,'IRrecv']]], - ['decodepioneer_3977',['decodePioneer',['../classIRrecv.html#a78a9487cbe8a562392a07a4090b3091e',1,'IRrecv']]], - ['decoderc5_3978',['decodeRC5',['../classIRrecv.html#adab9dffbeceee514520fababd0e721bd',1,'IRrecv']]], - ['decoderc6_3979',['decodeRC6',['../classIRrecv.html#a67316499ef37db82e3b3ecaac25c5980',1,'IRrecv']]], - ['decodercmm_3980',['decodeRCMM',['../classIRrecv.html#a0e7bf769cb5bebf174e852e4b0b08cf3',1,'IRrecv']]], - ['decodesamsung_3981',['decodeSAMSUNG',['../classIRrecv.html#a18b6cf177364faf11b9a076dd2025eec',1,'IRrecv']]], - ['decodesamsung36_3982',['decodeSamsung36',['../classIRrecv.html#a290a9e6a0b12ef1fe02a92a456c8ad57',1,'IRrecv']]], - ['decodesamsungac_3983',['decodeSamsungAC',['../classIRrecv.html#ae779c76ebd0f3cd1fc13abaa55f80d67',1,'IRrecv']]], - ['decodesanyoac_3984',['decodeSanyoAc',['../classIRrecv.html#ab6c02d8b8079d7f344e141e6a4e7e225',1,'IRrecv']]], - ['decodesanyolc7461_3985',['decodeSanyoLC7461',['../classIRrecv.html#a01a165bf2e7d16dbbb916d1eae740bc5',1,'IRrecv']]], - ['decodesharp_3986',['decodeSharp',['../classIRrecv.html#a3390d63ba21a835d7c74c261532a22a7',1,'IRrecv']]], - ['decodesharpac_3987',['decodeSharpAc',['../classIRrecv.html#a8a9b920079f783e236f8a938e20b9743',1,'IRrecv']]], - ['decodesony_3988',['decodeSony',['../classIRrecv.html#ab03227955cf7d1d00c1620c55d7f9f18',1,'IRrecv']]], - ['decodesymphony_3989',['decodeSymphony',['../classIRrecv.html#a61cdf4d891654521afbc6ca9fb415745',1,'IRrecv']]], - ['decodetechnibelac_3990',['decodeTechnibelAc',['../classIRrecv.html#a2f022741309ad814bf11aec440a838d0',1,'IRrecv']]], - ['decodeteco_3991',['decodeTeco',['../classIRrecv.html#a950711d7df8dfe4cda86f53650cd9f56',1,'IRrecv']]], - ['decodetoshibaac_3992',['decodeToshibaAC',['../classIRrecv.html#aae6ab687ae319ae50a52238916bcfb1a',1,'IRrecv']]], - ['decodetostate_3993',['decodeToState',['../namespaceIRAcUtils.html#ac5eb498bf12cb6cba023c9c1e9726949',1,'IRAcUtils']]], - ['decodetranscold_3994',['decodeTranscold',['../classIRrecv.html#a16c44538d7e01d9b118d983de39d18e3',1,'IRrecv']]], - ['decodetrotec_3995',['decodeTrotec',['../classIRrecv.html#ae2920c488173f3fa37f5325438157ced',1,'IRrecv']]], - ['decodetruma_3996',['decodeTruma',['../classIRrecv.html#a76a85fb183cc943532bc9c589c42a17a',1,'IRrecv']]], - ['decodevestelac_3997',['decodeVestelAc',['../classIRrecv.html#a5d48b3c91434c18c7726cca504d75b73',1,'IRrecv']]], - ['decodevoltas_3998',['decodeVoltas',['../classIRrecv.html#a43539320036ba1c17e9875e4dc9fd055',1,'IRrecv']]], - ['decodewhirlpoolac_3999',['decodeWhirlpoolAC',['../classIRrecv.html#a0d1eec83cf092f5621cb34b3e94777c4',1,'IRrecv']]], - ['decodewhynter_4000',['decodeWhynter',['../classIRrecv.html#a66289f6a462557ad26e6c0a64f36cf02',1,'IRrecv']]], - ['decodexmp_4001',['decodeXmp',['../classIRrecv.html#a9c7c5cdee244070d5999232a1bcdae60',1,'IRrecv']]], - ['decodezepeal_4002',['decodeZepeal',['../classIRrecv.html#a72afd857c8b2e0192021a40afc96c2d8',1,'IRrecv']]], - ['defaultbits_4003',['defaultBits',['../classIRsend.html#a70a2256bee8ad9b8ea8571dd4f26596f',1,'IRsend']]], - ['delonghiac_4004',['delonghiac',['../classIRac.html#af290b0b08cff5121bb88c62051ed1074',1,'IRac']]], - ['disableirin_4005',['disableIRIn',['../classIRrecv.html#a9f4a719e756ad78c7dd47186f8bef087',1,'IRrecv']]], - ['disableofftimer_4006',['disableOffTimer',['../classIRDaikinESP.html#a1e4e05ad0799002d0ab25db92dcaac06',1,'IRDaikinESP::disableOffTimer()'],['../classIRDaikin2.html#a8cbdbc0de31b14f974cd8cd87f3ca54a',1,'IRDaikin2::disableOffTimer()'],['../classIREcoclimAc.html#a8278eec1b47aff9304cb255be5b561bb',1,'IREcoclimAc::disableOffTimer()']]], - ['disableontimer_4007',['disableOnTimer',['../classIRDaikinESP.html#a0733e4a15d76baac23493926ef1765b1',1,'IRDaikinESP::disableOnTimer()'],['../classIRDaikin2.html#a170a1e9ddb7873dc1392184a85387cc3',1,'IRDaikin2::disableOnTimer()'],['../classIREcoclimAc.html#adddfdb01de28e0dda5f8c919ee0cd0fa',1,'IREcoclimAc::disableOnTimer()']]], - ['disablesleeptimer_4008',['disableSleepTimer',['../classIRDaikin2.html#a152532ef9d905e26930ae145a9623877',1,'IRDaikin2']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.html deleted file mode 100644 index 61b920db6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.js deleted file mode 100644 index 220fd7f02..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_5.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['ecoclim_4009',['ecoclim',['../classIRac.html#a3ef3fd7283a1578963ca314a6f1cbd71',1,'IRac']]], - ['elapsed_4010',['elapsed',['../classIRtimer.html#ad655e585f053580d49d8de7d52cd62a1',1,'IRtimer::elapsed()'],['../classTimerMs.html#ad4aa759c58727393f69863b3461dfc09',1,'TimerMs::elapsed()']]], - ['electra_4011',['electra',['../classIRac.html#abb847bd5e09feb293432b8a8cf0dd9de',1,'IRac']]], - ['enableirin_4012',['enableIRIn',['../classIRrecv.html#a52c05ec6d8f3dbfb75f21f3b4fe7be3d',1,'IRrecv']]], - ['enableirout_4013',['enableIROut',['../classIRsend.html#ab3b6d36c9b5d26c400526717d433ed2d',1,'IRsend']]], - ['enableofftimer_4014',['enableOffTimer',['../classIRDaikinESP.html#a8a5686066bfc86f1d7cc454e793d3357',1,'IRDaikinESP::enableOffTimer()'],['../classIRDaikin2.html#afc7ba7d7de2976e010a72778091d633a',1,'IRDaikin2::enableOffTimer()'],['../classIRWhirlpoolAc.html#abb1c3685d90d81b44e72050cd0e042f6',1,'IRWhirlpoolAc::enableOffTimer()']]], - ['enableontimer_4015',['enableOnTimer',['../classIRDaikinESP.html#aac4d0f5f60c9f4c41d3bb1e0f24bc4bc',1,'IRDaikinESP::enableOnTimer()'],['../classIRDaikin2.html#a91ec5f7c67cb87102a5eb030e0763b50',1,'IRDaikin2::enableOnTimer()'],['../classIRWhirlpoolAc.html#aa3edd58882cf4fc65172e490c9e0bb2e',1,'IRWhirlpoolAc::enableOnTimer()']]], - ['enablesleeptimer_4016',['enableSleepTimer',['../classIRDaikin2.html#a9c86782a98a54818ae92419eec5a060b',1,'IRDaikin2']]], - ['encodedoshisha_4017',['encodeDoshisha',['../classIRsend.html#a0522a2256e8358df715065530be6317d',1,'IRsend']]], - ['encodejvc_4018',['encodeJVC',['../classIRsend.html#a6303b991c0545443e7ccf63ba89dbf18',1,'IRsend']]], - ['encodelg_4019',['encodeLG',['../classIRsend.html#a109b67a68e7a33900cb5c5017ed4578b',1,'IRsend']]], - ['encodemagiquest_4020',['encodeMagiQuest',['../classIRsend.html#a4ee40126279dbde8bb02888115577563',1,'IRsend']]], - ['encodemetz_4021',['encodeMetz',['../classIRsend.html#a99c88ec9f8426003738a9a1682595b9a',1,'IRsend']]], - ['encodenec_4022',['encodeNEC',['../classIRsend.html#ab2e1ce918e4e06b955c3d2a089ce189c',1,'IRsend']]], - ['encodepanasonic_4023',['encodePanasonic',['../classIRsend.html#a8340497ae75f00c844e53dfc73700d9c',1,'IRsend']]], - ['encodepioneer_4024',['encodePioneer',['../classIRsend.html#ae0686829eba31587b71034a1c0495971',1,'IRsend']]], - ['encoderc5_4025',['encodeRC5',['../classIRsend.html#a88457fd4cc01d6e8097e04c022ede74a',1,'IRsend']]], - ['encoderc5x_4026',['encodeRC5X',['../classIRsend.html#ae760ef1be11f25f7a61237f96a8871d9',1,'IRsend']]], - ['encoderc6_4027',['encodeRC6',['../classIRsend.html#ac0e341462426ea146b944502a6d3fde0',1,'IRsend']]], - ['encodesamsung_4028',['encodeSAMSUNG',['../classIRsend.html#a4ab0579bd854306b2667de19207e4ffb',1,'IRsend']]], - ['encodesanyolc7461_4029',['encodeSanyoLC7461',['../classIRsend.html#a864bef0dc48f6af4b59057362906cf5d',1,'IRsend']]], - ['encodesharp_4030',['encodeSharp',['../classIRsend.html#a8f4c7a36380ba31155eba5ff8f5f631e',1,'IRsend']]], - ['encodesony_4031',['encodeSony',['../classIRsend.html#aa0aea2cb04f0a7ee9056f15fecfc08c3',1,'IRsend']]], - ['encodetime_4032',['encodeTime',['../classIRPanasonicAc.html#a0eee4ad6105d35ee6c34c4666174b04b',1,'IRPanasonicAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.html deleted file mode 100644 index dc70a4a07..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.js deleted file mode 100644 index 061f6e3c7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_6.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['fahrenheittocelsius_4033',['fahrenheitToCelsius',['../IRutils_8cpp.html#a83538e86145850c24b1c824723089502',1,'fahrenheitToCelsius(const float deg): IRutils.cpp'],['../IRutils_8h.html#a83538e86145850c24b1c824723089502',1,'fahrenheitToCelsius(const float deg): IRutils.cpp']]], - ['fanspeedtostring_4034',['fanspeedToString',['../classIRac.html#ab8d8a1ce5de8970c07c90fb41731e2e6',1,'IRac']]], - ['fixchecksum_4035',['fixChecksum',['../classIRPanasonicAc.html#aa40bef35000ddf6d14e286b3f2044897',1,'IRPanasonicAc']]], - ['fixup_4036',['fixup',['../classIRGreeAC.html#a5bbdcc83f9d49e32379cd27cad0ba130',1,'IRGreeAC::fixup()'],['../classIRKelvinatorAC.html#a389af589003c39794ae5d4bd572fa485',1,'IRKelvinatorAC::fixup()']]], - ['fujitsu_4037',['fujitsu',['../classIRac.html#ae951653fc030f30a989dd40f53d30b35',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.html deleted file mode 100644 index 7de310677..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.js deleted file mode 100644 index e986adc31..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_7.js +++ /dev/null @@ -1,127 +0,0 @@ -var searchData= -[ - ['get10cheat_4038',['get10CHeat',['../classIRFujitsuAC.html#a3c096987c44aa7dcc3c682fb372f585a',1,'IRFujitsuAC']]], - ['get3d_4039',['get3D',['../classIRMitsubishiHeavy152Ac.html#aa1fc0f9cb991ae5fa4320bfe75037791',1,'IRMitsubishiHeavy152Ac::get3D()'],['../classIRMitsubishiHeavy88Ac.html#acdebce895deab9d8c19b63e43dcd55ce',1,'IRMitsubishiHeavy88Ac::get3D()']]], - ['get8cheat_4040',['get8CHeat',['../classIRNeoclimaAc.html#abebfca9eeb51d23d194162a6570b1d39',1,'IRNeoclimaAc']]], - ['getbeep_4041',['getBeep',['../classIRDaikin2.html#ac952fe406ec76350b80b94c1237d0db9',1,'IRDaikin2::getBeep()'],['../classIRSamsungAc.html#a17412aeb213d2800fa106b7af6c3933f',1,'IRSamsungAc::getBeep()'],['../classIRSanyoAc.html#ae7f3e043b55bdb1a54d1fd29a025a893',1,'IRSanyoAc::getBeep()']]], - ['getbit_4042',['getBit',['../namespaceirutils.html#ac0756774b20e4f7c836abee466800ee6',1,'irutils::getBit(const uint64_t data, const uint8_t position, const uint8_t size)'],['../namespaceirutils.html#a27f90f74ed0b7af37c7bd8cd2a059dee',1,'irutils::getBit(const uint8_t data, const uint8_t position)']]], - ['getboost_4043',['getBoost',['../classIRDelonghiAc.html#a6f49f15cba66d184b9bdc950114d4ff0',1,'IRDelonghiAc']]], - ['getbreeze_4044',['getBreeze',['../classIRSamsungAc.html#ae442d9d84a1058196620ab6f0c994cc7',1,'IRSamsungAc']]], - ['getbufsize_4045',['getBufSize',['../classIRrecv.html#a69ab02ea6823ccf18d1f6be87ca1b92e',1,'IRrecv']]], - ['getbutton_4046',['getButton',['../classIRHaierACYRW02.html#a58f8df6244a91d02e109b91197d535b9',1,'IRHaierACYRW02::getButton()'],['../classIRHitachiAc424.html#a8f3342235b1f69fdcdc942147ac3a909',1,'IRHitachiAc424::getButton()'],['../classIRNeoclimaAc.html#a21c11784fc1504688164b2c8a01a8e06',1,'IRNeoclimaAc::getButton()']]], - ['getcelsius_4047',['getCelsius',['../classIRFujitsuAC.html#af91371d9fc03c014dad0a6f2abb56df1',1,'IRFujitsuAC']]], - ['getclean_4048',['getClean',['../classIRCoolixAC.html#a7f4c287068939ff94f03a005d9c7e4b4',1,'IRCoolixAC::getClean()'],['../classIRDaikin2.html#a742d3167334e11c6386906ed7f4ba044',1,'IRDaikin2::getClean()'],['../classIRElectraAc.html#af48c261ceb93568010c57a61bf0f882d',1,'IRElectraAc::getClean()'],['../classIRFujitsuAC.html#a8b356ce721c4b7d4845d27f43adb0e2a',1,'IRFujitsuAC::getClean()'],['../classIRMitsubishiHeavy152Ac.html#acecd9523961d07dd0cf7644a7008e59f',1,'IRMitsubishiHeavy152Ac::getClean()'],['../classIRMitsubishiHeavy88Ac.html#a6eeaeca11d48df313f8da364e2a91e2e',1,'IRMitsubishiHeavy88Ac::getClean()'],['../classIRSamsungAc.html#a8980cc9a230a78ec76a190056a8b9be6',1,'IRSamsungAc::getClean()'],['../classIRSharpAc.html#a1e3be9f825418843393c15715944da63',1,'IRSharpAc::getClean()']]], - ['getclock_4049',['getClock',['../classIRDaikin128.html#a21ac762a97228b2183d247e27b9f471d',1,'IRDaikin128::getClock()'],['../classIRDaikin64.html#aafc78cfd252453c559080eb4b1bdc7a2',1,'IRDaikin64::getClock()'],['../classIREcoclimAc.html#a2313035ff6dfece5dc716bc59c95f843',1,'IREcoclimAc::getClock()'],['../classIRMitsubishiAC.html#ad6ba27d19cce9528ce869c8a9b9752f2',1,'IRMitsubishiAC::getClock()'],['../classIRPanasonicAc.html#a084479e8f23f7dbb8f155209b36efb3b',1,'IRPanasonicAc::getClock()'],['../classIRWhirlpoolAc.html#a97ab57772b05bc674c43000a57bb05de',1,'IRWhirlpoolAc::getClock()']]], - ['getcmd_4050',['getCmd',['../classIRFujitsuAC.html#a59d6739d40ebb0beaef3504de7cecbfd',1,'IRFujitsuAC']]], - ['getcomfort_4051',['getComfort',['../classIRDaikinESP.html#a61a4d8bf064dc4f2f1af768062950931',1,'IRDaikinESP::getComfort()'],['../classIRDaikin152.html#a7021aedd84115062149369a167f76d00',1,'IRDaikin152::getComfort()']]], - ['getcommand_4052',['getCommand',['../classIRGoodweatherAc.html#ac46149fab1211f16891ffe31fa55b1b8',1,'IRGoodweatherAc::getCommand()'],['../classIRHaierAC.html#a0e9bea37c9f3a43ad205994b396d5cd2',1,'IRHaierAC::getCommand()'],['../classIRWhirlpoolAc.html#ac5f07ffc689770b0327279df09ac1f1e',1,'IRWhirlpoolAc::getCommand()']]], - ['getcorrectedrawlength_4053',['getCorrectedRawLength',['../IRutils_8cpp.html#aad5f25cf6a2dded8b48f4a6dd16857be',1,'getCorrectedRawLength(const decode_results *const results): IRutils.cpp'],['../IRutils_8h.html#aad5f25cf6a2dded8b48f4a6dd16857be',1,'getCorrectedRawLength(const decode_results *const results): IRutils.cpp']]], - ['getcurrentday_4054',['getCurrentDay',['../classIRDaikinESP.html#a2f4db9739f130e013b047847bb01e4a6',1,'IRDaikinESP']]], - ['getcurrenttime_4055',['getCurrentTime',['../classIRDaikinESP.html#aa32d285bba6557a9f375b309ea697dec',1,'IRDaikinESP::getCurrentTime()'],['../classIRDaikin2.html#ac6350e7bc0af04e7a5e49b8d35c5883a',1,'IRDaikin2::getCurrentTime()']]], - ['getcurrtime_4056',['getCurrTime',['../classIRHaierAC.html#ace3a6ad8816dbf5d4a9f8595cc621b09',1,'IRHaierAC']]], - ['getdisplay_4057',['getDisplay',['../classIRSamsungAc.html#a05e2c47fc5c63782f2420feb1337014c',1,'IRSamsungAc']]], - ['getdisplaytempsource_4058',['getDisplayTempSource',['../classIRGreeAC.html#a2ed802a668c53499133d7b5be9b287ec',1,'IRGreeAC']]], - ['getecono_4059',['getEcono',['../classIRCoronaAc.html#a4b379e29e5784c33a6ee73b3e81844e4',1,'IRCoronaAc::getEcono()'],['../classIRDaikinESP.html#af683032a0602275c3e64aa1eaec8bce0',1,'IRDaikinESP::getEcono()'],['../classIRDaikin2.html#aa0471ba51480c60af811b157c98945b8',1,'IRDaikin2::getEcono()'],['../classIRDaikin128.html#a4f1de86c0086aeb02444c11ff12dfb90',1,'IRDaikin128::getEcono()'],['../classIRDaikin152.html#a55f1ba2167dfab3571c8d9cc8df9da1b',1,'IRDaikin152::getEcono()'],['../classIRMitsubishiHeavy152Ac.html#ad9269cfab5a568131885133993d76ae7',1,'IRMitsubishiHeavy152Ac::getEcono()'],['../classIRMitsubishiHeavy88Ac.html#a589bd953d2f7e73c5e2802d145891d7c',1,'IRMitsubishiHeavy88Ac::getEcono()'],['../classIRNeoclimaAc.html#aed7b9c7b8a1686a1e2850c9b9347d868',1,'IRNeoclimaAc::getEcono()'],['../classIRTcl112Ac.html#a7a097fd243a9f0c9f965d2299996cd32',1,'IRTcl112Ac::getEcono()'],['../classIRToshibaAC.html#a13c884468baf27828c61ffd526d0e297',1,'IRToshibaAC::getEcono()'],['../classIRVoltas.html#a7849e211bf16bf5bd6d0d940bd3e6431',1,'IRVoltas::getEcono()']]], - ['geteconotoggle_4060',['getEconoToggle',['../classIRMideaAC.html#a69839c88534920e667e56750c83f926f',1,'IRMideaAC::getEconoToggle()'],['../classIRSharpAc.html#a39c6c18289eb2deee80fa7584d19b89a',1,'IRSharpAc::getEconoToggle()']]], - ['getenablesensortemp_4061',['getEnableSensorTemp',['../classIRMideaAC.html#a313effc2012af55df719edff56c9ccea',1,'IRMideaAC']]], - ['geteye_4062',['getEye',['../classIRDaikin2.html#a7de3421d44db047fdbdfa6bad20a71e8',1,'IRDaikin2::getEye()'],['../classIRNeoclimaAc.html#a2a5d21b3109a9105db9e2445bf8358b4',1,'IRNeoclimaAc::getEye()']]], - ['geteyeauto_4063',['getEyeAuto',['../classIRDaikin2.html#ad3de9384586e091b85065a1f2c359295',1,'IRDaikin2']]], - ['getfan_4064',['getFan',['../classIRAirwellAc.html#aa24f7ff64fcb1cea358f7b5288eb7aa1',1,'IRAirwellAc::getFan()'],['../classIRAmcorAc.html#a06e64e42bb7bc26afc17e504bf57616a',1,'IRAmcorAc::getFan()'],['../classIRArgoAC.html#aee8a1870fc079b0c8679c403b6cd6806',1,'IRArgoAC::getFan()'],['../classIRCarrierAc64.html#a0426f9c043b65b0d0d870f7ef5474ed9',1,'IRCarrierAc64::getFan()'],['../classIRCoolixAC.html#a2ef6155c4a8880481a996fdf9462a8e9',1,'IRCoolixAC::getFan()'],['../classIRCoronaAc.html#aaf36811405387c3fb14a8019ce0ffb4b',1,'IRCoronaAc::getFan()'],['../classIRDaikinESP.html#a35585fa7c6742031a1c23b724096fa2b',1,'IRDaikinESP::getFan()'],['../classIRDaikin2.html#a5ba2b2a1cd20916b3dc0f5f57dd265e3',1,'IRDaikin2::getFan()'],['../classIRDaikin216.html#abc21da328afcf0831d6cd834c954f7a0',1,'IRDaikin216::getFan()'],['../classIRDaikin160.html#a2b0d39a508521a2ee982ed8d012b5e07',1,'IRDaikin160::getFan()'],['../classIRDaikin176.html#af4d75131b7912d499af590fdc2be03d5',1,'IRDaikin176::getFan()'],['../classIRDaikin128.html#afda28bc88f4b4f1db5ee4229634cef8c',1,'IRDaikin128::getFan()'],['../classIRDaikin152.html#a3e40410ddd64a6417ad4a43301ad8c09',1,'IRDaikin152::getFan()'],['../classIRDaikin64.html#ac510c4758eb52d703840e85c88108bfb',1,'IRDaikin64::getFan()'],['../classIRDelonghiAc.html#a897dd29a58fed41abb4a6bbe10527188',1,'IRDelonghiAc::getFan()'],['../classIREcoclimAc.html#a61740f93abcbb3af61b89ed754d71700',1,'IREcoclimAc::getFan()'],['../classIRElectraAc.html#a5d6c472701f93579341c34f2b14a5238',1,'IRElectraAc::getFan()'],['../classIRGoodweatherAc.html#a58839f0a332a1db1d808c608aa718031',1,'IRGoodweatherAc::getFan()'],['../classIRGreeAC.html#af5586de05500d3f11307a387ef91bb22',1,'IRGreeAC::getFan()'],['../classIRHaierAC.html#a20efaa79ca7ead0b08f19a4b41c198aa',1,'IRHaierAC::getFan()'],['../classIRHaierACYRW02.html#a543f7d2ce346b94a7ae29d50d1189f27',1,'IRHaierACYRW02::getFan()'],['../classIRHitachiAc.html#addc6c94839c7d994573029b66e7fbe94',1,'IRHitachiAc::getFan()'],['../classIRHitachiAc1.html#a7cb01dc7abf8f7c45c8690134c71e7a8',1,'IRHitachiAc1::getFan()'],['../classIRHitachiAc424.html#a2d105be99f05794ce845db06e17bffcd',1,'IRHitachiAc424::getFan()'],['../classIRKelvinatorAC.html#ae96f43f14a7df9f23be734d1f9b09b37',1,'IRKelvinatorAC::getFan()'],['../classIRLgAc.html#a38a3fed9066641cd80208d330c92ef9b',1,'IRLgAc::getFan()'],['../classIRMideaAC.html#a38a0c175fead133026a0079c36e3e8ce',1,'IRMideaAC::getFan()'],['../classIRMitsubishiAC.html#ad7bda7fc858dd11c242f563bdda9c8a9',1,'IRMitsubishiAC::getFan()'],['../classIRMitsubishi136.html#aed870bd56c47808c6b3dae878ba6cf7f',1,'IRMitsubishi136::getFan()'],['../classIRMitsubishi112.html#a18bf39ff526ead69eb91854c5f0b48cc',1,'IRMitsubishi112::getFan()'],['../classIRMitsubishiHeavy152Ac.html#ae4e0a08c61289443fdd3e928b91568b3',1,'IRMitsubishiHeavy152Ac::getFan()'],['../classIRMitsubishiHeavy88Ac.html#a43f25d927d54712384a632228544c124',1,'IRMitsubishiHeavy88Ac::getFan()'],['../classIRNeoclimaAc.html#a60c4e4b50c2bcd07991eaff73c031834',1,'IRNeoclimaAc::getFan()'],['../classIRPanasonicAc.html#a302ba64400c820a5a0d822315516564a',1,'IRPanasonicAc::getFan()'],['../classIRPanasonicAc32.html#a03a6d54ef606dcb67931a7e42532fb34',1,'IRPanasonicAc32::getFan()'],['../classIRSamsungAc.html#a924701fc0a10c1bae8a93749658abff5',1,'IRSamsungAc::getFan()'],['../classIRSanyoAc.html#a01ecbebadcdb81220ab1f2cbe239c6c0',1,'IRSanyoAc::getFan()'],['../classIRSharpAc.html#ad9881478c89a4852f2fccb7623843b4c',1,'IRSharpAc::getFan()'],['../classIRTcl112Ac.html#a4c7f0b599c415406274bfba4f0e65984',1,'IRTcl112Ac::getFan()'],['../classIRTechnibelAc.html#a71a97d77ffe257518d9a72b716bd5373',1,'IRTechnibelAc::getFan()'],['../classIRTecoAc.html#ad7c6b4f2a79582deb67e4928796392a6',1,'IRTecoAc::getFan()'],['../classIRToshibaAC.html#abd5191c603faef027ad6bc4b8abe82ae',1,'IRToshibaAC::getFan()'],['../classIRTranscoldAc.html#a084be3ebe2b371a4b7ff3d08f287d56e',1,'IRTranscoldAc::getFan()'],['../classIRTrotecESP.html#af7546138743b6e7a63e5566d3a6ba6bf',1,'IRTrotecESP::getFan()'],['../classIRTrumaAc.html#a5e96e2b872dcb6cccff9f8231b3374c4',1,'IRTrumaAc::getFan()'],['../classIRVestelAc.html#a510b05386df2578a3241929cffcfa13e',1,'IRVestelAc::getFan()'],['../classIRVoltas.html#afbe5c3cda5fa2233b29a582de71d4723',1,'IRVoltas::getFan()'],['../classIRWhirlpoolAc.html#aa1a1077dd30b0b244c90ac8c7387e33c',1,'IRWhirlpoolAc::getFan()']]], - ['getfanspeed_4065',['getFanSpeed',['../classIRFujitsuAC.html#a38016d2f305ff0d17c57e60c77ad77f8',1,'IRFujitsuAC']]], - ['getfilter_4066',['getFilter',['../classIRFujitsuAC.html#af76f83d0e31fd33caf2360e4f26bdfe4',1,'IRFujitsuAC::getFilter()'],['../classIRMitsubishiHeavy152Ac.html#aea4bdebc0a2b63bb621cb9236e113bd2',1,'IRMitsubishiHeavy152Ac::getFilter()']]], - ['getflap_4067',['getFlap',['../classIRArgoAC.html#ae0cb1c5df94fc38cccc14f313296c280',1,'IRArgoAC']]], - ['getfollow_4068',['getFollow',['../classIRNeoclimaAc.html#a7223965174db938d90b5324e3d601d4e',1,'IRNeoclimaAc']]], - ['getfresh_4069',['getFresh',['../classIRNeoclimaAc.html#ad22722bde267db7ecfd99298bde0165e',1,'IRNeoclimaAc']]], - ['getfreshair_4070',['getFreshAir',['../classIRDaikin2.html#a5a7f38e358d0968d9af6ffca76248330',1,'IRDaikin2']]], - ['getfreshairhigh_4071',['getFreshAirHigh',['../classIRDaikin2.html#a0e1d1a46a38c722943bc212cdc09ab97',1,'IRDaikin2']]], - ['gethealth_4072',['getHealth',['../classIRHaierAC.html#aff4e7de97c375daf881249eefc1c60f8',1,'IRHaierAC::getHealth()'],['../classIRHaierACYRW02.html#a3de686bdee579703b8203acec3353b01',1,'IRHaierACYRW02::getHealth()'],['../classIRTcl112Ac.html#a37015a710d0c3b6278874fd5a5673e0f',1,'IRTcl112Ac::getHealth()']]], - ['gethold_4073',['getHold',['../classIRNeoclimaAc.html#adbbd41de5f5f4cd7fb89ebc6e20e81cd',1,'IRNeoclimaAc']]], - ['gethumid_4074',['getHumid',['../classIRTecoAc.html#a47072d5984da8284b28ac9ab093f275c',1,'IRTecoAc']]], - ['getid_4075',['getId',['../classIRFujitsuAC.html#a51369012283f84ff52d733138a690340',1,'IRFujitsuAC']]], - ['getifeel_4076',['getIFeel',['../classIRGreeAC.html#a73a8de0e0e9d7fc8ce9a0b44cffc2357',1,'IRGreeAC::getIFeel()'],['../classIRArgoAC.html#ac1b4819a4cc035b7cc8317892a412348',1,'IRArgoAC::getiFeel()']]], - ['getinternalstatelength_4077',['getInternalStateLength',['../classIRToshibaAC.html#a146624d75ab5f6c23a75fe87918edadd',1,'IRToshibaAC']]], - ['getion_4078',['getIon',['../classIRNeoclimaAc.html#a4e76b4f123a6138712834c12ef8a6f50',1,'IRNeoclimaAc::getIon()'],['../classIRPanasonicAc.html#a6d6909b7b96815c227f0009dcbd3ce8c',1,'IRPanasonicAc::getIon()'],['../classIRSamsungAc.html#a4b29304810f8e619123553ffd40b35c1',1,'IRSamsungAc::getIon()'],['../classIRSharpAc.html#a63739c8f8aea457fbaa260983a1b828d',1,'IRSharpAc::getIon()'],['../classIRVestelAc.html#a9b31dcca090f98b575a97fd6cb397eb3',1,'IRVestelAc::getIon()']]], - ['getionfilter_4079',['getIonFilter',['../classIRKelvinatorAC.html#ae1cb7be762f306bd007976dc0feb788e',1,'IRKelvinatorAC']]], - ['getled_4080',['getLed',['../classIRCoolixAC.html#a5eb13d05cf8aff9cfe8d5f437b8042e4',1,'IRCoolixAC']]], - ['getlight_4081',['getLight',['../classIRDaikin2.html#a100812aedfaa32830dfb59c7857b4af5',1,'IRDaikin2::getLight()'],['../classIRGoodweatherAc.html#addd2e3cb3824ce4ca8f15bee468b1a16',1,'IRGoodweatherAc::getLight()'],['../classIRGreeAC.html#a65293afe8c8c0c95a47d577326d06893',1,'IRGreeAC::getLight()'],['../classIRKelvinatorAC.html#aafda5580f46145f2b1843d1d4b7dc055',1,'IRKelvinatorAC::getLight()'],['../classIRNeoclimaAc.html#a2c1cd7460cd82b302f9e1373c7ffe738',1,'IRNeoclimaAc::getLight()'],['../classIRTcl112Ac.html#a058bdb5e3191ba900aeb68a02290ef7f',1,'IRTcl112Ac::getLight()'],['../classIRTecoAc.html#ab5135b0873c172036f1a2426c96504ce',1,'IRTecoAc::getLight()'],['../classIRVoltas.html#aab64c21de6d129af4379e32731cea163',1,'IRVoltas::getLight()'],['../classIRWhirlpoolAc.html#a4583ad4468e9bc736e77c8ea63bcdcbd',1,'IRWhirlpoolAc::getLight()']]], - ['getlighttoggle_4082',['getLightToggle',['../classIRDaikin128.html#a3825b86cffe11409447f5c41bc3a469f',1,'IRDaikin128::getLightToggle()'],['../classIRElectraAc.html#aed9858539f66d98e065532f0a6bac048',1,'IRElectraAc::getLightToggle()'],['../classIRMideaAC.html#a770500c76c09ea7a7a7f6d0967c5f348',1,'IRMideaAC::getLightToggle()'],['../classIRSharpAc.html#a0bef3a8c41ca85ac84607606fe3a1728',1,'IRSharpAc::getLightToggle()']]], - ['getmax_4083',['getMax',['../classIRAmcorAc.html#a9cff471d660dd92a48cc8f76b8ee5009',1,'IRAmcorAc::getMax()'],['../classIRArgoAC.html#a70186816a8981ca1d29b86df3bb8d36b',1,'IRArgoAC::getMax()']]], - ['getmode_4084',['getMode',['../classIRAirwellAc.html#a9a1d651c8b71703212207888ddb4be14',1,'IRAirwellAc::getMode()'],['../classIRAmcorAc.html#a2309c3eba2ce3ec506ce0bb11639d47a',1,'IRAmcorAc::getMode()'],['../classIRArgoAC.html#a3c9c49e32fe2f06e218a1b8278ab4db2',1,'IRArgoAC::getMode()'],['../classIRCarrierAc64.html#a554d655ebd58aa90375cad18de24cc0d',1,'IRCarrierAc64::getMode()'],['../classIRCoolixAC.html#a8fb9a73b6c3540bc395682bb32ef8a27',1,'IRCoolixAC::getMode()'],['../classIRCoronaAc.html#a4ea2e6e8e5b19c8bfc4b5625bcd308ad',1,'IRCoronaAc::getMode()'],['../classIRDaikinESP.html#abc4417c6d46ba7e7f15e80984ed458f4',1,'IRDaikinESP::getMode()'],['../classIRDaikin2.html#ab89325df2b63faccaa82c7708cae894e',1,'IRDaikin2::getMode()'],['../classIRDaikin216.html#a4ec4d63df2c3536bc9b10c1a883123f2',1,'IRDaikin216::getMode()'],['../classIRDaikin160.html#a177d6e5e5957f64e6e71e3792d94188a',1,'IRDaikin160::getMode()'],['../classIRDaikin176.html#a06d4d50b48a3d10c882342c582d46402',1,'IRDaikin176::getMode()'],['../classIRDaikin128.html#ae0aaea03e3da871673212c92bc166bb2',1,'IRDaikin128::getMode()'],['../classIRDaikin152.html#ae08cda442b9495cd23d40184efb27b45',1,'IRDaikin152::getMode()'],['../classIRDaikin64.html#adea9511f98273e2f4e8fcb47ddfa0a5a',1,'IRDaikin64::getMode()'],['../classIRDelonghiAc.html#a09ff883265f23bf67d73e11755155600',1,'IRDelonghiAc::getMode()'],['../classIREcoclimAc.html#a93a69322013b546dc4e1ddb2b2dc4a2f',1,'IREcoclimAc::getMode()'],['../classIRElectraAc.html#ab38a479c1947f1758a882ec8df2e1fc9',1,'IRElectraAc::getMode()'],['../classIRFujitsuAC.html#addabed92c560d2a97743f2fd074fab4d',1,'IRFujitsuAC::getMode()'],['../classIRGoodweatherAc.html#a7a33c367d8cb64ec85afc37bbdda3ab1',1,'IRGoodweatherAc::getMode()'],['../classIRGreeAC.html#a52d00282331a137869f3e1e165d8fe41',1,'IRGreeAC::getMode()'],['../classIRHaierAC.html#a2ddf59c6ce732c23a9898dfc6679be02',1,'IRHaierAC::getMode()'],['../classIRHaierACYRW02.html#a36be68111465fb0161aa22cfac8cbe55',1,'IRHaierACYRW02::getMode()'],['../classIRHitachiAc.html#ab0fa1185703c71d2558260cb5e3e40dc',1,'IRHitachiAc::getMode()'],['../classIRHitachiAc1.html#ac10580db160a458a97168e6f0e8a9970',1,'IRHitachiAc1::getMode()'],['../classIRHitachiAc424.html#a94c44ea44ec395351715f28d2067bdca',1,'IRHitachiAc424::getMode()'],['../classIRHitachiAc3.html#a511c9b731a0367fd05b32b42a69adec2',1,'IRHitachiAc3::getMode()'],['../classIRKelvinatorAC.html#af878b8867a65e62e1208e8358cfffa7c',1,'IRKelvinatorAC::getMode()'],['../classIRLgAc.html#a684e35c0c7f4dafbaf6d53230e7ee643',1,'IRLgAc::getMode()'],['../classIRMideaAC.html#aa024806cd5fce842e031f130d1f70ec6',1,'IRMideaAC::getMode()'],['../classIRMitsubishiAC.html#a6aa36b5cdb80acf93d0a2bb413ef5c6c',1,'IRMitsubishiAC::getMode()'],['../classIRMitsubishi136.html#a2930dc65d4e9d193a1763c836ab6d1cd',1,'IRMitsubishi136::getMode()'],['../classIRMitsubishi112.html#adf3365711e44842586a776030c52fd23',1,'IRMitsubishi112::getMode()'],['../classIRMitsubishiHeavy152Ac.html#a948571778a16aa7a7256773a101e81b0',1,'IRMitsubishiHeavy152Ac::getMode()'],['../classIRMitsubishiHeavy88Ac.html#a5004a26143481a3baa658026d1eed32f',1,'IRMitsubishiHeavy88Ac::getMode()'],['../classIRNeoclimaAc.html#a305db84bf11bd9f226db7dbec73e7dd3',1,'IRNeoclimaAc::getMode()'],['../classIRPanasonicAc.html#a5ffd59dd87b047e172ba74866267a9f3',1,'IRPanasonicAc::getMode()'],['../classIRPanasonicAc32.html#a353b10038a47d96ec12ea233b8160031',1,'IRPanasonicAc32::getMode()'],['../classIRSamsungAc.html#adcfed1f2123c48715cb6f3623ecf3f58',1,'IRSamsungAc::getMode()'],['../classIRSanyoAc.html#a8ec24049c1eb0e68f7c29c8a26c4faf2',1,'IRSanyoAc::getMode()'],['../classIRSharpAc.html#a36018c943865f189a32abae85a2b111b',1,'IRSharpAc::getMode()'],['../classIRTcl112Ac.html#a923f20af1fafa75feba9fabe0a39aa0a',1,'IRTcl112Ac::getMode()'],['../classIRTechnibelAc.html#ad1361f45fd3cc86105fc77aeffef1796',1,'IRTechnibelAc::getMode()'],['../classIRTecoAc.html#ad62055752174ef33b5444419162291aa',1,'IRTecoAc::getMode()'],['../classIRToshibaAC.html#a748c242e280954ef4b0efea6d47c1471',1,'IRToshibaAC::getMode()'],['../classIRTranscoldAc.html#a12e32c7b7a708ff6ee6b895ca3a884a8',1,'IRTranscoldAc::getMode()'],['../classIRTrotecESP.html#a734686c303babb58d836eb035ed11081',1,'IRTrotecESP::getMode()'],['../classIRTrumaAc.html#ac5190d6978631080f1617d3feec6f239',1,'IRTrumaAc::getMode()'],['../classIRVestelAc.html#a38e48fa0f7ddbc0b16983d84824a198b',1,'IRVestelAc::getMode()'],['../classIRVoltas.html#acedc05af3702d4beb98ebd5717b5f06c',1,'IRVoltas::getMode()'],['../classIRWhirlpoolAc.html#a82e7290554e4504d8fce19cdec1e2d0f',1,'IRWhirlpoolAc::getMode()']]], - ['getmodel_4085',['getModel',['../classIRFujitsuAC.html#a13a66019e2ba72e0b6e6bfa9c525f4a7',1,'IRFujitsuAC::getModel()'],['../classIRGreeAC.html#ae45f26fe0726c0730628624a271532fa',1,'IRGreeAC::getModel()'],['../classIRHitachiAc1.html#a9f84923ef60194ed218321fcdcf5adc7',1,'IRHitachiAc1::getModel()'],['../classIRLgAc.html#a15f94c5fc2b4dfabe1ae0e0bad3f1f37',1,'IRLgAc::getModel()'],['../classIRPanasonicAc.html#a625be846baf3ec556a59379785e642e8',1,'IRPanasonicAc::getModel()'],['../classIRSharpAc.html#a2274a217db53ba0363def8fb3fc5c88f',1,'IRSharpAc::getModel()'],['../classIRVoltas.html#a64e24f4f6aefa66ffa2f4a953f4ab205',1,'IRVoltas::getModel()'],['../classIRWhirlpoolAc.html#a96b0339714de063febd68829a8eea94f',1,'IRWhirlpoolAc::getModel()']]], - ['getmold_4086',['getMold',['../classIRDaikinESP.html#a6e940bd512a5ee0ffafa203b0fe4b360',1,'IRDaikinESP::getMold()'],['../classIRDaikin2.html#a6fdc34fe5e43a9df5677bb54315359fb',1,'IRDaikin2::getMold()']]], - ['getnight_4087',['getNight',['../classIRArgoAC.html#a4b50f226061301149107ce34dbf76daf',1,'IRArgoAC::getNight()'],['../classIRMitsubishiHeavy152Ac.html#ae8e193a64044e17493878dcc558a88da',1,'IRMitsubishiHeavy152Ac::getNight()']]], - ['getnormalstate_4088',['getNormalState',['../classIRCoolixAC.html#a458618f926f8b57e4b9bdeae0d13a70d',1,'IRCoolixAC']]], - ['getoffsleeptimer_4089',['getOffSleepTimer',['../classIRFujitsuAC.html#a24f5928580566b3db7a14d0366a3b6e6',1,'IRFujitsuAC']]], - ['getofftime_4090',['getOffTime',['../classIRDaikinESP.html#a8e57cf94a231ad5d029bad4a4c029191',1,'IRDaikinESP::getOffTime()'],['../classIRDaikin2.html#a8556aa0c7343343efda80246aebd44cb',1,'IRDaikin2::getOffTime()'],['../classIRDaikin64.html#a7c6a4e163f01be4017cb028470c7d4d7',1,'IRDaikin64::getOffTime()'],['../classIRVoltas.html#a9f6d0e9c6ea6e71177df4d8d8dcb34b8',1,'IRVoltas::getOffTime()']]], - ['getofftimeenabled_4091',['getOffTimeEnabled',['../classIRDaikin64.html#a8f02ea1c216886ebbed4369797329e40',1,'IRDaikin64']]], - ['getofftimer_4092',['getOffTimer',['../classIRCarrierAc64.html#ae777fcdb402eb862a1e4a5912ff39fae',1,'IRCarrierAc64::getOffTimer()'],['../classIRCoronaAc.html#ad46f8bd5c50ebd4de3354a77deac2518',1,'IRCoronaAc::getOffTimer()'],['../classIRDaikin128.html#a7550e40a909b21d8357871983951e02d',1,'IRDaikin128::getOffTimer()'],['../classIRDelonghiAc.html#a825e23b338644cd7b41a6529b2a38ee9',1,'IRDelonghiAc::getOffTimer()'],['../classIREcoclimAc.html#ae74a5c07d7840e00a69b8f92cda8fcf8',1,'IREcoclimAc::getOffTimer()'],['../classIRHaierAC.html#a4760af54cbc1618b2dc4c1bf57884ebb',1,'IRHaierAC::getOffTimer()'],['../classIRHitachiAc1.html#a37988864a631c1cd7df1bd09cc3878ba',1,'IRHitachiAc1::getOffTimer()'],['../classIRMideaAC.html#a280b85deb97232f03d6d9953f309926f',1,'IRMideaAC::getOffTimer()'],['../classIRPanasonicAc.html#a4bce377d32504f666662f1d93645761f',1,'IRPanasonicAc::getOffTimer()'],['../classIRSanyoAc.html#a754239cad3d588083a2dba5e933f0306',1,'IRSanyoAc::getOffTimer()'],['../classIRVestelAc.html#a45c725deb349e357b8c52ab3dcf51bdb',1,'IRVestelAc::getOffTimer()'],['../classIRWhirlpoolAc.html#a597de82026cdb3ebf12319ad5b6f7314',1,'IRWhirlpoolAc::getOffTimer()']]], - ['getofftimerenabled_4093',['getOffTimerEnabled',['../classIRDaikinESP.html#ae17795e1e1d4f0d3c6898a0d3188366e',1,'IRDaikinESP::getOffTimerEnabled()'],['../classIRDaikin2.html#ab6c48355e0a0c80d3cd99ae276df80a5',1,'IRDaikin2::getOffTimerEnabled()'],['../classIRDaikin128.html#a7437b509c7c26d94e5f5224d4375578e',1,'IRDaikin128::getOffTimerEnabled()'],['../classIRDelonghiAc.html#ae48767203f462ac02441c635328ef7aa',1,'IRDelonghiAc::getOffTimerEnabled()']]], - ['getontime_4094',['getOnTime',['../classIRDaikinESP.html#ab11a5aae3cd055f3c9b61dbf9fdb3ef9',1,'IRDaikinESP::getOnTime()'],['../classIRDaikin2.html#a7e98e1f9211e7e8885c503a7f724030f',1,'IRDaikin2::getOnTime()'],['../classIRDaikin64.html#a24536b3bce2d3e55f9a75ac093621cbc',1,'IRDaikin64::getOnTime()'],['../classIRVoltas.html#a96578f6ff015d5791a172fd9d0d0916f',1,'IRVoltas::getOnTime()']]], - ['getontimeenabled_4095',['getOnTimeEnabled',['../classIRDaikin64.html#a2e64a60c10bd8508a9d4b1373e2aab22',1,'IRDaikin64']]], - ['getontimer_4096',['getOnTimer',['../classIRCarrierAc64.html#a57f606d89eb29dafc18a2461467ad74f',1,'IRCarrierAc64::getOnTimer()'],['../classIRCoronaAc.html#a1a2f65c1eb0df18246d5088ef1a80e2f',1,'IRCoronaAc::getOnTimer()'],['../classIRDaikin128.html#a012991ae4e0bfce0dec50dce7e79b3d6',1,'IRDaikin128::getOnTimer()'],['../classIRDelonghiAc.html#a15c948b5ab0ea17298c95dc8b9fd5887',1,'IRDelonghiAc::getOnTimer()'],['../classIREcoclimAc.html#afdb831e4920ab2e11b63e10f8dfabf7d',1,'IREcoclimAc::getOnTimer()'],['../classIRFujitsuAC.html#ae7a012df0406b90d6ff6197334eb7bf3',1,'IRFujitsuAC::getOnTimer()'],['../classIRHaierAC.html#a1c71cd51382036c4548b460a13072e91',1,'IRHaierAC::getOnTimer()'],['../classIRHitachiAc1.html#a4f850fa34340b4cd976b514c355b0f99',1,'IRHitachiAc1::getOnTimer()'],['../classIRMideaAC.html#a4b8c1124bde8fab95f82ea57c0a77c39',1,'IRMideaAC::getOnTimer()'],['../classIRPanasonicAc.html#a51d50a59e09f0911022c59ab60bf4889',1,'IRPanasonicAc::getOnTimer()'],['../classIRVestelAc.html#a3b93b975802111973241d2c57d691bd0',1,'IRVestelAc::getOnTimer()'],['../classIRWhirlpoolAc.html#a3af30bd17c4facd9f93c21e740095222',1,'IRWhirlpoolAc::getOnTimer()']]], - ['getontimerenabled_4097',['getOnTimerEnabled',['../classIRDaikinESP.html#a1305a311d2cb6acc8fd4b26d0b9b5e57',1,'IRDaikinESP::getOnTimerEnabled()'],['../classIRDaikin2.html#a635bd00eff13041b284566936af0d589',1,'IRDaikin2::getOnTimerEnabled()'],['../classIRDaikin128.html#aebe10daacaf0629ed451624b776981fd',1,'IRDaikin128::getOnTimerEnabled()'],['../classIRDelonghiAc.html#afdd8284ec6c1d31b0cc943a49bdf3f0e',1,'IRDelonghiAc::getOnTimerEnabled()']]], - ['getoutsidequiet_4098',['getOutsideQuiet',['../classIRFujitsuAC.html#a706456b7e46a3da48483fa61e11c8e86',1,'IRFujitsuAC']]], - ['getpower_4099',['getPower',['../classIRAmcorAc.html#aa5c0a82e7425f9e71d303ebcd6af22aa',1,'IRAmcorAc::getPower()'],['../classIRArgoAC.html#a0784b8dec8e3e136b263a8c6387b7819',1,'IRArgoAC::getPower()'],['../classIRCarrierAc64.html#a61422ae8089453a26f1eea4fc0a57489',1,'IRCarrierAc64::getPower()'],['../classIRCoolixAC.html#a733ea01983f9936fbcee4c313c2ff54a',1,'IRCoolixAC::getPower()'],['../classIRCoronaAc.html#a0616dcf381d95d40138fb549e54eb7c4',1,'IRCoronaAc::getPower()'],['../classIRDaikinESP.html#acb6694d29a241e0a82b50212f46363f7',1,'IRDaikinESP::getPower()'],['../classIRDaikin2.html#a742026c183ee2bf5be1aafd0b6bbec20',1,'IRDaikin2::getPower()'],['../classIRDaikin216.html#aaafa8df6d9e1c74fcc94de4630746642',1,'IRDaikin216::getPower()'],['../classIRDaikin160.html#a0c5e6157a818d2c67046fd4560db7859',1,'IRDaikin160::getPower()'],['../classIRDaikin176.html#aa095669914397f51729b0f6bd8d9c094',1,'IRDaikin176::getPower()'],['../classIRDaikin152.html#a3ebf05f9b7dab1d1a78c4a1a2c8a03eb',1,'IRDaikin152::getPower()'],['../classIRDelonghiAc.html#a88a2ef78cf091f9b4ab38536b6cbe25e',1,'IRDelonghiAc::getPower()'],['../classIREcoclimAc.html#acccf77fc5f0151a3414cfea45491c110',1,'IREcoclimAc::getPower()'],['../classIRElectraAc.html#a776fdad40d191f04356f8366ff6128d3',1,'IRElectraAc::getPower()'],['../classIRFujitsuAC.html#a0b77519e85271d48bcd2a151b603d288',1,'IRFujitsuAC::getPower()'],['../classIRGoodweatherAc.html#ac07f4c3c4e064a13f1f90d0c227d8ec0',1,'IRGoodweatherAc::getPower()'],['../classIRGreeAC.html#a72ba2c19cc104ae8307b3d7ca533d4c1',1,'IRGreeAC::getPower()'],['../classIRHaierACYRW02.html#a242508ff127e27ac644c195b3d572baf',1,'IRHaierACYRW02::getPower()'],['../classIRHitachiAc.html#a8d94eb158971fcc28c85ce81443795f1',1,'IRHitachiAc::getPower()'],['../classIRHitachiAc1.html#a0183bbe39cfdda9d3b43e6d9c87df714',1,'IRHitachiAc1::getPower()'],['../classIRHitachiAc424.html#a025b0e8cd50111555d55fea481ca7b1c',1,'IRHitachiAc424::getPower()'],['../classIRKelvinatorAC.html#adfbe7efd74ec16f339c21983967920f9',1,'IRKelvinatorAC::getPower()'],['../classIRLgAc.html#a592403e1602a3b92f75d0e07756cc86e',1,'IRLgAc::getPower()'],['../classIRMideaAC.html#ad4dd8a532419cd2d8f5656df3e5a23e2',1,'IRMideaAC::getPower()'],['../classIRMitsubishiAC.html#abd4e2414d75b61c5d9d3693568dff791',1,'IRMitsubishiAC::getPower()'],['../classIRMitsubishi136.html#a2ebea047c764746524163f8c35dbe660',1,'IRMitsubishi136::getPower()'],['../classIRMitsubishi112.html#a04af02100d0cbad644d890f249f383ce',1,'IRMitsubishi112::getPower()'],['../classIRMitsubishiHeavy152Ac.html#afd5016f6c87fe822e6fe0e80d450f07b',1,'IRMitsubishiHeavy152Ac::getPower()'],['../classIRMitsubishiHeavy88Ac.html#a217d1f049e5046f5f0b5abd5c9cff422',1,'IRMitsubishiHeavy88Ac::getPower()'],['../classIRNeoclimaAc.html#a0bca526fcbe79a1ef3a6f281ef0f916b',1,'IRNeoclimaAc::getPower()'],['../classIRPanasonicAc.html#a2d50ed3994f6cc6e205d2c5fb6c0cc55',1,'IRPanasonicAc::getPower()'],['../classIRSamsungAc.html#aecb2a7187ea08433bed9c6a6f5dfc7e2',1,'IRSamsungAc::getPower()'],['../classIRSanyoAc.html#a0ad0e3522dc1ac2af56812540bbd2c5b',1,'IRSanyoAc::getPower()'],['../classIRSharpAc.html#a5d763e7c40eb7310789444b8746c50c8',1,'IRSharpAc::getPower()'],['../classIRTcl112Ac.html#a631d9d1addb03f18708fbec9d2480651',1,'IRTcl112Ac::getPower()'],['../classIRTechnibelAc.html#a1321272ac58e24e827a194965bb2b7a4',1,'IRTechnibelAc::getPower()'],['../classIRTecoAc.html#a66002ccce4fb4537ac5d937bc3ade7b5',1,'IRTecoAc::getPower()'],['../classIRToshibaAC.html#aacaa7c9c50b96de92f5947b87f4f3829',1,'IRToshibaAC::getPower()'],['../classIRTranscoldAc.html#a6ac4a00b6b9340e2a6ce304a928b148b',1,'IRTranscoldAc::getPower()'],['../classIRTrotecESP.html#a3c3e20f1b0edfe11c65c8e4ec1c0347c',1,'IRTrotecESP::getPower()'],['../classIRTrumaAc.html#a3a27b6b42bcd57cd1acfc2a7d6c4389c',1,'IRTrumaAc::getPower()'],['../classIRVestelAc.html#a88e2b24cc600488a6a27a1e616c80580',1,'IRVestelAc::getPower()'],['../classIRVoltas.html#aec20c3251f68bacf925406f243eb1b1a',1,'IRVoltas::getPower()']]], - ['getpowerbutton_4100',['getPowerButton',['../classIRCoronaAc.html#ab1ec9772fae659e91c4939afab8e77ca',1,'IRCoronaAc']]], - ['getpowerful_4101',['getPowerful',['../classIRDaikinESP.html#af70b79d4d3eaf91db08a1d597ce3e092',1,'IRDaikinESP::getPowerful()'],['../classIRDaikin2.html#a91ddd73b1b38fe74233765feecbd1055',1,'IRDaikin2::getPowerful()'],['../classIRDaikin216.html#a062077a6948d16de8b5f01522a989b2e',1,'IRDaikin216::getPowerful()'],['../classIRDaikin128.html#ab4eef7bc4e0d0ac29f465334687a65dc',1,'IRDaikin128::getPowerful()'],['../classIRDaikin152.html#a0668484f94dcb8ccdb13dba4f7782f7f',1,'IRDaikin152::getPowerful()'],['../classIRPanasonicAc.html#a736b77df0563705095d8f4241a80b1cb',1,'IRPanasonicAc::getPowerful()'],['../classIRSamsungAc.html#acea93892d56221b2563d0db1c09589d1',1,'IRSamsungAc::getPowerful()']]], - ['getpowerspecial_4102',['getPowerSpecial',['../classIRSharpAc.html#af9b74287cfd37c600371e266bffb5be4',1,'IRSharpAc']]], - ['getpowertoggle_4103',['getPowerToggle',['../classIRAirwellAc.html#a73ae0827f0235788d5d6149ea4de8eb0',1,'IRAirwellAc::getPowerToggle()'],['../classIRDaikin128.html#a7bcc31cfbaa886481831236268ba51a2',1,'IRDaikin128::getPowerToggle()'],['../classIRDaikin64.html#a0bb829722a7cdc6625a5a6684c7a7d95',1,'IRDaikin64::getPowerToggle()'],['../classIRHitachiAc1.html#a1028550ea882741a0f98d974671f1fd7',1,'IRHitachiAc1::getPowerToggle()'],['../classIRPanasonicAc32.html#afbbae70ea168e39a3adcf6846e981bd8',1,'IRPanasonicAc32::getPowerToggle()'],['../classIRWhirlpoolAc.html#a23aebd8217ea671f5e847a1eb70e61de',1,'IRWhirlpoolAc::getPowerToggle()']]], - ['getpurify_4104',['getPurify',['../classIRDaikin2.html#a73b691ef3fa4a555f7557d0cad63ef02',1,'IRDaikin2']]], - ['getquiet_4105',['getQuiet',['../classIRDaikinESP.html#ae066d6fd02d78021bb6d1b4cfa2e2ad8',1,'IRDaikinESP::getQuiet()'],['../classIRDaikin2.html#ae77c687b5e258baf941181ae0a261aae',1,'IRDaikin2::getQuiet()'],['../classIRDaikin216.html#adb59e4a7e933c1daa5456b9561710913',1,'IRDaikin216::getQuiet()'],['../classIRDaikin128.html#a0d59cd6b8a05a397d8cda84ecfeea426',1,'IRDaikin128::getQuiet()'],['../classIRDaikin152.html#a2ff46afdbce630536ce80066f8505aad',1,'IRDaikin152::getQuiet()'],['../classIRDaikin64.html#a2ee30dde1870871eaefe246c30990e59',1,'IRDaikin64::getQuiet()'],['../classIRKelvinatorAC.html#a3ecb10d41670852841c2543e6e97c781',1,'IRKelvinatorAC::getQuiet()'],['../classIRMitsubishi136.html#a9ea4cb8a87988cc6c97d7116d154448f',1,'IRMitsubishi136::getQuiet()'],['../classIRMitsubishi112.html#a28b91ee196fc212f7e3259e7429dc770',1,'IRMitsubishi112::getQuiet()'],['../classIRPanasonicAc.html#a8d7dfc9b5f7c7a4523c0bfa4e0bc415a',1,'IRPanasonicAc::getQuiet()'],['../classIRSamsungAc.html#a4296eb88c1b349206d7a0bd551d33ee6',1,'IRSamsungAc::getQuiet()'],['../classIRTrumaAc.html#a5102362a518e49176b3605d6fddf027e',1,'IRTrumaAc::getQuiet()']]], - ['getraw_4106',['getRaw',['../classIRAirwellAc.html#aec84bac505703ad872cd4b6391fbe748',1,'IRAirwellAc::getRaw()'],['../classIRAmcorAc.html#a4dc24f5aa597dba421fdb0e2e0481875',1,'IRAmcorAc::getRaw()'],['../classIRArgoAC.html#ac9e8b45dbbef453a54e3593d7e2927fb',1,'IRArgoAC::getRaw()'],['../classIRCarrierAc64.html#a6f83fc571d5d7d3e3af2237367e66884',1,'IRCarrierAc64::getRaw()'],['../classIRCoolixAC.html#ada7799bf0e9fb40e7475a510187ff762',1,'IRCoolixAC::getRaw()'],['../classIRCoronaAc.html#ac2ba3b4bcefb801da345c9da5daa85fc',1,'IRCoronaAc::getRaw()'],['../classIRDaikinESP.html#ab100221dacc23402f486dee038df046d',1,'IRDaikinESP::getRaw()'],['../classIRDaikin2.html#af4bcf5f856169761c9b0f1fb6607af21',1,'IRDaikin2::getRaw()'],['../classIRDaikin216.html#a178e2dd3578a53356e1cebdbac6024a7',1,'IRDaikin216::getRaw()'],['../classIRDaikin160.html#accccba95fee75626871f91861678c57e',1,'IRDaikin160::getRaw()'],['../classIRDaikin176.html#acd84f4e9f36a91264290a7a0cf0f519e',1,'IRDaikin176::getRaw()'],['../classIRDaikin128.html#a05669c2b1a6720b95d9a5fb898179a10',1,'IRDaikin128::getRaw()'],['../classIRDaikin152.html#af6c492ed5216aedbd5ad922437e842fd',1,'IRDaikin152::getRaw()'],['../classIRDaikin64.html#aa3a947da9925c0f2568eeeeb0d9632b0',1,'IRDaikin64::getRaw()'],['../classIRDelonghiAc.html#a17159362299572642e485a7f815220d7',1,'IRDelonghiAc::getRaw()'],['../classIREcoclimAc.html#aec7b0bf1c542ce8141333a84ca3afcbd',1,'IREcoclimAc::getRaw()'],['../classIRElectraAc.html#a7674d29474ecbbb6366d96056794314c',1,'IRElectraAc::getRaw()'],['../classIRFujitsuAC.html#ae4dce44cab1f26756d63728cb8d55e65',1,'IRFujitsuAC::getRaw()'],['../classIRGoodweatherAc.html#a82d973e562b2425e8823fbc7332c06de',1,'IRGoodweatherAc::getRaw()'],['../classIRGreeAC.html#afa1595d4f69200b0076db1b9f8f2ea73',1,'IRGreeAC::getRaw()'],['../classIRHaierAC.html#abf72eed86c2c86c4f0f5f49f6a788b82',1,'IRHaierAC::getRaw()'],['../classIRHaierACYRW02.html#abca7bbe8c723551723f24f186343b764',1,'IRHaierACYRW02::getRaw()'],['../classIRHitachiAc.html#a8dafb9436f63cfc2d7e4f558fbd6e1ab',1,'IRHitachiAc::getRaw()'],['../classIRHitachiAc1.html#ad850b6364603880ccc444381e85af564',1,'IRHitachiAc1::getRaw()'],['../classIRHitachiAc424.html#acd8388f938feeaf6808ff65779435b5d',1,'IRHitachiAc424::getRaw()'],['../classIRHitachiAc3.html#a915605ca6d0bf3ff6fc9b376ddd394ae',1,'IRHitachiAc3::getRaw()'],['../classIRKelvinatorAC.html#a09149dd7bc45ca50b0c490b9c1f1e6f4',1,'IRKelvinatorAC::getRaw()'],['../classIRLgAc.html#afcb529d2f2c9016388264b80e6a99351',1,'IRLgAc::getRaw()'],['../classIRMideaAC.html#ae0b2c3a5a0a1d84eaeb462bbbe944d97',1,'IRMideaAC::getRaw()'],['../classIRMitsubishiAC.html#a1f2d0ea70bdeb71efab4c20ccd876aa9',1,'IRMitsubishiAC::getRaw()'],['../classIRMitsubishi136.html#a61cceec2bf241a75be1389391e8f3d9a',1,'IRMitsubishi136::getRaw()'],['../classIRMitsubishi112.html#a5e47e892921b8464652b55f41f42fd9a',1,'IRMitsubishi112::getRaw()'],['../classIRMitsubishiHeavy152Ac.html#a34ae73479c76b08512eaa87ed0662c0a',1,'IRMitsubishiHeavy152Ac::getRaw()'],['../classIRMitsubishiHeavy88Ac.html#af96915ac45861327ed7d55803dadd4fd',1,'IRMitsubishiHeavy88Ac::getRaw()'],['../classIRNeoclimaAc.html#a1f67329cad92d4252b0d33effce6380e',1,'IRNeoclimaAc::getRaw()'],['../classIRPanasonicAc.html#ad65c2bcdc3984a986f5ef2f03b5574d4',1,'IRPanasonicAc::getRaw()'],['../classIRPanasonicAc32.html#a9128df3724e0767070718c9811ce7d2d',1,'IRPanasonicAc32::getRaw()'],['../classIRSamsungAc.html#a96c6ac410053f0f2804160040d9fcf12',1,'IRSamsungAc::getRaw()'],['../classIRSanyoAc.html#a0ae6388f53eaf58d9c9276ab192e846b',1,'IRSanyoAc::getRaw()'],['../classIRSharpAc.html#a9d680b0145c376060bd2d2e4c2630162',1,'IRSharpAc::getRaw()'],['../classIRTcl112Ac.html#a517375b764d1381aa5a7d4ec962346ec',1,'IRTcl112Ac::getRaw()'],['../classIRTechnibelAc.html#ad606f7448fdb0813f52f253fd218562d',1,'IRTechnibelAc::getRaw()'],['../classIRTecoAc.html#ab88386c5c7669437dfbb91b1fa6321ed',1,'IRTecoAc::getRaw()'],['../classIRToshibaAC.html#a3572a06423851d2c4da5f85133a1a8ff',1,'IRToshibaAC::getRaw()'],['../classIRTranscoldAc.html#aaf7aa5d00d7447bfcb82d17ed1f66a6d',1,'IRTranscoldAc::getRaw()'],['../classIRTrotecESP.html#a412dd2cf9dcb711003bcbb5b579cb2b8',1,'IRTrotecESP::getRaw()'],['../classIRTrumaAc.html#a96c74884f744b75ba230bb7a4464fd21',1,'IRTrumaAc::getRaw()'],['../classIRVestelAc.html#afffd1dbcdec22ecca4efe9a996bf27e5',1,'IRVestelAc::getRaw()'],['../classIRVoltas.html#a8718fd8231a8b1c282c5c2a4b2e9c176',1,'IRVoltas::getRaw()'],['../classIRWhirlpoolAc.html#a788a6a5373256e10200969cc5c73da63',1,'IRWhirlpoolAc::getRaw()']]], - ['getrclevel_4107',['getRClevel',['../classIRrecv.html#a8e32daaa903a8e42dad7faaf405b33dc',1,'IRrecv']]], - ['getroomtemp_4108',['getRoomTemp',['../classIRArgoAC.html#aeae1c1fb6f1a3eeb4296849b0be6c44c',1,'IRArgoAC']]], - ['getsave_4109',['getSave',['../classIRTecoAc.html#a75175a6a3bbe4bc37323042c1f902a34',1,'IRTecoAc']]], - ['getsectionbyte_4110',['getSectionByte',['../classIRCoronaAc.html#aed9181df842370739a5b4977b20769f9',1,'IRCoronaAc']]], - ['getsectionchecksum_4111',['getSectionChecksum',['../namespaceIRXmpUtils.html#a60f5e4774b9ff0e08ae54844b132d5fb',1,'IRXmpUtils']]], - ['getsensor_4112',['getSensor',['../classIRDaikinESP.html#a6493face77cd685c85d080dd45decbc7',1,'IRDaikinESP::getSensor()'],['../classIRDaikin152.html#af07ad5e4e1b0f3b1cae18d3f4ef0a15f',1,'IRDaikin152::getSensor()'],['../classIRSanyoAc.html#abb18cd13144d0481f7547b7826a381f6',1,'IRSanyoAc::getSensor()']]], - ['getsensortemp_4113',['getSensorTemp',['../classIRCoolixAC.html#ab2f86254c73285bbd420d90d6f089dfd',1,'IRCoolixAC::getSensorTemp()'],['../classIREcoclimAc.html#ac0395413439cc393a8d39a6fb26e1553',1,'IREcoclimAc::getSensorTemp()'],['../classIRMideaAC.html#a3ed0a7ef0acb6e7b7c83ed6722a80a7f',1,'IRMideaAC::getSensorTemp()'],['../classIRSanyoAc.html#abff813c8f55d9f52d705e10fab214963',1,'IRSanyoAc::getSensorTemp()']]], - ['getsilent_4114',['getSilent',['../classIRMitsubishiHeavy152Ac.html#a352fe50eeb18db9f74114dd95e8754dc',1,'IRMitsubishiHeavy152Ac']]], - ['getsleep_4115',['getSleep',['../classIRCarrierAc64.html#ae999122072e0dd1e9b83120292bc6256',1,'IRCarrierAc64::getSleep()'],['../classIRCoolixAC.html#a3baf61e1d13863681ce57f9465c42c65',1,'IRCoolixAC::getSleep()'],['../classIRDaikin128.html#a49f5b2bca44efadb585ec067deed39c3',1,'IRDaikin128::getSleep()'],['../classIRDaikin64.html#a6c158e0701a9b7d821c7a2c3c90d4bea',1,'IRDaikin64::getSleep()'],['../classIRDelonghiAc.html#ab41702206eb36ca6e1cc8689ce259861',1,'IRDelonghiAc::getSleep()'],['../classIRGoodweatherAc.html#a17ddc9ee4e4200176ede62817ed7cb7f',1,'IRGoodweatherAc::getSleep()'],['../classIRGreeAC.html#a54b727511a82eca6fb712bea3ae357bb',1,'IRGreeAC::getSleep()'],['../classIRHaierAC.html#af88bef780a4f14f44cd7d2549f3838b3',1,'IRHaierAC::getSleep()'],['../classIRHaierACYRW02.html#afcd1dc8fbf846040ead3122d2b5ea3b7',1,'IRHaierACYRW02::getSleep()'],['../classIRHitachiAc1.html#a7bd7318f8b02e1f0db1d4b23f8845f03',1,'IRHitachiAc1::getSleep()'],['../classIRMideaAC.html#a2cef1181e13416425edb1bac972c4adf',1,'IRMideaAC::getSleep()'],['../classIRNeoclimaAc.html#a139adc7789bcbc3914906331759fac48',1,'IRNeoclimaAc::getSleep()'],['../classIRSanyoAc.html#ab0a41518ea6ed5005141bef874ab09af',1,'IRSanyoAc::getSleep()'],['../classIRTechnibelAc.html#a36da9a7b867fb8b4b36812f0bb9abf8f',1,'IRTechnibelAc::getSleep()'],['../classIRTecoAc.html#a3a86eb6a4d6d1b4ae0069aea245c0d86',1,'IRTecoAc::getSleep()'],['../classIRTrotecESP.html#a71743691c207d13115383899cdbd26fe',1,'IRTrotecESP::getSleep()'],['../classIRVestelAc.html#a31143f56418da08af313eccf0fd46c40',1,'IRVestelAc::getSleep()'],['../classIRVoltas.html#a56795d5b7cb4a42df4d1289363bfe276',1,'IRVoltas::getSleep()'],['../classIRWhirlpoolAc.html#ab8bcb6bce16a10c7184bf7226c9cb9c7',1,'IRWhirlpoolAc::getSleep()']]], - ['getsleeptime_4116',['getSleepTime',['../classIRDaikin2.html#a267a7975e882ffc884eccbdc16a0df5f',1,'IRDaikin2']]], - ['getsleeptimerenabled_4117',['getSleepTimerEnabled',['../classIRDaikin2.html#a763e88c841fc6b32521787d3f1df32e4',1,'IRDaikin2']]], - ['getspecial_4118',['getSpecial',['../classIRSharpAc.html#a3d0a128734a796557dcda8054e3056fd',1,'IRSharpAc']]], - ['getspeed_4119',['getSpeed',['../classIRTrotecESP.html#ae0ede3d969d6f3903dca7899efd674fd',1,'IRTrotecESP']]], - ['getstartclock_4120',['getStartClock',['../classIRMitsubishiAC.html#aac0b7c36e9eb1b5254fe6f6966cc0206',1,'IRMitsubishiAC']]], - ['getstate_4121',['getState',['../classIRac.html#af0122722691881b04c312bb30efcc3f2',1,'IRac']]], - ['getstatelength_4122',['getStateLength',['../classIRFujitsuAC.html#a02636372996211d464c7394329921ea0',1,'IRFujitsuAC::getStateLength()'],['../classIRToshibaAC.html#af65addadf7cf47d2178fdf9c9fa16bd8',1,'IRToshibaAC::getStateLength()']]], - ['getstateprev_4123',['getStatePrev',['../classIRac.html#adf582223eae0127491c7f1db38f101d3',1,'IRac']]], - ['getstopclock_4124',['getStopClock',['../classIRMitsubishiAC.html#affbddec76d8f00f9a2cbf568b2e69233',1,'IRMitsubishiAC']]], - ['getsuper_4125',['getSuper',['../classIRWhirlpoolAc.html#af9e4fd82307476b1fb71db980949c970',1,'IRWhirlpoolAc']]], - ['getswing_4126',['getSwing',['../classIRCoolixAC.html#a59b96858b6fe88f46de40fd3c743f0e0',1,'IRCoolixAC::getSwing()'],['../classIRFujitsuAC.html#ac0f7128a617e01440bb4f12321cd81f7',1,'IRFujitsuAC::getSwing()'],['../classIRGoodweatherAc.html#a4112cccacc2f8ea30c7d8bdb068beae0',1,'IRGoodweatherAc::getSwing()'],['../classIRHaierAC.html#ac1192427f02d7f77bb88105d74fc8276',1,'IRHaierAC::getSwing()'],['../classIRHaierACYRW02.html#aca4d95809fad3e6851bb9af20e00b520',1,'IRHaierACYRW02::getSwing()'],['../classIRSamsungAc.html#a5627d39ea3af4d1e948fc4b8339baf9b',1,'IRSamsungAc::getSwing()'],['../classIRTechnibelAc.html#a8f5265c3752c98a48a6be0ef443a9248',1,'IRTechnibelAc::getSwing()'],['../classIRTecoAc.html#a91d2fb0dfbbfb3c97ec9691655ee111f',1,'IRTecoAc::getSwing()'],['../classIRToshibaAC.html#a18998242b9d04a6702585d489f25c56f',1,'IRToshibaAC::getSwing()'],['../classIRTranscoldAc.html#a9d427219a71afa71fb5518b2abb6d202',1,'IRTranscoldAc::getSwing()'],['../classIRVestelAc.html#a5f1d1009cc3cd29123a0db815e437c3a',1,'IRVestelAc::getSwing()'],['../classIRWhirlpoolAc.html#aeb6a97f0407caf9a7a98098397e68335',1,'IRWhirlpoolAc::getSwing()']]], - ['getswingh_4127',['getSwingH',['../classIRElectraAc.html#ae71e3f7bb1a4caa54c9cdbc99d29c381',1,'IRElectraAc::getSwingH()'],['../classIRHitachiAc1.html#a18a07374143855102df4aa1e6415f524',1,'IRHitachiAc1::getSwingH()'],['../classIRHitachiAc344.html#ad3a2a8cfda11640d3c163ab09d84c2b3',1,'IRHitachiAc344::getSwingH()'],['../classIRMitsubishi112.html#ab760d57617d2a085be1e09c1dc6fb314',1,'IRMitsubishi112::getSwingH()'],['../classIRNeoclimaAc.html#aa0e598394a411e627a684525053a6500',1,'IRNeoclimaAc::getSwingH()'],['../classIRVoltas.html#a681b2f013a436bc1a117071ccc36c1cf',1,'IRVoltas::getSwingH()']]], - ['getswinghchange_4128',['getSwingHChange',['../classIRVoltas.html#ac7f222cb487a772d77dea53e489ef614',1,'IRVoltas']]], - ['getswinghorizontal_4129',['getSwingHorizontal',['../classIRDaikinESP.html#aff785e5f56246db3bebff7cfe09417ed',1,'IRDaikinESP::getSwingHorizontal()'],['../classIRDaikin2.html#adec30b33929a1cd219ae6d50eb44fe17',1,'IRDaikin2::getSwingHorizontal()'],['../classIRDaikin216.html#afb800780b003ad6b77f310e168ea8024',1,'IRDaikin216::getSwingHorizontal()'],['../classIRDaikin176.html#a4cf043df8f6f2e5a3554208dff0d963d',1,'IRDaikin176::getSwingHorizontal()'],['../classIRHitachiAc.html#a04734465f6c3c5deb28f0a42d0d6bc84',1,'IRHitachiAc::getSwingHorizontal()'],['../classIRKelvinatorAC.html#ab24237062a73a8c236b6691a0277c1f3',1,'IRKelvinatorAC::getSwingHorizontal()'],['../classIRMitsubishiHeavy152Ac.html#aa16ca11537459dbbad1267e227898aef',1,'IRMitsubishiHeavy152Ac::getSwingHorizontal()'],['../classIRMitsubishiHeavy88Ac.html#a90065b9855d805e7cec4d4d6c596f956',1,'IRMitsubishiHeavy88Ac::getSwingHorizontal()'],['../classIRPanasonicAc.html#a37d9b268b3c8527be0939e0a24b02ef6',1,'IRPanasonicAc::getSwingHorizontal()'],['../classIRPanasonicAc32.html#aa1d2c9d265db4c3395376c45ba6b5bba',1,'IRPanasonicAc32::getSwingHorizontal()'],['../classIRTcl112Ac.html#aa39f0f91e6a59477c914189817ae5518',1,'IRTcl112Ac::getSwingHorizontal()']]], - ['getswingtoggle_4130',['getSwingToggle',['../classIRHitachiAc1.html#a79aea8264a5d6b4bfd2d2ce6651ac8a5',1,'IRHitachiAc1::getSwingToggle()'],['../classIRSharpAc.html#af3191879408c280c108fd0afdbce475d',1,'IRSharpAc::getSwingToggle()']]], - ['getswingv_4131',['getSwingV',['../classIRCarrierAc64.html#a22e14700eb0efe9f28c8008297a21ced',1,'IRCarrierAc64::getSwingV()'],['../classIRDaikin152.html#aa728135169cbe54291e362dcffebc23a',1,'IRDaikin152::getSwingV()'],['../classIRElectraAc.html#a5ea68ed936a2395ea72eac562420f4ee',1,'IRElectraAc::getSwingV()'],['../classIRHitachiAc1.html#a66f24e20b53a1d40d465b36d7bb0b6b2',1,'IRHitachiAc1::getSwingV()'],['../classIRHitachiAc344.html#a86f1db7b42edf48e751b2a6a0bca8c47',1,'IRHitachiAc344::getSwingV()'],['../classIRMitsubishi136.html#a3bd3e55f343c18e915549f94ca2f42a6',1,'IRMitsubishi136::getSwingV()'],['../classIRMitsubishi112.html#a42ef9d26b85d9dac34730e7f65c6256b',1,'IRMitsubishi112::getSwingV()'],['../classIRNeoclimaAc.html#aaaac3278cfe3120e3973b38ade87b904',1,'IRNeoclimaAc::getSwingV()'],['../classIRSanyoAc.html#abcb0f05930ac13b9229a8575a99c9159',1,'IRSanyoAc::getSwingV()'],['../classIRVoltas.html#a20360a21d87672e3a2f569be29c840f4',1,'IRVoltas::getSwingV()']]], - ['getswingvertical_4132',['getSwingVertical',['../classIRDaikinESP.html#a2c50ee50ce429da67ec00182151ff4ff',1,'IRDaikinESP::getSwingVertical()'],['../classIRDaikin2.html#a411a950d43da08070ef1ad744f7188f1',1,'IRDaikin2::getSwingVertical()'],['../classIRDaikin216.html#af00b48f968c5ab428c36bde8886c9e31',1,'IRDaikin216::getSwingVertical()'],['../classIRDaikin160.html#ace47ac509abe05ad9c97eeeb7e9916db',1,'IRDaikin160::getSwingVertical()'],['../classIRDaikin128.html#a66b247675babf3d4f571c2c6e7237b14',1,'IRDaikin128::getSwingVertical()'],['../classIRDaikin64.html#a71b4190e3f871815b549c531d134f925',1,'IRDaikin64::getSwingVertical()'],['../classIRHitachiAc.html#ad494c4e80fd7f041e4ab7d9f18f0985a',1,'IRHitachiAc::getSwingVertical()'],['../classIRKelvinatorAC.html#aafb8deadf87564b4111a44ffaf9c866a',1,'IRKelvinatorAC::getSwingVertical()'],['../classIRMitsubishiHeavy152Ac.html#ab8fe96c4c97c3621e006326a849f25fe',1,'IRMitsubishiHeavy152Ac::getSwingVertical()'],['../classIRMitsubishiHeavy88Ac.html#a68dc25472a3a8c652b62ca9c0265ae07',1,'IRMitsubishiHeavy88Ac::getSwingVertical()'],['../classIRPanasonicAc.html#a7a35303cd4fb4b23c0e5a25777d5819c',1,'IRPanasonicAc::getSwingVertical()'],['../classIRPanasonicAc32.html#a93326072ab7684c147673ff7a5074799',1,'IRPanasonicAc32::getSwingVertical()'],['../classIRTcl112Ac.html#ac997659c2ab82cfa1bf8eaa11fc0efc1',1,'IRTcl112Ac::getSwingVertical()']]], - ['getswingverticalauto_4133',['getSwingVerticalAuto',['../classIRGreeAC.html#afaeb34a429e75989593d1311e4487ae5',1,'IRGreeAC']]], - ['getswingverticalposition_4134',['getSwingVerticalPosition',['../classIRGreeAC.html#a55f30d5b23edc18dd873f9a1fbace43c',1,'IRGreeAC']]], - ['getswingvstep_4135',['getSwingVStep',['../classIRCoolixAC.html#af1324a62bdb4d847bf02b635d3a1df05',1,'IRCoolixAC::getSwingVStep()'],['../classIRMideaAC.html#ab963d4e492689a669cd97345859f7d41',1,'IRMideaAC::getSwingVStep()']]], - ['getswingvtoggle_4136',['getSwingVToggle',['../classIRCoronaAc.html#a1d9dd3fae0695522cbb2a97a110c4428',1,'IRCoronaAc::getSwingVToggle()'],['../classIRHitachiAc424.html#aafd0dd25455dd9743cf4fd879a843e54',1,'IRHitachiAc424::getSwingVToggle()'],['../classIRMideaAC.html#a50b260d69bc0df8851bfccb003971dfe',1,'IRMideaAC::getSwingVToggle()']]], - ['gettemp_4137',['getTemp',['../classIRAirwellAc.html#aee52deba26ba5b217704667d159d1110',1,'IRAirwellAc::getTemp()'],['../classIRAmcorAc.html#a5a16756250e4331fffb74608439a5813',1,'IRAmcorAc::getTemp()'],['../classIRArgoAC.html#a061fa1b6c4472f8d59a3a3469a6dd514',1,'IRArgoAC::getTemp()'],['../classIRCarrierAc64.html#a38583e54e47ae08b2ce3469f55797e63',1,'IRCarrierAc64::getTemp()'],['../classIRCoolixAC.html#a5861b7089a7fb2dab02be36b287a42e8',1,'IRCoolixAC::getTemp()'],['../classIRCoronaAc.html#acab661bc33a7bc8bc1da85af70eab334',1,'IRCoronaAc::getTemp()'],['../classIRDaikinESP.html#a8aa56cf86e6b417dfaea77d9c0eada06',1,'IRDaikinESP::getTemp()'],['../classIRDaikin2.html#ad5c2f9113952e82329d943565445074c',1,'IRDaikin2::getTemp()'],['../classIRDaikin216.html#ac6413e168b366658396b4c90ecd0d243',1,'IRDaikin216::getTemp()'],['../classIRDaikin160.html#a3e3e27cc129f49117fa6da49e24f3b1f',1,'IRDaikin160::getTemp()'],['../classIRDaikin176.html#a9d1edc9dbb661deec9b6a22e3d3ab307',1,'IRDaikin176::getTemp()'],['../classIRDaikin128.html#ab54d88d9d00263102856483cebd00ec6',1,'IRDaikin128::getTemp()'],['../classIRDaikin152.html#a2090bcca7631181cf8ad1551b56f4df9',1,'IRDaikin152::getTemp()'],['../classIRDaikin64.html#a32860d84a3a5378d753a533d948a1a33',1,'IRDaikin64::getTemp()'],['../classIRDelonghiAc.html#a1c2d1e8a10cac59b9ef925a26191c99c',1,'IRDelonghiAc::getTemp()'],['../classIREcoclimAc.html#a4a0a22deb136371f5d93c40363cc65e9',1,'IREcoclimAc::getTemp()'],['../classIRElectraAc.html#ab3ac984ca54b6a7f7b89db6c6c664c1b',1,'IRElectraAc::getTemp()'],['../classIRFujitsuAC.html#aba877f65241647ab1e59f3d68026c906',1,'IRFujitsuAC::getTemp()'],['../classIRGoodweatherAc.html#a253e92453136f37c3082a5d492d45c82',1,'IRGoodweatherAc::getTemp()'],['../classIRGreeAC.html#a909b49c3ca07a8b38e1fe1ceae668998',1,'IRGreeAC::getTemp()'],['../classIRHaierAC.html#aa6f23534e63039527bf92fc85fed2e2c',1,'IRHaierAC::getTemp()'],['../classIRHaierACYRW02.html#a29cf50881ef62c18499e81a43c717c46',1,'IRHaierACYRW02::getTemp()'],['../classIRHitachiAc.html#a480338cf955af5d613f28f7f227f4b96',1,'IRHitachiAc::getTemp()'],['../classIRHitachiAc1.html#a3ce1fdb58c722d78ca2f94ed81b5a12c',1,'IRHitachiAc1::getTemp()'],['../classIRHitachiAc424.html#a166d3d7cd9028d906a7a259902c8898c',1,'IRHitachiAc424::getTemp()'],['../classIRKelvinatorAC.html#a6b7c66f0bc68f2d43fbbabce7933e0a5',1,'IRKelvinatorAC::getTemp()'],['../classIRLgAc.html#ab31fa58db72e02efe836e398d8c4ac85',1,'IRLgAc::getTemp()'],['../classIRMideaAC.html#a319f5ca24e977a6b7f0df93324dab63e',1,'IRMideaAC::getTemp()'],['../classIRMitsubishiAC.html#ae77c2975bd1a0fd3dcebff4fc4a8ac1b',1,'IRMitsubishiAC::getTemp()'],['../classIRMitsubishi136.html#ab6bb4c13ee3507fd048e5213eca9be4f',1,'IRMitsubishi136::getTemp()'],['../classIRMitsubishi112.html#a0076a6a8181b50148a7aff68637c040d',1,'IRMitsubishi112::getTemp()'],['../classIRMitsubishiHeavy152Ac.html#a78bf8b8e2af65a8800bb1f0c7e6c2ec6',1,'IRMitsubishiHeavy152Ac::getTemp()'],['../classIRMitsubishiHeavy88Ac.html#aa8bf74217098c414306d0fc50e0beaa7',1,'IRMitsubishiHeavy88Ac::getTemp()'],['../classIRNeoclimaAc.html#a08bf660c8662806e60cf1024eb219b60',1,'IRNeoclimaAc::getTemp()'],['../classIRPanasonicAc.html#af8a5607c317e541752fada6ca79ee80f',1,'IRPanasonicAc::getTemp()'],['../classIRPanasonicAc32.html#a1813480b9ecf4cee49d41f3da84f2e9f',1,'IRPanasonicAc32::getTemp()'],['../classIRSamsungAc.html#a1e770b7736fe5602bb49d82a5c3b0dd2',1,'IRSamsungAc::getTemp()'],['../classIRSanyoAc.html#a92c72388fd6c948f1869f7b4e46ee1ee',1,'IRSanyoAc::getTemp()'],['../classIRSharpAc.html#af92f3a2d3932cbd21373f556a49c90a5',1,'IRSharpAc::getTemp()'],['../classIRTcl112Ac.html#a0b67c42831d2f6af39a5512bbf290ec7',1,'IRTcl112Ac::getTemp()'],['../classIRTechnibelAc.html#aef4e87289ee51b68ef8da511833c15f4',1,'IRTechnibelAc::getTemp()'],['../classIRTecoAc.html#adb87a792c60fd2698f9333d96327dba7',1,'IRTecoAc::getTemp()'],['../classIRToshibaAC.html#af7321d15910eef276a6a716e868f9fcf',1,'IRToshibaAC::getTemp()'],['../classIRTranscoldAc.html#a73c260bf13212948872a96ce17d5adb7',1,'IRTranscoldAc::getTemp()'],['../classIRTrotecESP.html#a387cfde6cb1911aa0605f4215527e1b0',1,'IRTrotecESP::getTemp()'],['../classIRTrumaAc.html#a779a279fe607c42f2b4a7b4ff8eaf13f',1,'IRTrumaAc::getTemp()'],['../classIRVestelAc.html#a822bb550803b7fbb1ae9f00c51279259',1,'IRVestelAc::getTemp()'],['../classIRVoltas.html#a94571ef1d0844e0e6ca1b9a82b69ce10',1,'IRVoltas::getTemp()'],['../classIRWhirlpoolAc.html#ae9b6764f01ea525e86bdd5288715992d',1,'IRWhirlpoolAc::getTemp()']]], - ['gettempoffset_4138',['getTempOffset',['../classIRWhirlpoolAc.html#abb44b09321ea607d170b59bbc30d5c49',1,'IRWhirlpoolAc']]], - ['gettempraw_4139',['getTempRaw',['../classIRCoolixAC.html#a83e88b3f9d648ffd607db457fea401bc',1,'IRCoolixAC']]], - ['gettempunit_4140',['getTempUnit',['../classIRDelonghiAc.html#a444276a706d2b5099eab4452cfe4712d',1,'IRDelonghiAc::getTempUnit()'],['../classIRTechnibelAc.html#a19c61ade2ad976dd93108cafabe6a23f',1,'IRTechnibelAc::getTempUnit()']]], - ['gettempunits_4141',['getTempUnits',['../classIRNeoclimaAc.html#a14074dc932bd554c3c1746e6b0ecf43c',1,'IRNeoclimaAc']]], - ['gettime_4142',['getTime',['../classIRVestelAc.html#a7310f2d251aaba0467718fb8c8983f3d',1,'IRVestelAc']]], - ['gettimer_4143',['getTimer',['../classIRGreeAC.html#a3e58e19819ae3b74d8fa9c9eca2f8be9',1,'IRGreeAC::getTimer()'],['../classIRMitsubishiAC.html#a595e06747e8d1b2d7bc22dad17c0e9d2',1,'IRMitsubishiAC::getTimer()'],['../classIRTechnibelAc.html#a631b234cfb8445785ee3cfbbeb1366d3',1,'IRTechnibelAc::getTimer()'],['../classIRTecoAc.html#a3a9a48da5f42ae26f1c2f250702744f6',1,'IRTecoAc::getTimer()'],['../classIRTrotecESP.html#a85fb0a416c58c4f05af3abae2ae5c115',1,'IRTrotecESP::getTimer()'],['../classIRVestelAc.html#afa445ac18ef2b872a10c6048b222e90c',1,'IRVestelAc::getTimer()']]], - ['gettimerenabled_4144',['getTimerEnabled',['../classIRGreeAC.html#a483ddaec91302343cef14b0c5024b965',1,'IRGreeAC::getTimerEnabled()'],['../classIRSharpAc.html#ae9147b6dd3011b223e811dff34b08e20',1,'IRSharpAc::getTimerEnabled()'],['../classIRTechnibelAc.html#a86d21954cfc55f2dbb9d3ee8adb1a5d6',1,'IRTechnibelAc::getTimerEnabled()'],['../classIRTecoAc.html#a82ab7f210c10406b2a30f41f129d4a39',1,'IRTecoAc::getTimerEnabled()']]], - ['gettimertime_4145',['getTimerTime',['../classIRSharpAc.html#a1a035d3d9da5998a342e6a644a8ac1ba',1,'IRSharpAc']]], - ['gettimertype_4146',['getTimerType',['../classIRFujitsuAC.html#a9bbc0e019e58bb990318432db75e8468',1,'IRFujitsuAC::getTimerType()'],['../classIRSharpAc.html#aeab6fe3c2c2777db4d09375868008f00',1,'IRSharpAc::getTimerType()']]], - ['gettolerance_4147',['getTolerance',['../classIRrecv.html#a144f64da3b44708394c06b0fbefb6347',1,'IRrecv']]], - ['getturbo_4148',['getTurbo',['../classIRCoolixAC.html#a31f5e82c5e68b1a0b41f4025885bf0cb',1,'IRCoolixAC::getTurbo()'],['../classIRDaikin64.html#a78016d0d11e22ad12020bf96125426d9',1,'IRDaikin64::getTurbo()'],['../classIRElectraAc.html#abfc42bc97c9dc41115383895abe15292',1,'IRElectraAc::getTurbo()'],['../classIRGoodweatherAc.html#a2f15a3c8063af85bc81f3a5f3bcacb5e',1,'IRGoodweatherAc::getTurbo()'],['../classIRGreeAC.html#a3558ad573c7762c1d0f076fd336805eb',1,'IRGreeAC::getTurbo()'],['../classIRHaierACYRW02.html#a0cd7297948d7dd8aafe35775cf26b543',1,'IRHaierACYRW02::getTurbo()'],['../classIRKelvinatorAC.html#aee37bb608940cb0214e1d0c0046c8eee',1,'IRKelvinatorAC::getTurbo()'],['../classIRMitsubishiHeavy152Ac.html#a39a5bfc53cc81ab08835e8e4c30854de',1,'IRMitsubishiHeavy152Ac::getTurbo()'],['../classIRMitsubishiHeavy88Ac.html#a4f1281e42d3eee7824233d8a4f8d37cb',1,'IRMitsubishiHeavy88Ac::getTurbo()'],['../classIRNeoclimaAc.html#a95af8bbe9500fc2f99d30214e38fae85',1,'IRNeoclimaAc::getTurbo()'],['../classIRSharpAc.html#a6b38ef7a3a8fdc4e6f8f3e02336a4e19',1,'IRSharpAc::getTurbo()'],['../classIRTcl112Ac.html#a044a8f5f05a4bbc10bac155b49d27ee5',1,'IRTcl112Ac::getTurbo()'],['../classIRToshibaAC.html#aaf9aa3601885a3d869c2e9dbcd581a93',1,'IRToshibaAC::getTurbo()'],['../classIRVestelAc.html#aa492c2fc2d3ff33cdcc53abe8ecd6ea5',1,'IRVestelAc::getTurbo()'],['../classIRVoltas.html#a0fa61b04f473f208a40059554f6a054b',1,'IRVoltas::getTurbo()']]], - ['getturbotoggle_4149',['getTurboToggle',['../classIRMideaAC.html#a33cf363d9dd94f46005a0be40bd224ff',1,'IRMideaAC']]], - ['gettype_4150',['getType',['../classIREcoclimAc.html#a3a924cc4b0cc7dc1b6eb4a8423785ddb',1,'IREcoclimAc::getType()'],['../classIRMideaAC.html#a1b1c0afbb0b9d7ba93e61df2b339cd14',1,'IRMideaAC::getType()']]], - ['getusecelsius_4151',['getUseCelsius',['../classIRMideaAC.html#a7904de4572d80c0eafe4975682b3ea29',1,'IRMideaAC']]], - ['getusefahrenheit_4152',['getUseFahrenheit',['../classIRGreeAC.html#a55b6dd1354b7246ce959d563dfdfcba4',1,'IRGreeAC']]], - ['getvane_4153',['getVane',['../classIRMitsubishiAC.html#a547a2d4fd52162ece0276978da22d456',1,'IRMitsubishiAC']]], - ['getweeklytimerenable_4154',['getWeeklyTimerEnable',['../classIRDaikinESP.html#a59a0e9726b97887b27a2f869d249b1b7',1,'IRDaikinESP']]], - ['getweeklytimerenabled_4155',['getWeeklyTimerEnabled',['../classIRMitsubishiAC.html#a6da4a89e5ce71c2283d9318c2f26e46e',1,'IRMitsubishiAC']]], - ['getwidevane_4156',['getWideVane',['../classIRMitsubishiAC.html#a6d6008f7d374113cc6b5c3a4f298a287',1,'IRMitsubishiAC']]], - ['getwifi_4157',['getWiFi',['../classIRGreeAC.html#a9e9fb9867977764cac7afdee7083d0a1',1,'IRGreeAC::getWiFi()'],['../classIRVoltas.html#a13460412829d204fe2e51e75188998d2',1,'IRVoltas::getWifi()']]], - ['getxfan_4158',['getXFan',['../classIRGreeAC.html#aa8111e44470062729b56b24268d20eed',1,'IRGreeAC::getXFan()'],['../classIRKelvinatorAC.html#a3ba6705529806f3ca083dd45f4b28377',1,'IRKelvinatorAC::getXFan()']]], - ['getzonefollow_4159',['getZoneFollow',['../classIRCoolixAC.html#acf811a44dfd28627ce352fd79e7ffec5',1,'IRCoolixAC']]], - ['goodweather_4160',['goodweather',['../classIRac.html#ac47ff5c6faf41e6fb37df258a8bafc08',1,'IRac']]], - ['gree_4161',['gree',['../classIRac.html#ab66e48b039c9990bf97cd8c2512a6c70',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.html deleted file mode 100644 index 7422be245..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.js deleted file mode 100644 index 3465b416c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_8.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['haier_4162',['haier',['../classIRac.html#ae0a29a4cb8c7a4707a7725c576822a58',1,'IRac']]], - ['haieryrwo2_4163',['haierYrwo2',['../classIRac.html#a7bc779a162dd9a1b4c925febec443353',1,'IRac']]], - ['handlespecialstate_4164',['handleSpecialState',['../classIRCoolixAC.html#af78090c6d8b45b4202a80f1223640390',1,'IRCoolixAC::handleSpecialState()'],['../classIRTranscoldAc.html#a01a3e3f8f92b8fb3b6d023e595f3ce17',1,'IRTranscoldAc::handleSpecialState()']]], - ['handletoggles_4165',['handleToggles',['../classIRac.html#a36833999dce4ad608a5a0f084988cfd1',1,'IRac']]], - ['hasacstate_4166',['hasACState',['../IRutils_8cpp.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp'],['../IRutils_8h.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp']]], - ['hasinvertedstates_4167',['hasInvertedStates',['../classIRHitachiAc3.html#ac06b36245c85480d97c1a9f49cfaa005',1,'IRHitachiAc3']]], - ['hasstatechanged_4168',['hasStateChanged',['../classIRac.html#a35258c35a2d2b19886292b22b2aa053a',1,'IRac']]], - ['hitachi_4169',['hitachi',['../classIRac.html#acd0f2fcf03aabf947a19a195000add3c',1,'IRac']]], - ['hitachi1_4170',['hitachi1',['../classIRac.html#ac8807d62f6ae87af72d44b50bed3f17b',1,'IRac']]], - ['hitachi344_4171',['hitachi344',['../classIRac.html#a0bc34635a1a349816344916a82585460',1,'IRac']]], - ['hitachi424_4172',['hitachi424',['../classIRac.html#aec6de0752ddd3a3e7c6824cb1b692508',1,'IRac']]], - ['htmlescape_4173',['htmlEscape',['../namespaceirutils.html#a6e55c6fdcc82e1ef8bd5f73df83609a7',1,'irutils']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.html deleted file mode 100644 index befd4faaa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.js deleted file mode 100644 index 543dde8b5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_9.js +++ /dev/null @@ -1,77 +0,0 @@ -var searchData= -[ - ['initstate_4174',['initState',['../classIRac.html#af1c4ae70e61298c0be8d350d67e7c342',1,'IRac::initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)'],['../classIRac.html#a165b7fdb9b3a02b1fb5ff2c2c3747958',1,'IRac::initState(stdAc::state_t *state)']]], - ['invertbits_4175',['invertBits',['../IRutils_8cpp.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp'],['../IRutils_8h.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp']]], - ['invertbytepairs_4176',['invertBytePairs',['../namespaceirutils.html#ad818a474349546c84824451a5468f4fe',1,'irutils']]], - ['irac_4177',['IRac',['../classIRac.html#abb0864e277d4f6c68a92c2729112a40d',1,'IRac']]], - ['irairwellac_4178',['IRAirwellAc',['../classIRAirwellAc.html#a38cfe20bff4522034b16d64df64750e8',1,'IRAirwellAc']]], - ['iramcorac_4179',['IRAmcorAc',['../classIRAmcorAc.html#a92db59a33c861dcd3b2960e9711f97c4',1,'IRAmcorAc']]], - ['irargoac_4180',['IRArgoAC',['../classIRArgoAC.html#ad6c2250738397441b8f956d1477b7d70',1,'IRArgoAC']]], - ['ircarrierac64_4181',['IRCarrierAc64',['../classIRCarrierAc64.html#ac225c0f24a0e385a145375ff447ab79b',1,'IRCarrierAc64']]], - ['ircoolixac_4182',['IRCoolixAC',['../classIRCoolixAC.html#a043ad3b74e964e39b111e1fcf9e55f42',1,'IRCoolixAC']]], - ['ircoronaac_4183',['IRCoronaAc',['../classIRCoronaAc.html#aa96f1ffce21cdec5b3901ebbb1c63fbb',1,'IRCoronaAc']]], - ['irdaikin128_4184',['IRDaikin128',['../classIRDaikin128.html#aa669739541daf1a2b39ce1cd0424c43b',1,'IRDaikin128']]], - ['irdaikin152_4185',['IRDaikin152',['../classIRDaikin152.html#a68dce79bab5890d9aea325a45ef8e4a3',1,'IRDaikin152']]], - ['irdaikin160_4186',['IRDaikin160',['../classIRDaikin160.html#a76fb744b041c38abb730bce0538a497a',1,'IRDaikin160']]], - ['irdaikin176_4187',['IRDaikin176',['../classIRDaikin176.html#accfe7c3f34351844d12059455f65f312',1,'IRDaikin176']]], - ['irdaikin2_4188',['IRDaikin2',['../classIRDaikin2.html#a3ffe908313f162b92e92307578592fca',1,'IRDaikin2']]], - ['irdaikin216_4189',['IRDaikin216',['../classIRDaikin216.html#ad802bde79e5ee2d16e3b09fbc8bbe8df',1,'IRDaikin216']]], - ['irdaikin64_4190',['IRDaikin64',['../classIRDaikin64.html#a88855df33ce903884b21d2ef4771e94f',1,'IRDaikin64']]], - ['irdaikinesp_4191',['IRDaikinESP',['../classIRDaikinESP.html#a2652cb45e07e8a4329c16cded9f6ad9a',1,'IRDaikinESP']]], - ['irdelonghiac_4192',['IRDelonghiAc',['../classIRDelonghiAc.html#aa6f8661cf6baa369a0a5b9d775c392e0',1,'IRDelonghiAc']]], - ['irecoclimac_4193',['IREcoclimAc',['../classIREcoclimAc.html#a72a2d765c86a780162c59041e7146f19',1,'IREcoclimAc']]], - ['irelectraac_4194',['IRElectraAc',['../classIRElectraAc.html#a2f56ad22943c3d261b1d2ef88d86e300',1,'IRElectraAc']]], - ['irfujitsuac_4195',['IRFujitsuAC',['../classIRFujitsuAC.html#acdb70f239884507f540b872ba25747ce',1,'IRFujitsuAC']]], - ['irgoodweatherac_4196',['IRGoodweatherAc',['../classIRGoodweatherAc.html#a681feff1a58125cde97b2d7ed0ba775e',1,'IRGoodweatherAc']]], - ['irgreeac_4197',['IRGreeAC',['../classIRGreeAC.html#abf7ead6ebee4bc776f83fb55f6fe6b63',1,'IRGreeAC']]], - ['irhaierac_4198',['IRHaierAC',['../classIRHaierAC.html#a0b78060cbd150cd886a409adc2dea49c',1,'IRHaierAC']]], - ['irhaieracyrw02_4199',['IRHaierACYRW02',['../classIRHaierACYRW02.html#afd9354c36df33434840bbc5f38d4e7ed',1,'IRHaierACYRW02']]], - ['irhitachiac_4200',['IRHitachiAc',['../classIRHitachiAc.html#a4c43e95e0cc28339e7162d7090ae16bf',1,'IRHitachiAc']]], - ['irhitachiac1_4201',['IRHitachiAc1',['../classIRHitachiAc1.html#ac00cfd9a60e08d34f292878de47f622f',1,'IRHitachiAc1']]], - ['irhitachiac3_4202',['IRHitachiAc3',['../classIRHitachiAc3.html#adef0e7ad217f078ce418e3aa82b9cb86',1,'IRHitachiAc3']]], - ['irhitachiac344_4203',['IRHitachiAc344',['../classIRHitachiAc344.html#afbff8a1dd2777880d2d1713d07e1d419',1,'IRHitachiAc344']]], - ['irhitachiac424_4204',['IRHitachiAc424',['../classIRHitachiAc424.html#add708c10a56d20621ef65a0ddcc2aac1',1,'IRHitachiAc424']]], - ['irkelvinatorac_4205',['IRKelvinatorAC',['../classIRKelvinatorAC.html#a111dd384b1898a4fb880a19b6d1b1635',1,'IRKelvinatorAC']]], - ['irlgac_4206',['IRLgAc',['../classIRLgAc.html#a290636496526a9ed2057532649709375',1,'IRLgAc']]], - ['irmideaac_4207',['IRMideaAC',['../classIRMideaAC.html#a1ef2f532a1e6c6bfe89617d3fd0d9082',1,'IRMideaAC']]], - ['irmitsubishi112_4208',['IRMitsubishi112',['../classIRMitsubishi112.html#adea6f3b7b7619b0bf6da4a94cec9d712',1,'IRMitsubishi112']]], - ['irmitsubishi136_4209',['IRMitsubishi136',['../classIRMitsubishi136.html#ad92926b993869d0695f11ddb999b2090',1,'IRMitsubishi136']]], - ['irmitsubishiac_4210',['IRMitsubishiAC',['../classIRMitsubishiAC.html#a83fabfd9ebed5cef8dd2a18a85fdf4e6',1,'IRMitsubishiAC']]], - ['irmitsubishiheavy152ac_4211',['IRMitsubishiHeavy152Ac',['../classIRMitsubishiHeavy152Ac.html#a704e9f96c2d0a07f9ba16a400d9c97aa',1,'IRMitsubishiHeavy152Ac']]], - ['irmitsubishiheavy88ac_4212',['IRMitsubishiHeavy88Ac',['../classIRMitsubishiHeavy88Ac.html#aceabecf4a615e807a4636ff5990d77d7',1,'IRMitsubishiHeavy88Ac']]], - ['irneoclimaac_4213',['IRNeoclimaAc',['../classIRNeoclimaAc.html#a99ed2962176e5f12f8387fab977c6395',1,'IRNeoclimaAc']]], - ['irpanasonicac_4214',['IRPanasonicAc',['../classIRPanasonicAc.html#ae8b0f4518ee1a913d47a7101b0a11185',1,'IRPanasonicAc']]], - ['irpanasonicac32_4215',['IRPanasonicAc32',['../classIRPanasonicAc32.html#ade8637984d8c1d5d881dc636d501676d',1,'IRPanasonicAc32']]], - ['irrecv_4216',['IRrecv',['../classIRrecv.html#a8fe4d26ef1f863db1db9994fed5fc209',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)'],['../classIRrecv.html#a3bb1bcc1c1a3184294dd35c8f6f758b1',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false)']]], - ['irsamsungac_4217',['IRSamsungAc',['../classIRSamsungAc.html#a0db771b80d7d7a63b5ecb4b25efee609',1,'IRSamsungAc']]], - ['irsanyoac_4218',['IRSanyoAc',['../classIRSanyoAc.html#ab7b9a1f1685993b95807f7e48624e4e2',1,'IRSanyoAc']]], - ['irsend_4219',['IRsend',['../classIRsend.html#a792780b7de996c90c86dd7b700eaf271',1,'IRsend']]], - ['irsharpac_4220',['IRSharpAc',['../classIRSharpAc.html#a30b5f8f634a41c943b4e1453d12bc980',1,'IRSharpAc']]], - ['irtcl112ac_4221',['IRTcl112Ac',['../classIRTcl112Ac.html#a061bdfdf4444cb5e06fa90824985c1ec',1,'IRTcl112Ac']]], - ['irtechnibelac_4222',['IRTechnibelAc',['../classIRTechnibelAc.html#a799407de348870d5765acf163ab92a75',1,'IRTechnibelAc']]], - ['irtecoac_4223',['IRTecoAc',['../classIRTecoAc.html#a56e3f31a080bfd565570bf3b165e71d4',1,'IRTecoAc']]], - ['irtimer_4224',['IRtimer',['../classIRtimer.html#a09d64d689137ef8ca68973bb9e550e76',1,'IRtimer']]], - ['irtoshibaac_4225',['IRToshibaAC',['../classIRToshibaAC.html#abf2b3db316f7d6acb20c4f7ea2476ec2',1,'IRToshibaAC']]], - ['irtranscoldac_4226',['IRTranscoldAc',['../classIRTranscoldAc.html#a155278b9e5803aacf69a1ae20ed5b652',1,'IRTranscoldAc']]], - ['irtrotecesp_4227',['IRTrotecESP',['../classIRTrotecESP.html#a1b56b6e55bf133ccab6a482090408ee5',1,'IRTrotecESP']]], - ['irtrumaac_4228',['IRTrumaAc',['../classIRTrumaAc.html#a02171342bc69c38b9d13930bfd5c44ff',1,'IRTrumaAc']]], - ['irvestelac_4229',['IRVestelAc',['../classIRVestelAc.html#af1583ef81331edf112a0d04771c2cbec',1,'IRVestelAc']]], - ['irvoltas_4230',['IRVoltas',['../classIRVoltas.html#a4bfb0c5b16507d330abea2a9147f8332',1,'IRVoltas']]], - ['irwhirlpoolac_4231',['IRWhirlpoolAc',['../classIRWhirlpoolAc.html#a89bc9d440a5f7d04a602d7bc73904bc2',1,'IRWhirlpoolAc']]], - ['iseconotoggle_4232',['isEconoToggle',['../classIRMideaAC.html#a227aeed678af6da49b510cb67b02991e',1,'IRMideaAC']]], - ['islighttoggle_4233',['isLightToggle',['../classIRMideaAC.html#ac0f321a8a38bd2cecf453c6aff9020e6',1,'IRMideaAC']]], - ['isofftimeractive_4234',['isOffTimerActive',['../classIRVestelAc.html#ae000ce54cedc707ba8e3dc025b506b54',1,'IRVestelAc']]], - ['isofftimerenabled_4235',['isOffTimerEnabled',['../classIREcoclimAc.html#aa819b7f8deff0823a6e6b59d2decace1',1,'IREcoclimAc::isOffTimerEnabled()'],['../classIRMideaAC.html#a10aa3386a15b46c62083baaca3bcf699',1,'IRMideaAC::isOffTimerEnabled()'],['../classIRPanasonicAc.html#ac8e218b4886d66889734b01232767c8a',1,'IRPanasonicAc::isOffTimerEnabled()'],['../classIRWhirlpoolAc.html#a00ee5757db34855f39d225a9467f2268',1,'IRWhirlpoolAc::isOffTimerEnabled()']]], - ['isontimeractive_4236',['isOnTimerActive',['../classIRVestelAc.html#ad9d0a8755026644b8198398278f2457b',1,'IRVestelAc']]], - ['isontimerenabled_4237',['isOnTimerEnabled',['../classIREcoclimAc.html#acfa7fbedf65508a7e0cea30f8d87edfd',1,'IREcoclimAc::isOnTimerEnabled()'],['../classIRMideaAC.html#a61f53e462caa1bc8329a6ebadbe47f93',1,'IRMideaAC::isOnTimerEnabled()'],['../classIRPanasonicAc.html#a04cbf8f5063a3892020d383c77abc57c',1,'IRPanasonicAc::isOnTimerEnabled()'],['../classIRWhirlpoolAc.html#a5cf82e21ff75cc6edb39a42b369240a0',1,'IRWhirlpoolAc::isOnTimerEnabled()']]], - ['ispowerspecial_4238',['isPowerSpecial',['../classIRSharpAc.html#ae18f76e03fd9ee8cb5bb8e9b41718e9d',1,'IRSharpAc']]], - ['isprotocolsupported_4239',['isProtocolSupported',['../classIRac.html#ad9c2fc9d07db70704f78a2d5f7be5b1c',1,'IRac']]], - ['isrepeat_4240',['isRepeat',['../namespaceIRXmpUtils.html#a25e2d3af57d86fecf7b01b6a0639d0cc',1,'IRXmpUtils']]], - ['isspecialstate_4241',['isSpecialState',['../classIRCoolixAC.html#aa9bfc6c78fca87962c9335d60f625322',1,'IRCoolixAC::isSpecialState()'],['../classIRTranscoldAc.html#aacef65f9dc6c1315db1e1af7a09a5dc6',1,'IRTranscoldAc::isSpecialState()']]], - ['isswingvstep_4242',['isSwingVStep',['../classIRMideaAC.html#a360aa29e0f6817709644f6b36abce754',1,'IRMideaAC']]], - ['isswingvtoggle_4243',['isSwingVToggle',['../classIRMideaAC.html#a5277fa1d077650be0edcf284db50d38b',1,'IRMideaAC']]], - ['istimecommand_4244',['isTimeCommand',['../classIRVestelAc.html#a6dd52adaef191c8e735e2d13bc489a9f',1,'IRVestelAc']]], - ['istimeractive_4245',['isTimerActive',['../classIRVestelAc.html#a06a63f80a7cdadac86ffbd4f5795b14b',1,'IRVestelAc']]], - ['isturbotoggle_4246',['isTurboToggle',['../classIRMideaAC.html#ae40e95fbee35ecc00ebff23c0b64e56d',1,'IRMideaAC']]], - ['isvalidlgac_4247',['isValidLgAc',['../classIRLgAc.html#ad35d47f590ee4bd51bfdf9d911bce242',1,'IRLgAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.html deleted file mode 100644 index a81e96336..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.js deleted file mode 100644 index 5719752c3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['kelvinator_4248',['kelvinator',['../classIRac.html#a6e4d8061841a7271205f81bd8e7d6171',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.html deleted file mode 100644 index 345265d62..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.js deleted file mode 100644 index 3937c3f65..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ledoff_4249',['ledOff',['../classIRsend.html#ae71cc5aa99f894785fb4f7abc05841b2',1,'IRsend']]], - ['ledon_4250',['ledOn',['../classIRsend.html#a13d804171fa7c14aff4def38c6ffb6c8',1,'IRsend']]], - ['lg_4251',['lg',['../classIRac.html#afad31ecf9eae573882d53dd6629485fb',1,'IRac']]], - ['lowlevelsanitycheck_4252',['lowLevelSanityCheck',['../namespaceirutils.html#af67b75834051c4aced358b274c1c55a8',1,'irutils']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.html deleted file mode 100644 index 858bfd6c9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.js deleted file mode 100644 index cfd55248a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_c.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['mark_4253',['mark',['../classIRsend.html#a7399389d40bfe24bc062ffca88fc3780',1,'IRsend']]], - ['markassent_4254',['markAsSent',['../classIRac.html#ad0e45b13f477e29823b8c138704536c4',1,'IRac']]], - ['match_4255',['match',['../classIRrecv.html#a8bc218dae714ab189a3da4fff269cdaa',1,'IRrecv']]], - ['matchatleast_4256',['matchAtLeast',['../classIRrecv.html#ae7bfd4ff689c7563c65c4e6e8c58187a',1,'IRrecv']]], - ['matchbytes_4257',['matchBytes',['../classIRrecv.html#a97534938349b52b46395be1d3e2f59fa',1,'IRrecv']]], - ['matchdata_4258',['matchData',['../classIRrecv.html#a1d8b50fcac074e71e9a92a62f62f0be7',1,'IRrecv']]], - ['matchgeneric_4259',['matchGeneric',['../classIRrecv.html#ab783f52acc2ff4052313d6947563e4fd',1,'IRrecv::matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)'],['../classIRrecv.html#a4448c1658383962d735353352987c9aa',1,'IRrecv::matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)']]], - ['matchgenericconstbittime_4260',['matchGenericConstBitTime',['../classIRrecv.html#a4582d75ef1d11aee35fce86c38dcccf0',1,'IRrecv']]], - ['matchmanchester_4261',['matchManchester',['../classIRrecv.html#ade70777ad0e047e11b99b03d8f5e3728',1,'IRrecv']]], - ['matchmanchesterdata_4262',['matchManchesterData',['../classIRrecv.html#ab44403411a217eb8ea75271575f8ab83',1,'IRrecv']]], - ['matchmark_4263',['matchMark',['../classIRrecv.html#ae78ef12b8194db5d3cb5a2605d29830d',1,'IRrecv']]], - ['matchmarkrange_4264',['matchMarkRange',['../classIRrecv.html#adf11286f0ef5e8984396b5f6331db87e',1,'IRrecv']]], - ['matchspace_4265',['matchSpace',['../classIRrecv.html#a9fd363e8b2edee2ed3c473349ecc58fc',1,'IRrecv']]], - ['matchspacerange_4266',['matchSpaceRange',['../classIRrecv.html#a2200a9c1064497838506eb278791bb03',1,'IRrecv']]], - ['midea_4267',['midea',['../classIRac.html#a11765b1d08c0c02f5e08254bd870dae6',1,'IRac']]], - ['minrepeats_4268',['minRepeats',['../classIRsend.html#ae02772f34180163861b7e4eb3520db2a',1,'IRsend']]], - ['minstostring_4269',['minsToString',['../namespaceirutils.html#aebab40a2c69624adc1a5a8a6db72952f',1,'irutils']]], - ['mitsubishi_4270',['mitsubishi',['../classIRac.html#aaa60bcac75dc5dda40c78f8c227b19a3',1,'IRac']]], - ['mitsubishi112_4271',['mitsubishi112',['../classIRac.html#a2438b6e4403d5952adb299083e038e10',1,'IRac']]], - ['mitsubishi136_4272',['mitsubishi136',['../classIRac.html#aa3033eb835cf3cd313ee2c2f38357e8e',1,'IRac']]], - ['mitsubishiheavy152_4273',['mitsubishiHeavy152',['../classIRac.html#a635b89320d878c1e3f270d7146cb9b00',1,'IRac']]], - ['mitsubishiheavy88_4274',['mitsubishiHeavy88',['../classIRac.html#af6c9084c5e902f98a03ad0eaf3b9448e',1,'IRac']]], - ['modeltostr_4275',['modelToStr',['../namespaceirutils.html#ae89b70ce66617a8707c1951eadbc6fbd',1,'irutils']]], - ['mstostring_4276',['msToString',['../namespaceirutils.html#a9c59c8dd886c283fdb8adc9082c6890a',1,'irutils']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.html deleted file mode 100644 index 2f09f51ba..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.js deleted file mode 100644 index ef7d38ba0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['neoclima_4277',['neoclima',['../classIRac.html#a777da4b0552ee3b64d656c4592687f47',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.html deleted file mode 100644 index ee5afa650..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.js deleted file mode 100644 index 2a32a4945..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_e.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['off_4278',['off',['../classIRAmcorAc.html#a184fbd76463e195beb67b4a8d2096941',1,'IRAmcorAc::off()'],['../classIRArgoAC.html#ab5ab7cc22bbce59bb02ca60431dca3fb',1,'IRArgoAC::off()'],['../classIRCarrierAc64.html#af11d8ea5ac93cbf2d9fe1419729168a5',1,'IRCarrierAc64::off()'],['../classIRCoolixAC.html#a7d6133fe102a5869beb9a5334ca749aa',1,'IRCoolixAC::off()'],['../classIRCoronaAc.html#a6f1335001f9e299340f658fbb777b630',1,'IRCoronaAc::off()'],['../classIRDaikinESP.html#a5d1d22f45d877660719916ca546bd3af',1,'IRDaikinESP::off()'],['../classIRDaikin2.html#ae9eee92387d78dad68fc98efc9371ea0',1,'IRDaikin2::off()'],['../classIRDaikin216.html#a086d8cea2d6dd0f74c5cbece79d91567',1,'IRDaikin216::off()'],['../classIRDaikin160.html#a95f8c71bbf861d3c884656364e04b02a',1,'IRDaikin160::off()'],['../classIRDaikin176.html#a4ad81df1fe4921abee3634bf19b0d0f7',1,'IRDaikin176::off()'],['../classIRDaikin152.html#a035588ad676a54d2b6ada8cefe10e114',1,'IRDaikin152::off()'],['../classIRDelonghiAc.html#ab584add0eb59acf3b209e7c252605304',1,'IRDelonghiAc::off()'],['../classIREcoclimAc.html#a9a0e2ee4ff9cbc6008cb359f2c3faf23',1,'IREcoclimAc::off()'],['../classIRElectraAc.html#afe3a9b789eafbef19d015cdebf71dc0d',1,'IRElectraAc::off()'],['../classIRFujitsuAC.html#ae7a320c2d2b8afbd9a04251053831cdd',1,'IRFujitsuAC::off()'],['../classIRGoodweatherAc.html#ad6863d837140951fcc0faf629025d48e',1,'IRGoodweatherAc::off()'],['../classIRGreeAC.html#a4cce897175ed731ab62402133089ed4f',1,'IRGreeAC::off()'],['../classIRHaierACYRW02.html#a9837ba26574f8bd452d616173819a9a4',1,'IRHaierACYRW02::off()'],['../classIRHitachiAc.html#a62be5ca181c8c9d11b65b38b1ed178b5',1,'IRHitachiAc::off()'],['../classIRHitachiAc1.html#a646b554980706d0dd2ac762be8458cdb',1,'IRHitachiAc1::off()'],['../classIRHitachiAc424.html#a0815a09fc49449bac03d996c63040a5f',1,'IRHitachiAc424::off()'],['../classIRKelvinatorAC.html#a4a759df902d1465c9520da7c7c595abc',1,'IRKelvinatorAC::off()'],['../classIRLgAc.html#a6d3d50b34575fecb93ed8bd5897c3f7c',1,'IRLgAc::off()'],['../classIRMideaAC.html#a29fbafcf47dc41475d009c4c92b2917b',1,'IRMideaAC::off()'],['../classIRMitsubishiAC.html#ac204620341200994c28411f53d5aa046',1,'IRMitsubishiAC::off()'],['../classIRMitsubishi136.html#a4122014509e9e755881920650f19baf3',1,'IRMitsubishi136::off()'],['../classIRMitsubishi112.html#ab5b6370edf2626da2e9f124a218678a8',1,'IRMitsubishi112::off()'],['../classIRMitsubishiHeavy152Ac.html#a93b603cc37d2dc7e3e7005ce21a0b2d7',1,'IRMitsubishiHeavy152Ac::off()'],['../classIRMitsubishiHeavy88Ac.html#a45c56c0454755d704a3df1f1f3647130',1,'IRMitsubishiHeavy88Ac::off()'],['../classIRNeoclimaAc.html#a9a277308bf8d8b0cd06a28964e7cbafb',1,'IRNeoclimaAc::off()'],['../classIRPanasonicAc.html#a03b706293c1c5b348bba536e6d8d33f5',1,'IRPanasonicAc::off()'],['../classIRSamsungAc.html#a34cb19bb4902441a2b9f10892eb17d83',1,'IRSamsungAc::off()'],['../classIRSanyoAc.html#a31f4c1d33875a99194b21f430c5467ef',1,'IRSanyoAc::off()'],['../classIRSharpAc.html#a178925a1d7ca01aae5c107fab5b32e93',1,'IRSharpAc::off()'],['../classIRTcl112Ac.html#ab2e39430629fcada55a584cff66d2749',1,'IRTcl112Ac::off()'],['../classIRTechnibelAc.html#a01f40042435f9472985853e40c1f9593',1,'IRTechnibelAc::off()'],['../classIRTecoAc.html#ade1b1541bf2de053c78657af1ebcd001',1,'IRTecoAc::off()'],['../classIRToshibaAC.html#a70b145f7b9c46790e4e5da812bb66e58',1,'IRToshibaAC::off()'],['../classIRTranscoldAc.html#a54ecdef5ff2c9a1ce8c476ff2ad16801',1,'IRTranscoldAc::off()'],['../classIRTrotecESP.html#a8f300ddaf255de1cdfee10b76b1f08e0',1,'IRTrotecESP::off()'],['../classIRTrumaAc.html#a82ef2f54b87332f6d2f1e3350544a3ec',1,'IRTrumaAc::off()'],['../classIRVestelAc.html#a59e90e51e3518ef26bb382903ce67357',1,'IRVestelAc::off()'],['../classIRVoltas.html#a472dd54afd93b595c8c5b78f6ba43008',1,'IRVoltas::off()']]], - ['on_4279',['on',['../classIRAmcorAc.html#a96a1d9858dcdc34a9859311e450e722e',1,'IRAmcorAc::on()'],['../classIRArgoAC.html#a70497752f7afd8e3274cf4d8b1e22628',1,'IRArgoAC::on()'],['../classIRCarrierAc64.html#a75ed9bf7501a31b74dcd42723e85b184',1,'IRCarrierAc64::on()'],['../classIRCoolixAC.html#a13f0346bf6450f3853c6dba6be8cb63a',1,'IRCoolixAC::on()'],['../classIRCoronaAc.html#a0348b6ee1226edfda1ab9aa424febb3c',1,'IRCoronaAc::on()'],['../classIRDaikinESP.html#a502e9dea10605d52e291d49af26b07eb',1,'IRDaikinESP::on()'],['../classIRDaikin2.html#aa3bdd3aa29a4db32f04411cbab27e570',1,'IRDaikin2::on()'],['../classIRDaikin216.html#a09f54bb4ed1d553b4bbf6ffe6992a755',1,'IRDaikin216::on()'],['../classIRDaikin160.html#a2b6c282ad5cb2a702857532ab020110b',1,'IRDaikin160::on()'],['../classIRDaikin176.html#a3ca59ccdad4b7958fc4dc1a4b0593f38',1,'IRDaikin176::on()'],['../classIRDaikin152.html#a10ee74aa43e3940d657ac88cb03b9138',1,'IRDaikin152::on()'],['../classIRDelonghiAc.html#ab919817947827f900e35080f63354ac3',1,'IRDelonghiAc::on()'],['../classIREcoclimAc.html#a32c37e30242f049190ab086d3beb8651',1,'IREcoclimAc::on()'],['../classIRElectraAc.html#a99e29f982435b01c726d0234a433cfa6',1,'IRElectraAc::on()'],['../classIRFujitsuAC.html#adcb24818d088c879beb7d76ada332f43',1,'IRFujitsuAC::on()'],['../classIRGoodweatherAc.html#a1e3c2a9f47376062ab66318d6af4324b',1,'IRGoodweatherAc::on()'],['../classIRGreeAC.html#a69e399e411a19e5669e752d52ae66f15',1,'IRGreeAC::on()'],['../classIRHaierACYRW02.html#aaeb257d68235278be272e521fdec7331',1,'IRHaierACYRW02::on()'],['../classIRHitachiAc.html#a855e95d55d4ebfb3958b9d80a7b42c6f',1,'IRHitachiAc::on()'],['../classIRHitachiAc1.html#aea4fe1fddb56c8df31077b301e9c6473',1,'IRHitachiAc1::on()'],['../classIRHitachiAc424.html#ad414bca642af40ed81a6cbf93a0bf40b',1,'IRHitachiAc424::on()'],['../classIRKelvinatorAC.html#a714d0e70f2996694e2c46afdd9996341',1,'IRKelvinatorAC::on()'],['../classIRLgAc.html#a171358340c1ba8f90fef0c5454f2aa41',1,'IRLgAc::on()'],['../classIRMideaAC.html#af8dde03cb641a5af4f2ef0dcf70f1ca0',1,'IRMideaAC::on()'],['../classIRMitsubishiAC.html#a2946d1b3b641d7b991c0d296d5c5e77e',1,'IRMitsubishiAC::on()'],['../classIRMitsubishi136.html#a74180e99a5f4f1f4b740b442a1b74a06',1,'IRMitsubishi136::on()'],['../classIRMitsubishi112.html#accd250f130b4d0cd61593982b84b9138',1,'IRMitsubishi112::on()'],['../classIRMitsubishiHeavy152Ac.html#a5c7aec50b53fdc3af591e077a4a268e4',1,'IRMitsubishiHeavy152Ac::on()'],['../classIRMitsubishiHeavy88Ac.html#a44ce2c4f03b8b8973922f5bf59a19d2c',1,'IRMitsubishiHeavy88Ac::on()'],['../classIRNeoclimaAc.html#ab4a23cefef02351883dc4088dec51071',1,'IRNeoclimaAc::on()'],['../classIRPanasonicAc.html#a88e6b0f607b17266567306576e623a0c',1,'IRPanasonicAc::on()'],['../classIRSamsungAc.html#a68cf52997489a1c835662c7cdf23463c',1,'IRSamsungAc::on()'],['../classIRSanyoAc.html#abe8f1be3ea8f861ab56ee4697cb9e731',1,'IRSanyoAc::on()'],['../classIRSharpAc.html#a5c8dad46c2965fc0d87780a8bd8b98f4',1,'IRSharpAc::on()'],['../classIRTcl112Ac.html#a0bbf7f0b9753b516fda0544c17b15b8a',1,'IRTcl112Ac::on()'],['../classIRTechnibelAc.html#a65558a08fbce34eedeb90d81e16140b1',1,'IRTechnibelAc::on()'],['../classIRTecoAc.html#af26015e5c663c346cf7db6d8af3f8c60',1,'IRTecoAc::on()'],['../classIRToshibaAC.html#abdc35338e4a18132d56bf6b46ddea590',1,'IRToshibaAC::on()'],['../classIRTranscoldAc.html#a4af8e44cb2d9c1751cd0dac3e096c06a',1,'IRTranscoldAc::on()'],['../classIRTrotecESP.html#a86c050edab8409a9b38d28f311f19404',1,'IRTrotecESP::on()'],['../classIRTrumaAc.html#a3c6f23621e34049df6ff135a4552f93a',1,'IRTrumaAc::on()'],['../classIRVestelAc.html#a4ed05fb5cbdfa5677ca238616bf03922',1,'IRVestelAc::on()'],['../classIRVoltas.html#a8c25557906af38ae41c47e39e90650a9',1,'IRVoltas::on()']]], - ['opmodetostring_4280',['opmodeToString',['../classIRac.html#a6dd1b87f2477bc3721d207b1fed482b8',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.html deleted file mode 100644 index f17c412c9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.js deleted file mode 100644 index 251c84ee9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/functions_f.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['panasonic_4281',['panasonic',['../classIRac.html#af873db2b9735127eb6f079861daed67a',1,'IRac']]], - ['panasonic32_4282',['panasonic32',['../classIRac.html#a66ed34d5686ad25a1659862f3b683f68',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/mag_sel.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/mag_sel.png deleted file mode 100644 index 39c0ed52a..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/mag_sel.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.html deleted file mode 100644 index 76996d1c2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.js deleted file mode 100644 index 4214904a0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5firrecv_3697',['_IRrecv',['../namespace__IRrecv.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.html deleted file mode 100644 index c69e3662f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.js deleted file mode 100644 index 0b986be37..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_1.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['iracutils_3698',['IRAcUtils',['../namespaceIRAcUtils.html',1,'']]], - ['irutils_3699',['irutils',['../namespaceirutils.html',1,'']]], - ['irxmputils_3700',['IRXmpUtils',['../namespaceIRXmpUtils.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.html deleted file mode 100644 index aa978214c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.js deleted file mode 100644 index 1f6532c3d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/namespaces_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['stdac_3701',['stdAc',['../namespacestdAc.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/nomatches.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/nomatches.html deleted file mode 100644 index 437732089..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.html deleted file mode 100644 index 9a6a29ad3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.js deleted file mode 100644 index 7b54fa703..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['deprecated_20list_7262',['Deprecated List',['../deprecated.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.html deleted file mode 100644 index 132ee038e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.js deleted file mode 100644 index 659da4214..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['irremoteesp8266_20library_20api_20documentation_7263',['IRremoteESP8266 Library API Documentation',['../index.html',1,'']]], - ['internationalisation_20_28i18n_29_20_26_20locale_20files_7264',['Internationalisation (I18N) & Locale Files',['../md_src_locale_README.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.html deleted file mode 100644 index 6109d4704..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.js deleted file mode 100644 index 4e8920db4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/pages_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['todo_20list_7265',['Todo List',['../todo.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.html deleted file mode 100644 index bbe15faaa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.js deleted file mode 100644 index 77ee0cfab..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/related_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['irhitachiac344_7261',['IRHitachiAc344',['../classIRHitachiAc424.html#a3c885313a79bf8c02bc5eb9f7d80088b',1,'IRHitachiAc424']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.css b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.css deleted file mode 100644 index 3cf9df94a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.js deleted file mode 100644 index a554ab9cb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/search.js +++ /dev/null @@ -1,814 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_0.js deleted file mode 100644 index 88c14a2ef..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hw_5ftimer_5ft_7094',['hw_timer_t',['../IRrecv_8cpp.html#a6d06e662914b9ad7eeaea3cb650292c0',1,'IRrecv.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.html deleted file mode 100644 index 9b8bf72f6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.js deleted file mode 100644 index b2db789b0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/typedefs_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['string_7095',['String',['../IRremoteESP8266_8h.html#afbeda3fd1bdc8c37d01bdf9f5c8274ff',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.html deleted file mode 100644 index bf3eba5cc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.js deleted file mode 100644 index 119bf3720..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_0.js +++ /dev/null @@ -1,67 +0,0 @@ -var searchData= -[ - ['_5f_4568',['_',['../classIRAirwellAc.html#af5675d200cdc571911162ecf8c74fdc0',1,'IRAirwellAc::_()'],['../classIRAmcorAc.html#a57bd1149a63a8c2373eeced414ed0a80',1,'IRAmcorAc::_()'],['../classIRArgoAC.html#a748a4828682df0f98226754123fe2142',1,'IRArgoAC::_()'],['../classIRCarrierAc64.html#a79ddb0fb877232a581d0142949a7c356',1,'IRCarrierAc64::_()'],['../classIRCoolixAC.html#a35c7cd549fcd37c60199b53d67fb9dd2',1,'IRCoolixAC::_()'],['../classIRCoronaAc.html#aa6e07135d66fda5c609c0d6a317bb0de',1,'IRCoronaAc::_()'],['../classIRDaikinESP.html#abbdecc7d713255021360094f720b03d4',1,'IRDaikinESP::_()'],['../classIRDaikin2.html#a656fd69f0163ba8685e537d122355f13',1,'IRDaikin2::_()'],['../classIRDaikin216.html#a41e9c282f84a853782dae90736d29b4b',1,'IRDaikin216::_()'],['../classIRDaikin160.html#a391d29ba41097a521b25af3b24554191',1,'IRDaikin160::_()'],['../classIRDaikin176.html#a82ad91178ed497d7087c758cd92635c5',1,'IRDaikin176::_()'],['../classIRDaikin128.html#aa5f2c8742a4127d76c28c96b02700af1',1,'IRDaikin128::_()'],['../classIRDaikin152.html#ad21ebef489e09af9ace1aea71c9a3606',1,'IRDaikin152::_()'],['../classIRDaikin64.html#a21b23d9ffbb8df86160affa249c86e40',1,'IRDaikin64::_()'],['../classIRDelonghiAc.html#a85f522b680c0fb5974d741c8f399e691',1,'IRDelonghiAc::_()'],['../classIREcoclimAc.html#a8bb20ae92cb32b3a083f43eea7be5f9a',1,'IREcoclimAc::_()'],['../classIRElectraAc.html#a4e6db6134d2e8915c4f2ad2e7e41ca83',1,'IRElectraAc::_()'],['../classIRFujitsuAC.html#ac26150793cfe7cc627e9721031f870e1',1,'IRFujitsuAC::_()'],['../classIRGoodweatherAc.html#a357e8f133b16a086c3100eb1e7b35279',1,'IRGoodweatherAc::_()'],['../classIRGreeAC.html#a9c048fe707312bdfd30c29fe8d6ab4b5',1,'IRGreeAC::_()'],['../classIRHaierAC.html#a523b6e63f16c5f817d82bcdbf351d7e7',1,'IRHaierAC::_()'],['../classIRHaierACYRW02.html#aaa31ae12544758f57f0dcd11b20fe285',1,'IRHaierACYRW02::_()'],['../classIRHitachiAc.html#a437587da1c6f0946dfbf9a0666123f4d',1,'IRHitachiAc::_()'],['../classIRHitachiAc1.html#ac2195f94ff673d24ac9f33b9463d5680',1,'IRHitachiAc1::_()'],['../classIRHitachiAc424.html#aa3e49f9ccda3b94099a11b4fba87fb3e',1,'IRHitachiAc424::_()'],['../classIRKelvinatorAC.html#ada1ada9d4441938af9f98e03b11f2b65',1,'IRKelvinatorAC::_()'],['../classIRLgAc.html#a2d337e8d615c8e526d5620206f7b45cf',1,'IRLgAc::_()'],['../classIRMideaAC.html#a43e44a594e00ed14c9b6aca4a862ea9e',1,'IRMideaAC::_()'],['../classIRMitsubishiAC.html#a418d0c771b50d014a1027cffcf53ca27',1,'IRMitsubishiAC::_()'],['../classIRMitsubishi136.html#ac38f8620a8cb3ada2f6a2e5c300b9a60',1,'IRMitsubishi136::_()'],['../classIRMitsubishi112.html#a5e4c08c77bfc74b1c0f8b407f020aa2e',1,'IRMitsubishi112::_()'],['../classIRMitsubishiHeavy152Ac.html#aba9d9871ddd93dc2f1e32fc773fadb86',1,'IRMitsubishiHeavy152Ac::_()'],['../classIRMitsubishiHeavy88Ac.html#a01ba20c205e3650a31ba605e291c0d65',1,'IRMitsubishiHeavy88Ac::_()'],['../classIRNeoclimaAc.html#a46453121ea930c6b356dd752fdaaec51',1,'IRNeoclimaAc::_()'],['../classIRPanasonicAc32.html#a9d6fab2a42e831ab00ab5364ad8d3de4',1,'IRPanasonicAc32::_()'],['../classIRSamsungAc.html#a7ac33928a62f2f4e487509490ed64814',1,'IRSamsungAc::_()'],['../classIRSanyoAc.html#ad849828b1fa034d851cdadfee43108aa',1,'IRSanyoAc::_()'],['../classIRSharpAc.html#a4687771aefa4879b4c9f331976ceb4bc',1,'IRSharpAc::_()'],['../classIRTcl112Ac.html#a905e47d5236b5dbbcc0aeadfc3fc9339',1,'IRTcl112Ac::_()'],['../classIRTechnibelAc.html#ae5bd8b758ef88ce473b38f93db207b13',1,'IRTechnibelAc::_()'],['../classIRTecoAc.html#a1d46a7c59ae9a0d87e092231de2d2510',1,'IRTecoAc::_()'],['../classIRToshibaAC.html#ae8a3a6ff11a38c11cdddb79af98c796f',1,'IRToshibaAC::_()'],['../classIRTranscoldAc.html#a50d0d2c8a2f25855ca721ef3f477284b',1,'IRTranscoldAc::_()'],['../classIRTrotecESP.html#a989eeedd017943dec0a3337f4e0bf23a',1,'IRTrotecESP::_()'],['../classIRTrumaAc.html#ac756f5efa2a62a36495def7b4ca755c7',1,'IRTrumaAc::_()'],['../classIRVestelAc.html#a1445480ae91942e752beb2facc9b151b',1,'IRVestelAc::_()'],['../classIRVoltas.html#a251065338907253521a12e5e0f8aeb26',1,'IRVoltas::_()'],['../classIRWhirlpoolAc.html#a62d86151ac9fae122927f588953c9712',1,'IRWhirlpoolAc::_()']]], - ['_5f_5fpad0_5f_5f_4569',['__pad0__',['../unionAirwellProtocol.html#ac8190704f390caf41b76dc0ee3377056',1,'AirwellProtocol::__pad0__()'],['../unionAmcorProtocol.html#a8678a5bf4a4d917d8b02d854114b2cc0',1,'AmcorProtocol::__pad0__()'],['../unionArgoProtocol.html#a2b15de65bd2368c53c07850b32c240f1',1,'ArgoProtocol::__pad0__()'],['../unionCarrierProtocol.html#a8187ddda3722f75d7260b9a20147b2d3',1,'CarrierProtocol::__pad0__()'],['../unionCoolixProtocol.html#aed69535018e1a145ecadf868b9285cce',1,'CoolixProtocol::__pad0__()'],['../unionCoronaProtocol.html#a06ac994ce787d3f1c65529e99d87d146',1,'CoronaProtocol::__pad0__()'],['../unionDaikinESPProtocol.html#a4b6340f47c0b18f3ca03527c075370a8',1,'DaikinESPProtocol::__pad0__()'],['../unionDaikin2Protocol.html#a862b1116a11ccc47c197da1c45bcf939',1,'Daikin2Protocol::__pad0__()'],['../unionDaikin216Protocol.html#a34e330a1e718719a36fbcf1630d3a329',1,'Daikin216Protocol::__pad0__()'],['../unionDaikin160Protocol.html#a004c3ba468c671d18e6777b97caa5118',1,'Daikin160Protocol::__pad0__()'],['../unionDaikin176Protocol.html#a8c63d7ff706301c55b9b82669b93504b',1,'Daikin176Protocol::__pad0__()'],['../unionDaikin128Protocol.html#a95b62a4448251a23cb7b8448da6db90a',1,'Daikin128Protocol::__pad0__()'],['../unionDaikin152Protocol.html#ae12253e3f2a43142a7a9e508a49ac97b',1,'Daikin152Protocol::__pad0__()'],['../unionDaikin64Protocol.html#a4311ec81ff9b3b13466b2fe3da4fb9be',1,'Daikin64Protocol::__pad0__()'],['../unionDelonghiProtocol.html#add514a227f6b9dcbaa41eaa5c81d6be2',1,'DelonghiProtocol::__pad0__()'],['../unionEcoclimProtocol.html#af8ab3b4b36c8d226267bd9d408a247b5',1,'EcoclimProtocol::__pad0__()'],['../unionElectraProtocol.html#a607d7c92e7a627b9afccf9022f379184',1,'ElectraProtocol::__pad0__()'],['../unionFujitsuProtocol.html#ae09a6236e9c28edcec7192b2f2527d94',1,'FujitsuProtocol::__pad0__()'],['../unionGoodweatherProtocol.html#a58bfae03b0e7faeb4a5eb2baa7027499',1,'GoodweatherProtocol::__pad0__()'],['../unionGreeProtocol.html#a06baff7b648875f337ea4d099f8ba73d',1,'GreeProtocol::__pad0__()'],['../unionHaierProtocol.html#a2648f0ff2bc5a6481e9fd2017408a590',1,'HaierProtocol::__pad0__()'],['../unionHaierYRW02Protocol.html#a48fb1f12d6902568da902b5de7e1bfef',1,'HaierYRW02Protocol::__pad0__()'],['../unionHitachiProtocol.html#a59198deea3c754055b8db3c53597b28a',1,'HitachiProtocol::__pad0__()'],['../unionHitachi424Protocol.html#a8bbd10b57407543a47af052d3ad7d45d',1,'Hitachi424Protocol::__pad0__()'],['../unionHitachi1Protocol.html#aef99c45f1361f6f3af5384e388e769f0',1,'Hitachi1Protocol::__pad0__()'],['../unionKelvinatorProtocol.html#a1c5a62ea69b305fe7c842ed06201544e',1,'KelvinatorProtocol::__pad0__()'],['../unionLGProtocol.html#a56f4b64eddafae10e174097f17129672',1,'LGProtocol::__pad0__()'],['../unionMideaProtocol.html#ab48c834ee5a37297d04e71e6e32468d2',1,'MideaProtocol::__pad0__()'],['../unionMitsubishi144Protocol.html#a54a33f76ce69f4ffb355bbd80b40333e',1,'Mitsubishi144Protocol::__pad0__()'],['../unionMitsubishi136Protocol.html#ac7c07e05f6b9ab112db05bfc0e50b8fe',1,'Mitsubishi136Protocol::__pad0__()'],['../unionMitsubishi112Protocol.html#a10e85997ccda345c41d243d621f5c6c5',1,'Mitsubishi112Protocol::__pad0__()'],['../unionMitsubishi152Protocol.html#afe483629cb0b355cc9dc24720a3dbfc1',1,'Mitsubishi152Protocol::__pad0__()'],['../unionMitsubishi88Protocol.html#ad271ae6069331e7de5173eda076391bf',1,'Mitsubishi88Protocol::__pad0__()'],['../unionNeoclimaProtocol.html#ab7283cca22005d0a4a16349a10443c75',1,'NeoclimaProtocol::__pad0__()'],['../unionPanasonicAc32Protocol.html#aa1aac1cdb8d947e7ecea4a487e2a184f',1,'PanasonicAc32Protocol::__pad0__()'],['../unionSamsungProtocol.html#a5828729c8465645c7953f33f7a759b66',1,'SamsungProtocol::__pad0__()'],['../unionSanyoProtocol.html#ab545036dab31de4c9fed22c3b69a8956',1,'SanyoProtocol::__pad0__()'],['../unionSharpProtocol.html#a1849030fb0a1228c149773fc59cd5a3a',1,'SharpProtocol::__pad0__()'],['../unionTcl112Protocol.html#ac6a87b38987b8acf6a4f2e8c56915e9b',1,'Tcl112Protocol::__pad0__()'],['../unionTechnibelProtocol.html#a867176d7b37eea700911a9e1436fd759',1,'TechnibelProtocol::__pad0__()'],['../unionTecoProtocol.html#a4f28c648b1ea808fa3f85dccd9aa7f0e',1,'TecoProtocol::__pad0__()'],['../unionToshibaProtocol.html#afcaa4bab05d9b9a178d377981963804f',1,'ToshibaProtocol::__pad0__()'],['../unionTranscoldProtocol.html#ae31134005dcf214468c247c1a8e0c3c2',1,'TranscoldProtocol::__pad0__()'],['../unionTrotecProtocol.html#a5a595bd97622b796cc790b3781b5f945',1,'TrotecProtocol::__pad0__()'],['../unionTrumaProtocol.html#ae1dba9448f8eafde9880dd3c62d0d6eb',1,'TrumaProtocol::__pad0__()'],['../unionVestelProtocol.html#ae1c70f14718a4374f62db9a5ee047525',1,'VestelProtocol::__pad0__()'],['../unionVoltasProtocol.html#a6a9f9ff0c3c7b691ed78738138467afa',1,'VoltasProtocol::__pad0__()'],['../unionWhirlpoolProtocol.html#a346c5be5f86c773065807453a37b1803',1,'WhirlpoolProtocol::__pad0__()']]], - ['_5f_5fpad10_5f_5f_4570',['__pad10__',['../unionArgoProtocol.html#aa2c0eb524c5870ea14aac018834c203f',1,'ArgoProtocol::__pad10__()'],['../unionDaikinESPProtocol.html#ab5f4cadf160b7b0cd86d23f0d29226b5',1,'DaikinESPProtocol::__pad10__()'],['../unionDaikin2Protocol.html#a6c39db0f9d872e4e955d95530e364f8c',1,'Daikin2Protocol::__pad10__()'],['../unionElectraProtocol.html#a1c6c36949391af9da5dbb39a7ab9894b',1,'ElectraProtocol::__pad10__()'],['../unionFujitsuProtocol.html#a401eaf495ccd6f029263af08c6b810b0',1,'FujitsuProtocol::__pad10__()'],['../unionHaierYRW02Protocol.html#abc9d14dbc6ab798a389244499fad7d96',1,'HaierYRW02Protocol::__pad10__()'],['../unionKelvinatorProtocol.html#aa2ce27bd061f2e9a44fd01b3c5abcd0a',1,'KelvinatorProtocol::__pad10__()'],['../unionMitsubishi152Protocol.html#a05b638b3d3727c028e00c7e0826988ac',1,'Mitsubishi152Protocol::__pad10__()'],['../unionNeoclimaProtocol.html#a035ce50ea046d70206a899b022514fc1',1,'NeoclimaProtocol::__pad10__()'],['../unionSamsungProtocol.html#ad142f78386bc81486c7237de5c9dba02',1,'SamsungProtocol::__pad10__()'],['../unionSharpProtocol.html#a38bc19719f1597b4b2f412eda520edff',1,'SharpProtocol::__pad10__()'],['../unionWhirlpoolProtocol.html#a08e2114e6ecd39db2d05d4fbe6f331eb',1,'WhirlpoolProtocol::__pad10__()']]], - ['_5f_5fpad11_5f_5f_4571',['__pad11__',['../unionArgoProtocol.html#a6ccde46c9c033ca08161da12a2657187',1,'ArgoProtocol::__pad11__()'],['../unionDaikinESPProtocol.html#a63226f3ed0f535ecc6575d68e402aca4',1,'DaikinESPProtocol::__pad11__()'],['../unionDaikin2Protocol.html#a4dbf000916d610dd6f7779702b827a32',1,'Daikin2Protocol::__pad11__()'],['../unionElectraProtocol.html#a60df01dbc021ccb4167bf05b6cfb3575',1,'ElectraProtocol::__pad11__()'],['../unionHaierYRW02Protocol.html#a033dacb9a8b936c0187e86c585431198',1,'HaierYRW02Protocol::__pad11__()'],['../unionKelvinatorProtocol.html#a154ce4b17b1920eeeed576a84c42078c',1,'KelvinatorProtocol::__pad11__()'],['../unionMitsubishi152Protocol.html#a613a6a6436459e9c0e50ea9dbe98adb7',1,'Mitsubishi152Protocol::__pad11__()'],['../unionSamsungProtocol.html#adbacd1c9f1da9e52897e371932448104',1,'SamsungProtocol::__pad11__()'],['../unionWhirlpoolProtocol.html#a2298dc17501470bc907c2942b3b78a31',1,'WhirlpoolProtocol::__pad11__()']]], - ['_5f_5fpad12_5f_5f_4572',['__pad12__',['../unionArgoProtocol.html#a338bbbc882a3409af4ff510a9b7c001b',1,'ArgoProtocol::__pad12__()'],['../unionDaikinESPProtocol.html#acb1fbea3c23fc3cd9171e8dc5ec6c704',1,'DaikinESPProtocol::__pad12__()'],['../unionDaikin2Protocol.html#a8ed55611b407b4565879d1c590d9db97',1,'Daikin2Protocol::__pad12__()'],['../unionElectraProtocol.html#af6cc114e85af4dc98468b8912d9550e1',1,'ElectraProtocol::__pad12__()'],['../unionHaierYRW02Protocol.html#a3df5d93e5f676ff44b32227a44be98ac',1,'HaierYRW02Protocol::__pad12__()'],['../unionKelvinatorProtocol.html#aca9a8e9d3bfae177addbbf5cf59be5b9',1,'KelvinatorProtocol::__pad12__()'],['../unionMitsubishi152Protocol.html#a79605175bd897bb9d9dbde5e2a5e75cd',1,'Mitsubishi152Protocol::__pad12__()'],['../unionSamsungProtocol.html#a3498152c423584a34036a0004965e483',1,'SamsungProtocol::__pad12__()'],['../unionWhirlpoolProtocol.html#a5bb903a38e613af99420d157b6a4497c',1,'WhirlpoolProtocol::__pad12__()']]], - ['_5f_5fpad13_5f_5f_4573',['__pad13__',['../unionArgoProtocol.html#a093e716979933669e589fb5ead32a3a5',1,'ArgoProtocol::__pad13__()'],['../unionDaikinESPProtocol.html#ad00fd7a0383f41faa020b5468f326d40',1,'DaikinESPProtocol::__pad13__()'],['../unionDaikin2Protocol.html#a71b32e066737020b4b50752a1b49aa59',1,'Daikin2Protocol::__pad13__()'],['../unionKelvinatorProtocol.html#a7791a8425a444901bba50c314ea72f07',1,'KelvinatorProtocol::__pad13__()'],['../unionSamsungProtocol.html#a0cc6887b0f67b3478679612a61f53494',1,'SamsungProtocol::__pad13__()'],['../unionWhirlpoolProtocol.html#aee015ccecfa7008bf16b9c94c471d611',1,'WhirlpoolProtocol::__pad13__()']]], - ['_5f_5fpad14_5f_5f_4574',['__pad14__',['../unionArgoProtocol.html#ab35dfc5963cfdcf5a776c78d3ea5f423',1,'ArgoProtocol::__pad14__()'],['../unionDaikinESPProtocol.html#af60b5d6127571efd945834134e9820cf',1,'DaikinESPProtocol::__pad14__()'],['../unionDaikin2Protocol.html#a775f2fb0cb2c7814487a595d7dbf9433',1,'Daikin2Protocol::__pad14__()'],['../unionKelvinatorProtocol.html#aae165412d5c955b14dce78a4793c1196',1,'KelvinatorProtocol::__pad14__()'],['../unionSamsungProtocol.html#a18c1a85c27a25cfd52ea3894770e046d',1,'SamsungProtocol::__pad14__()'],['../unionWhirlpoolProtocol.html#a3d91bff7afe79cceb9410303625501e8',1,'WhirlpoolProtocol::__pad14__()']]], - ['_5f_5fpad15_5f_5f_4575',['__pad15__',['../unionArgoProtocol.html#a1a3263d128339d19b1dfa2857da3475b',1,'ArgoProtocol::__pad15__()'],['../unionDaikinESPProtocol.html#aa50501fc2b9f3c687fdc6ffae01b0b26',1,'DaikinESPProtocol::__pad15__()'],['../unionDaikin2Protocol.html#a8e3e56e3e43e01196aa76b26746a7793',1,'Daikin2Protocol::__pad15__()'],['../unionKelvinatorProtocol.html#ab92ccd2d83d1f6a8ac071a6bf964192f',1,'KelvinatorProtocol::__pad15__()'],['../unionSamsungProtocol.html#a432749e94e913ec1070a6eaa189d28cc',1,'SamsungProtocol::__pad15__()'],['../unionWhirlpoolProtocol.html#a3befb6d4bc7900b5ce1521557b7ac1da',1,'WhirlpoolProtocol::__pad15__()']]], - ['_5f_5fpad16_5f_5f_4576',['__pad16__',['../unionArgoProtocol.html#a0e901bceaaa0cc966eabb937ad4b549a',1,'ArgoProtocol::__pad16__()'],['../unionDaikinESPProtocol.html#a25289149f23cde94303b04579ef5ab51',1,'DaikinESPProtocol::__pad16__()'],['../unionDaikin2Protocol.html#a1cc01ee37d30381041627a436b12b06e',1,'Daikin2Protocol::__pad16__()'],['../unionKelvinatorProtocol.html#a3a2a481ac55f63f010954be00839e9f5',1,'KelvinatorProtocol::__pad16__()'],['../unionSamsungProtocol.html#a4d5d840172077977f2019a57c359fa3e',1,'SamsungProtocol::__pad16__()'],['../unionWhirlpoolProtocol.html#ac1c4612fadecbcbcf3afb7cd3b5ae2ec',1,'WhirlpoolProtocol::__pad16__()']]], - ['_5f_5fpad17_5f_5f_4577',['__pad17__',['../unionDaikinESPProtocol.html#a4f5109e7102aa264f0769b3c8e59143e',1,'DaikinESPProtocol::__pad17__()'],['../unionDaikin2Protocol.html#a95ba00e7fe66eb4461df6185a4203272',1,'Daikin2Protocol::__pad17__()']]], - ['_5f_5fpad18_5f_5f_4578',['__pad18__',['../unionDaikin2Protocol.html#a0f1bbafed357f2b8c3792072edcd024f',1,'Daikin2Protocol']]], - ['_5f_5fpad19_5f_5f_4579',['__pad19__',['../unionDaikin2Protocol.html#a8625b24852e8b61e99608d3ed6108060',1,'Daikin2Protocol']]], - ['_5f_5fpad1_5f_5f_4580',['__pad1__',['../unionAirwellProtocol.html#ab2a20785c417317ac37cd1b5ef795249',1,'AirwellProtocol::__pad1__()'],['../unionAmcorProtocol.html#a9603d27ed81d3efc3b1fff2d6a877f6f',1,'AmcorProtocol::__pad1__()'],['../unionArgoProtocol.html#a87ef29a274368f72fe0e8aee0d09c241',1,'ArgoProtocol::__pad1__()'],['../unionCarrierProtocol.html#a344e5a62f7624bdc8d6b53c89d53ff01',1,'CarrierProtocol::__pad1__()'],['../unionCoolixProtocol.html#a40ad4befacf2e80aa8b58ffa009282d8',1,'CoolixProtocol::__pad1__()'],['../unionCoronaProtocol.html#a562183bf52e393fb07ca57f5f8341bfd',1,'CoronaProtocol::__pad1__()'],['../unionDaikinESPProtocol.html#a171688991f490457597ef35ae981364c',1,'DaikinESPProtocol::__pad1__()'],['../unionDaikin2Protocol.html#adcfa8f9e936b2d3847bf2a916398a2c6',1,'Daikin2Protocol::__pad1__()'],['../unionDaikin216Protocol.html#a195343e0e34535032963cf7a2e860310',1,'Daikin216Protocol::__pad1__()'],['../unionDaikin160Protocol.html#a019c8599ff9271e4d85294aa9d30f7b3',1,'Daikin160Protocol::__pad1__()'],['../unionDaikin176Protocol.html#a4bc397de2956316e96548d0d91c9e853',1,'Daikin176Protocol::__pad1__()'],['../unionDaikin128Protocol.html#acbbe6f9c88b1ac0e0accc9e7da3d6f56',1,'Daikin128Protocol::__pad1__()'],['../unionDaikin152Protocol.html#aa0078b4986f0c5af41e4eb6c66bbbcdf',1,'Daikin152Protocol::__pad1__()'],['../unionDaikin64Protocol.html#a85e8ad5d286b0c048651a22939185f46',1,'Daikin64Protocol::__pad1__()'],['../unionDelonghiProtocol.html#a26a942f261b6d45e3d3a9734b8535c8d',1,'DelonghiProtocol::__pad1__()'],['../unionEcoclimProtocol.html#af5e0d8721a854eacd373ba6b3907bfcc',1,'EcoclimProtocol::__pad1__()'],['../unionElectraProtocol.html#a144dab2a792292298898217b72ffe95a',1,'ElectraProtocol::__pad1__()'],['../unionFujitsuProtocol.html#a419bfbb3660ce591194319f23f7b03e3',1,'FujitsuProtocol::__pad1__()'],['../unionGoodweatherProtocol.html#af377b40f40c2182c39892322d48b6e41',1,'GoodweatherProtocol::__pad1__()'],['../unionGreeProtocol.html#a094751746e21e5ae70ff7ace3b84c75d',1,'GreeProtocol::__pad1__()'],['../unionHaierProtocol.html#a8e91589ca0e2db529f73e3f8ecbb00a0',1,'HaierProtocol::__pad1__()'],['../unionHaierYRW02Protocol.html#aa20f4bbeb35dfa6afe0af4c7ea1cc498',1,'HaierYRW02Protocol::__pad1__()'],['../unionHitachiProtocol.html#a1c8b361a818c9c39d4fa68e89f9a8e22',1,'HitachiProtocol::__pad1__()'],['../unionHitachi424Protocol.html#a242455776887250de614f82c786a7305',1,'Hitachi424Protocol::__pad1__()'],['../unionHitachi1Protocol.html#a5a1391e156a30793572f4fe2b0b09bce',1,'Hitachi1Protocol::__pad1__()'],['../unionKelvinatorProtocol.html#a3e434ffef93cd99fe33800f87f5f4c02',1,'KelvinatorProtocol::__pad1__()'],['../unionLGProtocol.html#a6ed86f00b55c5e136039ccb4d8b92bc9',1,'LGProtocol::__pad1__()'],['../unionMideaProtocol.html#a3351e3af6d3f214536e593c450fa0915',1,'MideaProtocol::__pad1__()'],['../unionMitsubishi144Protocol.html#a73a24c6aed86265c733bd65c52c71a2b',1,'Mitsubishi144Protocol::__pad1__()'],['../unionMitsubishi136Protocol.html#abf3c48fa8afee2e538c4edd691df1cc3',1,'Mitsubishi136Protocol::__pad1__()'],['../unionMitsubishi112Protocol.html#ab9760331882703b5b80a30f9ba008e66',1,'Mitsubishi112Protocol::__pad1__()'],['../unionMitsubishi152Protocol.html#a758cb7e9d347f8642f680ec803e12282',1,'Mitsubishi152Protocol::__pad1__()'],['../unionMitsubishi88Protocol.html#aa46d6fc69b2de17ea7fd1c3e06b953c0',1,'Mitsubishi88Protocol::__pad1__()'],['../unionNeoclimaProtocol.html#a76421acbe5fd17e423d2e1159261f4e2',1,'NeoclimaProtocol::__pad1__()'],['../unionPanasonicAc32Protocol.html#a5cda61ba9d077c018393878bac8ef02e',1,'PanasonicAc32Protocol::__pad1__()'],['../unionSamsungProtocol.html#a9cee9377b1f9e1481ddc996c20d17fa0',1,'SamsungProtocol::__pad1__()'],['../unionSanyoProtocol.html#afcd8e773058c6c1c61c1ca8fadec557a',1,'SanyoProtocol::__pad1__()'],['../unionSharpProtocol.html#abd9e4cc871884cfc1fa50c0785e20dca',1,'SharpProtocol::__pad1__()'],['../unionTcl112Protocol.html#a4eadf5f4b418c756332c565db930bc4b',1,'Tcl112Protocol::__pad1__()'],['../unionTechnibelProtocol.html#a21dcbf63bcb5f9a2071d186d8d0ee7f7',1,'TechnibelProtocol::__pad1__()'],['../unionTecoProtocol.html#a5fc378f32498bb71500d9ca68ccd71d6',1,'TecoProtocol::__pad1__()'],['../unionToshibaProtocol.html#a33806189420dacc911832a0290364acc',1,'ToshibaProtocol::__pad1__()'],['../unionTranscoldProtocol.html#a3dc6ac4b02073bd781632c1f1f7c8805',1,'TranscoldProtocol::__pad1__()'],['../unionTrotecProtocol.html#a0e7816aae4f8d5f604103a5e25ad5c4d',1,'TrotecProtocol::__pad1__()'],['../unionTrumaProtocol.html#a8124c299b6ad13bc42bfd0c18b774d62',1,'TrumaProtocol::__pad1__()'],['../unionVestelProtocol.html#a30aa4f861223ae78a3735cbefb71b894',1,'VestelProtocol::__pad1__()'],['../unionVoltasProtocol.html#a80c4eeb8eea30866ef991cab330f6def',1,'VoltasProtocol::__pad1__()'],['../unionWhirlpoolProtocol.html#a1a6a151ac226c361d7fb9c5775959719',1,'WhirlpoolProtocol::__pad1__()']]], - ['_5f_5fpad20_5f_5f_4581',['__pad20__',['../unionDaikin2Protocol.html#a5263b84da0ca6a26a32f9235054d975a',1,'Daikin2Protocol']]], - ['_5f_5fpad21_5f_5f_4582',['__pad21__',['../unionDaikin2Protocol.html#a2d1fa760cd0d6e2420a63dac338d5c72',1,'Daikin2Protocol']]], - ['_5f_5fpad22_5f_5f_4583',['__pad22__',['../unionDaikin2Protocol.html#aec8c4d930e4d316428d9f0aa52fa307a',1,'Daikin2Protocol']]], - ['_5f_5fpad23_5f_5f_4584',['__pad23__',['../unionDaikin2Protocol.html#a1d13146bb96e0f1a38f61ff473a95787',1,'Daikin2Protocol']]], - ['_5f_5fpad24_5f_5f_4585',['__pad24__',['../unionDaikin2Protocol.html#a1c39c5b58eea52a36b52d6a69d841368',1,'Daikin2Protocol']]], - ['_5f_5fpad2_5f_5f_4586',['__pad2__',['../unionAirwellProtocol.html#a3ba38aea4ada26e1936478d737e2080a',1,'AirwellProtocol::__pad2__()'],['../unionAmcorProtocol.html#afefa908f10f814fadde57efdc4dce76c',1,'AmcorProtocol::__pad2__()'],['../unionArgoProtocol.html#a44dff1537c390a45ee43c57f2b80050d',1,'ArgoProtocol::__pad2__()'],['../unionCarrierProtocol.html#aac511fa89b32f24a01d179c37fffc2fa',1,'CarrierProtocol::__pad2__()'],['../unionCoolixProtocol.html#a6d0452c77ec2042ecd9f6067fae5333d',1,'CoolixProtocol::__pad2__()'],['../unionCoronaProtocol.html#a53c510747a6970ea6f0172a39194369d',1,'CoronaProtocol::__pad2__()'],['../unionDaikinESPProtocol.html#a01827591728378573fa1c6de1d0fb047',1,'DaikinESPProtocol::__pad2__()'],['../unionDaikin2Protocol.html#a18d60de4ac1cd64c9544d275bd2f0d77',1,'Daikin2Protocol::__pad2__()'],['../unionDaikin216Protocol.html#a1c7d014ca2fbab35649ac04e711090e4',1,'Daikin216Protocol::__pad2__()'],['../unionDaikin160Protocol.html#a18fa821c54eaebb5b728914976f33c10',1,'Daikin160Protocol::__pad2__()'],['../unionDaikin176Protocol.html#ae78012028d2d6983028aed4206347f68',1,'Daikin176Protocol::__pad2__()'],['../unionDaikin128Protocol.html#af5cb68ecd15fba7cafa9252479f8f8bd',1,'Daikin128Protocol::__pad2__()'],['../unionDaikin152Protocol.html#af147c5af64b24303b2975f44d73b6e60',1,'Daikin152Protocol::__pad2__()'],['../unionDelonghiProtocol.html#a78b2654018ed1c8c9a762ee6b1241bdc',1,'DelonghiProtocol::__pad2__()'],['../unionEcoclimProtocol.html#a8e6682232e119fc85a7de034a454072b',1,'EcoclimProtocol::__pad2__()'],['../unionElectraProtocol.html#abcc4e66431cd1ffadcdd3e25c611e306',1,'ElectraProtocol::__pad2__()'],['../unionFujitsuProtocol.html#af4b24c6663c4b4b94ea13c66ee3a122d',1,'FujitsuProtocol::__pad2__()'],['../unionGoodweatherProtocol.html#af9191479578e5541782ab08dca536cd8',1,'GoodweatherProtocol::__pad2__()'],['../unionGreeProtocol.html#a715441faac2bdd5dc37d6a3efcc99c4f',1,'GreeProtocol::__pad2__()'],['../unionHaierYRW02Protocol.html#a51178359e3860a50dbf53bda14b5a88c',1,'HaierYRW02Protocol::__pad2__()'],['../unionHitachiProtocol.html#a057c243efc8dea1fb191a5e46e919945',1,'HitachiProtocol::__pad2__()'],['../unionHitachi424Protocol.html#af8456076f173c8ba3fe398a4b603d7f9',1,'Hitachi424Protocol::__pad2__()'],['../unionHitachi1Protocol.html#a8817d394030fff87bf433137fc7cd616',1,'Hitachi1Protocol::__pad2__()'],['../unionKelvinatorProtocol.html#a612fd8e28cb1ca0b675f6397465422fb',1,'KelvinatorProtocol::__pad2__()'],['../unionMideaProtocol.html#ab638086cc0b8d25fba57278c7ba881cb',1,'MideaProtocol::__pad2__()'],['../unionMitsubishi144Protocol.html#a8adaf8e3c219a7deb561bd54783d58c8',1,'Mitsubishi144Protocol::__pad2__()'],['../unionMitsubishi136Protocol.html#a787183f490db45ea0421cd90aa8ee58b',1,'Mitsubishi136Protocol::__pad2__()'],['../unionMitsubishi112Protocol.html#aec7545bf250d0f8a5035d518258978d7',1,'Mitsubishi112Protocol::__pad2__()'],['../unionMitsubishi152Protocol.html#aebca5fcc9d424d56fb46ba275c5b9f9b',1,'Mitsubishi152Protocol::__pad2__()'],['../unionMitsubishi88Protocol.html#ad644461a3b45b36ee3feabee34897e90',1,'Mitsubishi88Protocol::__pad2__()'],['../unionNeoclimaProtocol.html#ae25f51e0b116bf7587527b8b41b27bec',1,'NeoclimaProtocol::__pad2__()'],['../unionPanasonicAc32Protocol.html#ab2296c3c02d374663675d476bc0b2b0c',1,'PanasonicAc32Protocol::__pad2__()'],['../unionSamsungProtocol.html#a3594b63392afa71e288b96e0ee488690',1,'SamsungProtocol::__pad2__()'],['../unionSanyoProtocol.html#af762ec4bca951f0a8193be08692a9b3e',1,'SanyoProtocol::__pad2__()'],['../unionSharpProtocol.html#af02d3d154667f63afbacb9f50e40ddd2',1,'SharpProtocol::__pad2__()'],['../unionTcl112Protocol.html#ac3ca9623e507753cacd7303b1a0272b2',1,'Tcl112Protocol::__pad2__()'],['../unionTechnibelProtocol.html#a76022ef93412caed8f938cd76eae288e',1,'TechnibelProtocol::__pad2__()'],['../unionTecoProtocol.html#a6f255afef8feea0838b60ca308a3fe15',1,'TecoProtocol::__pad2__()'],['../unionToshibaProtocol.html#ab976a3d007474db50729a9d315ea2ddf',1,'ToshibaProtocol::__pad2__()'],['../unionTranscoldProtocol.html#a72050e0bc1c4828c9277b67803315868',1,'TranscoldProtocol::__pad2__()'],['../unionTrotecProtocol.html#af25bde6df1a74da8fecada128f23ba48',1,'TrotecProtocol::__pad2__()'],['../unionTrumaProtocol.html#a86e5187205b4ca9a16147160de04585d',1,'TrumaProtocol::__pad2__()'],['../unionVestelProtocol.html#a4a611ce846177ae4b9bc7cd6a60bf17f',1,'VestelProtocol::__pad2__()'],['../unionVoltasProtocol.html#a4c2798df803074bcde8ddf6c7e855d91',1,'VoltasProtocol::__pad2__()'],['../unionWhirlpoolProtocol.html#ab7f93602ea91e831fbb1d0d5862c690b',1,'WhirlpoolProtocol::__pad2__()']]], - ['_5f_5fpad3_5f_5f_4587',['__pad3__',['../unionAmcorProtocol.html#a25002ba50158c3ee26d20d94d3507a9b',1,'AmcorProtocol::__pad3__()'],['../unionArgoProtocol.html#a6b383394993c83f6ed098826e5c02a4a',1,'ArgoProtocol::__pad3__()'],['../unionCarrierProtocol.html#a50193ce74f535d6dad154a96f54adb48',1,'CarrierProtocol::__pad3__()'],['../unionCoronaProtocol.html#a5f0dd8e7b0d0b5673088416e2f88df6e',1,'CoronaProtocol::__pad3__()'],['../unionDaikinESPProtocol.html#a2ef5628a9259b528c700a990bf411c01',1,'DaikinESPProtocol::__pad3__()'],['../unionDaikin2Protocol.html#aa6331c57c9e4a96077f449839fdf44e4',1,'Daikin2Protocol::__pad3__()'],['../unionDaikin216Protocol.html#a8c2dd3c46d384ce286dc4790afe31ffd',1,'Daikin216Protocol::__pad3__()'],['../unionDaikin160Protocol.html#ac3a48f7a81ec67c0d4cc1b4ac8ba7f59',1,'Daikin160Protocol::__pad3__()'],['../unionDaikin176Protocol.html#ab630c3dd3b3f6c733b255a4de5ca7642',1,'Daikin176Protocol::__pad3__()'],['../unionDaikin128Protocol.html#ac7a7623a3947b3cdd43a49ccd6359f3b',1,'Daikin128Protocol::__pad3__()'],['../unionDaikin152Protocol.html#a46b0a6cc3b11fc0f6c9a636be660cc42',1,'Daikin152Protocol::__pad3__()'],['../unionDelonghiProtocol.html#a98b1173e0d07b4a29506f5df0f396e72',1,'DelonghiProtocol::__pad3__()'],['../unionEcoclimProtocol.html#acddb949003223952f34beba59abbe319',1,'EcoclimProtocol::__pad3__()'],['../unionElectraProtocol.html#a6403f6b51a0deec451ccc385663ac0ab',1,'ElectraProtocol::__pad3__()'],['../unionFujitsuProtocol.html#a3f6c0bc00666716575cb48805f88fc80',1,'FujitsuProtocol::__pad3__()'],['../unionGoodweatherProtocol.html#ac9e781a9b5d7f9631c0b4696bca0bcef',1,'GoodweatherProtocol::__pad3__()'],['../unionGreeProtocol.html#a7291d729f3b5638cb160afbda37baba1',1,'GreeProtocol::__pad3__()'],['../unionHaierYRW02Protocol.html#ad2c1066a2d796f49424feb2612df3d98',1,'HaierYRW02Protocol::__pad3__()'],['../unionHitachiProtocol.html#a81ef6998c55ca142aa0418bfcdcfa3f1',1,'HitachiProtocol::__pad3__()'],['../unionHitachi424Protocol.html#aa0c15cc7acbf16f76a5194d1b2512cce',1,'Hitachi424Protocol::__pad3__()'],['../unionHitachi1Protocol.html#a8f53a39a6f727509b9faa1e41df34e65',1,'Hitachi1Protocol::__pad3__()'],['../unionKelvinatorProtocol.html#a35b5c9cd85f4b8c9eeec9231321acb5e',1,'KelvinatorProtocol::__pad3__()'],['../unionMitsubishi144Protocol.html#a5fd5cf0329ffc81873452121bc6c694b',1,'Mitsubishi144Protocol::__pad3__()'],['../unionMitsubishi136Protocol.html#aac4daa062404ef7de66285c661bd07c1',1,'Mitsubishi136Protocol::__pad3__()'],['../unionMitsubishi112Protocol.html#a61f23d1857c90d6bbb6c2c4bdd5f4366',1,'Mitsubishi112Protocol::__pad3__()'],['../unionMitsubishi152Protocol.html#a46ae84f569070c49ac38f922cb1ef418',1,'Mitsubishi152Protocol::__pad3__()'],['../unionMitsubishi88Protocol.html#a32d9cf7a2c286e7a54700685c8c7f971',1,'Mitsubishi88Protocol::__pad3__()'],['../unionNeoclimaProtocol.html#af6dbc91124759aa129d1f90e6dc72018',1,'NeoclimaProtocol::__pad3__()'],['../unionPanasonicAc32Protocol.html#a7c4bfcb851fdb80a894a63b2315735d8',1,'PanasonicAc32Protocol::__pad3__()'],['../unionSamsungProtocol.html#a604db5fe346dd0260352ceb8110fa9fc',1,'SamsungProtocol::__pad3__()'],['../unionSanyoProtocol.html#a8361c7d8c6d8c29cb32cf8fc767af20d',1,'SanyoProtocol::__pad3__()'],['../unionSharpProtocol.html#a16dd55080d92063e1f94a8d0001f5422',1,'SharpProtocol::__pad3__()'],['../unionTcl112Protocol.html#affe38fa7d2100bea87de4071e21fc2b6',1,'Tcl112Protocol::__pad3__()'],['../unionToshibaProtocol.html#a98c82a98cf2cdaf6a90689a56a76b3d5',1,'ToshibaProtocol::__pad3__()'],['../unionTrotecProtocol.html#aa8d15923ce801a0066bc656f1de7c022',1,'TrotecProtocol::__pad3__()'],['../unionTrumaProtocol.html#a37e7eac9fb988eaf6e09b5006c38fcac',1,'TrumaProtocol::__pad3__()'],['../unionVestelProtocol.html#a0c33c79555a228be2c4daf1fc67d5916',1,'VestelProtocol::__pad3__()'],['../unionVoltasProtocol.html#aa63b5dd18bc7376a712e7dd16d594525',1,'VoltasProtocol::__pad3__()'],['../unionWhirlpoolProtocol.html#a6bbb9f4faf465e74c2d3a66f17b1df48',1,'WhirlpoolProtocol::__pad3__()']]], - ['_5f_5fpad4_5f_5f_4588',['__pad4__',['../unionAmcorProtocol.html#a4375506f729c9d45a1269aea9d968889',1,'AmcorProtocol::__pad4__()'],['../unionArgoProtocol.html#a2c425c7f223a53cdb33a783d133f5a77',1,'ArgoProtocol::__pad4__()'],['../unionCarrierProtocol.html#ade0f53c0cd05eaad14f0a3f0121e7b5e',1,'CarrierProtocol::__pad4__()'],['../unionCoronaProtocol.html#a58df374f27d3733fc63d3cc040478293',1,'CoronaProtocol::__pad4__()'],['../unionDaikinESPProtocol.html#a7014ed7555ab0ee36e2579fcb8df1f98',1,'DaikinESPProtocol::__pad4__()'],['../unionDaikin2Protocol.html#a62d5a48a2ed939f962d01ccc36240140',1,'Daikin2Protocol::__pad4__()'],['../unionDaikin216Protocol.html#a0b0ecd2afae9e01895d9eb9d7006ed79',1,'Daikin216Protocol::__pad4__()'],['../unionDaikin160Protocol.html#a74bccea5226643c27859b38a12a59be9',1,'Daikin160Protocol::__pad4__()'],['../unionDaikin176Protocol.html#a7a87ca0ff85353e3a3e0853af8784f0e',1,'Daikin176Protocol::__pad4__()'],['../unionDaikin128Protocol.html#a6646f9ae8d244cfd6ce6ae8444c26ee9',1,'Daikin128Protocol::__pad4__()'],['../unionDaikin152Protocol.html#afe5f17c62a8ba5ae29e4e2bb59aa1529',1,'Daikin152Protocol::__pad4__()'],['../unionDelonghiProtocol.html#a4cc4153806e037068b52d1f356bca2ef',1,'DelonghiProtocol::__pad4__()'],['../unionElectraProtocol.html#aca5ea0ef13aa3ad08fc35e0a5ba90b44',1,'ElectraProtocol::__pad4__()'],['../unionFujitsuProtocol.html#a62ccdc24ef47c68b3b13e35becaec99a',1,'FujitsuProtocol::__pad4__()'],['../unionGoodweatherProtocol.html#a15507e180c97e420b5d6fe3c0bc61fb8',1,'GoodweatherProtocol::__pad4__()'],['../unionGreeProtocol.html#a6caf58eb68a83c0686dbd65d7a35cb58',1,'GreeProtocol::__pad4__()'],['../unionHaierYRW02Protocol.html#a62e17795ebcaea82715972f98d5408ca',1,'HaierYRW02Protocol::__pad4__()'],['../unionHitachiProtocol.html#ad774d48d4f5aeea2866393fdfe3f555d',1,'HitachiProtocol::__pad4__()'],['../unionHitachi424Protocol.html#ae8a14021f2ffbbc8e371a98746f48254',1,'Hitachi424Protocol::__pad4__()'],['../unionKelvinatorProtocol.html#ac5dfd253e66fe1ec3e81861ff9831152',1,'KelvinatorProtocol::__pad4__()'],['../unionMitsubishi144Protocol.html#a3b863e77427d3a0e1aa253a78f7b74a2',1,'Mitsubishi144Protocol::__pad4__()'],['../unionMitsubishi136Protocol.html#abccf31e8af18978d9a1a88e89d940e09',1,'Mitsubishi136Protocol::__pad4__()'],['../unionMitsubishi112Protocol.html#a85d5019e05dd9f03a1f7ee064a88a942',1,'Mitsubishi112Protocol::__pad4__()'],['../unionMitsubishi152Protocol.html#a433f0416bbb79637c6f9fbe2acceac87',1,'Mitsubishi152Protocol::__pad4__()'],['../unionMitsubishi88Protocol.html#a9ea2db6c6894570bca8d28ca291257d4',1,'Mitsubishi88Protocol::__pad4__()'],['../unionNeoclimaProtocol.html#a8a71980caab28f7ec1d9db296e59b9b6',1,'NeoclimaProtocol::__pad4__()'],['../unionSamsungProtocol.html#aa760a13dc0616a19bdb0d26247f4069c',1,'SamsungProtocol::__pad4__()'],['../unionSanyoProtocol.html#a02c7bd013488fa887bb5c7f769ae7701',1,'SanyoProtocol::__pad4__()'],['../unionSharpProtocol.html#ad2f9ae4c63f0e3d7bf5ea29641f64f45',1,'SharpProtocol::__pad4__()'],['../unionTcl112Protocol.html#ae6dae45ebb41b93a08a5279123f2eb2c',1,'Tcl112Protocol::__pad4__()'],['../unionToshibaProtocol.html#a1dda567a649fbc2b9c62b88453d91a95',1,'ToshibaProtocol::__pad4__()'],['../unionTrotecProtocol.html#ad029528c5697ef44f4398297626ed3b0',1,'TrotecProtocol::__pad4__()'],['../unionTrumaProtocol.html#a47b0981e1af1482b07426ab2556239c4',1,'TrumaProtocol::__pad4__()'],['../unionVestelProtocol.html#aec62b8fe14c683d97ecae5f35c114a36',1,'VestelProtocol::__pad4__()'],['../unionVoltasProtocol.html#ab0ec8c8b4f98d8ad2185259a1013f20b',1,'VoltasProtocol::__pad4__()'],['../unionWhirlpoolProtocol.html#a4dd07f43eb81c73da20b4090a808cfb4',1,'WhirlpoolProtocol::__pad4__()']]], - ['_5f_5fpad5_5f_5f_4589',['__pad5__',['../unionAmcorProtocol.html#aa2fa57304833e2067f438d74f898dfc8',1,'AmcorProtocol::__pad5__()'],['../unionArgoProtocol.html#aa3990245fbd608c4a4e7fef690532656',1,'ArgoProtocol::__pad5__()'],['../unionCarrierProtocol.html#a635772a0e49e2a82b7e665b1f8d42148',1,'CarrierProtocol::__pad5__()'],['../unionCoronaProtocol.html#a8a34423073c0a91ace50605fc8337bc0',1,'CoronaProtocol::__pad5__()'],['../unionDaikinESPProtocol.html#a2fd0730f664fb53db682583eec683655',1,'DaikinESPProtocol::__pad5__()'],['../unionDaikin2Protocol.html#ae8820509ea3d0d469eeaf2c6b24b1cc6',1,'Daikin2Protocol::__pad5__()'],['../unionDaikin216Protocol.html#af741df8a92304153646c72e327a1f84c',1,'Daikin216Protocol::__pad5__()'],['../unionDaikin160Protocol.html#a3d27052aa6059811302d7b55c0f937f4',1,'Daikin160Protocol::__pad5__()'],['../unionDaikin176Protocol.html#a3072452ff1a6f05474bf41e1a9ceed9c',1,'Daikin176Protocol::__pad5__()'],['../unionDaikin152Protocol.html#a341c6fab12f9de609675822e437033dc',1,'Daikin152Protocol::__pad5__()'],['../unionDelonghiProtocol.html#a09090f4876d843dc6c4425e2f2e9b285',1,'DelonghiProtocol::__pad5__()'],['../unionElectraProtocol.html#a104239d43eacdb9a3a02a390f0162e90',1,'ElectraProtocol::__pad5__()'],['../unionFujitsuProtocol.html#aee4a515da60b77610fd3f6ae79d23693',1,'FujitsuProtocol::__pad5__()'],['../unionGoodweatherProtocol.html#a30b3e624d81d69c2a3f1365692b6a1e9',1,'GoodweatherProtocol::__pad5__()'],['../unionHaierYRW02Protocol.html#a7405f45e3dfb5230a6e531c3ea5bd2cc',1,'HaierYRW02Protocol::__pad5__()'],['../unionHitachi424Protocol.html#aa366817e22645701ccd3ffa37d7317eb',1,'Hitachi424Protocol::__pad5__()'],['../unionKelvinatorProtocol.html#a57849bb224e56d4cee776299d1ca04b4',1,'KelvinatorProtocol::__pad5__()'],['../unionMitsubishi144Protocol.html#ae4e8f971ea13ebced975441862bc9ae8',1,'Mitsubishi144Protocol::__pad5__()'],['../unionMitsubishi112Protocol.html#ab2ef871a7872995119e7c0055bd532ca',1,'Mitsubishi112Protocol::__pad5__()'],['../unionMitsubishi152Protocol.html#a9041f537b5d1dafd244c48d8f9a6e7ee',1,'Mitsubishi152Protocol::__pad5__()'],['../unionNeoclimaProtocol.html#aabf9592dcc470f8eba1a39e8633cf597',1,'NeoclimaProtocol::__pad5__()'],['../unionSamsungProtocol.html#a81057e26a43dcb99dc5b14d31dc900f5',1,'SamsungProtocol::__pad5__()'],['../unionSanyoProtocol.html#afe99c3e0bad0c7da17cf26a2fab655fc',1,'SanyoProtocol::__pad5__()'],['../unionSharpProtocol.html#a3ab9b37f4ad117e094210d7576e38d92',1,'SharpProtocol::__pad5__()'],['../unionTcl112Protocol.html#af7625c2439f53ca9b9865056d8c304b0',1,'Tcl112Protocol::__pad5__()'],['../unionToshibaProtocol.html#aea55884c83704873093edf6aa89e5515',1,'ToshibaProtocol::__pad5__()'],['../unionTrotecProtocol.html#a44b5f228f9f74a83f93d5d4d772b5b4c',1,'TrotecProtocol::__pad5__()'],['../unionTrumaProtocol.html#a158f1727d5503b42fa8b8289f5077c1c',1,'TrumaProtocol::__pad5__()'],['../unionVestelProtocol.html#a59279963eb0888f6f0669987f43c7440',1,'VestelProtocol::__pad5__()'],['../unionVoltasProtocol.html#af25903098b89acf7d2b6ebc08eea3ce5',1,'VoltasProtocol::__pad5__()'],['../unionWhirlpoolProtocol.html#a6cd9a96ce3841158165039b0e7e85bcc',1,'WhirlpoolProtocol::__pad5__()']]], - ['_5f_5fpad6_5f_5f_4590',['__pad6__',['../unionAmcorProtocol.html#ac7c9258f0465028a4d95468e9289a95e',1,'AmcorProtocol::__pad6__()'],['../unionArgoProtocol.html#a644f13f404fc89ac769437a1cf6ef5cc',1,'ArgoProtocol::__pad6__()'],['../unionCarrierProtocol.html#a683b70f292ffed7253b8956225a71a51',1,'CarrierProtocol::__pad6__()'],['../unionCoronaProtocol.html#aabdd6e87ab321b893f07461f755094c0',1,'CoronaProtocol::__pad6__()'],['../unionDaikinESPProtocol.html#a90b66e353330ccc293e1eb1011fd867c',1,'DaikinESPProtocol::__pad6__()'],['../unionDaikin2Protocol.html#a7ab72b8638708e7ccd77a8eddcd16222',1,'Daikin2Protocol::__pad6__()'],['../unionDaikin216Protocol.html#a69c25d121679d7f9809d7aaf3fd7dc2e',1,'Daikin216Protocol::__pad6__()'],['../unionDaikin160Protocol.html#af942373e7f265b12c5e1f8421384eec2',1,'Daikin160Protocol::__pad6__()'],['../unionDaikin152Protocol.html#a1767202bcd8ceb6e74af8a4ca0d2bee0',1,'Daikin152Protocol::__pad6__()'],['../unionElectraProtocol.html#a9e6ecfaa9e412c66289ce7053adb0b9b',1,'ElectraProtocol::__pad6__()'],['../unionFujitsuProtocol.html#a7cf469c79816ca98736f98ddb5748bd1',1,'FujitsuProtocol::__pad6__()'],['../unionGoodweatherProtocol.html#a426e1226b9b4427db41ab2b05ee6ed41',1,'GoodweatherProtocol::__pad6__()'],['../unionHaierYRW02Protocol.html#a03595ed00f070b0eecc647f426c2c9b1',1,'HaierYRW02Protocol::__pad6__()'],['../unionHitachi424Protocol.html#a6493b7bbcf755459eac23c47752c2ec4',1,'Hitachi424Protocol::__pad6__()'],['../unionKelvinatorProtocol.html#aa66ce8c926b143fa20f625272327f562',1,'KelvinatorProtocol::__pad6__()'],['../unionMitsubishi144Protocol.html#a4c0c204c7b2a5e74501064c648e2208e',1,'Mitsubishi144Protocol::__pad6__()'],['../unionMitsubishi112Protocol.html#aa4d66539685a6f96e7dd8fbe3d8e0107',1,'Mitsubishi112Protocol::__pad6__()'],['../unionMitsubishi152Protocol.html#abff52e55e71cd57b440094cd3dd9e115',1,'Mitsubishi152Protocol::__pad6__()'],['../unionNeoclimaProtocol.html#aad51233672b91f2ce68e950d4c50765e',1,'NeoclimaProtocol::__pad6__()'],['../unionSamsungProtocol.html#afa02814c4753f639a90ab6a23ef110d9',1,'SamsungProtocol::__pad6__()'],['../unionSanyoProtocol.html#a791ae08f3ba857068ae743192b59c82b',1,'SanyoProtocol::__pad6__()'],['../unionSharpProtocol.html#abedfd3c4badb1196e3e9b70a74288a56',1,'SharpProtocol::__pad6__()'],['../unionTcl112Protocol.html#a61cf175094f4bc60ab3af7f92d47d3ee',1,'Tcl112Protocol::__pad6__()'],['../unionToshibaProtocol.html#a70a740582720c7e99c1f0a19373e69eb',1,'ToshibaProtocol::__pad6__()'],['../unionTrotecProtocol.html#a66ea84463a2951cdc77ae7f08cd91600',1,'TrotecProtocol::__pad6__()'],['../unionVoltasProtocol.html#a1fc2d4c2b5792d53d364e61b84ca1fb0',1,'VoltasProtocol::__pad6__()'],['../unionWhirlpoolProtocol.html#a2918410c20d3861dda9c03e3ede1d802',1,'WhirlpoolProtocol::__pad6__()']]], - ['_5f_5fpad7_5f_5f_4591',['__pad7__',['../unionAmcorProtocol.html#a06dbf04a6bb3326c3277308bee61e375',1,'AmcorProtocol::__pad7__()'],['../unionArgoProtocol.html#a981cc0905966560692835630b870bc96',1,'ArgoProtocol::__pad7__()'],['../unionCarrierProtocol.html#a21fe681b7a9b1a507d03b6eef716f57d',1,'CarrierProtocol::__pad7__()'],['../unionCoronaProtocol.html#aa833c2aa87c8b67ded46784d9d9fd506',1,'CoronaProtocol::__pad7__()'],['../unionDaikinESPProtocol.html#a6800cde1656446518ea87f1118439b03',1,'DaikinESPProtocol::__pad7__()'],['../unionDaikin2Protocol.html#a6aa60bc17385c5e18c12e384a1d4c0a8',1,'Daikin2Protocol::__pad7__()'],['../unionDaikin152Protocol.html#ac4382a8fab79df328801f8ec55dc8e57',1,'Daikin152Protocol::__pad7__()'],['../unionElectraProtocol.html#a985fb931c2ddcc73fefd4c207ed3e1a9',1,'ElectraProtocol::__pad7__()'],['../unionFujitsuProtocol.html#adeff2904e753c8d964465732b86fc2c5',1,'FujitsuProtocol::__pad7__()'],['../unionHaierYRW02Protocol.html#a13f95461887012ca8a0d27ce71c65cb6',1,'HaierYRW02Protocol::__pad7__()'],['../unionKelvinatorProtocol.html#a02e3f067fc93fae6f5656abe574bb440',1,'KelvinatorProtocol::__pad7__()'],['../unionMitsubishi152Protocol.html#ae9fcb056173bc5189802a0854b86ec45',1,'Mitsubishi152Protocol::__pad7__()'],['../unionNeoclimaProtocol.html#a141f688a97a101159035a384da7aba21',1,'NeoclimaProtocol::__pad7__()'],['../unionSamsungProtocol.html#a9566b98e808ae427eb3f6091c46ba8cb',1,'SamsungProtocol::__pad7__()'],['../unionSanyoProtocol.html#a1193bfb80754a3d4393bb638f17bafc4',1,'SanyoProtocol::__pad7__()'],['../unionSharpProtocol.html#a97bd3208dfa6bc72a37aee33c419b1ec',1,'SharpProtocol::__pad7__()'],['../unionTcl112Protocol.html#adc928f47f29d1b4bf33e7bd35c9987bd',1,'Tcl112Protocol::__pad7__()'],['../unionToshibaProtocol.html#a722c3fbf8955ca74f2ce7d8c5106301e',1,'ToshibaProtocol::__pad7__()'],['../unionWhirlpoolProtocol.html#a06cd885d96a9cb40b173ed243e1c68f1',1,'WhirlpoolProtocol::__pad7__()']]], - ['_5f_5fpad8_5f_5f_4592',['__pad8__',['../unionAmcorProtocol.html#a7a602c91754a62acb96b65fad3ed5009',1,'AmcorProtocol::__pad8__()'],['../unionArgoProtocol.html#aada1e2f63bf852c820d3313d6bf55e2e',1,'ArgoProtocol::__pad8__()'],['../unionDaikinESPProtocol.html#a5257adef869633be571d00ff185e177b',1,'DaikinESPProtocol::__pad8__()'],['../unionDaikin2Protocol.html#ab0e5af627d95aa7d2a7ffecbeb34cd1e',1,'Daikin2Protocol::__pad8__()'],['../unionDaikin152Protocol.html#a36da6d6a07db0d3c4c559fb5319cf653',1,'Daikin152Protocol::__pad8__()'],['../unionElectraProtocol.html#aad3d9638d69b6a92f8e4205456d7b1e4',1,'ElectraProtocol::__pad8__()'],['../unionFujitsuProtocol.html#aaf3462eb6604ea7875995797805e69b1',1,'FujitsuProtocol::__pad8__()'],['../unionHaierYRW02Protocol.html#ab0640cdf0ae186ef0a75699bb2ab2247',1,'HaierYRW02Protocol::__pad8__()'],['../unionKelvinatorProtocol.html#ab2101275d6280bc95665d64ca936d4d2',1,'KelvinatorProtocol::__pad8__()'],['../unionMitsubishi152Protocol.html#acac643d9404b978f6f23e10dedee0076',1,'Mitsubishi152Protocol::__pad8__()'],['../unionNeoclimaProtocol.html#a96a021ba5d0cf5ffa0d8389b8c71f572',1,'NeoclimaProtocol::__pad8__()'],['../unionSamsungProtocol.html#a9c421e874b7ef2943cc7dfd37b35585f',1,'SamsungProtocol::__pad8__()'],['../unionSanyoProtocol.html#a41960ddb576d82e70010fa0699d88c74',1,'SanyoProtocol::__pad8__()'],['../unionSharpProtocol.html#a69a77f391ddca92c6ec7b26de9e1a4ea',1,'SharpProtocol::__pad8__()'],['../unionToshibaProtocol.html#afff1b9b96aa68e6d0772f361019e2684',1,'ToshibaProtocol::__pad8__()'],['../unionWhirlpoolProtocol.html#a00025b90681d37c8ee3daa93cf870a3d',1,'WhirlpoolProtocol::__pad8__()']]], - ['_5f_5fpad9_5f_5f_4593',['__pad9__',['../unionArgoProtocol.html#a38bc056c18e086e4ff91d86e33b0bc08',1,'ArgoProtocol::__pad9__()'],['../unionDaikinESPProtocol.html#a73486ab8f7374a19e40ffd20daae2304',1,'DaikinESPProtocol::__pad9__()'],['../unionDaikin2Protocol.html#a68031d2df7b64929392f391f0e37fdeb',1,'Daikin2Protocol::__pad9__()'],['../unionElectraProtocol.html#af1e208eaa64b08e027265f302e3fbe9d',1,'ElectraProtocol::__pad9__()'],['../unionFujitsuProtocol.html#a80f43087377c73374eacb06691dd8ba0',1,'FujitsuProtocol::__pad9__()'],['../unionHaierYRW02Protocol.html#ad5c197a23df2a768d022946347d765fe',1,'HaierYRW02Protocol::__pad9__()'],['../unionKelvinatorProtocol.html#aec71a5df4da5fd9a10e199d2112a88ce',1,'KelvinatorProtocol::__pad9__()'],['../unionMitsubishi152Protocol.html#aa96a8fa1d266927c2673472d459b0d66',1,'Mitsubishi152Protocol::__pad9__()'],['../unionNeoclimaProtocol.html#a1440db9fae372808b6360bcf60c39f03',1,'NeoclimaProtocol::__pad9__()'],['../unionSamsungProtocol.html#abcda913039808cf6b1cd7d6d8b01ce13',1,'SamsungProtocol::__pad9__()'],['../unionSanyoProtocol.html#ad6d6489ed793360fdee4b2167d1b4efb',1,'SanyoProtocol::__pad9__()'],['../unionSharpProtocol.html#a02c515fbdde1a15a8f19af0d9154e9d2',1,'SharpProtocol::__pad9__()'],['../unionWhirlpoolProtocol.html#aa7006fe4a8c77706762ec523838a7d5e',1,'WhirlpoolProtocol::__pad9__()']]], - ['_5fcmd_4594',['_cmd',['../classIRFujitsuAC.html#a5e66bc4a24b892525cfa02bb4d741cbf',1,'IRFujitsuAC']]], - ['_5fdesiredtemp_4595',['_desiredtemp',['../classIRWhirlpoolAc.html#aee17cfa10f19e0df992b25cff58e9613',1,'IRWhirlpoolAc']]], - ['_5fdutycycle_4596',['_dutycycle',['../classIRsend.html#a602e96e8cdbd6af41d288d905043e51f',1,'IRsend']]], - ['_5feconotoggle_4597',['_EconoToggle',['../classIRMideaAC.html#a30f184751948b4412da46577578b625a',1,'IRMideaAC']]], - ['_5ffan_4598',['_fan',['../classIRSharpAc.html#ad0f4e6025f2952c477bbd3f72a64d2fe',1,'IRSharpAc']]], - ['_5fforcepower_4599',['_forcepower',['../classIRSamsungAc.html#a022c96bfab671b1d0b6b5b331be31993',1,'IRSamsungAc']]], - ['_5ffreq_5funittest_4600',['_freq_unittest',['../classIRsend.html#a2caec2f35ecdb890b1e34d9eb3642363',1,'IRsend']]], - ['_5finverted_4601',['_inverted',['../classIRac.html#a9cfaa0b92819f06b3aa5b3e9e48b9d51',1,'IRac']]], - ['_5firsend_4602',['_irsend',['../classIRAirwellAc.html#a57a01d6e65f6fa1127f8d3dc86ff8071',1,'IRAirwellAc::_irsend()'],['../classIRAmcorAc.html#a6245bb51fa206031c3348e3eb6cb096d',1,'IRAmcorAc::_irsend()'],['../classIRArgoAC.html#a1abd8d958c3e153c4f2aaf7a3716414e',1,'IRArgoAC::_irsend()'],['../classIRCarrierAc64.html#a17270f2b1d6cab828e2a51fc23b36437',1,'IRCarrierAc64::_irsend()'],['../classIRCoolixAC.html#a6c7033e72fb860bca600ba6ea6e7afef',1,'IRCoolixAC::_irsend()'],['../classIRCoronaAc.html#afba5a3c3cff3859303a91d136ad00b66',1,'IRCoronaAc::_irsend()'],['../classIRDaikinESP.html#a2f5a8cb170d54f06bfa3eeb9b8ff838e',1,'IRDaikinESP::_irsend()'],['../classIRDaikin2.html#aa8ba00ae2c09af098146452164c4cb3b',1,'IRDaikin2::_irsend()'],['../classIRDaikin216.html#ac0e88b92a5c75138ce5b3a31f0c09be2',1,'IRDaikin216::_irsend()'],['../classIRDaikin160.html#a3094f35b359d8774a95dd3896c0e45e4',1,'IRDaikin160::_irsend()'],['../classIRDaikin176.html#a24f7022eb1c1936f5ee95ac0d732584c',1,'IRDaikin176::_irsend()'],['../classIRDaikin128.html#a1f155cc34e6c21d206962239d0135d1b',1,'IRDaikin128::_irsend()'],['../classIRDaikin152.html#a9b203215156d48dabac0fa8fd19dc613',1,'IRDaikin152::_irsend()'],['../classIRDaikin64.html#a6eb57b0eb12dab12bd9cf2fe4fded2c7',1,'IRDaikin64::_irsend()'],['../classIRDelonghiAc.html#a8cbe8b6857b7492c108118b4eda3ecb0',1,'IRDelonghiAc::_irsend()'],['../classIREcoclimAc.html#aa34348b379abce3ae540987c3b83ec4c',1,'IREcoclimAc::_irsend()'],['../classIRElectraAc.html#af8732b31f2a4421226220dd8a4a4f985',1,'IRElectraAc::_irsend()'],['../classIRFujitsuAC.html#a2b7fec218b3530b06ce8b49f472e9595',1,'IRFujitsuAC::_irsend()'],['../classIRGoodweatherAc.html#acf606eb9e024c99407138dbd058e98d9',1,'IRGoodweatherAc::_irsend()'],['../classIRGreeAC.html#a36390655badf0ad5b5809499a8634f70',1,'IRGreeAC::_irsend()'],['../classIRHaierAC.html#aec69643fe633a57d635754690225fdd1',1,'IRHaierAC::_irsend()'],['../classIRHaierACYRW02.html#a24dd00bfa5e062c5c7f459bcd60213b7',1,'IRHaierACYRW02::_irsend()'],['../classIRHitachiAc.html#a0e296fa54cc4c56e16c6fc58c7ad827f',1,'IRHitachiAc::_irsend()'],['../classIRHitachiAc1.html#a61ad6289fc3719a850299788e642b98b',1,'IRHitachiAc1::_irsend()'],['../classIRHitachiAc424.html#a39157a1bda46304429570be2880c6ec4',1,'IRHitachiAc424::_irsend()'],['../classIRHitachiAc3.html#a8dc3b713e29f3ea96a106868451ba728',1,'IRHitachiAc3::_irsend()'],['../classIRKelvinatorAC.html#ae3571bf6de20e47f81ad1da8f1d13118',1,'IRKelvinatorAC::_irsend()'],['../classIRLgAc.html#a779f321b65db6ad05ab3e578b38cf093',1,'IRLgAc::_irsend()'],['../classIRMideaAC.html#ae2b6068355ecdc360c4c2ca2fd8d921b',1,'IRMideaAC::_irsend()'],['../classIRMitsubishiAC.html#a6753b676690f35bc8ba73504fdc34946',1,'IRMitsubishiAC::_irsend()'],['../classIRMitsubishi136.html#acd14c7bb6b26d0603ee552a000e16d43',1,'IRMitsubishi136::_irsend()'],['../classIRMitsubishi112.html#af858d640f9b2fca053287f280c8a27c0',1,'IRMitsubishi112::_irsend()'],['../classIRMitsubishiHeavy152Ac.html#a1ebd4c8b06d64e0944358156f58d414e',1,'IRMitsubishiHeavy152Ac::_irsend()'],['../classIRMitsubishiHeavy88Ac.html#a1e999c9ee028d35c03cd6b4751bcb8be',1,'IRMitsubishiHeavy88Ac::_irsend()'],['../classIRNeoclimaAc.html#a43e42b1c7e68e5a85ed10454c6210be5',1,'IRNeoclimaAc::_irsend()'],['../classIRPanasonicAc.html#a065dcc65ef3dbb8f2384f883fb97d102',1,'IRPanasonicAc::_irsend()'],['../classIRPanasonicAc32.html#acc38daddd226f27b33835532041d5148',1,'IRPanasonicAc32::_irsend()'],['../classIRSamsungAc.html#a5815878dbebe512c41c26924cf9f5eeb',1,'IRSamsungAc::_irsend()'],['../classIRSanyoAc.html#a5dc78b02c5d10ac717542b67b65f15d6',1,'IRSanyoAc::_irsend()'],['../classIRSharpAc.html#a10ee598c31c0f8179ace953ed88e37c6',1,'IRSharpAc::_irsend()'],['../classIRTcl112Ac.html#a3f10e710a44c3a80f4f9ed5247b28058',1,'IRTcl112Ac::_irsend()'],['../classIRTechnibelAc.html#adb30f91c384028cc53aaae6edaacf3b0',1,'IRTechnibelAc::_irsend()'],['../classIRTechnibelAc.html#a9db7b15e279e0c17e0eafd8201d5c7dc',1,'IRTechnibelAc::_irsend()'],['../classIRTecoAc.html#a283ff8b73ef2998f0668d0a03cba0938',1,'IRTecoAc::_irsend()'],['../classIRToshibaAC.html#a694609136a9cbdb9af5f8bb98411c2eb',1,'IRToshibaAC::_irsend()'],['../classIRTranscoldAc.html#a3f7136d98c100a67b97f4f8afb750fc4',1,'IRTranscoldAc::_irsend()'],['../classIRTrotecESP.html#a1faa968fc2651dc1774160950e97a74e',1,'IRTrotecESP::_irsend()'],['../classIRTrumaAc.html#abd9d54c3185e53d25c870a8e89cb0e90',1,'IRTrumaAc::_irsend()'],['../classIRVestelAc.html#a56d35fc5d39c97b4c6f2decf176e2cae',1,'IRVestelAc::_irsend()'],['../classIRVoltas.html#a09225bcf0cdff72f0fe35a88a91a88ad',1,'IRVoltas::_irsend()'],['../classIRWhirlpoolAc.html#af4fdac2382048e2776c787bebd482e9e',1,'IRWhirlpoolAc::_irsend()']]], - ['_5firtimer_5funittest_5fnow_4603',['_IRtimer_unittest_now',['../IRtimer_8cpp.html#a4ac531aa761a28d68edbc12967038180',1,'IRtimer.cpp']]], - ['_5flastfan_4604',['_lastfan',['../classIRTrumaAc.html#a7793142d962316d930372ea6beac2069',1,'IRTrumaAc']]], - ['_5flastmode_4605',['_lastmode',['../classIRTrumaAc.html#a9e72a42def9956635765c6bfb54f333b',1,'IRTrumaAc']]], - ['_5flastsentpowerstate_4606',['_lastsentpowerstate',['../classIRSamsungAc.html#af1c6712dc05a451e815675abe972d9b4',1,'IRSamsungAc']]], - ['_5flighttoggle_4607',['_LightToggle',['../classIRMideaAC.html#ab466b5939e796f818203220e0ca6896d',1,'IRMideaAC']]], - ['_5fmode_4608',['_mode',['../classIRSharpAc.html#a169d5636aead556234dc301729050619',1,'IRSharpAc']]], - ['_5fmodel_4609',['_model',['../classIRFujitsuAC.html#a181c71dbd46ceabdcfe08448ee32bba7',1,'IRFujitsuAC::_model()'],['../classIRGreeAC.html#ae357bf1611f349e2686f4f46c2581c47',1,'IRGreeAC::_model()'],['../classIRSharpAc.html#a93ef10252142effe9fe52d2ad9787c6c',1,'IRSharpAc::_model()'],['../classIRVoltas.html#a01270b3d5e2b0d85a3ee860edb5c3232',1,'IRVoltas::_model()']]], - ['_5fmodulation_4610',['_modulation',['../classIRac.html#acc6b7380f11c38d13fffa99ca2189a9b',1,'IRac']]], - ['_5fpin_4611',['_pin',['../classIRac.html#aba78a2510d8cdcaf4c601e8b0574ae6c',1,'IRac']]], - ['_5fprev_4612',['_prev',['../classIRac.html#a8c63dc78c49f3714887fea0feefffd44',1,'IRac']]], - ['_5fprev_5fmode_4613',['_prev_mode',['../classIRToshibaAC.html#aed47a2b5df2c06438942b00852c45ace',1,'IRToshibaAC']]], - ['_5fprevioustemp_4614',['_previoustemp',['../classIRHitachiAc.html#a1368dcd7f4c0049822fd2b9b1e0acb5e',1,'IRHitachiAc::_previoustemp()'],['../classIRHitachiAc424.html#aba6c17936775e268744af23a4a533f92',1,'IRHitachiAc424::_previoustemp()']]], - ['_5fprotocol_4615',['_protocol',['../classIRLgAc.html#a9bd32e865a7358bbf32830d888e2786a',1,'IRLgAc']]], - ['_5fsaved_4616',['_saved',['../classIRCoolixAC.html#a24160742d72e8b1ee1069c9c6ddc57fa',1,'IRCoolixAC']]], - ['_5fsaved_5ftemp_4617',['_saved_temp',['../classIRDaikin176.html#a8f1d6c765bf09c1a3dc9678c3939a5be',1,'IRDaikin176::_saved_temp()'],['../classIRDelonghiAc.html#a724aa5748e714a7f0109a2f3502cd1d1',1,'IRDelonghiAc::_saved_temp()'],['../classIRTechnibelAc.html#a0b98069ac7367419f736fa0e639e4847',1,'IRTechnibelAc::_saved_temp()']]], - ['_5fsaved_5ftemp_5funits_4618',['_saved_temp_units',['../classIRDelonghiAc.html#a14fba6ccbc25da76744d28e7a40c385b',1,'IRDelonghiAc::_saved_temp_units()'],['../classIRTechnibelAc.html#a8d5a8e132e1d5884564f3212d396d160',1,'IRTechnibelAc::_saved_temp_units()']]], - ['_5fsend_5fswing_4619',['_send_swing',['../classIRToshibaAC.html#a3c0873667deefce7b13a051910d13046',1,'IRToshibaAC']]], - ['_5fstate_5flength_4620',['_state_length',['../classIRFujitsuAC.html#aea1819d0041f305e2c990f6f3eced865',1,'IRFujitsuAC']]], - ['_5fstate_5flength_5fshort_4621',['_state_length_short',['../classIRFujitsuAC.html#a7093cf32cd2e856ff692aebc732c1d50',1,'IRFujitsuAC']]], - ['_5fswing_5fmode_4622',['_swing_mode',['../classIRToshibaAC.html#a3d782a316cbadf2128a1392feda5c21b',1,'IRToshibaAC']]], - ['_5fswingh_4623',['_swingh',['../classIRPanasonicAc.html#ad0300ee66bcab38e13724520cb3226f9',1,'IRPanasonicAc']]], - ['_5fswingvstep_4624',['_SwingVStep',['../classIRMideaAC.html#a8a1c79c8a4b61075790faef879928c4b',1,'IRMideaAC']]], - ['_5fswingvtoggle_4625',['_SwingVToggle',['../classIRMideaAC.html#adb4318940487aea09116fe6b9f061470',1,'IRMideaAC']]], - ['_5ftemp_4626',['_temp',['../classIRLgAc.html#a1eeb727ee96c26b784a607aabd4577c9',1,'IRLgAc::_temp()'],['../classIRPanasonicAc.html#af6511e3c9745ff6750dc6fc3fdda21b3',1,'IRPanasonicAc::_temp()'],['../classIRSharpAc.html#a1d0a6274534123133217175920c7cd95',1,'IRSharpAc::_temp()']]], - ['_5ftimer_5fnum_4627',['_timer_num',['../classIRrecv.html#aff11c0c20735b16ce411088003607911',1,'IRrecv']]], - ['_5ftimerms_5funittest_5fnow_4628',['_TimerMs_unittest_now',['../IRtimer_8cpp.html#aed35ce7fa92ebb856a03f81e756cb2c6',1,'IRtimer.cpp']]], - ['_5ftolerance_4629',['_tolerance',['../classIRrecv.html#a0459a65dd31b215713ad66a1e4f3540e',1,'IRrecv']]], - ['_5fturbotoggle_4630',['_TurboToggle',['../classIRMideaAC.html#a86ee53513a7f47556f9cfe44d060e94c',1,'IRMideaAC']]], - ['_5funknown_5fthreshold_4631',['_unknown_threshold',['../classIRrecv.html#adb8cbc5c1cb739f33f5be25b3a6c79bd',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.html deleted file mode 100644 index 49fe59a12..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.js deleted file mode 100644 index 54e546c91..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_1.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['address_4632',['address',['../classdecode__results.html#a2858c3a5e28eccca95d44aaa87b70e9e',1,'decode_results']]], - ['airflow_4633',['AirFlow',['../unionGoodweatherProtocol.html#a7b876552a27a7a9bf84b1009f7b12f7a',1,'GoodweatherProtocol']]], - ['altmode_4634',['AltMode',['../unionDaikin176Protocol.html#a05511938e152951723792dc08b33d0dd',1,'Daikin176Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.html deleted file mode 100644 index 92982ac57..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.js deleted file mode 100644 index c6beb1162..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_10.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['quiet_6995',['Quiet',['../unionDaikinESPProtocol.html#af93324815f6be6cfc5d0d50af9e73aad',1,'DaikinESPProtocol::Quiet()'],['../unionDaikin2Protocol.html#afa111c9afbc94bcf52e9ba15b59c1bee',1,'Daikin2Protocol::Quiet()'],['../unionDaikin152Protocol.html#ac5bfe8541e53cb2732bfcbc71500ed32',1,'Daikin152Protocol::Quiet()'],['../unionKelvinatorProtocol.html#ac803fe14d6d21155418d2fe0543c9d9f',1,'KelvinatorProtocol::Quiet()'],['../structstdAc_1_1state__t.html#a251ad14e187a9905137e9e4e010c3e34',1,'stdAc::state_t::quiet()']]], - ['quiet1_6996',['Quiet1',['../unionSamsungProtocol.html#ac38e3f34f98ac3dae9738a1582dfeca6',1,'SamsungProtocol']]], - ['quiet5_6997',['Quiet5',['../unionSamsungProtocol.html#a94a9d2b42e1ab7a308d079322350c3f9',1,'SamsungProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.html deleted file mode 100644 index 94f1a8cf9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.js deleted file mode 100644 index 8e40ed291..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_11.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['raw_6998',['raw',['../unionAirwellProtocol.html#a984e1bba5afac9887c2ebb976a38d560',1,'AirwellProtocol::raw()'],['../unionAmcorProtocol.html#a2044da7ab12175f20657f18f4b76728b',1,'AmcorProtocol::raw()'],['../unionArgoProtocol.html#a845151d1f5062ab0116f3a413e23da8f',1,'ArgoProtocol::raw()'],['../unionCarrierProtocol.html#a1a09f5c8340a2e7e074a332bf4906dfd',1,'CarrierProtocol::raw()'],['../unionCoolixProtocol.html#a41c5b4f502fedd08d691ee44b1767a11',1,'CoolixProtocol::raw()'],['../unionCoronaProtocol.html#a16cbcc7f8542e9367a815efa4491c71b',1,'CoronaProtocol::raw()'],['../unionDaikinESPProtocol.html#a2875b60fdac6547968cf71976a6f5101',1,'DaikinESPProtocol::raw()'],['../unionDaikin2Protocol.html#a66a685c572a98c1a4f5598c6e61082fa',1,'Daikin2Protocol::raw()'],['../unionDaikin216Protocol.html#adaca3670dfbb98c2fb08bb996d88ebfa',1,'Daikin216Protocol::raw()'],['../unionDaikin160Protocol.html#afde716be26af9cb415102171b68d63ee',1,'Daikin160Protocol::raw()'],['../unionDaikin176Protocol.html#aa037609a71d25ca0dd9be53e7e4bc138',1,'Daikin176Protocol::raw()'],['../unionDaikin128Protocol.html#a6c6ece8bed97c5eb4335d50229c8469f',1,'Daikin128Protocol::raw()'],['../unionDaikin152Protocol.html#a363f93d1bd9e1466222503a194449cab',1,'Daikin152Protocol::raw()'],['../unionDaikin64Protocol.html#aca4063a77b19390e61697478c2e6706d',1,'Daikin64Protocol::raw()'],['../unionDelonghiProtocol.html#a5e82aa5e22fdbdb64b5232766b9ac7c2',1,'DelonghiProtocol::raw()'],['../unionEcoclimProtocol.html#af4c52ba1cf4306ddf149d26fc93c14e2',1,'EcoclimProtocol::raw()'],['../unionElectraProtocol.html#aad34141d26a6673df8fcb2bbfe3b0439',1,'ElectraProtocol::raw()'],['../unionGoodweatherProtocol.html#aea5a3a02cea21af0f42b63b7145709c9',1,'GoodweatherProtocol::raw()'],['../unionHaierYRW02Protocol.html#aa1607ceff9c90cbb78e446a98eb0fe52',1,'HaierYRW02Protocol::raw()'],['../unionHitachiProtocol.html#ab39a02f7cdf88ea4cdcd71c2f4be409a',1,'HitachiProtocol::raw()'],['../unionHitachi424Protocol.html#a0d1b33b2122247103476e7d33a125672',1,'Hitachi424Protocol::raw()'],['../unionHitachi1Protocol.html#ad02b8338e2b099f371d3c7366087caf4',1,'Hitachi1Protocol::raw()'],['../unionKelvinatorProtocol.html#a9d16ef4663c237f8217a081f71e96e44',1,'KelvinatorProtocol::raw()'],['../unionLGProtocol.html#a3255b9b6a3069f7b749b98ed22bf5378',1,'LGProtocol::raw()'],['../unionMitsubishi144Protocol.html#aae639c8be3c729e29b68e29ed7141d45',1,'Mitsubishi144Protocol::raw()'],['../unionMitsubishi136Protocol.html#ace7d2ec3beca925e4e8ede3398d13684',1,'Mitsubishi136Protocol::raw()'],['../unionMitsubishi112Protocol.html#adf74af634ab8ebeb0fd06e37fe86c641',1,'Mitsubishi112Protocol::raw()'],['../unionMitsubishi152Protocol.html#af0b9754d5fe5437768100f2e50581929',1,'Mitsubishi152Protocol::raw()'],['../unionMitsubishi88Protocol.html#a9b54684f51573a21d26d816df376ac6e',1,'Mitsubishi88Protocol::raw()'],['../unionNeoclimaProtocol.html#aa7591e6333f5266d5f9592c4c623083e',1,'NeoclimaProtocol::raw()'],['../unionPanasonicAc32Protocol.html#a3e93ce14cef274f4ac003f8ba54cec5d',1,'PanasonicAc32Protocol::raw()'],['../unionSamsungProtocol.html#ac0883f3aa613c5ff7c234a2a16a2585f',1,'SamsungProtocol::raw()'],['../unionSanyoProtocol.html#a5213248c1834d15af3d3f1ba94d4481e',1,'SanyoProtocol::raw()'],['../unionSharpProtocol.html#a0013861cb2cd4bc466177ea07d4dfdb8',1,'SharpProtocol::raw()'],['../unionTcl112Protocol.html#a1d1a6ffcb7076b1d6c742de1178c2420',1,'Tcl112Protocol::raw()'],['../unionTechnibelProtocol.html#a56e1c8a038404cd900e438f3e0db8567',1,'TechnibelProtocol::raw()'],['../unionTecoProtocol.html#aaab0e91ca6ea4d346589d4b8db12b72c',1,'TecoProtocol::raw()'],['../unionToshibaProtocol.html#a2f5742d891e33106fd55acc4f2898012',1,'ToshibaProtocol::raw()'],['../unionTranscoldProtocol.html#a054af4c474a87583c1106a5f2a7e83e7',1,'TranscoldProtocol::raw()'],['../unionTrotecProtocol.html#aaf54633e6ddaf5dddf63adc904f117dd',1,'TrotecProtocol::raw()'],['../unionTrumaProtocol.html#aa4902b2b89193e0c317bbb46208a0730',1,'TrumaProtocol::raw()'],['../unionVoltasProtocol.html#aef55de7b215b4dd5d36d0bd7b542a85b',1,'VoltasProtocol::raw()'],['../unionWhirlpoolProtocol.html#a6b9f13431fc739a77cc719e69a0b0467',1,'WhirlpoolProtocol::raw()']]], - ['rawbuf_6999',['rawbuf',['../structirparams__t.html#a6f8a82b51fa206a8cb195e5838aa0cb3',1,'irparams_t::rawbuf()'],['../classdecode__results.html#a19043dc161cd5e0d3dcc82b5a7470e49',1,'decode_results::rawbuf()']]], - ['rawlen_7000',['rawlen',['../structirparams__t.html#a08e83386c65a90038e0d4922f1f6aa84',1,'irparams_t::rawlen()'],['../classdecode__results.html#a913e19fc5032fa1f97cf8afe0fa450ec',1,'decode_results::rawlen()']]], - ['rcvstate_7001',['rcvstate',['../structirparams__t.html#a63354788dab4569f4092cd05e77f0260',1,'irparams_t']]], - ['recvpin_7002',['recvpin',['../structirparams__t.html#a50da5aa1c42a69b01d50ea688db67d14',1,'irparams_t']]], - ['remote_5fstate_7003',['remote_state',['../unionGreeProtocol.html#ae034ac3966312175d26fe1817108d7a4',1,'GreeProtocol::remote_state()'],['../unionHaierProtocol.html#af8966fa819bcb51f496ec185130bcf0f',1,'HaierProtocol::remote_state()'],['../classIRHitachiAc3.html#a5602ded229a41796c205519449f7d509',1,'IRHitachiAc3::remote_state()'],['../unionMideaProtocol.html#a8d696bb16d652ef6d582014049be2bbb',1,'MideaProtocol::remote_state()'],['../classIRPanasonicAc.html#a85d5118c0ed947cc77f2ed94b0d44e4a',1,'IRPanasonicAc::remote_state()']]], - ['repeat_7004',['repeat',['../classdecode__results.html#a09da48786fe3966cd5621840fd771bfa',1,'decode_results']]], - ['restlength_7005',['RestLength',['../unionFujitsuProtocol.html#aa402d7b8ee039662954138ec4863fbcb',1,'FujitsuProtocol']]], - ['roomtemp_7006',['RoomTemp',['../unionArgoProtocol.html#a35f91863997bb886da9fc6a303e62c65',1,'ArgoProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.html deleted file mode 100644 index 61c013a4e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.js deleted file mode 100644 index 04b273a4d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_12.js +++ /dev/null @@ -1,47 +0,0 @@ -var searchData= -[ - ['save_7007',['Save',['../unionTecoProtocol.html#ae724fb83aed6d33cc43ec4ded5307983',1,'TecoProtocol']]], - ['savedfan_7008',['savedFan',['../classIRCoolixAC.html#a5645cc98a1b1c509729544c09dc77fbf',1,'IRCoolixAC']]], - ['scrap_7009',['scrap',['../unionmagiquest.html#afd0bcf9a87f0fa2db87b68b211952a73',1,'magiquest']]], - ['sections_7010',['sections',['../unionCoronaProtocol.html#ae7cdfa7315fae2be9aa64f57b10b325a',1,'CoronaProtocol']]], - ['sensor_7011',['Sensor',['../unionDaikinESPProtocol.html#a9cdca7efde034c19bc1bd3da5c204ec9',1,'DaikinESPProtocol::Sensor()'],['../unionDaikin152Protocol.html#a4bbb04adc012732ba03820a2f8632a2a',1,'Daikin152Protocol::Sensor()'],['../unionSanyoProtocol.html#ad71145ae23e81d6a934149402788d6c8',1,'SanyoProtocol::Sensor()']]], - ['sensortemp_7012',['SensorTemp',['../unionCoolixProtocol.html#a3213a8e821e4f8dc89240b1aa429ab9d',1,'CoolixProtocol::SensorTemp()'],['../unionEcoclimProtocol.html#a35648af709ab62a606481bd73cc72e14',1,'EcoclimProtocol::SensorTemp()'],['../unionMideaProtocol.html#a2ce21157e61749f4d1c3b14fd0b6cfe8',1,'MideaProtocol::SensorTemp()'],['../unionSanyoProtocol.html#a2221111b02f522b4e482b21edfd3dd39',1,'SanyoProtocol::SensorTemp()']]], - ['shortcode_7013',['shortcode',['../unionFujitsuProtocol.html#a37fb86943f1b72293a8ac515b42ea4a0',1,'FujitsuProtocol']]], - ['shortmsg_7014',['ShortMsg',['../unionToshibaProtocol.html#ad82a92de12d4bf814dd93cbde958a9b8',1,'ToshibaProtocol']]], - ['sig_7015',['Sig',['../unionMitsubishi152Protocol.html#a3e212768123e252ab4c17cec54084ddc',1,'Mitsubishi152Protocol::Sig()'],['../unionMitsubishi88Protocol.html#a7334ae1a2beac4e7db68817d715780f8',1,'Mitsubishi88Protocol::Sig()']]], - ['sign_7016',['Sign',['../unionLGProtocol.html#a0ce79a58c9afe05d8f88a246f1e4e38c',1,'LGProtocol']]], - ['signature_7017',['Signature',['../unionVestelProtocol.html#a04f21c296b64b6446e084286042cc43e',1,'VestelProtocol']]], - ['silent_7018',['Silent',['../unionMitsubishi152Protocol.html#af3a374268ed6de973571de1104a1e3b6',1,'Mitsubishi152Protocol']]], - ['sleep_7019',['Sleep',['../unionCarrierProtocol.html#a957ac027dec4e1942d88ac8f7bcbc767',1,'CarrierProtocol::Sleep()'],['../unionDaikin128Protocol.html#a6d8c864358deaac3e8af9e3c7160acdb',1,'Daikin128Protocol::Sleep()'],['../unionDaikin64Protocol.html#ad97e50c0e3dee468254d84f0ffeab71a',1,'Daikin64Protocol::Sleep()'],['../unionDelonghiProtocol.html#a8ae7e6b8982693fc0cff79dcc5352cc5',1,'DelonghiProtocol::Sleep()'],['../unionGoodweatherProtocol.html#ab5b363c97de0b9ea362335914202aa5d',1,'GoodweatherProtocol::Sleep()'],['../unionGreeProtocol.html#a1ea579a0c99eb1dc8fd72867519ab258',1,'GreeProtocol::Sleep()'],['../unionHaierProtocol.html#a88942d48d868ff5697040d5a89f93099',1,'HaierProtocol::Sleep()'],['../unionHaierYRW02Protocol.html#a0b0ad77222892e9fccf122fcee95d87d',1,'HaierYRW02Protocol::Sleep()'],['../unionHitachi1Protocol.html#a6f7f771174da0e309c817d1e1b8dad04',1,'Hitachi1Protocol::Sleep()'],['../unionMideaProtocol.html#aeea5e2520e4cd1773c1eddc8a84af2d3',1,'MideaProtocol::Sleep()'],['../unionNeoclimaProtocol.html#ac43619a2a36e6e904f1ccfc727705d0f',1,'NeoclimaProtocol::Sleep()'],['../unionSanyoProtocol.html#a30ddc4048f18df21a0ba9a1ceb6ed04f',1,'SanyoProtocol::Sleep()'],['../unionTechnibelProtocol.html#a0b2415893ee58c78aab7d5da9dc0ac9a',1,'TechnibelProtocol::Sleep()'],['../unionTecoProtocol.html#a1e154eb394b329d0a4bcda1f99f10b3a',1,'TecoProtocol::Sleep()'],['../unionTrotecProtocol.html#a7e608cfd2be86c98ef165d82224d12e0',1,'TrotecProtocol::Sleep()'],['../unionVoltasProtocol.html#a1a47a7e57717d28e610e97b40e86b1ca',1,'VoltasProtocol::Sleep()'],['../unionWhirlpoolProtocol.html#aa8c066a535606fca820875eb16275b04',1,'WhirlpoolProtocol::Sleep()'],['../structstdAc_1_1state__t.html#a94fa6098d7422292a1c6943973cd106a',1,'stdAc::state_t::sleep()']]], - ['sleepflag_7020',['sleepFlag',['../classIRCoolixAC.html#a26560e04d1f77830e40e5570845b9e06',1,'IRCoolixAC']]], - ['sleeptimer_7021',['SleepTimer',['../unionDaikin2Protocol.html#a08f4a54ef2100e9afc8d360d6f1f809b',1,'Daikin2Protocol']]], - ['special_7022',['Special',['../unionSharpProtocol.html#a6a7b512b5cfb2103b562ba7ceb8ab318',1,'SharpProtocol']]], - ['special_5fstate_7023',['special_state',['../classIRTranscoldAc.html#a634858a8d3987fa95cb355083c1276da',1,'IRTranscoldAc']]], - ['start_7024',['start',['../classIRtimer.html#aaa087b8688ff8150e0fc1ec6d5c4a52a',1,'IRtimer::start()'],['../classTimerMs.html#a15ad2e08a5931397391d48f040722f65',1,'TimerMs::start()']]], - ['startclock_7025',['StartClock',['../unionMitsubishi144Protocol.html#a2b3fcf0371639b6c73c152c671ae3b66',1,'Mitsubishi144Protocol']]], - ['state_7026',['state',['../classdecode__results.html#aaeb4b1b2e950bdd181582c385b2f4305',1,'decode_results']]], - ['stopclock_7027',['StopClock',['../unionMitsubishi144Protocol.html#a827da42e7df246a6849223430412e051',1,'Mitsubishi144Protocol']]], - ['success_7028',['success',['../structmatch__result__t.html#a13fe18ae6cf89364df443a64295b2f90',1,'match_result_t']]], - ['sum_7029',['Sum',['../unionAmcorProtocol.html#a108cf161abbbdd7ae4178f70066e8ae6',1,'AmcorProtocol::Sum()'],['../unionArgoProtocol.html#ab0ec3039d81a3a2a6c8b44f5c64d2fae',1,'ArgoProtocol::Sum()'],['../unionCarrierProtocol.html#acbbf207e7a0e79d74713e6f8598c16c2',1,'CarrierProtocol::Sum()'],['../unionDaikin152Protocol.html#ab9d2826560480612000ff57967c949ce',1,'Daikin152Protocol::Sum()'],['../unionDaikin64Protocol.html#add19fb01e106fe9dd759a33870378b64',1,'Daikin64Protocol::Sum()'],['../unionDelonghiProtocol.html#a9f7a2ecd94db83a8673e8929b373a036',1,'DelonghiProtocol::Sum()'],['../unionElectraProtocol.html#a06f949386cbc460b017f5a2da4a2c557',1,'ElectraProtocol::Sum()'],['../unionGreeProtocol.html#a7502111538873c23d70129b77a26019e',1,'GreeProtocol::Sum()'],['../unionHaierProtocol.html#a5842a170e3cdd0ad823cf244c7b8dd51',1,'HaierProtocol::Sum()'],['../unionHaierYRW02Protocol.html#a656449e6901b3333ca0efe4a2e662fc7',1,'HaierYRW02Protocol::Sum()'],['../unionHitachiProtocol.html#a7917d5fe64dc17c4240286d113edffbf',1,'HitachiProtocol::Sum()'],['../unionHitachi1Protocol.html#af8695d17dd292292c1a395fca1052d0d',1,'Hitachi1Protocol::Sum()'],['../unionLGProtocol.html#a8f527a8f4b6235ca01bb96ed9cce8fcd',1,'LGProtocol::Sum()'],['../unionMideaProtocol.html#a3d4afe5411a769c48e8bfaa3a9e8e84c',1,'MideaProtocol::Sum()'],['../unionMitsubishi144Protocol.html#a50ccc136c9cb813e62731c0e91e1bb18',1,'Mitsubishi144Protocol::Sum()'],['../unionMitsubishi112Protocol.html#a167d9e324351844304624224ebd6c54e',1,'Mitsubishi112Protocol::Sum()'],['../unionNeoclimaProtocol.html#aa1be79f892a05e91733539899ce243d1',1,'NeoclimaProtocol::Sum()'],['../unionSanyoProtocol.html#a4873098c3fca0d6f9b43ba1ecdfb5252',1,'SanyoProtocol::Sum()'],['../unionSharpProtocol.html#a4cfdeea6c7a9b0e808e1b6dcf1584710',1,'SharpProtocol::Sum()'],['../unionTcl112Protocol.html#a5d46a94c80989ecfd47c86028ab69662',1,'Tcl112Protocol::Sum()'],['../unionTechnibelProtocol.html#ac749e8bb30f13d62819204deb36256bb',1,'TechnibelProtocol::Sum()'],['../unionTrotecProtocol.html#a6b4daa2398f213d1002d48e1371cd6c0',1,'TrotecProtocol::Sum()'],['../unionTrumaProtocol.html#a3d8915bbafe0bb431a89310ff8a43653',1,'TrumaProtocol::Sum()']]], - ['sum1_7030',['Sum1',['../unionDaikinESPProtocol.html#a149da481f13ce5a29ce31a3dce8e8cb0',1,'DaikinESPProtocol::Sum1()'],['../unionDaikin2Protocol.html#ab38b622ad6d915d30d696b31664a94f4',1,'Daikin2Protocol::Sum1()'],['../unionDaikin216Protocol.html#af5a0be12a198c7398a3b85aea0ca321f',1,'Daikin216Protocol::Sum1()'],['../unionDaikin160Protocol.html#ade9652651eb01aab9777c9a6244d41a1',1,'Daikin160Protocol::Sum1()'],['../unionDaikin176Protocol.html#a2acfd274cfe47a17603ff382c2948695',1,'Daikin176Protocol::Sum1()'],['../unionDaikin128Protocol.html#a72cbe31d6a6efa72c3be3a5f97a33d9a',1,'Daikin128Protocol::Sum1()'],['../unionKelvinatorProtocol.html#a11960442c40eb23519d44c3daa354d4f',1,'KelvinatorProtocol::Sum1()'],['../unionSamsungProtocol.html#a1fe6cb13d6faf1b6d671ca057558669e',1,'SamsungProtocol::Sum1()'],['../unionWhirlpoolProtocol.html#a2d9fc7639cd9b5bd18b125d99fa0a26e',1,'WhirlpoolProtocol::Sum1()']]], - ['sum2_7031',['Sum2',['../unionDaikinESPProtocol.html#a23ab8932c3c7fc9ffb79a4540458f1e8',1,'DaikinESPProtocol::Sum2()'],['../unionDaikin2Protocol.html#a8c6c9f26a55cf656e4dd7043e3c8e9cb',1,'Daikin2Protocol::Sum2()'],['../unionDaikin216Protocol.html#a190893ad04cf10e16f2c15dc025bb683',1,'Daikin216Protocol::Sum2()'],['../unionDaikin160Protocol.html#a0c0c7e34389309a1b780f2518d0528bd',1,'Daikin160Protocol::Sum2()'],['../unionDaikin176Protocol.html#ae797bea46028cd4a19c42746ba4f3d65',1,'Daikin176Protocol::Sum2()'],['../unionDaikin128Protocol.html#a19162e554dbd868382130d39e4fbf221',1,'Daikin128Protocol::Sum2()'],['../unionKelvinatorProtocol.html#aade6e576f735c6ef84c11062175f0013',1,'KelvinatorProtocol::Sum2()'],['../unionSamsungProtocol.html#a73be0a77d7bd16a28befba84eafe79fa',1,'SamsungProtocol::Sum2()'],['../unionWhirlpoolProtocol.html#a17ac6562d12278e9fe52695e5175e8ed',1,'WhirlpoolProtocol::Sum2()']]], - ['sum3_7032',['Sum3',['../unionDaikinESPProtocol.html#a94351ee2b8b5090cb0934f21ebcd195c',1,'DaikinESPProtocol']]], - ['super1_7033',['Super1',['../unionWhirlpoolProtocol.html#abed3697b1a9697d1b95991c6ee7cded8',1,'WhirlpoolProtocol']]], - ['super2_7034',['Super2',['../unionWhirlpoolProtocol.html#ae61909ca04d65db8282a51aa697a519f',1,'WhirlpoolProtocol']]], - ['swing_7035',['Swing',['../unionFujitsuProtocol.html#af86bba40fd05a9538d1dca0a02196282',1,'FujitsuProtocol::Swing()'],['../unionGoodweatherProtocol.html#a0a9be72f6b174f5bc4f4082f3afd93b1',1,'GoodweatherProtocol::Swing()'],['../unionGreeProtocol.html#a6ee1b2c7459fcd5ed839a7730a2c5931',1,'GreeProtocol::Swing()'],['../unionHaierProtocol.html#afc7ba334ae13911868d90c2fe37813b9',1,'HaierProtocol::Swing()'],['../unionHaierYRW02Protocol.html#a671ff83501bd3e6f6e5c2b08bb6d26d1',1,'HaierYRW02Protocol::Swing()'],['../unionSamsungProtocol.html#ad63e66ad39ded5ff568325b2cc2913e6',1,'SamsungProtocol::Swing()'],['../unionSharpProtocol.html#aaf3716e85768e55ae39083b702e51b23',1,'SharpProtocol::Swing()'],['../unionTechnibelProtocol.html#ad65f35496e1a8801807f12b0fb151bfd',1,'TechnibelProtocol::Swing()'],['../unionTecoProtocol.html#a515148adf18ffca1dcab693a8e063479',1,'TecoProtocol::Swing()'],['../unionToshibaProtocol.html#a7055dad465b9500ce8654ebb517cb363',1,'ToshibaProtocol::Swing()'],['../unionVestelProtocol.html#a885f7bf3caef01109e22fa376e39b272',1,'VestelProtocol::Swing()']]], - ['swing1_7036',['Swing1',['../unionWhirlpoolProtocol.html#a0553a73ef3aa9a490e461ab9e8258084',1,'WhirlpoolProtocol']]], - ['swing2_7037',['Swing2',['../unionWhirlpoolProtocol.html#a0b7a02e7a75a8a761a4bbafd77c0d355',1,'WhirlpoolProtocol']]], - ['swingauto_7038',['SwingAuto',['../unionGreeProtocol.html#a866257731360d655ffa24ba3fbdfa3cc',1,'GreeProtocol']]], - ['swingflag_7039',['swingFlag',['../classIRCoolixAC.html#a6d61903a90cebef56b931bebbfa5cba3',1,'IRCoolixAC::swingFlag()'],['../classIRTranscoldAc.html#acaaa6c7fc022b3a259692bfd61258f49',1,'IRTranscoldAc::swingFlag()']]], - ['swingh_7040',['swingh',['../structstdAc_1_1state__t.html#a761bb702891ed1fa35906929a4c8a3f8',1,'stdAc::state_t::swingh()'],['../unionDaikinESPProtocol.html#af3dacc4757d42c204532551565d05013',1,'DaikinESPProtocol::SwingH()'],['../unionDaikin2Protocol.html#a2763869384806cdbb8b9eeec419fddb5',1,'Daikin2Protocol::SwingH()'],['../unionDaikin216Protocol.html#a3e024277a27b1bb20d66c8a01a5d4abf',1,'Daikin216Protocol::SwingH()'],['../unionDaikin176Protocol.html#a1c66607da26b68ab359def3884112bbc',1,'Daikin176Protocol::SwingH()'],['../unionElectraProtocol.html#ac265663bdb90f785a5c3a3d452101a03',1,'ElectraProtocol::SwingH()'],['../unionHitachiProtocol.html#adc2e2a72df76b96392db614103476ad1',1,'HitachiProtocol::SwingH()'],['../unionHitachi424Protocol.html#aca9d734f4809828027727ba0ec5fb56f',1,'Hitachi424Protocol::SwingH()'],['../unionHitachi1Protocol.html#a8d623507f6042e6a2a7b38711d972b1d',1,'Hitachi1Protocol::SwingH()'],['../unionKelvinatorProtocol.html#aa00bcaec92896c766d0c59edfd19fa0c',1,'KelvinatorProtocol::SwingH()'],['../unionMitsubishi112Protocol.html#a06f3c53c43e8e12a171570bcbc44b722',1,'Mitsubishi112Protocol::SwingH()'],['../unionMitsubishi152Protocol.html#a6ff8b8c4309663ca8abffc6d5022e13a',1,'Mitsubishi152Protocol::SwingH()'],['../unionNeoclimaProtocol.html#a2df2379997121fa8e22a98d7ccfe7b0a',1,'NeoclimaProtocol::SwingH()'],['../unionPanasonicAc32Protocol.html#ad2150fa0dbf816d48818969100ea1ac1',1,'PanasonicAc32Protocol::SwingH()'],['../unionTcl112Protocol.html#ac10dd12d472bf3a9f632b645e48a1c7f',1,'Tcl112Protocol::SwingH()'],['../unionVoltasProtocol.html#a55094a8796bf95e81eb7dd9a91d7a127',1,'VoltasProtocol::SwingH()']]], - ['swingh1_7041',['SwingH1',['../unionMitsubishi88Protocol.html#a25360a714725166199b45ee26ddbe6d7',1,'Mitsubishi88Protocol']]], - ['swingh2_7042',['SwingH2',['../unionMitsubishi88Protocol.html#ad175a3bea6aa442e1de553be6f352b32',1,'Mitsubishi88Protocol']]], - ['swinghchange_7043',['SwingHChange',['../unionVoltasProtocol.html#a32c53808a0f8b6574025f2b3c721ae47',1,'VoltasProtocol']]], - ['swinghflag_7044',['swingHFlag',['../classIRTranscoldAc.html#a15da6840a234b2ff739a86d19f15c58d',1,'IRTranscoldAc']]], - ['swingtoggle_7045',['SwingToggle',['../unionHitachi1Protocol.html#a479a73b38e4f079d7d0e221bb6814a45',1,'Hitachi1Protocol']]], - ['swingv_7046',['swingv',['../structstdAc_1_1state__t.html#a35477d368350d8981ad8b7b09505857e',1,'stdAc::state_t::swingv()'],['../unionCarrierProtocol.html#a9d08c75d7f8357139cd3d844cf29ca22',1,'CarrierProtocol::SwingV()'],['../unionDaikinESPProtocol.html#abaa6622e63357ff194ec473d763e6347',1,'DaikinESPProtocol::SwingV()'],['../unionDaikin2Protocol.html#ad54bd084ae49600bc02d5de9d557b24f',1,'Daikin2Protocol::SwingV()'],['../unionDaikin216Protocol.html#a09abba3b50a33d8d549a0554099b639b',1,'Daikin216Protocol::SwingV()'],['../unionDaikin160Protocol.html#af3ecc8b83528477acdfc2a10352f09e3',1,'Daikin160Protocol::SwingV()'],['../unionDaikin128Protocol.html#a9c0f7c9d691a97ce316ef5b76fb1cafd',1,'Daikin128Protocol::SwingV()'],['../unionDaikin152Protocol.html#a72a99dc5a7497285a7f1e2a0cac7dab8',1,'Daikin152Protocol::SwingV()'],['../unionDaikin64Protocol.html#a5c14fc6cba6aa76a75452808717ee507',1,'Daikin64Protocol::SwingV()'],['../unionElectraProtocol.html#a1f04f248d66f0890548f3cfe4e269beb',1,'ElectraProtocol::SwingV()'],['../unionHitachiProtocol.html#a31530689da10bfae60d005039c6ab596',1,'HitachiProtocol::SwingV()'],['../unionHitachi424Protocol.html#afa4ca85beef441434700d09a09fb60c7',1,'Hitachi424Protocol::SwingV()'],['../unionHitachi1Protocol.html#a73473181cf6a1fce2ea4874ba29552be',1,'Hitachi1Protocol::SwingV()'],['../unionKelvinatorProtocol.html#abd01a8f9d88b44f59484955107d9b7bb',1,'KelvinatorProtocol::SwingV()'],['../unionMitsubishi136Protocol.html#a24b4d22d88ac7630c1fcdccd964d013b',1,'Mitsubishi136Protocol::SwingV()'],['../unionMitsubishi112Protocol.html#a4de8c60641ea95f8f2b875d13f87f594',1,'Mitsubishi112Protocol::SwingV()'],['../unionMitsubishi152Protocol.html#a3ae158a863e0ade1d64cc62a9cc7a374',1,'Mitsubishi152Protocol::SwingV()'],['../unionNeoclimaProtocol.html#a5c8407706693a73ff3716ba857e56e8f',1,'NeoclimaProtocol::SwingV()'],['../unionPanasonicAc32Protocol.html#ad72c8342fd1bcf04c0244934ac6a1172',1,'PanasonicAc32Protocol::SwingV()'],['../unionSanyoProtocol.html#ad3384be2dd09a39be41ebf2bae5e7480',1,'SanyoProtocol::SwingV()'],['../unionTcl112Protocol.html#a4d4ec9093ad1cb4457e004e21545d1a7',1,'Tcl112Protocol::SwingV()'],['../unionVoltasProtocol.html#ac2a240ab6b19af0e472c3134331a6e68',1,'VoltasProtocol::SwingV()']]], - ['swingv5_7047',['SwingV5',['../unionMitsubishi88Protocol.html#aaa1b4fc42a673c7437373d85b2e22c26',1,'Mitsubishi88Protocol']]], - ['swingv7_7048',['SwingV7',['../unionMitsubishi88Protocol.html#aa56bc52d2d6ec0d2f76aea923e084856',1,'Mitsubishi88Protocol']]], - ['swingvflag_7049',['swingVFlag',['../classIRTranscoldAc.html#ae2aa4d5a19dd9056606ca20d03c893df',1,'IRTranscoldAc']]], - ['swingvtoggle_7050',['SwingVToggle',['../unionCoronaProtocol.html#a3b21dc7f46b2153be56daeca1b0b40e8',1,'CoronaProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.html deleted file mode 100644 index 87b7ca676..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.js deleted file mode 100644 index 684c89836..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_13.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['temp_7051',['Temp',['../unionAirwellProtocol.html#a5a6bd2772f3b9b5898ea84cf272cdf87',1,'AirwellProtocol::Temp()'],['../unionAmcorProtocol.html#a93dac8f8fa9796452fc67be02ac154cd',1,'AmcorProtocol::Temp()'],['../unionArgoProtocol.html#a928a356c79acc2b56ffeea8e536d9e98',1,'ArgoProtocol::Temp()'],['../unionCarrierProtocol.html#a43fb183022e8b4aef36bee0cb0cd9aaa',1,'CarrierProtocol::Temp()'],['../unionCoolixProtocol.html#a3d7fee6490b9d5f1a66e2f229760d7b7',1,'CoolixProtocol::Temp()'],['../unionCoronaProtocol.html#a18002c42df09d30705af1ebd4c5cd2e3',1,'CoronaProtocol::Temp()'],['../unionDaikinESPProtocol.html#a0ad595273164311e5038c0fac53145a5',1,'DaikinESPProtocol::Temp()'],['../unionDaikin2Protocol.html#ab028d2a7dc019e9389134bcc9bc89e7f',1,'Daikin2Protocol::Temp()'],['../unionDaikin216Protocol.html#adedf9354b1605903bb0fc69dfc087fed',1,'Daikin216Protocol::Temp()'],['../unionDaikin160Protocol.html#ac050e5317af867a602da555ff5c0f445',1,'Daikin160Protocol::Temp()'],['../unionDaikin176Protocol.html#ad6de066afd97c966ad50bb2e578102c2',1,'Daikin176Protocol::Temp()'],['../unionDaikin128Protocol.html#a38ecd43c273a4460417218c1dbd5002f',1,'Daikin128Protocol::Temp()'],['../unionDaikin152Protocol.html#a53bd877ac22cf1beee6a369e94f6ef8b',1,'Daikin152Protocol::Temp()'],['../unionDaikin64Protocol.html#a2d5cc94de8060dc28a611f417a67cdf6',1,'Daikin64Protocol::Temp()'],['../unionDelonghiProtocol.html#a39bdc64b05d4cc3c55c9b33779a2b673',1,'DelonghiProtocol::Temp()'],['../unionEcoclimProtocol.html#af88e83a0f5f4ef72e44070afc5db6acb',1,'EcoclimProtocol::Temp()'],['../unionElectraProtocol.html#acfa59481898d71fc31174c82ff30a7cf',1,'ElectraProtocol::Temp()'],['../unionFujitsuProtocol.html#a44d3a88ea8d71a78f6905571154872a5',1,'FujitsuProtocol::Temp()'],['../unionGoodweatherProtocol.html#a52cc284981b27dab58eb8c6ccce164aa',1,'GoodweatherProtocol::Temp()'],['../unionGreeProtocol.html#a46075a9f5fbd0d3829a84cca3d4a9d4f',1,'GreeProtocol::Temp()'],['../unionHaierProtocol.html#affb6ef60b50ae3351393e3f168ae8f2f',1,'HaierProtocol::Temp()'],['../unionHaierYRW02Protocol.html#a19211a1af7d11da6034b87cb7a042fcd',1,'HaierYRW02Protocol::Temp()'],['../unionHitachiProtocol.html#a82506fdbc1e1dded01ff0b148b63aefc',1,'HitachiProtocol::Temp()'],['../unionHitachi424Protocol.html#a55d9783eb1187ac86d1cf7ef97c220c4',1,'Hitachi424Protocol::Temp()'],['../unionHitachi1Protocol.html#acec70cd3c02926c3cfb596a30795d576',1,'Hitachi1Protocol::Temp()'],['../unionKelvinatorProtocol.html#a2ad164ea50b7501e9b04352aa283ddce',1,'KelvinatorProtocol::Temp()'],['../unionLGProtocol.html#ae556c7e3100b062ec21581cbe61f126a',1,'LGProtocol::Temp()'],['../unionMideaProtocol.html#a4206c02c5cafe996c05d92beb7a7e8d6',1,'MideaProtocol::Temp()'],['../unionMitsubishi144Protocol.html#a1bd567c01d07cedb0475097b4fc46195',1,'Mitsubishi144Protocol::Temp()'],['../unionMitsubishi136Protocol.html#abd84c910c48418162a7647cda2d13b48',1,'Mitsubishi136Protocol::Temp()'],['../unionMitsubishi112Protocol.html#aa15bf2e818b1988fa790e36d2237f105',1,'Mitsubishi112Protocol::Temp()'],['../unionMitsubishi152Protocol.html#a2608f42bbdacb6b5cca759affaa57fce',1,'Mitsubishi152Protocol::Temp()'],['../unionMitsubishi88Protocol.html#abae8097bf27a43d95fb486ba7ca50e03',1,'Mitsubishi88Protocol::Temp()'],['../unionNeoclimaProtocol.html#a6b12bad4406a2c89aae3db1b1614d980',1,'NeoclimaProtocol::Temp()'],['../unionPanasonicAc32Protocol.html#ad0ab801a8f4ec655d176bb900d50245d',1,'PanasonicAc32Protocol::Temp()'],['../unionSamsungProtocol.html#aee5c202d59174c4c85900054001ed679',1,'SamsungProtocol::Temp()'],['../unionSanyoProtocol.html#a3a3e20f65bcb220f84aee2f48d05d986',1,'SanyoProtocol::Temp()'],['../unionSharpProtocol.html#a4b5dfbe7c378055840a1a51b7035234d',1,'SharpProtocol::Temp()'],['../unionTcl112Protocol.html#adac34333fb283e85dbbae7f82464034c',1,'Tcl112Protocol::Temp()'],['../unionTechnibelProtocol.html#a77c1358fde3dc80d152bcbdf277152be',1,'TechnibelProtocol::Temp()'],['../unionTecoProtocol.html#aa65998afac0fcadca42ce5c1262793a2',1,'TecoProtocol::Temp()'],['../unionToshibaProtocol.html#abe862f03c3a5fc68d199e0514c4d05e2',1,'ToshibaProtocol::Temp()'],['../unionTranscoldProtocol.html#a6e743702012bdb7037a96bcef630d30f',1,'TranscoldProtocol::Temp()'],['../unionTrotecProtocol.html#a89cfb912a2a4177485c588b707cedf83',1,'TrotecProtocol::Temp()'],['../unionTrumaProtocol.html#aada7b9bcdd6de808da5a1b7804f359cf',1,'TrumaProtocol::Temp()'],['../unionVestelProtocol.html#a1227bbe21da25c259103e9861e7c4c95',1,'VestelProtocol::Temp()'],['../unionVoltasProtocol.html#a23efaf01747b58d1e77c101f99bc2b4c',1,'VoltasProtocol::Temp()'],['../unionWhirlpoolProtocol.html#a9df58d0ddd25b06a5fb03db2a3bc379e',1,'WhirlpoolProtocol::Temp()']]], - ['tempchange_7052',['TempChange',['../unionTechnibelProtocol.html#a1defef3843fa2d57a84857f573bc646f',1,'TechnibelProtocol']]], - ['tempextradegreef_7053',['TempExtraDegreeF',['../unionGreeProtocol.html#ae093878b66b84bbc4f5c5df5e59fd639',1,'GreeProtocol']]], - ['tempset_7054',['TempSet',['../unionVoltasProtocol.html#a16ae188cb58127b21fb905f3b1d8653c',1,'VoltasProtocol']]], - ['tenshours_7055',['TensHours',['../unionTecoProtocol.html#a666e09f45c649f518b68b575dc8212bb',1,'TecoProtocol']]], - ['three_7056',['Three',['../unionMitsubishi152Protocol.html#afdd9554bfc3ac476ca87acd69eba3bc3',1,'Mitsubishi152Protocol']]], - ['timeout_7057',['timeout',['../structirparams__t.html#a132d6448ad59f03f6b35c4b04a6d1af4',1,'irparams_t']]], - ['timer_7058',['timer',['../structirparams__t.html#a6d4594a4d6bf8a2587095be7adfc018d',1,'irparams_t::timer()'],['../unionMitsubishi144Protocol.html#a29613b47de756a0e67c42d41fd44a77a',1,'Mitsubishi144Protocol::Timer()'],['../unionTrotecProtocol.html#a02e56a4ff6210117c5519ef568203d0c',1,'TrotecProtocol::Timer()'],['../unionVestelProtocol.html#a9aeab043445a2195de7761d99ff45611',1,'VestelProtocol::Timer()']]], - ['timerchange_7059',['TimerChange',['../unionTechnibelProtocol.html#ac3999a3162e2f7de613c9d61eacabde1',1,'TechnibelProtocol']]], - ['timerenable_7060',['TimerEnable',['../unionTechnibelProtocol.html#a40dfea84eea20bb0fc0168b2074f95e0',1,'TechnibelProtocol']]], - ['timerenabled_7061',['TimerEnabled',['../unionGreeProtocol.html#a603b0bde826287c2ddddb4d17cf9acd0',1,'GreeProtocol::TimerEnabled()'],['../unionSharpProtocol.html#abdf436472440de69d9bc86fadf4d719b',1,'SharpProtocol::TimerEnabled()']]], - ['timerhalfhr_7062',['TimerHalfHr',['../unionGreeProtocol.html#a3e9fe2455001daec79f687797842239c',1,'GreeProtocol']]], - ['timerhours_7063',['TimerHours',['../unionGreeProtocol.html#a7cc95f9868755876049dbe2b3ce4c730',1,'GreeProtocol::TimerHours()'],['../unionSharpProtocol.html#a7872b52282ecd70b49c17db87d04c8dd',1,'SharpProtocol::TimerHours()'],['../unionTechnibelProtocol.html#a058b2d15d4b2f3974e0271ef24228478',1,'TechnibelProtocol::TimerHours()']]], - ['timeron_7064',['TimerOn',['../unionTecoProtocol.html#ab6a0e79403cd997d43487d939e37be2b',1,'TecoProtocol']]], - ['timertenshr_7065',['TimerTensHr',['../unionGreeProtocol.html#a21cc20bf1a214a17c735e5997f236ee9',1,'GreeProtocol']]], - ['timertype_7066',['TimerType',['../unionFujitsuProtocol.html#a5f80e90a7c02237d38d2e0f97bbdc573',1,'FujitsuProtocol::TimerType()'],['../unionSharpProtocol.html#af29fb49abd51a5a979c7dbb03d440b7e',1,'SharpProtocol::TimerType()']]], - ['timestate_7067',['timeState',['../unionVestelProtocol.html#a64f74ca21d2e21004fe70db529297b99',1,'VestelProtocol']]], - ['timesum_7068',['TimeSum',['../unionVestelProtocol.html#a6d7fee68c9fa0b80e8ff64e01f9ab2e4',1,'VestelProtocol']]], - ['turbo_7069',['Turbo',['../unionElectraProtocol.html#af812a40c2acfafe8134e9299d2b80a7a',1,'ElectraProtocol::Turbo()'],['../unionGoodweatherProtocol.html#a007f6dd38f4e7137d08278355941885d',1,'GoodweatherProtocol::Turbo()'],['../unionGreeProtocol.html#a36add055a70df62e09bca1e031314a4d',1,'GreeProtocol::Turbo()'],['../unionHaierYRW02Protocol.html#a1cea874c8398b49e704ba0943284c64a',1,'HaierYRW02Protocol::Turbo()'],['../unionKelvinatorProtocol.html#a53c157f2b60f079f5ce77798084888a5',1,'KelvinatorProtocol::Turbo()'],['../unionNeoclimaProtocol.html#a36e23b1343d0638516232bb44c49416b',1,'NeoclimaProtocol::Turbo()'],['../unionTcl112Protocol.html#a2b994555374f08b3c9f6654211cb698a',1,'Tcl112Protocol::Turbo()'],['../unionVoltasProtocol.html#aa0bfed2718430a9cffdfdc02b345971b',1,'VoltasProtocol::Turbo()'],['../structstdAc_1_1state__t.html#aae084b686685f2b2a07ccdda649e358c',1,'stdAc::state_t::turbo()']]], - ['turboflag_7070',['turboFlag',['../classIRCoolixAC.html#a60a8a848951555dba34f2a317d6611ea',1,'IRCoolixAC']]], - ['turbosleep_7071',['TurboSleep',['../unionVestelProtocol.html#a160beacb49f68008f6f9ecf51b99b84a',1,'VestelProtocol']]], - ['type_7072',['Type',['../unionMideaProtocol.html#ae6deb4675602e9d1be3f8a49c601cdce',1,'MideaProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.html deleted file mode 100644 index 874fe5958..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.js deleted file mode 100644 index 24e777728..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_14.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['unithours_7073',['UnitHours',['../unionTecoProtocol.html#a53501f83a1d730135ec75bfb5838821b',1,'TecoProtocol']]], - ['unknown_7074',['unknown',['../unionFujitsuProtocol.html#a1ffda1931475b743913abe2aad2138e3',1,'FujitsuProtocol::unknown()'],['../unionHaierProtocol.html#aabc2a684c5936858544c02ec8a68afb9',1,'HaierProtocol::unknown()']]], - ['unknown1_7075',['unknown1',['../unionGreeProtocol.html#ae973c1c723b7162959374e1fd8ecab61',1,'GreeProtocol']]], - ['unknown2_7076',['unknown2',['../unionGreeProtocol.html#aa102f7d68c26f5b8644b13113a5b05f4',1,'GreeProtocol']]], - ['usecmd_7077',['UseCmd',['../unionVestelProtocol.html#ae82716fdc06ba75def19a130d60d9e83',1,'VestelProtocol']]], - ['used_7078',['used',['../structmatch__result__t.html#a26cea305aa83ed65b88ac0b6ed6de54a',1,'match_result_t']]], - ['usefah_7079',['UseFah',['../unionNeoclimaProtocol.html#ae60408715008e78ab8058ab024669955',1,'NeoclimaProtocol::UseFah()'],['../unionTechnibelProtocol.html#a118cbcb15250c35ee423062e5f397662',1,'TechnibelProtocol::UseFah()']]], - ['usefahrenheit_7080',['UseFahrenheit',['../unionGreeProtocol.html#a47c79761efe40c00e6bb01b7712b272c',1,'GreeProtocol::UseFahrenheit()'],['../unionMideaProtocol.html#a1b1258107620bb83fd6356815242e19b',1,'MideaProtocol::useFahrenheit()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.html deleted file mode 100644 index 3ca879906..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.js deleted file mode 100644 index ac822438c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_15.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['value_7081',['value',['../classdecode__results.html#a033502b7a6b4b0412e5a2062e33c5f47',1,'decode_results']]], - ['vane_7082',['Vane',['../unionMitsubishi144Protocol.html#af4cb685d4c5f87f6ff61d1305ccd6967',1,'Mitsubishi144Protocol']]], - ['vanebit_7083',['VaneBit',['../unionMitsubishi144Protocol.html#aaefd53cd1441b57b90dc3d21488bbdd3',1,'Mitsubishi144Protocol']]], - ['vent_7084',['Vent',['../unionAmcorProtocol.html#a289bcba64f01cd2c847845f41978d400',1,'AmcorProtocol']]], - ['ventswing_7085',['VentSwing',['../unionKelvinatorProtocol.html#af7cd4e8ebfaa36812d09105c54f868f2',1,'KelvinatorProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.html deleted file mode 100644 index 2b5a4330f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.js deleted file mode 100644 index b5bb3c582..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_16.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['wall_7086',['Wall',['../unionDaikin128Protocol.html#aed2c5bc365820f2c0a5f27dd68fa8a05',1,'Daikin128Protocol']]], - ['wand_5fid_7087',['wand_id',['../unionmagiquest.html#a1b159cd47635d548e1d4198cd6d41e93',1,'magiquest']]], - ['weeklytimer_7088',['WeeklyTimer',['../unionDaikinESPProtocol.html#a25e632da82856caebd233699fda8d796',1,'DaikinESPProtocol::WeeklyTimer()'],['../unionMitsubishi144Protocol.html#a313d3721705676e04d73aee8a29c4a37',1,'Mitsubishi144Protocol::WeeklyTimer()']]], - ['widevane_7089',['WideVane',['../unionMitsubishi144Protocol.html#ad0c48e95ca7e0658edf7c2ac2b541c3c',1,'Mitsubishi144Protocol']]], - ['wifi_7090',['Wifi',['../unionVoltasProtocol.html#aae1406825a156f159c5ad4b28d20364c',1,'VoltasProtocol::Wifi()'],['../unionGreeProtocol.html#a6cf8e0a6c54a5d2b6f14074c6f3dcc92',1,'GreeProtocol::WiFi()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.html deleted file mode 100644 index 16914b7bf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.js deleted file mode 100644 index a815cf286..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_17.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['xfan_7091',['XFan',['../unionKelvinatorProtocol.html#a44a0ba82ee5dc39f64215d26edb9636c',1,'KelvinatorProtocol::XFan()'],['../unionGreeProtocol.html#a3fbf66dfc2043710c5e00f8230eddb48',1,'GreeProtocol::Xfan()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.html deleted file mode 100644 index 782b3bf0f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.js deleted file mode 100644 index e28245d38..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_18.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['zonefollow1_7092',['ZoneFollow1',['../unionCoolixProtocol.html#a5f19a21823bbdb6d5deceb03db0d3d5b',1,'CoolixProtocol']]], - ['zonefollow2_7093',['ZoneFollow2',['../unionCoolixProtocol.html#ade33ba99bcfcf9d7dac334e56e9bb167',1,'CoolixProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.html deleted file mode 100644 index 0c8a18cf9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.js deleted file mode 100644 index 591d57c2b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['backup_4635',['backup',['../classIRToshibaAC.html#adc8d8c6918cd110f524f6bedf6f2bb6e',1,'IRToshibaAC']]], - ['basicfan_4636',['BasicFan',['../unionKelvinatorProtocol.html#a9237eb894fd7d6807169d18655bb3261',1,'KelvinatorProtocol']]], - ['beep_4637',['Beep',['../unionDaikin2Protocol.html#ae464d693bde12c9a0085cf268010d158',1,'Daikin2Protocol::Beep()'],['../unionSamsungProtocol.html#a80645f900ef2b45b44b0b9522f4265cc',1,'SamsungProtocol::Beep()'],['../unionSanyoProtocol.html#a56e41c218b229561ee48e9e0184981bd',1,'SanyoProtocol::Beep()'],['../structstdAc_1_1state__t.html#a468ce4cf8b68467964b1f1840257663d',1,'stdAc::state_t::beep()']]], - ['beepdisable_4638',['BeepDisable',['../unionMideaProtocol.html#a2a1d3b51765737427adb5dddcda84d60',1,'MideaProtocol']]], - ['bits_4639',['bits',['../classdecode__results.html#aa5ba2fd53bdb36bdc120d8eabd9f36d7',1,'decode_results']]], - ['boost_4640',['Boost',['../unionDelonghiProtocol.html#ad3347e0739d5c00f3fb5cba7c9f53bcd',1,'DelonghiProtocol']]], - ['breeze_4641',['Breeze',['../unionSamsungProtocol.html#a5b60f239d70e2005e14e0f4c3c9f8986',1,'SamsungProtocol']]], - ['bufsize_4642',['bufsize',['../structirparams__t.html#a2b34d697b85ee6a0ce08344c941e50ec',1,'irparams_t']]], - ['button_4643',['Button',['../unionHaierYRW02Protocol.html#ab5b13626ecf6214cc1be52d47909915d',1,'HaierYRW02Protocol::Button()'],['../unionHitachi424Protocol.html#aaadfa5a2e789fb1159ce795f833b83e5',1,'Hitachi424Protocol::Button()'],['../unionNeoclimaProtocol.html#aedacead75ecd658f9e2c8c3a23d2bc58',1,'NeoclimaProtocol::Button()']]], - ['byte_4644',['byte',['../unionmagiquest.html#af1a9c9a147a1610fe5f0e77ca3e09e44',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.html deleted file mode 100644 index 19a31fc28..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.js deleted file mode 100644 index 33c02436b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_3.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['ceiling_4645',['Ceiling',['../unionDaikin128Protocol.html#a8d2eb9c3a65bd4ecd111d1eccbb4ebe1',1,'Daikin128Protocol']]], - ['celsius_4646',['celsius',['../structstdAc_1_1state__t.html#a235b17f3979b155b368bfdc2b14123f5',1,'stdAc::state_t']]], - ['cheat_4647',['CHeat',['../unionNeoclimaProtocol.html#aba91857f67b7039783cd6c504de1ad64',1,'NeoclimaProtocol']]], - ['checksum_4648',['Checksum',['../unionVoltasProtocol.html#a4349ae4488d2d9c9dd5606502d486b19',1,'VoltasProtocol']]], - ['clean_4649',['Clean',['../unionDaikin2Protocol.html#a064d834228a18ca64cefc3d246db9bad',1,'Daikin2Protocol::Clean()'],['../unionElectraProtocol.html#aa51de8a1e38d432aad7d2e0a656db86e',1,'ElectraProtocol::Clean()'],['../unionFujitsuProtocol.html#a0080a99d466ee4924b128fb3271edfee',1,'FujitsuProtocol::Clean()'],['../unionMitsubishi152Protocol.html#aef8f83b0301182a5f75f604b473b7c10',1,'Mitsubishi152Protocol::Clean()'],['../unionMitsubishi88Protocol.html#a458d9bec45523636e7caf452bf5e46c6',1,'Mitsubishi88Protocol::Clean()'],['../unionSharpProtocol.html#ad5b81ea43a14061b02bed374bce16ce5',1,'SharpProtocol::Clean()'],['../structstdAc_1_1state__t.html#a703fa57ade60d68deccbb2a59258b32a',1,'stdAc::state_t::clean()']]], - ['clean10_4650',['Clean10',['../unionSamsungProtocol.html#a4d3bce30e1795bc4e95c0209c5e702b2',1,'SamsungProtocol']]], - ['clean11_4651',['Clean11',['../unionSamsungProtocol.html#af33c314cfb3a42cb7536c4a809a9fa0c',1,'SamsungProtocol']]], - ['cleanflag_4652',['cleanFlag',['../classIRCoolixAC.html#a9280bc7517713dae451a64e35674804d',1,'IRCoolixAC']]], - ['clear_4653',['Clear',['../unionEcoclimProtocol.html#a424f9fd7d803ad18d4bf32ff0f3342b3',1,'EcoclimProtocol']]], - ['clock_4654',['Clock',['../unionEcoclimProtocol.html#a521fbbb17cf7755806d62ede90144f5c',1,'EcoclimProtocol::Clock()'],['../unionMitsubishi144Protocol.html#a61b5a9fa2305eedb437c8e9d01b3a7fe',1,'Mitsubishi144Protocol::Clock()'],['../structstdAc_1_1state__t.html#ab1d76172930ebfe992fd9b700369e787',1,'stdAc::state_t::clock()']]], - ['clockhours_4655',['ClockHours',['../unionDaikin128Protocol.html#a1de4c4ec4a98bcfff4d515d0c84f5c4d',1,'Daikin128Protocol::ClockHours()'],['../unionDaikin64Protocol.html#a0405fde38f8da649561cb58df28ac5b7',1,'Daikin64Protocol::ClockHours()'],['../unionWhirlpoolProtocol.html#a5241ed48023d1b4dd8042a39d9ef83fe',1,'WhirlpoolProtocol::ClockHours()']]], - ['clockmins_4656',['ClockMins',['../unionDaikin128Protocol.html#afbed1ec9c718f417c25968a3f3b14681',1,'Daikin128Protocol::ClockMins()'],['../unionDaikin64Protocol.html#a5263808e2456f707bded2d8f244ca370',1,'Daikin64Protocol::ClockMins()'],['../unionWhirlpoolProtocol.html#aebb367f02ac1b311c75236ad44e5666a',1,'WhirlpoolProtocol::ClockMins()']]], - ['cmd_4657',['Cmd',['../unionFujitsuProtocol.html#a9361fb99d71caae87e3f7c10b7f1bd5f',1,'FujitsuProtocol::Cmd()'],['../unionWhirlpoolProtocol.html#a19b065181eaf22cf7878176a2914100e',1,'WhirlpoolProtocol::Cmd()'],['../unionmagiquest.html#a2cee09c24c7304674f6f8df60c159540',1,'magiquest::cmd()']]], - ['cmdstate_4658',['cmdState',['../unionVestelProtocol.html#a823af315c3a09e3deaefa838b8c9deb5',1,'VestelProtocol']]], - ['cmdsum_4659',['CmdSum',['../unionVestelProtocol.html#acc13a6d521b86c1a1e03e98a6b67eeef',1,'VestelProtocol']]], - ['comfort_4660',['Comfort',['../unionDaikinESPProtocol.html#a276e609fab153bdac93341ac4f76a09c',1,'DaikinESPProtocol::Comfort()'],['../unionDaikin152Protocol.html#a1fa909ea9a26e65e354aa6a59c69d163',1,'Daikin152Protocol::Comfort()']]], - ['command_4661',['Command',['../unionGoodweatherProtocol.html#acaa336e2b9915da4dfb51e4738af9265',1,'GoodweatherProtocol::Command()'],['../unionHaierProtocol.html#aeb39971e74e12fb0c7463006d6c644bd',1,'HaierProtocol::Command()'],['../classdecode__results.html#a9b750d09f713b0693472f815fd0fd402',1,'decode_results::command()']]], - ['cool_5fmode_4662',['cool_mode',['../classIRArgoAC.html#a74e7e489d743f213664d9259f1e7a431',1,'IRArgoAC']]], - ['currentday_4663',['CurrentDay',['../unionDaikinESPProtocol.html#ae47c0fdc9517ad7d16cda183c4317dcb',1,'DaikinESPProtocol']]], - ['currenttime_4664',['CurrentTime',['../unionDaikinESPProtocol.html#af46e520574bb6a20c10a4cbe9bfeda27',1,'DaikinESPProtocol::CurrentTime()'],['../unionDaikin2Protocol.html#a4ccf50fbb1af1fbf0c20dbd1fb400f38',1,'Daikin2Protocol::CurrentTime()']]], - ['currhours_4665',['CurrHours',['../unionHaierProtocol.html#a093d2441856e448462551ac7bc1b8d9b',1,'HaierProtocol']]], - ['currmins_4666',['CurrMins',['../unionHaierProtocol.html#a70abde8bccafd39cf1a1506f63481893',1,'HaierProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.html deleted file mode 100644 index bdc37be7f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.js deleted file mode 100644 index 274128278..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_4.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['d_4667',['D',['../unionMitsubishi152Protocol.html#ac493830f3bf09e178aa09b24368746c9',1,'Mitsubishi152Protocol']]], - ['data_4668',['data',['../structmatch__result__t.html#ae88be61a6d1ffa7c3525aa958f4c0d25',1,'match_result_t']]], - ['data0_4669',['Data0',['../structCoronaSection.html#a975b14d8bc30807013714158ef7474ea',1,'CoronaSection']]], - ['data0inv_4670',['Data0Inv',['../structCoronaSection.html#ab05024b8314929dcd8ccdda9b497be8c',1,'CoronaSection']]], - ['data1_4671',['Data1',['../structCoronaSection.html#a59d97a1bc0a1be50b6f96c4d70673425',1,'CoronaSection']]], - ['data1inv_4672',['Data1Inv',['../structCoronaSection.html#ada247bbfb60f24cd9e9a612c9621cbb4',1,'CoronaSection']]], - ['decode_5ftype_4673',['decode_type',['../classdecode__results.html#a9c0e9f161b9c90dc10b7561d4c0b50fa',1,'decode_results']]], - ['degrees_4674',['degrees',['../structstdAc_1_1state__t.html#a3d1ff0ff2e0035db4ee8ead5c53b2dbd',1,'stdAc::state_t']]], - ['dipconfig_4675',['DipConfig',['../unionEcoclimProtocol.html#a6635a22deb4d5db6b320828a183df6bd',1,'EcoclimProtocol']]], - ['disablesensor_4676',['disableSensor',['../unionMideaProtocol.html#a20cc2079eae404c980cc75101b4a3116',1,'MideaProtocol']]], - ['display_4677',['Display',['../unionSamsungProtocol.html#aac97ebabee022e772aa00d4357079eb4',1,'SamsungProtocol']]], - ['displaytemp_4678',['DisplayTemp',['../unionGreeProtocol.html#ad0756a64f9c90c9dd12ca6cd71c78bb2',1,'GreeProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.html deleted file mode 100644 index 6aa2249b4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.js deleted file mode 100644 index db9cb41eb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_5.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['econo_4679',['Econo',['../unionCoronaProtocol.html#a1076afecc4292c370fed27ce380a1ed5',1,'CoronaProtocol::Econo()'],['../unionDaikinESPProtocol.html#a29138c4ff722520ca23863568a96bf53',1,'DaikinESPProtocol::Econo()'],['../unionDaikin2Protocol.html#aa715d01b8972f98a41829ed976932ef7',1,'Daikin2Protocol::Econo()'],['../unionDaikin128Protocol.html#a8920f30a9d4bb0132762d80c8297d5f2',1,'Daikin128Protocol::Econo()'],['../unionDaikin152Protocol.html#ad9c7903f82a89b94e0c9dfe8b7298658',1,'Daikin152Protocol::Econo()'],['../unionNeoclimaProtocol.html#ae6e84df0fe5279729c8980c68db35c50',1,'NeoclimaProtocol::Econo()'],['../unionTcl112Protocol.html#a5791daa5a91ae0bfff5db2b42472b218',1,'Tcl112Protocol::Econo()'],['../unionVoltasProtocol.html#a4f44e3e3a68988d25173b2aab1c32e53',1,'VoltasProtocol::Econo()'],['../structstdAc_1_1state__t.html#a580c826c6d9671715adfe8445531b957',1,'stdAc::state_t::econo()']]], - ['ecoturbo_4680',['EcoTurbo',['../unionToshibaProtocol.html#a59ebff5274a795d94fdbc735f847274d',1,'ToshibaProtocol']]], - ['eye_4681',['Eye',['../unionDaikin2Protocol.html#aa8351138b8db3b8be5f40d1515802381',1,'Daikin2Protocol::Eye()'],['../unionNeoclimaProtocol.html#a61b0055d4d939dc85ee204e4f3b6ab46',1,'NeoclimaProtocol::Eye()']]], - ['eyeauto_4682',['EyeAuto',['../unionDaikin2Protocol.html#a22f2288452065069018bef94d2505ab7',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.html deleted file mode 100644 index ce4a90635..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.js deleted file mode 100644 index 1704b2e87..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_6.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['fahrenheit_4683',['Fahrenheit',['../unionDelonghiProtocol.html#a8fe11756b36ba6f55eaccf553cc0dea3',1,'DelonghiProtocol::Fahrenheit()'],['../unionFujitsuProtocol.html#a23e44e249fba92fdf6b723e2e3a38218',1,'FujitsuProtocol::Fahrenheit()']]], - ['fan_4684',['Fan',['../unionAirwellProtocol.html#a7d38043e982231fb6a331d72f7407c10',1,'AirwellProtocol::Fan()'],['../unionAmcorProtocol.html#a208edfb233f0747b5abe8911fe55bfb3',1,'AmcorProtocol::Fan()'],['../unionArgoProtocol.html#a9247f87997f4fda42940ca204b8363d6',1,'ArgoProtocol::Fan()'],['../unionCarrierProtocol.html#ab7e563e2015627a65259b0190908034b',1,'CarrierProtocol::Fan()'],['../unionCoolixProtocol.html#ad534acc857b6693327880b8a420da4dc',1,'CoolixProtocol::Fan()'],['../unionCoronaProtocol.html#a981185f964fcaa1dc657a7ad770c446d',1,'CoronaProtocol::Fan()'],['../unionDaikinESPProtocol.html#ad93d41ea1d921579aead9d8be78f52ac',1,'DaikinESPProtocol::Fan()'],['../unionDaikin2Protocol.html#a7928d4eecb9d5ba004ccedb304c06829',1,'Daikin2Protocol::Fan()'],['../unionDaikin216Protocol.html#a6da4ec3880fbd895aa969b8daf4ed7cc',1,'Daikin216Protocol::Fan()'],['../unionDaikin160Protocol.html#a263a50340360eff5bb161658046fd968',1,'Daikin160Protocol::Fan()'],['../unionDaikin176Protocol.html#aadaabe83d23d12554d3431fa0939c18c',1,'Daikin176Protocol::Fan()'],['../unionDaikin128Protocol.html#ac5cf543511bf5baaaa1ad593c726640f',1,'Daikin128Protocol::Fan()'],['../unionDaikin152Protocol.html#aa880c1bf93598c7d2c355ce9e8af79f1',1,'Daikin152Protocol::Fan()'],['../unionDaikin64Protocol.html#a11aceeeaf3b80ee0ce9aa23b88bcb2e6',1,'Daikin64Protocol::Fan()'],['../unionDelonghiProtocol.html#ab3a1bc23e8349851f7d813b117426518',1,'DelonghiProtocol::Fan()'],['../unionEcoclimProtocol.html#ac3dadf32f707065b79c7ff0677c9f192',1,'EcoclimProtocol::Fan()'],['../unionElectraProtocol.html#a4aca91a79fad6a2ce08ac6e5f854ab96',1,'ElectraProtocol::Fan()'],['../unionFujitsuProtocol.html#a649627976dbf420ab80c9a73e9d78d31',1,'FujitsuProtocol::Fan()'],['../unionGoodweatherProtocol.html#a7dd02188438a4e2b37c70a2b3913e550',1,'GoodweatherProtocol::Fan()'],['../unionGreeProtocol.html#af6f917228f457a24e70256d7c132289c',1,'GreeProtocol::Fan()'],['../unionHaierProtocol.html#a44e6a58782f4c6d5e532c715e9050b5b',1,'HaierProtocol::Fan()'],['../unionHaierYRW02Protocol.html#a4ecca9653d14ccd283e44f6e385ff36a',1,'HaierYRW02Protocol::Fan()'],['../unionHitachiProtocol.html#ae451ce39e2ba32da81580c2bf5c5d6d9',1,'HitachiProtocol::Fan()'],['../unionHitachi424Protocol.html#a45907766ba99132b300f50f7c194fee6',1,'Hitachi424Protocol::Fan()'],['../unionHitachi1Protocol.html#ad74c329496f93855ffec6e0a16cda338',1,'Hitachi1Protocol::Fan()'],['../unionKelvinatorProtocol.html#a720843565363129441f5db98a166f439',1,'KelvinatorProtocol::Fan()'],['../unionLGProtocol.html#ad8132d6e5603d1eb3b51b28165fe3803',1,'LGProtocol::Fan()'],['../unionMideaProtocol.html#a04b0f344ec9b7cf2bdbd2c530b409fcb',1,'MideaProtocol::Fan()'],['../unionMitsubishi144Protocol.html#a0bc3dfc7954983752b0e30abb84c00e6',1,'Mitsubishi144Protocol::Fan()'],['../unionMitsubishi136Protocol.html#ae39096aaafd4e93a122a1f9942668031',1,'Mitsubishi136Protocol::Fan()'],['../unionMitsubishi112Protocol.html#af559efed44be81781556e2ce1b668fae',1,'Mitsubishi112Protocol::Fan()'],['../unionMitsubishi152Protocol.html#a2b91b3185aa9f05d4b32b1628c693c3f',1,'Mitsubishi152Protocol::Fan()'],['../unionMitsubishi88Protocol.html#a0b895ed43f664b7298d6ab7b2eda8e06',1,'Mitsubishi88Protocol::Fan()'],['../unionNeoclimaProtocol.html#acdf888082bd07c6b1b061f928295bdd9',1,'NeoclimaProtocol::Fan()'],['../unionPanasonicAc32Protocol.html#aff4c3aeb5a2724653c334f5ea75b6435',1,'PanasonicAc32Protocol::Fan()'],['../unionSamsungProtocol.html#a5eae02eead5032f6fa7ce3bc891122b6',1,'SamsungProtocol::Fan()'],['../unionSanyoProtocol.html#aaf3dc81d03fcb6ad893cd5647cd95213',1,'SanyoProtocol::Fan()'],['../unionSharpProtocol.html#acb0819fc971fc7d7206785aaad4b82b2',1,'SharpProtocol::Fan()'],['../unionTcl112Protocol.html#a8aefa398eb58112b2f39ead30c3953a9',1,'Tcl112Protocol::Fan()'],['../unionTechnibelProtocol.html#a7e78bd68b747186143648fedbe29f75a',1,'TechnibelProtocol::Fan()'],['../unionTecoProtocol.html#a9be4d4e129beee82ff43ac6b09dd7f58',1,'TecoProtocol::Fan()'],['../unionToshibaProtocol.html#ade6e7b0543cd68c41cff2fc240f874ff',1,'ToshibaProtocol::Fan()'],['../unionTranscoldProtocol.html#a1b3c9da9be9dfe9c3306f562655900e1',1,'TranscoldProtocol::Fan()'],['../unionTrotecProtocol.html#ac42d9f97612c5b6f1aa42d95639b6492',1,'TrotecProtocol::Fan()'],['../unionTrumaProtocol.html#a3199edc177e0308ba0c2aa3b3485841d',1,'TrumaProtocol::Fan()'],['../unionVestelProtocol.html#a6c2a667af849583af46b3f40ca56bca3',1,'VestelProtocol::Fan()'],['../unionWhirlpoolProtocol.html#ad81249077201513dc772e6baba34c363',1,'WhirlpoolProtocol::Fan()']]], - ['fanauto_4685',['FanAuto',['../unionMitsubishi144Protocol.html#a50a10d24ada3c67f778438e3dae9fe73',1,'Mitsubishi144Protocol']]], - ['fanchange_4686',['FanChange',['../unionTechnibelProtocol.html#a2a733692b8c56270ec1b94e450caf4a8',1,'TechnibelProtocol']]], - ['fanspeed_4687',['FanSpeed',['../unionVoltasProtocol.html#a7a2326d3ecf316e1a4e0a5db0523cad6',1,'VoltasProtocol::FanSpeed()'],['../structstdAc_1_1state__t.html#a28a50c877a0eaa71689ccc3bf9c957d7',1,'stdAc::state_t::fanspeed()']]], - ['filter_4688',['Filter',['../unionFujitsuProtocol.html#a00c5204defd34eb3e8d1d8a53ccd7810',1,'FujitsuProtocol::Filter()'],['../unionMitsubishi152Protocol.html#ac228a2f41e4267c919df440bde470a86',1,'Mitsubishi152Protocol::Filter()'],['../structstdAc_1_1state__t.html#a41e4b957f9e011ddb32d35bfcd56c0e7',1,'stdAc::state_t::filter()']]], - ['flap_4689',['Flap',['../unionArgoProtocol.html#ab7d5a6a5d6849160b5980de7615dd5d1',1,'ArgoProtocol']]], - ['flap_5fmode_4690',['flap_mode',['../classIRArgoAC.html#abfc383d92ced7d47945cc5ac996e5fc4',1,'IRArgoAC']]], - ['follow_4691',['Follow',['../unionNeoclimaProtocol.html#a8d506fa694026184d0c82016e99ae3c0',1,'NeoclimaProtocol']]], - ['footer_4692',['Footer',['../unionTechnibelProtocol.html#a5e575790ca9af8f8975065aee10fe44e',1,'TechnibelProtocol']]], - ['fresh_4693',['Fresh',['../unionNeoclimaProtocol.html#ad521881ecb1973370c82d63d6b917023',1,'NeoclimaProtocol']]], - ['freshair_4694',['FreshAir',['../unionDaikin2Protocol.html#a6cfb49a475f49f34ad0a239b10b73385',1,'Daikin2Protocol']]], - ['freshairhigh_4695',['FreshAirHigh',['../unionDaikin2Protocol.html#a538ce0c2496f8514fbb4ea1d1706e210',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.html deleted file mode 100644 index 39ffd4746..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.js deleted file mode 100644 index 201b4ad3c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_7.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['halfdegree_4696',['HalfDegree',['../unionMitsubishi144Protocol.html#a5dd9bbf66e0f25d17a836346ad37d303',1,'Mitsubishi144Protocol::HalfDegree()'],['../unionTcl112Protocol.html#a38ef38c4d67dfae2a1927ce756bba84a',1,'Tcl112Protocol::HalfDegree()']]], - ['halfhour_4697',['HalfHour',['../unionTecoProtocol.html#ae7eed85a01e7041535279d98ef65cf6a',1,'TecoProtocol']]], - ['header_4698',['Header',['../unionMideaProtocol.html#a892508b7b4cade91dd2e315b678f5f1b',1,'MideaProtocol::Header()'],['../unionTechnibelProtocol.html#a54fd7409b3eb2ccb826ab55f7ab3a4c9',1,'TechnibelProtocol::Header()']]], - ['header0_4699',['Header0',['../structCoronaSection.html#a3b3c0a1a42da65bb4b481e59b42f26a6',1,'CoronaSection']]], - ['header1_4700',['Header1',['../structCoronaSection.html#a3d6d6c1e31f82a76cd88f81bcdb83a3a',1,'CoronaSection']]], - ['health_4701',['Health',['../unionHaierProtocol.html#a4cf70c633e33066e3fc0f98bb2ad3820',1,'HaierProtocol::Health()'],['../unionHaierYRW02Protocol.html#a7fa39803fd72a788736bb8f00acfa76f',1,'HaierYRW02Protocol::Health()'],['../unionTcl112Protocol.html#a2dce97bdebb2d9a2648d7e8e83ed892d',1,'Tcl112Protocol::Health()']]], - ['heat_5fmode_4702',['heat_mode',['../classIRArgoAC.html#a255762f71502b9ffeb0686759991ec53',1,'IRArgoAC']]], - ['hold_4703',['Hold',['../unionNeoclimaProtocol.html#aaf3af5b5ab99978fb669e75949bfe136',1,'NeoclimaProtocol']]], - ['hours_4704',['Hours',['../unionTrotecProtocol.html#acbcd8e075d48cdd5c4570cbab50643b1',1,'TrotecProtocol::Hours()'],['../unionVestelProtocol.html#a38a88b6bd1cbf6eb2a47fcc53768397f',1,'VestelProtocol::Hours()']]], - ['humid_4705',['Humid',['../unionTecoProtocol.html#a37db4d115d1b1bef9f71fa7bccb1865f',1,'TecoProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.html deleted file mode 100644 index 37a2eddfa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.js deleted file mode 100644 index 5c5c5f1bd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_8.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['id_4706',['Id',['../unionFujitsuProtocol.html#ac3f6bb6208623f0842fa640fb183305c',1,'FujitsuProtocol']]], - ['ifeel_4707',['iFeel',['../unionArgoProtocol.html#a9d51b32b8e2b2ff08339be238a775097',1,'ArgoProtocol::iFeel()'],['../unionGreeProtocol.html#a592364307a4b11064888bda76c403142',1,'GreeProtocol::IFeel()']]], - ['intro1_4708',['Intro1',['../unionTrotecProtocol.html#afc82e5449c9d83af40c7235e220eb237',1,'TrotecProtocol']]], - ['intro2_4709',['Intro2',['../unionTrotecProtocol.html#a2f665441f11df93e2c779ce4343a8441',1,'TrotecProtocol']]], - ['ion_4710',['Ion',['../unionNeoclimaProtocol.html#aeee2a3f53f997ad7ffdbef2b5b6ee31a',1,'NeoclimaProtocol::Ion()'],['../unionSamsungProtocol.html#a977ae7e0e4cea918e4b4a714b25bb4ca',1,'SamsungProtocol::Ion()'],['../unionSharpProtocol.html#ae744f63f03d1c13fbd5bbcf8f40aea0e',1,'SharpProtocol::Ion()'],['../unionVestelProtocol.html#a532ca8ba3bbebc8e61853409aacd7ad9',1,'VestelProtocol::Ion()']]], - ['ionfilter_4711',['IonFilter',['../unionKelvinatorProtocol.html#ad7c762e410c8cba234614563cdc9d384',1,'KelvinatorProtocol']]], - ['irparams_5fsave_4712',['irparams_save',['../classIRrecv.html#a6fdac84ce51ce119972bf121ccc95aab',1,'IRrecv']]], - ['irpin_4713',['IRpin',['../classIRsend.html#ae4a6ea1e72f4861167002d6e7bf17b7c',1,'IRsend']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.html deleted file mode 100644 index 21e5a4f3c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.js deleted file mode 100644 index 3c7a5760f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['j191_4714',['J191',['../unionWhirlpoolProtocol.html#a225b788d0993185a994893fdc572dad1',1,'WhirlpoolProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.html deleted file mode 100644 index 1f6505537..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.js deleted file mode 100644 index 57aad0175..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_a.js +++ /dev/null @@ -1,2203 +0,0 @@ -var searchData= -[ - ['k10cheatstr_4715',['k10CHeatStr',['../IRtext_8cpp.html#afeaf1a56a8fc5d1071593ef1eb6d80b1',1,'k10CHeatStr(): IRtext.cpp'],['../IRtext_8h.html#ac71f0df9b9047c57d22ca4b3d3c3ea82',1,'k10CHeatStr(): IRtext.cpp']]], - ['k3dstr_4716',['k3DStr',['../IRtext_8cpp.html#aedbfd5e861447c2cde9f7bb6aade1370',1,'k3DStr(): IRtext.cpp'],['../IRtext_8h.html#a084c940b7221cd1d85d4a3b58063051d',1,'k3DStr(): IRtext.cpp']]], - ['k6thsensestr_4717',['k6thSenseStr',['../IRtext_8cpp.html#ad0bfc24932f22a599c7e7bf04fb57b10',1,'k6thSenseStr(): IRtext.cpp'],['../IRtext_8h.html#a7425119d393b134c4659db9d35691e35',1,'k6thSenseStr(): IRtext.cpp']]], - ['k8cheatstr_4718',['k8CHeatStr',['../IRtext_8cpp.html#ac6ab822edcfe7768cd1a8b0426a1bd59',1,'k8CHeatStr(): IRtext.cpp'],['../IRtext_8h.html#acfcc1bc573f4520f3e37977a949b74e8',1,'k8CHeatStr(): IRtext.cpp']]], - ['kairflowstr_4719',['kAirFlowStr',['../IRtext_8cpp.html#a7ecf1c6454bbf9963ca85a2bd7d4a34a',1,'kAirFlowStr(): IRtext.cpp'],['../IRtext_8h.html#a0f7e35a10e28e403da578c85b0e6b180',1,'kAirFlowStr(): IRtext.cpp']]], - ['kairwellauto_4720',['kAirwellAuto',['../ir__Airwell_8h.html#a5f3dbadb46874c672e093c5bbb59a97e',1,'ir_Airwell.h']]], - ['kairwellbits_4721',['kAirwellBits',['../IRremoteESP8266_8h.html#a570219a14f2d19c7a6ce0aecd37a3b1f',1,'IRremoteESP8266.h']]], - ['kairwellcool_4722',['kAirwellCool',['../ir__Airwell_8h.html#ab82c81efca876184ab30f24347dfa6af',1,'ir_Airwell.h']]], - ['kairwelldry_4723',['kAirwellDry',['../ir__Airwell_8h.html#a1274093143c10ea0208fdfe7b4ebdb02',1,'ir_Airwell.h']]], - ['kairwellfan_4724',['kAirwellFan',['../ir__Airwell_8h.html#abcdf6dac387c3fa5bb2eeb0327250ac7',1,'ir_Airwell.h']]], - ['kairwellfanauto_4725',['kAirwellFanAuto',['../ir__Airwell_8h.html#a40c8e262e6e6084c1d069bebb6a0fcb1',1,'ir_Airwell.h']]], - ['kairwellfanhigh_4726',['kAirwellFanHigh',['../ir__Airwell_8h.html#ab269b3942bee5458ec89a917d2ab0288',1,'ir_Airwell.h']]], - ['kairwellfanlow_4727',['kAirwellFanLow',['../ir__Airwell_8h.html#ab105d4d9a63166f9fbf2dfb47a58a3b7',1,'ir_Airwell.h']]], - ['kairwellfanmedium_4728',['kAirwellFanMedium',['../ir__Airwell_8h.html#ac755543eac2fad7bbd1f2727e11aee21',1,'ir_Airwell.h']]], - ['kairwellfootermark_4729',['kAirwellFooterMark',['../ir__Airwell_8cpp.html#a2f41c6fe12eb5b3369ffb67fc6333431',1,'ir_Airwell.cpp']]], - ['kairwellhalfclockperiod_4730',['kAirwellHalfClockPeriod',['../ir__Airwell_8cpp.html#a955f70631a1bc9be8453ccc9fbb3ecfc',1,'ir_Airwell.cpp']]], - ['kairwellhdrmark_4731',['kAirwellHdrMark',['../ir__Airwell_8cpp.html#ad0c7b6c28df61b706eef2ec05506d8c2',1,'ir_Airwell.cpp']]], - ['kairwellhdrspace_4732',['kAirwellHdrSpace',['../ir__Airwell_8cpp.html#ad7e80d679eaa5742f261619cc1115567',1,'ir_Airwell.cpp']]], - ['kairwellheat_4733',['kAirwellHeat',['../ir__Airwell_8h.html#a0f6e36670946f015d4599ad626300ef7',1,'ir_Airwell.h']]], - ['kairwellknowngoodstate_4734',['kAirwellKnownGoodState',['../ir__Airwell_8h.html#ae907f815fab982317d7865525b0294d5',1,'ir_Airwell.h']]], - ['kairwellmaxtemp_4735',['kAirwellMaxTemp',['../ir__Airwell_8h.html#adccc14f29d12b3c1e38a2e6a7b820b5f',1,'ir_Airwell.h']]], - ['kairwellminrepeats_4736',['kAirwellMinRepeats',['../IRremoteESP8266_8h.html#a669217ae5aa0baa159f7452f53551875',1,'IRremoteESP8266.h']]], - ['kairwellmintemp_4737',['kAirwellMinTemp',['../ir__Airwell_8h.html#ad8eef8b76485134c1c5278cae460e028',1,'ir_Airwell.h']]], - ['kairwelloverhead_4738',['kAirwellOverhead',['../ir__Airwell_8cpp.html#a8365fb4b254f5eeb6fed59cdc627fead',1,'ir_Airwell.cpp']]], - ['kaiwarct501bits_4739',['kAiwaRcT501Bits',['../IRremoteESP8266_8h.html#a9078adf040d21c9c3eb10ed69f9dced6',1,'IRremoteESP8266.h']]], - ['kaiwarct501minrepeats_4740',['kAiwaRcT501MinRepeats',['../IRremoteESP8266_8h.html#ad796714d955b6cc8e207b03058eae5a3',1,'IRremoteESP8266.h']]], - ['kaiwarct501postbits_4741',['kAiwaRcT501PostBits',['../ir__Aiwa_8cpp.html#a1ad2ad119febec79cb20bf2356ae4dd4',1,'ir_Aiwa.cpp']]], - ['kaiwarct501postdata_4742',['kAiwaRcT501PostData',['../ir__Aiwa_8cpp.html#a5c8aa67edc9ceed9dc398f878930b1cb',1,'ir_Aiwa.cpp']]], - ['kaiwarct501prebits_4743',['kAiwaRcT501PreBits',['../ir__Aiwa_8cpp.html#a614f30df204126f234ce1d256406f075',1,'ir_Aiwa.cpp']]], - ['kaiwarct501predata_4744',['kAiwaRcT501PreData',['../ir__Aiwa_8cpp.html#a9aafbd2938553c9b97dac6f4e3edee6e',1,'ir_Aiwa.cpp']]], - ['kallprotocolnamesstr_4745',['kAllProtocolNamesStr',['../IRtext_8cpp.html#a3ef36cf85e44181ecc4d11085b7abed6',1,'kAllProtocolNamesStr(): IRtext.cpp'],['../IRtext_8h.html#aa0dfe94cd4cba3bec642328f399dc775',1,'kAllProtocolNamesStr(): IRtext.cpp']]], - ['kalokabits_4746',['kAlokaBits',['../IRremoteESP8266_8h.html#a864918ca63a5fe7345688a72d61ddf23',1,'IRremoteESP8266.h']]], - ['kalokaledblue_4747',['kAlokaLedBlue',['../ir__NEC_8h.html#a49908cff59d8e7a4926638c74b796c61',1,'ir_NEC.h']]], - ['kalokaledgreen_4748',['kAlokaLedGreen',['../ir__NEC_8h.html#aa6c6afc878f4b2a8d4b9349bf6766fb6',1,'ir_NEC.h']]], - ['kalokaledlightgreen_4749',['kAlokaLedLightGreen',['../ir__NEC_8h.html#ab2daa6b17fd2d5e30fc47105e4c3c6b6',1,'ir_NEC.h']]], - ['kalokaledmidblue_4750',['kAlokaLedMidBlue',['../ir__NEC_8h.html#a47d88027186cd96216bea935ca93d7bc',1,'ir_NEC.h']]], - ['kalokaledorange_4751',['kAlokaLedOrange',['../ir__NEC_8h.html#a40f8ae5d6ec8f6aa887c73f032ce03bb',1,'ir_NEC.h']]], - ['kalokaledpink_4752',['kAlokaLedPink',['../ir__NEC_8h.html#a53cf14e43062b82259e8d171a992ceff',1,'ir_NEC.h']]], - ['kalokaledpinkred_4753',['kAlokaLedPinkRed',['../ir__NEC_8h.html#a20ef8a4a844577849b4b3bc7a86fe352',1,'ir_NEC.h']]], - ['kalokaledrainbow_4754',['kAlokaLedRainbow',['../ir__NEC_8h.html#a724ce8d8c71c07a019ed2ddfba269151',1,'ir_NEC.h']]], - ['kalokaledred_4755',['kAlokaLedRed',['../ir__NEC_8h.html#ade8f47e4607be919ca05b6dd6ed23ae9',1,'ir_NEC.h']]], - ['kalokaledtreegrow_4756',['kAlokaLedTreeGrow',['../ir__NEC_8h.html#a5ecb76db25229f9f05044e54239144ee',1,'ir_NEC.h']]], - ['kalokaledwhite_4757',['kAlokaLedWhite',['../ir__NEC_8h.html#a0c0b35e9d905de0b299e38e5807f363e',1,'ir_NEC.h']]], - ['kalokaledyellow_4758',['kAlokaLedYellow',['../ir__NEC_8h.html#a1853a0e8856b8af97f458a180c41d6d5',1,'ir_NEC.h']]], - ['kalokanightfade_4759',['kAlokaNightFade',['../ir__NEC_8h.html#adb8489faf42032a38187759b5f1037a1',1,'ir_NEC.h']]], - ['kalokanighttimer_4760',['kAlokaNightTimer',['../ir__NEC_8h.html#a1b48b8bbd71fbe3728487f36123f4e4b',1,'ir_NEC.h']]], - ['kalokapower_4761',['kAlokaPower',['../ir__NEC_8h.html#a147ecbccf8f11976f65b3f374b6ab2d0',1,'ir_NEC.h']]], - ['kamcorauto_4762',['kAmcorAuto',['../ir__Amcor_8h.html#a9c02a27d5ed80963ff3b1ff32fc261c5',1,'ir_Amcor.h']]], - ['kamcorbits_4763',['kAmcorBits',['../IRremoteESP8266_8h.html#a34bcab75a8ab94adfd46a245dd0748db',1,'IRremoteESP8266.h']]], - ['kamcorcool_4764',['kAmcorCool',['../ir__Amcor_8h.html#a221c452a3323bd4d39a6084f84ecefbd',1,'ir_Amcor.h']]], - ['kamcordefaultrepeat_4765',['kAmcorDefaultRepeat',['../IRremoteESP8266_8h.html#a746e1ce73c2ebd9bd1f5300494820a0c',1,'IRremoteESP8266.h']]], - ['kamcordry_4766',['kAmcorDry',['../ir__Amcor_8h.html#a4d285053d14cf85d0c17e738c53538cd',1,'ir_Amcor.h']]], - ['kamcorfan_4767',['kAmcorFan',['../ir__Amcor_8h.html#a5fa0c6e3a73c94fc419ff8d1aa1423c2',1,'ir_Amcor.h']]], - ['kamcorfanauto_4768',['kAmcorFanAuto',['../ir__Amcor_8h.html#a3199dbace6444ed6ca7ff2e55a8a3a24',1,'ir_Amcor.h']]], - ['kamcorfanmax_4769',['kAmcorFanMax',['../ir__Amcor_8h.html#a08ea054d4121220ba758a0e0cacef8ca',1,'ir_Amcor.h']]], - ['kamcorfanmed_4770',['kAmcorFanMed',['../ir__Amcor_8h.html#a9ef019a27cf0724ff1f1ff39e06c0c87',1,'ir_Amcor.h']]], - ['kamcorfanmin_4771',['kAmcorFanMin',['../ir__Amcor_8h.html#a0276f72dc5b39557850838c8c70fd157',1,'ir_Amcor.h']]], - ['kamcorfootermark_4772',['kAmcorFooterMark',['../ir__Amcor_8cpp.html#a3f877b05b07810ff43712dd4412af4f5',1,'ir_Amcor.cpp']]], - ['kamcorgap_4773',['kAmcorGap',['../ir__Amcor_8cpp.html#a090f83ec3d4f3fd10baa16bf512dca23',1,'ir_Amcor.cpp']]], - ['kamcorhdrmark_4774',['kAmcorHdrMark',['../ir__Amcor_8cpp.html#ab528f545e9af4ffb0f13d5674cfd1589',1,'ir_Amcor.cpp']]], - ['kamcorhdrspace_4775',['kAmcorHdrSpace',['../ir__Amcor_8cpp.html#ae0e00c60c4220d27ef7051b45f2ae8b5',1,'ir_Amcor.cpp']]], - ['kamcorheat_4776',['kAmcorHeat',['../ir__Amcor_8h.html#a9467539574a0030d166fac79684216f8',1,'ir_Amcor.h']]], - ['kamcormax_4777',['kAmcorMax',['../ir__Amcor_8h.html#afac44479dc50e3885e474d2cf8d1f878',1,'ir_Amcor.h']]], - ['kamcormaxtemp_4778',['kAmcorMaxTemp',['../ir__Amcor_8h.html#a6460abc4e2b44e4ef3f680c7e195c019',1,'ir_Amcor.h']]], - ['kamcormintemp_4779',['kAmcorMinTemp',['../ir__Amcor_8h.html#a2d952bf3f43cb55253a89db1bcc0b568',1,'ir_Amcor.h']]], - ['kamcoronemark_4780',['kAmcorOneMark',['../ir__Amcor_8cpp.html#a402a3643dc6b85813eb5f28d742c4e7f',1,'ir_Amcor.cpp']]], - ['kamcoronespace_4781',['kAmcorOneSpace',['../ir__Amcor_8cpp.html#a51163573fdc7b8017c7311f0e4011b1b',1,'ir_Amcor.cpp']]], - ['kamcorpoweroff_4782',['kAmcorPowerOff',['../ir__Amcor_8h.html#aeccd11f34ca0a93f682ab6c144f07fb7',1,'ir_Amcor.h']]], - ['kamcorpoweron_4783',['kAmcorPowerOn',['../ir__Amcor_8h.html#adf21c2364e64c818ba5379e78cae9d5c',1,'ir_Amcor.h']]], - ['kamcorstatelength_4784',['kAmcorStateLength',['../IRremoteESP8266_8h.html#a62866e6918602533d590912487150bc7',1,'IRremoteESP8266.h']]], - ['kamcortolerance_4785',['kAmcorTolerance',['../ir__Amcor_8cpp.html#ad7a4b72f06c5e71002a44c3e4d483bef',1,'ir_Amcor.cpp']]], - ['kamcorventon_4786',['kAmcorVentOn',['../ir__Amcor_8h.html#a0774a9180ab233da61c77c717be02521',1,'ir_Amcor.h']]], - ['kamcorzeromark_4787',['kAmcorZeroMark',['../ir__Amcor_8cpp.html#a6f16bcf81087461a4e196a2c670f29ee',1,'ir_Amcor.cpp']]], - ['kamcorzerospace_4788',['kAmcorZeroSpace',['../ir__Amcor_8cpp.html#a0cbb87d1a5bb594cf428c79cd96c8733',1,'ir_Amcor.cpp']]], - ['kargoauto_4789',['kArgoAuto',['../ir__Argo_8h.html#a527fa5776cb58f88013de5062c620b12',1,'ir_Argo.h']]], - ['kargobitmark_4790',['kArgoBitMark',['../ir__Argo_8cpp.html#aa15902c11e3a7d3cbb25504764b163c1',1,'ir_Argo.cpp']]], - ['kargobits_4791',['kArgoBits',['../IRremoteESP8266_8h.html#a351efcd1805c87bd338de81dab3f8fb2',1,'IRremoteESP8266.h']]], - ['kargocool_4792',['kArgoCool',['../ir__Argo_8h.html#ab331356887b5f8f04f5ffdf9031fde71',1,'ir_Argo.h']]], - ['kargodefaultrepeat_4793',['kArgoDefaultRepeat',['../IRremoteESP8266_8h.html#a9a2190c526885753c676db666e48b764',1,'IRremoteESP8266.h']]], - ['kargodry_4794',['kArgoDry',['../ir__Argo_8h.html#ae119706139f65f730db477d060a7bc5d',1,'ir_Argo.h']]], - ['kargofan1_4795',['kArgoFan1',['../ir__Argo_8h.html#abfbde2676afb8b027a26a49d947a1396',1,'ir_Argo.h']]], - ['kargofan2_4796',['kArgoFan2',['../ir__Argo_8h.html#a7b544220198b6aa311da78bc02b0e211',1,'ir_Argo.h']]], - ['kargofan3_4797',['kArgoFan3',['../ir__Argo_8h.html#aa34af62e7134bbca2028d74ba7dfed4e',1,'ir_Argo.h']]], - ['kargofanauto_4798',['kArgoFanAuto',['../ir__Argo_8h.html#a3b17c0ba868b439135e6e016452f1623',1,'ir_Argo.h']]], - ['kargoflap1_4799',['kArgoFlap1',['../ir__Argo_8h.html#a477dac25a687b9d875cf9e94623d5e84',1,'ir_Argo.h']]], - ['kargoflap2_4800',['kArgoFlap2',['../ir__Argo_8h.html#aa72401adcdd23c12d36f98370c605ef6',1,'ir_Argo.h']]], - ['kargoflap3_4801',['kArgoFlap3',['../ir__Argo_8h.html#ab18e2931823d631b533c14f417ed4adb',1,'ir_Argo.h']]], - ['kargoflap4_4802',['kArgoFlap4',['../ir__Argo_8h.html#a59204076030de56e1160fc599879b142',1,'ir_Argo.h']]], - ['kargoflap5_4803',['kArgoFlap5',['../ir__Argo_8h.html#a5a3f4c1b1303b177a924c61dfdcce3e6',1,'ir_Argo.h']]], - ['kargoflap6_4804',['kArgoFlap6',['../ir__Argo_8h.html#ac11d6b575b4abc7ac5aec9006ac41634',1,'ir_Argo.h']]], - ['kargoflapauto_4805',['kArgoFlapAuto',['../ir__Argo_8h.html#af7f4a97011f94e4bf453e7cfd01fd780',1,'ir_Argo.h']]], - ['kargoflapfull_4806',['kArgoFlapFull',['../ir__Argo_8h.html#a8befe8d8b6826fc79176b66eea8352b7',1,'ir_Argo.h']]], - ['kargogap_4807',['kArgoGap',['../ir__Argo_8cpp.html#a1a28fc063dea8beacbaac39cf8e9b81b',1,'ir_Argo.cpp']]], - ['kargohdrmark_4808',['kArgoHdrMark',['../ir__Argo_8cpp.html#a5c25d5a07e397fe86378021e7c3f2980',1,'ir_Argo.cpp']]], - ['kargohdrspace_4809',['kArgoHdrSpace',['../ir__Argo_8cpp.html#a10e8a2ac55f8b123093cd92757d1603d',1,'ir_Argo.cpp']]], - ['kargoheat_4810',['kArgoHeat',['../ir__Argo_8h.html#a431536a03ef985b53a4147df5a043b21',1,'ir_Argo.h']]], - ['kargoheatauto_4811',['kArgoHeatAuto',['../ir__Argo_8h.html#a154f8b3e0d600d87b2822027bf0c6619',1,'ir_Argo.h']]], - ['kargoheatbit_4812',['kArgoHeatBit',['../ir__Argo_8h.html#ada4b42336f3d423e3ef1060605c7f7f1',1,'ir_Argo.h']]], - ['kargoheatblink_4813',['kArgoHeatBlink',['../ir__Argo_8h.html#ad29933c939f9364399dfa0f7eaa8cce6',1,'ir_Argo.h']]], - ['kargomaxroomtemp_4814',['kArgoMaxRoomTemp',['../ir__Argo_8h.html#a27427d4479dc126e8782985008d4dd7d',1,'ir_Argo.h']]], - ['kargomaxtemp_4815',['kArgoMaxTemp',['../ir__Argo_8h.html#a2409d2f472fb950c070fa5c0a07f69ce',1,'ir_Argo.h']]], - ['kargomintemp_4816',['kArgoMinTemp',['../ir__Argo_8h.html#a4bc4e4cfe12af43730cb128f4043ad11',1,'ir_Argo.h']]], - ['kargooff_4817',['kArgoOff',['../ir__Argo_8h.html#af3c6e4f7b18095179ea9e20e45e1890a',1,'ir_Argo.h']]], - ['kargoonespace_4818',['kArgoOneSpace',['../ir__Argo_8cpp.html#a47131b446d160fed9c7af1886d3580e4',1,'ir_Argo.cpp']]], - ['kargostatelength_4819',['kArgoStateLength',['../IRremoteESP8266_8h.html#a5f38a56eacd9964a8514cb57de287a45',1,'IRremoteESP8266.h']]], - ['kargotempdelta_4820',['kArgoTempDelta',['../ir__Argo_8h.html#a7256560730a73dcaaa60cdfc8140fc0b',1,'ir_Argo.h']]], - ['kargozerospace_4821',['kArgoZeroSpace',['../ir__Argo_8cpp.html#a5e06b6d522b35f503ca1e5db27f32ff6',1,'ir_Argo.cpp']]], - ['kautomaticstr_4822',['kAutomaticStr',['../IRtext_8cpp.html#a66a32b6387a99572644e91f3299910a6',1,'kAutomaticStr(): IRtext.cpp'],['../IRtext_8h.html#a0fc9126a02b933a2af702cd6fdcb47ea',1,'kAutomaticStr(): IRtext.cpp']]], - ['kautostr_4823',['kAutoStr',['../IRtext_8cpp.html#ae8ec328761b0218d0b18479a972b1121',1,'kAutoStr(): IRtext.cpp'],['../IRtext_8h.html#a15a085c4f9e89926d2c165de4b1755d9',1,'kAutoStr(): IRtext.cpp']]], - ['kbeepstr_4824',['kBeepStr',['../IRtext_8cpp.html#a429f5c2f5aea162bd1568e8489aecb28',1,'kBeepStr(): IRtext.cpp'],['../IRtext_8h.html#a2e98c29968ade682d94f35e28364c878',1,'kBeepStr(): IRtext.cpp']]], - ['kbitsstr_4825',['kBitsStr',['../IRtext_8cpp.html#aaabaca413c37bb6b18dc13daf5b335c1',1,'kBitsStr(): IRtext.cpp'],['../IRtext_8h.html#aaf3e1b0041b00b261dfd949b41569d94',1,'kBitsStr(): IRtext.cpp']]], - ['kbottomstr_4826',['kBottomStr',['../IRtext_8cpp.html#ab0bd355efc13bd278a0e33765a783cd0',1,'kBottomStr(): IRtext.cpp'],['../IRtext_8h.html#accfb2322a40cfaf6707394e43f39e2a3',1,'kBottomStr(): IRtext.cpp']]], - ['kbreezestr_4827',['kBreezeStr',['../IRtext_8cpp.html#ab0317e8cf720936fb02816e7827bea9e',1,'kBreezeStr(): IRtext.cpp'],['../IRtext_8h.html#af4f31b53c295a877507e3ef5a5fbbc9d',1,'kBreezeStr(): IRtext.cpp']]], - ['kbuttonstr_4828',['kButtonStr',['../IRtext_8cpp.html#a6ee11e0a45632c54e34bed14c3a971ce',1,'kButtonStr(): IRtext.cpp'],['../IRtext_8h.html#a58bf62453a96d4e84bd1da3449b8799e',1,'kButtonStr(): IRtext.cpp']]], - ['kcancelstr_4829',['kCancelStr',['../IRtext_8cpp.html#af79c3879bac5ca97947f16c3a6a03321',1,'kCancelStr(): IRtext.cpp'],['../IRtext_8h.html#ab64c4cdebbc72cbb62ae6cd9a449876b',1,'kCancelStr(): IRtext.cpp']]], - ['kcarrierac40bitmark_4830',['kCarrierAc40BitMark',['../ir__Carrier_8cpp.html#a3f8996aa3a7b9b871bc6556f98efb345',1,'ir_Carrier.cpp']]], - ['kcarrierac40bits_4831',['kCarrierAc40Bits',['../IRremoteESP8266_8h.html#a56d1176a7b3fe59aeb3f4f39926c617d',1,'IRremoteESP8266.h']]], - ['kcarrierac40gap_4832',['kCarrierAc40Gap',['../ir__Carrier_8cpp.html#aa5f0d39a4e12645a6fb477efb3191384',1,'ir_Carrier.cpp']]], - ['kcarrierac40hdrmark_4833',['kCarrierAc40HdrMark',['../ir__Carrier_8cpp.html#a4b77665ded6dab393779d2763bc367f0',1,'ir_Carrier.cpp']]], - ['kcarrierac40hdrspace_4834',['kCarrierAc40HdrSpace',['../ir__Carrier_8cpp.html#a5ea98bc575a7ac8d7f5da937feeaeed4',1,'ir_Carrier.cpp']]], - ['kcarrierac40minrepeat_4835',['kCarrierAc40MinRepeat',['../IRremoteESP8266_8h.html#a222aa743f398883a4910fbbb6d408bdc',1,'IRremoteESP8266.h']]], - ['kcarrierac40onespace_4836',['kCarrierAc40OneSpace',['../ir__Carrier_8cpp.html#a79073c06820817e077c5bd8d9b8acfbd',1,'ir_Carrier.cpp']]], - ['kcarrierac40zerospace_4837',['kCarrierAc40ZeroSpace',['../ir__Carrier_8cpp.html#a2ee9b60c12887983a6f4f123db6fd5e9',1,'ir_Carrier.cpp']]], - ['kcarrierac64bitmark_4838',['kCarrierAc64BitMark',['../ir__Carrier_8cpp.html#ae32b2dab6a654fa293f54684da45c5c0',1,'ir_Carrier.cpp']]], - ['kcarrierac64bits_4839',['kCarrierAc64Bits',['../IRremoteESP8266_8h.html#a41bc7ab7289e499ad33901da3eab661a',1,'IRremoteESP8266.h']]], - ['kcarrierac64checksumoffset_4840',['kCarrierAc64ChecksumOffset',['../ir__Carrier_8h.html#a3aa65474b5be8c77d498b7e83d8b8f31',1,'ir_Carrier.h']]], - ['kcarrierac64checksumsize_4841',['kCarrierAc64ChecksumSize',['../ir__Carrier_8h.html#a0b446c17c4965508f335e68c786f0596',1,'ir_Carrier.h']]], - ['kcarrierac64cool_4842',['kCarrierAc64Cool',['../ir__Carrier_8h.html#aa75d5965da484d09f6f4c645cdb23869',1,'ir_Carrier.h']]], - ['kcarrierac64fan_4843',['kCarrierAc64Fan',['../ir__Carrier_8h.html#a57655ceea762b18e0dd96724ddf888bd',1,'ir_Carrier.h']]], - ['kcarrierac64fanauto_4844',['kCarrierAc64FanAuto',['../ir__Carrier_8h.html#a12d1fb295a0d9cf407040ab544acc245',1,'ir_Carrier.h']]], - ['kcarrierac64fanhigh_4845',['kCarrierAc64FanHigh',['../ir__Carrier_8h.html#a099f2e82998bd78d25cec17a4be5f230',1,'ir_Carrier.h']]], - ['kcarrierac64fanlow_4846',['kCarrierAc64FanLow',['../ir__Carrier_8h.html#aaeee61e5924bdc8028c4775f96ba14d2',1,'ir_Carrier.h']]], - ['kcarrierac64fanmedium_4847',['kCarrierAc64FanMedium',['../ir__Carrier_8h.html#aeb8943f8d9f2bd95a9df6500eea7cba4',1,'ir_Carrier.h']]], - ['kcarrierac64gap_4848',['kCarrierAc64Gap',['../ir__Carrier_8cpp.html#a6f7ba77f1350126d78a23d7ba967e258',1,'ir_Carrier.cpp']]], - ['kcarrierac64hdrmark_4849',['kCarrierAc64HdrMark',['../ir__Carrier_8cpp.html#a19dc2108d4490c82c03c87c625bc5f31',1,'ir_Carrier.cpp']]], - ['kcarrierac64hdrspace_4850',['kCarrierAc64HdrSpace',['../ir__Carrier_8cpp.html#ad73dbf55f5ffa03d92ec699b23e8ca8d',1,'ir_Carrier.cpp']]], - ['kcarrierac64heat_4851',['kCarrierAc64Heat',['../ir__Carrier_8h.html#ac261ba8bff6f103bb9043c85a6f21d58',1,'ir_Carrier.h']]], - ['kcarrierac64maxtemp_4852',['kCarrierAc64MaxTemp',['../ir__Carrier_8h.html#a5653bc180a4c849b5e0b33b957255ae4',1,'ir_Carrier.h']]], - ['kcarrierac64minrepeat_4853',['kCarrierAc64MinRepeat',['../IRremoteESP8266_8h.html#a8b2b3670dc74ce9fbf3c8b511422a06c',1,'IRremoteESP8266.h']]], - ['kcarrierac64mintemp_4854',['kCarrierAc64MinTemp',['../ir__Carrier_8h.html#a9e7a88bf52839ecb34da1966bb8a956b',1,'ir_Carrier.h']]], - ['kcarrierac64onespace_4855',['kCarrierAc64OneSpace',['../ir__Carrier_8cpp.html#a58ea051d56227a4037682f5d612b4cc7',1,'ir_Carrier.cpp']]], - ['kcarrierac64timermax_4856',['kCarrierAc64TimerMax',['../ir__Carrier_8h.html#a78a34b51e51dc3b4129f350673c9fa96',1,'ir_Carrier.h']]], - ['kcarrierac64timermin_4857',['kCarrierAc64TimerMin',['../ir__Carrier_8h.html#aeebac3e61246f2e148806d4b4e8ac13e',1,'ir_Carrier.h']]], - ['kcarrierac64zerospace_4858',['kCarrierAc64ZeroSpace',['../ir__Carrier_8cpp.html#af28d4332e0f1ad19aa743b993f44cdc7',1,'ir_Carrier.cpp']]], - ['kcarrieracbitmark_4859',['kCarrierAcBitMark',['../ir__Carrier_8cpp.html#af4a608f81c745734499ec1842167940b',1,'ir_Carrier.cpp']]], - ['kcarrieracbits_4860',['kCarrierAcBits',['../IRremoteESP8266_8h.html#a668d9ac84f7dae61c35534b842d4956b',1,'IRremoteESP8266.h']]], - ['kcarrieracfreq_4861',['kCarrierAcFreq',['../ir__Carrier_8cpp.html#a795dc2d9b122bd3794fddbddef571058',1,'ir_Carrier.cpp']]], - ['kcarrieracgap_4862',['kCarrierAcGap',['../ir__Carrier_8cpp.html#a00767c0b503a7fc8f0b2ddfac24a4f85',1,'ir_Carrier.cpp']]], - ['kcarrierachdrmark_4863',['kCarrierAcHdrMark',['../ir__Carrier_8cpp.html#ad9a7754e77cfcfd6c6032d497bc4528d',1,'ir_Carrier.cpp']]], - ['kcarrierachdrspace_4864',['kCarrierAcHdrSpace',['../ir__Carrier_8cpp.html#a8e09857e2fe15d6983ec0384c57140d4',1,'ir_Carrier.cpp']]], - ['kcarrieracminrepeat_4865',['kCarrierAcMinRepeat',['../IRremoteESP8266_8h.html#a78c8a8b11179e8fd20bf09fa35f6b886',1,'IRremoteESP8266.h']]], - ['kcarrieraconespace_4866',['kCarrierAcOneSpace',['../ir__Carrier_8cpp.html#ab04a214a7c2e0439384736c46ddc6c61',1,'ir_Carrier.cpp']]], - ['kcarrieraczerospace_4867',['kCarrierAcZeroSpace',['../ir__Carrier_8cpp.html#a51c9c4bbd6e2927baac15dc60c1e60fa',1,'ir_Carrier.cpp']]], - ['kceilingstr_4868',['kCeilingStr',['../IRtext_8cpp.html#a5258c9d80502d5a8e14bb324a394452b',1,'kCeilingStr(): IRtext.cpp'],['../IRtext_8h.html#aa47afe8f4c175954e9439c0c9e48c83e',1,'kCeilingStr(): IRtext.cpp']]], - ['kcelsiusfahrenheitstr_4869',['kCelsiusFahrenheitStr',['../IRtext_8cpp.html#ab24f542059d0c1c1352686469c9fde7d',1,'kCelsiusFahrenheitStr(): IRtext.cpp'],['../IRtext_8h.html#a9bd25ef522ae667d9869b6f6ea937f5d',1,'kCelsiusFahrenheitStr(): IRtext.cpp']]], - ['kcelsiusstr_4870',['kCelsiusStr',['../IRtext_8cpp.html#af0ad7ca76c659a17872960bcbcfbdbbf',1,'kCelsiusStr(): IRtext.cpp'],['../IRtext_8h.html#aae21484e9f049a7cfa507068abd3915e',1,'kCelsiusStr(): IRtext.cpp']]], - ['kcentrestr_4871',['kCentreStr',['../IRtext_8cpp.html#a87a4151e0361c9f75d0d5c00f9bad1ee',1,'kCentreStr(): IRtext.cpp'],['../IRtext_8h.html#aab13bc11db65584fbb8a61c686d67228',1,'kCentreStr(): IRtext.cpp']]], - ['kchangestr_4872',['kChangeStr',['../IRtext_8cpp.html#a1f6396eb9bd4327a7a2307e5724c1dd7',1,'kChangeStr(): IRtext.cpp'],['../IRtext_8h.html#a46e6bd06cfbf5f462042d7c720db01ae',1,'kChangeStr(): IRtext.cpp']]], - ['kcirculatestr_4873',['kCirculateStr',['../IRtext_8cpp.html#a869ef1f579373ff4b5b61b1cba215680',1,'kCirculateStr(): IRtext.cpp'],['../IRtext_8h.html#a0ba8b339babc7f7f26dbab2399bcc578',1,'kCirculateStr(): IRtext.cpp']]], - ['kcleanstr_4874',['kCleanStr',['../IRtext_8cpp.html#ad2d97c52e8df2704654fdbd0a7a0561e',1,'kCleanStr(): IRtext.cpp'],['../IRtext_8h.html#a45c17b23773e9dcded65a82577b00263',1,'kCleanStr(): IRtext.cpp']]], - ['kclockstr_4875',['kClockStr',['../IRtext_8cpp.html#ad39bd469d5474159463543184cfae321',1,'kClockStr(): IRtext.cpp'],['../IRtext_8h.html#a6e4b8f591a1d3d399a559d41847b3fa8',1,'kClockStr(): IRtext.cpp']]], - ['kcodestr_4876',['kCodeStr',['../IRtext_8cpp.html#a26e4bf74871ce457f42ec839545987f4',1,'kCodeStr(): IRtext.cpp'],['../IRtext_8h.html#a58a9da5cec40746dbe20455c6ef6c8fd',1,'kCodeStr(): IRtext.cpp']]], - ['kcolonspacestr_4877',['kColonSpaceStr',['../IRtext_8cpp.html#a5d978c9ac25163a9629b7e8e2d37d25e',1,'kColonSpaceStr(): IRtext.cpp'],['../IRtext_8h.html#aab1b0d2ea5169c1e1d8eff4daef36512',1,'kColonSpaceStr(): IRtext.cpp']]], - ['kcomfortstr_4878',['kComfortStr',['../IRtext_8cpp.html#aa7f0cfdb126ff7b0f8db6033bb51f36d',1,'kComfortStr(): IRtext.cpp'],['../IRtext_8h.html#a20037561545d4ba4cfe66c1e103ecde1',1,'kComfortStr(): IRtext.cpp']]], - ['kcommandstr_4879',['kCommandStr',['../IRtext_8cpp.html#afd5865ea8c0f8565369dd2c4ee4622d6',1,'kCommandStr(): IRtext.cpp'],['../IRtext_8h.html#afdc9e8cc5c8c5c03749898d4f2d38606',1,'kCommandStr(): IRtext.cpp']]], - ['kcommaspacestr_4880',['kCommaSpaceStr',['../IRtext_8cpp.html#ac8a9678d4c9eeee17a9dc28624c0ab49',1,'kCommaSpaceStr(): IRtext.cpp'],['../IRtext_8h.html#a48f5dfcf2e0f13f502980d42e879aec3',1,'kCommaSpaceStr(): IRtext.cpp']]], - ['kcoolixauto_4881',['kCoolixAuto',['../ir__Coolix_8h.html#a73c1ef7c2c80c861256a14a9f256b125',1,'ir_Coolix.h']]], - ['kcoolixbitmark_4882',['kCoolixBitMark',['../ir__Coolix_8cpp.html#acd8562a27ec6c0a6c2cf9480082e04cd',1,'ir_Coolix.cpp']]], - ['kcoolixbitmarkticks_4883',['kCoolixBitMarkTicks',['../ir__Coolix_8cpp.html#aefaa206b4316a4fd921f7171295d1232',1,'ir_Coolix.cpp']]], - ['kcoolixbits_4884',['kCoolixBits',['../IRremoteESP8266_8h.html#aed48c68a637e4b45b80bbf4964ea79f9',1,'IRremoteESP8266.h']]], - ['kcoolixclean_4885',['kCoolixClean',['../ir__Coolix_8h.html#a5cc9fcde4a6da54917b4d69bb352bc86',1,'ir_Coolix.h']]], - ['kcoolixcmdfan_4886',['kCoolixCmdFan',['../ir__Coolix_8h.html#a7d5ff02f4a0c379322877b3dcf934c77',1,'ir_Coolix.h']]], - ['kcoolixcool_4887',['kCoolixCool',['../ir__Coolix_8h.html#ae285ee4206fe45d25bb1d99b848c7e65',1,'ir_Coolix.h']]], - ['kcoolixdefaultrepeat_4888',['kCoolixDefaultRepeat',['../IRremoteESP8266_8h.html#aa89410d369d71738c8cbefae6ac3b00f',1,'IRremoteESP8266.h']]], - ['kcoolixdefaultstate_4889',['kCoolixDefaultState',['../ir__Coolix_8h.html#ad54ebf20658c33e5ad54fc54a513511e',1,'ir_Coolix.h']]], - ['kcoolixdry_4890',['kCoolixDry',['../ir__Coolix_8h.html#a904c4135f61120e71577f6830adae689',1,'ir_Coolix.h']]], - ['kcoolixfan_4891',['kCoolixFan',['../ir__Coolix_8h.html#a2e050321c994844f2ff6668ba6973ac4',1,'ir_Coolix.h']]], - ['kcoolixfanauto_4892',['kCoolixFanAuto',['../ir__Coolix_8h.html#ac25d3c45ed7d7d30ff2ebf617d8265f0',1,'ir_Coolix.h']]], - ['kcoolixfanauto0_4893',['kCoolixFanAuto0',['../ir__Coolix_8h.html#a38cccd1edee2c88c1b080f1d5600ead7',1,'ir_Coolix.h']]], - ['kcoolixfanfixed_4894',['kCoolixFanFixed',['../ir__Coolix_8h.html#a37a3a23d8fe30df024cb844f82f90b2a',1,'ir_Coolix.h']]], - ['kcoolixfanmax_4895',['kCoolixFanMax',['../ir__Coolix_8h.html#aabb349ee111467088b9a292950aba753',1,'ir_Coolix.h']]], - ['kcoolixfanmed_4896',['kCoolixFanMed',['../ir__Coolix_8h.html#a2750626cda2e389df901b459805e09bd',1,'ir_Coolix.h']]], - ['kcoolixfanmin_4897',['kCoolixFanMin',['../ir__Coolix_8h.html#a6c0086075cce1698c48cc30e045ab5bf',1,'ir_Coolix.h']]], - ['kcoolixfantempcode_4898',['kCoolixFanTempCode',['../ir__Coolix_8h.html#a6d2d6f2fd8f5e9a4491623b9351efcba',1,'ir_Coolix.h']]], - ['kcoolixfanzonefollow_4899',['kCoolixFanZoneFollow',['../ir__Coolix_8h.html#a5a71c6acd18b3198c7900e2de34c48a3',1,'ir_Coolix.h']]], - ['kcoolixhdrmark_4900',['kCoolixHdrMark',['../ir__Coolix_8cpp.html#a746299797d958ccf116e6d1cdab3ad06',1,'ir_Coolix.cpp']]], - ['kcoolixhdrmarkticks_4901',['kCoolixHdrMarkTicks',['../ir__Coolix_8cpp.html#a04d520a0fe3d773f377810174e5463a4',1,'ir_Coolix.cpp']]], - ['kcoolixhdrspace_4902',['kCoolixHdrSpace',['../ir__Coolix_8cpp.html#ab7ff2a6bd99e0e6a0db3f14350cca84c',1,'ir_Coolix.cpp']]], - ['kcoolixhdrspaceticks_4903',['kCoolixHdrSpaceTicks',['../ir__Coolix_8cpp.html#a58951e9800513b019ccb9f04ae55716f',1,'ir_Coolix.cpp']]], - ['kcoolixheat_4904',['kCoolixHeat',['../ir__Coolix_8h.html#a234b39696f0b2fac6b37aa309082505e',1,'ir_Coolix.h']]], - ['kcoolixled_4905',['kCoolixLed',['../ir__Coolix_8h.html#a68ae46e117caf0d7a3cc2ef9492495f1',1,'ir_Coolix.h']]], - ['kcoolixmingap_4906',['kCoolixMinGap',['../ir__Coolix_8cpp.html#a46da2480f6850af899db74a4f2270cdc',1,'ir_Coolix.cpp']]], - ['kcoolixmingapticks_4907',['kCoolixMinGapTicks',['../ir__Coolix_8cpp.html#a94f47fbf027fcb90664b302ff123f535',1,'ir_Coolix.cpp']]], - ['kcoolixoff_4908',['kCoolixOff',['../ir__Coolix_8h.html#aef6f59b83a14b8505f395b2eb8d8ad39',1,'ir_Coolix.h']]], - ['kcoolixonespace_4909',['kCoolixOneSpace',['../ir__Coolix_8cpp.html#a97a8439ace71584e36ab7306c3d53749',1,'ir_Coolix.cpp']]], - ['kcoolixonespaceticks_4910',['kCoolixOneSpaceTicks',['../ir__Coolix_8cpp.html#a78770eaf597e4aa2ed539248ef10ec11',1,'ir_Coolix.cpp']]], - ['kcoolixsensortempignorecode_4911',['kCoolixSensorTempIgnoreCode',['../ir__Coolix_8h.html#ae3aba531b0c0053424786ec4bb2be934',1,'ir_Coolix.h']]], - ['kcoolixsensortempmax_4912',['kCoolixSensorTempMax',['../ir__Coolix_8h.html#a71641b1240ee439e77128165cedf899f',1,'ir_Coolix.h']]], - ['kcoolixsleep_4913',['kCoolixSleep',['../ir__Coolix_8h.html#aa7f9f96e56bd3f6b814bc84b947b2417',1,'ir_Coolix.h']]], - ['kcoolixswing_4914',['kCoolixSwing',['../ir__Coolix_8h.html#a799ad5ab7cf43f0aac3c342305f14b90',1,'ir_Coolix.h']]], - ['kcoolixswingh_4915',['kCoolixSwingH',['../ir__Coolix_8h.html#a877bd2731dfc86d864e38a5ceb4ede6e',1,'ir_Coolix.h']]], - ['kcoolixswingv_4916',['kCoolixSwingV',['../ir__Coolix_8h.html#ab9fcaf25426f1f9ad293e165f8c0bf38',1,'ir_Coolix.h']]], - ['kcoolixtempmap_4917',['kCoolixTempMap',['../ir__Coolix_8h.html#a9c8931df1dbed38c8119f6605266c710',1,'ir_Coolix.h']]], - ['kcoolixtempmax_4918',['kCoolixTempMax',['../ir__Coolix_8h.html#afbbb02bfeaaf5cb558ca28cdd5cfc4c3',1,'ir_Coolix.h']]], - ['kcoolixtempmin_4919',['kCoolixTempMin',['../ir__Coolix_8h.html#accd37cf257fa5fbeb64e28f0d63888fb',1,'ir_Coolix.h']]], - ['kcoolixtemprange_4920',['kCoolixTempRange',['../ir__Coolix_8h.html#a74e3e75466fd27672968d660e3fddc9a',1,'ir_Coolix.h']]], - ['kcoolixtick_4921',['kCoolixTick',['../ir__Coolix_8cpp.html#a61ddf842920e2b3e33fdb856bd911eae',1,'ir_Coolix.cpp']]], - ['kcoolixturbo_4922',['kCoolixTurbo',['../ir__Coolix_8h.html#ade957b6f4a6cdb064c709972a5c31a4b',1,'ir_Coolix.h']]], - ['kcoolixzerospace_4923',['kCoolixZeroSpace',['../ir__Coolix_8cpp.html#a1a9ccf6b91e786f310ffe53d55cfd6d1',1,'ir_Coolix.cpp']]], - ['kcoolixzerospaceticks_4924',['kCoolixZeroSpaceTicks',['../ir__Coolix_8cpp.html#af1a750cb3e1f142326cd177118c27136',1,'ir_Coolix.cpp']]], - ['kcoolstr_4925',['kCoolStr',['../IRtext_8cpp.html#a31258a2210b16dc977bcfd96938a8937',1,'kCoolStr(): IRtext.cpp'],['../IRtext_8h.html#ac25d86b97b8e53292dc8d0604ae263a3',1,'kCoolStr(): IRtext.cpp']]], - ['kcoronaacbitmark_4926',['kCoronaAcBitMark',['../ir__Corona_8cpp.html#a1ecb863f625463289d34e210885238db',1,'ir_Corona.cpp']]], - ['kcoronaacbits_4927',['kCoronaAcBits',['../IRremoteESP8266_8h.html#aaf59be616d7e3a5e605b8d1e08f20686',1,'IRremoteESP8266.h']]], - ['kcoronaacbitsshort_4928',['kCoronaAcBitsShort',['../IRremoteESP8266_8h.html#a1191a9293b03aa14426083b6f411a4e3',1,'IRremoteESP8266.h']]], - ['kcoronaacfanauto_4929',['kCoronaAcFanAuto',['../ir__Corona_8h.html#a8c97a0c674c000e4486159d628f1aa0a',1,'ir_Corona.h']]], - ['kcoronaacfanhigh_4930',['kCoronaAcFanHigh',['../ir__Corona_8h.html#a4f58be196a744892402e287b12502dcb',1,'ir_Corona.h']]], - ['kcoronaacfanlow_4931',['kCoronaAcFanLow',['../ir__Corona_8h.html#af9e5c729be856bf4b1bc10568f96c183',1,'ir_Corona.h']]], - ['kcoronaacfanmedium_4932',['kCoronaAcFanMedium',['../ir__Corona_8h.html#a9d6b46c006bd6ea54a14b92a2d7a3dff',1,'ir_Corona.h']]], - ['kcoronaacfreq_4933',['kCoronaAcFreq',['../ir__Corona_8cpp.html#a0cb56860c88e9503743bcf94068bbf56',1,'ir_Corona.cpp']]], - ['kcoronaachdrmark_4934',['kCoronaAcHdrMark',['../ir__Corona_8cpp.html#a697d84f13a1228dbae3cfb491124689a',1,'ir_Corona.cpp']]], - ['kcoronaachdrspace_4935',['kCoronaAcHdrSpace',['../ir__Corona_8cpp.html#ad2425c406aa36c7752832d19f4a735f7',1,'ir_Corona.cpp']]], - ['kcoronaacmaxtemp_4936',['kCoronaAcMaxTemp',['../ir__Corona_8h.html#aa6d199e5bb8382443da4e1f303dd7988',1,'ir_Corona.h']]], - ['kcoronaacmintemp_4937',['kCoronaAcMinTemp',['../ir__Corona_8h.html#ae984b624da5e2d5ef1405e1b8d9424ba',1,'ir_Corona.h']]], - ['kcoronaacmodecool_4938',['kCoronaAcModeCool',['../ir__Corona_8h.html#a6f8bb2e27990014686828b4b7e2c84c6',1,'ir_Corona.h']]], - ['kcoronaacmodedry_4939',['kCoronaAcModeDry',['../ir__Corona_8h.html#afd47996b221103ae142363f04014fb4b',1,'ir_Corona.h']]], - ['kcoronaacmodefan_4940',['kCoronaAcModeFan',['../ir__Corona_8h.html#ab8098af3e0f9cd82a7c9c771ffd8ad15',1,'ir_Corona.h']]], - ['kcoronaacmodeheat_4941',['kCoronaAcModeHeat',['../ir__Corona_8h.html#a7f3c7c051ae3ee07621c47505a87bec1',1,'ir_Corona.h']]], - ['kcoronaacofftimersection_4942',['kCoronaAcOffTimerSection',['../ir__Corona_8h.html#ac2cfdbf9b3ed3d85c0e298c3de8f357b',1,'ir_Corona.h']]], - ['kcoronaaconespace_4943',['kCoronaAcOneSpace',['../ir__Corona_8cpp.html#a6d9c199bdefbbb30b9561c5498c5a76e',1,'ir_Corona.cpp']]], - ['kcoronaacontimersection_4944',['kCoronaAcOnTimerSection',['../ir__Corona_8h.html#a711b7b5bd2081ca9b1e7ab25573ff612',1,'ir_Corona.h']]], - ['kcoronaacoverhead_4945',['kCoronaAcOverhead',['../ir__Corona_8cpp.html#aaef71b297a7868863a2ad7219bafabeb',1,'ir_Corona.cpp']]], - ['kcoronaacoverheadshort_4946',['kCoronaAcOverheadShort',['../ir__Corona_8cpp.html#a56010f67a047f551db681bb0ec8c35f7',1,'ir_Corona.cpp']]], - ['kcoronaacsectionbytes_4947',['kCoronaAcSectionBytes',['../ir__Corona_8h.html#a094063159064053dd5e5059eb0d90f7c',1,'ir_Corona.h']]], - ['kcoronaacsectiondata0base_4948',['kCoronaAcSectionData0Base',['../ir__Corona_8h.html#a2d0b1f5a0839839a17947bde624d4c74',1,'ir_Corona.h']]], - ['kcoronaacsectionheader0_4949',['kCoronaAcSectionHeader0',['../ir__Corona_8h.html#a39a2c0d214a10f8f9685e9955c0be0a4',1,'ir_Corona.h']]], - ['kcoronaacsectionheader1_4950',['kCoronaAcSectionHeader1',['../ir__Corona_8h.html#a8a661569fc7b97ba2e9e755b944162f8',1,'ir_Corona.h']]], - ['kcoronaacsectionlabelbase_4951',['kCoronaAcSectionLabelBase',['../ir__Corona_8h.html#a6ff8a3461b87df048878faf49c12d064',1,'ir_Corona.h']]], - ['kcoronaacsections_4952',['kCoronaAcSections',['../ir__Corona_8h.html#a37e6cc5e2e186b2f5c5c938496ece111',1,'ir_Corona.h']]], - ['kcoronaacsettingssection_4953',['kCoronaAcSettingsSection',['../ir__Corona_8h.html#a5a83a045fd9878eae073f25e6c5b4753',1,'ir_Corona.h']]], - ['kcoronaacspacegap_4954',['kCoronaAcSpaceGap',['../ir__Corona_8cpp.html#a50f46039059d2a427bc9bc93c53df4fd',1,'ir_Corona.cpp']]], - ['kcoronaacstatelength_4955',['kCoronaAcStateLength',['../IRremoteESP8266_8h.html#ab18df94a82b365ff30caaabb05a9fcaf',1,'IRremoteESP8266.h']]], - ['kcoronaacstatelengthshort_4956',['kCoronaAcStateLengthShort',['../IRremoteESP8266_8h.html#a32b65ada4941a9622fbbc60f01b82425',1,'IRremoteESP8266.h']]], - ['kcoronaactimermax_4957',['kCoronaAcTimerMax',['../ir__Corona_8h.html#af0428879b0fd39def7ea41e2906d9127',1,'ir_Corona.h']]], - ['kcoronaactimeroff_4958',['kCoronaAcTimerOff',['../ir__Corona_8h.html#af0feaf445fae561c3fa18ec68a19edef',1,'ir_Corona.h']]], - ['kcoronaactimerunitspermin_4959',['kCoronaAcTimerUnitsPerMin',['../ir__Corona_8h.html#a7f76e80480abdbdcdaf39186901950a4',1,'ir_Corona.h']]], - ['kcoronaaczerospace_4960',['kCoronaAcZeroSpace',['../ir__Corona_8cpp.html#af64bbcaf63ca9d06089de382354eb2d9',1,'ir_Corona.cpp']]], - ['kcoronatolerance_4961',['kCoronaTolerance',['../ir__Corona_8cpp.html#aad3726c95bfd7a9f79ba1e0c7058bb7b',1,'ir_Corona.cpp']]], - ['kdaikin128auto_4962',['kDaikin128Auto',['../ir__Daikin_8h.html#a1d2a0f9db8e1be93bff12ec23ba212e0',1,'ir_Daikin.h']]], - ['kdaikin128bitceiling_4963',['kDaikin128BitCeiling',['../ir__Daikin_8h.html#a0e1d1c1e7544eb455187290dbe4a1520',1,'ir_Daikin.h']]], - ['kdaikin128bitmark_4964',['kDaikin128BitMark',['../ir__Daikin_8h.html#a5178ac70eb4e134597e504d373d52fcd',1,'ir_Daikin.h']]], - ['kdaikin128bits_4965',['kDaikin128Bits',['../IRremoteESP8266_8h.html#a5bb2e6f8acbc0123de5ac0fd76e1646a',1,'IRremoteESP8266.h']]], - ['kdaikin128bitwall_4966',['kDaikin128BitWall',['../ir__Daikin_8h.html#a842b3b696f95c5515ee4180626d78973',1,'ir_Daikin.h']]], - ['kdaikin128cool_4967',['kDaikin128Cool',['../ir__Daikin_8h.html#a24ee5ffe877d7caa964256e5723af7e1',1,'ir_Daikin.h']]], - ['kdaikin128defaultrepeat_4968',['kDaikin128DefaultRepeat',['../IRremoteESP8266_8h.html#a5c116cb58be005468de125f6ee651ccb',1,'IRremoteESP8266.h']]], - ['kdaikin128dry_4969',['kDaikin128Dry',['../ir__Daikin_8h.html#ac4da761bf3b0ce12e6513a2718b3a907',1,'ir_Daikin.h']]], - ['kdaikin128fan_4970',['kDaikin128Fan',['../ir__Daikin_8h.html#ac1c41d54f27d1653181ac69384f1130f',1,'ir_Daikin.h']]], - ['kdaikin128fanauto_4971',['kDaikin128FanAuto',['../ir__Daikin_8h.html#aec2fe4618978c17e60a1ea8b1a89c263',1,'ir_Daikin.h']]], - ['kdaikin128fanhigh_4972',['kDaikin128FanHigh',['../ir__Daikin_8h.html#a7ffd52eb15f6ffb5a0ffcddf39aa8f0d',1,'ir_Daikin.h']]], - ['kdaikin128fanlow_4973',['kDaikin128FanLow',['../ir__Daikin_8h.html#a505c58ff23c5a551c6e2e356f66e9cc1',1,'ir_Daikin.h']]], - ['kdaikin128fanmed_4974',['kDaikin128FanMed',['../ir__Daikin_8h.html#a4eb21add9bfb6774047a8a2c8b87ebbf',1,'ir_Daikin.h']]], - ['kdaikin128fanpowerful_4975',['kDaikin128FanPowerful',['../ir__Daikin_8h.html#ae0899153669a6e8848556cd65c26c8b5',1,'ir_Daikin.h']]], - ['kdaikin128fanquiet_4976',['kDaikin128FanQuiet',['../ir__Daikin_8h.html#a54777f468236bf4b342240e8c523308d',1,'ir_Daikin.h']]], - ['kdaikin128footermark_4977',['kDaikin128FooterMark',['../ir__Daikin_8h.html#ad5668b12e38afa4b44a8e214dac22f2e',1,'ir_Daikin.h']]], - ['kdaikin128freq_4978',['kDaikin128Freq',['../ir__Daikin_8h.html#a5a76fc08310d517cb7e182c287e77df1',1,'ir_Daikin.h']]], - ['kdaikin128gap_4979',['kDaikin128Gap',['../ir__Daikin_8h.html#a6323c59eb5906ac2887a02f9cd09a329',1,'ir_Daikin.h']]], - ['kdaikin128hdrmark_4980',['kDaikin128HdrMark',['../ir__Daikin_8h.html#a6257375541b6e10bda4083d9529e80f0',1,'ir_Daikin.h']]], - ['kdaikin128hdrspace_4981',['kDaikin128HdrSpace',['../ir__Daikin_8h.html#a114a4cef444d4c552b90701cb7debc73',1,'ir_Daikin.h']]], - ['kdaikin128heat_4982',['kDaikin128Heat',['../ir__Daikin_8h.html#ada28db809b26e2ae9e927650d4cb4f7a',1,'ir_Daikin.h']]], - ['kdaikin128leadermark_4983',['kDaikin128LeaderMark',['../ir__Daikin_8h.html#ab609b8979a2d2bf4fa5b7164590b2bfb',1,'ir_Daikin.h']]], - ['kdaikin128leaderspace_4984',['kDaikin128LeaderSpace',['../ir__Daikin_8h.html#a259bfa510a9ec06049c0a7bf6563eb35',1,'ir_Daikin.h']]], - ['kdaikin128maxtemp_4985',['kDaikin128MaxTemp',['../ir__Daikin_8h.html#a7dcd514d292ef98d70083227d046baad',1,'ir_Daikin.h']]], - ['kdaikin128mintemp_4986',['kDaikin128MinTemp',['../ir__Daikin_8h.html#aad27f3ff311f1defc5ac9fb3be0ad504',1,'ir_Daikin.h']]], - ['kdaikin128onespace_4987',['kDaikin128OneSpace',['../ir__Daikin_8h.html#ac6a9a48ae0037b889a6619361fd090ac',1,'ir_Daikin.h']]], - ['kdaikin128sectionlength_4988',['kDaikin128SectionLength',['../ir__Daikin_8h.html#a204a306e7d7071d4b798f7947c232520',1,'ir_Daikin.h']]], - ['kdaikin128sections_4989',['kDaikin128Sections',['../ir__Daikin_8h.html#a81f0cfda4d8452d6053cc6999a270b1f',1,'ir_Daikin.h']]], - ['kdaikin128statelength_4990',['kDaikin128StateLength',['../IRremoteESP8266_8h.html#a4279ccd14a3af2046e393661a7b4879f',1,'IRremoteESP8266.h']]], - ['kdaikin128zerospace_4991',['kDaikin128ZeroSpace',['../ir__Daikin_8h.html#a1ca69805ada8ec451199c18d9da6f02a',1,'ir_Daikin.h']]], - ['kdaikin152bitmark_4992',['kDaikin152BitMark',['../ir__Daikin_8h.html#afd50318eaa383a7e85f0d0c2866bc9d5',1,'ir_Daikin.h']]], - ['kdaikin152bits_4993',['kDaikin152Bits',['../IRremoteESP8266_8h.html#af056e1ac2d00c6d6440c3dd2ae283f09',1,'IRremoteESP8266.h']]], - ['kdaikin152defaultrepeat_4994',['kDaikin152DefaultRepeat',['../IRremoteESP8266_8h.html#a9407eebab271524e74bc3ddddb1a2e0b',1,'IRremoteESP8266.h']]], - ['kdaikin152drytemp_4995',['kDaikin152DryTemp',['../ir__Daikin_8h.html#a86e9308c00dbdd79546687af412c4156',1,'ir_Daikin.h']]], - ['kdaikin152fantemp_4996',['kDaikin152FanTemp',['../ir__Daikin_8h.html#ad5c5bb7e8b181c79fe68607c1a4d202f',1,'ir_Daikin.h']]], - ['kdaikin152freq_4997',['kDaikin152Freq',['../ir__Daikin_8h.html#aa45492ae186142971975b7da56658a0b',1,'ir_Daikin.h']]], - ['kdaikin152gap_4998',['kDaikin152Gap',['../ir__Daikin_8h.html#aee02d3b17db4a382035c00329c6c2a0a',1,'ir_Daikin.h']]], - ['kdaikin152hdrmark_4999',['kDaikin152HdrMark',['../ir__Daikin_8h.html#a85fad797a9b43cb317fdb2e2c254a3bb',1,'ir_Daikin.h']]], - ['kdaikin152hdrspace_5000',['kDaikin152HdrSpace',['../ir__Daikin_8h.html#a0eb0b1b5fabab75a5956b6b939696a12',1,'ir_Daikin.h']]], - ['kdaikin152leaderbits_5001',['kDaikin152LeaderBits',['../ir__Daikin_8h.html#a432454efd5ea7457d34fe014b0d328c1',1,'ir_Daikin.h']]], - ['kdaikin152onespace_5002',['kDaikin152OneSpace',['../ir__Daikin_8h.html#a1f96172c74b261a26ec6d71201f7c589',1,'ir_Daikin.h']]], - ['kdaikin152statelength_5003',['kDaikin152StateLength',['../IRremoteESP8266_8h.html#ae7579708922ffd3e44295f8770878983',1,'IRremoteESP8266.h']]], - ['kdaikin152zerospace_5004',['kDaikin152ZeroSpace',['../ir__Daikin_8h.html#aec201aee71c0e301e8e191ddcaadb2de',1,'ir_Daikin.h']]], - ['kdaikin160bitmark_5005',['kDaikin160BitMark',['../ir__Daikin_8h.html#a852c2268ed7a8dd42c629e8a0706b6f5',1,'ir_Daikin.h']]], - ['kdaikin160bits_5006',['kDaikin160Bits',['../IRremoteESP8266_8h.html#aa6f1d6dded2ae3500cd52aa0c482a1b6',1,'IRremoteESP8266.h']]], - ['kdaikin160defaultrepeat_5007',['kDaikin160DefaultRepeat',['../IRremoteESP8266_8h.html#a82f4f1d8fae51c7e2f1f6753ca6e6053',1,'IRremoteESP8266.h']]], - ['kdaikin160freq_5008',['kDaikin160Freq',['../ir__Daikin_8h.html#a69e8abb57aecc6b99c60c5df7e18ff39',1,'ir_Daikin.h']]], - ['kdaikin160gap_5009',['kDaikin160Gap',['../ir__Daikin_8h.html#a8d107f0d63ef6951d657a55a370e8a8b',1,'ir_Daikin.h']]], - ['kdaikin160hdrmark_5010',['kDaikin160HdrMark',['../ir__Daikin_8h.html#a96043b43ba4d963456206e2d02639325',1,'ir_Daikin.h']]], - ['kdaikin160hdrspace_5011',['kDaikin160HdrSpace',['../ir__Daikin_8h.html#aefa7b5de43483951e00bd5d2cdbe5665',1,'ir_Daikin.h']]], - ['kdaikin160onespace_5012',['kDaikin160OneSpace',['../ir__Daikin_8h.html#a068c2252191675dca6503bfc37e4785e',1,'ir_Daikin.h']]], - ['kdaikin160section1length_5013',['kDaikin160Section1Length',['../ir__Daikin_8h.html#a06b59ee56cddcdcd9dfa375663da0c2d',1,'ir_Daikin.h']]], - ['kdaikin160section2length_5014',['kDaikin160Section2Length',['../ir__Daikin_8h.html#a7d6194a363661e11167cc972f1b92f68',1,'ir_Daikin.h']]], - ['kdaikin160sections_5015',['kDaikin160Sections',['../ir__Daikin_8h.html#afcc5de2994c1cd618437f1c67a5754d0',1,'ir_Daikin.h']]], - ['kdaikin160statelength_5016',['kDaikin160StateLength',['../IRremoteESP8266_8h.html#a09f022a12a40a8fae09bfbddfbee6d62',1,'IRremoteESP8266.h']]], - ['kdaikin160swingvauto_5017',['kDaikin160SwingVAuto',['../ir__Daikin_8h.html#aa6d9ee84d2c15c69ed8dbbc832285baf',1,'ir_Daikin.h']]], - ['kdaikin160swingvhigh_5018',['kDaikin160SwingVHigh',['../ir__Daikin_8h.html#abf542bd70d12534af72fb4ec8df5d265',1,'ir_Daikin.h']]], - ['kdaikin160swingvhighest_5019',['kDaikin160SwingVHighest',['../ir__Daikin_8h.html#a2a48ca041acbde68b902a4d0be4aeec5',1,'ir_Daikin.h']]], - ['kdaikin160swingvlow_5020',['kDaikin160SwingVLow',['../ir__Daikin_8h.html#a04ff7cb63db6b281ced56283288f05c0',1,'ir_Daikin.h']]], - ['kdaikin160swingvlowest_5021',['kDaikin160SwingVLowest',['../ir__Daikin_8h.html#ac4f34c7862802b21dede2ac0b534c8d8',1,'ir_Daikin.h']]], - ['kdaikin160swingvmiddle_5022',['kDaikin160SwingVMiddle',['../ir__Daikin_8h.html#a620b644f07f9b664f09417bb362dc216',1,'ir_Daikin.h']]], - ['kdaikin160zerospace_5023',['kDaikin160ZeroSpace',['../ir__Daikin_8h.html#a2b4591126c0b26ab16b5611dbfa4d5f6',1,'ir_Daikin.h']]], - ['kdaikin176auto_5024',['kDaikin176Auto',['../ir__Daikin_8h.html#a692292ea29754f646f3611326899a3c4',1,'ir_Daikin.h']]], - ['kdaikin176bitmark_5025',['kDaikin176BitMark',['../ir__Daikin_8h.html#a4be0185fb8f65c0286cbf55dfd63a40f',1,'ir_Daikin.h']]], - ['kdaikin176bits_5026',['kDaikin176Bits',['../IRremoteESP8266_8h.html#a78baf9c97c548618428d2fcfd7cc91d7',1,'IRremoteESP8266.h']]], - ['kdaikin176cool_5027',['kDaikin176Cool',['../ir__Daikin_8h.html#ab67e912a9abdda7dcbe52ce90b70a3b5',1,'ir_Daikin.h']]], - ['kdaikin176defaultrepeat_5028',['kDaikin176DefaultRepeat',['../IRremoteESP8266_8h.html#a0228803e8fff3c73227214d4bb3d8b05',1,'IRremoteESP8266.h']]], - ['kdaikin176dry_5029',['kDaikin176Dry',['../ir__Daikin_8h.html#a23bf5f3e572d11fb38476a5118382b35',1,'ir_Daikin.h']]], - ['kdaikin176dryfantemp_5030',['kDaikin176DryFanTemp',['../ir__Daikin_8h.html#a462ad30312f13443f51b510e5b391f42',1,'ir_Daikin.h']]], - ['kdaikin176fan_5031',['kDaikin176Fan',['../ir__Daikin_8h.html#ace1184864858e862a66be779cbe698b1',1,'ir_Daikin.h']]], - ['kdaikin176fanmax_5032',['kDaikin176FanMax',['../ir__Daikin_8h.html#a97e77d2a09bc753c17104f9695a0c0b1',1,'ir_Daikin.h']]], - ['kdaikin176freq_5033',['kDaikin176Freq',['../ir__Daikin_8h.html#a7f0c76e579dad510f21c34ba57cbf8dc',1,'ir_Daikin.h']]], - ['kdaikin176gap_5034',['kDaikin176Gap',['../ir__Daikin_8h.html#a0309c9d689f64e2d57ab09a2bb27bc18',1,'ir_Daikin.h']]], - ['kdaikin176hdrmark_5035',['kDaikin176HdrMark',['../ir__Daikin_8h.html#a9ff1ca660571d09caa0de39ce1370720',1,'ir_Daikin.h']]], - ['kdaikin176hdrspace_5036',['kDaikin176HdrSpace',['../ir__Daikin_8h.html#a64c4874b5d92682911ca84e826e1ff0b',1,'ir_Daikin.h']]], - ['kdaikin176heat_5037',['kDaikin176Heat',['../ir__Daikin_8h.html#a16500da7848870fdda27209906d56ead',1,'ir_Daikin.h']]], - ['kdaikin176modebutton_5038',['kDaikin176ModeButton',['../ir__Daikin_8h.html#a5c8602d17e9f70eefd735741b9d714eb',1,'ir_Daikin.h']]], - ['kdaikin176onespace_5039',['kDaikin176OneSpace',['../ir__Daikin_8h.html#a86ed046d66daf884ac0f06722991f5ba',1,'ir_Daikin.h']]], - ['kdaikin176section1length_5040',['kDaikin176Section1Length',['../ir__Daikin_8h.html#a4c5ce7df75834c77c0908cc40dbe02ed',1,'ir_Daikin.h']]], - ['kdaikin176section2length_5041',['kDaikin176Section2Length',['../ir__Daikin_8h.html#a9e2bb25a1d64d2c042e7eef38f5347d0',1,'ir_Daikin.h']]], - ['kdaikin176sections_5042',['kDaikin176Sections',['../ir__Daikin_8h.html#a177d12ac0f4fe8b5c5aeaf8f72579607',1,'ir_Daikin.h']]], - ['kdaikin176statelength_5043',['kDaikin176StateLength',['../IRremoteESP8266_8h.html#aa71fc87dcb6f14b82997e1d2269429d2',1,'IRremoteESP8266.h']]], - ['kdaikin176swinghauto_5044',['kDaikin176SwingHAuto',['../ir__Daikin_8h.html#a326ffcf00330a1759e4f71f8f8603f23',1,'ir_Daikin.h']]], - ['kdaikin176swinghoff_5045',['kDaikin176SwingHOff',['../ir__Daikin_8h.html#a8672ccb9016808c84b1b06de6584188a',1,'ir_Daikin.h']]], - ['kdaikin176zerospace_5046',['kDaikin176ZeroSpace',['../ir__Daikin_8h.html#a4db8836caa6cae0bab6fbde94409c879',1,'ir_Daikin.h']]], - ['kdaikin216bitmark_5047',['kDaikin216BitMark',['../ir__Daikin_8h.html#ada7cf9c593d716617ff4436755eef4f9',1,'ir_Daikin.h']]], - ['kdaikin216bits_5048',['kDaikin216Bits',['../IRremoteESP8266_8h.html#a317bf475ee4c6ddd802995dc535377d9',1,'IRremoteESP8266.h']]], - ['kdaikin216defaultrepeat_5049',['kDaikin216DefaultRepeat',['../IRremoteESP8266_8h.html#a9d14d424d5a93de62f3e6f453db112db',1,'IRremoteESP8266.h']]], - ['kdaikin216freq_5050',['kDaikin216Freq',['../ir__Daikin_8h.html#aa3a9753c90ecb6d7f5ee3e5a16c79217',1,'ir_Daikin.h']]], - ['kdaikin216gap_5051',['kDaikin216Gap',['../ir__Daikin_8h.html#ab807adaab8afbeb97afaa9ddb2ec2c63',1,'ir_Daikin.h']]], - ['kdaikin216hdrmark_5052',['kDaikin216HdrMark',['../ir__Daikin_8h.html#a24163655b3d374aa643506c2bf4a2406',1,'ir_Daikin.h']]], - ['kdaikin216hdrspace_5053',['kDaikin216HdrSpace',['../ir__Daikin_8h.html#a2e69973e9a4aee29668597d09fcd70a4',1,'ir_Daikin.h']]], - ['kdaikin216onespace_5054',['kDaikin216OneSpace',['../ir__Daikin_8h.html#a1edeb73093bdea23e6cfb39c31ca1fce',1,'ir_Daikin.h']]], - ['kdaikin216section1length_5055',['kDaikin216Section1Length',['../ir__Daikin_8h.html#a5aacc812feb33ef954adc49086036859',1,'ir_Daikin.h']]], - ['kdaikin216section2length_5056',['kDaikin216Section2Length',['../ir__Daikin_8h.html#aade497bb9aad663a9e1e9403188d2154',1,'ir_Daikin.h']]], - ['kdaikin216sections_5057',['kDaikin216Sections',['../ir__Daikin_8h.html#a0ecd54bb733b982e3e5adf0c13ac9f6b',1,'ir_Daikin.h']]], - ['kdaikin216statelength_5058',['kDaikin216StateLength',['../IRremoteESP8266_8h.html#a70a1a65c1947b440e4ff27477de5ddc7',1,'IRremoteESP8266.h']]], - ['kdaikin216swingoff_5059',['kDaikin216SwingOff',['../ir__Daikin_8h.html#a84d6bb74c705dfbcd558f0b411a2a88e',1,'ir_Daikin.h']]], - ['kdaikin216swingon_5060',['kDaikin216SwingOn',['../ir__Daikin_8h.html#a4b2d77aafd84ed004390b5d4c7ad0455',1,'ir_Daikin.h']]], - ['kdaikin216zerospace_5061',['kDaikin216ZeroSpace',['../ir__Daikin_8h.html#a448250dbb5a3a9733f21a0e347d17999',1,'ir_Daikin.h']]], - ['kdaikin2bitmark_5062',['kDaikin2BitMark',['../ir__Daikin_8h.html#a226f10b7216d4f039cf79af823673a18',1,'ir_Daikin.h']]], - ['kdaikin2bits_5063',['kDaikin2Bits',['../IRremoteESP8266_8h.html#affd9b805fff390d05a83ff4eaa1c98de',1,'IRremoteESP8266.h']]], - ['kdaikin2defaultrepeat_5064',['kDaikin2DefaultRepeat',['../IRremoteESP8266_8h.html#a2dde8fd00f8a28e35da04cff9a3a1908',1,'IRremoteESP8266.h']]], - ['kdaikin2freq_5065',['kDaikin2Freq',['../ir__Daikin_8h.html#ab82e4836d9023c4ba3041d1226761461',1,'ir_Daikin.h']]], - ['kdaikin2gap_5066',['kDaikin2Gap',['../ir__Daikin_8h.html#afe14712c1be4ca14d5cd41e77d4bada0',1,'ir_Daikin.h']]], - ['kdaikin2hdrmark_5067',['kDaikin2HdrMark',['../ir__Daikin_8h.html#ab679ef183af5b94f53697d434e6540c3',1,'ir_Daikin.h']]], - ['kdaikin2hdrspace_5068',['kDaikin2HdrSpace',['../ir__Daikin_8h.html#a557f8eeaf55ff7fda0cacd0245ac27d3',1,'ir_Daikin.h']]], - ['kdaikin2leadermark_5069',['kDaikin2LeaderMark',['../ir__Daikin_8h.html#a533c7ea8f968502d4b31e14eb2b1f614',1,'ir_Daikin.h']]], - ['kdaikin2leaderspace_5070',['kDaikin2LeaderSpace',['../ir__Daikin_8h.html#a9d48d64e470ff0318bd62b3385433f57',1,'ir_Daikin.h']]], - ['kdaikin2mincooltemp_5071',['kDaikin2MinCoolTemp',['../ir__Daikin_8h.html#a78b37644f9327537d35bec4c0fd8faee',1,'ir_Daikin.h']]], - ['kdaikin2onespace_5072',['kDaikin2OneSpace',['../ir__Daikin_8h.html#a70a96368500562fa95f88dc2f203c194',1,'ir_Daikin.h']]], - ['kdaikin2section1length_5073',['kDaikin2Section1Length',['../ir__Daikin_8h.html#a463878e9bfb22ca3c64a40259598872c',1,'ir_Daikin.h']]], - ['kdaikin2section2length_5074',['kDaikin2Section2Length',['../ir__Daikin_8h.html#a8cb956f86fdf487b1ea7ac388eeda2b5',1,'ir_Daikin.h']]], - ['kdaikin2sections_5075',['kDaikin2Sections',['../ir__Daikin_8h.html#a770cef4efa5d5668b063cf0e26f1b134',1,'ir_Daikin.h']]], - ['kdaikin2statelength_5076',['kDaikin2StateLength',['../IRremoteESP8266_8h.html#a349e4d17f83bb3e707ff19c0255c1644',1,'IRremoteESP8266.h']]], - ['kdaikin2swinghauto_5077',['kDaikin2SwingHAuto',['../ir__Daikin_8h.html#a834a3138b0f9bfdac98d26aa63bc951e',1,'ir_Daikin.h']]], - ['kdaikin2swinghleft_5078',['kDaikin2SwingHLeft',['../ir__Daikin_8h.html#aa9b294b2f12660081171df290a7e874f',1,'ir_Daikin.h']]], - ['kdaikin2swinghleftmax_5079',['kDaikin2SwingHLeftMax',['../ir__Daikin_8h.html#aac08696fc9734996537204c089db2f7c',1,'ir_Daikin.h']]], - ['kdaikin2swinghmiddle_5080',['kDaikin2SwingHMiddle',['../ir__Daikin_8h.html#ab882d68819344e622182b07ded30cccf',1,'ir_Daikin.h']]], - ['kdaikin2swinghoff_5081',['kDaikin2SwingHOff',['../ir__Daikin_8h.html#ae49a187598033a7cd1c6bd33295670cf',1,'ir_Daikin.h']]], - ['kdaikin2swinghright_5082',['kDaikin2SwingHRight',['../ir__Daikin_8h.html#a8d7c79266bedbb722dc1a74c8b727a27',1,'ir_Daikin.h']]], - ['kdaikin2swinghrightmax_5083',['kDaikin2SwingHRightMax',['../ir__Daikin_8h.html#a843ad9ee10eccd799814ca9fff57f481',1,'ir_Daikin.h']]], - ['kdaikin2swinghswing_5084',['kDaikin2SwingHSwing',['../ir__Daikin_8h.html#a3776d46e94a771a6dc94d14257f34d09',1,'ir_Daikin.h']]], - ['kdaikin2swinghwide_5085',['kDaikin2SwingHWide',['../ir__Daikin_8h.html#a93157e048486e564757ba737551cf481',1,'ir_Daikin.h']]], - ['kdaikin2swingvauto_5086',['kDaikin2SwingVAuto',['../ir__Daikin_8h.html#aa91228576ef22854a693c86df5276cbb',1,'ir_Daikin.h']]], - ['kdaikin2swingvbreeze_5087',['kDaikin2SwingVBreeze',['../ir__Daikin_8h.html#a5646d38fff6a985314158796665d9d76',1,'ir_Daikin.h']]], - ['kdaikin2swingvcirculate_5088',['kDaikin2SwingVCirculate',['../ir__Daikin_8h.html#a717bb32ce20e6d65ee78a9e8ba0f5490',1,'ir_Daikin.h']]], - ['kdaikin2swingvhigh_5089',['kDaikin2SwingVHigh',['../ir__Daikin_8h.html#a2d25d46fb289c3450ed6817a45982e27',1,'ir_Daikin.h']]], - ['kdaikin2swingvhighest_5090',['kDaikin2SwingVHighest',['../ir__Daikin_8h.html#a19a1466e7c23d4713026d6713ee301dc',1,'ir_Daikin.h']]], - ['kdaikin2swingvlow_5091',['kDaikin2SwingVLow',['../ir__Daikin_8h.html#accae3be213670675f8dfc974fe19f2cf',1,'ir_Daikin.h']]], - ['kdaikin2swingvlowermiddle_5092',['kDaikin2SwingVLowerMiddle',['../ir__Daikin_8h.html#afc89861dee46baa67b4beaa4a970a579',1,'ir_Daikin.h']]], - ['kdaikin2swingvlowest_5093',['kDaikin2SwingVLowest',['../ir__Daikin_8h.html#a7fd3777c7c574d773ede3d1c2d72301d',1,'ir_Daikin.h']]], - ['kdaikin2swingvoff_5094',['kDaikin2SwingVOff',['../ir__Daikin_8h.html#a30cfd294ea52a0ef736ebcc38a79aa71',1,'ir_Daikin.h']]], - ['kdaikin2swingvswing_5095',['kDaikin2SwingVSwing',['../ir__Daikin_8h.html#a2a62938481ba7b4374df50867295c07d',1,'ir_Daikin.h']]], - ['kdaikin2swingvuppermiddle_5096',['kDaikin2SwingVUpperMiddle',['../ir__Daikin_8h.html#a9f12c68db1a0af6e3defbc2bb8f3b8bc',1,'ir_Daikin.h']]], - ['kdaikin2tolerance_5097',['kDaikin2Tolerance',['../ir__Daikin_8h.html#ac428e884b15026c0610cc1b0b8b46154',1,'ir_Daikin.h']]], - ['kdaikin2zerospace_5098',['kDaikin2ZeroSpace',['../ir__Daikin_8h.html#a91b023ce8679d8d0e4434e014e746f99',1,'ir_Daikin.h']]], - ['kdaikin64bitmark_5099',['kDaikin64BitMark',['../ir__Daikin_8h.html#a6d89c1acd56b670b2aba65429d6fbf00',1,'ir_Daikin.h']]], - ['kdaikin64bits_5100',['kDaikin64Bits',['../IRremoteESP8266_8h.html#a89266e9211a81eda22475fb5a258484f',1,'IRremoteESP8266.h']]], - ['kdaikin64checksumoffset_5101',['kDaikin64ChecksumOffset',['../ir__Daikin_8h.html#a5c47c0a0b1d2a23620beb2496af958c5',1,'ir_Daikin.h']]], - ['kdaikin64checksumsize_5102',['kDaikin64ChecksumSize',['../ir__Daikin_8h.html#a0c068274c73deb732e70a7daf6684391',1,'ir_Daikin.h']]], - ['kdaikin64cool_5103',['kDaikin64Cool',['../ir__Daikin_8h.html#a1ed020e8e7b5b741e90c4a27ca9f3a91',1,'ir_Daikin.h']]], - ['kdaikin64defaultrepeat_5104',['kDaikin64DefaultRepeat',['../IRremoteESP8266_8h.html#aca64338c3e3bbe52f8ec5688317041b3',1,'IRremoteESP8266.h']]], - ['kdaikin64dry_5105',['kDaikin64Dry',['../ir__Daikin_8h.html#aa494c8e2a54209c7467fdd7f40655b0b',1,'ir_Daikin.h']]], - ['kdaikin64fan_5106',['kDaikin64Fan',['../ir__Daikin_8h.html#aa1f4bb12be0f74af35ee54a5540f8a7b',1,'ir_Daikin.h']]], - ['kdaikin64fanauto_5107',['kDaikin64FanAuto',['../ir__Daikin_8h.html#a6fbc965cb8194048ed27d586321c01b2',1,'ir_Daikin.h']]], - ['kdaikin64fanhigh_5108',['kDaikin64FanHigh',['../ir__Daikin_8h.html#a122d57c30d1f4ad8f20d44077b0a1970',1,'ir_Daikin.h']]], - ['kdaikin64fanlow_5109',['kDaikin64FanLow',['../ir__Daikin_8h.html#a5a692fdcb373acf101536adb4c18384f',1,'ir_Daikin.h']]], - ['kdaikin64fanmed_5110',['kDaikin64FanMed',['../ir__Daikin_8h.html#a9b2737ba57e38d4c3dfe7bc65de4c944',1,'ir_Daikin.h']]], - ['kdaikin64fanquiet_5111',['kDaikin64FanQuiet',['../ir__Daikin_8h.html#a1a7d78b2ed8ca5b83d6422d659ecb296',1,'ir_Daikin.h']]], - ['kdaikin64fanturbo_5112',['kDaikin64FanTurbo',['../ir__Daikin_8h.html#ae6d370916c0897bc82346136d7922f5d',1,'ir_Daikin.h']]], - ['kdaikin64freq_5113',['kDaikin64Freq',['../ir__Daikin_8h.html#a7b63829df4d0e1de61ed396c3b07e988',1,'ir_Daikin.h']]], - ['kdaikin64gap_5114',['kDaikin64Gap',['../ir__Daikin_8h.html#ae191cb5f6c65b944970158caaf56618d',1,'ir_Daikin.h']]], - ['kdaikin64hdrmark_5115',['kDaikin64HdrMark',['../ir__Daikin_8h.html#abe7b92798de08dfc5f044869891bdec5',1,'ir_Daikin.h']]], - ['kdaikin64hdrspace_5116',['kDaikin64HdrSpace',['../ir__Daikin_8h.html#a1eac122554acda264f9aa48261b2a884',1,'ir_Daikin.h']]], - ['kdaikin64knowngoodstate_5117',['kDaikin64KnownGoodState',['../ir__Daikin_8h.html#a09f0aa8c586b35b79bbceb19e822eb48',1,'ir_Daikin.h']]], - ['kdaikin64ldrmark_5118',['kDaikin64LdrMark',['../ir__Daikin_8h.html#aca20b8ee0fa9a8aa2d676ef12bd5ba97',1,'ir_Daikin.h']]], - ['kdaikin64ldrspace_5119',['kDaikin64LdrSpace',['../ir__Daikin_8h.html#ada1084c119abe58dadcb17eb4cfed072',1,'ir_Daikin.h']]], - ['kdaikin64maxtemp_5120',['kDaikin64MaxTemp',['../ir__Daikin_8h.html#a495e3b77590263a2c043c1ba12489fac',1,'ir_Daikin.h']]], - ['kdaikin64mintemp_5121',['kDaikin64MinTemp',['../ir__Daikin_8h.html#a209cb1798ae64de1f5274fb167ee62ea',1,'ir_Daikin.h']]], - ['kdaikin64onespace_5122',['kDaikin64OneSpace',['../ir__Daikin_8h.html#ab3129b72f5300893d04b47e72dd420e1',1,'ir_Daikin.h']]], - ['kdaikin64overhead_5123',['kDaikin64Overhead',['../ir__Daikin_8h.html#af0dafe45d0127430e05f2312e8ba99bb',1,'ir_Daikin.h']]], - ['kdaikin64tolerancedelta_5124',['kDaikin64ToleranceDelta',['../ir__Daikin_8h.html#ae0b22a140c2727de9a347e8ab8d554e9',1,'ir_Daikin.h']]], - ['kdaikin64zerospace_5125',['kDaikin64ZeroSpace',['../ir__Daikin_8h.html#a142e45c289af1e9802254b9c138003fa',1,'ir_Daikin.h']]], - ['kdaikinauto_5126',['kDaikinAuto',['../ir__Daikin_8h.html#af3a0e7c149d020002cdf345a15606542',1,'ir_Daikin.h']]], - ['kdaikinbeeploud_5127',['kDaikinBeepLoud',['../ir__Daikin_8h.html#a4eb2b3899076882e3ed23220138ebac1',1,'ir_Daikin.h']]], - ['kdaikinbeepoff_5128',['kDaikinBeepOff',['../ir__Daikin_8h.html#a8271934c8bbd4b8e4d6aacdee5a038cf',1,'ir_Daikin.h']]], - ['kdaikinbeepquiet_5129',['kDaikinBeepQuiet',['../ir__Daikin_8h.html#a11008f7d6afc934426b88704d47301e7',1,'ir_Daikin.h']]], - ['kdaikinbitmark_5130',['kDaikinBitMark',['../ir__Daikin_8h.html#ae109b9ea2120f989dac2529345e38adb',1,'ir_Daikin.h']]], - ['kdaikinbits_5131',['kDaikinBits',['../IRremoteESP8266_8h.html#a657f8e60bc1f896d4a46ec101c289485',1,'IRremoteESP8266.h']]], - ['kdaikinbitsshort_5132',['kDaikinBitsShort',['../IRremoteESP8266_8h.html#aebaa8eb786747761fb369cfd34181cb7',1,'IRremoteESP8266.h']]], - ['kdaikinbytechecksum1_5133',['kDaikinByteChecksum1',['../ir__Daikin_8h.html#a887d8d38cf4330e1107443471fa119ca',1,'ir_Daikin.h']]], - ['kdaikinbytechecksum2_5134',['kDaikinByteChecksum2',['../ir__Daikin_8h.html#ab27225f21b29e617bf03fc68cc6e8e0f',1,'ir_Daikin.h']]], - ['kdaikincool_5135',['kDaikinCool',['../ir__Daikin_8h.html#aa57615a0a9f79b97139580a807bf095f',1,'ir_Daikin.h']]], - ['kdaikincurbit_5136',['kDaikinCurBit',['../ir__Daikin_8h.html#afccfde2b46f5fcb425f02a79a9c20494',1,'ir_Daikin.h']]], - ['kdaikincurindex_5137',['kDaikinCurIndex',['../ir__Daikin_8h.html#a5c01a0bfbd92b337d2e4a5c3df381865',1,'ir_Daikin.h']]], - ['kdaikindefaultrepeat_5138',['kDaikinDefaultRepeat',['../IRremoteESP8266_8h.html#af691d5202b7f121a16b2d9871ee14d9c',1,'IRremoteESP8266.h']]], - ['kdaikindry_5139',['kDaikinDry',['../ir__Daikin_8h.html#ab6143bef74a122c3fba3a3b29df0cf29',1,'ir_Daikin.h']]], - ['kdaikinfan_5140',['kDaikinFan',['../ir__Daikin_8h.html#a616df34328cdac764aecc9ffb0f16f09',1,'ir_Daikin.h']]], - ['kdaikinfanauto_5141',['kDaikinFanAuto',['../ir__Daikin_8h.html#a87807bd5727d9da1b615fca2bd732292',1,'ir_Daikin.h']]], - ['kdaikinfanmax_5142',['kDaikinFanMax',['../ir__Daikin_8h.html#ab483f3913a909884f44f8cd8f779bca0',1,'ir_Daikin.h']]], - ['kdaikinfanmed_5143',['kDaikinFanMed',['../ir__Daikin_8h.html#ab6eb2c902c2b5f927160efc9fb9ab08c',1,'ir_Daikin.h']]], - ['kdaikinfanmin_5144',['kDaikinFanMin',['../ir__Daikin_8h.html#a83ad300b9374e50c22211501ee2d1a7a',1,'ir_Daikin.h']]], - ['kdaikinfanquiet_5145',['kDaikinFanQuiet',['../ir__Daikin_8h.html#aae481cf166671c30bccdc7f47aa6666e',1,'ir_Daikin.h']]], - ['kdaikinfirstheader64_5146',['kDaikinFirstHeader64',['../ir__Daikin_8h.html#a0bd3b36061d545bb21562622642f4196',1,'ir_Daikin.h']]], - ['kdaikingap_5147',['kDaikinGap',['../ir__Daikin_8h.html#aed68991584125a277593c339ab387276',1,'ir_Daikin.h']]], - ['kdaikinhdrmark_5148',['kDaikinHdrMark',['../ir__Daikin_8h.html#a0a38b3bdfd8f4f7a18f969188388e29e',1,'ir_Daikin.h']]], - ['kdaikinhdrspace_5149',['kDaikinHdrSpace',['../ir__Daikin_8h.html#ac4ca6c53faeec7d7a7ccfb50802087dc',1,'ir_Daikin.h']]], - ['kdaikinheaderlength_5150',['kDaikinHeaderLength',['../ir__Daikin_8h.html#a476ca864b6791439549bb4257ca78b23',1,'ir_Daikin.h']]], - ['kdaikinheat_5151',['kDaikinHeat',['../ir__Daikin_8h.html#a05824dc5af4ed0d3eceda540ad0e7a9f',1,'ir_Daikin.h']]], - ['kdaikinlightbright_5152',['kDaikinLightBright',['../ir__Daikin_8h.html#a20a3103d8d0a672c0c05c1679bf3b2ab',1,'ir_Daikin.h']]], - ['kdaikinlightdim_5153',['kDaikinLightDim',['../ir__Daikin_8h.html#a1093baf5b62fca42f9361715be2198a3',1,'ir_Daikin.h']]], - ['kdaikinlightoff_5154',['kDaikinLightOff',['../ir__Daikin_8h.html#ae57f7d2ea43e865ebf8175a8dbacab45',1,'ir_Daikin.h']]], - ['kdaikinmarkexcess_5155',['kDaikinMarkExcess',['../ir__Daikin_8h.html#a5331e1ee51bd7b001346aa41ee5d26cc',1,'ir_Daikin.h']]], - ['kdaikinmaxtemp_5156',['kDaikinMaxTemp',['../ir__Daikin_8h.html#aab7be756494a5ed23e9202af769e0012',1,'ir_Daikin.h']]], - ['kdaikinmintemp_5157',['kDaikinMinTemp',['../ir__Daikin_8h.html#af257feb15dc282c7d06351ee9eed666b',1,'ir_Daikin.h']]], - ['kdaikinonespace_5158',['kDaikinOneSpace',['../ir__Daikin_8h.html#a6653082dcfde989bd2c5810809fc18a9',1,'ir_Daikin.h']]], - ['kdaikinsection1length_5159',['kDaikinSection1Length',['../ir__Daikin_8h.html#ab3b8aacbebe6c1c5514141102d1ca26f',1,'ir_Daikin.h']]], - ['kdaikinsection2length_5160',['kDaikinSection2Length',['../ir__Daikin_8h.html#a2e65cdf05d22a20f01ae5f6d3e222218',1,'ir_Daikin.h']]], - ['kdaikinsection3length_5161',['kDaikinSection3Length',['../ir__Daikin_8h.html#ae7dbaf6b4034267e4610087f9f2f51e3',1,'ir_Daikin.h']]], - ['kdaikinsections_5162',['kDaikinSections',['../ir__Daikin_8h.html#aad822c70789b861fa5beb839833e0b4c',1,'ir_Daikin.h']]], - ['kdaikinstatelength_5163',['kDaikinStateLength',['../IRremoteESP8266_8h.html#af1fda5b9f355e526dc66cf58824315a7',1,'IRremoteESP8266.h']]], - ['kdaikinstatelengthshort_5164',['kDaikinStateLengthShort',['../IRremoteESP8266_8h.html#ae94c897cb0bd25ca7a4d693c7be9be3d',1,'IRremoteESP8266.h']]], - ['kdaikinswingoff_5165',['kDaikinSwingOff',['../ir__Daikin_8h.html#abc9194f48f63632b87c6139dd8ab6ecf',1,'ir_Daikin.h']]], - ['kdaikinswingon_5166',['kDaikinSwingOn',['../ir__Daikin_8h.html#af19ec29dc79837deca05f6061f2e6524',1,'ir_Daikin.h']]], - ['kdaikintolerance_5167',['kDaikinTolerance',['../ir__Daikin_8h.html#aea3938d1522df0040ddb9775075d6669',1,'ir_Daikin.h']]], - ['kdaikinunusedtime_5168',['kDaikinUnusedTime',['../ir__Daikin_8h.html#af60d27bb9d08317498b35f62c167f6a4',1,'ir_Daikin.h']]], - ['kdaikinzerospace_5169',['kDaikinZeroSpace',['../ir__Daikin_8h.html#ace5b2c2be3b58f22248eafb2148d059c',1,'ir_Daikin.h']]], - ['kdaysstr_5170',['kDaysStr',['../IRtext_8cpp.html#a4269111ae41c3a673ec0a87fca0fd78b',1,'kDaysStr(): IRtext.cpp'],['../IRtext_8h.html#aa779ae24412ef82ee3d1eade3f0381ae',1,'kDaysStr(): IRtext.cpp']]], - ['kdaystr_5171',['kDayStr',['../IRtext_8cpp.html#ab6fb8803c6a95d1926abb56b7ecb2e09',1,'kDayStr(): IRtext.cpp'],['../IRtext_8h.html#adb64531a5054629613696f9af39420e2',1,'kDayStr(): IRtext.cpp']]], - ['kdefaultesp32timer_5172',['kDefaultESP32Timer',['../IRrecv_8h.html#a80a2d3445a1752d18caf307d7677b709',1,'IRrecv.h']]], - ['kdefaultmessagegap_5173',['kDefaultMessageGap',['../IRsend_8h.html#ad49e9828319afbad49fd5082c50ef4a7',1,'IRsend.h']]], - ['kdelonghiacauto_5174',['kDelonghiAcAuto',['../ir__Delonghi_8h.html#ab10d4fe0b9dbe99ed942b73a6ff61d37',1,'ir_Delonghi.h']]], - ['kdelonghiacbitmark_5175',['kDelonghiAcBitMark',['../ir__Delonghi_8cpp.html#aa70f02d16b78f513e245871d4db0785a',1,'ir_Delonghi.cpp']]], - ['kdelonghiacbits_5176',['kDelonghiAcBits',['../IRremoteESP8266_8h.html#a7b9fba82b602cf38147f0586e037f909',1,'IRremoteESP8266.h']]], - ['kdelonghiacchecksumoffset_5177',['kDelonghiAcChecksumOffset',['../ir__Delonghi_8h.html#a4b5e3d9874b016f60b7f9c26e7cf0cfd',1,'ir_Delonghi.h']]], - ['kdelonghiaccool_5178',['kDelonghiAcCool',['../ir__Delonghi_8h.html#a9447cc3a3f6f4e0603ecc99104523119',1,'ir_Delonghi.h']]], - ['kdelonghiacdefaultrepeat_5179',['kDelonghiAcDefaultRepeat',['../IRremoteESP8266_8h.html#a8f18256a0a6893e077e253e5e80da164',1,'IRremoteESP8266.h']]], - ['kdelonghiacdry_5180',['kDelonghiAcDry',['../ir__Delonghi_8h.html#a1c83f080ac1f48548fcfa5d691ef893d',1,'ir_Delonghi.h']]], - ['kdelonghiacfan_5181',['kDelonghiAcFan',['../ir__Delonghi_8h.html#af494534acfb8ae1c0f9c15bc13e2d0c8',1,'ir_Delonghi.h']]], - ['kdelonghiacfanauto_5182',['kDelonghiAcFanAuto',['../ir__Delonghi_8h.html#adf2286936d79d8c899283fa6e3838ebb',1,'ir_Delonghi.h']]], - ['kdelonghiacfanhigh_5183',['kDelonghiAcFanHigh',['../ir__Delonghi_8h.html#a03027eb1a6a382479b44db0699aee30b',1,'ir_Delonghi.h']]], - ['kdelonghiacfanlow_5184',['kDelonghiAcFanLow',['../ir__Delonghi_8h.html#a053a51021679cd5c4720e7ec68fa43eb',1,'ir_Delonghi.h']]], - ['kdelonghiacfanmedium_5185',['kDelonghiAcFanMedium',['../ir__Delonghi_8h.html#ac748c5e0b7c5acb108086f90c088028f',1,'ir_Delonghi.h']]], - ['kdelonghiacfreq_5186',['kDelonghiAcFreq',['../ir__Delonghi_8cpp.html#a9425e4f71aa6454a89b55f3b5789d94d',1,'ir_Delonghi.cpp']]], - ['kdelonghiacgap_5187',['kDelonghiAcGap',['../ir__Delonghi_8cpp.html#ab1cd2481fc96811ed822c8c9f63420c3',1,'ir_Delonghi.cpp']]], - ['kdelonghiachdrmark_5188',['kDelonghiAcHdrMark',['../ir__Delonghi_8cpp.html#a0feead944883173788b8d02b7ae94ef8',1,'ir_Delonghi.cpp']]], - ['kdelonghiachdrspace_5189',['kDelonghiAcHdrSpace',['../ir__Delonghi_8cpp.html#a606ea96746b1b6471b1d76f05bdc7e5a',1,'ir_Delonghi.cpp']]], - ['kdelonghiaconespace_5190',['kDelonghiAcOneSpace',['../ir__Delonghi_8cpp.html#a8805fdc60cd3537ba2d94038610a3490',1,'ir_Delonghi.cpp']]], - ['kdelonghiacoverhead_5191',['kDelonghiAcOverhead',['../ir__Delonghi_8cpp.html#ac265c123c0cd7492d26f030d129f3475',1,'ir_Delonghi.cpp']]], - ['kdelonghiactempautodrymode_5192',['kDelonghiAcTempAutoDryMode',['../ir__Delonghi_8h.html#add6f728d2746a089e00a35644d664a6c',1,'ir_Delonghi.h']]], - ['kdelonghiactempfanmode_5193',['kDelonghiAcTempFanMode',['../ir__Delonghi_8h.html#a120ae31fac35c33214317c3187aae15c',1,'ir_Delonghi.h']]], - ['kdelonghiactempmaxc_5194',['kDelonghiAcTempMaxC',['../ir__Delonghi_8h.html#a476922b8d240c46cf092897f6c701e87',1,'ir_Delonghi.h']]], - ['kdelonghiactempmaxf_5195',['kDelonghiAcTempMaxF',['../ir__Delonghi_8h.html#abc11f81bc221aa3789258b7a990633b3',1,'ir_Delonghi.h']]], - ['kdelonghiactempminc_5196',['kDelonghiAcTempMinC',['../ir__Delonghi_8h.html#ad31267284f7dd8f533fc978ed7e92428',1,'ir_Delonghi.h']]], - ['kdelonghiactempminf_5197',['kDelonghiAcTempMinF',['../ir__Delonghi_8h.html#a0311abab5eff5a8c47261db8e3d40ed5',1,'ir_Delonghi.h']]], - ['kdelonghiactimermax_5198',['kDelonghiAcTimerMax',['../ir__Delonghi_8h.html#a44d3f0d850c5cd5ad8c0e2dc7c2bd860',1,'ir_Delonghi.h']]], - ['kdelonghiaczerospace_5199',['kDelonghiAcZeroSpace',['../ir__Delonghi_8cpp.html#a4c1a9a70a50c7da9aa6cf91af85c695e',1,'ir_Delonghi.cpp']]], - ['kdenon48bits_5200',['kDenon48Bits',['../IRremoteESP8266_8h.html#ad7389b5b4f01a16dbf940eaae005c805',1,'IRremoteESP8266.h']]], - ['kdenonbitmark_5201',['kDenonBitMark',['../ir__Denon_8cpp.html#a1cd978061cfdc9bf1d5e1142dad86e59',1,'ir_Denon.cpp']]], - ['kdenonbitmarkticks_5202',['kDenonBitMarkTicks',['../ir__Denon_8cpp.html#ae6dddc89296abc186ac524c3f1efbe63',1,'ir_Denon.cpp']]], - ['kdenonbits_5203',['kDenonBits',['../IRremoteESP8266_8h.html#a29160117e25f3dfc1cb899a4a53bc238',1,'IRremoteESP8266.h']]], - ['kdenonhdrmark_5204',['kDenonHdrMark',['../ir__Denon_8cpp.html#a6f7b5da8c723615200109f425df72254',1,'ir_Denon.cpp']]], - ['kdenonhdrmarkticks_5205',['kDenonHdrMarkTicks',['../ir__Denon_8cpp.html#a484a90cdd15de164c931f1c70ab02938',1,'ir_Denon.cpp']]], - ['kdenonhdrspace_5206',['kDenonHdrSpace',['../ir__Denon_8cpp.html#a758b11259a5dcab3e949739cf67106be',1,'ir_Denon.cpp']]], - ['kdenonhdrspaceticks_5207',['kDenonHdrSpaceTicks',['../ir__Denon_8cpp.html#afe6cb1be37dcea0251ebf0fc43640fe1',1,'ir_Denon.cpp']]], - ['kdenonlegacybits_5208',['kDenonLegacyBits',['../IRremoteESP8266_8h.html#aacf2eea1349016ccbc96e97a0976f4ec',1,'IRremoteESP8266.h']]], - ['kdenonmanufacturer_5209',['kDenonManufacturer',['../ir__Denon_8cpp.html#abd89138765e21d25991fd5857506491b',1,'ir_Denon.cpp']]], - ['kdenonmincommandlengthticks_5210',['kDenonMinCommandLengthTicks',['../ir__Denon_8cpp.html#abb20f9f6053e0d46399011de71697a6a',1,'ir_Denon.cpp']]], - ['kdenonmingap_5211',['kDenonMinGap',['../ir__Denon_8cpp.html#a19b3fe79e06b3ece2cb167d5e14b2c11',1,'ir_Denon.cpp']]], - ['kdenonmingapticks_5212',['kDenonMinGapTicks',['../ir__Denon_8cpp.html#a191e0cfcf8167805ef9bfdc05463c313',1,'ir_Denon.cpp']]], - ['kdenononespace_5213',['kDenonOneSpace',['../ir__Denon_8cpp.html#a150b22eeeb64b59a3d9df51904fdda3f',1,'ir_Denon.cpp']]], - ['kdenononespaceticks_5214',['kDenonOneSpaceTicks',['../ir__Denon_8cpp.html#ad15a88b8f6b953918799eac1e814d107',1,'ir_Denon.cpp']]], - ['kdenontick_5215',['kDenonTick',['../ir__Denon_8cpp.html#a6cc0eba04ca4a2362068bf47d1869752',1,'ir_Denon.cpp']]], - ['kdenonzerospace_5216',['kDenonZeroSpace',['../ir__Denon_8cpp.html#ad8f53f000727e66938d086eadb5bf6eb',1,'ir_Denon.cpp']]], - ['kdenonzerospaceticks_5217',['kDenonZeroSpaceTicks',['../ir__Denon_8cpp.html#aed0c86367586cd043d8381499b3a4bdd',1,'ir_Denon.cpp']]], - ['kdishbitmark_5218',['kDishBitMark',['../ir__Dish_8cpp.html#aabe7f9815a2f5e65558b0f482e2ac50e',1,'ir_Dish.cpp']]], - ['kdishbitmarkticks_5219',['kDishBitMarkTicks',['../ir__Dish_8cpp.html#a1cfd9b730c78aac35f6c2cb56367c7bb',1,'ir_Dish.cpp']]], - ['kdishbits_5220',['kDishBits',['../IRremoteESP8266_8h.html#aea0cc15e1c7a6edcd6b60d9ac62d4831',1,'IRremoteESP8266.h']]], - ['kdishhdrmark_5221',['kDishHdrMark',['../ir__Dish_8cpp.html#ac4311aaed27b1f37a41a2a9cced0ecc5',1,'ir_Dish.cpp']]], - ['kdishhdrmarkticks_5222',['kDishHdrMarkTicks',['../ir__Dish_8cpp.html#a8dce19ee6e3a6859bd2d43c0c9e90517',1,'ir_Dish.cpp']]], - ['kdishhdrspace_5223',['kDishHdrSpace',['../ir__Dish_8cpp.html#ac68dfa9e554c919fd51b379621b2fbc4',1,'ir_Dish.cpp']]], - ['kdishhdrspaceticks_5224',['kDishHdrSpaceTicks',['../ir__Dish_8cpp.html#ab212535e169722d7f23b461b011400c2',1,'ir_Dish.cpp']]], - ['kdishminrepeat_5225',['kDishMinRepeat',['../IRremoteESP8266_8h.html#a5c2263819b032e3af4d416ab41126bd8',1,'IRremoteESP8266.h']]], - ['kdishonespace_5226',['kDishOneSpace',['../ir__Dish_8cpp.html#a6f1986377a4571c8eba5f401b772c194',1,'ir_Dish.cpp']]], - ['kdishonespaceticks_5227',['kDishOneSpaceTicks',['../ir__Dish_8cpp.html#ade25414e4747c56303752060d9f89446',1,'ir_Dish.cpp']]], - ['kdishrptspace_5228',['kDishRptSpace',['../ir__Dish_8cpp.html#a67628a3581fe85638f72711581ec0e42',1,'ir_Dish.cpp']]], - ['kdishrptspaceticks_5229',['kDishRptSpaceTicks',['../ir__Dish_8cpp.html#a801af68fd07720f74abcf2712e3228dd',1,'ir_Dish.cpp']]], - ['kdishtick_5230',['kDishTick',['../ir__Dish_8cpp.html#aa1eccae3b18a457c7cec248d483e808a',1,'ir_Dish.cpp']]], - ['kdishzerospace_5231',['kDishZeroSpace',['../ir__Dish_8cpp.html#acde5c5a789af871f7b5aacdf3f0efeb7',1,'ir_Dish.cpp']]], - ['kdishzerospaceticks_5232',['kDishZeroSpaceTicks',['../ir__Dish_8cpp.html#a68a0f2b9e2e457c8a58fa533e0ca5336',1,'ir_Dish.cpp']]], - ['kdisplaytempstr_5233',['kDisplayTempStr',['../IRtext_8cpp.html#a018814e961b4eb51b91680db3be7d17c',1,'kDisplayTempStr(): IRtext.cpp'],['../IRtext_8h.html#a98f3ba92617c82c9091f155eebcdb3f3',1,'kDisplayTempStr(): IRtext.cpp']]], - ['kdoshishabitmark_5234',['kDoshishaBitMark',['../ir__Doshisha_8cpp.html#a50a4feaff92c4a9fbba6128638fdb2fb',1,'ir_Doshisha.cpp']]], - ['kdoshishabits_5235',['kDoshishaBits',['../IRremoteESP8266_8h.html#aedc53534cf6a40144be80abeee498362',1,'IRremoteESP8266.h']]], - ['kdoshishahdrmark_5236',['kDoshishaHdrMark',['../ir__Doshisha_8cpp.html#adbfc15a1abb62540538afc9c645c1875',1,'ir_Doshisha.cpp']]], - ['kdoshishahdrspace_5237',['kDoshishaHdrSpace',['../ir__Doshisha_8cpp.html#a95a58b09fde0ee9ba59fcf838d16f736',1,'ir_Doshisha.cpp']]], - ['kdoshishaonespace_5238',['kDoshishaOneSpace',['../ir__Doshisha_8cpp.html#a48f3b70ddd3bc06c628ebe7ce29e74d3',1,'ir_Doshisha.cpp']]], - ['kdoshishazerospace_5239',['kDoshishaZeroSpace',['../ir__Doshisha_8cpp.html#a055ae27320600bc7e100ea7e147775f9',1,'ir_Doshisha.cpp']]], - ['kdownstr_5240',['kDownStr',['../IRtext_8cpp.html#a24998688cbbe54780843983394e925e5',1,'kDownStr(): IRtext.cpp'],['../IRtext_8h.html#a1f452a2ac1a2b89b9c71cf64c177f6bd',1,'kDownStr(): IRtext.cpp']]], - ['kdrystr_5241',['kDryStr',['../IRtext_8cpp.html#a149780a7bbdd13757ee4336c281ccd9d',1,'kDryStr(): IRtext.cpp'],['../IRtext_8h.html#aa0f25fa3aa8d26f4635c38e563a974f5',1,'kDryStr(): IRtext.cpp']]], - ['kdutydefault_5242',['kDutyDefault',['../IRsend_8h.html#affa33c170fe058b783372852fca7cc5b',1,'IRsend.h']]], - ['kdutymax_5243',['kDutyMax',['../IRsend_8h.html#ac076e3f79a3d8d2dae9fc248a6f571e2',1,'IRsend.h']]], - ['kecoclimauto_5244',['kEcoclimAuto',['../ir__Ecoclim_8h.html#ae9de485f87949561850847b66ac81e47',1,'ir_Ecoclim.h']]], - ['kecoclimbitmark_5245',['kEcoclimBitMark',['../ir__Ecoclim_8cpp.html#ad03f638e01d2fdce86fe9a89f3f8dab2',1,'ir_Ecoclim.cpp']]], - ['kecoclimbits_5246',['kEcoclimBits',['../IRremoteESP8266_8h.html#accd38d1019bde991e9a887f853f295d0',1,'IRremoteESP8266.h']]], - ['kecoclimcool_5247',['kEcoclimCool',['../ir__Ecoclim_8h.html#ad6adc2787f3c3bf0116994d0966cfe20',1,'ir_Ecoclim.h']]], - ['kecoclimdefaultstate_5248',['kEcoclimDefaultState',['../ir__Ecoclim_8h.html#a7bf25176d3b9648e53c7a04334878d90',1,'ir_Ecoclim.h']]], - ['kecoclimdipmaster_5249',['kEcoclimDipMaster',['../ir__Ecoclim_8h.html#a69ebcc54bc7c25ce02557b7274a97641',1,'ir_Ecoclim.h']]], - ['kecoclimdipslave_5250',['kEcoclimDipSlave',['../ir__Ecoclim_8h.html#a118d61dbd264ffee7536e987dbf027df',1,'ir_Ecoclim.h']]], - ['kecoclimdry_5251',['kEcoclimDry',['../ir__Ecoclim_8h.html#a4533dbeddf89b4a95eb808e6284eb2af',1,'ir_Ecoclim.h']]], - ['kecoclimextratolerance_5252',['kEcoclimExtraTolerance',['../ir__Ecoclim_8cpp.html#a2b6fe32f39ac739d6dc0cbbd17dcf2af',1,'ir_Ecoclim.cpp']]], - ['kecoclimfan_5253',['kEcoclimFan',['../ir__Ecoclim_8h.html#aac7d10152a70e17e9338e61f477faa68',1,'ir_Ecoclim.h']]], - ['kecoclimfanauto_5254',['kEcoclimFanAuto',['../ir__Ecoclim_8h.html#a0675f3a9fa7a4308ca4cbee9b70c91b4',1,'ir_Ecoclim.h']]], - ['kecoclimfanmax_5255',['kEcoclimFanMax',['../ir__Ecoclim_8h.html#a1653fffcdcfdad604304f30c3e01969b',1,'ir_Ecoclim.h']]], - ['kecoclimfanmed_5256',['kEcoclimFanMed',['../ir__Ecoclim_8h.html#a6cb9ba6ffc6db3bb1a76a46d08e9a3e1',1,'ir_Ecoclim.h']]], - ['kecoclimfanmin_5257',['kEcoclimFanMin',['../ir__Ecoclim_8h.html#a2e6a1af18f73cefe4f1549b60c7a2199',1,'ir_Ecoclim.h']]], - ['kecoclimfootermark_5258',['kEcoclimFooterMark',['../ir__Ecoclim_8cpp.html#a911b6a39dd4e76eb7a5dc6945dad0f83',1,'ir_Ecoclim.cpp']]], - ['kecoclimgap_5259',['kEcoclimGap',['../ir__Ecoclim_8cpp.html#a95241311f503991fd423d224df9caa8e',1,'ir_Ecoclim.cpp']]], - ['kecoclimhdrmark_5260',['kEcoclimHdrMark',['../ir__Ecoclim_8cpp.html#af1cadad08d1adb19ae89ec05731a18e1',1,'ir_Ecoclim.cpp']]], - ['kecoclimhdrspace_5261',['kEcoclimHdrSpace',['../ir__Ecoclim_8cpp.html#a13d0809cbb678d064f411fb00633e5ed',1,'ir_Ecoclim.cpp']]], - ['kecoclimheat_5262',['kEcoclimHeat',['../ir__Ecoclim_8h.html#a38c275b9ee8e0a3c409190aefb1e06a3',1,'ir_Ecoclim.h']]], - ['kecoclimonespace_5263',['kEcoclimOneSpace',['../ir__Ecoclim_8cpp.html#a31fe81e18ee98b39c380b4687860fd7a',1,'ir_Ecoclim.cpp']]], - ['kecoclimrecycle_5264',['kEcoclimRecycle',['../ir__Ecoclim_8h.html#abb1183a1acbe1b3257dbf05cc72380f3',1,'ir_Ecoclim.h']]], - ['kecoclimsections_5265',['kEcoclimSections',['../ir__Ecoclim_8cpp.html#a94df888067ef8ddfac32741199631964',1,'ir_Ecoclim.cpp']]], - ['kecoclimshortbits_5266',['kEcoclimShortBits',['../IRremoteESP8266_8h.html#aff612cce1271e3254664c2efc7a2a9d5',1,'IRremoteESP8266.h']]], - ['kecoclimsleep_5267',['kEcoclimSleep',['../ir__Ecoclim_8h.html#adaeffa57c2e26d64e8afde8e296212dc',1,'ir_Ecoclim.h']]], - ['kecoclimtempmax_5268',['kEcoclimTempMax',['../ir__Ecoclim_8h.html#a748f159701406c4d149ec10765423acb',1,'ir_Ecoclim.h']]], - ['kecoclimtempmin_5269',['kEcoclimTempMin',['../ir__Ecoclim_8h.html#a52a5e38c10e8aa1fa350ea1d71180a15',1,'ir_Ecoclim.h']]], - ['kecoclimtimerdisable_5270',['kEcoclimTimerDisable',['../ir__Ecoclim_8h.html#ab271e282eeb7486f4fabfdc14368e161',1,'ir_Ecoclim.h']]], - ['kecoclimzerospace_5271',['kEcoclimZeroSpace',['../ir__Ecoclim_8cpp.html#a5c8f6e7dd7f1bb97124852ec4c274683',1,'ir_Ecoclim.cpp']]], - ['keconostr_5272',['kEconoStr',['../IRtext_8cpp.html#a4e3bee67564fe8f13d1d4f997924f464',1,'kEconoStr(): IRtext.cpp'],['../IRtext_8h.html#ab0b71c4429416a581a393f07e898bade',1,'kEconoStr(): IRtext.cpp']]], - ['keconotogglestr_5273',['kEconoToggleStr',['../IRtext_8cpp.html#abd6fd4c918a7911bfa223cd87e6f3d32',1,'kEconoToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a03bbafdddd086cacd34dca1a32d540f6',1,'kEconoToggleStr(): IRtext.cpp']]], - ['kelectraacauto_5274',['kElectraAcAuto',['../ir__Electra_8h.html#a536965f5003a474d68860005883afb5a',1,'ir_Electra.h']]], - ['kelectraacbitmark_5275',['kElectraAcBitMark',['../ir__Electra_8cpp.html#a41f7254b061b099b8131ec4d2a775116',1,'ir_Electra.cpp']]], - ['kelectraacbits_5276',['kElectraAcBits',['../IRremoteESP8266_8h.html#aa46876681f26ccf39c6d341fef041a16',1,'IRremoteESP8266.h']]], - ['kelectraaccool_5277',['kElectraAcCool',['../ir__Electra_8h.html#a6a37f4e24aad54a982994599a1bca59d',1,'ir_Electra.h']]], - ['kelectraacdry_5278',['kElectraAcDry',['../ir__Electra_8h.html#a9b8636631c22e003072bf84a9e30ddff',1,'ir_Electra.h']]], - ['kelectraacfan_5279',['kElectraAcFan',['../ir__Electra_8h.html#a28047c7d083d8bc9d9e34ab210c28185',1,'ir_Electra.h']]], - ['kelectraacfanauto_5280',['kElectraAcFanAuto',['../ir__Electra_8h.html#a48b3067393d4dc1e3461db4535212bff',1,'ir_Electra.h']]], - ['kelectraacfanhigh_5281',['kElectraAcFanHigh',['../ir__Electra_8h.html#a5cbf3118669f056f377b4625e8e97d8c',1,'ir_Electra.h']]], - ['kelectraacfanlow_5282',['kElectraAcFanLow',['../ir__Electra_8h.html#a9a5663e86cb766a4e4579d1b81473c44',1,'ir_Electra.h']]], - ['kelectraacfanmed_5283',['kElectraAcFanMed',['../ir__Electra_8h.html#a4e906bcb7aa6c0fc5c71bd06c43c3993',1,'ir_Electra.h']]], - ['kelectraachdrmark_5284',['kElectraAcHdrMark',['../ir__Electra_8cpp.html#a1200826684547765f1e526f362408e2e',1,'ir_Electra.cpp']]], - ['kelectraachdrspace_5285',['kElectraAcHdrSpace',['../ir__Electra_8cpp.html#a28cd57057c52b0def3683e71ee92c5d3',1,'ir_Electra.cpp']]], - ['kelectraacheat_5286',['kElectraAcHeat',['../ir__Electra_8h.html#af764a4738f146b752b8e29357af257e3',1,'ir_Electra.h']]], - ['kelectraaclighttogglemask_5287',['kElectraAcLightToggleMask',['../ir__Electra_8h.html#aa51ccef46052dd988ac1bccc4f2303f6',1,'ir_Electra.h']]], - ['kelectraaclighttoggleoff_5288',['kElectraAcLightToggleOff',['../ir__Electra_8h.html#ae98c4a00f003cc98c253b9367226c5c5',1,'ir_Electra.h']]], - ['kelectraaclighttoggleon_5289',['kElectraAcLightToggleOn',['../ir__Electra_8h.html#aa9ca231e98b7e529b081c3aaa1876df9',1,'ir_Electra.h']]], - ['kelectraacmaxtemp_5290',['kElectraAcMaxTemp',['../ir__Electra_8h.html#a3962ca1ae42f006baa1181683cbcbf86',1,'ir_Electra.h']]], - ['kelectraacmessagegap_5291',['kElectraAcMessageGap',['../ir__Electra_8cpp.html#adbcde2296ebf6ea93c7c95ce6d0b264e',1,'ir_Electra.cpp']]], - ['kelectraacminrepeat_5292',['kElectraAcMinRepeat',['../IRremoteESP8266_8h.html#a2ca237d578ca9a59aecac9813ab851ba',1,'IRremoteESP8266.h']]], - ['kelectraacmintemp_5293',['kElectraAcMinTemp',['../ir__Electra_8h.html#ad6f62477d70b59c958ba347c228f8e2b',1,'ir_Electra.h']]], - ['kelectraaconespace_5294',['kElectraAcOneSpace',['../ir__Electra_8cpp.html#aeb59d520635a93f5dd7acdbe4327174d',1,'ir_Electra.cpp']]], - ['kelectraacstatelength_5295',['kElectraAcStateLength',['../IRremoteESP8266_8h.html#a8fb8c5778feaa94114218c36e8e43641',1,'IRremoteESP8266.h']]], - ['kelectraacswingoff_5296',['kElectraAcSwingOff',['../ir__Electra_8h.html#ade2211d0bd695daf490300db856d660a',1,'ir_Electra.h']]], - ['kelectraacswingon_5297',['kElectraAcSwingOn',['../ir__Electra_8h.html#a4ef75911d929752357d727aee339563e',1,'ir_Electra.h']]], - ['kelectraactempdelta_5298',['kElectraAcTempDelta',['../ir__Electra_8h.html#ac3310f7b0d4b9fbe22d7192465669487',1,'ir_Electra.h']]], - ['kelectraaczerospace_5299',['kElectraAcZeroSpace',['../ir__Electra_8cpp.html#a1453e0796cfe6ca169fd3c56e2595082',1,'ir_Electra.cpp']]], - ['kelitescreensbits_5300',['kEliteScreensBits',['../IRremoteESP8266_8h.html#a102ebea398ea7b155e1e5212676af6dd',1,'IRremoteESP8266.h']]], - ['kelitescreensdefaultrepeat_5301',['kEliteScreensDefaultRepeat',['../IRremoteESP8266_8h.html#a9b23f59f288fc2ab9ee171436c11b04b',1,'IRremoteESP8266.h']]], - ['kelitescreensgap_5302',['kEliteScreensGap',['../ir__EliteScreens_8cpp.html#a7023784c82a3973e638245bf774adb34',1,'ir_EliteScreens.cpp']]], - ['kelitescreensone_5303',['kEliteScreensOne',['../ir__EliteScreens_8cpp.html#a9e53ba0d824f43cc70b489b95055007f',1,'ir_EliteScreens.cpp']]], - ['kelitescreenszero_5304',['kEliteScreensZero',['../ir__EliteScreens_8cpp.html#ae2d4b6fd6aec50baa7173d302a629438',1,'ir_EliteScreens.cpp']]], - ['kepsonbits_5305',['kEpsonBits',['../IRremoteESP8266_8h.html#a77a0ed1143f5bfec87e0c9fde5c2c425',1,'IRremoteESP8266.h']]], - ['kepsonminrepeat_5306',['kEpsonMinRepeat',['../IRremoteESP8266_8h.html#ac8738cb054de937b77269acb973c5133',1,'IRremoteESP8266.h']]], - ['keyeautostr_5307',['kEyeAutoStr',['../IRtext_8cpp.html#ab7c525442638022439c7a277e1edf694',1,'kEyeAutoStr(): IRtext.cpp'],['../IRtext_8h.html#ae1395c08682a2b858261d76b97311f4f',1,'kEyeAutoStr(): IRtext.cpp']]], - ['keyestr_5308',['kEyeStr',['../IRtext_8cpp.html#a1d8dc83e7f15aacd013509e36a49a9d8',1,'kEyeStr(): IRtext.cpp'],['../IRtext_8h.html#a84f6d62456976cc31fe6b1648182a885',1,'kEyeStr(): IRtext.cpp']]], - ['kfalsestr_5309',['kFalseStr',['../IRtext_8cpp.html#a338ee31c8fb5a1c74c0640b279051cd2',1,'kFalseStr(): IRtext.cpp'],['../IRtext_8h.html#a3dc9321c4146369e0e0794e6a4de1988',1,'kFalseStr(): IRtext.cpp']]], - ['kfanonlystr_5310',['kFanOnlyStr',['../IRtext_8cpp.html#adada7550fa28466a6db6f4544f8c7063',1,'kFanOnlyStr(): IRtext.cpp'],['../IRtext_8h.html#a220378c7b69db06362af5ad932965628',1,'kFanOnlyStr(): IRtext.cpp']]], - ['kfanstr_5311',['kFanStr',['../IRtext_8cpp.html#aaab703dfae684a786852a55c0f7f61ec',1,'kFanStr(): IRtext.cpp'],['../IRtext_8h.html#af7a0d76c40f3173a3e1367665d789300',1,'kFanStr(): IRtext.cpp']]], - ['kfaststr_5312',['kFastStr',['../IRtext_8cpp.html#ad6084cb569cd62bb1199c6ecc8ac4126',1,'kFastStr(): IRtext.cpp'],['../IRtext_8h.html#a82c26d9c7690ce001223e2a7cf8664d8',1,'kFastStr(): IRtext.cpp']]], - ['kfilterstr_5313',['kFilterStr',['../IRtext_8cpp.html#af287ead64de5dc3b1cbafe7bc945e519',1,'kFilterStr(): IRtext.cpp'],['../IRtext_8h.html#a5b3133e24c729077da411e08119033be',1,'kFilterStr(): IRtext.cpp']]], - ['kfixedstr_5314',['kFixedStr',['../IRtext_8cpp.html#ab45f91a889dae134e48c86586608bfc9',1,'kFixedStr(): IRtext.cpp'],['../IRtext_8h.html#ad9112f221a20ab498c5f133c4cea0b14',1,'kFixedStr(): IRtext.cpp']]], - ['kfnvbasis32_5315',['kFnvBasis32',['../IRrecv_8h.html#a04d9b0c909b377b36af3ece668482ca3',1,'IRrecv.h']]], - ['kfnvprime32_5316',['kFnvPrime32',['../IRrecv_8h.html#abcfcce36d3e2faef742aa3529c22f23f',1,'IRrecv.h']]], - ['kfollowstr_5317',['kFollowStr',['../IRtext_8cpp.html#a5477068666c86b3d605df8cf0240c86f',1,'kFollowStr(): IRtext.cpp'],['../IRtext_8h.html#a47a659e1c6373c4af92f4261148f695b',1,'kFollowStr(): IRtext.cpp']]], - ['kfooter_5318',['kFooter',['../IRrecv_8h.html#a5abb2b821f207ee9cf35f889f86d0ea3',1,'IRrecv.h']]], - ['kfreshstr_5319',['kFreshStr',['../IRtext_8cpp.html#ae416979803b912c932aa5eda837fc471',1,'kFreshStr(): IRtext.cpp'],['../IRtext_8h.html#adc8991e424df3ebf2f47ffc2854057f2',1,'kFreshStr(): IRtext.cpp']]], - ['kfujitsuacbitmark_5320',['kFujitsuAcBitMark',['../ir__Fujitsu_8cpp.html#a2e01906b1317da42fcc204284646e3db',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacbits_5321',['kFujitsuAcBits',['../IRremoteESP8266_8h.html#aecd63891cac014d1b7e344638086ad47',1,'IRremoteESP8266.h']]], - ['kfujitsuaccmdecono_5322',['kFujitsuAcCmdEcono',['../ir__Fujitsu_8h.html#a1e1eb4274232c43769f70b40f395a084',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdpowerful_5323',['kFujitsuAcCmdPowerful',['../ir__Fujitsu_8h.html#a69349537a37674a82b8ca630e6ca1b5a',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstayon_5324',['kFujitsuAcCmdStayOn',['../ir__Fujitsu_8h.html#acc729a2cd570761f97c63b98024c157d',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstephoriz_5325',['kFujitsuAcCmdStepHoriz',['../ir__Fujitsu_8h.html#ac67e3fa9ab8f1e1146bed1296f9a2131',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdstepvert_5326',['kFujitsuAcCmdStepVert',['../ir__Fujitsu_8h.html#a5dda60d753d93089fc323bfcd9567afd',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdtoggleswinghoriz_5327',['kFujitsuAcCmdToggleSwingHoriz',['../ir__Fujitsu_8h.html#a43b5912e65a8e6d3f1c672b155135f27',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdtoggleswingvert_5328',['kFujitsuAcCmdToggleSwingVert',['../ir__Fujitsu_8h.html#a66960882cee5d109f332917fe1f8067c',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdturnoff_5329',['kFujitsuAcCmdTurnOff',['../ir__Fujitsu_8h.html#a073903b56c40d89b9999ee9b7dc48f00',1,'ir_Fujitsu.h']]], - ['kfujitsuaccmdturnon_5330',['kFujitsuAcCmdTurnOn',['../ir__Fujitsu_8h.html#a51c2abda78c7d6ced59f88acb857281e',1,'ir_Fujitsu.h']]], - ['kfujitsuacextratolerance_5331',['kFujitsuAcExtraTolerance',['../ir__Fujitsu_8cpp.html#ad89512dbc470982174d236be27caf071',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacfanauto_5332',['kFujitsuAcFanAuto',['../ir__Fujitsu_8h.html#a55bbb5a5b1760515f070d302c9fa4cbb',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanhigh_5333',['kFujitsuAcFanHigh',['../ir__Fujitsu_8h.html#a30b11ea24865a00b10468015aae77886',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanlow_5334',['kFujitsuAcFanLow',['../ir__Fujitsu_8h.html#aa0162cde862a3c02dd877a3a7933c130',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanmed_5335',['kFujitsuAcFanMed',['../ir__Fujitsu_8h.html#a0efcb8e8a6521e4788a82ff6c556b67b',1,'ir_Fujitsu.h']]], - ['kfujitsuacfanquiet_5336',['kFujitsuAcFanQuiet',['../ir__Fujitsu_8h.html#a9abb4ec5fe9f27c6acd62273329490b6',1,'ir_Fujitsu.h']]], - ['kfujitsuachdrmark_5337',['kFujitsuAcHdrMark',['../ir__Fujitsu_8cpp.html#a96402e0aed6962a8a72cc736fa9bbc08',1,'ir_Fujitsu.cpp']]], - ['kfujitsuachdrspace_5338',['kFujitsuAcHdrSpace',['../ir__Fujitsu_8cpp.html#a655e37e172ab06dc06ca69f3c06223b2',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacmaxtemp_5339',['kFujitsuAcMaxTemp',['../ir__Fujitsu_8h.html#ac3b4c1f7a9c8aa63da0307d9b32e839e',1,'ir_Fujitsu.h']]], - ['kfujitsuacmaxtempf_5340',['kFujitsuAcMaxTempF',['../ir__Fujitsu_8h.html#ac799d71f9add0ec307f783dc93272f41',1,'ir_Fujitsu.h']]], - ['kfujitsuacminbits_5341',['kFujitsuAcMinBits',['../IRremoteESP8266_8h.html#a025caa6d0ae6becdd5ee58b5ac6ed61f',1,'IRremoteESP8266.h']]], - ['kfujitsuacmingap_5342',['kFujitsuAcMinGap',['../ir__Fujitsu_8cpp.html#a255fab3b9047b34cf6c4d42c0c82c485',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacminrepeat_5343',['kFujitsuAcMinRepeat',['../IRremoteESP8266_8h.html#a9dd52420366167afb4c8831b4ccd02fa',1,'IRremoteESP8266.h']]], - ['kfujitsuacmintemp_5344',['kFujitsuAcMinTemp',['../ir__Fujitsu_8h.html#ada381853475c2f25b9fc6536de175e8d',1,'ir_Fujitsu.h']]], - ['kfujitsuacmintempf_5345',['kFujitsuAcMinTempF',['../ir__Fujitsu_8h.html#a83abf89b7e533db047f6d178df7a0ad5',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodeauto_5346',['kFujitsuAcModeAuto',['../ir__Fujitsu_8h.html#acf0aa6d1d033c893a3acd5b8d7756a5b',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodecool_5347',['kFujitsuAcModeCool',['../ir__Fujitsu_8h.html#a782e226fadab0a256144821cacea2314',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodedry_5348',['kFujitsuAcModeDry',['../ir__Fujitsu_8h.html#ae66f2ed2e554a6befdf0377d01bce257',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodefan_5349',['kFujitsuAcModeFan',['../ir__Fujitsu_8h.html#a7cc07ec4747b5cebc50257ec02297800',1,'ir_Fujitsu.h']]], - ['kfujitsuacmodeheat_5350',['kFujitsuAcModeHeat',['../ir__Fujitsu_8h.html#ad9b47b7419853a4cb1cf072023dac69b',1,'ir_Fujitsu.h']]], - ['kfujitsuacofftimer_5351',['kFujitsuAcOffTimer',['../ir__Fujitsu_8h.html#ad2f217a98a0062d488ffd0586dc0d011',1,'ir_Fujitsu.h']]], - ['kfujitsuaconespace_5352',['kFujitsuAcOneSpace',['../ir__Fujitsu_8cpp.html#a4f5246e6428cc701dbaa18923904713a',1,'ir_Fujitsu.cpp']]], - ['kfujitsuacontimer_5353',['kFujitsuAcOnTimer',['../ir__Fujitsu_8h.html#abad3816a098ecc96bde57d1ff820552c',1,'ir_Fujitsu.h']]], - ['kfujitsuacsleeptimer_5354',['kFujitsuAcSleepTimer',['../ir__Fujitsu_8h.html#a53c550f5e4d63c54b6962f47d281bec6',1,'ir_Fujitsu.h']]], - ['kfujitsuacstatelength_5355',['kFujitsuAcStateLength',['../IRremoteESP8266_8h.html#ac3aa33a8386f73de0f57fc1ff7c6e7d9',1,'IRremoteESP8266.h']]], - ['kfujitsuacstatelengthshort_5356',['kFujitsuAcStateLengthShort',['../IRremoteESP8266_8h.html#a81cb09663eedbdc3888ee68438f0a5d3',1,'IRremoteESP8266.h']]], - ['kfujitsuacstoptimers_5357',['kFujitsuAcStopTimers',['../ir__Fujitsu_8h.html#a0f416a0f84e4100a702528664c9df177',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingboth_5358',['kFujitsuAcSwingBoth',['../ir__Fujitsu_8h.html#a07c5a757b0c3bbe07412813807272434',1,'ir_Fujitsu.h']]], - ['kfujitsuacswinghoriz_5359',['kFujitsuAcSwingHoriz',['../ir__Fujitsu_8h.html#a8875f62d61afb8cbf468207aedcb8982',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingoff_5360',['kFujitsuAcSwingOff',['../ir__Fujitsu_8h.html#a7f8109a1b8fd13a93d6b0255d05413df',1,'ir_Fujitsu.h']]], - ['kfujitsuacswingvert_5361',['kFujitsuAcSwingVert',['../ir__Fujitsu_8h.html#a5c532a43ab11bf7cb353de2081260f40',1,'ir_Fujitsu.h']]], - ['kfujitsuactempoffsetc_5362',['kFujitsuAcTempOffsetC',['../ir__Fujitsu_8h.html#a84f16db63e1d1a47a4e41874d6c9c397',1,'ir_Fujitsu.h']]], - ['kfujitsuactempoffsetf_5363',['kFujitsuAcTempOffsetF',['../ir__Fujitsu_8h.html#a9530a57830aa1e45efe0368928a02a8b',1,'ir_Fujitsu.h']]], - ['kfujitsuactimermax_5364',['kFujitsuAcTimerMax',['../ir__Fujitsu_8h.html#adaec1744905feeb18af4ebe9ea2f6aae',1,'ir_Fujitsu.h']]], - ['kfujitsuaczerospace_5365',['kFujitsuAcZeroSpace',['../ir__Fujitsu_8cpp.html#a3815b89a2037cd0c8d774217df603d6e',1,'ir_Fujitsu.cpp']]], - ['kgicablebitmark_5366',['kGicableBitMark',['../ir__GICable_8cpp.html#ac315be0b5e02fb4c7109a6f67c4fac8e',1,'ir_GICable.cpp']]], - ['kgicablebits_5367',['kGicableBits',['../IRremoteESP8266_8h.html#aceb5cbd7ba5d8bc11560ba29137b10fa',1,'IRremoteESP8266.h']]], - ['kgicablehdrmark_5368',['kGicableHdrMark',['../ir__GICable_8cpp.html#a0388e7a2030246928029ed1c79ba819d',1,'ir_GICable.cpp']]], - ['kgicablehdrspace_5369',['kGicableHdrSpace',['../ir__GICable_8cpp.html#ab357b0a095155eab6206245008387fc0',1,'ir_GICable.cpp']]], - ['kgicablemincommandlength_5370',['kGicableMinCommandLength',['../ir__GICable_8cpp.html#a79db5de95ff6b42259f0a54fa59f46f6',1,'ir_GICable.cpp']]], - ['kgicablemingap_5371',['kGicableMinGap',['../ir__GICable_8cpp.html#aff7027ab4b933e4a7f5506590c25f699',1,'ir_GICable.cpp']]], - ['kgicableminrepeat_5372',['kGicableMinRepeat',['../IRremoteESP8266_8h.html#ad8142649290db6fc337ac839d4078aef',1,'IRremoteESP8266.h']]], - ['kgicableonespace_5373',['kGicableOneSpace',['../ir__GICable_8cpp.html#a31300a6f41363cbc22d40f26e693b8be',1,'ir_GICable.cpp']]], - ['kgicablerptspace_5374',['kGicableRptSpace',['../ir__GICable_8cpp.html#a9e0d82ed05e210dec2980a7d1a2e081b',1,'ir_GICable.cpp']]], - ['kgicablezerospace_5375',['kGicableZeroSpace',['../ir__GICable_8cpp.html#a1383f274e701ad5c8141beb7703783ff',1,'ir_GICable.cpp']]], - ['kglobalcachefreqindex_5376',['kGlobalCacheFreqIndex',['../ir__GlobalCache_8cpp.html#aaa0bdfe1eb76e8519a111b6588a5a3ff',1,'ir_GlobalCache.cpp']]], - ['kglobalcachemaxrepeat_5377',['kGlobalCacheMaxRepeat',['../ir__GlobalCache_8cpp.html#ae4a19c45ab538e8a386769cd98943a0d',1,'ir_GlobalCache.cpp']]], - ['kglobalcacheminusec_5378',['kGlobalCacheMinUsec',['../ir__GlobalCache_8cpp.html#a133cf089a7b40516fac3b1143981b2a6',1,'ir_GlobalCache.cpp']]], - ['kglobalcacherptindex_5379',['kGlobalCacheRptIndex',['../ir__GlobalCache_8cpp.html#ad4d55ed7e89cfc6d513dae6ecb211fe9',1,'ir_GlobalCache.cpp']]], - ['kglobalcacherptstartindex_5380',['kGlobalCacheRptStartIndex',['../ir__GlobalCache_8cpp.html#afde4c65e9e75558df6ac7aa479bf507a',1,'ir_GlobalCache.cpp']]], - ['kglobalcachestartindex_5381',['kGlobalCacheStartIndex',['../ir__GlobalCache_8cpp.html#a8640be7a67ce3f49452b28bc24912637',1,'ir_GlobalCache.cpp']]], - ['kgoodweatherauto_5382',['kGoodweatherAuto',['../ir__Goodweather_8h.html#a2fc5f0f7d0f68dcff193548830f50528',1,'ir_Goodweather.h']]], - ['kgoodweatherbitmark_5383',['kGoodweatherBitMark',['../ir__Goodweather_8h.html#acb9fb47b2a207997fda0244d1bafbe89',1,'ir_Goodweather.h']]], - ['kgoodweatherbits_5384',['kGoodweatherBits',['../IRremoteESP8266_8h.html#afa2675ce42d00175ec95caa6cd87a425',1,'IRremoteESP8266.h']]], - ['kgoodweathercmdairflow_5385',['kGoodweatherCmdAirFlow',['../ir__Goodweather_8h.html#aa51248353573abd95af37e46f0a2c4a7',1,'ir_Goodweather.h']]], - ['kgoodweathercmddowntemp_5386',['kGoodweatherCmdDownTemp',['../ir__Goodweather_8h.html#a8a0b72bf745b6003fb460a3c917eecff',1,'ir_Goodweather.h']]], - ['kgoodweathercmdfan_5387',['kGoodweatherCmdFan',['../ir__Goodweather_8h.html#a4a0881f87af157fdf9ed3d9f342f1ac5',1,'ir_Goodweather.h']]], - ['kgoodweathercmdhold_5388',['kGoodweatherCmdHold',['../ir__Goodweather_8h.html#ac0f3b1413228cb7e86822c5690f20344',1,'ir_Goodweather.h']]], - ['kgoodweathercmdlight_5389',['kGoodweatherCmdLight',['../ir__Goodweather_8h.html#ae70c4e66b17db9caf4800eb57a50706f',1,'ir_Goodweather.h']]], - ['kgoodweathercmdmode_5390',['kGoodweatherCmdMode',['../ir__Goodweather_8h.html#a6042296931ab29e9dfa5a701f3e42175',1,'ir_Goodweather.h']]], - ['kgoodweathercmdpower_5391',['kGoodweatherCmdPower',['../ir__Goodweather_8h.html#a3f1bf85bb10343512bb276adfc64b3b2',1,'ir_Goodweather.h']]], - ['kgoodweathercmdsleep_5392',['kGoodweatherCmdSleep',['../ir__Goodweather_8h.html#a3f4d72b620c73aec68c2125430ca709d',1,'ir_Goodweather.h']]], - ['kgoodweathercmdswing_5393',['kGoodweatherCmdSwing',['../ir__Goodweather_8h.html#ab4ceedbe859811a9fb394f6ebf233cb5',1,'ir_Goodweather.h']]], - ['kgoodweathercmdtimer_5394',['kGoodweatherCmdTimer',['../ir__Goodweather_8h.html#ad4d247ea6c9fc237e0acda84fdaa2eb6',1,'ir_Goodweather.h']]], - ['kgoodweathercmdturbo_5395',['kGoodweatherCmdTurbo',['../ir__Goodweather_8h.html#aebc6d53b3e7d1769bff47968c19c09c9',1,'ir_Goodweather.h']]], - ['kgoodweathercmduptemp_5396',['kGoodweatherCmdUpTemp',['../ir__Goodweather_8h.html#a51a089b03bd72a247a4c35c2ff3f3dc6',1,'ir_Goodweather.h']]], - ['kgoodweathercool_5397',['kGoodweatherCool',['../ir__Goodweather_8h.html#a92c807d6ff8a3356e65f04e82b99aba4',1,'ir_Goodweather.h']]], - ['kgoodweatherdry_5398',['kGoodweatherDry',['../ir__Goodweather_8h.html#ac5174a3e2c64361c25adcf7caa5b714c',1,'ir_Goodweather.h']]], - ['kgoodweatherextratolerance_5399',['kGoodweatherExtraTolerance',['../ir__Goodweather_8h.html#aae814dfbd574241d3b434d0bf2d38939',1,'ir_Goodweather.h']]], - ['kgoodweatherfan_5400',['kGoodweatherFan',['../ir__Goodweather_8h.html#ad56f00c7e39df93d28419d6a4afa360b',1,'ir_Goodweather.h']]], - ['kgoodweatherfanauto_5401',['kGoodweatherFanAuto',['../ir__Goodweather_8h.html#a9cc119524ac1cb93395dff3bb44b85cc',1,'ir_Goodweather.h']]], - ['kgoodweatherfanhigh_5402',['kGoodweatherFanHigh',['../ir__Goodweather_8h.html#af2b24de50923a0aabd4379dc6d3ef10f',1,'ir_Goodweather.h']]], - ['kgoodweatherfanlow_5403',['kGoodweatherFanLow',['../ir__Goodweather_8h.html#a7bc7c0cf9f2df574a7c087542991ab9b',1,'ir_Goodweather.h']]], - ['kgoodweatherfanmed_5404',['kGoodweatherFanMed',['../ir__Goodweather_8h.html#a5174245e9369a488332b32dfa416963e',1,'ir_Goodweather.h']]], - ['kgoodweatherhdrmark_5405',['kGoodweatherHdrMark',['../ir__Goodweather_8h.html#a5c39e33226770babb4b0e89fc0cde709',1,'ir_Goodweather.h']]], - ['kgoodweatherhdrspace_5406',['kGoodweatherHdrSpace',['../ir__Goodweather_8h.html#a837bfeaa111b00e2744c4ada89281bfb',1,'ir_Goodweather.h']]], - ['kgoodweatherheat_5407',['kGoodweatherHeat',['../ir__Goodweather_8h.html#a17d223f03df2718151a426582a224a2e',1,'ir_Goodweather.h']]], - ['kgoodweatherminrepeat_5408',['kGoodweatherMinRepeat',['../IRremoteESP8266_8h.html#a885bc5a3a5ba2d8827a62d07a43d0321',1,'IRremoteESP8266.h']]], - ['kgoodweatheronespace_5409',['kGoodweatherOneSpace',['../ir__Goodweather_8h.html#a8efa251085a8f434cb91c049e65cda56',1,'ir_Goodweather.h']]], - ['kgoodweatherstateinit_5410',['kGoodweatherStateInit',['../ir__Goodweather_8h.html#a5ec0e7ca097241d6bef0cbf2135c8fca',1,'ir_Goodweather.h']]], - ['kgoodweatherswingfast_5411',['kGoodweatherSwingFast',['../ir__Goodweather_8h.html#a2d2fa76fa35cf7d450aaf0b980660514',1,'ir_Goodweather.h']]], - ['kgoodweatherswingoff_5412',['kGoodweatherSwingOff',['../ir__Goodweather_8h.html#aa2c53f56daa2820351924d91b542bb67',1,'ir_Goodweather.h']]], - ['kgoodweatherswingslow_5413',['kGoodweatherSwingSlow',['../ir__Goodweather_8h.html#ad2c87d849af2c77088ffc533d279aadb',1,'ir_Goodweather.h']]], - ['kgoodweathertempmax_5414',['kGoodweatherTempMax',['../ir__Goodweather_8h.html#abec401548ce2221a9c668318a33a039c',1,'ir_Goodweather.h']]], - ['kgoodweathertempmin_5415',['kGoodweatherTempMin',['../ir__Goodweather_8h.html#a8e76c0ec1bd5e124d9cee5742a2d1cfe',1,'ir_Goodweather.h']]], - ['kgoodweatherzerospace_5416',['kGoodweatherZeroSpace',['../ir__Goodweather_8h.html#a411cbfb812d102daeaf6a83c742f9a9a',1,'ir_Goodweather.h']]], - ['kgpiounused_5417',['kGpioUnused',['../IRac_8h.html#afd817f0bc02c516b6430098dcecde383',1,'IRac.h']]], - ['kgreeauto_5418',['kGreeAuto',['../ir__Gree_8h.html#a65d2d0192a1baff86b859da1018ef2f8',1,'ir_Gree.h']]], - ['kgreebitmark_5419',['kGreeBitMark',['../ir__Gree_8cpp.html#ad7e23346f6d793cc2469e4c8a5650397',1,'ir_Gree.cpp']]], - ['kgreebits_5420',['kGreeBits',['../IRremoteESP8266_8h.html#acadcc5d03e09784642f008d4d2913c7d',1,'IRremoteESP8266.h']]], - ['kgreeblockfooter_5421',['kGreeBlockFooter',['../ir__Gree_8cpp.html#ae6d01cfa7ee2ef6ff27c1ecd7cd9be51',1,'ir_Gree.cpp']]], - ['kgreeblockfooterbits_5422',['kGreeBlockFooterBits',['../ir__Gree_8cpp.html#ae866eef4c729c703597a266917799cbd',1,'ir_Gree.cpp']]], - ['kgreecool_5423',['kGreeCool',['../ir__Gree_8h.html#a1e1eeab696b43864cec66e6485487cea',1,'ir_Gree.h']]], - ['kgreedefaultrepeat_5424',['kGreeDefaultRepeat',['../IRremoteESP8266_8h.html#a6816d2cb11b99a61fb63e6d0928e6706',1,'IRremoteESP8266.h']]], - ['kgreedisplaytempinside_5425',['kGreeDisplayTempInside',['../ir__Gree_8h.html#a7495e5873f63135490090929ed79e994',1,'ir_Gree.h']]], - ['kgreedisplaytempoff_5426',['kGreeDisplayTempOff',['../ir__Gree_8h.html#aa5881910d1c01b816f3ac22ddf0f89a8',1,'ir_Gree.h']]], - ['kgreedisplaytempoutside_5427',['kGreeDisplayTempOutside',['../ir__Gree_8h.html#a737c90e90897053623b15b5579cdb6a1',1,'ir_Gree.h']]], - ['kgreedisplaytempset_5428',['kGreeDisplayTempSet',['../ir__Gree_8h.html#a20f7d0948b158f83655ee4187a104176',1,'ir_Gree.h']]], - ['kgreedry_5429',['kGreeDry',['../ir__Gree_8h.html#aa818bcc036988ee24fe0467d128d174f',1,'ir_Gree.h']]], - ['kgreefan_5430',['kGreeFan',['../ir__Gree_8h.html#aa1513ffe43257664f761e4e1a5c2a38f',1,'ir_Gree.h']]], - ['kgreefanauto_5431',['kGreeFanAuto',['../ir__Gree_8h.html#aaad16357e34078257315aad7155b2cd1',1,'ir_Gree.h']]], - ['kgreefanmax_5432',['kGreeFanMax',['../ir__Gree_8h.html#a8753f860f2f503a4a70609fb000654f2',1,'ir_Gree.h']]], - ['kgreefanmed_5433',['kGreeFanMed',['../ir__Gree_8h.html#a674d096a91a5db4b5b7f1b0650c833de',1,'ir_Gree.h']]], - ['kgreefanmin_5434',['kGreeFanMin',['../ir__Gree_8h.html#a34ca09b196c41acc85a4fa0036f3ac3b',1,'ir_Gree.h']]], - ['kgreehdrmark_5435',['kGreeHdrMark',['../ir__Gree_8cpp.html#aaae182fb09bed73e37a5b5d3aee6a5fb',1,'ir_Gree.cpp']]], - ['kgreehdrspace_5436',['kGreeHdrSpace',['../ir__Gree_8cpp.html#a96b50632219c2b5808aea4ee9077b15c',1,'ir_Gree.cpp']]], - ['kgreeheat_5437',['kGreeHeat',['../ir__Gree_8h.html#ada5dac7b789497bf7a434a809d4070f6',1,'ir_Gree.h']]], - ['kgreemaxtempc_5438',['kGreeMaxTempC',['../ir__Gree_8h.html#a4c01aedfff06ed5a028c40010ad7bfa0',1,'ir_Gree.h']]], - ['kgreemaxtempf_5439',['kGreeMaxTempF',['../ir__Gree_8h.html#a6495898a7a6ddda1473b55820f4b6c44',1,'ir_Gree.h']]], - ['kgreemintempc_5440',['kGreeMinTempC',['../ir__Gree_8h.html#ad127acfc710e281a7b29023c8d1da8f6',1,'ir_Gree.h']]], - ['kgreemintempf_5441',['kGreeMinTempF',['../ir__Gree_8h.html#acf0ecb1b535894e3e790b668333fb66b',1,'ir_Gree.h']]], - ['kgreemsgspace_5442',['kGreeMsgSpace',['../ir__Gree_8cpp.html#a619ed3a2915196ab91d87db2b5a829fd',1,'ir_Gree.cpp']]], - ['kgreeonespace_5443',['kGreeOneSpace',['../ir__Gree_8cpp.html#ab139138084643ea0fca13b28412904e9',1,'ir_Gree.cpp']]], - ['kgreestatelength_5444',['kGreeStateLength',['../IRremoteESP8266_8h.html#a5558b24542873d8475e1ee0e2439839f',1,'IRremoteESP8266.h']]], - ['kgreeswingauto_5445',['kGreeSwingAuto',['../ir__Gree_8h.html#a414a503ad11c1d1d3b68d8b630df1f3a',1,'ir_Gree.h']]], - ['kgreeswingdown_5446',['kGreeSwingDown',['../ir__Gree_8h.html#abbe69b966ceb1f9eb60fe9c3fb18088d',1,'ir_Gree.h']]], - ['kgreeswingdownauto_5447',['kGreeSwingDownAuto',['../ir__Gree_8h.html#abc7d7b7de5dd2eb9c0a6ca28827aeb06',1,'ir_Gree.h']]], - ['kgreeswinglastpos_5448',['kGreeSwingLastPos',['../ir__Gree_8h.html#a630cd8fec01f13bfda0fffc1a0e59199',1,'ir_Gree.h']]], - ['kgreeswingmiddle_5449',['kGreeSwingMiddle',['../ir__Gree_8h.html#a12a7caa871f33a5bb83611b4efc7a42b',1,'ir_Gree.h']]], - ['kgreeswingmiddleauto_5450',['kGreeSwingMiddleAuto',['../ir__Gree_8h.html#ac9f85ef5c1bfeac1e4c759742e2d147f',1,'ir_Gree.h']]], - ['kgreeswingmiddledown_5451',['kGreeSwingMiddleDown',['../ir__Gree_8h.html#acad74b8154d73786e093fa215ab800b0',1,'ir_Gree.h']]], - ['kgreeswingmiddleup_5452',['kGreeSwingMiddleUp',['../ir__Gree_8h.html#aefbdd203df5b35eb61be1d0edd712c80',1,'ir_Gree.h']]], - ['kgreeswingup_5453',['kGreeSwingUp',['../ir__Gree_8h.html#adad431eb1010951fcf77dc4dac6449c6',1,'ir_Gree.h']]], - ['kgreeswingupauto_5454',['kGreeSwingUpAuto',['../ir__Gree_8h.html#a63f04add215785d4ccfe6ccec03d7667',1,'ir_Gree.h']]], - ['kgreetimermax_5455',['kGreeTimerMax',['../ir__Gree_8h.html#a76048e03908dd0d22cc8cacfbd99a40b',1,'ir_Gree.h']]], - ['kgreezerospace_5456',['kGreeZeroSpace',['../ir__Gree_8cpp.html#aa4694ba8ff0e14cd6b9c4730675c385f',1,'ir_Gree.cpp']]], - ['khaieracauto_5457',['kHaierAcAuto',['../ir__Haier_8h.html#ac33a02f63ee77e0d3050598511730865',1,'ir_Haier.h']]], - ['khaieracbitmark_5458',['kHaierAcBitMark',['../ir__Haier_8cpp.html#a4dec38325834c873c03588a8046f0963',1,'ir_Haier.cpp']]], - ['khaieracbits_5459',['kHaierACBits',['../IRremoteESP8266_8h.html#ad44cfa0951c24d1f0c67b2fba997f720',1,'IRremoteESP8266.h']]], - ['khaieraccmdfan_5460',['kHaierAcCmdFan',['../ir__Haier_8h.html#a447818ec7970e2ca09540afe44ecf90d',1,'ir_Haier.h']]], - ['khaieraccmdhealth_5461',['kHaierAcCmdHealth',['../ir__Haier_8h.html#a83cd0b5f307d9ae3ed0a3c6ed8fef94d',1,'ir_Haier.h']]], - ['khaieraccmdmode_5462',['kHaierAcCmdMode',['../ir__Haier_8h.html#a4543aa4ee28323bb9cb5c077f9bf9da1',1,'ir_Haier.h']]], - ['khaieraccmdoff_5463',['kHaierAcCmdOff',['../ir__Haier_8h.html#a96599917176ee244874926d1a530dd7e',1,'ir_Haier.h']]], - ['khaieraccmdon_5464',['kHaierAcCmdOn',['../ir__Haier_8h.html#a83973c2ad2b7b95611c81628c387e0d8',1,'ir_Haier.h']]], - ['khaieraccmdsleep_5465',['kHaierAcCmdSleep',['../ir__Haier_8h.html#abe52b62dd513395f2a8c7d47fa2fc514',1,'ir_Haier.h']]], - ['khaieraccmdswing_5466',['kHaierAcCmdSwing',['../ir__Haier_8h.html#afab164c2aabf39fdc1e956ff88af19d9',1,'ir_Haier.h']]], - ['khaieraccmdtempdown_5467',['kHaierAcCmdTempDown',['../ir__Haier_8h.html#aecc31139b4e45a7784669554c6fdbb54',1,'ir_Haier.h']]], - ['khaieraccmdtempup_5468',['kHaierAcCmdTempUp',['../ir__Haier_8h.html#aab5363f07920971c31d6acf8e70d392c',1,'ir_Haier.h']]], - ['khaieraccmdtimercancel_5469',['kHaierAcCmdTimerCancel',['../ir__Haier_8h.html#ab780da80fc471f004c5b34dc8f347d00',1,'ir_Haier.h']]], - ['khaieraccmdtimerset_5470',['kHaierAcCmdTimerSet',['../ir__Haier_8h.html#a9bd7c081d460a4ae5e3eac977f3916e4',1,'ir_Haier.h']]], - ['khaieraccool_5471',['kHaierAcCool',['../ir__Haier_8h.html#a83cd81ea1115f42a403ea5ee07a32bbb',1,'ir_Haier.h']]], - ['khaieracdefaultrepeat_5472',['kHaierAcDefaultRepeat',['../IRremoteESP8266_8h.html#a882914932449e33933b6f8e224cbaf3c',1,'IRremoteESP8266.h']]], - ['khaieracdeftemp_5473',['kHaierAcDefTemp',['../ir__Haier_8h.html#a86c9e8176fc01e52e883cadcc1d31763',1,'ir_Haier.h']]], - ['khaieracdry_5474',['kHaierAcDry',['../ir__Haier_8h.html#a3d36fbe1308221248f45044e5a671636',1,'ir_Haier.h']]], - ['khaieracfan_5475',['kHaierAcFan',['../ir__Haier_8h.html#af4049629b2139ca82471dfed1e1ced15',1,'ir_Haier.h']]], - ['khaieracfanauto_5476',['kHaierAcFanAuto',['../ir__Haier_8h.html#a8a34e74f7083caa98ed4afc31294539e',1,'ir_Haier.h']]], - ['khaieracfanhigh_5477',['kHaierAcFanHigh',['../ir__Haier_8h.html#aa4d9e45ca5777707778ef78a3284da19',1,'ir_Haier.h']]], - ['khaieracfanlow_5478',['kHaierAcFanLow',['../ir__Haier_8h.html#ae31e878b09284a6730a11e2017cfd7a8',1,'ir_Haier.h']]], - ['khaieracfanmed_5479',['kHaierAcFanMed',['../ir__Haier_8h.html#a5dfa833768e549964aa0bf8a336c32b0',1,'ir_Haier.h']]], - ['khaierachdr_5480',['kHaierAcHdr',['../ir__Haier_8cpp.html#a0f5dbd2eb92f10bc354e6b0a7a074084',1,'ir_Haier.cpp']]], - ['khaierachdrgap_5481',['kHaierAcHdrGap',['../ir__Haier_8cpp.html#a4c3fe62f8e5abf5d084009bbd4c4f878',1,'ir_Haier.cpp']]], - ['khaieracheat_5482',['kHaierAcHeat',['../ir__Haier_8h.html#a0edb011bdf85197e63a32d37f8517dd2',1,'ir_Haier.h']]], - ['khaieracmaxtemp_5483',['kHaierAcMaxTemp',['../ir__Haier_8h.html#a925252489fe34d9932151817d0dbe90b',1,'ir_Haier.h']]], - ['khaieracmaxtime_5484',['kHaierAcMaxTime',['../ir__Haier_8h.html#ae04e48e926a7533c3b62f0ff991e1f88',1,'ir_Haier.h']]], - ['khaieracmingap_5485',['kHaierAcMinGap',['../ir__Haier_8cpp.html#a7ab1f44876a931da765b52e4633e5e82',1,'ir_Haier.cpp']]], - ['khaieracmintemp_5486',['kHaierAcMinTemp',['../ir__Haier_8h.html#aafd2a4f38ecf78482a5a94e9c6c23f1c',1,'ir_Haier.h']]], - ['khaieraconespace_5487',['kHaierAcOneSpace',['../ir__Haier_8cpp.html#a43739aa786e08fca2a4a62a680b5c38b',1,'ir_Haier.cpp']]], - ['khaieracprefix_5488',['kHaierAcPrefix',['../ir__Haier_8h.html#a8502c9bea40205e01e6a01b47354272a',1,'ir_Haier.h']]], - ['khaieracsleepbit_5489',['kHaierAcSleepBit',['../ir__Haier_8h.html#ac63b91acdffa55d440b08aee05bda5dc',1,'ir_Haier.h']]], - ['khaieracstatelength_5490',['kHaierACStateLength',['../IRremoteESP8266_8h.html#afb4cd0c1a9c689d862e7095f0ab6dbe5',1,'IRremoteESP8266.h']]], - ['khaieracswingchg_5491',['kHaierAcSwingChg',['../ir__Haier_8h.html#af65a92a0b9d29a52ac882d4457e954e8',1,'ir_Haier.h']]], - ['khaieracswingdown_5492',['kHaierAcSwingDown',['../ir__Haier_8h.html#a2cf3a2102c6d4f9aede44efe853ffaa8',1,'ir_Haier.h']]], - ['khaieracswingoff_5493',['kHaierAcSwingOff',['../ir__Haier_8h.html#ac21f78c3cef931154b3fc953bbebc3b4',1,'ir_Haier.h']]], - ['khaieracswingup_5494',['kHaierAcSwingUp',['../ir__Haier_8h.html#a4bff8829604ee927dda5cfc54bd6cfe6',1,'ir_Haier.h']]], - ['khaieracyrw02auto_5495',['kHaierAcYrw02Auto',['../ir__Haier_8h.html#aa025eeba1c344c50cc98334c97a3c174',1,'ir_Haier.h']]], - ['khaieracyrw02bits_5496',['kHaierACYRW02Bits',['../IRremoteESP8266_8h.html#aab346c5ad482113978e5a2cbb7a06f27',1,'IRremoteESP8266.h']]], - ['khaieracyrw02buttonfan_5497',['kHaierAcYrw02ButtonFan',['../ir__Haier_8h.html#a0f9c265510e1e27f38817f08ef9c622b',1,'ir_Haier.h']]], - ['khaieracyrw02buttonhealth_5498',['kHaierAcYrw02ButtonHealth',['../ir__Haier_8h.html#ab1dc6c0a4ed59446bb69c4dd671c78cd',1,'ir_Haier.h']]], - ['khaieracyrw02buttonmode_5499',['kHaierAcYrw02ButtonMode',['../ir__Haier_8h.html#a74466c50b450b08407c9f226a5d657e5',1,'ir_Haier.h']]], - ['khaieracyrw02buttonpower_5500',['kHaierAcYrw02ButtonPower',['../ir__Haier_8h.html#af36b9c628a697f6c596052ecd143d80b',1,'ir_Haier.h']]], - ['khaieracyrw02buttonsleep_5501',['kHaierAcYrw02ButtonSleep',['../ir__Haier_8h.html#a5c7b8ff351e3d0167ec2c897c4820c40',1,'ir_Haier.h']]], - ['khaieracyrw02buttonswing_5502',['kHaierAcYrw02ButtonSwing',['../ir__Haier_8h.html#aa10c558317448783535e96be5876505c',1,'ir_Haier.h']]], - ['khaieracyrw02buttontempdown_5503',['kHaierAcYrw02ButtonTempDown',['../ir__Haier_8h.html#af4a9e5f7f705c331531ea2863dbbd11d',1,'ir_Haier.h']]], - ['khaieracyrw02buttontempup_5504',['kHaierAcYrw02ButtonTempUp',['../ir__Haier_8h.html#a3b24373f9c812f93eca05ee47e61d6e0',1,'ir_Haier.h']]], - ['khaieracyrw02buttonturbo_5505',['kHaierAcYrw02ButtonTurbo',['../ir__Haier_8h.html#ad80547c526b2eba142297715c0a0636d',1,'ir_Haier.h']]], - ['khaieracyrw02cool_5506',['kHaierAcYrw02Cool',['../ir__Haier_8h.html#a30c5d4e61ae3112a8a3e3622eecbb10b',1,'ir_Haier.h']]], - ['khaieracyrw02defaultrepeat_5507',['kHaierAcYrw02DefaultRepeat',['../IRremoteESP8266_8h.html#a62412e221207dbc2660f93dc265b4218',1,'IRremoteESP8266.h']]], - ['khaieracyrw02dry_5508',['kHaierAcYrw02Dry',['../ir__Haier_8h.html#a66cd902f2d35b4c8f66f085a0950a5fc',1,'ir_Haier.h']]], - ['khaieracyrw02fan_5509',['kHaierAcYrw02Fan',['../ir__Haier_8h.html#a35f50f043a2dda75c59507c1ed845b5d',1,'ir_Haier.h']]], - ['khaieracyrw02fanauto_5510',['kHaierAcYrw02FanAuto',['../ir__Haier_8h.html#ad554d38035ac15e4ea8b855802886989',1,'ir_Haier.h']]], - ['khaieracyrw02fanhigh_5511',['kHaierAcYrw02FanHigh',['../ir__Haier_8h.html#ab47bc48ac77fbf6734a41d10f0a53e4a',1,'ir_Haier.h']]], - ['khaieracyrw02fanlow_5512',['kHaierAcYrw02FanLow',['../ir__Haier_8h.html#a9a0a14ab98e1e52b60b9b9bf611c20cc',1,'ir_Haier.h']]], - ['khaieracyrw02fanmed_5513',['kHaierAcYrw02FanMed',['../ir__Haier_8h.html#a65583649324c6039112e7db26d685afc',1,'ir_Haier.h']]], - ['khaieracyrw02heat_5514',['kHaierAcYrw02Heat',['../ir__Haier_8h.html#aa0873975b6649294a3c9943130cb7a38',1,'ir_Haier.h']]], - ['khaieracyrw02prefix_5515',['kHaierAcYrw02Prefix',['../ir__Haier_8h.html#ac62d0f7ca94e064712f8a7a80da2f11e',1,'ir_Haier.h']]], - ['khaieracyrw02statelength_5516',['kHaierACYRW02StateLength',['../IRremoteESP8266_8h.html#a8f52b7d4595c117cf0b81ffbd1148cda',1,'IRremoteESP8266.h']]], - ['khaieracyrw02swingauto_5517',['kHaierAcYrw02SwingAuto',['../ir__Haier_8h.html#a95ae88223d910d4d966949241bccff8d',1,'ir_Haier.h']]], - ['khaieracyrw02swingbottom_5518',['kHaierAcYrw02SwingBottom',['../ir__Haier_8h.html#aa4b64385da5e9b2a89e15f70cd8c89e9',1,'ir_Haier.h']]], - ['khaieracyrw02swingdown_5519',['kHaierAcYrw02SwingDown',['../ir__Haier_8h.html#aab380411ac07b2b7f67956a5bbc362fb',1,'ir_Haier.h']]], - ['khaieracyrw02swingmiddle_5520',['kHaierAcYrw02SwingMiddle',['../ir__Haier_8h.html#a32d6dd98a050711bf928bf250b769839',1,'ir_Haier.h']]], - ['khaieracyrw02swingoff_5521',['kHaierAcYrw02SwingOff',['../ir__Haier_8h.html#a62570c15418cf24a94c92b162967f892',1,'ir_Haier.h']]], - ['khaieracyrw02swingtop_5522',['kHaierAcYrw02SwingTop',['../ir__Haier_8h.html#adf10f1bc1b293c684232cb6398631f70',1,'ir_Haier.h']]], - ['khaieracyrw02turbohigh_5523',['kHaierAcYrw02TurboHigh',['../ir__Haier_8h.html#ab096c15c69f242b99fbc1e4d7bd7548e',1,'ir_Haier.h']]], - ['khaieracyrw02turbolow_5524',['kHaierAcYrw02TurboLow',['../ir__Haier_8h.html#a19b7f4aee8115eb77267c415d8b3bd82',1,'ir_Haier.h']]], - ['khaieracyrw02turbooff_5525',['kHaierAcYrw02TurboOff',['../ir__Haier_8h.html#aa06ba46287b5806a6373e921cee34a51',1,'ir_Haier.h']]], - ['khaieraczerospace_5526',['kHaierAcZeroSpace',['../ir__Haier_8cpp.html#af2b1a4f27c7b50a1e60ae00bbbec7a16',1,'ir_Haier.cpp']]], - ['kheader_5527',['kHeader',['../IRrecv_8h.html#a0eac186845b9b998a252a3bdfa72e8ed',1,'IRrecv.h']]], - ['khealthstr_5528',['kHealthStr',['../IRtext_8cpp.html#a12474bbd4a7f700c922bcc1de240894f',1,'kHealthStr(): IRtext.cpp'],['../IRtext_8h.html#a7ef833cf90df2c97ef46c5c4b6225a42',1,'kHealthStr(): IRtext.cpp']]], - ['kheatstr_5529',['kHeatStr',['../IRtext_8cpp.html#a3a16f1dabca01c8f8e5ba1516408ba39',1,'kHeatStr(): IRtext.cpp'],['../IRtext_8h.html#a058df7d2db245e307719d025352d464d',1,'kHeatStr(): IRtext.cpp']]], - ['khigheststr_5530',['kHighestStr',['../IRtext_8cpp.html#a219f1d54c5ea75bd5c736efc0d7d7275',1,'kHighestStr(): IRtext.cpp'],['../IRtext_8h.html#ad7706307f507466526b4288e33385bde',1,'kHighestStr(): IRtext.cpp']]], - ['khighnibble_5531',['kHighNibble',['../IRutils_8h.html#a26dd96e82207f707c21e696a60b9c032',1,'IRutils.h']]], - ['khighstr_5532',['kHighStr',['../IRtext_8cpp.html#a127a20ad54e671f48a8faa822ff006f4',1,'kHighStr(): IRtext.cpp'],['../IRtext_8h.html#a5b4ade5e08f30c5e9a61c813bb2046f1',1,'kHighStr(): IRtext.cpp']]], - ['khistr_5533',['kHiStr',['../IRtext_8cpp.html#a7f4994ce51aed70ce6b5b4c88b886466',1,'kHiStr(): IRtext.cpp'],['../IRtext_8h.html#aa6fe661cdd9e2f1dc30d6fee2980cadd',1,'kHiStr(): IRtext.cpp']]], - ['khitachiac1auto_5534',['kHitachiAc1Auto',['../ir__Hitachi_8h.html#a2689ef34702107dc3dce3d1cfa260fc9',1,'ir_Hitachi.h']]], - ['khitachiac1bits_5535',['kHitachiAc1Bits',['../IRremoteESP8266_8h.html#aae6947c431d2c9da4fe2fdd9428012c1',1,'IRremoteESP8266.h']]], - ['khitachiac1checksumstartbyte_5536',['kHitachiAc1ChecksumStartByte',['../ir__Hitachi_8h.html#afafa689c5e922b812f63e08941feb2a7',1,'ir_Hitachi.h']]], - ['khitachiac1cool_5537',['kHitachiAc1Cool',['../ir__Hitachi_8h.html#a1146eda7688843d16094acf7a19a75ac',1,'ir_Hitachi.h']]], - ['khitachiac1dry_5538',['kHitachiAc1Dry',['../ir__Hitachi_8h.html#a82895db5201610844da803bf333102a3',1,'ir_Hitachi.h']]], - ['khitachiac1fan_5539',['kHitachiAc1Fan',['../ir__Hitachi_8h.html#ac5a3ba0e0e4ed02d4792d5a8e6a22654',1,'ir_Hitachi.h']]], - ['khitachiac1fanauto_5540',['kHitachiAc1FanAuto',['../ir__Hitachi_8h.html#a6f9adda7b08ec4b8566ceb4d79966689',1,'ir_Hitachi.h']]], - ['khitachiac1fanhigh_5541',['kHitachiAc1FanHigh',['../ir__Hitachi_8h.html#ace677cf030da9d74eda0f50d54c91411',1,'ir_Hitachi.h']]], - ['khitachiac1fanlow_5542',['kHitachiAc1FanLow',['../ir__Hitachi_8h.html#a011219de5c0e2ba043a8be6345f8cb05',1,'ir_Hitachi.h']]], - ['khitachiac1fanmed_5543',['kHitachiAc1FanMed',['../ir__Hitachi_8h.html#afbc2a535d85adb80cbcbac63e2432b1a',1,'ir_Hitachi.h']]], - ['khitachiac1hdrmark_5544',['kHitachiAc1HdrMark',['../ir__Hitachi_8cpp.html#a2b1891174c78be6f960e92b389d25fe7',1,'ir_Hitachi.cpp']]], - ['khitachiac1hdrspace_5545',['kHitachiAc1HdrSpace',['../ir__Hitachi_8cpp.html#a93f34ee53a375dd7f4ccf82458453701',1,'ir_Hitachi.cpp']]], - ['khitachiac1heat_5546',['kHitachiAc1Heat',['../ir__Hitachi_8h.html#abd5d4db30d6be3b990a74d4481e7eabe',1,'ir_Hitachi.h']]], - ['khitachiac1model_5fa_5547',['kHitachiAc1Model_A',['../ir__Hitachi_8h.html#a5f8fc3bb000d46705e4530ca0a8f7b60',1,'ir_Hitachi.h']]], - ['khitachiac1model_5fb_5548',['kHitachiAc1Model_B',['../ir__Hitachi_8h.html#a2d894a528c538b8a3922e2500241a55b',1,'ir_Hitachi.h']]], - ['khitachiac1sleep1_5549',['kHitachiAc1Sleep1',['../ir__Hitachi_8h.html#ab4ca89a9d8c8034e6a3d8ff17b09f3d5',1,'ir_Hitachi.h']]], - ['khitachiac1sleep2_5550',['kHitachiAc1Sleep2',['../ir__Hitachi_8h.html#a1e1a1ea1743b38da6bc6be63fa796689',1,'ir_Hitachi.h']]], - ['khitachiac1sleep3_5551',['kHitachiAc1Sleep3',['../ir__Hitachi_8h.html#a17eaa63f13a3c04aede9f485c310a930',1,'ir_Hitachi.h']]], - ['khitachiac1sleep4_5552',['kHitachiAc1Sleep4',['../ir__Hitachi_8h.html#a21360448a538fbd9491aa9dd28e6c545',1,'ir_Hitachi.h']]], - ['khitachiac1sleepoff_5553',['kHitachiAc1SleepOff',['../ir__Hitachi_8h.html#a96f87cb3838a1e1aab4b8407dcfc5b78',1,'ir_Hitachi.h']]], - ['khitachiac1statelength_5554',['kHitachiAc1StateLength',['../IRremoteESP8266_8h.html#abb5e2ddb1a8d3c6fa7a94dbe1989ec5d',1,'IRremoteESP8266.h']]], - ['khitachiac1tempauto_5555',['kHitachiAc1TempAuto',['../ir__Hitachi_8h.html#ad402dff999a97b50b392572899522b6a',1,'ir_Hitachi.h']]], - ['khitachiac1tempdelta_5556',['kHitachiAc1TempDelta',['../ir__Hitachi_8h.html#a279c856a2b4d25651b117a8c654cb48d',1,'ir_Hitachi.h']]], - ['khitachiac1tempsize_5557',['kHitachiAc1TempSize',['../ir__Hitachi_8h.html#affb52642edc8f2231f0dc83bc5271885',1,'ir_Hitachi.h']]], - ['khitachiac1timersize_5558',['kHitachiAc1TimerSize',['../ir__Hitachi_8h.html#afd7f469f67f55263b0031b325232751b',1,'ir_Hitachi.h']]], - ['khitachiac2bits_5559',['kHitachiAc2Bits',['../IRremoteESP8266_8h.html#a362a0b0b0afc216cf8162a3724cf073a',1,'IRremoteESP8266.h']]], - ['khitachiac2statelength_5560',['kHitachiAc2StateLength',['../IRremoteESP8266_8h.html#a10377a40053a12e091dbff2869db0352',1,'IRremoteESP8266.h']]], - ['khitachiac344bits_5561',['kHitachiAc344Bits',['../IRremoteESP8266_8h.html#a204fc2410c3d555a37b152a01dceead0',1,'IRremoteESP8266.h']]], - ['khitachiac344buttonfan_5562',['kHitachiAc344ButtonFan',['../ir__Hitachi_8h.html#a5f33b956ec83ee0004785a9c44bd5b0b',1,'ir_Hitachi.h']]], - ['khitachiac344buttonpowermode_5563',['kHitachiAc344ButtonPowerMode',['../ir__Hitachi_8h.html#a3816a8ad86e03f8c5870057e7ad86335',1,'ir_Hitachi.h']]], - ['khitachiac344buttonswingh_5564',['kHitachiAc344ButtonSwingH',['../ir__Hitachi_8h.html#a10dea534868d76d99e91458ee28f5fe9',1,'ir_Hitachi.h']]], - ['khitachiac344buttonswingv_5565',['kHitachiAc344ButtonSwingV',['../ir__Hitachi_8h.html#a95c1b0ee7e3802631f4c2708371e7d34',1,'ir_Hitachi.h']]], - ['khitachiac344buttontempdown_5566',['kHitachiAc344ButtonTempDown',['../ir__Hitachi_8h.html#a05d9bd95037669f1d3743d935471db33',1,'ir_Hitachi.h']]], - ['khitachiac344buttontempup_5567',['kHitachiAc344ButtonTempUp',['../ir__Hitachi_8h.html#a74abf2ce4ed5918bf68f485eff179578',1,'ir_Hitachi.h']]], - ['khitachiac344cool_5568',['kHitachiAc344Cool',['../ir__Hitachi_8h.html#a92d4d8dea34a9387e55852b6b5289328',1,'ir_Hitachi.h']]], - ['khitachiac344dry_5569',['kHitachiAc344Dry',['../ir__Hitachi_8h.html#a37697339ddc2ffaf4ee13b5e140adf2c',1,'ir_Hitachi.h']]], - ['khitachiac344fan_5570',['kHitachiAc344Fan',['../ir__Hitachi_8h.html#a296cd0fc1f414a4e15ce228b5a794bcb',1,'ir_Hitachi.h']]], - ['khitachiac344fanauto_5571',['kHitachiAc344FanAuto',['../ir__Hitachi_8h.html#a6439744edb1ae4dd9e8ea2097fac7a9d',1,'ir_Hitachi.h']]], - ['khitachiac344fanhigh_5572',['kHitachiAc344FanHigh',['../ir__Hitachi_8h.html#a83ea1924948ce9ac8266ab64a41f3ebd',1,'ir_Hitachi.h']]], - ['khitachiac344fanlow_5573',['kHitachiAc344FanLow',['../ir__Hitachi_8h.html#acbbb61fde653c84a8e35865fa724872c',1,'ir_Hitachi.h']]], - ['khitachiac344fanmax_5574',['kHitachiAc344FanMax',['../ir__Hitachi_8h.html#af041ed41027b8e444e3069d9a3481c51',1,'ir_Hitachi.h']]], - ['khitachiac344fanmedium_5575',['kHitachiAc344FanMedium',['../ir__Hitachi_8h.html#aa6d47b5c28f758aa297b345cbf853c9a',1,'ir_Hitachi.h']]], - ['khitachiac344fanmin_5576',['kHitachiAc344FanMin',['../ir__Hitachi_8h.html#ac4bafed10c76739698e9a35183beb970',1,'ir_Hitachi.h']]], - ['khitachiac344heat_5577',['kHitachiAc344Heat',['../ir__Hitachi_8h.html#a6c4102910d21dc838efee1fb2477218d',1,'ir_Hitachi.h']]], - ['khitachiac344maxtemp_5578',['kHitachiAc344MaxTemp',['../ir__Hitachi_8h.html#a4a394fc23fb119ba67e3ca53e4b88f7f',1,'ir_Hitachi.h']]], - ['khitachiac344mintemp_5579',['kHitachiAc344MinTemp',['../ir__Hitachi_8h.html#a7322f7769c9c1af2311180474e5b0f57',1,'ir_Hitachi.h']]], - ['khitachiac344statelength_5580',['kHitachiAc344StateLength',['../IRremoteESP8266_8h.html#a2192f6b7c353f7f124dff3b57eab0659',1,'IRremoteESP8266.h']]], - ['khitachiac344swinghauto_5581',['kHitachiAc344SwingHAuto',['../ir__Hitachi_8h.html#a4f93eccee6e3e5f5c49c84034ca25af3',1,'ir_Hitachi.h']]], - ['khitachiac344swinghleft_5582',['kHitachiAc344SwingHLeft',['../ir__Hitachi_8h.html#af714a1eb296b05f3fc8167aff5419764',1,'ir_Hitachi.h']]], - ['khitachiac344swinghleftmax_5583',['kHitachiAc344SwingHLeftMax',['../ir__Hitachi_8h.html#ad0c5636ac0ccfd7e9cd087101bd5d204',1,'ir_Hitachi.h']]], - ['khitachiac344swinghmiddle_5584',['kHitachiAc344SwingHMiddle',['../ir__Hitachi_8h.html#a7e4372e02d72723049b378e955070c21',1,'ir_Hitachi.h']]], - ['khitachiac344swinghright_5585',['kHitachiAc344SwingHRight',['../ir__Hitachi_8h.html#af4b087dec06cfd86920dbf9df22aca63',1,'ir_Hitachi.h']]], - ['khitachiac344swinghrightmax_5586',['kHitachiAc344SwingHRightMax',['../ir__Hitachi_8h.html#a90cffc131be89a36d352c462403f689f',1,'ir_Hitachi.h']]], - ['khitachiac3bitmark_5587',['kHitachiAc3BitMark',['../ir__Hitachi_8cpp.html#a68269a88e02a3030749061e5f28f74cc',1,'ir_Hitachi.cpp']]], - ['khitachiac3bits_5588',['kHitachiAc3Bits',['../IRremoteESP8266_8h.html#ac26b896cdc17018269fa881e10e3aabb',1,'IRremoteESP8266.h']]], - ['khitachiac3hdrmark_5589',['kHitachiAc3HdrMark',['../ir__Hitachi_8cpp.html#af0a80a66094e67b4a78e8dfa539cd22f',1,'ir_Hitachi.cpp']]], - ['khitachiac3hdrspace_5590',['kHitachiAc3HdrSpace',['../ir__Hitachi_8cpp.html#aca4dc0b851c69a5e640337d68eb6f412',1,'ir_Hitachi.cpp']]], - ['khitachiac3minbits_5591',['kHitachiAc3MinBits',['../IRremoteESP8266_8h.html#a66ebaf70d2b4018371825c9cd3078a42',1,'IRremoteESP8266.h']]], - ['khitachiac3minstatelength_5592',['kHitachiAc3MinStateLength',['../IRremoteESP8266_8h.html#ac3becb270bfddaa1c64b1f8582dfc902',1,'IRremoteESP8266.h']]], - ['khitachiac3onespace_5593',['kHitachiAc3OneSpace',['../ir__Hitachi_8cpp.html#a0e630e38b4bffd5ec931153c20e41d97',1,'ir_Hitachi.cpp']]], - ['khitachiac3statelength_5594',['kHitachiAc3StateLength',['../IRremoteESP8266_8h.html#a9cc230bac4f902d46049c7b2c2fdbd3d',1,'IRremoteESP8266.h']]], - ['khitachiac3zerospace_5595',['kHitachiAc3ZeroSpace',['../ir__Hitachi_8cpp.html#a7cf96a2734bcc9a5eb390b8647666925',1,'ir_Hitachi.cpp']]], - ['khitachiac424bitmark_5596',['kHitachiAc424BitMark',['../ir__Hitachi_8cpp.html#acf5f9d83873a74688eb0413708e26eed',1,'ir_Hitachi.cpp']]], - ['khitachiac424bits_5597',['kHitachiAc424Bits',['../IRremoteESP8266_8h.html#ab466e28528a0d688a1b91e8af69025cb',1,'IRremoteESP8266.h']]], - ['khitachiac424buttonfan_5598',['kHitachiAc424ButtonFan',['../ir__Hitachi_8h.html#a4aa278fb1983213a2506c71debe035aa',1,'ir_Hitachi.h']]], - ['khitachiac424buttonpowermode_5599',['kHitachiAc424ButtonPowerMode',['../ir__Hitachi_8h.html#a2dd37a36c6ad928ad0c3485ae4ea78fd',1,'ir_Hitachi.h']]], - ['khitachiac424buttonswingh_5600',['kHitachiAc424ButtonSwingH',['../ir__Hitachi_8h.html#af3a0d9499fab327bc7dfb5d57562a946',1,'ir_Hitachi.h']]], - ['khitachiac424buttonswingv_5601',['kHitachiAc424ButtonSwingV',['../ir__Hitachi_8h.html#a59d8e5407daf37d38e0c76ab3abdec9d',1,'ir_Hitachi.h']]], - ['khitachiac424buttontempdown_5602',['kHitachiAc424ButtonTempDown',['../ir__Hitachi_8h.html#ad909ee0bc97e24aa70ff6ecd1cffe6c2',1,'ir_Hitachi.h']]], - ['khitachiac424buttontempup_5603',['kHitachiAc424ButtonTempUp',['../ir__Hitachi_8h.html#ac8885804fb276f6327beb2018b204359',1,'ir_Hitachi.h']]], - ['khitachiac424cool_5604',['kHitachiAc424Cool',['../ir__Hitachi_8h.html#a64c1e01c222e6dec001a7052e822d64f',1,'ir_Hitachi.h']]], - ['khitachiac424dry_5605',['kHitachiAc424Dry',['../ir__Hitachi_8h.html#a56bfde42914bc92f47929179cddcbdf3',1,'ir_Hitachi.h']]], - ['khitachiac424fan_5606',['kHitachiAc424Fan',['../ir__Hitachi_8h.html#a35db6fdcedeb3de0ffb0bb72f1e60a0b',1,'ir_Hitachi.h']]], - ['khitachiac424fanauto_5607',['kHitachiAc424FanAuto',['../ir__Hitachi_8h.html#add1ec95cfd4e388f90154b25410471d0',1,'ir_Hitachi.h']]], - ['khitachiac424fanhigh_5608',['kHitachiAc424FanHigh',['../ir__Hitachi_8h.html#aacabc41baea6c3ddf711424a400144a3',1,'ir_Hitachi.h']]], - ['khitachiac424fanlow_5609',['kHitachiAc424FanLow',['../ir__Hitachi_8h.html#acae66b060db5cd03732ccbf808c6049e',1,'ir_Hitachi.h']]], - ['khitachiac424fanmax_5610',['kHitachiAc424FanMax',['../ir__Hitachi_8h.html#a6298e6dee6ff9f5fc57cfc9ccf30c073',1,'ir_Hitachi.h']]], - ['khitachiac424fanmaxdry_5611',['kHitachiAc424FanMaxDry',['../ir__Hitachi_8h.html#af770b29d838610b87463551444548ac0',1,'ir_Hitachi.h']]], - ['khitachiac424fanmedium_5612',['kHitachiAc424FanMedium',['../ir__Hitachi_8h.html#a3d6479f2e76bd84eeda9f5c0772210c5',1,'ir_Hitachi.h']]], - ['khitachiac424fanmin_5613',['kHitachiAc424FanMin',['../ir__Hitachi_8h.html#aacf1d4b99d89a0e24622ca02402c683b',1,'ir_Hitachi.h']]], - ['khitachiac424fantemp_5614',['kHitachiAc424FanTemp',['../ir__Hitachi_8h.html#a874362698fad488da1a477c4f99923aa',1,'ir_Hitachi.h']]], - ['khitachiac424hdrmark_5615',['kHitachiAc424HdrMark',['../ir__Hitachi_8cpp.html#a7b1dcaa7569237831b08ea061fd403fb',1,'ir_Hitachi.cpp']]], - ['khitachiac424hdrspace_5616',['kHitachiAc424HdrSpace',['../ir__Hitachi_8cpp.html#a9309b801d147dd3eba96ed15245f7445',1,'ir_Hitachi.cpp']]], - ['khitachiac424heat_5617',['kHitachiAc424Heat',['../ir__Hitachi_8h.html#a5cfd38c9e7aa2c39dfa38b1ef4b33b4c',1,'ir_Hitachi.h']]], - ['khitachiac424ldrmark_5618',['kHitachiAc424LdrMark',['../ir__Hitachi_8cpp.html#a0e2a88cb5930fb9726a453bdefe33bae',1,'ir_Hitachi.cpp']]], - ['khitachiac424ldrspace_5619',['kHitachiAc424LdrSpace',['../ir__Hitachi_8cpp.html#ad6285b55ed74e0e1087c3eb12d63b39c',1,'ir_Hitachi.cpp']]], - ['khitachiac424maxtemp_5620',['kHitachiAc424MaxTemp',['../ir__Hitachi_8h.html#a22574044b5a9163aca1f0581b9fa9241',1,'ir_Hitachi.h']]], - ['khitachiac424mintemp_5621',['kHitachiAc424MinTemp',['../ir__Hitachi_8h.html#a3d4311f1f28bbe31a22b80556e678b22',1,'ir_Hitachi.h']]], - ['khitachiac424onespace_5622',['kHitachiAc424OneSpace',['../ir__Hitachi_8cpp.html#a9b9cd22801f17acac593a8bcf334fd71',1,'ir_Hitachi.cpp']]], - ['khitachiac424poweroff_5623',['kHitachiAc424PowerOff',['../ir__Hitachi_8h.html#affc2d076cc0de329466ecbde7186d4eb',1,'ir_Hitachi.h']]], - ['khitachiac424poweron_5624',['kHitachiAc424PowerOn',['../ir__Hitachi_8h.html#a922478904efd86c6ecf7dabec3dd759f',1,'ir_Hitachi.h']]], - ['khitachiac424statelength_5625',['kHitachiAc424StateLength',['../IRremoteESP8266_8h.html#aff17d9c0ccf683895d2c868094679f0a',1,'IRremoteESP8266.h']]], - ['khitachiac424zerospace_5626',['kHitachiAc424ZeroSpace',['../ir__Hitachi_8cpp.html#a0f2032ac476bf344df31dc9351b2b98a',1,'ir_Hitachi.cpp']]], - ['khitachiacauto_5627',['kHitachiAcAuto',['../ir__Hitachi_8h.html#af8c74a8388361162b93339e1b0bc94d9',1,'ir_Hitachi.h']]], - ['khitachiacautotemp_5628',['kHitachiAcAutoTemp',['../ir__Hitachi_8h.html#aaa28bb683fefc065cb115fbfb66994ec',1,'ir_Hitachi.h']]], - ['khitachiacbitmark_5629',['kHitachiAcBitMark',['../ir__Hitachi_8cpp.html#a0993bf3d527a12bfe51c7bbfcf788c59',1,'ir_Hitachi.cpp']]], - ['khitachiacbits_5630',['kHitachiAcBits',['../IRremoteESP8266_8h.html#aec91e459b1e52765c700f8f7a4723f3b',1,'IRremoteESP8266.h']]], - ['khitachiaccool_5631',['kHitachiAcCool',['../ir__Hitachi_8h.html#a2b40b07601fdf8b038c97bb8bd2bec59',1,'ir_Hitachi.h']]], - ['khitachiacdefaultrepeat_5632',['kHitachiAcDefaultRepeat',['../IRremoteESP8266_8h.html#acc8510281d2ff9a808501d375c03ba21',1,'IRremoteESP8266.h']]], - ['khitachiacdry_5633',['kHitachiAcDry',['../ir__Hitachi_8h.html#a19730b13fca736392600580c156ae3c3',1,'ir_Hitachi.h']]], - ['khitachiacfan_5634',['kHitachiAcFan',['../ir__Hitachi_8h.html#a69626883b6fdbd3ccd26bb3123bf1883',1,'ir_Hitachi.h']]], - ['khitachiacfanauto_5635',['kHitachiAcFanAuto',['../ir__Hitachi_8h.html#a6be6f6eae193e784133be63d7cc5d75e',1,'ir_Hitachi.h']]], - ['khitachiacfanhigh_5636',['kHitachiAcFanHigh',['../ir__Hitachi_8h.html#a85ef905a1d3704237141f07defc128f5',1,'ir_Hitachi.h']]], - ['khitachiacfanlow_5637',['kHitachiAcFanLow',['../ir__Hitachi_8h.html#a0add8c3a3d00a81fcc3279af78256de2',1,'ir_Hitachi.h']]], - ['khitachiacfanmed_5638',['kHitachiAcFanMed',['../ir__Hitachi_8h.html#ac88b4cfdce5d69bf07316ddd716c2c11',1,'ir_Hitachi.h']]], - ['khitachiacfreq_5639',['kHitachiAcFreq',['../ir__Hitachi_8h.html#a443eaa664017d7b671bef0e9aa2d643b',1,'ir_Hitachi.h']]], - ['khitachiachdrmark_5640',['kHitachiAcHdrMark',['../ir__Hitachi_8cpp.html#aefe34d17f5c72ee05afb9a6302a450da',1,'ir_Hitachi.cpp']]], - ['khitachiachdrspace_5641',['kHitachiAcHdrSpace',['../ir__Hitachi_8cpp.html#a4a4352723f119ea070be1eba2aafe36b',1,'ir_Hitachi.cpp']]], - ['khitachiacheat_5642',['kHitachiAcHeat',['../ir__Hitachi_8h.html#add2498e77e5585fd8c82a553bb0c22c0',1,'ir_Hitachi.h']]], - ['khitachiacmaxtemp_5643',['kHitachiAcMaxTemp',['../ir__Hitachi_8h.html#a63e17171c40d770d25f24d018aee2c4c',1,'ir_Hitachi.h']]], - ['khitachiacmingap_5644',['kHitachiAcMinGap',['../ir__Hitachi_8cpp.html#a14016b9110c11423c628c8e220e50864',1,'ir_Hitachi.cpp']]], - ['khitachiacmintemp_5645',['kHitachiAcMinTemp',['../ir__Hitachi_8h.html#a9b4f3ea50cc0491f10ff8dc8eabb3ecd',1,'ir_Hitachi.h']]], - ['khitachiaconespace_5646',['kHitachiAcOneSpace',['../ir__Hitachi_8cpp.html#a79a79aaf52a05c021621335586dd928f',1,'ir_Hitachi.cpp']]], - ['khitachiacstatelength_5647',['kHitachiAcStateLength',['../IRremoteESP8266_8h.html#a8bef76bac826afbbc51c2a867af15ed8',1,'IRremoteESP8266.h']]], - ['khitachiaczerospace_5648',['kHitachiAcZeroSpace',['../ir__Hitachi_8cpp.html#a0b03a4abb11d69a8b8da56ca2abc50c8',1,'ir_Hitachi.cpp']]], - ['kholdstr_5649',['kHoldStr',['../IRtext_8cpp.html#a86fd1f86e4a513603449e90a47500986',1,'kHoldStr(): IRtext.cpp'],['../IRtext_8h.html#adb2d0f01f1429b0f3eb7193519fe3d6e',1,'kHoldStr(): IRtext.cpp']]], - ['khoursstr_5650',['kHoursStr',['../IRtext_8cpp.html#ae94260daddf2ea56e54d56bbad66526c',1,'kHoursStr(): IRtext.cpp'],['../IRtext_8h.html#a10ecbc18040f0d0ed88b728c18b0a161',1,'kHoursStr(): IRtext.cpp']]], - ['khourstr_5651',['kHourStr',['../IRtext_8cpp.html#a1d25a0bf2c8a638fff1557a0c5637977',1,'kHourStr(): IRtext.cpp'],['../IRtext_8h.html#a67a94ecb5a557b5335a8085cf1d8cdd6',1,'kHourStr(): IRtext.cpp']]], - ['khumidstr_5652',['kHumidStr',['../IRtext_8cpp.html#aae236cd2e7ed4961360fe687fe38170d',1,'kHumidStr(): IRtext.cpp'],['../IRtext_8h.html#a25365e722200ac40d581c4f585f9ae2f',1,'kHumidStr(): IRtext.cpp']]], - ['kidlestate_5653',['kIdleState',['../IRrecv_8h.html#aabba6fe7d7b97c45173eb7781a5d99bf',1,'IRrecv.h']]], - ['kidstr_5654',['kIdStr',['../IRtext_8cpp.html#a35dc8efdb79d96e4f0a48d3bd7993a6e',1,'kIdStr(): IRtext.cpp'],['../IRtext_8h.html#aed59ca935ee6bc14064af69bf50aa16b',1,'kIdStr(): IRtext.cpp']]], - ['kifeelstr_5655',['kIFeelStr',['../IRtext_8cpp.html#a3c7368d9138477f0eac2a6249ba2606b',1,'kIFeelStr(): IRtext.cpp'],['../IRtext_8h.html#a40f90b18252e14a73dd91527f621e35f',1,'kIFeelStr(): IRtext.cpp']]], - ['kinaxbitmark_5656',['kInaxBitMark',['../ir__Inax_8cpp.html#a84553819866dbfcfad8cba87f6c02e04',1,'ir_Inax.cpp']]], - ['kinaxbits_5657',['kInaxBits',['../IRremoteESP8266_8h.html#af8441f25b32d113096adeaff331c126a',1,'IRremoteESP8266.h']]], - ['kinaxhdrmark_5658',['kInaxHdrMark',['../ir__Inax_8cpp.html#ac467a96d91b6266c3ce9a2a4ec2a8b44',1,'ir_Inax.cpp']]], - ['kinaxhdrspace_5659',['kInaxHdrSpace',['../ir__Inax_8cpp.html#a6ddcc8ca7a5d05cee91e57b3e69cca33',1,'ir_Inax.cpp']]], - ['kinaxmingap_5660',['kInaxMinGap',['../ir__Inax_8cpp.html#a600f49303a77fbdc1d77aae2abe9b9aa',1,'ir_Inax.cpp']]], - ['kinaxminrepeat_5661',['kInaxMinRepeat',['../IRremoteESP8266_8h.html#a37a3d0ae51a6ce850a424fe77d5b22d2',1,'IRremoteESP8266.h']]], - ['kinaxonespace_5662',['kInaxOneSpace',['../ir__Inax_8cpp.html#aeb77e3a51838547a29c1b343eba4c7ef',1,'ir_Inax.cpp']]], - ['kinaxtick_5663',['kInaxTick',['../ir__Inax_8cpp.html#ad437f0beac0893853cc9d5cc214b03c6',1,'ir_Inax.cpp']]], - ['kinaxzerospace_5664',['kInaxZeroSpace',['../ir__Inax_8cpp.html#a115f1f061362c1c3c41e3bb20ea7e1c6',1,'ir_Inax.cpp']]], - ['kinsidestr_5665',['kInsideStr',['../IRtext_8cpp.html#aa94c7a9b472bcd2297b43a5b4008bc51',1,'kInsideStr(): IRtext.cpp'],['../IRtext_8h.html#a55c406749cb48970c11c58ec83ef97eb',1,'kInsideStr(): IRtext.cpp']]], - ['kionstr_5666',['kIonStr',['../IRtext_8cpp.html#afc36ce4beed72e662a8d9d1473dad235',1,'kIonStr(): IRtext.cpp'],['../IRtext_8h.html#add28006fe2f8ac70db1b5048c85be84b',1,'kIonStr(): IRtext.cpp']]], - ['kjvcbitmark_5667',['kJvcBitMark',['../ir__JVC_8cpp.html#a23c11d77431d37bba18776f9341c767f',1,'ir_JVC.cpp']]], - ['kjvcbitmarkticks_5668',['kJvcBitMarkTicks',['../ir__JVC_8cpp.html#aad7cf432a9bd0d2b4df66d5f903a70dd',1,'ir_JVC.cpp']]], - ['kjvcbits_5669',['kJvcBits',['../IRremoteESP8266_8h.html#a7c28467832e7480864a6be0ce87c608f',1,'IRremoteESP8266.h']]], - ['kjvchdrmark_5670',['kJvcHdrMark',['../ir__JVC_8cpp.html#a60d81ad0066288b602054bd24a912f1f',1,'ir_JVC.cpp']]], - ['kjvchdrmarkticks_5671',['kJvcHdrMarkTicks',['../ir__JVC_8cpp.html#abb12fba45b7a366e23849d693953e749',1,'ir_JVC.cpp']]], - ['kjvchdrspace_5672',['kJvcHdrSpace',['../ir__JVC_8cpp.html#a5444718f66ba8b43c1d7d99f7b378a0d',1,'ir_JVC.cpp']]], - ['kjvchdrspaceticks_5673',['kJvcHdrSpaceTicks',['../ir__JVC_8cpp.html#ae7cf6cb7b5ea5fe17a9b182d1ef3b008',1,'ir_JVC.cpp']]], - ['kjvcmingap_5674',['kJvcMinGap',['../ir__JVC_8cpp.html#ac19d8396c10adb687a883d016ec43aa5',1,'ir_JVC.cpp']]], - ['kjvcmingapticks_5675',['kJvcMinGapTicks',['../ir__JVC_8cpp.html#a525e7d672b148c02bdca1f66ab92e6c7',1,'ir_JVC.cpp']]], - ['kjvconespace_5676',['kJvcOneSpace',['../ir__JVC_8cpp.html#a8befef1d03f3a09541c2612c66c0256f',1,'ir_JVC.cpp']]], - ['kjvconespaceticks_5677',['kJvcOneSpaceTicks',['../ir__JVC_8cpp.html#a20d4f7737d71bdbec58694e775669df9',1,'ir_JVC.cpp']]], - ['kjvcrptlength_5678',['kJvcRptLength',['../ir__JVC_8cpp.html#a3896e40881e70c63234fecb88375b5a1',1,'ir_JVC.cpp']]], - ['kjvcrptlengthticks_5679',['kJvcRptLengthTicks',['../ir__JVC_8cpp.html#a75e03cf5739ab0ba67e5cfa426776d16',1,'ir_JVC.cpp']]], - ['kjvctick_5680',['kJvcTick',['../ir__JVC_8cpp.html#acd5a2ba251824cac5311adcc9a813b1a',1,'ir_JVC.cpp']]], - ['kjvczerospace_5681',['kJvcZeroSpace',['../ir__JVC_8cpp.html#a67c790b909f82e044b8c4e7227d9c189',1,'ir_JVC.cpp']]], - ['kjvczerospaceticks_5682',['kJvcZeroSpaceTicks',['../ir__JVC_8cpp.html#a0a5319df3b1e01741cd35a37087342f5',1,'ir_JVC.cpp']]], - ['kkelvinatorauto_5683',['kKelvinatorAuto',['../ir__Kelvinator_8h.html#a879b005fc5493a693b05e3bb7cbc8fbf',1,'ir_Kelvinator.h']]], - ['kkelvinatorautotemp_5684',['kKelvinatorAutoTemp',['../ir__Kelvinator_8h.html#afa9e7ea8c9fb86cb02358cc8221733b0',1,'ir_Kelvinator.h']]], - ['kkelvinatorbasicfanmax_5685',['kKelvinatorBasicFanMax',['../ir__Kelvinator_8h.html#a10624389f033451cf9a6f4530c2dfb98',1,'ir_Kelvinator.h']]], - ['kkelvinatorbitmark_5686',['kKelvinatorBitMark',['../ir__Kelvinator_8cpp.html#a2014f9f92f1e24a04341398e7e673807',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorbitmarkticks_5687',['kKelvinatorBitMarkTicks',['../ir__Kelvinator_8cpp.html#a2d6579257ab7f185e4f0fecdbdf03835',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorbits_5688',['kKelvinatorBits',['../IRremoteESP8266_8h.html#acfa71cb3caf4964829bb1f557dee5b86',1,'IRremoteESP8266.h']]], - ['kkelvinatorchecksumstart_5689',['kKelvinatorChecksumStart',['../ir__Kelvinator_8cpp.html#a0afa7cec1db6a5f46c1b30d7ce718ae6',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcmdfooter_5690',['kKelvinatorCmdFooter',['../ir__Kelvinator_8cpp.html#ad2361e09472fa03376b447114a19513f',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcmdfooterbits_5691',['kKelvinatorCmdFooterBits',['../ir__Kelvinator_8cpp.html#af6c85d3b30a5949da53ad9400734f203',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorcool_5692',['kKelvinatorCool',['../ir__Kelvinator_8h.html#ad49a2e457470d6e16d001cdae3215606',1,'ir_Kelvinator.h']]], - ['kkelvinatordefaultrepeat_5693',['kKelvinatorDefaultRepeat',['../IRremoteESP8266_8h.html#a94c968c5cc929f189b8e578d2f55b132',1,'IRremoteESP8266.h']]], - ['kkelvinatordry_5694',['kKelvinatorDry',['../ir__Kelvinator_8h.html#a181b3d10b522f9afb29706da42afea55',1,'ir_Kelvinator.h']]], - ['kkelvinatorfan_5695',['kKelvinatorFan',['../ir__Kelvinator_8h.html#a8d6d97be2fd8a5aefa1319d3f662a50c',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanauto_5696',['kKelvinatorFanAuto',['../ir__Kelvinator_8h.html#ac4994c36634ca0ad8791807c9a992976',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanmax_5697',['kKelvinatorFanMax',['../ir__Kelvinator_8h.html#a889ce17d112d1a61420e1064d72c583a',1,'ir_Kelvinator.h']]], - ['kkelvinatorfanmin_5698',['kKelvinatorFanMin',['../ir__Kelvinator_8h.html#a36a9422e2e6c6b7a87e8b2deffd1b189',1,'ir_Kelvinator.h']]], - ['kkelvinatorgapspace_5699',['kKelvinatorGapSpace',['../ir__Kelvinator_8cpp.html#abf66116a235a9d05089182f2f7fd7640',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorgapspaceticks_5700',['kKelvinatorGapSpaceTicks',['../ir__Kelvinator_8cpp.html#a6a81fb4c1cf1ad34f99f3ca87ab74a5c',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrmark_5701',['kKelvinatorHdrMark',['../ir__Kelvinator_8cpp.html#a413e824c6bdd4778e70f496917b3fe30',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrmarkticks_5702',['kKelvinatorHdrMarkTicks',['../ir__Kelvinator_8cpp.html#a8ad828958071c75a80928abfb916c0df',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrspace_5703',['kKelvinatorHdrSpace',['../ir__Kelvinator_8cpp.html#a9cab23fbd5ba62714fda24765db0e7d1',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorhdrspaceticks_5704',['kKelvinatorHdrSpaceTicks',['../ir__Kelvinator_8cpp.html#ab4fbf899dcb2c2d510055215617d5b44',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorheat_5705',['kKelvinatorHeat',['../ir__Kelvinator_8h.html#a080eade5648791e37c76af7a52e85731',1,'ir_Kelvinator.h']]], - ['kkelvinatormaxtemp_5706',['kKelvinatorMaxTemp',['../ir__Kelvinator_8h.html#a14933442e718db1a87bae5d076ad228d',1,'ir_Kelvinator.h']]], - ['kkelvinatormintemp_5707',['kKelvinatorMinTemp',['../ir__Kelvinator_8h.html#a98871ce825dbbe80d072f25253142879',1,'ir_Kelvinator.h']]], - ['kkelvinatoronespace_5708',['kKelvinatorOneSpace',['../ir__Kelvinator_8cpp.html#aae5a009282517309b8fdbfdaced9d659',1,'ir_Kelvinator.cpp']]], - ['kkelvinatoronespaceticks_5709',['kKelvinatorOneSpaceTicks',['../ir__Kelvinator_8cpp.html#ac907f4495debdcaf680f6e6941b844d5',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorstatelength_5710',['kKelvinatorStateLength',['../IRremoteESP8266_8h.html#af68545e8c2fe9af3719fb74c5d21f0c9',1,'IRremoteESP8266.h']]], - ['kkelvinatortick_5711',['kKelvinatorTick',['../ir__Kelvinator_8cpp.html#a846cbb5609b1dff139a90487000c7393',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorzerospace_5712',['kKelvinatorZeroSpace',['../ir__Kelvinator_8cpp.html#a10469f76f50285a6084bb088fd601dea',1,'ir_Kelvinator.cpp']]], - ['kkelvinatorzerospaceticks_5713',['kKelvinatorZeroSpaceTicks',['../ir__Kelvinator_8cpp.html#a0abc0fdc3d9ac9f12133a46e95d69432',1,'ir_Kelvinator.cpp']]], - ['klasertagbits_5714',['kLasertagBits',['../IRremoteESP8266_8h.html#a3ea0e89a8b6a3ffa4a2d346abeed851e',1,'IRremoteESP8266.h']]], - ['klasertagdelta_5715',['kLasertagDelta',['../ir__Lasertag_8cpp.html#a5c0e8e9c6dec0480c09fcd339ed62257',1,'ir_Lasertag.cpp']]], - ['klasertagexcess_5716',['kLasertagExcess',['../ir__Lasertag_8cpp.html#afa77dc5a431a8d851320e7623378983e',1,'ir_Lasertag.cpp']]], - ['klasertagmingap_5717',['kLasertagMinGap',['../ir__Lasertag_8cpp.html#a33762e2c44dac34e00d255b41d9f2822',1,'ir_Lasertag.cpp']]], - ['klasertagminrepeat_5718',['kLasertagMinRepeat',['../IRremoteESP8266_8h.html#a9b36135c3df24eab232a5edac8c58c5e',1,'IRremoteESP8266.h']]], - ['klasertagminsamples_5719',['kLasertagMinSamples',['../ir__Lasertag_8cpp.html#acbf98970106cadb43e0703ae2caab0c1',1,'ir_Lasertag.cpp']]], - ['klasertagtick_5720',['kLasertagTick',['../ir__Lasertag_8cpp.html#a878b5d53379f8b1b21dfe19f1f83a626',1,'ir_Lasertag.cpp']]], - ['klasertagtolerance_5721',['kLasertagTolerance',['../ir__Lasertag_8cpp.html#a6146bcf378515d31330b3fec5c967346',1,'ir_Lasertag.cpp']]], - ['klaststr_5722',['kLastStr',['../IRtext_8cpp.html#ad7c8430b935afb7aec114788a9c0bf7d',1,'kLastStr(): IRtext.cpp'],['../IRtext_8h.html#aa9ffd7c6e6921607653ed5dc1fea4f32',1,'kLastStr(): IRtext.cpp']]], - ['kleftmaxstr_5723',['kLeftMaxStr',['../IRtext_8cpp.html#a1a82999b6eb3b6637f51bb8ce6a46efd',1,'kLeftMaxStr(): IRtext.cpp'],['../IRtext_8h.html#ab2fd48f052fcfed8ca779ca499edcdbf',1,'kLeftMaxStr(): IRtext.cpp']]], - ['kleftstr_5724',['kLeftStr',['../IRtext_8cpp.html#a0bb005966f2ff2da12a542e713f7f1f2',1,'kLeftStr(): IRtext.cpp'],['../IRtext_8h.html#a001f11495c7c9452ceec68455ae524bf',1,'kLeftStr(): IRtext.cpp']]], - ['klegopfbitmark_5725',['kLegoPfBitMark',['../ir__Lego_8cpp.html#afdf76660f62bfefb4a813d57cd84b590',1,'ir_Lego.cpp']]], - ['klegopfbits_5726',['kLegoPfBits',['../IRremoteESP8266_8h.html#a8a7c7659250a81c7c84fc739eafed13e',1,'IRremoteESP8266.h']]], - ['klegopfhdrspace_5727',['kLegoPfHdrSpace',['../ir__Lego_8cpp.html#a140e8707900bfd4e3a9e2722a6b0bfb3',1,'ir_Lego.cpp']]], - ['klegopfmincommandlength_5728',['kLegoPfMinCommandLength',['../ir__Lego_8cpp.html#ad9a0c5184cc422ec1b32edf58c52d2b1',1,'ir_Lego.cpp']]], - ['klegopfminrepeat_5729',['kLegoPfMinRepeat',['../IRremoteESP8266_8h.html#a2614cf3cb840f028eb1dc684aeb1272c',1,'IRremoteESP8266.h']]], - ['klegopfonespace_5730',['kLegoPfOneSpace',['../ir__Lego_8cpp.html#a59a41085f2e8f81e1019fd40782269e3',1,'ir_Lego.cpp']]], - ['klegopfzerospace_5731',['kLegoPfZeroSpace',['../ir__Lego_8cpp.html#ada07e8aaf79cf58c46b301a410d9fb3e',1,'ir_Lego.cpp']]], - ['klg2bitmark_5732',['kLg2BitMark',['../ir__LG_8cpp.html#abf4db4647161db6fb2548b5200c41843',1,'ir_LG.cpp']]], - ['klg2hdrmark_5733',['kLg2HdrMark',['../ir__LG_8cpp.html#a5ca50077fba2d5130220255e1659e0c3',1,'ir_LG.cpp']]], - ['klg2hdrspace_5734',['kLg2HdrSpace',['../ir__LG_8cpp.html#a6637da052fea9320e97cff261f219cdb',1,'ir_LG.cpp']]], - ['klg32bits_5735',['kLg32Bits',['../IRremoteESP8266_8h.html#ae3c458814d7221b66d2f267cb2663bd2',1,'IRremoteESP8266.h']]], - ['klg32hdrmark_5736',['kLg32HdrMark',['../ir__LG_8cpp.html#a26cb3fb11b1a0bf0815868767e50f31b',1,'ir_LG.cpp']]], - ['klg32hdrspace_5737',['kLg32HdrSpace',['../ir__LG_8cpp.html#a59ddf2070642615e162c85b7575aff76',1,'ir_LG.cpp']]], - ['klg32rpthdrmark_5738',['kLg32RptHdrMark',['../ir__LG_8cpp.html#af19a674228bea82c1c588aa9dd974805',1,'ir_LG.cpp']]], - ['klgacauto_5739',['kLgAcAuto',['../ir__LG_8h.html#ae5e45a0f42ce7544d6fb7981a43fb932',1,'ir_LG.h']]], - ['klgaccool_5740',['kLgAcCool',['../ir__LG_8h.html#a3ba35885488bdda3d87ba344a5c58eb2',1,'ir_LG.h']]], - ['klgacdry_5741',['kLgAcDry',['../ir__LG_8h.html#ab3b9a106551be1217e0c824cffe1ea44',1,'ir_LG.h']]], - ['klgacfan_5742',['kLgAcFan',['../ir__LG_8h.html#afc12144673b8dd0555833427fa757275',1,'ir_LG.h']]], - ['klgacfanauto_5743',['kLgAcFanAuto',['../ir__LG_8h.html#a3dee1dc33f768d36a2216213c90a0a5c',1,'ir_LG.h']]], - ['klgacfanhigh_5744',['kLgAcFanHigh',['../ir__LG_8h.html#a89888f8d36899b5526e4c2ebb1097357',1,'ir_LG.h']]], - ['klgacfanlow_5745',['kLgAcFanLow',['../ir__LG_8h.html#afa3633c1b26d837f85b10a8a8d677efc',1,'ir_LG.h']]], - ['klgacfanlowest_5746',['kLgAcFanLowest',['../ir__LG_8h.html#a6b89a2e6a5bee761e1754fe520459d49',1,'ir_LG.h']]], - ['klgacfanmedium_5747',['kLgAcFanMedium',['../ir__LG_8h.html#abe0fb8a8f9d6ab9ebda36d0343841619',1,'ir_LG.h']]], - ['klgacheat_5748',['kLgAcHeat',['../ir__LG_8h.html#a6c17d61082cc24f9d714c5d4ac151933',1,'ir_LG.h']]], - ['klgacmaxtemp_5749',['kLgAcMaxTemp',['../ir__LG_8h.html#a0fab7b6e6d1138638bdeadeab85f5090',1,'ir_LG.h']]], - ['klgacmintemp_5750',['kLgAcMinTemp',['../ir__LG_8h.html#ae3bef99e329f057358001cacf67f6d70',1,'ir_LG.h']]], - ['klgacoffcommand_5751',['kLgAcOffCommand',['../ir__LG_8h.html#aecf8158eec1d9ec0d54056392b512296',1,'ir_LG.h']]], - ['klgacpoweroff_5752',['kLgAcPowerOff',['../ir__LG_8h.html#a3b2681e41071298197d849fbd7649318',1,'ir_LG.h']]], - ['klgacpoweron_5753',['kLgAcPowerOn',['../ir__LG_8h.html#a87d2f6e4e2755aaab4762952b1bf6108',1,'ir_LG.h']]], - ['klgacsignature_5754',['kLgAcSignature',['../ir__LG_8h.html#ab7c3589deb28829ad0313b1505ec196e',1,'ir_LG.h']]], - ['klgactempadjust_5755',['kLgAcTempAdjust',['../ir__LG_8h.html#a16210dc395a86dc4562436047c22600f',1,'ir_LG.h']]], - ['klgbitmark_5756',['kLgBitMark',['../ir__LG_8cpp.html#a9311195710d4c3a2ac48456390a03138',1,'ir_LG.cpp']]], - ['klgbits_5757',['kLgBits',['../IRremoteESP8266_8h.html#a256bd6093034b3e4c33324680f3a7102',1,'IRremoteESP8266.h']]], - ['klgdefaultrepeat_5758',['kLgDefaultRepeat',['../IRremoteESP8266_8h.html#a2d6832b3d214e0adad781c205993e461',1,'IRremoteESP8266.h']]], - ['klghdrmark_5759',['kLgHdrMark',['../ir__LG_8cpp.html#a74f253d9e4cc72148233021c47d59f35',1,'ir_LG.cpp']]], - ['klghdrspace_5760',['kLgHdrSpace',['../ir__LG_8cpp.html#a6eaf100cde647fc119d3e993680afd47',1,'ir_LG.cpp']]], - ['klgmingap_5761',['kLgMinGap',['../ir__LG_8cpp.html#a784323468e6b5ebc65bd2870a94fb553',1,'ir_LG.cpp']]], - ['klgminmessagelength_5762',['kLgMinMessageLength',['../ir__LG_8cpp.html#a4eb3f82ae2ca6c34b58e512848a6dc41',1,'ir_LG.cpp']]], - ['klgonespace_5763',['kLgOneSpace',['../ir__LG_8cpp.html#a05fe6a47f437efc686cb46ec805da4d4',1,'ir_LG.cpp']]], - ['klgrptspace_5764',['kLgRptSpace',['../ir__LG_8cpp.html#a834b8f08ee32030c51ea5e2c5bd5a73c',1,'ir_LG.cpp']]], - ['klgzerospace_5765',['kLgZeroSpace',['../ir__LG_8cpp.html#a981fe3cfc4adf0b3016a008ca1bbf734',1,'ir_LG.cpp']]], - ['klightstr_5766',['kLightStr',['../IRtext_8cpp.html#a2912b7dc11fd571706eaaf90e0095a4f',1,'kLightStr(): IRtext.cpp'],['../IRtext_8h.html#a926ebb4be14179afdc55d5524c8eb5da',1,'kLightStr(): IRtext.cpp']]], - ['klighttogglestr_5767',['kLightToggleStr',['../IRtext_8cpp.html#a74a3ef3c72995e19582be04a2716b285',1,'kLightToggleStr(): IRtext.cpp'],['../IRtext_8h.html#af9ac8ce54e78f0d8f7e0043d08e6256c',1,'kLightToggleStr(): IRtext.cpp']]], - ['klostr_5768',['kLoStr',['../IRtext_8cpp.html#a72fc3855eec7026260de3a6b3a25c377',1,'kLoStr(): IRtext.cpp'],['../IRtext_8h.html#abf3295aeb3dfb7048e677d8d6e65e47c',1,'kLoStr(): IRtext.cpp']]], - ['kloudstr_5769',['kLoudStr',['../IRtext_8cpp.html#a3b6d3eed96c5623cc95ebcfb93cb6f96',1,'kLoudStr(): IRtext.cpp'],['../IRtext_8h.html#a7d265b75ed59c0be3c6b72ec0eaf8aa2',1,'kLoudStr(): IRtext.cpp']]], - ['klowerstr_5770',['kLowerStr',['../IRtext_8cpp.html#a518681524ec3c8f8bc993823003fe58a',1,'kLowerStr(): IRtext.cpp'],['../IRtext_8h.html#ae389ed4ed6982d4617ee3f3e82ce388c',1,'kLowerStr(): IRtext.cpp']]], - ['kloweststr_5771',['kLowestStr',['../IRtext_8cpp.html#ae0c595955599a398669a372edd339f67',1,'kLowestStr(): IRtext.cpp'],['../IRtext_8h.html#a31a34e51d7f1f9360cc3a7ea3f2bf7a3',1,'kLowestStr(): IRtext.cpp']]], - ['klownibble_5772',['kLowNibble',['../IRutils_8h.html#ad0288cc71e1814a27c27393f06676eec',1,'IRutils.h']]], - ['klowstr_5773',['kLowStr',['../IRtext_8cpp.html#a18f69bf40b866ee1d30d1586757d5f41',1,'kLowStr(): IRtext.cpp'],['../IRtext_8h.html#a09c0f7f1b07f7591bdbe56fd8a18f7ea',1,'kLowStr(): IRtext.cpp']]], - ['klutronbits_5774',['kLutronBits',['../IRremoteESP8266_8h.html#a814dfab515b91887c494237b1f6ebd99',1,'IRremoteESP8266.h']]], - ['klutrondelta_5775',['kLutronDelta',['../ir__Lutron_8cpp.html#a4220004fac195ef46388199ad9624860',1,'ir_Lutron.cpp']]], - ['klutrongap_5776',['kLutronGap',['../ir__Lutron_8cpp.html#a18ffb51db0ae33904a64012cb72d6165',1,'ir_Lutron.cpp']]], - ['klutrontick_5777',['kLutronTick',['../ir__Lutron_8cpp.html#a04a84309978b79c0983c398a497a087a',1,'ir_Lutron.cpp']]], - ['kmagiquestbits_5778',['kMagiquestBits',['../IRremoteESP8266_8h.html#ad756bfec6eabbe2ac10b7847f87fb751',1,'IRremoteESP8266.h']]], - ['kmagiquestgap_5779',['kMagiQuestGap',['../ir__Magiquest_8h.html#aebdea5a1a55547d812f1f7bb2d3ddf1f',1,'ir_Magiquest.h']]], - ['kmagiquestmarkone_5780',['kMagiQuestMarkOne',['../ir__Magiquest_8h.html#a0d5d090015ecf49995514054c29cb4e2',1,'ir_Magiquest.h']]], - ['kmagiquestmarkzero_5781',['kMagiQuestMarkZero',['../ir__Magiquest_8h.html#a7240a15dbb9bc6a1e31575be7837c390',1,'ir_Magiquest.h']]], - ['kmagiquestoneratio_5782',['kMagiQuestOneRatio',['../ir__Magiquest_8h.html#a073cdb7ca4dd35b8fa05d99eb7da5b65',1,'ir_Magiquest.h']]], - ['kmagiquestspaceone_5783',['kMagiQuestSpaceOne',['../ir__Magiquest_8h.html#a92bad440c0291cbb903f08de08d96fb2',1,'ir_Magiquest.h']]], - ['kmagiquestspacezero_5784',['kMagiQuestSpaceZero',['../ir__Magiquest_8h.html#abe557052c5c3bef87e62daf71b4c8654',1,'ir_Magiquest.h']]], - ['kmagiquesttotalusec_5785',['kMagiQuestTotalUsec',['../ir__Magiquest_8h.html#a819dcf22b127f4f7b282d784490a83c3',1,'ir_Magiquest.h']]], - ['kmagiquestzeroratio_5786',['kMagiQuestZeroRatio',['../ir__Magiquest_8h.html#a41e5594b8e1510267e563ed78fbe98b0',1,'ir_Magiquest.h']]], - ['kmanualstr_5787',['kManualStr',['../IRtext_8cpp.html#a619896ae89717b2b0e1d3492bb528cbc',1,'kManualStr(): IRtext.cpp'],['../IRtext_8h.html#aa8d9143da032cdc1accf7f4441b05bc8',1,'kManualStr(): IRtext.cpp']]], - ['kmark_5788',['kMark',['../ir__Lasertag_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_Lasertag.cpp'],['../ir__MWM_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_MWM.cpp'],['../ir__RC5__RC6_8cpp.html#a7af2e83face1b9378d216f15a4d379cf',1,'kMark(): ir_RC5_RC6.cpp']]], - ['kmarkexcess_5789',['kMarkExcess',['../IRrecv_8h.html#a99bbffe986ad7ba86d2b11e75f4aa50e',1,'IRrecv.h']]], - ['kmarkstate_5790',['kMarkState',['../IRrecv_8h.html#acc85ad22929660bdc17fe185d87edfb2',1,'IRrecv.h']]], - ['kmaxaccurateusecdelay_5791',['kMaxAccurateUsecDelay',['../IRsend_8h.html#a527e66125f3ae6ce87adbc72eab7d0b9',1,'IRsend.h']]], - ['kmaximumstr_5792',['kMaximumStr',['../IRtext_8cpp.html#af346693e98c91c7ce79bb22c7460dcee',1,'kMaximumStr(): IRtext.cpp'],['../IRtext_8h.html#a487173616cc3fced0489c01c11333912',1,'kMaximumStr(): IRtext.cpp']]], - ['kmaxleftstr_5793',['kMaxLeftStr',['../IRtext_8cpp.html#ae8ad7e46c3a33b4b9c5fa6545c9e3822',1,'kMaxLeftStr(): IRtext.cpp'],['../IRtext_8h.html#aac197960695463757652bc643efdcd59',1,'kMaxLeftStr(): IRtext.cpp']]], - ['kmaxrightstr_5794',['kMaxRightStr',['../IRtext_8cpp.html#a1ae3f331adb8ac6d1a27aa3d688fb65f',1,'kMaxRightStr(): IRtext.cpp'],['../IRtext_8h.html#a0f888d5c39cf82b2c02a7caad10c716e',1,'kMaxRightStr(): IRtext.cpp']]], - ['kmaxstr_5795',['kMaxStr',['../IRtext_8cpp.html#ad30e01090f06db0a3cb0c00bb6d2f0ca',1,'kMaxStr(): IRtext.cpp'],['../IRtext_8h.html#a7f4b2ff4134386a09e2bcb5f71f591cb',1,'kMaxStr(): IRtext.cpp']]], - ['kmaxtimeoutms_5796',['kMaxTimeoutMs',['../IRrecv_8h.html#a73391726d7caccb9b498bba73a969784',1,'IRrecv.h']]], - ['kmediumstr_5797',['kMediumStr',['../IRtext_8cpp.html#ac59539e93fdc7d8f15f1f55bcbf933c5',1,'kMediumStr(): IRtext.cpp'],['../IRtext_8h.html#a122ee1c6b866267f771888a7d7b2969b',1,'kMediumStr(): IRtext.cpp']]], - ['kmedstr_5798',['kMedStr',['../IRtext_8cpp.html#a4832f8f5118018fa3c6eae1cd652eabf',1,'kMedStr(): IRtext.cpp'],['../IRtext_8h.html#a18f613c7f11f6f746227cfa8cc1e00e0',1,'kMedStr(): IRtext.cpp']]], - ['kmetzaddressbits_5799',['kMetzAddressBits',['../ir__Metz_8cpp.html#accbe5b6fed5bd637faff4b6e04bd1ced',1,'ir_Metz.cpp']]], - ['kmetzbitmark_5800',['kMetzBitMark',['../ir__Metz_8cpp.html#a6aa8842178b5c67d709bca787a285301',1,'ir_Metz.cpp']]], - ['kmetzbits_5801',['kMetzBits',['../IRremoteESP8266_8h.html#ad07971b39dd912f9e01ab5912c0667e6',1,'IRremoteESP8266.h']]], - ['kmetzcommandbits_5802',['kMetzCommandBits',['../ir__Metz_8cpp.html#a71d1a54f579541d040640f468dbbd47f',1,'ir_Metz.cpp']]], - ['kmetzfreq_5803',['kMetzFreq',['../ir__Metz_8cpp.html#a4970bcdab10f7ccfc6d619f417c312ab',1,'ir_Metz.cpp']]], - ['kmetzhdrmark_5804',['kMetzHdrMark',['../ir__Metz_8cpp.html#a37d8db3081bb8155738a8e0ca3fb0f69',1,'ir_Metz.cpp']]], - ['kmetzhdrspace_5805',['kMetzHdrSpace',['../ir__Metz_8cpp.html#a0692936979b5453e9a3baf867ec8ed0e',1,'ir_Metz.cpp']]], - ['kmetzminrepeat_5806',['kMetzMinRepeat',['../IRremoteESP8266_8h.html#a06aa5d85cd9b325024d79ec9af9e30e4',1,'IRremoteESP8266.h']]], - ['kmetzonespace_5807',['kMetzOneSpace',['../ir__Metz_8cpp.html#a397415b944f0be2a3b87c6c8eaeddda0',1,'ir_Metz.cpp']]], - ['kmetzzerospace_5808',['kMetzZeroSpace',['../ir__Metz_8cpp.html#ac5eb86e56a2df05a02e1581d0f8595c5',1,'ir_Metz.cpp']]], - ['kmiddlestr_5809',['kMiddleStr',['../IRtext_8cpp.html#a536f05d84867cfae601d4c1a2312d755',1,'kMiddleStr(): IRtext.cpp'],['../IRtext_8h.html#abbd5b682b584b737c76bded900a6ffad',1,'kMiddleStr(): IRtext.cpp']]], - ['kmidea24bits_5810',['kMidea24Bits',['../IRremoteESP8266_8h.html#aff132faa67b1d07890378df5c9b52a14',1,'IRremoteESP8266.h']]], - ['kmidea24mingap_5811',['kMidea24MinGap',['../ir__Midea_8cpp.html#abfee73cafcc017c4742893908200dffc',1,'ir_Midea.cpp']]], - ['kmidea24minrepeat_5812',['kMidea24MinRepeat',['../IRremoteESP8266_8h.html#a8ed4bb62818fc64e4c4b60ef1094059e',1,'IRremoteESP8266.h']]], - ['kmideaacauto_5813',['kMideaACAuto',['../ir__Midea_8h.html#a379f580c4d1832a62fe49d66f7c13af6',1,'ir_Midea.h']]], - ['kmideaaccool_5814',['kMideaACCool',['../ir__Midea_8h.html#a94b1b18f6aa9c5010699ea9bfcc89b21',1,'ir_Midea.h']]], - ['kmideaacdry_5815',['kMideaACDry',['../ir__Midea_8h.html#a88c2d215406e337b437b99a04c4ca6c4',1,'ir_Midea.h']]], - ['kmideaacfan_5816',['kMideaACFan',['../ir__Midea_8h.html#ac92dd372bb18d43aea73d5ec511e1290',1,'ir_Midea.h']]], - ['kmideaacfanauto_5817',['kMideaACFanAuto',['../ir__Midea_8h.html#a334a64f653b141d67ffda2eca2a9851f',1,'ir_Midea.h']]], - ['kmideaacfanhigh_5818',['kMideaACFanHigh',['../ir__Midea_8h.html#a9c177aff562a19f32d6cf010704ac681',1,'ir_Midea.h']]], - ['kmideaacfanlow_5819',['kMideaACFanLow',['../ir__Midea_8h.html#a90ebe3812e8b554798a2083ddfe9fdff',1,'ir_Midea.h']]], - ['kmideaacfanmed_5820',['kMideaACFanMed',['../ir__Midea_8h.html#a9406c8d9ad79e6a121a29cd5455e8e7d',1,'ir_Midea.h']]], - ['kmideaacheat_5821',['kMideaACHeat',['../ir__Midea_8h.html#aa0fb74d8406327a9510f0efa8a16a488',1,'ir_Midea.h']]], - ['kmideaacmaxsensortempc_5822',['kMideaACMaxSensorTempC',['../ir__Midea_8h.html#a784d183233c97b36f18564c3079fa7df',1,'ir_Midea.h']]], - ['kmideaacmaxsensortempf_5823',['kMideaACMaxSensorTempF',['../ir__Midea_8h.html#a7255c3b9cc882762e015e23512cabc2b',1,'ir_Midea.h']]], - ['kmideaacmaxtempc_5824',['kMideaACMaxTempC',['../ir__Midea_8h.html#a0cccc3093cffabe1e512f298c04b3ba1',1,'ir_Midea.h']]], - ['kmideaacmaxtempf_5825',['kMideaACMaxTempF',['../ir__Midea_8h.html#ac7306c86080e934055d5be9728c91629',1,'ir_Midea.h']]], - ['kmideaacminsensortempc_5826',['kMideaACMinSensorTempC',['../ir__Midea_8h.html#afac831019875d12925c451bf77222a9e',1,'ir_Midea.h']]], - ['kmideaacminsensortempf_5827',['kMideaACMinSensorTempF',['../ir__Midea_8h.html#aae0e3970c0c9e9798797bb8a6b5cc2cc',1,'ir_Midea.h']]], - ['kmideaacmintempc_5828',['kMideaACMinTempC',['../ir__Midea_8h.html#ae849eb79db6c077d617283154edade84',1,'ir_Midea.h']]], - ['kmideaacmintempf_5829',['kMideaACMinTempF',['../ir__Midea_8h.html#a0b0bdf519164f793a129d0e32152069a',1,'ir_Midea.h']]], - ['kmideaacsensortempontimeroff_5830',['kMideaACSensorTempOnTimerOff',['../ir__Midea_8h.html#a009632051bf4eb07bf538df4dd88e395',1,'ir_Midea.h']]], - ['kmideaacswingvstep_5831',['kMideaACSwingVStep',['../ir__Midea_8h.html#a040f6f438909ede82e7c1cf6963a302e',1,'ir_Midea.h']]], - ['kmideaactimeroff_5832',['kMideaACTimerOff',['../ir__Midea_8h.html#aeca8c17c8b25199756e3decc283c1525',1,'ir_Midea.h']]], - ['kmideaactoggleecono_5833',['kMideaACToggleEcono',['../ir__Midea_8h.html#afae5d72469e092300eb740d696b27c2b',1,'ir_Midea.h']]], - ['kmideaactogglelight_5834',['kMideaACToggleLight',['../ir__Midea_8h.html#a76d6884a5bd3b8bfc72025f424820ce3',1,'ir_Midea.h']]], - ['kmideaactoggleswingv_5835',['kMideaACToggleSwingV',['../ir__Midea_8h.html#a5420b72289d3ae99a6dbc5c94914c473',1,'ir_Midea.h']]], - ['kmideaactoggleturbo_5836',['kMideaACToggleTurbo',['../ir__Midea_8h.html#a50f88772bb6bf8a4fd239cd6ca1f7e24',1,'ir_Midea.h']]], - ['kmideaactypecommand_5837',['kMideaACTypeCommand',['../ir__Midea_8h.html#a6df81f61bed8016ef5cad9d7a3bc89ba',1,'ir_Midea.h']]], - ['kmideaactypefollow_5838',['kMideaACTypeFollow',['../ir__Midea_8h.html#a0837f838d5b48d577a0941a1eab51bb2',1,'ir_Midea.h']]], - ['kmideaactypespecial_5839',['kMideaACTypeSpecial',['../ir__Midea_8h.html#af6ee12e87e831016f159aa2a480af8aa',1,'ir_Midea.h']]], - ['kmideabitmark_5840',['kMideaBitMark',['../ir__Midea_8cpp.html#a39dc2d03456f67418519dc0f5efde7e0',1,'ir_Midea.cpp']]], - ['kmideabitmarkticks_5841',['kMideaBitMarkTicks',['../ir__Midea_8cpp.html#ac4d9b1460516aa19913b5bd328c1e176',1,'ir_Midea.cpp']]], - ['kmideabits_5842',['kMideaBits',['../IRremoteESP8266_8h.html#afc98096b1e2945e2eaeb07d70d511239',1,'IRremoteESP8266.h']]], - ['kmideahdrmark_5843',['kMideaHdrMark',['../ir__Midea_8cpp.html#adcaa1ad6e2ba1022f3c90266f4fd0378',1,'ir_Midea.cpp']]], - ['kmideahdrmarkticks_5844',['kMideaHdrMarkTicks',['../ir__Midea_8cpp.html#af63b6cfcc5dc3e501b61c0d55d678f9e',1,'ir_Midea.cpp']]], - ['kmideahdrspace_5845',['kMideaHdrSpace',['../ir__Midea_8cpp.html#a8676eda087a85f6639b547140496c12f',1,'ir_Midea.cpp']]], - ['kmideahdrspaceticks_5846',['kMideaHdrSpaceTicks',['../ir__Midea_8cpp.html#aad99b5d8361733a9ca662735783e061c',1,'ir_Midea.cpp']]], - ['kmideamingap_5847',['kMideaMinGap',['../ir__Midea_8cpp.html#ad9ed8fb4841654fa756614862ac63be7',1,'ir_Midea.cpp']]], - ['kmideamingapticks_5848',['kMideaMinGapTicks',['../ir__Midea_8cpp.html#accd4e69e8fe0957ba013b97879fb1120',1,'ir_Midea.cpp']]], - ['kmideaminrepeat_5849',['kMideaMinRepeat',['../IRremoteESP8266_8h.html#aa8876e8e177b8e71154f8cfb42b19160',1,'IRremoteESP8266.h']]], - ['kmideaonespace_5850',['kMideaOneSpace',['../ir__Midea_8cpp.html#aabe187743f36e664c6069b004e9a82f7',1,'ir_Midea.cpp']]], - ['kmideaonespaceticks_5851',['kMideaOneSpaceTicks',['../ir__Midea_8cpp.html#a2cf0d5df2e5a3d7b1d24fd25ae3d7453',1,'ir_Midea.cpp']]], - ['kmideatick_5852',['kMideaTick',['../ir__Midea_8cpp.html#a878185258a4174978b072ac36aa377e2',1,'ir_Midea.cpp']]], - ['kmideatolerance_5853',['kMideaTolerance',['../ir__Midea_8cpp.html#a55553c3b8e7997fb1257ac2a37a929b6',1,'ir_Midea.cpp']]], - ['kmideazerospace_5854',['kMideaZeroSpace',['../ir__Midea_8cpp.html#a107d1d062e8475b84ec4ab548c3f01ef',1,'ir_Midea.cpp']]], - ['kmideazerospaceticks_5855',['kMideaZeroSpaceTicks',['../ir__Midea_8cpp.html#acd6580988c12ef5614727dd4d1b4c92d',1,'ir_Midea.cpp']]], - ['kmidstr_5856',['kMidStr',['../IRtext_8cpp.html#afd827d424c0bfdcc34b3607440fd2652',1,'kMidStr(): IRtext.cpp'],['../IRtext_8h.html#a571a28fe4174574caac4d93fb09ae196',1,'kMidStr(): IRtext.cpp']]], - ['kmilesminrepeat_5857',['kMilesMinRepeat',['../IRremoteESP8266_8h.html#aa92b00aa3423473fc42766d369ff99ad',1,'IRremoteESP8266.h']]], - ['kmilestag2hdrmark_5858',['kMilesTag2HdrMark',['../ir__MilesTag2_8cpp.html#af5598d2d156a1db3125f0e8a397cd137',1,'ir_MilesTag2.cpp']]], - ['kmilestag2msgbits_5859',['kMilesTag2MsgBits',['../IRremoteESP8266_8h.html#a09f5246478103197630f269ccb3b8c40',1,'IRremoteESP8266.h']]], - ['kmilestag2msgmask_5860',['kMilesTag2MsgMask',['../ir__MilesTag2_8cpp.html#ae92d8fa6c1c2e2320feb545a47aa3107',1,'ir_MilesTag2.cpp']]], - ['kmilestag2msgterminator_5861',['kMilesTag2MsgTerminator',['../ir__MilesTag2_8cpp.html#ab61102a594ad830baea09c17bb585f6d',1,'ir_MilesTag2.cpp']]], - ['kmilestag2onemark_5862',['kMilesTag2OneMark',['../ir__MilesTag2_8cpp.html#add084d40b9b206e86497b565f558c968',1,'ir_MilesTag2.cpp']]], - ['kmilestag2rptlength_5863',['kMilesTag2RptLength',['../ir__MilesTag2_8cpp.html#aa87dd4bd7d51c91df882f161a548de0b',1,'ir_MilesTag2.cpp']]], - ['kmilestag2shotbits_5864',['kMilesTag2ShotBits',['../IRremoteESP8266_8h.html#ae29b9f5dd6db067c17917417a3524905',1,'IRremoteESP8266.h']]], - ['kmilestag2shotmask_5865',['kMilesTag2ShotMask',['../ir__MilesTag2_8cpp.html#a4f436018ecf899050cc2da2d5a04f7c0',1,'ir_MilesTag2.cpp']]], - ['kmilestag2space_5866',['kMilesTag2Space',['../ir__MilesTag2_8cpp.html#aebc0f5dd66afa1556b25d9874a138b9d',1,'ir_MilesTag2.cpp']]], - ['kmilestag2stdduty_5867',['kMilesTag2StdDuty',['../ir__MilesTag2_8cpp.html#ada2b524ac46dda1c888fcd44a2929ce9',1,'ir_MilesTag2.cpp']]], - ['kmilestag2stdfreq_5868',['kMilesTag2StdFreq',['../ir__MilesTag2_8cpp.html#a3d6e6059094b8579e2344488f8b962fe',1,'ir_MilesTag2.cpp']]], - ['kmilestag2zeromark_5869',['kMilesTag2ZeroMark',['../ir__MilesTag2_8cpp.html#acceb49cb744e69d73c13ca234b300392',1,'ir_MilesTag2.cpp']]], - ['kminimumstr_5870',['kMinimumStr',['../IRtext_8cpp.html#acbd869e5978b6fee053d33d8cf21e11a',1,'kMinimumStr(): IRtext.cpp'],['../IRtext_8h.html#a4f6fee52ae5f7f9c8fe791dbae762607',1,'kMinimumStr(): IRtext.cpp']]], - ['kminstr_5871',['kMinStr',['../IRtext_8cpp.html#a2b0c7369c1a93b8a7d5a87bf37fcee34',1,'kMinStr(): IRtext.cpp'],['../IRtext_8h.html#a4940a3f71a484f936d3e58b9573931a8',1,'kMinStr(): IRtext.cpp']]], - ['kminutesstr_5872',['kMinutesStr',['../IRtext_8cpp.html#a1c05b3e6af04586a0060c58979df002f',1,'kMinutesStr(): IRtext.cpp'],['../IRtext_8h.html#a3358666a695e8d54c23b20dc6a371a38',1,'kMinutesStr(): IRtext.cpp']]], - ['kminutestr_5873',['kMinuteStr',['../IRtext_8cpp.html#acab620931ba510a7bc395bad59169099',1,'kMinuteStr(): IRtext.cpp'],['../IRtext_8h.html#a54df015b1adadb211a30f826999c78f6',1,'kMinuteStr(): IRtext.cpp']]], - ['kmiragebitmark_5874',['kMirageBitMark',['../ir__Mirage_8cpp.html#a9ef6b7fd36c8457163384f5a5adec60a',1,'ir_Mirage.cpp']]], - ['kmiragebits_5875',['kMirageBits',['../IRremoteESP8266_8h.html#a700032ac17f14dc6d2782e141ce058f0',1,'IRremoteESP8266.h']]], - ['kmiragefreq_5876',['kMirageFreq',['../ir__Mirage_8cpp.html#aa2af21dba41dc6952e7bb98ba21a9cf0',1,'ir_Mirage.cpp']]], - ['kmiragegap_5877',['kMirageGap',['../ir__Mirage_8cpp.html#a06d54b8d7c95a5a913c87289b6ed5b43',1,'ir_Mirage.cpp']]], - ['kmiragehdrmark_5878',['kMirageHdrMark',['../ir__Mirage_8cpp.html#ad03f01d5212781babcc1f6664866e4df',1,'ir_Mirage.cpp']]], - ['kmiragehdrspace_5879',['kMirageHdrSpace',['../ir__Mirage_8cpp.html#a20c2e5c158c5f38403b0cf80fa25fd99',1,'ir_Mirage.cpp']]], - ['kmirageminrepeat_5880',['kMirageMinRepeat',['../IRremoteESP8266_8h.html#a86283c34cf9991bf8bfc29ee089a6a21',1,'IRremoteESP8266.h']]], - ['kmirageonespace_5881',['kMirageOneSpace',['../ir__Mirage_8cpp.html#af90d7f7221eedb4369fcd77142f65b51',1,'ir_Mirage.cpp']]], - ['kmiragestatelength_5882',['kMirageStateLength',['../IRremoteESP8266_8h.html#ab3b6bee4c5f483b4312a4b6eb5fcb146',1,'IRremoteESP8266.h']]], - ['kmiragezerospace_5883',['kMirageZeroSpace',['../ir__Mirage_8cpp.html#aeb32da61046362b4a2cbf366264dbd8d',1,'ir_Mirage.cpp']]], - ['kmitsubishi112auto_5884',['kMitsubishi112Auto',['../ir__Mitsubishi_8h.html#a6e38f06ff78e3406a4f2cf1e1b453402',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112bitmark_5885',['kMitsubishi112BitMark',['../ir__Mitsubishi_8cpp.html#aef96bbd77d5bd66ed220840c09f54c37',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112bits_5886',['kMitsubishi112Bits',['../IRremoteESP8266_8h.html#ae8349abe183be965e3d051cb736773a8',1,'IRremoteESP8266.h']]], - ['kmitsubishi112cool_5887',['kMitsubishi112Cool',['../ir__Mitsubishi_8h.html#aa9d1a63a8a275cda1794628f8d516963',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112dry_5888',['kMitsubishi112Dry',['../ir__Mitsubishi_8h.html#a4a3023d0342003b7947b19c9c5c25fb3',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanlow_5889',['kMitsubishi112FanLow',['../ir__Mitsubishi_8h.html#a4b8d6d04bb75ed98f6ed5bdff7472f50',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmax_5890',['kMitsubishi112FanMax',['../ir__Mitsubishi_8h.html#a5a3e7c72ed85864b34f8ee298b3adc49',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmed_5891',['kMitsubishi112FanMed',['../ir__Mitsubishi_8h.html#aa8a81057eeccbf528962b31a197b0319',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanmin_5892',['kMitsubishi112FanMin',['../ir__Mitsubishi_8h.html#ad8b101130e781d30b5d4072b3c514c78',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112fanquiet_5893',['kMitsubishi112FanQuiet',['../ir__Mitsubishi_8h.html#addcf7a99c5ba2f4510754d22a4c0760f',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112gap_5894',['kMitsubishi112Gap',['../ir__Mitsubishi_8cpp.html#ab24cc7d395c1620b9519b5d0ce2a2023',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrmark_5895',['kMitsubishi112HdrMark',['../ir__Mitsubishi_8cpp.html#a3082567d58d6f8e6ef26714ff23f3728',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrmarktolerance_5896',['kMitsubishi112HdrMarkTolerance',['../ir__Mitsubishi_8cpp.html#a288931e01f8cffa1917fb7bc59710e20',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112hdrspace_5897',['kMitsubishi112HdrSpace',['../ir__Mitsubishi_8cpp.html#a7b35ecbbc94f7ef622b20f21f83c0fba',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112heat_5898',['kMitsubishi112Heat',['../ir__Mitsubishi_8h.html#a260b6883e9433b466abf31618b1c4015',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112maxtemp_5899',['kMitsubishi112MaxTemp',['../ir__Mitsubishi_8h.html#afd968ea297ef8856b7266a8cc6e1bba0',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112minrepeat_5900',['kMitsubishi112MinRepeat',['../IRremoteESP8266_8h.html#a6bba58bb0f33feb9a6dfd20637d01d13',1,'IRremoteESP8266.h']]], - ['kmitsubishi112mintemp_5901',['kMitsubishi112MinTemp',['../ir__Mitsubishi_8h.html#acea288a8911a540cb9602d057eccb2a6',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112onespace_5902',['kMitsubishi112OneSpace',['../ir__Mitsubishi_8cpp.html#a8dd0d824826a7da007e78741015d418a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi112statelength_5903',['kMitsubishi112StateLength',['../IRremoteESP8266_8h.html#a5ff0437b26e325bc2516a3e63c7ffe76',1,'IRremoteESP8266.h']]], - ['kmitsubishi112swinghauto_5904',['kMitsubishi112SwingHAuto',['../ir__Mitsubishi_8h.html#ab55e72c6d2b407868cda075efb24ac92',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghleft_5905',['kMitsubishi112SwingHLeft',['../ir__Mitsubishi_8h.html#a8299b42b0972bda8a4bc4f32527c33e9',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghleftmax_5906',['kMitsubishi112SwingHLeftMax',['../ir__Mitsubishi_8h.html#a48346e97056af670454bc77a64b904bc',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghmiddle_5907',['kMitsubishi112SwingHMiddle',['../ir__Mitsubishi_8h.html#a7adcab7d152d84adef2059339de4bb40',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghright_5908',['kMitsubishi112SwingHRight',['../ir__Mitsubishi_8h.html#a76cf277572a2b628d4a5353186ca2522',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghrightmax_5909',['kMitsubishi112SwingHRightMax',['../ir__Mitsubishi_8h.html#a1ff73f603b6e32075cbc9253d3090b49',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swinghwide_5910',['kMitsubishi112SwingHWide',['../ir__Mitsubishi_8h.html#afab80db45769ab2957afc0e4799b46e5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvauto_5911',['kMitsubishi112SwingVAuto',['../ir__Mitsubishi_8h.html#a1e16b172e864a74b426b1f823770cdaa',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvhigh_5912',['kMitsubishi112SwingVHigh',['../ir__Mitsubishi_8h.html#ab6e345e609d72f9ed903e30f3aa9a26f',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvhighest_5913',['kMitsubishi112SwingVHighest',['../ir__Mitsubishi_8h.html#a1cb8c62990dfb98a8ea228ad59cd88e5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvlow_5914',['kMitsubishi112SwingVLow',['../ir__Mitsubishi_8h.html#a515bea322889f619d64ae96c37eaba72',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvlowest_5915',['kMitsubishi112SwingVLowest',['../ir__Mitsubishi_8h.html#ac4dd729a11e3ece244df6b1ddc9250f8',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112swingvmiddle_5916',['kMitsubishi112SwingVMiddle',['../ir__Mitsubishi_8h.html#a0ae62480999dc4cf8a223b59938a0d68',1,'ir_Mitsubishi.h']]], - ['kmitsubishi112zerospace_5917',['kMitsubishi112ZeroSpace',['../ir__Mitsubishi_8cpp.html#ad70d1567dc2e4ea07a247f2555fc23b4',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136auto_5918',['kMitsubishi136Auto',['../ir__Mitsubishi_8h.html#ae10977a0d09f4c583b03fa05720c3aed',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136bitmark_5919',['kMitsubishi136BitMark',['../ir__Mitsubishi_8cpp.html#a3aa9c715088a58a8b4a97d5038dbf6d4',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136bits_5920',['kMitsubishi136Bits',['../IRremoteESP8266_8h.html#aa19f0122b2f906e5473a6ea232c38974',1,'IRremoteESP8266.h']]], - ['kmitsubishi136cool_5921',['kMitsubishi136Cool',['../ir__Mitsubishi_8h.html#a93332579055a07ea291b3caf9ad11944',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136dry_5922',['kMitsubishi136Dry',['../ir__Mitsubishi_8h.html#ad612c480e8664169e2b8e062d47bd8b9',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fan_5923',['kMitsubishi136Fan',['../ir__Mitsubishi_8h.html#a4445944955b9017fcd6d1ae447f1b0d7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanlow_5924',['kMitsubishi136FanLow',['../ir__Mitsubishi_8h.html#af0f7177491c4cb053e6811376be956ec',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmax_5925',['kMitsubishi136FanMax',['../ir__Mitsubishi_8h.html#a43a4337e20fbf4f6747a58c15213bd16',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmed_5926',['kMitsubishi136FanMed',['../ir__Mitsubishi_8h.html#a73ff7df8fe65829cfd5875dc5040dec7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanmin_5927',['kMitsubishi136FanMin',['../ir__Mitsubishi_8h.html#a2623eaf6e7d2ceb20ee72faddf46569e',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136fanquiet_5928',['kMitsubishi136FanQuiet',['../ir__Mitsubishi_8h.html#af2f7483bbb99216614e01dd5aedc35d5',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136gap_5929',['kMitsubishi136Gap',['../ir__Mitsubishi_8cpp.html#a3f9e0708bbe8ed3ff98a563c3ff1af2b',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136hdrmark_5930',['kMitsubishi136HdrMark',['../ir__Mitsubishi_8cpp.html#a49c54ff757d070de54e3739b775bea00',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136hdrspace_5931',['kMitsubishi136HdrSpace',['../ir__Mitsubishi_8cpp.html#a1ddd09e423c427b3956298c20725188a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136heat_5932',['kMitsubishi136Heat',['../ir__Mitsubishi_8h.html#a932f074e9348d35cea119c8141eeb7f2',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136maxtemp_5933',['kMitsubishi136MaxTemp',['../ir__Mitsubishi_8h.html#a2db420b28003dc3e05bf1c86830c61ed',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136minrepeat_5934',['kMitsubishi136MinRepeat',['../IRremoteESP8266_8h.html#a448bd7af5fdab67fb40901a3d6efed21',1,'IRremoteESP8266.h']]], - ['kmitsubishi136mintemp_5935',['kMitsubishi136MinTemp',['../ir__Mitsubishi_8h.html#a5e2e5783d33f927f941271a44d11434c',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136onespace_5936',['kMitsubishi136OneSpace',['../ir__Mitsubishi_8cpp.html#a9a0cfee8b6ea94d3f798d53d30c99d5f',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi136powerbyte_5937',['kMitsubishi136PowerByte',['../ir__Mitsubishi_8h.html#aca06b9d066d3f1a322bbb0f3d1a874a7',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136statelength_5938',['kMitsubishi136StateLength',['../IRremoteESP8266_8h.html#a01adbe4e1afb2ba26a5a60bf5b0b42f6',1,'IRremoteESP8266.h']]], - ['kmitsubishi136swingvauto_5939',['kMitsubishi136SwingVAuto',['../ir__Mitsubishi_8h.html#a828c2cc017cb7d00872137464d2119ae',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvhigh_5940',['kMitsubishi136SwingVHigh',['../ir__Mitsubishi_8h.html#a319b36df23511aba8fb16b13eda9333b',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvhighest_5941',['kMitsubishi136SwingVHighest',['../ir__Mitsubishi_8h.html#a5bd1dbb97df91dfec0f9493120ea1269',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvlow_5942',['kMitsubishi136SwingVLow',['../ir__Mitsubishi_8h.html#a1ba4f3f7eb75bb54a752cfb11f196af0',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136swingvlowest_5943',['kMitsubishi136SwingVLowest',['../ir__Mitsubishi_8h.html#ab0701f0127b07780066040bc08e46a2e',1,'ir_Mitsubishi.h']]], - ['kmitsubishi136zerospace_5944',['kMitsubishi136ZeroSpace',['../ir__Mitsubishi_8cpp.html#afaf1eca1169f492dcdd8a7266756c827',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2bitmark_5945',['kMitsubishi2BitMark',['../ir__Mitsubishi_8cpp.html#a8b0e87a15c51c3b62c14b4e7a071207f',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2hdrmark_5946',['kMitsubishi2HdrMark',['../ir__Mitsubishi_8cpp.html#a2d838e748f1f69165fb6b672955ea95e',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2hdrspace_5947',['kMitsubishi2HdrSpace',['../ir__Mitsubishi_8cpp.html#acd8994a08389c8d874afcbb8eb9c0861',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2mingap_5948',['kMitsubishi2MinGap',['../ir__Mitsubishi_8cpp.html#a7fa283a14968b582123a474c86a6fde9',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2onespace_5949',['kMitsubishi2OneSpace',['../ir__Mitsubishi_8cpp.html#aeee614cef3e95f661dca95b344edcf64',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishi2zerospace_5950',['kMitsubishi2ZeroSpace',['../ir__Mitsubishi_8cpp.html#a665522ccd10f4c9fba39e3f8f8a5cb95',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacauto_5951',['kMitsubishiAcAuto',['../ir__Mitsubishi_8h.html#a1fdbdc0906594e0efebbd05110877000',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacbitmark_5952',['kMitsubishiAcBitMark',['../ir__Mitsubishi_8cpp.html#a3787c48ffff208ef964886efab7e17ca',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacbits_5953',['kMitsubishiACBits',['../IRremoteESP8266_8h.html#a911a47148656b26da2e094a7ced1fc8b',1,'IRremoteESP8266.h']]], - ['kmitsubishiaccool_5954',['kMitsubishiAcCool',['../ir__Mitsubishi_8h.html#a434455f6c76f0ca354b01e6a8a6479e9',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacdry_5955',['kMitsubishiAcDry',['../ir__Mitsubishi_8h.html#a9875c4b91a1b155b5f2e12370c33e031',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacextratolerance_5956',['kMitsubishiAcExtraTolerance',['../ir__Mitsubishi_8cpp.html#a98a0e4182311d584d4de4632eb491f04',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacfanauto_5957',['kMitsubishiAcFanAuto',['../ir__Mitsubishi_8h.html#a302cfd0468875cff23c69f71c392ad36',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanmax_5958',['kMitsubishiAcFanMax',['../ir__Mitsubishi_8h.html#abbc2b87dfc6b2364d065f66f4d3e540c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanquiet_5959',['kMitsubishiAcFanQuiet',['../ir__Mitsubishi_8h.html#a90799250620dec05385b9e81cfcb83af',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfanrealmax_5960',['kMitsubishiAcFanRealMax',['../ir__Mitsubishi_8h.html#aa28f81fbd686adb082786e7cda9a17fc',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacfansilent_5961',['kMitsubishiAcFanSilent',['../ir__Mitsubishi_8h.html#a731206548afa4f2672a78dae677f6b44',1,'ir_Mitsubishi.h']]], - ['kmitsubishiachdrmark_5962',['kMitsubishiAcHdrMark',['../ir__Mitsubishi_8cpp.html#a11fcb08ce6bf9fa5fc50ca0e5c7d2d64',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiachdrspace_5963',['kMitsubishiAcHdrSpace',['../ir__Mitsubishi_8cpp.html#af0af560129a4666aeba1a4a9ab59e271',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacheat_5964',['kMitsubishiAcHeat',['../ir__Mitsubishi_8h.html#a6107df195ecf54ec4ef97b5ab82e911c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacmaxtemp_5965',['kMitsubishiAcMaxTemp',['../ir__Mitsubishi_8h.html#aa7178f9ba06fb137af022e629ebfabc3',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacminrepeat_5966',['kMitsubishiACMinRepeat',['../IRremoteESP8266_8h.html#a376653a421df42d889ac3b2a071de58b',1,'IRremoteESP8266.h']]], - ['kmitsubishiacmintemp_5967',['kMitsubishiAcMinTemp',['../ir__Mitsubishi_8h.html#ad9d7413138205abef46942a2144b9e98',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacnotimer_5968',['kMitsubishiAcNoTimer',['../ir__Mitsubishi_8h.html#a0f5da97478cd6cdf2ffab161657e4ab6',1,'ir_Mitsubishi.h']]], - ['kmitsubishiaconespace_5969',['kMitsubishiAcOneSpace',['../ir__Mitsubishi_8cpp.html#abdf26b381c5288556257fabf43458775',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacrptmark_5970',['kMitsubishiAcRptMark',['../ir__Mitsubishi_8cpp.html#a541d764aef906909a1a0d40466567c92',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacrptspace_5971',['kMitsubishiAcRptSpace',['../ir__Mitsubishi_8cpp.html#a4b120db1bd34c62778597abf05092d0a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiacstartstoptimer_5972',['kMitsubishiAcStartStopTimer',['../ir__Mitsubishi_8h.html#aecbdc43fb4bd199c47cb5125816eab59',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacstarttimer_5973',['kMitsubishiAcStartTimer',['../ir__Mitsubishi_8h.html#a4107cbc35f18204f46adb57b0fd0f09c',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacstatelength_5974',['kMitsubishiACStateLength',['../IRremoteESP8266_8h.html#a7d0d6dd6d5741f91a1afb641f11d9bc5',1,'IRremoteESP8266.h']]], - ['kmitsubishiacstoptimer_5975',['kMitsubishiAcStopTimer',['../ir__Mitsubishi_8h.html#a5e59039d523d15b145aa87222d52f2bf',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneauto_5976',['kMitsubishiAcVaneAuto',['../ir__Mitsubishi_8h.html#a1caff28ea3678cc5f655fc7147c5a15e',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneautomove_5977',['kMitsubishiAcVaneAutoMove',['../ir__Mitsubishi_8h.html#a2dc0b1ff66ffc21f626d7d8894a31fbb',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanehigh_5978',['kMitsubishiAcVaneHigh',['../ir__Mitsubishi_8h.html#a5f3d8906d4e1ddad1cc569f276f428d2',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanehighest_5979',['kMitsubishiAcVaneHighest',['../ir__Mitsubishi_8h.html#a8b587143d7fb6c766437d3257442c4cd',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanelow_5980',['kMitsubishiAcVaneLow',['../ir__Mitsubishi_8h.html#acd4f01209522f1cf5db3662a7c5e9df5',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanelowest_5981',['kMitsubishiAcVaneLowest',['../ir__Mitsubishi_8h.html#ae2cada87838e0f21886409cde4ef97e3',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvanemiddle_5982',['kMitsubishiAcVaneMiddle',['../ir__Mitsubishi_8h.html#a2345713f7d81fb679e2af44fa8475945',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacvaneswing_5983',['kMitsubishiAcVaneSwing',['../ir__Mitsubishi_8h.html#a0831abb1415db21ee9db0973b19f26fd',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneauto_5984',['kMitsubishiAcWideVaneAuto',['../ir__Mitsubishi_8h.html#a2081e2b8eb778e15b7d9f2f0f332c012',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneleft_5985',['kMitsubishiAcWideVaneLeft',['../ir__Mitsubishi_8h.html#a811260dcbb4aebb11f0ec1e2a7d0548b',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneleftmax_5986',['kMitsubishiAcWideVaneLeftMax',['../ir__Mitsubishi_8h.html#adb2917f8ccb3a6a4d72a07913ea4a9d7',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanemiddle_5987',['kMitsubishiAcWideVaneMiddle',['../ir__Mitsubishi_8h.html#ab35fe20c0aae6c3c23766b2d1ae8834e',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevaneright_5988',['kMitsubishiAcWideVaneRight',['../ir__Mitsubishi_8h.html#a5a315b92c684841eeb4bc97603979931',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanerightmax_5989',['kMitsubishiAcWideVaneRightMax',['../ir__Mitsubishi_8h.html#ab37f3da432a2561030bbc3ccbed3e3b2',1,'ir_Mitsubishi.h']]], - ['kmitsubishiacwidevanewide_5990',['kMitsubishiAcWideVaneWide',['../ir__Mitsubishi_8h.html#a64714abaff784b87d326c7127674ad16',1,'ir_Mitsubishi.h']]], - ['kmitsubishiaczerospace_5991',['kMitsubishiAcZeroSpace',['../ir__Mitsubishi_8cpp.html#a9481515c349154bbb6f56cec2712ba85',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibitmark_5992',['kMitsubishiBitMark',['../ir__Mitsubishi_8cpp.html#a82c8e081b172080df14bdd6e3e6eb608',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibitmarkticks_5993',['kMitsubishiBitMarkTicks',['../ir__Mitsubishi_8cpp.html#a6daf88606f40b13bce698c73d00f5faf',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishibits_5994',['kMitsubishiBits',['../IRremoteESP8266_8h.html#abd2187340d0b94996136081413e2ad22',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152bits_5995',['kMitsubishiHeavy152Bits',['../IRremoteESP8266_8h.html#ab973b35583dabc7e04b12018fac04cc9',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152fanauto_5996',['kMitsubishiHeavy152FanAuto',['../ir__MitsubishiHeavy_8h.html#ae1739c1b5cd00b28a06dfd96413570a8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanecono_5997',['kMitsubishiHeavy152FanEcono',['../ir__MitsubishiHeavy_8h.html#acf0522589438103f805889e980259eb8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanhigh_5998',['kMitsubishiHeavy152FanHigh',['../ir__MitsubishiHeavy_8h.html#a48881ddd596b6945d04465b3f7a9bee6',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanlow_5999',['kMitsubishiHeavy152FanLow',['../ir__MitsubishiHeavy_8h.html#acff7254b2ced32550ec9305dbaac3d95',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanmax_6000',['kMitsubishiHeavy152FanMax',['../ir__MitsubishiHeavy_8h.html#aa1e9a41137a7dd65fc049ae41856795f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanmed_6001',['kMitsubishiHeavy152FanMed',['../ir__MitsubishiHeavy_8h.html#ac432324a30abcc0e664cf0ff8e974516',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152fanturbo_6002',['kMitsubishiHeavy152FanTurbo',['../ir__MitsubishiHeavy_8h.html#a7665d1ecb52afabd0dd951f2ab54e59b',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152minrepeat_6003',['kMitsubishiHeavy152MinRepeat',['../IRremoteESP8266_8h.html#a789cbb74cf332f8440a4fcdcac188741',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152statelength_6004',['kMitsubishiHeavy152StateLength',['../IRremoteESP8266_8h.html#a31d12a44c8c3a3c4533f65b8213e2086',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy152swinghauto_6005',['kMitsubishiHeavy152SwingHAuto',['../ir__MitsubishiHeavy_8h.html#ac0ed87ce67ece78e2e9f2b49da5ba152',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleft_6006',['kMitsubishiHeavy152SwingHLeft',['../ir__MitsubishiHeavy_8h.html#a1a20549b529745e913565e6d717d9f95',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleftmax_6007',['kMitsubishiHeavy152SwingHLeftMax',['../ir__MitsubishiHeavy_8h.html#a970e6b602f5bbd4d560249966f6de6c9',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghleftright_6008',['kMitsubishiHeavy152SwingHLeftRight',['../ir__MitsubishiHeavy_8h.html#a24c71dc5a17affb2f2d136f6846befbc',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghmiddle_6009',['kMitsubishiHeavy152SwingHMiddle',['../ir__MitsubishiHeavy_8h.html#af1a02e21631c1efb12a01b3db065916c',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghoff_6010',['kMitsubishiHeavy152SwingHOff',['../ir__MitsubishiHeavy_8h.html#a246f8f9c9083f21ee22c2367ece2b9e2',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghright_6011',['kMitsubishiHeavy152SwingHRight',['../ir__MitsubishiHeavy_8h.html#aeec05249b3958f5a1cd629b328209e05',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghrightleft_6012',['kMitsubishiHeavy152SwingHRightLeft',['../ir__MitsubishiHeavy_8h.html#a43ddc14cc8707aa9743519b1c54eb776',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swinghrightmax_6013',['kMitsubishiHeavy152SwingHRightMax',['../ir__MitsubishiHeavy_8h.html#ae825ed46bf143bc6a01891a5f021c870',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvauto_6014',['kMitsubishiHeavy152SwingVAuto',['../ir__MitsubishiHeavy_8h.html#a31c20346b5538d74b58cb1fd499b5751',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvhigh_6015',['kMitsubishiHeavy152SwingVHigh',['../ir__MitsubishiHeavy_8h.html#a9ac8e39e46b43fb2276af7dd9724e3d4',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvhighest_6016',['kMitsubishiHeavy152SwingVHighest',['../ir__MitsubishiHeavy_8h.html#a554efbb611fd29a5d388d8195aa79993',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvlow_6017',['kMitsubishiHeavy152SwingVLow',['../ir__MitsubishiHeavy_8h.html#ad9a0b57ba70d318572b77236c23830a7',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvlowest_6018',['kMitsubishiHeavy152SwingVLowest',['../ir__MitsubishiHeavy_8h.html#a02f1b980aa78b4ff314209d16bf0a6e8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvmiddle_6019',['kMitsubishiHeavy152SwingVMiddle',['../ir__MitsubishiHeavy_8h.html#ae5c3ec8b8837dddff01d71c44a4ba813',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy152swingvoff_6020',['kMitsubishiHeavy152SwingVOff',['../ir__MitsubishiHeavy_8h.html#abb6905210a2f4021d157eeb61eaed7cd',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88bits_6021',['kMitsubishiHeavy88Bits',['../IRremoteESP8266_8h.html#aa80d389140df4ab7071bfb3510b35dda',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88fanauto_6022',['kMitsubishiHeavy88FanAuto',['../ir__MitsubishiHeavy_8h.html#a607cbc27223765b3dd1f9bfd77932d0f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanecono_6023',['kMitsubishiHeavy88FanEcono',['../ir__MitsubishiHeavy_8h.html#ab5fbaaffd9e0182fc7e60252f89da2c3',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanhigh_6024',['kMitsubishiHeavy88FanHigh',['../ir__MitsubishiHeavy_8h.html#aa45b29aaa7d8df7a34dfe6308a6b6412',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanlow_6025',['kMitsubishiHeavy88FanLow',['../ir__MitsubishiHeavy_8h.html#a92f0cba1aef78e5ade01c648837e7553',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanmed_6026',['kMitsubishiHeavy88FanMed',['../ir__MitsubishiHeavy_8h.html#aade681ee8ed4c4647a997a3caad093ea',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88fanturbo_6027',['kMitsubishiHeavy88FanTurbo',['../ir__MitsubishiHeavy_8h.html#a29201ebd9395edb2660337ee00efa1dd',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88minrepeat_6028',['kMitsubishiHeavy88MinRepeat',['../IRremoteESP8266_8h.html#ad7bccde1a9b32c962c99748fb130f711',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88statelength_6029',['kMitsubishiHeavy88StateLength',['../IRremoteESP8266_8h.html#a515e5a081c388dd4313b20ff2b6c7955',1,'IRremoteESP8266.h']]], - ['kmitsubishiheavy88swingh3d_6030',['kMitsubishiHeavy88SwingH3D',['../ir__MitsubishiHeavy_8h.html#adfeb87be0ddfc6c06bbcb4a1506d3185',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghauto_6031',['kMitsubishiHeavy88SwingHAuto',['../ir__MitsubishiHeavy_8h.html#ac39f2339ab90bdc6d9c98dd6cf95fce2',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleft_6032',['kMitsubishiHeavy88SwingHLeft',['../ir__MitsubishiHeavy_8h.html#a32a76b07c6da2b09d04d985544d91af1',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleftmax_6033',['kMitsubishiHeavy88SwingHLeftMax',['../ir__MitsubishiHeavy_8h.html#a83340e32cff8ca09eb7596ec55a67853',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghleftright_6034',['kMitsubishiHeavy88SwingHLeftRight',['../ir__MitsubishiHeavy_8h.html#a82f7addc930441b6e756d71ce3df24ca',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghmiddle_6035',['kMitsubishiHeavy88SwingHMiddle',['../ir__MitsubishiHeavy_8h.html#a7a4b00b2953f2bc068d83c2618484c69',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghoff_6036',['kMitsubishiHeavy88SwingHOff',['../ir__MitsubishiHeavy_8h.html#a5313aeb4115ca5a795c6ebb9871ce436',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghright_6037',['kMitsubishiHeavy88SwingHRight',['../ir__MitsubishiHeavy_8h.html#a35224e254d897b9d42e16f9dae04d984',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghrightleft_6038',['kMitsubishiHeavy88SwingHRightLeft',['../ir__MitsubishiHeavy_8h.html#aa913c0f1c61260c533c66aaa12dc83ac',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghrightmax_6039',['kMitsubishiHeavy88SwingHRightMax',['../ir__MitsubishiHeavy_8h.html#a83c481d42999e377a2c50cacc28017b0',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swinghsize_6040',['kMitsubishiHeavy88SwingHSize',['../ir__MitsubishiHeavy_8h.html#a46a3cb1874cf5d1875e971094527b98f',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvauto_6041',['kMitsubishiHeavy88SwingVAuto',['../ir__MitsubishiHeavy_8h.html#a65c66f030afd2795d3132b3d0be2cabe',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvbyte5size_6042',['kMitsubishiHeavy88SwingVByte5Size',['../ir__MitsubishiHeavy_8h.html#ae0569562330f8c2af57a78764341c310',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvhigh_6043',['kMitsubishiHeavy88SwingVHigh',['../ir__MitsubishiHeavy_8h.html#af99a8f0925f184f56080ddf3e9a37606',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvhighest_6044',['kMitsubishiHeavy88SwingVHighest',['../ir__MitsubishiHeavy_8h.html#adc2a20b5ca5dda6417c60a1a3c321fc0',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvlow_6045',['kMitsubishiHeavy88SwingVLow',['../ir__MitsubishiHeavy_8h.html#adb086c76e06cbf6c8808470363da5e93',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvlowest_6046',['kMitsubishiHeavy88SwingVLowest',['../ir__MitsubishiHeavy_8h.html#a6f4af31ee9b187648c242aca2851d3ed',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvmiddle_6047',['kMitsubishiHeavy88SwingVMiddle',['../ir__MitsubishiHeavy_8h.html#aeaddb1d80dd777c0fdd8e77661479598',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavy88swingvoff_6048',['kMitsubishiHeavy88SwingVOff',['../ir__MitsubishiHeavy_8h.html#ad29f5b94153e0fc9943a2c4c02aa1f61',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyauto_6049',['kMitsubishiHeavyAuto',['../ir__MitsubishiHeavy_8h.html#a1bcb7429a89904e3b431aaaff20e35fa',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavybitmark_6050',['kMitsubishiHeavyBitMark',['../ir__MitsubishiHeavy_8cpp.html#a54b398e130a1893bdc81067c636d6001',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavycool_6051',['kMitsubishiHeavyCool',['../ir__MitsubishiHeavy_8h.html#a5d819a9a6372fde79380a6890ffd3168',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavydry_6052',['kMitsubishiHeavyDry',['../ir__MitsubishiHeavy_8h.html#a749f4d74b6cce4ad29a7ab78bb780eaf',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyfan_6053',['kMitsubishiHeavyFan',['../ir__MitsubishiHeavy_8h.html#a55d9e0b9676da64dfdc888e7941665f8',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavygap_6054',['kMitsubishiHeavyGap',['../ir__MitsubishiHeavy_8cpp.html#a92920bf4a95bccb9b55c623ff6dac96a',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyhdrmark_6055',['kMitsubishiHeavyHdrMark',['../ir__MitsubishiHeavy_8cpp.html#a9b1724efadc251117733297c424e76f4',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyhdrspace_6056',['kMitsubishiHeavyHdrSpace',['../ir__MitsubishiHeavy_8cpp.html#a9070250903c1d1653beb54ac3de27033',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyheat_6057',['kMitsubishiHeavyHeat',['../ir__MitsubishiHeavy_8h.html#a0b76a854d109dd0622155015edd31d74',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavymaxtemp_6058',['kMitsubishiHeavyMaxTemp',['../ir__MitsubishiHeavy_8h.html#a49abbf34671b67eb4ebbe881444180f4',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavymintemp_6059',['kMitsubishiHeavyMinTemp',['../ir__MitsubishiHeavy_8h.html#afa83fd435c67699da272b883277dbb98',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyonespace_6060',['kMitsubishiHeavyOneSpace',['../ir__MitsubishiHeavy_8cpp.html#adec6564e4af2886b4c7d44343d98b9dc',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavysiglength_6061',['kMitsubishiHeavySigLength',['../ir__MitsubishiHeavy_8h.html#af08e6fc65b10821e52dd4a0073033d14',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyzerospace_6062',['kMitsubishiHeavyZeroSpace',['../ir__MitsubishiHeavy_8cpp.html#a903c30cee53f76c7dc3d2fef74b6e4b2',1,'ir_MitsubishiHeavy.cpp']]], - ['kmitsubishiheavyzjssig_6063',['kMitsubishiHeavyZjsSig',['../ir__MitsubishiHeavy_8h.html#a01eb89bfc9d4b271a97fea566eb937ff',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishiheavyzmssig_6064',['kMitsubishiHeavyZmsSig',['../ir__MitsubishiHeavy_8h.html#a18761991123d121c8d40531d07922165',1,'ir_MitsubishiHeavy.h']]], - ['kmitsubishimincommandlength_6065',['kMitsubishiMinCommandLength',['../ir__Mitsubishi_8cpp.html#ad5a6d37e755ce1faa4cdb024d2bed26a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimincommandlengthticks_6066',['kMitsubishiMinCommandLengthTicks',['../ir__Mitsubishi_8cpp.html#a4f69a50c720c7a19f0ee04d262eb5948',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimingap_6067',['kMitsubishiMinGap',['../ir__Mitsubishi_8cpp.html#a66f6379ca4c0e5f03eda2d81be0a35b2',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishimingapticks_6068',['kMitsubishiMinGapTicks',['../ir__Mitsubishi_8cpp.html#af9e8409306344cf4cd0117f2131fc67a',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishiminrepeat_6069',['kMitsubishiMinRepeat',['../IRremoteESP8266_8h.html#ad88bda81b48f25d30bb5a169d3b6bcec',1,'IRremoteESP8266.h']]], - ['kmitsubishionespace_6070',['kMitsubishiOneSpace',['../ir__Mitsubishi_8cpp.html#ab3c6a50b722402633aaf26e2a4a39ff0',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishionespaceticks_6071',['kMitsubishiOneSpaceTicks',['../ir__Mitsubishi_8cpp.html#a3b12f2aa2c3b4b7ef439f86356aab9cf',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishitick_6072',['kMitsubishiTick',['../ir__Mitsubishi_8cpp.html#a5197eb8b6e8de8fdfb9f056b6f7d9aa5',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishizerospace_6073',['kMitsubishiZeroSpace',['../ir__Mitsubishi_8cpp.html#a9660ac382e9a929f6acb73a32b2a1a3c',1,'ir_Mitsubishi.cpp']]], - ['kmitsubishizerospaceticks_6074',['kMitsubishiZeroSpaceTicks',['../ir__Mitsubishi_8cpp.html#a18f364a0ba491236538bc9d086303d69',1,'ir_Mitsubishi.cpp']]], - ['kmodebitssize_6075',['kModeBitsSize',['../IRutils_8h.html#a5432915ab86062fceadc067a233f1627',1,'IRutils.h']]], - ['kmodelstr_6076',['kModelStr',['../IRtext_8cpp.html#a40905418e2934e539c50c6cfc2c4ffe3',1,'kModelStr(): IRtext.cpp'],['../IRtext_8h.html#a4a553cfcc7ca2a8cea8e1263f5f6c186',1,'kModelStr(): IRtext.cpp']]], - ['kmodestr_6077',['kModeStr',['../IRtext_8cpp.html#a7260c578d290c33b7705cd1439d992ee',1,'kModeStr(): IRtext.cpp'],['../IRtext_8h.html#a6666695e388b607bfd3bb0e6efd4193f',1,'kModeStr(): IRtext.cpp']]], - ['kmouldstr_6078',['kMouldStr',['../IRtext_8cpp.html#ac665ea584a4949565aa35629d791dbc5',1,'kMouldStr(): IRtext.cpp'],['../IRtext_8h.html#a693b29e4764d959dac781a0992f2bf30',1,'kMouldStr(): IRtext.cpp']]], - ['kmovestr_6079',['kMoveStr',['../IRtext_8cpp.html#a321f98699209fb487287c4911a0c0200',1,'kMoveStr(): IRtext.cpp'],['../IRtext_8h.html#ae99940df2a9243fd7fe6f3814c0802dd',1,'kMoveStr(): IRtext.cpp']]], - ['kmultibracketsbits_6080',['kMultibracketsBits',['../IRremoteESP8266_8h.html#aad7be0971479839493615cafcd654fc1',1,'IRremoteESP8266.h']]], - ['kmultibracketsdefaultrepeat_6081',['kMultibracketsDefaultRepeat',['../IRremoteESP8266_8h.html#a5aa418baefd018d5facc08d3bb721fe9',1,'IRremoteESP8266.h']]], - ['kmultibracketsfooterspace_6082',['kMultibracketsFooterSpace',['../ir__Multibrackets_8cpp.html#a738cde2d6a25611bea116d04375dd28a',1,'ir_Multibrackets.cpp']]], - ['kmultibracketsfreq_6083',['kMultibracketsFreq',['../ir__Multibrackets_8cpp.html#a38ba01a3c516f6018199aa9031a5fb4a',1,'ir_Multibrackets.cpp']]], - ['kmultibracketshdrmark_6084',['kMultibracketsHdrMark',['../ir__Multibrackets_8cpp.html#a4eaafbf701604ceb6591b8a8b9c1d202',1,'ir_Multibrackets.cpp']]], - ['kmultibracketstick_6085',['kMultibracketsTick',['../ir__Multibrackets_8cpp.html#aa528fbf06b8d5293d82b7efc2bcd1e9b',1,'ir_Multibrackets.cpp']]], - ['kmultibracketstolerance_6086',['kMultibracketsTolerance',['../ir__Multibrackets_8cpp.html#a242017fb86f015cdecbf31c278c43ccc',1,'ir_Multibrackets.cpp']]], - ['kmwmdelta_6087',['kMWMDelta',['../ir__MWM_8cpp.html#a4e32849a3c799af002d1290a8a33366e',1,'ir_MWM.cpp']]], - ['kmwmexcess_6088',['kMWMExcess',['../ir__MWM_8cpp.html#ab3ff88bfc09c94e70fb74a77dbdd87d7',1,'ir_MWM.cpp']]], - ['kmwmmaxwidth_6089',['kMWMMaxWidth',['../ir__MWM_8cpp.html#a833013dcb331ebce3b885b0ce73c9eaa',1,'ir_MWM.cpp']]], - ['kmwmmingap_6090',['kMWMMinGap',['../ir__MWM_8cpp.html#a4d1f9c5442390a5ba089270c1187e917',1,'ir_MWM.cpp']]], - ['kmwmminsamples_6091',['kMWMMinSamples',['../ir__MWM_8cpp.html#ad386c922a0fcbd0c5b904b9abdd8d582',1,'ir_MWM.cpp']]], - ['kmwmtick_6092',['kMWMTick',['../ir__MWM_8cpp.html#a42c39c0101ccad1e88fa206a26447256',1,'ir_MWM.cpp']]], - ['kmwmtolerance_6093',['kMWMTolerance',['../ir__MWM_8cpp.html#ae3a91ec66f51f50810229b4adc1264fd',1,'ir_MWM.cpp']]], - ['knastr_6094',['kNAStr',['../IRtext_8cpp.html#a1757349137713553454f405872bc4dcd',1,'kNAStr(): IRtext.cpp'],['../IRtext_8h.html#a5d094344fba1715dbde69ff947775264',1,'kNAStr(): IRtext.cpp']]], - ['knecbitmark_6095',['kNecBitMark',['../ir__NEC_8h.html#ab536a800ec8f7259fe7e485ea4aea465',1,'ir_NEC.h']]], - ['knecbitmarkticks_6096',['kNecBitMarkTicks',['../ir__NEC_8h.html#a84ca60f84d64d65872b40a87819eccc1',1,'ir_NEC.h']]], - ['knecbits_6097',['kNECBits',['../IRremoteESP8266_8h.html#a65e03baf646815b4b02f943bdd74a097',1,'IRremoteESP8266.h']]], - ['knechdrmark_6098',['kNecHdrMark',['../ir__NEC_8h.html#ac727ede47d30ec76b03e4a41b48ce8c7',1,'ir_NEC.h']]], - ['knechdrmarkticks_6099',['kNecHdrMarkTicks',['../ir__NEC_8h.html#ab1486c07a09bc4324c03b1c887f5c5f7',1,'ir_NEC.h']]], - ['knechdrspace_6100',['kNecHdrSpace',['../ir__NEC_8h.html#a8279410369d6ed266502615d3ff1750b',1,'ir_NEC.h']]], - ['knechdrspaceticks_6101',['kNecHdrSpaceTicks',['../ir__NEC_8h.html#a4470ee927c0c3447bdda20c52b0f8566',1,'ir_NEC.h']]], - ['knecmincommandlength_6102',['kNecMinCommandLength',['../ir__NEC_8h.html#ac7b8d897d9e5bbf29b9b1b899a2ef7d8',1,'ir_NEC.h']]], - ['knecmincommandlengthticks_6103',['kNecMinCommandLengthTicks',['../ir__NEC_8h.html#a78e411960e643495987b1cb53268bc46',1,'ir_NEC.h']]], - ['knecmingap_6104',['kNecMinGap',['../ir__NEC_8h.html#a3d6ecc128599df57dc98e97e51b2264e',1,'ir_NEC.h']]], - ['knecmingapticks_6105',['kNecMinGapTicks',['../ir__NEC_8h.html#a2e6d938510a34aa1217a56aa51ece9f5',1,'ir_NEC.h']]], - ['kneconespace_6106',['kNecOneSpace',['../ir__NEC_8h.html#af57080e9b7513d1c8e7e781f3d502fbd',1,'ir_NEC.h']]], - ['kneconespaceticks_6107',['kNecOneSpaceTicks',['../ir__NEC_8h.html#a2f1e5412d44816f92e4b6c72e16e8b1f',1,'ir_NEC.h']]], - ['knecrptlength_6108',['kNecRptLength',['../ir__NEC_8h.html#af4ab20595dfda177fbb06dd821ea14c7',1,'ir_NEC.h']]], - ['knecrptspace_6109',['kNecRptSpace',['../ir__NEC_8h.html#a9538478446b1ae5d72c8366dd6a11673',1,'ir_NEC.h']]], - ['knecrptspaceticks_6110',['kNecRptSpaceTicks',['../ir__NEC_8h.html#a91b5296d480008a4b44c5b084756f04b',1,'ir_NEC.h']]], - ['knectick_6111',['kNecTick',['../ir__NEC_8h.html#abe1ec110798236c7b626f7efe4cc5657',1,'ir_NEC.h']]], - ['kneczerospace_6112',['kNecZeroSpace',['../ir__NEC_8h.html#a00573a6bdb348339b9898173b644b693',1,'ir_NEC.h']]], - ['kneczerospaceticks_6113',['kNecZeroSpaceTicks',['../ir__NEC_8h.html#a80f316535d761c64f1d5752ef80a65ff',1,'ir_NEC.h']]], - ['kneoclimaauto_6114',['kNeoclimaAuto',['../ir__Neoclima_8h.html#a4574742c21aae9aafaff9b10f9423006',1,'ir_Neoclima.h']]], - ['kneoclimabitmark_6115',['kNeoclimaBitMark',['../ir__Neoclima_8cpp.html#ae34236a830ec2d200575ac33fda43689',1,'ir_Neoclima.cpp']]], - ['kneoclimabits_6116',['kNeoclimaBits',['../IRremoteESP8266_8h.html#afff9132e57296b4d7e04ec9e1e5ab04f',1,'IRremoteESP8266.h']]], - ['kneoclimabutton8cheat_6117',['kNeoclimaButton8CHeat',['../ir__Neoclima_8h.html#ad337d964ff800bea5c55f1fe69dfb7ff',1,'ir_Neoclima.h']]], - ['kneoclimabuttonairflow_6118',['kNeoclimaButtonAirFlow',['../ir__Neoclima_8h.html#ab5fff838f8e5ac9ff213fc69346ffa7c',1,'ir_Neoclima.h']]], - ['kneoclimabuttonecono_6119',['kNeoclimaButtonEcono',['../ir__Neoclima_8h.html#a3bf5508439a8af4543f95468fd32a8bb',1,'ir_Neoclima.h']]], - ['kneoclimabuttoneye_6120',['kNeoclimaButtonEye',['../ir__Neoclima_8h.html#a6cabdccd3c8d52cb2817f99454bdc884',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfanspeed_6121',['kNeoclimaButtonFanSpeed',['../ir__Neoclima_8h.html#ab41ffd863516b79b6c7e9b69e7d5a272',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfollow_6122',['kNeoclimaButtonFollow',['../ir__Neoclima_8h.html#a592017dce3bfa4ea2f0f341a818aff72',1,'ir_Neoclima.h']]], - ['kneoclimabuttonfresh_6123',['kNeoclimaButtonFresh',['../ir__Neoclima_8h.html#a6a965f2dc7860879ccaf410405095e9c',1,'ir_Neoclima.h']]], - ['kneoclimabuttonhold_6124',['kNeoclimaButtonHold',['../ir__Neoclima_8h.html#aada6fdb6572bd7d841de89f1d1eed3fe',1,'ir_Neoclima.h']]], - ['kneoclimabuttonion_6125',['kNeoclimaButtonIon',['../ir__Neoclima_8h.html#a05dccf1c19237d315bb78f387f8fd57f',1,'ir_Neoclima.h']]], - ['kneoclimabuttonlight_6126',['kNeoclimaButtonLight',['../ir__Neoclima_8h.html#ac66b472b31f6183f4615584561baa284',1,'ir_Neoclima.h']]], - ['kneoclimabuttonmode_6127',['kNeoclimaButtonMode',['../ir__Neoclima_8h.html#a4cfee4b0898f1504be5cbd129cd99278',1,'ir_Neoclima.h']]], - ['kneoclimabuttonpower_6128',['kNeoclimaButtonPower',['../ir__Neoclima_8h.html#a047d19978c58b35dcd6a069fce04af87',1,'ir_Neoclima.h']]], - ['kneoclimabuttonsleep_6129',['kNeoclimaButtonSleep',['../ir__Neoclima_8h.html#adcbe2a89eecf41fe1fe2b8c62428084e',1,'ir_Neoclima.h']]], - ['kneoclimabuttonswing_6130',['kNeoclimaButtonSwing',['../ir__Neoclima_8h.html#aeea180bef85a40d8c7fe3f5facf7b199',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempdown_6131',['kNeoclimaButtonTempDown',['../ir__Neoclima_8h.html#aee91f1ebdf89b6fe9f3b31937d1185a0',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempunit_6132',['kNeoclimaButtonTempUnit',['../ir__Neoclima_8h.html#ad552c7576d7f6c89b3530bcddf15d00c',1,'ir_Neoclima.h']]], - ['kneoclimabuttontempup_6133',['kNeoclimaButtonTempUp',['../ir__Neoclima_8h.html#abb093132f77d179ab02fc4a022d55236',1,'ir_Neoclima.h']]], - ['kneoclimabuttonturbo_6134',['kNeoclimaButtonTurbo',['../ir__Neoclima_8h.html#af156d94f9e47e8b5e2e2493308cca04c',1,'ir_Neoclima.h']]], - ['kneoclimacool_6135',['kNeoclimaCool',['../ir__Neoclima_8h.html#ac5d874e5ffce72ce68176f38e780c439',1,'ir_Neoclima.h']]], - ['kneoclimadry_6136',['kNeoclimaDry',['../ir__Neoclima_8h.html#ab68ba4480e1bcb685579c5f902d0709e',1,'ir_Neoclima.h']]], - ['kneoclimafan_6137',['kNeoclimaFan',['../ir__Neoclima_8h.html#aa6166bd65d80a708d790dbf703c83ea2',1,'ir_Neoclima.h']]], - ['kneoclimafanauto_6138',['kNeoclimaFanAuto',['../ir__Neoclima_8h.html#a7885fdbc4ae3336aac74d7ee3d8c3258',1,'ir_Neoclima.h']]], - ['kneoclimafanhigh_6139',['kNeoclimaFanHigh',['../ir__Neoclima_8h.html#a57ddf91c1cbb157b3a53b1082bac2d75',1,'ir_Neoclima.h']]], - ['kneoclimafanlow_6140',['kNeoclimaFanLow',['../ir__Neoclima_8h.html#ac9031328be51a46543ebd4360aaca55a',1,'ir_Neoclima.h']]], - ['kneoclimafanmed_6141',['kNeoclimaFanMed',['../ir__Neoclima_8h.html#a11faf2a34faf44460795b50bfbdab402',1,'ir_Neoclima.h']]], - ['kneoclimafollowme_6142',['kNeoclimaFollowMe',['../ir__Neoclima_8h.html#a493c1e6b8b8909f4201cd506a1f4804a',1,'ir_Neoclima.h']]], - ['kneoclimahdrmark_6143',['kNeoclimaHdrMark',['../ir__Neoclima_8cpp.html#aa392821c0ce822a7b7d67efd202bedd5',1,'ir_Neoclima.cpp']]], - ['kneoclimahdrspace_6144',['kNeoclimaHdrSpace',['../ir__Neoclima_8cpp.html#a3714ad66d75162ccb286152b70375588',1,'ir_Neoclima.cpp']]], - ['kneoclimaheat_6145',['kNeoclimaHeat',['../ir__Neoclima_8h.html#a5a5e53801c0f8e554c391ed56404b926',1,'ir_Neoclima.h']]], - ['kneoclimamaxtempc_6146',['kNeoclimaMaxTempC',['../ir__Neoclima_8h.html#a9333b62cef8e22e05a2fbfb566830bb6',1,'ir_Neoclima.h']]], - ['kneoclimamaxtempf_6147',['kNeoclimaMaxTempF',['../ir__Neoclima_8h.html#a7e1b67f87fbf56b52c4ad39c4865212d',1,'ir_Neoclima.h']]], - ['kneoclimamingap_6148',['kNeoclimaMinGap',['../ir__Neoclima_8cpp.html#a0e54c73eff563f6c3ec39a0951dd3d2d',1,'ir_Neoclima.cpp']]], - ['kneoclimaminrepeat_6149',['kNeoclimaMinRepeat',['../IRremoteESP8266_8h.html#a16fc26a3ff66a66068ac9638554df847',1,'IRremoteESP8266.h']]], - ['kneoclimamintempc_6150',['kNeoclimaMinTempC',['../ir__Neoclima_8h.html#a39d700251ad835e4b36ec6e9db667703',1,'ir_Neoclima.h']]], - ['kneoclimamintempf_6151',['kNeoclimaMinTempF',['../ir__Neoclima_8h.html#ac6159ea9bbc08e115c45b4611190fe9f',1,'ir_Neoclima.h']]], - ['kneoclimaonespace_6152',['kNeoclimaOneSpace',['../ir__Neoclima_8cpp.html#a5fd5f3b7f04134190aafc65762528da0',1,'ir_Neoclima.cpp']]], - ['kneoclimastatelength_6153',['kNeoclimaStateLength',['../IRremoteESP8266_8h.html#a5a871ed6d145c5ea3d50e96600c02e31',1,'IRremoteESP8266.h']]], - ['kneoclimaswingvoff_6154',['kNeoclimaSwingVOff',['../ir__Neoclima_8h.html#ad230a8c18e6edb5709cb29033f1fd221',1,'ir_Neoclima.h']]], - ['kneoclimaswingvon_6155',['kNeoclimaSwingVOn',['../ir__Neoclima_8h.html#a7021804eb30e7a7c5b9c9ababb1b8cad',1,'ir_Neoclima.h']]], - ['kneoclimazerospace_6156',['kNeoclimaZeroSpace',['../ir__Neoclima_8cpp.html#a0b98d84da4651d8d31f8f1d84621c21e',1,'ir_Neoclima.cpp']]], - ['knibblesize_6157',['kNibbleSize',['../IRutils_8h.html#aa72cd082cdde3d8d7473ed9d11ff6846',1,'IRutils.h']]], - ['knightstr_6158',['kNightStr',['../IRtext_8cpp.html#a01908d3c0f79bc015a699fc0576a8771',1,'kNightStr(): IRtext.cpp'],['../IRtext_8h.html#afe6519eaae5b1fb4d110529ce98f05b0',1,'kNightStr(): IRtext.cpp']]], - ['knikaibitmark_6159',['kNikaiBitMark',['../ir__Nikai_8cpp.html#ad665145b0ee9cc722d9fde43cbd3fd82',1,'ir_Nikai.cpp']]], - ['knikaibitmarkticks_6160',['kNikaiBitMarkTicks',['../ir__Nikai_8cpp.html#ac10d1b4c45af3ddbf3c50b85dbb0c2f0',1,'ir_Nikai.cpp']]], - ['knikaibits_6161',['kNikaiBits',['../IRremoteESP8266_8h.html#a9fce002592f9e2488b1b717d0b1a6a40',1,'IRremoteESP8266.h']]], - ['knikaihdrmark_6162',['kNikaiHdrMark',['../ir__Nikai_8cpp.html#ae0656b931e18e6e011a7c74cfaf4384b',1,'ir_Nikai.cpp']]], - ['knikaihdrmarkticks_6163',['kNikaiHdrMarkTicks',['../ir__Nikai_8cpp.html#a11671cee9a312ece8f1c90596eddd7ac',1,'ir_Nikai.cpp']]], - ['knikaihdrspace_6164',['kNikaiHdrSpace',['../ir__Nikai_8cpp.html#ae801e20e669f3039888bf48074988b84',1,'ir_Nikai.cpp']]], - ['knikaihdrspaceticks_6165',['kNikaiHdrSpaceTicks',['../ir__Nikai_8cpp.html#a83885a2fc573f947afe5015cd2f4d953',1,'ir_Nikai.cpp']]], - ['knikaimingap_6166',['kNikaiMinGap',['../ir__Nikai_8cpp.html#ad88846eaa7559df7fb944283fd292da1',1,'ir_Nikai.cpp']]], - ['knikaimingapticks_6167',['kNikaiMinGapTicks',['../ir__Nikai_8cpp.html#afdf938a763f30e3c5e534eba269dff1f',1,'ir_Nikai.cpp']]], - ['knikaionespace_6168',['kNikaiOneSpace',['../ir__Nikai_8cpp.html#a4bb69ab22b2abcd20ffff90f9267fa43',1,'ir_Nikai.cpp']]], - ['knikaionespaceticks_6169',['kNikaiOneSpaceTicks',['../ir__Nikai_8cpp.html#a25a4d289b7fad06c31312df552ee81ab',1,'ir_Nikai.cpp']]], - ['knikaitick_6170',['kNikaiTick',['../ir__Nikai_8cpp.html#a70eb8953509420081d0a294203eeb34b',1,'ir_Nikai.cpp']]], - ['knikaizerospace_6171',['kNikaiZeroSpace',['../ir__Nikai_8cpp.html#aa9af57c5c936107b00096e16cc6f57d9',1,'ir_Nikai.cpp']]], - ['knikaizerospaceticks_6172',['kNikaiZeroSpaceTicks',['../ir__Nikai_8cpp.html#a8df777a744c018e27c6969c2109d6d79',1,'ir_Nikai.cpp']]], - ['knorepeat_6173',['kNoRepeat',['../IRremoteESP8266_8h.html#a1a49dde7ffbd753f7756cf0c9dc6d826',1,'IRremoteESP8266.h']]], - ['knostr_6174',['kNoStr',['../IRtext_8cpp.html#a07897ceb4a6607d87ef37a517908a4b5',1,'kNoStr(): IRtext.cpp'],['../IRtext_8h.html#a51c9fb58ee7d01e96e2571018aea746d',1,'kNoStr(): IRtext.cpp']]], - ['knowstr_6175',['kNowStr',['../IRtext_8cpp.html#a09d8590020bcf998746528d0e50f7a20',1,'kNowStr(): IRtext.cpp'],['../IRtext_8h.html#a6a3c0965a32c36d9b5aa4918b473cc12',1,'kNowStr(): IRtext.cpp']]], - ['koffstr_6176',['kOffStr',['../IRtext_8cpp.html#a9ce19a214db45b8cff83032ffa1ccdd8',1,'kOffStr(): IRtext.cpp'],['../IRtext_8h.html#a95f119413a113c9a2e8c246892b8c52a',1,'kOffStr(): IRtext.cpp']]], - ['kofftimerstr_6177',['kOffTimerStr',['../IRtext_8cpp.html#ae5faab97b26f9e877f79f49002bbba2c',1,'kOffTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a818275085f8a8d7c083b66f081689b1f',1,'kOffTimerStr(): IRtext.cpp']]], - ['konstr_6178',['kOnStr',['../IRtext_8cpp.html#ab3f42c8df156baa46326a57193f78c51',1,'kOnStr(): IRtext.cpp'],['../IRtext_8h.html#aaf4ffad7f827a2ce8512e644bc9c25c7',1,'kOnStr(): IRtext.cpp']]], - ['kontimerstr_6179',['kOnTimerStr',['../IRtext_8cpp.html#adaecb1b5526f2bb3a1334e816a414273',1,'kOnTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a9f355a0d834790287d95eea30b57564d',1,'kOnTimerStr(): IRtext.cpp']]], - ['koutsidequietstr_6180',['kOutsideQuietStr',['../IRtext_8cpp.html#a103f2a8a2a6d351cd8ea259de3c454ef',1,'kOutsideQuietStr(): IRtext.cpp'],['../IRtext_8h.html#afaf12ae53365f790b47ff3790e94cc1c',1,'kOutsideQuietStr(): IRtext.cpp']]], - ['koutsidestr_6181',['kOutsideStr',['../IRtext_8cpp.html#a8465ee1e8b1e5dd58a9cf872c9569e01',1,'kOutsideStr(): IRtext.cpp'],['../IRtext_8h.html#ada5c81e0fcc4073d6f51e7447e8c5da0',1,'kOutsideStr(): IRtext.cpp']]], - ['kpanasonicac32auto_6182',['kPanasonicAc32Auto',['../ir__Panasonic_8h.html#a3ddd918dd9ccd97fc591a795c665f275',1,'ir_Panasonic.h']]], - ['kpanasonicac32bitmark_6183',['kPanasonicAc32BitMark',['../ir__Panasonic_8cpp.html#acfabc49966b4de99f75af1e364785338',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32bits_6184',['kPanasonicAc32Bits',['../IRremoteESP8266_8h.html#adae68c6e0ebe7d18c344d9cad5ca49f0',1,'IRremoteESP8266.h']]], - ['kpanasonicac32blockspersection_6185',['kPanasonicAc32BlocksPerSection',['../ir__Panasonic_8cpp.html#a1fac8213c4bc8555ed0f3267b0f41d5f',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32cool_6186',['kPanasonicAc32Cool',['../ir__Panasonic_8h.html#afb25de760b1210efd2b6d34ddc1dcee8',1,'ir_Panasonic.h']]], - ['kpanasonicac32dry_6187',['kPanasonicAc32Dry',['../ir__Panasonic_8h.html#a92592f6e966de10510e8547e3863445a',1,'ir_Panasonic.h']]], - ['kpanasonicac32fan_6188',['kPanasonicAc32Fan',['../ir__Panasonic_8h.html#ab18e968771c2ace0b2e053ea61a0327a',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanauto_6189',['kPanasonicAc32FanAuto',['../ir__Panasonic_8h.html#aa093ff0443bb37cecd19331b2147ddb6',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanhigh_6190',['kPanasonicAc32FanHigh',['../ir__Panasonic_8h.html#a010754f8844452de684b2d346f6beb79',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanlow_6191',['kPanasonicAc32FanLow',['../ir__Panasonic_8h.html#af395ea1be8216b63320e7669f582e399',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmax_6192',['kPanasonicAc32FanMax',['../ir__Panasonic_8h.html#a7fa3122beae91071e2fde235a6b76da5',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmed_6193',['kPanasonicAc32FanMed',['../ir__Panasonic_8h.html#ad43a603c7c5d6d52ec7af7b6aa7258af',1,'ir_Panasonic.h']]], - ['kpanasonicac32fanmin_6194',['kPanasonicAc32FanMin',['../ir__Panasonic_8h.html#a3cc712e4dbf4d8ab9b60b4338a1c6831',1,'ir_Panasonic.h']]], - ['kpanasonicac32hdrmark_6195',['kPanasonicAc32HdrMark',['../ir__Panasonic_8cpp.html#a16e84fe3a68d385a51d92924a56edffe',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32hdrspace_6196',['kPanasonicAc32HdrSpace',['../ir__Panasonic_8cpp.html#a1eeb2e9362c9355ea34f6b73eded2612',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32heat_6197',['kPanasonicAc32Heat',['../ir__Panasonic_8h.html#a91581c58624da05d36e3807a4eecfd8a',1,'ir_Panasonic.h']]], - ['kpanasonicac32knowngood_6198',['kPanasonicAc32KnownGood',['../ir__Panasonic_8h.html#aeeca2ce0d19ad601e762a9f1858c2d50',1,'ir_Panasonic.h']]], - ['kpanasonicac32onespace_6199',['kPanasonicAc32OneSpace',['../ir__Panasonic_8cpp.html#aab874afd4e02b558e73ecfbc1c3b46ea',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32sectiongap_6200',['kPanasonicAc32SectionGap',['../ir__Panasonic_8cpp.html#a6e7bfebde7c0a307ce5dc6cbdb8626e0',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32sections_6201',['kPanasonicAc32Sections',['../ir__Panasonic_8cpp.html#a0108f19bc064d5bb55abb341048c298f',1,'ir_Panasonic.cpp']]], - ['kpanasonicac32swingvauto_6202',['kPanasonicAc32SwingVAuto',['../ir__Panasonic_8h.html#a705b34ad74e271656bf8986740658321',1,'ir_Panasonic.h']]], - ['kpanasonicac32zerospace_6203',['kPanasonicAc32ZeroSpace',['../ir__Panasonic_8cpp.html#a5ec58e2129c493ebdb877f934a8af849',1,'ir_Panasonic.cpp']]], - ['kpanasonicacauto_6204',['kPanasonicAcAuto',['../ir__Panasonic_8h.html#aa7c839a4342205c384870e8a4f5ec36b',1,'ir_Panasonic.h']]], - ['kpanasonicacbits_6205',['kPanasonicAcBits',['../IRremoteESP8266_8h.html#a210f5c78b0f90b64dd5037698141433a',1,'IRremoteESP8266.h']]], - ['kpanasonicacchecksuminit_6206',['kPanasonicAcChecksumInit',['../ir__Panasonic_8h.html#a49329b4fef403696effcbcc5c8a86cd2',1,'ir_Panasonic.h']]], - ['kpanasonicaccool_6207',['kPanasonicAcCool',['../ir__Panasonic_8h.html#acfaa3d61fbb13fc6cd8d354f1c0a8dc7',1,'ir_Panasonic.h']]], - ['kpanasonicacdefaultrepeat_6208',['kPanasonicAcDefaultRepeat',['../IRremoteESP8266_8h.html#af6b7c6ad564253cb128ac92c00e86f0c',1,'IRremoteESP8266.h']]], - ['kpanasonicacdry_6209',['kPanasonicAcDry',['../ir__Panasonic_8h.html#a2d211bd2150a67819453f3220dc0cc91',1,'ir_Panasonic.h']]], - ['kpanasonicacexcess_6210',['kPanasonicAcExcess',['../ir__Panasonic_8h.html#adde8b69377faa9a4566dc15e95711257',1,'ir_Panasonic.h']]], - ['kpanasonicacfan_6211',['kPanasonicAcFan',['../ir__Panasonic_8h.html#a87e4dd423bbd1f879a9d5da31e1fea5e',1,'ir_Panasonic.h']]], - ['kpanasonicacfanauto_6212',['kPanasonicAcFanAuto',['../ir__Panasonic_8h.html#a7d4486fd68969af4f7230f12e865c698',1,'ir_Panasonic.h']]], - ['kpanasonicacfandelta_6213',['kPanasonicAcFanDelta',['../ir__Panasonic_8h.html#a2210f85a17fba2bbdfbb883e9fb57e52',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmax_6214',['kPanasonicAcFanMax',['../ir__Panasonic_8h.html#aa4599c84d72ab9c622b642870efb9cf1',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmed_6215',['kPanasonicAcFanMed',['../ir__Panasonic_8h.html#a978004e8e2c4122fec81c5a972b842a0',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmin_6216',['kPanasonicAcFanMin',['../ir__Panasonic_8h.html#a450c7951a525817d27351fb7c8ff2df9',1,'ir_Panasonic.h']]], - ['kpanasonicacfanmodetemp_6217',['kPanasonicAcFanModeTemp',['../ir__Panasonic_8h.html#a76543f9d81c2d109e04359f0c61dcb99',1,'ir_Panasonic.h']]], - ['kpanasonicacheat_6218',['kPanasonicAcHeat',['../ir__Panasonic_8h.html#ac37bb7dd975a9aa803edfc108a5071ed',1,'ir_Panasonic.h']]], - ['kpanasonicacionfilterbyte_6219',['kPanasonicAcIonFilterByte',['../ir__Panasonic_8h.html#a16c946660d2ee3821dd2e30a69144a38',1,'ir_Panasonic.h']]], - ['kpanasonicacionfilteroffset_6220',['kPanasonicAcIonFilterOffset',['../ir__Panasonic_8h.html#a5c1b18d1b834e9d46cbd29c74a1b8269',1,'ir_Panasonic.h']]], - ['kpanasonicacmaxtemp_6221',['kPanasonicAcMaxTemp',['../ir__Panasonic_8h.html#a95fe6bc5b2565bf29d1a6dcee2f0c39f',1,'ir_Panasonic.h']]], - ['kpanasonicacmessagegap_6222',['kPanasonicAcMessageGap',['../ir__Panasonic_8cpp.html#a962cde97e8d98ad32f0b59172b641d6d',1,'ir_Panasonic.cpp']]], - ['kpanasonicacmintemp_6223',['kPanasonicAcMinTemp',['../ir__Panasonic_8h.html#a7861e8477904e1a572bcf35286fd3733',1,'ir_Panasonic.h']]], - ['kpanasonicacofftimeroffset_6224',['kPanasonicAcOffTimerOffset',['../ir__Panasonic_8h.html#a477b61044f1db5c296f13a404c536046',1,'ir_Panasonic.h']]], - ['kpanasonicacontimeroffset_6225',['kPanasonicAcOnTimerOffset',['../ir__Panasonic_8h.html#a64350202f82aabfd1673f0dda4d3c13d',1,'ir_Panasonic.h']]], - ['kpanasonicacpowerfulckpoffset_6226',['kPanasonicAcPowerfulCkpOffset',['../ir__Panasonic_8h.html#aa839301a08c8e49548f497e786dbb6fa',1,'ir_Panasonic.h']]], - ['kpanasonicacpowerfuloffset_6227',['kPanasonicAcPowerfulOffset',['../ir__Panasonic_8h.html#a27e9b1af4b65830015576beed69cb27d',1,'ir_Panasonic.h']]], - ['kpanasonicacpoweroffset_6228',['kPanasonicAcPowerOffset',['../ir__Panasonic_8h.html#a9e9b3d0c77ef93ab472ce14ed1534c77',1,'ir_Panasonic.h']]], - ['kpanasonicacquietckpoffset_6229',['kPanasonicAcQuietCkpOffset',['../ir__Panasonic_8h.html#a5a3779cd6fd8d573ae14ed4a6d676dba',1,'ir_Panasonic.h']]], - ['kpanasonicacquietoffset_6230',['kPanasonicAcQuietOffset',['../ir__Panasonic_8h.html#a1ec8db8798f79dead05233ee6333700d',1,'ir_Panasonic.h']]], - ['kpanasonicacsection1length_6231',['kPanasonicAcSection1Length',['../ir__Panasonic_8cpp.html#a34c6c085d468ed4b35f814452335d334',1,'ir_Panasonic.cpp']]], - ['kpanasonicacsectiongap_6232',['kPanasonicAcSectionGap',['../ir__Panasonic_8cpp.html#a3cf28f1268e8a35da220d42deda7c456',1,'ir_Panasonic.cpp']]], - ['kpanasonicacshortbits_6233',['kPanasonicAcShortBits',['../IRremoteESP8266_8h.html#a2fd1f84669f7994bb3c235a508333c6c',1,'IRremoteESP8266.h']]], - ['kpanasonicacstatelength_6234',['kPanasonicAcStateLength',['../IRremoteESP8266_8h.html#ab21d86545b57738354e7a3b833d38f94',1,'IRremoteESP8266.h']]], - ['kpanasonicacstateshortlength_6235',['kPanasonicAcStateShortLength',['../IRremoteESP8266_8h.html#a0a6ca8c1dfa6f313421ddf268d76d8e6',1,'IRremoteESP8266.h']]], - ['kpanasonicacswinghauto_6236',['kPanasonicAcSwingHAuto',['../ir__Panasonic_8h.html#a91e2933692ad98acf054c7a69f6c2018',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghfullleft_6237',['kPanasonicAcSwingHFullLeft',['../ir__Panasonic_8h.html#abf1d8c53a1b69d99019c6878f9ec220d',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghfullright_6238',['kPanasonicAcSwingHFullRight',['../ir__Panasonic_8h.html#a0e1b7a7591a0f14b2f8be3cb222f1187',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghleft_6239',['kPanasonicAcSwingHLeft',['../ir__Panasonic_8h.html#a853f2c2922e03a975bdd11efc474fa7e',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghmiddle_6240',['kPanasonicAcSwingHMiddle',['../ir__Panasonic_8h.html#afad8a7257fc178321867f16939fff7c7',1,'ir_Panasonic.h']]], - ['kpanasonicacswinghright_6241',['kPanasonicAcSwingHRight',['../ir__Panasonic_8h.html#a282900f1c494efdc6ee057357e624d2e',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvauto_6242',['kPanasonicAcSwingVAuto',['../ir__Panasonic_8h.html#a218e2ea8c76966105c71edcb6e46cd12',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvhigh_6243',['kPanasonicAcSwingVHigh',['../ir__Panasonic_8h.html#a25c63195112c5aedc5b5bad40441c55a',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvhighest_6244',['kPanasonicAcSwingVHighest',['../ir__Panasonic_8h.html#ac1cea523d6e1da08d333e0b4acec81af',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvlow_6245',['kPanasonicAcSwingVLow',['../ir__Panasonic_8h.html#a3ae9b6c5581f1bfb5b31e252052a6c9d',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvlowest_6246',['kPanasonicAcSwingVLowest',['../ir__Panasonic_8h.html#af269e81dae5989c33199d607adcc04a0',1,'ir_Panasonic.h']]], - ['kpanasonicacswingvmiddle_6247',['kPanasonicAcSwingVMiddle',['../ir__Panasonic_8h.html#a5d46c8234f97e10695507b17a7483d51',1,'ir_Panasonic.h']]], - ['kpanasonicactempoffset_6248',['kPanasonicAcTempOffset',['../ir__Panasonic_8h.html#a203e0351cd53db8376312a3289503175',1,'ir_Panasonic.h']]], - ['kpanasonicactempsize_6249',['kPanasonicAcTempSize',['../ir__Panasonic_8h.html#af30649a3489a4a1dc1f655d15c00e991',1,'ir_Panasonic.h']]], - ['kpanasonicactimemax_6250',['kPanasonicAcTimeMax',['../ir__Panasonic_8h.html#a61378ccad09d1a2e900123a8cbd34858',1,'ir_Panasonic.h']]], - ['kpanasonicactimeoverflowsize_6251',['kPanasonicAcTimeOverflowSize',['../ir__Panasonic_8h.html#ad7942b5ffbb2b1f7a5d9b3719592622b',1,'ir_Panasonic.h']]], - ['kpanasonicactimesize_6252',['kPanasonicAcTimeSize',['../ir__Panasonic_8h.html#a16577844a2f5ca46e2dff076952f2963',1,'ir_Panasonic.h']]], - ['kpanasonicactimespecial_6253',['kPanasonicAcTimeSpecial',['../ir__Panasonic_8h.html#aefb20e7cdbbc27e3c0725a8660a84a28',1,'ir_Panasonic.h']]], - ['kpanasonicactolerance_6254',['kPanasonicAcTolerance',['../ir__Panasonic_8h.html#a586a655b3afd82c38588fc1b61089aa1',1,'ir_Panasonic.h']]], - ['kpanasonicbitmark_6255',['kPanasonicBitMark',['../ir__Panasonic_8cpp.html#a428cd02c5dc3dc571e495efa0707cc99',1,'ir_Panasonic.cpp']]], - ['kpanasonicbits_6256',['kPanasonicBits',['../IRremoteESP8266_8h.html#aa148f54492be1cf8a8b285a96861a0b7',1,'IRremoteESP8266.h']]], - ['kpanasonicendgap_6257',['kPanasonicEndGap',['../ir__Panasonic_8cpp.html#a3cb2f7a925bb8374a90e3156febabb39',1,'ir_Panasonic.cpp']]], - ['kpanasonicfreq_6258',['kPanasonicFreq',['../ir__Panasonic_8h.html#af344612d7f1c0d3f8271c312f310243e',1,'ir_Panasonic.h']]], - ['kpanasonichdrmark_6259',['kPanasonicHdrMark',['../ir__Panasonic_8cpp.html#a0d36b699fead0e229c583dae94f5e8f9',1,'ir_Panasonic.cpp']]], - ['kpanasonichdrspace_6260',['kPanasonicHdrSpace',['../ir__Panasonic_8cpp.html#ae56b3eb80f186a63b0f69c6b4e9efce8',1,'ir_Panasonic.cpp']]], - ['kpanasonicknowngoodstate_6261',['kPanasonicKnownGoodState',['../ir__Panasonic_8h.html#a88a9678f8b00efa173b800b0b8441f87',1,'ir_Panasonic.h']]], - ['kpanasonicmanufacturer_6262',['kPanasonicManufacturer',['../IRremoteESP8266_8h.html#a1dd1a9799e5d20d39e82ff678bf07b47',1,'IRremoteESP8266.h']]], - ['kpanasonicmincommandlength_6263',['kPanasonicMinCommandLength',['../ir__Panasonic_8cpp.html#a5f191fff3eeb722cb03bee859a016132',1,'ir_Panasonic.cpp']]], - ['kpanasonicmingap_6264',['kPanasonicMinGap',['../ir__Panasonic_8cpp.html#a61592f3569c0ee4825cca185fb43236d',1,'ir_Panasonic.cpp']]], - ['kpanasoniconespace_6265',['kPanasonicOneSpace',['../ir__Panasonic_8cpp.html#a9069f2ab94cacbd301d7615795c155b1',1,'ir_Panasonic.cpp']]], - ['kpanasoniczerospace_6266',['kPanasonicZeroSpace',['../ir__Panasonic_8cpp.html#a43f64a8326fd2447653c81488673fd21',1,'ir_Panasonic.cpp']]], - ['kperiodoffset_6267',['kPeriodOffset',['../IRsend_8h.html#a3a451a4e72e39a4bbf75c62af0ac62f5',1,'IRsend.h']]], - ['kpioneerbitmark_6268',['kPioneerBitMark',['../ir__Pioneer_8cpp.html#a6117fd080ad88efcf943aef53dadd1ad',1,'ir_Pioneer.cpp']]], - ['kpioneerbits_6269',['kPioneerBits',['../IRremoteESP8266_8h.html#a6a7ccd31e0a6f967a219b1a53b89653b',1,'IRremoteESP8266.h']]], - ['kpioneerhdrmark_6270',['kPioneerHdrMark',['../ir__Pioneer_8cpp.html#a03c4df7d9eba6ab56df0451a18e5adbd',1,'ir_Pioneer.cpp']]], - ['kpioneerhdrspace_6271',['kPioneerHdrSpace',['../ir__Pioneer_8cpp.html#a1308ff993ce7d030bdef919d65f35e62',1,'ir_Pioneer.cpp']]], - ['kpioneermincommandlength_6272',['kPioneerMinCommandLength',['../ir__Pioneer_8cpp.html#a22cb7d70bb0eb3b0ce6c7da3631d832f',1,'ir_Pioneer.cpp']]], - ['kpioneermingap_6273',['kPioneerMinGap',['../ir__Pioneer_8cpp.html#adc67bf557bd3474f18dfaa3125c1af41',1,'ir_Pioneer.cpp']]], - ['kpioneeronespace_6274',['kPioneerOneSpace',['../ir__Pioneer_8cpp.html#a5238b059346168128184bca93de16a54',1,'ir_Pioneer.cpp']]], - ['kpioneertick_6275',['kPioneerTick',['../ir__Pioneer_8cpp.html#a63de2364627344f86537ac82447c5cb4',1,'ir_Pioneer.cpp']]], - ['kpioneerzerospace_6276',['kPioneerZeroSpace',['../ir__Pioneer_8cpp.html#a3c6428f201dd3e32c171d6db44269d67',1,'ir_Pioneer.cpp']]], - ['kpowerbuttonstr_6277',['kPowerButtonStr',['../IRtext_8cpp.html#a69d36084b1410a06aa780edcda9428dd',1,'kPowerButtonStr(): IRtext.cpp'],['../IRtext_8h.html#adb54b8d070a4ba7f08b7d2d0f1c03d1c',1,'kPowerButtonStr(): IRtext.cpp']]], - ['kpowerfulstr_6278',['kPowerfulStr',['../IRtext_8cpp.html#a5dfc12bfa12ddf7da3ab6c216258284a',1,'kPowerfulStr(): IRtext.cpp'],['../IRtext_8h.html#a7980630cd028febca8245730dffa684b',1,'kPowerfulStr(): IRtext.cpp']]], - ['kpowerstr_6279',['kPowerStr',['../IRtext_8cpp.html#a5b4b43efe1f1c27d6aee90ebb3500792',1,'kPowerStr(): IRtext.cpp'],['../IRtext_8h.html#a47a76dc8d87d9694a36c6417d7e19dda',1,'kPowerStr(): IRtext.cpp']]], - ['kpowertogglestr_6280',['kPowerToggleStr',['../IRtext_8cpp.html#a2f7e242dc28cf61fb718bb5c1b681642',1,'kPowerToggleStr(): IRtext.cpp'],['../IRtext_8h.html#afd802a94c6146efb7812ef89f3bf0cc5',1,'kPowerToggleStr(): IRtext.cpp']]], - ['kpreviouspowerstr_6281',['kPreviousPowerStr',['../IRtext_8cpp.html#a2a5cd83ac519798debd7065eb03d5d72',1,'kPreviousPowerStr(): IRtext.cpp'],['../IRtext_8h.html#a9833364e538f50be227ff6c0b01f8f7c',1,'kPreviousPowerStr(): IRtext.cpp']]], - ['kprontodataoffset_6282',['kProntoDataOffset',['../ir__Pronto_8cpp.html#ac073b9ac759e09091b3d80af747656a1',1,'ir_Pronto.cpp']]], - ['kprontofreqfactor_6283',['kProntoFreqFactor',['../ir__Pronto_8cpp.html#aa63eef9baeb563c8494d85d13b956db8',1,'ir_Pronto.cpp']]], - ['kprontofreqoffset_6284',['kProntoFreqOffset',['../ir__Pronto_8cpp.html#a2fae4105559199e292121bcb847d9d52',1,'ir_Pronto.cpp']]], - ['kprontominlength_6285',['kProntoMinLength',['../IRremoteESP8266_8h.html#a25dd42234e21d41b0b4bc97e1fe921c4',1,'IRremoteESP8266.h']]], - ['kprontoseq1lenoffset_6286',['kProntoSeq1LenOffset',['../ir__Pronto_8cpp.html#a1df51305dddf233fc3963856e288366f',1,'ir_Pronto.cpp']]], - ['kprontoseq2lenoffset_6287',['kProntoSeq2LenOffset',['../ir__Pronto_8cpp.html#a708744a9f82547e5abc17d7ed866a648',1,'ir_Pronto.cpp']]], - ['kprontotypeoffset_6288',['kProntoTypeOffset',['../ir__Pronto_8cpp.html#a603ff34f28f270a98bf0bebdaf19bfbc',1,'ir_Pronto.cpp']]], - ['kprotocolstr_6289',['kProtocolStr',['../IRtext_8cpp.html#afb9e901ded9e88a48218282a7446ff63',1,'kProtocolStr(): IRtext.cpp'],['../IRtext_8h.html#ac50f97a0d33041fe4bba6e02c500c8ef',1,'kProtocolStr(): IRtext.cpp']]], - ['kpurifystr_6290',['kPurifyStr',['../IRtext_8cpp.html#a85c2b59f6cba1878648d3d8fe9d7f9a4',1,'kPurifyStr(): IRtext.cpp'],['../IRtext_8h.html#aae574dbb4b9f70db0e64386d61c21beb',1,'kPurifyStr(): IRtext.cpp']]], - ['kquietstr_6291',['kQuietStr',['../IRtext_8cpp.html#a6f85e3119eb884455f474ff909be6b53',1,'kQuietStr(): IRtext.cpp'],['../IRtext_8h.html#a7086660370d73d6f499972cf802db8f7',1,'kQuietStr(): IRtext.cpp']]], - ['krawbuf_6292',['kRawBuf',['../IRrecv_8h.html#aadfa37def10a1adeaf2cf4c09d7504e3',1,'IRrecv.h']]], - ['krawtick_6293',['kRawTick',['../IRrecv_8h.html#a373dde69c312b0122665e581eea1297b',1,'IRrecv.h']]], - ['krc5bits_6294',['kRC5Bits',['../IRremoteESP8266_8h.html#ad0935984e6518e340562665742199483',1,'IRremoteESP8266.h']]], - ['krc5mincommandlength_6295',['kRc5MinCommandLength',['../ir__RC5__RC6_8cpp.html#a32b5997148b53fd2984388f6d0384c35',1,'ir_RC5_RC6.cpp']]], - ['krc5mingap_6296',['kRc5MinGap',['../ir__RC5__RC6_8cpp.html#a26580409f593179d838c465647e35c41',1,'ir_RC5_RC6.cpp']]], - ['krc5rawbits_6297',['kRC5RawBits',['../IRremoteESP8266_8h.html#a955183d3358fcafea853014ddd890574',1,'IRremoteESP8266.h']]], - ['krc5samplesmin_6298',['kRc5SamplesMin',['../ir__RC5__RC6_8cpp.html#aa206173838597c760b4a01c36bbc771a',1,'ir_RC5_RC6.cpp']]], - ['krc5t1_6299',['kRc5T1',['../ir__RC5__RC6_8cpp.html#aa42cae15fa77a196eb8f198de09e19eb',1,'ir_RC5_RC6.cpp']]], - ['krc5togglemask_6300',['kRc5ToggleMask',['../ir__RC5__RC6_8cpp.html#ae3485c1c157d6d84a0385cb1bfb8833a',1,'ir_RC5_RC6.cpp']]], - ['krc5xbits_6301',['kRC5XBits',['../IRremoteESP8266_8h.html#abec3ebb217126560e824fa8b66d495bc',1,'IRremoteESP8266.h']]], - ['krc6_5f36bits_6302',['kRC6_36Bits',['../IRremoteESP8266_8h.html#a30a2cb328aa0d47f53aba56055ac74e0',1,'IRremoteESP8266.h']]], - ['krc6_5f36togglemask_6303',['kRc6_36ToggleMask',['../ir__RC5__RC6_8cpp.html#a31ae862ce2a43edd99bda647262b18fa',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrmark_6304',['kRc6HdrMark',['../ir__RC5__RC6_8cpp.html#ae05bbb9f690cc92feb0a9c14b3b8c477',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrmarkticks_6305',['kRc6HdrMarkTicks',['../ir__RC5__RC6_8cpp.html#aff2a5bc05ddf61d289c44a4fd093009c',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrspace_6306',['kRc6HdrSpace',['../ir__RC5__RC6_8cpp.html#a0196311c9b116cf48c8f901fb6c93ac3',1,'ir_RC5_RC6.cpp']]], - ['krc6hdrspaceticks_6307',['kRc6HdrSpaceTicks',['../ir__RC5__RC6_8cpp.html#a35a9cc59fe5251a34c88e34b6a507fd3',1,'ir_RC5_RC6.cpp']]], - ['krc6mode0bits_6308',['kRC6Mode0Bits',['../IRremoteESP8266_8h.html#a84a6d3e15e98f7a4917d252d5665534a',1,'IRremoteESP8266.h']]], - ['krc6rptlength_6309',['kRc6RptLength',['../ir__RC5__RC6_8cpp.html#a4989f36b790a99545e708c8681b6b961',1,'ir_RC5_RC6.cpp']]], - ['krc6rptlengthticks_6310',['kRc6RptLengthTicks',['../ir__RC5__RC6_8cpp.html#acf2dc0074bfe7671deb8985eba4396e3',1,'ir_RC5_RC6.cpp']]], - ['krc6tick_6311',['kRc6Tick',['../ir__RC5__RC6_8cpp.html#aad98dc2541039634817609d4e297322f',1,'ir_RC5_RC6.cpp']]], - ['krc6togglemask_6312',['kRc6ToggleMask',['../ir__RC5__RC6_8cpp.html#a4df09270c1e9cda504026189e30829ff',1,'ir_RC5_RC6.cpp']]], - ['krcmmbitmark_6313',['kRcmmBitMark',['../ir__RCMM_8cpp.html#ad768f62bbd7e4df567c3e53ea0a8ed06',1,'ir_RCMM.cpp']]], - ['krcmmbitmarkticks_6314',['kRcmmBitMarkTicks',['../ir__RCMM_8cpp.html#a48aeb7992d30f8c7cfa04dbd14ea0996',1,'ir_RCMM.cpp']]], - ['krcmmbits_6315',['kRCMMBits',['../IRremoteESP8266_8h.html#a2bfaf393c2d77a594f2a0a5a763e84f5',1,'IRremoteESP8266.h']]], - ['krcmmbitspace0_6316',['kRcmmBitSpace0',['../ir__RCMM_8cpp.html#a34a7b22107461be18500f6d1ddf979e3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace0ticks_6317',['kRcmmBitSpace0Ticks',['../ir__RCMM_8cpp.html#a0864042e8c098169d1d221fbd798cda3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace1_6318',['kRcmmBitSpace1',['../ir__RCMM_8cpp.html#a812b9895f0eccaaf78752dc7030022aa',1,'ir_RCMM.cpp']]], - ['krcmmbitspace1ticks_6319',['kRcmmBitSpace1Ticks',['../ir__RCMM_8cpp.html#a89f945e0a91feccd505f0b8310a9ebb9',1,'ir_RCMM.cpp']]], - ['krcmmbitspace2_6320',['kRcmmBitSpace2',['../ir__RCMM_8cpp.html#aff0db6a8f28d3a307cd7bbb6dc90e3e3',1,'ir_RCMM.cpp']]], - ['krcmmbitspace2ticks_6321',['kRcmmBitSpace2Ticks',['../ir__RCMM_8cpp.html#a592dda1dd9239c9a015163b80cddf859',1,'ir_RCMM.cpp']]], - ['krcmmbitspace3_6322',['kRcmmBitSpace3',['../ir__RCMM_8cpp.html#a5e6351cbcb4c576871584dbf61d87d33',1,'ir_RCMM.cpp']]], - ['krcmmbitspace3ticks_6323',['kRcmmBitSpace3Ticks',['../ir__RCMM_8cpp.html#aa3f7d7e37ffa6bf9649eef7720770767',1,'ir_RCMM.cpp']]], - ['krcmmexcess_6324',['kRcmmExcess',['../ir__RCMM_8cpp.html#a3845e23031e92fd008157b0f95827432',1,'ir_RCMM.cpp']]], - ['krcmmhdrmark_6325',['kRcmmHdrMark',['../ir__RCMM_8cpp.html#a7fc5d5c1dc89ef0615fcaebaacc504df',1,'ir_RCMM.cpp']]], - ['krcmmhdrmarkticks_6326',['kRcmmHdrMarkTicks',['../ir__RCMM_8cpp.html#a00e93c94548ac081083ed2cabd614330',1,'ir_RCMM.cpp']]], - ['krcmmhdrspace_6327',['kRcmmHdrSpace',['../ir__RCMM_8cpp.html#af4dc2548c8069caf889612b3b28895ea',1,'ir_RCMM.cpp']]], - ['krcmmhdrspaceticks_6328',['kRcmmHdrSpaceTicks',['../ir__RCMM_8cpp.html#a87cd8bb5322fb38aecd20362a7df5016',1,'ir_RCMM.cpp']]], - ['krcmmmingap_6329',['kRcmmMinGap',['../ir__RCMM_8cpp.html#a94f9533bf18c0a2c2b6511ffa95ff5dc',1,'ir_RCMM.cpp']]], - ['krcmmmingapticks_6330',['kRcmmMinGapTicks',['../ir__RCMM_8cpp.html#aacb274f2da878aed511f6ab400cd51e9',1,'ir_RCMM.cpp']]], - ['krcmmrptlength_6331',['kRcmmRptLength',['../ir__RCMM_8cpp.html#a1dccf2b944d4eeb8b7dd2a1f66548a68',1,'ir_RCMM.cpp']]], - ['krcmmrptlengthticks_6332',['kRcmmRptLengthTicks',['../ir__RCMM_8cpp.html#a4cd637fa0a6071f9ea0b52c346ffe7f0',1,'ir_RCMM.cpp']]], - ['krcmmtick_6333',['kRcmmTick',['../ir__RCMM_8cpp.html#a9e1a3a26185d58ff675eec7485bc671f',1,'ir_RCMM.cpp']]], - ['krcmmtolerance_6334',['kRcmmTolerance',['../ir__RCMM_8cpp.html#a4b95480078186b3498ca6426e5bbc428',1,'ir_RCMM.cpp']]], - ['krcz01channelmask_6335',['kRcz01ChannelMask',['../ir__Doshisha_8cpp.html#a085b3d47e4cf8d8b4ba999ae58ec3533',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel1_6336',['kRcz01CommandLevel1',['../ir__Doshisha_8cpp.html#a436b801a282374de0f28e27828e1c4bf',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel2_6337',['kRcz01CommandLevel2',['../ir__Doshisha_8cpp.html#a311ef41fff985236216238565219bfe7',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel3_6338',['kRcz01CommandLevel3',['../ir__Doshisha_8cpp.html#a879bd44f482c87fbaf9fecaad8ed4c6d',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevel4_6339',['kRcz01CommandLevel4',['../ir__Doshisha_8cpp.html#a52bad85f1a3918e3031297a6c6074b45',1,'ir_Doshisha.cpp']]], - ['krcz01commandleveldown_6340',['kRcz01CommandLevelDown',['../ir__Doshisha_8cpp.html#a1678269506503f1abf871ed0af6dcc2b',1,'ir_Doshisha.cpp']]], - ['krcz01commandlevelup_6341',['kRcz01CommandLevelUp',['../ir__Doshisha_8cpp.html#a4eba011d2b110a5348783534e957660e',1,'ir_Doshisha.cpp']]], - ['krcz01commandmask_6342',['kRcz01CommandMask',['../ir__Doshisha_8cpp.html#a148e2f676f895f4e3b77b39780e2ca94',1,'ir_Doshisha.cpp']]], - ['krcz01commandnightlight_6343',['kRcz01CommandNightLight',['../ir__Doshisha_8cpp.html#a47e9d5bf353cf8aef8199fb74693aa0f',1,'ir_Doshisha.cpp']]], - ['krcz01commandoff_6344',['kRcz01CommandOff',['../ir__Doshisha_8cpp.html#a97fd32975ab9fafa85e0704964780773',1,'ir_Doshisha.cpp']]], - ['krcz01commandon_6345',['kRcz01CommandOn',['../ir__Doshisha_8cpp.html#a7377eac8b1d938903fd43d7505dd8a49',1,'ir_Doshisha.cpp']]], - ['krcz01commandswitchchannel_6346',['kRcz01CommandSwitchChannel',['../ir__Doshisha_8cpp.html#afcd3fe98c34ef9572c1a68bd143e128b',1,'ir_Doshisha.cpp']]], - ['krcz01commandtimmer30_6347',['kRcz01CommandTimmer30',['../ir__Doshisha_8cpp.html#a3deebab67d01756f7776f0d11cbdef6e',1,'ir_Doshisha.cpp']]], - ['krcz01commandtimmer60_6348',['kRcz01CommandTimmer60',['../ir__Doshisha_8cpp.html#abac6b50227512508aeb5b6042a8380fd',1,'ir_Doshisha.cpp']]], - ['krcz01signature_6349',['kRcz01Signature',['../ir__Doshisha_8cpp.html#a35c6dff74ae1702933e33f02f743f616',1,'ir_Doshisha.cpp']]], - ['krcz01signaturemask_6350',['kRcz01SignatureMask',['../ir__Doshisha_8cpp.html#a1f3b9cdfba7cc7515611d7145b7318a5',1,'ir_Doshisha.cpp']]], - ['krecyclestr_6351',['kRecycleStr',['../IRtext_8cpp.html#a5159481cec97d0fdfbfac15e43a8c20a',1,'kRecycleStr(): IRtext.cpp'],['../IRtext_8h.html#a91ca83e3aebe460fe74314747580aefa',1,'kRecycleStr(): IRtext.cpp']]], - ['krepeat_6352',['kRepeat',['../IRrecv_8h.html#ae8b11750ba7f2e2d56343f770720ed89',1,'IRrecv.h']]], - ['krepeatstr_6353',['kRepeatStr',['../IRtext_8cpp.html#ad55ef2e023915f39c7ce77e7eeb1ad76',1,'kRepeatStr(): IRtext.cpp'],['../IRtext_8h.html#a74a53cc1564f75b36269eb1ca8c6235b',1,'kRepeatStr(): IRtext.cpp']]], - ['krightmaxstr_6354',['kRightMaxStr',['../IRtext_8cpp.html#af3e63659779f5fdb4aded4861521e564',1,'kRightMaxStr(): IRtext.cpp'],['../IRtext_8h.html#ac7a90008560fd1e7b4ed240f354d8fae',1,'kRightMaxStr(): IRtext.cpp']]], - ['krightstr_6355',['kRightStr',['../IRtext_8cpp.html#aacc9b0b21efb6053b75ed117d4ab9105',1,'kRightStr(): IRtext.cpp'],['../IRtext_8h.html#a953f9c48fcf87e81bf6f383e8fe8b1dd',1,'kRightStr(): IRtext.cpp']]], - ['kroomstr_6356',['kRoomStr',['../IRtext_8cpp.html#ab3f02ff54af9a94fd57d098838a4a642',1,'kRoomStr(): IRtext.cpp'],['../IRtext_8h.html#a5358a85538e4643c1cc109a7a0b90079',1,'kRoomStr(): IRtext.cpp']]], - ['ksamsung36bitmark_6357',['kSamsung36BitMark',['../ir__Samsung_8cpp.html#a2e9bc50c6320d7a1244713b4a1647e71',1,'ir_Samsung.cpp']]], - ['ksamsung36bits_6358',['kSamsung36Bits',['../IRremoteESP8266_8h.html#a5e1e6f30a41f0d94652429a9e1034179',1,'IRremoteESP8266.h']]], - ['ksamsung36hdrmark_6359',['kSamsung36HdrMark',['../ir__Samsung_8cpp.html#a47c0e69d6e21597ea15dc613c58861b6',1,'ir_Samsung.cpp']]], - ['ksamsung36hdrspace_6360',['kSamsung36HdrSpace',['../ir__Samsung_8cpp.html#a4761b62640c0a56ee641c9077fd800dd',1,'ir_Samsung.cpp']]], - ['ksamsung36onespace_6361',['kSamsung36OneSpace',['../ir__Samsung_8cpp.html#a3a913fe500926cf448d7408303e3698c',1,'ir_Samsung.cpp']]], - ['ksamsung36zerospace_6362',['kSamsung36ZeroSpace',['../ir__Samsung_8cpp.html#ac24972846bc1a2240537b212f5aa55d6',1,'ir_Samsung.cpp']]], - ['ksamsungacauto_6363',['kSamsungAcAuto',['../ir__Samsung_8h.html#a1b05ff970f45c57b13fc13d11e95396b',1,'ir_Samsung.h']]], - ['ksamsungacautotemp_6364',['kSamsungAcAutoTemp',['../ir__Samsung_8h.html#a87bb469afc0e2b6bad44634f3ba5e0ef',1,'ir_Samsung.h']]], - ['ksamsungacbitmark_6365',['kSamsungAcBitMark',['../ir__Samsung_8cpp.html#a37e6f36939f1a12ffe52907bbb64a4cf',1,'ir_Samsung.cpp']]], - ['ksamsungacbits_6366',['kSamsungAcBits',['../IRremoteESP8266_8h.html#adebe85ab48eb876ec15daacca246797c',1,'IRremoteESP8266.h']]], - ['ksamsungacbreezeon_6367',['kSamsungAcBreezeOn',['../ir__Samsung_8h.html#a06299ba6942969f7b9472e752b50d4d7',1,'ir_Samsung.h']]], - ['ksamsungaccool_6368',['kSamsungAcCool',['../ir__Samsung_8h.html#a24d40e01f046f887b7d41dad67ad7555',1,'ir_Samsung.h']]], - ['ksamsungacdefaultrepeat_6369',['kSamsungAcDefaultRepeat',['../IRremoteESP8266_8h.html#a973f4e0189fc10805f67b67f708be1e4',1,'IRremoteESP8266.h']]], - ['ksamsungacdry_6370',['kSamsungAcDry',['../ir__Samsung_8h.html#a6423976c7a41f526e7a878cecb257bbd',1,'ir_Samsung.h']]], - ['ksamsungacextendedbits_6371',['kSamsungAcExtendedBits',['../IRremoteESP8266_8h.html#a296e700965e70a622fe99675ff0438af',1,'IRremoteESP8266.h']]], - ['ksamsungacextendedstatelength_6372',['kSamsungAcExtendedStateLength',['../IRremoteESP8266_8h.html#a28039071f1130e9bc86efddd8265cbf9',1,'IRremoteESP8266.h']]], - ['ksamsungacfan_6373',['kSamsungAcFan',['../ir__Samsung_8h.html#a61d825254b26894a2f097ad92a7dbff2',1,'ir_Samsung.h']]], - ['ksamsungacfanauto_6374',['kSamsungAcFanAuto',['../ir__Samsung_8h.html#a37b29911f4d2b71dcdbd18a5d6dc301a',1,'ir_Samsung.h']]], - ['ksamsungacfanauto2_6375',['kSamsungAcFanAuto2',['../ir__Samsung_8h.html#aafa4319fb523b14d58371f757497e82a',1,'ir_Samsung.h']]], - ['ksamsungacfanhigh_6376',['kSamsungAcFanHigh',['../ir__Samsung_8h.html#a52cccad28fad5b9886ef408af02f56f9',1,'ir_Samsung.h']]], - ['ksamsungacfanlow_6377',['kSamsungAcFanLow',['../ir__Samsung_8h.html#a6f16b5b3f2dea3461f5d44379e8b8634',1,'ir_Samsung.h']]], - ['ksamsungacfanmed_6378',['kSamsungAcFanMed',['../ir__Samsung_8h.html#a798c3544dbd6bb6c8622cf45f88abc14',1,'ir_Samsung.h']]], - ['ksamsungacfanturbo_6379',['kSamsungAcFanTurbo',['../ir__Samsung_8h.html#af6c1432748eaa19df35531b87d197095',1,'ir_Samsung.h']]], - ['ksamsungachdrmark_6380',['kSamsungAcHdrMark',['../ir__Samsung_8cpp.html#ab7385ca5b7b417753b253a0f7cb3721b',1,'ir_Samsung.cpp']]], - ['ksamsungachdrspace_6381',['kSamsungAcHdrSpace',['../ir__Samsung_8cpp.html#a1b1f903fff13b10fb2431be9373e27cb',1,'ir_Samsung.cpp']]], - ['ksamsungacheat_6382',['kSamsungAcHeat',['../ir__Samsung_8h.html#a44ce6be7046ec4b4fe9caba7b71b8f0d',1,'ir_Samsung.h']]], - ['ksamsungacmaxtemp_6383',['kSamsungAcMaxTemp',['../ir__Samsung_8h.html#a0a994796db81a3d56dd2c27cad448a71',1,'ir_Samsung.h']]], - ['ksamsungacmintemp_6384',['kSamsungAcMinTemp',['../ir__Samsung_8h.html#ad5f46ccb96335519f5633c33de0d8018',1,'ir_Samsung.h']]], - ['ksamsungaconespace_6385',['kSamsungAcOneSpace',['../ir__Samsung_8cpp.html#ab106d9b7efb165eed83ae2ccef9a49b4',1,'ir_Samsung.cpp']]], - ['ksamsungacpowerful10on_6386',['kSamsungAcPowerful10On',['../ir__Samsung_8h.html#aa05bb4788febba1f56b2b3929ac273a3',1,'ir_Samsung.h']]], - ['ksamsungacpowerfulmask8_6387',['kSamsungAcPowerfulMask8',['../ir__Samsung_8h.html#a39e23325e35688a3641c467b720381ce',1,'ir_Samsung.h']]], - ['ksamsungacpowersection_6388',['kSamsungAcPowerSection',['../ir__Samsung_8h.html#a9264b5d640d9052c153562fd38415676',1,'ir_Samsung.h']]], - ['ksamsungacsectiongap_6389',['kSamsungAcSectionGap',['../ir__Samsung_8cpp.html#a9752fc615c215a93c1ee65edca3a359e',1,'ir_Samsung.cpp']]], - ['ksamsungacsectionlength_6390',['kSamsungAcSectionLength',['../ir__Samsung_8h.html#ad3faedf7b111f1b91d671666e38ce6f3',1,'ir_Samsung.h']]], - ['ksamsungacsectionmark_6391',['kSamsungAcSectionMark',['../ir__Samsung_8cpp.html#a4304073cddaa2da9613dedce499fee56',1,'ir_Samsung.cpp']]], - ['ksamsungacsections_6392',['kSamsungAcSections',['../ir__Samsung_8cpp.html#a86185d98d6e891a17688d9d2a0fa7114',1,'ir_Samsung.cpp']]], - ['ksamsungacsectionspace_6393',['kSamsungAcSectionSpace',['../ir__Samsung_8cpp.html#a4837f502ef9b7c972ec409cf4fc3c605',1,'ir_Samsung.cpp']]], - ['ksamsungacstatelength_6394',['kSamsungAcStateLength',['../IRremoteESP8266_8h.html#a2d07d8c8917fee072a261d00e67e0d36',1,'IRremoteESP8266.h']]], - ['ksamsungacswingmove_6395',['kSamsungAcSwingMove',['../ir__Samsung_8h.html#ab2d2b422e3972f77aef23f77c7cfbbac',1,'ir_Samsung.h']]], - ['ksamsungacswingstop_6396',['kSamsungAcSwingStop',['../ir__Samsung_8h.html#a37c1720d66c4ba02e368946e53036367',1,'ir_Samsung.h']]], - ['ksamsungaczerospace_6397',['kSamsungAcZeroSpace',['../ir__Samsung_8cpp.html#a7492a25e730f93f22c099ab687621b18',1,'ir_Samsung.cpp']]], - ['ksamsungbitmark_6398',['kSamsungBitMark',['../ir__Samsung_8cpp.html#a03f9ae317a7a701437c8015dfde4401f',1,'ir_Samsung.cpp']]], - ['ksamsungbitmarkticks_6399',['kSamsungBitMarkTicks',['../ir__Samsung_8cpp.html#afe1663f83396f7e5cf9bfc32f321e539',1,'ir_Samsung.cpp']]], - ['ksamsungbits_6400',['kSamsungBits',['../IRremoteESP8266_8h.html#a7c1c015cce09284799cbf5a2f21ee170',1,'IRremoteESP8266.h']]], - ['ksamsunghdrmark_6401',['kSamsungHdrMark',['../ir__Samsung_8cpp.html#a3d0598585af609af4c8d5004789d2df7',1,'ir_Samsung.cpp']]], - ['ksamsunghdrmarkticks_6402',['kSamsungHdrMarkTicks',['../ir__Samsung_8cpp.html#a0c81f486877d24bfd40215b089c52f2a',1,'ir_Samsung.cpp']]], - ['ksamsunghdrspace_6403',['kSamsungHdrSpace',['../ir__Samsung_8cpp.html#a2f55c53bfc72de06ff202c8ec401163d',1,'ir_Samsung.cpp']]], - ['ksamsunghdrspaceticks_6404',['kSamsungHdrSpaceTicks',['../ir__Samsung_8cpp.html#a1ae96cedfa4ed26869d295cfbb8056dd',1,'ir_Samsung.cpp']]], - ['ksamsungmingap_6405',['kSamsungMinGap',['../ir__Samsung_8cpp.html#ab13edb242547803b386aa8539a4b9470',1,'ir_Samsung.cpp']]], - ['ksamsungmingapticks_6406',['kSamsungMinGapTicks',['../ir__Samsung_8cpp.html#a55d79dcfcd43f05ebe456a9a2fce3ff0',1,'ir_Samsung.cpp']]], - ['ksamsungminmessagelength_6407',['kSamsungMinMessageLength',['../ir__Samsung_8cpp.html#ae2ec2e45f91f872e85c250c7aac0efc1',1,'ir_Samsung.cpp']]], - ['ksamsungminmessagelengthticks_6408',['kSamsungMinMessageLengthTicks',['../ir__Samsung_8cpp.html#a6d436a1b71158ff9b5d7ae21344cd7d2',1,'ir_Samsung.cpp']]], - ['ksamsungonespace_6409',['kSamsungOneSpace',['../ir__Samsung_8cpp.html#ab486b048d13f44623ee291d4221c2a1b',1,'ir_Samsung.cpp']]], - ['ksamsungonespaceticks_6410',['kSamsungOneSpaceTicks',['../ir__Samsung_8cpp.html#a484a1e3ce3dcbbef15be559bfb5822d0',1,'ir_Samsung.cpp']]], - ['ksamsungrptspace_6411',['kSamsungRptSpace',['../ir__Samsung_8cpp.html#a1cc2f3bcd7f2ca36f0a726828c14aa74',1,'ir_Samsung.cpp']]], - ['ksamsungrptspaceticks_6412',['kSamsungRptSpaceTicks',['../ir__Samsung_8cpp.html#a6864f78ad1428358acbc8b46796e50cc',1,'ir_Samsung.cpp']]], - ['ksamsungtick_6413',['kSamsungTick',['../ir__Samsung_8cpp.html#accd7d51c2714bd383170831372f57bc5',1,'ir_Samsung.cpp']]], - ['ksamsungzerospace_6414',['kSamsungZeroSpace',['../ir__Samsung_8cpp.html#ae2c828a3d099d6195208a3794022587e',1,'ir_Samsung.cpp']]], - ['ksamsungzerospaceticks_6415',['kSamsungZeroSpaceTicks',['../ir__Samsung_8cpp.html#aea63a73a5b0af2c173bc473ee2447a93',1,'ir_Samsung.cpp']]], - ['ksanyoacauto_6416',['kSanyoAcAuto',['../ir__Sanyo_8h.html#a80d3d83c1b85f8c44dd93cc44b30accb',1,'ir_Sanyo.h']]], - ['ksanyoacbitmark_6417',['kSanyoAcBitMark',['../ir__Sanyo_8cpp.html#af738984c8164ff32f3bd91b9263f55c2',1,'ir_Sanyo.cpp']]], - ['ksanyoacbits_6418',['kSanyoAcBits',['../IRremoteESP8266_8h.html#ad3931645167deda3fd0ec72ba33a4034',1,'IRremoteESP8266.h']]], - ['ksanyoaccool_6419',['kSanyoAcCool',['../ir__Sanyo_8h.html#ad6a49260b9097a821cf29fe87796456d',1,'ir_Sanyo.h']]], - ['ksanyoacdry_6420',['kSanyoAcDry',['../ir__Sanyo_8h.html#a5e0645e5f69dc627d130e4bca1751b5c',1,'ir_Sanyo.h']]], - ['ksanyoacfanauto_6421',['kSanyoAcFanAuto',['../ir__Sanyo_8h.html#a7bc8d0e04bdf32a3d7147a8ee4f0fc9c',1,'ir_Sanyo.h']]], - ['ksanyoacfanhigh_6422',['kSanyoAcFanHigh',['../ir__Sanyo_8h.html#a34a75f871c7b2648641830bf8210be0b',1,'ir_Sanyo.h']]], - ['ksanyoacfanlow_6423',['kSanyoAcFanLow',['../ir__Sanyo_8h.html#a3a0bfc84856de44bc2bce7cb63f61414',1,'ir_Sanyo.h']]], - ['ksanyoacfanmedium_6424',['kSanyoAcFanMedium',['../ir__Sanyo_8h.html#a54189bf27e6cbcbe03b9898985a3486f',1,'ir_Sanyo.h']]], - ['ksanyoacfreq_6425',['kSanyoAcFreq',['../ir__Sanyo_8cpp.html#a85397f4fba50f4409467435ae22a003c',1,'ir_Sanyo.cpp']]], - ['ksanyoacgap_6426',['kSanyoAcGap',['../ir__Sanyo_8cpp.html#a20213c79f423cb292a55be3618ff1f2f',1,'ir_Sanyo.cpp']]], - ['ksanyoachdrmark_6427',['kSanyoAcHdrMark',['../ir__Sanyo_8cpp.html#a0b1b08bcc921bbbe6686c699c1aaad2e',1,'ir_Sanyo.cpp']]], - ['ksanyoachdrspace_6428',['kSanyoAcHdrSpace',['../ir__Sanyo_8cpp.html#a8c09cce29f3791eb80c1546be5e5535c',1,'ir_Sanyo.cpp']]], - ['ksanyoacheat_6429',['kSanyoAcHeat',['../ir__Sanyo_8h.html#aacdcd75fdf538881354662454c95e8b5',1,'ir_Sanyo.h']]], - ['ksanyoachourmax_6430',['kSanyoAcHourMax',['../ir__Sanyo_8h.html#aeaa1ba34ec4f7bb2e66e1c63e78ad864',1,'ir_Sanyo.h']]], - ['ksanyoaconespace_6431',['kSanyoAcOneSpace',['../ir__Sanyo_8cpp.html#ac9e641f6e3e07a8938ed28a656281122',1,'ir_Sanyo.cpp']]], - ['ksanyoacpoweroff_6432',['kSanyoAcPowerOff',['../ir__Sanyo_8h.html#a1777504e5870f0e29846cda7a17bb3fd',1,'ir_Sanyo.h']]], - ['ksanyoacpoweron_6433',['kSanyoAcPowerOn',['../ir__Sanyo_8h.html#a6e3da0779d665696d36a03b445ca82ea',1,'ir_Sanyo.h']]], - ['ksanyoacstatelength_6434',['kSanyoAcStateLength',['../IRremoteESP8266_8h.html#ae3128c987a1571fb6b021ffe30079663',1,'IRremoteESP8266.h']]], - ['ksanyoacswingvauto_6435',['kSanyoAcSwingVAuto',['../ir__Sanyo_8h.html#afce45a19ba8cdff528dac0ee8b13bb66',1,'ir_Sanyo.h']]], - ['ksanyoacswingvhigh_6436',['kSanyoAcSwingVHigh',['../ir__Sanyo_8h.html#a4cdea5c3718a4a869d1e914a7a8ee2af',1,'ir_Sanyo.h']]], - ['ksanyoacswingvhighest_6437',['kSanyoAcSwingVHighest',['../ir__Sanyo_8h.html#a64b28da09adf0416c49640264ccb760b',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlow_6438',['kSanyoAcSwingVLow',['../ir__Sanyo_8h.html#aaef1fa9d1ef8f92f59525b09175f6048',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlowermiddle_6439',['kSanyoAcSwingVLowerMiddle',['../ir__Sanyo_8h.html#a11141a0d31bca64561eed3be5698a5a6',1,'ir_Sanyo.h']]], - ['ksanyoacswingvlowest_6440',['kSanyoAcSwingVLowest',['../ir__Sanyo_8h.html#a3d97c9b2da1c26ba5943996f76aa4f3f',1,'ir_Sanyo.h']]], - ['ksanyoacswingvuppermiddle_6441',['kSanyoAcSwingVUpperMiddle',['../ir__Sanyo_8h.html#a314f05625e1985042dc6e2a4866c51df',1,'ir_Sanyo.h']]], - ['ksanyoactempdelta_6442',['kSanyoAcTempDelta',['../ir__Sanyo_8h.html#ac0991e0a826fae8228e1064d5d803edc',1,'ir_Sanyo.h']]], - ['ksanyoactempmax_6443',['kSanyoAcTempMax',['../ir__Sanyo_8h.html#aa4222421c4571c9e34d39f01a2c71394',1,'ir_Sanyo.h']]], - ['ksanyoactempmin_6444',['kSanyoAcTempMin',['../ir__Sanyo_8h.html#a59fb387ec5657ba8ff301b9198703b9a',1,'ir_Sanyo.h']]], - ['ksanyoaczerospace_6445',['kSanyoAcZeroSpace',['../ir__Sanyo_8cpp.html#a9a600476008e4462df534ee98c732c1b',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461addressbits_6446',['kSanyoLC7461AddressBits',['../IRremoteESP8266_8h.html#a7e15e988acbea0fb4dfaee6f5bfa12d0',1,'IRremoteESP8266.h']]], - ['ksanyolc7461addressmask_6447',['kSanyoLc7461AddressMask',['../ir__Sanyo_8cpp.html#a785ccc066e433f11791f8a30243944d3',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461bitmark_6448',['kSanyoLc7461BitMark',['../ir__Sanyo_8cpp.html#a1360ba5ac3f30715c00a6a65155cfec8',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461bits_6449',['kSanyoLC7461Bits',['../IRremoteESP8266_8h.html#ad067db05b273337e0df38d529094c9e8',1,'IRremoteESP8266.h']]], - ['ksanyolc7461commandbits_6450',['kSanyoLC7461CommandBits',['../IRremoteESP8266_8h.html#a5cd69a192be51634ce72a40398a6c0d7',1,'IRremoteESP8266.h']]], - ['ksanyolc7461commandmask_6451',['kSanyoLc7461CommandMask',['../ir__Sanyo_8cpp.html#abdd072e210a7616d564a9d4a7f798ad3',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461hdrmark_6452',['kSanyoLc7461HdrMark',['../ir__Sanyo_8cpp.html#a0b2e520442dd96f8cd77969230713277',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461hdrspace_6453',['kSanyoLc7461HdrSpace',['../ir__Sanyo_8cpp.html#aa9ca2469e22f66d6e5e3f4ef952484ba',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461mincommandlength_6454',['kSanyoLc7461MinCommandLength',['../ir__Sanyo_8cpp.html#a237fac9264bba0014124a815133868b2',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461mingap_6455',['kSanyoLc7461MinGap',['../ir__Sanyo_8cpp.html#aff7f31500dbe9939e223bed6b6c631a8',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461onespace_6456',['kSanyoLc7461OneSpace',['../ir__Sanyo_8cpp.html#a52716e37d6943b01e9df37956f1a83de',1,'ir_Sanyo.cpp']]], - ['ksanyolc7461zerospace_6457',['kSanyoLc7461ZeroSpace',['../ir__Sanyo_8cpp.html#a4e386992c8fca642c259e86e34729a4d',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bbits_6458',['kSanyoSA8650BBits',['../IRremoteESP8266_8h.html#a2c572c8bfa811b7dc3a8a537cc642b85',1,'IRremoteESP8266.h']]], - ['ksanyosa8650bdoublespaceusecs_6459',['kSanyoSa8650bDoubleSpaceUsecs',['../ir__Sanyo_8cpp.html#a828caf6fd05e81cedee67c558b88a0b6',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bhdrmark_6460',['kSanyoSa8650bHdrMark',['../ir__Sanyo_8cpp.html#a9d0472d183a96b8ca71a2b704a06cac8',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bhdrspace_6461',['kSanyoSa8650bHdrSpace',['../ir__Sanyo_8cpp.html#ab432df3bd299b72b4449672d611798b7',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bonemark_6462',['kSanyoSa8650bOneMark',['../ir__Sanyo_8cpp.html#a8854c7bd32c1ec53e8e1869cd9dd8cdd',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650brptlength_6463',['kSanyoSa8650bRptLength',['../ir__Sanyo_8cpp.html#a327ee6de7027aacfa9aa6ee8bdc74e3e',1,'ir_Sanyo.cpp']]], - ['ksanyosa8650bzeromark_6464',['kSanyoSa8650bZeroMark',['../ir__Sanyo_8cpp.html#a516a45a7934f23274fa302d7e711b43c',1,'ir_Sanyo.cpp']]], - ['ksavestr_6465',['kSaveStr',['../IRtext_8cpp.html#a24f9462727ee596a3ae16393c33e3ebc',1,'kSaveStr(): IRtext.cpp'],['../IRtext_8h.html#acb40b78a5269c43cc3e4f44d3da01069',1,'kSaveStr(): IRtext.cpp']]], - ['ksecondsstr_6466',['kSecondsStr',['../IRtext_8cpp.html#a282cb9785839a9da66a9333d788c0fb1',1,'kSecondsStr(): IRtext.cpp'],['../IRtext_8h.html#ad736b59d3fe45b3c06bd301af4d7b455',1,'kSecondsStr(): IRtext.cpp']]], - ['ksecondstr_6467',['kSecondStr',['../IRtext_8cpp.html#a5ec55e16709cbd2c4b1ff8c72c01c1f5',1,'kSecondStr(): IRtext.cpp'],['../IRtext_8h.html#ad3489e1c008bc517b8bf0271c40252d1',1,'kSecondStr(): IRtext.cpp']]], - ['ksensorstr_6468',['kSensorStr',['../IRtext_8cpp.html#aa7e6eab2fbc832f98d6560f62453c934',1,'kSensorStr(): IRtext.cpp'],['../IRtext_8h.html#a56ee9a96dd0a7ee0a5f95c286f6ea7e8',1,'kSensorStr(): IRtext.cpp']]], - ['ksensortempstr_6469',['kSensorTempStr',['../IRtext_8cpp.html#a756daa989457676d2af255428a01e1d5',1,'kSensorTempStr(): IRtext.cpp'],['../IRtext_8h.html#a03e76a09bade0c229fea1ce31fe8c9a1',1,'kSensorTempStr(): IRtext.cpp']]], - ['ksetstr_6470',['kSetStr',['../IRtext_8cpp.html#a27b5e437df44d4d41db9b296a1f236a1',1,'kSetStr(): IRtext.cpp'],['../IRtext_8h.html#a31d3426b8a8d1a35c47c88ef00023fce',1,'kSetStr(): IRtext.cpp']]], - ['ksharpacauto_6471',['kSharpAcAuto',['../ir__Sharp_8h.html#ad4e228b234598a84e11a76e7f2d27199',1,'ir_Sharp.h']]], - ['ksharpacbitmark_6472',['kSharpAcBitMark',['../ir__Sharp_8h.html#ae73dd2c91b531bf3a52641b36f56ead7',1,'ir_Sharp.h']]], - ['ksharpacbits_6473',['kSharpAcBits',['../IRremoteESP8266_8h.html#a6c106a982acced5d8aeef98644002ca2',1,'IRremoteESP8266.h']]], - ['ksharpacbytetemp_6474',['kSharpAcByteTemp',['../ir__Sharp_8h.html#a1b67ab12ed664517124fe3c1d7325927',1,'ir_Sharp.h']]], - ['ksharpaccool_6475',['kSharpAcCool',['../ir__Sharp_8h.html#ae828d7e915f69cc1e9538839fc51c895',1,'ir_Sharp.h']]], - ['ksharpacdefaultrepeat_6476',['kSharpAcDefaultRepeat',['../IRremoteESP8266_8h.html#a7f0438831899e3df16f9002717c818b9',1,'IRremoteESP8266.h']]], - ['ksharpacdry_6477',['kSharpAcDry',['../ir__Sharp_8h.html#a50ae949b473ed4a6482fa00d747b2c0f',1,'ir_Sharp.h']]], - ['ksharpacfan_6478',['kSharpAcFan',['../ir__Sharp_8h.html#a4b8ec70fe3b83debdc6b3a1440cfe3e4',1,'ir_Sharp.h']]], - ['ksharpacfana705low_6479',['kSharpAcFanA705Low',['../ir__Sharp_8h.html#a49b66950f998c99cc516a68cd5490691',1,'ir_Sharp.h']]], - ['ksharpacfana705med_6480',['kSharpAcFanA705Med',['../ir__Sharp_8h.html#a80d5e21efa5286b1eff937913915c492',1,'ir_Sharp.h']]], - ['ksharpacfanauto_6481',['kSharpAcFanAuto',['../ir__Sharp_8h.html#a2ef78269271593420ea2bdc20025ca69',1,'ir_Sharp.h']]], - ['ksharpacfanhigh_6482',['kSharpAcFanHigh',['../ir__Sharp_8h.html#af29136d64c2f2a2515918ccf0ff0f594',1,'ir_Sharp.h']]], - ['ksharpacfanmax_6483',['kSharpAcFanMax',['../ir__Sharp_8h.html#a8b0aaa58a5f4caabea84e3b448793054',1,'ir_Sharp.h']]], - ['ksharpacfanmed_6484',['kSharpAcFanMed',['../ir__Sharp_8h.html#a7607f054da76f5e1508abf42d9cd71fc',1,'ir_Sharp.h']]], - ['ksharpacfanmin_6485',['kSharpAcFanMin',['../ir__Sharp_8h.html#a2372fdfbb0d8c2163a3eae5b8eda570a',1,'ir_Sharp.h']]], - ['ksharpacgap_6486',['kSharpAcGap',['../ir__Sharp_8h.html#a777eb0358ce3ef4528f086ff9ff7cd8d',1,'ir_Sharp.h']]], - ['ksharpachdrmark_6487',['kSharpAcHdrMark',['../ir__Sharp_8h.html#aff6f1e55de051762a0def881a5bb555c',1,'ir_Sharp.h']]], - ['ksharpachdrspace_6488',['kSharpAcHdrSpace',['../ir__Sharp_8h.html#a0ea5ff96afd358a8ad1be8d8ed808f04',1,'ir_Sharp.h']]], - ['ksharpacheat_6489',['kSharpAcHeat',['../ir__Sharp_8h.html#ab546d06a0b1f3477f88282f764f208cb',1,'ir_Sharp.h']]], - ['ksharpacmaxtemp_6490',['kSharpAcMaxTemp',['../ir__Sharp_8h.html#a6cfb060ea8c2f650fdd73b055cfda00a',1,'ir_Sharp.h']]], - ['ksharpacmintemp_6491',['kSharpAcMinTemp',['../ir__Sharp_8h.html#ad9ac5214b6cc780d9424ec7d038fe837',1,'ir_Sharp.h']]], - ['ksharpacofftimertype_6492',['kSharpAcOffTimerType',['../ir__Sharp_8h.html#ada633bea9c6c2ffd234c8262e92cebd5',1,'ir_Sharp.h']]], - ['ksharpaconespace_6493',['kSharpAcOneSpace',['../ir__Sharp_8h.html#a20e8eb7c8763fbddb20530badbaab38b',1,'ir_Sharp.h']]], - ['ksharpacontimertype_6494',['kSharpAcOnTimerType',['../ir__Sharp_8h.html#adce8625b00931645c7ccf54edf263c59',1,'ir_Sharp.h']]], - ['ksharpacpoweroff_6495',['kSharpAcPowerOff',['../ir__Sharp_8h.html#a5c13882a47bdd289507e8a5a23ec99d6',1,'ir_Sharp.h']]], - ['ksharpacpoweron_6496',['kSharpAcPowerOn',['../ir__Sharp_8h.html#af485487ea50dd2f9bc153e5f83dc5cf9',1,'ir_Sharp.h']]], - ['ksharpacpoweronfromoff_6497',['kSharpAcPowerOnFromOff',['../ir__Sharp_8h.html#ae484cf776fa47542f4d693c29052fc9f',1,'ir_Sharp.h']]], - ['ksharpacpowersetspecialoff_6498',['kSharpAcPowerSetSpecialOff',['../ir__Sharp_8h.html#a93b22ba4b5e68f8185ed28a6bb7c05dd',1,'ir_Sharp.h']]], - ['ksharpacpowersetspecialon_6499',['kSharpAcPowerSetSpecialOn',['../ir__Sharp_8h.html#a67aff6b22c0cfb89debb8ade7239f07e',1,'ir_Sharp.h']]], - ['ksharpacpowertimersetting_6500',['kSharpAcPowerTimerSetting',['../ir__Sharp_8h.html#a208cb9446ea1f42db42a1f6e24b61219',1,'ir_Sharp.h']]], - ['ksharpacpowerunknown_6501',['kSharpAcPowerUnknown',['../ir__Sharp_8h.html#ab20172b860fa1401607f0678c682640f',1,'ir_Sharp.h']]], - ['ksharpacspecialfan_6502',['kSharpAcSpecialFan',['../ir__Sharp_8h.html#a6c1a1c535150f973eecb1a131d0c4780',1,'ir_Sharp.h']]], - ['ksharpacspecialpower_6503',['kSharpAcSpecialPower',['../ir__Sharp_8h.html#a843585897995ee15e39af0d452d8660d',1,'ir_Sharp.h']]], - ['ksharpacspecialswing_6504',['kSharpAcSpecialSwing',['../ir__Sharp_8h.html#a34127a7df393d2a5a84ca90e60e8507a',1,'ir_Sharp.h']]], - ['ksharpacspecialtempecono_6505',['kSharpAcSpecialTempEcono',['../ir__Sharp_8h.html#af2dcb54fc26802d1818ef88e6ddfc819',1,'ir_Sharp.h']]], - ['ksharpacspecialtimer_6506',['kSharpAcSpecialTimer',['../ir__Sharp_8h.html#a539b21c344db53fbfd4f17c91ab98139',1,'ir_Sharp.h']]], - ['ksharpacspecialtimerhalfhour_6507',['kSharpAcSpecialTimerHalfHour',['../ir__Sharp_8h.html#a1f9bf40a4af95689947c09559ed049bf',1,'ir_Sharp.h']]], - ['ksharpacspecialturbo_6508',['kSharpAcSpecialTurbo',['../ir__Sharp_8h.html#a270bb2bc83d4eb8974f498dd8eb299bb',1,'ir_Sharp.h']]], - ['ksharpacstatelength_6509',['kSharpAcStateLength',['../IRremoteESP8266_8h.html#a5192edb9406a8572e393918bab69e3c6',1,'IRremoteESP8266.h']]], - ['ksharpacswingnotoggle_6510',['kSharpAcSwingNoToggle',['../ir__Sharp_8h.html#a9c56d4f694ea69921ba2cb75f67426d6',1,'ir_Sharp.h']]], - ['ksharpacswingtoggle_6511',['kSharpAcSwingToggle',['../ir__Sharp_8h.html#aa6db653d25f67214819292b8f86af0e6',1,'ir_Sharp.h']]], - ['ksharpactimerhoursmax_6512',['kSharpAcTimerHoursMax',['../ir__Sharp_8h.html#a63af01993ba1e539dfb8dae67f42b9ae',1,'ir_Sharp.h']]], - ['ksharpactimerhoursoff_6513',['kSharpAcTimerHoursOff',['../ir__Sharp_8h.html#a462c10c12d828ba58d589cc365bd7be3',1,'ir_Sharp.h']]], - ['ksharpactimerincrement_6514',['kSharpAcTimerIncrement',['../ir__Sharp_8h.html#af32638e308a7034eb013b7ea9569273e',1,'ir_Sharp.h']]], - ['ksharpaczerospace_6515',['kSharpAcZeroSpace',['../ir__Sharp_8h.html#a5310e0404daae1a6e534dbaeaa9a9939',1,'ir_Sharp.h']]], - ['ksharpaddressbits_6516',['kSharpAddressBits',['../IRremoteESP8266_8h.html#a79c2f3cc459267cf0261124ddef47f5e',1,'IRremoteESP8266.h']]], - ['ksharpaddressmask_6517',['kSharpAddressMask',['../ir__Sharp_8cpp.html#a84fba003383cd4652fc804b97002f464',1,'ir_Sharp.cpp']]], - ['ksharpbitmark_6518',['kSharpBitMark',['../ir__Sharp_8cpp.html#ae2adc2bffb2b024faab8da363621733f',1,'ir_Sharp.cpp']]], - ['ksharpbitmarkticks_6519',['kSharpBitMarkTicks',['../ir__Sharp_8cpp.html#aa64bd0c359add4038c0143b5774627bb',1,'ir_Sharp.cpp']]], - ['ksharpbits_6520',['kSharpBits',['../IRremoteESP8266_8h.html#a8a74f9d7cec751cc0945fd89fa6237ae',1,'IRremoteESP8266.h']]], - ['ksharpcommandbits_6521',['kSharpCommandBits',['../IRremoteESP8266_8h.html#ae4cdfc8e358ec738d20c1bda49842ccf',1,'IRremoteESP8266.h']]], - ['ksharpcommandmask_6522',['kSharpCommandMask',['../ir__Sharp_8cpp.html#ad44eda54ade4bef4fdf4451fdb784950',1,'ir_Sharp.cpp']]], - ['ksharpgap_6523',['kSharpGap',['../ir__Sharp_8cpp.html#a77015be2a04274bcb332ec21cb75251e',1,'ir_Sharp.cpp']]], - ['ksharpgapticks_6524',['kSharpGapTicks',['../ir__Sharp_8cpp.html#a4aa110ec2934797f71ddf9bcd34498d1',1,'ir_Sharp.cpp']]], - ['ksharponespace_6525',['kSharpOneSpace',['../ir__Sharp_8cpp.html#a3359539480a203db37c2cf2efd88fdcc',1,'ir_Sharp.cpp']]], - ['ksharponespaceticks_6526',['kSharpOneSpaceTicks',['../ir__Sharp_8cpp.html#a12e18dfd195faae6ca581936434c9063',1,'ir_Sharp.cpp']]], - ['ksharptick_6527',['kSharpTick',['../ir__Sharp_8cpp.html#af417ab19220576243753903657923ba7',1,'ir_Sharp.cpp']]], - ['ksharptogglemask_6528',['kSharpToggleMask',['../ir__Sharp_8cpp.html#a2701123f01683c6927c23c7699bce13a',1,'ir_Sharp.cpp']]], - ['ksharpzerospace_6529',['kSharpZeroSpace',['../ir__Sharp_8cpp.html#ac2ad6123d938999e234896e1635e3063',1,'ir_Sharp.cpp']]], - ['ksharpzerospaceticks_6530',['kSharpZeroSpaceTicks',['../ir__Sharp_8cpp.html#af8c638f77ff29c2d20555343be80e5f0',1,'ir_Sharp.cpp']]], - ['ksherwoodbits_6531',['kSherwoodBits',['../IRremoteESP8266_8h.html#a94abd640c9e7aa225f4a8873a1ddea6a',1,'IRremoteESP8266.h']]], - ['ksherwoodminrepeat_6532',['kSherwoodMinRepeat',['../IRremoteESP8266_8h.html#a2e00b92b55657fc4e140eb85e3a414dc',1,'IRremoteESP8266.h']]], - ['ksilentstr_6533',['kSilentStr',['../IRtext_8cpp.html#a398d3c627c5b95c5d7adfb5308fc7de0',1,'kSilentStr(): IRtext.cpp'],['../IRtext_8h.html#a8efb4256a49dc0acd27d6995851d585e',1,'kSilentStr(): IRtext.cpp']]], - ['ksinglerepeat_6534',['kSingleRepeat',['../IRremoteESP8266_8h.html#a46835b1e2d279570fd818749e88180d4',1,'IRremoteESP8266.h']]], - ['ksleepstr_6535',['kSleepStr',['../IRtext_8cpp.html#a38068788c0ef50e6034dbcffeec1eb36',1,'kSleepStr(): IRtext.cpp'],['../IRtext_8h.html#af9ac743c367e179723b128ad69f124c5',1,'kSleepStr(): IRtext.cpp']]], - ['ksleeptimerstr_6536',['kSleepTimerStr',['../IRtext_8cpp.html#a3402e1f6d78e3c59b71bd0dfdf020b51',1,'kSleepTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a86639857f884487cf3bedc91e71d6faa',1,'kSleepTimerStr(): IRtext.cpp']]], - ['kslowstr_6537',['kSlowStr',['../IRtext_8cpp.html#a3131a17a06dff31058579b301227a04f',1,'kSlowStr(): IRtext.cpp'],['../IRtext_8h.html#a171736ab5e3d59198ed740ea5fd93473',1,'kSlowStr(): IRtext.cpp']]], - ['ksony12bits_6538',['kSony12Bits',['../IRremoteESP8266_8h.html#aa16fdf708a67dbe22c85ad4bac9b05b6',1,'IRremoteESP8266.h']]], - ['ksony15bits_6539',['kSony15Bits',['../IRremoteESP8266_8h.html#ad868d68d289d618ace266519afa059f4',1,'IRremoteESP8266.h']]], - ['ksony20bits_6540',['kSony20Bits',['../IRremoteESP8266_8h.html#aa9cd1ff8036f6c3a288c4f34af4a5eb4',1,'IRremoteESP8266.h']]], - ['ksonyaltfreq_6541',['kSonyAltFreq',['../ir__Sony_8cpp.html#a05912a15a9a6a4a78416600adc7e526b',1,'ir_Sony.cpp']]], - ['ksonyhdrmark_6542',['kSonyHdrMark',['../ir__Sony_8cpp.html#afac5a232c82e81ac257ddfc94aa4f379',1,'ir_Sony.cpp']]], - ['ksonyhdrmarkticks_6543',['kSonyHdrMarkTicks',['../ir__Sony_8cpp.html#a89abc5f0556f38d462202d1de78cbddb',1,'ir_Sony.cpp']]], - ['ksonyminbits_6544',['kSonyMinBits',['../IRremoteESP8266_8h.html#a6f0794107a7643e0bec8de6de9e7621b',1,'IRremoteESP8266.h']]], - ['ksonymingap_6545',['kSonyMinGap',['../ir__Sony_8cpp.html#abfe3a5e1fa2a38ee556326b1ea0e7e11',1,'ir_Sony.cpp']]], - ['ksonymingapticks_6546',['kSonyMinGapTicks',['../ir__Sony_8cpp.html#a150d62f71f79295153bac4694bae0aa3',1,'ir_Sony.cpp']]], - ['ksonyminrepeat_6547',['kSonyMinRepeat',['../IRremoteESP8266_8h.html#a112408429fb4a5cca22a66a351453bad',1,'IRremoteESP8266.h']]], - ['ksonyonemark_6548',['kSonyOneMark',['../ir__Sony_8cpp.html#a490e7ca2b0f81848ae42eb57d0023d13',1,'ir_Sony.cpp']]], - ['ksonyonemarkticks_6549',['kSonyOneMarkTicks',['../ir__Sony_8cpp.html#ad41c0d0496661c2e066056de6974bfe9',1,'ir_Sony.cpp']]], - ['ksonyrptlength_6550',['kSonyRptLength',['../ir__Sony_8cpp.html#a24578b92cf53caa48fa3660f16ec90ec',1,'ir_Sony.cpp']]], - ['ksonyrptlengthticks_6551',['kSonyRptLengthTicks',['../ir__Sony_8cpp.html#a0a7f67ba27e03c35d5df35a2a14a1e19',1,'ir_Sony.cpp']]], - ['ksonyspace_6552',['kSonySpace',['../ir__Sony_8cpp.html#ad09a9eb0dc0b809cea0d0a2a8ff6b9fb',1,'ir_Sony.cpp']]], - ['ksonyspaceticks_6553',['kSonySpaceTicks',['../ir__Sony_8cpp.html#a80dccfab869821cadaf02df664d91eda',1,'ir_Sony.cpp']]], - ['ksonystdfreq_6554',['kSonyStdFreq',['../ir__Sony_8cpp.html#a5e5b14c45909411d160e051f0bc7c63d',1,'ir_Sony.cpp']]], - ['ksonytick_6555',['kSonyTick',['../ir__Sony_8cpp.html#a7ced75a5e9f06f5c68132665d27e01b8',1,'ir_Sony.cpp']]], - ['ksonyzeromark_6556',['kSonyZeroMark',['../ir__Sony_8cpp.html#a7808995a9d2755681f1461d578d5480b',1,'ir_Sony.cpp']]], - ['ksonyzeromarkticks_6557',['kSonyZeroMarkTicks',['../ir__Sony_8cpp.html#a542aed17f98a11ca89456eec507a5225',1,'ir_Sony.cpp']]], - ['kspace_6558',['kSpace',['../ir__Lasertag_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_Lasertag.cpp'],['../ir__MWM_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_MWM.cpp'],['../ir__RC5__RC6_8cpp.html#a7c41a2a72148172c93e39d5a2fd64036',1,'kSpace(): ir_RC5_RC6.cpp']]], - ['kspacelbracestr_6559',['kSpaceLBraceStr',['../IRtext_8cpp.html#a156ef0014809a3509e7b254a9585e0a1',1,'kSpaceLBraceStr(): IRtext.cpp'],['../IRtext_8h.html#a42a2d6b1e764138a5e20b7a34e0cff03',1,'kSpaceLBraceStr(): IRtext.cpp']]], - ['kspacestate_6560',['kSpaceState',['../IRrecv_8h.html#acc0d1931164a8967c210eb03a2d03e2a',1,'IRrecv.h']]], - ['kspecialstr_6561',['kSpecialStr',['../IRtext_8cpp.html#ae80b543c1a3933ec7da34b5a8880fde6',1,'kSpecialStr(): IRtext.cpp'],['../IRtext_8h.html#a37413264af775b482dec58e9fe3dbb44',1,'kSpecialStr(): IRtext.cpp']]], - ['kstartoffset_6562',['kStartOffset',['../IRrecv_8h.html#a44a836a34428f8f75b1ae566de4bb972',1,'IRrecv.h']]], - ['kstartstr_6563',['kStartStr',['../IRtext_8cpp.html#a2075a48eed571455a88e7dfbc3a547ef',1,'kStartStr(): IRtext.cpp'],['../IRtext_8h.html#ad030c0930697d3c295f3783e8519995c',1,'kStartStr(): IRtext.cpp']]], - ['kstatesizemax_6564',['kStateSizeMax',['../IRrecv_8h.html#ab7d82cf4c0937c9b1d59d75f6f347ab2',1,'IRrecv.h']]], - ['kstepstr_6565',['kStepStr',['../IRtext_8cpp.html#ac6c64c4bdc955b6528616db3a4b303c1',1,'kStepStr(): IRtext.cpp'],['../IRtext_8h.html#ad8cc5f179089e8497a9670492429d7e3',1,'kStepStr(): IRtext.cpp']]], - ['kstopstate_6566',['kStopState',['../IRrecv_8h.html#a0e87ae8496a061e394bc9f7f3415a9b3',1,'IRrecv.h']]], - ['kstopstr_6567',['kStopStr',['../IRtext_8cpp.html#a0466188f9064d18622304cd375b18390',1,'kStopStr(): IRtext.cpp'],['../IRtext_8h.html#a7037a67c71778fe06f9dc9b4363f6f9b',1,'kStopStr(): IRtext.cpp']]], - ['ksuperstr_6568',['kSuperStr',['../IRtext_8cpp.html#a81e6c76017bc819882a043ac8fcc2854',1,'kSuperStr(): IRtext.cpp'],['../IRtext_8h.html#af83fbe756a22ef800d40bc738be886c7',1,'kSuperStr(): IRtext.cpp']]], - ['kswinghstr_6569',['kSwingHStr',['../IRtext_8cpp.html#a12d4e0afe0f6b96af817ebc95eb0b6f4',1,'kSwingHStr(): IRtext.cpp'],['../IRtext_8h.html#acfad569446290c1da0c102b98344411c',1,'kSwingHStr(): IRtext.cpp']]], - ['kswingstr_6570',['kSwingStr',['../IRtext_8cpp.html#a106174aef3a46450c0a16bef7c36a8c5',1,'kSwingStr(): IRtext.cpp'],['../IRtext_8h.html#a56d1a94eae3422758b2762da008e243c',1,'kSwingStr(): IRtext.cpp']]], - ['kswingvmodestr_6571',['kSwingVModeStr',['../IRtext_8cpp.html#ab71be957190939e2b4643f2e56e1201f',1,'kSwingVModeStr(): IRtext.cpp'],['../IRtext_8h.html#a0c801e35becc1eab4cdf0076e1c99485',1,'kSwingVModeStr(): IRtext.cpp']]], - ['kswingvstr_6572',['kSwingVStr',['../IRtext_8cpp.html#a6dc1ec788e0659e82219534b5dbb79bc',1,'kSwingVStr(): IRtext.cpp'],['../IRtext_8h.html#a8415af77afcb671c3729d604be51fd22',1,'kSwingVStr(): IRtext.cpp']]], - ['kswingvtogglestr_6573',['kSwingVToggleStr',['../ir__Midea_8h.html#acb6aaab538b7aeb884e9c0fdb46cea90',1,'kSwingVToggleStr(): ir_Midea.h'],['../IRtext_8cpp.html#a3efcf06e5ac4d6309bad1b1d0e49a933',1,'kSwingVToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a27ae4d475898878bd8e71111066629c6',1,'kSwingVToggleStr(): ir_Midea.h']]], - ['ksymphonybits_6574',['kSymphonyBits',['../IRremoteESP8266_8h.html#abb5b89578ab0757999530c0383f38533',1,'IRremoteESP8266.h']]], - ['ksymphonydefaultrepeat_6575',['kSymphonyDefaultRepeat',['../IRremoteESP8266_8h.html#a219b8495f77932c200680f7a2b133880',1,'IRremoteESP8266.h']]], - ['ksymphonyfootergap_6576',['kSymphonyFooterGap',['../ir__Symphony_8cpp.html#a363cf54f4e752932d5e341975c2445f4',1,'ir_Symphony.cpp']]], - ['ksymphonyonemark_6577',['kSymphonyOneMark',['../ir__Symphony_8cpp.html#a469bfa8046ba75f9ba7cda4996dd785d',1,'ir_Symphony.cpp']]], - ['ksymphonyonespace_6578',['kSymphonyOneSpace',['../ir__Symphony_8cpp.html#ab699747bdf28d5a89920041e9c5bb01b',1,'ir_Symphony.cpp']]], - ['ksymphonyzeromark_6579',['kSymphonyZeroMark',['../ir__Symphony_8cpp.html#a58f27b1b9da16ffe73448c7ae3998fc9',1,'ir_Symphony.cpp']]], - ['ksymphonyzerospace_6580',['kSymphonyZeroSpace',['../ir__Symphony_8cpp.html#a9aaf8db419618de847573d2019155287',1,'ir_Symphony.cpp']]], - ['ktcl112acauto_6581',['kTcl112AcAuto',['../ir__Tcl_8h.html#a11a982cc182e446d53ded658cb7a08b6',1,'ir_Tcl.h']]], - ['ktcl112acbitmark_6582',['kTcl112AcBitMark',['../ir__Tcl_8h.html#a45360de532d2262246bf57cb7c08604d',1,'ir_Tcl.h']]], - ['ktcl112acbits_6583',['kTcl112AcBits',['../IRremoteESP8266_8h.html#a4a60d79056d70d3d56067b0bb2ec00f4',1,'IRremoteESP8266.h']]], - ['ktcl112accool_6584',['kTcl112AcCool',['../ir__Tcl_8h.html#a4a4b778086b3ebf856b750fe0c4bd2c0',1,'ir_Tcl.h']]], - ['ktcl112acdefaultrepeat_6585',['kTcl112AcDefaultRepeat',['../IRremoteESP8266_8h.html#a97c82cec6d72845d9ab8a201b0fa5034',1,'IRremoteESP8266.h']]], - ['ktcl112acdry_6586',['kTcl112AcDry',['../ir__Tcl_8h.html#a1d9ec40c278fedf87acb7420ef861101',1,'ir_Tcl.h']]], - ['ktcl112acfan_6587',['kTcl112AcFan',['../ir__Tcl_8h.html#ae07f3dd0a84be27bcb13ba60f4fd025b',1,'ir_Tcl.h']]], - ['ktcl112acfanauto_6588',['kTcl112AcFanAuto',['../ir__Tcl_8h.html#a099935d6d2bf6ebb28332005036c59c0',1,'ir_Tcl.h']]], - ['ktcl112acfanhigh_6589',['kTcl112AcFanHigh',['../ir__Tcl_8h.html#aab9672bac3e83b2e3b3d2cc5f1aa0e1f',1,'ir_Tcl.h']]], - ['ktcl112acfanlow_6590',['kTcl112AcFanLow',['../ir__Tcl_8h.html#a5114fe3f978672fc62c0cd16f6d46dd7',1,'ir_Tcl.h']]], - ['ktcl112acfanmed_6591',['kTcl112AcFanMed',['../ir__Tcl_8h.html#ad8f34f1972da347a169e2eb4ddf3d835',1,'ir_Tcl.h']]], - ['ktcl112acgap_6592',['kTcl112AcGap',['../ir__Tcl_8h.html#a9ccdf5ce9ce325b9813dadbdc855a469',1,'ir_Tcl.h']]], - ['ktcl112achdrmark_6593',['kTcl112AcHdrMark',['../ir__Tcl_8h.html#a56f9f7daf3ada77f8f844afd46a80de9',1,'ir_Tcl.h']]], - ['ktcl112achdrmarktolerance_6594',['kTcl112AcHdrMarkTolerance',['../ir__Tcl_8h.html#ab9d980747b2ddd1b7fb04f00d71af1e7',1,'ir_Tcl.h']]], - ['ktcl112achdrspace_6595',['kTcl112AcHdrSpace',['../ir__Tcl_8h.html#a9135b4d7496383ad3a7da7c3ac7c92b4',1,'ir_Tcl.h']]], - ['ktcl112acheat_6596',['kTcl112AcHeat',['../ir__Tcl_8h.html#ae573f856f0bdf50406e9be84b1aa8ade',1,'ir_Tcl.h']]], - ['ktcl112aconespace_6597',['kTcl112AcOneSpace',['../ir__Tcl_8h.html#af1e67019978260ba3f514cd895b54dad',1,'ir_Tcl.h']]], - ['ktcl112acstatelength_6598',['kTcl112AcStateLength',['../IRremoteESP8266_8h.html#a23ba2f5af02242e14ae7eefcd066152e',1,'IRremoteESP8266.h']]], - ['ktcl112acswingvoff_6599',['kTcl112AcSwingVOff',['../ir__Tcl_8h.html#aa78e1b544f392c251093d458e5d21e12',1,'ir_Tcl.h']]], - ['ktcl112acswingvon_6600',['kTcl112AcSwingVOn',['../ir__Tcl_8h.html#a5406fbabd66478d601aebc6939a3788f',1,'ir_Tcl.h']]], - ['ktcl112actempmax_6601',['kTcl112AcTempMax',['../ir__Tcl_8h.html#a60efbe31031e1e9c3a17c7d80cac54cb',1,'ir_Tcl.h']]], - ['ktcl112actempmin_6602',['kTcl112AcTempMin',['../ir__Tcl_8h.html#a30fe65ec015bc4d91cd35ead9cc43dcc',1,'ir_Tcl.h']]], - ['ktcl112actolerance_6603',['kTcl112AcTolerance',['../ir__Tcl_8h.html#a13bbe794b2b59763f7f93f15a3f26820',1,'ir_Tcl.h']]], - ['ktcl112aczerospace_6604',['kTcl112AcZeroSpace',['../ir__Tcl_8h.html#abc05edaeb1a4fa7e6ccf9bda1f66b483',1,'ir_Tcl.h']]], - ['ktechnibelacbitmark_6605',['kTechnibelAcBitMark',['../ir__Technibel_8cpp.html#a82529fd6c6fd51f036b1930613ed5e9b',1,'ir_Technibel.cpp']]], - ['ktechnibelacbits_6606',['kTechnibelAcBits',['../IRremoteESP8266_8h.html#a0c4bc77a2443037598940b955c83eb82',1,'IRremoteESP8266.h']]], - ['ktechnibelaccool_6607',['kTechnibelAcCool',['../ir__Technibel_8h.html#aa0a74f362c3d9160660763d89195b387',1,'ir_Technibel.h']]], - ['ktechnibelacdefaultrepeat_6608',['kTechnibelAcDefaultRepeat',['../IRremoteESP8266_8h.html#a0e797e69cca806e73c902f5d9dfe1bf1',1,'IRremoteESP8266.h']]], - ['ktechnibelacdry_6609',['kTechnibelAcDry',['../ir__Technibel_8h.html#afb6b5b6b2e88fb06f1706c57e03672d8',1,'ir_Technibel.h']]], - ['ktechnibelacfan_6610',['kTechnibelAcFan',['../ir__Technibel_8h.html#a9b9c7971f9f76dbb8b742727f48408d6',1,'ir_Technibel.h']]], - ['ktechnibelacfanhigh_6611',['kTechnibelAcFanHigh',['../ir__Technibel_8h.html#a7ec8f7e2911b0a8db8714aa06377a017',1,'ir_Technibel.h']]], - ['ktechnibelacfanlow_6612',['kTechnibelAcFanLow',['../ir__Technibel_8h.html#a3be4c4dbdfe0ef1ab7f7f2308ee5f906',1,'ir_Technibel.h']]], - ['ktechnibelacfanmedium_6613',['kTechnibelAcFanMedium',['../ir__Technibel_8h.html#ae390f138de9e24940a066a75f960ce67',1,'ir_Technibel.h']]], - ['ktechnibelacfansize_6614',['kTechnibelAcFanSize',['../ir__Technibel_8h.html#a29d3d827bd0486f4f1c6c8090bfae7b3',1,'ir_Technibel.h']]], - ['ktechnibelacfreq_6615',['kTechnibelAcFreq',['../ir__Technibel_8cpp.html#ab5e0c7c1bd254eb3dff6e81153cdce95',1,'ir_Technibel.cpp']]], - ['ktechnibelacgap_6616',['kTechnibelAcGap',['../ir__Technibel_8cpp.html#a9e400dd55fa32e3c91880a55a87e1e5e',1,'ir_Technibel.cpp']]], - ['ktechnibelachdrmark_6617',['kTechnibelAcHdrMark',['../ir__Technibel_8cpp.html#af72f1210a259c1dde24fc39e6b026521',1,'ir_Technibel.cpp']]], - ['ktechnibelachdrspace_6618',['kTechnibelAcHdrSpace',['../ir__Technibel_8cpp.html#a1703e3c4105c858b4534b0e40302cfae',1,'ir_Technibel.cpp']]], - ['ktechnibelacheader_6619',['kTechnibelAcHeader',['../ir__Technibel_8h.html#a11b2a3eaded5d7890c65f8eaa7c445a6',1,'ir_Technibel.h']]], - ['ktechnibelacheaderoffset_6620',['kTechnibelAcHeaderOffset',['../ir__Technibel_8h.html#a750df711adeb31d902ca20b572c6f541',1,'ir_Technibel.h']]], - ['ktechnibelacheat_6621',['kTechnibelAcHeat',['../ir__Technibel_8h.html#a517fa48501655e8d4f0f86146a8761d3',1,'ir_Technibel.h']]], - ['ktechnibelaconespace_6622',['kTechnibelAcOneSpace',['../ir__Technibel_8cpp.html#ae70ce0b82874c4bc0797f510353e2cc3',1,'ir_Technibel.cpp']]], - ['ktechnibelacresetstate_6623',['kTechnibelAcResetState',['../ir__Technibel_8h.html#a1c526f7f53f689c095c70687d6bd20ee',1,'ir_Technibel.h']]], - ['ktechnibelactempmaxc_6624',['kTechnibelAcTempMaxC',['../ir__Technibel_8h.html#a141efb22c7ac16c9218ecfde9577b132',1,'ir_Technibel.h']]], - ['ktechnibelactempmaxf_6625',['kTechnibelAcTempMaxF',['../ir__Technibel_8h.html#a048b6c574309291de654ee0340ffbe3c',1,'ir_Technibel.h']]], - ['ktechnibelactempminc_6626',['kTechnibelAcTempMinC',['../ir__Technibel_8h.html#a82962d65e7835dc589bd2a9ace171de7',1,'ir_Technibel.h']]], - ['ktechnibelactempminf_6627',['kTechnibelAcTempMinF',['../ir__Technibel_8h.html#acbe3d2e41a0c2bf1b8857ab97cbb7b3c',1,'ir_Technibel.h']]], - ['ktechnibelactimerhoursoffset_6628',['kTechnibelAcTimerHoursOffset',['../ir__Technibel_8h.html#a6f4c74a83e3734474d84dc305f975cd1',1,'ir_Technibel.h']]], - ['ktechnibelactimermax_6629',['kTechnibelAcTimerMax',['../ir__Technibel_8h.html#af689f2686034aa45b19be75077a0baa6',1,'ir_Technibel.h']]], - ['ktechnibelaczerospace_6630',['kTechnibelAcZeroSpace',['../ir__Technibel_8cpp.html#a28f5833aa7529badc4785fac661974b4',1,'ir_Technibel.cpp']]], - ['ktecoauto_6631',['kTecoAuto',['../ir__Teco_8h.html#a79178aa25d9f60c0a838285369e1b910',1,'ir_Teco.h']]], - ['ktecobitmark_6632',['kTecoBitMark',['../ir__Teco_8cpp.html#a0aa2e352f4a61027b17467e92863883b',1,'ir_Teco.cpp']]], - ['ktecobits_6633',['kTecoBits',['../IRremoteESP8266_8h.html#aee01958e9d97a70a6881cf560ca0ca9d',1,'IRremoteESP8266.h']]], - ['ktecocool_6634',['kTecoCool',['../ir__Teco_8h.html#a554686c72b6bc487d03c9461f9633a6b',1,'ir_Teco.h']]], - ['ktecodefaultrepeat_6635',['kTecoDefaultRepeat',['../IRremoteESP8266_8h.html#a095362359f34c1ee5ab71d56e6d64f64',1,'IRremoteESP8266.h']]], - ['ktecodry_6636',['kTecoDry',['../ir__Teco_8h.html#af7efcf371967eb97fd31d54016a82006',1,'ir_Teco.h']]], - ['ktecofan_6637',['kTecoFan',['../ir__Teco_8h.html#a7385fe198242c9203e3a5d5ffb7beb4d',1,'ir_Teco.h']]], - ['ktecofanauto_6638',['kTecoFanAuto',['../ir__Teco_8h.html#a43e58c0158efac1c4e5497c619b5674c',1,'ir_Teco.h']]], - ['ktecofanhigh_6639',['kTecoFanHigh',['../ir__Teco_8h.html#a0a73f5f892e7f9812793fbf5dab458dd',1,'ir_Teco.h']]], - ['ktecofanlow_6640',['kTecoFanLow',['../ir__Teco_8h.html#abac7443a86fb304376dd94a9c10e6940',1,'ir_Teco.h']]], - ['ktecofanmed_6641',['kTecoFanMed',['../ir__Teco_8h.html#a35f313943f9e2f5b69d5237fdaa64914',1,'ir_Teco.h']]], - ['ktecogap_6642',['kTecoGap',['../ir__Teco_8cpp.html#a6a153d84287fba3bd11e3e5054fd7e30',1,'ir_Teco.cpp']]], - ['ktecohdrmark_6643',['kTecoHdrMark',['../ir__Teco_8cpp.html#ada983ce2d6f03949cddfe06191ab05d9',1,'ir_Teco.cpp']]], - ['ktecohdrspace_6644',['kTecoHdrSpace',['../ir__Teco_8cpp.html#acf417d42fd39dbaf06282162ab5b17e2',1,'ir_Teco.cpp']]], - ['ktecoheat_6645',['kTecoHeat',['../ir__Teco_8h.html#ab6f9dbeb2838b124be12d08fd9b209bb',1,'ir_Teco.h']]], - ['ktecomaxtemp_6646',['kTecoMaxTemp',['../ir__Teco_8h.html#a1c24aa0cc4d475a5eb97d5208f4dcf06',1,'ir_Teco.h']]], - ['ktecomintemp_6647',['kTecoMinTemp',['../ir__Teco_8h.html#a54da99bfcbea5e076c3ca2934e769ab1',1,'ir_Teco.h']]], - ['ktecoonespace_6648',['kTecoOneSpace',['../ir__Teco_8cpp.html#a62eccbf6773ea8fbc18432627c62d0d5',1,'ir_Teco.cpp']]], - ['ktecoreset_6649',['kTecoReset',['../ir__Teco_8h.html#acf559a2cd772835ce46c3f673cd95806',1,'ir_Teco.h']]], - ['ktecozerospace_6650',['kTecoZeroSpace',['../ir__Teco_8cpp.html#a8dc1f6ea44519a0930b48f69a83a7363',1,'ir_Teco.cpp']]], - ['ktempdownstr_6651',['kTempDownStr',['../IRtext_8cpp.html#a3fa3262c5631c9357a5723c70dc3be12',1,'kTempDownStr(): IRtext.cpp'],['../IRtext_8h.html#a3d367a899d7e8ed20844bb3c48bf6395',1,'kTempDownStr(): IRtext.cpp']]], - ['ktempstr_6652',['kTempStr',['../IRtext_8cpp.html#a487bd9a4225536aba2595be0b5cb8039',1,'kTempStr(): IRtext.cpp'],['../IRtext_8h.html#a87652df1cf724353547f27a9ebde5edb',1,'kTempStr(): IRtext.cpp']]], - ['ktempupstr_6653',['kTempUpStr',['../IRtext_8cpp.html#a7c4f18322b600aaaf5a8716654d05dc3',1,'kTempUpStr(): IRtext.cpp'],['../IRtext_8h.html#a71687df5bc94e4ca18cf59c9ff238e86',1,'kTempUpStr(): IRtext.cpp']]], - ['kthreeletterdayofweekstr_6654',['kThreeLetterDayOfWeekStr',['../IRtext_8cpp.html#ae16da0464743313a1fbeae92dcfcebbd',1,'kThreeLetterDayOfWeekStr(): IRtext.cpp'],['../IRtext_8h.html#a837ecfeff9a1bc7546016229e9f2ddfb',1,'kThreeLetterDayOfWeekStr(): IRtext.cpp']]], - ['ktimeoutms_6655',['kTimeoutMs',['../IRrecv_8h.html#ad37e9659aaef29c541802d9759e0ab7b',1,'IRrecv.h']]], - ['ktimerstr_6656',['kTimerStr',['../IRtext_8cpp.html#a2b5219ba887cfbc578fb880ebada832a',1,'kTimerStr(): IRtext.cpp'],['../IRtext_8h.html#a36fa3584a89f6e48757eba8f3df7e109',1,'kTimerStr(): IRtext.cpp']]], - ['ktimesep_6657',['kTimeSep',['../IRtext_8cpp.html#a277b588db53ec31ab7b0d287310c6d50',1,'kTimeSep(): IRtext.cpp'],['../IRtext_8h.html#a277b588db53ec31ab7b0d287310c6d50',1,'kTimeSep(): IRtext.cpp']]], - ['ktogglestr_6658',['kToggleStr',['../IRtext_8cpp.html#a33860b90859d19191c9759b099283b37',1,'kToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a05b1e2f809dadf05e22e1cb1d1a7f07e',1,'kToggleStr(): IRtext.cpp']]], - ['ktolerance_6659',['kTolerance',['../IRrecv_8h.html#a7884008b3a738dfc7bd8658655e10272',1,'IRrecv.h']]], - ['ktopstr_6660',['kTopStr',['../IRtext_8cpp.html#a65a8bf89c9dd0277607478277c0c7088',1,'kTopStr(): IRtext.cpp'],['../IRtext_8h.html#a6bb6abfc54409b801dcb591f036635d2',1,'kTopStr(): IRtext.cpp']]], - ['ktoshibaacauto_6661',['kToshibaAcAuto',['../ir__Toshiba_8h.html#a4730189595a884ae6535805948e096aa',1,'ir_Toshiba.h']]], - ['ktoshibaacbitmark_6662',['kToshibaAcBitMark',['../ir__Toshiba_8cpp.html#adff1c244103ff274243b8e20ca209866',1,'ir_Toshiba.cpp']]], - ['ktoshibaacbits_6663',['kToshibaACBits',['../IRremoteESP8266_8h.html#a172dde7867fa9a68902c3ad7ea9629b0',1,'IRremoteESP8266.h']]], - ['ktoshibaacbitslong_6664',['kToshibaACBitsLong',['../IRremoteESP8266_8h.html#aaf9e746cb8ee9e246f435ba4416a5428',1,'IRremoteESP8266.h']]], - ['ktoshibaacbitsshort_6665',['kToshibaACBitsShort',['../IRremoteESP8266_8h.html#a7483cfe84003b0e24bfa846c240afc4c',1,'IRremoteESP8266.h']]], - ['ktoshibaaccool_6666',['kToshibaAcCool',['../ir__Toshiba_8h.html#a2f30e65bb092365d1a8bcb1f3395333a',1,'ir_Toshiba.h']]], - ['ktoshibaacdry_6667',['kToshibaAcDry',['../ir__Toshiba_8h.html#a10b77d1038efc59775398789c33af91e',1,'ir_Toshiba.h']]], - ['ktoshibaaceconoon_6668',['kToshibaAcEconoOn',['../ir__Toshiba_8h.html#ab95da2ea12790cd327519615dbb48efe',1,'ir_Toshiba.h']]], - ['ktoshibaacfan_6669',['kToshibaAcFan',['../ir__Toshiba_8h.html#a4ecdbe268368c9d22a690bc5e394586f',1,'ir_Toshiba.h']]], - ['ktoshibaacfanauto_6670',['kToshibaAcFanAuto',['../ir__Toshiba_8h.html#a69f52e19a5b0e68abda00b680fbef7f6',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmax_6671',['kToshibaAcFanMax',['../ir__Toshiba_8h.html#a0f6ffde3491f464166d6064d7dfe5ba4',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmed_6672',['kToshibaAcFanMed',['../ir__Toshiba_8h.html#a3ff967af7d1a30c7c5cb958eaa5cbd58',1,'ir_Toshiba.h']]], - ['ktoshibaacfanmin_6673',['kToshibaAcFanMin',['../ir__Toshiba_8h.html#ab2c5eea9ccabf2e0e56bc03baec5d898',1,'ir_Toshiba.h']]], - ['ktoshibaachdrmark_6674',['kToshibaAcHdrMark',['../ir__Toshiba_8cpp.html#a2eac25ff2a381ad6690623641153a780',1,'ir_Toshiba.cpp']]], - ['ktoshibaachdrspace_6675',['kToshibaAcHdrSpace',['../ir__Toshiba_8cpp.html#a0ae9047d5a204f320c06736fa40d0a7d',1,'ir_Toshiba.cpp']]], - ['ktoshibaacheat_6676',['kToshibaAcHeat',['../ir__Toshiba_8h.html#aa9ec24f9a5e460aa7017f642ce7a4c0d',1,'ir_Toshiba.h']]], - ['ktoshibaacinvertedlength_6677',['kToshibaAcInvertedLength',['../ir__Toshiba_8h.html#adfc646265ec1e4a03646d7f3b867d65b',1,'ir_Toshiba.h']]], - ['ktoshibaaclengthbyte_6678',['kToshibaAcLengthByte',['../ir__Toshiba_8h.html#a4e3f39edb4cc3a8c7b94ff9cce0e01d0',1,'ir_Toshiba.h']]], - ['ktoshibaacmaxtemp_6679',['kToshibaAcMaxTemp',['../ir__Toshiba_8h.html#a475028a2a519e3310506ceac0a5dc4e6',1,'ir_Toshiba.h']]], - ['ktoshibaacmingap_6680',['kToshibaAcMinGap',['../ir__Toshiba_8cpp.html#ade7642284aa7c6a638b9fab45610cc59',1,'ir_Toshiba.cpp']]], - ['ktoshibaacminlength_6681',['kToshibaAcMinLength',['../ir__Toshiba_8h.html#a105b24e11afdd102097c81bf050a0f3a',1,'ir_Toshiba.h']]], - ['ktoshibaacminrepeat_6682',['kToshibaACMinRepeat',['../IRremoteESP8266_8h.html#a8fca6a7c3cd608ff49cab35f24af0546',1,'IRremoteESP8266.h']]], - ['ktoshibaacmintemp_6683',['kToshibaAcMinTemp',['../ir__Toshiba_8h.html#ad0e8e76aabc38ac7ba2f13a009de98e0',1,'ir_Toshiba.h']]], - ['ktoshibaacoff_6684',['kToshibaAcOff',['../ir__Toshiba_8h.html#a58b75ee3ddd1325bd4da71902d840c1d',1,'ir_Toshiba.h']]], - ['ktoshibaaconespace_6685',['kToshibaAcOneSpace',['../ir__Toshiba_8cpp.html#a787330c9e5f9d30e8df157acc15f56dd',1,'ir_Toshiba.cpp']]], - ['ktoshibaacstatelength_6686',['kToshibaACStateLength',['../IRremoteESP8266_8h.html#ad3be6a1b9241c20bb1464a2cb80b97d2',1,'IRremoteESP8266.h']]], - ['ktoshibaacstatelengthlong_6687',['kToshibaACStateLengthLong',['../IRremoteESP8266_8h.html#a3c0ebc01f8a61422c26b84e78fcec8f7',1,'IRremoteESP8266.h']]], - ['ktoshibaacstatelengthshort_6688',['kToshibaACStateLengthShort',['../IRremoteESP8266_8h.html#a5fa111fa9d560834605eff2941c0cacc',1,'IRremoteESP8266.h']]], - ['ktoshibaacswingoff_6689',['kToshibaAcSwingOff',['../ir__Toshiba_8h.html#ab556d401c0f8d822a7ef9db5c89d9c87',1,'ir_Toshiba.h']]], - ['ktoshibaacswingon_6690',['kToshibaAcSwingOn',['../ir__Toshiba_8h.html#ac5815fcd06c734de58253e64f0b4fb7f',1,'ir_Toshiba.h']]], - ['ktoshibaacswingstep_6691',['kToshibaAcSwingStep',['../ir__Toshiba_8h.html#aff168c247bc0ea425f805f595cb14012',1,'ir_Toshiba.h']]], - ['ktoshibaacswingtoggle_6692',['kToshibaAcSwingToggle',['../ir__Toshiba_8h.html#a0a2c37d609c5085f68bdfcaef1d8a05e',1,'ir_Toshiba.h']]], - ['ktoshibaacturboon_6693',['kToshibaAcTurboOn',['../ir__Toshiba_8h.html#a8f84e028f12a8fac27366893b65faba7',1,'ir_Toshiba.h']]], - ['ktoshibaacusualgap_6694',['kToshibaAcUsualGap',['../ir__Toshiba_8cpp.html#ab8b9142b37e7cbecac3544f016791a78',1,'ir_Toshiba.cpp']]], - ['ktoshibaaczerospace_6695',['kToshibaAcZeroSpace',['../ir__Toshiba_8cpp.html#ab2fc2833cfb31d872894073687eebd99',1,'ir_Toshiba.cpp']]], - ['ktranscoldauto_6696',['kTranscoldAuto',['../ir__Transcold_8h.html#ad764a143afb464fe25fe5d670241ef87',1,'ir_Transcold.h']]], - ['ktranscoldbitmark_6697',['kTranscoldBitMark',['../ir__Transcold_8cpp.html#acc3092436f39e583e4a2e51851543fec',1,'ir_Transcold.cpp']]], - ['ktranscoldbits_6698',['kTranscoldBits',['../IRremoteESP8266_8h.html#abe50a182c1f65378337705d2784e2fdb',1,'IRremoteESP8266.h']]], - ['ktranscoldcmdfan_6699',['kTranscoldCmdFan',['../ir__Transcold_8h.html#a97b418d9a169e5e79f1ee08fd433c62f',1,'ir_Transcold.h']]], - ['ktranscoldcool_6700',['kTranscoldCool',['../ir__Transcold_8h.html#ad1fcfe19e632b7dc8489cee494d48436',1,'ir_Transcold.h']]], - ['ktranscolddefaultrepeat_6701',['kTranscoldDefaultRepeat',['../IRremoteESP8266_8h.html#a17cef98fbfae6a84c0a3e009fb3c31d0',1,'IRremoteESP8266.h']]], - ['ktranscolddry_6702',['kTranscoldDry',['../ir__Transcold_8h.html#a2f185d4fb3a103c15b537557e24aff09',1,'ir_Transcold.h']]], - ['ktranscoldfan_6703',['kTranscoldFan',['../ir__Transcold_8h.html#a7710625ad8497f1baa6a6d4de2ca8be1',1,'ir_Transcold.h']]], - ['ktranscoldfanauto_6704',['kTranscoldFanAuto',['../ir__Transcold_8h.html#a89f832806c8b3d7311070a285fc757ec',1,'ir_Transcold.h']]], - ['ktranscoldfanauto0_6705',['kTranscoldFanAuto0',['../ir__Transcold_8h.html#a813d31eace1b1a6c4d7b2efb5eddb9af',1,'ir_Transcold.h']]], - ['ktranscoldfanfixed_6706',['kTranscoldFanFixed',['../ir__Transcold_8h.html#ac3afe530635393f2d642cecd7e77b131',1,'ir_Transcold.h']]], - ['ktranscoldfanmax_6707',['kTranscoldFanMax',['../ir__Transcold_8h.html#aa5b9f6cd6aa930a856b26e7714575e85',1,'ir_Transcold.h']]], - ['ktranscoldfanmed_6708',['kTranscoldFanMed',['../ir__Transcold_8h.html#ad37f4a57666b991be80e647de6b4ca65',1,'ir_Transcold.h']]], - ['ktranscoldfanmin_6709',['kTranscoldFanMin',['../ir__Transcold_8h.html#a4ddaefba3d91ee7aa25b603f1034af9c',1,'ir_Transcold.h']]], - ['ktranscoldfantempcode_6710',['kTranscoldFanTempCode',['../ir__Transcold_8h.html#a57eef64332f604b0c71557270ae255ad',1,'ir_Transcold.h']]], - ['ktranscoldfanzonefollow_6711',['kTranscoldFanZoneFollow',['../ir__Transcold_8h.html#aa78ff958ca560d1db1e69e3bd2bcd5e3',1,'ir_Transcold.h']]], - ['ktranscoldhdrmark_6712',['kTranscoldHdrMark',['../ir__Transcold_8cpp.html#aa999da00de9866212cacc740bb66d5f6',1,'ir_Transcold.cpp']]], - ['ktranscoldhdrspace_6713',['kTranscoldHdrSpace',['../ir__Transcold_8cpp.html#a0568fcecce190a29828771add3386b6a',1,'ir_Transcold.cpp']]], - ['ktranscoldheat_6714',['kTranscoldHeat',['../ir__Transcold_8h.html#ad109eb1c3cb044994179fafdbfc107e2',1,'ir_Transcold.h']]], - ['ktranscoldknowngoodstate_6715',['kTranscoldKnownGoodState',['../ir__Transcold_8h.html#a385409f55006ad7fedca2d335b69bf39',1,'ir_Transcold.h']]], - ['ktranscoldoff_6716',['kTranscoldOff',['../ir__Transcold_8h.html#a55d930cdd8e4246de18832bbd88a7d99',1,'ir_Transcold.h']]], - ['ktranscoldonespace_6717',['kTranscoldOneSpace',['../ir__Transcold_8cpp.html#aadd9575e345b8c57b4e2c65bcdb3123d',1,'ir_Transcold.cpp']]], - ['ktranscoldprefix_6718',['kTranscoldPrefix',['../ir__Transcold_8h.html#aaef68d4ab70d54b64486b7ba27a15822',1,'ir_Transcold.h']]], - ['ktranscoldswing_6719',['kTranscoldSwing',['../ir__Transcold_8h.html#af467e8cfb7f71abb609f4b9673908937',1,'ir_Transcold.h']]], - ['ktranscoldswingh_6720',['kTranscoldSwingH',['../ir__Transcold_8h.html#a300cfff72391f0c7c0caa97d49a73918',1,'ir_Transcold.h']]], - ['ktranscoldswingv_6721',['kTranscoldSwingV',['../ir__Transcold_8h.html#acfb0faab9bcf147c5dab61bee2cd93c9',1,'ir_Transcold.h']]], - ['ktranscoldtempmax_6722',['kTranscoldTempMax',['../ir__Transcold_8h.html#a5c9be5911208f2f7062a966b3deda0cd',1,'ir_Transcold.h']]], - ['ktranscoldtempmin_6723',['kTranscoldTempMin',['../ir__Transcold_8h.html#a52ff579c8e54611aed6be38d9907af57',1,'ir_Transcold.h']]], - ['ktranscoldtempsize_6724',['kTranscoldTempSize',['../ir__Transcold_8h.html#adeffd84ae91146e1ac5b27735193ba55',1,'ir_Transcold.h']]], - ['ktranscoldunknown_6725',['kTranscoldUnknown',['../ir__Transcold_8h.html#af52672df48539c826ccf8ffc1e3f9927',1,'ir_Transcold.h']]], - ['ktranscoldzerospace_6726',['kTranscoldZeroSpace',['../ir__Transcold_8cpp.html#af932911d55d7eee66ee217cb8ad5d4d4',1,'ir_Transcold.cpp']]], - ['ktrotecauto_6727',['kTrotecAuto',['../ir__Trotec_8h.html#a53b2687b96f8e69ec6f57dd2ac7a6dfa',1,'ir_Trotec.h']]], - ['ktrotecbitmark_6728',['kTrotecBitMark',['../ir__Trotec_8cpp.html#a870b2da19855eff625a2834ca7fd8765',1,'ir_Trotec.cpp']]], - ['ktrotecbits_6729',['kTrotecBits',['../IRremoteESP8266_8h.html#ab819cb0a34937714dcb10059799c26e2',1,'IRremoteESP8266.h']]], - ['ktroteccool_6730',['kTrotecCool',['../ir__Trotec_8h.html#add33a35046e4270ad9ff3b998526d5d1',1,'ir_Trotec.h']]], - ['ktrotecdefaultrepeat_6731',['kTrotecDefaultRepeat',['../IRremoteESP8266_8h.html#a4c0411462f2854a8606deca09ed15df5',1,'IRremoteESP8266.h']]], - ['ktrotecdeftemp_6732',['kTrotecDefTemp',['../ir__Trotec_8h.html#ac28d1d0ea6db18716a7d9d21e84178c0',1,'ir_Trotec.h']]], - ['ktrotecdry_6733',['kTrotecDry',['../ir__Trotec_8h.html#abdaa1836c6bc90b1d5813df028a76e21',1,'ir_Trotec.h']]], - ['ktrotecfan_6734',['kTrotecFan',['../ir__Trotec_8h.html#a9309d528d50dd542a5184a51fb101a6a',1,'ir_Trotec.h']]], - ['ktrotecfanhigh_6735',['kTrotecFanHigh',['../ir__Trotec_8h.html#ae780f0bb6b9b83f3dbcc1c1e282e5436',1,'ir_Trotec.h']]], - ['ktrotecfanlow_6736',['kTrotecFanLow',['../ir__Trotec_8h.html#aa1c3695c1becc935d2a3b2691996a17b',1,'ir_Trotec.h']]], - ['ktrotecfanmed_6737',['kTrotecFanMed',['../ir__Trotec_8h.html#abae1944f529099ff4736b6cb13bcbeda',1,'ir_Trotec.h']]], - ['ktrotecgap_6738',['kTrotecGap',['../ir__Trotec_8cpp.html#a753ba93d7b757dc58fcf1b4a6bb65ff6',1,'ir_Trotec.cpp']]], - ['ktrotecgapend_6739',['kTrotecGapEnd',['../ir__Trotec_8cpp.html#a5fcc4a020bcebfe90abe12d4a47de372',1,'ir_Trotec.cpp']]], - ['ktrotechdrmark_6740',['kTrotecHdrMark',['../ir__Trotec_8cpp.html#a809faed7ee2fef78a5b8271a2c5ddd10',1,'ir_Trotec.cpp']]], - ['ktrotechdrspace_6741',['kTrotecHdrSpace',['../ir__Trotec_8cpp.html#a5d42cd98bf737dd8161572afa393be1e',1,'ir_Trotec.cpp']]], - ['ktrotecintro1_6742',['kTrotecIntro1',['../ir__Trotec_8h.html#aabc5c6a9b4867c25d84ffe2839e88564',1,'ir_Trotec.h']]], - ['ktrotecintro2_6743',['kTrotecIntro2',['../ir__Trotec_8h.html#ac33de8b2fc4b70bb272a56f6bbb68e34',1,'ir_Trotec.h']]], - ['ktrotecmaxtemp_6744',['kTrotecMaxTemp',['../ir__Trotec_8h.html#abfe4004dcac892f575ec1efb09567595',1,'ir_Trotec.h']]], - ['ktrotecmaxtimer_6745',['kTrotecMaxTimer',['../ir__Trotec_8h.html#a8467d1b9983d5750a61817cacb148efd',1,'ir_Trotec.h']]], - ['ktrotecmintemp_6746',['kTrotecMinTemp',['../ir__Trotec_8h.html#a091904af9fee2384e137feab274af7f8',1,'ir_Trotec.h']]], - ['ktroteconespace_6747',['kTrotecOneSpace',['../ir__Trotec_8cpp.html#a570aa73a82089906971932212d99a283',1,'ir_Trotec.cpp']]], - ['ktrotecstatelength_6748',['kTrotecStateLength',['../IRremoteESP8266_8h.html#ae1d2aa52fef81f03b92c35f4970728d2',1,'IRremoteESP8266.h']]], - ['ktroteczerospace_6749',['kTrotecZeroSpace',['../ir__Trotec_8cpp.html#a8e8f85e7b8a8157eb425316b5108d717',1,'ir_Trotec.cpp']]], - ['ktruestr_6750',['kTrueStr',['../IRtext_8cpp.html#a28a627d6f48d7d06a560f9613e4550fa',1,'kTrueStr(): IRtext.cpp'],['../IRtext_8h.html#aca6e78a25b9dacd2508069f0a6b919c0',1,'kTrueStr(): IRtext.cpp']]], - ['ktrumaauto_6751',['kTrumaAuto',['../ir__Truma_8h.html#aa539e7b75df4a2542db4fac86c341aae',1,'ir_Truma.h']]], - ['ktrumabits_6752',['kTrumaBits',['../IRremoteESP8266_8h.html#aa5ba6ea5669410e37620b616c75e766f',1,'IRremoteESP8266.h']]], - ['ktrumachecksuminit_6753',['kTrumaChecksumInit',['../ir__Truma_8h.html#aa5aadfae49e282d39b16edd75e3bfe4e',1,'ir_Truma.h']]], - ['ktrumacool_6754',['kTrumaCool',['../ir__Truma_8h.html#adfe6810b410e5c77d3faf5cc25d6cc3a',1,'ir_Truma.h']]], - ['ktrumadefaultstate_6755',['kTrumaDefaultState',['../ir__Truma_8h.html#a78982ad49a52d492472ea25b985f3b5e',1,'ir_Truma.h']]], - ['ktrumafan_6756',['kTrumaFan',['../ir__Truma_8h.html#ac1dfc97d02422f3d95c9aa6d85c4c24f',1,'ir_Truma.h']]], - ['ktrumafanhigh_6757',['kTrumaFanHigh',['../ir__Truma_8h.html#ab4e4af197a48a2fd6932a901c6ccd64e',1,'ir_Truma.h']]], - ['ktrumafanlow_6758',['kTrumaFanLow',['../ir__Truma_8h.html#a84f36ff984a23ec7613e72cf6bfb568a',1,'ir_Truma.h']]], - ['ktrumafanmed_6759',['kTrumaFanMed',['../ir__Truma_8h.html#acaabaf9fea52f17a4747ce7875ba2ed4',1,'ir_Truma.h']]], - ['ktrumafanquiet_6760',['kTrumaFanQuiet',['../ir__Truma_8h.html#a6582d41f790b9fc82fd9c30b913b0943',1,'ir_Truma.h']]], - ['ktrumafootermark_6761',['kTrumaFooterMark',['../ir__Truma_8cpp.html#afe540950135dbd3b355c7c480fd5e536',1,'ir_Truma.cpp']]], - ['ktrumagap_6762',['kTrumaGap',['../ir__Truma_8cpp.html#af9b738db46af724dbb04d2950ee744ab',1,'ir_Truma.cpp']]], - ['ktrumahdrmark_6763',['kTrumaHdrMark',['../ir__Truma_8cpp.html#a4cebd76faecf7a09c5a6c2ccb9b5f917',1,'ir_Truma.cpp']]], - ['ktrumaldrmark_6764',['kTrumaLdrMark',['../ir__Truma_8cpp.html#ab2986992a9aff6dec819d47bdee7b815',1,'ir_Truma.cpp']]], - ['ktrumaldrspace_6765',['kTrumaLdrSpace',['../ir__Truma_8cpp.html#ae0b8d934817dd611ad1a95d15970567d',1,'ir_Truma.cpp']]], - ['ktrumamaxtemp_6766',['kTrumaMaxTemp',['../ir__Truma_8h.html#ae569645f4f21a1c3fb39ed24dad4eef4',1,'ir_Truma.h']]], - ['ktrumamintemp_6767',['kTrumaMinTemp',['../ir__Truma_8h.html#a553ccb38aa5c0a202b2556d5e5664a2b',1,'ir_Truma.h']]], - ['ktrumaonemark_6768',['kTrumaOneMark',['../ir__Truma_8cpp.html#acd542e5de6ea90eccb341c62f7628204',1,'ir_Truma.cpp']]], - ['ktrumaspace_6769',['kTrumaSpace',['../ir__Truma_8cpp.html#a5f6941b73a61eff9c717a06866b5e028',1,'ir_Truma.cpp']]], - ['ktrumatempoffset_6770',['kTrumaTempOffset',['../ir__Truma_8h.html#ac377b70947017722c45a08278597d382',1,'ir_Truma.h']]], - ['ktrumazeromark_6771',['kTrumaZeroMark',['../ir__Truma_8cpp.html#a87a88430e179fe947c3180801cef25d5',1,'ir_Truma.cpp']]], - ['kturbostr_6772',['kTurboStr',['../IRtext_8cpp.html#a9f3f7395d980887699ac5a0c146d37d2',1,'kTurboStr(): IRtext.cpp'],['../IRtext_8h.html#a3ced6d2a545174133308d7803157f7f8',1,'kTurboStr(): IRtext.cpp']]], - ['kturbotogglestr_6773',['kTurboToggleStr',['../IRtext_8cpp.html#a22717e4f7c1683ae1b6feac88441ad2d',1,'kTurboToggleStr(): IRtext.cpp'],['../IRtext_8h.html#a1cb328db0aaa0b2bbb4afa24c9f3d731',1,'kTurboToggleStr(): IRtext.cpp']]], - ['ktypestr_6774',['kTypeStr',['../IRtext_8cpp.html#a284508462cfcbfb66b3002f447e3a002',1,'kTypeStr(): IRtext.cpp'],['../IRtext_8h.html#ab6117f82c4dbbfc229d99cc613d62c94',1,'kTypeStr(): IRtext.cpp']]], - ['kunknownstr_6775',['kUnknownStr',['../IRtext_8cpp.html#a9c6c6d47ce3eb07cc607faa600978029',1,'kUnknownStr(): IRtext.cpp'],['../IRtext_8h.html#aa59176b31741b60729d4279817a7da1b',1,'kUnknownStr(): IRtext.cpp']]], - ['kunknownthreshold_6776',['kUnknownThreshold',['../IRrecv_8h.html#aa6b5a940c7a0432aa82a8d823202cd7f',1,'IRrecv.h']]], - ['kupperstr_6777',['kUpperStr',['../IRtext_8cpp.html#a887bb7c61f38014d21b025c67102fa0b',1,'kUpperStr(): IRtext.cpp'],['../IRtext_8h.html#a5aea60591627481d90688f655b2eb82a',1,'kUpperStr(): IRtext.cpp']]], - ['kupstr_6778',['kUpStr',['../IRtext_8cpp.html#ab970b3d5239f08f21a8e5e2eae49739f',1,'kUpStr(): IRtext.cpp'],['../IRtext_8h.html#a8672abbd2a279c032f0435ed75143b1a',1,'kUpStr(): IRtext.cpp']]], - ['kusedeftol_6779',['kUseDefTol',['../IRrecv_8h.html#a05025e8bd724ae2d0c7fea6e924ca84c',1,'IRrecv.h']]], - ['kvestelacauto_6780',['kVestelAcAuto',['../ir__Vestel_8h.html#a157e879cbe3b216075e3b7b2db5fdc3c',1,'ir_Vestel.h']]], - ['kvestelacbitmark_6781',['kVestelAcBitMark',['../ir__Vestel_8h.html#a70d7198002c61529956625986aa533f0',1,'ir_Vestel.h']]], - ['kvestelacbits_6782',['kVestelAcBits',['../IRremoteESP8266_8h.html#ae31945a1ce90b2d4c33b5c91d980d3a7',1,'IRremoteESP8266.h']]], - ['kvestelaccool_6783',['kVestelAcCool',['../ir__Vestel_8h.html#aa2ec681dd63a976a6b2b182ae590e020',1,'ir_Vestel.h']]], - ['kvestelacdry_6784',['kVestelAcDry',['../ir__Vestel_8h.html#a21a255842a75a932a3a0735851d9c197',1,'ir_Vestel.h']]], - ['kvestelacfan_6785',['kVestelAcFan',['../ir__Vestel_8h.html#aeabf5404a3f66fd1428b6e4c09f24c08',1,'ir_Vestel.h']]], - ['kvestelacfanauto_6786',['kVestelAcFanAuto',['../ir__Vestel_8h.html#ac2f3175c25844414de2c2489595dd851',1,'ir_Vestel.h']]], - ['kvestelacfanautocool_6787',['kVestelAcFanAutoCool',['../ir__Vestel_8h.html#ab40dc2ebe05c77e701e2d5acf16b2658',1,'ir_Vestel.h']]], - ['kvestelacfanautohot_6788',['kVestelAcFanAutoHot',['../ir__Vestel_8h.html#a95dee8baacedb7aa62edbdecf766cdc1',1,'ir_Vestel.h']]], - ['kvestelacfanhigh_6789',['kVestelAcFanHigh',['../ir__Vestel_8h.html#acae63d91ee2a2b448fe1a68b2472e4a3',1,'ir_Vestel.h']]], - ['kvestelacfanlow_6790',['kVestelAcFanLow',['../ir__Vestel_8h.html#a21ce5e539ecb764be8dbad33914f4b87',1,'ir_Vestel.h']]], - ['kvestelacfanmed_6791',['kVestelAcFanMed',['../ir__Vestel_8h.html#a265fa70e0e38caefb45ed007eb25a430',1,'ir_Vestel.h']]], - ['kvestelachdrmark_6792',['kVestelAcHdrMark',['../ir__Vestel_8h.html#a32871ab992bfee13918a50f04508a95a',1,'ir_Vestel.h']]], - ['kvestelachdrspace_6793',['kVestelAcHdrSpace',['../ir__Vestel_8h.html#a2389409048e409b411ea8416829c06ef',1,'ir_Vestel.h']]], - ['kvestelacheat_6794',['kVestelAcHeat',['../ir__Vestel_8h.html#a33d36614992862c41f5e48548b0a45f1',1,'ir_Vestel.h']]], - ['kvestelacion_6795',['kVestelAcIon',['../ir__Vestel_8h.html#a6a661c914fd67e261e2148d797789339',1,'ir_Vestel.h']]], - ['kvestelacmaxtemp_6796',['kVestelAcMaxTemp',['../ir__Vestel_8h.html#a4e49902b2e4fe049fd5969b4532cc7b4',1,'ir_Vestel.h']]], - ['kvestelacmintempc_6797',['kVestelAcMinTempC',['../ir__Vestel_8h.html#ae597f05d0886a5a2aa8c43db187a657b',1,'ir_Vestel.h']]], - ['kvestelacmintemph_6798',['kVestelAcMinTempH',['../ir__Vestel_8h.html#a06977d297c84adac7927c80c7b0e7297',1,'ir_Vestel.h']]], - ['kvestelacnormal_6799',['kVestelAcNormal',['../ir__Vestel_8h.html#afa4c0fafcc806cd22dfb45475631d754',1,'ir_Vestel.h']]], - ['kvestelaconespace_6800',['kVestelAcOneSpace',['../ir__Vestel_8h.html#a507a849ef5e031f40ecc0e5db6ac8dd6',1,'ir_Vestel.h']]], - ['kvestelacsleep_6801',['kVestelAcSleep',['../ir__Vestel_8h.html#abc4701f0a44ed48a139d192f86a7169b',1,'ir_Vestel.h']]], - ['kvestelacstatedefault_6802',['kVestelAcStateDefault',['../ir__Vestel_8h.html#a4207797ae1043280ec6364de5981a791',1,'ir_Vestel.h']]], - ['kvestelacswing_6803',['kVestelAcSwing',['../ir__Vestel_8h.html#aeb764aa28cb134348e64fde5cb4d40f0',1,'ir_Vestel.h']]], - ['kvestelactimestatedefault_6804',['kVestelAcTimeStateDefault',['../ir__Vestel_8h.html#aaf4d9b6a41269ede2101d45cc1549794',1,'ir_Vestel.h']]], - ['kvestelactolerance_6805',['kVestelAcTolerance',['../ir__Vestel_8h.html#a4abe236ac8a801aa03ab843c3e418711',1,'ir_Vestel.h']]], - ['kvestelacturbo_6806',['kVestelAcTurbo',['../ir__Vestel_8h.html#a85b8b744f201b1666f9608f693a61059',1,'ir_Vestel.h']]], - ['kvestelaczerospace_6807',['kVestelAcZeroSpace',['../ir__Vestel_8h.html#a2094b0ff279fb1696b51e57d657efd13',1,'ir_Vestel.h']]], - ['kvoltasbitmark_6808',['kVoltasBitMark',['../ir__Voltas_8cpp.html#aff3e77a8712c4b9132a36b1909727906',1,'ir_Voltas.cpp']]], - ['kvoltasbits_6809',['kVoltasBits',['../IRremoteESP8266_8h.html#ad13056674d7d5fc530123ee1bb754409',1,'IRremoteESP8266.h']]], - ['kvoltascool_6810',['kVoltasCool',['../ir__Voltas_8h.html#a60ce895195221d1344db3b6bfded5422',1,'ir_Voltas.h']]], - ['kvoltasdry_6811',['kVoltasDry',['../ir__Voltas_8h.html#a3a89e1bb4d6f9b0371cb2b1a77f95aa0',1,'ir_Voltas.h']]], - ['kvoltasdrytemp_6812',['kVoltasDryTemp',['../ir__Voltas_8h.html#abb138aeb435b0583c09042f01d7eb42b',1,'ir_Voltas.h']]], - ['kvoltasfan_6813',['kVoltasFan',['../ir__Voltas_8h.html#a5a32539c5a10fb63d4df009968a1cc90',1,'ir_Voltas.h']]], - ['kvoltasfanauto_6814',['kVoltasFanAuto',['../ir__Voltas_8h.html#a68fc7bebcc711e8ca00c664e09f0aff9',1,'ir_Voltas.h']]], - ['kvoltasfanhigh_6815',['kVoltasFanHigh',['../ir__Voltas_8h.html#a6d217a662dd1c9353f3899b2be2dc269',1,'ir_Voltas.h']]], - ['kvoltasfanlow_6816',['kVoltasFanLow',['../ir__Voltas_8h.html#a3b84c9d78f23e694b25edddf5e5ac94a',1,'ir_Voltas.h']]], - ['kvoltasfanmed_6817',['kVoltasFanMed',['../ir__Voltas_8h.html#a0bf9ee213cf9266ea29b6813dc79e165',1,'ir_Voltas.h']]], - ['kvoltasfreq_6818',['kVoltasFreq',['../ir__Voltas_8cpp.html#abf1ddb4b962572b4a4aae323f02d91f1',1,'ir_Voltas.cpp']]], - ['kvoltasheat_6819',['kVoltasHeat',['../ir__Voltas_8h.html#a9f131121d8bff4112de9878be5ce0330',1,'ir_Voltas.h']]], - ['kvoltasmaxtemp_6820',['kVoltasMaxTemp',['../ir__Voltas_8h.html#a21a7e03f17b6daacd82037b892177724',1,'ir_Voltas.h']]], - ['kvoltasmintemp_6821',['kVoltasMinTemp',['../ir__Voltas_8h.html#a85f2d29327aa19177ea026a049c0fe52',1,'ir_Voltas.h']]], - ['kvoltasonespace_6822',['kVoltasOneSpace',['../ir__Voltas_8cpp.html#a5ad53f57f302eb44dfb773304c872018',1,'ir_Voltas.cpp']]], - ['kvoltasstatelength_6823',['kVoltasStateLength',['../IRremoteESP8266_8h.html#a336bd721135fc8b869941cd3aa73646e',1,'IRremoteESP8266.h']]], - ['kvoltasswinghchange_6824',['kVoltasSwingHChange',['../ir__Voltas_8h.html#a92242c38b240f5134e1a6c2200b6d0de',1,'ir_Voltas.h']]], - ['kvoltasswinghnochange_6825',['kVoltasSwingHNoChange',['../ir__Voltas_8h.html#acb66394dca0f3606066f61077444b0d3',1,'ir_Voltas.h']]], - ['kvoltaszerospace_6826',['kVoltasZeroSpace',['../ir__Voltas_8cpp.html#abcfc7887357e19c6d74b5befddfa7eb4',1,'ir_Voltas.cpp']]], - ['kwallstr_6827',['kWallStr',['../IRtext_8cpp.html#a860a71561b888c82318daad9f2c34592',1,'kWallStr(): IRtext.cpp'],['../IRtext_8h.html#add1af6d900b500ca7affff3c9ff02d29',1,'kWallStr(): IRtext.cpp']]], - ['kweeklytimerstr_6828',['kWeeklyTimerStr',['../IRtext_8cpp.html#aaf0b7bf26b4710a4c032cec9e55c545a',1,'kWeeklyTimerStr(): IRtext.cpp'],['../IRtext_8h.html#ab59fa6f63401196c0ff32aba6da9d9aa',1,'kWeeklyTimerStr(): IRtext.cpp']]], - ['kwhirlpoolacauto_6829',['kWhirlpoolAcAuto',['../ir__Whirlpool_8h.html#a2f3cc5447f8042e9c2eae0c2e0dc1b80',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacautotemp_6830',['kWhirlpoolAcAutoTemp',['../ir__Whirlpool_8h.html#a314b66dc86a7f622d73d3973d9dca86d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacbitmark_6831',['kWhirlpoolAcBitMark',['../ir__Whirlpool_8cpp.html#a5c076ca2e18927f8b0594cb74a7de1ff',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacbits_6832',['kWhirlpoolAcBits',['../IRremoteESP8266_8h.html#a149bd4f3fb9c83e683095d393209ede3',1,'IRremoteESP8266.h']]], - ['kwhirlpoolacchecksumbyte1_6833',['kWhirlpoolAcChecksumByte1',['../ir__Whirlpool_8h.html#ab199c13354730c715debbeed63182cbd',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacchecksumbyte2_6834',['kWhirlpoolAcChecksumByte2',['../ir__Whirlpool_8h.html#a37d1a2fd814ccf83062325225bddb9be',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommand6thsense_6835',['kWhirlpoolAcCommand6thSense',['../ir__Whirlpool_8h.html#a48b1309aab30dd871ce047881680efa2',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandfanspeed_6836',['kWhirlpoolAcCommandFanSpeed',['../ir__Whirlpool_8h.html#a4712f7dd6c5631f6aa692eeb99fa3963',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandifeel_6837',['kWhirlpoolAcCommandIFeel',['../ir__Whirlpool_8h.html#a5cb95c379d033d7f5b0c81755f1d376f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandlight_6838',['kWhirlpoolAcCommandLight',['../ir__Whirlpool_8h.html#af6ae6f50d9dbfa610b7033181e4f7eb1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandmode_6839',['kWhirlpoolAcCommandMode',['../ir__Whirlpool_8h.html#ab03770a941b7277a66fe65003497e183',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandofftimer_6840',['kWhirlpoolAcCommandOffTimer',['../ir__Whirlpool_8h.html#a072883e3780aa0970183ab330db26118',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandontimer_6841',['kWhirlpoolAcCommandOnTimer',['../ir__Whirlpool_8h.html#a54cbadf2ded73e66d6d12b6622249bdc',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandpower_6842',['kWhirlpoolAcCommandPower',['../ir__Whirlpool_8h.html#ac215c2827ebfe25a896d53e576b643d1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandsleep_6843',['kWhirlpoolAcCommandSleep',['../ir__Whirlpool_8h.html#a695c9d69953ad2663512ede38e619b09',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandsuper_6844',['kWhirlpoolAcCommandSuper',['../ir__Whirlpool_8h.html#a4da2162e70a7257c5f4149e8556816d4',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandswing_6845',['kWhirlpoolAcCommandSwing',['../ir__Whirlpool_8h.html#a320e57c0727a74f049883c77233647a9',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccommandtemp_6846',['kWhirlpoolAcCommandTemp',['../ir__Whirlpool_8h.html#a6e567d58af9bc3fb246e3d47a09fb065',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaccool_6847',['kWhirlpoolAcCool',['../ir__Whirlpool_8h.html#a9574c0a604ffee1df43222344f649db8',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacdefaultrepeat_6848',['kWhirlpoolAcDefaultRepeat',['../IRremoteESP8266_8h.html#a3b41358898f69d96bdeece17ead13ee0',1,'IRremoteESP8266.h']]], - ['kwhirlpoolacdry_6849',['kWhirlpoolAcDry',['../ir__Whirlpool_8h.html#ab7433a4e3e8ad7ee665ab234df43e45f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfan_6850',['kWhirlpoolAcFan',['../ir__Whirlpool_8h.html#a91ecddbde81174268fdde3679565daeb',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanauto_6851',['kWhirlpoolAcFanAuto',['../ir__Whirlpool_8h.html#a133a436db244935a812beba78a1a9d05',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanhigh_6852',['kWhirlpoolAcFanHigh',['../ir__Whirlpool_8h.html#a93affe2700e13830ff09ee16801be56d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanlow_6853',['kWhirlpoolAcFanLow',['../ir__Whirlpool_8h.html#abdbd00636661a234d9e30521144d76e1',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacfanmedium_6854',['kWhirlpoolAcFanMedium',['../ir__Whirlpool_8h.html#acf1ae9526d2fd3f49d484608730f607d',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacgap_6855',['kWhirlpoolAcGap',['../ir__Whirlpool_8cpp.html#a5946b0c81f68442645f795f4f6518972',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolachdrmark_6856',['kWhirlpoolAcHdrMark',['../ir__Whirlpool_8cpp.html#ad2f759eb7426cfe5fb3421f101c926bb',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolachdrspace_6857',['kWhirlpoolAcHdrSpace',['../ir__Whirlpool_8cpp.html#a7a83a305cc6ebb7be7163bd1c3fb679d',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacheat_6858',['kWhirlpoolAcHeat',['../ir__Whirlpool_8h.html#a1e9290ec94cca537b5c44d2e4326b59c',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacmaxtemp_6859',['kWhirlpoolAcMaxTemp',['../ir__Whirlpool_8h.html#a08171b333f214963e21a0c574783299f',1,'ir_Whirlpool.h']]], - ['kwhirlpoolacmingap_6860',['kWhirlpoolAcMinGap',['../ir__Whirlpool_8cpp.html#aa6e5e114daf18d77914a08f831c37c7d',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacmintemp_6861',['kWhirlpoolAcMinTemp',['../ir__Whirlpool_8h.html#aeffef97e3247609d5731b525692f1e7b',1,'ir_Whirlpool.h']]], - ['kwhirlpoolaconespace_6862',['kWhirlpoolAcOneSpace',['../ir__Whirlpool_8cpp.html#a7680ed11a0bc6b2f9340e3557681a470',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacsections_6863',['kWhirlpoolAcSections',['../ir__Whirlpool_8cpp.html#a75ebed07d288ac32a0138035279b41c7',1,'ir_Whirlpool.cpp']]], - ['kwhirlpoolacstatelength_6864',['kWhirlpoolAcStateLength',['../IRremoteESP8266_8h.html#a0fff60a43f776fb999d0f1f91d88154f',1,'IRremoteESP8266.h']]], - ['kwhirlpoolaczerospace_6865',['kWhirlpoolAcZeroSpace',['../ir__Whirlpool_8cpp.html#af03c9ee4d432bbce7d2ee214dd5ca095',1,'ir_Whirlpool.cpp']]], - ['kwhynterbitmark_6866',['kWhynterBitMark',['../ir__Whynter_8cpp.html#a032043e058989b6402d8af99d2c20552',1,'ir_Whynter.cpp']]], - ['kwhynterbitmarkticks_6867',['kWhynterBitMarkTicks',['../ir__Whynter_8cpp.html#acfd8f04e0453ec1b9cd85837053a47e2',1,'ir_Whynter.cpp']]], - ['kwhynterbits_6868',['kWhynterBits',['../IRremoteESP8266_8h.html#a4553f6670e241a67104d45216a4ebd98',1,'IRremoteESP8266.h']]], - ['kwhynterhdrmark_6869',['kWhynterHdrMark',['../ir__Whynter_8cpp.html#a7d62b0e658fe6f697d41d6932e4e6662',1,'ir_Whynter.cpp']]], - ['kwhynterhdrmarkticks_6870',['kWhynterHdrMarkTicks',['../ir__Whynter_8cpp.html#a34da808cebff09fc038589c035f2d2fe',1,'ir_Whynter.cpp']]], - ['kwhynterhdrspace_6871',['kWhynterHdrSpace',['../ir__Whynter_8cpp.html#ad20c874e642238e299a44ead2ea592f1',1,'ir_Whynter.cpp']]], - ['kwhynterhdrspaceticks_6872',['kWhynterHdrSpaceTicks',['../ir__Whynter_8cpp.html#a8090f73380ea212e904402555156364d',1,'ir_Whynter.cpp']]], - ['kwhyntermincommandlength_6873',['kWhynterMinCommandLength',['../ir__Whynter_8cpp.html#a5e584a8d6aa8a146c9c8e74839b28e8f',1,'ir_Whynter.cpp']]], - ['kwhyntermincommandlengthticks_6874',['kWhynterMinCommandLengthTicks',['../ir__Whynter_8cpp.html#a65e8195824053403967573b7603059e7',1,'ir_Whynter.cpp']]], - ['kwhyntermingap_6875',['kWhynterMinGap',['../ir__Whynter_8cpp.html#ad09957f4c9c76d76ab55a74f440dad5f',1,'ir_Whynter.cpp']]], - ['kwhyntermingapticks_6876',['kWhynterMinGapTicks',['../ir__Whynter_8cpp.html#a89af5f0ab7af456f58052bf9256620a2',1,'ir_Whynter.cpp']]], - ['kwhynteronespace_6877',['kWhynterOneSpace',['../ir__Whynter_8cpp.html#a78993c22d94b107a37f61cddad728003',1,'ir_Whynter.cpp']]], - ['kwhynteronespaceticks_6878',['kWhynterOneSpaceTicks',['../ir__Whynter_8cpp.html#a95a5903a8f057df2b6587a331fec6f18',1,'ir_Whynter.cpp']]], - ['kwhyntertick_6879',['kWhynterTick',['../ir__Whynter_8cpp.html#a8f704cdf6cfd11455101919d7a772389',1,'ir_Whynter.cpp']]], - ['kwhynterzerospace_6880',['kWhynterZeroSpace',['../ir__Whynter_8cpp.html#a426deb9a35a1a6afdcbcfa58c6943490',1,'ir_Whynter.cpp']]], - ['kwhynterzerospaceticks_6881',['kWhynterZeroSpaceTicks',['../ir__Whynter_8cpp.html#ae38da416cd065b561287ebd2fe0257f0',1,'ir_Whynter.cpp']]], - ['kwidestr_6882',['kWideStr',['../IRtext_8cpp.html#a19875c78e68ba6fdd78df3526f82969c',1,'kWideStr(): IRtext.cpp'],['../IRtext_8h.html#a6fe3dbd6899e85e79e517f71cc74a87b',1,'kWideStr(): IRtext.cpp']]], - ['kwifistr_6883',['kWifiStr',['../IRtext_8cpp.html#a3f2dddbcbc03e31ed6f1081fce001ea4',1,'kWifiStr(): IRtext.cpp'],['../IRtext_8h.html#a8bc9343f209803dbab3e765e39b41b4d',1,'kWifiStr(): IRtext.cpp']]], - ['kxfanstr_6884',['kXFanStr',['../IRtext_8cpp.html#ada36ab4b7555d38a76c4477971736cb7',1,'kXFanStr(): IRtext.cpp'],['../IRtext_8h.html#a7ddc859861308f2f9077abcec2a4b571',1,'kXFanStr(): IRtext.cpp']]], - ['kxmpbasespace_6885',['kXmpBaseSpace',['../ir__Xmp_8cpp.html#abefc09e9ed818c7efb3bbdda98e30be1',1,'ir_Xmp.cpp']]], - ['kxmpbits_6886',['kXmpBits',['../IRremoteESP8266_8h.html#adfcd08adae1243b1108353ef5cfe8776',1,'IRremoteESP8266.h']]], - ['kxmpfooterspace_6887',['kXmpFooterSpace',['../ir__Xmp_8cpp.html#a83012cfefe50c5f8b2b13315e72dc1f1',1,'ir_Xmp.cpp']]], - ['kxmpmark_6888',['kXmpMark',['../ir__Xmp_8cpp.html#a9c09decb9eaa8afd6b2053c142e87db9',1,'ir_Xmp.cpp']]], - ['kxmpmaxwordvalue_6889',['kXmpMaxWordValue',['../ir__Xmp_8cpp.html#ab54dbf1bdf33d8f7e7413723980dc518',1,'ir_Xmp.cpp']]], - ['kxmpmessagegap_6890',['kXmpMessageGap',['../ir__Xmp_8cpp.html#ad678abebb2d8ccfd578e7c1d70f44987',1,'ir_Xmp.cpp']]], - ['kxmprepeatcode_6891',['kXmpRepeatCode',['../ir__Xmp_8cpp.html#a7cdde1ffa7ba5186dfcfc3660966ce9d',1,'ir_Xmp.cpp']]], - ['kxmprepeatcodealt_6892',['kXmpRepeatCodeAlt',['../ir__Xmp_8cpp.html#a34460e1fdf809f8b87c1da2942124c49',1,'ir_Xmp.cpp']]], - ['kxmpsections_6893',['kXmpSections',['../ir__Xmp_8cpp.html#ab20e02ac019d4eb974f06e531a9af5c0',1,'ir_Xmp.cpp']]], - ['kxmpspacestep_6894',['kXmpSpaceStep',['../ir__Xmp_8cpp.html#a4f0b555035f665354c5743208d52d5b9',1,'ir_Xmp.cpp']]], - ['kxmpwordsize_6895',['kXmpWordSize',['../ir__Xmp_8cpp.html#a1974129b35ffdb85f3a1727aa5509b9f',1,'ir_Xmp.cpp']]], - ['kyesstr_6896',['kYesStr',['../IRtext_8cpp.html#a96492aa94d18702db41a639ae2a45423',1,'kYesStr(): IRtext.cpp'],['../IRtext_8h.html#a95ca78b5cc3caa31c564a28480379fae',1,'kYesStr(): IRtext.cpp']]], - ['kzepealbits_6897',['kZepealBits',['../IRremoteESP8266_8h.html#af09c9402a1c4fa24f692994498641296',1,'IRremoteESP8266.h']]], - ['kzepealcommandoffon_6898',['kZepealCommandOffOn',['../ir__Zepeal_8cpp.html#a37af9800da3144c218d422e54066e837',1,'ir_Zepeal.cpp']]], - ['kzepealcommandofftimer_6899',['kZepealCommandOffTimer',['../ir__Zepeal_8cpp.html#a87b136a95af4437182530d6f7cbc69ee',1,'ir_Zepeal.cpp']]], - ['kzepealcommandontimer_6900',['kZepealCommandOnTimer',['../ir__Zepeal_8cpp.html#aed4491019bb6575c113404a095e8b116',1,'ir_Zepeal.cpp']]], - ['kzepealcommandrhythm_6901',['kZepealCommandRhythm',['../ir__Zepeal_8cpp.html#aa3960b3bdaa77c060543881bdf71e46c',1,'ir_Zepeal.cpp']]], - ['kzepealcommandspeed_6902',['kZepealCommandSpeed',['../ir__Zepeal_8cpp.html#a1189a81901daaf4b8b45e8f45caf0f49',1,'ir_Zepeal.cpp']]], - ['kzepealfootermark_6903',['kZepealFooterMark',['../ir__Zepeal_8cpp.html#a83167e93978d9cec8cf2dfac980582ba',1,'ir_Zepeal.cpp']]], - ['kzepealgap_6904',['kZepealGap',['../ir__Zepeal_8cpp.html#ab5bea0fe08e14fa3d1812bea018f44f0',1,'ir_Zepeal.cpp']]], - ['kzepealhdrmark_6905',['kZepealHdrMark',['../ir__Zepeal_8cpp.html#abee2a1537cfff9481d3060fba94a4b04',1,'ir_Zepeal.cpp']]], - ['kzepealhdrspace_6906',['kZepealHdrSpace',['../ir__Zepeal_8cpp.html#ad49be13d3dd108a18e4e641a40ff0408',1,'ir_Zepeal.cpp']]], - ['kzepealminrepeat_6907',['kZepealMinRepeat',['../IRremoteESP8266_8h.html#afb5c734e808d8f108f976f0556bf6e58',1,'IRremoteESP8266.h']]], - ['kzepealonemark_6908',['kZepealOneMark',['../ir__Zepeal_8cpp.html#a4d9919883561086dd3e3060e93983480',1,'ir_Zepeal.cpp']]], - ['kzepealonespace_6909',['kZepealOneSpace',['../ir__Zepeal_8cpp.html#a88702dbff33a9dddcfd4b255637460a0',1,'ir_Zepeal.cpp']]], - ['kzepealsignature_6910',['kZepealSignature',['../ir__Zepeal_8cpp.html#a7994e564096ac01b77d9ebe3a753167d',1,'ir_Zepeal.cpp']]], - ['kzepealtolerance_6911',['kZepealTolerance',['../ir__Zepeal_8cpp.html#ab35f666ef98b24b8b4bacdf462a9fbe6',1,'ir_Zepeal.cpp']]], - ['kzepealzeromark_6912',['kZepealZeroMark',['../ir__Zepeal_8cpp.html#a94eac58ef78ea4e39687f54e381c3a00',1,'ir_Zepeal.cpp']]], - ['kzepealzerospace_6913',['kZepealZeroSpace',['../ir__Zepeal_8cpp.html#a1af802b587e8f0a88ae87ab964fde690',1,'ir_Zepeal.cpp']]], - ['kzonefollowstr_6914',['kZoneFollowStr',['../IRtext_8cpp.html#a9a112fb47e39e35d096fe09266d37db1',1,'kZoneFollowStr(): IRtext.cpp'],['../IRtext_8h.html#a100dc6d7c4d53bffa00a24a582ace80f',1,'kZoneFollowStr(): IRtext.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.html deleted file mode 100644 index c02d066f5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.js deleted file mode 100644 index 9c48d992f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_b.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['label_6915',['Label',['../structCoronaSection.html#abc6d0caa713c73244c4bf2f602074d48',1,'CoronaSection']]], - ['ledflag_6916',['ledFlag',['../classIRCoolixAC.html#a03ba5e0a6cb47a7bb054155c2111a69c',1,'IRCoolixAC']]], - ['length_6917',['Length',['../unionToshibaProtocol.html#aacb09c50f1892d3244b4dd0c14a12ed6',1,'ToshibaProtocol']]], - ['light_6918',['Light',['../unionDaikin2Protocol.html#adaf55ec9e1b9ba278c7391d9d797f3ba',1,'Daikin2Protocol::Light()'],['../unionGoodweatherProtocol.html#a845565af7661af0c05290a7ce039f8e2',1,'GoodweatherProtocol::Light()'],['../unionGreeProtocol.html#a72092768725667d3bce381a6e2900c66',1,'GreeProtocol::Light()'],['../unionKelvinatorProtocol.html#a38f5b978fd63fda659f0e0b5f682440e',1,'KelvinatorProtocol::Light()'],['../unionNeoclimaProtocol.html#a598346f565ad6d57df03f5256a878dd6',1,'NeoclimaProtocol::Light()'],['../unionTcl112Protocol.html#a1787bdc0b636eeca6f85dcbec14aef6b',1,'Tcl112Protocol::Light()'],['../unionTecoProtocol.html#a00a2d53fdbfcb60461284374f8894b97',1,'TecoProtocol::Light()'],['../unionVoltasProtocol.html#a811a0de66771c693831740440aac460c',1,'VoltasProtocol::Light()'],['../structstdAc_1_1state__t.html#a51c3a5c4703ea49b420d70aeb18b6b9b',1,'stdAc::state_t::light()']]], - ['lightoff_6919',['LightOff',['../unionWhirlpoolProtocol.html#afb34ebe6d6b418f8398dd33b42bb4982',1,'WhirlpoolProtocol']]], - ['lighttoggle_6920',['LightToggle',['../unionElectraProtocol.html#aa2a5998cafd139e5ce7626edc4782c56',1,'ElectraProtocol']]], - ['llword_6921',['llword',['../unionmagiquest.html#ad57fbc75ab289c3e93b94be0b2187d65',1,'magiquest']]], - ['longcode_6922',['longcode',['../unionFujitsuProtocol.html#a3802bebe7a7e4d01f58fb191ffd8adca',1,'FujitsuProtocol']]], - ['longmsg_6923',['LongMsg',['../unionToshibaProtocol.html#ad1f3816fce9e7e7ca004870b264cca5d',1,'ToshibaProtocol']]], - ['lword_6924',['lword',['../unionmagiquest.html#ac87102145311831a232002b52fe2d02c',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.html deleted file mode 100644 index 4b866c6ce..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.js deleted file mode 100644 index 0cfea7d1c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_c.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['magnitude_6925',['magnitude',['../unionmagiquest.html#a8f687419a00322a04aab223dec093d6e',1,'magiquest']]], - ['max_6926',['Max',['../unionAmcorProtocol.html#a9e0ea99322601af4b09784da2cf21d7e',1,'AmcorProtocol::Max()'],['../unionArgoProtocol.html#ac3edf881406da0b9a253a7536ba3e810',1,'ArgoProtocol::Max()']]], - ['minutes_6927',['Minutes',['../unionVestelProtocol.html#a13e423c0ae919980baa57f0e9a22d59e',1,'VestelProtocol']]], - ['mode_6928',['mode',['../structstdAc_1_1state__t.html#ae5e4b17fac2ea36300f796670337d7a7',1,'stdAc::state_t::mode()'],['../unionAirwellProtocol.html#a4a12b674ee9dcdbca592a1c5f3deb43e',1,'AirwellProtocol::Mode()'],['../unionAmcorProtocol.html#a5eca17db0b0ac0a2a46d72eaa4b098f8',1,'AmcorProtocol::Mode()'],['../unionArgoProtocol.html#afac4337c33e8a2b8e12b84890121e00c',1,'ArgoProtocol::Mode()'],['../unionCarrierProtocol.html#a5fed7d2b743b55fb9a95293f026a9c24',1,'CarrierProtocol::Mode()'],['../unionCoolixProtocol.html#a5f2ec6733ba352bd48657adbf4f30985',1,'CoolixProtocol::Mode()'],['../unionCoronaProtocol.html#aad77fd87c02ef022da013116123d3531',1,'CoronaProtocol::Mode()'],['../unionDaikinESPProtocol.html#aefdc3a04bf204c67e206fef9ed3f5437',1,'DaikinESPProtocol::Mode()'],['../unionDaikin2Protocol.html#acfbbd30de1109b5a9785a6b94ec90af0',1,'Daikin2Protocol::Mode()'],['../unionDaikin216Protocol.html#aebf6b168e83ebfac591e388406a30357',1,'Daikin216Protocol::Mode()'],['../unionDaikin160Protocol.html#a7a543fcb3ba65efbb38656d38eed1141',1,'Daikin160Protocol::Mode()'],['../unionDaikin176Protocol.html#a0293203bc447806c08ea522d6eb91495',1,'Daikin176Protocol::Mode()'],['../unionDaikin128Protocol.html#a14769c0405d7bcf2c45671c4c8c915ff',1,'Daikin128Protocol::Mode()'],['../unionDaikin152Protocol.html#af73fd18c8bd261cb38a36f9c8342b4bc',1,'Daikin152Protocol::Mode()'],['../unionDaikin64Protocol.html#a34934dd4432c5e99cdc2a17b6af803b9',1,'Daikin64Protocol::Mode()'],['../unionDelonghiProtocol.html#a41b3aa93923059ec0bc099a592318ff0',1,'DelonghiProtocol::Mode()'],['../unionEcoclimProtocol.html#a25d3ca6d95d9ed88e01f512aec8f0765',1,'EcoclimProtocol::Mode()'],['../unionElectraProtocol.html#a27e64c16e4cefeac55cd12165554e0b0',1,'ElectraProtocol::Mode()'],['../unionFujitsuProtocol.html#aa9260ff8cda7409dc14b9b057ad903a5',1,'FujitsuProtocol::Mode()'],['../unionGoodweatherProtocol.html#a28863cfa136ed7014d8ca982d38a4539',1,'GoodweatherProtocol::Mode()'],['../unionGreeProtocol.html#aacd25e508a37e0012295a87e712987ce',1,'GreeProtocol::Mode()'],['../unionHaierProtocol.html#aab10d402084329d472e08385cc9645ec',1,'HaierProtocol::Mode()'],['../unionHaierYRW02Protocol.html#a8b9060ce2e0b1e9192191e6ae68277dd',1,'HaierYRW02Protocol::Mode()'],['../unionHitachiProtocol.html#a33a6af1c7bb33cd97361f2602c215ab2',1,'HitachiProtocol::Mode()'],['../unionHitachi424Protocol.html#a6ddbf518e843e9021bbd0463911b4844',1,'Hitachi424Protocol::Mode()'],['../unionHitachi1Protocol.html#a0434892d9ad4acaa36ef10810fb4b8fe',1,'Hitachi1Protocol::Mode()'],['../unionKelvinatorProtocol.html#abd6a849c39d0e7e231a1cf42d32f52e7',1,'KelvinatorProtocol::Mode()'],['../unionLGProtocol.html#adea2990a6e13a31ecb6f8c70c0702543',1,'LGProtocol::Mode()'],['../unionMideaProtocol.html#aa0255e9e1351d594b2e2c8c6f9698e1a',1,'MideaProtocol::Mode()'],['../unionMitsubishi144Protocol.html#aa387b388f300a2098fe9c965e86b9d95',1,'Mitsubishi144Protocol::Mode()'],['../unionMitsubishi136Protocol.html#a4af660641dfa4412b4993f82eb241765',1,'Mitsubishi136Protocol::Mode()'],['../unionMitsubishi112Protocol.html#ae3ff03a52146e8dff59f0755b7d59333',1,'Mitsubishi112Protocol::Mode()'],['../unionMitsubishi152Protocol.html#a36477f5724467a75f32f2d25fee4db73',1,'Mitsubishi152Protocol::Mode()'],['../unionMitsubishi88Protocol.html#a947e25b4cfbb171aeb42d3a60404d751',1,'Mitsubishi88Protocol::Mode()'],['../unionNeoclimaProtocol.html#ad7f68fc3c6b62f74f4025edbd57a5e5b',1,'NeoclimaProtocol::Mode()'],['../unionPanasonicAc32Protocol.html#adc5a9e48b207202c5361e700a06157e2',1,'PanasonicAc32Protocol::Mode()'],['../unionSamsungProtocol.html#a46106899d30f8e503b4fc190d11d1c48',1,'SamsungProtocol::Mode()'],['../unionSanyoProtocol.html#a0c36d7f731d49be5baab0ea925401c93',1,'SanyoProtocol::Mode()'],['../unionSharpProtocol.html#a44a57c217d0f1065d4c480b32002455d',1,'SharpProtocol::Mode()'],['../unionTcl112Protocol.html#a96d87be2a38710de21cecfab0050ff95',1,'Tcl112Protocol::Mode()'],['../unionTechnibelProtocol.html#ad6b2e2f016fe885859bd6622ec37d7dd',1,'TechnibelProtocol::Mode()'],['../unionTecoProtocol.html#a40b8ca2a2126c4bde467a308472ca446',1,'TecoProtocol::Mode()'],['../unionToshibaProtocol.html#ae821300a670c95fb9e34243d8efec1bf',1,'ToshibaProtocol::Mode()'],['../unionTranscoldProtocol.html#a78a73050062dbb8aa24dce07a0a382ff',1,'TranscoldProtocol::Mode()'],['../unionTrotecProtocol.html#ae86771f0cdffdec88b0be265cd9e2524',1,'TrotecProtocol::Mode()'],['../unionTrumaProtocol.html#acf754cf5578169a1e94607c3f0c3916f',1,'TrumaProtocol::Mode()'],['../unionVestelProtocol.html#a60edaaaacdcfa5aefa957c14579f671a',1,'VestelProtocol::Mode()'],['../unionVoltasProtocol.html#ad991a7ccaf9caa0b9f7880f4138f1dab',1,'VoltasProtocol::Mode()'],['../unionWhirlpoolProtocol.html#a0196cbbf3d41cb867f857c786b45a580',1,'WhirlpoolProtocol::Mode()']]], - ['modebutton_6929',['ModeButton',['../unionDaikin176Protocol.html#af48f77b741bcfa7717497077c50ee240',1,'Daikin176Protocol']]], - ['model_6930',['Model',['../unionHitachi1Protocol.html#aad97f1edb72b8786423089f1dad70681',1,'Hitachi1Protocol::Model()'],['../unionSharpProtocol.html#acdaebb53185b4c6f59c9fedabe9586ba',1,'SharpProtocol::Model()'],['../structstdAc_1_1state__t.html#aa1a57a63b2ea80c1f9c4a1bcf16a4c62',1,'stdAc::state_t::model()']]], - ['model2_6931',['Model2',['../unionSharpProtocol.html#a4e9764f8c1b98a6108f0de676d618dd3',1,'SharpProtocol']]], - ['modela_6932',['ModelA',['../unionGreeProtocol.html#a66fdedd8318541269f0ab9ae3b832813',1,'GreeProtocol']]], - ['modulation_6933',['modulation',['../classIRsend.html#a11e26c03c87e2bed756eb7f318570bd8',1,'IRsend']]], - ['mold_6934',['Mold',['../unionDaikinESPProtocol.html#a61c7eeeb3589f775897d79a130dd1be8',1,'DaikinESPProtocol::Mold()'],['../unionDaikin2Protocol.html#a18207f0f0913ade09f16ba2e98a5dbf1',1,'Daikin2Protocol::Mold()']]], - ['mux_6935',['mux',['../namespace__IRrecv.html#a1baf83e60312b43397ca8b9d185fb469',1,'_IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.html deleted file mode 100644 index 84d878b81..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.js deleted file mode 100644 index 0a9c311d5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['next_6936',['next',['../classIRac.html#ae85d7ac0c58028b2547518f88d3e98fe',1,'IRac']]], - ['night_6937',['Night',['../unionArgoProtocol.html#a6dbfb2137f0e64a65e3aa45a50485fbe',1,'ArgoProtocol::Night()'],['../unionMitsubishi152Protocol.html#a2ad34c4b3a726495ec23ca7af5a2a540',1,'Mitsubishi152Protocol::Night()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.html deleted file mode 100644 index b0d9b7b20..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.js deleted file mode 100644 index cfb189049..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_e.js +++ /dev/null @@ -1,36 +0,0 @@ -var searchData= -[ - ['offhalfhour_6938',['OffHalfHour',['../unionDaikin128Protocol.html#a95e474c4f74f8921d1bbe42a06c58aa6',1,'Daikin128Protocol::OffHalfHour()'],['../unionDaikin64Protocol.html#af27302ff8553d43234c782432556482b',1,'Daikin64Protocol::OffHalfHour()']]], - ['offhour_6939',['OffHour',['../unionSanyoProtocol.html#a819d8fa041aa52b94b366ced926828d9',1,'SanyoProtocol']]], - ['offhours_6940',['OffHours',['../unionDaikin128Protocol.html#a2cff2aa98cb96d420ee9f7745af05b2a',1,'Daikin128Protocol::OffHours()'],['../unionDaikin64Protocol.html#aa0be38e313504c06a83d613823b08d67',1,'Daikin64Protocol::OffHours()'],['../unionDelonghiProtocol.html#ae699f25608c0f66aafaf7cb50e9c0258',1,'DelonghiProtocol::OffHours()'],['../unionEcoclimProtocol.html#ab2b370d17c8b7153869a3efb6cc9af67',1,'EcoclimProtocol::OffHours()'],['../unionHaierProtocol.html#aecaad31185de1e7843047a9b9194d55b',1,'HaierProtocol::OffHours()'],['../unionVestelProtocol.html#ada82c37fc9adf2ed34735b0ff05b70b6',1,'VestelProtocol::OffHours()'],['../unionWhirlpoolProtocol.html#a70c2d80980c585fac6581d5a4da08447',1,'WhirlpoolProtocol::OffHours()']]], - ['offmins_6941',['OffMins',['../unionDelonghiProtocol.html#a0d0acd3e8c1ccd190076db4287251096',1,'DelonghiProtocol::OffMins()'],['../unionHaierProtocol.html#a6eec6ff574e93f327ca567251b37e33b',1,'HaierProtocol::OffMins()'],['../unionWhirlpoolProtocol.html#a4f3fecf53dab7c9ffb8ed02c71eb652d',1,'WhirlpoolProtocol::OffMins()']]], - ['offtenmins_6942',['OffTenMins',['../unionEcoclimProtocol.html#a453dcd8e81eced1362f352c21809deab',1,'EcoclimProtocol::OffTenMins()'],['../unionVestelProtocol.html#add80ad31a31c042837492ae558deb8ce',1,'VestelProtocol::OffTenMins()']]], - ['offtime_6943',['OffTime',['../unionDaikinESPProtocol.html#a1e74e0e3c6ba822ccb32aa052bb47f05',1,'DaikinESPProtocol::OffTime()'],['../unionDaikin2Protocol.html#ab0bdcd7cb92206426feae8bbf408fc0f',1,'Daikin2Protocol::OffTime()']]], - ['offtimeperiod_6944',['offTimePeriod',['../classIRsend.html#a9e45c9e4f54db86c1f3e506cd72fe4c1',1,'IRsend']]], - ['offtimer_6945',['OffTimer',['../unionCarrierProtocol.html#a42fcd3b5c796076fa372985b3b1cd473',1,'CarrierProtocol::OffTimer()'],['../unionDaikinESPProtocol.html#ad5c9be68e472eb538be020bc4595da61',1,'DaikinESPProtocol::OffTimer()'],['../unionDaikin2Protocol.html#a8064a7edb7a307331b5e7232adc09234',1,'Daikin2Protocol::OffTimer()'],['../unionDaikin128Protocol.html#aa9f559a12057893bb936b3972ff63972',1,'Daikin128Protocol::OffTimer()'],['../unionDaikin64Protocol.html#a6866d3ed0105d0bb807645723feab21f',1,'Daikin64Protocol::OffTimer()'],['../unionDelonghiProtocol.html#a0f27d98df3895d7cf8fef26602a2ea1d',1,'DelonghiProtocol::OffTimer()'],['../unionFujitsuProtocol.html#a28481e54ff98309f7456a870a987a0cc',1,'FujitsuProtocol::OffTimer()'],['../unionHaierProtocol.html#a6f3893711bffc1d59d8e3d76e7a954a2',1,'HaierProtocol::OffTimer()'],['../unionMideaProtocol.html#afd53c8223249e271fe48d03c67a74364',1,'MideaProtocol::OffTimer()'],['../unionSanyoProtocol.html#a8cd49c1eea805eb74af696079760a8fe',1,'SanyoProtocol::OffTimer()'],['../unionVestelProtocol.html#afe4ad429db29472e41a9db0f5eb927fe',1,'VestelProtocol::OffTimer()']]], - ['offtimer12hr_6946',['OffTimer12Hr',['../unionVoltasProtocol.html#a6d55446514c9a0209209504de336a0b5',1,'VoltasProtocol']]], - ['offtimerenable_6947',['OffTimerEnable',['../unionCarrierProtocol.html#a15e27c0710c706b2f1e8227a962fc722',1,'CarrierProtocol::OffTimerEnable()'],['../unionFujitsuProtocol.html#a9c8c3d1304617e70a0367f97d37eb98f',1,'FujitsuProtocol::OffTimerEnable()'],['../unionVoltasProtocol.html#a415a13e7722786f41b33c1db78771c8e',1,'VoltasProtocol::OffTimerEnable()']]], - ['offtimerenabled_6948',['OffTimerEnabled',['../unionWhirlpoolProtocol.html#a9288dc4e7ab5e59fc16885771268a856',1,'WhirlpoolProtocol']]], - ['offtimerhigh_6949',['OffTimerHigh',['../unionHitachi1Protocol.html#a10702ba90386aba2eb25280f54e7cf44',1,'Hitachi1Protocol']]], - ['offtimerhrs_6950',['OffTimerHrs',['../unionVoltasProtocol.html#aeef99d8c93860c34eb08f1c591d1da9f',1,'VoltasProtocol']]], - ['offtimerlow_6951',['OffTimerLow',['../unionHitachi1Protocol.html#ae724c85578d3d211ca17f3778a8cd599',1,'Hitachi1Protocol']]], - ['offtimermins_6952',['OffTimerMins',['../unionVoltasProtocol.html#a243f1a105ba96c4830d0b4ce66a75a4e',1,'VoltasProtocol']]], - ['onhalfhour_6953',['OnHalfHour',['../unionDaikin128Protocol.html#a89c02e7657a06fe65f924480acdc9cf0',1,'Daikin128Protocol::OnHalfHour()'],['../unionDaikin64Protocol.html#a0a4c0f02f2dab9dfb9ec52f57b527d37',1,'Daikin64Protocol::OnHalfHour()']]], - ['onhours_6954',['OnHours',['../unionDaikin128Protocol.html#a25cb19708a89d2b685d09c6710155646',1,'Daikin128Protocol::OnHours()'],['../unionDaikin64Protocol.html#ab80c9a47ba53f044dc6f236bb635511e',1,'Daikin64Protocol::OnHours()'],['../unionDelonghiProtocol.html#af5cd29dcc62aa712c9754b9729e528bb',1,'DelonghiProtocol::OnHours()'],['../unionEcoclimProtocol.html#af4ae2762de59708ae92670a5deaaac61',1,'EcoclimProtocol::OnHours()'],['../unionHaierProtocol.html#af08311ee6680b3a6951bd200e2b8f310',1,'HaierProtocol::OnHours()'],['../unionVestelProtocol.html#adbcdeb4f7db89ef89217593f959f4592',1,'VestelProtocol::OnHours()'],['../unionWhirlpoolProtocol.html#a0ecde3649180f2d47e4932bb5e7cb558',1,'WhirlpoolProtocol::OnHours()']]], - ['onmins_6955',['OnMins',['../unionDelonghiProtocol.html#ace54d8cccf1885084f8c641d234b15fe',1,'DelonghiProtocol::OnMins()'],['../unionHaierProtocol.html#a65fe65bdfb819fec434eba573daccc34',1,'HaierProtocol::OnMins()'],['../unionWhirlpoolProtocol.html#ab27e3d443afec8d26d341e62fa4cbf7c',1,'WhirlpoolProtocol::OnMins()']]], - ['ontenmins_6956',['OnTenMins',['../unionEcoclimProtocol.html#afad5515fac563e6a74b2fc19032be0a6',1,'EcoclimProtocol::OnTenMins()'],['../unionVestelProtocol.html#a76f1a69f268607ff2b9b9728c50b013a',1,'VestelProtocol::OnTenMins()']]], - ['ontime_6957',['OnTime',['../unionDaikinESPProtocol.html#a95a27ed63686d577accdeefb407e3bc3',1,'DaikinESPProtocol::OnTime()'],['../unionDaikin2Protocol.html#a4fadf043415c8f20235a060f725fcd30',1,'Daikin2Protocol::OnTime()']]], - ['ontimeperiod_6958',['onTimePeriod',['../classIRsend.html#aaaa65f31dbea033f8130e847b0366d94',1,'IRsend']]], - ['ontimer_6959',['OnTimer',['../unionCarrierProtocol.html#a8b66fd8c444395f14d663000ea5a27ee',1,'CarrierProtocol::OnTimer()'],['../unionDaikinESPProtocol.html#aa39934433625161ff928097e52bff7d3',1,'DaikinESPProtocol::OnTimer()'],['../unionDaikin2Protocol.html#aa20abbbeb32f6c73e2f389b1e163814c',1,'Daikin2Protocol::OnTimer()'],['../unionDaikin128Protocol.html#a51462af9615909d23985476025d9a609',1,'Daikin128Protocol::OnTimer()'],['../unionDaikin64Protocol.html#a5ac7df474efab5bcb086df1c706d392b',1,'Daikin64Protocol::OnTimer()'],['../unionDelonghiProtocol.html#a742d638f420f489e67f03c98fab3cd9d',1,'DelonghiProtocol::OnTimer()'],['../unionFujitsuProtocol.html#af7cd4cf5d3e1fe208580a710901473d4',1,'FujitsuProtocol::OnTimer()'],['../unionHaierProtocol.html#ae5c9fd1397bcf3c6737c38d8e76682b1',1,'HaierProtocol::OnTimer()'],['../unionVestelProtocol.html#a1915bb5909374c75f4ec45ddb0584f9f',1,'VestelProtocol::OnTimer()']]], - ['ontimer12hr_6960',['OnTimer12Hr',['../unionVoltasProtocol.html#a600e00d4c64841f9ce11490197bfbc0d',1,'VoltasProtocol']]], - ['ontimerenable_6961',['OnTimerEnable',['../unionCarrierProtocol.html#aadf3236a9a5883fc7f263516be951e0c',1,'CarrierProtocol::OnTimerEnable()'],['../unionFujitsuProtocol.html#a7fc1d3edb5d3d604d13940e21d534d57',1,'FujitsuProtocol::OnTimerEnable()'],['../unionVoltasProtocol.html#a26f169f663b7cbac7e6235b7320929da',1,'VoltasProtocol::OnTimerEnable()']]], - ['ontimerenabled_6962',['OnTimerEnabled',['../unionWhirlpoolProtocol.html#a5e35f030a9ff30985738fd534154a122',1,'WhirlpoolProtocol']]], - ['ontimerhigh_6963',['OnTimerHigh',['../unionHitachi1Protocol.html#a74d9afe7eb31941ad8991d5a0533c67a',1,'Hitachi1Protocol']]], - ['ontimerhrs_6964',['OnTimerHrs',['../unionVoltasProtocol.html#ad38a8a291f71ccb4c34363c4662994d6',1,'VoltasProtocol']]], - ['ontimerlow_6965',['OnTimerLow',['../unionHitachi1Protocol.html#a682cda9a01e0f9f303b670164e0bce3b',1,'Hitachi1Protocol']]], - ['ontimermins_6966',['OnTimerMins',['../unionVoltasProtocol.html#a38cb13bbd23b5680bcdbfcf5b2223a71',1,'VoltasProtocol']]], - ['outputoff_6967',['outputOff',['../classIRsend.html#a5e80df8b2ee534dbd6ddc30a852a2791',1,'IRsend']]], - ['outputon_6968',['outputOn',['../classIRsend.html#a4acfc45b339e724e2dbdff24762dfa7d',1,'IRsend']]], - ['outsidequiet_6969',['OutsideQuiet',['../unionFujitsuProtocol.html#a5ddbee1e404cbabc7e203bbd886e7021',1,'FujitsuProtocol']]], - ['overflow_6970',['overflow',['../structirparams__t.html#aa39b4f38e0ffcd470766373e03548e58',1,'irparams_t::overflow()'],['../classdecode__results.html#a821bc53c006bab3283c6b8592f0c43d3',1,'decode_results::overflow()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.html deleted file mode 100644 index a708dbf04..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.js b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.js deleted file mode 100644 index f61d00433..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/search/variables_f.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['pad_6971',['pad',['../unionDaikin2Protocol.html#ac6b425dc516537ae3178583ff26e0948',1,'Daikin2Protocol::pad()'],['../unionDaikin128Protocol.html#aeef026f1ecb9696a7bf01b17de88951e',1,'Daikin128Protocol::pad()'],['../unionHitachi1Protocol.html#a17a8788deccc8c3648b91be5de4e1964',1,'Hitachi1Protocol::pad()'],['../unionMitsubishi136Protocol.html#a66638db2b4d4c1d969d0c6809b991ed0',1,'Mitsubishi136Protocol::pad()'],['../unionSharpProtocol.html#a315ed64d8b03c559003aa032152c742e',1,'SharpProtocol::pad()']]], - ['pad0_6972',['pad0',['../unionDaikin216Protocol.html#ac7e3625c88ded6bf5e9e744b78af3877',1,'Daikin216Protocol::pad0()'],['../unionDaikin160Protocol.html#a422b94d3ddc17dafac919a04b6779e0e',1,'Daikin160Protocol::pad0()'],['../unionDaikin176Protocol.html#a1c883c0473df6419fa79d9e7ec044400',1,'Daikin176Protocol::pad0()'],['../unionDaikin152Protocol.html#accd26b9ae5a2b4689b1d44715cdedae5',1,'Daikin152Protocol::pad0()'],['../unionHitachiProtocol.html#a9141747df7882925a8442ae0f261e1cc',1,'HitachiProtocol::pad0()'],['../unionHitachi424Protocol.html#aca5baed417c2c06be4e912c596b5cacf',1,'Hitachi424Protocol::pad0()'],['../unionKelvinatorProtocol.html#aa67bf941395c4a614f8cc70ce29bffcf',1,'KelvinatorProtocol::pad0()'],['../unionMitsubishi144Protocol.html#a7771c9cd00799d3bed0ee73d3a3172bd',1,'Mitsubishi144Protocol::pad0()'],['../unionMitsubishi112Protocol.html#a07a1682430a0a2c63614d09ad0a7a5a0',1,'Mitsubishi112Protocol::pad0()'],['../unionSamsungProtocol.html#adcf56d5e9d61401deba67ae4bed32797',1,'SamsungProtocol::pad0()'],['../unionTcl112Protocol.html#a8da5d4f35f677c8d81ea628a753e110f',1,'Tcl112Protocol::pad0()'],['../unionWhirlpoolProtocol.html#a85afaae2ea603ff9aad240a67b9a770f',1,'WhirlpoolProtocol::pad0()']]], - ['pad1_6973',['pad1',['../unionDaikin216Protocol.html#a3953e06ed7903c50cdfa7fa4dad77c93',1,'Daikin216Protocol::pad1()'],['../unionDaikin160Protocol.html#a55ae3e21ecc536fdeb8f773beaedf1bf',1,'Daikin160Protocol::pad1()'],['../unionDaikin176Protocol.html#a336e5ffedd9eda2778f8e1652cd3f349',1,'Daikin176Protocol::pad1()'],['../unionDaikin152Protocol.html#a4c24a70b48139610acb457eb915e76bf',1,'Daikin152Protocol::pad1()'],['../unionHitachiProtocol.html#a28391ab1e1994d254d9abf057c2b87ba',1,'HitachiProtocol::pad1()'],['../unionHitachi424Protocol.html#abb196383de210b25ec3d56b7f02ca9c3',1,'Hitachi424Protocol::pad1()'],['../unionKelvinatorProtocol.html#a9feee780a54bfb86968f137080d3d68e',1,'KelvinatorProtocol::pad1()'],['../unionMitsubishi144Protocol.html#ad256f8e7f36c654002807b7fbb5038dd',1,'Mitsubishi144Protocol::pad1()'],['../unionMitsubishi112Protocol.html#af5c30781b3183c3530b4e401952a5666',1,'Mitsubishi112Protocol::pad1()'],['../unionSamsungProtocol.html#a197a2005789029b5037840fa5f0945f1',1,'SamsungProtocol::pad1()'],['../unionTcl112Protocol.html#a701ddcba3061c25b515a1d7788ddec12',1,'Tcl112Protocol::pad1()'],['../unionWhirlpoolProtocol.html#aed57244f4451176e68ce407ced81eb2c',1,'WhirlpoolProtocol::pad1()']]], - ['pad2_6974',['pad2',['../unionDaikin216Protocol.html#a2ad46cbab590d8ce0fcf43004a77a759',1,'Daikin216Protocol::pad2()'],['../unionDaikin160Protocol.html#a9465c279ea0be201cf8417fe3ede965d',1,'Daikin160Protocol::pad2()'],['../unionDaikin176Protocol.html#aae23dc257ea77a204fd2b6b22c9fd91b',1,'Daikin176Protocol::pad2()'],['../unionDaikin152Protocol.html#ab66afe90c383d6a24224327a88a10acc',1,'Daikin152Protocol::pad2()'],['../unionHitachi424Protocol.html#ab8325b434d355655f432d1d400a651ee',1,'Hitachi424Protocol::pad2()']]], - ['pad3_6975',['pad3',['../unionDaikin216Protocol.html#aeef7d4b689a7dccc73c201d1b5d96a2f',1,'Daikin216Protocol::pad3()'],['../unionDaikin176Protocol.html#a9959937c9a6bffc149060886f1ebb9b3',1,'Daikin176Protocol::pad3()']]], - ['padding_6976',['padding',['../unionmagiquest.html#a28ca4be56c78ef762f87171506dc6e93',1,'magiquest']]], - ['params_6977',['params',['../namespace__IRrecv.html#a75e3f81d5e64fd51c049231876a37906',1,'_IRrecv']]], - ['params_5fsave_6978',['params_save',['../namespace__IRrecv.html#af604d4630a17b4113c0e086e513187d1',1,'_IRrecv']]], - ['periodoffset_6979',['periodOffset',['../classIRsend.html#a1b5180cbf4f88f19fca3f677e1e91b96',1,'IRsend']]], - ['power_6980',['Power',['../unionAmcorProtocol.html#ab6d6b470c8e3c80ee37eb31a048919db',1,'AmcorProtocol::Power()'],['../unionArgoProtocol.html#a72c5dbd39ccbac31d5cfc39beaa87d92',1,'ArgoProtocol::Power()'],['../unionCarrierProtocol.html#a9f039bf33bbe868118f14c28d6731718',1,'CarrierProtocol::Power()'],['../unionCoronaProtocol.html#a7da68dc07f9ef4ab0545e9156f9408c4',1,'CoronaProtocol::Power()'],['../unionDaikinESPProtocol.html#a8a5b839b9908359b382a105068eaf840',1,'DaikinESPProtocol::Power()'],['../unionDaikin2Protocol.html#a31d4d361af1f3c7f6eb4021a520f4572',1,'Daikin2Protocol::Power()'],['../unionDaikin216Protocol.html#ade14eb9841ea4bc09157b145145bfda8',1,'Daikin216Protocol::Power()'],['../unionDaikin160Protocol.html#a520571b287c0db8a941fc1f9e030ef0c',1,'Daikin160Protocol::Power()'],['../unionDaikin176Protocol.html#a80fd9f79014f0fe3f2fa91ee6a3e7bc2',1,'Daikin176Protocol::Power()'],['../unionDaikin128Protocol.html#aba3cecc50eee1143e2f6eadd6d2026b4',1,'Daikin128Protocol::Power()'],['../unionDaikin152Protocol.html#a5cdf563830a35ee28d239d912bd5c95c',1,'Daikin152Protocol::Power()'],['../unionDaikin64Protocol.html#a4290051abed062bb5993db071a28ef61',1,'Daikin64Protocol::Power()'],['../unionDelonghiProtocol.html#a5dccd7aa1927571e12d4244e1c179578',1,'DelonghiProtocol::Power()'],['../unionEcoclimProtocol.html#ae022c9f0fe7a6912f0b9c335388cd386',1,'EcoclimProtocol::Power()'],['../unionElectraProtocol.html#a907a426aa30a50667d5e4f4615d71518',1,'ElectraProtocol::Power()'],['../unionFujitsuProtocol.html#ad6ac9cd452bac615abf2015e5baeb934',1,'FujitsuProtocol::Power()'],['../unionGoodweatherProtocol.html#ac3a2cf92410edd8ad11550f6aa051bac',1,'GoodweatherProtocol::Power()'],['../unionGreeProtocol.html#ab04d1d5bdaf8fb0b7129e210de14a772',1,'GreeProtocol::Power()'],['../unionHaierYRW02Protocol.html#ae87a93806911792662391a671607a760',1,'HaierYRW02Protocol::Power()'],['../unionHitachiProtocol.html#abec059afed0891f40f50b1024f211ee1',1,'HitachiProtocol::Power()'],['../unionHitachi424Protocol.html#a03af2b7a7c333c9069c4a689631cbc84',1,'Hitachi424Protocol::Power()'],['../unionHitachi1Protocol.html#a67b84f1d4c3720692e8de833b3910b88',1,'Hitachi1Protocol::Power()'],['../unionKelvinatorProtocol.html#a4bc98c7ae62273e8d8d60d71fdb44750',1,'KelvinatorProtocol::Power()'],['../unionLGProtocol.html#a5748d31340964b885933fbb6ee7fd235',1,'LGProtocol::Power()'],['../unionMideaProtocol.html#a6b534bb5845c3c184ee43b87995cff32',1,'MideaProtocol::Power()'],['../unionMitsubishi144Protocol.html#af99f269ce1b905c47b9417c41189c94b',1,'Mitsubishi144Protocol::Power()'],['../unionMitsubishi136Protocol.html#aa5df3d147cbd1c2dd3f17028c0ff36dc',1,'Mitsubishi136Protocol::Power()'],['../unionMitsubishi112Protocol.html#ad4c47f745c6ff6a349457ccc66f4e091',1,'Mitsubishi112Protocol::Power()'],['../unionMitsubishi152Protocol.html#abb8ac556d7ead5d1083af940130a9805',1,'Mitsubishi152Protocol::Power()'],['../unionMitsubishi88Protocol.html#a48eb181bcb178491d0cd399d69487f2b',1,'Mitsubishi88Protocol::Power()'],['../unionNeoclimaProtocol.html#a25d1e93aeea3a386d31bc5f665a52444',1,'NeoclimaProtocol::Power()'],['../unionSanyoProtocol.html#ae3626ac8b929a397f19705a29368d457',1,'SanyoProtocol::Power()'],['../unionTcl112Protocol.html#af087805327d98279e00c8f6427a2f9e7',1,'Tcl112Protocol::Power()'],['../unionTechnibelProtocol.html#aaab9c2a129506d34f9f0879cb2657f4d',1,'TechnibelProtocol::Power()'],['../unionTecoProtocol.html#a43035d0a8a9f00c5330a776a26b70465',1,'TecoProtocol::Power()'],['../unionTrotecProtocol.html#aabb71ec60601e95b6d6613e4407262cc',1,'TrotecProtocol::Power()'],['../unionVestelProtocol.html#aeca45915cf95898c9baa0e77d3a6e517',1,'VestelProtocol::Power()'],['../unionVoltasProtocol.html#a554e4bce95426a096f090cc6890f46f2',1,'VoltasProtocol::Power()'],['../unionWhirlpoolProtocol.html#a33653fd6f01c43852cf44b5feb0cb349',1,'WhirlpoolProtocol::Power()'],['../structstdAc_1_1state__t.html#ab85d37cc99bbbc4915331369c4ea622e',1,'stdAc::state_t::power()']]], - ['power1_6981',['Power1',['../unionSamsungProtocol.html#af389a11a1f56c92dfe67ce151310d0d8',1,'SamsungProtocol']]], - ['power2_6982',['Power2',['../unionDaikin2Protocol.html#ad38268911be9104ab7fcaf0d35dd4c6f',1,'Daikin2Protocol']]], - ['power6_6983',['Power6',['../unionSamsungProtocol.html#a4b30b11279244b37fa5b82a5203a3a77',1,'SamsungProtocol']]], - ['powerbutton_6984',['PowerButton',['../unionCoronaProtocol.html#abceccc1306d3a78be6177758f3056a5a',1,'CoronaProtocol']]], - ['powerflag_6985',['powerFlag',['../classIRCoolixAC.html#a5984ff64ff14df92291618a647da08f9',1,'IRCoolixAC']]], - ['powerful_6986',['Powerful',['../unionDaikinESPProtocol.html#a16b091d1faf200607bd37ff48ddfb940',1,'DaikinESPProtocol::Powerful()'],['../unionDaikin2Protocol.html#ac7b3b9d7f424ccc78749d944b59c7372',1,'Daikin2Protocol::Powerful()'],['../unionDaikin216Protocol.html#a2cb72f5fea3b5298b8de45060c476a17',1,'Daikin216Protocol::Powerful()'],['../unionDaikin152Protocol.html#aa4cdbef46c721491cb854b36d6de89a3',1,'Daikin152Protocol::Powerful()']]], - ['powerful10_6987',['Powerful10',['../unionSamsungProtocol.html#a500901489b00950de98ea922c7e8adcf',1,'SamsungProtocol']]], - ['powerful8_6988',['Powerful8',['../unionSamsungProtocol.html#a4fe9bf8b0d5d30af2b9b4dc20d8f68e3',1,'SamsungProtocol']]], - ['poweroff_6989',['PowerOff',['../unionTrumaProtocol.html#ac245b1ff37fb967f363cd8cae8b12b22',1,'TrumaProtocol']]], - ['powerspecial_6990',['PowerSpecial',['../unionSharpProtocol.html#aa2fd90d4f6117177dec13282ccc13ead',1,'SharpProtocol']]], - ['powertoggle_6991',['PowerToggle',['../unionAirwellProtocol.html#a9a3893a0ec7811202697adeb60d89775',1,'AirwellProtocol::PowerToggle()'],['../unionHitachi1Protocol.html#adf8067b7e2d7ea3afb6ffae08a9cf609',1,'Hitachi1Protocol::PowerToggle()'],['../unionPanasonicAc32Protocol.html#a5d6c6d8100c60323449ba5f96e147172',1,'PanasonicAc32Protocol::PowerToggle()']]], - ['prefix_6992',['Prefix',['../unionHaierProtocol.html#a6c15a8e22231dae23ffa8bef78420054',1,'HaierProtocol::Prefix()'],['../unionHaierYRW02Protocol.html#af55185fad3229f2011b5917412ad8c1b',1,'HaierYRW02Protocol::Prefix()']]], - ['protocol_6993',['Protocol',['../unionFujitsuProtocol.html#acf8b6b900c9dab936b4888b52e92e3b5',1,'FujitsuProtocol::Protocol()'],['../structstdAc_1_1state__t.html#af59897778be0e571f77dd11337352c27',1,'stdAc::state_t::protocol()']]], - ['purify_6994',['Purify',['../unionDaikin2Protocol.html#ad3c5427e7d4d0182bb86f61fa2c2484a',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/splitbar.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/splitbar.png deleted file mode 100644 index fe895f2c5..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/splitbar.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection-members.html deleted file mode 100644 index 3d0c5bdc7..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    CoronaSection Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection.html deleted file mode 100644 index 61571e5e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structCoronaSection.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -IRremoteESP8266: CoronaSection Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    CoronaSection Struct Reference
    -
    -
    - -

    Native representation of a section of a Corona A/C message. - More...

    - -

    #include <ir_Corona.h>

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

    -Public Attributes

    uint8_t Header0
     
    uint8_t Header1
     
    uint8_t Label
     
    uint8_t Data0
     
    uint8_t Data0Inv
     
    uint8_t Data1
     
    uint8_t Data1Inv
     
    -

    Detailed Description

    -

    Native representation of a section of a Corona A/C message.

    -

    Member Data Documentation

    - -

    ◆ Data0

    - -
    -
    - - - - -
    uint8_t CoronaSection::Data0
    -
    - -
    -
    - -

    ◆ Data0Inv

    - -
    -
    - - - - -
    uint8_t CoronaSection::Data0Inv
    -
    - -
    -
    - -

    ◆ Data1

    - -
    -
    - - - - -
    uint8_t CoronaSection::Data1
    -
    - -
    -
    - -

    ◆ Data1Inv

    - -
    -
    - - - - -
    uint8_t CoronaSection::Data1Inv
    -
    - -
    -
    - -

    ◆ Header0

    - -
    -
    - - - - -
    uint8_t CoronaSection::Header0
    -
    - -
    -
    - -

    ◆ Header1

    - -
    -
    - - - - -
    uint8_t CoronaSection::Header1
    -
    - -
    -
    - -

    ◆ Label

    - -
    -
    - - - - -
    uint8_t CoronaSection::Label
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t-members.html deleted file mode 100644 index 0c526f445..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    irparams_t Member List
    -
    -
    - -

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

    - - - - - - - - - -
    bufsizeirparams_t
    overflowirparams_t
    rawbufirparams_t
    rawlenirparams_t
    rcvstateirparams_t
    recvpinirparams_t
    timeoutirparams_t
    timerirparams_t
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t.html deleted file mode 100644 index 74d3bcddf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structirparams__t.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - -IRremoteESP8266: irparams_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    irparams_t Struct Reference
    -
    -
    - -

    Information for the interrupt handler. - More...

    - -

    #include <IRrecv.h>

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

    -Public Attributes

    uint8_t recvpin
     
    uint8_t rcvstate
     
    uint16_t timer
     
    uint16_t bufsize
     
    uint16_t * rawbuf
     
    uint16_t rawlen
     
    uint8_t overflow
     
    uint8_t timeout
     
    -

    Detailed Description

    -

    Information for the interrupt handler.

    -

    Member Data Documentation

    - -

    ◆ bufsize

    - -
    -
    - - - - -
    uint16_t irparams_t::bufsize
    -
    - -
    -
    - -

    ◆ overflow

    - -
    -
    - - - - -
    uint8_t irparams_t::overflow
    -
    - -
    -
    - -

    ◆ rawbuf

    - -
    -
    - - - - -
    uint16_t* irparams_t::rawbuf
    -
    - -
    -
    - -

    ◆ rawlen

    - -
    -
    - - - - -
    uint16_t irparams_t::rawlen
    -
    - -
    -
    - -

    ◆ rcvstate

    - -
    -
    - - - - -
    uint8_t irparams_t::rcvstate
    -
    - -
    -
    - -

    ◆ recvpin

    - -
    -
    - - - - -
    uint8_t irparams_t::recvpin
    -
    - -
    -
    - -

    ◆ timeout

    - -
    -
    - - - - -
    uint8_t irparams_t::timeout
    -
    - -
    -
    - -

    ◆ timer

    - -
    -
    - - - - -
    uint16_t irparams_t::timer
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t-members.html deleted file mode 100644 index 4a624fb26..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t-members.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    match_result_t Member List
    -
    -
    - -

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

    - - - - -
    datamatch_result_t
    successmatch_result_t
    usedmatch_result_t
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t.html deleted file mode 100644 index db08c0b2f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structmatch__result__t.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -IRremoteESP8266: match_result_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    match_result_t Struct Reference
    -
    -
    - -

    Results from a data match. - More...

    - -

    #include <IRrecv.h>

    - - - - - - - - -

    -Public Attributes

    bool success
     
    uint64_t data
     
    uint16_t used
     
    -

    Detailed Description

    -

    Results from a data match.

    -

    Member Data Documentation

    - -

    ◆ data

    - -
    -
    - - - - -
    uint64_t match_result_t::data
    -
    - -
    -
    - -

    ◆ success

    - -
    -
    - - - - -
    bool match_result_t::success
    -
    - -
    -
    - -

    ◆ used

    - -
    -
    - - - - -
    uint16_t match_result_t::used
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t-members.html deleted file mode 100644 index 00b774f43..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t-members.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    stdAc::state_t Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t.html deleted file mode 100644 index 28ece11ce..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/structstdAc_1_1state__t.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - -IRremoteESP8266: stdAc::state_t Struct Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    stdAc::state_t Struct Reference
    -
    -
    - -

    Structure to hold a common A/C state. - More...

    - -

    #include <IRsend.h>

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

    -Public Attributes

    decode_type_t protocol
     
    int16_t model
     
    bool power
     
    stdAc::opmode_t mode
     
    float degrees
     
    bool celsius
     
    stdAc::fanspeed_t fanspeed
     
    stdAc::swingv_t swingv
     
    stdAc::swingh_t swingh
     
    bool quiet
     
    bool turbo
     
    bool econo
     
    bool light
     
    bool filter
     
    bool clean
     
    bool beep
     
    int16_t sleep
     
    int16_t clock
     
    -

    Detailed Description

    -

    Structure to hold a common A/C state.

    -

    Member Data Documentation

    - -

    ◆ beep

    - -
    -
    - - - - -
    bool stdAc::state_t::beep
    -
    - -
    -
    - -

    ◆ celsius

    - -
    -
    - - - - -
    bool stdAc::state_t::celsius
    -
    - -
    -
    - -

    ◆ clean

    - -
    -
    - - - - -
    bool stdAc::state_t::clean
    -
    - -
    -
    - -

    ◆ clock

    - -
    -
    - - - - -
    int16_t stdAc::state_t::clock
    -
    - -
    -
    - -

    ◆ degrees

    - -
    -
    - - - - -
    float stdAc::state_t::degrees
    -
    - -
    -
    - -

    ◆ econo

    - -
    -
    - - - - -
    bool stdAc::state_t::econo
    -
    - -
    -
    - -

    ◆ fanspeed

    - -
    -
    - - - - -
    stdAc::fanspeed_t stdAc::state_t::fanspeed
    -
    - -
    -
    - -

    ◆ filter

    - -
    -
    - - - - -
    bool stdAc::state_t::filter
    -
    - -
    -
    - -

    ◆ light

    - -
    -
    - - - - -
    bool stdAc::state_t::light
    -
    - -
    -
    - -

    ◆ mode

    - -
    -
    - - - - -
    stdAc::opmode_t stdAc::state_t::mode
    -
    - -
    -
    - -

    ◆ model

    - -
    -
    - - - - -
    int16_t stdAc::state_t::model
    -
    - -
    -
    - -

    ◆ power

    - -
    -
    - - - - -
    bool stdAc::state_t::power
    -
    - -
    -
    - -

    ◆ protocol

    - -
    -
    - - - - -
    decode_type_t stdAc::state_t::protocol
    -
    - -
    -
    - -

    ◆ quiet

    - -
    -
    - - - - -
    bool stdAc::state_t::quiet
    -
    - -
    -
    - -

    ◆ sleep

    - -
    -
    - - - - -
    int16_t stdAc::state_t::sleep
    -
    - -
    -
    - -

    ◆ swingh

    - -
    -
    - - - - -
    stdAc::swingh_t stdAc::state_t::swingh
    -
    - -
    -
    - -

    ◆ swingv

    - -
    -
    - - - - -
    stdAc::swingv_t stdAc::state_t::swingv
    -
    - -
    -
    - -

    ◆ turbo

    - -
    -
    - - - - -
    bool stdAc::state_t::turbo
    -
    - -
    -
    -
    The documentation for this struct was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_off.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_off.png deleted file mode 100644 index 3b443fc62..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_off.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_on.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_on.png deleted file mode 100644 index e08320fb6..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/sync_on.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_a.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_a.png deleted file mode 100644 index 3b725c41c..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_a.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_b.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_b.png deleted file mode 100644 index e2b4a8638..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_b.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_h.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_h.png deleted file mode 100644 index fd5cb7054..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_h.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_s.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_s.png deleted file mode 100644 index ab478c95b..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tab_s.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tabs.css b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tabs.css deleted file mode 100644 index 7d45d36c1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/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:0px 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:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.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);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{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{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{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:#fff;text-shadow:0px 1px 1px #000}.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;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff 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;border-radius:5px !important;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:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.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;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}} diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/todo.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/todo.html deleted file mode 100644 index 18fef957e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/todo.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -IRremoteESP8266: Todo List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Todo List
    -
    -
    -
    -
    Member IRrecv::decodeLasertag (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLasertagBits, const bool strict=true)
    -
    Convert to using matchManchester() if we can.
    -
    Member IRrecv::decodeRC5 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC5XBits, const bool strict=true)
    -
    Serious testing of the RC-5X and strict aspects needs to be done.
    -
    Member IRrecv::decodeRC6 (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC6Mode0Bits, const bool strict=false)
    -
    Testing of the strict compliance aspects.
    -
    Member IRrecv::decodeSharp (decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpBits, const bool strict=true, const bool expansion=true)
    -
    Need to ensure capture of the inverted message as it can be missed due to the interrupt timeout used to detect an end of message. Several compliance checks are disabled until that is resolved.
    -
    Member IRrecv::matchManchesterData (volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
    -
    Clean up and optimise this. It is just "get it working code" atm.
    -
    Member IRSamsungAc::getSwing (void) const
    -
    (Hollako) Explain why sometimes the LSB of remote_state[9] is a 1. e.g. 0xAE or 0XAF for swing move.
    -
    Member IRSamsungAc::setSwing (const bool on)
    -
    (Hollako) Explain why sometimes the LSB of remote_state[9] is a 1. e.g. 0xAE or 0XAF for swing move.
    -
    Member IRsend::sendLasertag (uint64_t data, uint16_t nbits=kLasertagBits, uint16_t repeat=kLasertagMinRepeat)
    -
    Convert this to use sendManchester() if we can.`
    -
    Member IRsend::sendRC5 (const uint64_t data, uint16_t nbits=kRC5XBits, const uint16_t repeat=kNoRepeat)
    -
    Testing of the RC-5X components.
    -
    Member IRsend::sendSAMSUNG (const uint64_t data, const uint16_t nbits=kSamsungBits, const uint16_t repeat=kNoRepeat)
    -
    Confirm that is actually how Samsung sends a repeat. The refdoc doesn't indicate it is true.
    -
    Member MideaProtocol::__pad2__
    -
    Find out what this bit controls.
    -
    -
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol-members.html deleted file mode 100644 index 2a21a289e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    AirwellProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol.html deleted file mode 100644 index 5285f6670..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAirwellProtocol.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -IRremoteESP8266: AirwellProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    AirwellProtocol Union Reference
    -
    -
    - -

    Native representation of a Airwell A/C message. - More...

    - -

    #include <ir_Airwell.h>

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

    -Public Attributes

    uint64_t raw
     
    struct {
       uint64_t   __pad0__:19
     
       uint64_t   Temp:4
     
       uint64_t   __pad1__:5
     
       uint64_t   Fan:2
     
       uint64_t   Mode:3
     
       uint64_t   PowerToggle:1
     
       uint64_t   __pad2__:0
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Airwell A/C message.

    -

    Member Data Documentation

    - -

    ◆ @1

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::Mode
    -
    - -
    -
    - -

    ◆ PowerToggle

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::PowerToggle
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::raw
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t AirwellProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol-members.html deleted file mode 100644 index 9c15b7fee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    AmcorProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol.html deleted file mode 100644 index ea13655d3..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionAmcorProtocol.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - -IRremoteESP8266: AmcorProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    AmcorProtocol Union Reference
    -
    -
    - -

    Native representation of a Amcor A/C message. - More...

    - -

    #include <ir_Amcor.h>

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

    -Public Attributes

    uint8_t raw [kAmcorStateLength]
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Mode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   Fan:3
     
       uint8_t   __pad2__:1
     
       uint8_t   __pad3__:1
     
       uint8_t   Temp:6
     
       uint8_t   __pad4__:1
     
       uint8_t   __pad5__:8
     
       uint8_t   __pad6__:8
     
       uint8_t   __pad7__:4
     
       uint8_t   Power:4
     
       uint8_t   Max:2
     
       uint8_t   __pad8__:4
     
       uint8_t   Vent:2
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Amcor A/C message.

    -

    Member Data Documentation

    - -

    ◆ @3

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Fan
    -
    - -
    -
    - -

    ◆ Max

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Max
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::raw[kAmcorStateLength]
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Temp
    -
    - -
    -
    - -

    ◆ Vent

    - -
    -
    - - - - -
    uint8_t AmcorProtocol::Vent
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol-members.html deleted file mode 100644 index 8864a8add..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    ArgoProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol.html deleted file mode 100644 index cf092bc37..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionArgoProtocol.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - -IRremoteESP8266: ArgoProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    ArgoProtocol Union Reference
    -
    -
    - -

    Native representation of a Argo A/C message. - More...

    - -

    #include <ir_Argo.h>

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

    -Public Attributes

    uint8_t raw [kArgoStateLength]
     The state in native IR code form. More...
     
    struct {
       uint64_t   __pad0__:8
     
       uint64_t   __pad1__:8
     
       uint64_t   __pad2__:3
     
       uint64_t   Mode:3
     
       uint64_t   Temp:5
     
       uint64_t   Fan:2
     
       uint64_t   RoomTemp:5
     
       uint64_t   Flap:3
     
       uint64_t   __pad3__:3
     
       uint64_t   __pad4__:8
     
       uint64_t   __pad5__:8
     
       uint64_t   __pad6__:3
     
       uint64_t   __pad7__:5
     
       uint32_t   __pad8__:6
     
       uint32_t   __pad9__:1
     
       uint32_t   __pad10__:1
     
       uint32_t   __pad11__:1
     
       uint32_t   __pad12__:1
     
       uint32_t   Night:1
     
       uint32_t   Max:1
     
       uint32_t   __pad13__:1
     
       uint32_t   Power:1
     
       uint32_t   __pad14__:1
     
       uint32_t   iFeel:1
     
       uint32_t   __pad15__:2
     
       uint32_t   Sum:8
     
       uint32_t   __pad16__:6
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Argo A/C message.

    -

    Member Data Documentation

    - -

    ◆ @5

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::Fan
    -
    - -
    -
    - -

    ◆ Flap

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::Flap
    -
    - -
    -
    - -

    ◆ iFeel

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::iFeel
    -
    - -
    -
    - -

    ◆ Max

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::Max
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::Mode
    -
    - -
    -
    - -

    ◆ Night

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::Night
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t ArgoProtocol::raw[kArgoStateLength]
    -
    - -

    The state in native IR code form.

    - -
    -
    - -

    ◆ RoomTemp

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::RoomTemp
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint32_t ArgoProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t ArgoProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol-members.html deleted file mode 100644 index 96e51a162..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    CarrierProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol.html deleted file mode 100644 index b96fb8d6f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCarrierProtocol.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - -IRremoteESP8266: CarrierProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    CarrierProtocol Union Reference
    -
    -
    - -

    Native representation of a Carrier A/C message. - More...

    - -

    #include <ir_Carrier.h>

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

    -Public Attributes

    uint64_t raw
     The state of the IR remote. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:8
     
       uint8_t   Sum:4
     
       uint8_t   Mode:2
     
       uint8_t   Fan:2
     
       uint8_t   Temp:4
     
       uint8_t   __pad2__:1
     
       uint8_t   SwingV:1
     
       uint8_t   __pad3__:2
     
       uint8_t   __pad4__:4
     
       uint8_t   Power:1
     
       uint8_t   OffTimerEnable:1
     
       uint8_t   OnTimerEnable:1
     
       uint8_t   Sleep:1
     
       uint8_t   __pad5__:8
     
       uint8_t   __pad6__:4
     
       uint8_t   OnTimer:4
     
       uint8_t   __pad7__:4
     
       uint8_t   OffTimer:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Carrier A/C message.

    -

    Member Data Documentation

    - -

    ◆ @7

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OffTimerEnable

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::OffTimerEnable
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ OnTimerEnable

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::OnTimerEnable
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t CarrierProtocol::raw
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Sum
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t CarrierProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol-members.html deleted file mode 100644 index 456bd6f6e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    CoolixProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol.html deleted file mode 100644 index dcf7ea750..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoolixProtocol.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - - -IRremoteESP8266: CoolixProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    CoolixProtocol Union Reference
    -
    -
    - -

    Native representation of a Coolix A/C message. - More...

    - -

    #include <ir_Coolix.h>

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

    -Public Attributes

    uint32_t raw
     The state in IR code form. More...
     
    struct {
       uint32_t   __pad0__:1
     
       uint32_t   ZoneFollow1:1
     Control bit for Zone Follow mode. More...
     
       uint32_t   Mode:2
     Operation mode. More...
     
       uint32_t   Temp:4
     Desired temperature (Celsius) More...
     
       uint32_t   SensorTemp:5
     The temperature sensor in the IR remote. More...
     
       uint32_t   Fan:3
     Fan speed. More...
     
       uint32_t   __pad1__:3
     
       uint32_t   ZoneFollow2:1
     Additional control bit for Zone Follow mode. More...
     
       uint32_t   __pad2__:4
     Fixed value 0b1011 / 0xB. More...
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Coolix A/C message.

    -

    Member Data Documentation

    - -

    ◆ @9

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::__pad2__
    -
    - -

    Fixed value 0b1011 / 0xB.

    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::Fan
    -
    - -

    Fan speed.

    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::Mode
    -
    - -

    Operation mode.

    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::raw
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ SensorTemp

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::SensorTemp
    -
    - -

    The temperature sensor in the IR remote.

    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::Temp
    -
    - -

    Desired temperature (Celsius)

    - -
    -
    - -

    ◆ ZoneFollow1

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::ZoneFollow1
    -
    - -

    Control bit for Zone Follow mode.

    - -
    -
    - -

    ◆ ZoneFollow2

    - -
    -
    - - - - -
    uint32_t CoolixProtocol::ZoneFollow2
    -
    - -

    Additional control bit for Zone Follow mode.

    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol-members.html deleted file mode 100644 index e203a53ee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    CoronaProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol.html deleted file mode 100644 index b37b28a5b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol.html +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - -IRremoteESP8266: CoronaProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    CoronaProtocol Union Reference
    -
    -
    - -

    Native representation of a Corona A/C message. - More...

    - -

    #include <ir_Corona.h>

    -
    -Collaboration diagram for CoronaProtocol:
    -
    -
    Collaboration graph
    - - - - -
    [legend]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Attributes

    uint8_t raw [kCoronaAcStateLength]
     The state of the IR remote. More...
     
    CoronaSection sections [kCoronaAcSections]
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:8
     
       uint8_t   __pad2__:8
     
       uint8_t   Fan:2
     
       uint8_t   __pad3__:1
     
       uint8_t   Econo:1
     
       uint8_t   __pad4__:1
     
       uint8_t   __pad5__:1
     
       uint8_t   SwingVToggle:1
     
       uint8_t   __pad6__:1
     
       uint8_t   __pad7__:8
     
       uint8_t   Temp:4
     
       uint8_t   Power:1
     
       uint8_t   PowerButton:1
     
       uint8_t   Mode:2
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Corona A/C message.

    -

    Member Data Documentation

    - -

    ◆ @11

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::Econo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::Power
    -
    - -
    -
    - -

    ◆ PowerButton

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::PowerButton
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::raw[kCoronaAcStateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ sections

    - -
    -
    - - - - -
    CoronaSection CoronaProtocol::sections[kCoronaAcSections]
    -
    - -
    -
    - -

    ◆ SwingVToggle

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::SwingVToggle
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t CoronaProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.map b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.map deleted file mode 100644 index 831b3276c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.md5 deleted file mode 100644 index 8bc98c724..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0ab2a90e0d231a677632e61388465d06 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.png b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.png deleted file mode 100644 index 2db5afb84..000000000 Binary files a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionCoronaProtocol__coll__graph.png and /dev/null differ diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol-members.html deleted file mode 100644 index 34f82798b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin128Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol.html deleted file mode 100644 index 4ae49549d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin128Protocol.html +++ /dev/null @@ -1,530 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin128Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin128Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin128 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikin128StateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Mode:4
     
       uint8_t   Fan:4
     
       uint8_t   ClockMins:8
     
       uint8_t   ClockHours:8
     
       uint8_t   OnHours:6
     
       uint8_t   OnHalfHour:1
     
       uint8_t   OnTimer:1
     
       uint8_t   OffHours:6
     
       uint8_t   OffHalfHour:1
     
       uint8_t   OffTimer:1
     
       uint8_t   Temp:8
     
       uint8_t   SwingV:1
     
       uint8_t   Sleep:1
     
       uint8_t   __pad1__:1
     
       uint8_t   Power:1
     
       uint8_t   Sum1:4
     
       uint8_t   __pad2__:8
     
       uint8_t   Ceiling:1
     
       uint8_t   __pad3__:1
     
       uint8_t   Econo:1
     
       uint8_t   Wall:1
     
       uint8_t   __pad4__:4
     
       uint8_t   pad [5]
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin128 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @25

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ Ceiling

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Ceiling
    -
    - -
    -
    - -

    ◆ ClockHours

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::ClockHours
    -
    - -
    -
    - -

    ◆ ClockMins

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::ClockMins
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Econo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Mode
    -
    - -
    -
    - -

    ◆ OffHalfHour

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OffHalfHour
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OffHours
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnHalfHour

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OnHalfHour
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OnHours
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::OnTimer
    -
    - -
    -
    - -

    ◆ pad

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::pad[5]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::raw[kDaikin128StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Temp
    -
    - -
    -
    - -

    ◆ Wall

    - -
    -
    - - - - -
    uint8_t Daikin128Protocol::Wall
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol-members.html deleted file mode 100644 index 43cbbb612..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol-members.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin152Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol.html deleted file mode 100644 index 6f782aab1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin152Protocol.html +++ /dev/null @@ -1,498 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin152Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin152Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin152 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikin152StateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   pad0 [5]
     
       uint8_t   Power:1
     
       uint8_t   __pad0__:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   __pad2__:1
     
       uint8_t   Temp:7
     
       uint8_t   __pad3__:8
     
       uint8_t   SwingV:4
     
       uint8_t   Fan:4
     
       uint8_t   pad1 [4]
     
       uint8_t   Powerful:1
     
       uint8_t   __pad4__:4
     
       uint8_t   Quiet:1
     
       uint8_t   __pad5__:2
     
       uint8_t   pad2 [2]
     
       uint8_t   __pad6__:1
     
       uint8_t   Comfort:1
     
       uint8_t   Econo:1
     
       uint8_t   Sensor:1
     
       uint8_t   __pad7__:4
     
       uint8_t   __pad8__:8
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin152 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @27

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::__pad8__
    -
    - -
    -
    - -

    ◆ Comfort

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Comfort
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Econo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::pad0[5]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::pad1[4]
    -
    - -
    -
    - -

    ◆ pad2

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::pad2[2]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Power
    -
    - -
    -
    - -

    ◆ Powerful

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Powerful
    -
    - -
    -
    - -

    ◆ Quiet

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Quiet
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::raw[kDaikin152StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sensor

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Sensor
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Sum
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin152Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol-members.html deleted file mode 100644 index 86d9d254b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin160Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol.html deleted file mode 100644 index ca0704ccd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin160Protocol.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin160Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin160Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin160 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikin160StateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   pad0 [6]
     
       uint8_t   Sum1:8
     
       uint8_t   pad1 [5]
     
       uint8_t   Power:1
     
       uint8_t   __pad0__:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   __pad2__:4
     
       uint8_t   SwingV:4
     
       uint8_t   pad2 [2]
     
       uint8_t   __pad3__:1
     
       uint8_t   Temp:6
     
       uint8_t   __pad4__:1
     
       uint8_t   Fan:4
     
       uint8_t   __pad5__:4
     
       uint8_t   __pad6__:8
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin160 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @21

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::pad0[6]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::pad1[5]
    -
    - -
    -
    - -

    ◆ pad2

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::pad2[2]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::raw[kDaikin160StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin160Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol-members.html deleted file mode 100644 index 903dabb24..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin176Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol.html deleted file mode 100644 index 3bf5020ad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin176Protocol.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin176Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin176Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin176 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikin176StateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   pad0 [6]
     
       uint8_t   Sum1:8
     
       uint8_t   pad1 [5]
     
       uint8_t   __pad0__:4
     
       uint8_t   AltMode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   ModeButton:8
     
       uint8_t   Power:1
     
       uint8_t   __pad2__:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad3__:1
     
       uint8_t   pad2 [2]
     
       uint8_t   __pad4__:1
     
       uint8_t   Temp:6
     
       uint8_t   __pad5__:1
     
       uint8_t   SwingH:4
     
       uint8_t   Fan:4
     
       uint8_t   pad3 [2]
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin176 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @23

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ AltMode

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::AltMode
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Mode
    -
    - -
    -
    - -

    ◆ ModeButton

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::ModeButton
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::pad0[6]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::pad1[5]
    -
    - -
    -
    - -

    ◆ pad2

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::pad2[2]
    -
    - -
    -
    - -

    ◆ pad3

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::pad3[2]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::raw[kDaikin176StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::SwingH
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin176Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol-members.html deleted file mode 100644 index 1f8c63857..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin216Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol.html deleted file mode 100644 index ec575cee8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin216Protocol.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin216Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin216Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin216 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikin216StateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   pad0 [7]
     
       uint8_t   Sum1:8
     
       uint8_t   pad1 [5]
     
       uint8_t   Power:1
     
       uint8_t   __pad0__:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   __pad2__:1
     
       uint8_t   Temp:6
     
       uint8_t   __pad3__:1
     
       uint8_t   __pad4__:8
     
       uint8_t   SwingV:4
     
       uint8_t   Fan:4
     
       uint8_t   SwingH:4
     
       uint8_t   __pad5__:4
     
       uint8_t   pad2 [3]
     
       uint8_t   Powerful:1
     
       uint8_t   __pad6__:0
     
       uint8_t   pad3 [4]
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin216 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @19

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::pad0[7]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::pad1[5]
    -
    - -
    -
    - -

    ◆ pad2

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::pad2[3]
    -
    - -
    -
    - -

    ◆ pad3

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::pad3[4]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Power
    -
    - -
    -
    - -

    ◆ Powerful

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Powerful
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::raw[kDaikin216StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin216Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol-members.html deleted file mode 100644 index 027fbd3ca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol-members.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin2Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol.html deleted file mode 100644 index bebcac8b4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin2Protocol.html +++ /dev/null @@ -1,996 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin2Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin2Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin2 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    struct {
       uint8_t   pad [3]
     
       uint8_t   raw [kDaikin2StateLength]
     The state of the IR remote. More...
     
    }; 
     
    struct {
       uint64_t   __pad0__:64
     
       uint64_t   CurrentTime:12
     
       uint64_t   __pad1__:3
     
       uint64_t   Power2:1
     
       uint64_t   __pad2__:4
     
       uint64_t   Light:2
     
       uint64_t   Beep:2
     
       uint64_t   FreshAir:1
     
       uint64_t   __pad3__:2
     
       uint64_t   Mold:1
     
       uint64_t   __pad4__:1
     
       uint64_t   Clean:1
     
       uint64_t   __pad5__:1
     
       uint64_t   FreshAirHigh:1
     
       uint64_t   __pad6__:32
     
       uint64_t   __pad7__:7
     
       uint64_t   EyeAuto:1
     
       uint64_t   __pad8__:24
     
       uint64_t   SwingH:8
     
       uint64_t   SwingV:4
     
       uint64_t   __pad9__:4
     
       uint64_t   Sum1:8
     
       uint64_t   __pad10__:8
     
       uint64_t   __pad11__:32
     
       uint64_t   Power:1
     
       uint64_t   OnTimer:1
     
       uint64_t   OffTimer:1
     
       uint64_t   __pad12__:1
     
       uint64_t   Mode:3
     
       uint64_t   __pad13__:1
     
       uint64_t   __pad14__:1
     
       uint64_t   Temp:7
     
       uint64_t   __pad15__:8
     
       uint64_t   __pad16__:4
     
       uint64_t   Fan:4
     
       uint64_t   __pad17__:8
     
       uint64_t   OnTime:12
     
       uint64_t   OffTime:12
     
       uint64_t   Powerful:1
     
       uint64_t   __pad18__:4
     
       uint64_t   Quiet:1
     
       uint64_t   __pad19__:2
     
       uint64_t   __pad20__:16
     
       uint64_t   __pad21__:1
     
       uint64_t   Eye:1
     
       uint64_t   Econo:1
     
       uint64_t   __pad22__:1
     
       uint64_t   Purify:1
     
       uint64_t   SleepTimer:1
     
       uint64_t   __pad23__:2
     
       uint8_t   __pad24__:8
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin2 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @15

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ @17

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad17__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad17__
    -
    - -
    -
    - -

    ◆ __pad18__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad18__
    -
    - -
    -
    - -

    ◆ __pad19__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad19__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad20__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad20__
    -
    - -
    -
    - -

    ◆ __pad21__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad21__
    -
    - -
    -
    - -

    ◆ __pad22__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad22__
    -
    - -
    -
    - -

    ◆ __pad23__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad23__
    -
    - -
    -
    - -

    ◆ __pad24__

    - -
    -
    - - - - -
    uint8_t Daikin2Protocol::__pad24__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::__pad9__
    -
    - -
    -
    - -

    ◆ Beep

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Beep
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Clean
    -
    - -
    -
    - -

    ◆ CurrentTime

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::CurrentTime
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Econo
    -
    - -
    -
    - -

    ◆ Eye

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Eye
    -
    - -
    -
    - -

    ◆ EyeAuto

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::EyeAuto
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Fan
    -
    - -
    -
    - -

    ◆ FreshAir

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::FreshAir
    -
    - -
    -
    - -

    ◆ FreshAirHigh

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::FreshAirHigh
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Mode
    -
    - -
    -
    - -

    ◆ Mold

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Mold
    -
    - -
    -
    - -

    ◆ OffTime

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::OffTime
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnTime

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::OnTime
    -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::OnTimer
    -
    - -
    -
    - -

    ◆ pad

    - -
    -
    - - - - -
    uint8_t Daikin2Protocol::pad[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Power
    -
    - -
    -
    - -

    ◆ Power2

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Power2
    -
    - -
    -
    - -

    ◆ Powerful

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Powerful
    -
    - -
    -
    - -

    ◆ Purify

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Purify
    -
    - -
    -
    - -

    ◆ Quiet

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Quiet
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Daikin2Protocol::raw[kDaikin2StateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ SleepTimer

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::SleepTimer
    -
    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t Daikin2Protocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t Daikin2Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol-members.html deleted file mode 100644 index 5df0481aa..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Daikin64Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol.html deleted file mode 100644 index aca611b2c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikin64Protocol.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - -IRremoteESP8266: Daikin64Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Daikin64Protocol Union Reference
    -
    -
    - -

    Native representation of a Daikin64 A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint64_t raw
     The state of the IR remote. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Mode:4
     
       uint8_t   Fan:4
     
       uint8_t   ClockMins:8
     
       uint8_t   ClockHours:8
     
       uint8_t   OnHours:6
     
       uint8_t   OnHalfHour:1
     
       uint8_t   OnTimer:1
     
       uint8_t   OffHours:6
     
       uint8_t   OffHalfHour:1
     
       uint8_t   OffTimer:1
     
       uint8_t   Temp:8
     
       uint8_t   SwingV:1
     
       uint8_t   Sleep:1
     
       uint8_t   __pad1__:1
     
       uint8_t   Power:1
     
       uint8_t   Sum:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin64 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @29

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ ClockHours

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::ClockHours
    -
    - -
    -
    - -

    ◆ ClockMins

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::ClockMins
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Mode
    -
    - -
    -
    - -

    ◆ OffHalfHour

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OffHalfHour
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OffHours
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnHalfHour

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OnHalfHour
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OnHours
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::OnTimer
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t Daikin64Protocol::raw
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Sum
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Daikin64Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol-members.html deleted file mode 100644 index 8fbb216df..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol-members.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    DaikinESPProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol.html deleted file mode 100644 index 834bcc308..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDaikinESPProtocol.html +++ /dev/null @@ -1,770 +0,0 @@ - - - - - - - -IRremoteESP8266: DaikinESPProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    DaikinESPProtocol Union Reference
    -
    -
    - -

    Native representation of a Daikin A/C message. - More...

    - -

    #include <ir_Daikin.h>

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

    -Public Attributes

    uint8_t raw [kDaikinStateLength]
     The state of the IR remote. More...
     
    struct {
       uint64_t   __pad0__:48
     
       uint64_t   __pad1__:4
     
       uint64_t   Comfort:1
     
       uint64_t   __pad2__:3
     
       uint64_t   Sum1:8
     
       uint64_t   __pad3__:40
     
       uint64_t   CurrentTime:11
     
       uint64_t   CurrentDay:3
     
       uint64_t   __pad4__:2
     
       uint64_t   Sum2:8
     
       uint64_t   __pad5__:40
     
       uint64_t   Power:1
     
       uint64_t   OnTimer:1
     
       uint64_t   OffTimer:1
     
       uint64_t   __pad6__:1
     
       uint64_t   Mode:3
     
       uint64_t   __pad7__:1
     
       uint64_t   __pad8__:1
     
       uint64_t   Temp:7
     
       uint64_t   __pad9__:8
     
       uint64_t   SwingV:4
     
       uint64_t   Fan:4
     
       uint64_t   SwingH:4
     
       uint64_t   __pad10__:4
     
       uint64_t   OnTime:12
     
       uint64_t   OffTime:12
     
       uint64_t   Powerful:1
     
       uint64_t   __pad11__:4
     
       uint64_t   Quiet:1
     
       uint64_t   __pad12__:2
     
       uint64_t   __pad13__:0
     
       uint8_t   __pad14__:1
     
       uint8_t   Sensor:1
     
       uint8_t   Econo:1
     
       uint8_t   __pad15__:4
     
       uint8_t   WeeklyTimer:1
     
       uint8_t   __pad16__:1
     
       uint8_t   Mold:1
     
       uint8_t   __pad17__:6
     
       uint8_t   Sum3:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Daikin A/C message.

    -

    Member Data Documentation

    - -

    ◆ @13

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad17__

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::__pad17__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Comfort

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Comfort
    -
    - -
    -
    - -

    ◆ CurrentDay

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::CurrentDay
    -
    - -
    -
    - -

    ◆ CurrentTime

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::CurrentTime
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::Econo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Mode
    -
    - -
    -
    - -

    ◆ Mold

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::Mold
    -
    - -
    -
    - -

    ◆ OffTime

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::OffTime
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnTime

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::OnTime
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Power
    -
    - -
    -
    - -

    ◆ Powerful

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Powerful
    -
    - -
    -
    - -

    ◆ Quiet

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Quiet
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::raw[kDaikinStateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sensor

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::Sensor
    -
    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Sum2
    -
    - -
    -
    - -

    ◆ Sum3

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::Sum3
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t DaikinESPProtocol::Temp
    -
    - -
    -
    - -

    ◆ WeeklyTimer

    - -
    -
    - - - - -
    uint8_t DaikinESPProtocol::WeeklyTimer
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol-members.html deleted file mode 100644 index 92b23cadf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    DelonghiProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol.html deleted file mode 100644 index 1bb507606..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionDelonghiProtocol.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - -IRremoteESP8266: DelonghiProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    DelonghiProtocol Union Reference
    -
    -
    - -

    Native representation of a Delonghi A/C message. - More...

    - -

    #include <ir_Delonghi.h>

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

    -Public Attributes

    uint64_t raw
     The state of the IR remote. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Temp:5
     
       uint8_t   Fan:2
     
       uint8_t   Fahrenheit:1
     
       uint8_t   Power:1
     
       uint8_t   Mode:3
     
       uint8_t   Boost:1
     
       uint8_t   Sleep:1
     
       uint8_t   __pad1__:2
     
       uint8_t   OnTimer:1
     
       uint8_t   OnHours:5
     
       uint8_t   __pad2__:2
     
       uint8_t   OnMins:6
     
       uint8_t   __pad3__:2
     
       uint8_t   OffTimer:1
     
       uint8_t   OffHours:5
     
       uint8_t   __pad4__:2
     
       uint8_t   OffMins:6
     
       uint8_t   __pad5__:2
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Delonghi A/C message.

    -

    Member Data Documentation

    - -

    ◆ @31

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ Boost

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Boost
    -
    - -
    -
    - -

    ◆ Fahrenheit

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Fahrenheit
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OffHours
    -
    - -
    -
    - -

    ◆ OffMins

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OffMins
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OnHours
    -
    - -
    -
    - -

    ◆ OnMins

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OnMins
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t DelonghiProtocol::raw
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t DelonghiProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol-members.html deleted file mode 100644 index 41ebaa544..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    EcoclimProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol.html deleted file mode 100644 index ba53d67ee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionEcoclimProtocol.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - -IRremoteESP8266: EcoclimProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    EcoclimProtocol Union Reference
    -
    -
    - -

    Native representation of a Ecoclim A/C message. - More...

    - -

    #include <ir_Ecoclim.h>

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

    -Public Attributes

    uint64_t raw
     The state in IR code form. More...
     
    struct {
       uint64_t   __pad0__:3
     Fixed 0b010. More...
     
       uint64_t   __pad1__:1
     Unknown. More...
     
       uint64_t   DipConfig:4
     0b0000 = Master, 0b0111 = Slave More...
     
       uint64_t   OffTenMins:3
     Off Timer minutes (in tens of mins) More...
     
       uint64_t   OffHours:5
     Off Timer nr of Hours. More...
     
       uint64_t   OnTenMins:3
     On Timer minutes (in tens of mins) More...
     
       uint64_t   OnHours:5
     On Timer nr of Hours. More...
     
       uint64_t   Clock:11
     
       uint64_t   __pad2__:1
     Unknown. More...
     
       uint64_t   Fan:2
     Fan Speed. More...
     
       uint64_t   Power:1
     Power control. More...
     
       uint64_t   Clear:1
     
       uint64_t   Temp:5
     Desired Temperature (Celsius) More...
     
       uint64_t   Mode:3
     Operating Mode. More...
     
       uint64_t   SensorTemp:5
     Sensed Temperature (Celsius) More...
     
       uint64_t   __pad3__:3
     Fixed. More...
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Ecoclim A/C message.

    -

    Member Data Documentation

    - -

    ◆ @33

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::__pad0__
    -
    - -

    Fixed 0b010.

    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::__pad1__
    -
    - -

    Unknown.

    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::__pad2__
    -
    - -

    Unknown.

    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::__pad3__
    -
    - -

    Fixed.

    - -
    -
    - -

    ◆ Clear

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Clear
    -
    - -
    -
    - -

    ◆ Clock

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Clock
    -
    - -
    -
    - -

    ◆ DipConfig

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::DipConfig
    -
    - -

    0b0000 = Master, 0b0111 = Slave

    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Fan
    -
    - -

    Fan Speed.

    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Mode
    -
    - -

    Operating Mode.

    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::OffHours
    -
    - -

    Off Timer nr of Hours.

    - -
    -
    - -

    ◆ OffTenMins

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::OffTenMins
    -
    - -

    Off Timer minutes (in tens of mins)

    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::OnHours
    -
    - -

    On Timer nr of Hours.

    - -
    -
    - -

    ◆ OnTenMins

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::OnTenMins
    -
    - -

    On Timer minutes (in tens of mins)

    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Power
    -
    - -

    Power control.

    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::raw
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ SensorTemp

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::SensorTemp
    -
    - -

    Sensed Temperature (Celsius)

    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t EcoclimProtocol::Temp
    -
    - -

    Desired Temperature (Celsius)

    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol-members.html deleted file mode 100644 index 65b742ce4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol-members.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    ElectraProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol.html deleted file mode 100644 index e9daab680..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionElectraProtocol.html +++ /dev/null @@ -1,498 +0,0 @@ - - - - - - - -IRremoteESP8266: ElectraProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    ElectraProtocol Union Reference
    -
    -
    - -

    Native representation of a Electra A/C message. - More...

    - -

    #include <ir_Electra.h>

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

    -Public Attributes

    uint8_t raw [kElectraAcStateLength]
     The state of the IR remote. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   SwingV:3
     
       uint8_t   Temp:5
     
       uint8_t   __pad1__:5
     
       uint8_t   SwingH:3
     
       uint8_t   __pad2__:8
     
       uint8_t   __pad3__:5
     
       uint8_t   Fan:3
     
       uint8_t   __pad4__:6
     
       uint8_t   Turbo:1
     
       uint8_t   __pad5__:1
     
       uint8_t   __pad6__:5
     
       uint8_t   Mode:3
     
       uint8_t   __pad7__:8
     
       uint8_t   __pad8__:8
     
       uint8_t   __pad9__:2
     
       uint8_t   Clean:1
     
       uint8_t   __pad10__:2
     
       uint8_t   Power:1
     
       uint8_t   __pad11__:2
     
       uint8_t   __pad12__:8
     
       uint8_t   LightToggle:8
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Electra A/C message.

    -

    Member Data Documentation

    - -

    ◆ @35

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Clean
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Fan
    -
    - -
    -
    - -

    ◆ LightToggle

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::LightToggle
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::raw[kElectraAcStateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t ElectraProtocol::Turbo
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol-members.html deleted file mode 100644 index a21ff7586..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    FujitsuProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol.html deleted file mode 100644 index 754cc9ddb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionFujitsuProtocol.html +++ /dev/null @@ -1,643 +0,0 @@ - - - - - - - -IRremoteESP8266: FujitsuProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    FujitsuProtocol Union Reference
    -
    -
    - -

    Native representation of a Fujitsu A/C message. - More...

    - -

    #include <ir_Fujitsu.h>

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

    -Public Attributes

    struct {
       uint8_t   longcode [kFujitsuAcStateLength]
     The state of the IR remote. More...
     
       uint8_t   shortcode [kFujitsuAcStateLengthShort]
     
    }; 
     
    struct {
       uint64_t   __pad0__:16
     
       uint64_t   __pad1__:4
     
       uint64_t   Id:2
     
       uint64_t   __pad2__:2
     
       uint64_t   __pad3__:16
     
       uint64_t   Cmd:8
     
       uint64_t   RestLength:8
     
       uint64_t   Protocol:8
     
       uint64_t   Power:1
     
       uint64_t   Fahrenheit:1
     
       uint64_t   Temp:6
     
       uint64_t   Mode:3
     
       uint64_t   Clean:1
     
       uint64_t   TimerType:2
     
       uint64_t   __pad4__:2
     
       uint64_t   Fan:3
     
       uint64_t   __pad5__:1
     
       uint64_t   Swing:2
     
       uint64_t   __pad6__:2
     
       uint64_t   OffTimer:11
     
       uint64_t   OffTimerEnable:1
     
       uint64_t   OnTimer:11
     
       uint64_t   OnTimerEnable:1
     
       uint64_t   __pad7__:3
     
       uint64_t   Filter:1
     
       uint64_t   __pad8__:1
     
       uint64_t   unknown:1
     
       uint64_t   __pad9__:1
     
       uint64_t   OutsideQuiet:1
     
       uint64_t   __pad10__:0
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Fujitsu A/C message.

    -

    Member Data Documentation

    - -

    ◆ @37

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ @39

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Clean
    -
    - -
    -
    - -

    ◆ Cmd

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Cmd
    -
    - -
    -
    - -

    ◆ Fahrenheit

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Fahrenheit
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Fan
    -
    - -
    -
    - -

    ◆ Filter

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Filter
    -
    - -
    -
    - -

    ◆ Id

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Id
    -
    - -
    -
    - -

    ◆ longcode

    - -
    -
    - - - - -
    uint8_t FujitsuProtocol::longcode[kFujitsuAcStateLength]
    -
    - -

    The state of the IR remote.

    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OffTimerEnable

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::OffTimerEnable
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ OnTimerEnable

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::OnTimerEnable
    -
    - -
    -
    - -

    ◆ OutsideQuiet

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::OutsideQuiet
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Power
    -
    - -
    -
    - -

    ◆ Protocol

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Protocol
    -
    - -
    -
    - -

    ◆ RestLength

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::RestLength
    -
    - -
    -
    - -

    ◆ shortcode

    - -
    -
    - - - - -
    uint8_t FujitsuProtocol::shortcode[kFujitsuAcStateLengthShort]
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::Temp
    -
    - -
    -
    - -

    ◆ TimerType

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::TimerType
    -
    - -
    -
    - -

    ◆ unknown

    - -
    -
    - - - - -
    uint64_t FujitsuProtocol::unknown
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol-members.html deleted file mode 100644 index 432f427d4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    GoodweatherProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol.html deleted file mode 100644 index 6bf0edcee..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGoodweatherProtocol.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - -IRremoteESP8266: GoodweatherProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    GoodweatherProtocol Union Reference
    -
    -
    - -

    Native representation of a Goodweather A/C message. - More...

    - -

    #include <ir_Goodweather.h>

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

    -Public Attributes

    uint64_t raw
     The state of the IR remote in IR code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Light:1
     
       uint8_t   __pad1__:2
     
       uint8_t   Turbo:1
     
       uint8_t   __pad2__:0
     
       uint8_t   Command:4
     
       uint8_t   __pad3__:0
     
       uint8_t   Sleep:1
     
       uint8_t   Power:1
     
       uint8_t   Swing:2
     
       uint8_t   AirFlow:1
     
       uint8_t   Fan:2
     
       uint8_t   __pad4__:0
     
       uint8_t   Temp:4
     
       uint8_t   __pad5__:1
     
       uint8_t   Mode:3
     
       uint8_t   __pad6__:0
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Goodweather A/C message.

    -

    Member Data Documentation

    - -

    ◆ @41

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ AirFlow

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::AirFlow
    -
    - -
    -
    - -

    ◆ Command

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Command
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Fan
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t GoodweatherProtocol::raw
    -
    - -

    The state of the IR remote in IR code form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t GoodweatherProtocol::Turbo
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol-members.html deleted file mode 100644 index 8bafd0972..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    GreeProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol.html deleted file mode 100644 index 5be10f67c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionGreeProtocol.html +++ /dev/null @@ -1,578 +0,0 @@ - - - - - - - -IRremoteESP8266: GreeProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    GreeProtocol Union Reference
    -
    -
    - -

    Native representation of a Gree A/C message. - More...

    - -

    #include <ir_Gree.h>

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

    -Public Attributes

    uint8_t remote_state [kGreeStateLength]
     The state in native IR code form. More...
     
    struct {
       uint8_t   Mode:3
     
       uint8_t   Power:1
     
       uint8_t   Fan:2
     
       uint8_t   SwingAuto:1
     
       uint8_t   Sleep:1
     
       uint8_t   Temp:4
     
       uint8_t   TimerHalfHr:1
     
       uint8_t   TimerTensHr:2
     
       uint8_t   TimerEnabled:1
     
       uint8_t   TimerHours:4
     
       uint8_t   Turbo:1
     
       uint8_t   Light:1
     
       uint8_t   ModelA:1
     
       uint8_t   Xfan:1
     
       uint8_t   __pad0__:2
     
       uint8_t   TempExtraDegreeF:1
     
       uint8_t   UseFahrenheit:1
     
       uint8_t   unknown1:4
     
       uint8_t   Swing:4
     
       uint8_t   __pad1__:0
     
       uint8_t   DisplayTemp:2
     
       uint8_t   IFeel:1
     
       uint8_t   unknown2:3
     
       uint8_t   WiFi:1
     
       uint8_t   __pad2__:0
     
       uint8_t   __pad3__:8
     
       uint8_t   __pad4__:4
     
       uint8_t   Sum:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Gree A/C message.

    -

    Member Data Documentation

    - -

    ◆ @43

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t GreeProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t GreeProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t GreeProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t GreeProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t GreeProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ DisplayTemp

    - -
    -
    - - - - -
    uint8_t GreeProtocol::DisplayTemp
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Fan
    -
    - -
    -
    - -

    ◆ IFeel

    - -
    -
    - - - - -
    uint8_t GreeProtocol::IFeel
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Mode
    -
    - -
    -
    - -

    ◆ ModelA

    - -
    -
    - - - - -
    uint8_t GreeProtocol::ModelA
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Power
    -
    - -
    -
    - -

    ◆ remote_state

    - -
    -
    - - - - -
    uint8_t GreeProtocol::remote_state[kGreeStateLength]
    -
    - -

    The state in native IR code form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Sum
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Swing
    -
    - -
    -
    - -

    ◆ SwingAuto

    - -
    -
    - - - - -
    uint8_t GreeProtocol::SwingAuto
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Temp
    -
    - -
    -
    - -

    ◆ TempExtraDegreeF

    - -
    -
    - - - - -
    uint8_t GreeProtocol::TempExtraDegreeF
    -
    - -
    -
    - -

    ◆ TimerEnabled

    - -
    -
    - - - - -
    uint8_t GreeProtocol::TimerEnabled
    -
    - -
    -
    - -

    ◆ TimerHalfHr

    - -
    -
    - - - - -
    uint8_t GreeProtocol::TimerHalfHr
    -
    - -
    -
    - -

    ◆ TimerHours

    - -
    -
    - - - - -
    uint8_t GreeProtocol::TimerHours
    -
    - -
    -
    - -

    ◆ TimerTensHr

    - -
    -
    - - - - -
    uint8_t GreeProtocol::TimerTensHr
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Turbo
    -
    - -
    -
    - -

    ◆ unknown1

    - -
    -
    - - - - -
    uint8_t GreeProtocol::unknown1
    -
    - -
    -
    - -

    ◆ unknown2

    - -
    -
    - - - - -
    uint8_t GreeProtocol::unknown2
    -
    - -
    -
    - -

    ◆ UseFahrenheit

    - -
    -
    - - - - -
    uint8_t GreeProtocol::UseFahrenheit
    -
    - -
    -
    - -

    ◆ WiFi

    - -
    -
    - - - - -
    uint8_t GreeProtocol::WiFi
    -
    - -
    -
    - -

    ◆ Xfan

    - -
    -
    - - - - -
    uint8_t GreeProtocol::Xfan
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol-members.html deleted file mode 100644 index ebe72b06b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    HaierProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol.html deleted file mode 100644 index 46e2a3edd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierProtocol.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - -IRremoteESP8266: HaierProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    HaierProtocol Union Reference
    -
    -
    - -

    Native representation of a Haier HSU07-HEA03 A/C message. - More...

    - -

    #include <ir_Haier.h>

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

    -Public Attributes

    uint8_t remote_state [kHaierACStateLength]
     < The state in native IR code form More...
     
    struct {
       uint8_t   Prefix
     
       uint8_t   Command:4
     
       uint8_t   Temp:4
     
       uint8_t   CurrHours:5
     
       uint8_t   unknown:1
     
       uint8_t   Swing:2
     
       uint8_t   CurrMins:6
     
       uint8_t   OffTimer:1
     
       uint8_t   OnTimer:1
     
       uint8_t   OffHours:5
     
       uint8_t   Health:1
     
       uint8_t   __pad0__:0
     
       uint8_t   OffMins:6
     
       uint8_t   Fan:2
     
       uint8_t   OnHours:5
     
       uint8_t   Mode:3
     
       uint8_t   OnMins:6
     
       uint8_t   Sleep:1
     
       uint8_t   __pad1__:0
     
       uint8_t   Sum
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Haier HSU07-HEA03 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @45

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t HaierProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t HaierProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ Command

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Command
    -
    - -
    -
    - -

    ◆ CurrHours

    - -
    -
    - - - - -
    uint8_t HaierProtocol::CurrHours
    -
    - -
    -
    - -

    ◆ CurrMins

    - -
    -
    - - - - -
    uint8_t HaierProtocol::CurrMins
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Fan
    -
    - -
    -
    - -

    ◆ Health

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Health
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OffHours
    -
    - -
    -
    - -

    ◆ OffMins

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OffMins
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OnHours
    -
    - -
    -
    - -

    ◆ OnMins

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OnMins
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint8_t HaierProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ Prefix

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Prefix
    -
    - -
    -
    - -

    ◆ remote_state

    - -
    -
    - - - - -
    uint8_t HaierProtocol::remote_state[kHaierACStateLength]
    -
    - -

    < The state in native IR code form

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Sum
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t HaierProtocol::Temp
    -
    - -
    -
    - -

    ◆ unknown

    - -
    -
    - - - - -
    uint8_t HaierProtocol::unknown
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol-members.html deleted file mode 100644 index 2259336d1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    HaierYRW02Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol.html deleted file mode 100644 index 789bfbfcf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHaierYRW02Protocol.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - -IRremoteESP8266: HaierYRW02Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    HaierYRW02Protocol Union Reference
    -
    -
    - -

    Native representation of a Haier YRW02 A/C message. - More...

    - -

    #include <ir_Haier.h>

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

    -Public Attributes

    uint8_t raw [kHaierACYRW02StateLength]
     The state in native form. More...
     
    struct {
       uint8_t   Prefix
     
       uint8_t   Swing:4
     
       uint8_t   Temp:4
     
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:1
     
       uint8_t   Health:1
     
       uint8_t   __pad2__:6
     
       uint8_t   __pad3__:6
     
       uint8_t   Power:1
     
       uint8_t   __pad4__:1
     
       uint8_t   __pad5__:5
     
       uint8_t   Fan:3
     
       uint8_t   __pad6__:6
     
       uint8_t   Turbo:2
     
       uint8_t   __pad7__:5
     
       uint8_t   Mode:3
     
       uint8_t   __pad8__:7
     
       uint8_t   Sleep:1
     
       uint8_t   __pad9__:8
     
       uint8_t   __pad10__:8
     
       uint8_t   __pad11__:8
     
       uint8_t   Button:4
     
       uint8_t   __pad12__:4
     
       uint8_t   Sum
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Haier YRW02 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @47

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::__pad9__
    -
    - -
    -
    - -

    ◆ Button

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Button
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Fan
    -
    - -
    -
    - -

    ◆ Health

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Health
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Power
    -
    - -
    -
    - -

    ◆ Prefix

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Prefix
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::raw[kHaierACYRW02StateLength]
    -
    - -

    The state in native form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Sum
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t HaierYRW02Protocol::Turbo
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol-members.html deleted file mode 100644 index d8c450ca6..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Hitachi1Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol.html deleted file mode 100644 index df24a5620..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi1Protocol.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - -IRremoteESP8266: Hitachi1Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Hitachi1Protocol Union Reference
    -
    -
    - -

    Native representation of a Hitachi 104-bit A/C message. - More...

    - -

    #include <ir_Hitachi.h>

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

    -Public Attributes

    uint8_t raw [kHitachiAc1StateLength]
     The state in native code. More...
     
    struct {
       uint8_t   pad [3]
     
       uint8_t   __pad0__:6
     
       uint8_t   Model:2
     
       uint8_t   __pad1__:8
     
       uint8_t   Fan:4
     
       uint8_t   Mode:4
     
       uint8_t   __pad2__:2
     
       uint8_t   Temp:5
     
       uint8_t   __pad3__:1
     
       uint8_t   OffTimerLow:8
     
       uint8_t   OffTimerHigh:8
     
       uint8_t   OnTimerLow:8
     
       uint8_t   OnTimerHigh:8
     
       uint8_t   SwingToggle:1
     
       uint8_t   Sleep:3
     
       uint8_t   PowerToggle:1
     
       uint8_t   Power:1
     
       uint8_t   SwingV:1
     
       uint8_t   SwingH:1
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Hitachi 104-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @53

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Mode
    -
    - -
    -
    - -

    ◆ Model

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Model
    -
    - -
    -
    - -

    ◆ OffTimerHigh

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::OffTimerHigh
    -
    - -
    -
    - -

    ◆ OffTimerLow

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::OffTimerLow
    -
    - -
    -
    - -

    ◆ OnTimerHigh

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::OnTimerHigh
    -
    - -
    -
    - -

    ◆ OnTimerLow

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::OnTimerLow
    -
    - -
    -
    - -

    ◆ pad

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::pad[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Power
    -
    - -
    -
    - -

    ◆ PowerToggle

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::PowerToggle
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::raw[kHitachiAc1StateLength]
    -
    - -

    The state in native code.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingToggle

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::SwingToggle
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Hitachi1Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol-members.html deleted file mode 100644 index bb76ce41c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Hitachi424Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol.html deleted file mode 100644 index a933ab237..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachi424Protocol.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - -IRremoteESP8266: Hitachi424Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Hitachi424Protocol Union Reference
    -
    -
    - -

    Native representation of a Hitachi 53-byte/424-bit A/C message. - More...

    - -

    #include <ir_Hitachi.h>

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

    -Public Attributes

    uint8_t raw [kHitachiAc424StateLength]
     The state in native code. More...
     
    struct {
       uint8_t   pad0 [11]
     
       uint8_t   Button:8
     
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:2
     
       uint8_t   Temp:6
     
       uint8_t   pad1 [11]
     
       uint8_t   Mode:4
     
       uint8_t   Fan:4
     
       uint8_t   __pad2__:8
     
       uint8_t   Power:8
     
       uint8_t   pad2 [7]
     
       uint8_t   SwingH:3
     
       uint8_t   __pad3__:5
     
       uint8_t   __pad4__:8
     
       uint8_t   __pad5__:5
     
       uint8_t   SwingV:1
     
       uint8_t   __pad6__:2
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Hitachi 53-byte/424-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @51

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ Button

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::Button
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::pad0[11]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::pad1[11]
    -
    - -
    -
    - -

    ◆ pad2

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::pad2[7]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::raw[kHitachiAc424StateLength]
    -
    - -

    The state in native code.

    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Hitachi424Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol-members.html deleted file mode 100644 index c30c13b57..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    HitachiProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol.html deleted file mode 100644 index 25813d827..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionHitachiProtocol.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - -IRremoteESP8266: HitachiProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    HitachiProtocol Union Reference
    -
    -
    - -

    Native representation of a Hitachi 224-bit A/C message. - More...

    - -

    #include <ir_Hitachi.h>

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

    -Public Attributes

    uint8_t raw [kHitachiAcStateLength]
     The state in native code. More...
     
    struct {
       uint8_t   pad0 [10]
     
       uint8_t   Mode:8
     
       uint8_t   Temp:8
     
       uint8_t   __pad0__:8
     
       uint8_t   Fan:8
     
       uint8_t   __pad1__:7
     
       uint8_t   SwingV:1
     
       uint8_t   __pad2__:7
     
       uint8_t   SwingH:1
     
       uint8_t   __pad3__:8
     
       uint8_t   Power:1
     
       uint8_t   __pad4__:7
     
       uint8_t   pad1 [9]
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Hitachi 224-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @49

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::pad0[10]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::pad1[9]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::raw[kHitachiAcStateLength]
    -
    - -

    The state in native code.

    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t HitachiProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol-members.html deleted file mode 100644 index 20a0d0d6f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    KelvinatorProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol.html deleted file mode 100644 index 1345cbff0..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionKelvinatorProtocol.html +++ /dev/null @@ -1,674 +0,0 @@ - - - - - - - -IRremoteESP8266: KelvinatorProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    KelvinatorProtocol Union Reference
    -
    -
    - -

    Native representation of a Kelvinator A/C message. - More...

    - -

    #include <ir_Kelvinator.h>

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

    -Public Attributes

    uint8_t raw [kKelvinatorStateLength]
     The state in IR code form. More...
     
    struct {
       uint8_t   Mode:3
     
       uint8_t   Power:1
     
       uint8_t   BasicFan:2
     
       uint8_t   VentSwing:1
     
       uint8_t   __pad0__:1
     
       uint8_t   Temp:4
     
       uint8_t   __pad1__:4
     
       uint8_t   __pad2__:4
     
       uint8_t   Turbo:1
     
       uint8_t   Light:1
     
       uint8_t   IonFilter:1
     
       uint8_t   XFan:1
     
       uint8_t   __pad3__:4
     
       uint8_t   __pad4__:2
     
       uint8_t   __pad5__:2
     
       uint8_t   SwingV:1
     
       uint8_t   __pad6__:3
     
       uint8_t   SwingH:1
     
       uint8_t   __pad7__:3
     
       uint8_t   pad0 [2]
     
       uint8_t   __pad8__:4
     
       uint8_t   Sum1:4
     
       uint8_t   pad1 [3]
     
       uint8_t   __pad9__:4
     
       uint8_t   __pad10__:2
     
       uint8_t   __pad11__:2
     
       uint8_t   __pad12__:1
     
       uint8_t   __pad13__:6
     
       uint8_t   Quiet:1
     
       uint8_t   __pad14__:8
     
       uint8_t   __pad15__:4
     
       uint8_t   Fan:3
     
       uint8_t   __pad16__:4
     
       uint8_t   Sum2:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Kelvinator A/C message.

    -

    Member Data Documentation

    - -

    ◆ @55

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ BasicFan

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::BasicFan
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Fan
    -
    - -
    -
    - -

    ◆ IonFilter

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::IonFilter
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::pad0[2]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::pad1[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Power
    -
    - -
    -
    - -

    ◆ Quiet

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Quiet
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::raw[kKelvinatorStateLength]
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Sum2
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::Turbo
    -
    - -
    -
    - -

    ◆ VentSwing

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::VentSwing
    -
    - -
    -
    - -

    ◆ XFan

    - -
    -
    - - - - -
    uint8_t KelvinatorProtocol::XFan
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol-members.html deleted file mode 100644 index 7aae985fd..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    LGProtocol Member List
    -
    -
    - -

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

    - - - - - - - - - - -
    __pad0__LGProtocol
    __pad1__LGProtocol
    FanLGProtocol
    ModeLGProtocol
    PowerLGProtocol
    rawLGProtocol
    SignLGProtocol
    SumLGProtocol
    TempLGProtocol
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol.html deleted file mode 100644 index fc37178e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionLGProtocol.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - -IRremoteESP8266: LGProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    LGProtocol Union Reference
    -
    -
    - -

    Native representation of a LG A/C message. - More...

    - -

    #include <ir_LG.h>

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

    -Public Attributes

    uint32_t raw
     The state of the IR remote in IR code form. More...
     
    struct {
       uint32_t   Sum:4
     
       uint32_t   Fan:3
     
       uint32_t   __pad0__:1
     
       uint32_t   Temp:4
     
       uint32_t   Mode:3
     
       uint32_t   __pad1__:3
     
       uint32_t   Power:2
     
       uint32_t   Sign:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a LG A/C message.

    -

    Member Data Documentation

    - -

    ◆ @57

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint32_t LGProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint32_t LGProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint32_t LGProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint32_t LGProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint32_t LGProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint32_t LGProtocol::raw
    -
    - -

    The state of the IR remote in IR code form.

    - -
    -
    - -

    ◆ Sign

    - -
    -
    - - - - -
    uint32_t LGProtocol::Sign
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint32_t LGProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint32_t LGProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol-members.html deleted file mode 100644 index d35959cda..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    MideaProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol.html deleted file mode 100644 index df8b406ad..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMideaProtocol.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - -IRremoteESP8266: MideaProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    MideaProtocol Union Reference
    -
    -
    - -

    Native representation of a Midea A/C message. - More...

    - -

    #include <ir_Midea.h>

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

    -Public Attributes

    uint64_t remote_state
     The state in native IR code form. More...
     
    struct {
       uint8_t   Sum
     
       uint8_t   SensorTemp:7
     Degrees or OnTimer. More...
     
       uint8_t   disableSensor:1
     
       uint8_t   __pad0__:1
     
       uint8_t   OffTimer:6
     Nr of Half hours. Off is 0b111111. More...
     
       uint8_t   BeepDisable:1
     0 = no beep in follow me messages, 1 = beep. More...
     
       uint8_t   Temp:5
     
       uint8_t   useFahrenheit:1
     
       uint8_t   __pad1__:0
     
       uint8_t   Mode:3
     
       uint8_t   Fan:2
     
       uint8_t   __pad2__:1
     Unknown, but set on some Pioneer System A/Cs. More...
     
       uint8_t   Sleep:1
     
       uint8_t   Power:1
     
       uint8_t   Type:3
     Normal, Special, or FollowMe message type. More...
     
       uint8_t   Header:5
     Typically 0b10100. More...
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Midea A/C message.

    -
    Note
    Compile-time model specific overrides. Uncomment one of these if you have such a devices to better match your A/C. It changes some of the special commands/settings.
    -
    -Some Pioneer Systems have required a special bit to be set in order for the A/C unit to accept the message. We don't currently understand what this bit does. See the link for details of how to set this if needed.
    -
    See also
    https://github.com/crankyoldgit/IRremoteESP8266/issues/1342#issuecomment-733721085
    -

    Member Data Documentation

    - -

    ◆ @60

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t MideaProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t MideaProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t MideaProtocol::__pad2__
    -
    - -

    Unknown, but set on some Pioneer System A/Cs.

    -
    Todo:
    Find out what this bit controls.
    -
    See also
    https://github.com/crankyoldgit/IRremoteESP8266/issues/1342#issuecomment-733721085
    - -
    -
    - -

    ◆ BeepDisable

    - -
    -
    - - - - -
    uint8_t MideaProtocol::BeepDisable
    -
    - -

    0 = no beep in follow me messages, 1 = beep.

    - -
    -
    - -

    ◆ disableSensor

    - -
    -
    - - - - -
    uint8_t MideaProtocol::disableSensor
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Fan
    -
    - -
    -
    - -

    ◆ Header

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Header
    -
    - -

    Typically 0b10100.

    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t MideaProtocol::OffTimer
    -
    - -

    Nr of Half hours. Off is 0b111111.

    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Power
    -
    - -
    -
    - -

    ◆ remote_state

    - -
    -
    - - - - -
    uint64_t MideaProtocol::remote_state
    -
    - -

    The state in native IR code form.

    - -
    -
    - -

    ◆ SensorTemp

    - -
    -
    - - - - -
    uint8_t MideaProtocol::SensorTemp
    -
    - -

    Degrees or OnTimer.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Temp
    -
    - -
    -
    - -

    ◆ Type

    - -
    -
    - - - - -
    uint8_t MideaProtocol::Type
    -
    - -

    Normal, Special, or FollowMe message type.

    - -
    -
    - -

    ◆ useFahrenheit

    - -
    -
    - - - - -
    uint8_t MideaProtocol::useFahrenheit
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol-members.html deleted file mode 100644 index b8d5981ed..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Mitsubishi112Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol.html deleted file mode 100644 index a37e6974f..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi112Protocol.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - -IRremoteESP8266: Mitsubishi112Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Mitsubishi112Protocol Union Reference
    -
    -
    - -

    Native representation of a Mitsubishi 112-bit A/C message. - More...

    - -

    #include <ir_Mitsubishi.h>

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

    -Public Attributes

    uint8_t raw [kMitsubishi112StateLength]
     The state in code form. More...
     
    struct {
       uint8_t   pad0 [5]
     
       uint8_t   __pad0__:2
     
       uint8_t   Power:1
     
       uint8_t   __pad1__:5
     
       uint8_t   Mode:3
     
       uint8_t   __pad2__:5
     
       uint8_t   Temp:4
     
       uint8_t   __pad3__:4
     
       uint8_t   Fan:3
     
       uint8_t   SwingV:3
     
       uint8_t   __pad4__:2
     
       uint8_t   pad1 [3]
     
       uint8_t   __pad5__:2
     
       uint8_t   SwingH:4
     
       uint8_t   __pad6__:2
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Mitsubishi 112-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @66

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::pad0[5]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::pad1[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::raw[kMitsubishi112StateLength]
    -
    - -

    The state in code form.

    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Mitsubishi112Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol-members.html deleted file mode 100644 index ba3fd853c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Mitsubishi136Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol.html deleted file mode 100644 index f1fc6897c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi136Protocol.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - -IRremoteESP8266: Mitsubishi136Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Mitsubishi136Protocol Union Reference
    -
    -
    - -

    Native representation of a Mitsubishi 136-bit A/C message. - More...

    - -

    #include <ir_Mitsubishi.h>

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

    -Public Attributes

    uint8_t raw [kMitsubishi136StateLength]
     The state in code form. More...
     
    struct {
       uint8_t   pad [5]
     
       uint8_t   __pad0__:6
     
       uint8_t   Power:1
     
       uint8_t   __pad1__:1
     
       uint8_t   Mode:3
     
       uint8_t   __pad2__:1
     
       uint8_t   Temp:4
     
       uint8_t   __pad3__:1
     
       uint8_t   Fan:2
     
       uint8_t   __pad4__:1
     
       uint8_t   SwingV:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Mitsubishi 136-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @64

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::pad[5]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::raw[kMitsubishi136StateLength]
    -
    - -

    The state in code form.

    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Mitsubishi136Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol-members.html deleted file mode 100644 index 8eba0cc7a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Mitsubishi144Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol.html deleted file mode 100644 index 6c68e60cb..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi144Protocol.html +++ /dev/null @@ -1,514 +0,0 @@ - - - - - - - -IRremoteESP8266: Mitsubishi144Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Mitsubishi144Protocol Union Reference
    -
    -
    - -

    Native representation of a Mitsubishi 144-bit A/C message. - More...

    - -

    #include <ir_Mitsubishi.h>

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

    -Public Attributes

    uint8_t raw [kMitsubishiACStateLength]
     The state in code form. More...
     
    struct {
       uint8_t   pad0 [5]
     
       uint8_t   __pad0__:5
     
       uint8_t   Power:1
     
       uint8_t   __pad1__:2
     
       uint8_t   __pad2__:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad3__:2
     
       uint8_t   Temp:4
     
       uint8_t   HalfDegree:1
     
       uint8_t   __pad4__:3
     
       uint8_t   __pad5__:4
     
       uint8_t   WideVane:4
     
       uint8_t   Fan:3
     
       uint8_t   Vane:3
     
       uint8_t   VaneBit:1
     
       uint8_t   FanAuto:1
     
       uint8_t   Clock:8
     
       uint8_t   StopClock:8
     
       uint8_t   StartClock:8
     
       uint8_t   Timer:3
     
       uint8_t   WeeklyTimer:1
     
       uint8_t   __pad6__:4
     
       uint8_t   pad1 [3]
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Mitsubishi 144-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @62

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ Clock

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Clock
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Fan
    -
    - -
    -
    - -

    ◆ FanAuto

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::FanAuto
    -
    - -
    -
    - -

    ◆ HalfDegree

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::HalfDegree
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::pad0[5]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::pad1[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::raw[kMitsubishiACStateLength]
    -
    - -

    The state in code form.

    - -
    -
    - -

    ◆ StartClock

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::StartClock
    -
    - -
    -
    - -

    ◆ StopClock

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::StopClock
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Temp
    -
    - -
    -
    - -

    ◆ Timer

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Timer
    -
    - -
    -
    - -

    ◆ Vane

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::Vane
    -
    - -
    -
    - -

    ◆ VaneBit

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::VaneBit
    -
    - -
    -
    - -

    ◆ WeeklyTimer

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::WeeklyTimer
    -
    - -
    -
    - -

    ◆ WideVane

    - -
    -
    - - - - -
    uint8_t Mitsubishi144Protocol::WideVane
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol-members.html deleted file mode 100644 index b48287b60..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Mitsubishi152Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol.html deleted file mode 100644 index 86ef76be8..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi152Protocol.html +++ /dev/null @@ -1,546 +0,0 @@ - - - - - - - -IRremoteESP8266: Mitsubishi152Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Mitsubishi152Protocol Union Reference
    -
    -
    - -

    Native representation of a Mitsubishi Heavy 152-bit A/C message. - More...

    - -

    #include <ir_MitsubishiHeavy.h>

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

    -Public Attributes

    uint8_t raw [kMitsubishiHeavy152StateLength]
     State in code form. More...
     
    struct {
       uint8_t   Sig [5]
     
       uint8_t   Mode:3
     
       uint8_t   Power:1
     
       uint8_t   __pad0__:1
     
       uint8_t   Clean:1
     
       uint8_t   Filter:1
     
       uint8_t   __pad1__:1
     
       uint8_t   __pad2__:8
     
       uint8_t   Temp:4
     
       uint8_t   __pad3__:4
     
       uint8_t   __pad4__:8
     
       uint8_t   Fan:4
     
       uint8_t   __pad5__:4
     
       uint8_t   __pad6__:8
     
       uint8_t   __pad7__:1
     
       uint8_t   Three:1
     
       uint8_t   __pad8__:2
     
       uint8_t   D:1
     
       uint8_t   SwingV:3
     
       uint8_t   __pad9__:8
     
       uint8_t   SwingH:4
     
       uint8_t   __pad10__:4
     
       uint8_t   __pad11__:8
     
       uint8_t   __pad12__:6
     
       uint8_t   Night:1
     
       uint8_t   Silent:1
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Mitsubishi Heavy 152-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @68

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::__pad9__
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Clean
    -
    - -
    -
    - -

    ◆ D

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::D
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Fan
    -
    - -
    -
    - -

    ◆ Filter

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Filter
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Mode
    -
    - -
    -
    - -

    ◆ Night

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Night
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::raw[kMitsubishiHeavy152StateLength]
    -
    - -

    State in code form.

    - -
    -
    - -

    ◆ Sig

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Sig[5]
    -
    - -
    -
    - -

    ◆ Silent

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Silent
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Temp
    -
    - -
    -
    - -

    ◆ Three

    - -
    -
    - - - - -
    uint8_t Mitsubishi152Protocol::Three
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol-members.html deleted file mode 100644 index 8a3e46b39..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Mitsubishi88Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol.html deleted file mode 100644 index 567a87214..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionMitsubishi88Protocol.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - -IRremoteESP8266: Mitsubishi88Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Mitsubishi88Protocol Union Reference
    -
    -
    - -

    Native representation of a Mitsubishi Heavy 88-bit A/C message. - More...

    - -

    #include <ir_MitsubishiHeavy.h>

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

    -Public Attributes

    uint8_t raw [kMitsubishiHeavy88StateLength]
     State in code form. More...
     
    struct {
       uint8_t   Sig [5]
     
       uint8_t   __pad0__:1
     
       uint8_t   SwingV5:1
     
       uint8_t   SwingH1:2
     
       uint8_t   __pad1__:1
     
       uint8_t   Clean:1
     
       uint8_t   SwingH2:2
     
       uint8_t   __pad2__:8
     
       uint8_t   __pad3__:3
     
       uint8_t   SwingV7:2
     
       uint8_t   Fan:3
     
       uint8_t   __pad4__:8
     
       uint8_t   Mode:3
     
       uint8_t   Power:1
     
       uint8_t   Temp:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Mitsubishi Heavy 88-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @70

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Clean
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::raw[kMitsubishiHeavy88StateLength]
    -
    - -

    State in code form.

    - -
    -
    - -

    ◆ Sig

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Sig[5]
    -
    - -
    -
    - -

    ◆ SwingH1

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::SwingH1
    -
    - -
    -
    - -

    ◆ SwingH2

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::SwingH2
    -
    - -
    -
    - -

    ◆ SwingV5

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::SwingV5
    -
    - -
    -
    - -

    ◆ SwingV7

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::SwingV7
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Mitsubishi88Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol-members.html deleted file mode 100644 index e50af24a4..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    NeoclimaProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol.html deleted file mode 100644 index b8fc85adf..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionNeoclimaProtocol.html +++ /dev/null @@ -1,610 +0,0 @@ - - - - - - - -IRremoteESP8266: NeoclimaProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    NeoclimaProtocol Union Reference
    -
    -
    - -

    Native representation of a Neoclima A/C message. - More...

    - -

    #include <ir_Neoclima.h>

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

    -Public Attributes

    uint8_t raw [kNeoclimaStateLength]
     State of the remote in code. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:1
     
       uint8_t   CHeat:1
     
       uint8_t   Ion:1
     
       uint8_t   __pad2__:5
     
       uint8_t   __pad3__:8
     
       uint8_t   Light:1
     
       uint8_t   __pad4__:1
     
       uint8_t   Hold:1
     
       uint8_t   Turbo:1
     
       uint8_t   Econo:1
     
       uint8_t   __pad5__:1
     
       uint8_t   Eye:1
     
       uint8_t   __pad6__:1
     
       uint8_t   __pad7__:8
     
       uint8_t   Button:5
     
       uint8_t   __pad8__:2
     
       uint8_t   Fresh:1
     
       uint8_t   __pad9__:8
     
       uint8_t   Sleep:1
     
       uint8_t   Power:1
     
       uint8_t   SwingV:2
     
       uint8_t   SwingH:1
     
       uint8_t   Fan:2
     
       uint8_t   UseFah:1
     
       uint8_t   Follow:8
     
       uint8_t   Temp:5
     
       uint8_t   Mode:3
     
       uint8_t   __pad10__:8
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Neoclima A/C message.

    -

    Member Data Documentation

    - -

    ◆ @72

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Button

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Button
    -
    - -
    -
    - -

    ◆ CHeat

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::CHeat
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Econo
    -
    - -
    -
    - -

    ◆ Eye

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Eye
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Fan
    -
    - -
    -
    - -

    ◆ Follow

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Follow
    -
    - -
    -
    - -

    ◆ Fresh

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Fresh
    -
    - -
    -
    - -

    ◆ Hold

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Hold
    -
    - -
    -
    - -

    ◆ Ion

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Ion
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::raw[kNeoclimaStateLength]
    -
    - -

    State of the remote in code.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::Turbo
    -
    - -
    -
    - -

    ◆ UseFah

    - -
    -
    - - - - -
    uint8_t NeoclimaProtocol::UseFah
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol-members.html deleted file mode 100644 index 9fae1cb3c..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    PanasonicAc32Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol.html deleted file mode 100644 index d5f686ce5..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionPanasonicAc32Protocol.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - -IRremoteESP8266: PanasonicAc32Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    PanasonicAc32Protocol Union Reference
    -
    -
    - -

    Native representation of a Panasonic 32-bit A/C message. - More...

    - -

    #include <ir_Panasonic.h>

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

    -Public Attributes

    uint32_t raw
     The state in IR code form. More...
     
    struct {
       uint8_t   __pad0__:3
     
       uint8_t   SwingH:1
     
       uint8_t   SwingV:3
     
       uint8_t   __pad1__:1
     Always appears to be set. (1) More...
     
       uint8_t   __pad2__:8
     
       uint8_t   Temp:4
     
       uint8_t   Fan:4
     
       uint8_t   Mode:3
     
       uint8_t   PowerToggle:1
     
       uint8_t   __pad3__:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Panasonic 32-bit A/C message.

    -

    Member Data Documentation

    - -

    ◆ @74

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::__pad1__
    -
    - -

    Always appears to be set. (1)

    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::Mode
    -
    - -
    -
    - -

    ◆ PowerToggle

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::PowerToggle
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint32_t PanasonicAc32Protocol::raw
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t PanasonicAc32Protocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol-members.html deleted file mode 100644 index 663fca56a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    SamsungProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol.html deleted file mode 100644 index 2801ef1ca..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSamsungProtocol.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - - -IRremoteESP8266: SamsungProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    SamsungProtocol Union Reference
    -
    -
    - -

    Native representation of a Samsung A/C message. - More...

    - -

    #include <ir_Samsung.h>

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

    -Public Attributes

    uint8_t raw [kSamsungAcExtendedStateLength]
     State in code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:4
     
       uint8_t   Quiet1:1
     
       uint8_t   Power1:1
     
       uint8_t   __pad2__:2
     
       uint8_t   pad0 [3]
     
       uint8_t   __pad3__:5
     
       uint8_t   Quiet5:1
     
       uint8_t   __pad4__:2
     
       uint8_t   __pad5__:4
     
       uint8_t   Power6:2
     
       uint8_t   __pad6__:2
     
       uint8_t   __pad7__:8
     
       uint8_t   Powerful8:8
     
       uint8_t   __pad8__:4
     
       uint8_t   Swing:3
     
       uint8_t   __pad9__:1
     
       uint8_t   __pad10__:1
     
       uint8_t   Powerful10:3
     
       uint8_t   Display:1
     
       uint8_t   __pad11__:2
     
       uint8_t   Clean10:1
     
       uint8_t   Ion:1
     
       uint8_t   Clean11:1
     
       uint8_t   __pad12__:2
     
       uint8_t   Temp:4
     
       uint8_t   __pad13__:1
     
       uint8_t   Fan:3
     
       uint8_t   Mode:3
     
       uint8_t   __pad14__:1
     
       uint8_t   __pad15__:1
     
       uint8_t   Beep:1
     
       uint8_t   __pad16__:6
     
    }; 
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:4
     
       uint8_t   Sum1:4
     
       uint8_t   pad1 [6]
     
       uint8_t   __pad2__:4
     
       uint8_t   Sum2:4
     
       uint8_t   __pad3__:8
     
       uint8_t   __pad4__:1
     
       uint8_t   Breeze:3
     
       uint8_t   __pad5__:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Samsung A/C message.

    -

    Member Data Documentation

    - -

    ◆ @76

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ @78

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Beep

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Beep
    -
    - -
    -
    - -

    ◆ Breeze

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Breeze
    -
    - -
    -
    - -

    ◆ Clean10

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Clean10
    -
    - -
    -
    - -

    ◆ Clean11

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Clean11
    -
    - -
    -
    - -

    ◆ Display

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Display
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Fan
    -
    - -
    -
    - -

    ◆ Ion

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Ion
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::pad0[3]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::pad1[6]
    -
    - -
    -
    - -

    ◆ Power1

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Power1
    -
    - -
    -
    - -

    ◆ Power6

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Power6
    -
    - -
    -
    - -

    ◆ Powerful10

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Powerful10
    -
    - -
    -
    - -

    ◆ Powerful8

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Powerful8
    -
    - -
    -
    - -

    ◆ Quiet1

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Quiet1
    -
    - -
    -
    - -

    ◆ Quiet5

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Quiet5
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::raw[kSamsungAcExtendedStateLength]
    -
    - -

    State in code form.

    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Sum2
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t SamsungProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol-members.html deleted file mode 100644 index b1b10dabc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    SanyoProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol.html deleted file mode 100644 index ca1b1f36d..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSanyoProtocol.html +++ /dev/null @@ -1,485 +0,0 @@ - - - - - - - -IRremoteESP8266: SanyoProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    SanyoProtocol Union Reference
    -
    -
    - -

    Native representation of a Sanyo A/C message. - More...

    - -

    #include <ir_Sanyo.h>

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

    -Public Attributes

    uint8_t raw [kSanyoAcStateLength]
     The state in IR code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Temp:5
     
       uint8_t   __pad1__:3
     
       uint8_t   SensorTemp:5
     
       uint8_t   Sensor:1
     Sensor location (0 = remote, 1 = A/C) More...
     
       uint8_t   Beep:1
     
       uint8_t   __pad2__:1
     
       uint8_t   OffHour:4
     
       uint8_t   __pad3__:4
     
       uint8_t   Fan:2
     
       uint8_t   OffTimer:1
     
       uint8_t   __pad4__:1
     
       uint8_t   Mode:3
     
       uint8_t   __pad5__:1
     
       uint8_t   SwingV:3
     
       uint8_t   __pad6__:3
     
       uint8_t   Power:2
     
       uint8_t   __pad7__:3
     
       uint8_t   Sleep:1
     
       uint8_t   __pad8__:4
     
       uint8_t   __pad9__:8
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Sanyo A/C message.

    -

    Member Data Documentation

    - -

    ◆ @80

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Beep

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Beep
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffHour

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::OffHour
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::raw[kSanyoAcStateLength]
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ Sensor

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Sensor
    -
    - -

    Sensor location (0 = remote, 1 = A/C)

    - -
    -
    - -

    ◆ SensorTemp

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::SensorTemp
    -
    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Sum
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t SanyoProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol-members.html deleted file mode 100644 index 49f2db91a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    SharpProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol.html deleted file mode 100644 index d8d97707b..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionSharpProtocol.html +++ /dev/null @@ -1,546 +0,0 @@ - - - - - - - -IRremoteESP8266: SharpProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    SharpProtocol Union Reference
    -
    -
    - -

    Native representation of a Sharp A/C message. - More...

    - -

    #include <ir_Sharp.h>

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

    -Public Attributes

    uint8_t raw [kSharpAcStateLength]
     State of the remote in IR code form. More...
     
    struct {
       uint8_t   pad [4]
     
       uint8_t   Temp:4
     
       uint8_t   Model:1
     
       uint8_t   __pad0__:3
     
       uint8_t   __pad1__:4
     
       uint8_t   PowerSpecial:4
     
       uint8_t   Mode:2
     
       uint8_t   __pad2__:1
     
       uint8_t   Clean:1
     
       uint8_t   Fan:3
     
       uint8_t   __pad3__:1
     
       uint8_t   TimerHours:4
     
       uint8_t   __pad4__:2
     
       uint8_t   TimerType:1
     
       uint8_t   TimerEnabled:1
     
       uint8_t   Swing:3
     
       uint8_t   __pad5__:5
     
       uint8_t   __pad6__:8
     
       uint8_t   Special:8
     
       uint8_t   __pad7__:2
     
       uint8_t   Ion:1
     
       uint8_t   __pad8__:1
     
       uint8_t   Model2:1
     
       uint8_t   __pad9__:3
     
       uint8_t   __pad10__:4
     
       uint8_t   Sum:4
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Sharp A/C message.

    -

    Member Data Documentation

    - -

    ◆ @82

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t SharpProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ Clean

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Clean
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Fan
    -
    - -
    -
    - -

    ◆ Ion

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Ion
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Mode
    -
    - -
    -
    - -

    ◆ Model

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Model
    -
    - -
    -
    - -

    ◆ Model2

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Model2
    -
    - -
    -
    - -

    ◆ pad

    - -
    -
    - - - - -
    uint8_t SharpProtocol::pad[4]
    -
    - -
    -
    - -

    ◆ PowerSpecial

    - -
    -
    - - - - -
    uint8_t SharpProtocol::PowerSpecial
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t SharpProtocol::raw[kSharpAcStateLength]
    -
    - -

    State of the remote in IR code form.

    - -
    -
    - -

    ◆ Special

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Special
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Sum
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t SharpProtocol::Temp
    -
    - -
    -
    - -

    ◆ TimerEnabled

    - -
    -
    - - - - -
    uint8_t SharpProtocol::TimerEnabled
    -
    - -
    -
    - -

    ◆ TimerHours

    - -
    -
    - - - - -
    uint8_t SharpProtocol::TimerHours
    -
    - -
    -
    - -

    ◆ TimerType

    - -
    -
    - - - - -
    uint8_t SharpProtocol::TimerType
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol-members.html deleted file mode 100644 index 15abf4920..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    Tcl112Protocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol.html deleted file mode 100644 index 7abaeabc9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTcl112Protocol.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - - -IRremoteESP8266: Tcl112Protocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    Tcl112Protocol Union Reference
    -
    -
    - -

    Native representation of a TCL 112 A/C message. - More...

    - -

    #include <ir_Tcl.h>

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

    -Public Attributes

    uint8_t raw [kTcl112AcStateLength]
     The State in IR code form. More...
     
    struct {
       uint8_t   pad0 [5]
     
       uint8_t   __pad0__:2
     
       uint8_t   Power:1
     
       uint8_t   __pad1__:3
     
       uint8_t   Light:1
     
       uint8_t   Econo:1
     
       uint8_t   Mode:4
     
       uint8_t   Health:1
     
       uint8_t   Turbo:1
     
       uint8_t   __pad2__:2
     
       uint8_t   Temp:4
     
       uint8_t   __pad3__:4
     
       uint8_t   Fan:3
     
       uint8_t   SwingV:3
     
       uint8_t   __pad4__:2
     
       uint8_t   pad1 [3]
     
       uint8_t   __pad5__:3
     
       uint8_t   SwingH:1
     
       uint8_t   __pad6__:1
     
       uint8_t   HalfDegree:1
     
       uint8_t   __pad7__:2
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a TCL 112 A/C message.

    -

    Member Data Documentation

    - -

    ◆ @84

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::__pad7__
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Econo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Fan
    -
    - -
    -
    - -

    ◆ HalfDegree

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::HalfDegree
    -
    - -
    -
    - -

    ◆ Health

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Health
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Mode
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::pad0[5]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::pad1[3]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::raw[kTcl112AcStateLength]
    -
    - -

    The State in IR code form.

    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Sum
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Temp
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t Tcl112Protocol::Turbo
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol-members.html deleted file mode 100644 index 94833e605..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol-members.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    TechnibelProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol.html deleted file mode 100644 index 2ab1a18d1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTechnibelProtocol.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - -IRremoteESP8266: TechnibelProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    TechnibelProtocol Union Reference
    -
    -
    - -

    Native representation of a Technibel A/C message. - More...

    - -

    #include <ir_Technibel.h>

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

    -Public Attributes

    uint64_t raw
     
    struct {
       uint8_t   Sum:8
     
       uint8_t   Footer:8
     
       uint8_t   TimerHours:5
     
       uint8_t   __pad0__:3
     
       uint8_t   Temp:7
     
       uint8_t   __pad1__:1
     
       uint8_t   Fan:3
     
       uint8_t   __pad2__:1
     
       uint8_t   Sleep:1
     
       uint8_t   Swing:1
     
       uint8_t   UseFah:1
     
       uint8_t   TimerEnable:1
     
       uint8_t   Mode:4
     
       uint8_t   FanChange:1
     
       uint8_t   TempChange:1
     
       uint8_t   TimerChange:1
     
       uint8_t   Power:1
     
       uint8_t   Header:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Technibel A/C message.

    -

    Member Data Documentation

    - -

    ◆ @86

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Fan
    -
    - -
    -
    - -

    ◆ FanChange

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::FanChange
    -
    - -
    -
    - -

    ◆ Footer

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Footer
    -
    - -
    -
    - -

    ◆ Header

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Header
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t TechnibelProtocol::raw
    -
    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Sum
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::Temp
    -
    - -
    -
    - -

    ◆ TempChange

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::TempChange
    -
    - -
    -
    - -

    ◆ TimerChange

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::TimerChange
    -
    - -
    -
    - -

    ◆ TimerEnable

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::TimerEnable
    -
    - -
    -
    - -

    ◆ TimerHours

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::TimerHours
    -
    - -
    -
    - -

    ◆ UseFah

    - -
    -
    - - - - -
    uint8_t TechnibelProtocol::UseFah
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol-members.html deleted file mode 100644 index dabd0c309..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    TecoProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol.html deleted file mode 100644 index 78f6c8b51..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTecoProtocol.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - -IRremoteESP8266: TecoProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    TecoProtocol Union Reference
    -
    -
    - -

    Native representation of a Teco A/C message. - More...

    - -

    #include <ir_Teco.h>

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

    -Public Attributes

    uint64_t raw
     The state of the IR remote in IR code form. More...
     
    struct {
       uint8_t   Mode:3
     
       uint8_t   Power:1
     
       uint8_t   Fan:2
     
       uint8_t   Swing:1
     
       uint8_t   Sleep:1
     
       uint8_t   Temp:4
     
       uint8_t   HalfHour:1
     
       uint8_t   TensHours:2
     
       uint8_t   TimerOn:1
     
       uint8_t   UnitHours:4
     
       uint8_t   Humid:1
     
       uint8_t   Light:1
     
       uint8_t   __pad0__:1
     
       uint8_t   Save:1
     
       uint8_t   __pad1__:8
     
       uint8_t   __pad2__:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Teco A/C message.

    -

    Member Data Documentation

    - -

    ◆ @88

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t TecoProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t TecoProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t TecoProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Fan
    -
    - -
    -
    - -

    ◆ HalfHour

    - -
    -
    - - - - -
    uint8_t TecoProtocol::HalfHour
    -
    - -
    -
    - -

    ◆ Humid

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Humid
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t TecoProtocol::raw
    -
    - -

    The state of the IR remote in IR code form.

    - -
    -
    - -

    ◆ Save

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Save
    -
    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t TecoProtocol::Temp
    -
    - -
    -
    - -

    ◆ TensHours

    - -
    -
    - - - - -
    uint8_t TecoProtocol::TensHours
    -
    - -
    -
    - -

    ◆ TimerOn

    - -
    -
    - - - - -
    uint8_t TecoProtocol::TimerOn
    -
    - -
    -
    - -

    ◆ UnitHours

    - -
    -
    - - - - -
    uint8_t TecoProtocol::UnitHours
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol-members.html deleted file mode 100644 index c65bb7aa1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    ToshibaProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol.html deleted file mode 100644 index 941886f27..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionToshibaProtocol.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - -IRremoteESP8266: ToshibaProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    ToshibaProtocol Union Reference
    -
    -
    - -

    Native representation of a Toshiba A/C message. - More...

    - -

    #include <ir_Toshiba.h>

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

    -Public Attributes

    uint8_t raw [kToshibaACStateLengthLong]
     The state in code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   __pad1__:8
     
       uint8_t   Length:8
     < Known lengths are: 1 (56 bit message) 3 (72 bit message) 4 (80 bit message) More...
     
       uint8_t   __pad2__:8
     
       uint8_t   __pad3__:3
     
       uint8_t   LongMsg:1
     
       uint8_t   __pad4__:1
     
       uint8_t   ShortMsg:1
     
       uint8_t   __pad5__:2
     
       uint8_t   Swing:3
     
       uint8_t   __pad6__:1
     
       uint8_t   Temp:4
     
       uint8_t   Mode:3
     
       uint8_t   __pad7__:2
     
       uint8_t   Fan:3
     
       uint8_t   __pad8__:8
     
       uint8_t   EcoTurbo:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Toshiba A/C message.

    -

    Member Data Documentation

    - -

    ◆ @90

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ EcoTurbo

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::EcoTurbo
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::Fan
    -
    - -
    -
    - -

    ◆ Length

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::Length
    -
    - -

    < Known lengths are: 1 (56 bit message) 3 (72 bit message) 4 (80 bit message)

    - -
    -
    - -

    ◆ LongMsg

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::LongMsg
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::Mode
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::raw[kToshibaACStateLengthLong]
    -
    - -

    The state in code form.

    - -
    -
    - -

    ◆ ShortMsg

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::ShortMsg
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t ToshibaProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol-members.html deleted file mode 100644 index 6eb615359..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    TranscoldProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol.html deleted file mode 100644 index a49a9760e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTranscoldProtocol.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - -IRremoteESP8266: TranscoldProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    TranscoldProtocol Union Reference
    -
    -
    - -

    Native representation of a Transcold A/C message. - More...

    - -

    #include <ir_Transcold.h>

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

    -Public Attributes

    uint32_t raw
     The state of the IR remote in IR code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Temp:4
     
       uint8_t   Mode:4
     
       uint8_t   Fan:4
     
       uint8_t   __pad1__:4
     
       uint8_t   __pad2__:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Transcold A/C message.

    -

    Member Data Documentation

    - -

    ◆ @92

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::Mode
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint32_t TranscoldProtocol::raw
    -
    - -

    The state of the IR remote in IR code form.

    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t TranscoldProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol-members.html deleted file mode 100644 index ed5b482e2..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    TrotecProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol.html deleted file mode 100644 index 6d76b3648..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrotecProtocol.html +++ /dev/null @@ -1,402 +0,0 @@ - - - - - - - -IRremoteESP8266: TrotecProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    TrotecProtocol Union Reference
    -
    -
    - -

    Native representation of a Trotec A/C message. - More...

    - -

    #include <ir_Trotec.h>

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

    -Public Attributes

    uint8_t raw [kTrotecStateLength]
     Remote state in IR code form. More...
     
    struct {
       uint8_t   Intro1:8
     
       uint8_t   Intro2:8
     
       uint8_t   Mode:2
     
       uint8_t   __pad0__:1
     
       uint8_t   Power:1
     
       uint8_t   Fan:2
     
       uint8_t   __pad1__:2
     
       uint8_t   Temp:4
     
       uint8_t   __pad2__:3
     
       uint8_t   Sleep:1
     
       uint8_t   __pad3__:8
     
       uint8_t   __pad4__:6
     
       uint8_t   Timer:1
     
       uint8_t   __pad5__:1
     
       uint8_t   Hours:8
     
       uint8_t   __pad6__:8
     
       uint8_t   Sum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Trotec A/C message.

    -

    Member Data Documentation

    - -

    ◆ @94

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Fan
    -
    - -
    -
    - -

    ◆ Hours

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Hours
    -
    - -
    -
    - -

    ◆ Intro1

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Intro1
    -
    - -
    -
    - -

    ◆ Intro2

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Intro2
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Mode
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::raw[kTrotecStateLength]
    -
    - -

    Remote state in IR code form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Sum
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Temp
    -
    - -
    -
    - -

    ◆ Timer

    - -
    -
    - - - - -
    uint8_t TrotecProtocol::Timer
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol-members.html deleted file mode 100644 index c2325952a..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    TrumaProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol.html deleted file mode 100644 index 1b05cc434..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionTrumaProtocol.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - - -IRremoteESP8266: TrumaProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    TrumaProtocol Union Reference
    -
    -
    - -

    Native representation of a Truma A/C message. - More...

    - -

    #include <ir_Truma.h>

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

    -Public Attributes

    uint64_t raw
     Remote state in IR code form. More...
     
    struct {
       uint8_t   __pad0__:8
     
       uint8_t   Mode:2
     
       uint8_t   PowerOff:1
     
       uint8_t   Fan:3
     
       uint8_t   __pad1__:2
     
       uint8_t   Temp:5
     Temp in DegC minus 10(DEC). More...
     
       uint8_t   __pad2__:3
     
       uint8_t   __pad3__:8
     
       uint8_t   __pad4__:8
     
       uint8_t   __pad5__:8
     
       uint8_t   Sum:8
     Checksum value. More...
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Truma A/C message.

    -

    Member Data Documentation

    - -

    ◆ @96

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::Fan
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::Mode
    -
    - -
    -
    - -

    ◆ PowerOff

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::PowerOff
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint64_t TrumaProtocol::raw
    -
    - -

    Remote state in IR code form.

    - -
    -
    - -

    ◆ Sum

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::Sum
    -
    - -

    Checksum value.

    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t TrumaProtocol::Temp
    -
    - -

    Temp in DegC minus 10(DEC).

    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol-members.html deleted file mode 100644 index d58786771..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    VestelProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol.html deleted file mode 100644 index 529c495b1..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVestelProtocol.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - - - -IRremoteESP8266: VestelProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    VestelProtocol Union Reference
    -
    -
    - -

    Native representation of a Vestel A/C message. - More...

    - -

    #include <ir_Vestel.h>

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

    -Public Attributes

    struct {
       uint64_t   cmdState
     
       uint64_t   timeState
     
    }; 
     
    struct {
       uint64_t   Signature:12
     
       uint64_t   CmdSum:8
     
       uint64_t   Swing:4
     
       uint64_t   TurboSleep:4
     
       uint64_t   __pad0__:8
     
       uint64_t   Temp:4
     
       uint64_t   Fan:4
     
       uint64_t   Mode:3
     
       uint64_t   __pad1__:3
     
       uint64_t   Ion:1
     
       uint64_t   __pad2__:1
     
       uint64_t   Power:2
     
       uint64_t   UseCmd:1
     
       uint64_t   __pad3__:0
     
       uint64_t   __pad4__:12
     
       uint64_t   TimeSum:8
     
       uint64_t   OffTenMins:3
     
       uint64_t   OffHours:5
     
       uint64_t   OnTenMins:3
     
       uint64_t   OnHours:5
     
       uint64_t   Hours:5
     
       uint64_t   OnTimer:1
     
       uint64_t   OffTimer:1
     
       uint64_t   Timer:1
     
       uint64_t   Minutes:8
     
       uint64_t   __pad5__:0
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Vestel A/C message.

    -

    Member Data Documentation

    - -

    ◆ @100

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ @98

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint64_t VestelProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ cmdState

    - -
    -
    - - - - -
    uint64_t VestelProtocol::cmdState
    -
    - -
    -
    - -

    ◆ CmdSum

    - -
    -
    - - - - -
    uint64_t VestelProtocol::CmdSum
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Fan
    -
    - -
    -
    - -

    ◆ Hours

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Hours
    -
    - -
    -
    - -

    ◆ Ion

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Ion
    -
    - -
    -
    - -

    ◆ Minutes

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Minutes
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OffHours
    -
    - -
    -
    - -

    ◆ OffTenMins

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OffTenMins
    -
    - -
    -
    - -

    ◆ OffTimer

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OffTimer
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OnHours
    -
    - -
    -
    - -

    ◆ OnTenMins

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OnTenMins
    -
    - -
    -
    - -

    ◆ OnTimer

    - -
    -
    - - - - -
    uint64_t VestelProtocol::OnTimer
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Power
    -
    - -
    -
    - -

    ◆ Signature

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Signature
    -
    - -
    -
    - -

    ◆ Swing

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Swing
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Temp
    -
    - -
    -
    - -

    ◆ Timer

    - -
    -
    - - - - -
    uint64_t VestelProtocol::Timer
    -
    - -
    -
    - -

    ◆ timeState

    - -
    -
    - - - - -
    uint64_t VestelProtocol::timeState
    -
    - -
    -
    - -

    ◆ TimeSum

    - -
    -
    - - - - -
    uint64_t VestelProtocol::TimeSum
    -
    - -
    -
    - -

    ◆ TurboSleep

    - -
    -
    - - - - -
    uint64_t VestelProtocol::TurboSleep
    -
    - -
    -
    - -

    ◆ UseCmd

    - -
    -
    - - - - -
    uint64_t VestelProtocol::UseCmd
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol-members.html deleted file mode 100644 index 29e9fe4dc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    VoltasProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol.html deleted file mode 100644 index d31b084a9..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionVoltasProtocol.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - - -IRremoteESP8266: VoltasProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    VoltasProtocol Union Reference
    -
    -
    - -

    Native representation of a Voltas A/C message. - More...

    - -

    #include <ir_Voltas.h>

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

    -Public Attributes

    uint8_t raw [kVoltasStateLength]
     The state in native IR code form. More...
     
    struct {
       uint8_t   SwingH:1
     
       uint8_t   SwingHChange:7
     
       uint8_t   Mode:4
     
       uint8_t   __pad0__:1
     
       uint8_t   FanSpeed:3
     
       uint8_t   SwingV:3
     
       uint8_t   Wifi:1
     
       uint8_t   __pad1__:1
     
       uint8_t   Turbo:1
     
       uint8_t   Sleep:1
     
       uint8_t   Power:1
     
       uint8_t   Temp:4
     
       uint8_t   __pad2__:2
     
       uint8_t   Econo:1
     
       uint8_t   TempSet:1
     
       uint8_t   OnTimerMins:6
     
       uint8_t   __pad3__:1
     
       uint8_t   OnTimer12Hr:1
     
       uint8_t   OffTimerMins:6
     
       uint8_t   __pad4__:1
     
       uint8_t   OffTimer12Hr:1
     
       uint8_t   __pad5__:8
     
       uint8_t   OnTimerHrs:4
     
       uint8_t   OffTimerHrs:4
     
       uint8_t   __pad6__:5
     
       uint8_t   Light:1
     
       uint8_t   OffTimerEnable:1
     
       uint8_t   OnTimerEnable:1
     
       uint8_t   Checksum:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Voltas A/C message.

    -

    Member Data Documentation

    - -

    ◆ @102

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ Checksum

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Checksum
    -
    - -
    -
    - -

    ◆ Econo

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Econo
    -
    - -
    -
    - -

    ◆ FanSpeed

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::FanSpeed
    -
    - -
    -
    - -

    ◆ Light

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Light
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffTimer12Hr

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OffTimer12Hr
    -
    - -
    -
    - -

    ◆ OffTimerEnable

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OffTimerEnable
    -
    - -
    -
    - -

    ◆ OffTimerHrs

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OffTimerHrs
    -
    - -
    -
    - -

    ◆ OffTimerMins

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OffTimerMins
    -
    - -
    -
    - -

    ◆ OnTimer12Hr

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OnTimer12Hr
    -
    - -
    -
    - -

    ◆ OnTimerEnable

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OnTimerEnable
    -
    - -
    -
    - -

    ◆ OnTimerHrs

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OnTimerHrs
    -
    - -
    -
    - -

    ◆ OnTimerMins

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::OnTimerMins
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::raw[kVoltasStateLength]
    -
    - -

    The state in native IR code form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Sleep
    -
    - -
    -
    - -

    ◆ SwingH

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::SwingH
    -
    - -
    -
    - -

    ◆ SwingHChange

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::SwingHChange
    -
    - -
    -
    - -

    ◆ SwingV

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::SwingV
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Temp
    -
    - -
    -
    - -

    ◆ TempSet

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::TempSet
    -
    - -
    -
    - -

    ◆ Turbo

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Turbo
    -
    - -
    -
    - -

    ◆ Wifi

    - -
    -
    - - - - -
    uint8_t VoltasProtocol::Wifi
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol-members.html deleted file mode 100644 index 8dad86347..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol-members.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    WhirlpoolProtocol Member List
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol.html deleted file mode 100644 index c53479348..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionWhirlpoolProtocol.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - - - - -IRremoteESP8266: WhirlpoolProtocol Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    WhirlpoolProtocol Union Reference
    -
    -
    - -

    Native representation of a Whirlpool A/C message. - More...

    - -

    #include <ir_Whirlpool.h>

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

    -Public Attributes

    uint8_t raw [kWhirlpoolAcStateLength]
     The state in IR code form. More...
     
    struct {
       uint8_t   pad0 [2]
     
       uint8_t   Fan:2
     
       uint8_t   Power:1
     
       uint8_t   Sleep:1
     
       uint8_t   __pad0__:3
     
       uint8_t   Swing1:1
     
       uint8_t   Mode:3
     
       uint8_t   __pad1__:1
     
       uint8_t   Temp:4
     
       uint8_t   __pad2__:8
     
       uint8_t   __pad3__:4
     
       uint8_t   Super1:1
     
       uint8_t   __pad4__:2
     
       uint8_t   Super2:1
     
       uint8_t   ClockHours:5
     
       uint8_t   LightOff:1
     
       uint8_t   __pad5__:2
     
       uint8_t   ClockMins:6
     
       uint8_t   __pad6__:1
     
       uint8_t   OffTimerEnabled:1
     
       uint8_t   OffHours:5
     
       uint8_t   __pad7__:1
     
       uint8_t   Swing2:1
     
       uint8_t   __pad8__:1
     
       uint8_t   OffMins:6
     
       uint8_t   __pad9__:1
     
       uint8_t   OnTimerEnabled:1
     
       uint8_t   OnHours:5
     
       uint8_t   __pad10__:3
     
       uint8_t   OnMins:6
     
       uint8_t   __pad11__:2
     
       uint8_t   __pad12__:8
     
       uint8_t   Sum1:8
     
       uint8_t   __pad13__:8
     
       uint8_t   Cmd:8
     
       uint8_t   pad1 [2]
     
       uint8_t   __pad14__:3
     
       uint8_t   J191:1
     
       uint8_t   __pad15__:4
     
       uint8_t   __pad16__:8
     
       uint8_t   Sum2:8
     
    }; 
     
    -

    Detailed Description

    -

    Native representation of a Whirlpool A/C message.

    -

    Member Data Documentation

    - -

    ◆ @104

    - -
    -
    - - - - -
    struct { ... }
    -
    - -
    -
    - -

    ◆ __pad0__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad0__
    -
    - -
    -
    - -

    ◆ __pad10__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad10__
    -
    - -
    -
    - -

    ◆ __pad11__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad11__
    -
    - -
    -
    - -

    ◆ __pad12__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad12__
    -
    - -
    -
    - -

    ◆ __pad13__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad13__
    -
    - -
    -
    - -

    ◆ __pad14__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad14__
    -
    - -
    -
    - -

    ◆ __pad15__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad15__
    -
    - -
    -
    - -

    ◆ __pad16__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad16__
    -
    - -
    -
    - -

    ◆ __pad1__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad1__
    -
    - -
    -
    - -

    ◆ __pad2__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad2__
    -
    - -
    -
    - -

    ◆ __pad3__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad3__
    -
    - -
    -
    - -

    ◆ __pad4__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad4__
    -
    - -
    -
    - -

    ◆ __pad5__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad5__
    -
    - -
    -
    - -

    ◆ __pad6__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad6__
    -
    - -
    -
    - -

    ◆ __pad7__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad7__
    -
    - -
    -
    - -

    ◆ __pad8__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad8__
    -
    - -
    -
    - -

    ◆ __pad9__

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::__pad9__
    -
    - -
    -
    - -

    ◆ ClockHours

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::ClockHours
    -
    - -
    -
    - -

    ◆ ClockMins

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::ClockMins
    -
    - -
    -
    - -

    ◆ Cmd

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Cmd
    -
    - -
    -
    - -

    ◆ Fan

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Fan
    -
    - -
    -
    - -

    ◆ J191

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::J191
    -
    - -
    -
    - -

    ◆ LightOff

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::LightOff
    -
    - -
    -
    - -

    ◆ Mode

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Mode
    -
    - -
    -
    - -

    ◆ OffHours

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OffHours
    -
    - -
    -
    - -

    ◆ OffMins

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OffMins
    -
    - -
    -
    - -

    ◆ OffTimerEnabled

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OffTimerEnabled
    -
    - -
    -
    - -

    ◆ OnHours

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OnHours
    -
    - -
    -
    - -

    ◆ OnMins

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OnMins
    -
    - -
    -
    - -

    ◆ OnTimerEnabled

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::OnTimerEnabled
    -
    - -
    -
    - -

    ◆ pad0

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::pad0[2]
    -
    - -
    -
    - -

    ◆ pad1

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::pad1[2]
    -
    - -
    -
    - -

    ◆ Power

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Power
    -
    - -
    -
    - -

    ◆ raw

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::raw[kWhirlpoolAcStateLength]
    -
    - -

    The state in IR code form.

    - -
    -
    - -

    ◆ Sleep

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Sleep
    -
    - -
    -
    - -

    ◆ Sum1

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Sum1
    -
    - -
    -
    - -

    ◆ Sum2

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Sum2
    -
    - -
    -
    - -

    ◆ Super1

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Super1
    -
    - -
    -
    - -

    ◆ Super2

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Super2
    -
    - -
    -
    - -

    ◆ Swing1

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Swing1
    -
    - -
    -
    - -

    ◆ Swing2

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Swing2
    -
    - -
    -
    - -

    ◆ Temp

    - -
    -
    - - - - -
    uint8_t WhirlpoolProtocol::Temp
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest-members.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest-members.html deleted file mode 100644 index ab2abc7ff..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    -
    -
    magiquest Member List
    -
    -
    - -

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

    - - - - - - - - - -
    bytemagiquest
    cmdmagiquest
    llwordmagiquest
    lwordmagiquest
    magnitudemagiquest
    paddingmagiquest
    scrapmagiquest
    wand_idmagiquest
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest.html deleted file mode 100644 index f947eefcc..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/unionmagiquest.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -IRremoteESP8266: magiquest Union Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    -
    magiquest Union Reference
    -
    -
    - -

    MagiQuest packet is both Wand ID and magnitude of swish and flick. - More...

    - -

    #include <ir_Magiquest.h>

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

    -Public Attributes

    uint64_t llword
     
    uint8_t byte [8]
     
    uint32_t lword [2]
     
    struct {
       uint16_t   magnitude
     
       uint32_t   wand_id
     
       uint8_t   padding
     
       uint8_t   scrap
     
    cmd
     
    -

    Detailed Description

    -

    MagiQuest packet is both Wand ID and magnitude of swish and flick.

    -

    Member Data Documentation

    - -

    ◆ byte

    - -
    -
    - - - - -
    uint8_t magiquest::byte[8]
    -
    - -
    -
    - -

    ◆ cmd

    - -
    -
    - - - - -
    struct { ... } magiquest::cmd
    -
    - -
    -
    - -

    ◆ llword

    - -
    -
    - - - - -
    uint64_t magiquest::llword
    -
    - -
    -
    - -

    ◆ lword

    - -
    -
    - - - - -
    uint32_t magiquest::lword[2]
    -
    - -
    -
    - -

    ◆ magnitude

    - -
    -
    - - - - -
    uint16_t magiquest::magnitude
    -
    - -
    -
    - -

    ◆ padding

    - -
    -
    - - - - -
    uint8_t magiquest::padding
    -
    - -
    -
    - -

    ◆ scrap

    - -
    -
    - - - - -
    uint8_t magiquest::scrap
    -
    - -
    -
    - -

    ◆ wand_id

    - -
    -
    - - - - -
    uint32_t magiquest::wand_id
    -
    - -
    -
    -
    The documentation for this union was generated from the following file: -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h.html deleted file mode 100644 index 30e00c752..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/zh-CN.h File Reference - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    zh-CN.h File Reference
    -
    - - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h_source.html b/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h_source.html deleted file mode 100644 index a5b0277da..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen/html/zh-CN_8h_source.html +++ /dev/null @@ -1,545 +0,0 @@ - - - - - - - -IRremoteESP8266: src/locale/zh-CN.h Source File - - - - - - - - - -
    -
    - - - - - - -
    -
    IRremoteESP8266 -
    -
    -
    - - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    zh-CN.h
    -
    -
    -Go to the documentation of this file.
    1 // Copyright 2020 - MiaoYi (@Caffreyfans)
    -
    2 // Locale/language file for China / Simplified.
    -
    3 // This file will override the default values located in `defaults.h`.
    -
    4 #ifndef LOCALE_ZH_CN_H_
    -
    5 #define LOCALE_ZH_CN_H_
    -
    6 
    -
    7 #ifndef D_STR_UNKNOWN
    -
    8 #define D_STR_UNKNOWN "未知"
    -
    9 #endif // D_STR_UNKNOWN
    -
    10 #ifndef D_STR_PROTOCOL
    -
    11 #define D_STR_PROTOCOL "协议"
    -
    12 #endif // D_STR_PROTOCOL
    -
    13 #ifndef D_STR_POWER
    -
    14 #define D_STR_POWER "电源"
    -
    15 #endif // D_STR_POWER
    -
    16 #ifndef D_STR_PREVIOUS
    -
    17 #define D_STR_PREVIOUS "以前"
    -
    18 #endif // D_STR_PREVIOUS
    -
    19 #ifndef D_STR_ON
    -
    20 #define D_STR_ON "开"
    -
    21 #endif // D_STR_ON
    -
    22 #ifndef D_STR_OFF
    -
    23 #define D_STR_OFF "关"
    -
    24 #endif // D_STR_OFF
    -
    25 #ifndef D_STR_MODE
    -
    26 #define D_STR_MODE "模式"
    -
    27 #endif // D_STR_MODE
    -
    28 #ifndef D_STR_TOGGLE
    -
    29 #define D_STR_TOGGLE "切换"
    -
    30 #endif // D_STR_TOGGLE
    -
    31 #ifndef D_STR_TURBO
    -
    32 #define D_STR_TURBO "强力"
    -
    33 #endif // D_STR_TURBO
    -
    34 #ifndef D_STR_SUPER
    -
    35 #define D_STR_SUPER "超级"
    -
    36 #endif // D_STR_SUPER
    -
    37 #ifndef D_STR_SLEEP
    -
    38 #define D_STR_SLEEP "睡眠"
    -
    39 #endif // D_STR_SLEEP
    -
    40 #ifndef D_STR_LIGHT
    -
    41 #define D_STR_LIGHT "灯光"
    -
    42 #endif // D_STR_LIGHT
    -
    43 #ifndef D_STR_POWERFUL
    -
    44 #define D_STR_POWERFUL "强劲模式"
    -
    45 #endif // D_STR_POWERFUL
    -
    46 #ifndef D_STR_QUIET
    -
    47 #define D_STR_QUIET "安静"
    -
    48 #endif // D_STR_QUIET
    -
    49 #ifndef D_STR_ECONO
    -
    50 #define D_STR_ECONO "经济"
    -
    51 #endif // D_STR_ECONO
    -
    52 #ifndef D_STR_SWING
    -
    53 #define D_STR_SWING "扫风"
    -
    54 #endif // D_STR_SWING
    -
    55 #ifndef D_STR_SWINGH
    -
    56 #define D_STR_SWINGH D_STR_SWING"(H)" // Set `D_STR_SWING` first!
    -
    57 #endif // D_STR_SWINGH
    -
    58 #ifndef D_STR_SWINGV
    -
    59 #define D_STR_SWINGV D_STR_SWING"(V)" // Set `D_STR_SWING` first!
    -
    60 #endif // D_STR_SWINGV
    -
    61 #ifndef D_STR_BEEP
    -
    62 #define D_STR_BEEP "蜂鸣"
    -
    63 #endif // D_STR_BEEP
    -
    64 #ifndef D_STR_MOULD
    -
    65 #define D_STR_MOULD "模子"
    -
    66 #endif // D_STR_MOULD
    -
    67 #ifndef D_STR_CLEAN
    -
    68 #define D_STR_CLEAN "清洁"
    -
    69 #endif // D_STR_CLEAN
    -
    70 #ifndef D_STR_PURIFY
    -
    71 #define D_STR_PURIFY "净化"
    -
    72 #endif // D_STR_PURIFY
    -
    73 #ifndef D_STR_TIMER
    -
    74 #define D_STR_TIMER "计时器"
    -
    75 #endif // D_STR_TIMER
    -
    76 #ifndef D_STR_ONTIMER
    -
    77 #define D_STR_ONTIMER D_STR_ON " " D_STR_TIMER // Set `D_STR_ON` first!
    -
    78 #endif // D_STR_ONTIMER
    -
    79 #ifndef D_STR_OFFTIMER
    -
    80 #define D_STR_OFFTIMER D_STR_OFF " " D_STR_TIMER // Set `D_STR_OFF` first!
    -
    81 #endif // D_STR_OFFTIMER
    -
    82 #ifndef D_STR_CLOCK
    -
    83 #define D_STR_CLOCK "时钟"
    -
    84 #endif // D_STR_CLOCK
    -
    85 #ifndef D_STR_COMMAND
    -
    86 #define D_STR_COMMAND "命令"
    -
    87 #endif // D_STR_COMMAND
    -
    88 #ifndef D_STR_XFAN
    -
    89 #define D_STR_XFAN "XFan"
    -
    90 #endif // D_STR_XFAN
    -
    91 #ifndef D_STR_HEALTH
    -
    92 #define D_STR_HEALTH "健康"
    -
    93 #endif // D_STR_HEALTH
    -
    94 #ifndef D_STR_MODEL
    -
    95 #define D_STR_MODEL "模式"
    -
    96 #endif // D_STR_MODEL
    -
    97 #ifndef D_STR_TEMP
    -
    98 #define D_STR_TEMP "温度"
    -
    99 #endif // D_STR_TEMP
    -
    100 #ifndef D_STR_IFEEL
    -
    101 #define D_STR_IFEEL "IFeel"
    -
    102 #endif // D_STR_IFEEL
    -
    103 #ifndef D_STR_HUMID
    -
    104 #define D_STR_HUMID "湿度"
    -
    105 #endif // D_STR_HUMID
    -
    106 #ifndef D_STR_SAVE
    -
    107 #define D_STR_SAVE "保存"
    -
    108 #endif // D_STR_SAVE
    -
    109 #ifndef D_STR_EYE
    -
    110 #define D_STR_EYE "眼"
    -
    111 #endif // D_STR_EYE
    -
    112 #ifndef D_STR_FOLLOW
    -
    113 #define D_STR_FOLLOW "跟随"
    -
    114 #endif // D_STR_FOLLOW
    -
    115 #ifndef D_STR_ION
    -
    116 #define D_STR_ION "Ion"
    -
    117 #endif // D_STR_ION
    -
    118 #ifndef D_STR_FRESH
    -
    119 #define D_STR_FRESH "刷新"
    -
    120 #endif // D_STR_FRESH
    -
    121 #ifndef D_STR_HOLD
    -
    122 #define D_STR_HOLD "保持"
    -
    123 #endif // D_STR_HOLD
    -
    124 #ifndef D_STR_8C_HEAT
    -
    125 #define D_STR_8C_HEAT "8C " D_STR_HEAT // Set `D_STR_HEAT` first!
    -
    126 #endif // D_STR_8C_HEAT
    -
    127 #ifndef D_STR_BUTTON
    -
    128 #define D_STR_BUTTON "按钮"
    -
    129 #endif // D_STR_BUTTON
    -
    130 #ifndef D_STR_NIGHT
    -
    131 #define D_STR_NIGHT "夜间"
    -
    132 #endif // D_STR_NIGHT
    -
    133 #ifndef D_STR_SILENT
    -
    134 #define D_STR_SILENT "安静"
    -
    135 #endif // D_STR_SILENT
    -
    136 #ifndef D_STR_FILTER
    -
    137 #define D_STR_FILTER "过滤"
    -
    138 #endif // D_STR_FILTER
    -
    139 #ifndef D_STR_3D
    -
    140 #define D_STR_3D "3D"
    -
    141 #endif // D_STR_3D
    -
    142 #ifndef D_STR_CELSIUS
    -
    143 #define D_STR_CELSIUS "摄氏度"
    -
    144 #endif // D_STR_CELSIUS
    -
    145 #ifndef D_STR_UP
    -
    146 #define D_STR_UP "上"
    -
    147 #endif // D_STR_UP
    -
    148 #ifndef D_STR_TEMPUP
    -
    149 #define D_STR_TEMPUP D_STR_TEMP " " D_STR_UP // Set `D_STR_TEMP` first!
    -
    150 #endif // D_STR_TEMPUP
    -
    151 #ifndef D_STR_DOWN
    -
    152 #define D_STR_DOWN "下"
    -
    153 #endif // D_STR_DOWN
    -
    154 #ifndef D_STR_TEMPDOWN
    -
    155 #define D_STR_TEMPDOWN D_STR_TEMP " " D_STR_DOWN // Set `D_STR_TEMP` first!
    -
    156 #endif // D_STR_TEMPDOWN
    -
    157 #ifndef D_STR_CHANGE
    -
    158 #define D_STR_CHANGE "改变"
    -
    159 #endif // D_STR_CHANGE
    -
    160 #ifndef D_STR_START
    -
    161 #define D_STR_START "开始"
    -
    162 #endif // D_STR_START
    -
    163 #ifndef D_STR_STOP
    -
    164 #define D_STR_STOP "结束"
    -
    165 #endif // D_STR_STOP
    -
    166 #ifndef D_STR_MOVE
    -
    167 #define D_STR_MOVE "移动"
    -
    168 #endif // D_STR_MOVE
    -
    169 #ifndef D_STR_SET
    -
    170 #define D_STR_SET "设置"
    -
    171 #endif // D_STR_SET
    -
    172 #ifndef D_STR_CANCEL
    -
    173 #define D_STR_CANCEL "取消"
    -
    174 #endif // D_STR_CANCEL
    -
    175 #ifndef D_STR_COMFORT
    -
    176 #define D_STR_COMFORT "舒适"
    -
    177 #endif // D_STR_COMFORT
    -
    178 #ifndef D_STR_SENSOR
    -
    179 #define D_STR_SENSOR "传感器"
    -
    180 #endif // D_STR_SENSOR
    -
    181 #ifndef D_STR_WEEKLY
    -
    182 #define D_STR_WEEKLY "每周"
    -
    183 #endif // D_STR_WEEKLY
    -
    184 #ifndef D_STR_WEEKLYTIMER
    -
    185 #define D_STR_WEEKLYTIMER D_STR_WEEKLY " " D_STR_TIMER // Needs `D_STR_WEEKLY`!
    -
    186 #endif // D_STR_WEEKLYTIMER
    -
    187 #ifndef D_STR_WIFI
    -
    188 #define D_STR_WIFI "WiFi"
    -
    189 #endif // D_STR_WIFI
    -
    190 #ifndef D_STR_LAST
    -
    191 #define D_STR_LAST "最近"
    -
    192 #endif // D_STR_LAST
    -
    193 #ifndef D_STR_FAST
    -
    194 #define D_STR_FAST "快"
    -
    195 #endif // D_STR_FAST
    -
    196 #ifndef D_STR_SLOW
    -
    197 #define D_STR_SLOW "慢"
    -
    198 #endif // D_STR_SLOW
    -
    199 #ifndef D_STR_AIRFLOW
    -
    200 #define D_STR_AIRFLOW "空气流动"
    -
    201 #endif // D_STR_AIRFLOW
    -
    202 #ifndef D_STR_STEP
    -
    203 #define D_STR_STEP "步"
    -
    204 #endif // D_STR_STEP
    -
    205 #ifndef D_STR_NA
    -
    206 #define D_STR_NA "不适用"
    -
    207 #endif // D_STR_NA
    -
    208 #ifndef D_STR_OUTSIDE
    -
    209 #define D_STR_OUTSIDE "室外"
    -
    210 #endif // D_STR_OUTSIDE
    -
    211 #ifndef D_STR_LOUD
    -
    212 #define D_STR_LOUD "大声"
    -
    213 #endif // D_STR_LOUD
    -
    214 #ifndef D_STR_UPPER
    -
    215 #define D_STR_UPPER "更高"
    -
    216 #endif // D_STR_UPPER
    -
    217 #ifndef D_STR_LOWER
    -
    218 #define D_STR_LOWER "更低"
    -
    219 #endif // D_STR_LOWER
    -
    220 #ifndef D_STR_BREEZE
    -
    221 #define D_STR_BREEZE "微风"
    -
    222 #endif // D_STR_BREEZE
    -
    223 #ifndef D_STR_CIRCULATE
    -
    224 #define D_STR_CIRCULATE "流通"
    -
    225 #endif // D_STR_CIRCULATE
    -
    226 #ifndef D_STR_CEILING
    -
    227 #define D_STR_CEILING "天花板"
    -
    228 #endif // D_STR_CEILING
    -
    229 #ifndef D_STR_WALL
    -
    230 #define D_STR_WALL "墙"
    -
    231 #endif // D_STR_WALL
    -
    232 #ifndef D_STR_ROOM
    -
    233 #define D_STR_ROOM "房间"
    -
    234 #endif // D_STR_ROOM
    -
    235 #ifndef D_STR_6THSENSE
    -
    236 #define D_STR_6THSENSE "第六感"
    -
    237 #endif // D_STR_6THSENSE
    -
    238 #ifndef D_STR_ZONEFOLLOW
    -
    239 #define D_STR_ZONEFOLLOW "区域跟随"
    -
    240 #endif // D_STR_ZONEFOLLOW
    -
    241 #ifndef D_STR_FIXED
    -
    242 #define D_STR_FIXED "固定"
    -
    243 #endif // D_STR_FIXED
    -
    244 
    -
    245 #ifndef D_STR_AUTO
    -
    246 #define D_STR_AUTO "自动"
    -
    247 #endif // D_STR_AUTO
    -
    248 #ifndef D_STR_AUTOMATIC
    -
    249 #define D_STR_AUTOMATIC "自动的"
    -
    250 #endif // D_STR_AUTOMATIC
    -
    251 #ifndef D_STR_MANUAL
    -
    252 #define D_STR_MANUAL "手动"
    -
    253 #endif // D_STR_MANUAL
    -
    254 #ifndef D_STR_COOL
    -
    255 #define D_STR_COOL "制冷"
    -
    256 #endif // D_STR_COOL
    -
    257 #ifndef D_STR_HEAT
    -
    258 #define D_STR_HEAT "加热"
    -
    259 #endif // D_STR_HEAT
    -
    260 #ifndef D_STR_FAN
    -
    261 #define D_STR_FAN "风扇"
    -
    262 #endif // D_STR_FAN
    -
    263 #ifndef D_STR_FANONLY
    -
    264 #define D_STR_FANONLY "仅风扇"
    -
    265 #endif // D_STR_FANONLY
    -
    266 #ifndef D_STR_DRY
    -
    267 #define D_STR_DRY "干燥"
    -
    268 #endif // D_STR_DRY
    -
    269 
    -
    270 #ifndef D_STR_MAX
    -
    271 #define D_STR_MAX "最大"
    -
    272 #endif // D_STR_MAX
    -
    273 #ifndef D_STR_MAXIMUM
    -
    274 #define D_STR_MAXIMUM "最小"
    -
    275 #endif // D_STR_MAXIMUM
    -
    276 #ifndef D_STR_MIN
    -
    277 #define D_STR_MIN "最低"
    -
    278 #endif // D_STR_MIN
    -
    279 #ifndef D_STR_MINIMUM
    -
    280 #define D_STR_MINIMUM "最低"
    -
    281 #endif // D_STR_MINIMUM
    -
    282 #ifndef D_STR_MED
    -
    283 #define D_STR_MED "中"
    -
    284 #endif // D_STR_MED
    -
    285 #ifndef D_STR_MEDIUM
    -
    286 #define D_STR_MEDIUM "中"
    -
    287 #endif // D_STR_MEDIUM
    -
    288 
    -
    289 #ifndef D_STR_HIGHEST
    -
    290 #define D_STR_HIGHEST "最高"
    -
    291 #endif // D_STR_HIGHEST
    -
    292 #ifndef D_STR_HIGH
    -
    293 #define D_STR_HIGH "高"
    -
    294 #endif // D_STR_HIGH
    -
    295 #ifndef D_STR_HI
    -
    296 #define D_STR_HI "嗨"
    -
    297 #endif // D_STR_HI
    -
    298 #ifndef D_STR_MID
    -
    299 #define D_STR_MID "中"
    -
    300 #endif // D_STR_MID
    -
    301 #ifndef D_STR_MIDDLE
    -
    302 #define D_STR_MIDDLE "居中"
    -
    303 #endif // D_STR_MIDDLE
    -
    304 #ifndef D_STR_LOW
    -
    305 #define D_STR_LOW "低"
    -
    306 #endif // D_STR_LOW
    -
    307 #ifndef D_STR_LO
    -
    308 #define D_STR_LO "低"
    -
    309 #endif // D_STR_LO
    -
    310 #ifndef D_STR_LOWEST
    -
    311 #define D_STR_LOWEST "最低"
    -
    312 #endif // D_STR_LOWEST
    -
    313 #ifndef D_STR_RIGHT
    -
    314 #define D_STR_RIGHT "右"
    -
    315 #endif // D_STR_RIGHT
    -
    316 #ifndef D_STR_MAXRIGHT
    -
    317 #define D_STR_MAXRIGHT D_STR_MAX " " D_STR_RIGHT // Set `D_STR_MAX` first!
    -
    318 #endif // D_STR_MAXRIGHT
    -
    319 #ifndef D_STR_RIGHTMAX_NOSPACE
    -
    320 #define D_STR_RIGHTMAX_NOSPACE D_STR_RIGHT D_STR_MAX // Set `D_STR_MAX` first!
    -
    321 #endif // D_STR_RIGHTMAX_NOSPACE
    -
    322 #ifndef D_STR_LEFT
    -
    323 #define D_STR_LEFT "左"
    -
    324 #endif // D_STR_LEFT
    -
    325 #ifndef D_STR_MAXLEFT
    -
    326 #define D_STR_MAXLEFT D_STR_MAX " " D_STR_LEFT // Set `D_STR_MAX` first!
    -
    327 #endif // D_STR_MAXLEFT
    -
    328 #ifndef D_STR_LEFTMAX_NOSPACE
    -
    329 #define D_STR_LEFTMAX_NOSPACE D_STR_LEFT D_STR_MAX // Set `D_STR_MAX` first!
    -
    330 #endif // D_STR_LEFTMAX_NOSPACE
    -
    331 #ifndef D_STR_WIDE
    -
    332 #define D_STR_WIDE "扫风"
    -
    333 #endif // D_STR_WIDE
    -
    334 #ifndef D_STR_CENTRE
    -
    335 #define D_STR_CENTRE "中间"
    -
    336 #endif // D_STR_CENTRE
    -
    337 #ifndef D_STR_TOP
    -
    338 #define D_STR_TOP "上部"
    -
    339 #endif // D_STR_TOP
    -
    340 #ifndef D_STR_BOTTOM
    -
    341 #define D_STR_BOTTOM "底部"
    -
    342 #endif // D_STR_BOTTOM
    -
    343 
    -
    344 // Compound words/phrases/descriptions from pre-defined words.
    -
    345 // Note: Obviously these need to be defined *after* their component words.
    -
    346 #ifndef D_STR_EYEAUTO
    -
    347 #define D_STR_EYEAUTO D_STR_EYE " " D_STR_AUTO
    -
    348 #endif // D_STR_EYEAUTO
    -
    349 #ifndef D_STR_LIGHTTOGGLE
    -
    350 #define D_STR_LIGHTTOGGLE D_STR_LIGHT " " D_STR_TOGGLE
    -
    351 #endif // D_STR_LIGHTTOGGLE
    -
    352 #ifndef D_STR_OUTSIDEQUIET
    -
    353 #define D_STR_OUTSIDEQUIET D_STR_OUTSIDE " " D_STR_QUIET
    -
    354 #endif // D_STR_OUTSIDEQUIET
    -
    355 #ifndef D_STR_POWERTOGGLE
    -
    356 #define D_STR_POWERTOGGLE D_STR_POWER " " D_STR_TOGGLE
    -
    357 #endif // D_STR_POWERTOGGLE
    -
    358 #ifndef D_STR_PREVIOUSPOWER
    -
    359 #define D_STR_PREVIOUSPOWER D_STR_PREVIOUS " " D_STR_POWER
    -
    360 #endif // D_STR_PREVIOUSPOWER
    -
    361 #ifndef D_STR_SENSORTEMP
    -
    362 #define D_STR_SENSORTEMP D_STR_SENSOR " " D_STR_TEMP
    -
    363 #endif // D_STR_SENSORTEMP
    -
    364 #ifndef D_STR_SLEEP_TIMER
    -
    365 #define D_STR_SLEEP_TIMER D_STR_SLEEP " " D_STR_TIMER
    -
    366 #endif // D_STR_SLEEP_TIMER
    -
    367 #ifndef D_STR_SWINGVMODE
    -
    368 #define D_STR_SWINGVMODE D_STR_SWINGV " " D_STR_MODE
    -
    369 #endif // D_STR_SWINGVMODE
    -
    370 #ifndef D_STR_SWINGVTOGGLE
    -
    371 #define D_STR_SWINGVTOGGLE D_STR_SWINGV " " D_STR_TOGGLE
    -
    372 #endif // D_STR_SWINGVTOGGLE
    -
    373 
    -
    374 // Separators
    -
    375 #ifndef D_CHR_TIME_SEP
    -
    376 #define D_CHR_TIME_SEP ':'
    -
    377 #endif // D_CHR_TIME_SEP
    -
    378 #ifndef D_STR_SPACELBRACE
    -
    379 #define D_STR_SPACELBRACE " ("
    -
    380 #endif // D_STR_SPACELBRACE
    -
    381 #ifndef D_STR_COMMASPACE
    -
    382 #define D_STR_COMMASPACE ", "
    -
    383 #endif // D_STR_COMMASPACE
    -
    384 #ifndef D_STR_COLONSPACE
    -
    385 #define D_STR_COLONSPACE ": "
    -
    386 #endif // D_STR_COLONSPACE
    -
    387 
    -
    388 #ifndef D_STR_DAY
    -
    389 #define D_STR_DAY "天"
    -
    390 #endif // D_STR_DAY
    -
    391 #ifndef D_STR_DAYS
    -
    392 #define D_STR_DAYS D_STR_DAY "s"
    -
    393 #endif // D_STR_DAYS
    -
    394 #ifndef D_STR_HOUR
    -
    395 #define D_STR_HOUR "时"
    -
    396 #endif // D_STR_HOUR
    -
    397 #ifndef D_STR_HOURS
    -
    398 #define D_STR_HOURS D_STR_HOUR "s"
    -
    399 #endif // D_STR_HOURS
    -
    400 #ifndef D_STR_MINUTE
    -
    401 #define D_STR_MINUTE "分"
    -
    402 #endif // D_STR_MINUTE
    -
    403 #ifndef D_STR_MINUTES
    -
    404 #define D_STR_MINUTES D_STR_MINUTE "s"
    -
    405 #endif // D_STR_MINUTES
    -
    406 #ifndef D_STR_SECOND
    -
    407 #define D_STR_SECOND "秒"
    -
    408 #endif // D_STR_SECOND
    -
    409 #ifndef D_STR_SECONDS
    -
    410 #define D_STR_SECONDS D_STR_SECOND "s"
    -
    411 #endif // D_STR_SECONDS
    -
    412 #ifndef D_STR_NOW
    -
    413 #define D_STR_NOW "现在"
    -
    414 #endif // D_STR_NOW
    -
    415 /* This is not three letter days. Disabled.
    -
    416 #ifndef D_STR_THREELETTERDAYS
    -
    417 #define D_STR_THREELETTERDAYS "周一至周末"
    -
    418 #endif // D_STR_THREELETTERDAYS
    -
    419 */
    -
    420 
    -
    421 #ifndef D_STR_YES
    -
    422 #define D_STR_YES "是"
    -
    423 #endif // D_STR_YES
    -
    424 #ifndef D_STR_NO
    -
    425 #define D_STR_NO "否"
    -
    426 #endif // D_STR_NO
    -
    427 #ifndef D_STR_TRUE
    -
    428 #define D_STR_TRUE "正确"
    -
    429 #endif // D_STR_TRUE
    -
    430 #ifndef D_STR_FALSE
    -
    431 #define D_STR_FALSE "错误"
    -
    432 #endif // D_STR_FALSE
    -
    433 
    -
    434 #ifndef D_STR_REPEAT
    -
    435 #define D_STR_REPEAT "重复"
    -
    436 #endif // D_STR_REPEAT
    -
    437 #ifndef D_STR_CODE
    -
    438 #define D_STR_CODE "代码"
    -
    439 #endif // D_STR_CODE
    -
    440 #ifndef D_STR_BITS
    -
    441 #define D_STR_BITS "位"
    -
    442 #endif // D_STR_BITS
    -
    443 
    -
    444 // IRrecvDumpV2+
    -
    445 #ifndef D_STR_TIMESTAMP
    -
    446 #define D_STR_TIMESTAMP "时间戳记"
    -
    447 #endif // D_STR_TIMESTAMP
    -
    448 #ifndef D_STR_LIBRARY
    -
    449 #define D_STR_LIBRARY "库文件"
    -
    450 #endif // D_STR_LIBRARY
    -
    451 #ifndef D_STR_MESGDESC
    -
    452 #define D_STR_MESGDESC "等等信息"
    -
    453 #endif // D_STR_MESGDESC
    -
    454 #ifndef D_STR_IRRECVDUMP_STARTUP
    -
    455 #define D_STR_IRRECVDUMP_STARTUP \
    -
    456  "IRrecvDump 运行当中,等待红外信息输入位于引脚 %d"
    -
    457 #endif // D_STR_IRRECVDUMP_STARTUP
    -
    458 #ifndef D_WARN_BUFFERFULL
    -
    459 #define D_WARN_BUFFERFULL \
    -
    460  "警告: 红外编码数组过大(>= %d). " \
    -
    461  "在解决此问题之前,不应信任此结果. " \
    -
    462  "编辑并增加 `kCaptureBufferSize` 变量."
    -
    463 #endif // D_WARN_BUFFERFULL
    -
    464 
    -
    465 #endif // LOCALE_ZH_CN_H_
    -
    - - - - diff --git a/lib/lib_basic/IRremoteESP8266/docs/doxygen_index.md b/lib/lib_basic/IRremoteESP8266/docs/doxygen_index.md deleted file mode 100644 index 95607645e..000000000 --- a/lib/lib_basic/IRremoteESP8266/docs/doxygen_index.md +++ /dev/null @@ -1,60 +0,0 @@ -# IRremoteESP8266 Library API Documentation {#mainpage} - -## Getting Started - -### The basics -For sending messages, look at the IRsend class. - -For receiving messages, look at the IRrecv & decode_results classes. - -### Air Conditioners -For _generic_ Air Conditioner control, look at the IRac class & the -stdAc::state_t structure. - -For _detailed_ Air Conditioner control, you need to determine what protocol the -library detects your remote/Air Conditioner to be, look into the appropriate -`src/ir_Protocol.[h|cpp]` files and use the appropriate class object. -e.g. if `IRrecvDumpV2` (or better) detects the protocol as `KELVINATOR`, -open the `src/ir_Kelvinator.*` files, and examine the IRKelvinatorAC class the -methods available to create/decode/send `KELVINATOR` messages with all the -abilities the library offers. You can also select it from the -[Classes](annotated.html) menu above. - -Various native constants & options for a given Protocol's class object can be -found in the associated header file for that protocol. - -## Examples -Most of the common uses of this library's APIs have demonstration code -available under the [examples](https://github.com/crankyoldgit/IRremoteESP8266/tree/master/examples) -directory. It ranges from trivial examples to complex real-world project code. - -## Tuning -The most commonly used & needed knobs for controlling aspects of this library -are available via run-time class methods or at class-object instantiation. -Again, you are referred to the IRsend & IRrecv classes. - -### Advanced -Certain addition constants and options are available as compile-time tweaks. -You should inspect [IRremoteESP8266.h](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/IRremoteESP8266.h), -[IRsend.h](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/IRsend.h), -& [IRrecv.h](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/IRrecv.h) -for General, Sending, & Receiving tweaks respectively. - -#### Protocol timings -Generally you should never need to adjust the timing parameters for a given -protocol or device. However, occasionally some individual devices just want to -be special. -If you are having problems decoding/receiving a message, look into the -`tolerance`, `kTolerance`, or IRrecv::setTolerance constants/methods etc first. -However, if your problems is sending, or adjusting the tolerance doesn't work -you may need to tweak per-protocol timing values. These are stored as -constants in the `ir_ProtocolName.cpp` file for the given protocol. This is -typically a step of last resort. - -#### Reducing code size & flash usage. -You can disable most protocols by either modifying the appropriate `#‍define`s -in [IRremoteESP8266.h](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/IRremoteESP8266.h) -or passing the appropriate compile-time flags, as documented in the same file. - -Avoid using the A/C classes, especially the IRac class as they will force the -compiler to include large amounts of code you may not need. diff --git a/lib/lib_basic/IRremoteESP8266/library.json b/lib/lib_basic/IRremoteESP8266/library.json index 852b57d6b..f905e1c2f 100644 --- a/lib/lib_basic/IRremoteESP8266/library.json +++ b/lib/lib_basic/IRremoteESP8266/library.json @@ -1,6 +1,6 @@ { "name": "IRremoteESP8266", - "version": "2.7.18", + "version": "2.7.19", "keywords": "infrared, ir, remote, esp8266, esp32", "description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)", "repository": @@ -46,5 +46,12 @@ ], "exclude": [".github", "extras", "docs", "assets"], "frameworks": "arduino", - "platforms": ["espressif8266", "espressif32"] + "platforms": ["espressif8266", "espressif32"], + + + + "build": { + "srcDir": "IRremoteESP8266/src", + "flags": [ "-I$PROJECT_DIR/include", "-includetasmota_options.h" ] + } } diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_LG.cpp b/lib/lib_basic/IRremoteESP8266/src/ir_LG.cpp deleted file mode 100644 index d78f25888..000000000 --- a/lib/lib_basic/IRremoteESP8266/src/ir_LG.cpp +++ /dev/null @@ -1,494 +0,0 @@ -// Copyright 2015 Darryl Smith -// Copyright 2015 cheaplin -// Copyright 2017, 2018 David Conran - -/// @file -/// @brief Support for LG protocols. -/// LG decode originally added by Darryl Smith (based on the JVC protocol) -/// LG send originally added by https://github.com/chaeplin -/// @see https://github.com/arendst/Tasmota/blob/54c2eb283a02e4287640a4595e506bc6eadbd7f2/sonoff/xdrv_05_irremote.ino#L327-438 - -#include "ir_LG.h" -#include -#include "IRac.h" -#include "IRrecv.h" -#include "IRsend.h" -#include "IRtext.h" -#include "IRutils.h" - -using irutils::addBoolToString; -using irutils::addModeToString; -using irutils::addModelToString; -using irutils::addFanToString; -using irutils::addTempToString; - - -// Constants -// Common timings -const uint16_t kLgBitMark = 550; ///< uSeconds. -const uint16_t kLgOneSpace = 1600; ///< uSeconds. -const uint16_t kLgZeroSpace = 550; ///< uSeconds. -const uint16_t kLgRptSpace = 2250; ///< uSeconds. -const uint16_t kLgMinGap = 39750; ///< uSeconds. -const uint32_t kLgMinMessageLength = 108050; ///< uSeconds. -// LG (28 Bit) -const uint16_t kLgHdrMark = 8500; ///< uSeconds. -const uint16_t kLgHdrSpace = 4250; ///< uSeconds. -// LG (32 Bit) -const uint16_t kLg32HdrMark = 4500; ///< uSeconds. -const uint16_t kLg32HdrSpace = 4450; ///< uSeconds. -const uint16_t kLg32RptHdrMark = 8950; ///< uSeconds. -// LG2 (28 Bit) -const uint16_t kLg2HdrMark = 3200; ///< uSeconds. -const uint16_t kLg2HdrSpace = 9900; ///< uSeconds. -const uint16_t kLg2BitMark = 480; ///< uSeconds. - -#if SEND_LG -/// Send an LG formatted message. (LG) -/// Status: Beta / Should be working. -/// @param[in] data The message to be sent. -/// @param[in] nbits The number of bits of message to be sent. -/// Typically kLgBits or kLg32Bits. -/// @param[in] repeat The number of times the command is to be repeated. -/// @note LG has a separate message to indicate a repeat, like NEC does. -void IRsend::sendLG(uint64_t data, uint16_t nbits, uint16_t repeat) { - uint16_t repeatHeaderMark = 0; - uint8_t duty = kDutyDefault; - - if (nbits >= kLg32Bits) { - // LG 32bit protocol is near identical to Samsung except for repeats. - sendSAMSUNG(data, nbits, 0); // Send it as a single Samsung message. - repeatHeaderMark = kLg32RptHdrMark; - duty = 33; - repeat++; - } else { - // LG (28-bit) protocol. - repeatHeaderMark = kLgHdrMark; - sendGeneric(kLgHdrMark, kLgHdrSpace, kLgBitMark, kLgOneSpace, kLgBitMark, - kLgZeroSpace, kLgBitMark, kLgMinGap, kLgMinMessageLength, data, - nbits, 38, true, 0, // Repeats are handled later. - duty); - } - - // Repeat - // Protocol has a mandatory repeat-specific code sent after every command. - if (repeat) - sendGeneric(repeatHeaderMark, kLgRptSpace, 0, 0, 0, 0, // No data is sent. - kLgBitMark, kLgMinGap, kLgMinMessageLength, 0, 0, // No data. - 38, true, repeat - 1, duty); -} - -/// Send an LG Variant-2 formatted message. (LG2) -/// Status: Beta / Should be working. -/// @param[in] data The message to be sent. -/// @param[in] nbits The number of bits of message to be sent. -/// Typically kLgBits or kLg32Bits. -/// @param[in] repeat The number of times the command is to be repeated. -/// @note LG has a separate message to indicate a repeat, like NEC does. -void IRsend::sendLG2(uint64_t data, uint16_t nbits, uint16_t repeat) { - if (nbits >= kLg32Bits) { - // Let the original routine handle it. - sendLG(data, nbits, repeat); // Send it as a single Samsung message. - return; - } - - // LGv2 (28-bit) protocol. - sendGeneric(kLg2HdrMark, kLg2HdrSpace, kLg2BitMark, kLgOneSpace, kLg2BitMark, - kLgZeroSpace, kLg2BitMark, kLgMinGap, kLgMinMessageLength, data, - nbits, 38, true, 0, // Repeats are handled later. - 33); // Use a duty cycle of 33% (Testing) - - // TODO(crackn): Verify the details of what repeat messages look like. - // Repeat - // Protocol has a mandatory repeat-specific code sent after every command. - if (repeat) - sendGeneric(kLg2HdrMark, kLgRptSpace, 0, 0, 0, 0, // No data is sent. - kLgBitMark, kLgMinGap, kLgMinMessageLength, 0, 0, // No data. - 38, true, repeat - 1, 50); -} - -/// Construct a raw 28-bit LG message code from the supplied address & command. -/// Status: STABLE / Works. -/// @param[in] address The address code. -/// @param[in] command The command code. -/// @return A raw 28-bit LG message code suitable for sendLG() etc. -/// @note Sequence of bits = address + command + checksum. -uint32_t IRsend::encodeLG(uint16_t address, uint16_t command) { - return ((address << 20) | (command << 4) | irutils::sumNibbles(command, 4)); -} -#endif // SEND_LG - -#if DECODE_LG -/// Decode the supplied LG message. -/// Status: STABLE / Working. -/// @param[in,out] results Ptr to the data to decode & where to store the result -/// @param[in] offset The starting index to use when attempting to decode the -/// raw data. Typically/Defaults to kStartOffset. -/// @param[in] nbits The number of data bits to expect. -/// Typically kLgBits or kLg32Bits. -/// @param[in] strict Flag indicating if we should perform strict matching. -/// @return True if it can decode it, false if it can't. -/// @note LG protocol has a repeat code which is 4 items long. -/// Even though the protocol has 28/32 bits of data, only 24/28 bits are -/// distinct. -/// In transmission order, the 28/32 bits are constructed as follows: -/// 8/12 bits of address + 16 bits of command + 4 bits of checksum. -/// @note LG 32bit protocol appears near identical to the Samsung protocol. -/// They possibly differ on how they repeat and initial HDR mark. -/// @see https://funembedded.wordpress.com/2014/11/08/ir-remote-control-for-lg-conditioner-using-stm32f302-mcu-on-mbed-platform/ -bool IRrecv::decodeLG(decode_results *results, uint16_t offset, - const uint16_t nbits, const bool strict) { - if (nbits >= kLg32Bits) { - if (results->rawlen <= 2 * nbits + 2 * (kHeader + kFooter) - 1 + offset) - return false; // Can't possibly be a valid LG32 message. - } else { - if (results->rawlen <= 2 * nbits + kHeader - 1 + offset) - return false; // Can't possibly be a valid LG message. - } - // Compliance - if (strict && nbits != kLgBits && nbits != kLg32Bits) - return false; // Doesn't comply with expected LG protocol. - - // Header (Mark) - uint32_t kHdrSpace; - if (matchMark(results->rawbuf[offset], kLgHdrMark)) - kHdrSpace = kLgHdrSpace; - else if (matchMark(results->rawbuf[offset], kLg2HdrMark)) - kHdrSpace = kLg2HdrSpace; - else if (matchMark(results->rawbuf[offset], kLg32HdrMark)) - kHdrSpace = kLg32HdrSpace; - else - return false; - offset++; - - // Set up the expected data section values. - const uint16_t kBitmark = (kHdrSpace == kLg2HdrSpace) ? kLg2BitMark - : kLgBitMark; - // Header Space + Data + Footer - uint64_t data = 0; - uint16_t used = matchGeneric(results->rawbuf + offset, &data, - results->rawlen - offset, nbits, - 0, // Already matched the Header mark. - kHdrSpace, - kBitmark, kLgOneSpace, kBitmark, kLgZeroSpace, - kBitmark, kLgMinGap, true, kUseDefTol, 0, true); - if (!used) return false; - offset += used; - - // Repeat - if (nbits >= kLg32Bits) { - // If we are expecting the LG 32-bit protocol, there is always - // a repeat message. So, check for it. - uint64_t unused; - if (!matchGeneric(results->rawbuf + offset, &unused, - results->rawlen - offset, 0, // No Data bits to match. - kLg32RptHdrMark, kLgRptSpace, - kBitmark, kLgOneSpace, kBitmark, kLgZeroSpace, - kBitmark, kLgMinGap, true, kUseDefTol)) return false; - } - - // Compliance - uint16_t command = (data >> 4); // The 16 bits before the checksum. - - if (strict && (data & 0xF) != irutils::sumNibbles(command, 4)) - return false; // The last 4 bits sent are the expected checksum. - // Success - if (kHdrSpace == kLg2HdrSpace) // Was it an LG2 message? - results->decode_type = LG2; - else - results->decode_type = LG; - results->bits = nbits; - results->value = data; - results->command = command; - results->address = data >> 20; // The bits before the command. - return true; -} -#endif // DECODE_LG - -// LG A/C Class - -/// Class constructor -/// @param[in] pin GPIO to be used when sending. -/// @param[in] inverted Is the output signal to be inverted? -/// @param[in] use_modulation Is frequency modulation to be used? -IRLgAc::IRLgAc(const uint16_t pin, const bool inverted, - const bool use_modulation) - : _irsend(pin, inverted, use_modulation) { stateReset(); } - -/// Reset the internals of the object to a known good state. -void IRLgAc::stateReset(void) { - setRaw(kLgAcOffCommand); - setModel(lg_ac_remote_model_t::GE6711AR2853M); -} - -/// Set up hardware to be able to send a message. -void IRLgAc::begin(void) { _irsend.begin(); } - -#if SEND_LG -/// Send the current internal state as an IR message. -/// @param[in] repeat Nr. of times the message will be repeated. -void IRLgAc::send(const uint16_t repeat) { - if (getPower()) - _irsend.send(_protocol, getRaw(), kLgBits, repeat); - else - // Always send the special Off command if the power is set to off. - // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1008#issuecomment-570763580 - _irsend.send(_protocol, kLgAcOffCommand, kLgBits, repeat); -} -#endif // SEND_LG - -/// Set the model of the A/C to emulate. -/// @param[in] model The enum of the appropriate model. -void IRLgAc::setModel(const lg_ac_remote_model_t model) { - switch (model) { - case lg_ac_remote_model_t::AKB75215403: - _protocol = decode_type_t::LG2; - break; - case lg_ac_remote_model_t::GE6711AR2853M: - // FALL THRU - default: - _protocol = decode_type_t::LG; - } -} - -/// Get the model of the A/C. -/// @return The enum of the compatible model. -lg_ac_remote_model_t IRLgAc::getModel(void) const { - switch (_protocol) { - case LG2: - return lg_ac_remote_model_t::AKB75215403; - case LG: - // FALL THRU - default: - return lg_ac_remote_model_t::GE6711AR2853M; - } -} - -/// Get a copy of the internal state/code for this protocol. -/// @return The code for this protocol based on the current internal state. -uint32_t IRLgAc::getRaw(void) { - checksum(); - return _.raw; -} - -/// Set the internal state from a valid code for this protocol. -/// @param[in] new_code A valid code for this protocol. -void IRLgAc::setRaw(const uint32_t new_code) { - _.raw = new_code; - _temp = 15; // Ensure there is a "sane" previous temp. - _temp = getTemp(); -} - -/// Calculate the checksum for a given state. -/// @param[in] state The value to calc the checksum of. -/// @return The calculated checksum value. -uint8_t IRLgAc::calcChecksum(const uint32_t state) { - return irutils::sumNibbles(state >> 4, 4); -} - -/// Verify the checksum is valid for a given state. -/// @param[in] state The value to verify the checksum of. -/// @return true, if the state has a valid checksum. Otherwise, false. -bool IRLgAc::validChecksum(const uint32_t state) { - LGProtocol LGp; - LGp.raw = state; - return calcChecksum(state) == LGp.Sum; -} - -/// Calculate and set the checksum values for the internal state. -void IRLgAc::checksum(void) { - _.Sum = calcChecksum(_.raw); -} - -/// Change the power setting to On. -void IRLgAc::on(void) { setPower(true); } - -/// Change the power setting to Off. -void IRLgAc::off(void) { setPower(false); } - -/// Change the power setting. -/// @param[in] on true, the setting is on. false, the setting is off. -void IRLgAc::setPower(const bool on) { - _.Power = (on ? kLgAcPowerOn : kLgAcPowerOff); - if (on) - setTemp(_temp); // Reset the temp if we are on. - else - _setTemp(0); // Off clears the temp. -} - -/// Get the value of the current power setting. -/// @return true, the setting is on. false, the setting is off. -bool IRLgAc::getPower(void) const { - return _.Power == kLgAcPowerOn; -} - -/// Set the temperature. -/// @param[in] value The native temperature. -/// @note Internal use only. -inline void IRLgAc::_setTemp(const uint8_t value) { - _.Temp = value; -} - -/// Set the temperature. -/// @param[in] degrees The temperature in degrees celsius. -void IRLgAc::setTemp(const uint8_t degrees) { - uint8_t temp = std::max(kLgAcMinTemp, degrees); - temp = std::min(kLgAcMaxTemp, temp); - _temp = temp; - _setTemp(temp - kLgAcTempAdjust); -} - -/// Get the current temperature setting. -/// @return The current setting for temp. in degrees celsius. -uint8_t IRLgAc::getTemp(void) const { - if (getPower()) - return _.Temp + kLgAcTempAdjust; - else - return _temp; -} - -/// Set the speed of the fan. -/// @param[in] speed The desired setting. -void IRLgAc::setFan(const uint8_t speed) { - switch (speed) { - case kLgAcFanAuto: - case kLgAcFanLowest: - case kLgAcFanLow: - case kLgAcFanMedium: - case kLgAcFanHigh: - _.Fan = speed; - break; - default: - _.Fan = kLgAcFanAuto; - } -} - -/// Get the current fan speed setting. -/// @return The current fan speed. -uint8_t IRLgAc::getFan(void) const { - return _.Fan; -} - -/// Get the operating mode setting of the A/C. -/// @return The current operating mode setting. -uint8_t IRLgAc::getMode(void) const { - return _.Mode; -} - -/// Set the operating mode of the A/C. -/// @param[in] mode The desired operating mode. -void IRLgAc::setMode(const uint8_t mode) { - switch (mode) { - case kLgAcAuto: - case kLgAcDry: - case kLgAcHeat: - case kLgAcCool: - case kLgAcFan: - _.Mode = mode; - break; - default: - _.Mode = kLgAcAuto; - } -} - -/// Convert a stdAc::opmode_t enum into its native mode. -/// @param[in] mode The enum to be converted. -/// @return The native equivalent of the enum. -uint8_t IRLgAc::convertMode(const stdAc::opmode_t mode) { - switch (mode) { - case stdAc::opmode_t::kCool: return kLgAcCool; - case stdAc::opmode_t::kHeat: return kLgAcHeat; - case stdAc::opmode_t::kFan: return kLgAcFan; - case stdAc::opmode_t::kDry: return kLgAcDry; - default: return kLgAcAuto; - } -} - -/// Convert a native mode into its stdAc equivalent. -/// @param[in] mode The native setting to be converted. -/// @return The stdAc equivalent of the native setting. -stdAc::opmode_t IRLgAc::toCommonMode(const uint8_t mode) { - switch (mode) { - case kLgAcCool: return stdAc::opmode_t::kCool; - case kLgAcHeat: return stdAc::opmode_t::kHeat; - case kLgAcDry: return stdAc::opmode_t::kDry; - case kLgAcFan: return stdAc::opmode_t::kFan; - default: return stdAc::opmode_t::kAuto; - } -} - -/// Convert a stdAc::fanspeed_t enum into it's native speed. -/// @param[in] speed The enum to be converted. -/// @return The native equivalent of the enum. -uint8_t IRLgAc::convertFan(const stdAc::fanspeed_t speed) { - switch (speed) { - case stdAc::fanspeed_t::kMin: return kLgAcFanLowest; - case stdAc::fanspeed_t::kLow: return kLgAcFanLow; - case stdAc::fanspeed_t::kMedium: return kLgAcFanMedium; - case stdAc::fanspeed_t::kHigh: - case stdAc::fanspeed_t::kMax: return kLgAcFanHigh; - default: return kLgAcFanAuto; - } -} - -/// Convert a native fan speed into its stdAc equivalent. -/// @param[in] speed The native setting to be converted. -/// @return The stdAc equivalent of the native setting. -stdAc::fanspeed_t IRLgAc::toCommonFanSpeed(const uint8_t speed) { - switch (speed) { - case kLgAcFanHigh: return stdAc::fanspeed_t::kMax; - case kLgAcFanMedium: return stdAc::fanspeed_t::kMedium; - case kLgAcFanLow: return stdAc::fanspeed_t::kLow; - case kLgAcFanLowest: return stdAc::fanspeed_t::kMin; - default: return stdAc::fanspeed_t::kAuto; - } -} - -/// Convert the current internal state into its stdAc::state_t equivalent. -/// @return The stdAc equivalent of the native settings. -stdAc::state_t IRLgAc::toCommon(void) const { - stdAc::state_t result; - result.protocol = decode_type_t::LG; - result.model = getModel(); - result.power = getPower(); - result.mode = toCommonMode(_.Mode); - result.celsius = true; - result.degrees = getTemp(); - result.fanspeed = toCommonFanSpeed(_.Fan); - // Not supported. - result.swingv = stdAc::swingv_t::kOff; - result.swingh = stdAc::swingh_t::kOff; - result.quiet = false; - result.turbo = false; - result.light = false; - result.filter = false; - result.clean = false; - result.econo = false; - result.beep = false; - result.sleep = -1; - result.clock = -1; - return result; -} - -/// Convert the current internal state into a human readable string. -/// @return A human readable string. -String IRLgAc::toString(void) const { - String result = ""; - result.reserve(80); // Reserve some heap for the string to reduce fragging. - result += addModelToString(_protocol, getModel(), false); - result += addBoolToString(getPower(), kPowerStr); - if (getPower()) { // Only display the rest if is in power on state. - result += addModeToString(_.Mode, kLgAcAuto, kLgAcCool, - kLgAcHeat, kLgAcDry, kLgAcFan); - result += addTempToString(getTemp()); - result += addFanToString(_.Fan, kLgAcFanHigh, kLgAcFanLow, - kLgAcFanAuto, kLgAcFanLowest, kLgAcFanMedium); - } - return result; -} - -/// Check if the internal state looks like a valid LG A/C message. -/// @return true, the internal state is a valid LG A/C mesg. Otherwise, false. -bool IRLgAc::isValidLgAc(void) const { - return validChecksum(_.raw) && (_.Sign == kLgAcSignature); -} diff --git a/lib/lib_basic/IRremoteESP8266/src/ir_LG.h b/lib/lib_basic/IRremoteESP8266/src/ir_LG.h deleted file mode 100644 index f02e9cb79..000000000 --- a/lib/lib_basic/IRremoteESP8266/src/ir_LG.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2017, 2019 David Conran - -/// @file -/// @brief Support for LG protocols. -/// @see https://github.com/arendst/Tasmota/blob/54c2eb283a02e4287640a4595e506bc6eadbd7f2/sonoff/xdrv_05_irremote.ino#L327-438 - - -// Supports: -// Brand: LG, Model: 6711A20083V remote (LG) -// Brand: LG, Model: AKB74395308 remote (LG2) -// Brand: LG, Model: S4-W12JA3AA A/C (LG2) -// Brand: LG, Model: AKB75215403 remote (LG2) -// Brand: General Electric, Model: AG1BH09AW101 Split A/C -// Brand: General Electric, Model: 6711AR2853M A/C Remote - -#ifndef IR_LG_H_ -#define IR_LG_H_ - -#define __STDC_LIMIT_MACROS -#include -#ifndef UNIT_TEST -#include -#endif -#include "IRremoteESP8266.h" -#include "IRsend.h" -#include "IRutils.h" -#ifdef UNIT_TEST -#include "IRsend_test.h" -#endif - -/// Native representation of a LG A/C message. -union LGProtocol{ - uint32_t raw; ///< The state of the IR remote in IR code form. - struct { - uint32_t Sum :4; - uint32_t Fan :3; - uint32_t :1; - uint32_t Temp :4; - uint32_t Mode :3; - uint32_t :3; - uint32_t Power:2; - uint32_t Sign :8; - }; -}; - -const uint8_t kLgAcFanLowest = 0; // 0b000 -const uint8_t kLgAcFanLow = 1; // 0b001 -const uint8_t kLgAcFanMedium = 2; // 0b010 -const uint8_t kLgAcFanHigh = 4; // 0b100 -const uint8_t kLgAcFanAuto = 5; // 0b101 -const uint8_t kLgAcTempAdjust = 15; -const uint8_t kLgAcMinTemp = 16; // Celsius -const uint8_t kLgAcMaxTemp = 30; // Celsius -const uint8_t kLgAcCool = 0; // 0b000 -const uint8_t kLgAcDry = 1; // 0b001 -const uint8_t kLgAcFan = 2; // 0b010 -const uint8_t kLgAcAuto = 3; // 0b011 -const uint8_t kLgAcHeat = 4; // 0b100 -const uint8_t kLgAcPowerOff = 3; // 0b11 -const uint8_t kLgAcPowerOn = 0; // 0b00 -const uint8_t kLgAcSignature = 0x88; - -const uint32_t kLgAcOffCommand = 0x88C0051; - -// Classes -/// Class for handling detailed LG A/C messages. -class IRLgAc { - public: - explicit IRLgAc(const uint16_t pin, const bool inverted = false, - const bool use_modulation = true); - void stateReset(void); - static uint8_t calcChecksum(const uint32_t state); - static bool validChecksum(const uint32_t state); - bool isValidLgAc(void) const; -#if SEND_LG - void send(const uint16_t repeat = kLgDefaultRepeat); - /// Run the calibration to calculate uSec timing offsets for this platform. - /// @return The uSec timing offset needed per modulation of the IR Led. - /// @note This will produce a 65ms IR signal pulse at 38kHz. - /// Only ever needs to be run once per object instantiation, if at all. - int8_t calibrate(void) { return _irsend.calibrate(); } -#endif // SEND_LG - void begin(void); - void on(void); - void off(void); - void setPower(const bool on); - bool getPower(void) const; - void setTemp(const uint8_t degrees); - uint8_t getTemp(void) const; - void setFan(const uint8_t speed); - uint8_t getFan(void) const; - void setMode(const uint8_t mode); - uint8_t getMode(void) const; - uint32_t getRaw(void); - void setRaw(const uint32_t new_code); - static uint8_t convertMode(const stdAc::opmode_t mode); - static stdAc::opmode_t toCommonMode(const uint8_t mode); - static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); - static uint8_t convertFan(const stdAc::fanspeed_t speed); - stdAc::state_t toCommon(void) const; - String toString(void) const; - void setModel(const lg_ac_remote_model_t model); - lg_ac_remote_model_t getModel(void) const; -#ifndef UNIT_TEST - - private: - IRsend _irsend; ///< Instance of the IR send class -#else // UNIT_TEST - /// @cond IGNORE - IRsendTest _irsend; ///< Instance of the testing IR send class - /// @endcond -#endif // UNIT_TEST - LGProtocol _; - uint8_t _temp; - decode_type_t _protocol; ///< model - void checksum(void); - void _setTemp(const uint8_t value); -}; - -#endif // IR_LG_H_ diff --git a/lib/lib_basic/IRremoteESP8266/test/ir_Trotec_test.cpp b/lib/lib_basic/IRremoteESP8266/test/ir_Trotec_test.cpp deleted file mode 100644 index 4e8d639fe..000000000 --- a/lib/lib_basic/IRremoteESP8266/test/ir_Trotec_test.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2019 David Conran -#include "ir_Trotec.h" -#include "IRac.h" -#include "IRrecv.h" -#include "IRrecv_test.h" -#include "IRsend.h" -#include "IRsend_test.h" -#include "gtest/gtest.h" - - -TEST(TestTrotecESPClass, toCommon) { - IRTrotecESP ac(0); - ac.setPower(true); - ac.setMode(kTrotecCool); - ac.setTemp(20); - ac.setSpeed(kTrotecFanHigh); - ac.setSleep(true); - // Now test it. - ASSERT_EQ(decode_type_t::TROTEC, ac.toCommon().protocol); - ASSERT_TRUE(ac.toCommon().power); - ASSERT_TRUE(ac.toCommon().celsius); - ASSERT_EQ(20, ac.toCommon().degrees); - ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode); - ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed); - ASSERT_EQ(0, ac.toCommon().sleep); - // Unsupported. - ASSERT_EQ(-1, ac.toCommon().model); - ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv); - ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh); - ASSERT_FALSE(ac.toCommon().turbo); - ASSERT_FALSE(ac.toCommon().econo); - ASSERT_FALSE(ac.toCommon().light); - ASSERT_FALSE(ac.toCommon().filter); - ASSERT_FALSE(ac.toCommon().clean); - ASSERT_FALSE(ac.toCommon().beep); - ASSERT_FALSE(ac.toCommon().quiet); - ASSERT_EQ(-1, ac.toCommon().clock); -} - -TEST(TestTrotecESPClass, MessageConstructon) { - IRTrotecESP ac(0); - ac.setPower(true); - ac.setTemp(20); - ac.setMode(kTrotecCool); - ac.setSpeed(kTrotecFanMed); - ac.setSleep(true); - - uint8_t expected[kTrotecStateLength] = { - 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; - EXPECT_STATE_EQ(expected, ac.getRaw(), kTrotecBits); - EXPECT_EQ( - "Power: On, Mode: 1 (Cool), Temp: 20C, Fan: 2 (Medium), Sleep: On", - ac.toString()); -} - -// Tests for sendTrotec(). - -// Test sending typical data only. -TEST(TestSendTrotec, SendDataOnly) { - IRsendTest irsend(0); - irsend.begin(); - uint8_t data[kTrotecStateLength] = { - 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; - - irsend.sendTrotec(data); - EXPECT_EQ( - "f36000d50" - "m5952s7364" - "m592s592m592s1560m592s592m592s592m592s1560m592s592m592s592m592s592" - "m592s592m592s592m592s1560m592s592m592s1560m592s1560m592s592m592s592" - "m592s1560m592s592m592s592m592s1560m592s592m592s1560m592s592m592s592" - "m592s592m592s1560m592s592m592s592m592s592m592s592m592s592m592s1560" - "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" - "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" - "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" - "m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592" - "m592s1560m592s1560m592s592m592s1560m592s592m592s1560m592s592m592s1560" - "m592s6184" - "m592s1500", - irsend.outputStr()); -} - -// Tests for decodeTrotec(). -// Decode normal Trotec messages. - -TEST(TestDecodeTrotec, SyntheticDecode) { - IRsendTest irsend(0); - IRrecv irrecv(0); - irsend.begin(); - - // Synthesised Normal Trotec message. - irsend.reset(); - uint8_t expectedState[kTrotecStateLength] = { - 0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB}; - irsend.sendTrotec(expectedState); - irsend.makeDecodeResult(); - EXPECT_TRUE(irrecv.decode(&irsend.capture)); - EXPECT_EQ(decode_type_t::TROTEC, irsend.capture.decode_type); - EXPECT_EQ(kTrotecBits, irsend.capture.bits); - EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits); - EXPECT_EQ( - "Power: On, Mode: 1 (Cool), Temp: 20C, Fan: 2 (Medium), Sleep: On", - IRAcUtils::resultAcToString(&irsend.capture)); - stdAc::state_t r, p; - ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p)); -} - - -TEST(TestTrotecESPClass, SetAndGetTemp) { - IRTrotecESP ac(0); - - ac.setTemp(25); - EXPECT_EQ(25, ac.getTemp()); - ac.setTemp(kTrotecMinTemp); - EXPECT_EQ(kTrotecMinTemp, ac.getTemp()); - ac.setTemp(kTrotecMaxTemp); - EXPECT_EQ(kTrotecMaxTemp, ac.getTemp()); - ac.setTemp(kTrotecMinTemp - 1); - EXPECT_EQ(kTrotecMinTemp, ac.getTemp()); - ac.setTemp(kTrotecMaxTemp + 1); - EXPECT_EQ(kTrotecMaxTemp, ac.getTemp()); -} - -TEST(TestTrotecESPClass, SetAndGetMode) { - IRTrotecESP ac(0); - - ac.setMode(kTrotecFan); - EXPECT_EQ(kTrotecFan, ac.getMode()); - ac.setMode(kTrotecCool); - EXPECT_EQ(kTrotecCool, ac.getMode()); - ac.setMode(kTrotecAuto); - EXPECT_EQ(kTrotecAuto, ac.getMode()); - ac.setMode(kTrotecDry); - EXPECT_EQ(kTrotecDry, ac.getMode()); - ac.setMode(255); - EXPECT_EQ(kTrotecAuto, ac.getMode()); -} - -TEST(TestTrotecESPClass, SetAndGetFan) { - IRTrotecESP ac(0); - - ac.setSpeed(kTrotecFanHigh); - EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); - ac.setSpeed(kTrotecFanLow); - EXPECT_EQ(kTrotecFanLow, ac.getSpeed()); - ac.setSpeed(kTrotecFanMed); - EXPECT_EQ(kTrotecFanMed, ac.getSpeed()); - ac.setSpeed(kTrotecFanHigh); - EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); - ASSERT_NE(7, kTrotecFanHigh); - // Now try some unexpected value. - ac.setSpeed(7); - EXPECT_EQ(kTrotecFanHigh, ac.getSpeed()); -} - -TEST(TestTrotecESPClass, Sleep) { - IRTrotecESP ac(0); - ac.setSleep(false); - ASSERT_FALSE(ac.getSleep()); - ac.setSleep(true); - ASSERT_TRUE(ac.getSleep()); - ac.setSleep(false); - ASSERT_FALSE(ac.getSleep()); -} - -TEST(TestTrotecESPClass, Power) { - IRTrotecESP ac(0); - ac.setPower(false); - ASSERT_FALSE(ac.getPower()); - ac.setPower(true); - ASSERT_TRUE(ac.getPower()); - ac.setPower(false); - ASSERT_FALSE(ac.getPower()); -} - -TEST(TestUtils, Housekeeping) { - ASSERT_EQ("TROTEC", typeToString(decode_type_t::TROTEC)); - ASSERT_EQ(decode_type_t::TROTEC, strToDecodeType("TROTEC")); - ASSERT_TRUE(hasACState(decode_type_t::TROTEC)); - ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::TROTEC)); -} diff --git a/lib/lib_basic/IRremoteESP8266/tools/scrape_supported_devices.py b/lib/lib_basic/IRremoteESP8266/tools/scrape_supported_devices.py deleted file mode 100755 index a9cd10f0a..000000000 --- a/lib/lib_basic/IRremoteESP8266/tools/scrape_supported_devices.py +++ /dev/null @@ -1,406 +0,0 @@ -#!/usr/bin/env python3 -"""Generate SupportedProtocols.md by scraping source code files""" -import pathlib -import argparse -import subprocess -from io import StringIO -import sys -import re -import time - -CODE_URL = "https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_" - -BRAND_MODEL = re.compile(r"Brand: *(?P.+), *Model: *(?P.+)") -ENUMS = re.compile(r"enum (\w+) {(.+?)};", re.DOTALL) -ENUM_ENTRY = re.compile(r"^\s+(\w+)", re.MULTILINE) -DECODED_PROTOCOLS = re.compile(r".*(?:results->decode_type *=.*?|" - r"typeguess\s*=\s*decode_type_t::)(\w+);") -AC_FN = re.compile(r"ir_(.+)\.h") -AC_MODEL_ENUM_RE = re.compile(r"(.+)_ac_remote_model_t") -IRSEND_FN_RE = re.compile(r"IRsend\.h") -ALL_FN = re.compile(r"ir_(.+)\.(h|cpp)") - -EXCLUDED_PROTOCOLS = ["UNKNOWN", "UNUSED", "kLastDecodeType", "typeguess"] -EXCLUDED_ACS = ["Magiquest", "NEC"] - -def getgitcommittime(): - """Call git to get time of last commit - """ - try: - label = subprocess.check_output(\ - ["git", "show", "-s", "--format=%ct", "HEAD"]).strip() - return int(label) - except FileNotFoundError as err: - print("Git failed, which is ok, no git binary found?:", err) - return None - except subprocess.SubprocessError as err: - print("Git failed, which is ok, see output, maybe no git checkout?:", err) - return None - -def getmarkdownheader(): - """Get the generated header - """ - srctime = getgitcommittime() - return """""".format( - time.strftime("%a %d %b %Y %H:%M:%S +0000", time.gmtime(srctime))) - - -def getallprotocols(): - """Return all protocls configured in IRremoteESP8266.h - """ - irremote = ARGS.directory / "IRremoteESP8266.h" - enums = getenums(irremote)["decode_type_t"] - if not enums: - errorexit("Error getting ENUMS from IRremoteESP8266.h") - return enums - - -def getdecodedprotocols(): - """All protocols that include decoding support""" - ret = set() - for path in ARGS.directory.iterdir(): - if path.suffix != ".cpp": - continue - matches = DECODED_PROTOCOLS.finditer(path.open(encoding="utf-8").read()) - for match in matches: - protocol = match.group(1) - if protocol not in EXCLUDED_PROTOCOLS: - ret.add(protocol) - return ret - - -def getallacs(): - """All supported A/C codes""" - ret = {} - for path in ARGS.directory.iterdir(): - match = AC_FN.match(path.name) - if match: - acprotocol = match.group(1) - rawmodels = getenums(path) - models = set() - for model in rawmodels: - model = model.upper() - model = model.replace("K{}".format(acprotocol.upper()), "") - if model and model not in EXCLUDED_PROTOCOLS: - models.add(model) - if acprotocol in ret: - ret[acprotocol].update(models) - else: - ret[acprotocol] = models - # Parse IRsend.h's enums - match = IRSEND_FN_RE.match(path.name) - if match: - rawmodels = getenums(path) - for acprotocol in rawmodels: - models = set() - for model in rawmodels[acprotocol]: - model = model.upper() - model = model.replace("K{}".format(acprotocol.upper()), "") - if model and model not in EXCLUDED_PROTOCOLS: - models.add(model) - if acprotocol in ret: - ret[acprotocol].update(models) - else: - ret[acprotocol] = models - return ret - -class FnSets(): - """Container for getalldevices""" - def __init__(self): - self.allcodes = {} - self.fnnomatch = set() - self.allhfileprotos = set() - self.fnhmatch = set() - self.fncppmatch = set() - - def add(self, supports, path): - """add the path to correct set based on supports""" - if path.suffix == ".h": - self.allhfileprotos.add(path.stem) - if supports: - if path.suffix == ".h": - self.fnhmatch.add(path.stem) - elif path.suffix == ".cpp": - self.fncppmatch.add(path.stem) - else: - self.fnnomatch.add(path.stem) - - def printwarnings(self): - """print warnings""" - # all protos with support in .cpp file, when there is a .h file - # meaning that the documentation should probably be moved to .h - # in the future, with doxygen, that might change - protosincppwithh = list(self.fncppmatch & self.allhfileprotos) - if protosincppwithh: - protosincppwithh.sort() - print("The following files has supports section in .cpp, expected in .h") - for path in protosincppwithh: - print("\t{}".format(path)) - - protosincppandh = list(self.fncppmatch & self.fnhmatch) - if protosincppandh: - protosincppandh.sort() - print("The following files has supports section in both .h and .cpp") - for path in protosincppandh: - print("\t{}".format(path)) - - nosupports = self.getnosupports() - if nosupports: - nosupports.sort() - print("The following files had no supports section:") - for path in nosupports: - print("\t{}".format(path)) - - return protosincppwithh or protosincppandh or nosupports - - def getnosupports(self): - """get protos without supports sections""" - return list(self.fnnomatch - self.fnhmatch - self.fncppmatch) - - -def getalldevices(): - """All devices and associated branding and model information (if available) - """ - sets = FnSets() - for path in ARGS.directory.iterdir(): - match = ALL_FN.match(path.name) - if not match: - continue - supports = extractsupports(path) - sets.add(supports, path) - protocol = match.group(1) - for brand, model in supports: - protocolbrand = (protocol, brand) - pbset = sets.allcodes.get(protocolbrand, list()) - if model in pbset: - print("Model %s is duplicated for %s, %s" % (model, protocol, brand)) - sets.allcodes[protocolbrand] = pbset + [model] - - for fnprotocol in sets.getnosupports(): - sets.allcodes[(fnprotocol[3:], "Unknown")] = [] - return sets - - -def getenums(path): - """Returns the keys for the first enum type in path - """ - ret = {} - for enums in ENUMS.finditer(path.open(encoding="utf-8").read()): - if enums: - enum_name = AC_MODEL_ENUM_RE.search(enums.group(1)) - if enum_name: - enum_name = enum_name.group(1).capitalize() - else: - enum_name = enums.group(1) - ret[enum_name] = set() - for enum in ENUM_ENTRY.finditer(enums.group(2)): - enum = enum.group(1) - if enum in EXCLUDED_PROTOCOLS: - continue - ret[enum_name].add(enum) - return ret - - -ARGS = None - - -def initargs(): - """Init the command line arguments""" - global ARGS # pylint: disable=global-statement - parser = argparse.ArgumentParser() - parser.add_argument( - "-n", - "--noout", - help="generate no output data, combine with --alert to only check", - action="store_true", - ) - parser.add_argument( - "-s", - "--stdout", - help="output to stdout rather than SupportedProtocols.md", - action="store_true", - ) - parser.add_argument("-v", - "--verbose", - help="increase output verbosity", - action="store_true") - parser.add_argument( - "-a", - "--alert", - help="alert if a file does not have a supports section, " - "non zero exit code if issues where found", - action="store_true", - ) - parser.add_argument( - "directory", - nargs="?", - help="directory of the source git checkout", - default=None, - ) - ARGS = parser.parse_args() - if ARGS.directory is None: - src = pathlib.Path("../src") - if not src.is_dir(): - src = pathlib.Path("./src") - else: - src = pathlib.Path(ARGS.directory) / "src" - if not src.is_dir(): - errorexit("Directory not valid: {}".format(str(src))) - ARGS.directory = src - return ARGS - -def getmdfile(): - """Resolves SupportedProtocols.md path""" - foutpath = ARGS.directory / "../SupportedProtocols.md" - return foutpath.resolve() - -def errorexit(msg): - """Print an error and exit on critical error""" - sys.stderr.write("{}\n".format(msg)) - sys.exit(1) - - -def extractsupports(path): - """Extract all of the Supports: sections and associated brands and models - """ - supports = [] - insupports = False - for line in path.open(encoding="utf-8"): - if not line.startswith("//"): - continue - line = line[2:].strip() - if line == "Supports:": - insupports = True - continue - if insupports: - match = BRAND_MODEL.match(line) - if match: - supports.append((match.group("brand"), match.group("model"))) - else: - insupports = False - continue - # search and inform about any legacy formated supports data - elif any(x in line for x in [ \ - "seems compatible with", - "be compatible with", - "it working with here"]): - print("\t%s Legacy supports format found\n\t\t%s" % (path.name, line)) - return supports - - -def makeurl(txt, path): - """Make a Markup URL from given filename""" - return "[{}]({})".format(txt, CODE_URL + path) - - -def outputprotocols(fout, protocols): - """For a given protocol set, sort and output the markdown""" - protocols = list(protocols) - protocols.sort() - for protocol in protocols: - fout.write("- {}\n".format(protocol)) - - -def generate(fout): - """Generate data to fout - return True on any issues (when alert is active)""" - decodedprotocols = getdecodedprotocols() - sendonly = getallprotocols() - decodedprotocols - allacs = getallacs() - - sets = getalldevices() - allcodes = sets.allcodes - allbrands = list(allcodes.keys()) - allbrands.sort() - - fout.write("\n# IR Protocols supported by this library\n\n") - fout.write( - "| Protocol | Brand | Model | A/C Model | Detailed A/C Support |\n") - fout.write("| --- | --- | --- | --- | --- |\n") - - for protocolbrand in allbrands: - protocol, brand = protocolbrand - codes = allcodes[protocolbrand] - codes.sort() - acmodels = [] - acsupport = "-" - if protocol in allacs: - acmodels = list(allacs[protocol]) - acmodels.sort() - brand = makeurl(brand, protocol + ".h") - if protocol not in EXCLUDED_ACS: - acsupport = "Yes" - - fout.write("| {} | **{}** | {} | {} | {} |\n".format( - makeurl(protocol, protocol + ".cpp"), - brand, - "
    ".join(codes).replace("|", "\\|"), - "
    ".join(acmodels), - acsupport, - )) - - fout.write("\n\n## Send only protocols:\n\n") - outputprotocols(fout, sendonly) - - fout.write("\n\n## Send & decodable protocols:\n\n") - outputprotocols(fout, decodedprotocols) - - return ARGS.alert and sets.printwarnings() - -def generatenone(): - """No out write - return True on any issues""" - return generate(StringIO()) - -def generatestdout(): - """Standard out write - return True on any issues""" - fout = sys.stdout - fout.write(getmarkdownheader()) - return generate(fout) - -def generatefile(): - """File write, extra detection of changes in existing file - return True on any issues, but only if there is changes""" - # get file path - foutpath = getmdfile() - if ARGS.verbose: - print("Output path: {}".format(str(foutpath))) - # write data to temp memorystream - ftemp = StringIO() - ret = generate(ftemp) - # get old filedata, skipping header - with getmdfile().open("r", encoding="utf-8") as forg: - olddata = forg.readlines()[3:] - # get new data, skip first empty line - ftemp.seek(0) - newdata = ftemp.readlines()[1:] - # if new data is same as old we don't need to write anything - if newdata == olddata: - print("No changes, exit without write") - return False - # write output - with foutpath.open("w", encoding="utf-8") as fout: - fout.write(getmarkdownheader()) - fout.write(ftemp.getvalue()) - - return ret - -def main(): - """Default main function - return True on any issues""" - initargs() - if ARGS.verbose: - print("Looking for files in: {}".format(str(ARGS.directory.resolve()))) - if ARGS.noout: - return generatenone() - if ARGS.stdout: - return generatestdout() - # default file - return generatefile() - - -if __name__ == "__main__": - sys.exit(1 if main() else 0) diff --git a/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingDynamicTopologyTest/NeoPixelRingDynamicTopologyTest.ino b/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingDynamicTopologyTest/NeoPixelRingDynamicTopologyTest.ino new file mode 100644 index 000000000..57aa6e4b8 --- /dev/null +++ b/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingDynamicTopologyTest/NeoPixelRingDynamicTopologyTest.ino @@ -0,0 +1,122 @@ +//---------------------------------------------------------------------- +// NeoPixelRingTopologyTest +// This will display specific colors in specific locations on the led rings +// +// This is useful in confirming the layout of your rings +// +// It does require that you have the actual series of rings connected +//---------------------------------------------------------------------- + +#include + +const uint8_t PixelCount = 119; +const uint8_t PixelPin = 2; // make sure to set this to the correct pin, ignored for Esp8266 + +// define the layout of your series of rings +// +// This example is using all of Adafruits rings and a Jewel in the center. +// The center is the input and all the rings are connected in series going outward +// +// Rings: +// 0 - 1 (virtual ring, the center of the jewel) +// 1 - 6 (virtual ring, the outer ring of the jewel) +// 2 - 12 count ring +// 3 - 16 count ring +// 4 - 24 count ring +// 5 - 60 count ring comprised of four arc segments +// +// The values below in Rings[] are the index of the first pixel in each ring. +// An extra value is appended for a virtual ring start that also +// represents the total count of pixels in the complete series and this extra +// value is required. +// +class MyRingsLayout +{ +public: + void Begin() { + // this is where you load your dynamic rings layout and init Rings and RingCount + // this example will just set these to static numbers to simulate a dynamic layout + RingCount = 6; + Rings = new uint16_t[RingCount]; + + Rings[0] = 1; + Rings[1] = 6; + Rings[2] = 12; + Rings[3] = 16; + Rings[4] = 24; + Rings[5] = 60; // don't forget the final count of pixels as the last item + } + +protected: + uint16_t* Rings; + uint8_t RingCount; + + uint8_t _ringCount() const + { + return RingCount; + } +}; + +// use the MyRingsLayout to declare the topo object +// +NeoRingTopology topo; + +// declare our strip +// +NeoPixelBus strip(PixelCount, PixelPin); + +// define some handy colors +// +RgbColor red(128, 0, 0); +RgbColor green(0, 128, 0); +RgbColor blue(0, 0, 128); +RgbColor black(0); + +void setup() +{ + Serial.begin(115200); + while (!Serial); // wait for serial attach + + Serial.println(); + Serial.println("Initializing..."); + + topo.Begin(); + + strip.Begin(); + strip.Show(); + + Serial.println(); + Serial.println("Running..."); +} + +void loop() +{ + delay(2500); + + Serial.println(); + Serial.println("If your panel is correctly defined, you should see ..."); + Serial.println("First pixel in each ring is Red."); + Serial.println("Middle pixel in each ring is Green."); + Serial.println("Last Pixel in each ring is Blue."); + + + // use the topo to map the 2d polar cordinate to the pixel + // and use that to SetPixelColor + for (uint16_t ring = 0; ring < topo.getCountOfRings(); ring++) + { + // first pixel in each ring is red + strip.SetPixelColor(topo.Map(ring, 0), red); + // last pixel in each ring is blue + strip.SetPixelColor(topo.Map(ring, topo.getPixelCountAtRing(ring) - 1), blue); + // middle pixel in each ring is green + strip.SetPixelColor(topo.Map(ring, topo.getPixelCountAtRing(ring) / 2), green); + } + strip.Show(); + + delay(5000); + + Serial.println(); + Serial.println("Cleared to black ..."); + strip.ClearTo(black); + strip.Show(); +} diff --git a/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingTopologyTest/NeoPixelRingTopologyTest.ino b/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingTopologyTest/NeoPixelRingTopologyTest.ino index 64a1bcdde..26d526fd7 100644 --- a/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingTopologyTest/NeoPixelRingTopologyTest.ino +++ b/lib/lib_basic/NeoPixelBus/examples/topologies/NeoPixelRingTopologyTest/NeoPixelRingTopologyTest.ino @@ -34,6 +34,11 @@ class MyRingsLayout { protected: const uint16_t Rings[7] = {0, 1, 7, 19, 35, 59, PixelCount}; + + uint8_t _ringCount() const + { + return sizeof(Rings) / sizeof(Rings[0]); + } }; // use the MyRingsLayout to declare the topo object @@ -97,4 +102,3 @@ void loop() strip.ClearTo(black); strip.Show(); } - diff --git a/lib/lib_basic/NeoPixelBus/keywords.txt b/lib/lib_basic/NeoPixelBus/keywords.txt index 71280f07b..03f59e82c 100644 --- a/lib/lib_basic/NeoPixelBus/keywords.txt +++ b/lib/lib_basic/NeoPixelBus/keywords.txt @@ -17,6 +17,7 @@ HsbColor KEYWORD1 HtmlColor KEYWORD1 NeoNoSettings KEYWORD1 NeoTm1814Settings KEYWORD1 +NeoTm1914Settings KEYWORD1 NeoSpiSettings KEYWORD1 NeoGrbFeature KEYWORD1 NeoGrbwFeature KEYWORD1 @@ -25,6 +26,8 @@ NeoRgbFeature KEYWORD1 NeoBrgFeature KEYWORD1 NeoRbgFeature KEYWORD1 NeoWrgbTm1814Feature KEYWORD1 +NeoRgbTm1914Feature KEYWORD1 +NeoGrbTm1914Feature KEYWORD1 DotStarBgrFeature KEYWORD1 DotStarLbgrFeature KEYWORD1 Lpd6803GrbFeature KEYWORD1 @@ -43,6 +46,7 @@ NeoWs2812Method KEYWORD1 NeoWs2811Method KEYWORD1 NeoSk6812Method KEYWORD1 NeoTm1814Method KEYWORD1 +NeoTm1914Method KEYWORD1 NeoTm1829Method KEYWORD1 NeoTx1812Method KEYWORD1 NeoLc8812Method KEYWORD1 @@ -55,6 +59,7 @@ NeoWs2812InvertedMethod KEYWORD1 NeoWs2811InvertedMethod KEYWORD1 NeoSk6812InvertedMethod KEYWORD1 NeoTm1814InvertedMethod KEYWORD1 +NeoTm1914InvertedMethod KEYWORD1 NeoTm1829InvertedMethod KEYWORD1 NeoTx1812InvertedMethod KEYWORD1 NeoLc8812InvertedMethod KEYWORD1 @@ -62,6 +67,7 @@ NeoApa106InvertedMethod KEYWORD1 NeoEsp8266DmaWs2812xMethod KEYWORD1 NeoEsp8266DmaSk6812Method KEYWORD1 NeoEsp8266DmaTm1814Method KEYWORD1 +NeoEsp8266DmaTm1914Method KEYWORD1 NeoEsp8266DmaTm1829Method KEYWORD1 NeoEsp8266DmaApa106Method KEYWORD1 NeoEsp8266Dma800KbpsMethod KEYWORD1 @@ -69,6 +75,7 @@ NeoEsp8266Dma400KbpsMethod KEYWORD1 NeoEsp8266DmaInvertedWs2812xMethod KEYWORD1 NeoEsp8266DmaInvertedSk6812Method KEYWORD1 NeoEsp8266DmaInvertedTm1814Method KEYWORD1 +NeoEsp8266DmaInvertedTm1914Method KEYWORD1 NeoEsp8266DmaInvertedTm1829Method KEYWORD1 NeoEsp8266DmaInvertedApa106Method KEYWORD1 NeoEsp8266DmaInverted800KbpsMethod KEYWORD1 @@ -79,6 +86,7 @@ NeoEsp8266Uart0Ws2812Method KEYWORD1 NeoEsp8266Uart0Ws2811Method KEYWORD1 NeoEsp8266Uart0Sk6812Method KEYWORD1 NeoEsp8266Uart0Tm1814Method KEYWORD1 +NeoEsp8266Uart0Tm1914Method KEYWORD1 NeoEsp8266Uart0Tm1829Method KEYWORD1 NeoEsp8266Uart0Lc8812Method KEYWORD1 NeoEsp8266Uart0Apa106Method KEYWORD1 @@ -90,6 +98,7 @@ NeoEsp8266AsyncUart0Ws2812Method KEYWORD1 NeoEsp8266AsyncUart0Ws2811Method KEYWORD1 NeoEsp8266AsyncUart0Sk6812Method KEYWORD1 NeoEsp8266AsyncUart0Tm1814Method KEYWORD1 +NeoEsp8266AsyncUart0Tm1914Method KEYWORD1 NeoEsp8266AsyncUart0Tm1829Method KEYWORD1 NeoEsp8266AsyncUart0Lc8812Method KEYWORD1 NeoEsp8266AsyncUart0Apa106Method KEYWORD1 @@ -101,6 +110,7 @@ NeoEsp8266Uart1Ws2812Method KEYWORD1 NeoEsp8266Uart1Ws2811Method KEYWORD1 NeoEsp8266Uart1Sk6812Method KEYWORD1 NeoEsp8266Uart1Tm1814 KEYWORD1 +NeoEsp8266Uart1Tm1914 KEYWORD1 NeoEsp8266Uart1Tm1829 KEYWORD1 NeoEsp8266Uart1Lc8812Method KEYWORD1 NeoEsp8266Uart1Apa106Method KEYWORD1 @@ -112,6 +122,7 @@ NeoEsp8266AsyncUart1Ws2812Method KEYWORD1 NeoEsp8266AsyncUart1Ws2811Method KEYWORD1 NeoEsp8266AsyncUart1Sk6812Method KEYWORD1 NeoEsp8266AsyncUart1Tm1814 KEYWORD1 +NeoEsp8266AsyncUart1Tm1914 KEYWORD1 NeoEsp8266AsyncUart1Tm1829 KEYWORD1 NeoEsp8266AsyncUart1Lc8812Method KEYWORD1 NeoEsp8266AsyncUart1Apa106Method KEYWORD1 @@ -123,6 +134,7 @@ NeoEsp8266Uart0Ws2812InvertedMethod KEYWORD1 NeoEsp8266Uart0Ws2811InvertedMethod KEYWORD1 NeoEsp8266Uart0Sk6812InvertedMethod KEYWORD1 NeoEsp8266Uart0Tm1814InvertedMethod KEYWORD1 +NeoEsp8266Uart0Tm1914InvertedMethod KEYWORD1 NeoEsp8266Uart0Tm1829InvertedMethod KEYWORD1 NeoEsp8266Uart0Lc8812InvertedMethod KEYWORD1 NeoEsp8266Uart0Apa106InvertedMethod KEYWORD1 @@ -134,6 +146,7 @@ NeoEsp8266AsyncUart0Ws2812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Ws2811InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Sk6812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Tm1814InvertedMethod KEYWORD1 +NeoEsp8266AsyncUart0Tm1914InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Tm1829InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Lc8812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart0Apa106InvertedMethod KEYWORD1 @@ -145,6 +158,7 @@ NeoEsp8266Uart1Ws2812InvertedMethod KEYWORD1 NeoEsp8266Uart1Ws2811InvertedMethod KEYWORD1 NeoEsp8266Uart1Sk6812InvertedMethod KEYWORD1 NeoEsp8266Uart1Tm1814InvertedMethod KEYWORD1 +NeoEsp8266Uart1Tm1914InvertedMethod KEYWORD1 NeoEsp8266Uart1Tm1829InvertedMethod KEYWORD1 NeoEsp8266Uart1Lc8812InvertedMethod KEYWORD1 NeoEsp8266Uart1Apa106InvertedMethod KEYWORD1 @@ -156,6 +170,7 @@ NeoEsp8266AsyncUart1Ws2812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Ws2811InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Sk6812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Tm1814InvertedMethod KEYWORD1 +NeoEsp8266AsyncUart1Tm1914InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Tm1829InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Lc8812InvertedMethod KEYWORD1 NeoEsp8266AsyncUart1Apa106InvertedMethod KEYWORD1 @@ -167,6 +182,7 @@ NeoEsp8266BitBangWs2812Method KEYWORD1 NeoEsp8266BitBangWs2811Method KEYWORD1 NeoEsp8266BitBangSk6812Method KEYWORD1 NeoEsp8266BitBangTm1814Method KEYWORD1 +NeoEsp8266BitBangTm1914Method KEYWORD1 NeoEsp8266BitBangTm1829Method KEYWORD1 NeoEsp8266BitBangLc8812Method KEYWORD1 NeoEsp8266BitBangApa106Method KEYWORD1 @@ -178,6 +194,7 @@ NeoEsp8266BitBangWs2812InvertedMethod KEYWORD1 NeoEsp8266BitBangWs2811InvertedMethod KEYWORD1 NeoEsp8266BitBangSk6812InvertedMethod KEYWORD1 NeoEsp8266BitBangTm1814InvertedMethod KEYWORD1 +NeoEsp8266BitBangTm1914InvertedMethod KEYWORD1 NeoEsp8266BitBangTm1829InvertedMethod KEYWORD1 NeoEsp8266BitBangLc8812InvertedMethod KEYWORD1 NeoEsp8266BitBangApa106InvertedMethod KEYWORD1 @@ -186,12 +203,14 @@ NeoEsp8266BitBang400KbpsInvertedMethod KEYWORD1 NeoEsp32I2sNWs2812xMethod KEYWORD1 NeoEsp32I2sNSk6812Method KEYWORD1 NeoEsp32I2sNTm1814Method KEYWORD1 +NeoEsp32I2sNTm1914Method KEYWORD1 NeoEsp32I2sN800KbpsMethod KEYWORD1 NeoEsp32I2sN400KbpsMethod KEYWORD1 NeoEsp32I2sNApa106Method KEYWORD1 NeoEsp32I2s0Ws2812xMethod KEYWORD1 NeoEsp32I2s0Sk6812Method KEYWORD1 NeoEsp32I2s0Tm1814Method KEYWORD1 +NeoEsp32I2s0Tm1914Method KEYWORD1 NeoEsp32I2s0Tm1829Method KEYWORD1 NeoEsp32I2s0800KbpsMethod KEYWORD1 NeoEsp32I2s0400KbpsMethod KEYWORD1 @@ -199,6 +218,7 @@ NeoEsp32I2s0Apa106Method KEYWORD1 NeoEsp32I2s1Ws2812xMethod KEYWORD1 NeoEsp32I2s1Sk6812Method KEYWORD1 NeoEsp32I2s1Tm1814Method KEYWORD1 +NeoEsp32I2s1Tm1914Method KEYWORD1 NeoEsp32I2s1Tm1829Method KEYWORD1 NeoEsp32I2s1800KbpsMethod KEYWORD1 NeoEsp32I2s1400KbpsMethod KEYWORD1 @@ -206,12 +226,14 @@ NeoEsp32I2s1Apa106Method KEYWORD1 NeoEsp32I2sNWs2812xInvertedMethod KEYWORD1 NeoEsp32I2sNSk6812InvertedMethod KEYWORD1 NeoEsp32I2sNTm1814InvertedMethod KEYWORD1 +NeoEsp32I2sNTm1914InvertedMethod KEYWORD1 NeoEsp32I2sN800KbpsInvertedMethod KEYWORD1 NeoEsp32I2sN400KbpsInvertedMethod KEYWORD1 NeoEsp32I2sNApa106InvertedMethod KEYWORD1 NeoEsp32I2s0Ws2812xInvertedMethod KEYWORD1 NeoEsp32I2s0Sk6812InvertedMethod KEYWORD1 NeoEsp32I2s0Tm1814InvertedMethod KEYWORD1 +NeoEsp32I2s0Tm1914InvertedMethod KEYWORD1 NeoEsp32I2s0Tm1829InvertedMethod KEYWORD1 NeoEsp32I2s0800KbpsInvertedMethod KEYWORD1 NeoEsp32I2s0400KbpsInvertedMethod KEYWORD1 @@ -219,6 +241,7 @@ NeoEsp32I2s0Apa106InvertedMethod KEYWORD1 NeoEsp32I2s1Ws2812xInvertedMethod KEYWORD1 NeoEsp32I2s1Sk6812InvertedMethod KEYWORD1 NeoEsp32I2s1Tm1814InvertedMethod KEYWORD1 +NeoEsp32I2s1Tm1914InvertedMethod KEYWORD1 NeoEsp32I2s1Tm1829InvertedMethod KEYWORD1 NeoEsp32I2s1800KbpsInvertedMethod KEYWORD1 NeoEsp32I2s1400KbpsInvertedMethod KEYWORD1 @@ -227,6 +250,8 @@ NeoEsp32RmtNWs2811Method KEYWORD1 NeoEsp32RmtNWs2812xMethod KEYWORD1 NeoEsp32RmtNSk6812Method KEYWORD1 NeoEsp32RmtNTm1814Method KEYWORD1 +NeoEsp32RmtNTm1914Method KEYWORD1 +NeoEsp32RmtNTm1829Method KEYWORD1 NeoEsp32RmtNApa106Method KEYWORD1 NeoEsp32RmtN800KbpsMethod KEYWORD1 NeoEsp32RmtN400KbpsMethod KEYWORD1 @@ -234,6 +259,7 @@ NeoEsp32Rmt0Ws2811Method KEYWORD1 NeoEsp32Rmt0Ws2812xMethod KEYWORD1 NeoEsp32Rmt0Sk6812Method KEYWORD1 NeoEsp32Rmt0Tm1814Method KEYWORD1 +NeoEsp32Rmt0Tm1914Method KEYWORD1 NeoEsp32Rmt0Tm1829Method KEYWORD1 NeoEsp32Rmt0Apa106Method KEYWORD1 NeoEsp32Rmt0800KbpsMethod KEYWORD1 @@ -242,7 +268,8 @@ NeoEsp32Rmt1Ws2811Method KEYWORD1 NeoEsp32Rmt1Ws2812xMethod KEYWORD1 NeoEsp32Rmt1Sk6812Method KEYWORD1 NeoEsp32Rmt1Tm1814Method KEYWORD1 -NeoEsp32Rmt1Tm1814Method KEYWORD1 +NeoEsp32Rmt1Tm1914Method KEYWORD1 +NeoEsp32Rmt1Tm1829Method KEYWORD1 NeoEsp32Rmt1Apa106Method KEYWORD1 NeoEsp32Rmt1800KbpsMethod KEYWORD1 NeoEsp32Rmt1400KbpsMethod KEYWORD1 @@ -251,6 +278,7 @@ NeoEsp32Rmt2Ws2812xMethod KEYWORD1 NeoEsp32Rmt2Sk6812Method KEYWORD1 NeoEsp32Rmt2Tm1814Method KEYWORD1 NeoEsp32Rmt2Tm1829Method KEYWORD1 +NeoEsp32Rmt2Tm1914Method KEYWORD1 NeoEsp32Rmt2Apa106Method KEYWORD1 NeoEsp32Rmt2800KbpsMethod KEYWORD1 NeoEsp32Rmt2400KbpsMethod KEYWORD1 @@ -258,6 +286,7 @@ NeoEsp32Rmt3Ws2811Method KEYWORD1 NeoEsp32Rmt3Ws2812xMethod KEYWORD1 NeoEsp32Rmt3Sk6812Method KEYWORD1 NeoEsp32Rmt3Tm1814Method KEYWORD1 +NeoEsp32Rmt3Tm1914Method KEYWORD1 NeoEsp32Rmt3Tm1829Method KEYWORD1 NeoEsp32Rmt3Apa106Method KEYWORD1 NeoEsp32Rmt3800KbpsMethod KEYWORD1 @@ -266,6 +295,7 @@ NeoEsp32Rmt4Ws2811Method KEYWORD1 NeoEsp32Rmt4Ws2812xMethod KEYWORD1 NeoEsp32Rmt4Sk6812Method KEYWORD1 NeoEsp32Rmt4Tm1814Method KEYWORD1 +NeoEsp32Rmt4Tm1914Method KEYWORD1 NeoEsp32Rmt4Tm1829Method KEYWORD1 NeoEsp32Rmt4Apa106Method KEYWORD1 NeoEsp32Rmt4800KbpsMethod KEYWORD1 @@ -274,6 +304,7 @@ NeoEsp32Rmt5Ws2811Method KEYWORD1 NeoEsp32Rmt5Ws2812xMethod KEYWORD1 NeoEsp32Rmt5Sk6812Method KEYWORD1 NeoEsp32Rmt5Tm1814Method KEYWORD1 +NeoEsp32Rmt5Tm1914Method KEYWORD1 NeoEsp32Rmt5Tm1829Method KEYWORD1 NeoEsp32Rmt5Apa106Method KEYWORD1 NeoEsp32Rmt5800KbpsMethod KEYWORD1 @@ -282,6 +313,7 @@ NeoEsp32Rmt6Ws2811Method KEYWORD1 NeoEsp32Rmt6Ws2812xMethod KEYWORD1 NeoEsp32Rmt6Sk6812Method KEYWORD1 NeoEsp32Rmt6Tm1814Method KEYWORD1 +NeoEsp32Rmt6Tm1914Method KEYWORD1 NeoEsp32Rmt6Tm1829Method KEYWORD1 NeoEsp32Rmt6Apa106Method KEYWORD1 NeoEsp32Rmt6800KbpsMethod KEYWORD1 @@ -290,6 +322,7 @@ NeoEsp32Rmt7Ws2811Method KEYWORD1 NeoEsp32Rmt7Ws2812xMethod KEYWORD1 NeoEsp32Rmt7Sk6812Method KEYWORD1 NeoEsp32Rmt7Tm1814Method KEYWORD1 +NeoEsp32Rmt7Tm1914Method KEYWORD1 NeoEsp32Rmt7Tm1829Method KEYWORD1 NeoEsp32Rmt7Apa106Method KEYWORD1 NeoEsp32Rmt7800KbpsMethod KEYWORD1 @@ -298,6 +331,8 @@ NeoEsp32RmtNWs2811InvertedMethod KEYWORD1 NeoEsp32RmtNWs2812xInvertedMethod KEYWORD1 NeoEsp32RmtNSk6812InvertedMethod KEYWORD1 NeoEsp32RmtNTm1814InvertedMethod KEYWORD1 +NeoEsp32RmtNTm1914InvertedMethod KEYWORD1 +NeoEsp32RmtNTm1829InvertedMethod KEYWORD1 NeoEsp32RmtNApa106InvertedMethod KEYWORD1 NeoEsp32RmtN800KbpsInvertedMethod KEYWORD1 NeoEsp32RmtN400KbpsInvertedMethod KEYWORD1 @@ -305,6 +340,7 @@ NeoEsp32Rmt0Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt0Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt0Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt0Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt0Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt0Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt0Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt0800KbpsInvertedMethod KEYWORD1 @@ -313,6 +349,7 @@ NeoEsp32Rmt1Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt1Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt1Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt1Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt1Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt1Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt1Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt1800KbpsInvertedMethod KEYWORD1 @@ -321,6 +358,7 @@ NeoEsp32Rmt2Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt2Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt2Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt2Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt2Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt2Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt2Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt2800KbpsInvertedMethod KEYWORD1 @@ -329,6 +367,7 @@ NeoEsp32Rmt3Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt3Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt3Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt3Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt3Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt3Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt3Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt3800KbpsInvertedMethod KEYWORD1 @@ -337,6 +376,7 @@ NeoEsp32Rmt4Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt4Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt4Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt4Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt4Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt4Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt4Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt4800KbpsInvertedMethod KEYWORD1 @@ -345,6 +385,7 @@ NeoEsp32Rmt5Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt5Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt5Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt5Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt5Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt5Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt5Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt5800KbpsInvertedMethod KEYWORD1 @@ -353,6 +394,7 @@ NeoEsp32Rmt6Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt6Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt6Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt6Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt6Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt6Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt6Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt6800KbpsInvertedMethod KEYWORD1 @@ -361,6 +403,7 @@ NeoEsp32Rmt7Ws2811InvertedMethod KEYWORD1 NeoEsp32Rmt7Ws2812xInvertedMethod KEYWORD1 NeoEsp32Rmt7Sk6812InvertedMethod KEYWORD1 NeoEsp32Rmt7Tm1814InvertedMethod KEYWORD1 +NeoEsp32Rmt7Tm1914InvertedMethod KEYWORD1 NeoEsp32Rmt7Tm1829InvertedMethod KEYWORD1 NeoEsp32Rmt7Apa106InvertedMethod KEYWORD1 NeoEsp32Rmt7800KbpsInvertedMethod KEYWORD1 @@ -371,6 +414,7 @@ NeoEsp32BitBangWs2812Method KEYWORD1 NeoEsp32BitBangWs2811Method KEYWORD1 NeoEsp32BitBangSk6812Method KEYWORD1 NeoEsp32BitBangTm1814Method KEYWORD1 +NeoEsp32BitBangTm1914Method KEYWORD1 NeoEsp32BitBangTm1829Method KEYWORD1 NeoEsp32BitBangLc8812Method KEYWORD1 NeoEsp32BitBangApa106Method KEYWORD1 @@ -382,6 +426,7 @@ NeoEsp32BitBangWs2812InvertedMethod KEYWORD1 NeoEsp32BitBangWs2811InvertedMethod KEYWORD1 NeoEsp32BitBangSk6812InvertedMethod KEYWORD1 NeoEsp32BitBangTm1814InvertedMethod KEYWORD1 +NeoEsp32BitBangTm1914InvertedMethod KEYWORD1 NeoEsp32BitBangTm1829InvertedMethod KEYWORD1 NeoEsp32BitBangLc8812InvertedMethod KEYWORD1 NeoEsp32BitBangApa106InvertedMethod KEYWORD1 @@ -390,6 +435,7 @@ NeoEsp32BitBang400KbpsInvertedMethod KEYWORD1 NeoNrf52xPwmNWs2812xMethod KEYWORD1 NeoNrf52xPwmNSk6812Method KEYWORD1 NeoNrf52xPwmNTm1814Method KEYWORD1 +NeoNrf52xPwmNTm1914Method KEYWORD1 NeoNrf52xPwmNTm1829Method KEYWORD1 NeoNrf52xPwmNTx1812Method KEYWORD1 NeoNrf52xPwmN800KbpsMethod KEYWORD1 @@ -398,6 +444,7 @@ NeoNrf52xPwmNApa106Method KEYWORD1 NeoNrf52xPwm0Ws2812xMethod KEYWORD1 NeoNrf52xPwm0Sk6812Method KEYWORD1 NeoNrf52xPwm0Tm1814Method KEYWORD1 +NeoNrf52xPwm0Tm1914Method KEYWORD1 NeoNrf52xPwm0Tm1829Method KEYWORD1 NeoNrf52xPwm0Tx1812Method KEYWORD1 NeoNrf52xPwm0800KbpsMethod KEYWORD1 @@ -406,6 +453,7 @@ NeoNrf52xPwm0Apa106Method KEYWORD1 NeoNrf52xPwm1Ws2812xMethod KEYWORD1 NeoNrf52xPwm1Sk6812Method KEYWORD1 NeoNrf52xPwm1Tm1814Method KEYWORD1 +NeoNrf52xPwm1Tm1914Method KEYWORD1 NeoNrf52xPwm1Tm1829Method KEYWORD1 NeoNrf52xPwm1Tx1812Method KEYWORD1 NeoNrf52xPwm1800KbpsMethod KEYWORD1 @@ -414,6 +462,7 @@ NeoNrf52xPwm1Apa106Method KEYWORD1 NeoNrf52xPwm2Ws2812xMethod KEYWORD1 NeoNrf52xPwm2Sk6812Method KEYWORD1 NeoNrf52xPwm2Tm1814Method KEYWORD1 +NeoNrf52xPwm2Tm1914Method KEYWORD1 NeoNrf52xPwm2Tm1829Method KEYWORD1 NeoNrf52xPwm2Tx1812Method KEYWORD1 NeoNrf52xPwm2800KbpsMethod KEYWORD1 @@ -422,6 +471,7 @@ NeoNrf52xPwm2Apa106Method KEYWORD1 NeoNrf52xPwm3Ws2812xMethod KEYWORD1 NeoNrf52xPwm3Sk6812Method KEYWORD1 NeoNrf52xPwm3Tm1814Method KEYWORD1 +NeoNrf52xPwm3Tm1914Method KEYWORD1 NeoNrf52xPwm3Tm1829Method KEYWORD1 NeoNrf52xPwm3Tx1812Method KEYWORD1 NeoNrf52xPwm3800KbpsMethod KEYWORD1 @@ -430,6 +480,7 @@ NeoNrf52xPwm3Apa106Method KEYWORD1 NeoNrf52xPwmNWs2812xInvertedMethod KEYWORD1 NeoNrf52xPwmNSk6812InvertedMethod KEYWORD1 NeoNrf52xPwmNTm1814InvertedMethod KEYWORD1 +NeoNrf52xPwmNTm1914InvertedMethod KEYWORD1 NeoNrf52xPwmNTm1829InvertedMethod KEYWORD1 NeoNrf52xPwmNTx1812InvertedMethod KEYWORD1 NeoNrf52xPwmN800KbpsInvertedMethod KEYWORD1 @@ -438,6 +489,7 @@ NeoNrf52xPwmNApa106InvertedMethod KEYWORD1 NeoNrf52xPwm0Ws2812xInvertedMethod KEYWORD1 NeoNrf52xPwm0Sk6812InvertedMethod KEYWORD1 NeoNrf52xPwm0Tm1814InvertedMethod KEYWORD1 +NeoNrf52xPwm0Tm1914InvertedMethod KEYWORD1 NeoNrf52xPwm0Tm1829InvertedMethod KEYWORD1 NeoNrf52xPwm0Tx1812InvertedMethod KEYWORD1 NeoNrf52xPwm0800KbpsInvertedMethod KEYWORD1 @@ -446,6 +498,7 @@ NeoNrf52xPwm0Apa106InvertedMethod KEYWORD1 NeoNrf52xPwm1Ws2812xInvertedMethod KEYWORD1 NeoNrf52xPwm1Sk6812InvertedMethod KEYWORD1 NeoNrf52xPwm1Tm1814InvertedMethod KEYWORD1 +NeoNrf52xPwm1Tm1914InvertedMethod KEYWORD1 NeoNrf52xPwm1Tm1829InvertedMethod KEYWORD1 NeoNrf52xPwm1Tx1812InvertedMethod KEYWORD1 NeoNrf52xPwm1800KbpsInvertedMethod KEYWORD1 @@ -454,6 +507,7 @@ NeoNrf52xPwm1Apa106InvertedMethod KEYWORD1 NeoNrf52xPwm2Ws2812xInvertedMethod KEYWORD1 NeoNrf52xPwm2Sk6812InvertedMethod KEYWORD1 NeoNrf52xPwm2Tm1814InvertedMethod KEYWORD1 +NeoNrf52xPwm2Tm1914InvertedMethod KEYWORD1 NeoNrf52xPwm2Tm1829InvertedMethod KEYWORD1 NeoNrf52xPwm2Tx1812InvertedMethod KEYWORD1 NeoNrf52xPwm2800KbpsInvertedMethod KEYWORD1 @@ -462,6 +516,7 @@ NeoNrf52xPwm2Apa106InvertedMethod KEYWORD1 NeoNrf52xPwm3Ws2812xInvertedMethod KEYWORD1 NeoNrf52xPwm3Sk6812InvertedMethod KEYWORD1 NeoNrf52xPwm3Tm1814InvertedMethod KEYWORD1 +NeoNrf52xPwm3Tm1914InvertedMethod KEYWORD1 NeoNrf52xPwm3Tm1829InvertedMethod KEYWORD1 NeoNrf52xPwm3Tx1812InvertedMethod KEYWORD1 NeoNrf52xPwm3800KbpsInvertedMethod KEYWORD1 diff --git a/lib/lib_basic/NeoPixelBus/library.json b/lib/lib_basic/NeoPixelBus/library.json index c684dfdee..306e6e094 100644 --- a/lib/lib_basic/NeoPixelBus/library.json +++ b/lib/lib_basic/NeoPixelBus/library.json @@ -1,13 +1,13 @@ { "name": "NeoPixelBus", - "keywords": "NeoPixel, WS2811, WS2812, WS2813, SK6812, DotStar, APA102, SK9822, APA106, LPD8806, LPD6803, P9813, TM1829, TM1814, TX1812, WS2801 RGB, RGBW", - "description": "A library that makes controlling NeoPixels (APA106, WS2811, WS2812, WS2813, SK6812, TM1829, TM1814, TX1812) and DotStars (APA102, LPD8806, LPD6803, SK9822, WS2801, P9813) easy. Supports most Arduino platforms, including async hardware support for Esp8266, Esp32, and Nrf52 (Nano 33 BLE). Support for RGBW pixels and 7 Segment LED direct driven. Includes seperate RgbColor, RgbwColor, Rgb16Color, Rgb48Color, HslColor, and HsbColor objects. Includes an animator class that helps create asyncronous animations. For all platforms; there are two methods of sending DotStar data, hardware SPI and software SPI.", + "keywords": "NeoPixel, WS2811, WS2812, WS2813, SK6812, DotStar, APA102, SK9822, APA106, LPD8806, LPD6803, P9813, TM1829, TM1814, TM1914, TX1812, WS2801 RGB, RGBW", + "description": "A library that makes controlling NeoPixels (APA106, WS2811, WS2812, WS2813, SK6812, TM1829, TM1814, TM1914, TX1812) and DotStars (APA102, LPD8806, LPD6803, SK9822, WS2801, P9813) easy. Supports most Arduino platforms, including async hardware support for Esp8266, Esp32, and Nrf52 (Nano 33 BLE). Support for RGBW pixels and 7 Segment LED direct driven. Includes seperate RgbColor, RgbwColor, Rgb16Color, Rgb48Color, HslColor, and HsbColor objects. Includes an animator class that helps create asyncronous animations. For all platforms; there are two methods of sending DotStar data, hardware SPI and software SPI.", "homepage": "https://github.com/Makuna/NeoPixelBus/wiki", "repository": { "type": "git", "url": "https://github.com/Makuna/NeoPixelBus" }, - "version": "2.6.3", + "version": "2.6.7", "frameworks": "arduino", "platforms": "*", "dependencies": [ diff --git a/lib/lib_basic/NeoPixelBus/library.properties b/lib/lib_basic/NeoPixelBus/library.properties index d3fea5120..35c9faea1 100644 --- a/lib/lib_basic/NeoPixelBus/library.properties +++ b/lib/lib_basic/NeoPixelBus/library.properties @@ -1,8 +1,8 @@ name=NeoPixelBus by Makuna -version=2.6.3 +version=2.6.7 author=Michael C. Miller (makuna@live.com) maintainer=Michael C. Miller (makuna@live.com) -sentence=A library that makes controlling NeoPixels (APA106, WS2811, WS2812, WS2813, SK6812, TM1829, TM1814, TX1812) and DotStars (APA102, LPD8806, LPD6803, SK9822, WS2801, P9813) easy. +sentence=A library that makes controlling NeoPixels (APA106, WS2811, WS2812, WS2813, SK6812, TM1829, TM1814, TM1914, TX1812) and DotStars (APA102, LPD8806, LPD6803, SK9822, WS2801, P9813) easy. paragraph=Supports most Arduino platforms, including async hardware support for Esp8266, Esp32, and Nrf52 (Nano 33 BLE). Support for RGBW pixels and 7 Segment LED direct driven. Includes seperate RgbColor, RgbwColor, Rgb16Color, Rgb48Color, HslColor, and HsbColor objects. Includes an animator class that helps create asyncronous animations. Supports Matrix layout of pixels. Includes Gamma corretion object. For all platforms; there are two methods of sending DotStar data, hardware SPI and software SPI. category=Display url=https://github.com/Makuna/NeoPixelBus/wiki diff --git a/lib/lib_basic/NeoPixelBus/src/NeoPixelBrightnessBus.h b/lib/lib_basic/NeoPixelBus/src/NeoPixelBrightnessBus.h index 6b93a6547..e110fdfc2 100644 --- a/lib/lib_basic/NeoPixelBus/src/NeoPixelBrightnessBus.h +++ b/lib/lib_basic/NeoPixelBus/src/NeoPixelBrightnessBus.h @@ -70,6 +70,12 @@ public: _brightness(255) { } + + NeoPixelBrightnessBus(uint16_t countPixels, uint8_t pin, NeoBusChannel channel) : + NeoPixelBus(countPixels, pin, channel), + _brightness(255) + { + } NeoPixelBrightnessBus(uint16_t countPixels, uint8_t pinClock, uint8_t pinData) : NeoPixelBus(countPixels, pinClock, pinData), diff --git a/lib/lib_basic/NeoPixelBus/src/NeoPixelBus.h b/lib/lib_basic/NeoPixelBus/src/NeoPixelBus.h index 2151567f0..1f06ef52c 100644 --- a/lib/lib_basic/NeoPixelBus/src/NeoPixelBus.h +++ b/lib/lib_basic/NeoPixelBus/src/NeoPixelBus.h @@ -63,6 +63,7 @@ License along with NeoPixel. If not, see #include "internal/NeoColorFeatures.h" #include "internal/NeoTm1814ColorFeatures.h" +#include "internal/NeoTm1914ColorFeatures.h" #include "internal/DotStarColorFeatures.h" #include "internal/Lpd8806ColorFeatures.h" #include "internal/Lpd6803ColorFeatures.h" diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoArmMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoArmMethod.h index b0199ae1b..ef1f7cf69 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoArmMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoArmMethod.h @@ -224,6 +224,7 @@ typedef NeoArmMethodBase> Ne typedef NeoArmMethodBase> NeoArm800KbpsMethod; typedef NeoArmMethodBase> NeoArm400KbpsMethod; +typedef NeoArmTm1814InvertedMethod NeoArmTm1914InvertedMethod; #elif defined(__MKL26Z64__) // Teensy-LC @@ -355,6 +356,7 @@ typedef NeoArmMethodBase NeoArmTm1814InvertedMethod; typedef NeoArmMethodBase NeoArmTm1829InvertedMethod; typedef NeoArmMethodBase NeoArm800KbpsMethod; typedef NeoArm800KbpsMethod NeoArmApa106Method; +typedef NeoArmTm1814InvertedMethod NeoArmTm1914InvertedMethod; #else #error "Teensy-LC: Sorry, only 48 MHz is supported, please set Tools > CPU Speed to 48 MHz" @@ -505,6 +507,7 @@ typedef NeoArmMethodBase> NeoArm800KbpsMethod; typedef NeoArmMethodBase> NeoArm400KbpsMethod; typedef NeoArm400KbpsMethod NeoArmApa106Method; +typedef NeoArmTm1814InvertedMethod NeoArmTm1914InvertedMethod; #elif defined(ARDUINO_STM32_FEATHER) || defined(ARDUINO_ARCH_STM32L4) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32F1)// FEATHER WICED (120MHz) @@ -695,10 +698,11 @@ public: typedef NeoArmMethodBase> NeoArmWs2812xMethod; typedef NeoArmMethodBase> NeoArmSk6812Method; -typedef NeoArmMethodBase> NeoArmTm1814InvertedMethod; -typedef NeoArmMethodBase> NeoArmTm1829InvertedMethod; +typedef NeoArmMethodBase> NeoArmTm1814InvertedMethod; +typedef NeoArmMethodBase> NeoArmTm1829InvertedMethod; typedef NeoArmMethodBase> NeoArm800KbpsMethod; typedef NeoArm800KbpsMethod NeoArmApa106Method; +typedef NeoArmTm1814InvertedMethod NeoArmTm1914InvertedMethod; #else // Other ARM architecture -- Presumed Arduino Due @@ -836,6 +840,7 @@ typedef NeoArmMethodBase> NeoA typedef NeoArmMethodBase> NeoArm800KbpsMethod; typedef NeoArmMethodBase> NeoArm400KbpsMethod; typedef NeoArm400KbpsMethod NeoArmApa106Method; +typedef NeoArmTm1814InvertedMethod NeoArmTm1914InvertedMethod; #endif @@ -852,8 +857,9 @@ typedef NeoArmWs2812xMethod Neo800KbpsMethod; #ifdef NeoArm400KbpsMethod // this is needed due to missing 400Kbps for some platforms typedef NeoArm400KbpsMethod Neo400KbpsMethod; #endif -// there is no invert methods for arm, but the norm for TM1814 is inverted, so +// there is no non-invert methods for arm, but the norm for TM1814 is inverted, so typedef NeoArmTm1814InvertedMethod NeoTm1814InvertedMethod; +typedef NeoArmTm1914InvertedMethod NeoTm1914InvertedMethod; typedef NeoArmTm1829InvertedMethod NeoTm1829InvertedMethod; #endif // defined(__arm__) diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoAvrMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoAvrMethod.h index 673ba8eca..685ab56ef 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoAvrMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoAvrMethod.h @@ -219,7 +219,7 @@ typedef NeoAvrMethodBase NeoAvrTm1814InvertedMethod; typedef NeoAvrMethodBase NeoAvrTm1829InvertedMethod; typedef NeoAvrMethodBase NeoAvr800KbpsMethod; typedef NeoAvrMethodBase NeoAvr400KbpsMethod; - +typedef NeoAvrTm1814InvertedMethod NeoAvrTm1914InvertedMethod; // AVR doesn't have alternatives yet, so there is just the default typedef NeoAvrWs2812xMethod NeoWs2813Method; @@ -232,7 +232,9 @@ typedef NeoAvr400KbpsMethod NeoApa106Method; typedef NeoAvrWs2812xMethod Neo800KbpsMethod; typedef NeoAvr400KbpsMethod Neo400KbpsMethod; +// there is no non-invert methods for avr, but the norm for TM1814 is inverted, so typedef NeoAvrTm1814InvertedMethod NeoTm1814InvertedMethod; +typedef NeoAvrTm1914InvertedMethod NeoTm1914InvertedMethod; typedef NeoAvrTm1829InvertedMethod NeoTm1829InvertedMethod; #endif diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoBusChannel.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoBusChannel.h index 9fc374d33..6f4b3c66f 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoBusChannel.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoBusChannel.h @@ -1,30 +1,43 @@ #pragma once // For those platforms/methods that support dynamic channel setting +// +// ESP32 - 8 TX channels +// ESP32S2 - 4 TX channels +// ESP32C3 - 2 TX channels +// NRF52840 - 3 or 4 channels (some variants only have 3) + enum NeoBusChannel { NeoBusChannel_0, NeoBusChannel_1, + +#if !defined(CONFIG_IDF_TARGET_ESP32C3) + NeoBusChannel_2, // NRF52x has only 3 or 4 channels of PWM #if defined(ARDUINO_ARCH_NRF52840) #if defined(NRF_PWM3) - NeoBusChannel_3 + NeoBusChannel_3, #endif -// ESP32 has either 8 or 4 channels (S2 has only 4) +// ESP32 has either 8, 4, or 2 channels (S2 has only 4, C3 only 2) #elif defined(ARDUINO_ARCH_ESP32) NeoBusChannel_3, -#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#if !defined(CONFIG_IDF_TARGET_ESP32S2) NeoBusChannel_4, NeoBusChannel_5, NeoBusChannel_6, NeoBusChannel_7, -#endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32S2) + +#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) #endif // ARDUINO_ARCH_ESP32 + + NeoBusChannel_COUNT }; \ No newline at end of file diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32I2sMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32I2sMethod.h index 8d1d9dbee..9dbaa7fe7 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32I2sMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32I2sMethod.h @@ -61,6 +61,14 @@ public: const static uint16_t ResetTimeUs = 200; }; +class NeoEsp32I2sSpeedTm1914 +{ +public: + const static uint32_t I2sSampleRate = 100000; + const static uint16_t ByteSendTimeUs = 10; + const static uint16_t ResetTimeUs = 200; +}; + class NeoEsp32I2sSpeedTm1829 { public: @@ -161,6 +169,7 @@ public: yield(); } + gpio_matrix_out(_pin, 0x100, false, false); pinMode(_pin, INPUT); free(_data); @@ -277,6 +286,7 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Sk6812Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1814Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1829Method; +typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1914Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0800KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0400KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Apa106Method; @@ -285,6 +295,7 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Ws2812xInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Sk6812InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1814InvertedMethod; +typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1914InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0Tm1829InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0800KbpsInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s0400KbpsInvertedMethod; @@ -297,6 +308,7 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Sk6812Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1814Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1829Method; +typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1914Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1800KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1400KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Apa106Method; @@ -305,6 +317,7 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Sk6812InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1814InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1829InvertedMethod; +typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Tm1914InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1800KbpsInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1400KbpsInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2s1Apa106InvertedMethod; @@ -313,6 +326,8 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2sNWs2812xMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNSk6812Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1814Method; +typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1829Method; +typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1914Method; typedef NeoEsp32I2sMethodBase NeoEsp32I2sN800KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sN400KbpsMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNApa106Method; @@ -320,6 +335,8 @@ typedef NeoEsp32I2sMethodBase NeoEsp32I2sNWs2812xInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNSk6812InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1814InvertedMethod; +typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1829InvertedMethod; +typedef NeoEsp32I2sMethodBase NeoEsp32I2sNTm1914InvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sN800KbpsInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sN400KbpsInvertedMethod; typedef NeoEsp32I2sMethodBase NeoEsp32I2sNApa106InvertedMethod; @@ -337,6 +354,7 @@ typedef NeoEsp32I2s1Ws2812xMethod NeoWs2811Method; typedef NeoEsp32I2s1Sk6812Method NeoSk6812Method; typedef NeoEsp32I2s1Tm1814Method NeoTm1814Method; typedef NeoEsp32I2s1Tm1829Method NeoTm1829Method; +typedef NeoEsp32I2s1Tm1914Method NeoTm1914Method; typedef NeoEsp32I2s1Sk6812Method NeoLc8812Method; typedef NeoEsp32I2s1Apa106Method NeoApa106Method; @@ -350,6 +368,7 @@ typedef NeoEsp32I2s1800KbpsInvertedMethod NeoWs2812InvertedMethod; typedef NeoEsp32I2s1Sk6812InvertedMethod NeoSk6812InvertedMethod; typedef NeoEsp32I2s1Tm1814InvertedMethod NeoTm1814InvertedMethod; typedef NeoEsp32I2s1Tm1829InvertedMethod NeoTm1829InvertedMethod; +typedef NeoEsp32I2s1Tm1914InvertedMethod NeoTm1914InvertedMethod; typedef NeoEsp32I2s1Sk6812InvertedMethod NeoLc8812InvertedMethod; typedef NeoEsp32I2s1Apa106InvertedMethod NeoApa106InvertedMethod; diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.cpp b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.cpp index f1a351819..f25d20d8f 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.cpp +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.cpp @@ -153,6 +153,28 @@ void NeoEsp32RmtSpeedTm1814::Translate(const void* src, RmtBit0, RmtBit1, RmtDurationReset); } +void NeoEsp32RmtSpeedTm1829::Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num) +{ + _translate(src, dest, src_size, wanted_num, translated_size, item_num, + RmtBit0, RmtBit1, RmtDurationReset); +} + +void NeoEsp32RmtSpeedTm1914::Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num) +{ + _translate(src, dest, src_size, wanted_num, translated_size, item_num, + RmtBit0, RmtBit1, RmtDurationReset); +} + void NeoEsp32RmtSpeed800Kbps::Translate(const void* src, rmt_item32_t* dest, size_t src_size, @@ -241,6 +263,28 @@ void NeoEsp32RmtInvertedSpeedTm1814::Translate(const void* src, RmtBit0, RmtBit1, RmtDurationReset); } +void NeoEsp32RmtInvertedSpeedTm1829::Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num) +{ + _translate(src, dest, src_size, wanted_num, translated_size, item_num, + RmtBit0, RmtBit1, RmtDurationReset); +} + +void NeoEsp32RmtInvertedSpeedTm1914::Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num) +{ + _translate(src, dest, src_size, wanted_num, translated_size, item_num, + RmtBit0, RmtBit1, RmtDurationReset); +} + void NeoEsp32RmtInvertedSpeed800Kbps::Translate(const void* src, rmt_item32_t* dest, size_t src_size, diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.h index 66cd7c2d7..6d98ccd04 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp32RmtMethod.h @@ -184,6 +184,22 @@ public: size_t* item_num); }; +// normal is inverted signal +class NeoEsp32RmtSpeedTm1914 : public NeoEsp32RmtInvertedSpeedBase +{ +public: + const static DRAM_ATTR uint32_t RmtBit0 = Item32Val(360, 890); + const static DRAM_ATTR uint32_t RmtBit1 = Item32Val(720, 530); + const static DRAM_ATTR uint16_t RmtDurationReset = FromNs(200000); // 200us + + static void IRAM_ATTR Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num); +}; + class NeoEsp32RmtSpeed800Kbps : public NeoEsp32RmtSpeedBase { public: @@ -321,6 +337,22 @@ public: size_t* item_num); }; +// normal is inverted signal +class NeoEsp32RmtInvertedSpeedTm1914 : public NeoEsp32RmtSpeedBase +{ +public: + const static DRAM_ATTR uint32_t RmtBit0 = Item32Val(360, 890); + const static DRAM_ATTR uint32_t RmtBit1 = Item32Val(720, 530); + const static DRAM_ATTR uint16_t RmtDurationReset = FromNs(200000); // 200us + + static void IRAM_ATTR Translate(const void* src, + rmt_item32_t* dest, + size_t src_size, + size_t wanted_num, + size_t* translated_size, + size_t* item_num); +}; + class NeoEsp32RmtInvertedSpeed800Kbps : public NeoEsp32RmtInvertedSpeedBase { public: @@ -490,6 +522,9 @@ public: ESP_ERROR_CHECK(rmt_driver_uninstall(_channel.RmtChannelNumber)); + gpio_matrix_out(_pin, 0x100, false, false); + pinMode(_pin, INPUT); + free(_dataEditing); free(_dataSending); } @@ -502,7 +537,7 @@ public: void Initialize() { - rmt_config_t config; + rmt_config_t config = {}; config.rmt_mode = RMT_MODE_TX; config.channel = _channel.RmtChannelNumber; @@ -585,6 +620,8 @@ typedef NeoEsp32RmtMethodBase NeoEs typedef NeoEsp32RmtMethodBase NeoEsp32RmtNWs2812xMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNSk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1814Method; +typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNApa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32RmtN800KbpsMethod; @@ -595,6 +632,7 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0800KbpsMethod; @@ -605,16 +643,20 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1800KbpsMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1400KbpsMethod; +#if !defined(CONFIG_IDF_TARGET_ESP32C3) + typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Ws2811Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Ws2812xMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2800KbpsMethod; @@ -625,19 +667,20 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3800KbpsMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3400KbpsMethod; -#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) -// (RMT_CHANNEL_MAX == 8) +#if !defined(CONFIG_IDF_TARGET_ESP32S2) typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Ws2811Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Ws2812xMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4800KbpsMethod; @@ -648,6 +691,7 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5800KbpsMethod; @@ -658,6 +702,7 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6800KbpsMethod; @@ -668,18 +713,22 @@ typedef NeoEsp32RmtMethodBase NeoE typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Sk6812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1814Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1829Method; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1914Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Apa106Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tx1812Method; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7800KbpsMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7400KbpsMethod; -#endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32S2) +#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) // inverted typedef NeoEsp32RmtMethodBase NeoEsp32RmtNWs2811InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNWs2812xInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNSk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1814InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNApa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtNTx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32RmtN800KbpsInvertedMethod; @@ -690,6 +739,7 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt0800KbpsInvertedMethod; @@ -700,16 +750,20 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1800KbpsInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt1400KbpsInvertedMethod; +#if !defined(CONFIG_IDF_TARGET_ESP32C3) + typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Ws2811InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Ws2812xInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt2800KbpsInvertedMethod; @@ -720,19 +774,20 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3800KbpsInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt3400KbpsInvertedMethod; -#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) -// (RMT_CHANNEL_MAX == 8) +#if !defined(CONFIG_IDF_TARGET_ESP32S2) typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Ws2811InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Ws2812xInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt4800KbpsInvertedMethod; @@ -743,6 +798,7 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt5800KbpsInvertedMethod; @@ -753,6 +809,7 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt6800KbpsInvertedMethod; @@ -763,21 +820,57 @@ typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Sk6812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1814InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1829InvertedMethod; +typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tm1914InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Apa106InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7Tx1812InvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7800KbpsInvertedMethod; typedef NeoEsp32RmtMethodBase NeoEsp32Rmt7400KbpsInvertedMethod; -#endif +#endif // !defined(CONFIG_IDF_TARGET_ESP32S2) +#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) #if defined(NEOPIXEL_ESP32_RMT_DEFAULT) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) + // Normally I2s method is the default, defining NEOPIXEL_ESP32_RMT_DEFAULT // will switch to use RMT as the default method // The ESP32S2 & ESP32C3 will always defualt to RMT -#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) -// (RMT_CHANNEL_MAX == 8) +#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) + +// RMT channel 1 method is the default method for Esp32S2 & Esp32C3 +typedef NeoEsp32Rmt1Ws2812xMethod NeoWs2813Method; +typedef NeoEsp32Rmt1Ws2812xMethod NeoWs2812xMethod; +typedef NeoEsp32Rmt1800KbpsMethod NeoWs2812Method; +typedef NeoEsp32Rmt1Ws2812xMethod NeoWs2811Method; +typedef NeoEsp32Rmt1Sk6812Method NeoSk6812Method; +typedef NeoEsp32Rmt1Tm1814Method NeoTm1814Method; +typedef NeoEsp32Rmt1Tm1829Method NeoTm1829Method; +typedef NeoEsp32Rmt1Tm1914Method NeoTm1914Method; +typedef NeoEsp32Rmt1Sk6812Method NeoLc8812Method; +typedef NeoEsp32Rmt1Apa106Method NeoApa106Method; +typedef NeoEsp32Rmt1Tx1812Method NeoTx1812Method; + +typedef NeoEsp32Rmt1Ws2812xMethod Neo800KbpsMethod; +typedef NeoEsp32Rmt1400KbpsMethod Neo400KbpsMethod; + +typedef NeoEsp32Rmt1Ws2812xInvertedMethod NeoWs2813InvertedMethod; +typedef NeoEsp32Rmt1Ws2812xInvertedMethod NeoWs2812xInvertedMethod; +typedef NeoEsp32Rmt1Ws2812xInvertedMethod NeoWs2811InvertedMethod; +typedef NeoEsp32Rmt1800KbpsInvertedMethod NeoWs2812InvertedMethod; +typedef NeoEsp32Rmt1Sk6812InvertedMethod NeoSk6812InvertedMethod; +typedef NeoEsp32Rmt1Tm1814InvertedMethod NeoTm1814InvertedMethod; +typedef NeoEsp32Rmt1Tm1829InvertedMethod NeoTm1829InvertedMethod; +typedef NeoEsp32Rmt1Tm1914InvertedMethod NeoTm1914InvertedMethod; +typedef NeoEsp32Rmt1Sk6812InvertedMethod NeoLc8812InvertedMethod; +typedef NeoEsp32Rmt1Apa106InvertedMethod NeoApa106InvertedMethod; +typedef NeoEsp32Rmt1Tx1812InvertedMethod NeoTx1812InvertedMethod; + +typedef NeoEsp32Rmt1Ws2812xInvertedMethod Neo800KbpsInvertedMethod; +typedef NeoEsp32Rmt1400KbpsInvertedMethod Neo400KbpsInvertedMethod; + +#else // defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) + // RMT channel 6 method is the default method for Esp32 typedef NeoEsp32Rmt6Ws2812xMethod NeoWs2813Method; typedef NeoEsp32Rmt6Ws2812xMethod NeoWs2812xMethod; @@ -786,6 +879,7 @@ typedef NeoEsp32Rmt6Ws2812xMethod NeoWs2811Method; typedef NeoEsp32Rmt6Sk6812Method NeoSk6812Method; typedef NeoEsp32Rmt6Tm1814Method NeoTm1814Method; typedef NeoEsp32Rmt6Tm1829Method NeoTm1829Method; +typedef NeoEsp32Rmt6Tm1914Method NeoTm1914Method; typedef NeoEsp32Rmt6Sk6812Method NeoLc8812Method; typedef NeoEsp32Rmt6Apa106Method NeoApa106Method; typedef NeoEsp32Rmt6Tx1812Method NeoTx1812Method; @@ -800,45 +894,16 @@ typedef NeoEsp32Rmt6800KbpsInvertedMethod NeoWs2812InvertedMethod; typedef NeoEsp32Rmt6Sk6812InvertedMethod NeoSk6812InvertedMethod; typedef NeoEsp32Rmt6Tm1814InvertedMethod NeoTm1814InvertedMethod; typedef NeoEsp32Rmt6Tm1829InvertedMethod NeoTm1829InvertedMethod; +typedef NeoEsp32Rmt6Tm1914InvertedMethod NeoTm1914InvertedMethod; typedef NeoEsp32Rmt6Sk6812InvertedMethod NeoLc8812InvertedMethod; typedef NeoEsp32Rmt6Apa106InvertedMethod NeoApa106InvertedMethod; typedef NeoEsp32Rmt6Tx1812InvertedMethod NeoTx1812InvertedMethod; typedef NeoEsp32Rmt6Ws2812xInvertedMethod Neo800KbpsInvertedMethod; typedef NeoEsp32Rmt6400KbpsInvertedMethod Neo400KbpsInvertedMethod; -#else // !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) -// RMT channel 3 method is the default method for Esp32S2 & Esp32C3 -typedef NeoEsp32Rmt3Ws2812xMethod NeoWs2813Method; -typedef NeoEsp32Rmt3Ws2812xMethod NeoWs2812xMethod; -typedef NeoEsp32Rmt3800KbpsMethod NeoWs2812Method; -typedef NeoEsp32Rmt3Ws2812xMethod NeoWs2811Method; -typedef NeoEsp32Rmt3Sk6812Method NeoSk6812Method; -typedef NeoEsp32Rmt3Tm1814Method NeoTm1814Method; -typedef NeoEsp32Rmt3Tm1829Method NeoTm1829Method; -typedef NeoEsp32Rmt3Sk6812Method NeoLc8812Method; -typedef NeoEsp32Rmt3Apa106Method NeoApa106Method; -typedef NeoEsp32Rmt3Tx1812Method NeoTx1812Method; +#endif // defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) -typedef NeoEsp32Rmt3Ws2812xMethod Neo800KbpsMethod; -typedef NeoEsp32Rmt3400KbpsMethod Neo400KbpsMethod; - -typedef NeoEsp32Rmt3Ws2812xInvertedMethod NeoWs2813InvertedMethod; -typedef NeoEsp32Rmt3Ws2812xInvertedMethod NeoWs2812xInvertedMethod; -typedef NeoEsp32Rmt3Ws2812xInvertedMethod NeoWs2811InvertedMethod; -typedef NeoEsp32Rmt3800KbpsInvertedMethod NeoWs2812InvertedMethod; -typedef NeoEsp32Rmt3Sk6812InvertedMethod NeoSk6812InvertedMethod; -typedef NeoEsp32Rmt3Tm1814InvertedMethod NeoTm1814InvertedMethod; -typedef NeoEsp32Rmt3Tm1829InvertedMethod NeoTm1829InvertedMethod; -typedef NeoEsp32Rmt3Sk6812InvertedMethod NeoLc8812InvertedMethod; -typedef NeoEsp32Rmt3Apa106InvertedMethod NeoApa106InvertedMethod; -typedef NeoEsp32Rmt3Tx1812InvertedMethod NeoTx1812InvertedMethod; - -typedef NeoEsp32Rmt3Ws2812xInvertedMethod Neo800KbpsInvertedMethod; -typedef NeoEsp32Rmt3400KbpsInvertedMethod Neo400KbpsInvertedMethod; - -#endif // !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) - -#endif // defined(NEOPIXEL_ESP32_RMT_DEFAULT) +#endif // defined(NEOPIXEL_ESP32_RMT_DEFAULT) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) #endif diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.cpp b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.cpp new file mode 100644 index 000000000..4bfc7d340 --- /dev/null +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.cpp @@ -0,0 +1,36 @@ +/*------------------------------------------------------------------------- +NeoPixel library helper functions for Esp8266. + +Written by Michael C. Miller. + +I invest time and resources providing this open source code, +please support me by dontating (see https://github.com/Makuna/NeoPixelBus) + +------------------------------------------------------------------------- +This file is part of the Makuna/NeoPixelBus library. + +NeoPixelBus is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +NeoPixelBus is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with NeoPixel. If not, see +. +-------------------------------------------------------------------------*/ + +#include +#include "NeoSettings.h" +#include "NeoBusChannel.h" +#include "NeoEsp8266DmaMethod.h" + +#ifdef ARDUINO_ARCH_ESP8266 + +NeoEsp8266DmaMethodCore* NeoEsp8266DmaMethodCore::s_this; + +#endif \ No newline at end of file diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.h index f867ac8db..7a8a32330 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266DmaMethod.h @@ -32,14 +32,21 @@ License along with NeoPixel. If not, see #ifdef ARDUINO_ARCH_ESP8266 +#include "Arduino.h" + extern "C" { -#include "Arduino.h" #include "osapi.h" #include "ets_sys.h" #include "i2s_reg.h" -#include "i2s.h" + +#ifdef ARDUINO_ESP8266_MAJOR //this define was added in ESP8266 Arduino Core version v3.0.1 + #include "core_esp8266_i2s.h" //for Arduino core >= 3.0.1 +#else + #include "i2s.h" //for Arduino core <= 3.0.0 +#endif + #include "eagle_soc.h" #include "esp8266_peri.h" #include "slc_register.h" @@ -226,7 +233,72 @@ const uint16_t c_maxDmaBlockSize = 4095; const uint16_t c_dmaBytesPerPixelBytes = 4; const uint8_t c_I2sPin = 3; // due to I2S hardware, the pin used is restricted to this -template class NeoEsp8266DmaMethodBase +class NeoEsp8266DmaMethodCore +{ +protected: + static NeoEsp8266DmaMethodCore* s_this; // for the ISR + + volatile NeoDmaState _dmaState; + + slc_queue_item* _i2sBufDesc; // dma block descriptors + uint16_t _i2sBufDescCount; // count of block descriptors in _i2sBufDesc + + + // This routine is called as soon as the DMA routine has something to tell us. All we + // handle here is the RX_EOF_INT status, which indicate the DMA has sent a buffer whose + // descriptor has the 'EOF' field set to 1. + // in the case of this code, the second to last state descriptor + static void IRAM_ATTR i2s_slc_isr(void) + { + ETS_SLC_INTR_DISABLE(); + + uint32_t slc_intr_status = SLCIS; + + SLCIC = 0xFFFFFFFF; + + if ((slc_intr_status & SLCIRXEOF) && s_this) + { + switch (s_this->_dmaState) + { + case NeoDmaState_Idle: + break; + + case NeoDmaState_Pending: + { + slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA; + + // data block has pending data waiting to send, prepare it + // point last state block to top + (finished_item + 1)->next_link_ptr = s_this->_i2sBufDesc; + + s_this->_dmaState = NeoDmaState_Sending; + } + break; + + case NeoDmaState_Sending: + { + slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA; + + // the data block had actual data sent + // point last state block to first state block thus + // just looping and not sending the data blocks + (finished_item + 1)->next_link_ptr = finished_item; + + s_this->_dmaState = NeoDmaState_Zeroing; + } + break; + + case NeoDmaState_Zeroing: + s_this->_dmaState = NeoDmaState_Idle; + break; + } + } + + ETS_SLC_INTR_ENABLE(); + } +}; + +template class NeoEsp8266DmaMethodBase : NeoEsp8266DmaMethodCore { public: typedef NeoNoSettings SettingsObject; @@ -432,8 +504,6 @@ public: } private: - static NeoEsp8266DmaMethodBase* s_this; // for the ISR - const size_t _sizeData; // Size of '_data' buffer uint8_t* _data; // Holds LED color values @@ -445,64 +515,8 @@ private: // buffer size = (24 * (reset time / 50)) / 6 uint8_t _i2sZeroes[(24L * (T_SPEED::ResetTimeUs / 50L)) / 6L]; - slc_queue_item* _i2sBufDesc; // dma block descriptors - uint16_t _i2sBufDescCount; // count of block descriptors in _i2sBufDesc uint16_t _is2BufMaxBlockSize; // max size based on size of a pixel of a single block - volatile NeoDmaState _dmaState; - - // This routine is called as soon as the DMA routine has something to tell us. All we - // handle here is the RX_EOF_INT status, which indicate the DMA has sent a buffer whose - // descriptor has the 'EOF' field set to 1. - // in the case of this code, the second to last state descriptor - static void IRAM_ATTR i2s_slc_isr(void) - { - ETS_SLC_INTR_DISABLE(); - - uint32_t slc_intr_status = SLCIS; - - SLCIC = 0xFFFFFFFF; - - if ((slc_intr_status & SLCIRXEOF) && s_this) - { - switch (s_this->_dmaState) - { - case NeoDmaState_Idle: - break; - - case NeoDmaState_Pending: - { - slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA; - - // data block has pending data waiting to send, prepare it - // point last state block to top - (finished_item + 1)->next_link_ptr = s_this->_i2sBufDesc; - - s_this->_dmaState = NeoDmaState_Sending; - } - break; - - case NeoDmaState_Sending: - { - slc_queue_item* finished_item = (slc_queue_item*)SLCRXEDA; - - // the data block had actual data sent - // point last state block to first state block thus - // just looping and not sending the data blocks - (finished_item + 1)->next_link_ptr = finished_item; - - s_this->_dmaState = NeoDmaState_Zeroing; - } - break; - - case NeoDmaState_Zeroing: - s_this->_dmaState = NeoDmaState_Idle; - break; - } - } - - ETS_SLC_INTR_ENABLE(); - } void FillBuffers() { @@ -544,23 +558,24 @@ private: }; -template -NeoEsp8266DmaMethodBase* NeoEsp8266DmaMethodBase::s_this; // normal typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaWs2812xMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaSk6812Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaTm1814Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaTm1829Method; +typedef NeoEsp8266DmaTm1814Method NeoEsp8266DmaTm1914Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266Dma800KbpsMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266Dma400KbpsMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaApa106Method; + // inverted typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInvertedWs2812xMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInvertedSk6812Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInvertedTm1814Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInvertedTm1829Method; +typedef NeoEsp8266DmaInvertedTm1814Method NeoEsp8266DmaInvertedTm1914Method; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInverted800KbpsMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInverted400KbpsMethod; typedef NeoEsp8266DmaMethodBase NeoEsp8266DmaInvertedApa106Method; @@ -573,6 +588,7 @@ typedef NeoEsp8266DmaWs2812xMethod NeoWs2811Method; typedef NeoEsp8266DmaSk6812Method NeoSk6812Method; typedef NeoEsp8266DmaTm1814Method NeoTm1814Method; typedef NeoEsp8266DmaTm1829Method NeoTm1829Method; +typedef NeoEsp8266DmaTm1914Method NeoTm1914Method; typedef NeoEsp8266DmaSk6812Method NeoLc8812Method; typedef NeoEsp8266DmaApa106Method NeoApa106Method; @@ -587,6 +603,7 @@ typedef NeoEsp8266DmaInvertedWs2812xMethod NeoWs2811InvertedMethod; typedef NeoEsp8266DmaInvertedSk6812Method NeoSk6812InvertedMethod; typedef NeoEsp8266DmaInvertedTm1814Method NeoTm1814InvertedMethod; typedef NeoEsp8266DmaInvertedTm1829Method NeoTm1829InvertedMethod; +typedef NeoEsp8266DmaInvertedTm1914Method NeoTm1914InvertedMethod; typedef NeoEsp8266DmaInvertedSk6812Method NeoLc8812InvertedMethod; typedef NeoEsp8266DmaInvertedApa106Method NeoApa106InvertedMethod; diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266UartMethod.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266UartMethod.h index 3d57d7cdd..9ef2f4b45 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266UartMethod.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoEsp8266UartMethod.h @@ -429,6 +429,7 @@ typedef NeoEsp8266UartMethodBase NeoEsp32 typedef NeoEsp32BitBangWs2812xMethod NeoEsp32BitBangWs2813Method; typedef NeoEsp32BitBang800KbpsMethod NeoEsp32BitBangWs2812Method; +typedef NeoEsp32BitBangTm1814Method NeoEsp32BitBangTm1914Method; typedef NeoEsp32BitBangSk6812Method NeoEsp32BitBangLc8812Method; typedef NeoEspBitBangMethodBase NeoEsp32BitBangWs2811InvertedMethod; @@ -339,6 +340,7 @@ typedef NeoEspBitBangMethodBase NeoEsp82 typedef NeoEsp8266BitBangWs2812xMethod NeoEsp8266BitBangWs2813Method; typedef NeoEsp8266BitBang800KbpsMethod NeoEsp8266BitBangWs2812Method; +typedef NeoEsp8266BitBangTm1814Method NeoEsp8266BitBangTm1914Method; typedef NeoEsp8266BitBangSk6812Method NeoEsp8266BitBangLc8812Method; typedef NeoEspBitBangMethodBase NeoEsp8266BitBangWs2811InvertedMethod; @@ -367,6 +370,7 @@ typedef NeoEspBitBangMethodBase NeoNrf52xPw typedef NeoNrf52xMethodBase NeoNrf52xPwmNSk6812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1814Method; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1829Method; +typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1914Method; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTx1812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwmNApa106Method; typedef NeoNrf52xMethodBase NeoNrf52xPwmN800KbpsMethod; @@ -509,6 +532,7 @@ typedef NeoNrf52xMethodBase NeoNrf52xPw typedef NeoNrf52xMethodBase NeoNrf52xPwm0Sk6812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1814Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1829Method; +typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1914Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tx1812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Apa106Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm0800KbpsMethod; @@ -519,6 +543,7 @@ typedef NeoNrf52xMethodBase NeoNrf52xPw typedef NeoNrf52xMethodBase NeoNrf52xPwm1Sk6812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1814Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1829Method; +typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1914Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tx1812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Apa106Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm1800KbpsMethod; @@ -529,6 +554,7 @@ typedef NeoNrf52xMethodBase NeoNrf52xPw typedef NeoNrf52xMethodBase NeoNrf52xPwm2Sk6812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1814Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1829Method; +typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1914Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tx1812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Apa106Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm2800KbpsMethod; @@ -540,6 +566,7 @@ typedef NeoNrf52xMethodBase NeoNrf52xPw typedef NeoNrf52xMethodBase NeoNrf52xPwm3Sk6812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1814Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1829Method; +typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1914Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tx1812Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Apa106Method; typedef NeoNrf52xMethodBase NeoNrf52xPwm3800KbpsMethod; @@ -552,6 +579,7 @@ typedef NeoNrf52xMethodBase Neo typedef NeoNrf52xMethodBase NeoNrf52xPwmNSk6812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1814InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1829InvertedMethod; +typedef NeoNrf52xMethodBase NeoNrf52xPwmNTm1914InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwmNTx1812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwmNApa106InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwmN800KbpsInvertedMethod; @@ -562,6 +590,7 @@ typedef NeoNrf52xMethodBase Neo typedef NeoNrf52xMethodBase NeoNrf52xPwm0Sk6812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1814InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1829InvertedMethod; +typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tm1914InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Tx1812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm0Apa106InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm0800KbpsInvertedMethod; @@ -572,6 +601,7 @@ typedef NeoNrf52xMethodBase Neo typedef NeoNrf52xMethodBase NeoNrf52xPwm1Sk6812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1814InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1829InvertedMethod; +typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tm1914InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Tx1812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm1Apa106InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm1800KbpsInvertedMethod; @@ -582,6 +612,7 @@ typedef NeoNrf52xMethodBase Neo typedef NeoNrf52xMethodBase NeoNrf52xPwm2Sk6812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1814InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1829InvertedMethod; +typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tm1914InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Tx1812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm2Apa106InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm2800KbpsInvertedMethod; @@ -593,6 +624,7 @@ typedef NeoNrf52xMethodBase Neo typedef NeoNrf52xMethodBase NeoNrf52xPwm3Sk6812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1814InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1829InvertedMethod; +typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tm1914InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Tx1812InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm3Apa106InvertedMethod; typedef NeoNrf52xMethodBase NeoNrf52xPwm3800KbpsInvertedMethod; @@ -607,6 +639,7 @@ typedef NeoNrf52xPwm2Ws2812xMethod NeoWs2811Method; typedef NeoNrf52xPwm2Sk6812Method NeoSk6812Method; typedef NeoNrf52xPwm2Tm1814Method NeoTm1814Method; typedef NeoNrf52xPwm2Tm1829Method NeoTm1829Method; +typedef NeoNrf52xPwm2Tm1914Method NeoTm1914Method; typedef NeoNrf52xPwm2Tx1812Method NeoTx1812Method; typedef NeoNrf52xPwm2Sk6812Method NeoLc8812Method; typedef NeoNrf52xPwm2Apa106Method NeoApa106Method; @@ -621,6 +654,7 @@ typedef NeoNrf52xPwm2800KbpsInvertedMethod NeoWs2812InvertedMethod; typedef NeoNrf52xPwm2Sk6812InvertedMethod NeoSk6812InvertedMethod; typedef NeoNrf52xPwm2Tm1814InvertedMethod NeoTm1814InvertedMethod; typedef NeoNrf52xPwm2Tm1829InvertedMethod NeoTm1829InvertedMethod; +typedef NeoNrf52xPwm2Tm1914InvertedMethod NeoTm1914InvertedMethod; typedef NeoNrf52xPwm2Tx1812InvertedMethod NeoTx1812InvertedMethod; typedef NeoNrf52xPwm2Sk6812InvertedMethod NeoLc8812InvertedMethod; typedef NeoNrf52xPwm2Apa106InvertedMethod NeoApa106InvertedMethod; diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoRingTopology.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoRingTopology.h index e598fa462..7255a97e3 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoRingTopology.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoRingTopology.h @@ -29,7 +29,7 @@ License along with NeoPixel. If not, see . -------------------------------------------------------------------------*/ -template class NeoRingTopology : protected T_LAYOUT +template class NeoRingTopology : public T_LAYOUT { public: NeoRingTopology() @@ -85,7 +85,7 @@ public: uint8_t getCountOfRings() const { - return _ringCount() - 1; // minus one as the Rings includes the extra value + return T_LAYOUT::_ringCount() - 1; // minus one as the Rings includes the extra value } uint16_t getPixelCountAtRing(uint8_t ring) const @@ -100,7 +100,7 @@ public: uint16_t getPixelCount() const { - return T_LAYOUT::Rings[_ringCount() - 1]; // the last entry is the total count + return T_LAYOUT::Rings[T_LAYOUT::_ringCount() - 1]; // the last entry is the total count } private: @@ -109,8 +109,4 @@ private: return T_LAYOUT::Rings[ring] + pixel; } - uint8_t _ringCount() const - { - return sizeof(T_LAYOUT::Rings) / sizeof(T_LAYOUT::Rings[0]); - } }; diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1814ColorFeatures.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1814ColorFeatures.h index bc5035f9f..00d0dfa37 100644 --- a/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1814ColorFeatures.h +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1814ColorFeatures.h @@ -83,7 +83,7 @@ public: static const uint8_t* pixels(const uint8_t* pData) { - return pData; + return pData + SettingsSize; } }; diff --git a/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1914ColorFeatures.h b/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1914ColorFeatures.h new file mode 100644 index 000000000..52bc03d18 --- /dev/null +++ b/lib/lib_basic/NeoPixelBus/src/internal/NeoTm1914ColorFeatures.h @@ -0,0 +1,174 @@ +/*------------------------------------------------------------------------- +NeoTm1914ColorFeatures provides feature classes to describe color order and +color depth for NeoPixelBus template class specific to the TM1914 chip + +Written by Michael C. Miller. + +I invest time and resources providing this open source code, +please support me by dontating (see https://github.com/Makuna/NeoPixelBus) + +------------------------------------------------------------------------- +This file is part of the Makuna/NeoPixelBus library. + +NeoPixelBus is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +NeoPixelBus is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with NeoPixel. If not, see +. +-------------------------------------------------------------------------*/ +#pragma once + +enum NeoTm1914_Mode +{ + NeoTm1914_Mode_DinFdinAutoSwitch, // Switches between DIN and FDIN on any signal pause > 300ms + NeoTm1914_Mode_DinOnly, // DIN input pin used exclusively + NeoTm1914_Mode_FdinOnly // FDIN input pin used exclusively +}; + +class NeoTm1914Settings +{ +public: + NeoTm1914Settings(NeoTm1914_Mode mode = NeoTm1914_Mode_DinOnly) : + Mode(mode) + { + } + + NeoTm1914_Mode Mode; +}; + +class Neo3ElementsTm1914Settings : public Neo3Elements +{ +public: + typedef NeoTm1914Settings SettingsObject; + static const size_t SettingsSize = 6; + + static void applySettings(uint8_t* pData, const SettingsObject& settings) + { + uint8_t* pSet = pData; + uint8_t mode = 0xff; + + // C1 - the mode + *pSet++ = 0xff; + *pSet++ = 0xff; + + switch (settings.Mode) + { + case NeoTm1914_Mode_DinFdinAutoSwitch: + mode = 0xff; + break; + + case NeoTm1914_Mode_FdinOnly: + mode = 0xfa; + break; + + case NeoTm1914_Mode_DinOnly: + default: + mode = 0xf5; + break; + } + *pSet++ = mode; + + // C2 - ones compliment of the above + uint8_t* pC1 = pData; + for (uint8_t elem = 0; elem < 3; elem++) + { + *pSet++ = ~(*pC1++); + } + } + + static uint8_t* pixels(uint8_t* pData) + { + return pData + SettingsSize; + } + + static const uint8_t* pixels(const uint8_t* pData) + { + return pData + SettingsSize; + } +}; + + +class NeoRgbTm1914Feature : public Neo3ElementsTm1914Settings +{ +public: + static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color) + { + uint8_t* p = getPixelAddress(pPixels, indexPixel); + + *p++ = color.R; + *p++ = color.G; + *p = color.B; + } + + static ColorObject retrievePixelColor(const uint8_t* pPixels, uint16_t indexPixel) + { + ColorObject color; + const uint8_t* p = getPixelAddress(pPixels, indexPixel); + + color.R = *p++; + color.G = *p++; + color.B = *p; + + return color; + } + + static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel) + { + ColorObject color; + const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel); + + color.R = pgm_read_byte(p++); + color.G = pgm_read_byte(p++); + color.B = pgm_read_byte(p); + + return color; + } + +}; + + +class NeoGrbTm1914Feature : public Neo3ElementsTm1914Settings +{ +public: + static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color) + { + uint8_t* p = getPixelAddress(pPixels, indexPixel); + + *p++ = color.G; + *p++ = color.R; + *p = color.B; + } + + static ColorObject retrievePixelColor(const uint8_t* pPixels, uint16_t indexPixel) + { + ColorObject color; + const uint8_t* p = getPixelAddress(pPixels, indexPixel); + + color.G = *p++; + color.R = *p++; + color.B = *p; + + return color; + } + + static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel) + { + ColorObject color; + const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel); + + color.G = pgm_read_byte(p++); + color.R = pgm_read_byte(p++); + color.B = pgm_read_byte(p); + + return color; + } + +}; \ No newline at end of file diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp index 7449ff647..fb223680b 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp @@ -58,6 +58,11 @@ uint16_t Renderer::GetColorFromIndex(uint8_t index) { } void Renderer::dim(uint8_t contrast) { + uint8_t contrast8 = ((uint32_t)contrast * 255) / 15; + dim8(contrast8, contrast8); +} + +void Renderer::dim8(uint8_t contrast, uint8_t contrast_gamma) { } diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h index 8ec0f3cde..49f4d7b5e 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h @@ -71,7 +71,8 @@ public: virtual void DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font); virtual void Begin(int16_t p1,int16_t p2,int16_t p3); virtual void Updateframe(); - virtual void dim(uint8_t contrast); + virtual void dim(uint8_t contrast); // input has range 0..15 + virtual void dim8(uint8_t contrast, uint8_t contrast_gamma); // input has range 0..255, second arg has gamma correction for PWM virtual void pushColors(uint16_t *data, uint16_t len, boolean first); virtual void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); virtual void invertDisplay(boolean i); diff --git a/lib/lib_display/UDisplay/uDisplay.cpp b/lib/lib_display/UDisplay/uDisplay.cpp index 7e28086db..aa2dae903 100755 --- a/lib/lib_display/UDisplay/uDisplay.cpp +++ b/lib/lib_display/UDisplay/uDisplay.cpp @@ -70,6 +70,7 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) { bg_col = 0; splash_font = -1; rotmap_xmin = -1; + bpanel = -1; allcmd_mode = 0; startline = 0xA1; uint8_t section = 0; @@ -380,6 +381,7 @@ uDisplay::uDisplay(char *lp) : Renderer(800, 600) { Renderer *uDisplay::Init(void) { + extern bool UsePSRAM(void); // for any bpp below native 16 bits, we allocate a local framebuffer to copy into if (ep_mode || bpp < 16) { @@ -387,7 +389,7 @@ Renderer *uDisplay::Init(void) { #ifdef ESP8266 framebuffer = (uint8_t*)calloc((gxs * gys * bpp) / 8, 1); #else - if (psramFound()) { + if (UsePSRAM()) { framebuffer = (uint8_t*)heap_caps_malloc((gxs * gys * bpp) / 8, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); } else { framebuffer = (uint8_t*)calloc((gxs * gys * bpp) / 8, 1); @@ -422,9 +424,9 @@ Renderer *uDisplay::Init(void) { if (bpanel >= 0) { #ifdef ESP32 - ledcSetup(ESP32_PWM_CHANNEL, 4000, 8); + ledcSetup(ESP32_PWM_CHANNEL, 977, 8); // use 10 bits resolution like in Light ledcAttachPin(bpanel, ESP32_PWM_CHANNEL); - ledcWrite(ESP32_PWM_CHANNEL, 128); + ledcWrite(ESP32_PWM_CHANNEL, 8); // 38/255 correspond roughly to 50% visual brighness (with Gamma) #else pinMode(bpanel, OUTPUT); digitalWrite(bpanel, HIGH); @@ -901,8 +903,13 @@ void uDisplay::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { SPI_END_TRANSACTION } +//#define CD_XS gxs +//#define CD_YS gys +#define CD_XS width() +#define CD_YS height() + void uDisplay::fillScreen(uint16_t color) { - fillRect(0, 0, gxs, gys, color); + fillRect(0, 0, CD_XS, CD_YS, color); } // fill a rectangle @@ -919,9 +926,9 @@ void uDisplay::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t col return; } - if((x >= gxs) || (y >= gys)) return; - if((x + w - 1) >= gxs) w = gxs - x; - if((y + h - 1) >= gys) h = gys - y; + if((x >= CD_XS) || (y >= CD_YS)) return; + if((x + w - 1) >= CD_XS) w = CD_XS - x; + if((y + h - 1) >= CD_YS) h = CD_YS - y; SPI_BEGIN_TRANSACTION @@ -1342,7 +1349,7 @@ void uDisplay::DisplayOnff(int8_t on) { if (dsp_on != 0xff) spi_command_one(dsp_on); if (bpanel >= 0) { #ifdef ESP32 - ledcWrite(ESP32_PWM_CHANNEL, dimmer); + ledcWrite(ESP32_PWM_CHANNEL, dimmer8_gamma); #else digitalWrite(bpanel, HIGH); #endif @@ -1385,52 +1392,61 @@ void uDisplay::invertDisplay(boolean i) { void udisp_dimm(uint8_t dim); -void uDisplay::dim(uint8_t dim) { - dimmer = dim; +// input value is 0..15 +// void uDisplay::dim(uint8_t dim) { +// dim8(((uint32_t)dim * 255) / 15); +// } +// dim is 0..255 +void uDisplay::dim8(uint8_t dim, uint8_t dim_gamma) { // dimmer with 8 bits resolution, 0..255. Gamma correction must be done by caller + dimmer8 = dim; + dimmer8_gamma = dim_gamma; if (ep_mode) { return; } - if (interface == _UDSP_SPI) { - if (dimmer > 15) dimmer = 15; - dimmer = ((float)dimmer / 15.0) * 255.0; -#ifdef ESP32 - if (bpanel >= 0) { - ledcWrite(ESP32_PWM_CHANNEL, dimmer); - } else { - //udisp_dimm(dim); - if (dim_cbp) { - dim_cbp(dim); - } - } +#ifdef ESP32 // TODO should we also add a ESP8266 version for bpanel? + if (bpanel >= 0) { // is the BaclPanel GPIO configured + ledcWrite(ESP32_PWM_CHANNEL, dimmer8_gamma); + } else if (dim_cbp) { + dim_cbp(dim); + } #endif - - if (dim_op != 0xff) { + if (interface == _UDSP_SPI) { + if (dim_op != 0xff) { // send SPI command if dim configured SPI_BEGIN_TRANSACTION SPI_CS_LOW spi_command(dim_op); - spi_data8(dim); + spi_data8(dimmer8); SPI_CS_HIGH SPI_END_TRANSACTION } } } - // the cases are PSEUDO_OPCODES from MODULE_DESCRIPTOR // and may be exapnded with more opcodes void uDisplay::TS_RotConvert(int16_t *x, int16_t *y) { int16_t temp; + if (rot_t[cur_rot] & 0x80) { + temp = *y; + *y = *x; + *x = temp; + } + if (rotmap_xmin >= 0) { *y = map(*y, rotmap_ymin, rotmap_ymax, 0, gys); *x = map(*x, rotmap_xmin, rotmap_xmax, 0, gxs); + *x = constrain(*x, 0, gxs); + *y = constrain(*y, 0, gys); } - *x = constrain(*x, 0, gxs); - *y = constrain(*y, 0, gys); +// *x = constrain(*x, 0, gxs); +// *y = constrain(*y, 0, gys); - switch (rot_t[cur_rot]) { + //Serial.printf("rot 1 %d - %d\n",*x,*y ); + + switch (rot_t[cur_rot] & 0xf) { case 0: break; case 1: @@ -1447,7 +1463,15 @@ void uDisplay::TS_RotConvert(int16_t *x, int16_t *y) { *y = *x; *x = width() - temp; break; + case 4: + *x = width() - *x; + break; + case 5: + *y = height() - *y; + break; } + + //Serial.printf("rot 2 %d - %d\n",*x,*y ); } uint8_t uDisplay::strlen_ln(char *str) { diff --git a/lib/lib_display/UDisplay/uDisplay.h b/lib/lib_display/UDisplay/uDisplay.h index 42b8f47a3..8ce012bf5 100755 --- a/lib/lib_display/UDisplay/uDisplay.h +++ b/lib/lib_display/UDisplay/uDisplay.h @@ -90,7 +90,8 @@ class uDisplay : public Renderer { uint16_t fgcol(void); uint16_t bgcol(void); int8_t color_type(void); - void dim(uint8_t dim); +// void dim(uint8_t dim); // original version with 4 bits resolution 0..15 + virtual void dim8(uint8_t dim, uint8_t dim_gamma); // dimmer with 8 bits resolution, 0..255. Gamma correction must be done by caller uint16_t GetColorFromIndex(uint8_t index); void setRotation(uint8_t m); void fillScreen(uint16_t color); @@ -180,9 +181,10 @@ class uDisplay : public Renderer { int8_t spi_clk; int8_t spi_mosi; int8_t spi_dc; - int8_t bpanel; + int8_t bpanel; // backbanel GPIO, -1 if none int8_t spi_miso; - uint8_t dimmer; + uint8_t dimmer8; // 8 bits resolution, 0..255 + uint8_t dimmer8_gamma; // 8 bits resolution, 0..255, gamma corrected SPIClass *uspi; uint8_t sspi; SPISettings spiSettings; diff --git a/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.cpp b/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.cpp index a08608649..24c3590db 100644 --- a/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.cpp +++ b/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.cpp @@ -6,12 +6,12 @@ Copyright 2018, Ihor Melnyk #include "OpenTherm.h" OpenTherm::OpenTherm(int inPin, int outPin, bool isSlave): - status(OpenThermStatus::NOT_INITIALIZED), + status(OpenThermStatus::OPTH_NOT_INITIALIZED), inPin(inPin), outPin(outPin), isSlave(isSlave), response(0), - responseStatus(OpenThermResponseStatus::NONE), + responseStatus(OpenThermResponseStatus::OPTH_NONE), responseTimestamp(0), handleInterruptCallback(NULL), processResponseCallback(NULL) @@ -27,7 +27,7 @@ void OpenTherm::begin(void(*handleInterruptCallback)(void), void(*processRespons attachInterrupt(digitalPinToInterrupt(inPin), handleInterruptCallback, CHANGE); } activateBoiler(); - status = OpenThermStatus::READY; + status = OpenThermStatus::OPTH_READY; this->processResponseCallback = processResponseCallback; } @@ -38,7 +38,7 @@ void OpenTherm::begin(void(*handleInterruptCallback)(void)) bool ICACHE_RAM_ATTR OpenTherm::isReady() { - return status == OpenThermStatus::READY; + return status == OpenThermStatus::OPTH_READY; } int ICACHE_RAM_ATTR OpenTherm::readState() { @@ -75,9 +75,9 @@ bool OpenTherm::sendRequestAync(unsigned long request) if (!ready) return false; - status = OpenThermStatus::REQUEST_SENDING; + status = OpenThermStatus::OPTH_REQUEST_SENDING; response = 0; - responseStatus = OpenThermResponseStatus::NONE; + responseStatus = OpenThermResponseStatus::OPTH_NONE; sendBit(HIGH); //start bit for (int i = 31; i >= 0; i--) { @@ -86,7 +86,7 @@ bool OpenTherm::sendRequestAync(unsigned long request) sendBit(HIGH); //stop bit setIdleState(); - status = OpenThermStatus::RESPONSE_WAITING; + status = OpenThermStatus::OPTH_RESPONSE_WAITING; responseTimestamp = micros(); return true; } @@ -103,9 +103,9 @@ unsigned long OpenTherm::sendRequest(unsigned long request) bool OpenTherm::sendResponse(unsigned long request) { - status = OpenThermStatus::REQUEST_SENDING; + status = OpenThermStatus::OPTH_REQUEST_SENDING; response = 0; - responseStatus = OpenThermResponseStatus::NONE; + responseStatus = OpenThermResponseStatus::OPTH_NONE; sendBit(HIGH); //start bit for (int i = 31; i >= 0; i--) { @@ -113,7 +113,7 @@ bool OpenTherm::sendResponse(unsigned long request) } sendBit(HIGH); //stop bit setIdleState(); - status = OpenThermStatus::READY; + status = OpenThermStatus::OPTH_READY; return true; } @@ -127,7 +127,7 @@ void ICACHE_RAM_ATTR OpenTherm::handleInterrupt() if (isReady()) { if (isSlave && readState() == HIGH) { - status = OpenThermStatus::RESPONSE_WAITING; + status = OpenThermStatus::OPTH_RESPONSE_WAITING; } else { return; @@ -135,28 +135,28 @@ void ICACHE_RAM_ATTR OpenTherm::handleInterrupt() } unsigned long newTs = micros(); - if (status == OpenThermStatus::RESPONSE_WAITING) { + if (status == OpenThermStatus::OPTH_RESPONSE_WAITING) { if (readState() == HIGH) { - status = OpenThermStatus::RESPONSE_START_BIT; + status = OpenThermStatus::OPTH_RESPONSE_START_BIT; responseTimestamp = newTs; } else { - status = OpenThermStatus::RESPONSE_INVALID; + status = OpenThermStatus::OPTH_RESPONSE_INVALID; responseTimestamp = newTs; } } - else if (status == OpenThermStatus::RESPONSE_START_BIT) { + else if (status == OpenThermStatus::OPTH_RESPONSE_START_BIT) { if ((newTs - responseTimestamp < 750) && readState() == LOW) { - status = OpenThermStatus::RESPONSE_RECEIVING; + status = OpenThermStatus::OPTH_RESPONSE_RECEIVING; responseTimestamp = newTs; responseBitIndex = 0; } else { - status = OpenThermStatus::RESPONSE_INVALID; + status = OpenThermStatus::OPTH_RESPONSE_INVALID; responseTimestamp = newTs; } } - else if (status == OpenThermStatus::RESPONSE_RECEIVING) { + else if (status == OpenThermStatus::OPTH_RESPONSE_RECEIVING) { if ((newTs - responseTimestamp) > 750) { if (responseBitIndex < 32) { response = (response << 1) | !readState(); @@ -164,7 +164,7 @@ void ICACHE_RAM_ATTR OpenTherm::handleInterrupt() responseBitIndex++; } else { //stop bit - status = OpenThermStatus::RESPONSE_READY; + status = OpenThermStatus::OPTH_RESPONSE_READY; responseTimestamp = newTs; } } @@ -178,32 +178,32 @@ void OpenTherm::process() unsigned long ts = responseTimestamp; interrupts(); - if (st == OpenThermStatus::READY) return; + if (st == OpenThermStatus::OPTH_READY) return; unsigned long newTs = micros(); - if (st != OpenThermStatus::NOT_INITIALIZED && (newTs - ts) > 1000000) { - status = OpenThermStatus::READY; - responseStatus = OpenThermResponseStatus::TIMEOUT; + if (st != OpenThermStatus::OPTH_NOT_INITIALIZED && (newTs - ts) > 1000000) { + status = OpenThermStatus::OPTH_READY; + responseStatus = OpenThermResponseStatus::OPTH_TIMEOUT; if (processResponseCallback != NULL) { processResponseCallback(response, responseStatus); } } - else if (st == OpenThermStatus::RESPONSE_INVALID) { - status = OpenThermStatus::DELAY; - responseStatus = OpenThermResponseStatus::INVALID; + else if (st == OpenThermStatus::OPTH_RESPONSE_INVALID) { + status = OpenThermStatus::OPTH_DELAY; + responseStatus = OpenThermResponseStatus::OPTH_INVALID; if (processResponseCallback != NULL) { processResponseCallback(response, responseStatus); } } - else if (st == OpenThermStatus::RESPONSE_READY) { - status = OpenThermStatus::DELAY; - responseStatus = (isSlave ? isValidRequest(response) : isValidResponse(response)) ? OpenThermResponseStatus::SUCCESS : OpenThermResponseStatus::INVALID; + else if (st == OpenThermStatus::OPTH_RESPONSE_READY) { + status = OpenThermStatus::OPTH_DELAY; + responseStatus = (isSlave ? isValidRequest(response) : isValidResponse(response)) ? OpenThermResponseStatus::OPTH_SUCCESS : OpenThermResponseStatus::OPTH_INVALID; if (processResponseCallback != NULL) { processResponseCallback(response, responseStatus); } } - else if (st == OpenThermStatus::DELAY) { + else if (st == OpenThermStatus::OPTH_DELAY) { if ((newTs - ts) > 100000) { - status = OpenThermStatus::READY; + status = OpenThermStatus::OPTH_READY; } } } @@ -233,7 +233,7 @@ OpenThermMessageID OpenTherm::getDataID(unsigned long frame) unsigned long OpenTherm::buildRequest(OpenThermMessageType type, OpenThermMessageID id, unsigned int data) { unsigned long request = data; - if (type == OpenThermMessageType::WRITE_DATA) { + if (type == OpenThermMessageType::OPTH_WRITE_DATA) { request |= 1ul << 28; } request |= ((unsigned long)id) << 16; @@ -254,14 +254,14 @@ bool OpenTherm::isValidResponse(unsigned long response) { if (OpenTherm::parity(response)) return false; byte msgType = (response << 1) >> 29; - return msgType == READ_ACK || msgType == WRITE_ACK; + return msgType == OPTH_READ_ACK || msgType == OPTH_WRITE_ACK; } bool OpenTherm::isValidRequest(unsigned long request) { if (OpenTherm::parity(request)) return false; byte msgType = (request << 1) >> 29; - return msgType == READ_DATA || msgType == WRITE_DATA; + return msgType == OPTH_READ_DATA || msgType == OPTH_WRITE_DATA; } void OpenTherm::end() { @@ -273,10 +273,10 @@ void OpenTherm::end() { const char *OpenTherm::statusToString(OpenThermResponseStatus status) { switch (status) { - case NONE: return "NONE"; - case SUCCESS: return "SUCCESS"; - case INVALID: return "INVALID"; - case TIMEOUT: return "TIMEOUT"; + case OPTH_NONE: return "NONE"; + case OPTH_SUCCESS: return "SUCCESS"; + case OPTH_INVALID: return "INVALID"; + case OPTH_TIMEOUT: return "TIMEOUT"; default: return "UNKNOWN"; } } @@ -284,14 +284,14 @@ const char *OpenTherm::statusToString(OpenThermResponseStatus status) const char *OpenTherm::messageTypeToString(OpenThermMessageType message_type) { switch (message_type) { - case READ_DATA: return "READ_DATA"; - case WRITE_DATA: return "WRITE_DATA"; - case INVALID_DATA: return "INVALID_DATA"; - case RESERVED: return "RESERVED"; - case READ_ACK: return "READ_ACK"; - case WRITE_ACK: return "WRITE_ACK"; - case DATA_INVALID: return "DATA_INVALID"; - case UNKNOWN_DATA_ID: return "UNKNOWN_DATA_ID"; + case OPTH_READ_DATA: return "READ_DATA"; + case OPTH_WRITE_DATA: return "WRITE_DATA"; + case OPTH_INVALID_DATA: return "INVALID_DATA"; + case OPTH_RESERVED: return "RESERVED"; + case OPTH_READ_ACK: return "READ_ACK"; + case OPTH_WRITE_ACK: return "WRITE_ACK"; + case OPTH_DATA_INVALID: return "DATA_INVALID"; + case OPTH_UNKNOWN_DATA_ID: return "UNKNOWN_DATA_ID"; default: return "UNKNOWN"; } } @@ -301,25 +301,25 @@ const char *OpenTherm::messageTypeToString(OpenThermMessageType message_type) unsigned long OpenTherm::buildSetBoilerStatusRequest(bool enableCentralHeating, bool enableHotWater, bool enableCooling, bool enableOutsideTemperatureCompensation, bool enableCentralHeating2) { unsigned int data = enableCentralHeating | (enableHotWater << 1) | (enableCooling << 2) | (enableOutsideTemperatureCompensation << 3) | (enableCentralHeating2 << 4); data <<= 8; - return buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::Status, data); + return buildRequest(OpenThermMessageType::OPTH_READ_DATA, OpenThermMessageID::Status, data); } unsigned long OpenTherm::buildSetBoilerTemperatureRequest(float temperature) { unsigned int data = temperatureToData(temperature); - return buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TSet, data); + return buildRequest(OpenThermMessageType::OPTH_WRITE_DATA, OpenThermMessageID::TSet, data); } unsigned long OpenTherm::buildSetHotWaterTemperatureRequest(float temperature) { unsigned int data = temperatureToData(temperature); - return buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TdhwSet, data); + return buildRequest(OpenThermMessageType::OPTH_WRITE_DATA, OpenThermMessageID::TdhwSet, data); } unsigned long OpenTherm::buildGetBoilerTemperatureRequest() { - return buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::Tboiler, 0); + return buildRequest(OpenThermMessageType::OPTH_READ_DATA, OpenThermMessageID::Tboiler, 0); } unsigned long OpenTherm::buildSlaveConfigurationRequest() { - return buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::SConfigSMemberIDcode, 0); + return buildRequest(OpenThermMessageType::OPTH_READ_DATA, OpenThermMessageID::SConfigSMemberIDcode, 0); } //parsing responses @@ -387,22 +387,22 @@ float OpenTherm::getBoilerTemperature() { } float OpenTherm::getReturnTemperature() { - unsigned long response = sendRequest(buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Tret, 0)); + unsigned long response = sendRequest(buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::Tret, 0)); return isValidResponse(response) ? getFloat(response) : 0; } float OpenTherm::getModulation() { - unsigned long response = sendRequest(buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0)); + unsigned long response = sendRequest(buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::RelModLevel, 0)); return isValidResponse(response) ? getFloat(response) : 0; } float OpenTherm::getPressure() { - unsigned long response = sendRequest(buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0)); + unsigned long response = sendRequest(buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::CHPressure, 0)); return isValidResponse(response) ? getFloat(response) : 0; } unsigned char OpenTherm::getFault() { - return ((sendRequest(buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0)) >> 8) & 0xff); + return ((sendRequest(buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::ASFflags, 0)) >> 8) & 0xff); } unsigned long OpenTherm::getSlaveConfiguration() { diff --git a/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.h b/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.h index 22bf965ad..7f975ace1 100644 --- a/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.h +++ b/lib/lib_div/OpenTherm-0.9.0/src/OpenTherm.h @@ -17,26 +17,26 @@ P MGS-TYPE SPARE DATA-ID DATA-VALUE #include enum OpenThermResponseStatus { - NONE, - SUCCESS, - INVALID, - TIMEOUT + OPTH_NONE, + OPTH_SUCCESS, + OPTH_INVALID, + OPTH_TIMEOUT }; enum OpenThermMessageType { /* Master to Slave */ - READ_DATA = B000, - READ = READ_DATA, // for backwared compatibility - WRITE_DATA = B001, - WRITE = WRITE_DATA, // for backwared compatibility - INVALID_DATA = B010, - RESERVED = B011, + OPTH_READ_DATA = B000, + OPTH_READ = OPTH_READ_DATA, // for backwared compatibility + OPTH_WRITE_DATA = B001, + OPTH_WRITE = OPTH_WRITE_DATA, // for backwared compatibility + OPTH_INVALID_DATA = B010, + OPTH_RESERVED = B011, /* Slave to Master */ - READ_ACK = B100, - WRITE_ACK = B101, - DATA_INVALID = B110, - UNKNOWN_DATA_ID = B111 + OPTH_READ_ACK = B100, + OPTH_WRITE_ACK = B101, + OPTH_DATA_INVALID = B110, + OPTH_UNKNOWN_DATA_ID = B111 }; typedef OpenThermMessageType OpenThermRequestType; // for backwared compatibility @@ -99,15 +99,15 @@ enum OpenThermMessageID { }; enum OpenThermStatus { - NOT_INITIALIZED, - READY, - DELAY, - REQUEST_SENDING, - RESPONSE_WAITING, - RESPONSE_START_BIT, - RESPONSE_RECEIVING, - RESPONSE_READY, - RESPONSE_INVALID + OPTH_NOT_INITIALIZED, + OPTH_READY, + OPTH_DELAY, + OPTH_REQUEST_SENDING, + OPTH_RESPONSE_WAITING, + OPTH_RESPONSE_START_BIT, + OPTH_RESPONSE_RECEIVING, + OPTH_RESPONSE_READY, + OPTH_RESPONSE_INVALID }; class OpenTherm diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/.project b/lib/lib_div/arduino-mcp2515-1.0.1/.project new file mode 100644 index 000000000..0a2e228ff --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/.project @@ -0,0 +1,11 @@ + + + arduino-mcp2515 + + + + + + + + diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/.settings/org.eclipse.core.resources.prefs b/lib/lib_div/arduino-mcp2515-1.0.1/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..99f26c020 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/LICENSE.md b/lib/lib_div/arduino-mcp2515-1.0.1/LICENSE.md new file mode 100644 index 000000000..168474e24 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2013 Seeed Technology Inc. +Copyright (c) 2016 Dmitry + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/README.md b/lib/lib_div/arduino-mcp2515-1.0.1/README.md new file mode 100644 index 000000000..f8fbbb251 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/README.md @@ -0,0 +1,240 @@ +Arduino MCP2515 CAN interface library +--------------------------------------------------------- + + +
    +CAN-BUS is a common industrial bus because of its long travel distance, medium communication speed and high reliability. It is commonly found on modern machine tools and as an automotive diagnostic bus. This CAN-BUS Shield adopts MCP2515 CAN Bus controller with SPI interface and MCP2551 CAN transceiver to give your Arduino/Seeeduino CAN-BUS capibility. With an OBD-II converter cable added on and the OBD-II library imported, you are ready to build an onboard diagnostic device or data logger. + +- Implements CAN V2.0B at up to 1 Mb/s +- SPI Interface up to 10 MHz +- Standard (11 bit) and extended (29 bit) data and remote frames +- Two receive buffers with prioritized message storage + +## Library Installation + +1. Download the ZIP file from https://github.com/autowp/arduino-mcp2515/archive/master.zip +2. From the Arduino IDE: Sketch -> Include Library... -> Add .ZIP Library... +3. Restart the Arduino IDE to see the new "mcp2515" library with examples + + +
    +# Usage: + + + +## 1. Initialization + +To create connection with MCP2515 provide pin number where SPI CS is connected (10 by default), baudrate and mode + +The available modes are listed as follows: +```C++ +mcp2515.setNormalMode(); +mcp2515.setLoopbackMode(); +mcp2515.setListenOnlyMode(); +``` +The available baudrates are listed as follows: +```C++ +enum CAN_SPEED { + CAN_5KBPS, + CAN_10KBPS, + CAN_20KBPS, + CAN_31K25BPS, + CAN_33KBPS, + CAN_40KBPS, + CAN_50KBPS, + CAN_80KBPS, + CAN_83K3BPS, + CAN_95KBPS, + CAN_100KBPS, + CAN_125KBPS, + CAN_200KBPS, + CAN_250KBPS, + CAN_500KBPS, + CAN_1000KBPS +}; +``` + +
    +Example of initialization +```C++ +MCP2515 mcp2515(10); +mcp2515.reset(); +mcp2515.setBitrate(CAN_125KBPS); +mcp2515.setLoopbackMode(); +``` +
    + +
    +You can also set oscillator frequency for module when setting bitrate: +```C++ +mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ); +``` +
    +The available clock speeds are listed as follows: +```C++ +enum CAN_CLOCK { + MCP_20MHZ, + MCP_16MHZ, + MCP_8MHZ +}; +``` +Default value is MCP_16MHZ +
    + +Note: To transfer data on high speed of CAN interface via UART dont forget to update UART baudrate as necessary. + +##2. Frame data format + +Library uses Linux-like structure to store can frames; +```C++ +struct can_frame { + uint32_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ + uint8_t can_dlc; + uint8_t data[8]; +}; +``` +For additional information see [SocketCAN](https://www.kernel.org/doc/Documentation/networking/can.txt) + +## 3. Send Data +```C++ +MCP2515::ERROR sendMessage(const MCP2515::TXBn txbn, const struct can_frame *frame); +MCP2515::ERROR sendMessage(const struct can_frame *frame); +``` + +This is a function to send data onto the bus. + +For example, In the 'send' example, we have: + +```C++ +struct can_frame frame; +frame.can_id = 0x000; +frame.can_dlc = 4; +frame.data[0] = 0xFF; +frame.data[1] = 0xFF; +frame.data[2] = 0xFF; +frame.data[3] = 0xFF; + +/* send out the message to the bus and +tell other devices this is a standard frame from 0x00. */ +mcp2515.sendMessage(&frame); +``` + +```C++ +struct can_frame frame; +frame.can_id = 0x12345678 | CAN_EFF_MASK; +frame.can_dlc = 2; +frame.data[0] = 0xFF; +frame.data[1] = 0xFF; + +/* send out the message to the bus using second TX buffer and +tell other devices this is a extended frame from 0x12345678. */ +mcp2515.sendMessage(MCP2515::TXB1, &frame); +``` + + +
    +## 4. Receive Data + +The following function is used to receive data on the 'receive' node: + +```C++ +MCP2515::ERROR readMessage(const MCP2515::RXBn rxbn, struct can_frame *frame); +MCP2515::ERROR readMessage(struct can_frame *frame); +``` + +In conditions that masks and filters have been set. This function can only get frames that meet the requirements of masks and filters. + +You can choise one of two method to receive: interrup-based and polling + +Example of poll read + +```C++ +struct can_frame frame; + +void loop() { + if (mcp2515.readMessage(&frame) == MCP2515::ERROR_OK) { + // frame contains received message + } +} +``` + +Example of interrupt based read +```C++ +bool interrupt = false; +struct can_frame frame; + +void irqHandler() { + interrupt = true; +} + +void setup() { + ... + attachInterrupt(0, irqHandler, FALLING); +} + +void loop() { + if (interrupt) { + interrupt = false; + + uint8_t irq = mcp2515.getInterrupts(); + + if (irq & MCP2515::CANINTF_RX0IF) { + if (mcp2515.readMessage(MCP2515::RXB0, &frame) == MCP2515::ERROR_OK) { + // frame contains received from RXB0 message + } + } + + if (irq & MCP2515::CANINTF_RX1IF) { + if (mcp2515.readMessage(MCP2515::RXB1, &frame) == MCP2515::ERROR_OK) { + // frame contains received from RXB1 message + } + } + } +} +``` +
    +##5. Set Receive Mask and Filter + +There are 2 receive mask registers and 5 filter registers on the controller chip that guarantee you get data from the target device. They are useful especially in a large network consisting of numerous nodes. + +We provide two functions for you to utilize these mask and filter registers. They are: + +```C++ +MCP2515::ERROR setFilterMask(const MASK mask, const bool ext, const uint32_t ulData) +MCP2515::ERROR setFilter(const RXF num, const bool ext, const uint32_t ulData) +``` + +**MASK mask** represents one of two mask **MCP2515::MASK0** or **MCP2515::MASK1** + +**RXF num** represents one of six acceptance filters registers from **MCP2515::RXF0** to **MCP2515::RXF5** + +**ext** represents the status of the frame. **false** means it's a mask or filter for a standard frame. **true** means it's for a extended frame. + +**ulData** represents the content of the mask of filter. + + + +
    +## 6. Examples + +Example implementation of CanHacker (lawicel) protocol based device: [https://github.com/autowp/can-usb](https://github.com/autowp/can-usb) + +
    +For more information, please refer to [wiki page](http://www.seeedstudio.com/wiki/CAN-BUS_Shield). + + +---- + +This software is written by loovee ([luweicong@seeed.cc](luweicong@seeed.cc "luweicong@seeed.cc")) for seeed studio,
    +Updated by Dmitry ([https://github.com/autowp](https://github.com/autowp "https://github.com/autowp"))
    +and is licensed under [The MIT License](http://opensource.org/licenses/mit-license.php). Check [LICENSE.md](LICENSE.md) for more information.
    + +Contributing to this software is warmly welcomed. You can do this basically by
    +[forking](https://help.github.com/articles/fork-a-repo), committing modifications and then [pulling requests](https://help.github.com/articles/using-pull-requests) (follow the links above
    +for operating guide). Adding change log and your contact into file header is encouraged.
    +Thanks for your contribution. + +Seeed Studio is an open hardware facilitation company based in Shenzhen, China.
    +Benefiting from local manufacture power and convenient global logistic system,
    +we integrate resources to serve new era of innovation. Seeed also works with
    +global distributors and partners to push open hardware movement.
    diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/can.h b/lib/lib_div/arduino-mcp2515-1.0.1/can.h new file mode 100644 index 000000000..96175b1f2 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/can.h @@ -0,0 +1,45 @@ +#ifndef CAN_H_ +#define CAN_H_ + +#include + + +typedef unsigned char __u8; +typedef unsigned short __u16; +typedef unsigned long __u32; + + +/* special address description flags for the CAN_ID */ +#define CAN_EFF_FLAG 0x80000000UL /* EFF/SFF is set in the MSB */ +#define CAN_RTR_FLAG 0x40000000UL /* remote transmission request */ +#define CAN_ERR_FLAG 0x20000000UL /* error message frame */ + +/* valid bits in CAN ID for frame formats */ +#define CAN_SFF_MASK 0x000007FFUL /* standard frame format (SFF) */ +#define CAN_EFF_MASK 0x1FFFFFFFUL /* extended frame format (EFF) */ +#define CAN_ERR_MASK 0x1FFFFFFFUL /* omit EFF, RTR, ERR flags */ + +/* + * Controller Area Network Identifier structure + * + * bit 0-28 : CAN identifier (11/29 bit) + * bit 29 : error message frame flag (0 = data frame, 1 = error message) + * bit 30 : remote transmission request flag (1 = rtr frame) + * bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit) + */ +typedef __u32 canid_t; + +#define CAN_SFF_ID_BITS 11 +#define CAN_EFF_ID_BITS 29 + +/* CAN payload length and DLC definitions according to ISO 11898-1 */ +#define CAN_MAX_DLC 8 +#define CAN_MAX_DLEN 8 + +struct can_frame { + canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ + __u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */ + __u8 data[CAN_MAX_DLEN] __attribute__((aligned(8))); +}; + +#endif /* CAN_H_ */ diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/examples/CAN_read/CAN_read.ino b/lib/lib_div/arduino-mcp2515-1.0.1/examples/CAN_read/CAN_read.ino new file mode 100644 index 000000000..b43e56a52 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/examples/CAN_read/CAN_read.ino @@ -0,0 +1,39 @@ +#include +#include + +struct can_frame canMsg; +MCP2515 mcp2515(10); + + +void setup() { + Serial.begin(115200); + SPI.begin(); + + mcp2515.reset(); + mcp2515.setBitrate(CAN_125KBPS); + mcp2515.setNormalMode(); + + Serial.println("------- CAN Read ----------"); + Serial.println("ID DLC DATA"); +} + +void loop() { + + if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) { + + Serial.print(canMsg.can_id, HEX); // print ID + Serial.print(" "); + Serial.print(canMsg.can_dlc, HEX); // print DLC + Serial.print(" "); + + for (int i = 0; i +#include + +struct can_frame canMsg1; +struct can_frame canMsg2; +MCP2515 mcp2515(10); + + +void setup() { + + canMsg1.can_id = 0x0F6; + canMsg1.can_dlc = 8; + canMsg1.data[0] = 0x8E; + canMsg1.data[1] = 0x87; + canMsg1.data[2] = 0x32; + canMsg1.data[3] = 0xFA; + canMsg1.data[4] = 0x26; + canMsg1.data[5] = 0x8E; + canMsg1.data[6] = 0xBE; + canMsg1.data[7] = 0x86; + + canMsg2.can_id = 0x036; + canMsg2.can_dlc = 8; + canMsg2.data[0] = 0x0E; + canMsg2.data[1] = 0x00; + canMsg2.data[2] = 0x00; + canMsg2.data[3] = 0x08; + canMsg2.data[4] = 0x01; + canMsg2.data[5] = 0x00; + canMsg2.data[6] = 0x00; + canMsg2.data[7] = 0xA0; + + while (!Serial); + Serial.begin(115200); + SPI.begin(); + + mcp2515.reset(); + mcp2515.setBitrate(CAN_125KBPS); + mcp2515.setNormalMode(); + + Serial.println("Example: Write to CAN"); +} + +void loop() { + + mcp2515.sendMessage(&canMsg1); + mcp2515.sendMessage(&canMsg2); + + Serial.println("Messages sent"); + + delay(100); + +} diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/keywords.txt b/lib/lib_div/arduino-mcp2515-1.0.1/keywords.txt new file mode 100644 index 000000000..9dd85de32 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/keywords.txt @@ -0,0 +1,14 @@ +MCP2515 KEYWORD1 + +CAN_5KBPS LITERAL1 +CAN_10KBPS LITERAL1 +CAN_20KBPS LITERAL1 +CAN_40KBPS LITERAL1 +CAN_50KBPS LITERAL1 +CAN_80KBPS LITERAL1 +CAN_100KBPS LITERAL1 +CAN_125KBPS LITERAL1 +CAN_200KBPS LITERAL1 +CAN_250KBPS LITERAL1 +CAN_500KBPS LITERAL1 +CAN_1000KBPS LITERAL1 diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.cpp b/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.cpp new file mode 100644 index 000000000..efa7c795c --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.cpp @@ -0,0 +1,693 @@ +#include "mcp2515.h" + +const struct MCP2515::TXBn_REGS MCP2515::TXB[MCP2515::N_TXBUFFERS] = { + {MCP_TXB0CTRL, MCP_TXB0SIDH, MCP_TXB0DATA}, + {MCP_TXB1CTRL, MCP_TXB1SIDH, MCP_TXB1DATA}, + {MCP_TXB2CTRL, MCP_TXB2SIDH, MCP_TXB2DATA} +}; + +const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = { + {MCP_RXB0CTRL, MCP_RXB0SIDH, MCP_RXB0DATA, CANINTF_RX0IF}, + {MCP_RXB1CTRL, MCP_RXB1SIDH, MCP_RXB1DATA, CANINTF_RX1IF} +}; + +MCP2515::MCP2515(const uint8_t _CS) +{ + SPI.begin(); + + SPICS = _CS; + pinMode(SPICS, OUTPUT); + endSPI(); +} + +void MCP2515::startSPI() { + SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); + digitalWrite(SPICS, LOW); +} + +void MCP2515::endSPI() { + digitalWrite(SPICS, HIGH); + SPI.endTransaction(); +} + +MCP2515::ERROR MCP2515::reset(void) +{ + startSPI(); + SPI.transfer(INSTRUCTION_RESET); + endSPI(); + + delay(10); + + uint8_t zeros[14]; + memset(zeros, 0, sizeof(zeros)); + setRegisters(MCP_TXB0CTRL, zeros, 14); + setRegisters(MCP_TXB1CTRL, zeros, 14); + setRegisters(MCP_TXB2CTRL, zeros, 14); + + setRegister(MCP_RXB0CTRL, 0); + setRegister(MCP_RXB1CTRL, 0); + + setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); + + modifyRegister(MCP_RXB0CTRL, + RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT, + RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT); + modifyRegister(MCP_RXB1CTRL, RXBnCTRL_RXM_MASK, RXBnCTRL_RXM_STDEXT); + + // clear filters and masks + /*RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; + for (int i=0; i<6; i++) { + ERROR result = setFilter(filters[i], true, 0); + if (result != ERROR_OK) { + return result; + } + } + + MASK masks[] = {MASK0, MASK1}; + for (int i=0; i<2; i++) { + ERROR result = setFilterMask(masks[i], true, 0); + if (result != ERROR_OK) { + return result; + } + }*/ + + return ERROR_OK; +} + +uint8_t MCP2515::readRegister(const REGISTER reg) +{ + startSPI(); + SPI.transfer(INSTRUCTION_READ); + SPI.transfer(reg); + uint8_t ret = SPI.transfer(0x00); + endSPI(); + + return ret; +} + +void MCP2515::readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n) +{ + startSPI(); + SPI.transfer(INSTRUCTION_READ); + SPI.transfer(reg); + // mcp2515 has auto-increment of address-pointer + for (uint8_t i=0; i> 8); + canid = (uint16_t)(id >> 16); + buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); + buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); + buffer[MCP_SIDL] |= TXB_EXIDE_MASK; + buffer[MCP_SIDH] = (uint8_t) (canid >> 5); + } else { + buffer[MCP_SIDH] = (uint8_t) (canid >> 3); + buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); + buffer[MCP_EID0] = 0; + buffer[MCP_EID8] = 0; + } +} + +MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uint32_t ulData) +{ + ERROR res = setConfigMode(); + if (res != ERROR_OK) { + return res; + } + + uint8_t tbufdata[4]; + prepareId(tbufdata, ext, ulData); + + REGISTER reg; + switch (mask) { + case MASK0: reg = MCP_RXM0SIDH; break; + case MASK1: reg = MCP_RXM1SIDH; break; + default: + return ERROR_FAIL; + } + + setRegisters(reg, tbufdata, 4); + + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t ulData) +{ + ERROR res = setConfigMode(); + if (res != ERROR_OK) { + return res; + } + + REGISTER reg; + + switch (num) { + case RXF0: reg = MCP_RXF0SIDH; break; + case RXF1: reg = MCP_RXF1SIDH; break; + case RXF2: reg = MCP_RXF2SIDH; break; + case RXF3: reg = MCP_RXF3SIDH; break; + case RXF4: reg = MCP_RXF4SIDH; break; + case RXF5: reg = MCP_RXF5SIDH; break; + default: + return ERROR_FAIL; + } + + uint8_t tbufdata[4]; + prepareId(tbufdata, ext, ulData); + setRegisters(reg, tbufdata, 4); + + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) +{ + const struct TXBn_REGS *txbuf = &TXB[txbn]; + + uint8_t data[13]; + + bool ext = (frame->can_id & CAN_EFF_FLAG); + bool rtr = (frame->can_id & CAN_RTR_FLAG); + uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); + + prepareId(data, ext, id); + + data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; + + memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); + + setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); + + modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); + + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::sendMessage(const struct can_frame *frame) +{ + if (frame->can_dlc > CAN_MAX_DLEN) { + return ERROR_FAILTX; + } + + TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; + + for (int i=0; iCTRL); + if ( (ctrlval & TXB_TXREQ) == 0 ) { + return sendMessage(txBuffers[i], frame); + } + } + + return ERROR_FAILTX; +} + +MCP2515::ERROR MCP2515::readMessage(const RXBn rxbn, struct can_frame *frame) +{ + const struct RXBn_REGS *rxb = &RXB[rxbn]; + + uint8_t tbufdata[5]; + + readRegisters(rxb->SIDH, tbufdata, 5); + + uint32_t id = (tbufdata[MCP_SIDH]<<3) + (tbufdata[MCP_SIDL]>>5); + + if ( (tbufdata[MCP_SIDL] & TXB_EXIDE_MASK) == TXB_EXIDE_MASK ) { + id = (id<<2) + (tbufdata[MCP_SIDL] & 0x03); + id = (id<<8) + tbufdata[MCP_EID8]; + id = (id<<8) + tbufdata[MCP_EID0]; + id |= CAN_EFF_FLAG; + } + + uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); + if (dlc > CAN_MAX_DLEN) { + return ERROR_FAIL; + } + + uint8_t ctrl = readRegister(rxb->CTRL); + if (ctrl & RXBnCTRL_RTR) { + id |= CAN_RTR_FLAG; + } + + frame->can_id = id; + frame->can_dlc = dlc; + + readRegisters(rxb->DATA, frame->data, dlc); + + modifyRegister(MCP_CANINTF, rxb->CANINTF_RXnIF, 0); + + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame) +{ + ERROR rc; + uint8_t stat = getStatus(); + + if ( stat & STAT_RX0IF ) { + rc = readMessage(RXB0, frame); + } else if ( stat & STAT_RX1IF ) { + rc = readMessage(RXB1, frame); + } else { + rc = ERROR_NOMSG; + } + + return rc; +} + +bool MCP2515::checkReceive(void) +{ + uint8_t res = getStatus(); + if ( res & STAT_RXIF_MASK ) { + return true; + } else { + return false; + } +} + +bool MCP2515::checkError(void) +{ + uint8_t eflg = getErrorFlags(); + + if ( eflg & EFLG_ERRORMASK ) { + return true; + } else { + return false; + } +} + +uint8_t MCP2515::getErrorFlags(void) +{ + return readRegister(MCP_EFLG); +} + +void MCP2515::clearRXnOVRFlags(void) +{ + modifyRegister(MCP_EFLG, EFLG_RX0OVR | EFLG_RX1OVR, 0); +} + +uint8_t MCP2515::getInterrupts(void) +{ + return readRegister(MCP_CANINTF); +} + +void MCP2515::clearInterrupts(void) +{ + setRegister(MCP_CANINTF, 0); +} + +uint8_t MCP2515::getInterruptMask(void) +{ + return readRegister(MCP_CANINTE); +} + +void MCP2515::clearTXInterrupts(void) +{ + modifyRegister(MCP_CANINTF, (CANINTF_TX0IF | CANINTF_TX1IF | CANINTF_TX2IF), 0); +} + +void MCP2515::clearRXnOVR(void) +{ + uint8_t eflg = getErrorFlags(); + if (eflg != 0) { + clearRXnOVRFlags(); + clearInterrupts(); + //modifyRegister(MCP_CANINTF, CANINTF_ERRIF, 0); + } + +} + +void MCP2515::clearMERR() +{ + //modifyRegister(MCP_EFLG, EFLG_RX0OVR | EFLG_RX1OVR, 0); + //clearInterrupts(); + modifyRegister(MCP_CANINTF, CANINTF_MERRF, 0); +} diff --git a/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.h b/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.h new file mode 100644 index 000000000..84c4216b1 --- /dev/null +++ b/lib/lib_div/arduino-mcp2515-1.0.1/mcp2515.h @@ -0,0 +1,466 @@ +#ifndef _MCP2515_H_ +#define _MCP2515_H_ + +#include +#include +#include "can.h" + +/* + * Speed 8M + */ +#define MCP_8MHz_1000kBPS_CFG1 (0x00) +#define MCP_8MHz_1000kBPS_CFG2 (0x80) +#define MCP_8MHz_1000kBPS_CFG3 (0x80) + +#define MCP_8MHz_500kBPS_CFG1 (0x00) +#define MCP_8MHz_500kBPS_CFG2 (0x90) +#define MCP_8MHz_500kBPS_CFG3 (0x82) + +#define MCP_8MHz_250kBPS_CFG1 (0x00) +#define MCP_8MHz_250kBPS_CFG2 (0xB1) +#define MCP_8MHz_250kBPS_CFG3 (0x85) + +#define MCP_8MHz_200kBPS_CFG1 (0x00) +#define MCP_8MHz_200kBPS_CFG2 (0xB4) +#define MCP_8MHz_200kBPS_CFG3 (0x86) + +#define MCP_8MHz_125kBPS_CFG1 (0x01) +#define MCP_8MHz_125kBPS_CFG2 (0xB1) +#define MCP_8MHz_125kBPS_CFG3 (0x85) + +#define MCP_8MHz_100kBPS_CFG1 (0x01) +#define MCP_8MHz_100kBPS_CFG2 (0xB4) +#define MCP_8MHz_100kBPS_CFG3 (0x86) + +#define MCP_8MHz_80kBPS_CFG1 (0x01) +#define MCP_8MHz_80kBPS_CFG2 (0xBF) +#define MCP_8MHz_80kBPS_CFG3 (0x87) + +#define MCP_8MHz_50kBPS_CFG1 (0x03) +#define MCP_8MHz_50kBPS_CFG2 (0xB4) +#define MCP_8MHz_50kBPS_CFG3 (0x86) + +#define MCP_8MHz_40kBPS_CFG1 (0x03) +#define MCP_8MHz_40kBPS_CFG2 (0xBF) +#define MCP_8MHz_40kBPS_CFG3 (0x87) + +#define MCP_8MHz_33k3BPS_CFG1 (0x47) +#define MCP_8MHz_33k3BPS_CFG2 (0xE2) +#define MCP_8MHz_33k3BPS_CFG3 (0x85) + +#define MCP_8MHz_31k25BPS_CFG1 (0x07) +#define MCP_8MHz_31k25BPS_CFG2 (0xA4) +#define MCP_8MHz_31k25BPS_CFG3 (0x84) + +#define MCP_8MHz_20kBPS_CFG1 (0x07) +#define MCP_8MHz_20kBPS_CFG2 (0xBF) +#define MCP_8MHz_20kBPS_CFG3 (0x87) + +#define MCP_8MHz_10kBPS_CFG1 (0x0F) +#define MCP_8MHz_10kBPS_CFG2 (0xBF) +#define MCP_8MHz_10kBPS_CFG3 (0x87) + +#define MCP_8MHz_5kBPS_CFG1 (0x1F) +#define MCP_8MHz_5kBPS_CFG2 (0xBF) +#define MCP_8MHz_5kBPS_CFG3 (0x87) + +/* + * speed 16M + */ +#define MCP_16MHz_1000kBPS_CFG1 (0x00) +#define MCP_16MHz_1000kBPS_CFG2 (0xD0) +#define MCP_16MHz_1000kBPS_CFG3 (0x82) + +#define MCP_16MHz_500kBPS_CFG1 (0x00) +#define MCP_16MHz_500kBPS_CFG2 (0xF0) +#define MCP_16MHz_500kBPS_CFG3 (0x86) + +#define MCP_16MHz_250kBPS_CFG1 (0x41) +#define MCP_16MHz_250kBPS_CFG2 (0xF1) +#define MCP_16MHz_250kBPS_CFG3 (0x85) + +#define MCP_16MHz_200kBPS_CFG1 (0x01) +#define MCP_16MHz_200kBPS_CFG2 (0xFA) +#define MCP_16MHz_200kBPS_CFG3 (0x87) + +#define MCP_16MHz_125kBPS_CFG1 (0x03) +#define MCP_16MHz_125kBPS_CFG2 (0xF0) +#define MCP_16MHz_125kBPS_CFG3 (0x86) + +#define MCP_16MHz_100kBPS_CFG1 (0x03) +#define MCP_16MHz_100kBPS_CFG2 (0xFA) +#define MCP_16MHz_100kBPS_CFG3 (0x87) + +#define MCP_16MHz_80kBPS_CFG1 (0x03) +#define MCP_16MHz_80kBPS_CFG2 (0xFF) +#define MCP_16MHz_80kBPS_CFG3 (0x87) + +#define MCP_16MHz_50kBPS_CFG1 (0x07) +#define MCP_16MHz_50kBPS_CFG2 (0xFA) +#define MCP_16MHz_50kBPS_CFG3 (0x87) + +#define MCP_16MHz_40kBPS_CFG1 (0x07) +#define MCP_16MHz_40kBPS_CFG2 (0xFF) +#define MCP_16MHz_40kBPS_CFG3 (0x87) + +#define MCP_16MHz_33k3BPS_CFG1 (0x4E) +#define MCP_16MHz_33k3BPS_CFG2 (0xF1) +#define MCP_16MHz_33k3BPS_CFG3 (0x85) + +#define MCP_16MHz_20kBPS_CFG1 (0x0F) +#define MCP_16MHz_20kBPS_CFG2 (0xFF) +#define MCP_16MHz_20kBPS_CFG3 (0x87) + +#define MCP_16MHz_10kBPS_CFG1 (0x1F) +#define MCP_16MHz_10kBPS_CFG2 (0xFF) +#define MCP_16MHz_10kBPS_CFG3 (0x87) + +#define MCP_16MHz_5kBPS_CFG1 (0x3F) +#define MCP_16MHz_5kBPS_CFG2 (0xFF) +#define MCP_16MHz_5kBPS_CFG3 (0x87) + +/* + * speed 20M + */ +#define MCP_20MHz_1000kBPS_CFG1 (0x00) +#define MCP_20MHz_1000kBPS_CFG2 (0xD9) +#define MCP_20MHz_1000kBPS_CFG3 (0x82) + +#define MCP_20MHz_500kBPS_CFG1 (0x00) +#define MCP_20MHz_500kBPS_CFG2 (0xFA) +#define MCP_20MHz_500kBPS_CFG3 (0x87) + +#define MCP_20MHz_250kBPS_CFG1 (0x41) +#define MCP_20MHz_250kBPS_CFG2 (0xFB) +#define MCP_20MHz_250kBPS_CFG3 (0x86) + +#define MCP_20MHz_200kBPS_CFG1 (0x01) +#define MCP_20MHz_200kBPS_CFG2 (0xFF) +#define MCP_20MHz_200kBPS_CFG3 (0x87) + +#define MCP_20MHz_125kBPS_CFG1 (0x03) +#define MCP_20MHz_125kBPS_CFG2 (0xFA) +#define MCP_20MHz_125kBPS_CFG3 (0x87) + +#define MCP_20MHz_100kBPS_CFG1 (0x04) +#define MCP_20MHz_100kBPS_CFG2 (0xFA) +#define MCP_20MHz_100kBPS_CFG3 (0x87) + +#define MCP_20MHz_80kBPS_CFG1 (0x04) +#define MCP_20MHz_80kBPS_CFG2 (0xFF) +#define MCP_20MHz_80kBPS_CFG3 (0x87) + +#define MCP_20MHz_50kBPS_CFG1 (0x09) +#define MCP_20MHz_50kBPS_CFG2 (0xFA) +#define MCP_20MHz_50kBPS_CFG3 (0x87) + +#define MCP_20MHz_40kBPS_CFG1 (0x09) +#define MCP_20MHz_40kBPS_CFG2 (0xFF) +#define MCP_20MHz_40kBPS_CFG3 (0x87) + +enum CAN_CLOCK { + MCP_20MHZ, + MCP_16MHZ, + MCP_8MHZ +}; + +enum CAN_SPEED { + CAN_5KBPS, + CAN_10KBPS, + CAN_20KBPS, + CAN_31K25BPS, + CAN_33KBPS, + CAN_40KBPS, + CAN_50KBPS, + CAN_80KBPS, + CAN_83K3BPS, + CAN_95KBPS, + CAN_100KBPS, + CAN_125KBPS, + CAN_200KBPS, + CAN_250KBPS, + CAN_500KBPS, + CAN_1000KBPS +}; + +class MCP2515 +{ + public: + enum ERROR { + ERROR_OK = 0, + ERROR_FAIL = 1, + ERROR_ALLTXBUSY = 2, + ERROR_FAILINIT = 3, + ERROR_FAILTX = 4, + ERROR_NOMSG = 5 + }; + + enum MASK { + MASK0, + MASK1 + }; + + enum RXF { + RXF0 = 0, + RXF1 = 1, + RXF2 = 2, + RXF3 = 3, + RXF4 = 4, + RXF5 = 5 + }; + + enum RXBn { + RXB0 = 0, + RXB1 = 1 + }; + + enum TXBn { + TXB0 = 0, + TXB1 = 1, + TXB2 = 2 + }; + + enum /*class*/ CANINTF : uint8_t { + CANINTF_RX0IF = 0x01, + CANINTF_RX1IF = 0x02, + CANINTF_TX0IF = 0x04, + CANINTF_TX1IF = 0x08, + CANINTF_TX2IF = 0x10, + CANINTF_ERRIF = 0x20, + CANINTF_WAKIF = 0x40, + CANINTF_MERRF = 0x80 + }; + + private: + static const uint8_t CANCTRL_REQOP = 0xE0; + static const uint8_t CANCTRL_ABAT = 0x10; + static const uint8_t CANCTRL_OSM = 0x08; + static const uint8_t CANCTRL_CLKEN = 0x04; + static const uint8_t CANCTRL_CLKPRE = 0x03; + + enum /*class*/ CANCTRL_REQOP_MODE : uint8_t { + CANCTRL_REQOP_NORMAL = 0x00, + CANCTRL_REQOP_SLEEP = 0x20, + CANCTRL_REQOP_LOOPBACK = 0x40, + CANCTRL_REQOP_LISTENONLY = 0x60, + CANCTRL_REQOP_CONFIG = 0x80, + CANCTRL_REQOP_POWERUP = 0xE0 + }; + + static const uint8_t CANSTAT_OPMOD = 0xE0; + static const uint8_t CANSTAT_ICOD = 0x0E; + + static const uint8_t TXB_EXIDE_MASK = 0x08; + static const uint8_t DLC_MASK = 0x0F; + static const uint8_t RTR_MASK = 0x40; + + static const uint8_t RXBnCTRL_RXM_STD = 0x20; + static const uint8_t RXBnCTRL_RXM_EXT = 0x40; + static const uint8_t RXBnCTRL_RXM_STDEXT = 0x00; + static const uint8_t RXBnCTRL_RXM_MASK = 0x60; + static const uint8_t RXBnCTRL_RTR = 0x08; + static const uint8_t RXB0CTRL_BUKT = 0x04; + + static const uint8_t MCP_SIDH = 0; + static const uint8_t MCP_SIDL = 1; + static const uint8_t MCP_EID8 = 2; + static const uint8_t MCP_EID0 = 3; + static const uint8_t MCP_DLC = 4; + static const uint8_t MCP_DATA = 5; + + enum /*class*/ STAT : uint8_t { + STAT_RX0IF = (1<<0), + STAT_RX1IF = (1<<1) + }; + + static const uint8_t STAT_RXIF_MASK = STAT_RX0IF | STAT_RX1IF; + + enum /*class*/ TXBnCTRL : uint8_t { + TXB_ABTF = 0x40, + TXB_MLOA = 0x20, + TXB_TXERR = 0x10, + TXB_TXREQ = 0x08, + TXB_TXIE = 0x04, + TXB_TXP = 0x03 + }; + + enum /*class*/ EFLG : uint8_t { + EFLG_RX1OVR = (1<<7), + EFLG_RX0OVR = (1<<6), + EFLG_TXBO = (1<<5), + EFLG_TXEP = (1<<4), + EFLG_RXEP = (1<<3), + EFLG_TXWAR = (1<<2), + EFLG_RXWAR = (1<<1), + EFLG_EWARN = (1<<0) + }; + + static const uint8_t EFLG_ERRORMASK = EFLG_RX1OVR + | EFLG_RX0OVR + | EFLG_TXBO + | EFLG_TXEP + | EFLG_RXEP; + + enum /*class*/ INSTRUCTION : uint8_t { + INSTRUCTION_WRITE = 0x02, + INSTRUCTION_READ = 0x03, + INSTRUCTION_BITMOD = 0x05, + INSTRUCTION_LOAD_TX0 = 0x40, + INSTRUCTION_LOAD_TX1 = 0x42, + INSTRUCTION_LOAD_TX2 = 0x44, + INSTRUCTION_RTS_TX0 = 0x81, + INSTRUCTION_RTS_TX1 = 0x82, + INSTRUCTION_RTS_TX2 = 0x84, + INSTRUCTION_RTS_ALL = 0x87, + INSTRUCTION_READ_RX0 = 0x90, + INSTRUCTION_READ_RX1 = 0x94, + INSTRUCTION_READ_STATUS = 0xA0, + INSTRUCTION_RX_STATUS = 0xB0, + INSTRUCTION_RESET = 0xC0 + }; + + enum /*class*/ REGISTER : uint8_t { + MCP_RXF0SIDH = 0x00, + MCP_RXF0SIDL = 0x01, + MCP_RXF0EID8 = 0x02, + MCP_RXF0EID0 = 0x03, + MCP_RXF1SIDH = 0x04, + MCP_RXF1SIDL = 0x05, + MCP_RXF1EID8 = 0x06, + MCP_RXF1EID0 = 0x07, + MCP_RXF2SIDH = 0x08, + MCP_RXF2SIDL = 0x09, + MCP_RXF2EID8 = 0x0A, + MCP_RXF2EID0 = 0x0B, + MCP_CANSTAT = 0x0E, + MCP_CANCTRL = 0x0F, + MCP_RXF3SIDH = 0x10, + MCP_RXF3SIDL = 0x11, + MCP_RXF3EID8 = 0x12, + MCP_RXF3EID0 = 0x13, + MCP_RXF4SIDH = 0x14, + MCP_RXF4SIDL = 0x15, + MCP_RXF4EID8 = 0x16, + MCP_RXF4EID0 = 0x17, + MCP_RXF5SIDH = 0x18, + MCP_RXF5SIDL = 0x19, + MCP_RXF5EID8 = 0x1A, + MCP_RXF5EID0 = 0x1B, + MCP_TEC = 0x1C, + MCP_REC = 0x1D, + MCP_RXM0SIDH = 0x20, + MCP_RXM0SIDL = 0x21, + MCP_RXM0EID8 = 0x22, + MCP_RXM0EID0 = 0x23, + MCP_RXM1SIDH = 0x24, + MCP_RXM1SIDL = 0x25, + MCP_RXM1EID8 = 0x26, + MCP_RXM1EID0 = 0x27, + MCP_CNF3 = 0x28, + MCP_CNF2 = 0x29, + MCP_CNF1 = 0x2A, + MCP_CANINTE = 0x2B, + MCP_CANINTF = 0x2C, + MCP_EFLG = 0x2D, + MCP_TXB0CTRL = 0x30, + MCP_TXB0SIDH = 0x31, + MCP_TXB0SIDL = 0x32, + MCP_TXB0EID8 = 0x33, + MCP_TXB0EID0 = 0x34, + MCP_TXB0DLC = 0x35, + MCP_TXB0DATA = 0x36, + MCP_TXB1CTRL = 0x40, + MCP_TXB1SIDH = 0x41, + MCP_TXB1SIDL = 0x42, + MCP_TXB1EID8 = 0x43, + MCP_TXB1EID0 = 0x44, + MCP_TXB1DLC = 0x45, + MCP_TXB1DATA = 0x46, + MCP_TXB2CTRL = 0x50, + MCP_TXB2SIDH = 0x51, + MCP_TXB2SIDL = 0x52, + MCP_TXB2EID8 = 0x53, + MCP_TXB2EID0 = 0x54, + MCP_TXB2DLC = 0x55, + MCP_TXB2DATA = 0x56, + MCP_RXB0CTRL = 0x60, + MCP_RXB0SIDH = 0x61, + MCP_RXB0SIDL = 0x62, + MCP_RXB0EID8 = 0x63, + MCP_RXB0EID0 = 0x64, + MCP_RXB0DLC = 0x65, + MCP_RXB0DATA = 0x66, + MCP_RXB1CTRL = 0x70, + MCP_RXB1SIDH = 0x71, + MCP_RXB1SIDL = 0x72, + MCP_RXB1EID8 = 0x73, + MCP_RXB1EID0 = 0x74, + MCP_RXB1DLC = 0x75, + MCP_RXB1DATA = 0x76 + }; + + static const uint32_t SPI_CLOCK = 10000000; // 10MHz + + static const int N_TXBUFFERS = 3; + static const int N_RXBUFFERS = 2; + + static const struct TXBn_REGS { + REGISTER CTRL; + REGISTER SIDH; + REGISTER DATA; + } TXB[N_TXBUFFERS]; + + static const struct RXBn_REGS { + REGISTER CTRL; + REGISTER SIDH; + REGISTER DATA; + CANINTF CANINTF_RXnIF; + } RXB[N_RXBUFFERS]; + + uint8_t SPICS; + + private: + + void startSPI(); + void endSPI(); + + ERROR setMode(const CANCTRL_REQOP_MODE mode); + + uint8_t readRegister(const REGISTER reg); + void readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n); + void setRegister(const REGISTER reg, const uint8_t value); + void setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n); + void modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data); + + void prepareId(uint8_t *buffer, const bool ext, const uint32_t id); + + public: + MCP2515(const uint8_t _CS); + ERROR reset(void); + ERROR setConfigMode(); + ERROR setListenOnlyMode(); + ERROR setSleepMode(); + ERROR setLoopbackMode(); + ERROR setNormalMode(); + ERROR setBitrate(const CAN_SPEED canSpeed); + ERROR setBitrate(const CAN_SPEED canSpeed, const CAN_CLOCK canClock); + ERROR setFilterMask(const MASK num, const bool ext, const uint32_t ulData); + ERROR setFilter(const RXF num, const bool ext, const uint32_t ulData); + ERROR sendMessage(const TXBn txbn, const struct can_frame *frame); + ERROR sendMessage(const struct can_frame *frame); + ERROR readMessage(const RXBn rxbn, struct can_frame *frame); + ERROR readMessage(struct can_frame *frame); + bool checkReceive(void); + bool checkError(void); + uint8_t getErrorFlags(void); + void clearRXnOVRFlags(void); + uint8_t getInterrupts(void); + uint8_t getInterruptMask(void); + void clearInterrupts(void); + void clearTXInterrupts(void); + uint8_t getStatus(void); + void clearRXnOVR(void); + void clearMERR(); +}; + +#endif diff --git a/lib/lib_div/esp-knx-ip-0.5.2/src/esp-knx-ip-send.cpp b/lib/lib_div/esp-knx-ip-0.5.2/src/esp-knx-ip-send.cpp index 270c89b64..92492167a 100644 --- a/lib/lib_div/esp-knx-ip-0.5.2/src/esp-knx-ip-send.cpp +++ b/lib/lib_div/esp-knx-ip-0.5.2/src/esp-knx-ip-send.cpp @@ -80,6 +80,7 @@ void ESPKNXIP::send(address_t const &receiver, knx_command_type_t ct, uint8_t da udp.beginPacketMulticast(MULTICAST_IP, MULTICAST_PORT, WiFi.localIP()); udp.write(buf, len); udp.endPacket(); + delay(1); } diff --git a/lib/lib_div/lib_mail/src/ESP_Mail_FS.h b/lib/lib_div/lib_mail/src/ESP_Mail_FS.h index 973a33492..0e9007fcb 100644 --- a/lib/lib_div/lib_mail/src/ESP_Mail_FS.h +++ b/lib/lib_div/lib_mail/src/ESP_Mail_FS.h @@ -19,15 +19,8 @@ */ // #define ESP_Mail_DEFAULT_FLASH_FS SPIFFS -#ifdef ESP8266 - #include - #define ESP_Mail_DEFAULT_FLASH_FS LittleFS -#endif - -#ifdef ESP32 - #include - #define ESP_Mail_DEFAULT_FLASH_FS LITTLEFS -#endif +#include +#define ESP_Mail_DEFAULT_FLASH_FS LittleFS /** * To use SD card file systems with different hardware interface diff --git a/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.cpp b/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.cpp new file mode 100644 index 000000000..ee7e3c232 --- /dev/null +++ b/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.cpp @@ -0,0 +1,779 @@ +/* + FrogmoreScd40.h - SCD40/SCD41 I2C CO2(+temp+RH) sensor support for Tasmota, + based on frogmore42's FrogmoreScd30.h + + Copyright (C) 2019-2021 Frogmore42, Arnold-n + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. +*/ +#include +#include +#include +#include +#include + +// References are made to Sensirion datasheet at +// https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9.5_CO2/Sensirion_CO2_Sensors_SCD4x_Datasheet.pdf +// +// Basic Commands Chapter 3.5 +#define COMMAND_SCD40_START_PERIODIC_MEASUREMENT 0x21b1 +#define COMMAND_SCD40_READ_MEASUREMENT 0xec05 +#define COMMAND_SCD40_STOP_PERIODIC_MEASUREMENT 0x3f86 + +// On-chip output signal compensation Chapter 3.6 +#define COMMAND_SCD40_SET_TEMPERATURE_OFFSET 0x241d +#define COMMAND_SCD40_GET_TEMPERATURE_OFFSET 0x2318 +#define COMMAND_SCD40_SET_SENSOR_ALTITUDE 0x2427 +#define COMMAND_SCD40_GET_SENSOR_ALTITUDE 0x2322 +#define COMMAND_SCD40_SET_AMBIENT_PRESSURE 0xe000 + +// Field calibration Chapter 3.7 +#define COMMAND_SCD40_PERFORM_FORCED_RECALIBRATION 0x362f +#define COMMAND_SCD40_SET_AUTOMATIC_SELF_CALIBRATION_ENABLED 0x2416 +#define COMMAND_SCD40_GET_AUTOMATIC_SELF_CALIBRATION_ENABLED 0x2313 + +// Low power Chapter 3.8 +#define COMMAND_SCD40_START_LOW_POWER_PERIODIC_MEASUREMENT 0x21ac +#define COMMAND_SCD40_GET_DATA_READY_STATUS 0xe4b8 + +// Advanced features Chapter 3.9 +#define COMMAND_SCD40_PERSIST_SETTINGS 0x3615 +#define COMMAND_SCD40_GET_SERIAL_NUMBER 0x3682 +#define COMMAND_SCD40_PERFORM_SELF_TEST 0x3639 +#define COMMAND_SCD40_PERFORM_FACTORY_RESET 0x3632 +#define COMMAND_SCD40_REINIT 0x3646 + +// Low power single shot (SCD41 only) Chapter 3.10 +// only for SCD41 +#define COMMAND_SCD40_MEASURE_SINGLE_SHOT 0x219d +#define COMMAND_SCD40_MEASURE_SINGLE_SHOT_RHT_ONLY 0x2196 + +#define SCD40_DATA_REGISTER_BYTES 2 +#define SCD40_DATA_REGISTER_WITH_CRC 3 +#define SCD40_MEAS_BYTES 9 + +#ifdef SCD40_DEBUG +enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE, LOG_LEVEL_ALL}; +char scd40log_data[180]; +#define SCD40_DEBUG_LOG_LEVEL LOG_LEVEL_INFO +#endif + +// helper and private functions + +/*--------------------------------------------------------------------------- + Function : medianfilter() + In : pointer to array of SCD40_MEDIAN_FILTER_SIZE values + Out : a uint16_t which is the middle value of the array + Job : search of the median + Notice : replaced SCD30 alg by partial bubble-sort, slightly slower, but not fixed-size + ---------------------------------------------------------------------------*/ +#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); } +#define PIX_SWAP(a,b) { uint16_t temp=(a);(a)=(b);(b)=temp; } + +uint16_t FrogmoreScd40::medianfilter(uint16_t * p) +{ + for (int8_t i = SCD40_MEDIAN_FILTER_SIZE-1; i >= (SCD40_MEDIAN_FILTER_SIZE-1)/2; i--) + { + for (uint8_t j=0; j < i; j++) + { + PIX_SORT(p[j], p[j+1]); + } + } + return(p[(SCD40_MEDIAN_FILTER_SIZE-1)/2]); +} + +#ifdef SCD40_DEBUG +void FrogmoreScd40::AddLog(uint8_t loglevel) +{ + if (loglevel <= SCD40_DEBUG_LOG_LEVEL) + { + Serial.printf("%s\r\n", scd40log_data); + } +} +#endif + +uint8_t FrogmoreScd40::computeCRC8(uint8_t data[], uint8_t len) +// Computes the CRC that the SCD40 uses +{ + uint8_t crc = 0xFF; //Init with 0xFF + + for (uint8_t x = 0 ; x < len ; x++) + { + crc ^= data[x]; // XOR-in the next input byte + for (uint8_t i = 0 ; i < 8 ; i++) + { + if ((crc & 0x80) != 0) + crc = (uint8_t)((crc << 1) ^ 0x31); + else + crc <<= 1; + } + } + return crc; //No output reflection +} + +// Sends stream of bytes to device +int FrogmoreScd40::sendBytes(void *pInput, uint8_t len) +{ + uint8_t *pBytes = (uint8_t *) pInput; + int result; + uint8_t errorBytes = 0; // number of bytes that had an error in transmission +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40SendBytes: len: %d data: 0x %02X %02X %02X | 0x %02X %02X %02X | 0x %02X %02X %02X", len, pBytes[0], pBytes[1], pBytes[2], pBytes[3], pBytes[4], pBytes[5], pBytes[6], pBytes[7], pBytes[8]); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + pWire->beginTransmission(this->i2cAddress); + errorBytes = len - (pWire->write(pBytes, len)); + result = pWire->endTransmission(); + if (errorBytes || result) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40SendBytes: errorBytes: %d | Wire.end: %d", errorBytes, result); + AddLog(LOG_LEVEL_INFO); +#endif + } + result <<= 8; // leave room for error bytes number + result |= errorBytes; // low byte has number of bytes that were not written correctly + return (result); +} + +// Gets a number of bytes from device +int FrogmoreScd40::getBytes(void *pOutput, uint8_t len) +{ + uint8_t *pBytes = (uint8_t *) pOutput; + uint8_t result; + + result = pWire->requestFrom(this->i2cAddress, len); + if (len != result) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40GetBytes: wire request expected %d got: %d", len, result); + AddLog(LOG_LEVEL_INFO); +#endif + return (ERROR_SCD40_NOT_ENOUGH_BYTES_ERROR); + } + + if (pWire->available()) + { + for (int x = 0; x < len; x++) + { + pBytes[x] = pWire->read(); + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40GetBytes: len: %d data: 0x %02X %02X %02X | 0x %02X %02X %02X | 0x %02X %02X %02X", len, pBytes[0], pBytes[1], pBytes[2], pBytes[3], pBytes[4], pBytes[5], pBytes[6], pBytes[7], pBytes[8]); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + return (ERROR_SCD40_NO_ERROR); + } + return (ERROR_SCD40_UNKNOWN_ERROR); +} + +//Sends just a command, no arguments, no CRC +int FrogmoreScd40::sendCommand(uint16_t command) +{ + uint8_t data[2]; + data[0] = command >> 8; + data[1] = command & 0xFF; + int error = sendBytes(data, sizeof(data)); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40SendCommand: sendBytes failed, error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + } + return (error); +} + +//Sends a command along with arguments and CRC +int FrogmoreScd40::sendCommandArguments(uint16_t command, uint16_t arguments) +{ + uint8_t data[5]; + data[0] = command >> 8; + data[1] = command & 0xFF; + data[2] = arguments >> 8; + data[3] = arguments & 0xFF; + data[4] = computeCRC8(&data[2], 2); //Calc CRC on the arguments only, not the command + int error = sendBytes(data, sizeof(data)); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40SendCommandArguments: sendBytes failed, error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + } + return (error); +} + +// Sends a command along with arguments and CRC, wait 400ms, fetch results +// NOT TESTED - not sure whether this works +int FrogmoreScd40::sendCommandArgumentsFetchResult(uint16_t command, uint16_t arguments, uint16_t* pData) +{ + sendCommandArguments(command, arguments); + delay(400); // the SCD30 uses clock stretching to give it time to prepare data, waiting here makes it work, seems this works also for SCD40 + uint8_t data[SCD40_DATA_REGISTER_WITH_CRC]; + int error = getBytes(data, sizeof(data)); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadRegister: Scd40GetBytes error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + uint16 regValue; + error = get16BitRegCheckCRC(data, ®Value); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadRegister: Scd40get16BitRegCheckCRC error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + *pData = regValue; + return (ERROR_SCD40_NO_ERROR); +} + +int FrogmoreScd40::get16BitRegCheckCRC(void* pInput, uint16_t *pData) +{ + uint8_t *pBytes = (uint8_t *) pInput; + uint8_t expectedCRC = computeCRC8(pBytes, SCD40_DATA_REGISTER_BYTES); + if (expectedCRC != pBytes[SCD40_DATA_REGISTER_BYTES]) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40get16BitRegCheckCRC: expected: 0x%02X, but got: 0x%02X", expectedCRC, pBytes[SCD40_DATA_REGISTER_BYTES]); + AddLog(LOG_LEVEL_INFO); + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40get16BitRegCheckCRC: data: 0x%02X, 0x%02X, 0x%02X", pBytes[0], pBytes[1], pBytes[2]); + AddLog(LOG_LEVEL_INFO); +#endif + return (ERROR_SCD40_CRC_ERROR); + } + *pData = (uint16_t) pBytes[0] << 8 | pBytes[1]; // data from SCD40 is Big-Endian + return (ERROR_SCD40_NO_ERROR); +} + +//Gets two bytes (and check CRC) from SCD40 +int FrogmoreScd40::readRegisterCnt(uint16_t registerAddress, uint16_t* pData, uint8_t cnt) +{ + int error = sendCommand(registerAddress); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadRegister: SendCommand error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + delay(1); // the SCD30 uses clock stretching to give it time to prepare data, waiting here makes it work, seems this works also for SCD40 + uint8_t data[SCD40_DATA_REGISTER_WITH_CRC]; + for (uint8_t c = 0; c < cnt; c++) { + error = getBytes(data, sizeof(data)); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadRegister: Scd40GetBytes error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + uint16 regValue; + error = get16BitRegCheckCRC(data, ®Value); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadRegister: Scd40get16BitRegCheckCRC error: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + pData[c] = regValue; + } + return (ERROR_SCD40_NO_ERROR); +} + +int FrogmoreScd40::readRegister(uint16_t registerAddress, uint16_t* pData) +{ + int error=readRegisterCnt(registerAddress, pData, 1); + return (error); +} + +// public functions + +void FrogmoreScd40::begin(TwoWire *pWire, uint8_t i2cAddress) +{ + this->duringMeasurement = 0; + this->i2cAddress = i2cAddress; + this->co2EAverage = 0; + if (pWire == NULL) + { + this->pWire = &Wire; + } + else + { + this->pWire = pWire; + } + co2NewDataLocation = -1; // indicates there is no data, so the 1st non-zero data point needs to fill up the median filter +#ifdef ESP8266 + this->pWire->setClockStretchLimit(200000); +#endif +} + +void FrogmoreScd40::begin(uint8_t i2cAddress) +{ + begin(NULL, i2cAddress); +} + +void FrogmoreScd40::begin(TwoWire *pWire) +{ + begin(pWire, SCD40_ADDRESS); +} + +void FrogmoreScd40::begin(void) +{ + begin(NULL, SCD40_ADDRESS); +} + +// twi_status() attempts to read out any data left that is holding SDA low, so a new transaction can take place +// something like (http://www.forward.com.au/pfod/ArduinoProgramming/I2C_ClearBus/index.html) +int FrogmoreScd40::clearI2CBus(void) +{ +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "clearI2CBus"); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif +#ifdef ESP8266 + return (twi_status()); +#else + return 0; +#endif +} + +// Function order below follows SCD40 datasheet +// Basic Commands Chapter 3.5 + +int FrogmoreScd40::startPeriodicMeasurement(void) +{ +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Start periodic measurement"); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + DuringMeasurement = 1; + return(sendCommand(COMMAND_SCD40_START_PERIODIC_MEASUREMENT)); +} + +int FrogmoreScd40::readMeasurement( + uint16 *pCO2_ppm, + uint16 *pCO2EAvg_ppm, + float *pTemperature, + float *pHumidity +) +{ +// Should only be called in DuringMeasurement mode or +// after calling measure_single_hot{,_rht_only} +// but this is currently not verified + bool isAvailable = false; + int error = 0; + uint16 tempCO2; + uint16 tempHumidity; + uint16 tempTemperature; + + error = getDataReadyStatus(&isAvailable); + if (error) + { + return (error); + } + if (!isAvailable) + { + return (ERROR_SCD40_NO_DATA); + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: have data"); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + error = sendCommand(COMMAND_SCD40_READ_MEASUREMENT); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: send command failed: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + delay(1); // the SCD40 uses clock streching to give it time to prepare data, waiting here makes it work + uint8_t bytes[SCD40_MEAS_BYTES]; + // there are (3) 16-bit values, each with a CRC in the measurement data + // the chip sends all of these, unless stopped by an early NACK - not supported here + error = getBytes(bytes, SCD40_MEAS_BYTES); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: Scd40GetBytes command failed: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: Scd40GetBytes data: 0x %02X %02X %02X | 0x %02X %02X %02X | 0x %02X %02X %02X", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8]); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + error = get16BitRegCheckCRC(&bytes[0], &tempCO2); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: Scd40Get16BitsCheckCRC 1st command failed: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + error = get16BitRegCheckCRC(&bytes[3], &tempTemperature); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: Scd40Get16BitsCheckCRC 2nd command failed: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + error = get16BitRegCheckCRC(&bytes[6], &tempHumidity); + if (error) + { +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: Scd40Get16BitsCheckCRC 3rd command failed: 0x%lX", error); + AddLog(LOG_LEVEL_INFO); +#endif + return (error); + } + // tempCO2 = 0 occurs after Measure_single_shot_RHT_only; no reason for error like for SCD30, but don't add to history, + // and take care to handle special case where no CO2 measurement was seen yet + if (tempCO2 > 0) + { + // add tempCO2 measurement to history + if (co2NewDataLocation < 0) + { + co2EAverage = tempCO2; + for (int x = 0; x < SCD40_MEDIAN_FILTER_SIZE; x++) + { + co2History[x] = tempCO2; + co2NewDataLocation = 1; + } + } + else + { + co2History[co2NewDataLocation++] = tempCO2; + if (co2NewDataLocation >= SCD40_MEDIAN_FILTER_SIZE) + { + co2NewDataLocation = 0; + } + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: co2History: %ld, %ld, %ld, %ld, %ld", co2History[0], co2History[1], co2History[2], co2History[3], co2History[4]); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + } + if ((tempCO2 > 0) || (co2NewDataLocation >= 0)) { + // find median of history; copy array since the median filter function will re-arrange it + uint16_t temp[SCD40_MEDIAN_FILTER_SIZE]; + for (int x = 0; x < SCD40_MEDIAN_FILTER_SIZE; x++) + { + temp[x] = co2History[x]; + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: temp: %ld, %ld, %ld, %ld, %ld", temp[0], temp[1], temp[2], temp[3], temp[4]); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + *pCO2_ppm = medianfilter(temp); + } else { + *pCO2_ppm = 0; // never seen real CO2 measurement, but need to return something: return 0 + } +#ifdef SCD40_DEBUG + snprintf_P(scd40log_data, sizeof(scd40log_data), "Scd40ReadMeasurement: CO2_ppm: %ld", *pCO2_ppm); + AddLog(LOG_LEVEL_DEBUG_MORE); +#endif + if ((pCO2EAvg_ppm) && (tempCO2 > 0)) + { + int16_t delta = (int16_t) *pCO2_ppm - (int16_t) co2EAverage; + int16_t change = delta / 32; + co2EAverage += change; + *pCO2EAvg_ppm = co2EAverage; + } + *pTemperature = (175.0 * tempTemperature) / 65536 - 45; + *pHumidity = (100.0 * tempHumidity) / 65536; + return (ERROR_SCD40_NO_ERROR); +} + +int FrogmoreScd40::forceStopPeriodicMeasurement(void) +{ + DuringMeasurement = 0; + return (sendCommand(COMMAND_SCD40_STOP_PERIODIC_MEASUREMENT)); +} + +int FrogmoreScd40::stopPeriodicMeasurement(void) +{ + if (!DuringMeasurement) { + return (ERROR_SCD40_NOT_IN_MEASUREMENT_MODE); + } + DuringMeasurement = 0; + return (sendCommand(COMMAND_SCD40_STOP_PERIODIC_MEASUREMENT)); +} + +// On-chip output signal compensation Chapter 3.6 + +int FrogmoreScd40::setTemperatureOffset(float offset_degC) +// influences RH and T readings. Does not influence CO2 measurement. Default is 4 degrees Celcius. +// to save setting to the EEPROM, call persistSetting() +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + if (offset_degC >= 0) + { + uint16_t offset_xDegC = (uint16_t) (offset_degC * 374.491); + return (sendCommandArguments(COMMAND_SCD40_SET_TEMPERATURE_OFFSET, offset_xDegC)); + } + else + { + return (ERROR_SCD40_INVALID_VALUE); + } +} + +int FrogmoreScd40::setTemperatureOffset(uint16_t offset_centiDegC) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t offset_xDegC = (uint16_t) (offset_centiDegC * 3.74491); + return (sendCommandArguments(COMMAND_SCD40_SET_TEMPERATURE_OFFSET, offset_xDegC)); +} + +int FrogmoreScd40::getTemperatureOffset(float *pOffset_degC) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t value; + int error = readRegister(COMMAND_SCD40_GET_TEMPERATURE_OFFSET, &value); + if (!error) + { + // result is 175 * value/2^16, need to convert to degrees + *pOffset_degC = (float) value / 374.491; + } + return (error); +} + +int FrogmoreScd40::getTemperatureOffset(uint16_t *pOffset_centiDegC) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t value; + int error = readRegister(COMMAND_SCD40_GET_TEMPERATURE_OFFSET, &value); + if (!error) + { + // result is 175 * value/2^16, need to convert to degrees + *pOffset_centiDegC = (uint16_t) (value / 3.74491); + } + return (error); +} + +int FrogmoreScd40::setSensorAltitude(uint16_t height_meter) +// Default is 0 meter above sea-level; +// to save setting to the EEPROM, call persistSetting() +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommandArguments(COMMAND_SCD40_SET_SENSOR_ALTITUDE, height_meter)); +} + +int FrogmoreScd40::getSensorAltitude(uint16_t *pHeight_meter) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (readRegister(COMMAND_SCD40_GET_SENSOR_ALTITUDE, pHeight_meter)); +} + +int FrogmoreScd40::setAmbientPressure(uint16_t airPressure_mbar) +// Overrides any pressure compensation based on a previously set sensor altitude +{ + // allowed DuringMeasurement + return (sendCommandArguments(COMMAND_SCD40_SET_AMBIENT_PRESSURE, airPressure_mbar)); +} + +// Field calibration Chapter 3.7 + +int FrogmoreScd40::performForcedRecalibration(uint16_t co2_ppm) +// Calibrates with a CO2 reference value immediately +// Use only in planned operation mode, for >3 minutes in constant CO2 environment +// issue stop_periodic_measurement, and then wait 500ms, before calling this function +// it takes 400ms for this command to complete +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t FRC_result; + sendCommandArgumentsFetchResult(COMMAND_SCD40_PERFORM_FORCED_RECALIBRATION, co2_ppm, &FRC_result); + if (FRC_result == 0xffff) { + // a return value of 0xffff indicates failure + return(ERROR_SCD40_FRC_FAILED); + } + return (ERROR_SCD40_NO_ERROR); +} + +int FrogmoreScd40::setAutomaticSelfCalibrationDisabled(void) +// to save setting to the EEPROM, call persistSetting() +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + bool isAuto = false; + return (setAutomaticSelfCalibrationEnabled(isAuto)); +} + +int FrogmoreScd40::setAutomaticSelfCalibrationEnabled(void) +// to save setting to the EEPROM, call persistSetting() +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + bool isAuto = true; + return (setAutomaticSelfCalibrationEnabled(isAuto)); +} + +int FrogmoreScd40::setAutomaticSelfCalibrationEnabled(bool isAuto) +// to save setting to the EEPROM, call persistSetting() +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + bool value = !!isAuto; // using NOT operator twice makes sure value is 0 or 1 + return (sendCommandArguments(COMMAND_SCD40_SET_AUTOMATIC_SELF_CALIBRATION_ENABLED, value)); +} + +int FrogmoreScd40::getAutomaticSelfCalibrationEnabled(uint16_t *pIsAuto) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t value = 0; + int error = readRegister(COMMAND_SCD40_GET_AUTOMATIC_SELF_CALIBRATION_ENABLED, &value); + if (!error) + { + *pIsAuto = value != 0; + } + return (error); +} + +// Low power Chapter 3.8 + +int FrogmoreScd40::startLowPowerPeriodicMeasurement(void) +// Comment: unclear how to stop this operation mode? +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_START_LOW_POWER_PERIODIC_MEASUREMENT)); + DuringMeasurement = 1; +} + +int FrogmoreScd40::getDataReadyStatus(bool *pIsAvailable) +{ + // allowed DuringMeasurement + uint16_t isDataAvailable = false; + int error = readRegister(COMMAND_SCD40_GET_DATA_READY_STATUS, &isDataAvailable); + if (!error) + { + *pIsAvailable = (isDataAvailable & 0x07ff) != 0; + } + return (error); +} + +// Advanced features Chapter 3.9 + +int FrogmoreScd40::persistSettings(void) +// Store configuration settings such as temperature offset, +// sensor altitude, and ASC enable/disabled parameter +// EEPROM is guaranteed to endure at least 2000 write cycles before failure. +// The field calibration history (FRC and ASC) is stored in a separate EEPROM. +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_PERSIST_SETTINGS)); +} + +int FrogmoreScd40::getSerialNumber(uint16_t *pSerialNumberArray) +// Serialnr is 48 bits = 3 16-bit words +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + uint16_t value; + int error = readRegisterCnt(COMMAND_SCD40_GET_SERIAL_NUMBER, pSerialNumberArray, 3); + return (error); +} + +int FrogmoreScd40::performSelfTest(uint16_t *pMalfunction) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (readRegister(COMMAND_SCD40_PERFORM_SELF_TEST, pMalfunction)); +} + +int FrogmoreScd40::performFactoryReset(void) +// resets all configuration settings in EEPROM and +// erases FRC and ASC algorithm history +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_PERFORM_FACTORY_RESET)); +} + +int FrogmoreScd40::reinit(void) +// reinitailizes sensor from EEPROM user settings +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_REINIT)); +} + +// Low power single shot (SCD41 only) Chapter 3.10 +// (on-demand measurements) + +int FrogmoreScd40::measureSingleShot(void) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_MEASURE_SINGLE_SHOT)); +} + +int FrogmoreScd40::measureSingleShotRhtOnly(void) +{ + if (DuringMeasurement) { + return (ERROR_SCD40_BUSY_MEASURING); + } + return (sendCommand(COMMAND_SCD40_MEASURE_SINGLE_SHOT_RHT_ONLY)); +} diff --git a/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.h b/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.h new file mode 100644 index 000000000..454c8ab5d --- /dev/null +++ b/lib/lib_i2c/FrogmoreScd40/FrogmoreScd40.h @@ -0,0 +1,118 @@ +/* + FrogmoreScd40.cpp - SCD40/SCD41 I2C CO2(+temp+RH) sensor support for Tasmota, + based on frogmore42's FrogmoreScd30.cpp + + Copyright (C) 2019-2021 Frogmore42, Arnold-n + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. +*/ + +// SCD40/SCD41 code based on SCD30 code + +#pragma once + +#include "Arduino.h" + +//#define SCD40_DEBUG + +#define SCD40_ADDRESS 0x62 +#define ERROR_SCD40_NO_ERROR 0 +#define ERROR_SCD40_NO_DATA 0x80000000 +#define ERROR_SCD40_UNKNOWN_ERROR 0x1000000 +#define ERROR_SCD40_CRC_ERROR 0x2000000 +#define ERROR_SCD40_NOT_ENOUGH_BYTES_ERROR 0x3000000 +#define ERROR_SCD40_INVALID_VALUE 0x6000000 +#define ERROR_SCD40_BUSY_MEASURING 0x7000000 +#define ERROR_SCD40_NOT_IN_MEASUREMENT_MODE 0x8000000 +#define ERROR_SCD40_FRC_FAILED 0x9000000 + +#define SCD40_MEDIAN_FILTER_SIZE 1 + +class FrogmoreScd40 +{ + public: + FrogmoreScd40() {}; + // Constructors + // the SCD40 only lists a single i2c address, so not necesary to specify + // + void begin(void); + void begin(uint8_t _i2cAddress); + void begin(TwoWire *pWire); + void begin(TwoWire *pWire, uint8_t _i2cAddress); + + int reinit(void); + int clearI2CBus(void); // this is a HARD reset of the IC2 bus to restore communication, it will disrupt the bus + + int getSensorAltitude(uint16_t *pHeight_meter); + int getAutomaticSelfCalibrationEnabled(uint16_t *pIsAuto); + int getTemperatureOffset(float *pOffset_degC); + int getTemperatureOffset(uint16_t *pOffset_centiDegC); + + int setSensorAltitude(uint16_t height_meter); + int setAmbientPressure(uint16_t airPressure_mbar); + int setTemperatureOffset(float offset_degC); + int setTemperatureOffset(uint16_t offset_centiDegC); + int setAutomaticSelfCalibrationDisabled(void); + int setAutomaticSelfCalibrationEnabled(void); + int setAutomaticSelfCalibrationEnabled(bool isAuto); + int performForcedRecalibration(uint16_t co2_ppm); + int getSerialNumber(uint16_t *pSerialNumberArray); + int startLowPowerPeriodicMeasurement(void); + int persistSettings(void); + int performSelfTest(uint16_t *pMalfunction); + int performFactoryReset(void); + + int startPeriodicMeasurement(void); + int getDataReadyStatus(bool *pIsAvailable); + int readMeasurement( + uint16 *pCO2_ppm, + uint16 *pCO2EAvg_ppm, + float *pTemperature, + float *pHumidity + ); + int stopPeriodicMeasurement(void); + int forceStopPeriodicMeasurement(void); +// SCD41 only: + int measureSingleShot(void); + int measureSingleShotRhtOnly(void); + + private: + uint8_t duringMeasurement; + uint8_t i2cAddress; + TwoWire *pWire; + uint16_t co2AvgExtra; + uint16_t co2History[SCD40_MEDIAN_FILTER_SIZE]; + uint16_t co2EAverage; + int8_t co2NewDataLocation; // location to put new CO2 data for median filter + bool DuringMeasurement; + + uint8_t computeCRC8(uint8_t data[], uint8_t len); + uint16_t medianfilter(uint16_t * p); + int sendBytes(void *pInput, uint8_t len); + int getBytes(void *pOutput, uint8_t len); + int sendCommand(uint16_t command); + int sendCommandArguments(uint16_t command, uint16_t arguments); + int sendCommandArgumentsFetchResult(uint16_t command, uint16_t arguments, uint16_t* pData); + int get16BitRegCheckCRC(void* pInput, uint16_t* pData); + int readRegisterCnt(uint16_t registerAddress, uint16_t* pData, uint8_t cnt); + int readRegister(uint16_t registerAddress, uint16_t* pData); +#ifdef SCD40_DEBUG + void AddLog(uint8_t loglevel); +#endif +}; diff --git a/lib/lib_i2c/FrogmoreScd40/library.properties b/lib/lib_i2c/FrogmoreScd40/library.properties new file mode 100644 index 000000000..5dead8f63 --- /dev/null +++ b/lib/lib_i2c/FrogmoreScd40/library.properties @@ -0,0 +1,9 @@ +name=FrogmoreScd40 +version= +author=Frogmore42,Arnold-n +maintainer=Arnold-n +sentence=SCD40 +paragraph=SCD40 +category=Sensor +url= +architectures=esp8266,esp32 diff --git a/lib/lib_rf/rc-switch/src/RCSwitch.cpp b/lib/lib_rf/rc-switch/src/RCSwitch.cpp index d222551b3..aed787bea 100644 --- a/lib/lib_rf/rc-switch/src/RCSwitch.cpp +++ b/lib/lib_rf/rc-switch/src/RCSwitch.cpp @@ -56,33 +56,58 @@ /* Protocol description format * - * {Pulse length, Preamble, Sync bit, "0" bit, "1" bit, Inverted Signal, Guard time} - * - * Pulse length: pulse duration Te in microseconds, - * example 350 - * Preamble: Alternating high and low levels - * {20, 1} means 20 alternations of 1 Te duration - * _ _ _ _ _ _ _ _ _ _ - * | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_ - * Sync bit: Header and clock - * {1, 31} means 1 pulse long Te high and 31 low + * { + * Pulse length, + * + * PreambleFactor, + * Preamble {high,low}, + * + * HeaderFactor, + * Header {high,low}, + * + * "0" bit {high,low}, + * "1" bit {high,low}, + * + * Inverted Signal, + * Guard time + * } + * + * Pulse length: pulse duration (Te) in microseconds, + * for example 350 + * PreambleFactor: Number of high and low states to send + * (One pulse = 2 states, in orther words, number of pulses is + * ceil(PreambleFactor/2).) + * Preamble: Pulse shape which defines a preamble bit. + * Sent ceil(PreambleFactor/2) times. + * For example, {1, 2} with factor 3 would send + * _ _ + * | |__| |__ (each horizontal bar has a duration of Te, + * vertical bars are ignored) + * HeaderFactor: Number of times to send the header pulse. + * Header: Pulse shape which defines a header (or "sync"/"clock") pulse. + * {1, 31} means one pulse of duration 1 Te high and 31 Te low * _ * | |_______________________________ (don't count the vertical bars) + * * "0" bit: pulse shape defining a data bit, which is a logical "0" * {1, 3} means 1 pulse duration Te high level and 3 low * _ * | |___ + * * "1" bit: pulse shape that defines the data bit, which is a logical "1" * {3, 1} means 3 pulses with a duration of Te high level and 1 low * ___ * | |_ * - * (note: to form the state bit Z (Tri-State bit), these two codes are combined) + * (note: to form the state bit Z (Tri-State bit), two codes are combined) + * * Inverted Signal: Signal inversion - if true the signal is inverted * replacing high to low in a transmitted / received packet - * Guard time: Safety time, followed by the next preamble of the next packet - * for example 39 pulses of low duration Te + * Guard time: Separation time between two retries. It will be followed by the + * next preamble of the next packet. In number of Te. + * e.g. 39 pulses of duration Te low level */ + #if defined(ESP8266) || defined(ESP32) static const VAR_ISR_ATTR RCSwitch::Protocol proto[] = { #else diff --git a/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_i15.c b/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_i15.c deleted file mode 100644 index cea8091d8..000000000 --- a/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_i15.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (c) 2017 Thomas Pornin - * - * Permission 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: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE 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. - */ - -#include "t_inner.h" - -/* - * Parameters for the field: - * - field modulus p = 2^255-19 - * - R^2 mod p (R = 2^(15k) for the smallest k such that R >= p) - */ - -static const uint16_t C255_P[] = { - 0x0110, - 0x7FED, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, - 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, - 0x7FFF -}; - -#define P0I 0x4A1B - -static const uint16_t C255_R2[] = { - 0x0110, - 0x0169, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000 -}; - -/* obsolete -#include -#include -static void -print_int_mont(const char *name, const uint16_t *x) -{ - uint16_t y[18]; - unsigned char tmp[32]; - size_t u; - - printf("%s = ", name); - memcpy(y, x, sizeof y); - br_i15_from_monty(y, C255_P, P0I); - br_i15_encode(tmp, sizeof tmp, y); - for (u = 0; u < sizeof tmp; u ++) { - printf("%02X", tmp[u]); - } - printf("\n"); -} -*/ - -static const uint16_t C255_A24[] = { - 0x0110, - 0x45D3, 0x0046, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000 -}; - -static const unsigned char GEN[] PROGMEM = { - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const unsigned char ORDER[] PROGMEM = { - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -static const unsigned char * -api_generator(int curve, size_t *len) -{ - (void)curve; - *len = 32; - return GEN; -} - -static const unsigned char * -api_order(int curve, size_t *len) -{ - (void)curve; - *len = 32; - return ORDER; -} - -static size_t -api_xoff(int curve, size_t *len) -{ - (void)curve; - *len = 32; - return 0; -} - -static void -cswap(uint16_t *a, uint16_t *b, uint32_t ctl) -{ - int i; - - ctl = -ctl; - for (i = 0; i < 18; i ++) { - uint32_t aw, bw, tw; - - aw = a[i]; - bw = b[i]; - tw = ctl & (aw ^ bw); - a[i] = aw ^ tw; - b[i] = bw ^ tw; - } -} - -static void -c255_add(uint16_t *d, const uint16_t *a, const uint16_t *b) -{ - uint32_t ctl; - uint16_t t[18]; - - memcpy_P(t, a, sizeof t); - ctl = br_i15_add(t, b, 1); - ctl |= NOT(br_i15_sub(t, C255_P, 0)); - br_i15_sub(t, C255_P, ctl); - memcpy(d, t, sizeof t); -} - -static void -c255_sub(uint16_t *d, const uint16_t *a, const uint16_t *b) -{ - uint16_t t[18]; - - memcpy_P(t, a, sizeof t); - br_i15_add(t, C255_P, br_i15_sub(t, b, 1)); - memcpy(d, t, sizeof t); -} - -static void -c255_mul(uint16_t *d, const uint16_t *a, const uint16_t *b) -{ - uint16_t t[18]; - - br_i15_montymul(t, a, b, C255_P, P0I); - memcpy(d, t, sizeof t); -} - -static void -byteswap(unsigned char *G) -{ - int i; - - for (i = 0; i < 16; i ++) { - unsigned char t; - - t = G[i]; - G[i] = G[31 - i]; - G[31 - i] = t; - } -} - -static uint32_t -api_mul(unsigned char *G, size_t Glen, - const unsigned char *kb, size_t kblen, int curve) -{ -#define ILEN (18 * sizeof(uint16_t)) - - /* - * The a[] and b[] arrays have an extra word to allow for - * decoding without using br_i15_decode_reduce(). - */ - uint16_t x1[18], x2[18], x3[18], z2[18], z3[18]; - uint16_t a[19], aa[18], b[19], bb[18]; - uint16_t c[18], d[18], e[18], da[18], cb[18]; - unsigned char k[32]; - uint32_t swap; - int i; - - (void)curve; - - /* - * Points are encoded over exactly 32 bytes. Multipliers must fit - * in 32 bytes as well. - * RFC 7748 mandates that the high bit of the last point byte must - * be ignored/cleared. - */ - if (Glen != 32 || kblen > 32) { - return 0; - } - G[31] &= 0x7F; - - /* - * Byteswap the point encoding, because it uses little-endian, and - * the generic decoding routine uses big-endian. - */ - byteswap(G); - - /* - * Decode the point ('u' coordinate). This should be reduced - * modulo p, but we prefer to avoid the dependency on - * br_i15_decode_reduce(). Instead, we use br_i15_decode_mod() - * with a synthetic modulus of value 2^255 (this must work - * since G was truncated to 255 bits), then use a conditional - * subtraction. We use br_i15_decode_mod() and not - * br_i15_decode(), because the ec_prime_i15 implementation uses - * the former but not the latter. - * br_i15_decode_reduce(a, G, 32, C255_P); - */ - br_i15_zero(b, 0x111); - b[18] = 1; - br_i15_decode_mod(a, G, 32, b); - a[0] = 0x110; - br_i15_sub(a, C255_P, NOT(br_i15_sub(a, C255_P, 0))); - - /* - * Initialise variables x1, x2, z2, x3 and z3. We set all of them - * into Montgomery representation. - */ - br_i15_montymul(x1, a, C255_R2, C255_P, P0I); - memcpy(x3, x1, ILEN); - br_i15_zero(z2, C255_P[0]); - memcpy(x2, z2, ILEN); - x2[1] = 19; - memcpy(z3, x2, ILEN); - - memset(k, 0, (sizeof k) - kblen); - memcpy_P(k + (sizeof k) - kblen, kb, kblen); - k[31] &= 0xF8; - k[0] &= 0x7F; - k[0] |= 0x40; - - /* obsolete - print_int_mont("x1", x1); - */ - - swap = 0; - for (i = 254; i >= 0; i --) { - uint32_t kt; - - kt = (k[31 - (i >> 3)] >> (i & 7)) & 1; - swap ^= kt; - cswap(x2, x3, swap); - cswap(z2, z3, swap); - swap = kt; - - /* obsolete - print_int_mont("x2", x2); - print_int_mont("z2", z2); - print_int_mont("x3", x3); - print_int_mont("z3", z3); - */ - - c255_add(a, x2, z2); - c255_mul(aa, a, a); - c255_sub(b, x2, z2); - c255_mul(bb, b, b); - c255_sub(e, aa, bb); - c255_add(c, x3, z3); - c255_sub(d, x3, z3); - c255_mul(da, d, a); - c255_mul(cb, c, b); - - /* obsolete - print_int_mont("a ", a); - print_int_mont("aa", aa); - print_int_mont("b ", b); - print_int_mont("bb", bb); - print_int_mont("e ", e); - print_int_mont("c ", c); - print_int_mont("d ", d); - print_int_mont("da", da); - print_int_mont("cb", cb); - */ - - c255_add(x3, da, cb); - c255_mul(x3, x3, x3); - c255_sub(z3, da, cb); - c255_mul(z3, z3, z3); - c255_mul(z3, z3, x1); - c255_mul(x2, aa, bb); - c255_mul(z2, C255_A24, e); - c255_add(z2, z2, aa); - c255_mul(z2, e, z2); - - /* obsolete - print_int_mont("x2", x2); - print_int_mont("z2", z2); - print_int_mont("x3", x3); - print_int_mont("z3", z3); - */ - } - cswap(x2, x3, swap); - cswap(z2, z3, swap); - - /* - * Inverse z2 with a modular exponentiation. This is a simple - * square-and-multiply algorithm; we mutualise most non-squarings - * since the exponent contains almost only ones. - */ - memcpy(a, z2, ILEN); - for (i = 0; i < 15; i ++) { - c255_mul(a, a, a); - c255_mul(a, a, z2); - } - memcpy(b, a, ILEN); - for (i = 0; i < 14; i ++) { - int j; - - for (j = 0; j < 16; j ++) { - c255_mul(b, b, b); - } - c255_mul(b, b, a); - } - for (i = 14; i >= 0; i --) { - c255_mul(b, b, b); - if ((0xFFEB >> i) & 1) { - c255_mul(b, z2, b); - } - } - c255_mul(b, x2, b); - - /* - * To avoid a dependency on br_i15_from_monty(), we use a - * Montgomery multiplication with 1. - * memcpy(x2, b, ILEN); - * br_i15_from_monty(x2, C255_P, P0I); - */ - br_i15_zero(a, C255_P[0]); - a[1] = 1; - br_i15_montymul(x2, a, b, C255_P, P0I); - - br_i15_encode(G, 32, x2); - byteswap(G); - return 1; - -#undef ILEN -} - -static size_t -api_mulgen(unsigned char *R, - const unsigned char *x, size_t xlen, int curve) -{ - const unsigned char *G; - size_t Glen; - - G = api_generator(curve, &Glen); - memcpy(R, G, Glen); - api_mul(R, Glen, x, xlen, curve); - return Glen; -} - -static uint32_t -api_muladd(unsigned char *A, const unsigned char *B, size_t len, - const unsigned char *x, size_t xlen, - const unsigned char *y, size_t ylen, int curve) -{ - /* - * We don't implement this method, since it is used for ECDSA - * only, and there is no ECDSA over Curve25519 (which instead - * uses EdDSA). - */ - (void)A; - (void)B; - (void)len; - (void)x; - (void)xlen; - (void)y; - (void)ylen; - (void)curve; - return 0; -} - -/* see bearssl_ec.h */ -const br_ec_impl br_ec_c25519_i15 PROGMEM = { - (uint32_t)0x20000000, - &api_generator, - &api_order, - &api_xoff, - &api_mul, - &api_mulgen, - &api_muladd -}; diff --git a/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_m15.c b/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_m15.c new file mode 100644 index 000000000..115d51a63 --- /dev/null +++ b/lib/lib_ssl/bearssl-esp8266/src/ec/ec_c25519_m15.c @@ -0,0 +1,1478 @@ +/* + * Copyright (c) 2017 Thomas Pornin + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE 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. + */ + +#include "t_inner.h" + +/* obsolete +#include +#include +static void +print_int(const char *name, const uint32_t *x) +{ + size_t u; + unsigned char tmp[36]; + + printf("%s = ", name); + for (u = 0; u < 20; u ++) { + if (x[u] > 0x1FFF) { + printf("INVALID:"); + for (u = 0; u < 20; u ++) { + printf(" %04X", x[u]); + } + printf("\n"); + return; + } + } + memset(tmp, 0, sizeof tmp); + for (u = 0; u < 20; u ++) { + uint32_t w; + int j, k; + + w = x[u]; + j = 13 * (int)u; + k = j & 7; + if (k != 0) { + w <<= k; + j -= k; + } + k = j >> 3; + tmp[35 - k] |= (unsigned char)w; + tmp[34 - k] |= (unsigned char)(w >> 8); + tmp[33 - k] |= (unsigned char)(w >> 16); + tmp[32 - k] |= (unsigned char)(w >> 24); + } + for (u = 4; u < 36; u ++) { + printf("%02X", tmp[u]); + } + printf("\n"); +} +*/ + +/* + * If BR_NO_ARITH_SHIFT is undefined, or defined to 0, then we _assume_ + * that right-shifting a signed negative integer copies the sign bit + * (arithmetic right-shift). This is "implementation-defined behaviour", + * i.e. it is not undefined, but it may differ between compilers. Each + * compiler is supposed to document its behaviour in that respect. GCC + * explicitly defines that an arithmetic right shift is used. We expect + * all other compilers to do the same, because underlying CPU offer an + * arithmetic right shift opcode that could not be used otherwise. + */ +#if BR_NO_ARITH_SHIFT +#define ARSH(x, n) (((uint32_t)(x) >> (n)) \ + | ((-((uint32_t)(x) >> 31)) << (32 - (n)))) +#else +#define ARSH(x, n) ((*(int32_t *)&(x)) >> (n)) +#endif + +/* + * Convert an integer from unsigned little-endian encoding to a sequence of + * 13-bit words in little-endian order. The final "partial" word is + * returned. + */ +static uint32_t +le8_to_le13(uint32_t *dst, const unsigned char *src, size_t len) +{ + uint32_t acc; + int acc_len; + + acc = 0; + acc_len = 0; + while (len -- > 0) { + acc |= (uint32_t)(*src ++) << acc_len; + acc_len += 8; + if (acc_len >= 13) { + *dst ++ = acc & 0x1FFF; + acc >>= 13; + acc_len -= 13; + } + } + return acc; +} + +/* + * Convert an integer (13-bit words, little-endian) to unsigned + * little-endian encoding. The total encoding length is provided; all + * the destination bytes will be filled. + */ +static void +le13_to_le8(unsigned char *dst, size_t len, const uint32_t *src) +{ + uint32_t acc; + int acc_len; + + acc = 0; + acc_len = 0; + while (len -- > 0) { + if (acc_len < 8) { + acc |= (*src ++) << acc_len; + acc_len += 13; + } + *dst ++ = (unsigned char)acc; + acc >>= 8; + acc_len -= 8; + } +} + +/* + * Normalise an array of words to a strict 13 bits per word. Returned + * value is the resulting carry. The source (w) and destination (d) + * arrays may be identical, but shall not overlap partially. + */ +static inline uint32_t +norm13(uint32_t *d, const uint32_t *w, size_t len) +{ + size_t u; + uint32_t cc; + + cc = 0; + for (u = 0; u < len; u ++) { + int32_t z; + + z = w[u] + cc; + d[u] = z & 0x1FFF; + cc = ARSH(z, 13); + } + return cc; +} + +/* + * mul20() multiplies two 260-bit integers together. Each word must fit + * on 13 bits; source operands use 20 words, destination operand + * receives 40 words. All overlaps allowed. + * + * square20() computes the square of a 260-bit integer. Each word must + * fit on 13 bits; source operand uses 20 words, destination operand + * receives 40 words. All overlaps allowed. + */ + +#if BR_SLOW_MUL15 + +static void +mul20(uint32_t *d, const uint32_t *a, const uint32_t *b) +{ + /* + * Two-level Karatsuba: turns a 20x20 multiplication into + * nine 5x5 multiplications. We use 13-bit words but do not + * propagate carries immediately, so words may expand: + * + * - First Karatsuba decomposition turns the 20x20 mul on + * 13-bit words into three 10x10 muls, two on 13-bit words + * and one on 14-bit words. + * + * - Second Karatsuba decomposition further splits these into: + * + * * four 5x5 muls on 13-bit words + * * four 5x5 muls on 14-bit words + * * one 5x5 mul on 15-bit words + * + * Highest word value is 8191, 16382 or 32764, for 13-bit, 14-bit + * or 15-bit words, respectively. + */ + uint32_t u[45], v[45], w[90]; + uint32_t cc; + int i; + +#define ZADD(dw, d_off, s1w, s1_off, s2w, s2_off) do { \ + (dw)[5 * (d_off) + 0] = (s1w)[5 * (s1_off) + 0] \ + + (s2w)[5 * (s2_off) + 0]; \ + (dw)[5 * (d_off) + 1] = (s1w)[5 * (s1_off) + 1] \ + + (s2w)[5 * (s2_off) + 1]; \ + (dw)[5 * (d_off) + 2] = (s1w)[5 * (s1_off) + 2] \ + + (s2w)[5 * (s2_off) + 2]; \ + (dw)[5 * (d_off) + 3] = (s1w)[5 * (s1_off) + 3] \ + + (s2w)[5 * (s2_off) + 3]; \ + (dw)[5 * (d_off) + 4] = (s1w)[5 * (s1_off) + 4] \ + + (s2w)[5 * (s2_off) + 4]; \ + } while (0) + +#define ZADDT(dw, d_off, sw, s_off) do { \ + (dw)[5 * (d_off) + 0] += (sw)[5 * (s_off) + 0]; \ + (dw)[5 * (d_off) + 1] += (sw)[5 * (s_off) + 1]; \ + (dw)[5 * (d_off) + 2] += (sw)[5 * (s_off) + 2]; \ + (dw)[5 * (d_off) + 3] += (sw)[5 * (s_off) + 3]; \ + (dw)[5 * (d_off) + 4] += (sw)[5 * (s_off) + 4]; \ + } while (0) + +#define ZSUB2F(dw, d_off, s1w, s1_off, s2w, s2_off) do { \ + (dw)[5 * (d_off) + 0] -= (s1w)[5 * (s1_off) + 0] \ + + (s2w)[5 * (s2_off) + 0]; \ + (dw)[5 * (d_off) + 1] -= (s1w)[5 * (s1_off) + 1] \ + + (s2w)[5 * (s2_off) + 1]; \ + (dw)[5 * (d_off) + 2] -= (s1w)[5 * (s1_off) + 2] \ + + (s2w)[5 * (s2_off) + 2]; \ + (dw)[5 * (d_off) + 3] -= (s1w)[5 * (s1_off) + 3] \ + + (s2w)[5 * (s2_off) + 3]; \ + (dw)[5 * (d_off) + 4] -= (s1w)[5 * (s1_off) + 4] \ + + (s2w)[5 * (s2_off) + 4]; \ + } while (0) + +#define CPR1(w, cprcc) do { \ + uint32_t cprz = (w) + cprcc; \ + (w) = cprz & 0x1FFF; \ + cprcc = cprz >> 13; \ + } while (0) + +#define CPR(dw, d_off) do { \ + uint32_t cprcc; \ + cprcc = 0; \ + CPR1((dw)[(d_off) + 0], cprcc); \ + CPR1((dw)[(d_off) + 1], cprcc); \ + CPR1((dw)[(d_off) + 2], cprcc); \ + CPR1((dw)[(d_off) + 3], cprcc); \ + CPR1((dw)[(d_off) + 4], cprcc); \ + CPR1((dw)[(d_off) + 5], cprcc); \ + CPR1((dw)[(d_off) + 6], cprcc); \ + CPR1((dw)[(d_off) + 7], cprcc); \ + CPR1((dw)[(d_off) + 8], cprcc); \ + (dw)[(d_off) + 9] = cprcc; \ + } while (0) + + memcpy_P(u, a, 20 * sizeof *a); + ZADD(u, 4, a, 0, a, 1); + ZADD(u, 5, a, 2, a, 3); + ZADD(u, 6, a, 0, a, 2); + ZADD(u, 7, a, 1, a, 3); + ZADD(u, 8, u, 6, u, 7); + + memcpy_P(v, b, 20 * sizeof *b); + ZADD(v, 4, b, 0, b, 1); + ZADD(v, 5, b, 2, b, 3); + ZADD(v, 6, b, 0, b, 2); + ZADD(v, 7, b, 1, b, 3); + ZADD(v, 8, v, 6, v, 7); + + /* + * Do the eight first 8x8 muls. Source words are at most 16382 + * each, so we can add product results together "as is" in 32-bit + * words. + */ + for (i = 0; i < 40; i += 5) { + w[(i << 1) + 0] = MUL15(u[i + 0], v[i + 0]); + w[(i << 1) + 1] = MUL15(u[i + 0], v[i + 1]) + + MUL15(u[i + 1], v[i + 0]); + w[(i << 1) + 2] = MUL15(u[i + 0], v[i + 2]) + + MUL15(u[i + 1], v[i + 1]) + + MUL15(u[i + 2], v[i + 0]); + w[(i << 1) + 3] = MUL15(u[i + 0], v[i + 3]) + + MUL15(u[i + 1], v[i + 2]) + + MUL15(u[i + 2], v[i + 1]) + + MUL15(u[i + 3], v[i + 0]); + w[(i << 1) + 4] = MUL15(u[i + 0], v[i + 4]) + + MUL15(u[i + 1], v[i + 3]) + + MUL15(u[i + 2], v[i + 2]) + + MUL15(u[i + 3], v[i + 1]) + + MUL15(u[i + 4], v[i + 0]); + w[(i << 1) + 5] = MUL15(u[i + 1], v[i + 4]) + + MUL15(u[i + 2], v[i + 3]) + + MUL15(u[i + 3], v[i + 2]) + + MUL15(u[i + 4], v[i + 1]); + w[(i << 1) + 6] = MUL15(u[i + 2], v[i + 4]) + + MUL15(u[i + 3], v[i + 3]) + + MUL15(u[i + 4], v[i + 2]); + w[(i << 1) + 7] = MUL15(u[i + 3], v[i + 4]) + + MUL15(u[i + 4], v[i + 3]); + w[(i << 1) + 8] = MUL15(u[i + 4], v[i + 4]); + w[(i << 1) + 9] = 0; + } + + /* + * For the 9th multiplication, source words are up to 32764, + * so we must do some carry propagation. If we add up to + * 4 products and the carry is no more than 524224, then the + * result fits in 32 bits, and the next carry will be no more + * than 524224 (because 4*(32764^2)+524224 < 8192*524225). + * + * We thus just skip one of the products in the middle word, + * then do a carry propagation (this reduces words to 13 bits + * each, except possibly the last, which may use up to 17 bits + * or so), then add the missing product. + */ + w[80 + 0] = MUL15(u[40 + 0], v[40 + 0]); + w[80 + 1] = MUL15(u[40 + 0], v[40 + 1]) + + MUL15(u[40 + 1], v[40 + 0]); + w[80 + 2] = MUL15(u[40 + 0], v[40 + 2]) + + MUL15(u[40 + 1], v[40 + 1]) + + MUL15(u[40 + 2], v[40 + 0]); + w[80 + 3] = MUL15(u[40 + 0], v[40 + 3]) + + MUL15(u[40 + 1], v[40 + 2]) + + MUL15(u[40 + 2], v[40 + 1]) + + MUL15(u[40 + 3], v[40 + 0]); + w[80 + 4] = MUL15(u[40 + 0], v[40 + 4]) + + MUL15(u[40 + 1], v[40 + 3]) + + MUL15(u[40 + 2], v[40 + 2]) + + MUL15(u[40 + 3], v[40 + 1]); + /* + MUL15(u[40 + 4], v[40 + 0]) */ + w[80 + 5] = MUL15(u[40 + 1], v[40 + 4]) + + MUL15(u[40 + 2], v[40 + 3]) + + MUL15(u[40 + 3], v[40 + 2]) + + MUL15(u[40 + 4], v[40 + 1]); + w[80 + 6] = MUL15(u[40 + 2], v[40 + 4]) + + MUL15(u[40 + 3], v[40 + 3]) + + MUL15(u[40 + 4], v[40 + 2]); + w[80 + 7] = MUL15(u[40 + 3], v[40 + 4]) + + MUL15(u[40 + 4], v[40 + 3]); + w[80 + 8] = MUL15(u[40 + 4], v[40 + 4]); + + CPR(w, 80); + + w[80 + 4] += MUL15(u[40 + 4], v[40 + 0]); + + /* + * The products on 14-bit words in slots 6 and 7 yield values + * up to 5*(16382^2) each, and we need to subtract two such + * values from the higher word. We need the subtraction to fit + * in a _signed_ 32-bit integer, i.e. 31 bits + a sign bit. + * However, 10*(16382^2) does not fit. So we must perform a + * bit of reduction here. + */ + CPR(w, 60); + CPR(w, 70); + + /* + * Recompose results. + */ + + /* 0..1*0..1 into 0..3 */ + ZSUB2F(w, 8, w, 0, w, 2); + ZSUB2F(w, 9, w, 1, w, 3); + ZADDT(w, 1, w, 8); + ZADDT(w, 2, w, 9); + + /* 2..3*2..3 into 4..7 */ + ZSUB2F(w, 10, w, 4, w, 6); + ZSUB2F(w, 11, w, 5, w, 7); + ZADDT(w, 5, w, 10); + ZADDT(w, 6, w, 11); + + /* (0..1+2..3)*(0..1+2..3) into 12..15 */ + ZSUB2F(w, 16, w, 12, w, 14); + ZSUB2F(w, 17, w, 13, w, 15); + ZADDT(w, 13, w, 16); + ZADDT(w, 14, w, 17); + + /* first-level recomposition */ + ZSUB2F(w, 12, w, 0, w, 4); + ZSUB2F(w, 13, w, 1, w, 5); + ZSUB2F(w, 14, w, 2, w, 6); + ZSUB2F(w, 15, w, 3, w, 7); + ZADDT(w, 2, w, 12); + ZADDT(w, 3, w, 13); + ZADDT(w, 4, w, 14); + ZADDT(w, 5, w, 15); + + /* + * Perform carry propagation to bring all words down to 13 bits. + */ + cc = norm13(d, w, 40); + d[39] += (cc << 13); + +#undef ZADD +#undef ZADDT +#undef ZSUB2F +#undef CPR1 +#undef CPR +} + +static inline void +square20(uint32_t *d, const uint32_t *a) +{ + mul20(d, a, a); +} + +#else + +/*static*/ void +mul20(uint32_t *d, const uint32_t *a, const uint32_t *b) +{ + uint32_t t[39]; + + t[ 0] = MUL15(a[ 0], b[ 0]); + t[ 1] = MUL15(a[ 0], b[ 1]) + + MUL15(a[ 1], b[ 0]); + t[ 2] = MUL15(a[ 0], b[ 2]) + + MUL15(a[ 1], b[ 1]) + + MUL15(a[ 2], b[ 0]); + t[ 3] = MUL15(a[ 0], b[ 3]) + + MUL15(a[ 1], b[ 2]) + + MUL15(a[ 2], b[ 1]) + + MUL15(a[ 3], b[ 0]); + t[ 4] = MUL15(a[ 0], b[ 4]) + + MUL15(a[ 1], b[ 3]) + + MUL15(a[ 2], b[ 2]) + + MUL15(a[ 3], b[ 1]) + + MUL15(a[ 4], b[ 0]); + t[ 5] = MUL15(a[ 0], b[ 5]) + + MUL15(a[ 1], b[ 4]) + + MUL15(a[ 2], b[ 3]) + + MUL15(a[ 3], b[ 2]) + + MUL15(a[ 4], b[ 1]) + + MUL15(a[ 5], b[ 0]); + t[ 6] = MUL15(a[ 0], b[ 6]) + + MUL15(a[ 1], b[ 5]) + + MUL15(a[ 2], b[ 4]) + + MUL15(a[ 3], b[ 3]) + + MUL15(a[ 4], b[ 2]) + + MUL15(a[ 5], b[ 1]) + + MUL15(a[ 6], b[ 0]); + t[ 7] = MUL15(a[ 0], b[ 7]) + + MUL15(a[ 1], b[ 6]) + + MUL15(a[ 2], b[ 5]) + + MUL15(a[ 3], b[ 4]) + + MUL15(a[ 4], b[ 3]) + + MUL15(a[ 5], b[ 2]) + + MUL15(a[ 6], b[ 1]) + + MUL15(a[ 7], b[ 0]); + t[ 8] = MUL15(a[ 0], b[ 8]) + + MUL15(a[ 1], b[ 7]) + + MUL15(a[ 2], b[ 6]) + + MUL15(a[ 3], b[ 5]) + + MUL15(a[ 4], b[ 4]) + + MUL15(a[ 5], b[ 3]) + + MUL15(a[ 6], b[ 2]) + + MUL15(a[ 7], b[ 1]) + + MUL15(a[ 8], b[ 0]); + t[ 9] = MUL15(a[ 0], b[ 9]) + + MUL15(a[ 1], b[ 8]) + + MUL15(a[ 2], b[ 7]) + + MUL15(a[ 3], b[ 6]) + + MUL15(a[ 4], b[ 5]) + + MUL15(a[ 5], b[ 4]) + + MUL15(a[ 6], b[ 3]) + + MUL15(a[ 7], b[ 2]) + + MUL15(a[ 8], b[ 1]) + + MUL15(a[ 9], b[ 0]); + t[10] = MUL15(a[ 0], b[10]) + + MUL15(a[ 1], b[ 9]) + + MUL15(a[ 2], b[ 8]) + + MUL15(a[ 3], b[ 7]) + + MUL15(a[ 4], b[ 6]) + + MUL15(a[ 5], b[ 5]) + + MUL15(a[ 6], b[ 4]) + + MUL15(a[ 7], b[ 3]) + + MUL15(a[ 8], b[ 2]) + + MUL15(a[ 9], b[ 1]) + + MUL15(a[10], b[ 0]); + t[11] = MUL15(a[ 0], b[11]) + + MUL15(a[ 1], b[10]) + + MUL15(a[ 2], b[ 9]) + + MUL15(a[ 3], b[ 8]) + + MUL15(a[ 4], b[ 7]) + + MUL15(a[ 5], b[ 6]) + + MUL15(a[ 6], b[ 5]) + + MUL15(a[ 7], b[ 4]) + + MUL15(a[ 8], b[ 3]) + + MUL15(a[ 9], b[ 2]) + + MUL15(a[10], b[ 1]) + + MUL15(a[11], b[ 0]); + t[12] = MUL15(a[ 0], b[12]) + + MUL15(a[ 1], b[11]) + + MUL15(a[ 2], b[10]) + + MUL15(a[ 3], b[ 9]) + + MUL15(a[ 4], b[ 8]) + + MUL15(a[ 5], b[ 7]) + + MUL15(a[ 6], b[ 6]) + + MUL15(a[ 7], b[ 5]) + + MUL15(a[ 8], b[ 4]) + + MUL15(a[ 9], b[ 3]) + + MUL15(a[10], b[ 2]) + + MUL15(a[11], b[ 1]) + + MUL15(a[12], b[ 0]); + t[13] = MUL15(a[ 0], b[13]) + + MUL15(a[ 1], b[12]) + + MUL15(a[ 2], b[11]) + + MUL15(a[ 3], b[10]) + + MUL15(a[ 4], b[ 9]) + + MUL15(a[ 5], b[ 8]) + + MUL15(a[ 6], b[ 7]) + + MUL15(a[ 7], b[ 6]) + + MUL15(a[ 8], b[ 5]) + + MUL15(a[ 9], b[ 4]) + + MUL15(a[10], b[ 3]) + + MUL15(a[11], b[ 2]) + + MUL15(a[12], b[ 1]) + + MUL15(a[13], b[ 0]); + t[14] = MUL15(a[ 0], b[14]) + + MUL15(a[ 1], b[13]) + + MUL15(a[ 2], b[12]) + + MUL15(a[ 3], b[11]) + + MUL15(a[ 4], b[10]) + + MUL15(a[ 5], b[ 9]) + + MUL15(a[ 6], b[ 8]) + + MUL15(a[ 7], b[ 7]) + + MUL15(a[ 8], b[ 6]) + + MUL15(a[ 9], b[ 5]) + + MUL15(a[10], b[ 4]) + + MUL15(a[11], b[ 3]) + + MUL15(a[12], b[ 2]) + + MUL15(a[13], b[ 1]) + + MUL15(a[14], b[ 0]); + t[15] = MUL15(a[ 0], b[15]) + + MUL15(a[ 1], b[14]) + + MUL15(a[ 2], b[13]) + + MUL15(a[ 3], b[12]) + + MUL15(a[ 4], b[11]) + + MUL15(a[ 5], b[10]) + + MUL15(a[ 6], b[ 9]) + + MUL15(a[ 7], b[ 8]) + + MUL15(a[ 8], b[ 7]) + + MUL15(a[ 9], b[ 6]) + + MUL15(a[10], b[ 5]) + + MUL15(a[11], b[ 4]) + + MUL15(a[12], b[ 3]) + + MUL15(a[13], b[ 2]) + + MUL15(a[14], b[ 1]) + + MUL15(a[15], b[ 0]); + t[16] = MUL15(a[ 0], b[16]) + + MUL15(a[ 1], b[15]) + + MUL15(a[ 2], b[14]) + + MUL15(a[ 3], b[13]) + + MUL15(a[ 4], b[12]) + + MUL15(a[ 5], b[11]) + + MUL15(a[ 6], b[10]) + + MUL15(a[ 7], b[ 9]) + + MUL15(a[ 8], b[ 8]) + + MUL15(a[ 9], b[ 7]) + + MUL15(a[10], b[ 6]) + + MUL15(a[11], b[ 5]) + + MUL15(a[12], b[ 4]) + + MUL15(a[13], b[ 3]) + + MUL15(a[14], b[ 2]) + + MUL15(a[15], b[ 1]) + + MUL15(a[16], b[ 0]); + t[17] = MUL15(a[ 0], b[17]) + + MUL15(a[ 1], b[16]) + + MUL15(a[ 2], b[15]) + + MUL15(a[ 3], b[14]) + + MUL15(a[ 4], b[13]) + + MUL15(a[ 5], b[12]) + + MUL15(a[ 6], b[11]) + + MUL15(a[ 7], b[10]) + + MUL15(a[ 8], b[ 9]) + + MUL15(a[ 9], b[ 8]) + + MUL15(a[10], b[ 7]) + + MUL15(a[11], b[ 6]) + + MUL15(a[12], b[ 5]) + + MUL15(a[13], b[ 4]) + + MUL15(a[14], b[ 3]) + + MUL15(a[15], b[ 2]) + + MUL15(a[16], b[ 1]) + + MUL15(a[17], b[ 0]); + t[18] = MUL15(a[ 0], b[18]) + + MUL15(a[ 1], b[17]) + + MUL15(a[ 2], b[16]) + + MUL15(a[ 3], b[15]) + + MUL15(a[ 4], b[14]) + + MUL15(a[ 5], b[13]) + + MUL15(a[ 6], b[12]) + + MUL15(a[ 7], b[11]) + + MUL15(a[ 8], b[10]) + + MUL15(a[ 9], b[ 9]) + + MUL15(a[10], b[ 8]) + + MUL15(a[11], b[ 7]) + + MUL15(a[12], b[ 6]) + + MUL15(a[13], b[ 5]) + + MUL15(a[14], b[ 4]) + + MUL15(a[15], b[ 3]) + + MUL15(a[16], b[ 2]) + + MUL15(a[17], b[ 1]) + + MUL15(a[18], b[ 0]); + t[19] = MUL15(a[ 0], b[19]) + + MUL15(a[ 1], b[18]) + + MUL15(a[ 2], b[17]) + + MUL15(a[ 3], b[16]) + + MUL15(a[ 4], b[15]) + + MUL15(a[ 5], b[14]) + + MUL15(a[ 6], b[13]) + + MUL15(a[ 7], b[12]) + + MUL15(a[ 8], b[11]) + + MUL15(a[ 9], b[10]) + + MUL15(a[10], b[ 9]) + + MUL15(a[11], b[ 8]) + + MUL15(a[12], b[ 7]) + + MUL15(a[13], b[ 6]) + + MUL15(a[14], b[ 5]) + + MUL15(a[15], b[ 4]) + + MUL15(a[16], b[ 3]) + + MUL15(a[17], b[ 2]) + + MUL15(a[18], b[ 1]) + + MUL15(a[19], b[ 0]); + t[20] = MUL15(a[ 1], b[19]) + + MUL15(a[ 2], b[18]) + + MUL15(a[ 3], b[17]) + + MUL15(a[ 4], b[16]) + + MUL15(a[ 5], b[15]) + + MUL15(a[ 6], b[14]) + + MUL15(a[ 7], b[13]) + + MUL15(a[ 8], b[12]) + + MUL15(a[ 9], b[11]) + + MUL15(a[10], b[10]) + + MUL15(a[11], b[ 9]) + + MUL15(a[12], b[ 8]) + + MUL15(a[13], b[ 7]) + + MUL15(a[14], b[ 6]) + + MUL15(a[15], b[ 5]) + + MUL15(a[16], b[ 4]) + + MUL15(a[17], b[ 3]) + + MUL15(a[18], b[ 2]) + + MUL15(a[19], b[ 1]); + t[21] = MUL15(a[ 2], b[19]) + + MUL15(a[ 3], b[18]) + + MUL15(a[ 4], b[17]) + + MUL15(a[ 5], b[16]) + + MUL15(a[ 6], b[15]) + + MUL15(a[ 7], b[14]) + + MUL15(a[ 8], b[13]) + + MUL15(a[ 9], b[12]) + + MUL15(a[10], b[11]) + + MUL15(a[11], b[10]) + + MUL15(a[12], b[ 9]) + + MUL15(a[13], b[ 8]) + + MUL15(a[14], b[ 7]) + + MUL15(a[15], b[ 6]) + + MUL15(a[16], b[ 5]) + + MUL15(a[17], b[ 4]) + + MUL15(a[18], b[ 3]) + + MUL15(a[19], b[ 2]); + t[22] = MUL15(a[ 3], b[19]) + + MUL15(a[ 4], b[18]) + + MUL15(a[ 5], b[17]) + + MUL15(a[ 6], b[16]) + + MUL15(a[ 7], b[15]) + + MUL15(a[ 8], b[14]) + + MUL15(a[ 9], b[13]) + + MUL15(a[10], b[12]) + + MUL15(a[11], b[11]) + + MUL15(a[12], b[10]) + + MUL15(a[13], b[ 9]) + + MUL15(a[14], b[ 8]) + + MUL15(a[15], b[ 7]) + + MUL15(a[16], b[ 6]) + + MUL15(a[17], b[ 5]) + + MUL15(a[18], b[ 4]) + + MUL15(a[19], b[ 3]); + t[23] = MUL15(a[ 4], b[19]) + + MUL15(a[ 5], b[18]) + + MUL15(a[ 6], b[17]) + + MUL15(a[ 7], b[16]) + + MUL15(a[ 8], b[15]) + + MUL15(a[ 9], b[14]) + + MUL15(a[10], b[13]) + + MUL15(a[11], b[12]) + + MUL15(a[12], b[11]) + + MUL15(a[13], b[10]) + + MUL15(a[14], b[ 9]) + + MUL15(a[15], b[ 8]) + + MUL15(a[16], b[ 7]) + + MUL15(a[17], b[ 6]) + + MUL15(a[18], b[ 5]) + + MUL15(a[19], b[ 4]); + t[24] = MUL15(a[ 5], b[19]) + + MUL15(a[ 6], b[18]) + + MUL15(a[ 7], b[17]) + + MUL15(a[ 8], b[16]) + + MUL15(a[ 9], b[15]) + + MUL15(a[10], b[14]) + + MUL15(a[11], b[13]) + + MUL15(a[12], b[12]) + + MUL15(a[13], b[11]) + + MUL15(a[14], b[10]) + + MUL15(a[15], b[ 9]) + + MUL15(a[16], b[ 8]) + + MUL15(a[17], b[ 7]) + + MUL15(a[18], b[ 6]) + + MUL15(a[19], b[ 5]); + t[25] = MUL15(a[ 6], b[19]) + + MUL15(a[ 7], b[18]) + + MUL15(a[ 8], b[17]) + + MUL15(a[ 9], b[16]) + + MUL15(a[10], b[15]) + + MUL15(a[11], b[14]) + + MUL15(a[12], b[13]) + + MUL15(a[13], b[12]) + + MUL15(a[14], b[11]) + + MUL15(a[15], b[10]) + + MUL15(a[16], b[ 9]) + + MUL15(a[17], b[ 8]) + + MUL15(a[18], b[ 7]) + + MUL15(a[19], b[ 6]); + t[26] = MUL15(a[ 7], b[19]) + + MUL15(a[ 8], b[18]) + + MUL15(a[ 9], b[17]) + + MUL15(a[10], b[16]) + + MUL15(a[11], b[15]) + + MUL15(a[12], b[14]) + + MUL15(a[13], b[13]) + + MUL15(a[14], b[12]) + + MUL15(a[15], b[11]) + + MUL15(a[16], b[10]) + + MUL15(a[17], b[ 9]) + + MUL15(a[18], b[ 8]) + + MUL15(a[19], b[ 7]); + t[27] = MUL15(a[ 8], b[19]) + + MUL15(a[ 9], b[18]) + + MUL15(a[10], b[17]) + + MUL15(a[11], b[16]) + + MUL15(a[12], b[15]) + + MUL15(a[13], b[14]) + + MUL15(a[14], b[13]) + + MUL15(a[15], b[12]) + + MUL15(a[16], b[11]) + + MUL15(a[17], b[10]) + + MUL15(a[18], b[ 9]) + + MUL15(a[19], b[ 8]); + t[28] = MUL15(a[ 9], b[19]) + + MUL15(a[10], b[18]) + + MUL15(a[11], b[17]) + + MUL15(a[12], b[16]) + + MUL15(a[13], b[15]) + + MUL15(a[14], b[14]) + + MUL15(a[15], b[13]) + + MUL15(a[16], b[12]) + + MUL15(a[17], b[11]) + + MUL15(a[18], b[10]) + + MUL15(a[19], b[ 9]); + t[29] = MUL15(a[10], b[19]) + + MUL15(a[11], b[18]) + + MUL15(a[12], b[17]) + + MUL15(a[13], b[16]) + + MUL15(a[14], b[15]) + + MUL15(a[15], b[14]) + + MUL15(a[16], b[13]) + + MUL15(a[17], b[12]) + + MUL15(a[18], b[11]) + + MUL15(a[19], b[10]); + t[30] = MUL15(a[11], b[19]) + + MUL15(a[12], b[18]) + + MUL15(a[13], b[17]) + + MUL15(a[14], b[16]) + + MUL15(a[15], b[15]) + + MUL15(a[16], b[14]) + + MUL15(a[17], b[13]) + + MUL15(a[18], b[12]) + + MUL15(a[19], b[11]); + t[31] = MUL15(a[12], b[19]) + + MUL15(a[13], b[18]) + + MUL15(a[14], b[17]) + + MUL15(a[15], b[16]) + + MUL15(a[16], b[15]) + + MUL15(a[17], b[14]) + + MUL15(a[18], b[13]) + + MUL15(a[19], b[12]); + t[32] = MUL15(a[13], b[19]) + + MUL15(a[14], b[18]) + + MUL15(a[15], b[17]) + + MUL15(a[16], b[16]) + + MUL15(a[17], b[15]) + + MUL15(a[18], b[14]) + + MUL15(a[19], b[13]); + t[33] = MUL15(a[14], b[19]) + + MUL15(a[15], b[18]) + + MUL15(a[16], b[17]) + + MUL15(a[17], b[16]) + + MUL15(a[18], b[15]) + + MUL15(a[19], b[14]); + t[34] = MUL15(a[15], b[19]) + + MUL15(a[16], b[18]) + + MUL15(a[17], b[17]) + + MUL15(a[18], b[16]) + + MUL15(a[19], b[15]); + t[35] = MUL15(a[16], b[19]) + + MUL15(a[17], b[18]) + + MUL15(a[18], b[17]) + + MUL15(a[19], b[16]); + t[36] = MUL15(a[17], b[19]) + + MUL15(a[18], b[18]) + + MUL15(a[19], b[17]); + t[37] = MUL15(a[18], b[19]) + + MUL15(a[19], b[18]); + t[38] = MUL15(a[19], b[19]); + + d[39] = norm13(d, t, 39); +} + +/*static*/ void +square20(uint32_t *d, const uint32_t *a) +{ + uint32_t t[39]; + + t[ 0] = MUL15(a[ 0], a[ 0]); + t[ 1] = ((MUL15(a[ 0], a[ 1])) << 1); + t[ 2] = MUL15(a[ 1], a[ 1]) + + ((MUL15(a[ 0], a[ 2])) << 1); + t[ 3] = ((MUL15(a[ 0], a[ 3]) + + MUL15(a[ 1], a[ 2])) << 1); + t[ 4] = MUL15(a[ 2], a[ 2]) + + ((MUL15(a[ 0], a[ 4]) + + MUL15(a[ 1], a[ 3])) << 1); + t[ 5] = ((MUL15(a[ 0], a[ 5]) + + MUL15(a[ 1], a[ 4]) + + MUL15(a[ 2], a[ 3])) << 1); + t[ 6] = MUL15(a[ 3], a[ 3]) + + ((MUL15(a[ 0], a[ 6]) + + MUL15(a[ 1], a[ 5]) + + MUL15(a[ 2], a[ 4])) << 1); + t[ 7] = ((MUL15(a[ 0], a[ 7]) + + MUL15(a[ 1], a[ 6]) + + MUL15(a[ 2], a[ 5]) + + MUL15(a[ 3], a[ 4])) << 1); + t[ 8] = MUL15(a[ 4], a[ 4]) + + ((MUL15(a[ 0], a[ 8]) + + MUL15(a[ 1], a[ 7]) + + MUL15(a[ 2], a[ 6]) + + MUL15(a[ 3], a[ 5])) << 1); + t[ 9] = ((MUL15(a[ 0], a[ 9]) + + MUL15(a[ 1], a[ 8]) + + MUL15(a[ 2], a[ 7]) + + MUL15(a[ 3], a[ 6]) + + MUL15(a[ 4], a[ 5])) << 1); + t[10] = MUL15(a[ 5], a[ 5]) + + ((MUL15(a[ 0], a[10]) + + MUL15(a[ 1], a[ 9]) + + MUL15(a[ 2], a[ 8]) + + MUL15(a[ 3], a[ 7]) + + MUL15(a[ 4], a[ 6])) << 1); + t[11] = ((MUL15(a[ 0], a[11]) + + MUL15(a[ 1], a[10]) + + MUL15(a[ 2], a[ 9]) + + MUL15(a[ 3], a[ 8]) + + MUL15(a[ 4], a[ 7]) + + MUL15(a[ 5], a[ 6])) << 1); + t[12] = MUL15(a[ 6], a[ 6]) + + ((MUL15(a[ 0], a[12]) + + MUL15(a[ 1], a[11]) + + MUL15(a[ 2], a[10]) + + MUL15(a[ 3], a[ 9]) + + MUL15(a[ 4], a[ 8]) + + MUL15(a[ 5], a[ 7])) << 1); + t[13] = ((MUL15(a[ 0], a[13]) + + MUL15(a[ 1], a[12]) + + MUL15(a[ 2], a[11]) + + MUL15(a[ 3], a[10]) + + MUL15(a[ 4], a[ 9]) + + MUL15(a[ 5], a[ 8]) + + MUL15(a[ 6], a[ 7])) << 1); + t[14] = MUL15(a[ 7], a[ 7]) + + ((MUL15(a[ 0], a[14]) + + MUL15(a[ 1], a[13]) + + MUL15(a[ 2], a[12]) + + MUL15(a[ 3], a[11]) + + MUL15(a[ 4], a[10]) + + MUL15(a[ 5], a[ 9]) + + MUL15(a[ 6], a[ 8])) << 1); + t[15] = ((MUL15(a[ 0], a[15]) + + MUL15(a[ 1], a[14]) + + MUL15(a[ 2], a[13]) + + MUL15(a[ 3], a[12]) + + MUL15(a[ 4], a[11]) + + MUL15(a[ 5], a[10]) + + MUL15(a[ 6], a[ 9]) + + MUL15(a[ 7], a[ 8])) << 1); + t[16] = MUL15(a[ 8], a[ 8]) + + ((MUL15(a[ 0], a[16]) + + MUL15(a[ 1], a[15]) + + MUL15(a[ 2], a[14]) + + MUL15(a[ 3], a[13]) + + MUL15(a[ 4], a[12]) + + MUL15(a[ 5], a[11]) + + MUL15(a[ 6], a[10]) + + MUL15(a[ 7], a[ 9])) << 1); + t[17] = ((MUL15(a[ 0], a[17]) + + MUL15(a[ 1], a[16]) + + MUL15(a[ 2], a[15]) + + MUL15(a[ 3], a[14]) + + MUL15(a[ 4], a[13]) + + MUL15(a[ 5], a[12]) + + MUL15(a[ 6], a[11]) + + MUL15(a[ 7], a[10]) + + MUL15(a[ 8], a[ 9])) << 1); + t[18] = MUL15(a[ 9], a[ 9]) + + ((MUL15(a[ 0], a[18]) + + MUL15(a[ 1], a[17]) + + MUL15(a[ 2], a[16]) + + MUL15(a[ 3], a[15]) + + MUL15(a[ 4], a[14]) + + MUL15(a[ 5], a[13]) + + MUL15(a[ 6], a[12]) + + MUL15(a[ 7], a[11]) + + MUL15(a[ 8], a[10])) << 1); + t[19] = ((MUL15(a[ 0], a[19]) + + MUL15(a[ 1], a[18]) + + MUL15(a[ 2], a[17]) + + MUL15(a[ 3], a[16]) + + MUL15(a[ 4], a[15]) + + MUL15(a[ 5], a[14]) + + MUL15(a[ 6], a[13]) + + MUL15(a[ 7], a[12]) + + MUL15(a[ 8], a[11]) + + MUL15(a[ 9], a[10])) << 1); + t[20] = MUL15(a[10], a[10]) + + ((MUL15(a[ 1], a[19]) + + MUL15(a[ 2], a[18]) + + MUL15(a[ 3], a[17]) + + MUL15(a[ 4], a[16]) + + MUL15(a[ 5], a[15]) + + MUL15(a[ 6], a[14]) + + MUL15(a[ 7], a[13]) + + MUL15(a[ 8], a[12]) + + MUL15(a[ 9], a[11])) << 1); + t[21] = ((MUL15(a[ 2], a[19]) + + MUL15(a[ 3], a[18]) + + MUL15(a[ 4], a[17]) + + MUL15(a[ 5], a[16]) + + MUL15(a[ 6], a[15]) + + MUL15(a[ 7], a[14]) + + MUL15(a[ 8], a[13]) + + MUL15(a[ 9], a[12]) + + MUL15(a[10], a[11])) << 1); + t[22] = MUL15(a[11], a[11]) + + ((MUL15(a[ 3], a[19]) + + MUL15(a[ 4], a[18]) + + MUL15(a[ 5], a[17]) + + MUL15(a[ 6], a[16]) + + MUL15(a[ 7], a[15]) + + MUL15(a[ 8], a[14]) + + MUL15(a[ 9], a[13]) + + MUL15(a[10], a[12])) << 1); + t[23] = ((MUL15(a[ 4], a[19]) + + MUL15(a[ 5], a[18]) + + MUL15(a[ 6], a[17]) + + MUL15(a[ 7], a[16]) + + MUL15(a[ 8], a[15]) + + MUL15(a[ 9], a[14]) + + MUL15(a[10], a[13]) + + MUL15(a[11], a[12])) << 1); + t[24] = MUL15(a[12], a[12]) + + ((MUL15(a[ 5], a[19]) + + MUL15(a[ 6], a[18]) + + MUL15(a[ 7], a[17]) + + MUL15(a[ 8], a[16]) + + MUL15(a[ 9], a[15]) + + MUL15(a[10], a[14]) + + MUL15(a[11], a[13])) << 1); + t[25] = ((MUL15(a[ 6], a[19]) + + MUL15(a[ 7], a[18]) + + MUL15(a[ 8], a[17]) + + MUL15(a[ 9], a[16]) + + MUL15(a[10], a[15]) + + MUL15(a[11], a[14]) + + MUL15(a[12], a[13])) << 1); + t[26] = MUL15(a[13], a[13]) + + ((MUL15(a[ 7], a[19]) + + MUL15(a[ 8], a[18]) + + MUL15(a[ 9], a[17]) + + MUL15(a[10], a[16]) + + MUL15(a[11], a[15]) + + MUL15(a[12], a[14])) << 1); + t[27] = ((MUL15(a[ 8], a[19]) + + MUL15(a[ 9], a[18]) + + MUL15(a[10], a[17]) + + MUL15(a[11], a[16]) + + MUL15(a[12], a[15]) + + MUL15(a[13], a[14])) << 1); + t[28] = MUL15(a[14], a[14]) + + ((MUL15(a[ 9], a[19]) + + MUL15(a[10], a[18]) + + MUL15(a[11], a[17]) + + MUL15(a[12], a[16]) + + MUL15(a[13], a[15])) << 1); + t[29] = ((MUL15(a[10], a[19]) + + MUL15(a[11], a[18]) + + MUL15(a[12], a[17]) + + MUL15(a[13], a[16]) + + MUL15(a[14], a[15])) << 1); + t[30] = MUL15(a[15], a[15]) + + ((MUL15(a[11], a[19]) + + MUL15(a[12], a[18]) + + MUL15(a[13], a[17]) + + MUL15(a[14], a[16])) << 1); + t[31] = ((MUL15(a[12], a[19]) + + MUL15(a[13], a[18]) + + MUL15(a[14], a[17]) + + MUL15(a[15], a[16])) << 1); + t[32] = MUL15(a[16], a[16]) + + ((MUL15(a[13], a[19]) + + MUL15(a[14], a[18]) + + MUL15(a[15], a[17])) << 1); + t[33] = ((MUL15(a[14], a[19]) + + MUL15(a[15], a[18]) + + MUL15(a[16], a[17])) << 1); + t[34] = MUL15(a[17], a[17]) + + ((MUL15(a[15], a[19]) + + MUL15(a[16], a[18])) << 1); + t[35] = ((MUL15(a[16], a[19]) + + MUL15(a[17], a[18])) << 1); + t[36] = MUL15(a[18], a[18]) + + ((MUL15(a[17], a[19])) << 1); + t[37] = ((MUL15(a[18], a[19])) << 1); + t[38] = MUL15(a[19], a[19]); + + d[39] = norm13(d, t, 39); +} + +#endif + +/* + * Perform a "final reduction" in field F255 (field for Curve25519) + * The source value must be less than twice the modulus. If the value + * is not lower than the modulus, then the modulus is subtracted and + * this function returns 1; otherwise, it leaves it untouched and it + * returns 0. + */ +static uint32_t +reduce_final_f255(uint32_t *d) +{ + uint32_t t[20]; + uint32_t cc; + int i; + + memcpy(t, d, sizeof t); + cc = 19; + for (i = 0; i < 20; i ++) { + uint32_t w; + + w = t[i] + cc; + cc = w >> 13; + t[i] = w & 0x1FFF; + } + cc = t[19] >> 8; + t[19] &= 0xFF; + CCOPY(cc, d, t, sizeof t); + return cc; +} + +static void +f255_mulgen(uint32_t *d, const uint32_t *a, const uint32_t *b, int square) +{ + uint32_t t[40], cc, w; + + /* + * Compute raw multiplication. All result words fit in 13 bits + * each; upper word (t[39]) must fit on 5 bits, since the product + * of two 256-bit integers must fit on 512 bits. + */ + if (square) { + square20(t, a); + } else { + mul20(t, a, b); + } + + /* + * Modular reduction: each high word is added where necessary. + * Since the modulus is 2^255-19 and word 20 corresponds to + * offset 20*13 = 260, word 20+k must be added to word k with + * a factor of 19*2^5 = 608. The extra bits in word 19 are also + * added that way. + */ + cc = MUL15(t[19] >> 8, 19); + t[19] &= 0xFF; + +#define MM1(x) do { \ + w = t[x] + cc + MUL15(t[(x) + 20], 608); \ + t[x] = w & 0x1FFF; \ + cc = w >> 13; \ + } while (0) + + MM1( 0); + MM1( 1); + MM1( 2); + MM1( 3); + MM1( 4); + MM1( 5); + MM1( 6); + MM1( 7); + MM1( 8); + MM1( 9); + MM1(10); + MM1(11); + MM1(12); + MM1(13); + MM1(14); + MM1(15); + MM1(16); + MM1(17); + MM1(18); + MM1(19); + +#undef MM1 + + cc = MUL15(w >> 8, 19); + t[19] &= 0xFF; + +#define MM2(x) do { \ + w = t[x] + cc; \ + d[x] = w & 0x1FFF; \ + cc = w >> 13; \ + } while (0) + + MM2( 0); + MM2( 1); + MM2( 2); + MM2( 3); + MM2( 4); + MM2( 5); + MM2( 6); + MM2( 7); + MM2( 8); + MM2( 9); + MM2(10); + MM2(11); + MM2(12); + MM2(13); + MM2(14); + MM2(15); + MM2(16); + MM2(17); + MM2(18); + MM2(19); + +#undef MM2 +} + +/* + * Perform a multiplication of two integers modulo 2^255-19. + * Operands are arrays of 20 words, each containing 13 bits of data, in + * little-endian order. Input value may be up to 2^256-1; on output, value + * fits on 256 bits and is lower than twice the modulus. + * + * f255_mul() is the general multiplication, f255_square() is specialised + * for squarings. + */ +#define f255_mul(d, a, b) f255_mulgen(d, a, b, 0) +#define f255_square(d, a) f255_mulgen(d, a, a, 1) + +/* + * Add two values in F255. Partial reduction is performed (down to less + * than twice the modulus). + */ +static void +f255_add(uint32_t *d, const uint32_t *a, const uint32_t *b) +{ + int i; + uint32_t cc, w; + + cc = 0; + for (i = 0; i < 20; i ++) { + w = a[i] + b[i] + cc; + d[i] = w & 0x1FFF; + cc = w >> 13; + } + cc = MUL15(w >> 8, 19); + d[19] &= 0xFF; + for (i = 0; i < 20; i ++) { + w = d[i] + cc; + d[i] = w & 0x1FFF; + cc = w >> 13; + } +} + +/* + * Subtract one value from another in F255. Partial reduction is + * performed (down to less than twice the modulus). + */ +static void +f255_sub(uint32_t *d, const uint32_t *a, const uint32_t *b) +{ + /* + * We actually compute a - b + 2*p, so that the final value is + * necessarily positive. + */ + int i; + uint32_t cc, w; + + cc = (uint32_t)-38; + for (i = 0; i < 20; i ++) { + w = a[i] - b[i] + cc; + d[i] = w & 0x1FFF; + cc = ARSH(w, 13); + } + cc = MUL15((w + 0x200) >> 8, 19); + d[19] &= 0xFF; + for (i = 0; i < 20; i ++) { + w = d[i] + cc; + d[i] = w & 0x1FFF; + cc = w >> 13; + } +} + +/* + * Multiply an integer by the 'A24' constant (121665). Partial reduction + * is performed (down to less than twice the modulus). + */ +static void +f255_mul_a24(uint32_t *d, const uint32_t *a) +{ + int i; + uint32_t cc, w; + + cc = 0; + for (i = 0; i < 20; i ++) { + w = MUL15(a[i], 121665) + cc; + d[i] = w & 0x1FFF; + cc = w >> 13; + } + cc = MUL15(w >> 8, 19); + d[19] &= 0xFF; + for (i = 0; i < 20; i ++) { + w = d[i] + cc; + d[i] = w & 0x1FFF; + cc = w >> 13; + } +} + +static const unsigned char GEN[] PROGMEM = { + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const unsigned char ORDER[] PROGMEM = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +static const unsigned char * +api_generator(int curve, size_t *len) +{ + (void)curve; + *len = 32; + return GEN; +} + +static const unsigned char * +api_order(int curve, size_t *len) +{ + (void)curve; + *len = 32; + return ORDER; +} + +static size_t +api_xoff(int curve, size_t *len) +{ + (void)curve; + *len = 32; + return 0; +} + +static void +cswap(uint32_t *a, uint32_t *b, uint32_t ctl) +{ + int i; + + ctl = -ctl; + for (i = 0; i < 20; i ++) { + uint32_t aw, bw, tw; + + aw = a[i]; + bw = b[i]; + tw = ctl & (aw ^ bw); + a[i] = aw ^ tw; + b[i] = bw ^ tw; + } +} + +static uint32_t +api_mul(unsigned char *G, size_t Glen, + const unsigned char *kb, size_t kblen, int curve) +{ + uint32_t x1[20], x2[20], x3[20], z2[20], z3[20]; + uint32_t a[20], aa[20], b[20], bb[20]; + uint32_t c[20], d[20], e[20], da[20], cb[20]; + unsigned char k[32]; + uint32_t swap; + int i; + + (void)curve; + + /* + * Points are encoded over exactly 32 bytes. Multipliers must fit + * in 32 bytes as well. + * RFC 7748 mandates that the high bit of the last point byte must + * be ignored/cleared. + */ + if (Glen != 32 || kblen > 32) { + return 0; + } + G[31] &= 0x7F; + + /* + * Initialise variables x1, x2, z2, x3 and z3. We set all of them + * into Montgomery representation. + */ + x1[19] = le8_to_le13(x1, G, 32); + memcpy(x3, x1, sizeof x1); + memset(z2, 0, sizeof z2); + memset(x2, 0, sizeof x2); + x2[0] = 1; + memset(z3, 0, sizeof z3); + z3[0] = 1; + + memset(k, 0, (sizeof k) - kblen); + memcpy(k + (sizeof k) - kblen, kb, kblen); + k[31] &= 0xF8; + k[0] &= 0x7F; + k[0] |= 0x40; + + /* obsolete + print_int("x1", x1); + */ + + swap = 0; + for (i = 254; i >= 0; i --) { + uint32_t kt; + + kt = (k[31 - (i >> 3)] >> (i & 7)) & 1; + swap ^= kt; + cswap(x2, x3, swap); + cswap(z2, z3, swap); + swap = kt; + + /* obsolete + print_int("x2", x2); + print_int("z2", z2); + print_int("x3", x3); + print_int("z3", z3); + */ + + f255_add(a, x2, z2); + f255_square(aa, a); + f255_sub(b, x2, z2); + f255_square(bb, b); + f255_sub(e, aa, bb); + f255_add(c, x3, z3); + f255_sub(d, x3, z3); + f255_mul(da, d, a); + f255_mul(cb, c, b); + + /* obsolete + print_int("a ", a); + print_int("aa", aa); + print_int("b ", b); + print_int("bb", bb); + print_int("e ", e); + print_int("c ", c); + print_int("d ", d); + print_int("da", da); + print_int("cb", cb); + */ + + f255_add(x3, da, cb); + f255_square(x3, x3); + f255_sub(z3, da, cb); + f255_square(z3, z3); + f255_mul(z3, z3, x1); + f255_mul(x2, aa, bb); + f255_mul_a24(z2, e); + f255_add(z2, z2, aa); + f255_mul(z2, e, z2); + + /* obsolete + print_int("x2", x2); + print_int("z2", z2); + print_int("x3", x3); + print_int("z3", z3); + */ + } + cswap(x2, x3, swap); + cswap(z2, z3, swap); + + /* + * Inverse z2 with a modular exponentiation. This is a simple + * square-and-multiply algorithm; we mutualise most non-squarings + * since the exponent contains almost only ones. + */ + memcpy(a, z2, sizeof z2); + for (i = 0; i < 15; i ++) { + f255_square(a, a); + f255_mul(a, a, z2); + } + memcpy(b, a, sizeof a); + for (i = 0; i < 14; i ++) { + int j; + + for (j = 0; j < 16; j ++) { + f255_square(b, b); + } + f255_mul(b, b, a); + } + for (i = 14; i >= 0; i --) { + f255_square(b, b); + if ((0xFFEB >> i) & 1) { + f255_mul(b, z2, b); + } + } + f255_mul(x2, x2, b); + reduce_final_f255(x2); + le13_to_le8(G, 32, x2); + return 1; +} + +static size_t +api_mulgen(unsigned char *R, + const unsigned char *x, size_t xlen, int curve) +{ + const unsigned char *G; + size_t Glen; + + G = api_generator(curve, &Glen); + memcpy_P(R, G, Glen); + api_mul(R, Glen, x, xlen, curve); + return Glen; +} + +static uint32_t +api_muladd(unsigned char *A, const unsigned char *B, size_t len, + const unsigned char *x, size_t xlen, + const unsigned char *y, size_t ylen, int curve) +{ + /* + * We don't implement this method, since it is used for ECDSA + * only, and there is no ECDSA over Curve25519 (which instead + * uses EdDSA). + */ + (void)A; + (void)B; + (void)len; + (void)x; + (void)xlen; + (void)y; + (void)ylen; + (void)curve; + return 0; +} + +/* see bearssl_ec.h */ +const br_ec_impl br_ec_c25519_m15 PROGMEM = { + (uint32_t)0x20000000, + &api_generator, + &api_order, + &api_xoff, + &api_mul, + &api_mulgen, + &api_muladd +}; \ No newline at end of file diff --git a/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.c b/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.c index b648d7a2b..12e4cd2d4 100644 --- a/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.c +++ b/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.c @@ -158,7 +158,7 @@ void br_x509_minimal_run(void *t0ctx); * -- Extensions: extension values are processed in due order. * * -- Basic Constraints: for all certificates except EE, must be - * present, indicate a CA, and have a path legnth compatible with + * present, indicate a CA, and have a path length compatible with * the chain length so far. * * -- Key Usage: for the EE, if present, must allow signatures @@ -600,190 +600,190 @@ static const unsigned char t0_codeblock[] PROGMEM = { 0x04, 0x10, 0x59, 0x30, 0x11, 0x06, 0x08, 0x24, 0x02, 0x05, 0x02, 0x06, 0x22, 0x04, 0x03, 0x57, 0x28, 0x24, 0x25, 0x06, 0x01, 0x28, 0x24, 0x01, 0x00, 0x03, 0x07, 0xB4, 0x01, 0x21, 0x8F, 0x01, 0x22, 0x8F, 0x25, 0x01, - 0x23, 0x11, 0x06, 0x81, 0x26, 0x24, 0x74, 0xAD, 0xAF, 0x25, 0x06, 0x81, - 0x1A, 0x01, 0x00, 0x03, 0x08, 0xAF, 0x9E, 0x24, 0xB3, 0x25, 0x01, 0x01, + 0x23, 0x11, 0x06, 0x81, 0x20, 0x24, 0x74, 0xAD, 0xAF, 0x25, 0x06, 0x81, + 0x14, 0x01, 0x00, 0x03, 0x08, 0xAF, 0x9E, 0x24, 0xB3, 0x25, 0x01, 0x01, 0x11, 0x06, 0x04, 0xA6, 0x03, 0x08, 0xB3, 0x01, 0x04, 0x78, 0xAD, 0x70, 0x26, 0x06, 0x0F, 0x02, 0x00, 0x06, 0x03, 0xC3, 0x04, 0x05, 0x99, 0x01, - 0x7F, 0x03, 0x07, 0x04, 0x80, 0x6C, 0x91, 0x26, 0x06, 0x06, 0x02, 0x00, - 0x9B, 0x04, 0x80, 0x62, 0xC5, 0x26, 0x06, 0x11, 0x02, 0x00, 0x06, 0x09, + 0x7F, 0x03, 0x07, 0x04, 0x80, 0x66, 0x91, 0x26, 0x06, 0x06, 0x02, 0x00, + 0x9B, 0x04, 0x80, 0x5C, 0xC5, 0x26, 0x06, 0x11, 0x02, 0x00, 0x06, 0x09, 0x01, 0x00, 0x03, 0x01, 0x98, 0x03, 0x01, 0x04, 0x01, 0xC3, 0x04, 0x80, - 0x4D, 0x73, 0x26, 0x06, 0x0A, 0x02, 0x08, 0x06, 0x03, 0x9A, 0x04, 0x01, - 0xC3, 0x04, 0x3F, 0x6F, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x38, 0xC8, 0x26, - 0x06, 0x03, 0xC3, 0x04, 0x31, 0x90, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x2A, - 0xC6, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x23, 0x7A, 0x26, 0x06, 0x03, 0xC3, - 0x04, 0x1C, 0x85, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x15, 0x6E, 0x26, 0x06, - 0x03, 0xC3, 0x04, 0x0E, 0xC7, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x07, 0x02, - 0x08, 0x06, 0x02, 0x49, 0x28, 0xC3, 0x79, 0x79, 0x04, 0xFE, 0x62, 0x79, - 0x79, 0x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02, 0x56, 0x28, 0x24, 0x79, - 0x3A, 0x02, 0x00, 0x06, 0x08, 0x02, 0x01, 0x3C, 0x2F, 0x05, 0x02, 0x45, - 0x28, 0x02, 0x00, 0x06, 0x01, 0x17, 0x02, 0x00, 0x02, 0x07, 0x2F, 0x05, - 0x02, 0x51, 0x28, 0xB3, 0x76, 0xAD, 0x9E, 0x06, 0x80, 0x77, 0xBD, 0x26, - 0x06, 0x07, 0x01, 0x02, 0x5A, 0x8A, 0x04, 0x80, 0x5E, 0xBE, 0x26, 0x06, - 0x07, 0x01, 0x03, 0x5A, 0x8B, 0x04, 0x80, 0x53, 0xBF, 0x26, 0x06, 0x07, - 0x01, 0x04, 0x5A, 0x8C, 0x04, 0x80, 0x48, 0xC0, 0x26, 0x06, 0x06, 0x01, - 0x05, 0x5A, 0x8D, 0x04, 0x3E, 0xC1, 0x26, 0x06, 0x06, 0x01, 0x06, 0x5A, - 0x8E, 0x04, 0x34, 0x7F, 0x26, 0x06, 0x06, 0x01, 0x02, 0x59, 0x8A, 0x04, - 0x2A, 0x80, 0x26, 0x06, 0x06, 0x01, 0x03, 0x59, 0x8B, 0x04, 0x20, 0x81, - 0x26, 0x06, 0x06, 0x01, 0x04, 0x59, 0x8C, 0x04, 0x16, 0x82, 0x26, 0x06, - 0x06, 0x01, 0x05, 0x59, 0x8D, 0x04, 0x0C, 0x83, 0x26, 0x06, 0x06, 0x01, - 0x06, 0x59, 0x8E, 0x04, 0x02, 0x57, 0x28, 0x5E, 0x35, 0x60, 0x37, 0x1B, - 0x25, 0x05, 0x02, 0x57, 0x28, 0x5D, 0x37, 0x04, 0x02, 0x57, 0x28, 0xC2, - 0xA4, 0x25, 0x01, T0_INT2(BR_X509_BUFSIZE_SIG), 0x12, 0x06, 0x02, 0x50, - 0x28, 0x25, 0x5F, 0x35, 0x5C, 0xA5, 0x79, 0x79, 0x01, 0x00, 0x5B, 0x36, - 0x18, 0x00, 0x00, 0x01, 0x30, 0x0A, 0x25, 0x01, 0x00, 0x01, 0x09, 0x72, - 0x05, 0x02, 0x48, 0x28, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x01, 0x81, - 0x08, 0x00, 0x00, 0x01, 0x81, 0x10, 0x00, 0x00, 0x01, 0x81, 0x19, 0x00, - 0x00, 0x01, 0x81, 0x22, 0x00, 0x00, 0x01, 0x81, 0x2B, 0x00, 0x01, 0x7E, - 0x01, 0x01, 0x11, 0x3B, 0x01, 0x83, 0xFD, 0x7F, 0x11, 0x15, 0x06, 0x03, - 0x3B, 0x24, 0x00, 0x3B, 0x25, 0x03, 0x00, 0x25, 0xCA, 0x05, 0x04, 0x42, - 0x01, 0x00, 0x00, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x96, 0x04, - 0x80, 0x49, 0x25, 0x01, 0x90, 0x00, 0x0D, 0x06, 0x0F, 0x01, 0x06, 0x14, - 0x01, 0x81, 0x40, 0x2F, 0x96, 0x02, 0x00, 0x01, 0x00, 0x97, 0x04, 0x33, - 0x25, 0x01, 0x83, 0xFF, 0x7F, 0x0D, 0x06, 0x14, 0x01, 0x0C, 0x14, 0x01, - 0x81, 0x60, 0x2F, 0x96, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00, 0x01, - 0x00, 0x97, 0x04, 0x17, 0x01, 0x12, 0x14, 0x01, 0x81, 0x70, 0x2F, 0x96, - 0x02, 0x00, 0x01, 0x0C, 0x97, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00, - 0x01, 0x00, 0x97, 0x00, 0x00, 0x01, 0x82, 0x15, 0x00, 0x00, 0x25, 0x01, - 0x83, 0xB0, 0x00, 0x01, 0x83, 0xB7, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x81, - 0x34, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00, 0x01, 0x81, 0x78, 0x00, - 0x00, 0x01, 0x3D, 0x00, 0x00, 0x01, 0x80, 0x43, 0x00, 0x00, 0x01, 0x80, - 0x4D, 0x00, 0x00, 0x01, 0x80, 0x57, 0x00, 0x00, 0x01, 0x80, 0x61, 0x00, - 0x00, 0x30, 0x11, 0x06, 0x04, 0x42, 0xAD, 0xC2, 0xB4, 0x00, 0x00, 0x01, - 0x82, 0x09, 0x00, 0x00, 0x01, 0x81, 0x6C, 0x00, 0x00, 0x25, 0x01, 0x83, - 0xB8, 0x00, 0x01, 0x83, 0xBF, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x30, 0x62, - 0x37, 0x01, 0x7F, 0x7C, 0x19, 0x01, 0x00, 0x7C, 0x19, 0x04, 0x7A, 0x00, - 0x01, 0x81, 0x38, 0x00, 0x01, 0x7E, 0x0D, 0x06, 0x02, 0x4F, 0x28, 0x25, - 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00, 0x30, 0x25, 0x3F, 0x3B, 0x01, - 0x82, 0x00, 0x13, 0x2F, 0x06, 0x04, 0x42, 0x01, 0x00, 0x00, 0x30, 0x67, - 0x09, 0x37, 0x40, 0x00, 0x00, 0x14, 0x01, 0x3F, 0x15, 0x01, 0x81, 0x00, - 0x2F, 0x96, 0x00, 0x02, 0x01, 0x00, 0x03, 0x00, 0xAF, 0x25, 0x06, 0x80, - 0x59, 0xB3, 0x01, 0x20, 0x30, 0x11, 0x06, 0x17, 0x24, 0x74, 0xAD, 0x9E, - 0x24, 0x01, 0x7F, 0x2E, 0x03, 0x01, 0xB3, 0x01, 0x20, 0x77, 0xAD, 0xB2, - 0x02, 0x01, 0x1F, 0x79, 0x79, 0x04, 0x38, 0x01, 0x21, 0x30, 0x11, 0x06, - 0x08, 0x24, 0x75, 0xB6, 0x01, 0x01, 0x1E, 0x04, 0x2A, 0x01, 0x22, 0x30, - 0x11, 0x06, 0x11, 0x24, 0x75, 0xB6, 0x25, 0x06, 0x06, 0x2C, 0x02, 0x00, - 0x2F, 0x03, 0x00, 0x01, 0x02, 0x1E, 0x04, 0x13, 0x01, 0x26, 0x30, 0x11, - 0x06, 0x08, 0x24, 0x75, 0xB6, 0x01, 0x06, 0x1E, 0x04, 0x05, 0x42, 0xAE, - 0x01, 0x00, 0x24, 0x04, 0xFF, 0x23, 0x79, 0x02, 0x00, 0x00, 0x00, 0xAF, - 0xB4, 0x25, 0x01, 0x01, 0x11, 0x06, 0x08, 0xA6, 0x05, 0x02, 0x51, 0x28, - 0xB4, 0x04, 0x02, 0x51, 0x28, 0x25, 0x01, 0x02, 0x11, 0x06, 0x0C, 0x24, - 0x75, 0xB0, 0x66, 0x2B, 0x41, 0x0D, 0x06, 0x02, 0x51, 0x28, 0xB4, 0x01, - 0x7F, 0x10, 0x06, 0x02, 0x56, 0x28, 0x24, 0x79, 0x00, 0x00, 0xAF, 0x25, - 0x06, 0x1A, 0xAF, 0x9E, 0x24, 0x25, 0x06, 0x11, 0xAF, 0x25, 0x06, 0x0C, - 0xAF, 0x9E, 0x24, 0x89, 0x26, 0x05, 0x02, 0x49, 0x28, 0xC2, 0x04, 0x71, - 0x79, 0x79, 0x04, 0x63, 0x79, 0x00, 0x02, 0x03, 0x00, 0xB3, 0x01, 0x03, - 0x78, 0xAD, 0xBA, 0x03, 0x01, 0x02, 0x01, 0x01, 0x07, 0x12, 0x06, 0x02, - 0x56, 0x28, 0x25, 0x01, 0x00, 0x30, 0x11, 0x06, 0x05, 0x24, 0x4D, 0x28, - 0x04, 0x15, 0x01, 0x01, 0x30, 0x11, 0x06, 0x0A, 0x24, 0xBA, 0x02, 0x01, - 0x14, 0x02, 0x01, 0x0E, 0x04, 0x05, 0x24, 0xBA, 0x01, 0x00, 0x24, 0x02, - 0x00, 0x06, 0x19, 0x01, 0x00, 0x30, 0x01, 0x38, 0x15, 0x06, 0x03, 0x01, - 0x10, 0x2F, 0x3B, 0x01, 0x81, 0x40, 0x15, 0x06, 0x03, 0x01, 0x20, 0x2F, - 0x62, 0x37, 0x04, 0x07, 0x01, 0x04, 0x15, 0x05, 0x02, 0x4D, 0x28, 0xC2, - 0x00, 0x00, 0x38, 0xAF, 0xC2, 0x1A, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00, - 0x38, 0xAF, 0x25, 0x06, 0x30, 0xB3, 0x01, 0x11, 0x77, 0xAD, 0x25, 0x05, - 0x02, 0x44, 0x28, 0x25, 0x06, 0x20, 0xAF, 0x9E, 0x24, 0x87, 0x26, 0x03, - 0x01, 0x01, 0x00, 0x2E, 0x03, 0x02, 0xB2, 0x25, 0x02, 0x01, 0x15, 0x06, - 0x07, 0x2C, 0x06, 0x04, 0x01, 0x7F, 0x03, 0x00, 0x02, 0x02, 0x1F, 0x79, - 0x04, 0x5D, 0x79, 0x04, 0x4D, 0x79, 0x1A, 0x02, 0x00, 0x00, 0x00, 0xB3, - 0x01, 0x06, 0x78, 0xB1, 0x00, 0x00, 0xB8, 0x86, 0x06, 0x0E, 0x3B, 0x25, - 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x00, 0x00, 0xB8, 0x6D, 0x04, 0x08, - 0x92, 0x06, 0x05, 0x24, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xB9, 0x86, - 0x06, 0x0E, 0x3B, 0x25, 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x00, 0x00, - 0xB9, 0x6D, 0x04, 0x08, 0x92, 0x06, 0x05, 0x24, 0x01, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x00, 0x04, - 0x80, 0x55, 0x25, 0x01, 0x81, 0x40, 0x0D, 0x06, 0x07, 0x24, 0x01, 0x00, - 0x00, 0x04, 0x80, 0x47, 0x25, 0x01, 0x81, 0x60, 0x0D, 0x06, 0x0E, 0x01, - 0x1F, 0x15, 0x01, 0x01, 0xA3, 0x01, 0x81, 0x00, 0x01, 0x8F, 0x7F, 0x04, - 0x32, 0x25, 0x01, 0x81, 0x70, 0x0D, 0x06, 0x0F, 0x01, 0x0F, 0x15, 0x01, - 0x02, 0xA3, 0x01, 0x90, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x04, 0x1C, 0x25, - 0x01, 0x81, 0x78, 0x0D, 0x06, 0x11, 0x01, 0x07, 0x15, 0x01, 0x03, 0xA3, - 0x01, 0x84, 0x80, 0x00, 0x01, 0x80, 0xC3, 0xFF, 0x7F, 0x04, 0x04, 0x24, - 0x01, 0x00, 0x00, 0x72, 0x05, 0x03, 0x24, 0x01, 0x00, 0x00, 0x00, 0x3B, - 0x25, 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xBA, 0x34, 0x25, - 0x3D, 0x06, 0x03, 0x3B, 0x24, 0x00, 0x01, 0x06, 0x0E, 0x3B, 0x25, 0x01, - 0x06, 0x14, 0x01, 0x02, 0x10, 0x06, 0x04, 0x42, 0x01, 0x7F, 0x00, 0x01, - 0x3F, 0x15, 0x09, 0x00, 0x00, 0x25, 0x06, 0x06, 0x0B, 0xA2, 0x34, 0x41, - 0x04, 0x77, 0x24, 0x25, 0x00, 0x00, 0xB3, 0x01, 0x03, 0x78, 0xAD, 0xBA, - 0x06, 0x02, 0x55, 0x28, 0x00, 0x00, 0x3B, 0x25, 0x06, 0x07, 0x31, 0x25, - 0x06, 0x01, 0x19, 0x04, 0x76, 0x42, 0x00, 0x00, 0x01, 0x01, 0x78, 0xAC, - 0x01, 0x01, 0x10, 0x06, 0x02, 0x43, 0x28, 0xBA, 0x3E, 0x00, 0x04, 0xB3, - 0x25, 0x01, 0x17, 0x01, 0x18, 0x72, 0x05, 0x02, 0x48, 0x28, 0x01, 0x18, - 0x11, 0x03, 0x00, 0x75, 0xAD, 0xA8, 0x02, 0x00, 0x06, 0x0C, 0x01, 0x80, - 0x64, 0x08, 0x03, 0x01, 0xA8, 0x02, 0x01, 0x09, 0x04, 0x0E, 0x25, 0x01, - 0x32, 0x0D, 0x06, 0x04, 0x01, 0x80, 0x64, 0x09, 0x01, 0x8E, 0x6C, 0x09, - 0x03, 0x01, 0x02, 0x01, 0x01, 0x82, 0x6D, 0x08, 0x02, 0x01, 0x01, 0x03, - 0x09, 0x01, 0x04, 0x0C, 0x09, 0x02, 0x01, 0x01, 0x80, 0x63, 0x09, 0x01, - 0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01, 0x01, 0x83, 0x0F, 0x09, 0x01, 0x83, - 0x10, 0x0C, 0x09, 0x03, 0x03, 0x01, 0x01, 0x01, 0x0C, 0xA9, 0x41, 0x01, - 0x01, 0x0E, 0x02, 0x01, 0x01, 0x04, 0x07, 0x3F, 0x02, 0x01, 0x01, 0x80, - 0x64, 0x07, 0x3E, 0x02, 0x01, 0x01, 0x83, 0x10, 0x07, 0x3F, 0x2F, 0x15, - 0x06, 0x03, 0x01, 0x18, 0x09, 0x94, 0x09, 0x7B, 0x25, 0x01, 0x05, 0x14, - 0x02, 0x03, 0x09, 0x03, 0x03, 0x01, 0x1F, 0x15, 0x01, 0x01, 0x3B, 0xA9, - 0x02, 0x03, 0x09, 0x41, 0x03, 0x03, 0x01, 0x00, 0x01, 0x17, 0xA9, 0x01, - 0x9C, 0x10, 0x08, 0x03, 0x02, 0x01, 0x00, 0x01, 0x3B, 0xA9, 0x01, 0x3C, - 0x08, 0x02, 0x02, 0x09, 0x03, 0x02, 0x01, 0x00, 0x01, 0x3C, 0xA9, 0x02, - 0x02, 0x09, 0x03, 0x02, 0xBA, 0x25, 0x01, 0x2E, 0x11, 0x06, 0x0D, 0x24, - 0xBA, 0x25, 0x01, 0x30, 0x01, 0x39, 0x72, 0x06, 0x03, 0x24, 0x04, 0x74, - 0x01, 0x80, 0x5A, 0x10, 0x06, 0x02, 0x48, 0x28, 0x79, 0x02, 0x03, 0x02, - 0x02, 0x00, 0x01, 0xBA, 0x7D, 0x01, 0x0A, 0x08, 0x03, 0x00, 0xBA, 0x7D, - 0x02, 0x00, 0x09, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0xA8, 0x25, 0x02, - 0x01, 0x02, 0x00, 0x72, 0x05, 0x02, 0x48, 0x28, 0x00, 0x00, 0x34, 0xB3, - 0x01, 0x02, 0x78, 0x0B, 0xAB, 0x00, 0x03, 0x25, 0x03, 0x00, 0x03, 0x01, - 0x03, 0x02, 0xAD, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x54, - 0x28, 0x25, 0x01, 0x00, 0x11, 0x06, 0x0B, 0x24, 0x25, 0x05, 0x04, 0x24, - 0x01, 0x00, 0x00, 0xBA, 0x04, 0x6F, 0x02, 0x01, 0x25, 0x05, 0x02, 0x50, - 0x28, 0x41, 0x03, 0x01, 0x02, 0x02, 0x37, 0x02, 0x02, 0x40, 0x03, 0x02, - 0x25, 0x06, 0x03, 0xBA, 0x04, 0x68, 0x24, 0x02, 0x00, 0x02, 0x01, 0x0A, - 0x00, 0x01, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x01, 0x00, 0x01, - 0x81, 0x00, 0x0A, 0x25, 0x05, 0x02, 0x4E, 0x28, 0x03, 0x00, 0x01, 0x00, - 0x02, 0x00, 0x01, 0x00, 0x12, 0x06, 0x19, 0x02, 0x00, 0x41, 0x03, 0x00, - 0x25, 0x01, 0x83, 0xFF, 0xFF, 0x7F, 0x12, 0x06, 0x02, 0x4F, 0x28, 0x01, - 0x08, 0x0E, 0x3B, 0xBA, 0x34, 0x09, 0x04, 0x60, 0x00, 0x00, 0xAC, 0x95, - 0x00, 0x00, 0xAD, 0xC2, 0x00, 0x00, 0xB3, 0x76, 0xAD, 0x00, 0x01, 0xAD, - 0x25, 0x05, 0x02, 0x54, 0x28, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06, - 0x02, 0x54, 0x28, 0x03, 0x00, 0x25, 0x06, 0x16, 0xBA, 0x02, 0x00, 0x25, - 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13, 0x06, 0x02, 0x54, 0x28, 0x01, 0x08, - 0x0E, 0x09, 0x03, 0x00, 0x04, 0x67, 0x24, 0x02, 0x00, 0x00, 0x00, 0xAD, - 0x25, 0x01, 0x81, 0x7F, 0x12, 0x06, 0x08, 0xC2, 0x01, 0x00, 0x67, 0x37, - 0x01, 0x00, 0x00, 0x25, 0x67, 0x37, 0x67, 0x40, 0xA5, 0x01, 0x7F, 0x00, - 0x00, 0xB3, 0x01, 0x0C, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB6, 0x04, - 0x3E, 0x01, 0x12, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x33, - 0x01, 0x13, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x28, 0x01, - 0x14, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x1D, 0x01, 0x16, - 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x12, 0x01, 0x1E, 0x30, - 0x11, 0x06, 0x05, 0x24, 0x75, 0xB5, 0x04, 0x07, 0x42, 0xAE, 0x01, 0x00, - 0x01, 0x00, 0x24, 0x00, 0x01, 0xBA, 0x03, 0x00, 0x02, 0x00, 0x01, 0x05, - 0x14, 0x01, 0x01, 0x15, 0x2D, 0x02, 0x00, 0x01, 0x06, 0x14, 0x25, 0x01, - 0x01, 0x15, 0x06, 0x02, 0x46, 0x28, 0x01, 0x04, 0x0E, 0x02, 0x00, 0x01, - 0x1F, 0x15, 0x25, 0x01, 0x1F, 0x11, 0x06, 0x02, 0x47, 0x28, 0x09, 0x00, - 0x00, 0x25, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xB3, 0x00, 0x01, - 0xAD, 0x25, 0x05, 0x05, 0x67, 0x37, 0x01, 0x7F, 0x00, 0x01, 0x01, 0x03, - 0x00, 0x9F, 0x25, 0x01, 0x83, 0xFF, 0x7E, 0x11, 0x06, 0x16, 0x24, 0x25, - 0x06, 0x10, 0xA0, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, - 0x00, 0x84, 0x03, 0x00, 0x04, 0x6D, 0x04, 0x1B, 0x25, 0x05, 0x05, 0x24, - 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x25, 0x06, 0x0B, - 0x9F, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x04, 0x6D, 0x24, - 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, 0x7F, 0x00, - 0x01, 0xAD, 0x01, 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xA1, 0x25, 0x05, - 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x04, - 0x6D, 0x24, 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, - 0x7F, 0x00, 0x01, 0xAD, 0x01, 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xBA, + 0x47, 0x73, 0x26, 0x06, 0x0A, 0x02, 0x08, 0x06, 0x03, 0x9A, 0x04, 0x01, + 0xC3, 0x04, 0x39, 0x6F, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x32, 0xC8, 0x26, + 0x06, 0x03, 0xC3, 0x04, 0x2B, 0x90, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x24, + 0xC6, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x1D, 0x7A, 0x26, 0x06, 0x03, 0xC3, + 0x04, 0x16, 0x85, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x0F, 0x6E, 0x26, 0x06, + 0x03, 0xC3, 0x04, 0x08, 0xC7, 0x26, 0x06, 0x03, 0xC3, 0x04, 0x01, 0xC3, + 0x79, 0x79, 0x04, 0xFE, 0x68, 0x79, 0x79, 0x04, 0x08, 0x01, 0x7F, 0x11, + 0x05, 0x02, 0x56, 0x28, 0x24, 0x79, 0x3A, 0x02, 0x00, 0x06, 0x08, 0x02, + 0x01, 0x3C, 0x2F, 0x05, 0x02, 0x45, 0x28, 0x02, 0x00, 0x06, 0x01, 0x17, + 0x02, 0x00, 0x02, 0x07, 0x2F, 0x05, 0x02, 0x51, 0x28, 0xB3, 0x76, 0xAD, + 0x9E, 0x06, 0x80, 0x77, 0xBD, 0x26, 0x06, 0x07, 0x01, 0x02, 0x5A, 0x8A, + 0x04, 0x80, 0x5E, 0xBE, 0x26, 0x06, 0x07, 0x01, 0x03, 0x5A, 0x8B, 0x04, + 0x80, 0x53, 0xBF, 0x26, 0x06, 0x07, 0x01, 0x04, 0x5A, 0x8C, 0x04, 0x80, + 0x48, 0xC0, 0x26, 0x06, 0x06, 0x01, 0x05, 0x5A, 0x8D, 0x04, 0x3E, 0xC1, + 0x26, 0x06, 0x06, 0x01, 0x06, 0x5A, 0x8E, 0x04, 0x34, 0x7F, 0x26, 0x06, + 0x06, 0x01, 0x02, 0x59, 0x8A, 0x04, 0x2A, 0x80, 0x26, 0x06, 0x06, 0x01, + 0x03, 0x59, 0x8B, 0x04, 0x20, 0x81, 0x26, 0x06, 0x06, 0x01, 0x04, 0x59, + 0x8C, 0x04, 0x16, 0x82, 0x26, 0x06, 0x06, 0x01, 0x05, 0x59, 0x8D, 0x04, + 0x0C, 0x83, 0x26, 0x06, 0x06, 0x01, 0x06, 0x59, 0x8E, 0x04, 0x02, 0x57, + 0x28, 0x5E, 0x35, 0x60, 0x37, 0x1B, 0x25, 0x05, 0x02, 0x57, 0x28, 0x5D, + 0x37, 0x04, 0x02, 0x57, 0x28, 0xC2, 0xA4, 0x25, 0x01, + T0_INT2(BR_X509_BUFSIZE_SIG), 0x12, 0x06, 0x02, 0x50, 0x28, 0x25, 0x5F, + 0x35, 0x5C, 0xA5, 0x79, 0x79, 0x01, 0x00, 0x5B, 0x36, 0x18, 0x00, 0x00, + 0x01, 0x30, 0x0A, 0x25, 0x01, 0x00, 0x01, 0x09, 0x72, 0x05, 0x02, 0x48, + 0x28, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x01, 0x81, 0x08, 0x00, 0x00, + 0x01, 0x81, 0x10, 0x00, 0x00, 0x01, 0x81, 0x19, 0x00, 0x00, 0x01, 0x81, + 0x22, 0x00, 0x00, 0x01, 0x81, 0x2B, 0x00, 0x01, 0x7E, 0x01, 0x01, 0x11, + 0x3B, 0x01, 0x83, 0xFD, 0x7F, 0x11, 0x15, 0x06, 0x03, 0x3B, 0x24, 0x00, + 0x3B, 0x25, 0x03, 0x00, 0x25, 0xCA, 0x05, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x96, 0x04, 0x80, 0x49, 0x25, + 0x01, 0x90, 0x00, 0x0D, 0x06, 0x0F, 0x01, 0x06, 0x14, 0x01, 0x81, 0x40, + 0x2F, 0x96, 0x02, 0x00, 0x01, 0x00, 0x97, 0x04, 0x33, 0x25, 0x01, 0x83, + 0xFF, 0x7F, 0x0D, 0x06, 0x14, 0x01, 0x0C, 0x14, 0x01, 0x81, 0x60, 0x2F, + 0x96, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00, 0x01, 0x00, 0x97, 0x04, + 0x17, 0x01, 0x12, 0x14, 0x01, 0x81, 0x70, 0x2F, 0x96, 0x02, 0x00, 0x01, + 0x0C, 0x97, 0x02, 0x00, 0x01, 0x06, 0x97, 0x02, 0x00, 0x01, 0x00, 0x97, + 0x00, 0x00, 0x01, 0x82, 0x15, 0x00, 0x00, 0x25, 0x01, 0x83, 0xB0, 0x00, + 0x01, 0x83, 0xB7, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x81, 0x34, 0x00, 0x00, + 0x01, 0x80, 0x6B, 0x00, 0x00, 0x01, 0x81, 0x78, 0x00, 0x00, 0x01, 0x3D, + 0x00, 0x00, 0x01, 0x80, 0x43, 0x00, 0x00, 0x01, 0x80, 0x4D, 0x00, 0x00, + 0x01, 0x80, 0x57, 0x00, 0x00, 0x01, 0x80, 0x61, 0x00, 0x00, 0x30, 0x11, + 0x06, 0x04, 0x42, 0xAD, 0xC2, 0xB4, 0x00, 0x00, 0x01, 0x82, 0x09, 0x00, + 0x00, 0x01, 0x81, 0x6C, 0x00, 0x00, 0x25, 0x01, 0x83, 0xB8, 0x00, 0x01, + 0x83, 0xBF, 0x7F, 0x72, 0x00, 0x00, 0x01, 0x30, 0x62, 0x37, 0x01, 0x7F, + 0x7C, 0x19, 0x01, 0x00, 0x7C, 0x19, 0x04, 0x7A, 0x00, 0x01, 0x81, 0x38, + 0x00, 0x01, 0x7E, 0x0D, 0x06, 0x02, 0x4F, 0x28, 0x25, 0x03, 0x00, 0x0A, + 0x02, 0x00, 0x00, 0x00, 0x30, 0x25, 0x3F, 0x3B, 0x01, 0x82, 0x00, 0x13, + 0x2F, 0x06, 0x04, 0x42, 0x01, 0x00, 0x00, 0x30, 0x67, 0x09, 0x37, 0x40, + 0x00, 0x00, 0x14, 0x01, 0x3F, 0x15, 0x01, 0x81, 0x00, 0x2F, 0x96, 0x00, + 0x02, 0x01, 0x00, 0x03, 0x00, 0xAF, 0x25, 0x06, 0x80, 0x59, 0xB3, 0x01, + 0x20, 0x30, 0x11, 0x06, 0x17, 0x24, 0x74, 0xAD, 0x9E, 0x24, 0x01, 0x7F, + 0x2E, 0x03, 0x01, 0xB3, 0x01, 0x20, 0x77, 0xAD, 0xB2, 0x02, 0x01, 0x1F, + 0x79, 0x79, 0x04, 0x38, 0x01, 0x21, 0x30, 0x11, 0x06, 0x08, 0x24, 0x75, + 0xB6, 0x01, 0x01, 0x1E, 0x04, 0x2A, 0x01, 0x22, 0x30, 0x11, 0x06, 0x11, + 0x24, 0x75, 0xB6, 0x25, 0x06, 0x06, 0x2C, 0x02, 0x00, 0x2F, 0x03, 0x00, + 0x01, 0x02, 0x1E, 0x04, 0x13, 0x01, 0x26, 0x30, 0x11, 0x06, 0x08, 0x24, + 0x75, 0xB6, 0x01, 0x06, 0x1E, 0x04, 0x05, 0x42, 0xAE, 0x01, 0x00, 0x24, + 0x04, 0xFF, 0x23, 0x79, 0x02, 0x00, 0x00, 0x00, 0xAF, 0xB4, 0x25, 0x01, + 0x01, 0x11, 0x06, 0x08, 0xA6, 0x05, 0x02, 0x51, 0x28, 0xB4, 0x04, 0x02, + 0x51, 0x28, 0x25, 0x01, 0x02, 0x11, 0x06, 0x0C, 0x24, 0x75, 0xB0, 0x66, + 0x2B, 0x41, 0x0D, 0x06, 0x02, 0x51, 0x28, 0xB4, 0x01, 0x7F, 0x10, 0x06, + 0x02, 0x56, 0x28, 0x24, 0x79, 0x00, 0x00, 0xAF, 0x25, 0x06, 0x1A, 0xAF, + 0x9E, 0x24, 0x25, 0x06, 0x11, 0xAF, 0x25, 0x06, 0x0C, 0xAF, 0x9E, 0x24, + 0x89, 0x26, 0x05, 0x02, 0x49, 0x28, 0xC2, 0x04, 0x71, 0x79, 0x79, 0x04, + 0x63, 0x79, 0x00, 0x02, 0x03, 0x00, 0xB3, 0x01, 0x03, 0x78, 0xAD, 0xBA, + 0x03, 0x01, 0x02, 0x01, 0x01, 0x07, 0x12, 0x06, 0x02, 0x56, 0x28, 0x25, + 0x01, 0x00, 0x30, 0x11, 0x06, 0x05, 0x24, 0x4D, 0x28, 0x04, 0x15, 0x01, + 0x01, 0x30, 0x11, 0x06, 0x0A, 0x24, 0xBA, 0x02, 0x01, 0x14, 0x02, 0x01, + 0x0E, 0x04, 0x05, 0x24, 0xBA, 0x01, 0x00, 0x24, 0x02, 0x00, 0x06, 0x19, + 0x01, 0x00, 0x30, 0x01, 0x38, 0x15, 0x06, 0x03, 0x01, 0x10, 0x2F, 0x3B, + 0x01, 0x81, 0x40, 0x15, 0x06, 0x03, 0x01, 0x20, 0x2F, 0x62, 0x37, 0x04, + 0x07, 0x01, 0x04, 0x15, 0x05, 0x02, 0x4D, 0x28, 0xC2, 0x00, 0x00, 0x38, + 0xAF, 0xC2, 0x1A, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00, 0x38, 0xAF, 0x25, + 0x06, 0x30, 0xB3, 0x01, 0x11, 0x77, 0xAD, 0x25, 0x05, 0x02, 0x44, 0x28, + 0x25, 0x06, 0x20, 0xAF, 0x9E, 0x24, 0x87, 0x26, 0x03, 0x01, 0x01, 0x00, + 0x2E, 0x03, 0x02, 0xB2, 0x25, 0x02, 0x01, 0x15, 0x06, 0x07, 0x2C, 0x06, + 0x04, 0x01, 0x7F, 0x03, 0x00, 0x02, 0x02, 0x1F, 0x79, 0x04, 0x5D, 0x79, + 0x04, 0x4D, 0x79, 0x1A, 0x02, 0x00, 0x00, 0x00, 0xB3, 0x01, 0x06, 0x78, + 0xB1, 0x00, 0x00, 0xB8, 0x86, 0x06, 0x0E, 0x3B, 0x25, 0x05, 0x06, 0x42, + 0x01, 0x00, 0x01, 0x00, 0x00, 0xB8, 0x6D, 0x04, 0x08, 0x92, 0x06, 0x05, + 0x24, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xB9, 0x86, 0x06, 0x0E, 0x3B, + 0x25, 0x05, 0x06, 0x42, 0x01, 0x00, 0x01, 0x00, 0x00, 0xB9, 0x6D, 0x04, + 0x08, 0x92, 0x06, 0x05, 0x24, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0xBA, + 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x04, 0x00, 0x04, 0x80, 0x55, 0x25, + 0x01, 0x81, 0x40, 0x0D, 0x06, 0x07, 0x24, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x47, 0x25, 0x01, 0x81, 0x60, 0x0D, 0x06, 0x0E, 0x01, 0x1F, 0x15, 0x01, + 0x01, 0xA3, 0x01, 0x81, 0x00, 0x01, 0x8F, 0x7F, 0x04, 0x32, 0x25, 0x01, + 0x81, 0x70, 0x0D, 0x06, 0x0F, 0x01, 0x0F, 0x15, 0x01, 0x02, 0xA3, 0x01, + 0x90, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x04, 0x1C, 0x25, 0x01, 0x81, 0x78, + 0x0D, 0x06, 0x11, 0x01, 0x07, 0x15, 0x01, 0x03, 0xA3, 0x01, 0x84, 0x80, + 0x00, 0x01, 0x80, 0xC3, 0xFF, 0x7F, 0x04, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x72, 0x05, 0x03, 0x24, 0x01, 0x00, 0x00, 0x00, 0x3B, 0x25, 0x05, 0x06, + 0x42, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xBA, 0x34, 0x25, 0x3D, 0x06, 0x03, + 0x3B, 0x24, 0x00, 0x01, 0x06, 0x0E, 0x3B, 0x25, 0x01, 0x06, 0x14, 0x01, + 0x02, 0x10, 0x06, 0x04, 0x42, 0x01, 0x7F, 0x00, 0x01, 0x3F, 0x15, 0x09, + 0x00, 0x00, 0x25, 0x06, 0x06, 0x0B, 0xA2, 0x34, 0x41, 0x04, 0x77, 0x24, + 0x25, 0x00, 0x00, 0xB3, 0x01, 0x03, 0x78, 0xAD, 0xBA, 0x06, 0x02, 0x55, + 0x28, 0x00, 0x00, 0x3B, 0x25, 0x06, 0x07, 0x31, 0x25, 0x06, 0x01, 0x19, + 0x04, 0x76, 0x42, 0x00, 0x00, 0x01, 0x01, 0x78, 0xAC, 0x01, 0x01, 0x10, + 0x06, 0x02, 0x43, 0x28, 0xBA, 0x3E, 0x00, 0x04, 0xB3, 0x25, 0x01, 0x17, + 0x01, 0x18, 0x72, 0x05, 0x02, 0x48, 0x28, 0x01, 0x18, 0x11, 0x03, 0x00, + 0x75, 0xAD, 0xA8, 0x02, 0x00, 0x06, 0x0C, 0x01, 0x80, 0x64, 0x08, 0x03, + 0x01, 0xA8, 0x02, 0x01, 0x09, 0x04, 0x0E, 0x25, 0x01, 0x32, 0x0D, 0x06, + 0x04, 0x01, 0x80, 0x64, 0x09, 0x01, 0x8E, 0x6C, 0x09, 0x03, 0x01, 0x02, + 0x01, 0x01, 0x82, 0x6D, 0x08, 0x02, 0x01, 0x01, 0x03, 0x09, 0x01, 0x04, + 0x0C, 0x09, 0x02, 0x01, 0x01, 0x80, 0x63, 0x09, 0x01, 0x80, 0x64, 0x0C, + 0x0A, 0x02, 0x01, 0x01, 0x83, 0x0F, 0x09, 0x01, 0x83, 0x10, 0x0C, 0x09, + 0x03, 0x03, 0x01, 0x01, 0x01, 0x0C, 0xA9, 0x41, 0x01, 0x01, 0x0E, 0x02, + 0x01, 0x01, 0x04, 0x07, 0x3F, 0x02, 0x01, 0x01, 0x80, 0x64, 0x07, 0x3E, + 0x02, 0x01, 0x01, 0x83, 0x10, 0x07, 0x3F, 0x2F, 0x15, 0x06, 0x03, 0x01, + 0x18, 0x09, 0x94, 0x09, 0x7B, 0x25, 0x01, 0x05, 0x14, 0x02, 0x03, 0x09, + 0x03, 0x03, 0x01, 0x1F, 0x15, 0x01, 0x01, 0x3B, 0xA9, 0x02, 0x03, 0x09, + 0x41, 0x03, 0x03, 0x01, 0x00, 0x01, 0x17, 0xA9, 0x01, 0x9C, 0x10, 0x08, + 0x03, 0x02, 0x01, 0x00, 0x01, 0x3B, 0xA9, 0x01, 0x3C, 0x08, 0x02, 0x02, + 0x09, 0x03, 0x02, 0x01, 0x00, 0x01, 0x3C, 0xA9, 0x02, 0x02, 0x09, 0x03, + 0x02, 0xBA, 0x25, 0x01, 0x2E, 0x11, 0x06, 0x0D, 0x24, 0xBA, 0x25, 0x01, + 0x30, 0x01, 0x39, 0x72, 0x06, 0x03, 0x24, 0x04, 0x74, 0x01, 0x80, 0x5A, + 0x10, 0x06, 0x02, 0x48, 0x28, 0x79, 0x02, 0x03, 0x02, 0x02, 0x00, 0x01, + 0xBA, 0x7D, 0x01, 0x0A, 0x08, 0x03, 0x00, 0xBA, 0x7D, 0x02, 0x00, 0x09, + 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0xA8, 0x25, 0x02, 0x01, 0x02, 0x00, + 0x72, 0x05, 0x02, 0x48, 0x28, 0x00, 0x00, 0x34, 0xB3, 0x01, 0x02, 0x78, + 0x0B, 0xAB, 0x00, 0x03, 0x25, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0xAD, + 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x54, 0x28, 0x25, 0x01, + 0x00, 0x11, 0x06, 0x0B, 0x24, 0x25, 0x05, 0x04, 0x24, 0x01, 0x00, 0x00, + 0xBA, 0x04, 0x6F, 0x02, 0x01, 0x25, 0x05, 0x02, 0x50, 0x28, 0x41, 0x03, + 0x01, 0x02, 0x02, 0x37, 0x02, 0x02, 0x40, 0x03, 0x02, 0x25, 0x06, 0x03, + 0xBA, 0x04, 0x68, 0x24, 0x02, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x01, 0xBA, + 0x25, 0x01, 0x81, 0x00, 0x0D, 0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x0A, + 0x25, 0x05, 0x02, 0x4E, 0x28, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, + 0x00, 0x12, 0x06, 0x19, 0x02, 0x00, 0x41, 0x03, 0x00, 0x25, 0x01, 0x83, + 0xFF, 0xFF, 0x7F, 0x12, 0x06, 0x02, 0x4F, 0x28, 0x01, 0x08, 0x0E, 0x3B, + 0xBA, 0x34, 0x09, 0x04, 0x60, 0x00, 0x00, 0xAC, 0x95, 0x00, 0x00, 0xAD, + 0xC2, 0x00, 0x00, 0xB3, 0x76, 0xAD, 0x00, 0x01, 0xAD, 0x25, 0x05, 0x02, + 0x54, 0x28, 0xBA, 0x25, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x54, 0x28, + 0x03, 0x00, 0x25, 0x06, 0x16, 0xBA, 0x02, 0x00, 0x25, 0x01, 0x87, 0xFF, + 0xFF, 0x7F, 0x13, 0x06, 0x02, 0x54, 0x28, 0x01, 0x08, 0x0E, 0x09, 0x03, + 0x00, 0x04, 0x67, 0x24, 0x02, 0x00, 0x00, 0x00, 0xAD, 0x25, 0x01, 0x81, + 0x7F, 0x12, 0x06, 0x08, 0xC2, 0x01, 0x00, 0x67, 0x37, 0x01, 0x00, 0x00, + 0x25, 0x67, 0x37, 0x67, 0x40, 0xA5, 0x01, 0x7F, 0x00, 0x00, 0xB3, 0x01, + 0x0C, 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB6, 0x04, 0x3E, 0x01, 0x12, + 0x30, 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x33, 0x01, 0x13, 0x30, + 0x11, 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x28, 0x01, 0x14, 0x30, 0x11, + 0x06, 0x05, 0x24, 0x75, 0xB7, 0x04, 0x1D, 0x01, 0x16, 0x30, 0x11, 0x06, + 0x05, 0x24, 0x75, 0xB7, 0x04, 0x12, 0x01, 0x1E, 0x30, 0x11, 0x06, 0x05, + 0x24, 0x75, 0xB5, 0x04, 0x07, 0x42, 0xAE, 0x01, 0x00, 0x01, 0x00, 0x24, + 0x00, 0x01, 0xBA, 0x03, 0x00, 0x02, 0x00, 0x01, 0x05, 0x14, 0x01, 0x01, + 0x15, 0x2D, 0x02, 0x00, 0x01, 0x06, 0x14, 0x25, 0x01, 0x01, 0x15, 0x06, + 0x02, 0x46, 0x28, 0x01, 0x04, 0x0E, 0x02, 0x00, 0x01, 0x1F, 0x15, 0x25, + 0x01, 0x1F, 0x11, 0x06, 0x02, 0x47, 0x28, 0x09, 0x00, 0x00, 0x25, 0x05, + 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0xB3, 0x00, 0x01, 0xAD, 0x25, 0x05, + 0x05, 0x67, 0x37, 0x01, 0x7F, 0x00, 0x01, 0x01, 0x03, 0x00, 0x9F, 0x25, + 0x01, 0x83, 0xFF, 0x7E, 0x11, 0x06, 0x16, 0x24, 0x25, 0x06, 0x10, 0xA0, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, - 0x00, 0x04, 0x6D, 0x24, 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, - 0x37, 0x01, 0x7F, 0x00, 0x00, 0xBA, 0x01, 0x08, 0x0E, 0x3B, 0xBA, 0x34, - 0x09, 0x00, 0x00, 0xBA, 0x3B, 0xBA, 0x01, 0x08, 0x0E, 0x34, 0x09, 0x00, - 0x00, 0x25, 0x05, 0x02, 0x4F, 0x28, 0x41, 0xBB, 0x00, 0x00, 0x32, 0x25, - 0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x24, 0x19, 0x04, 0x74, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, - 0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0xC3, - 0x24, 0x00, 0x00, 0x25, 0x06, 0x07, 0xC4, 0x25, 0x06, 0x01, 0x19, 0x04, - 0x76, 0x00, 0x00, 0x01, 0x00, 0x30, 0x31, 0x0B, 0x42, 0x00, 0x00, 0x01, - 0x81, 0x70, 0x00, 0x00, 0x01, 0x82, 0x0D, 0x00, 0x00, 0x01, 0x82, 0x22, - 0x00, 0x00, 0x01, 0x82, 0x05, 0x00, 0x00, 0x01, 0x03, 0x33, 0x01, 0x03, - 0x33, 0x00, 0x00, 0x25, 0x01, 0x83, 0xFB, 0x50, 0x01, 0x83, 0xFD, 0x5F, - 0x72, 0x06, 0x04, 0x24, 0x01, 0x00, 0x00, 0x25, 0x01, 0x83, 0xB0, 0x00, - 0x01, 0x83, 0xBF, 0x7F, 0x72, 0x06, 0x04, 0x24, 0x01, 0x00, 0x00, 0x01, - 0x83, 0xFF, 0x7F, 0x15, 0x01, 0x83, 0xFF, 0x7E, 0x0D, 0x00 + 0x00, 0x04, 0x6D, 0x04, 0x1B, 0x25, 0x05, 0x05, 0x24, 0xC2, 0x01, 0x00, + 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x25, 0x06, 0x0B, 0x9F, 0x25, 0x05, + 0x05, 0x24, 0xC2, 0x01, 0x00, 0x00, 0x04, 0x6D, 0x24, 0x02, 0x00, 0x25, + 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, 0x7F, 0x00, 0x01, 0xAD, 0x01, + 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xA1, 0x25, 0x05, 0x05, 0x24, 0xC2, + 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x04, 0x6D, 0x24, 0x02, + 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, 0x7F, 0x00, 0x01, + 0xAD, 0x01, 0x01, 0x03, 0x00, 0x25, 0x06, 0x10, 0xBA, 0x25, 0x05, 0x05, + 0x24, 0xC2, 0x01, 0x00, 0x00, 0x02, 0x00, 0x84, 0x03, 0x00, 0x04, 0x6D, + 0x24, 0x02, 0x00, 0x25, 0x05, 0x01, 0x00, 0x41, 0x67, 0x37, 0x01, 0x7F, + 0x00, 0x00, 0xBA, 0x01, 0x08, 0x0E, 0x3B, 0xBA, 0x34, 0x09, 0x00, 0x00, + 0xBA, 0x3B, 0xBA, 0x01, 0x08, 0x0E, 0x34, 0x09, 0x00, 0x00, 0x25, 0x05, + 0x02, 0x4F, 0x28, 0x41, 0xBB, 0x00, 0x00, 0x32, 0x25, 0x01, 0x00, 0x13, + 0x06, 0x01, 0x00, 0x24, 0x19, 0x04, 0x74, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x0B, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, 0x1F, 0x00, 0x00, + 0x01, 0x29, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0xC3, 0x24, 0x00, 0x00, + 0x25, 0x06, 0x07, 0xC4, 0x25, 0x06, 0x01, 0x19, 0x04, 0x76, 0x00, 0x00, + 0x01, 0x00, 0x30, 0x31, 0x0B, 0x42, 0x00, 0x00, 0x01, 0x81, 0x70, 0x00, + 0x00, 0x01, 0x82, 0x0D, 0x00, 0x00, 0x01, 0x82, 0x22, 0x00, 0x00, 0x01, + 0x82, 0x05, 0x00, 0x00, 0x01, 0x03, 0x33, 0x01, 0x03, 0x33, 0x00, 0x00, + 0x25, 0x01, 0x83, 0xFB, 0x50, 0x01, 0x83, 0xFB, 0x6F, 0x72, 0x06, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x25, 0x01, 0x83, 0xB0, 0x00, 0x01, 0x83, 0xBF, + 0x7F, 0x72, 0x06, 0x04, 0x24, 0x01, 0x00, 0x00, 0x01, 0x83, 0xFF, 0x7F, + 0x15, 0x01, 0x83, 0xFF, 0x7E, 0x0D, 0x00 }; static const uint16_t t0_caddr[] PROGMEM = { @@ -852,84 +852,84 @@ static const uint16_t t0_caddr[] PROGMEM = { 341, 346, 357, - 992, - 1007, - 1011, - 1016, - 1021, - 1026, - 1031, - 1036, - 1150, - 1155, - 1167, - 1172, - 1177, - 1182, - 1186, - 1191, - 1196, - 1201, - 1206, - 1216, - 1221, - 1226, - 1238, - 1253, - 1258, - 1272, - 1294, - 1305, - 1408, - 1455, - 1488, + 986, + 1001, + 1005, + 1010, + 1015, + 1020, + 1025, + 1030, + 1144, + 1149, + 1161, + 1166, + 1171, + 1176, + 1180, + 1185, + 1190, + 1195, + 1200, + 1210, + 1215, + 1220, + 1232, + 1247, + 1252, + 1266, + 1288, + 1299, + 1402, + 1449, + 1482, + 1573, 1579, - 1585, - 1648, - 1655, - 1683, - 1711, - 1816, - 1858, - 1871, - 1883, - 1897, - 1912, - 2132, - 2146, - 2163, - 2172, - 2239, - 2295, - 2299, - 2303, - 2308, - 2356, - 2382, - 2458, - 2502, - 2513, - 2598, - 2636, - 2674, - 2684, - 2694, - 2703, - 2716, - 2720, - 2724, - 2728, - 2732, - 2736, - 2740, - 2744, - 2756, - 2764, - 2769, - 2774, - 2779, - 2784, - 2792 + 1642, + 1649, + 1677, + 1705, + 1810, + 1852, + 1865, + 1877, + 1891, + 1906, + 2126, + 2140, + 2157, + 2166, + 2233, + 2289, + 2293, + 2297, + 2302, + 2350, + 2376, + 2452, + 2496, + 2507, + 2592, + 2630, + 2668, + 2678, + 2688, + 2697, + 2710, + 2714, + 2718, + 2722, + 2726, + 2730, + 2734, + 2738, + 2750, + 2758, + 2763, + 2768, + 2773, + 2778, + 2786 }; #define T0_INTERPRETED 61 diff --git a/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.t0 b/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.t0 new file mode 100644 index 000000000..62a93e74c --- /dev/null +++ b/lib/lib_ssl/bearssl-esp8266/src/x509/x509_minimal.t0 @@ -0,0 +1,1570 @@ +\ Copyright (c) 2016 Thomas Pornin +\ +\ Permission 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: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE 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. + +preamble { + +#include "inner.h" + +/* + * Implementation Notes + * -------------------- + * + * The C code pushes the data by chunks; all decoding is done in the + * T0 code. The cert_length value is set to the certificate length when + * a new certificate is started; the T0 code picks it up as outer limit, + * and decoding functions use it to ensure that no attempt is made at + * reading past it. The T0 code also checks that once the certificate is + * decoded, there are no trailing bytes. + * + * The T0 code sets cert_length to 0 when the certificate is fully + * decoded. + * + * The C code must still perform two checks: + * + * -- If the certificate length is 0, then the T0 code will not be + * invoked at all. This invalid condition must thus be reported by the + * C code. + * + * -- When reaching the end of certificate, the C code must verify that + * the certificate length has been set to 0, thereby signaling that + * the T0 code properly decoded a certificate. + * + * Processing of a chain works in the following way: + * + * -- The error flag is set to a non-zero value when validation is + * finished. The value is either BR_ERR_X509_OK (validation is + * successful) or another non-zero error code. When a non-zero error + * code is obtained, the remaining bytes in the current certificate and + * the subsequent certificates (if any) are completely ignored. + * + * -- Each certificate is decoded in due course, with the following + * "interesting points": + * + * -- Start of the TBS: the multihash engine is reset and activated. + * + * -- Start of the issuer DN: the secondary hash engine is started, + * to process the encoded issuer DN. + * + * -- End of the issuer DN: the secondary hash engine is stopped. The + * resulting hash value is computed and then copied into the + * next_dn_hash[] buffer. + * + * -- Start of the subject DN: the secondary hash engine is started, + * to process the encoded subject DN. + * + * -- For the EE certificate only: the Common Name, if any, is matched + * against the expected server name. + * + * -- End of the subject DN: the secondary hash engine is stopped. The + * resulting hash value is computed into the pad. It is then processed: + * + * -- If this is the EE certificate, then the hash is ignored + * (except for direct trust processing, see later; the hash is + * simply left in current_dn_hash[]). + * + * -- Otherwise, the hashed subject DN is compared with the saved + * hash value (in saved_dn_hash[]). They must match. + * + * Either way, the next_dn_hash[] value is then copied into the + * saved_dn_hash[] value. Thus, at that point, saved_dn_hash[] + * contains the hash of the issuer DN for the current certificate, + * and current_dn_hash[] contains the hash of the subject DN for the + * current certificate. + * + * -- Public key: it is decoded into the cert_pkey[] buffer. Unknown + * key types are reported at that point. + * + * -- If this is the EE certificate, then the key type is compared + * with the expected key type (initialization parameter). The public + * key data is copied to ee_pkey_data[]. The key and hashed subject + * DN are also compared with the "direct trust" keys; if the key + * and DN are matched, then validation ends with a success. + * + * -- Otherwise, the saved signature (cert_sig[]) is verified + * against the saved TBS hash (tbs_hash[]) and that freshly + * decoded public key. Failure here ends validation with an error. + * + * -- Extensions: extension values are processed in due order. + * + * -- Basic Constraints: for all certificates except EE, must be + * present, indicate a CA, and have a path length compatible with + * the chain length so far. + * + * -- Key Usage: for the EE, if present, must allow signatures + * or encryption/key exchange, as required for the cipher suite. + * For non-EE, if present, must have the "certificate sign" bit. + * + * -- Subject Alt Name: for the EE, dNSName names are matched + * against the server name. Ignored for non-EE. + * + * -- Authority Key Identifier, Subject Key Identifier, Issuer + * Alt Name, Subject Directory Attributes, CRL Distribution Points + * Freshest CRL, Authority Info Access and Subject Info Access + * extensions are always ignored: they either contain only + * informative data, or they relate to revocation processing, which + * we explicitly do not support. + * + * -- All other extensions are ignored if non-critical. If a + * critical extension other than the ones above is encountered, + * then a failure is reported. + * + * -- End of the TBS: the multihash engine is stopped. + * + * -- Signature algorithm: the signature algorithm on the + * certificate is decoded. A failure is reported if that algorithm + * is unknown. The hashed TBS corresponding to the signature hash + * function is computed and stored in tbs_hash[] (if not supported, + * then a failure is reported). The hash OID and length are stored + * in cert_sig_hash_oid and cert_sig_hash_len. + * + * -- Signature value: the signature value is copied into the + * cert_sig[] array. + * + * -- Certificate end: the hashed issuer DN (saved_dn_hash[]) is + * looked up in the trust store (CA trust anchors only); for all + * that match, the signature (cert_sig[]) is verified against the + * anchor public key (hashed TBS is in tbs_hash[]). If one of these + * signatures is valid, then validation ends with a success. + * + * -- If the chain end is reached without obtaining a validation success, + * then validation is reported as failed. + */ + +#if BR_USE_UNIX_TIME +#include +#endif + +#if BR_USE_WIN32_TIME +#include +#endif + +/* + * The T0 compiler will produce these prototypes declarations in the + * header. + * +void br_x509_minimal_init_main(void *ctx); +void br_x509_minimal_run(void *ctx); + */ + +/* see bearssl_x509.h */ +void +br_x509_minimal_init(br_x509_minimal_context *ctx, + const br_hash_class *dn_hash_impl, + const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num) +{ + memset(ctx, 0, sizeof *ctx); + ctx->vtable = &br_x509_minimal_vtable; + ctx->dn_hash_impl = dn_hash_impl; + ctx->trust_anchors = trust_anchors; + ctx->trust_anchors_num = trust_anchors_num; +} + +static void +xm_start_chain(const br_x509_class **ctx, const char *server_name) +{ + br_x509_minimal_context *cc; + size_t u; + + cc = (br_x509_minimal_context *)(void *)ctx; + for (u = 0; u < cc->num_name_elts; u ++) { + cc->name_elts[u].status = 0; + cc->name_elts[u].buf[0] = 0; + } + memset(&cc->pkey, 0, sizeof cc->pkey); + cc->num_certs = 0; + cc->err = 0; + cc->cpu.dp = cc->dp_stack; + cc->cpu.rp = cc->rp_stack; + br_x509_minimal_init_main(&cc->cpu); + if (server_name == NULL || *server_name == 0) { + cc->server_name = NULL; + } else { + cc->server_name = server_name; + } +} + +static void +xm_start_cert(const br_x509_class **ctx, uint32_t length) +{ + br_x509_minimal_context *cc; + + cc = (br_x509_minimal_context *)(void *)ctx; + if (cc->err != 0) { + return; + } + if (length == 0) { + cc->err = BR_ERR_X509_TRUNCATED; + return; + } + cc->cert_length = length; +} + +static void +xm_append(const br_x509_class **ctx, const unsigned char *buf, size_t len) +{ + br_x509_minimal_context *cc; + + cc = (br_x509_minimal_context *)(void *)ctx; + if (cc->err != 0) { + return; + } + cc->hbuf = buf; + cc->hlen = len; + br_x509_minimal_run(&cc->cpu); +} + +static void +xm_end_cert(const br_x509_class **ctx) +{ + br_x509_minimal_context *cc; + + cc = (br_x509_minimal_context *)(void *)ctx; + if (cc->err == 0 && cc->cert_length != 0) { + cc->err = BR_ERR_X509_TRUNCATED; + } + cc->num_certs ++; +} + +static unsigned +xm_end_chain(const br_x509_class **ctx) +{ + br_x509_minimal_context *cc; + + cc = (br_x509_minimal_context *)(void *)ctx; + if (cc->err == 0) { + if (cc->num_certs == 0) { + cc->err = BR_ERR_X509_EMPTY_CHAIN; + } else { + cc->err = BR_ERR_X509_NOT_TRUSTED; + } + } else if (cc->err == BR_ERR_X509_OK) { + return 0; + } + return (unsigned)cc->err; +} + +static const br_x509_pkey * +xm_get_pkey(const br_x509_class *const *ctx, unsigned *usages) +{ + br_x509_minimal_context *cc; + + cc = (br_x509_minimal_context *)(void *)ctx; + if (cc->err == BR_ERR_X509_OK + || cc->err == BR_ERR_X509_NOT_TRUSTED) + { + if (usages != NULL) { + *usages = cc->key_usages; + } + return &((br_x509_minimal_context *)(void *)ctx)->pkey; + } else { + return NULL; + } +} + +/* see bearssl_x509.h */ +const br_x509_class br_x509_minimal_vtable PROGMEM = { + sizeof(br_x509_minimal_context), + xm_start_chain, + xm_start_cert, + xm_append, + xm_end_cert, + xm_end_chain, + xm_get_pkey +}; + +#define CTX ((br_x509_minimal_context *)(void *)((unsigned char *)t0ctx - offsetof(br_x509_minimal_context, cpu))) +#define CONTEXT_NAME br_x509_minimal_context + +#define DNHASH_LEN ((CTX->dn_hash_impl->desc >> BR_HASHDESC_OUT_OFF) & BR_HASHDESC_OUT_MASK) +#define dnhash_len ((ctx->dn_hash_impl->desc >> BR_HASHDESC_OUT_OFF) & BR_HASHDESC_OUT_MASK) + +/* + * Hash a DN (from a trust anchor) into the provided buffer. This uses the + * DN hash implementation and context structure from the X.509 engine + * context. + */ +static void +hash_dn(br_x509_minimal_context *ctx, const void *dn, size_t len, + unsigned char *out) +{ + ctx->dn_hash_impl->init(&ctx->dn_hash.vtable); + ctx->dn_hash_impl->update(&ctx->dn_hash.vtable, dn, len); + ctx->dn_hash_impl->out(&ctx->dn_hash.vtable, out); +} + +/* + * Compare two big integers for equality. The integers use unsigned big-endian + * encoding; extra leading bytes (of value 0) are allowed. + */ +static int +eqbigint(const unsigned char *b1, size_t len1, + const unsigned char *b2, size_t len2) +{ + while (len1 > 0 && *b1 == 0) { + b1 ++; + len1 --; + } + while (len2 > 0 && pgm_read_byte(b2) == 0) { + b2 ++; + len2 --; + } + if (len1 != len2) { + return 0; + } + return memcmp_P(b1, b2, len1) == 0; +} + +/* + * Compare two strings for equality, in a case-insensitive way. This + * function handles casing only for ASCII letters. + */ +static int +eqnocase(const void *s1, const void *s2, size_t len) +{ + const unsigned char *buf1, *buf2; + + buf1 = s1; + buf2 = s2; + while (len -- > 0) { + int x1, x2; + + x1 = *buf1 ++; + x2 = *buf2 ++; + if (x1 >= 'A' && x1 <= 'Z') { + x1 += 'a' - 'A'; + } + if (x2 >= 'A' && x2 <= 'Z') { + x2 += 'a' - 'A'; + } + if (x1 != x2) { + return 0; + } + } + return 1; +} + +static int verify_signature(br_x509_minimal_context *ctx, + const br_x509_pkey *pk); + +/* + * Check whether the current certificate (EE) is directly trusted against + * a single trust anchor + */ +static int check_single_direct_trust(br_x509_minimal_context *ctx, + unsigned char hashed_DN[64], + const br_x509_trust_anchor *ta) +{ + int kt; + + if (ta->flags & BR_X509_TA_CA) { + return 0; + } + if (memcmp(hashed_DN, ctx->current_dn_hash, dnhash_len)) { + return 0; + } + kt = ctx->pkey.key_type; + if ((pgm_read_byte(&ta->pkey.key_type) & 0x0F) != kt) { + return 0; + } + switch (kt) { + case BR_KEYTYPE_RSA: + if (!eqbigint(ctx->pkey.key.rsa.n, + ctx->pkey.key.rsa.nlen, + ta->pkey.key.rsa.n, + ta->pkey.key.rsa.nlen) + || !eqbigint(ctx->pkey.key.rsa.e, + ctx->pkey.key.rsa.elen, + ta->pkey.key.rsa.e, + ta->pkey.key.rsa.elen)) + { + return 0; + } + return 1; + case BR_KEYTYPE_EC: + if (ctx->pkey.key.ec.curve != ta->pkey.key.ec.curve + || ctx->pkey.key.ec.qlen != ta->pkey.key.ec.qlen + || memcmp_P(ctx->pkey.key.ec.q, + ta->pkey.key.ec.q, + ta->pkey.key.ec.qlen) != 0) + { + return 0; + } + return 1; + default: + return 0; + } + return 0; /* Should not get here */ +} + + +/* + * Check whether the current certificate (EE) is directly trusted against + * a single CA trust anchor. We use the issuer hash (in saved_dn_hash[]) + * as the CA identifier. + */ +static int check_single_trust_anchor_CA(br_x509_minimal_context *ctx, + unsigned char hashed_DN[64], + const br_x509_trust_anchor *ta) +{ + if (!(ta->flags & BR_X509_TA_CA)) { + return 0; + } + if (memcmp(hashed_DN, ctx->saved_dn_hash, dnhash_len)) { + return 0; + } + if (verify_signature(ctx, &ta->pkey) == 0) { + return 1; + } + return 0; +} + +} + + +postamble { + +/* + * Verify the signature on the certificate with the provided public key. + * This function checks the public key type with regards to the expected + * type. Returned value is either 0 on success, or a non-zero error code. + */ +static int +verify_signature(br_x509_minimal_context *ctx, const br_x509_pkey *pk) +{ + unsigned char tmp[64]; + unsigned char tmp2[64]; + int kt; + + kt = ctx->cert_signer_key_type; + if ((pgm_read_byte(&pk->key_type) & 0x0F) != kt) { + return BR_ERR_X509_WRONG_KEY_TYPE; + } + switch (kt) { + + case BR_KEYTYPE_RSA: + if (ctx->irsa == 0) { + return BR_ERR_X509_UNSUPPORTED; + } + memcpy_P(tmp2, &t0_datablock[ctx->cert_sig_hash_oid], ctx->cert_sig_hash_len); + if (!ctx->irsa(ctx->cert_sig, ctx->cert_sig_len, + tmp2, //&t0_datablock[ctx->cert_sig_hash_oid], + ctx->cert_sig_hash_len, &pk->key.rsa, tmp)) + { + return BR_ERR_X509_BAD_SIGNATURE; + } + if (memcmp(ctx->tbs_hash, tmp, ctx->cert_sig_hash_len) != 0) { + return BR_ERR_X509_BAD_SIGNATURE; + } + return 0; + + case BR_KEYTYPE_EC: + if (ctx->iecdsa == 0) { + return BR_ERR_X509_UNSUPPORTED; + } + if (!ctx->iecdsa(ctx->iec, ctx->tbs_hash, + ctx->cert_sig_hash_len, &pk->key.ec, + ctx->cert_sig, ctx->cert_sig_len)) + { + return BR_ERR_X509_BAD_SIGNATURE; + } + return 0; + + default: + return BR_ERR_X509_UNSUPPORTED; + } +} + +} + +cc: read8-low ( -- x ) { + if (CTX->hlen == 0) { + T0_PUSHi(-1); + } else { + unsigned char x = *CTX->hbuf ++; + if (CTX->do_mhash) { + br_multihash_update(&CTX->mhash, &x, 1); + } + if (CTX->do_dn_hash) { + CTX->dn_hash_impl->update(&CTX->dn_hash.vtable, &x, 1); + } + CTX->hlen --; + T0_PUSH(x); + } +} + +addr: cert_length +addr: num_certs + +cc: read-blob-inner ( addr len -- addr len ) { + uint32_t len = T0_POP(); + uint32_t addr = T0_POP(); + size_t clen = CTX->hlen; + if (clen > len) { + clen = (size_t)len; + } + if (addr != 0) { + memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen); + } + if (CTX->do_mhash) { + br_multihash_update(&CTX->mhash, CTX->hbuf, clen); + } + if (CTX->do_dn_hash) { + CTX->dn_hash_impl->update( + &CTX->dn_hash.vtable, CTX->hbuf, clen); + } + CTX->hbuf += clen; + CTX->hlen -= clen; + T0_PUSH(addr + clen); + T0_PUSH(len - clen); +} + +\ Compute the TBS hash, using the provided hash ID. The hash value is +\ written in the tbs_hash[] array, and the hash length is returned. If +\ the requested hash function is not supported, then 0 is returned. +cc: compute-tbs-hash ( id -- hashlen ) { + int id = T0_POPi(); + size_t len; + len = br_multihash_out(&CTX->mhash, id, CTX->tbs_hash); + T0_PUSH(len); +} + +\ Push true (-1) if no server name is expected in the EE certificate. +cc: zero-server-name ( -- bool ) { + T0_PUSHi(-(CTX->server_name == NULL)); +} + +addr: key_usages +addr: cert_sig +addr: cert_sig_len +addr: cert_signer_key_type +addr: cert_sig_hash_oid +addr: cert_sig_hash_len +addr: tbs_hash +addr: min_rsa_size + +\ Start TBS hash computation. The hash functions are reinitialised. +cc: start-tbs-hash ( -- ) { + br_multihash_init(&CTX->mhash); + CTX->do_mhash = 1; +} + +\ Stop TBS hash computation. +cc: stop-tbs-hash ( -- ) { + CTX->do_mhash = 0; +} + +\ Start DN hash computation. +cc: start-dn-hash ( -- ) { + CTX->dn_hash_impl->init(&CTX->dn_hash.vtable); + CTX->do_dn_hash = 1; +} + +\ Terminate DN hash computation and write the DN hash into the +\ current_dn_hash buffer. +cc: compute-dn-hash ( -- ) { + CTX->dn_hash_impl->out(&CTX->dn_hash.vtable, CTX->current_dn_hash); + CTX->do_dn_hash = 0; +} + +\ Get the length of hash values obtained with the DN hasher. +cc: dn-hash-length ( -- len ) { + T0_PUSH(DNHASH_LEN); +} + +\ Copy data between two areas in the context. +cc: blobcopy ( addr-dst addr-src len -- ) { + size_t len = T0_POP(); + unsigned char *src = (unsigned char *)CTX + T0_POP(); + unsigned char *dst = (unsigned char *)CTX + T0_POP(); + memcpy(dst, src, len); +} + +addr: current_dn_hash +addr: next_dn_hash +addr: saved_dn_hash + +\ Read a DN, hashing it into current_dn_hash. The DN contents are not +\ inspected (only the outer tag, for SEQUENCE, is checked). +: read-DN ( lim -- lim ) + start-dn-hash + read-sequence-open skip-close-elt + compute-dn-hash ; + +cc: offset-name-element ( san -- n ) { + unsigned san = T0_POP(); + size_t u; + + for (u = 0; u < CTX->num_name_elts; u ++) { + if (CTX->name_elts[u].status == 0) { + const unsigned char *oid; + size_t len, off; + + oid = CTX->name_elts[u].oid; + if (san) { + if (oid[0] != 0 || oid[1] != 0) { + continue; + } + off = 2; + } else { + off = 0; + } + len = oid[off]; + if (len != 0 && len == CTX->pad[0] + && memcmp(oid + off + 1, + CTX->pad + 1, len) == 0) + { + T0_PUSH(u); + T0_RET(); + } + } + } + T0_PUSHi(-1); +} + +cc: copy-name-element ( bool offbuf -- ) { + size_t len; + int32_t off = T0_POPi(); + int ok = T0_POPi(); + + if (off >= 0) { + br_name_element *ne = &CTX->name_elts[off]; + + if (ok) { + len = CTX->pad[0]; + if (len < ne->len) { + memcpy(ne->buf, CTX->pad + 1, len); + ne->buf[len] = 0; + ne->status = 1; + } else { + ne->status = -1; + } + } else { + ne->status = -1; + } + } +} + +cc: copy-name-SAN ( bool tag -- ) { + unsigned tag = T0_POP(); + unsigned ok = T0_POP(); + size_t u, len; + + len = CTX->pad[0]; + for (u = 0; u < CTX->num_name_elts; u ++) { + br_name_element *ne; + + ne = &CTX->name_elts[u]; + if (ne->status == 0 && ne->oid[0] == 0 && ne->oid[1] == tag) { + if (ok && ne->len > len) { + memcpy(ne->buf, CTX->pad + 1, len); + ne->buf[len] = 0; + ne->status = 1; + } else { + ne->status = -1; + } + break; + } + } +} + +\ Read a value, decoding string types. If the string type is recognised +\ and the value could be converted to UTF-8 into the pad, then true (-1) +\ is returned; in all other cases, false (0) is returned. Either way, the +\ object is consumed. +: read-string ( lim -- lim bool ) + read-tag case + \ UTF8String + 12 of check-primitive read-value-UTF8 endof + \ NumericString + 18 of check-primitive read-value-latin1 endof + \ PrintableString + 19 of check-primitive read-value-latin1 endof + \ TeletexString + 20 of check-primitive read-value-latin1 endof + \ IA5String + 22 of check-primitive read-value-latin1 endof + \ BMPString + 30 of check-primitive read-value-UTF16 endof + 2drop read-length-skip 0 0 + endcase ; + +\ Read a DN for the EE. The normalized DN hash is computed and stored in the +\ current_dn_hash. +\ Name elements are gathered. Also, the Common Name is matched against the +\ intended server name. +\ Returned value is true (-1) if the CN matches the intended server name, +\ false (0) otherwise. +: read-DN-EE ( lim -- lim bool ) + \ Flag will be set to true if there is a CN and it matches the + \ intended server name. + 0 { eename-matches } + + \ Activate DN hashing. + start-dn-hash + + \ Parse the DN structure: it is a SEQUENCE of SET of + \ AttributeTypeAndValue. Each AttributeTypeAndValue is a + \ SEQUENCE { OBJECT IDENTIFIER, ANY }. + read-sequence-open + begin + dup while + + read-tag 0x11 check-tag-constructed read-length-open-elt + dup ifnot ERR_X509_BAD_DN fail then + begin + dup while + + read-sequence-open + + \ Read the OID. If the OID could not be read (too + \ long) then the first pad byte will be 0. + read-OID drop + + \ If it is the Common Name then we'll need to + \ match it against the intended server name (if + \ applicable). + id-at-commonName eqOID { isCN } + + \ Get offset for reception buffer for that element + \ (or -1). + 0 offset-name-element { offbuf } + + \ Try to read the value as a string. + read-string + + \ If the value could be decoded as a string, + \ copy it and/or match it, as appropriate. + dup isCN and if + match-server-name if + -1 >eename-matches + then + then + offbuf copy-name-element + + \ Close the SEQUENCE + close-elt + + repeat + close-elt + repeat + close-elt + + \ Compute DN hash and deactivate DN hashing. + compute-dn-hash + + \ Return the CN match flag. + eename-matches ; + +\ Get the validation date and time from the context or system. +cc: get-system-date ( -- days seconds ) { + if (CTX->days == 0 && CTX->seconds == 0) { +#if BR_USE_UNIX_TIME + time_t x = time(NULL); + + T0_PUSH((uint32_t)(x / 86400) + 719528); + T0_PUSH((uint32_t)(x % 86400)); +#elif BR_USE_WIN32_TIME + FILETIME ft; + uint64_t x; + + GetSystemTimeAsFileTime(&ft); + x = ((uint64_t)ft.dwHighDateTime << 32) + + (uint64_t)ft.dwLowDateTime; + x = (x / 10000000); + T0_PUSH((uint32_t)(x / 86400) + 584754); + T0_PUSH((uint32_t)(x % 86400)); +#else + CTX->err = BR_ERR_X509_TIME_UNKNOWN; + T0_CO(); +#endif + } else { + T0_PUSH(CTX->days); + T0_PUSH(CTX->seconds); + } +} + +\ Compare two dates (days+seconds) together. +: before ( days1 seconds1 days2 seconds2 -- bool ) + { d1 s1 d2 s2 } + d1 d2 = if s1 s2 < else d1 d2 < then ; + +: after ( days1 seconds1 days2 seconds2 -- bool ) + swap2 before ; + +\ Swap the top two elements with the two elements immediately below. +: swap2 ( a b c d -- c d a b ) + 3 roll 3 roll ; + +\ Match the name in the pad with the expected server name. Returned value +\ is true (-1) on match, false (0) otherwise. If there is no expected +\ server name, then 0 is returned. +\ Match conditions: either an exact match (case insensitive), or a +\ wildcard match, if the found name starts with "*.". We only match a +\ starting wildcard, and only against a complete DN name component. +cc: match-server-name ( -- bool ) { + size_t n1, n2; + + if (CTX->server_name == NULL) { + T0_PUSH(0); + T0_RET(); + } + n1 = strlen(CTX->server_name); + n2 = CTX->pad[0]; + if (n1 == n2 && eqnocase(&CTX->pad[1], CTX->server_name, n1)) { + T0_PUSHi(-1); + T0_RET(); + } + if (n2 >= 2 && CTX->pad[1] == '*' && CTX->pad[2] == '.') { + size_t u; + + u = 0; + while (u < n1 && CTX->server_name[u] != '.') { + u ++; + } + u ++; + n1 -= u; + if ((n2 - 2) == n1 + && eqnocase(&CTX->pad[3], CTX->server_name + u, n1)) + { + T0_PUSHi(-1); + T0_RET(); + } + } + T0_PUSH(0); +} + +\ Get the address and length for the pkey_data buffer. +: addr-len-pkey_data ( -- addr len ) + CX 0 8191 { offsetof(br_x509_minimal_context, pkey_data) } + CX 0 8191 { BR_X509_BUFSIZE_KEY } ; + +\ Copy the EE public key to the permanent buffer (RSA). +cc: copy-ee-rsa-pkey ( nlen elen -- ) { + size_t elen = T0_POP(); + size_t nlen = T0_POP(); + memcpy(CTX->ee_pkey_data, CTX->pkey_data, nlen + elen); + CTX->pkey.key_type = BR_KEYTYPE_RSA; + CTX->pkey.key.rsa.n = CTX->ee_pkey_data; + CTX->pkey.key.rsa.nlen = nlen; + CTX->pkey.key.rsa.e = CTX->ee_pkey_data + nlen; + CTX->pkey.key.rsa.elen = elen; +} + +\ Copy the EE public key to the permanent buffer (EC). +cc: copy-ee-ec-pkey ( curve qlen -- ) { + size_t qlen = T0_POP(); + uint32_t curve = T0_POP(); + memcpy(CTX->ee_pkey_data, CTX->pkey_data, qlen); + CTX->pkey.key_type = BR_KEYTYPE_EC; + CTX->pkey.key.ec.curve = curve; + CTX->pkey.key.ec.q = CTX->ee_pkey_data; + CTX->pkey.key.ec.qlen = qlen; +} + + +\ Check whether the current certificate (EE) is directly trusted. +cc: check-direct-trust ( -- ) { + size_t u; + const br_x509_trust_anchor *ta; + unsigned char hashed_DN[64]; + + for (u = 0; u < CTX->trust_anchors_num; u ++) { + ta = &CTX->trust_anchors[u]; + hash_dn(CTX, ta->dn.data, ta->dn.len, hashed_DN); + if (check_single_direct_trust(CTX, hashed_DN, ta)) { + /* + * Direct trust match! + */ + CTX->err = BR_ERR_X509_OK; + T0_CO(); + } + } + if (CTX->err != BR_ERR_X509_OK && CTX->trust_anchor_dynamic) { + ta = CTX->trust_anchor_dynamic(CTX->trust_anchor_dynamic_ctx, CTX->current_dn_hash, DNHASH_LEN); + if (ta) { + memcpy(hashed_DN, ta->dn.data, DNHASH_LEN); + int ret = check_single_direct_trust(CTX, hashed_DN, ta); + if (CTX->trust_anchor_dynamic_free) { + CTX->trust_anchor_dynamic_free(CTX->trust_anchor_dynamic_ctx, ta); + } + if (ret) { + /* + * Direct trust match! + */ + CTX->err = BR_ERR_X509_OK; + T0_CO(); + } + } + } +} + +\ Check the signature on the certificate with regards to all trusted CA. +\ We use the issuer hash (in saved_dn_hash[]) as CA identifier. +cc: check-trust-anchor-CA ( -- ) { + size_t u; + const br_x509_trust_anchor *ta; + unsigned char hashed_DN[64]; + + for (u = 0; u < CTX->trust_anchors_num; u ++) { + ta = &CTX->trust_anchors[u]; + hash_dn(CTX, ta->dn.data, ta->dn.len, hashed_DN); + if (check_single_trust_anchor_CA(CTX, hashed_DN, ta)) { + CTX->err = BR_ERR_X509_OK; + T0_CO(); + } + } + if (CTX->err != BR_ERR_X509_OK && CTX->trust_anchor_dynamic) { + ta = CTX->trust_anchor_dynamic(CTX->trust_anchor_dynamic_ctx, CTX->saved_dn_hash, DNHASH_LEN); + if (ta) { + memcpy(hashed_DN, ta->dn.data, DNHASH_LEN); + int ret; + ret = check_single_trust_anchor_CA(CTX, hashed_DN, ta); + if (CTX->trust_anchor_dynamic_free) { + CTX->trust_anchor_dynamic_free(CTX->trust_anchor_dynamic_ctx, ta); + } + if (ret) { + CTX->err = BR_ERR_X509_OK; + T0_CO(); + } + } + + } +} + +\ Verify RSA signature. This uses the public key that was just decoded +\ into CTX->pkey_data; the modulus and exponent length are provided as +\ parameters. The resulting hash value is compared with the one in +\ tbs_hash. Returned value is 0 on success, or a non-zero error code. +cc: do-rsa-vrfy ( nlen elen -- err ) { + size_t elen = T0_POP(); + size_t nlen = T0_POP(); + br_x509_pkey pk; + + pk.key_type = BR_KEYTYPE_RSA; + pk.key.rsa.n = CTX->pkey_data; + pk.key.rsa.nlen = nlen; + pk.key.rsa.e = CTX->pkey_data + nlen; + pk.key.rsa.elen = elen; + T0_PUSH(verify_signature(CTX, &pk)); +} + +\ Verify ECDSA signature. This uses the public key that was just decoded +\ into CTX->pkey_dayta; the curve ID and public point length are provided +\ as parameters. The hash value in tbs_hash is used. Returned value is 0 +\ on success, or non-zero error code. +cc: do-ecdsa-vrfy ( curve qlen -- err ) { + size_t qlen = T0_POP(); + int curve = T0_POP(); + br_x509_pkey pk; + + pk.key_type = BR_KEYTYPE_EC; + pk.key.ec.curve = curve; + pk.key.ec.q = CTX->pkey_data; + pk.key.ec.qlen = qlen; + T0_PUSH(verify_signature(CTX, &pk)); +} + +cc: print-bytes ( addr len -- ) { + extern int printf(const char *fmt, ...); + size_t len = T0_POP(); + unsigned char *buf = (unsigned char *)CTX + T0_POP(); + size_t u; + + for (u = 0; u < len; u ++) { + printf("%02X", buf[u]); + } +} + +cc: printOID ( -- ) { + extern int printf(const char *fmt, ...); + size_t u, len; + + len = CTX->pad[0]; + if (len == 0) { + printf("*"); + T0_RET(); + } + printf("%u.%u", CTX->pad[1] / 40, CTX->pad[1] % 40); + u = 2; + while (u <= len) { + unsigned long ul; + + ul = 0; + for (;;) { + int x; + + if (u > len) { + printf("BAD"); + T0_RET(); + } + x = CTX->pad[u ++]; + ul = (ul << 7) + (x & 0x7F); + if (!(x & 0x80)) { + break; + } + } + printf(".%lu", ul); + } +} + +\ Extensions with specific processing. +OID: basicConstraints 2.5.29.19 +OID: keyUsage 2.5.29.15 +OID: subjectAltName 2.5.29.17 +OID: certificatePolicies 2.5.29.32 + +\ Policy qualifier "pointer to CPS" +OID: id-qt-cps 1.3.6.1.5.5.7.2.1 + +\ Extensions which are ignored when encountered, even if critical. +OID: authorityKeyIdentifier 2.5.29.35 +OID: subjectKeyIdentifier 2.5.29.14 +OID: issuerAltName 2.5.29.18 +OID: subjectDirectoryAttributes 2.5.29.9 +OID: crlDistributionPoints 2.5.29.31 +OID: freshestCRL 2.5.29.46 +OID: authorityInfoAccess 1.3.6.1.5.5.7.1.1 +OID: subjectInfoAccess 1.3.6.1.5.5.7.1.11 + +\ Process a Basic Constraints extension. This should be called only if +\ the certificate is not the EE. We check that the extension contains +\ the "CA" flag, and that the path length, if specified, is compatible +\ with the current chain length. +: process-basicConstraints ( lim -- lim ) + read-sequence-open + read-tag-or-end + dup 0x01 = if + read-boolean ifnot ERR_X509_NOT_CA fail then + read-tag-or-end + else + ERR_X509_NOT_CA fail + then + dup 0x02 = if + drop check-primitive read-small-int-value + addr-num_certs get32 1- < if ERR_X509_NOT_CA fail then + read-tag-or-end + then + -1 <> if ERR_X509_UNEXPECTED fail then + drop + close-elt + ; + +\ Process a Key Usage extension. +\ For the EE certificate: +\ -- if the key usage contains keyEncipherment (2), dataEncipherment (3) +\ or keyAgreement (4), then the "key exchange" usage is allowed; +\ -- if the key usage contains digitalSignature (0) or nonRepudiation (1), +\ then the "signature" usage is allowed. +\ For CA certificates, the extension must contain keyCertSign (5). +: process-keyUsage ( lim ee -- lim ) + { ee } + + \ Read tag for the BIT STRING and open it. + read-tag 0x03 check-tag-primitive + read-length-open-elt + \ First byte indicates number of ignored bits in the last byte. It + \ must be between 0 and 7. + read8 { ign } + ign 7 > if ERR_X509_UNEXPECTED fail then + \ Depending on length, we have either 0, 1 or more bytes to read. + dup case + 0 of ERR_X509_FORBIDDEN_KEY_USAGE fail endof + 1 of read8 ign >> ign << endof + drop read8 0 + endcase + + \ Check bits. + ee if + \ EE: get usages. + 0 + over 0x38 and if 0x10 or then + swap 0xC0 and if 0x20 or then + addr-key_usages set8 + else + \ Not EE: keyCertSign must be set. + 0x04 and ifnot ERR_X509_FORBIDDEN_KEY_USAGE fail then + then + + \ We don't care about subsequent bytes. + skip-close-elt ; + +\ Process a Certificate Policies extension. +\ +\ Since we don't actually support full policies processing, this function +\ only checks that the extension contents can be safely ignored. Indeed, +\ we don't validate against a specific set of policies (in RFC 5280 +\ terminology, user-initial-policy-set only contains the special value +\ any-policy). Moreover, we don't support policy constraints (if a +\ critical Policy Constraints extension is encountered, the validation +\ will fail). Therefore, we can safely ignore the contents of this +\ extension, except if it is critical AND one of the policy OID has a +\ qualifier which is distinct from id-qt-cps (because id-qt-cps is +\ specially designated by RFC 5280 has having no mandated action). +\ +\ This function is called only if the extension is critical. +: process-certPolicies ( lim -- lim ) + \ Extension value is a SEQUENCE OF PolicyInformation. + read-sequence-open + begin dup while + \ PolicyInformation ::= SEQUENCE { + \ policyIdentifier OBJECT IDENTIFIER, + \ policyQualifiers SEQUENCE OF PolicyQualifierInfo OPTIONAL + \ } + read-sequence-open + read-OID drop + dup if + read-sequence-open + begin dup while + \ PolicyQualifierInfo ::= SEQUENCE { + \ policyQualifierId OBJECT IDENTIFIER, + \ qualifier ANY + \ } + read-sequence-open + read-OID drop id-qt-cps eqOID ifnot + ERR_X509_CRITICAL_EXTENSION fail + then + skip-close-elt + repeat + close-elt + then + close-elt + repeat + close-elt ; + +\ Process a Subject Alt Name extension. Returned value is a boolean set +\ to true if the expected server name was matched against a dNSName in +\ the extension. +: process-SAN ( lim -- lim bool ) + 0 { m } + read-sequence-open + begin dup while + \ Read the tag. If the tag is context-0, then parse an + \ 'otherName'. If the tag is context-2, then parse a + \ dNSName. If the tag is context-1 or context-6, + \ parse + read-tag case + \ OtherName + 0x20 of + \ OtherName ::= SEQUENCE { + \ type-id OBJECT IDENTIFIER, + \ value [0] EXPLICIT ANY + \ } + check-constructed read-length-open-elt + read-OID drop + -1 offset-name-element { offbuf } + read-tag 0x20 check-tag-constructed + read-length-open-elt + read-string offbuf copy-name-element + close-elt + close-elt + endof + \ rfc822Name (IA5String) + 0x21 of + check-primitive + read-value-UTF8 1 copy-name-SAN + endof + \ dNSName (IA5String) + 0x22 of + check-primitive + read-value-UTF8 + dup if match-server-name m or >m then + 2 copy-name-SAN + endof + \ uniformResourceIdentifier (IA5String) + 0x26 of + check-primitive + read-value-UTF8 6 copy-name-SAN + endof + 2drop read-length-skip 0 + endcase + + \ We check only names of type dNSName; they use IA5String, + \ which is basically ASCII. + \ read-tag 0x22 = if + \ check-primitive + \ read-small-value drop + \ match-server-name m or >m + \ else + \ drop read-length-skip + \ then + repeat + close-elt + m ; + +\ Decode a certificate. The "ee" boolean must be true for the EE. +: decode-certificate ( ee -- ) + { ee } + + \ Obtain the total certificate length. + addr-cert_length get32 + + \ Open the outer SEQUENCE. + read-sequence-open + + \ TBS + \ Activate hashing. + start-tbs-hash + read-sequence-open + + \ First element may be an explicit version. We accept only + \ versions 0 to 2 (certificates v1 to v3). + read-tag dup 0x20 = if + drop check-constructed read-length-open-elt + read-tag + 0x02 check-tag-primitive + read-small-int-value + 2 > if ERR_X509_UNSUPPORTED fail then + close-elt + read-tag + then + + \ Serial number. We just check that the tag is correct. + 0x02 check-tag-primitive + read-length-skip + + \ Signature algorithm. This structure is redundant with the one + \ on the outside; we just skip it. + read-sequence-open skip-close-elt + + \ Issuer name: hashed, then copied into next_dn_hash[]. + read-DN + addr-next_dn_hash addr-current_dn_hash dn-hash-length blobcopy + + \ Validity dates. + read-sequence-open + read-date get-system-date after if ERR_X509_EXPIRED fail then + read-date get-system-date before if ERR_X509_EXPIRED fail then + close-elt + + \ Subject name. + ee if + \ For the EE, we must check whether the Common Name, if + \ any, matches the expected server name. + read-DN-EE { eename } + else + \ For a non-EE certificate, the hashed subject DN must match + \ the saved hashed issuer DN from the previous certificate. + read-DN + addr-current_dn_hash addr-saved_dn_hash dn-hash-length eqblob + ifnot ERR_X509_DN_MISMATCH fail then + then + \ Move the hashed issuer DN for this certificate into the + \ saved_dn_hash[] array. + addr-saved_dn_hash addr-next_dn_hash dn-hash-length blobcopy + + \ Public Key. + read-sequence-open + \ Algorithm Identifier. Right now we are only interested in the + \ OID, since we only support RSA keys. + read-sequence-open + read-OID ifnot ERR_X509_UNSUPPORTED fail then + { ; pkey-type } + choice + \ RSA public key. + rsaEncryption eqOID uf + skip-close-elt + \ Public key itself: the BIT STRING contains bytes + \ (no partial byte) and these bytes encode the + \ actual value. + read-bits-open + \ RSA public key is a SEQUENCE of two + \ INTEGER. We get both INTEGER values into + \ the pkey_data[] buffer, if they fit. + read-sequence-open + addr-len-pkey_data + read-integer { nlen } + addr-len-pkey_data swap nlen + swap nlen - + read-integer { elen } + close-elt + + \ Check that the public key fits our minimal + \ size requirements. Note that the integer + \ decoder already skipped the leading bytes + \ of value 0, so we are working on the true + \ modulus length here. + addr-min_rsa_size get16 128 + nlen > if + ERR_X509_WEAK_PUBLIC_KEY fail + then + close-elt + KEYTYPE_RSA >pkey-type + enduf + + \ EC public key. + id-ecPublicKey eqOID uf + \ We support only named curves, for which the + \ "parameters" field in the AlgorithmIdentifier + \ field should be an OID. + read-OID ifnot ERR_X509_UNSUPPORTED fail then + choice + ansix9p256r1 eqOID uf 23 enduf + ansix9p384r1 eqOID uf 24 enduf + ansix9p521r1 eqOID uf 25 enduf + ERR_X509_UNSUPPORTED fail + endchoice + { curve } + close-elt + read-bits-open + dup { qlen } + dup addr-len-pkey_data rot < if + ERR_X509_LIMIT_EXCEEDED fail + then + read-blob + KEYTYPE_EC >pkey-type + enduf + + \ Not a recognised public key type. + ERR_X509_UNSUPPORTED fail + endchoice + close-elt + + \ Process public key. + ee if + \ For the EE certificate, copy the key data to the + \ relevant buffer. + pkey-type case + KEYTYPE_RSA of nlen elen copy-ee-rsa-pkey endof + KEYTYPE_EC of curve qlen copy-ee-ec-pkey endof + ERR_X509_UNSUPPORTED fail + endcase + else + \ Verify signature on previous certificate. We invoke + \ the RSA implementation. + pkey-type case + KEYTYPE_RSA of nlen elen do-rsa-vrfy endof + KEYTYPE_EC of curve qlen do-ecdsa-vrfy endof + ERR_X509_UNSUPPORTED fail + endcase + dup if fail then + drop + then + + \ This flag will be set to true if the Basic Constraints extension + \ is encountered. + 0 { seenBC } + + \ Skip issuerUniqueID and subjectUniqueID, and process extensions + \ if present. Extensions are an explicit context tag of value 3 + \ around a SEQUENCE OF extensions. Each extension is a SEQUENCE + \ with an OID, an optional boolean, and a value; the value is + \ an OCTET STRING. + read-tag-or-end + 0x21 iftag-skip + 0x22 iftag-skip + dup 0x23 = if + drop + check-constructed read-length-open-elt + read-sequence-open + begin dup while + 0 { critical } + read-sequence-open + read-OID drop + read-tag dup 0x01 = if + read-boolean >critical + read-tag + then + 0x04 check-tag-primitive read-length-open-elt + choice + \ Extensions with specific processing. + basicConstraints eqOID uf + ee if + skip-remaining + else + process-basicConstraints + -1 >seenBC + then + enduf + keyUsage eqOID uf + ee process-keyUsage + enduf + subjectAltName eqOID uf + ee if + 0 >eename + process-SAN >eename + else + skip-remaining + then + enduf + + \ We don't implement full processing of + \ policies. The call below mostly checks + \ that the contents of the Certificate + \ Policies extension can be safely ignored. + certificatePolicies eqOID uf + critical if + process-certPolicies + else + skip-remaining + then + enduf + + \ Extensions which are always ignored, + \ even if critical. + authorityKeyIdentifier eqOID uf + skip-remaining + enduf + subjectKeyIdentifier eqOID uf + skip-remaining + enduf + issuerAltName eqOID uf + skip-remaining + enduf + subjectDirectoryAttributes eqOID uf + skip-remaining + enduf + crlDistributionPoints eqOID uf + skip-remaining + enduf + freshestCRL eqOID uf + skip-remaining + enduf + authorityInfoAccess eqOID uf + skip-remaining + enduf + subjectInfoAccess eqOID uf + skip-remaining + enduf + + \ Unrecognized extensions trigger a failure + \ if critical; otherwise, they are just + \ ignored. + \ critical if + \ ERR_X509_CRITICAL_EXTENSION fail + \ then + skip-remaining + endchoice + close-elt + close-elt + repeat + close-elt + close-elt + else + -1 = ifnot ERR_X509_UNEXPECTED fail then + drop + then + + close-elt + \ Terminate hashing. + stop-tbs-hash + + \ For the EE certificate, verify that the intended server name + \ was matched. + ee if + eename zero-server-name or ifnot + ERR_X509_BAD_SERVER_NAME fail + then + then + + \ If this is the EE certificate, then direct trust may apply. + \ Note: we do this at this point, not immediately after decoding + \ the public key, because even in case of direct trust we still + \ want to check the server name with regards to the SAN extension. + \ However, we want to check direct trust before trying to decode + \ the signature algorithm, because it should work even if that + \ algorithm is not supported. + ee if check-direct-trust then + + \ Non-EE certificates MUST have a Basic Constraints extension + \ (that marks them as being CA). + ee seenBC or ifnot ERR_X509_NOT_CA fail then + + \ signature algorithm + read-tag check-sequence read-length-open-elt + \ Read and understand the OID. Right now, we support only + \ RSA with PKCS#1 v1.5 padding, and hash functions SHA-1, + \ SHA-224, SHA-256, SHA-384 and SHA-512. We purposely do NOT + \ support MD5 here. + \ TODO: add support for RSA/PSS + read-OID if + \ Based on the signature OID, we get: + \ -- the signing key type + \ -- the hash function numeric identifier + \ -- the hash function OID + choice + sha1WithRSAEncryption eqOID + uf 2 KEYTYPE_RSA id-sha1 enduf + sha224WithRSAEncryption eqOID + uf 3 KEYTYPE_RSA id-sha224 enduf + sha256WithRSAEncryption eqOID + uf 4 KEYTYPE_RSA id-sha256 enduf + sha384WithRSAEncryption eqOID + uf 5 KEYTYPE_RSA id-sha384 enduf + sha512WithRSAEncryption eqOID + uf 6 KEYTYPE_RSA id-sha512 enduf + + ecdsa-with-SHA1 eqOID + uf 2 KEYTYPE_EC id-sha1 enduf + ecdsa-with-SHA224 eqOID + uf 3 KEYTYPE_EC id-sha224 enduf + ecdsa-with-SHA256 eqOID + uf 4 KEYTYPE_EC id-sha256 enduf + ecdsa-with-SHA384 eqOID + uf 5 KEYTYPE_EC id-sha384 enduf + ecdsa-with-SHA512 eqOID + uf 6 KEYTYPE_EC id-sha512 enduf + ERR_X509_UNSUPPORTED fail + endchoice + addr-cert_sig_hash_oid set16 + addr-cert_signer_key_type set8 + + \ Compute the TBS hash into tbs_hash. + compute-tbs-hash + dup ifnot ERR_X509_UNSUPPORTED fail then + addr-cert_sig_hash_len set8 + else + ERR_X509_UNSUPPORTED fail + then + \ We ignore the parameters, whether they are present or not, + \ because we got all the information from the OID. + skip-close-elt + + \ signature value + read-bits-open + dup CX 0 8191 { BR_X509_BUFSIZE_SIG } > if + ERR_X509_LIMIT_EXCEEDED fail + then + dup addr-cert_sig_len set16 + addr-cert_sig read-blob + + \ Close the outer SEQUENCE. + close-elt + + \ Close the advertised total certificate length. This checks that + \ there is no trailing garbage after the certificate. + close-elt + + \ Flag the certificate as fully processed. + 0 addr-cert_length set32 + + \ Check whether the issuer for the current certificate is known + \ as a trusted CA; in which case, verify the signature. + check-trust-anchor-CA ; + +: main + \ Unless restricted by a Key Usage extension, all usages are + \ deemed allowed. + 0x30 addr-key_usages set8 + -1 decode-certificate + co + begin + 0 decode-certificate co + again + ; diff --git a/lib/lib_ssl/tls_mini/src/StackThunk_light.cpp b/lib/lib_ssl/tls_mini/src/StackThunk_light.cpp index 1e87d4388..70c705e6e 100644 --- a/lib/lib_ssl/tls_mini/src/StackThunk_light.cpp +++ b/lib/lib_ssl/tls_mini/src/StackThunk_light.cpp @@ -41,7 +41,7 @@ uint32_t *stack_thunk_light_save = NULL; /* Saved A1 while in BearSSL */ uint32_t stack_thunk_light_refcnt = 0; //#define _stackSize (5600/4) -#if defined(USE_MQTT_AWS_IOT) || defined(USE_MQTT_AZURE_IOT) +#if defined(USE_MQTT_AWS_IOT) || defined(USE_MQTT_AWS_IOT_LIGHT) || defined(USE_MQTT_AZURE_IOT) #define _stackSize (5300/4) // using a light version of bearssl we can save 300 bytes #elif defined(USE_MQTT_TLS_FORCE_EC_CIPHER) || defined(USE_4K_RSA) #define _stackSize (4800/4) // no private key, we can reduce a little, max observed 4300 diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp index 5f8bd999a..21317479c 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp @@ -284,10 +284,21 @@ void WiFiClientSecure_light::stop(void) { void WiFiClientSecure_light::flush(void) { (void) _run_until(BR_SSL_SENDAPP); - WiFiClient::flush(); + // don't call flush on ESP32 - its behavior is different and empties the receive buffer - which we don't want } #endif +#ifdef ESP32 +int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port, int32_t timeout) { + DEBUG_BSSL("connect(%s,%d)", ip.toString().c_str(), port); + clearLastError(); + if (!WiFiClient::connect(ip, port, timeout)) { + setLastError(ERR_TCP_CONNECT); + return 0; + } + return _connectSSL(nullptr); +} +#else // ESP32 int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port) { DEBUG_BSSL("connect(%s,%d)", ip.toString().c_str(), port); clearLastError(); @@ -297,7 +308,28 @@ int WiFiClientSecure_light::connect(IPAddress ip, uint16_t port) { } return _connectSSL(nullptr); } +#endif +#ifdef ESP32 +int WiFiClientSecure_light::connect(const char* name, uint16_t port, int32_t timeout) { + DEBUG_BSSL("connect(%s,%d)\n", name, port); + IPAddress remote_addr; + clearLastError(); + if (!WiFi.hostByName(name, remote_addr)) { + DEBUG_BSSL("connect: Name loopup failure\n"); + setLastError(ERR_CANT_RESOLVE_IP); + return 0; + } + DEBUG_BSSL("connect(%s,%d)\n", remote_addr.toString().c_str(), port); + if (!WiFiClient::connect(remote_addr, port, timeout)) { + DEBUG_BSSL("connect: Unable to connect TCP socket\n"); + _last_error = ERR_TCP_CONNECT; + return 0; + } + LOG_HEAP_SIZE("Before calling _connectSSL"); + return _connectSSL(name); +} +#else // ESP32 int WiFiClientSecure_light::connect(const char* name, uint16_t port) { DEBUG_BSSL("connect(%s,%d)\n", name, port); IPAddress remote_addr; @@ -316,6 +348,7 @@ int WiFiClientSecure_light::connect(const char* name, uint16_t port) { LOG_HEAP_SIZE("Before calling _connectSSL"); return _connectSSL(name); } +#endif void WiFiClientSecure_light::_freeSSL() { _ctx_present = false; diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h index f88a9f17f..2e140308d 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h @@ -38,8 +38,13 @@ class WiFiClientSecure_light : public WiFiClient { void allocateBuffers(void); + #ifdef ESP32 // the method to override in ESP32 has timeout argument + int connect(IPAddress ip, uint16_t port, int32_t timeout) override; + int connect(const char* name, uint16_t port, int32_t timeout) override; + #else int connect(IPAddress ip, uint16_t port) override; int connect(const char* name, uint16_t port) override; + #endif uint8_t connected() override; size_t write(const uint8_t *buf, size_t size) override; diff --git a/lib/libesp32/Berry-HttpClientLight/library.json b/lib/libesp32/Berry-HttpClientLight/library.json new file mode 100644 index 000000000..1e1479bbb --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/library.json @@ -0,0 +1,17 @@ +{ + "name": "HttpClient light for Berry", + "version": "1.0", + "description": "Forked version of Arduino HttpClient to support BearSSL instead of mbedTLS", + "license": "MIT", + "homepage": "https://github.com/arendst/Tasmota", + "frameworks": "*", + "platforms": "*", + "authors": + { + "name": "Stephan Hadinger", + "maintainer": true + }, + "build": { + "flags": [ "-I$PROJECT_DIR/include" ] + } +} \ No newline at end of file diff --git a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp new file mode 100644 index 000000000..420cbfb71 --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.cpp @@ -0,0 +1,1508 @@ +/** + * HTTPClientLight.cpp + * + * Created on: 02.11.2015 + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the HTTPClient for Arduino. + * Port to ESP32 by Evandro Luis Copercini (2017), + * changed fingerprints to CA verification. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Adapted in October 2018 + */ + +#ifdef ESP32 +#include "tasmota_options.h" + +#ifdef USE_BERRY +#include + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +#include +#include +#endif + +#include +#include + +#include "HttpClientLight.h" + +#ifdef USE_WEBCLIENT_HTTPS +#include "WiFiClientSecureLightBearSSL.h" +#endif // USE_WEBCLIENT_HTTPS + +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +class TransportTraits +{ +public: + virtual ~TransportTraits() + { + } + + virtual std::unique_ptr create() + { + return std::unique_ptr(new WiFiClient()); + } + + virtual bool verify(WiFiClient& client, const char* host) + { + return true; + } + + virtual int32_t getLastError(WiFiClient& client) + { + return 0; + } + +}; + +#ifdef USE_WEBCLIENT_HTTPS +static const uint8_t _fingerprint_any[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; +class BearSSLTraits : public TransportTraits +{ +public: + BearSSLTraits(int recv, int xmit) : + _recv(recv), _xmit(xmit) + { + } + + std::unique_ptr create() override + { + std::unique_ptr p = std::unique_ptr(new BearSSL::WiFiClientSecure_light(_recv, _xmit)); + return p; + } + + bool verify(WiFiClient& client, const char* host) override + { + BearSSL::WiFiClientSecure_light& wcs = static_cast(client); + wcs.setPubKeyFingerprint(_fingerprint_any, _fingerprint_any, true); // allow all fingerprints + return true; + } + + int32_t getLastError(WiFiClient& client) + { + BearSSL::WiFiClientSecure_light& wcs = static_cast(client); + return wcs.getLastError(); + } + + +protected: + int _recv; + int _xmit; +}; +#endif // USE_WEBCLIENT_HTTPS + +/** + * constructor + */ +HTTPClientLight::HTTPClientLight() +{ +} + +/** + * destructor + */ +HTTPClientLight::~HTTPClientLight() +{ + if(_client) { + _client->stop(); + } + if(_currentHeaders) { + delete[] _currentHeaders; + } + if(_tcpDeprecated) { + _tcpDeprecated.reset(nullptr); + } + if(_transportTraits) { + _transportTraits.reset(nullptr); + } +} + +void HTTPClientLight::clear() +{ + _returnCode = 0; + _size = -1; + _headers = ""; +} + + +/** + * parsing the url for all needed parameters + * @param client Client& + * @param url String + * @param https bool + * @return success bool + */ +// bool HTTPClientLight::begin(WiFiClient &client, String url) { +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +// if(_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } +// #endif + +// _client = &client; + +// // check for : (http: or https:) +// int index = url.indexOf(':'); +// if(index < 0) { +// log_d("failed to parse protocol"); +// return false; +// } + +// String protocol = url.substring(0, index); +// if(protocol != "http" && protocol != "https") { +// log_d("unknown protocol '%s'", protocol.c_str()); +// return false; +// } + +// _port = (protocol == "https" ? 443 : 80); +// return beginInternal(url, protocol.c_str()); +// } + + +/** + * directly supply all needed parameters + * @param client Client& + * @param host String + * @param port uint16_t + * @param uri String + * @param https bool + * @return success bool + */ +// bool HTTPClientLight::begin(WiFiClient &client, String host, uint16_t port, String uri, bool https) +// { +// #ifdef HTTPCLIENT_1_1_COMPATIBLE +// if(_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } +// #endif + +// _client = &client; + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; +// _protocol = (https ? "https" : "http"); +// return true; +// } + + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +bool HTTPClientLight::begin(String url, const char* CAcert) +{ + if(_client && !_tcpDeprecated) { + log_d("mix up of new and deprecated api"); + _canReuse = false; + end(); + } + + _port = 443; + if (!beginInternal(url, "https")) { + return false; + } + _secure = true; +#ifdef USE_WEBCLIENT_HTTPS + _transportTraits = TransportTraitsPtr(new BearSSLTraits(16384, 0)); + // set buffer to 16KB half duplex, so we won't lose responses bigger than 16KB + // half duplex is well suited for HTTPS: one request followed by responses +#else + _transportTraits = nullptr; +#endif + if(!_transportTraits) { + log_e("could not create transport traits"); + return false; + } + + return true; +} + +/** + * parsing the url for all needed parameters + * @param url String + */ +bool HTTPClientLight::begin(String url) +{ + if(_client && !_tcpDeprecated) { + log_d("mix up of new and deprecated api"); + _canReuse = false; + end(); + } + + _port = 80; + if (!beginInternal(url, "http")) { + return begin(url, (const char*)NULL); + } + _transportTraits = TransportTraitsPtr(new TransportTraits()); + if(!_transportTraits) { + log_e("could not create transport traits"); + return false; + } + + return true; +} +#endif // HTTPCLIENT_1_1_COMPATIBLE + +bool HTTPClientLight::beginInternal(String url, const char* expectedProtocol) +{ + log_v("url: %s", url.c_str()); + clear(); + + // check for : (http: or https: + int index = url.indexOf(':'); + if(index < 0) { + log_e("failed to parse protocol"); + return false; + } + + _protocol = url.substring(0, index); + if (_protocol != expectedProtocol) { + log_w("unexpected protocol: %s, expected %s", _protocol.c_str(), expectedProtocol); + return false; + } + + url.remove(0, (index + 3)); // remove http:// or https:// + + index = url.indexOf('/'); + String host = url.substring(0, index); + url.remove(0, index); // remove host part + + // get Authorization + index = host.indexOf('@'); + if(index >= 0) { + // auth info + String auth = host.substring(0, index); + host.remove(0, index + 1); // remove auth part including @ + _base64Authorization = base64::encode(auth); + } + + // get port + index = host.indexOf(':'); + String the_host; + if(index >= 0) { + the_host = host.substring(0, index); // hostname + host.remove(0, (index + 1)); // remove hostname + : + _port = host.toInt(); // get port + } else { + the_host = host; + } + if(_host != the_host && connected()){ + log_d("switching host from '%s' to '%s'. disconnecting first", _host.c_str(), the_host.c_str()); + _canReuse = false; + disconnect(true); + } + _host = the_host; + _uri = url; + log_d("protocol: %s, host: %s port: %d url: %s", _protocol.c_str(), _host.c_str(), _port, _uri.c_str()); + return true; +} + +#ifdef HTTPCLIENT_1_1_COMPATIBLE +// bool HTTPClientLight::begin(String host, uint16_t port, String uri) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; +// // _transportTraits = TransportTraitsPtr(new TransportTraits()); TODO +// _transportTraits = nullptr; +// log_d("host: %s port: %d uri: %s", host.c_str(), port, uri.c_str()); +// return true; +// } + +// bool HTTPClientLight::begin(String host, uint16_t port, String uri, const char* CAcert) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; + +// if (strlen(CAcert) == 0) { +// return false; +// } +// _secure = true; +// _transportTraits = TransportTraitsPtr(new TLSTraits(CAcert)); +// return true; +// } + +// bool HTTPClientLight::begin(String host, uint16_t port, String uri, const char* CAcert, const char* cli_cert, const char* cli_key) +// { +// if(_client && !_tcpDeprecated) { +// log_d("mix up of new and deprecated api"); +// _canReuse = false; +// end(); +// } + +// clear(); +// _host = host; +// _port = port; +// _uri = uri; + +// if (strlen(CAcert) == 0) { +// return false; +// } +// _secure = true; +// _transportTraits = TransportTraitsPtr(new TLSTraits(CAcert, cli_cert, cli_key)); +// return true; +// } +#endif // HTTPCLIENT_1_1_COMPATIBLE + +/** + * end + * called after the payload is handled + */ +void HTTPClientLight::end(void) +{ + disconnect(false); + _tcpDeprecated.reset(nullptr); // release the TLS implementation + _client = _tcpDeprecated.get(); // update client + clear(); +} + + + +/** + * disconnect + * close the TCP socket + */ +void HTTPClientLight::disconnect(bool preserveClient) +{ + if(connected()) { + if(_client->available() > 0) { + log_d("still data in buffer (%d), clean up.\n", _client->available()); + while(_client->available() > 0) { + _client->read(); + } + } + + if(_reuse && _canReuse) { + log_d("tcp keep open for reuse"); + } else { + log_d("tcp stop"); + _client->stop(); + if(!preserveClient) { + _client = nullptr; +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_tcpDeprecated) { + _transportTraits.reset(nullptr); + _tcpDeprecated.reset(nullptr); + _client = _tcpDeprecated.get(); // update client + } +#endif + } + } + } else { + log_d("tcp is closed\n"); + } +} + + +/** + * connected + * @return connected status + */ +bool HTTPClientLight::connected() +{ + if(_client) { + return ((_client->available() > 0) || _client->connected()); + } + return false; +} + +/** + * try to reuse the connection to the server + * keep-alive + * @param reuse bool + */ +void HTTPClientLight::setReuse(bool reuse) +{ + _reuse = reuse; +} + +/** + * set User Agent + * @param userAgent const char * + */ +void HTTPClientLight::setUserAgent(const String& userAgent) +{ + _userAgent = userAgent; +} + +/** + * set the Authorizatio for the http request + * @param user const char * + * @param password const char * + */ +void HTTPClientLight::setAuthorization(const char * user, const char * password) +{ + if(user && password) { + String auth = user; + auth += ":"; + auth += password; + _base64Authorization = base64::encode(auth); + } +} + +/** + * set the Authorizatio for the http request + * @param auth const char * base64 + */ +void HTTPClientLight::setAuthorization(const char * auth) +{ + if(auth) { + _base64Authorization = auth; + } +} + +/** + * set the timeout (ms) for establishing a connection to the server + * @param connectTimeout int32_t + */ +void HTTPClientLight::setConnectTimeout(int32_t connectTimeout) +{ + _connectTimeout = connectTimeout; +} + +/** + * set the timeout for the TCP connection + * @param timeout unsigned int + */ +void HTTPClientLight::setTimeout(uint16_t timeout) +{ + _tcpTimeout = timeout; + if(connected()) { + _client->setTimeout((timeout + 500) / 1000); + } +} + +/** + * use HTTP1.0 + * @param use + */ +void HTTPClientLight::useHTTP10(bool useHTTP10) +{ + _useHTTP10 = useHTTP10; + _reuse = !useHTTP10; +} + +/** + * send a GET request + * @return http code + */ +int HTTPClientLight::GET() +{ + return sendRequest("GET"); +} + +/** + * sends a post request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::POST(uint8_t * payload, size_t size) +{ + return sendRequest("POST", payload, size); +} + +int HTTPClientLight::POST(String payload) +{ + return POST((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sends a patch request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::PATCH(uint8_t * payload, size_t size) +{ + return sendRequest("PATCH", payload, size); +} + +int HTTPClientLight::PATCH(String payload) +{ + return PATCH((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sends a put request to the server + * @param payload uint8_t * + * @param size size_t + * @return http code + */ +int HTTPClientLight::PUT(uint8_t * payload, size_t size) { + return sendRequest("PUT", payload, size); +} + +int HTTPClientLight::PUT(String payload) { + return PUT((uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param payload String data for the message body + * @return + */ +int HTTPClientLight::sendRequest(const char * type, String payload) +{ + return sendRequest(type, (uint8_t *) payload.c_str(), payload.length()); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param payload uint8_t * data for the message body if null not send + * @param size size_t size for the message body if 0 not send + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::sendRequest(const char * type, uint8_t * payload, size_t size) +{ + int code; + bool redirect = false; + uint16_t redirectCount = 0; + do { + // wipe out any existing headers from previous request + for(size_t i = 0; i < _headerKeysCount; i++) { + if (_currentHeaders[i].value.length() > 0) { + _currentHeaders[i].value.clear(); + } + } + + log_d("request type: '%s' redirCount: %d\n", type, redirectCount); + + // connect to server + if(!connect()) { + if (_secure) { + int32_t ret = _transportTraits->getLastError(*_client); + if (ret) { + return returnError(-1000 - ret); // BearSSL error 46 transformed to -1046 + } + } + return returnError(HTTPC_ERROR_CONNECTION_REFUSED); + } + + if(payload && size > 0) { + addHeader(F("Content-Length"), String(size)); + } + + // send Header + if(!sendHeader(type)) { + return returnError(HTTPC_ERROR_SEND_HEADER_FAILED); + } + + // send Payload if needed + if(payload && size > 0) { + if(_client->write(&payload[0], size) != size) { + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + } + + code = handleHeaderResponse(); + log_d("sendRequest code=%d\n", code); + + // Handle redirections as stated in RFC document: + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + // + // Implementing HTTP_CODE_FOUND as redirection with GET method, + // to follow most of existing user agent implementations. + // + redirect = false; + if ( + _followRedirects != HTTPC_DISABLE_FOLLOW_REDIRECTS && + redirectCount < _redirectLimit && + _location.length() > 0 + ) { + switch (code) { + // redirecting using the same method + case HTTP_CODE_MOVED_PERMANENTLY: + case HTTP_CODE_TEMPORARY_REDIRECT: { + if ( + // allow to force redirections on other methods + // (the RFC require user to accept the redirection) + _followRedirects == HTTPC_FORCE_FOLLOW_REDIRECTS || + // allow GET and HEAD methods without force + !strcmp(type, "GET") || + !strcmp(type, "HEAD") + ) { + redirectCount += 1; + log_d("following redirect (the same method): '%s' redirCount: %d\n", _location.c_str(), redirectCount); + if (!setURL(_location)) { + log_d("failed setting URL for redirection\n"); + // no redirection + break; + } + // redirect using the same request method and payload, diffrent URL + redirect = true; + } + break; + } + // redirecting with method dropped to GET or HEAD + // note: it does not need `HTTPC_FORCE_FOLLOW_REDIRECTS` for any method + case HTTP_CODE_FOUND: + case HTTP_CODE_SEE_OTHER: { + redirectCount += 1; + log_d("following redirect (dropped to GET/HEAD): '%s' redirCount: %d\n", _location.c_str(), redirectCount); + if (!setURL(_location)) { + log_d("failed setting URL for redirection\n"); + // no redirection + break; + } + // redirect after changing method to GET/HEAD and dropping payload + type = "GET"; + payload = nullptr; + size = 0; + redirect = true; + break; + } + + default: + break; + } + } + + } while (redirect); + // handle Server Response (Header) + return returnError(code); +} + +/** + * sendRequest + * @param type const char * "GET", "POST", .... + * @param stream Stream * data stream for the message body + * @param size size_t size for the message body if 0 not Content-Length is send + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::sendRequest(const char * type, Stream * stream, size_t size) +{ + + if(!stream) { + return returnError(HTTPC_ERROR_NO_STREAM); + } + + // connect to server + if(!connect()) { + return returnError(HTTPC_ERROR_CONNECTION_REFUSED); + } + + if(size > 0) { + addHeader("Content-Length", String(size)); + } + + // send Header + if(!sendHeader(type)) { + return returnError(HTTPC_ERROR_SEND_HEADER_FAILED); + } + + int buff_size = HTTP_TCP_BUFFER_SIZE; + + int len = size; + int bytesWritten = 0; + + if(len == 0) { + len = -1; + } + + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; + } + + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); + + if(buff) { + // read all data from stream and send it to server + while(connected() && (stream->available() > -1) && (len > 0 || len == -1)) { + + // get available data size + int sizeAvailable = stream->available(); + + if(sizeAvailable) { + + int readBytes = sizeAvailable; + + // read only the asked bytes + if(len > 0 && readBytes > len) { + readBytes = len; + } + + // not read more the buffer can handle + if(readBytes > buff_size) { + readBytes = buff_size; + } + + // read data + int bytesRead = stream->readBytes(buff, readBytes); + + // write it to Stream + int bytesWrite = _client->write((const uint8_t *) buff, bytesRead); + bytesWritten += bytesWrite; + + // are all Bytes a writen to stream ? + if(bytesWrite != bytesRead) { + log_d("short write, asked for %d but got %d retry...", bytesRead, bytesWrite); + + // check for write error + if(_client->getWriteError()) { + log_d("stream write error %d", _client->getWriteError()); + + //reset write error for retry + _client->clearWriteError(); + } + + // some time for the stream + delay(1); + + int leftBytes = (readBytes - bytesWrite); + + // retry to send the missed bytes + bytesWrite = _client->write((const uint8_t *) (buff + bytesWrite), leftBytes); + bytesWritten += bytesWrite; + + if(bytesWrite != leftBytes) { + // failed again + log_d("short write, asked for %d but got %d failed.", leftBytes, bytesWrite); + free(buff); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + } + + // check for write error + if(_client->getWriteError()) { + log_d("stream write error %d", _client->getWriteError()); + free(buff); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } + + // count bytes to read left + if(len > 0) { + len -= readBytes; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + if(size && (int) size != bytesWritten) { + log_d("Stream payload bytesWritten %d and size %d mismatch!.", bytesWritten, size); + log_d("ERROR SEND PAYLOAD FAILED!"); + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + } else { + log_d("Stream payload written: %d", bytesWritten); + } + + } else { + log_d("too less ram! need %d", HTTP_TCP_BUFFER_SIZE); + return returnError(HTTPC_ERROR_TOO_LESS_RAM); + } + + // handle Server Response (Header) + return returnError(handleHeaderResponse()); +} + +/** + * size of message body / payload + * @return -1 if no info or > 0 when Content-Length is set by server + */ +int HTTPClientLight::getSize(void) +{ + return _size; +} + +/** + * returns the stream of the tcp connection + * @return WiFiClient + */ +WiFiClient& HTTPClientLight::getStream(void) +{ + if (connected()) { + return *_client; + } + + log_w("getStream: not connected"); + static WiFiClient empty; + return empty; +} + +/** + * returns a pointer to the stream of the tcp connection + * @return WiFiClient* + */ +WiFiClient* HTTPClientLight::getStreamPtr(void) +{ + if(connected()) { + return _client; + } + + log_w("getStreamPtr: not connected"); + return nullptr; +} + +/** + * write all message body / payload to Stream + * @param stream Stream * + * @return bytes written ( negative values are error codes ) + */ +int HTTPClientLight::writeToStream(Stream * stream) +{ + + if(!stream) { + return returnError(HTTPC_ERROR_NO_STREAM); + } + + if(!connected()) { + return returnError(HTTPC_ERROR_NOT_CONNECTED); + } + + // get length of document (is -1 when Server sends no Content-Length header) + int len = _size; + int ret = 0; + + if(_transferEncoding == HTTPC_TE_IDENTITY) { + ret = writeToStreamDataBlock(stream, len); + + // have we an error? + if(ret < 0) { + return returnError(ret); + } + } else if(_transferEncoding == HTTPC_TE_CHUNKED) { + int size = 0; + while(1) { + if(!connected()) { + return returnError(HTTPC_ERROR_CONNECTION_LOST); + } + String chunkHeader = _client->readStringUntil('\n'); + + if(chunkHeader.length() <= 0) { + return returnError(HTTPC_ERROR_READ_TIMEOUT); + } + + chunkHeader.trim(); // remove \r + + // read size of chunk + len = (uint32_t) strtol((const char *) chunkHeader.c_str(), NULL, 16); + size += len; + log_d(" read chunk len: %d", len); + + // data left? + if(len > 0) { + int r = writeToStreamDataBlock(stream, len); + if(r < 0) { + // error in writeToStreamDataBlock + return returnError(r); + } + ret += r; + } else { + + // if no length Header use global chunk size + if(_size <= 0) { + _size = size; + } + + // check if we have write all data out + if(ret != _size) { + return returnError(HTTPC_ERROR_STREAM_WRITE); + } + break; + } + + // read trailing \r\n at the end of the chunk + char buf[2]; + auto trailing_seq_len = _client->readBytes((uint8_t*)buf, 2); + if (trailing_seq_len != 2 || buf[0] != '\r' || buf[1] != '\n') { + return returnError(HTTPC_ERROR_READ_TIMEOUT); + } + + delay(0); + } + } else { + return returnError(HTTPC_ERROR_ENCODING); + } + +// end(); + disconnect(true); + return ret; +} + +/** + * return all payload as String (may need lot of ram or trigger out of memory!) + * @return String + */ +String HTTPClientLight::getString(void) +{ + // _size can be -1 when Server sends no Content-Length header + if(_size > 0 || _size == -1) { + StreamString sstring; + // try to reserve needed memory (noop if _size == -1) + if(sstring.reserve((_size + 1))) { + writeToStream(&sstring); + return sstring; + } else { + log_d("not enough memory to reserve a string! need: %d", (_size + 1)); + } + } + + return ""; +} + +/** + * converts error code to String + * @param error int + * @return String + */ +String HTTPClientLight::errorToString(int error) +{ + switch(error) { + case HTTPC_ERROR_CONNECTION_REFUSED: + return F("connection refused"); + case HTTPC_ERROR_SEND_HEADER_FAILED: + return F("send header failed"); + case HTTPC_ERROR_SEND_PAYLOAD_FAILED: + return F("send payload failed"); + case HTTPC_ERROR_NOT_CONNECTED: + return F("not connected"); + case HTTPC_ERROR_CONNECTION_LOST: + return F("connection lost"); + case HTTPC_ERROR_NO_STREAM: + return F("no stream"); + case HTTPC_ERROR_NO_HTTP_SERVER: + return F("no HTTP server"); + case HTTPC_ERROR_TOO_LESS_RAM: + return F("too less ram"); + case HTTPC_ERROR_ENCODING: + return F("Transfer-Encoding not supported"); + case HTTPC_ERROR_STREAM_WRITE: + return F("Stream write error"); + case HTTPC_ERROR_READ_TIMEOUT: + return F("read Timeout"); + default: + return String(); + } +} + +/** + * adds Header to the request + * @param name + * @param value + * @param first + */ +void HTTPClientLight::addHeader(const String& name, const String& value, bool first, bool replace) +{ + // not allow set of Header handled by code + if(!name.equalsIgnoreCase(F("Connection")) && + !name.equalsIgnoreCase(F("User-Agent")) && + !name.equalsIgnoreCase(F("Host")) && + !(name.equalsIgnoreCase(F("Authorization")) && _base64Authorization.length())){ + + String headerLine = name; + headerLine += ": "; + + if (replace) { + int headerStart = _headers.indexOf(headerLine); + if (headerStart != -1 && (headerStart == 0 || _headers[headerStart - 1] == '\n')) { + int headerEnd = _headers.indexOf('\n', headerStart); + _headers = _headers.substring(0, headerStart) + _headers.substring(headerEnd + 1); + } + } + + headerLine += value; + headerLine += "\r\n"; + if(first) { + _headers = headerLine + _headers; + } else { + _headers += headerLine; + } + } +} + +void HTTPClientLight::collectHeaders(const char* headerKeys[], const size_t headerKeysCount) +{ + _headerKeysCount = headerKeysCount; + if(_currentHeaders) { + delete[] _currentHeaders; + } + _currentHeaders = new RequestArgument[_headerKeysCount]; + for(size_t i = 0; i < _headerKeysCount; i++) { + _currentHeaders[i].key = headerKeys[i]; + } +} + +String HTTPClientLight::header(const char* name) +{ + for(size_t i = 0; i < _headerKeysCount; ++i) { + if(_currentHeaders[i].key == name) { + return _currentHeaders[i].value; + } + } + return String(); +} + +String HTTPClientLight::header(size_t i) +{ + if(i < _headerKeysCount) { + return _currentHeaders[i].value; + } + return String(); +} + +String HTTPClientLight::headerName(size_t i) +{ + if(i < _headerKeysCount) { + return _currentHeaders[i].key; + } + return String(); +} + +int HTTPClientLight::headers() +{ + return _headerKeysCount; +} + +bool HTTPClientLight::hasHeader(const char* name) +{ + for(size_t i = 0; i < _headerKeysCount; ++i) { + if((_currentHeaders[i].key == name) && (_currentHeaders[i].value.length() > 0)) { + return true; + } + } + return false; +} + +/** + * init TCP connection and handle ssl verify if needed + * @return true if connection is ok + */ +bool HTTPClientLight::connect(void) +{ + if(connected()) { + if(_reuse) { + log_d("already connected, reusing connection"); + } else { + log_d("already connected, try reuse!"); + } + while(_client->available() > 0) { + _client->read(); + } + return true; + } + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if(_transportTraits && !_client) { + _tcpDeprecated = _transportTraits->create(); + if(!_tcpDeprecated) { + log_e("failed to create client"); + return false; + } + _client = _tcpDeprecated.get(); + } +#endif + + if (!_client) { + log_d("HTTPClientLight::begin was not called or returned error"); + return false; + } +#ifdef HTTPCLIENT_1_1_COMPATIBLE + if (_tcpDeprecated && !_transportTraits->verify(*_client, _host.c_str())) { + log_d("transport level verify failed"); + _client->stop(); + return false; + } +#endif + if(!_client->connect(_host.c_str(), _port, _connectTimeout)) { + log_d("failed connect to %s:%u", _host.c_str(), _port); + return false; + } + + // set Timeout for WiFiClient and for Stream::readBytesUntil() and Stream::readStringUntil() + _client->setTimeout((_tcpTimeout + 500) / 1000); + + log_d(" connected to %s:%u", _host.c_str(), _port); + + +/* +#ifdef ESP8266 + _client->setNoDelay(true); +#endif + */ + return connected(); +} + +/** + * sends HTTP request header + * @param type (GET, POST, ...) + * @return status + */ +bool HTTPClientLight::sendHeader(const char * type) +{ + if(!connected()) { + return false; + } + + String header = String(type) + " " + _uri + F(" HTTP/1."); + + if(_useHTTP10) { + header += "0"; + } else { + header += "1"; + } + + header += String(F("\r\nHost: ")) + _host; + if (_port != 80 && _port != 443) + { + header += ':'; + header += String(_port); + } + header += String(F("\r\nUser-Agent: ")) + _userAgent + + F("\r\nConnection: "); + + if(_reuse) { + header += F("keep-alive"); + } else { + header += F("close"); + } + header += "\r\n"; + + if(!_useHTTP10) { + header += F("Accept-Encoding: identity;q=1,chunked;q=0.1,*;q=0\r\n"); + } + + if(_base64Authorization.length()) { + _base64Authorization.replace("\n", ""); + header += F("Authorization: Basic "); + header += _base64Authorization; + header += "\r\n"; + } + + header += _headers + "\r\n"; + + return (_client->write((const uint8_t *) header.c_str(), header.length()) == header.length()); +} + +/** + * reads the response from the server + * @return int http code + */ +int HTTPClientLight::handleHeaderResponse() +{ + + if(!connected()) { + return HTTPC_ERROR_NOT_CONNECTED; + } + + clear(); + + _canReuse = _reuse; + + String transferEncoding; + + _transferEncoding = HTTPC_TE_IDENTITY; + unsigned long lastDataTime = millis(); + bool firstLine = true; + + while(connected()) { + size_t len = _client->available(); + if(len > 0) { + String headerLine = _client->readStringUntil('\n'); + headerLine.trim(); // remove \r + + lastDataTime = millis(); + + log_v("RX: '%s'", headerLine.c_str()); + + if(firstLine) { + firstLine = false; + if(_canReuse && headerLine.startsWith("HTTP/1.")) { + _canReuse = (headerLine[sizeof "HTTP/1." - 1] != '0'); + } + int codePos = headerLine.indexOf(' ') + 1; + _returnCode = headerLine.substring(codePos, headerLine.indexOf(' ', codePos)).toInt(); + } else if(headerLine.indexOf(':')) { + String headerName = headerLine.substring(0, headerLine.indexOf(':')); + String headerValue = headerLine.substring(headerLine.indexOf(':') + 1); + headerValue.trim(); + + if(headerName.equalsIgnoreCase("Content-Length")) { + _size = headerValue.toInt(); + } + + if(_canReuse && headerName.equalsIgnoreCase("Connection")) { + if(headerValue.indexOf("close") >= 0 && headerValue.indexOf("keep-alive") < 0) { + _canReuse = false; + } + } + + if(headerName.equalsIgnoreCase("Transfer-Encoding")) { + transferEncoding = headerValue; + } + + if (headerName.equalsIgnoreCase("Location")) { + _location = headerValue; + } + + for(size_t i = 0; i < _headerKeysCount; i++) { + if(_currentHeaders[i].key.equalsIgnoreCase(headerName)) { + _currentHeaders[i].value = headerValue; + break; + } + } + } + + if(headerLine == "") { + log_d("code: %d", _returnCode); + + if(_size > 0) { + log_d("size: %d", _size); + } + + if(transferEncoding.length() > 0) { + log_d("Transfer-Encoding: %s", transferEncoding.c_str()); + if(transferEncoding.equalsIgnoreCase("chunked")) { + _transferEncoding = HTTPC_TE_CHUNKED; + } else if(transferEncoding.equalsIgnoreCase("identity")) { + _transferEncoding = HTTPC_TE_IDENTITY; + } else { + return HTTPC_ERROR_ENCODING; + } + } else { + _transferEncoding = HTTPC_TE_IDENTITY; + } + + if(_returnCode) { + return _returnCode; + } else { + log_d("Remote host is not an HTTP Server!"); + return HTTPC_ERROR_NO_HTTP_SERVER; + } + } + + } else { + if((millis() - lastDataTime) > _tcpTimeout) { + return HTTPC_ERROR_READ_TIMEOUT; + } + delay(10); + } + } + + return HTTPC_ERROR_CONNECTION_LOST; +} + +/** + * write one Data Block to Stream + * @param stream Stream * + * @param size int + * @return < 0 = error >= 0 = size written + */ +int HTTPClientLight::writeToStreamDataBlock(Stream * stream, int size) +{ + int buff_size = HTTP_TCP_BUFFER_SIZE; + int len = size; + int bytesWritten = 0; + + // if possible create smaller buffer then HTTP_TCP_BUFFER_SIZE + if((len > 0) && (len < HTTP_TCP_BUFFER_SIZE)) { + buff_size = len; + } + + // create buffer for read + uint8_t * buff = (uint8_t *) malloc(buff_size); + + if(buff) { + // read all data from server + while(connected() && (len > 0 || len == -1)) { + + // get available data size + size_t sizeAvailable = _client->available(); + + if(sizeAvailable) { + + int readBytes = sizeAvailable; + + // read only the asked bytes + if(len > 0 && readBytes > len) { + readBytes = len; + } + + // not read more the buffer can handle + if(readBytes > buff_size) { + readBytes = buff_size; + } + + // stop if no more reading + if (readBytes == 0) + break; + + // read data + int bytesRead = _client->readBytes(buff, readBytes); + + // write it to Stream + int bytesWrite = stream->write(buff, bytesRead); + bytesWritten += bytesWrite; + + // are all Bytes a writen to stream ? + if(bytesWrite != bytesRead) { + log_d("short write asked for %d but got %d retry...", bytesRead, bytesWrite); + + // check for write error + if(stream->getWriteError()) { + log_d("stream write error %d", stream->getWriteError()); + + //reset write error for retry + stream->clearWriteError(); + } + + // some time for the stream + delay(1); + + int leftBytes = (readBytes - bytesWrite); + + // retry to send the missed bytes + bytesWrite = stream->write((buff + bytesWrite), leftBytes); + bytesWritten += bytesWrite; + + if(bytesWrite != leftBytes) { + // failed again + log_w("short write asked for %d but got %d failed.", leftBytes, bytesWrite); + free(buff); + return HTTPC_ERROR_STREAM_WRITE; + } + } + + // check for write error + if(stream->getWriteError()) { + log_w("stream write error %d", stream->getWriteError()); + free(buff); + return HTTPC_ERROR_STREAM_WRITE; + } + + // count bytes to read left + if(len > 0) { + len -= readBytes; + } + + delay(0); + } else { + delay(1); + } + } + + free(buff); + + log_d("connection closed or file end (written: %d).", bytesWritten); + + if((size > 0) && (size != bytesWritten)) { + log_d("bytesWritten %d and size %d mismatch!.", bytesWritten, size); + return HTTPC_ERROR_STREAM_WRITE; + } + + } else { + log_w("too less ram! need %d", HTTP_TCP_BUFFER_SIZE); + return HTTPC_ERROR_TOO_LESS_RAM; + } + + return bytesWritten; +} + +/** + * called to handle error return, may disconnect the connection if still exists + * @param error + * @return error + */ +int HTTPClientLight::returnError(int error) +{ + if(error < 0) { + log_w("error(%d): %s", error, errorToString(error).c_str()); + if(connected()) { + log_d("tcp stop"); + _client->stop(); + } + } + return error; +} + +void HTTPClientLight::setFollowRedirects(followRedirects_t follow) +{ + _followRedirects = follow; +} + +void HTTPClientLight::setRedirectLimit(uint16_t limit) +{ + _redirectLimit = limit; +} + +/** + * set the URL to a new value. Handy for following redirects. + * @param url + */ +bool HTTPClientLight::setURL(const String& url) +{ + // if the new location is only a path then only update the URI + if (url && url[0] == '/') { + _uri = url; + clear(); + return true; + } + + if (!url.startsWith(_protocol + ':')) { + log_d("new URL not the same protocol, expected '%s', URL: '%s'\n", _protocol.c_str(), url.c_str()); + return false; + } + + // check if the port is specified + int indexPort = url.indexOf(':', 6); // find the first ':' excluding the one from the protocol + int indexURI = url.indexOf('/', 7); // find where the URI starts to make sure the ':' is not part of it + if (indexPort == -1 || indexPort > indexURI) { + // the port is not specified + _port = (_protocol == "https" ? 443 : 80); + } + + // disconnect but preserve _client. + // Also have to keep the connection otherwise it will free some of the memory used by _client + // and will blow up later when trying to do _client->available() or similar + _canReuse = true; + disconnect(true); + return beginInternal(url, _protocol.c_str()); +} + +const String &HTTPClientLight::getLocation(void) +{ + return _location; +} +#endif // USE_BERRY +#endif // ESP32 diff --git a/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h new file mode 100644 index 000000000..dc2bc0e58 --- /dev/null +++ b/lib/libesp32/Berry-HttpClientLight/src/HttpClientLight.h @@ -0,0 +1,270 @@ +/** + * HTTPClientLight.h + * + * Created on: 02.11.2015 + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the HTTPClient for Arduino. + * Port to ESP32 by Evandro Luis Copercini (2017), + * changed fingerprints to CA verification. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef HTTPClient_Light_H_ +#define HTTPClient_Light_H_ + +#define HTTPCLIENT_1_1_COMPATIBLE + +#include +#include +#include +#include + +#include // import definitions from the original code + +#include "tasmota_options.h" + +#define HTTPCLIENT_DEFAULT_TCP_TIMEOUT (5000) + +/// HTTP client errors +#define HTTPC_ERROR_CONNECTION_REFUSED (-1) +#define HTTPC_ERROR_SEND_HEADER_FAILED (-2) +#define HTTPC_ERROR_SEND_PAYLOAD_FAILED (-3) +#define HTTPC_ERROR_NOT_CONNECTED (-4) +#define HTTPC_ERROR_CONNECTION_LOST (-5) +#define HTTPC_ERROR_NO_STREAM (-6) +#define HTTPC_ERROR_NO_HTTP_SERVER (-7) +#define HTTPC_ERROR_TOO_LESS_RAM (-8) +#define HTTPC_ERROR_ENCODING (-9) +#define HTTPC_ERROR_STREAM_WRITE (-10) +#define HTTPC_ERROR_READ_TIMEOUT (-11) + +/// size for the stream handling +#define HTTP_TCP_BUFFER_SIZE (1460) + +/// HTTP codes see RFC7231 +// typedef enum { +// HTTP_CODE_CONTINUE = 100, +// HTTP_CODE_SWITCHING_PROTOCOLS = 101, +// HTTP_CODE_PROCESSING = 102, +// HTTP_CODE_OK = 200, +// HTTP_CODE_CREATED = 201, +// HTTP_CODE_ACCEPTED = 202, +// HTTP_CODE_NON_AUTHORITATIVE_INFORMATION = 203, +// HTTP_CODE_NO_CONTENT = 204, +// HTTP_CODE_RESET_CONTENT = 205, +// HTTP_CODE_PARTIAL_CONTENT = 206, +// HTTP_CODE_MULTI_STATUS = 207, +// HTTP_CODE_ALREADY_REPORTED = 208, +// HTTP_CODE_IM_USED = 226, +// HTTP_CODE_MULTIPLE_CHOICES = 300, +// HTTP_CODE_MOVED_PERMANENTLY = 301, +// HTTP_CODE_FOUND = 302, +// HTTP_CODE_SEE_OTHER = 303, +// HTTP_CODE_NOT_MODIFIED = 304, +// HTTP_CODE_USE_PROXY = 305, +// HTTP_CODE_TEMPORARY_REDIRECT = 307, +// HTTP_CODE_PERMANENT_REDIRECT = 308, +// HTTP_CODE_BAD_REQUEST = 400, +// HTTP_CODE_UNAUTHORIZED = 401, +// HTTP_CODE_PAYMENT_REQUIRED = 402, +// HTTP_CODE_FORBIDDEN = 403, +// HTTP_CODE_NOT_FOUND = 404, +// HTTP_CODE_METHOD_NOT_ALLOWED = 405, +// HTTP_CODE_NOT_ACCEPTABLE = 406, +// HTTP_CODE_PROXY_AUTHENTICATION_REQUIRED = 407, +// HTTP_CODE_REQUEST_TIMEOUT = 408, +// HTTP_CODE_CONFLICT = 409, +// HTTP_CODE_GONE = 410, +// HTTP_CODE_LENGTH_REQUIRED = 411, +// HTTP_CODE_PRECONDITION_FAILED = 412, +// HTTP_CODE_PAYLOAD_TOO_LARGE = 413, +// HTTP_CODE_URI_TOO_LONG = 414, +// HTTP_CODE_UNSUPPORTED_MEDIA_TYPE = 415, +// HTTP_CODE_RANGE_NOT_SATISFIABLE = 416, +// HTTP_CODE_EXPECTATION_FAILED = 417, +// HTTP_CODE_MISDIRECTED_REQUEST = 421, +// HTTP_CODE_UNPROCESSABLE_ENTITY = 422, +// HTTP_CODE_LOCKED = 423, +// HTTP_CODE_FAILED_DEPENDENCY = 424, +// HTTP_CODE_UPGRADE_REQUIRED = 426, +// HTTP_CODE_PRECONDITION_REQUIRED = 428, +// HTTP_CODE_TOO_MANY_REQUESTS = 429, +// HTTP_CODE_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, +// HTTP_CODE_INTERNAL_SERVER_ERROR = 500, +// HTTP_CODE_NOT_IMPLEMENTED = 501, +// HTTP_CODE_BAD_GATEWAY = 502, +// HTTP_CODE_SERVICE_UNAVAILABLE = 503, +// HTTP_CODE_GATEWAY_TIMEOUT = 504, +// HTTP_CODE_HTTP_VERSION_NOT_SUPPORTED = 505, +// HTTP_CODE_VARIANT_ALSO_NEGOTIATES = 506, +// HTTP_CODE_INSUFFICIENT_STORAGE = 507, +// HTTP_CODE_LOOP_DETECTED = 508, +// HTTP_CODE_NOT_EXTENDED = 510, +// HTTP_CODE_NETWORK_AUTHENTICATION_REQUIRED = 511 +// } t_http_codes; + +// typedef enum { +// HTTPC_TE_IDENTITY, +// HTTPC_TE_CHUNKED +// } transferEncoding_t; + +/** + * redirection follow mode. + * + `HTTPC_DISABLE_FOLLOW_REDIRECTS` - no redirection will be followed. + * + `HTTPC_STRICT_FOLLOW_REDIRECTS` - strict RFC2616, only requests using + * GET or HEAD methods will be redirected (using the same method), + * since the RFC requires end-user confirmation in other cases. + * + `HTTPC_FORCE_FOLLOW_REDIRECTS` - all redirections will be followed, + * regardless of a used method. New request will use the same method, + * and they will include the same body data and the same headers. + * In the sense of the RFC, it's just like every redirection is confirmed. + */ +// typedef enum { +// HTTPC_DISABLE_FOLLOW_REDIRECTS, +// HTTPC_STRICT_FOLLOW_REDIRECTS, +// HTTPC_FORCE_FOLLOW_REDIRECTS +// } followRedirects_t; + + + +class HTTPClientLight +{ +public: + HTTPClientLight(); + ~HTTPClientLight(); + +/* + * Since both begin() functions take a reference to client as a parameter, you need to + * ensure the client object lives the entire time of the HTTPClientLight + */ + // bool begin(WiFiClient &client, String url); + // bool begin(WiFiClient &client, String host, uint16_t port, String uri = "/", bool https = false); + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + bool begin(String url); + bool begin(String url, const char* CAcert); + // bool begin(String host, uint16_t port, String uri = "/"); + // bool begin(String host, uint16_t port, String uri, const char* CAcert); + // bool begin(String host, uint16_t port, String uri, const char* CAcert, const char* cli_cert, const char* cli_key); +#endif + + void end(void); + + bool connected(void); + + void setReuse(bool reuse); /// keep-alive + void setUserAgent(const String& userAgent); + void setAuthorization(const char * user, const char * password); + void setAuthorization(const char * auth); + void setConnectTimeout(int32_t connectTimeout); + void setTimeout(uint16_t timeout); + + // Redirections + void setFollowRedirects(followRedirects_t follow); + void setRedirectLimit(uint16_t limit); // max redirects to follow for a single request + + bool setURL(const String &url); + void useHTTP10(bool usehttp10 = true); + + /// request handling + int GET(); + int PATCH(uint8_t * payload, size_t size); + int PATCH(String payload); + int POST(uint8_t * payload, size_t size); + int POST(String payload); + int PUT(uint8_t * payload, size_t size); + int PUT(String payload); + int sendRequest(const char * type, String payload); + int sendRequest(const char * type, uint8_t * payload = NULL, size_t size = 0); + int sendRequest(const char * type, Stream * stream, size_t size = 0); + + void addHeader(const String& name, const String& value, bool first = false, bool replace = true); + + /// Response handling + void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); + String header(const char* name); // get request header value by name + String header(size_t i); // get request header value by number + String headerName(size_t i); // get request header name by number + int headers(); // get header count + bool hasHeader(const char* name); // check if header exists + + + int getSize(void); + const String &getLocation(void); + + WiFiClient& getStream(void); + WiFiClient* getStreamPtr(void); + int writeToStream(Stream* stream); + String getString(void); + + static String errorToString(int error); + +protected: + struct RequestArgument { + String key; + String value; + }; + + bool beginInternal(String url, const char* expectedProtocol); + void disconnect(bool preserveClient = false); + void clear(); + int returnError(int error); + bool connect(void); + bool sendHeader(const char * type); + int handleHeaderResponse(); + int writeToStreamDataBlock(Stream * stream, int len); + + +#ifdef HTTPCLIENT_1_1_COMPATIBLE + TransportTraitsPtr _transportTraits; + std::unique_ptr _tcpDeprecated; +#endif + + WiFiClient* _client = nullptr; + + /// request handling + String _host; + uint16_t _port = 0; + int32_t _connectTimeout = -1; + bool _reuse = true; + uint16_t _tcpTimeout = HTTPCLIENT_DEFAULT_TCP_TIMEOUT; + bool _useHTTP10 = false; + bool _secure = false; + + String _uri; + String _protocol; + String _headers; + String _userAgent = "ESP32HTTPClient"; + String _base64Authorization; + + /// Response handling + RequestArgument* _currentHeaders = nullptr; + size_t _headerKeysCount = 0; + + int _returnCode = 0; + int _size = -1; + bool _canReuse = false; + followRedirects_t _followRedirects = HTTPC_DISABLE_FOLLOW_REDIRECTS; + uint16_t _redirectLimit = 10; + String _location; + transferEncoding_t _transferEncoding = HTTPC_TE_IDENTITY; +}; + + + +#endif /* HTTPClient_Light_H_ */ \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_crypto_lib.c b/lib/libesp32/Berry/default/be_crypto_lib.c new file mode 100644 index 000000000..04a10b28e --- /dev/null +++ b/lib/libesp32/Berry/default/be_crypto_lib.c @@ -0,0 +1,56 @@ +/******************************************************************** + * Berry module `webserver` + * + * To use: `import webserver` + * + * Allows to respond to HTTP request + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_ALEXA_AVS + +extern int m_aes_gcm_init(bvm *vm); +extern int m_aes_gcm_encryt(bvm *vm); +extern int m_aes_gcm_decryt(bvm *vm); +extern int m_aes_gcm_tag(bvm *vm); + +extern int m_ec_c25519_pubkey(bvm *vm); +extern int m_ec_c25519_sharedkey(bvm *vm); + +#include "../generate/be_fixed_be_class_aes_gcm.h" +#include "../generate/be_fixed_be_class_ec_c25519.h" + +void be_load_crypto_lib(bvm *vm) { + // insert the class GCM in module AES + be_newmodule(vm); + be_setname(vm, -1, "crypto"); + be_setglobal(vm, "crypto"); + + be_pushntvclass(vm, &be_class_aes_gcm); + be_setmember(vm, -2, "AES_GCM"); + be_pop(vm, 1); + + be_pushntvclass(vm, &be_class_ec_c25519); + be_setmember(vm, -2, "EC_C25519"); + be_pop(vm, 2); +} +/* @const_object_info_begin + +class be_class_aes_gcm (scope: global, name: AES_GCM) { + .p1, var + .p2, var + + init, func(m_aes_gcm_init) + encrypt, func(m_aes_gcm_encryt) + decrypt, func(m_aes_gcm_decryt) + tag, func(m_aes_gcm_tag) +} + +class be_class_ec_c25519 (scope: global, name: EC_C25519) { + public_key, func(m_ec_c25519_pubkey) + shared_key, func(m_ec_c25519_sharedkey) +} + +@const_object_info_end */ + +#endif // USE_ALEXA_AVS diff --git a/lib/libesp32/Berry/default/be_ctypes.c b/lib/libesp32/Berry/default/be_ctypes.c new file mode 100644 index 000000000..18e655d8b --- /dev/null +++ b/lib/libesp32/Berry/default/be_ctypes.c @@ -0,0 +1,494 @@ +/******************************************************************** + * Tasmota ctypes mapping + *******************************************************************/ +#include "be_constobj.h" +#include + +extern __attribute__((noreturn)) void be_raisef(bvm *vm, const char *except, const char *msg, ...); + +// binary search within an array of sorted strings +// the first 4 bytes are a pointer to a string +// returns 0..total_elements-1 or -1 if not found + +int32_t bin_search_ctypes(const char * needle, const void * table, size_t elt_size, size_t total_elements) { + int32_t low = 0; + int32_t high = total_elements - 1; + int32_t mid = (low + high) / 2; + // start a dissect + while (low <= high) { + const char * elt = *(const char **) ( ((uint8_t*)table) + mid * elt_size ); + int32_t comp = strcmp(needle, elt); + if (comp < 0) { + high = mid - 1; + } else if (comp > 0) { + low = mid + 1; + } else { + break; + } + mid = (low + high) / 2; + } + if (low <= high) { + return mid; + } else { + return -1; + } +} + +enum { + ctypes_i32 = 14, + ctypes_i16 = 12, + ctypes_i8 = 11, + ctypes_u32 = 4, + ctypes_u16 = 2, + ctypes_u8 = 1, + + // big endian + ctypes_be_i32 = -14, + ctypes_be_i16 = -12, + ctypes_be_i8 = -11, + ctypes_be_u32 = -4, + ctypes_be_u16 = -2, + ctypes_be_u8 = -1, + + // floating point + ctypes_float = 5, + ctypes_double = 10, + + // pointer + ctypes_ptr32 = 9, + ctypes_ptr64 = -9, + + ctypes_bf = 0, //bif-field +}; + +typedef struct be_ctypes_structure_item_t { + const char * name; + uint16_t offset_bytes; + uint8_t offset_bits : 3; + uint8_t len_bits : 5; + int8_t type : 5; + uint8_t mapping : 3; +} be_ctypes_structure_item_t; + +typedef struct be_ctypes_structure_t { + uint16_t size_bytes; /* size in bytes */ + uint16_t size_elt; /* number of elements */ + const char **instance_mapping; /* array of instance class names for automatic instanciation of class */ + const be_ctypes_structure_item_t * items; +} be_ctypes_structure_t; + +typedef struct be_ctypes_class_t { + const char * name; + const be_ctypes_structure_t * definitions; +} be_ctypes_class_t; + +typedef struct be_ctypes_classes_t { + uint16_t size; + const char **instance_mapping; /* array of instance class names for automatic instanciation of class */ + const be_ctypes_class_t * classes; +} be_ctypes_classes_t; + +// const be_ctypes_class_t * g_ctypes_classes = NULL; + +// +// Constructor for ctypes structure +// +// If no arg: allocate a bytes() structure of the right size, filled with zeroes +// Arg1 is instance self +// If arg 2 is int or comptr (and not null): create a mapped bytes buffer to read/write at a specific location (can be copied if need a snapshot) +// If arg 2 is a bytes object, consider it's comptr and map the buffer (it's basically casting). WARNING no size check is done so you can easily corrupt memory +int be_ctypes_init(bvm *vm) { + int argc = be_top(vm); + void * src_data = NULL; + if (argc > 1 && (be_isint(vm, 2) || be_iscomptr(vm, 2) || be_isbytes(vm, 2))) { + if (be_iscomptr(vm, 2)) { + src_data = be_tocomptr(vm, 2); + } else if (be_isbytes(vm, 2)) { + be_getmember(vm, 2, ".p"); + src_data = be_tocomptr(vm, -1); + be_pop(vm, 1); + } else { + src_data = (void*) be_toint(vm, 2); + } + } + + // look for class definition + be_getmember(vm, 1, "_def"); // static class comptr + const be_ctypes_structure_t *definitions; + definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, -1); + be_pop(vm, 1); + + // call super(self, bytes) + be_getglobal(vm, "super"); // push super function + be_pushvalue(vm, 1); // push self instance + be_getglobal(vm, "bytes"); // push bytes class + be_call(vm, 2); + be_pop(vm, 2); + // berry_log_C("be_ctypes_init> super found %p", be_toint(vm, -1)); + + // call bytes.init(self) + be_getmember(vm, -1, "init"); + be_pushvalue(vm, -2); + if (src_data) { be_pushcomptr(vm, src_data); } // if mapped, push address + be_pushint(vm, definitions ? -definitions->size_bytes : 0); // negative size signals a fixed size + be_call(vm, src_data ? 3 : 2); // call with 2 or 3 arguments depending on provided address + be_pop(vm, src_data ? 4 : 3); + // super(self, bytes) still on top of stack + + be_pop(vm, 1); + + be_return(vm); +} + +// +// copy ctypes_bytes, with same class and same content +// +int be_ctypes_copy(bvm *vm) { + size_t len; + const void * src = be_tobytes(vm, 1, &len); + be_classof(vm, 1); + // stack: 1/self + class_object + be_call(vm, 0); // call empty constructor to build empty resizable copy + // stack: 1/ self + new_empty_instance + + // source object (self) + be_getmember(vm, 1, ".p"); + const void* src_buf = be_tocomptr(vm, -1); + be_pop(vm, 1); + + be_getmember(vm, 1, ".len"); + int32_t src_len = be_toint(vm, -1); + be_pop(vm, 1); + + // dest object + be_getmember(vm, -1, ".p"); + const void* dst_buf = be_tocomptr(vm, -1); + be_pop(vm, 1); + + be_getmember(vm, -1, ".len"); + int32_t dst_len = be_toint(vm, -1); + be_pop(vm, 1); + + if (src_len != dst_len) { + be_raisef(vm, "internal_error", "new object has wrong size %i (should be %i)", dst_len, src_len); + } + + // copy bytes + memmove((void*)dst_buf, src_buf, src_len); + + be_return(vm); +} + +// get an attribute from a ctypes structure +// arg1: ctypes instance +// arg2: name of the argument +// The class has a `_def` static class attribute with the C low-level mapping definition +int be_ctypes_member(bvm *vm) { + int argc = be_top(vm); + be_getmember(vm, 1, "_def"); + const be_ctypes_structure_t *definitions; + definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, -1); + be_pop(vm, 1); + const char *name = be_tostring(vm, 2); + + // look for member + int32_t member_idx = bin_search_ctypes(name, &definitions->items[0], sizeof(be_ctypes_structure_item_t), definitions->size_elt); + if (member_idx >= 0) { + const be_ctypes_structure_item_t *member = &definitions->items[member_idx]; + // berry_log_C("member found bytes=%i, bits=%i, len_bits=%i, type=%i", member->offset_bytes, member->offset_bits, member->len_bits, member->type); + + // dispatch according to types + if (ctypes_bf == member->type) { + // bitfield + be_getmember(vm, 1, "getbits"); + be_pushvalue(vm, 1); // self + be_pushint(vm, member->offset_bytes * 8 + member->offset_bits); + be_pushint(vm, member->len_bits); + be_call(vm, 3); + be_pop(vm, 3); + // int result at top of stack + } else if (ctypes_float == member->type) { + // Note: double not supported (no need identified) + // get raw int32_t + be_getmember(vm, 1, "geti"); // self.get or self.geti + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushint(vm, 4); // size is 4 bytes + be_call(vm, 3); + be_pop(vm, 3); + // get int and convert to float + int32_t val = be_toint(vm, -1); + be_pop(vm, 1); + float *fval = (float*) &val; // type wizardry + be_pushreal(vm, *fval); + } else if (ctypes_ptr32 == member->type) { + be_getmember(vm, 1, "geti"); // self.get or self.geti + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushint(vm, 4); // size is 4 bytes TODO 32 bits only supported here + be_call(vm, 3); + be_pop(vm, 3); + // convert to ptr + int32_t val = be_toint(vm, -1); + be_pop(vm, 1); + be_pushcomptr(vm, (void*) val); + } else { + // general int support + int size = member->type; // eventually 1/2/4, positive if little endian, negative if big endian + int sign = bfalse; // signed int + if (size >= ctypes_i8) { + size -= ctypes_i8 - 1; + sign = btrue; + } + if (size <= ctypes_be_i8) { + size += ctypes_be_i8 - 1; + sign = btrue; + } + // get + be_getmember(vm, 1, sign ? "geti" : "get"); // self.get or self.geti + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushint(vm, size); + be_call(vm, 3); + be_pop(vm, 3); + // int result at top of stack + } + // the int result is at top of the stack + // check if we need an instance mapping + if (member->mapping > 0 && definitions->instance_mapping) { + const char * mapping_name = definitions->instance_mapping[member->mapping - 1]; + if (mapping_name) { + be_getglobal(vm, mapping_name); // stack: class + be_pushvalue(vm, -2); // stack: class, value + be_pushint(vm, -1); // stack; class, value, -1 + be_call(vm, 2); // call constructor with 2 parameters + be_pop(vm, 2); // leave new instance on top of stack + } + } + be_return(vm); + } + + be_return_nil(vm); +} + +// setmember takes 3 arguments: +// 1: self (subclass of bytes()) +// 2: name of member +// 3: value +int be_ctypes_setmember(bvm *vm) { + int argc = be_top(vm); + + // If the value is an instance, we call 'toint()' and replace the value + if (be_isinstance(vm, 3)) { + + be_getmember(vm, 3, "toint"); + if (!be_isnil(vm, -1)) { + be_pushvalue(vm, 3); + be_call(vm, 1); + be_pop(vm, 1); + be_moveto(vm, -1, 3); + } else { + be_raise(vm, "value_error", "Value is an instance without 'toint()' method"); + } + be_pop(vm, 1); + } + + // If the value is a pointer, replace with an int of same value (works only on 32 bits CPU) + if (be_iscomptr(vm, 3)) { + void * v = be_tocomptr(vm, 3); + be_pushint(vm, (int32_t) v); + be_moveto(vm, -1, 3); + be_pop(vm, 1); + } + + be_getmember(vm, 1, "_def"); + const be_ctypes_structure_t *definitions; + definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, -1); + be_pop(vm, 1); + const char *name = be_tostring(vm, 2); + + // look for member + int32_t member_idx = bin_search_ctypes(name, &definitions->items[0], sizeof(be_ctypes_structure_item_t), definitions->size_elt); + if (member_idx >= 0) { + const be_ctypes_structure_item_t *member = &definitions->items[member_idx]; + // berry_log_C("member found bytes=%i, bits=%i, len_bits=%i, type=%i", member->offset_bytes, member->offset_bits, member->len_bits, member->type); + + // dispatch according to types + if (ctypes_bf == member->type) { + // bitfield + be_getmember(vm, 1, "setbits"); + be_pushvalue(vm, 1); // self + be_pushint(vm, member->offset_bytes * 8 + member->offset_bits); + be_pushint(vm, member->len_bits); + be_pushvalue(vm, 3); // val + be_call(vm, 4); + be_pop(vm, 5); + be_return_nil(vm); + } else if (ctypes_float == member->type) { + // Note: double not supported (no need identified) + float val = be_toreal(vm, 3); + int32_t *ival = (int32_t*) &val; + // set + be_getmember(vm, 1, "seti"); + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushint(vm, *ival); + be_pushint(vm, 4); // size is 4 bytes + be_call(vm, 4); + be_pop(vm, 5); + be_return_nil(vm); + } else if (ctypes_ptr32 == member->type) { + // Note: 64 bits pointer not supported + int32_t ptr; + if (be_iscomptr(vm, 3)) { + ptr = (int32_t) be_tocomptr(vm, 3); + } else { + ptr = be_toint(vm, 3); + } + // set + be_getmember(vm, 1, "seti"); + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushint(vm, ptr); + be_pushint(vm, 4); // size is 4 bytes - 64 bits not suppported + be_call(vm, 4); + be_pop(vm, 5); + be_return_nil(vm); + } else { + // general int support + int size = member->type; // eventually 1/2/4, positive if little endian, negative if big endian + int sign = bfalse; // signed int + if (size >= ctypes_i8) { + size -= ctypes_i8 - 1; + sign = btrue; + } + if (size <= ctypes_be_i8) { + size += ctypes_be_i8 - 1; + sign = btrue; + } + // set + be_getmember(vm, 1, sign ? "seti" : "set"); // self.get or self.geti + be_pushvalue(vm, 1); // push self + be_pushint(vm, member->offset_bytes); + be_pushvalue(vm, 3); // val + be_pushint(vm, size); + be_call(vm, 4); + be_pop(vm, 5); + be_return_nil(vm); + } + } else { + be_raisef(vm, "attribute_error", "class '%s' cannot assign to attribute '%s'", + be_classname(vm, 1), be_tostring(vm, 2)); + } +} + +// +// tomap, create a map instance containing all values decoded +// +int be_ctypes_tomap(bvm *vm) { + // don't need argc + be_getmember(vm, 1, "_def"); + const be_ctypes_structure_t *definitions; + definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, -1); + be_pop(vm, 1); + + // create empty map + be_newobject(vm, "map"); + + for (uint32_t i = 0; i < definitions->size_elt; i++) { + const be_ctypes_structure_item_t * item = &definitions->items[i]; + + be_pushstring(vm, item->name); // stack: map - key + + be_getmember(vm, 1, "member"); + be_pushvalue(vm, 1); + be_pushstring(vm, item->name); + be_call(vm, 2); + be_pop(vm, 2); // stack: map - key - value + + be_data_insert(vm, -3); + be_pop(vm, 2); // stack: map + } + + be_pop(vm, 1); // remove map struct, to leave map instance + be_return(vm); +} + +// +// Constructor for ctypes_dyn structure +// +// Arg1 is instance self +// Arg2 is int or comptr (and not null): create a mapped bytes buffer to read/write at a specific location +// Arg3 is int or comptr (and not null): the binary definition of the struct (dynamic and not fixed as static member) +int be_ctypes_dyn_init(bvm *vm) { + int argc = be_top(vm); + void * src_data = NULL; + const be_ctypes_structure_t * definitions = NULL; + if (argc > 2 && (be_isint(vm, 2) || be_iscomptr(vm, 2)) && (be_isint(vm, 3) || be_iscomptr(vm, 3))) { + if (be_iscomptr(vm, 2)) { + src_data = be_tocomptr(vm, 2); + } else { + src_data = (void*) be_toint(vm, 2); + } + if (be_iscomptr(vm, 3)) { + definitions = (const be_ctypes_structure_t *) be_tocomptr(vm, 3); + } else { + definitions = (const be_ctypes_structure_t *) be_toint(vm, 3); + } + } + if (!src_data || !definitions) { + be_raise(vm, "value_error", "'address' and 'definition' cannot be null"); + } + + // store definition in member variable + be_pushcomptr(vm, (void*) definitions); + be_setmember(vm, 1, "_def"); // static class comptr + be_pop(vm, 1); + + // call bytes.init(self) + be_getbuiltin(vm, "bytes"); // shortcut `ctypes` init and call directly bytes.init() + be_getmember(vm, -1, "init"); + be_pushvalue(vm, 1); + be_pushcomptr(vm, src_data); + be_pushint(vm, -definitions->size_bytes); // negative size signals a fixed size + be_call(vm, 3); // call with 2 or 3 arguments depending on provided address + be_pop(vm, 4); + // super(self, bytes) still on top of stack + + be_pop(vm, 1); + + be_return(vm); +} + +BE_EXPORT_VARIABLE extern const bclass be_class_bytes; + +#include "../generate/be_fixed_be_class_ctypes.h" +#include "../generate/be_fixed_be_class_ctypes_dyn.h" + +void be_load_ctypes_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_ctypes); + be_setglobal(vm, "ctypes_bytes"); + be_pop(vm, 1); + be_pushntvclass(vm, &be_class_ctypes_dyn); + be_setglobal(vm, "ctypes_bytes_dyn"); + be_pop(vm, 1); +} + +/* @const_object_info_begin +class be_class_ctypes (scope: global, name: ctypes_bytes, super: be_class_bytes) { + _def, nil() + copy, func(be_ctypes_copy) + init, func(be_ctypes_init) + member, func(be_ctypes_member) + setmember, func(be_ctypes_setmember) + + tomap, func(be_ctypes_tomap) +} +@const_object_info_end */ + +/* @const_object_info_begin +class be_class_ctypes_dyn (scope: global, name: ctypes_bytes_dyn, super: be_class_ctypes) { + _def, var + init, func(be_ctypes_dyn_init) +} +@const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_driverlib.c b/lib/libesp32/Berry/default/be_driverlib.c index a98836f5c..dbef17a94 100644 --- a/lib/libesp32/Berry/default/be_driverlib.c +++ b/lib/libesp32/Berry/default/be_driverlib.c @@ -6,125 +6,148 @@ *******************************************************************/ #include "be_constobj.h" -extern int d_getTasmotaGlob(bvm *vm); - - /******************************************************************** - "class Driver2 : Driver " - "def add_cmd(c, f) " - "var tasmota = self.get_tasmota() " - "tasmota.add_cmd(c, / cmd, idx, payload, payload_json -> f(self, cmd, idx, payload, payload_json)) " - "end " - "end " - "Driver = Driver2 " +** Solidified function: init ********************************************************************/ -/******************************************************************** -** Solidified function: add_cmd -********************************************************************/ - -/********** Solidified proto: add_cmd_0 */ -static const bupvaldesc add_cmd_0_upvals[2] = { - be_local_const_upval(1, 2), - be_local_const_upval(1, 0), -}; - -be_define_local_const_str(add_cmd_0_str_name, "add_cmd_0", 607256038, 8); -be_define_local_const_str(add_cmd_0_str_source, "input", -103256197, 5); - -static const uint32_t add_cmd_0_code[8] = { - 0x68100000, // 0000 GETUPV R4 U0 - 0x68140001, // 0001 GETUPV R5 U1 - 0x5C180000, // 0002 MOVE R6 R0 - 0x5C1C0200, // 0003 MOVE R7 R1 - 0x5C200400, // 0004 MOVE R8 R2 - 0x5C240600, // 0005 MOVE R9 R3 - 0x7C100A00, // 0006 CALL R4 5 - 0x80040800, // 0007 RET 1 R4 -}; - -be_define_local_proto(add_cmd_0, 10, 4, 0, 0, 1); - -/********** Solidified proto: add_cmd */ -static const bproto *add_cmd_subproto[1] = { - &add_cmd_0_proto, -}; - -be_define_local_const_str(add_cmd_str_name, "add_cmd", -933336417, 7); -be_define_local_const_str(add_cmd_str_source, "input", -103256197, 5); -be_define_local_const_str(add_cmd_str_0, "get_tasmota", 334356779, 11); -be_define_local_const_str(add_cmd_str_1, "add_cmd", -933336417, 7); - -static const bvalue add_cmd_ktab[2] = { - { { .s=be_local_const_str(add_cmd_str_0) }, BE_STRING}, - { { .s=be_local_const_str(add_cmd_str_1) }, BE_STRING}, -}; - -static const uint32_t add_cmd_code[8] = { - 0x8C0C0100, // 0000 GETMET R3 R0 R256 - 0x7C0C0200, // 0001 CALL R3 1 - 0x8C100701, // 0002 GETMET R4 R3 R257 - 0x5C180200, // 0003 MOVE R6 R1 - 0x841C0000, // 0004 CLOSURE R7 P0 - 0x7C100600, // 0005 CALL R4 3 - 0xA0000000, // 0006 CLOSE 0 - 0x80000000, // 0007 RET 0 R0 -}; - -be_define_local_proto(add_cmd, 8, 3, 1, 1, 0); -be_define_local_closure(add_cmd); - +be_local_closure(init, /* name */ + be_nested_proto( + 1, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 0, /* has constants */ + NULL, /* no const */ + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 1]) { /* code */ + 0x80000000, // 0000 RET 0 + }) + ) +); /*******************************************************************/ +/******************************************************************** +** Solidified function: get_tasmota +********************************************************************/ +be_local_closure(get_tasmota, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + }), + (be_nested_const_str("get_tasmota", 334356779, 11)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 2]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ -#if BE_USE_PRECOMPILED_OBJECT -#include "../generate/be_fixed_be_class_tasmota_driver.h" -#endif -void be_load_driverlib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { "every_second", NULL }, - { "every_100ms", NULL }, - { "web_add_handler", NULL }, - { "web_add_button", NULL }, - { "web_add_main_button", NULL }, - { "save_before_restart", NULL }, - { "web_sensor", NULL }, - { "json_append", NULL }, - { "button_pressed", NULL }, - { "display", NULL }, +/******************************************************************** +** Solidified function: add_cmd +********************************************************************/ +be_local_closure(add_cmd, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 10, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 2]) { /* upvals */ + be_local_const_upval(1, 2), + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 0, /* has constants */ + NULL, /* no const */ + (be_nested_const_str("", 607256038, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 8]) { /* code */ + 0x68100000, // 0000 GETUPV R4 U0 + 0x68140001, // 0001 GETUPV R5 U1 + 0x5C180000, // 0002 MOVE R6 R0 + 0x5C1C0200, // 0003 MOVE R7 R1 + 0x5C200400, // 0004 MOVE R8 R2 + 0x5C240600, // 0005 MOVE R9 R3 + 0x7C100A00, // 0006 CALL R4 5 + 0x80040800, // 0007 RET 1 R4 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + /* K1 */ be_nested_string("add_cmd", -933336417, 7), + }), + (be_nested_const_str("add_cmd", -933336417, 7)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 7]) { /* code */ + 0xB80E0000, // 0000 GETNGBL R3 K0 + 0x8C0C0701, // 0001 GETMET R3 R3 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x84180000, // 0003 CLOSURE R6 P0 + 0x7C0C0600, // 0004 CALL R3 3 + 0xA0000000, // 0005 CLOSE R0 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ - { "get_tasmota", d_getTasmotaGlob }, - { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - { "add_cmd", (bntvfunc) &add_cmd_closure }, - - { NULL, NULL } - }; - be_regclass(vm, "Driver", members); -#else - be_pushntvclass(vm, &be_class_tasmota_driver); +/******************************************************************** +** Solidified class: Driver +********************************************************************/ +be_local_class(Driver, + 13, + NULL, + be_nested_map(16, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("web_add_main_button", -334599632, 19, 14), be_const_var(4) }, + { be_nested_key("web_add_console_button", -813531104, 22, -1), be_const_var(7) }, + { be_nested_key("web_add_management_button", -1556090110, 25, 8), be_const_var(5) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("json_append", -1292948012, 11, -1), be_const_var(10) }, + { be_nested_key("web_add_config_button", 639674325, 21, 7), be_const_var(6) }, + { be_nested_key("every_100ms", 1546407804, 11, -1), be_const_var(1) }, + { be_nested_key("display", 1164572437, 7, -1), be_const_var(12) }, + { be_nested_key("web_add_button", -757092238, 14, 13), be_const_var(3) }, + { be_nested_key("every_second", 2075451465, 12, -1), be_const_var(0) }, + { be_nested_key("save_before_restart", 1253239338, 19, -1), be_const_var(8) }, + { be_nested_key("get_tasmota", 334356779, 11, -1), be_const_closure(get_tasmota_closure) }, + { be_nested_key("web_sensor", -1394870324, 10, 6), be_const_var(9) }, + { be_nested_key("web_add_handler", -304792334, 15, -1), be_const_var(2) }, + { be_nested_key("button_pressed", 1694209616, 14, 1), be_const_var(11) }, + { be_nested_key("add_cmd", -933336417, 7, -1), be_const_closure(add_cmd_closure) }, + })), + (be_nested_const_str("Driver", -718580993, 6)) +); +/*******************************************************************/ + +void be_load_Driver_class(bvm *vm) { + be_pushntvclass(vm, &be_class_Driver); be_setglobal(vm, "Driver"); be_pop(vm, 1); -#endif } -/* @const_object_info_begin - -class be_class_tasmota_driver (scope: global, name: Driver) { - every_second, var - every_100ms, var - web_add_handler, var - web_add_button, var - web_add_main_button, var - save_before_restart, var - web_sensor, var - json_append, var - button_pressed, var - display, var - - get_tasmota, func(d_getTasmotaGlob) - - add_cmd, closure(add_cmd_closure) -} -@const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_energy_ctypes_definitions.c b/lib/libesp32/Berry/default/be_energy_ctypes_definitions.c new file mode 100644 index 000000000..86f84ef64 --- /dev/null +++ b/lib/libesp32/Berry/default/be_energy_ctypes_definitions.c @@ -0,0 +1,117 @@ +/******************************************************************** + * Tasmota LVGL ctypes mapping + *******************************************************************/ +#include "be_ctypes.h" + +#ifdef USE_ENERGY_SENSOR + +/******************************************************************** + * Generated code, don't edit + *******************************************************************/ + +static const char * be_ctypes_instance_mappings[]; /* forward definition */ + +const be_ctypes_structure_t be_energy_struct = { + 250, /* size in bytes */ + 85, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[85]) { + { "active_power", 24, 0, 0, ctypes_float, 0 }, + { "active_power_2", 28, 0, 0, ctypes_float, 0 }, + { "active_power_3", 32, 0, 0, ctypes_float, 0 }, + { "apparent_power", 36, 0, 0, ctypes_float, 0 }, + { "apparent_power_2", 40, 0, 0, ctypes_float, 0 }, + { "apparent_power_3", 44, 0, 0, ctypes_float, 0 }, + { "command_code", 205, 0, 0, ctypes_u8, 0 }, + { "current", 12, 0, 0, ctypes_float, 0 }, + { "current_2", 16, 0, 0, ctypes_float, 0 }, + { "current_3", 20, 0, 0, ctypes_float, 0 }, + { "current_available", 215, 0, 0, ctypes_u8, 0 }, + { "daily", 120, 0, 0, ctypes_float, 0 }, + { "daily_2", 124, 0, 0, ctypes_float, 0 }, + { "daily_3", 128, 0, 0, ctypes_float, 0 }, + { "daily_sum", 144, 0, 0, ctypes_float, 0 }, + { "data_valid", 206, 0, 0, ctypes_u8, 0 }, + { "data_valid_2", 207, 0, 0, ctypes_u8, 0 }, + { "data_valid_3", 208, 0, 0, ctypes_u8, 0 }, + { "export_active", 96, 0, 0, ctypes_float, 0 }, + { "export_active_2", 100, 0, 0, ctypes_float, 0 }, + { "export_active_3", 104, 0, 0, ctypes_float, 0 }, + { "fifth_second", 204, 0, 0, ctypes_u8, 0 }, + { "frequency", 72, 0, 0, ctypes_float, 0 }, + { "frequency_2", 76, 0, 0, ctypes_float, 0 }, + { "frequency_3", 80, 0, 0, ctypes_float, 0 }, + { "frequency_common", 211, 0, 0, ctypes_u8, 0 }, + { "import_active", 84, 0, 0, ctypes_float, 0 }, + { "import_active_2", 88, 0, 0, ctypes_float, 0 }, + { "import_active_3", 92, 0, 0, ctypes_float, 0 }, + { "max_current_flag", 242, 0, 0, ctypes_u8, 0 }, + { "max_energy_state", 249, 0, 0, ctypes_u8, 0 }, + { "max_power_flag", 238, 0, 0, ctypes_u8, 0 }, + { "max_voltage_flag", 240, 0, 0, ctypes_u8, 0 }, + { "min_current_flag", 241, 0, 0, ctypes_u8, 0 }, + { "min_power_flag", 237, 0, 0, ctypes_u8, 0 }, + { "min_voltage_flag", 239, 0, 0, ctypes_u8, 0 }, + { "mplh_counter", 244, 0, 0, ctypes_u16, 0 }, + { "mplr_counter", 248, 0, 0, ctypes_u8, 0 }, + { "mplw_counter", 246, 0, 0, ctypes_u16, 0 }, + { "period", 192, 0, 0, ctypes_u32, 0 }, + { "period_2", 196, 0, 0, ctypes_u32, 0 }, + { "period_3", 200, 0, 0, ctypes_u32, 0 }, + { "phase_count", 209, 0, 0, ctypes_u8, 0 }, + { "power_factor", 60, 0, 0, ctypes_float, 0 }, + { "power_factor_2", 64, 0, 0, ctypes_float, 0 }, + { "power_factor_3", 68, 0, 0, ctypes_float, 0 }, + { "power_history_0", 218, 0, 0, ctypes_u16, 0 }, + { "power_history_0_2", 220, 0, 0, ctypes_u16, 0 }, + { "power_history_0_3", 222, 0, 0, ctypes_u16, 0 }, + { "power_history_1", 224, 0, 0, ctypes_u16, 0 }, + { "power_history_1_2", 226, 0, 0, ctypes_u16, 0 }, + { "power_history_1_3", 228, 0, 0, ctypes_u16, 0 }, + { "power_history_2", 230, 0, 0, ctypes_u16, 0 }, + { "power_history_2_2", 232, 0, 0, ctypes_u16, 0 }, + { "power_history_2_3", 234, 0, 0, ctypes_u16, 0 }, + { "power_on", 217, 0, 0, ctypes_u8, 0 }, + { "power_steady_counter", 236, 0, 0, ctypes_u8, 0 }, + { "reactive_power", 48, 0, 0, ctypes_float, 0 }, + { "reactive_power_2", 52, 0, 0, ctypes_float, 0 }, + { "reactive_power_3", 56, 0, 0, ctypes_float, 0 }, + { "start_energy", 108, 0, 0, ctypes_float, 0 }, + { "start_energy_2", 112, 0, 0, ctypes_float, 0 }, + { "start_energy_3", 116, 0, 0, ctypes_float, 0 }, + { "today_delta_kwh", 156, 0, 0, ctypes_u32, 0 }, + { "today_delta_kwh_2", 160, 0, 0, ctypes_u32, 0 }, + { "today_delta_kwh_3", 164, 0, 0, ctypes_u32, 0 }, + { "today_kwh", 180, 0, 0, ctypes_u32, 0 }, + { "today_kwh_2", 184, 0, 0, ctypes_u32, 0 }, + { "today_kwh_3", 188, 0, 0, ctypes_u32, 0 }, + { "today_offset_init_kwh", 213, 0, 0, ctypes_u8, 0 }, + { "today_offset_kwh", 168, 0, 0, ctypes_u32, 0 }, + { "today_offset_kwh_2", 172, 0, 0, ctypes_u32, 0 }, + { "today_offset_kwh_3", 176, 0, 0, ctypes_u32, 0 }, + { "total", 132, 0, 0, ctypes_float, 0 }, + { "total_2", 136, 0, 0, ctypes_float, 0 }, + { "total_3", 140, 0, 0, ctypes_float, 0 }, + { "total_sum", 148, 0, 0, ctypes_float, 0 }, + { "type_dc", 216, 0, 0, ctypes_u8, 0 }, + { "use_overtemp", 212, 0, 0, ctypes_u8, 0 }, + { "voltage", 0, 0, 0, ctypes_float, 0 }, + { "voltage_2", 4, 0, 0, ctypes_float, 0 }, + { "voltage_3", 8, 0, 0, ctypes_float, 0 }, + { "voltage_available", 214, 0, 0, ctypes_u8, 0 }, + { "voltage_common", 210, 0, 0, ctypes_u8, 0 }, + { "yesterday_sum", 152, 0, 0, ctypes_float, 0 }, +}}; + +static const char * be_ctypes_instance_mappings[] = { + NULL +}; + +static be_define_ctypes_class(energy_struct, &be_energy_struct, &be_class_ctypes, "energy_struct"); + +void be_load_ctypes_energy_definitions_lib(bvm *vm) { + ctypes_register_class(vm, &be_class_energy_struct, &be_energy_struct); +} +/********************************************************************/ + +#endif // USE_ENERGY_SENSOR \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_energylib.c b/lib/libesp32/Berry/default/be_energylib.c index eb267f5db..a6fb58898 100644 --- a/lib/libesp32/Berry/default/be_energylib.c +++ b/lib/libesp32/Berry/default/be_energylib.c @@ -9,21 +9,160 @@ #ifdef USE_ENERGY_SENSOR -extern int b_nrg_read(bvm *vm); +extern struct ENERGY Energy; +/* + +def init(m) + import global + global._energy = energy_struct(m._ptr) + return m +end + +def read() + return _energy.tomap() +end + +def member(k) + return _energy.(k) +end + +def setmember(k, v) + _energy.(k) = v +end + +import solidify +solidify.dump(m.init) +*/ + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("global", 503252654, 6), + /* K1 */ be_nested_string("_energy", 535372070, 7), + /* K2 */ be_nested_string("energy_struct", 1655792843, 13), + /* K3 */ be_nested_string("_ptr", 306235816, 4), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0xB80A0400, // 0001 GETNGBL R2 K2 + 0x880C0103, // 0002 GETMBR R3 R0 K3 + 0x7C080200, // 0003 CALL R2 1 + 0x90060202, // 0004 SETMBR R1 K1 R2 + 0x80040000, // 0005 RET 1 R0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: read +********************************************************************/ +be_local_closure(read, /* name */ + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_energy", 535372070, 7), + /* K1 */ be_nested_string("tomap", 612167626, 5), + }), + (be_nested_const_str("", 1160973142, 11)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 4]) { /* code */ + 0xB8020000, // 0000 GETNGBL R0 K0 + 0x8C000101, // 0001 GETMET R0 R0 K1 + 0x7C000200, // 0002 CALL R0 1 + 0x80040000, // 0003 RET 1 R0 + }) + ) +); +/*******************************************************************/ + +/******************************************************************** +** Solidified function: member +********************************************************************/ +be_local_closure(member, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("_energy", 535372070, 7), + }), + (be_nested_const_str("member", 719708611, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 3]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x88040200, // 0001 GETMBR R1 R1 R0 + 0x80040200, // 0002 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: setmember +********************************************************************/ +be_local_closure(setmember, /* name */ + be_nested_proto( + 3, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("_energy", 535372070, 7), + }), + (be_nested_const_str("setmember", 1432909441, 9)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 3]) { /* code */ + 0xB80A0000, // 0000 GETNGBL R2 K0 + 0x90080001, // 0001 SETMBR R2 R0 R1 + 0x80000000, // 0002 RET 0 + }) + ) +); +/*******************************************************************/ -#if !BE_USE_PRECOMPILED_OBJECT -be_native_module_attr_table(energy) { - be_native_module_function("read", b_nrg_read), -}; -be_define_native_module(energy, NULL); -#else /* @const_object_info_begin module energy (scope: global) { - read, func(b_nrg_read) + _ptr, comptr(&Energy) + init, closure(init_closure) + + read, closure(read_closure) + member, closure(member_closure) + setmember, closure(setmember_closure) } @const_object_info_end */ #include "../generate/be_fixed_energy.h" -#endif #endif // USE_ENERGY_SENSOR \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_flash_lib.c b/lib/libesp32/Berry/default/be_flash_lib.c index b05b23637..539805d5d 100644 --- a/lib/libesp32/Berry/default/be_flash_lib.c +++ b/lib/libesp32/Berry/default/be_flash_lib.c @@ -11,16 +11,6 @@ extern int p_flash_read(bvm *vm); extern int p_flash_write(bvm *vm); extern int p_flash_erase(bvm *vm); -#if !BE_USE_PRECOMPILED_OBJECT -be_native_module_attr_table(flash) { - be_native_module_function("read", p_flash_read), - be_native_module_function("write", p_flash_write), - be_native_module_function("erase", p_flash_erase), - -}; - -be_define_native_module(flash, NULL); -#else /* @const_object_info_begin module flash (scope: global) { read, func(p_flash_read) @@ -29,4 +19,3 @@ module flash (scope: global) { } @const_object_info_end */ #include "../generate/be_fixed_flash.h" -#endif diff --git a/lib/libesp32/Berry/default/be_gpio_lib.c b/lib/libesp32/Berry/default/be_gpio_lib.c index d2c9bf8db..650360101 100644 --- a/lib/libesp32/Berry/default/be_gpio_lib.c +++ b/lib/libesp32/Berry/default/be_gpio_lib.c @@ -12,282 +12,11 @@ extern int gp_pin_mode(bvm *vm); extern int gp_digital_write(bvm *vm); extern int gp_digital_read(bvm *vm); +extern int gp_dac_voltage(bvm *vm); extern int gp_pin_used(bvm *vm); extern int gp_pin(bvm *vm); -#if !BE_USE_PRECOMPILED_OBJECT -be_native_module_attr_table(gpio) { - // HIGH/LOW - be_native_module_int("LOW", 0), - be_native_module_int("HIGH", 1), - // GPIO states - be_native_module_int("INPUT", 1), - be_native_module_int("OUTPUT", 2), - be_native_module_int("PULLUP", 4), - be_native_module_int("INPUT_PULLUP", 5), - be_native_module_int("PULLDOWN", 8), - be_native_module_int("INPUT_PULLDOWN", 9), - be_native_module_int("OPEN_DRAIN", 16), - be_native_module_int("OUTPUT_OPEN_DRAIN", 18), - // Interrupt trigger - be_native_module_int("RISING", 1), - be_native_module_int("FALLING", 2), - be_native_module_int("CHANGE", 4), - // Tasmota GPIOs - be_native_module_int("NONE", 0), - be_native_module_int("KEY1", 1), - be_native_module_int("KEY1_NP", 2), - be_native_module_int("KEY1_INV", 3), - be_native_module_int("KEY1_INV_NP", 4), - be_native_module_int("SWT1", 5), - be_native_module_int("SWT1_NP", 6), - be_native_module_int("REL1", 7), - be_native_module_int("REL1_INV", 8), - be_native_module_int("LED1", 9), - be_native_module_int("LED1_INV", 10), - be_native_module_int("CNTR1", 11), - be_native_module_int("CNTR1_NP", 12), - be_native_module_int("PWM1", 13), - be_native_module_int("PWM1_INV", 14), - be_native_module_int("BUZZER", 15), - be_native_module_int("BUZZER_INV", 16), - be_native_module_int("LEDLNK", 17), - be_native_module_int("LEDLNK_INV", 18), - be_native_module_int("I2C_SCL", 19), - be_native_module_int("I2C_SDA", 20), - be_native_module_int("SPI_MISO", 21), - be_native_module_int("SPI_MOSI", 22), - be_native_module_int("SPI_CLK", 23), - be_native_module_int("SPI_CS", 24), - be_native_module_int("SPI_DC", 25), - be_native_module_int("SSPI_MISO", 26), - be_native_module_int("SSPI_MOSI", 27), - be_native_module_int("SSPI_SCLK", 28), - be_native_module_int("SSPI_CS", 29), - be_native_module_int("SSPI_DC", 30), - be_native_module_int("BACKLIGHT", 31), - be_native_module_int("OLED_RESET", 32), - be_native_module_int("IRSEND", 33), - be_native_module_int("IRRECV", 34), - be_native_module_int("RFSEND", 35), - be_native_module_int("RFRECV", 36), - be_native_module_int("DHT11", 37), - be_native_module_int("DHT22", 38), - be_native_module_int("SI7021", 39), - be_native_module_int("DHT11_OUT", 40), - be_native_module_int("DSB", 41), - be_native_module_int("DSB_OUT", 42), - be_native_module_int("WS2812", 43), - be_native_module_int("MHZ_TXD", 44), - be_native_module_int("MHZ_RXD", 45), - be_native_module_int("PZEM0XX_TX", 46), - be_native_module_int("PZEM004_RX", 47), - be_native_module_int("PZEM016_RX", 48), - be_native_module_int("PZEM017_RX", 49), - be_native_module_int("SAIR_TX", 50), - be_native_module_int("SAIR_RX", 51), - be_native_module_int("PMS5003_TX", 52), - be_native_module_int("PMS5003_RX", 53), - be_native_module_int("SDS0X1_TX", 54), - be_native_module_int("SDS0X1_RX", 55), - be_native_module_int("SBR_TX", 56), - be_native_module_int("SBR_RX", 57), - be_native_module_int("SR04_TRIG", 58), - be_native_module_int("SR04_ECHO", 59), - be_native_module_int("SDM120_TX", 60), - be_native_module_int("SDM120_RX", 61), - be_native_module_int("SDM630_TX", 62), - be_native_module_int("SDM630_RX", 63), - be_native_module_int("TM1638CLK", 64), - be_native_module_int("TM1638DIO", 65), - be_native_module_int("TM1638STB", 66), - be_native_module_int("MP3_DFR562", 67), - be_native_module_int("HX711_SCK", 68), - be_native_module_int("HX711_DAT", 69), - be_native_module_int("TX2X_TXD_BLACK", 70), - be_native_module_int("TUYA_TX", 71), - be_native_module_int("TUYA_RX", 72), - be_native_module_int("MGC3130_XFER", 73), - be_native_module_int("MGC3130_RESET", 74), - be_native_module_int("RF_SENSOR", 75), - be_native_module_int("AZ_TXD", 76), - be_native_module_int("AZ_RXD", 77), - be_native_module_int("MAX31855CS", 78), - be_native_module_int("MAX31855CLK", 79), - be_native_module_int("MAX31855DO", 80), - be_native_module_int("NRG_SEL", 81), - be_native_module_int("NRG_SEL_INV", 82), - be_native_module_int("NRG_CF1", 83), - be_native_module_int("HLW_CF", 84), - be_native_module_int("HJL_CF", 85), - be_native_module_int("MCP39F5_TX", 86), - be_native_module_int("MCP39F5_RX", 87), - be_native_module_int("MCP39F5_RST", 88), - be_native_module_int("PN532_TXD", 89), - be_native_module_int("PN532_RXD", 90), - be_native_module_int("SM16716_CLK", 91), - be_native_module_int("SM16716_DAT", 92), - be_native_module_int("SM16716_SEL", 93), - be_native_module_int("DI", 94), - be_native_module_int("DCKI", 95), - be_native_module_int("CSE7766_TX", 96), - be_native_module_int("CSE7766_RX", 97), - be_native_module_int("ARIRFRCV", 98), - be_native_module_int("ARIRFSEL", 99), - be_native_module_int("TXD", 100), - be_native_module_int("RXD", 101), - be_native_module_int("ROT1A", 102), - be_native_module_int("ROT1B", 103), - be_native_module_int("ADC_JOY", 104), - be_native_module_int("SSPI_MAX31865_CS1", 105), - be_native_module_int("HRE_CLOCK", 106), - be_native_module_int("HRE_DATA", 107), - be_native_module_int("ADE7953_IRQ", 108), - be_native_module_int("SOLAXX1_TX", 109), - be_native_module_int("SOLAXX1_RX", 110), - be_native_module_int("ZIGBEE_TX", 111), - be_native_module_int("ZIGBEE_RX", 112), - be_native_module_int("RDM6300_RX", 113), - be_native_module_int("IBEACON_TX", 114), - be_native_module_int("IBEACON_RX", 115), - be_native_module_int("A4988_DIR", 116), - be_native_module_int("A4988_STP", 117), - be_native_module_int("A4988_ENA", 118), - be_native_module_int("A4988_MS1", 119), - be_native_module_int("OUTPUT_HI", 120), - be_native_module_int("OUTPUT_LO", 121), - be_native_module_int("DDS2382_TX", 122), - be_native_module_int("DDS2382_RX", 123), - be_native_module_int("DDSU666_TX", 124), - be_native_module_int("DDSU666_RX", 125), - be_native_module_int("SM2135_CLK", 126), - be_native_module_int("SM2135_DAT", 127), - be_native_module_int("DEEPSLEEP", 128), - be_native_module_int("EXS_ENABLE", 129), - be_native_module_int("TASMOTACLIENT_TXD", 130), - be_native_module_int("TASMOTACLIENT_RXD", 131), - be_native_module_int("TASMOTACLIENT_RST", 132), - be_native_module_int("TASMOTACLIENT_RST_INV", 133), - be_native_module_int("HPMA_RX", 134), - be_native_module_int("HPMA_TX", 135), - be_native_module_int("GPS_RX", 136), - be_native_module_int("GPS_TX", 137), - be_native_module_int("HM10_RX", 138), - be_native_module_int("HM10_TX", 139), - be_native_module_int("LE01MR_RX", 140), - be_native_module_int("LE01MR_TX", 141), - be_native_module_int("CC1101_GDO0", 142), - be_native_module_int("CC1101_GDO2", 143), - be_native_module_int("HRXL_RX", 144), - be_native_module_int("ELECTRIQ_MOODL_TX", 145), - be_native_module_int("AS3935", 146), - be_native_module_int("ADC_INPUT", 147), - be_native_module_int("ADC_TEMP", 148), - be_native_module_int("ADC_LIGHT", 149), - be_native_module_int("ADC_BUTTON", 150), - be_native_module_int("ADC_BUTTON_INV", 151), - be_native_module_int("ADC_RANGE", 152), - be_native_module_int("ADC_CT_POWER", 153), - be_native_module_int("WEBCAM_PWDN", 154), - be_native_module_int("WEBCAM_RESET", 155), - be_native_module_int("WEBCAM_XCLK", 156), - be_native_module_int("WEBCAM_SIOD", 157), - be_native_module_int("WEBCAM_SIOC", 158), - be_native_module_int("WEBCAM_DATA", 159), - be_native_module_int("WEBCAM_VSYNC", 160), - be_native_module_int("WEBCAM_HREF", 161), - be_native_module_int("WEBCAM_PCLK", 162), - be_native_module_int("WEBCAM_PSCLK", 163), - be_native_module_int("WEBCAM_HSD", 164), - be_native_module_int("WEBCAM_PSRCS", 165), - be_native_module_int("BOILER_OT_RX", 166), - be_native_module_int("BOILER_OT_TX", 167), - be_native_module_int("WINDMETER_SPEED", 168), - be_native_module_int("KEY1_TC", 169), - be_native_module_int("BL0940_RX", 170), - be_native_module_int("TCP_TX", 171), - be_native_module_int("TCP_RX", 172), - be_native_module_int("ETH_PHY_POWER", 173), - be_native_module_int("ETH_PHY_MDC", 174), - be_native_module_int("ETH_PHY_MDIO", 175), - be_native_module_int("TELEINFO_RX", 176), - be_native_module_int("TELEINFO_ENABLE", 177), - be_native_module_int("LMT01", 178), - be_native_module_int("IEM3000_TX", 179), - be_native_module_int("IEM3000_RX", 180), - be_native_module_int("ZIGBEE_RST", 181), - be_native_module_int("DYP_RX", 182), - be_native_module_int("MIEL_HVAC_TX", 183), - be_native_module_int("MIEL_HVAC_RX", 184), - be_native_module_int("WE517_TX", 185), - be_native_module_int("WE517_RX", 186), - be_native_module_int("AS608_TX", 187), - be_native_module_int("AS608_RX", 188), - be_native_module_int("SHELLY_DIMMER_BOOT0", 189), - be_native_module_int("SHELLY_DIMMER_RST_INV", 190), - be_native_module_int("RC522_RST", 191), - be_native_module_int("P9813_CLK", 192), - be_native_module_int("P9813_DAT", 193), - be_native_module_int("OPTION_A", 194), - be_native_module_int("FTC532", 195), - be_native_module_int("RC522_CS", 196), - be_native_module_int("NRF24_CS", 197), - be_native_module_int("NRF24_DC", 198), - be_native_module_int("ILI9341_CS", 199), - be_native_module_int("ILI9341_DC", 200), - be_native_module_int("ILI9488_CS", 201), - be_native_module_int("EPAPER29_CS", 202), - be_native_module_int("EPAPER42_CS", 203), - be_native_module_int("SSD1351_CS", 204), - be_native_module_int("RA8876_CS", 205), - be_native_module_int("ST7789_CS", 206), - be_native_module_int("ST7789_DC", 207), - be_native_module_int("SSD1331_CS", 208), - be_native_module_int("SSD1331_DC", 209), - be_native_module_int("SDCARD_CS", 210), - be_native_module_int("ROT1A_NP", 211), - be_native_module_int("ROT1B_NP", 212), - be_native_module_int("ADC_PH", 213), - be_native_module_int("BS814_CLK", 214), - be_native_module_int("BS814_DAT", 215), - be_native_module_int("WIEGAND_D0", 216), - be_native_module_int("WIEGAND_D1", 217), - be_native_module_int("NEOPOOL_TX", 218), - be_native_module_int("NEOPOOL_RX", 219), - be_native_module_int("SDM72_TX", 220), - be_native_module_int("SDM72_RX", 221), - be_native_module_int("TM1637CLK", 222), - be_native_module_int("TM1637DIO", 223), - be_native_module_int("PROJECTOR_CTRL_TX", 224), - be_native_module_int("PROJECTOR_CTRL_RX", 225), - be_native_module_int("SSD1351_DC", 226), - be_native_module_int("XPT2046_CS", 227), - be_native_module_int("CSE7761_TX", 228), - be_native_module_int("CSE7761_RX", 229), - be_native_module_int("VL53L0X_XSHUT1", 230), - be_native_module_int("MAX7219CLK", 231), - be_native_module_int("MAX7219DIN", 232), - be_native_module_int("MAX7219CS", 233), - be_native_module_int("TFMINIPLUS_TX", 234), - be_native_module_int("TFMINIPLUS_RX", 235), - be_native_module_int("ZEROCROSS", 236), - be_native_module_int("HALLEFFECT", 237), - be_native_module_int("EPD_DATA", 238), - be_native_module_int("INPUT", 239), - be_native_module_int("SENSOR_END", 240), - - be_native_module_function("pin_mode", gp_pin_mode), - be_native_module_function("digital_write", gp_digital_write), - be_native_module_function("digital_read", gp_digital_read), - - be_native_module_function("pin_used", gp_pin_used), - be_native_module_function("pin", gp_pin), - -}; - -be_define_native_module(gpio, NULL); -#else /* @const_object_info_begin module gpio (scope: global) { LOW, int(0) @@ -301,6 +30,7 @@ module gpio (scope: global) { INPUT_PULLDOWN, int(9) OPEN_DRAIN, int(16) OUTPUT_OPEN_DRAIN, int(18) + DAC, int(-1) RISING, int(1) FALLING, int(2) @@ -546,15 +276,26 @@ module gpio (scope: global) { HALLEFFECT, int(237) EPD_DATA, int(238) INPUT, int(239) - SENSOR_END, int(240) + KEY1_PD, int(240) + KEY1_INV_PD, int(241) + SWT1_PD, int(242) + I2S_OUT_DATA, int(243) + I2S_OUT_CLK, int(244) + I2S_OUT_SLCT, int(245) + I2S_IN_DATA, int(246) + I2S_IN_CLK, int(247) + I2S_IN_SLCT, int(248) + INTERRUPT, int(249) + + SENSOR_END, int(250) pin_mode, func(gp_pin_mode) digital_write, func(gp_digital_write) digital_read, func(gp_digital_read) + dac_voltage, func(gp_dac_voltage) pin_used, func(gp_pin_used) pin, func(gp_pin) } @const_object_info_end */ #include "../generate/be_fixed_gpio.h" -#endif diff --git a/lib/libesp32/Berry/default/be_i2c_axp192_lib.c b/lib/libesp32/Berry/default/be_i2c_axp192_lib.c new file mode 100644 index 000000000..5eba55476 --- /dev/null +++ b/lib/libesp32/Berry/default/be_i2c_axp192_lib.c @@ -0,0 +1,899 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +/******************************************************************** +** Solidified function: get_warning_level +********************************************************************/ +be_local_closure(get_warning_level, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_int(1), + }), + (be_nested_const_str("get_warning_level", 1737834441, 17)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0046, // 0001 LDINT R3 71 + 0x7C040400, // 0002 CALL R1 2 + 0x2C040301, // 0003 AND R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_vbus_current +********************************************************************/ +be_local_closure(get_vbus_current, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_real_hex(0x3EC00000), + }), + (be_nested_const_str("get_vbus_current", 1205347942, 16)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E005B, // 0001 LDINT R3 92 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_chg_current +********************************************************************/ +be_local_closure(set_chg_current, /* name */ + be_nested_proto( + 8, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("write8", -1160975764, 6), + /* K1 */ be_nested_string("read8", -1492179129, 5), + }), + (be_nested_const_str("set_chg_current", 336304386, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[12]) { /* code */ + 0x8C080100, // 0000 GETMET R2 R0 K0 + 0x54120032, // 0001 LDINT R4 51 + 0x8C140101, // 0002 GETMET R5 R0 K1 + 0x541E0032, // 0003 LDINT R7 51 + 0x7C140400, // 0004 CALL R5 2 + 0x541A00EF, // 0005 LDINT R6 240 + 0x2C140A06, // 0006 AND R5 R5 R6 + 0x541A000E, // 0007 LDINT R6 15 + 0x2C180206, // 0008 AND R6 R1 R6 + 0x30140A06, // 0009 OR R5 R5 R6 + 0x7C080600, // 000A CALL R2 3 + 0x80000000, // 000B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_bat_current +********************************************************************/ +be_local_closure(get_bat_current, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read13", 12887293, 6), + /* K1 */ be_const_real_hex(0x3F000000), + }), + (be_nested_const_str("get_bat_current", 1912106073, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 9]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0079, // 0001 LDINT R3 122 + 0x7C040400, // 0002 CALL R1 2 + 0x8C080100, // 0003 GETMET R2 R0 K0 + 0x5412007B, // 0004 LDINT R4 124 + 0x7C080400, // 0005 CALL R2 2 + 0x04040202, // 0006 SUB R1 R1 R2 + 0x08040301, // 0007 MUL R1 R1 K1 + 0x80040200, // 0008 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_bat_power +********************************************************************/ +be_local_closure(get_bat_power, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read24", 1808533811, 6), + /* K1 */ be_const_real_hex(0x3A102DE1), + }), + (be_nested_const_str("get_bat_power", -1227592443, 13)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E006F, // 0001 LDINT R3 112 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: json_append +********************************************************************/ +be_local_closure(json_append, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + }), + (be_nested_const_str("json_append", -1292948012, 11)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x74060001, // 0001 JMPT R1 #0004 + 0x4C040000, // 0002 LDNIL R1 + 0x80040200, // 0003 RET 1 R1 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_vbus_voltage +********************************************************************/ +be_local_closure(get_vbus_voltage, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_real_hex(0x3ADED28A), + }), + (be_nested_const_str("get_vbus_voltage", -1896756895, 16)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0059, // 0001 LDINT R3 90 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_temp +********************************************************************/ +be_local_closure(get_temp, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_real_hex(0x3DCCCCCD), + /* K2 */ be_const_real_hex(0x4310B333), + }), + (be_nested_const_str("get_temp", -924047810, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E005D, // 0001 LDINT R3 94 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x04040302, // 0004 SUB R1 R1 K2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: battery_present +********************************************************************/ +be_local_closure(battery_present, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read", -824204347, 4), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(1), + }), + (be_nested_const_str("battery_present", -706570238, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[15]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x880C0102, // 0002 GETMBR R3 R0 K2 + 0x58100003, // 0003 LDCONST R4 K3 + 0x58140003, // 0004 LDCONST R5 K3 + 0x7C040800, // 0005 CALL R1 4 + 0x540A001F, // 0006 LDINT R2 32 + 0x2C040202, // 0007 AND R1 R1 R2 + 0x78060002, // 0008 JMPF R1 #000C + 0x50040200, // 0009 LDBOOL R1 1 0 + 0x80040200, // 000A RET 1 R1 + 0x70020001, // 000B JMP #000E + 0x50040000, // 000C LDBOOL R1 0 0 + 0x80040200, // 000D RET 1 R1 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_aps_voltage +********************************************************************/ +be_local_closure(get_aps_voltage, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_real_hex(0x3AB78035), + }), + (be_nested_const_str("get_aps_voltage", -2001930861, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E007D, // 0001 LDINT R3 126 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_dcdc_enable +********************************************************************/ +be_local_closure(set_dcdc_enable, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_const_int(1), + /* K1 */ be_nested_string("write_bit", -1633976860, 9), + /* K2 */ be_const_int(0), + /* K3 */ be_const_int(2), + /* K4 */ be_const_int(3), + }), + (be_nested_const_str("set_dcdc_enable", 1594690786, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[22]) { /* code */ + 0x1C0C0300, // 0000 EQ R3 R1 K0 + 0x780E0004, // 0001 JMPF R3 #0007 + 0x8C0C0101, // 0002 GETMET R3 R0 K1 + 0x54160011, // 0003 LDINT R5 18 + 0x58180002, // 0004 LDCONST R6 K2 + 0x5C1C0400, // 0005 MOVE R7 R2 + 0x7C0C0800, // 0006 CALL R3 4 + 0x1C0C0303, // 0007 EQ R3 R1 K3 + 0x780E0004, // 0008 JMPF R3 #000E + 0x8C0C0101, // 0009 GETMET R3 R0 K1 + 0x54160011, // 000A LDINT R5 18 + 0x541A0003, // 000B LDINT R6 4 + 0x5C1C0400, // 000C MOVE R7 R2 + 0x7C0C0800, // 000D CALL R3 4 + 0x1C0C0304, // 000E EQ R3 R1 K4 + 0x780E0004, // 000F JMPF R3 #0015 + 0x8C0C0101, // 0010 GETMET R3 R0 K1 + 0x54160011, // 0011 LDINT R5 18 + 0x58180000, // 0012 LDCONST R6 K0 + 0x5C1C0400, // 0013 MOVE R7 R2 + 0x7C0C0800, // 0014 CALL R3 4 + 0x80000000, // 0015 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_ldo_voltage +********************************************************************/ +be_local_closure(set_ldo_voltage, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_int(2), + /* K1 */ be_nested_string("write8", -1160975764, 6), + /* K2 */ be_nested_string("read8", -1492179129, 5), + /* K3 */ be_const_int(3), + }), + (be_nested_const_str("set_ldo_voltage", -204466136, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[39]) { /* code */ + 0x540E0CE3, // 0000 LDINT R3 3300 + 0x240C0403, // 0001 GT R3 R2 R3 + 0x780E0001, // 0002 JMPF R3 #0005 + 0x540A000E, // 0003 LDINT R2 15 + 0x70020004, // 0004 JMP #000A + 0x540E0063, // 0005 LDINT R3 100 + 0x0C0C0403, // 0006 DIV R3 R2 R3 + 0x54120011, // 0007 LDINT R4 18 + 0x040C0604, // 0008 SUB R3 R3 R4 + 0x5C080600, // 0009 MOVE R2 R3 + 0x1C0C0300, // 000A EQ R3 R1 K0 + 0x780E000C, // 000B JMPF R3 #0019 + 0x8C0C0101, // 000C GETMET R3 R0 K1 + 0x54160027, // 000D LDINT R5 40 + 0x8C180102, // 000E GETMET R6 R0 K2 + 0x54220027, // 000F LDINT R8 40 + 0x7C180400, // 0010 CALL R6 2 + 0x541E000E, // 0011 LDINT R7 15 + 0x2C180C07, // 0012 AND R6 R6 R7 + 0x541E000E, // 0013 LDINT R7 15 + 0x2C1C0407, // 0014 AND R7 R2 R7 + 0x54220003, // 0015 LDINT R8 4 + 0x381C0E08, // 0016 SHL R7 R7 R8 + 0x30180C07, // 0017 OR R6 R6 R7 + 0x7C0C0600, // 0018 CALL R3 3 + 0x1C0C0303, // 0019 EQ R3 R1 K3 + 0x780E000A, // 001A JMPF R3 #0026 + 0x8C0C0101, // 001B GETMET R3 R0 K1 + 0x54160027, // 001C LDINT R5 40 + 0x8C180102, // 001D GETMET R6 R0 K2 + 0x54220027, // 001E LDINT R8 40 + 0x7C180400, // 001F CALL R6 2 + 0x541E00EF, // 0020 LDINT R7 240 + 0x2C180C07, // 0021 AND R6 R6 R7 + 0x541E000E, // 0022 LDINT R7 15 + 0x2C1C0407, // 0023 AND R7 R2 R7 + 0x30180C07, // 0024 OR R6 R6 R7 + 0x7C0C0600, // 0025 CALL R3 3 + 0x80000000, // 0026 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("I2C_Driver", 1714501658, 10), + /* K1 */ be_nested_string("init", 380752755, 4), + /* K2 */ be_nested_string("AXP192", 757230128, 6), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 9]) { /* code */ + 0x60040003, // 0000 GETGBL R1 G3 + 0x5C080000, // 0001 MOVE R2 R0 + 0xB80E0000, // 0002 GETNGBL R3 K0 + 0x7C040400, // 0003 CALL R1 2 + 0x8C040301, // 0004 GETMET R1 R1 K1 + 0x580C0002, // 0005 LDCONST R3 K2 + 0x54120033, // 0006 LDINT R4 52 + 0x7C040600, // 0007 CALL R1 3 + 0x80000000, // 0008 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_bat_voltage +********************************************************************/ +be_local_closure(get_bat_voltage, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read12", -3890326, 6), + /* K1 */ be_const_real_hex(0x3A902DE0), + }), + (be_nested_const_str("get_bat_voltage", 706676538, 15)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0077, // 0001 LDINT R3 120 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_ldo_enable +********************************************************************/ +be_local_closure(set_ldo_enable, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_const_int(2), + /* K1 */ be_nested_string("write_bit", -1633976860, 9), + /* K2 */ be_const_int(3), + }), + (be_nested_const_str("set_ldo_enable", -1378465255, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[15]) { /* code */ + 0x1C0C0300, // 0000 EQ R3 R1 K0 + 0x780E0004, // 0001 JMPF R3 #0007 + 0x8C0C0101, // 0002 GETMET R3 R0 K1 + 0x54160011, // 0003 LDINT R5 18 + 0x58180000, // 0004 LDCONST R6 K0 + 0x5C1C0400, // 0005 MOVE R7 R2 + 0x7C0C0800, // 0006 CALL R3 4 + 0x1C0C0302, // 0007 EQ R3 R1 K2 + 0x780E0004, // 0008 JMPF R3 #000E + 0x8C0C0101, // 0009 GETMET R3 R0 K1 + 0x54160011, // 000A LDINT R5 18 + 0x58180002, // 000B LDCONST R6 K2 + 0x5C1C0400, // 000C MOVE R7 R2 + 0x7C0C0800, // 000D CALL R3 4 + 0x80000000, // 000E RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_dc_voltage +********************************************************************/ +be_local_closure(set_dc_voltage, /* name */ + be_nested_proto( + 11, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_const_int(1), + /* K1 */ be_const_int(3), + /* K2 */ be_const_int(0), + /* K3 */ be_const_int(2), + /* K4 */ be_nested_string("write8", -1160975764, 6), + /* K5 */ be_nested_string("read8", -1492179129, 5), + }), + (be_nested_const_str("set_dc_voltage", -2112985360, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[48]) { /* code */ + 0x140C0300, // 0000 LT R3 R1 K0 + 0x740E0001, // 0001 JMPT R3 #0004 + 0x240C0301, // 0002 GT R3 R1 K1 + 0x780E0000, // 0003 JMPF R3 #0005 + 0x80000600, // 0004 RET 0 + 0x4C0C0000, // 0005 LDNIL R3 + 0x541202BB, // 0006 LDINT R4 700 + 0x14100404, // 0007 LT R4 R2 R4 + 0x78120001, // 0008 JMPF R4 #000B + 0x580C0002, // 0009 LDCONST R3 K2 + 0x70020010, // 000A JMP #001C + 0x54120DAB, // 000B LDINT R4 3500 + 0x24100404, // 000C GT R4 R2 R4 + 0x78120001, // 000D JMPF R4 #0010 + 0x540E006F, // 000E LDINT R3 112 + 0x7002000B, // 000F JMP #001C + 0x1C100303, // 0010 EQ R4 R1 K3 + 0x78120004, // 0011 JMPF R4 #0017 + 0x541208E2, // 0012 LDINT R4 2275 + 0x24100404, // 0013 GT R4 R2 R4 + 0x78120001, // 0014 JMPF R4 #0017 + 0x540E003E, // 0015 LDINT R3 63 + 0x70020004, // 0016 JMP #001C + 0x541202BB, // 0017 LDINT R4 700 + 0x04100404, // 0018 SUB R4 R2 R4 + 0x54160018, // 0019 LDINT R5 25 + 0x0C100805, // 001A DIV R4 R4 R5 + 0x5C0C0800, // 001B MOVE R3 R4 + 0x54120025, // 001C LDINT R4 38 + 0x1C140301, // 001D EQ R5 R1 K1 + 0x78160001, // 001E JMPF R5 #0021 + 0x54120026, // 001F LDINT R4 39 + 0x70020002, // 0020 JMP #0024 + 0x1C140303, // 0021 EQ R5 R1 K3 + 0x78160000, // 0022 JMPF R5 #0024 + 0x54120022, // 0023 LDINT R4 35 + 0x8C140104, // 0024 GETMET R5 R0 K4 + 0x5C1C0800, // 0025 MOVE R7 R4 + 0x8C200105, // 0026 GETMET R8 R0 K5 + 0x5C280800, // 0027 MOVE R10 R4 + 0x7C200400, // 0028 CALL R8 2 + 0x5426007F, // 0029 LDINT R9 128 + 0x2C201009, // 002A AND R8 R8 R9 + 0x5426007E, // 002B LDINT R9 127 + 0x2C240609, // 002C AND R9 R3 R9 + 0x30201009, // 002D OR R8 R8 R9 + 0x7C140600, // 002E CALL R5 3 + 0x80000000, // 002F RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: write_gpio +********************************************************************/ +be_local_closure(write_gpio, /* name */ + be_nested_proto( + 8, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_const_int(2), + /* K2 */ be_nested_string("write_bit", -1633976860, 9), + /* K3 */ be_const_int(3), + }), + (be_nested_const_str("write_gpio", -2027026962, 10)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[21]) { /* code */ + 0x280C0300, // 0000 GE R3 R1 K0 + 0x780E0007, // 0001 JMPF R3 #000A + 0x180C0301, // 0002 LE R3 R1 K1 + 0x780E0005, // 0003 JMPF R3 #000A + 0x8C0C0102, // 0004 GETMET R3 R0 K2 + 0x54160093, // 0005 LDINT R5 148 + 0x5C180200, // 0006 MOVE R6 R1 + 0x5C1C0400, // 0007 MOVE R7 R2 + 0x7C0C0800, // 0008 CALL R3 4 + 0x70020009, // 0009 JMP #0014 + 0x280C0303, // 000A GE R3 R1 K3 + 0x780E0007, // 000B JMPF R3 #0014 + 0x540E0003, // 000C LDINT R3 4 + 0x180C0203, // 000D LE R3 R1 R3 + 0x780E0004, // 000E JMPF R3 #0014 + 0x8C0C0102, // 000F GETMET R3 R0 K2 + 0x54160095, // 0010 LDINT R5 150 + 0x04180303, // 0011 SUB R6 R1 K3 + 0x5C1C0400, // 0012 MOVE R7 R2 + 0x7C0C0800, // 0013 CALL R3 4 + 0x80000000, // 0014 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: web_sensor +********************************************************************/ +be_local_closure(web_sensor, /* name */ + be_nested_proto( + 11, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[14]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("string", 398550328, 6), + /* K2 */ be_nested_string("format", -1180859054, 6), + /* K3 */ be_nested_string("{s}VBus Voltage{m}%.3f V{e}", 165651270, 27), + /* K4 */ be_nested_string("{s}VBus Current{m}%.1f mA{e}", 1032721155, 28), + /* K5 */ be_nested_string("{s}Batt Voltage{m}%.3f V{e}", -1110659097, 27), + /* K6 */ be_nested_string("{s}Batt Current{m}%.1f mA{e}", 866537156, 28), + /* K7 */ be_nested_string("{s}Temp AXP{m}%.1f °C{e}", -1990510004, 25), + /* K8 */ be_nested_string("get_vbus_voltage", -1896756895, 16), + /* K9 */ be_nested_string("get_bat_voltage", 706676538, 15), + /* K10 */ be_nested_string("get_bat_current", 1912106073, 15), + /* K11 */ be_nested_string("get_temp", -924047810, 8), + /* K12 */ be_nested_string("tasmota", 424643812, 7), + /* K13 */ be_nested_string("web_send_decimal", 1407210204, 16), + }), + (be_nested_const_str("web_sensor", -1394870324, 10)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[26]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x74060001, // 0001 JMPT R1 #0004 + 0x4C040000, // 0002 LDNIL R1 + 0x80040200, // 0003 RET 1 R1 + 0xA4060200, // 0004 IMPORT R1 K1 + 0x8C080302, // 0005 GETMET R2 R1 K2 + 0x40120704, // 0006 CONNECT R4 K3 K4 + 0x40100905, // 0007 CONNECT R4 R4 K5 + 0x40100906, // 0008 CONNECT R4 R4 K6 + 0x40100907, // 0009 CONNECT R4 R4 K7 + 0x8C140108, // 000A GETMET R5 R0 K8 + 0x7C140200, // 000B CALL R5 1 + 0x8C180108, // 000C GETMET R6 R0 K8 + 0x7C180200, // 000D CALL R6 1 + 0x8C1C0109, // 000E GETMET R7 R0 K9 + 0x7C1C0200, // 000F CALL R7 1 + 0x8C20010A, // 0010 GETMET R8 R0 K10 + 0x7C200200, // 0011 CALL R8 1 + 0x8C24010B, // 0012 GETMET R9 R0 K11 + 0x7C240200, // 0013 CALL R9 1 + 0x7C080E00, // 0014 CALL R2 7 + 0xB80E1800, // 0015 GETNGBL R3 K12 + 0x8C0C070D, // 0016 GETMET R3 R3 K13 + 0x5C140400, // 0017 MOVE R5 R2 + 0x7C0C0400, // 0018 CALL R3 2 + 0x80000000, // 0019 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_bat_charge_current +********************************************************************/ +be_local_closure(get_bat_charge_current, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("read13", 12887293, 6), + /* K1 */ be_const_real_hex(0x3F000000), + }), + (be_nested_const_str("get_bat_charge_current", 1385293050, 22)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x540E0079, // 0001 LDINT R3 122 + 0x7C040400, // 0002 CALL R1 2 + 0x08040301, // 0003 MUL R1 R1 K1 + 0x80040200, // 0004 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_battery_chargin_status +********************************************************************/ +be_local_closure(get_battery_chargin_status, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read", -824204347, 4), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(1), + }), + (be_nested_const_str("get_battery_chargin_status", -2061725725, 26)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 7]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x880C0102, // 0002 GETMBR R3 R0 K2 + 0x58100003, // 0003 LDCONST R4 K3 + 0x58140003, // 0004 LDCONST R5 K3 + 0x7C040800, // 0005 CALL R1 4 + 0x80040200, // 0006 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_input_power_status +********************************************************************/ +be_local_closure(get_input_power_status, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read", -824204347, 4), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(0), + /* K4 */ be_const_int(1), + }), + (be_nested_const_str("get_input_power_status", -192138119, 22)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 7]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x880C0102, // 0002 GETMBR R3 R0 K2 + 0x58100003, // 0003 LDCONST R4 K3 + 0x58140004, // 0004 LDCONST R5 K4 + 0x7C040800, // 0005 CALL R1 4 + 0x80040200, // 0006 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: AXP192 +********************************************************************/ +extern const bclass be_class_I2C_Driver; +be_local_class(AXP192, + 0, + &be_class_I2C_Driver, + be_nested_map(21, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("get_warning_level", 1737834441, 17, -1), be_const_closure(get_warning_level_closure) }, + { be_nested_key("get_vbus_current", 1205347942, 16, -1), be_const_closure(get_vbus_current_closure) }, + { be_nested_key("set_chg_current", 336304386, 15, 14), be_const_closure(set_chg_current_closure) }, + { be_nested_key("get_bat_current", 1912106073, 15, -1), be_const_closure(get_bat_current_closure) }, + { be_nested_key("get_bat_power", -1227592443, 13, 9), be_const_closure(get_bat_power_closure) }, + { be_nested_key("json_append", -1292948012, 11, -1), be_const_closure(json_append_closure) }, + { be_nested_key("get_vbus_voltage", -1896756895, 16, -1), be_const_closure(get_vbus_voltage_closure) }, + { be_nested_key("get_temp", -924047810, 8, -1), be_const_closure(get_temp_closure) }, + { be_nested_key("battery_present", -706570238, 15, -1), be_const_closure(battery_present_closure) }, + { be_nested_key("get_aps_voltage", -2001930861, 15, -1), be_const_closure(get_aps_voltage_closure) }, + { be_nested_key("set_dcdc_enable", 1594690786, 15, -1), be_const_closure(set_dcdc_enable_closure) }, + { be_nested_key("set_ldo_voltage", -204466136, 15, 7), be_const_closure(set_ldo_voltage_closure) }, + { be_nested_key("init", 380752755, 4, 2), be_const_closure(init_closure) }, + { be_nested_key("get_bat_voltage", 706676538, 15, 18), be_const_closure(get_bat_voltage_closure) }, + { be_nested_key("set_ldo_enable", -1378465255, 14, -1), be_const_closure(set_ldo_enable_closure) }, + { be_nested_key("set_dc_voltage", -2112985360, 14, 13), be_const_closure(set_dc_voltage_closure) }, + { be_nested_key("write_gpio", -2027026962, 10, -1), be_const_closure(write_gpio_closure) }, + { be_nested_key("web_sensor", -1394870324, 10, -1), be_const_closure(web_sensor_closure) }, + { be_nested_key("get_bat_charge_current", 1385293050, 22, 19), be_const_closure(get_bat_charge_current_closure) }, + { be_nested_key("get_battery_chargin_status", -2061725725, 26, -1), be_const_closure(get_battery_chargin_status_closure) }, + { be_nested_key("get_input_power_status", -192138119, 22, -1), be_const_closure(get_input_power_status_closure) }, + })), + (be_nested_const_str("AXP192", 757230128, 6)) +); +/*******************************************************************/ + +void be_load_AXP192_class(bvm *vm) { + be_pushntvclass(vm, &be_class_AXP192); + be_setglobal(vm, "AXP192"); + be_pop(vm, 1); +} diff --git a/lib/libesp32/Berry/default/be_i2c_driverlib.c b/lib/libesp32/Berry/default/be_i2c_driverlib.c index 1bfbd9267..2ac5627d9 100644 --- a/lib/libesp32/Berry/default/be_i2c_driverlib.c +++ b/lib/libesp32/Berry/default/be_i2c_driverlib.c @@ -9,102 +9,413 @@ *******************************************************************/ #include "be_constobj.h" -extern bclass* be_class_tasmota_driver; // Parent class +extern bclass* be_class_Driver; // Parent class + +/******************************************************************** +** Solidified function: read32 +********************************************************************/ +be_local_closure(read32, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read_bytes", -718234123, 10), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(0), + /* K4 */ be_const_int(1), + /* K5 */ be_const_int(2), + /* K6 */ be_const_int(3), + }), + (be_nested_const_str("read32", 1741276240, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[20]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x5C140200, // 0003 MOVE R5 R1 + 0x541A0003, // 0004 LDINT R6 4 + 0x7C080800, // 0005 CALL R2 4 + 0x940C0503, // 0006 GETIDX R3 R2 K3 + 0x54120017, // 0007 LDINT R4 24 + 0x380C0604, // 0008 SHL R3 R3 R4 + 0x94100504, // 0009 GETIDX R4 R2 K4 + 0x5416000F, // 000A LDINT R5 16 + 0x38100805, // 000B SHL R4 R4 R5 + 0x000C0604, // 000C ADD R3 R3 R4 + 0x94100505, // 000D GETIDX R4 R2 K5 + 0x54160007, // 000E LDINT R5 8 + 0x38100805, // 000F SHL R4 R4 R5 + 0x000C0604, // 0010 ADD R3 R3 R4 + 0x94100506, // 0011 GETIDX R4 R2 K6 + 0x000C0604, // 0012 ADD R3 R3 R4 + 0x80040600, // 0013 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: write8 +********************************************************************/ +be_local_closure(write8, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("write", -1104765092, 5), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(1), + }), + (be_nested_const_str("write8", -1160975764, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 8]) { /* code */ + 0x880C0100, // 0000 GETMBR R3 R0 K0 + 0x8C0C0701, // 0001 GETMET R3 R3 K1 + 0x88140102, // 0002 GETMBR R5 R0 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x5C1C0400, // 0004 MOVE R7 R2 + 0x58200003, // 0005 LDCONST R8 K3 + 0x7C0C0A00, // 0006 CALL R3 5 + 0x80040600, // 0007 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: read12 +********************************************************************/ +be_local_closure(read12, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read_bytes", -718234123, 10), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(2), + /* K4 */ be_const_int(0), + /* K5 */ be_const_int(1), + }), + (be_nested_const_str("read12", -3890326, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[12]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x5C140200, // 0003 MOVE R5 R1 + 0x58180003, // 0004 LDCONST R6 K3 + 0x7C080800, // 0005 CALL R2 4 + 0x940C0504, // 0006 GETIDX R3 R2 K4 + 0x54120003, // 0007 LDINT R4 4 + 0x380C0604, // 0008 SHL R3 R3 R4 + 0x94100505, // 0009 GETIDX R4 R2 K5 + 0x000C0604, // 000A ADD R3 R3 R4 + 0x80040600, // 000B RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: write_bit +********************************************************************/ +be_local_closure(write_bit, /* name */ + be_nested_proto( + 11, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_const_int(1), + /* K2 */ be_nested_string("write8", -1160975764, 6), + /* K3 */ be_nested_string("read8", -1492179129, 5), + }), + (be_nested_const_str("write_bit", -1633976860, 9)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[26]) { /* code */ + 0x14100500, // 0000 LT R4 R2 K0 + 0x74120002, // 0001 JMPT R4 #0005 + 0x54120006, // 0002 LDINT R4 7 + 0x24100404, // 0003 GT R4 R2 R4 + 0x78120000, // 0004 JMPF R4 #0006 + 0x80000800, // 0005 RET 0 + 0x38120202, // 0006 SHL R4 K1 R2 + 0x780E0007, // 0007 JMPF R3 #0010 + 0x8C140102, // 0008 GETMET R5 R0 K2 + 0x5C1C0200, // 0009 MOVE R7 R1 + 0x8C200103, // 000A GETMET R8 R0 K3 + 0x5C280200, // 000B MOVE R10 R1 + 0x7C200400, // 000C CALL R8 2 + 0x30201004, // 000D OR R8 R8 R4 + 0x7C140600, // 000E CALL R5 3 + 0x70020008, // 000F JMP #0019 + 0x8C140102, // 0010 GETMET R5 R0 K2 + 0x5C1C0200, // 0011 MOVE R7 R1 + 0x8C200103, // 0012 GETMET R8 R0 K3 + 0x5C280200, // 0013 MOVE R10 R1 + 0x7C200400, // 0014 CALL R8 2 + 0x542600FE, // 0015 LDINT R9 255 + 0x04241204, // 0016 SUB R9 R9 R4 + 0x2C201009, // 0017 AND R8 R8 R9 + 0x7C140600, // 0018 CALL R5 3 + 0x80000000, // 0019 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: read24 +********************************************************************/ +be_local_closure(read24, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read_bytes", -718234123, 10), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(3), + /* K4 */ be_const_int(0), + /* K5 */ be_const_int(1), + /* K6 */ be_const_int(2), + }), + (be_nested_const_str("read24", 1808533811, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[16]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x5C140200, // 0003 MOVE R5 R1 + 0x58180003, // 0004 LDCONST R6 K3 + 0x7C080800, // 0005 CALL R2 4 + 0x940C0504, // 0006 GETIDX R3 R2 K4 + 0x5412000F, // 0007 LDINT R4 16 + 0x380C0604, // 0008 SHL R3 R3 R4 + 0x94100505, // 0009 GETIDX R4 R2 K5 + 0x54160007, // 000A LDINT R5 8 + 0x38100805, // 000B SHL R4 R4 R5 + 0x000C0604, // 000C ADD R3 R3 R4 + 0x94100506, // 000D GETIDX R4 R2 K6 + 0x000C0604, // 000E ADD R3 R3 R4 + 0x80040600, // 000F RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: read8 +********************************************************************/ +be_local_closure(read8, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read", -824204347, 4), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(1), + }), + (be_nested_const_str("read8", -1492179129, 5)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 7]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x5C140200, // 0003 MOVE R5 R1 + 0x58180003, // 0004 LDCONST R6 K3 + 0x7C080800, // 0005 CALL R2 4 + 0x80040400, // 0006 RET 1 R2 + }) + ) +); +/*******************************************************************/ + /******************************************************************** ** Solidified function: init ********************************************************************/ - -/********** Solidified proto: init */ -be_define_local_const_str(init_str_name, "init", 380752755, 4); -be_define_local_const_str(init_str_source, "input", -103256197, 5); -be_define_local_const_str(init_str_0, "string", 398550328, 6); -be_define_local_const_str(init_str_1, "get_tasmota", 334356779, 11); -be_define_local_const_str(init_str_2, "addr", 1087856498, 4); -be_define_local_const_str(init_str_3, "wire", -212213352, 4); -be_define_local_const_str(init_str_4, "wire_scan", -1623691416, 9); -be_define_local_const_str(init_str_5, "name", -1925595674, 4); -be_define_local_const_str(init_str_6, "format", -1180859054, 6); -be_define_local_const_str(init_str_7, "I2C: %s detected on bus %d", 110398549, 26); -be_define_local_const_str(init_str_8, "bus", 1607822841, 3); - -static const bvalue init_ktab[9] = { - { { .s=be_local_const_str(init_str_0) }, BE_STRING}, - { { .s=be_local_const_str(init_str_1) }, BE_STRING}, - { { .s=be_local_const_str(init_str_2) }, BE_STRING}, - { { .s=be_local_const_str(init_str_3) }, BE_STRING}, - { { .s=be_local_const_str(init_str_4) }, BE_STRING}, - { { .s=be_local_const_str(init_str_5) }, BE_STRING}, - { { .s=be_local_const_str(init_str_6) }, BE_STRING}, - { { .s=be_local_const_str(init_str_7) }, BE_STRING}, - { { .s=be_local_const_str(init_str_8) }, BE_STRING}, -}; - -static const uint32_t init_code[20] = { - 0xA40E0000, // 0000 IMPORT R3 R256 - 0x8C100101, // 0001 GETMET R4 R0 R257 - 0x7C100200, // 0002 CALL R4 1 - 0x90020401, // 0003 SETMBR R0 R258 R1 - 0x8C140904, // 0004 GETMET R5 R4 R260 - 0x881C0102, // 0005 GETMBR R7 R0 R258 - 0x7C140400, // 0006 CALL R5 2 - 0x90020605, // 0007 SETMBR R0 R259 R5 - 0x90020A02, // 0008 SETMBR R0 R261 R2 - 0x88140103, // 0009 GETMBR R5 R0 R259 - 0x78160007, // 000A JMPF R5 #0013 - 0x6014000F, // 000B GETGBL R5 G15 - 0x8C180706, // 000C GETMET R6 R3 R262 - 0x58200007, // 000D LDCONST R8 K7 - 0x88240105, // 000E GETMBR R9 R0 R261 - 0x88280103, // 000F GETMBR R10 R0 R259 - 0x88281508, // 0010 GETMBR R10 R10 R264 - 0x7C180800, // 0011 CALL R6 4 - 0x7C140200, // 0012 CALL R5 1 - 0x80000000, // 0013 RET 0 R0 -}; - -be_define_local_proto(init, 11, 3, 1, 0, 0); -be_define_local_closure(init); - +be_local_closure(init, /* name */ + be_nested_proto( + 10, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_string("get_tasmota", 334356779, 11), + /* K1 */ be_nested_string("i2c_enabled", 218388101, 11), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_nested_string("wire", -212213352, 4), + /* K4 */ be_nested_string("wire_scan", -1623691416, 9), + /* K5 */ be_nested_string("function", -1630125495, 8), + /* K6 */ be_nested_string("name", -1925595674, 4), + /* K7 */ be_nested_string("I2C:", 813483371, 4), + /* K8 */ be_nested_string("detected on bus", 1432002650, 15), + /* K9 */ be_nested_string("bus", 1607822841, 3), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[44]) { /* code */ + 0x8C100100, // 0000 GETMET R4 R0 K0 + 0x7C100200, // 0001 CALL R4 1 + 0x4C140000, // 0002 LDNIL R5 + 0x20140605, // 0003 NE R5 R3 R5 + 0x78160004, // 0004 JMPF R5 #000A + 0x8C140901, // 0005 GETMET R5 R4 K1 + 0x5C1C0600, // 0006 MOVE R7 R3 + 0x7C140400, // 0007 CALL R5 2 + 0x74160000, // 0008 JMPT R5 #000A + 0x80000A00, // 0009 RET 0 + 0x90020402, // 000A SETMBR R0 K2 R2 + 0x8C140904, // 000B GETMET R5 R4 K4 + 0x881C0102, // 000C GETMBR R7 R0 K2 + 0x7C140400, // 000D CALL R5 2 + 0x90020605, // 000E SETMBR R0 K3 R5 + 0x88140103, // 000F GETMBR R5 R0 K3 + 0x78160019, // 0010 JMPF R5 #002B + 0x60140004, // 0011 GETGBL R5 G4 + 0x5C180200, // 0012 MOVE R6 R1 + 0x7C140200, // 0013 CALL R5 1 + 0x1C140B05, // 0014 EQ R5 R5 K5 + 0x78160004, // 0015 JMPF R5 #001B + 0x5C140200, // 0016 MOVE R5 R1 + 0x5C180000, // 0017 MOVE R6 R0 + 0x7C140200, // 0018 CALL R5 1 + 0x90020C05, // 0019 SETMBR R0 K6 R5 + 0x70020000, // 001A JMP #001C + 0x90020C01, // 001B SETMBR R0 K6 R1 + 0x88140106, // 001C GETMBR R5 R0 K6 + 0x4C180000, // 001D LDNIL R6 + 0x1C140A06, // 001E EQ R5 R5 R6 + 0x78160001, // 001F JMPF R5 #0022 + 0x4C140000, // 0020 LDNIL R5 + 0x90020605, // 0021 SETMBR R0 K3 R5 + 0x88140103, // 0022 GETMBR R5 R0 K3 + 0x78160006, // 0023 JMPF R5 #002B + 0x60140001, // 0024 GETGBL R5 G1 + 0x58180007, // 0025 LDCONST R6 K7 + 0x881C0106, // 0026 GETMBR R7 R0 K6 + 0x58200008, // 0027 LDCONST R8 K8 + 0x88240103, // 0028 GETMBR R9 R0 K3 + 0x88241309, // 0029 GETMBR R9 R9 K9 + 0x7C140800, // 002A CALL R5 4 + 0x80000000, // 002B RET 0 + }) + ) +); /*******************************************************************/ +/******************************************************************** +** Solidified function: read13 +********************************************************************/ +be_local_closure(read13, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("wire", -212213352, 4), + /* K1 */ be_nested_string("read_bytes", -718234123, 10), + /* K2 */ be_nested_string("addr", 1087856498, 4), + /* K3 */ be_const_int(2), + /* K4 */ be_const_int(0), + /* K5 */ be_const_int(1), + }), + (be_nested_const_str("read13", 12887293, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[12]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x88100102, // 0002 GETMBR R4 R0 K2 + 0x5C140200, // 0003 MOVE R5 R1 + 0x58180003, // 0004 LDCONST R6 K3 + 0x7C080800, // 0005 CALL R2 4 + 0x940C0504, // 0006 GETIDX R3 R2 K4 + 0x54120004, // 0007 LDINT R4 5 + 0x380C0604, // 0008 SHL R3 R3 R4 + 0x94100505, // 0009 GETIDX R4 R2 K5 + 0x000C0604, // 000A ADD R3 R3 R4 + 0x80040600, // 000B RET 1 R3 + }) + ) +); +/*******************************************************************/ -#if BE_USE_PRECOMPILED_OBJECT -#include "../generate/be_fixed_be_class_tasmota_i2c_driver.h" -#endif +#include "../generate/be_fixed_be_class_I2C_Driver.h" void be_load_driver_i2c_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { "wire", NULL }, - { "addr", NULL }, - { "name", NULL }, - - { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - { "add_cmd", (bntvfunc) &init_closure }, - - { NULL, NULL } - }; - - be_regclass(vm, "I2C_Driver", members); - be_getglobal(vm, "I2C_Driver"); - be_getglobal(vm, "Driver"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_tasmota_i2c_driver); + be_pushntvclass(vm, &be_class_I2C_Driver); be_setglobal(vm, "I2C_Driver"); be_pop(vm, 1); -#endif } /* @const_object_info_begin -class be_class_tasmota_i2c_driver (scope: global, name: I2C_Driver, super: be_class_tasmota_driver) { +class be_class_I2C_Driver (scope: global, name: I2C_Driver, super: be_class_Driver) { wire, var addr, var name, var - add_cmd, closure(init_closure) + init, closure(init_closure) + write8, closure(write8_closure) + write_bit, closure(write_bit_closure) + read8, closure(read8_closure) + read12, closure(read12_closure) + read13, closure(read13_closure) + read24, closure(read24_closure) + read32, closure(read32_closure) } @const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_i2s_audio_lib.c b/lib/libesp32/Berry/default/be_i2s_audio_lib.c new file mode 100644 index 000000000..ef8720b23 --- /dev/null +++ b/lib/libesp32/Berry/default/be_i2s_audio_lib.c @@ -0,0 +1,113 @@ +/******************************************************************** + * Tasmota I2S audio classes + * + * + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_I2S +#ifdef USE_I2S_AUDIO_BERRY + +extern int i2s_output_i2s_init(bvm *vm); +extern int i2s_output_i2s_deinit(bvm *vm); +extern int i2s_output_i2s_stop(bvm *vm); + +extern int i2s_generator_wav_init(bvm *vm); +extern int i2s_generator_wav_deinit(bvm *vm); +extern int i2s_generator_wav_begin(bvm *vm); +extern int i2s_generator_wav_loop(bvm *vm); +extern int i2s_generator_wav_stop(bvm *vm); +extern int i2s_generator_wav_isrunning(bvm *vm); + +extern int i2s_generator_mp3_init(bvm *vm); +extern int i2s_generator_mp3_deinit(bvm *vm); +extern int i2s_generator_mp3_begin(bvm *vm); +extern int i2s_generator_mp3_loop(bvm *vm); +extern int i2s_generator_mp3_stop(bvm *vm); +extern int i2s_generator_mp3_isrunning(bvm *vm); + +#ifdef USE_UFILESYS +extern int i2s_file_source_fs_init(bvm *vm); +extern int i2s_file_source_fs_deinit(bvm *vm); +#endif // USE_UFILESYS + + +#include "../generate/be_fixed_be_class_audio_output.h" +#include "../generate/be_fixed_be_class_audio_output_i2s.h" +#include "../generate/be_fixed_be_class_audio_generator.h" +#include "../generate/be_fixed_be_class_audio_generator_wav.h" +#include "../generate/be_fixed_be_class_audio_generator_mp3.h" +#include "../generate/be_fixed_be_class_audio_file_source.h" +#include "../generate/be_fixed_be_class_audio_file_source_fs.h" + +void be_load_driver_audio_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_audio_output); + be_setglobal(vm, "AudioOutput"); + be_pop(vm, 1); + + be_pushntvclass(vm, &be_class_audio_output_i2s); + be_setglobal(vm, "AudioOutputI2S"); + be_pop(vm, 1); + + be_pushntvclass(vm, &be_class_audio_generator_wav); + be_setglobal(vm, "AudioGeneratorWAV"); + be_pop(vm, 1); + + be_pushntvclass(vm, &be_class_audio_generator_mp3); + be_setglobal(vm, "AudioGeneratorMP3"); + be_pop(vm, 1); + +#ifdef USE_UFILESYS + be_pushntvclass(vm, &be_class_audio_file_source_fs); + be_setglobal(vm, "AudioFileSourceFS"); + be_pop(vm, 1); +#endif // USE_UFILESYS +} + +/* @const_object_info_begin + +class be_class_audio_output (scope: global, name: AudioOutput) { + .p, var +} + +class be_class_audio_generator (scope: global, name: AudioGenerator) { + .p, var +} + +class be_class_audio_file_source (scope: global, name: AudioFileSource) { + .p, var +} + +class be_class_audio_output_i2s (scope: global, name: AudioOutputI2S, super: be_class_audio_output) { + init, func(i2s_output_i2s_init) + deinit, func(i2s_output_i2s_deinit) + stop, func(i2s_output_i2s_stop) +} + +class be_class_audio_generator_wav (scope: global, name: AudioGeneratorWAV, super: be_class_audio_generator) { + init, func(i2s_generator_wav_init) + deinit, func(i2s_generator_wav_deinit) + begin, func(i2s_generator_wav_begin) + loop, func(i2s_generator_wav_loop) + stop, func(i2s_generator_wav_stop) + isrunning, func(i2s_generator_wav_isrunning) +} + +class be_class_audio_generator_mp3 (scope: global, name: AudioGeneratorMP3, super: be_class_audio_generator) { + init, func(i2s_generator_mp3_init) + deinit, func(i2s_generator_mp3_deinit) + begin, func(i2s_generator_mp3_begin) + loop, func(i2s_generator_mp3_loop) + stop, func(i2s_generator_mp3_stop) + isrunning, func(i2s_generator_mp3_isrunning) +} + +class be_class_audio_file_source_fs (scope: global, name: AudioFileSourceFS, super: be_class_audio_file_source) { + init, func(i2s_file_source_fs_init) + deinit, func(i2s_file_source_fs_deinit) +} + +@const_object_info_end */ + +#endif // USE_I2S_AUDIO_BERRY +#endif // USE_I2S \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_light_lib.c b/lib/libesp32/Berry/default/be_light_lib.c index a536fd6df..6d020eca8 100644 --- a/lib/libesp32/Berry/default/be_light_lib.c +++ b/lib/libesp32/Berry/default/be_light_lib.c @@ -13,22 +13,6 @@ extern int l_gamma8(bvm *vm); extern int l_gamma10(bvm *vm); extern int l_rev_gamma10(bvm *vm); -#if !BE_USE_PRECOMPILED_OBJECT - -be_native_module_attr_table(light) { - - be_native_module_function("get", l_getlight), - be_native_module_function("set", l_setlight), - - be_native_module_function("gamma8", l_gamma8), - be_native_module_function("gamma10", l_gamma10), - be_native_module_function("reverse_gamma10", l_rev_gamma10), - -}; - -be_define_native_module(light, NULL); - -#else /* @const_object_info_begin module light (scope: global) { get, func(l_getlight) @@ -40,6 +24,5 @@ module light (scope: global) { } @const_object_info_end */ #include "../generate/be_fixed_light.h" -#endif #endif // USE_LIGHT \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lv_extern_libs.h b/lib/libesp32/Berry/default/be_lv_extern_libs.h deleted file mode 100644 index f5d0f55e6..000000000 --- a/lib/libesp32/Berry/default/be_lv_extern_libs.h +++ /dev/null @@ -1,1023 +0,0 @@ -/******************************************************************** - * Generated code, don't edit - *******************************************************************/ -/* `lv_style` external functions definitions */ -extern int lvbe_style_init(bvm *vm); -extern int lvbe_style_copy(bvm *vm); -extern int lvbe_style_list_init(bvm *vm); -extern int lvbe_style_list_copy(bvm *vm); -extern int lvbe_style_list_get_style(bvm *vm); -extern int lvbe_style_reset(bvm *vm); -extern int lvbe_style_remove_prop(bvm *vm); -extern int lvbe_style_list_get_local_style(bvm *vm); -extern int lvbe_style_set_radius(bvm *vm); -extern int lvbe_style_set_clip_corner(bvm *vm); -extern int lvbe_style_set_size(bvm *vm); -extern int lvbe_style_set_transform_width(bvm *vm); -extern int lvbe_style_set_transform_height(bvm *vm); -extern int lvbe_style_set_transform_angle(bvm *vm); -extern int lvbe_style_set_transform_zoom(bvm *vm); -extern int lvbe_style_set_opa_scale(bvm *vm); -extern int lvbe_style_set_pad_top(bvm *vm); -extern int lvbe_style_set_pad_bottom(bvm *vm); -extern int lvbe_style_set_pad_left(bvm *vm); -extern int lvbe_style_set_pad_right(bvm *vm); -extern int lvbe_style_set_pad_inner(bvm *vm); -extern int lvbe_style_set_margin_top(bvm *vm); -extern int lvbe_style_set_margin_bottom(bvm *vm); -extern int lvbe_style_set_margin_left(bvm *vm); -extern int lvbe_style_set_margin_right(bvm *vm); -extern int lvbe_style_set_bg_blend_mode(bvm *vm); -extern int lvbe_style_set_bg_main_stop(bvm *vm); -extern int lvbe_style_set_bg_grad_stop(bvm *vm); -extern int lvbe_style_set_bg_grad_dir(bvm *vm); -extern int lvbe_style_set_bg_color(bvm *vm); -extern int lvbe_style_set_bg_grad_color(bvm *vm); -extern int lvbe_style_set_bg_opa(bvm *vm); -extern int lvbe_style_set_border_width(bvm *vm); -extern int lvbe_style_set_border_side(bvm *vm); -extern int lvbe_style_set_border_blend_mode(bvm *vm); -extern int lvbe_style_set_border_post(bvm *vm); -extern int lvbe_style_set_border_color(bvm *vm); -extern int lvbe_style_set_border_opa(bvm *vm); -extern int lvbe_style_set_outline_width(bvm *vm); -extern int lvbe_style_set_outline_pad(bvm *vm); -extern int lvbe_style_set_outline_blend_mode(bvm *vm); -extern int lvbe_style_set_outline_color(bvm *vm); -extern int lvbe_style_set_outline_opa(bvm *vm); -extern int lvbe_style_set_shadow_width(bvm *vm); -extern int lvbe_style_set_shadow_ofs_x(bvm *vm); -extern int lvbe_style_set_shadow_ofs_y(bvm *vm); -extern int lvbe_style_set_shadow_spread(bvm *vm); -extern int lvbe_style_set_shadow_blend_mode(bvm *vm); -extern int lvbe_style_set_shadow_color(bvm *vm); -extern int lvbe_style_set_shadow_opa(bvm *vm); -extern int lvbe_style_set_pattern_repeat(bvm *vm); -extern int lvbe_style_set_pattern_blend_mode(bvm *vm); -extern int lvbe_style_set_pattern_recolor(bvm *vm); -extern int lvbe_style_set_pattern_opa(bvm *vm); -extern int lvbe_style_set_pattern_recolor_opa(bvm *vm); -extern int lvbe_style_set_pattern_image(bvm *vm); -extern int lvbe_style_set_value_letter_space(bvm *vm); -extern int lvbe_style_set_value_line_space(bvm *vm); -extern int lvbe_style_set_value_blend_mode(bvm *vm); -extern int lvbe_style_set_value_ofs_x(bvm *vm); -extern int lvbe_style_set_value_ofs_y(bvm *vm); -extern int lvbe_style_set_value_align(bvm *vm); -extern int lvbe_style_set_value_color(bvm *vm); -extern int lvbe_style_set_value_opa(bvm *vm); -extern int lvbe_style_set_value_font(bvm *vm); -extern int lvbe_style_set_value_str(bvm *vm); -extern int lvbe_style_set_text_letter_space(bvm *vm); -extern int lvbe_style_set_text_line_space(bvm *vm); -extern int lvbe_style_set_text_decor(bvm *vm); -extern int lvbe_style_set_text_blend_mode(bvm *vm); -extern int lvbe_style_set_text_color(bvm *vm); -extern int lvbe_style_set_text_sel_color(bvm *vm); -extern int lvbe_style_set_text_sel_bg_color(bvm *vm); -extern int lvbe_style_set_text_opa(bvm *vm); -extern int lvbe_style_set_text_font(bvm *vm); -extern int lvbe_style_set_line_width(bvm *vm); -extern int lvbe_style_set_line_blend_mode(bvm *vm); -extern int lvbe_style_set_line_dash_width(bvm *vm); -extern int lvbe_style_set_line_dash_gap(bvm *vm); -extern int lvbe_style_set_line_rounded(bvm *vm); -extern int lvbe_style_set_line_color(bvm *vm); -extern int lvbe_style_set_line_opa(bvm *vm); -extern int lvbe_style_set_image_blend_mode(bvm *vm); -extern int lvbe_style_set_image_recolor(bvm *vm); -extern int lvbe_style_set_image_opa(bvm *vm); -extern int lvbe_style_set_image_recolor_opa(bvm *vm); -extern int lvbe_style_set_transition_time(bvm *vm); -extern int lvbe_style_set_transition_delay(bvm *vm); -extern int lvbe_style_set_transition_prop_1(bvm *vm); -extern int lvbe_style_set_transition_prop_2(bvm *vm); -extern int lvbe_style_set_transition_prop_3(bvm *vm); -extern int lvbe_style_set_transition_prop_4(bvm *vm); -extern int lvbe_style_set_transition_prop_5(bvm *vm); -extern int lvbe_style_set_transition_prop_6(bvm *vm); -extern int lvbe_style_set_transition_path(bvm *vm); -extern int lvbe_style_set_scale_width(bvm *vm); -extern int lvbe_style_set_scale_border_width(bvm *vm); -extern int lvbe_style_set_scale_end_border_width(bvm *vm); -extern int lvbe_style_set_scale_end_line_width(bvm *vm); -extern int lvbe_style_set_scale_grad_color(bvm *vm); -extern int lvbe_style_set_scale_end_color(bvm *vm); - -/* `lv_group` external functions definitions */ -extern int lvbe_group_create(bvm *vm); -extern int lvbe_group_del(bvm *vm); -extern int lvbe_group_add_obj(bvm *vm); -extern int lvbe_group_remove_obj(bvm *vm); -extern int lvbe_group_remove_all_objs(bvm *vm); -extern int lvbe_group_focus_obj(bvm *vm); -extern int lvbe_group_focus_next(bvm *vm); -extern int lvbe_group_focus_prev(bvm *vm); -extern int lvbe_group_focus_freeze(bvm *vm); -extern int lvbe_group_send_data(bvm *vm); -extern int lvbe_group_set_focus_cb(bvm *vm); -extern int lvbe_group_set_refocus_policy(bvm *vm); -extern int lvbe_group_set_editing(bvm *vm); -extern int lvbe_group_set_click_focus(bvm *vm); -extern int lvbe_group_set_wrap(bvm *vm); -extern int lvbe_group_get_focused(bvm *vm); -extern int lvbe_group_get_focus_cb(bvm *vm); -extern int lvbe_group_get_editing(bvm *vm); -extern int lvbe_group_get_click_focus(bvm *vm); -extern int lvbe_group_get_wrap(bvm *vm); - -/* `lv_obj` external functions definitions */ -extern int lvbe_obj_create(bvm *vm); -extern int lvbe_obj_del(bvm *vm); -extern int lvbe_obj_del_anim_ready_cb(bvm *vm); -extern int lvbe_obj_del_async(bvm *vm); -extern int lvbe_obj_clean(bvm *vm); -extern int lvbe_obj_invalidate_area(bvm *vm); -extern int lvbe_obj_invalidate(bvm *vm); -extern int lvbe_obj_area_is_visible(bvm *vm); -extern int lvbe_obj_is_visible(bvm *vm); -extern int lvbe_obj_set_parent(bvm *vm); -extern int lvbe_obj_move_foreground(bvm *vm); -extern int lvbe_obj_move_background(bvm *vm); -extern int lvbe_obj_set_pos(bvm *vm); -extern int lvbe_obj_set_x(bvm *vm); -extern int lvbe_obj_set_y(bvm *vm); -extern int lvbe_obj_set_size(bvm *vm); -extern int lvbe_obj_set_width(bvm *vm); -extern int lvbe_obj_set_height(bvm *vm); -extern int lvbe_obj_set_width_fit(bvm *vm); -extern int lvbe_obj_set_height_fit(bvm *vm); -extern int lvbe_obj_set_width_margin(bvm *vm); -extern int lvbe_obj_set_height_margin(bvm *vm); -extern int lvbe_obj_align(bvm *vm); -extern int lvbe_obj_align_x(bvm *vm); -extern int lvbe_obj_align_y(bvm *vm); -extern int lvbe_obj_align_mid(bvm *vm); -extern int lvbe_obj_align_mid_x(bvm *vm); -extern int lvbe_obj_align_mid_y(bvm *vm); -extern int lvbe_obj_realign(bvm *vm); -extern int lvbe_obj_set_auto_realign(bvm *vm); -extern int lvbe_obj_set_ext_click_area(bvm *vm); -extern int lvbe_obj_add_style(bvm *vm); -extern int lvbe_obj_remove_style(bvm *vm); -extern int lvbe_obj_clean_style_list(bvm *vm); -extern int lvbe_obj_reset_style_list(bvm *vm); -extern int lvbe_obj_refresh_style(bvm *vm); -extern int lvbe_obj_report_style_mod(bvm *vm); -extern int lvbe_obj_remove_style_local_prop(bvm *vm); -extern int lvbe_obj_set_hidden(bvm *vm); -extern int lvbe_obj_set_adv_hittest(bvm *vm); -extern int lvbe_obj_set_click(bvm *vm); -extern int lvbe_obj_set_top(bvm *vm); -extern int lvbe_obj_set_drag(bvm *vm); -extern int lvbe_obj_set_drag_dir(bvm *vm); -extern int lvbe_obj_set_drag_throw(bvm *vm); -extern int lvbe_obj_set_drag_parent(bvm *vm); -extern int lvbe_obj_set_focus_parent(bvm *vm); -extern int lvbe_obj_set_gesture_parent(bvm *vm); -extern int lvbe_obj_set_parent_event(bvm *vm); -extern int lvbe_obj_set_base_dir(bvm *vm); -extern int lvbe_obj_add_protect(bvm *vm); -extern int lvbe_obj_clear_protect(bvm *vm); -extern int lvbe_obj_set_state(bvm *vm); -extern int lvbe_obj_add_state(bvm *vm); -extern int lvbe_obj_clear_state(bvm *vm); -extern int lvbe_obj_finish_transitions(bvm *vm); -extern int lvbe_obj_set_event_cb(bvm *vm); -extern int lvbe_obj_set_signal_cb(bvm *vm); -extern int lvbe_obj_set_design_cb(bvm *vm); -extern int lvbe_obj_allocate_ext_attr(bvm *vm); -extern int lvbe_obj_refresh_ext_draw_pad(bvm *vm); -extern int lvbe_obj_get_screen(bvm *vm); -extern int lvbe_obj_get_parent(bvm *vm); -extern int lvbe_obj_get_child(bvm *vm); -extern int lvbe_obj_get_child_back(bvm *vm); -extern int lvbe_obj_count_children(bvm *vm); -extern int lvbe_obj_count_children_recursive(bvm *vm); -extern int lvbe_obj_get_coords(bvm *vm); -extern int lvbe_obj_get_inner_coords(bvm *vm); -extern int lvbe_obj_get_x(bvm *vm); -extern int lvbe_obj_get_y(bvm *vm); -extern int lvbe_obj_get_width(bvm *vm); -extern int lvbe_obj_get_height(bvm *vm); -extern int lvbe_obj_get_width_fit(bvm *vm); -extern int lvbe_obj_get_height_fit(bvm *vm); -extern int lvbe_obj_get_height_margin(bvm *vm); -extern int lvbe_obj_get_width_margin(bvm *vm); -extern int lvbe_obj_get_width_grid(bvm *vm); -extern int lvbe_obj_get_height_grid(bvm *vm); -extern int lvbe_obj_get_auto_realign(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_left(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_right(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_top(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_bottom(bvm *vm); -extern int lvbe_obj_get_ext_draw_pad(bvm *vm); -extern int lvbe_obj_get_local_style(bvm *vm); -extern int lvbe_obj_get_hidden(bvm *vm); -extern int lvbe_obj_get_adv_hittest(bvm *vm); -extern int lvbe_obj_get_click(bvm *vm); -extern int lvbe_obj_get_top(bvm *vm); -extern int lvbe_obj_get_drag(bvm *vm); -extern int lvbe_obj_get_drag_dir(bvm *vm); -extern int lvbe_obj_get_drag_throw(bvm *vm); -extern int lvbe_obj_get_drag_parent(bvm *vm); -extern int lvbe_obj_get_focus_parent(bvm *vm); -extern int lvbe_obj_get_parent_event(bvm *vm); -extern int lvbe_obj_get_gesture_parent(bvm *vm); -extern int lvbe_obj_get_base_dir(bvm *vm); -extern int lvbe_obj_get_protect(bvm *vm); -extern int lvbe_obj_is_protected(bvm *vm); -extern int lvbe_obj_get_state(bvm *vm); -extern int lvbe_obj_is_point_on_coords(bvm *vm); -extern int lvbe_obj_hittest(bvm *vm); -extern int lvbe_obj_get_ext_attr(bvm *vm); -extern int lvbe_obj_get_type(bvm *vm); -extern int lvbe_obj_get_user_data(bvm *vm); -extern int lvbe_obj_set_user_data(bvm *vm); -extern int lvbe_obj_get_group(bvm *vm); -extern int lvbe_obj_is_focused(bvm *vm); -extern int lvbe_obj_get_focused_obj(bvm *vm); -extern int lvbe_obj_handle_get_type_signal(bvm *vm); -extern int lvbe_obj_init_draw_rect_dsc(bvm *vm); -extern int lvbe_obj_init_draw_label_dsc(bvm *vm); -extern int lvbe_obj_init_draw_img_dsc(bvm *vm); -extern int lvbe_obj_init_draw_line_dsc(bvm *vm); -extern int lvbe_obj_get_draw_rect_ext_pad_size(bvm *vm); -extern int lvbe_obj_fade_in(bvm *vm); -extern int lvbe_obj_fade_out(bvm *vm); -extern int lvbe_obj_get_style_radius(bvm *vm); -extern int lvbe_obj_set_style_local_radius(bvm *vm); -extern int lvbe_obj_get_style_clip_corner(bvm *vm); -extern int lvbe_obj_set_style_local_clip_corner(bvm *vm); -extern int lvbe_obj_get_style_size(bvm *vm); -extern int lvbe_obj_set_style_local_size(bvm *vm); -extern int lvbe_obj_get_style_transform_width(bvm *vm); -extern int lvbe_obj_set_style_local_transform_width(bvm *vm); -extern int lvbe_obj_get_style_transform_height(bvm *vm); -extern int lvbe_obj_set_style_local_transform_height(bvm *vm); -extern int lvbe_obj_get_style_transform_angle(bvm *vm); -extern int lvbe_obj_set_style_local_transform_angle(bvm *vm); -extern int lvbe_obj_get_style_transform_zoom(bvm *vm); -extern int lvbe_obj_set_style_local_transform_zoom(bvm *vm); -extern int lvbe_obj_get_style_opa_scale(bvm *vm); -extern int lvbe_obj_set_style_local_opa_scale(bvm *vm); -extern int lvbe_obj_get_style_pad_top(bvm *vm); -extern int lvbe_obj_set_style_local_pad_top(bvm *vm); -extern int lvbe_obj_get_style_pad_bottom(bvm *vm); -extern int lvbe_obj_set_style_local_pad_bottom(bvm *vm); -extern int lvbe_obj_get_style_pad_left(bvm *vm); -extern int lvbe_obj_set_style_local_pad_left(bvm *vm); -extern int lvbe_obj_get_style_pad_right(bvm *vm); -extern int lvbe_obj_set_style_local_pad_right(bvm *vm); -extern int lvbe_obj_get_style_pad_inner(bvm *vm); -extern int lvbe_obj_set_style_local_pad_inner(bvm *vm); -extern int lvbe_obj_get_style_margin_top(bvm *vm); -extern int lvbe_obj_set_style_local_margin_top(bvm *vm); -extern int lvbe_obj_get_style_margin_bottom(bvm *vm); -extern int lvbe_obj_set_style_local_margin_bottom(bvm *vm); -extern int lvbe_obj_get_style_margin_left(bvm *vm); -extern int lvbe_obj_set_style_local_margin_left(bvm *vm); -extern int lvbe_obj_get_style_margin_right(bvm *vm); -extern int lvbe_obj_set_style_local_margin_right(bvm *vm); -extern int lvbe_obj_set_style_local_bg_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_bg_main_stop(bvm *vm); -extern int lvbe_obj_set_style_local_bg_main_stop(bvm *vm); -extern int lvbe_obj_get_style_bg_grad_stop(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_stop(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_dir(bvm *vm); -extern int lvbe_obj_get_style_bg_color(bvm *vm); -extern int lvbe_obj_set_style_local_bg_color(bvm *vm); -extern int lvbe_obj_get_style_bg_grad_color(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_color(bvm *vm); -extern int lvbe_obj_get_style_bg_opa(bvm *vm); -extern int lvbe_obj_set_style_local_bg_opa(bvm *vm); -extern int lvbe_obj_get_style_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_border_side(bvm *vm); -extern int lvbe_obj_set_style_local_border_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_border_post(bvm *vm); -extern int lvbe_obj_set_style_local_border_post(bvm *vm); -extern int lvbe_obj_get_style_border_color(bvm *vm); -extern int lvbe_obj_set_style_local_border_color(bvm *vm); -extern int lvbe_obj_get_style_border_opa(bvm *vm); -extern int lvbe_obj_set_style_local_border_opa(bvm *vm); -extern int lvbe_obj_get_style_outline_width(bvm *vm); -extern int lvbe_obj_set_style_local_outline_width(bvm *vm); -extern int lvbe_obj_get_style_outline_pad(bvm *vm); -extern int lvbe_obj_set_style_local_outline_pad(bvm *vm); -extern int lvbe_obj_set_style_local_outline_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_outline_color(bvm *vm); -extern int lvbe_obj_set_style_local_outline_color(bvm *vm); -extern int lvbe_obj_get_style_outline_opa(bvm *vm); -extern int lvbe_obj_set_style_local_outline_opa(bvm *vm); -extern int lvbe_obj_get_style_shadow_width(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_width(bvm *vm); -extern int lvbe_obj_get_style_shadow_ofs_x(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_ofs_x(bvm *vm); -extern int lvbe_obj_get_style_shadow_ofs_y(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_ofs_y(bvm *vm); -extern int lvbe_obj_get_style_shadow_spread(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_spread(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_shadow_color(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_color(bvm *vm); -extern int lvbe_obj_get_style_shadow_opa(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_repeat(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_repeat(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_pattern_recolor(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_recolor(bvm *vm); -extern int lvbe_obj_get_style_pattern_opa(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_recolor_opa(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_recolor_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_image(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_image(bvm *vm); -extern int lvbe_obj_get_style_value_letter_space(bvm *vm); -extern int lvbe_obj_set_style_local_value_letter_space(bvm *vm); -extern int lvbe_obj_get_style_value_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_value_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_value_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_value_ofs_x(bvm *vm); -extern int lvbe_obj_set_style_local_value_ofs_x(bvm *vm); -extern int lvbe_obj_get_style_value_ofs_y(bvm *vm); -extern int lvbe_obj_set_style_local_value_ofs_y(bvm *vm); -extern int lvbe_obj_set_style_local_value_align(bvm *vm); -extern int lvbe_obj_get_style_value_color(bvm *vm); -extern int lvbe_obj_set_style_local_value_color(bvm *vm); -extern int lvbe_obj_get_style_value_opa(bvm *vm); -extern int lvbe_obj_set_style_local_value_opa(bvm *vm); -extern int lvbe_obj_set_style_local_value_font(bvm *vm); -extern int lvbe_obj_get_style_value_str(bvm *vm); -extern int lvbe_obj_set_style_local_value_str(bvm *vm); -extern int lvbe_obj_get_style_text_letter_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_letter_space(bvm *vm); -extern int lvbe_obj_get_style_text_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_decor(bvm *vm); -extern int lvbe_obj_set_style_local_text_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_text_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_color(bvm *vm); -extern int lvbe_obj_get_style_text_sel_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_sel_color(bvm *vm); -extern int lvbe_obj_get_style_text_sel_bg_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_sel_bg_color(bvm *vm); -extern int lvbe_obj_get_style_text_opa(bvm *vm); -extern int lvbe_obj_set_style_local_text_opa(bvm *vm); -extern int lvbe_obj_set_style_local_text_font(bvm *vm); -extern int lvbe_obj_get_style_line_width(bvm *vm); -extern int lvbe_obj_set_style_local_line_width(bvm *vm); -extern int lvbe_obj_set_style_local_line_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_line_dash_width(bvm *vm); -extern int lvbe_obj_set_style_local_line_dash_width(bvm *vm); -extern int lvbe_obj_get_style_line_dash_gap(bvm *vm); -extern int lvbe_obj_set_style_local_line_dash_gap(bvm *vm); -extern int lvbe_obj_get_style_line_rounded(bvm *vm); -extern int lvbe_obj_set_style_local_line_rounded(bvm *vm); -extern int lvbe_obj_get_style_line_color(bvm *vm); -extern int lvbe_obj_set_style_local_line_color(bvm *vm); -extern int lvbe_obj_get_style_line_opa(bvm *vm); -extern int lvbe_obj_set_style_local_line_opa(bvm *vm); -extern int lvbe_obj_set_style_local_image_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_image_recolor(bvm *vm); -extern int lvbe_obj_set_style_local_image_recolor(bvm *vm); -extern int lvbe_obj_get_style_image_opa(bvm *vm); -extern int lvbe_obj_set_style_local_image_opa(bvm *vm); -extern int lvbe_obj_get_style_image_recolor_opa(bvm *vm); -extern int lvbe_obj_set_style_local_image_recolor_opa(bvm *vm); -extern int lvbe_obj_get_style_transition_time(bvm *vm); -extern int lvbe_obj_set_style_local_transition_time(bvm *vm); -extern int lvbe_obj_get_style_transition_delay(bvm *vm); -extern int lvbe_obj_set_style_local_transition_delay(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_1(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_1(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_2(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_2(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_3(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_3(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_4(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_4(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_5(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_5(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_6(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_6(bvm *vm); -extern int lvbe_obj_set_style_local_transition_path(bvm *vm); -extern int lvbe_obj_get_style_scale_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_width(bvm *vm); -extern int lvbe_obj_get_style_scale_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_border_width(bvm *vm); -extern int lvbe_obj_get_style_scale_end_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_border_width(bvm *vm); -extern int lvbe_obj_get_style_scale_end_line_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_line_width(bvm *vm); -extern int lvbe_obj_get_style_scale_grad_color(bvm *vm); -extern int lvbe_obj_set_style_local_scale_grad_color(bvm *vm); -extern int lvbe_obj_get_style_scale_end_color(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_color(bvm *vm); - -/* `lv_arc` external functions definitions */ -extern int lvbe_arc_create(bvm *vm); -extern int lvbe_arc_set_start_angle(bvm *vm); -extern int lvbe_arc_set_end_angle(bvm *vm); -extern int lvbe_arc_set_angles(bvm *vm); -extern int lvbe_arc_set_bg_start_angle(bvm *vm); -extern int lvbe_arc_set_bg_end_angle(bvm *vm); -extern int lvbe_arc_set_bg_angles(bvm *vm); -extern int lvbe_arc_set_rotation(bvm *vm); -extern int lvbe_arc_set_type(bvm *vm); -extern int lvbe_arc_set_value(bvm *vm); -extern int lvbe_arc_set_range(bvm *vm); -extern int lvbe_arc_set_chg_rate(bvm *vm); -extern int lvbe_arc_set_adjustable(bvm *vm); -extern int lvbe_arc_get_angle_start(bvm *vm); -extern int lvbe_arc_get_angle_end(bvm *vm); -extern int lvbe_arc_get_bg_angle_start(bvm *vm); -extern int lvbe_arc_get_bg_angle_end(bvm *vm); -extern int lvbe_arc_get_type(bvm *vm); -extern int lvbe_arc_get_value(bvm *vm); -extern int lvbe_arc_get_min_value(bvm *vm); -extern int lvbe_arc_get_max_value(bvm *vm); -extern int lvbe_arc_is_dragged(bvm *vm); -extern int lvbe_arc_get_adjustable(bvm *vm); - -/* `lv_bar` external functions definitions */ -extern int lvbe_bar_create(bvm *vm); -extern int lvbe_bar_set_value(bvm *vm); -extern int lvbe_bar_set_start_value(bvm *vm); -extern int lvbe_bar_set_range(bvm *vm); -extern int lvbe_bar_set_type(bvm *vm); -extern int lvbe_bar_set_anim_time(bvm *vm); -extern int lvbe_bar_get_value(bvm *vm); -extern int lvbe_bar_get_start_value(bvm *vm); -extern int lvbe_bar_get_min_value(bvm *vm); -extern int lvbe_bar_get_max_value(bvm *vm); -extern int lvbe_bar_get_type(bvm *vm); -extern int lvbe_bar_get_anim_time(bvm *vm); - -/* `lv_btn` external functions definitions */ -extern int lvbe_btn_create(bvm *vm); -extern int lvbe_btn_set_checkable(bvm *vm); -extern int lvbe_btn_set_state(bvm *vm); -extern int lvbe_btn_toggle(bvm *vm); -extern int lvbe_btn_set_layout(bvm *vm); -extern int lvbe_btn_set_fit4(bvm *vm); -extern int lvbe_btn_set_fit2(bvm *vm); -extern int lvbe_btn_set_fit(bvm *vm); -extern int lvbe_btn_get_state(bvm *vm); -extern int lvbe_btn_get_checkable(bvm *vm); -extern int lvbe_btn_get_layout(bvm *vm); -extern int lvbe_btn_get_fit_left(bvm *vm); -extern int lvbe_btn_get_fit_right(bvm *vm); -extern int lvbe_btn_get_fit_top(bvm *vm); -extern int lvbe_btn_get_fit_bottom(bvm *vm); - -/* `lv_btnmatrix` external functions definitions */ -extern int lvbe_btnmatrix_create(bvm *vm); -extern int lvbe_btnmatrix_set_map(bvm *vm); -extern int lvbe_btnmatrix_set_ctrl_map(bvm *vm); -extern int lvbe_btnmatrix_set_focused_btn(bvm *vm); -extern int lvbe_btnmatrix_set_recolor(bvm *vm); -extern int lvbe_btnmatrix_set_btn_ctrl(bvm *vm); -extern int lvbe_btnmatrix_clear_btn_ctrl(bvm *vm); -extern int lvbe_btnmatrix_set_btn_ctrl_all(bvm *vm); -extern int lvbe_btnmatrix_clear_btn_ctrl_all(bvm *vm); -extern int lvbe_btnmatrix_set_btn_width(bvm *vm); -extern int lvbe_btnmatrix_set_one_check(bvm *vm); -extern int lvbe_btnmatrix_set_align(bvm *vm); -extern int lvbe_btnmatrix_get_recolor(bvm *vm); -extern int lvbe_btnmatrix_get_active_btn(bvm *vm); -extern int lvbe_btnmatrix_get_active_btn_text(bvm *vm); -extern int lvbe_btnmatrix_get_focused_btn(bvm *vm); -extern int lvbe_btnmatrix_get_btn_text(bvm *vm); -extern int lvbe_btnmatrix_get_btn_ctrl(bvm *vm); -extern int lvbe_btnmatrix_get_one_check(bvm *vm); -extern int lvbe_btnmatrix_get_align(bvm *vm); - -/* `lv_calendar` external functions definitions */ -extern int lvbe_calendar_create(bvm *vm); -extern int lvbe_calendar_set_today_date(bvm *vm); -extern int lvbe_calendar_set_showed_date(bvm *vm); -extern int lvbe_calendar_set_highlighted_dates(bvm *vm); -extern int lvbe_calendar_set_day_names(bvm *vm); -extern int lvbe_calendar_set_month_names(bvm *vm); -extern int lvbe_calendar_get_highlighted_dates_num(bvm *vm); -extern int lvbe_calendar_get_day_of_week(bvm *vm); - -/* `lv_canvas` external functions definitions */ -extern int lvbe_canvas_create(bvm *vm); -extern int lvbe_canvas_set_buffer(bvm *vm); -extern int lvbe_canvas_set_px(bvm *vm); -extern int lvbe_canvas_set_palette(bvm *vm); -extern int lvbe_canvas_get_px(bvm *vm); -extern int lvbe_canvas_copy_buf(bvm *vm); -extern int lvbe_canvas_transform(bvm *vm); -extern int lvbe_canvas_blur_hor(bvm *vm); -extern int lvbe_canvas_blur_ver(bvm *vm); -extern int lvbe_canvas_fill_bg(bvm *vm); -extern int lvbe_canvas_draw_rect(bvm *vm); -extern int lvbe_canvas_draw_text(bvm *vm); -extern int lvbe_canvas_draw_img(bvm *vm); -extern int lvbe_canvas_draw_line(bvm *vm); -extern int lvbe_canvas_draw_polygon(bvm *vm); -extern int lvbe_canvas_draw_arc(bvm *vm); - -/* `lv_chart` external functions definitions */ -extern int lvbe_chart_create(bvm *vm); -extern int lvbe_chart_remove_series(bvm *vm); -extern int lvbe_chart_clear_series(bvm *vm); -extern int lvbe_chart_hide_series(bvm *vm); -extern int lvbe_chart_set_div_line_count(bvm *vm); -extern int lvbe_chart_set_y_range(bvm *vm); -extern int lvbe_chart_set_type(bvm *vm); -extern int lvbe_chart_set_point_count(bvm *vm); -extern int lvbe_chart_init_points(bvm *vm); -extern int lvbe_chart_set_points(bvm *vm); -extern int lvbe_chart_set_next(bvm *vm); -extern int lvbe_chart_set_update_mode(bvm *vm); -extern int lvbe_chart_set_x_tick_length(bvm *vm); -extern int lvbe_chart_set_y_tick_length(bvm *vm); -extern int lvbe_chart_set_secondary_y_tick_length(bvm *vm); -extern int lvbe_chart_set_x_tick_texts(bvm *vm); -extern int lvbe_chart_set_secondary_y_tick_texts(bvm *vm); -extern int lvbe_chart_set_y_tick_texts(bvm *vm); -extern int lvbe_chart_set_x_start_point(bvm *vm); -extern int lvbe_chart_set_ext_array(bvm *vm); -extern int lvbe_chart_set_point_id(bvm *vm); -extern int lvbe_chart_set_series_axis(bvm *vm); -extern int lvbe_chart_set_cursor_point(bvm *vm); -extern int lvbe_chart_get_type(bvm *vm); -extern int lvbe_chart_get_point_count(bvm *vm); -extern int lvbe_chart_get_x_start_point(bvm *vm); -extern int lvbe_chart_get_point_id(bvm *vm); -extern int lvbe_chart_get_series_axis(bvm *vm); -extern int lvbe_chart_get_series_area(bvm *vm); -extern int lvbe_chart_get_cursor_point(bvm *vm); -extern int lvbe_chart_get_nearest_index_from_coord(bvm *vm); -extern int lvbe_chart_get_x_from_index(bvm *vm); -extern int lvbe_chart_get_y_from_index(bvm *vm); -extern int lvbe_chart_refresh(bvm *vm); - -/* `lv_checkbox` external functions definitions */ -extern int lvbe_checkbox_create(bvm *vm); -extern int lvbe_checkbox_set_text(bvm *vm); -extern int lvbe_checkbox_set_text_static(bvm *vm); -extern int lvbe_checkbox_set_checked(bvm *vm); -extern int lvbe_checkbox_set_disabled(bvm *vm); -extern int lvbe_checkbox_set_state(bvm *vm); -extern int lvbe_checkbox_get_text(bvm *vm); -extern int lvbe_checkbox_is_checked(bvm *vm); -extern int lvbe_checkbox_is_inactive(bvm *vm); -extern int lvbe_checkbox_get_state(bvm *vm); - -/* `lv_cont` external functions definitions */ -extern int lvbe_cont_create(bvm *vm); -extern int lvbe_cont_set_layout(bvm *vm); -extern int lvbe_cont_set_fit4(bvm *vm); -extern int lvbe_cont_set_fit2(bvm *vm); -extern int lvbe_cont_set_fit(bvm *vm); -extern int lvbe_cont_get_layout(bvm *vm); -extern int lvbe_cont_get_fit_left(bvm *vm); -extern int lvbe_cont_get_fit_right(bvm *vm); -extern int lvbe_cont_get_fit_top(bvm *vm); -extern int lvbe_cont_get_fit_bottom(bvm *vm); - -/* `lv_cpicker` external functions definitions */ -extern int lvbe_cpicker_create(bvm *vm); -extern int lvbe_cpicker_set_type(bvm *vm); -extern int lvbe_cpicker_set_hue(bvm *vm); -extern int lvbe_cpicker_set_saturation(bvm *vm); -extern int lvbe_cpicker_set_value(bvm *vm); -extern int lvbe_cpicker_set_hsv(bvm *vm); -extern int lvbe_cpicker_set_color(bvm *vm); -extern int lvbe_cpicker_set_color_mode(bvm *vm); -extern int lvbe_cpicker_set_color_mode_fixed(bvm *vm); -extern int lvbe_cpicker_set_knob_colored(bvm *vm); -extern int lvbe_cpicker_get_color_mode(bvm *vm); -extern int lvbe_cpicker_get_color_mode_fixed(bvm *vm); -extern int lvbe_cpicker_get_hue(bvm *vm); -extern int lvbe_cpicker_get_saturation(bvm *vm); -extern int lvbe_cpicker_get_value(bvm *vm); -extern int lvbe_cpicker_get_hsv(bvm *vm); -extern int lvbe_cpicker_get_color(bvm *vm); -extern int lvbe_cpicker_get_knob_colored(bvm *vm); - -/* `lv_dropdown` external functions definitions */ -extern int lvbe_dropdown_create(bvm *vm); -extern int lvbe_dropdown_set_text(bvm *vm); -extern int lvbe_dropdown_clear_options(bvm *vm); -extern int lvbe_dropdown_set_options(bvm *vm); -extern int lvbe_dropdown_set_options_static(bvm *vm); -extern int lvbe_dropdown_add_option(bvm *vm); -extern int lvbe_dropdown_set_selected(bvm *vm); -extern int lvbe_dropdown_set_dir(bvm *vm); -extern int lvbe_dropdown_set_max_height(bvm *vm); -extern int lvbe_dropdown_set_symbol(bvm *vm); -extern int lvbe_dropdown_set_show_selected(bvm *vm); -extern int lvbe_dropdown_get_text(bvm *vm); -extern int lvbe_dropdown_get_options(bvm *vm); -extern int lvbe_dropdown_get_selected(bvm *vm); -extern int lvbe_dropdown_get_option_cnt(bvm *vm); -extern int lvbe_dropdown_get_selected_str(bvm *vm); -extern int lvbe_dropdown_get_max_height(bvm *vm); -extern int lvbe_dropdown_get_symbol(bvm *vm); -extern int lvbe_dropdown_get_dir(bvm *vm); -extern int lvbe_dropdown_get_show_selected(bvm *vm); -extern int lvbe_dropdown_open(bvm *vm); -extern int lvbe_dropdown_close(bvm *vm); - -/* `lv_gauge` external functions definitions */ -extern int lvbe_gauge_create(bvm *vm); -extern int lvbe_gauge_set_needle_count(bvm *vm); -extern int lvbe_gauge_set_value(bvm *vm); -extern int lvbe_gauge_set_range(bvm *vm); -extern int lvbe_gauge_set_critical_value(bvm *vm); -extern int lvbe_gauge_set_scale(bvm *vm); -extern int lvbe_gauge_set_angle_offset(bvm *vm); -extern int lvbe_gauge_set_needle_img(bvm *vm); -extern int lvbe_gauge_set_formatter_cb(bvm *vm); -extern int lvbe_gauge_get_value(bvm *vm); -extern int lvbe_gauge_get_needle_count(bvm *vm); -extern int lvbe_gauge_get_min_value(bvm *vm); -extern int lvbe_gauge_get_max_value(bvm *vm); -extern int lvbe_gauge_get_critical_value(bvm *vm); -extern int lvbe_gauge_get_label_count(bvm *vm); -extern int lvbe_gauge_get_line_count(bvm *vm); -extern int lvbe_gauge_get_scale_angle(bvm *vm); -extern int lvbe_gauge_get_angle_offset(bvm *vm); -extern int lvbe_gauge_get_needle_img(bvm *vm); -extern int lvbe_gauge_get_needle_img_pivot_x(bvm *vm); -extern int lvbe_gauge_get_needle_img_pivot_y(bvm *vm); - -/* `lv_img` external functions definitions */ -extern int lvbe_img_create(bvm *vm); -extern int lvbe_img_set_src(bvm *vm); -extern int lvbe_img_set_auto_size(bvm *vm); -extern int lvbe_img_set_offset_x(bvm *vm); -extern int lvbe_img_set_offset_y(bvm *vm); -extern int lvbe_img_set_pivot(bvm *vm); -extern int lvbe_img_set_angle(bvm *vm); -extern int lvbe_img_set_zoom(bvm *vm); -extern int lvbe_img_set_antialias(bvm *vm); -extern int lvbe_img_get_src(bvm *vm); -extern int lvbe_img_get_file_name(bvm *vm); -extern int lvbe_img_get_auto_size(bvm *vm); -extern int lvbe_img_get_offset_x(bvm *vm); -extern int lvbe_img_get_offset_y(bvm *vm); -extern int lvbe_img_get_angle(bvm *vm); -extern int lvbe_img_get_pivot(bvm *vm); -extern int lvbe_img_get_zoom(bvm *vm); -extern int lvbe_img_get_antialias(bvm *vm); - -/* `lv_imgbtn` external functions definitions */ -extern int lvbe_imgbtn_create(bvm *vm); -extern int lvbe_imgbtn_set_src(bvm *vm); -extern int lvbe_imgbtn_set_state(bvm *vm); -extern int lvbe_imgbtn_toggle(bvm *vm); -extern int lvbe_imgbtn_set_checkable(bvm *vm); -extern int lvbe_imgbtn_get_src(bvm *vm); -extern int lvbe_imgbtn_get_state(bvm *vm); - -/* `lv_keyboard` external functions definitions */ -extern int lvbe_keyboard_create(bvm *vm); -extern int lvbe_keyboard_set_textarea(bvm *vm); -extern int lvbe_keyboard_set_mode(bvm *vm); -extern int lvbe_keyboard_set_cursor_manage(bvm *vm); -extern int lvbe_keyboard_set_map(bvm *vm); -extern int lvbe_keyboard_set_ctrl_map(bvm *vm); -extern int lvbe_keyboard_get_textarea(bvm *vm); -extern int lvbe_keyboard_get_cursor_manage(bvm *vm); -extern int lvbe_keyboard_def_event_cb(bvm *vm); - -/* `lv_label` external functions definitions */ -extern int lvbe_label_create(bvm *vm); -extern int lvbe_label_set_text(bvm *vm); -extern int lvbe_label_set_text_fmt(bvm *vm); -extern int lvbe_label_set_text_static(bvm *vm); -extern int lvbe_label_set_long_mode(bvm *vm); -extern int lvbe_label_set_align(bvm *vm); -extern int lvbe_label_set_recolor(bvm *vm); -extern int lvbe_label_set_anim_speed(bvm *vm); -extern int lvbe_label_set_text_sel_start(bvm *vm); -extern int lvbe_label_set_text_sel_end(bvm *vm); -extern int lvbe_label_get_text(bvm *vm); -extern int lvbe_label_get_long_mode(bvm *vm); -extern int lvbe_label_get_align(bvm *vm); -extern int lvbe_label_get_recolor(bvm *vm); -extern int lvbe_label_get_anim_speed(bvm *vm); -extern int lvbe_label_get_letter_pos(bvm *vm); -extern int lvbe_label_get_letter_on(bvm *vm); -extern int lvbe_label_is_char_under_pos(bvm *vm); -extern int lvbe_label_get_text_sel_start(bvm *vm); -extern int lvbe_label_get_text_sel_end(bvm *vm); -extern int lvbe_label_ins_text(bvm *vm); -extern int lvbe_label_cut_text(bvm *vm); -extern int lvbe_label_refr_text(bvm *vm); - -/* `lv_led` external functions definitions */ -extern int lvbe_led_create(bvm *vm); -extern int lvbe_led_set_bright(bvm *vm); -extern int lvbe_led_on(bvm *vm); -extern int lvbe_led_off(bvm *vm); -extern int lvbe_led_toggle(bvm *vm); -extern int lvbe_led_get_bright(bvm *vm); - -/* `lv_line` external functions definitions */ -extern int lvbe_line_create(bvm *vm); -extern int lvbe_line_set_points(bvm *vm); -extern int lvbe_line_set_auto_size(bvm *vm); -extern int lvbe_line_set_y_invert(bvm *vm); -extern int lvbe_line_get_auto_size(bvm *vm); -extern int lvbe_line_get_y_invert(bvm *vm); - -/* `lv_linemeter` external functions definitions */ -extern int lvbe_linemeter_create(bvm *vm); -extern int lvbe_linemeter_set_value(bvm *vm); -extern int lvbe_linemeter_set_range(bvm *vm); -extern int lvbe_linemeter_set_scale(bvm *vm); -extern int lvbe_linemeter_set_angle_offset(bvm *vm); -extern int lvbe_linemeter_set_mirror(bvm *vm); -extern int lvbe_linemeter_get_value(bvm *vm); -extern int lvbe_linemeter_get_min_value(bvm *vm); -extern int lvbe_linemeter_get_max_value(bvm *vm); -extern int lvbe_linemeter_get_line_count(bvm *vm); -extern int lvbe_linemeter_get_scale_angle(bvm *vm); -extern int lvbe_linemeter_get_angle_offset(bvm *vm); -extern int lvbe_linemeter_draw_scale(bvm *vm); -extern int lvbe_linemeter_get_mirror(bvm *vm); - -/* `lv_list` external functions definitions */ -extern int lvbe_list_create(bvm *vm); -extern int lvbe_list_clean(bvm *vm); -extern int lvbe_list_add_btn(bvm *vm); -extern int lvbe_list_remove(bvm *vm); -extern int lvbe_list_focus_btn(bvm *vm); -extern int lvbe_list_set_scrollbar_mode(bvm *vm); -extern int lvbe_list_set_scroll_propagation(bvm *vm); -extern int lvbe_list_set_edge_flash(bvm *vm); -extern int lvbe_list_set_anim_time(bvm *vm); -extern int lvbe_list_set_layout(bvm *vm); -extern int lvbe_list_get_btn_text(bvm *vm); -extern int lvbe_list_get_btn_label(bvm *vm); -extern int lvbe_list_get_btn_img(bvm *vm); -extern int lvbe_list_get_prev_btn(bvm *vm); -extern int lvbe_list_get_next_btn(bvm *vm); -extern int lvbe_list_get_btn_index(bvm *vm); -extern int lvbe_list_get_size(bvm *vm); -extern int lvbe_list_get_btn_selected(bvm *vm); -extern int lvbe_list_get_layout(bvm *vm); -extern int lvbe_list_get_scrollbar_mode(bvm *vm); -extern int lvbe_list_get_scroll_propagation(bvm *vm); -extern int lvbe_list_get_edge_flash(bvm *vm); -extern int lvbe_list_get_anim_time(bvm *vm); -extern int lvbe_list_up(bvm *vm); -extern int lvbe_list_down(bvm *vm); -extern int lvbe_list_focus(bvm *vm); - -/* `lv_msgbox` external functions definitions */ -extern int lvbe_msgbox_create(bvm *vm); -extern int lvbe_msgbox_add_btns(bvm *vm); -extern int lvbe_msgbox_set_text(bvm *vm); -extern int lvbe_msgbox_set_text_fmt(bvm *vm); -extern int lvbe_msgbox_set_anim_time(bvm *vm); -extern int lvbe_msgbox_start_auto_close(bvm *vm); -extern int lvbe_msgbox_stop_auto_close(bvm *vm); -extern int lvbe_msgbox_set_recolor(bvm *vm); -extern int lvbe_msgbox_get_text(bvm *vm); -extern int lvbe_msgbox_get_active_btn(bvm *vm); -extern int lvbe_msgbox_get_active_btn_text(bvm *vm); -extern int lvbe_msgbox_get_anim_time(bvm *vm); -extern int lvbe_msgbox_get_recolor(bvm *vm); -extern int lvbe_msgbox_get_btnmatrix(bvm *vm); - -/* `lv_objmask` external functions definitions */ -extern int lvbe_objmask_create(bvm *vm); -extern int lvbe_objmask_update_mask(bvm *vm); -extern int lvbe_objmask_remove_mask(bvm *vm); - -/* `lv_page` external functions definitions */ -extern int lvbe_page_create(bvm *vm); -extern int lvbe_page_clean(bvm *vm); -extern int lvbe_page_get_scrollable(bvm *vm); -extern int lvbe_page_get_anim_time(bvm *vm); -extern int lvbe_page_set_scrollbar_mode(bvm *vm); -extern int lvbe_page_set_anim_time(bvm *vm); -extern int lvbe_page_set_scroll_propagation(bvm *vm); -extern int lvbe_page_set_edge_flash(bvm *vm); -extern int lvbe_page_set_scrollable_fit2(bvm *vm); -extern int lvbe_page_set_scrollable_fit(bvm *vm); -extern int lvbe_page_set_scrl_width(bvm *vm); -extern int lvbe_page_set_scrl_height(bvm *vm); -extern int lvbe_page_set_scrl_layout(bvm *vm); -extern int lvbe_page_get_scrollbar_mode(bvm *vm); -extern int lvbe_page_get_scroll_propagation(bvm *vm); -extern int lvbe_page_get_edge_flash(bvm *vm); -extern int lvbe_page_get_width_fit(bvm *vm); -extern int lvbe_page_get_height_fit(bvm *vm); -extern int lvbe_page_get_width_grid(bvm *vm); -extern int lvbe_page_get_height_grid(bvm *vm); -extern int lvbe_page_get_scrl_width(bvm *vm); -extern int lvbe_page_get_scrl_height(bvm *vm); -extern int lvbe_page_get_scrl_layout(bvm *vm); -extern int lvbe_page_get_scrl_fit_left(bvm *vm); -extern int lvbe_page_get_scrl_fit_right(bvm *vm); -extern int lvbe_page_get_scrl_fit_top(bvm *vm); -extern int lvbe_page_get_scrl_fit_bottom(bvm *vm); -extern int lvbe_page_on_edge(bvm *vm); -extern int lvbe_page_glue_obj(bvm *vm); -extern int lvbe_page_focus(bvm *vm); -extern int lvbe_page_scroll_hor(bvm *vm); -extern int lvbe_page_scroll_ver(bvm *vm); -extern int lvbe_page_start_edge_flash(bvm *vm); - -/* `lv_roller` external functions definitions */ -extern int lvbe_roller_create(bvm *vm); -extern int lvbe_roller_set_options(bvm *vm); -extern int lvbe_roller_set_align(bvm *vm); -extern int lvbe_roller_set_selected(bvm *vm); -extern int lvbe_roller_set_visible_row_count(bvm *vm); -extern int lvbe_roller_set_auto_fit(bvm *vm); -extern int lvbe_roller_set_anim_time(bvm *vm); -extern int lvbe_roller_get_selected(bvm *vm); -extern int lvbe_roller_get_option_cnt(bvm *vm); -extern int lvbe_roller_get_selected_str(bvm *vm); -extern int lvbe_roller_get_align(bvm *vm); -extern int lvbe_roller_get_auto_fit(bvm *vm); -extern int lvbe_roller_get_options(bvm *vm); -extern int lvbe_roller_get_anim_time(bvm *vm); - -/* `lv_slider` external functions definitions */ -extern int lvbe_slider_create(bvm *vm); -extern int lvbe_slider_set_value(bvm *vm); -extern int lvbe_slider_set_left_value(bvm *vm); -extern int lvbe_slider_set_range(bvm *vm); -extern int lvbe_slider_set_anim_time(bvm *vm); -extern int lvbe_slider_set_type(bvm *vm); -extern int lvbe_slider_get_value(bvm *vm); -extern int lvbe_slider_get_left_value(bvm *vm); -extern int lvbe_slider_get_min_value(bvm *vm); -extern int lvbe_slider_get_max_value(bvm *vm); -extern int lvbe_slider_is_dragged(bvm *vm); -extern int lvbe_slider_get_anim_time(bvm *vm); -extern int lvbe_slider_get_type(bvm *vm); - -/* `lv_spinbox` external functions definitions */ -extern int lvbe_spinbox_create(bvm *vm); -extern int lvbe_spinbox_set_rollover(bvm *vm); -extern int lvbe_spinbox_set_value(bvm *vm); -extern int lvbe_spinbox_set_digit_format(bvm *vm); -extern int lvbe_spinbox_set_step(bvm *vm); -extern int lvbe_spinbox_set_range(bvm *vm); -extern int lvbe_spinbox_set_padding_left(bvm *vm); -extern int lvbe_spinbox_get_rollover(bvm *vm); -extern int lvbe_spinbox_get_value(bvm *vm); -extern int lvbe_spinbox_get_step(bvm *vm); -extern int lvbe_spinbox_step_next(bvm *vm); -extern int lvbe_spinbox_step_prev(bvm *vm); -extern int lvbe_spinbox_increment(bvm *vm); -extern int lvbe_spinbox_decrement(bvm *vm); - -/* `lv_spinner` external functions definitions */ -extern int lvbe_spinner_create(bvm *vm); -extern int lvbe_spinner_set_arc_length(bvm *vm); -extern int lvbe_spinner_set_spin_time(bvm *vm); -extern int lvbe_spinner_set_type(bvm *vm); -extern int lvbe_spinner_set_dir(bvm *vm); -extern int lvbe_spinner_get_arc_length(bvm *vm); -extern int lvbe_spinner_get_spin_time(bvm *vm); -extern int lvbe_spinner_get_type(bvm *vm); -extern int lvbe_spinner_get_dir(bvm *vm); -extern int lvbe_spinner_anim_cb(bvm *vm); - -/* `lv_switch` external functions definitions */ -extern int lvbe_switch_create(bvm *vm); -extern int lvbe_switch_on(bvm *vm); -extern int lvbe_switch_off(bvm *vm); -extern int lvbe_switch_toggle(bvm *vm); -extern int lvbe_switch_set_anim_time(bvm *vm); -extern int lvbe_switch_get_state(bvm *vm); -extern int lvbe_switch_get_anim_time(bvm *vm); - -/* `lv_table` external functions definitions */ -extern int lvbe_table_create(bvm *vm); -extern int lvbe_table_set_cell_value(bvm *vm); -extern int lvbe_table_set_cell_value_fmt(bvm *vm); -extern int lvbe_table_set_row_cnt(bvm *vm); -extern int lvbe_table_set_col_cnt(bvm *vm); -extern int lvbe_table_set_col_width(bvm *vm); -extern int lvbe_table_set_cell_align(bvm *vm); -extern int lvbe_table_set_cell_type(bvm *vm); -extern int lvbe_table_set_cell_crop(bvm *vm); -extern int lvbe_table_set_cell_merge_right(bvm *vm); -extern int lvbe_table_get_cell_value(bvm *vm); -extern int lvbe_table_get_row_cnt(bvm *vm); -extern int lvbe_table_get_col_cnt(bvm *vm); -extern int lvbe_table_get_col_width(bvm *vm); -extern int lvbe_table_get_cell_align(bvm *vm); -extern int lvbe_table_get_cell_type(bvm *vm); -extern int lvbe_table_get_cell_crop(bvm *vm); -extern int lvbe_table_get_cell_merge_right(bvm *vm); -extern int lvbe_table_get_pressed_cell(bvm *vm); - -/* `lv_tabview` external functions definitions */ -extern int lvbe_tabview_create(bvm *vm); -extern int lvbe_tabview_add_tab(bvm *vm); -extern int lvbe_tabview_clean_tab(bvm *vm); -extern int lvbe_tabview_set_tab_act(bvm *vm); -extern int lvbe_tabview_set_tab_name(bvm *vm); -extern int lvbe_tabview_set_anim_time(bvm *vm); -extern int lvbe_tabview_set_btns_pos(bvm *vm); -extern int lvbe_tabview_get_tab_act(bvm *vm); -extern int lvbe_tabview_get_tab_count(bvm *vm); -extern int lvbe_tabview_get_tab(bvm *vm); -extern int lvbe_tabview_get_anim_time(bvm *vm); -extern int lvbe_tabview_get_btns_pos(bvm *vm); - -/* `lv_textarea` external functions definitions */ -extern int lvbe_textarea_create(bvm *vm); -extern int lvbe_textarea_add_char(bvm *vm); -extern int lvbe_textarea_add_text(bvm *vm); -extern int lvbe_textarea_del_char(bvm *vm); -extern int lvbe_textarea_del_char_forward(bvm *vm); -extern int lvbe_textarea_set_text(bvm *vm); -extern int lvbe_textarea_set_placeholder_text(bvm *vm); -extern int lvbe_textarea_set_cursor_pos(bvm *vm); -extern int lvbe_textarea_set_cursor_hidden(bvm *vm); -extern int lvbe_textarea_set_cursor_click_pos(bvm *vm); -extern int lvbe_textarea_set_pwd_mode(bvm *vm); -extern int lvbe_textarea_set_one_line(bvm *vm); -extern int lvbe_textarea_set_text_align(bvm *vm); -extern int lvbe_textarea_set_accepted_chars(bvm *vm); -extern int lvbe_textarea_set_max_length(bvm *vm); -extern int lvbe_textarea_set_insert_replace(bvm *vm); -extern int lvbe_textarea_set_scrollbar_mode(bvm *vm); -extern int lvbe_textarea_set_scroll_propagation(bvm *vm); -extern int lvbe_textarea_set_edge_flash(bvm *vm); -extern int lvbe_textarea_set_text_sel(bvm *vm); -extern int lvbe_textarea_set_pwd_show_time(bvm *vm); -extern int lvbe_textarea_set_cursor_blink_time(bvm *vm); -extern int lvbe_textarea_get_text(bvm *vm); -extern int lvbe_textarea_get_placeholder_text(bvm *vm); -extern int lvbe_textarea_get_label(bvm *vm); -extern int lvbe_textarea_get_cursor_pos(bvm *vm); -extern int lvbe_textarea_get_cursor_hidden(bvm *vm); -extern int lvbe_textarea_get_cursor_click_pos(bvm *vm); -extern int lvbe_textarea_get_pwd_mode(bvm *vm); -extern int lvbe_textarea_get_one_line(bvm *vm); -extern int lvbe_textarea_get_accepted_chars(bvm *vm); -extern int lvbe_textarea_get_max_length(bvm *vm); -extern int lvbe_textarea_get_scrollbar_mode(bvm *vm); -extern int lvbe_textarea_get_scroll_propagation(bvm *vm); -extern int lvbe_textarea_get_edge_flash(bvm *vm); -extern int lvbe_textarea_text_is_selected(bvm *vm); -extern int lvbe_textarea_get_text_sel_en(bvm *vm); -extern int lvbe_textarea_get_pwd_show_time(bvm *vm); -extern int lvbe_textarea_get_cursor_blink_time(bvm *vm); -extern int lvbe_textarea_clear_selection(bvm *vm); -extern int lvbe_textarea_cursor_right(bvm *vm); -extern int lvbe_textarea_cursor_left(bvm *vm); -extern int lvbe_textarea_cursor_down(bvm *vm); -extern int lvbe_textarea_cursor_up(bvm *vm); - -/* `lv_tileview` external functions definitions */ -extern int lvbe_tileview_create(bvm *vm); -extern int lvbe_tileview_add_element(bvm *vm); -extern int lvbe_tileview_set_valid_positions(bvm *vm); -extern int lvbe_tileview_set_tile_act(bvm *vm); -extern int lvbe_tileview_set_edge_flash(bvm *vm); -extern int lvbe_tileview_set_anim_time(bvm *vm); -extern int lvbe_tileview_get_tile_act(bvm *vm); -extern int lvbe_tileview_get_edge_flash(bvm *vm); -extern int lvbe_tileview_get_anim_time(bvm *vm); - -/* `lv_win` external functions definitions */ -extern int lvbe_win_create(bvm *vm); -extern int lvbe_win_clean(bvm *vm); -extern int lvbe_win_add_btn_right(bvm *vm); -extern int lvbe_win_add_btn_left(bvm *vm); -extern int lvbe_win_close_event_cb(bvm *vm); -extern int lvbe_win_set_title(bvm *vm); -extern int lvbe_win_set_header_height(bvm *vm); -extern int lvbe_win_set_btn_width(bvm *vm); -extern int lvbe_win_set_content_size(bvm *vm); -extern int lvbe_win_set_layout(bvm *vm); -extern int lvbe_win_set_scrollbar_mode(bvm *vm); -extern int lvbe_win_set_anim_time(bvm *vm); -extern int lvbe_win_set_drag(bvm *vm); -extern int lvbe_win_title_set_alignment(bvm *vm); -extern int lvbe_win_get_title(bvm *vm); -extern int lvbe_win_get_content(bvm *vm); -extern int lvbe_win_get_header_height(bvm *vm); -extern int lvbe_win_get_btn_width(bvm *vm); -extern int lvbe_win_get_from_btn(bvm *vm); -extern int lvbe_win_get_layout(bvm *vm); -extern int lvbe_win_get_sb_mode(bvm *vm); -extern int lvbe_win_get_anim_time(bvm *vm); -extern int lvbe_win_get_width(bvm *vm); -extern int lvbe_win_get_drag(bvm *vm); -extern int lvbe_win_title_get_alignment(bvm *vm); -extern int lvbe_win_focus(bvm *vm); -extern int lvbe_win_scroll_hor(bvm *vm); -extern int lvbe_win_scroll_ver(bvm *vm); - -/********************************************************************/ diff --git a/lib/libesp32/Berry/default/be_lv_lvgl_module.c b/lib/libesp32/Berry/default/be_lv_lvgl_module.c deleted file mode 100644 index a461d3f06..000000000 --- a/lib/libesp32/Berry/default/be_lv_lvgl_module.c +++ /dev/null @@ -1,742 +0,0 @@ -/******************************************************************** - * Generated code, don't edit - *******************************************************************/ -/******************************************************************** - * LVGL Module - *******************************************************************/ -#include "be_constobj.h" - -#ifdef USE_LVGL - -#include "lvgl.h" -#include "be_lvgl.h" - -extern int lv0_member(bvm *vm); // resolve virtual members - -extern int lv0_start(bvm *vm); - -extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic - -extern int lv0_load_montserrat_font(bvm *vm); -extern int lv0_load_seg7_font(bvm *vm); -extern int lv0_load_font(bvm *vm); -extern int lv0_load_freetype_font(bvm *vm); - -extern int lv0_screenshot(bvm *vm); - -static int lv_get_hor_res(void) { - return lv_disp_get_hor_res(lv_disp_get_default()); -} -static int lv_get_ver_res(bvm *vm) { - return lv_disp_get_ver_res(lv_disp_get_default()); -} - -/* `lv` methods */ -const lvbe_call_c_t lv_func[] = { - // resolution - { "get_hor_res", (void*) &lv_get_hor_res, "i", "" }, - { "get_ver_res", (void*) &lv_get_ver_res, "i", "" }, - - // layers - { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" }, - { "layer_top", (void*) &lv_layer_top, "lv_obj", "" }, - - // screens - { "scr_act", (void*) &lv_scr_act, "lv_obj", "" }, - { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" }, - { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" }, -}; -const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]); - - - - -typedef struct be_constint_t { - const char * name; - int32_t value; -} be_constint_t; - -const be_constint_t lv0_constants[] = { - - { "ALIGN_CENTER", LV_ALIGN_CENTER }, - { "ALIGN_IN_BOTTOM_LEFT", LV_ALIGN_IN_BOTTOM_LEFT }, - { "ALIGN_IN_BOTTOM_MID", LV_ALIGN_IN_BOTTOM_MID }, - { "ALIGN_IN_BOTTOM_RIGHT", LV_ALIGN_IN_BOTTOM_RIGHT }, - { "ALIGN_IN_LEFT_MID", LV_ALIGN_IN_LEFT_MID }, - { "ALIGN_IN_RIGHT_MID", LV_ALIGN_IN_RIGHT_MID }, - { "ALIGN_IN_TOP_LEFT", LV_ALIGN_IN_TOP_LEFT }, - { "ALIGN_IN_TOP_MID", LV_ALIGN_IN_TOP_MID }, - { "ALIGN_IN_TOP_RIGHT", LV_ALIGN_IN_TOP_RIGHT }, - { "ALIGN_OUT_BOTTOM_LEFT", LV_ALIGN_OUT_BOTTOM_LEFT }, - { "ALIGN_OUT_BOTTOM_MID", LV_ALIGN_OUT_BOTTOM_MID }, - { "ALIGN_OUT_BOTTOM_RIGHT", LV_ALIGN_OUT_BOTTOM_RIGHT }, - { "ALIGN_OUT_LEFT_BOTTOM", LV_ALIGN_OUT_LEFT_BOTTOM }, - { "ALIGN_OUT_LEFT_MID", LV_ALIGN_OUT_LEFT_MID }, - { "ALIGN_OUT_LEFT_TOP", LV_ALIGN_OUT_LEFT_TOP }, - { "ALIGN_OUT_RIGHT_BOTTOM", LV_ALIGN_OUT_RIGHT_BOTTOM }, - { "ALIGN_OUT_RIGHT_MID", LV_ALIGN_OUT_RIGHT_MID }, - { "ALIGN_OUT_RIGHT_TOP", LV_ALIGN_OUT_RIGHT_TOP }, - { "ALIGN_OUT_TOP_LEFT", LV_ALIGN_OUT_TOP_LEFT }, - { "ALIGN_OUT_TOP_MID", LV_ALIGN_OUT_TOP_MID }, - { "ALIGN_OUT_TOP_RIGHT", LV_ALIGN_OUT_TOP_RIGHT }, - { "ANIM_OFF", LV_ANIM_OFF }, - { "ANIM_ON", LV_ANIM_ON }, - { "AQUA", 65535 }, - { "ARC_PART_BG", LV_ARC_PART_BG }, - { "ARC_PART_INDIC", LV_ARC_PART_INDIC }, - { "ARC_PART_KNOB", LV_ARC_PART_KNOB }, - { "ARC_TYPE_NORMAL", LV_ARC_TYPE_NORMAL }, - { "ARC_TYPE_REVERSE", LV_ARC_TYPE_REVERSE }, - { "ARC_TYPE_SYMMETRIC", LV_ARC_TYPE_SYMMETRIC }, - { "BAR_TYPE_CUSTOM", LV_BAR_TYPE_CUSTOM }, - { "BAR_TYPE_NORMAL", LV_BAR_TYPE_NORMAL }, - { "BAR_TYPE_SYMMETRICAL", LV_BAR_TYPE_SYMMETRICAL }, - { "BLACK", 0 }, - { "BLEND_MODE_ADDITIVE", LV_BLEND_MODE_ADDITIVE }, - { "BLEND_MODE_NORMAL", LV_BLEND_MODE_NORMAL }, - { "BLEND_MODE_SUBTRACTIVE", LV_BLEND_MODE_SUBTRACTIVE }, - { "BLUE", 255 }, - { "BORDER_SIDE_BOTTOM", LV_BORDER_SIDE_BOTTOM }, - { "BORDER_SIDE_FULL", LV_BORDER_SIDE_FULL }, - { "BORDER_SIDE_INTERNAL", LV_BORDER_SIDE_INTERNAL }, - { "BORDER_SIDE_LEFT", LV_BORDER_SIDE_LEFT }, - { "BORDER_SIDE_NONE", LV_BORDER_SIDE_NONE }, - { "BORDER_SIDE_RIGHT", LV_BORDER_SIDE_RIGHT }, - { "BORDER_SIDE_TOP", LV_BORDER_SIDE_TOP }, - { "BTNMATRIX_CTRL_CHECKABLE", LV_BTNMATRIX_CTRL_CHECKABLE }, - { "BTNMATRIX_CTRL_CHECK_STATE", LV_BTNMATRIX_CTRL_CHECK_STATE }, - { "BTNMATRIX_CTRL_CLICK_TRIG", LV_BTNMATRIX_CTRL_CLICK_TRIG }, - { "BTNMATRIX_CTRL_DISABLED", LV_BTNMATRIX_CTRL_DISABLED }, - { "BTNMATRIX_CTRL_HIDDEN", LV_BTNMATRIX_CTRL_HIDDEN }, - { "BTNMATRIX_CTRL_NO_REPEAT", LV_BTNMATRIX_CTRL_NO_REPEAT }, - { "BTN_STATE_CHECKED_DISABLED", LV_BTN_STATE_CHECKED_DISABLED }, - { "BTN_STATE_CHECKED_PRESSED", LV_BTN_STATE_CHECKED_PRESSED }, - { "BTN_STATE_CHECKED_RELEASED", LV_BTN_STATE_CHECKED_RELEASED }, - { "BTN_STATE_DISABLED", LV_BTN_STATE_DISABLED }, - { "BTN_STATE_PRESSED", LV_BTN_STATE_PRESSED }, - { "BTN_STATE_RELEASED", LV_BTN_STATE_RELEASED }, - { "CALENDAR_PART_BG", LV_CALENDAR_PART_BG }, - { "CALENDAR_PART_DATE", LV_CALENDAR_PART_DATE }, - { "CALENDAR_PART_DAY_NAMES", LV_CALENDAR_PART_DAY_NAMES }, - { "CALENDAR_PART_HEADER", LV_CALENDAR_PART_HEADER }, - { "CHART_AXIS_DRAW_LAST_TICK", LV_CHART_AXIS_DRAW_LAST_TICK }, - { "CHART_AXIS_INVERSE_LABELS_ORDER", LV_CHART_AXIS_INVERSE_LABELS_ORDER }, - { "CHART_AXIS_PRIMARY_Y", LV_CHART_AXIS_PRIMARY_Y }, - { "CHART_AXIS_SECONDARY_Y", LV_CHART_AXIS_SECONDARY_Y }, - { "CHART_AXIS_SKIP_LAST_TICK", LV_CHART_AXIS_SKIP_LAST_TICK }, - { "CHART_CURSOR_DOWN", LV_CHART_CURSOR_DOWN }, - { "CHART_CURSOR_LEFT", LV_CHART_CURSOR_LEFT }, - { "CHART_CURSOR_NONE", LV_CHART_CURSOR_NONE }, - { "CHART_CURSOR_RIGHT", LV_CHART_CURSOR_RIGHT }, - { "CHART_CURSOR_UP", LV_CHART_CURSOR_UP }, - { "CHART_PART_BG", LV_CHART_PART_BG }, - { "CHART_PART_CURSOR", LV_CHART_PART_CURSOR }, - { "CHART_PART_SERIES", LV_CHART_PART_SERIES }, - { "CHART_PART_SERIES_BG", LV_CHART_PART_SERIES_BG }, - { "CHART_TYPE_COLUMN", LV_CHART_TYPE_COLUMN }, - { "CHART_TYPE_LINE", LV_CHART_TYPE_LINE }, - { "CHART_TYPE_NONE", LV_CHART_TYPE_NONE }, - { "CHART_UPDATE_MODE_CIRCULAR", LV_CHART_UPDATE_MODE_CIRCULAR }, - { "CHART_UPDATE_MODE_SHIFT", LV_CHART_UPDATE_MODE_SHIFT }, - { "CHECKBOX_PART_BG", LV_CHECKBOX_PART_BG }, - { "CHECKBOX_PART_BULLET", LV_CHECKBOX_PART_BULLET }, - { "CPICKER_COLOR_MODE_HUE", LV_CPICKER_COLOR_MODE_HUE }, - { "CPICKER_COLOR_MODE_SATURATION", LV_CPICKER_COLOR_MODE_SATURATION }, - { "CPICKER_COLOR_MODE_VALUE", LV_CPICKER_COLOR_MODE_VALUE }, - { "CPICKER_PART_KNOB", LV_CPICKER_PART_KNOB }, - { "CPICKER_PART_MAIN", LV_CPICKER_PART_MAIN }, - { "CPICKER_TYPE_DISC", LV_CPICKER_TYPE_DISC }, - { "CPICKER_TYPE_RECT", LV_CPICKER_TYPE_RECT }, - { "CYAN", 65535 }, - { "DISP_ROT_180", LV_DISP_ROT_180 }, - { "DISP_ROT_270", LV_DISP_ROT_270 }, - { "DISP_ROT_90", LV_DISP_ROT_90 }, - { "DISP_ROT_NONE", LV_DISP_ROT_NONE }, - { "DISP_SIZE_EXTRA_LARGE", LV_DISP_SIZE_EXTRA_LARGE }, - { "DISP_SIZE_LARGE", LV_DISP_SIZE_LARGE }, - { "DISP_SIZE_MEDIUM", LV_DISP_SIZE_MEDIUM }, - { "DISP_SIZE_SMALL", LV_DISP_SIZE_SMALL }, - { "DRAG_DIR_BOTH", LV_DRAG_DIR_BOTH }, - { "DRAG_DIR_HOR", LV_DRAG_DIR_HOR }, - { "DRAG_DIR_ONE", LV_DRAG_DIR_ONE }, - { "DRAG_DIR_VER", LV_DRAG_DIR_VER }, - { "DROPDOWN_DIR_DOWN", LV_DROPDOWN_DIR_DOWN }, - { "DROPDOWN_DIR_LEFT", LV_DROPDOWN_DIR_LEFT }, - { "DROPDOWN_DIR_RIGHT", LV_DROPDOWN_DIR_RIGHT }, - { "DROPDOWN_DIR_UP", LV_DROPDOWN_DIR_UP }, - { "DROPDOWN_PART_LIST", LV_DROPDOWN_PART_LIST }, - { "DROPDOWN_PART_MAIN", LV_DROPDOWN_PART_MAIN }, - { "DROPDOWN_PART_SCROLLBAR", LV_DROPDOWN_PART_SCROLLBAR }, - { "DROPDOWN_PART_SELECTED", LV_DROPDOWN_PART_SELECTED }, - { "EVENT_APPLY", LV_EVENT_APPLY }, - { "EVENT_CANCEL", LV_EVENT_CANCEL }, - { "EVENT_CLICKED", LV_EVENT_CLICKED }, - { "EVENT_DEFOCUSED", LV_EVENT_DEFOCUSED }, - { "EVENT_DELETE", LV_EVENT_DELETE }, - { "EVENT_DRAG_BEGIN", LV_EVENT_DRAG_BEGIN }, - { "EVENT_DRAG_END", LV_EVENT_DRAG_END }, - { "EVENT_DRAG_THROW_BEGIN", LV_EVENT_DRAG_THROW_BEGIN }, - { "EVENT_FOCUSED", LV_EVENT_FOCUSED }, - { "EVENT_GESTURE", LV_EVENT_GESTURE }, - { "EVENT_INSERT", LV_EVENT_INSERT }, - { "EVENT_KEY", LV_EVENT_KEY }, - { "EVENT_LEAVE", LV_EVENT_LEAVE }, - { "EVENT_LONG_PRESSED", LV_EVENT_LONG_PRESSED }, - { "EVENT_LONG_PRESSED_REPEAT", LV_EVENT_LONG_PRESSED_REPEAT }, - { "EVENT_PRESSED", LV_EVENT_PRESSED }, - { "EVENT_PRESSING", LV_EVENT_PRESSING }, - { "EVENT_PRESS_LOST", LV_EVENT_PRESS_LOST }, - { "EVENT_REFRESH", LV_EVENT_REFRESH }, - { "EVENT_RELEASED", LV_EVENT_RELEASED }, - { "EVENT_SHORT_CLICKED", LV_EVENT_SHORT_CLICKED }, - { "EVENT_VALUE_CHANGED", LV_EVENT_VALUE_CHANGED }, - { "FIT_MAX", LV_FIT_MAX }, - { "FIT_NONE", LV_FIT_NONE }, - { "FIT_PARENT", LV_FIT_PARENT }, - { "FIT_TIGHT", LV_FIT_TIGHT }, - { "FS_MODE_RD", LV_FS_MODE_RD }, - { "FS_MODE_WR", LV_FS_MODE_WR }, - { "FS_RES_BUSY", LV_FS_RES_BUSY }, - { "FS_RES_DENIED", LV_FS_RES_DENIED }, - { "FS_RES_FS_ERR", LV_FS_RES_FS_ERR }, - { "FS_RES_FULL", LV_FS_RES_FULL }, - { "FS_RES_HW_ERR", LV_FS_RES_HW_ERR }, - { "FS_RES_INV_PARAM", LV_FS_RES_INV_PARAM }, - { "FS_RES_LOCKED", LV_FS_RES_LOCKED }, - { "FS_RES_NOT_EX", LV_FS_RES_NOT_EX }, - { "FS_RES_NOT_IMP", LV_FS_RES_NOT_IMP }, - { "FS_RES_OK", LV_FS_RES_OK }, - { "FS_RES_OUT_OF_MEM", LV_FS_RES_OUT_OF_MEM }, - { "FS_RES_TOUT", LV_FS_RES_TOUT }, - { "FS_RES_UNKNOWN", LV_FS_RES_UNKNOWN }, - { "GAUGE_PART_MAIN", LV_GAUGE_PART_MAIN }, - { "GAUGE_PART_MAJOR", LV_GAUGE_PART_MAJOR }, - { "GAUGE_PART_NEEDLE", LV_GAUGE_PART_NEEDLE }, - { "GESTURE_DIR_BOTTOM", LV_GESTURE_DIR_BOTTOM }, - { "GESTURE_DIR_LEFT", LV_GESTURE_DIR_LEFT }, - { "GESTURE_DIR_RIGHT", LV_GESTURE_DIR_RIGHT }, - { "GESTURE_DIR_TOP", LV_GESTURE_DIR_TOP }, - { "GRAD_DIR_HOR", LV_GRAD_DIR_HOR }, - { "GRAD_DIR_NONE", LV_GRAD_DIR_NONE }, - { "GRAD_DIR_VER", LV_GRAD_DIR_VER }, - { "GRAY", 8421504 }, - { "GREEN", 32768 }, - { "INDEV_STATE_PR", LV_INDEV_STATE_PR }, - { "INDEV_STATE_REL", LV_INDEV_STATE_REL }, - { "KEYBOARD_MODE_NUM", LV_KEYBOARD_MODE_NUM }, - { "KEYBOARD_MODE_SPECIAL", LV_KEYBOARD_MODE_SPECIAL }, - { "KEYBOARD_MODE_TEXT_LOWER", LV_KEYBOARD_MODE_TEXT_LOWER }, - { "KEYBOARD_MODE_TEXT_UPPER", LV_KEYBOARD_MODE_TEXT_UPPER }, - { "KEYBOARD_PART_BG", LV_KEYBOARD_PART_BG }, - { "KEYBOARD_PART_BTN", LV_KEYBOARD_PART_BTN }, - { "KEY_BACKSPACE", LV_KEY_BACKSPACE }, - { "KEY_DEL", LV_KEY_DEL }, - { "KEY_DOWN", LV_KEY_DOWN }, - { "KEY_END", LV_KEY_END }, - { "KEY_ENTER", LV_KEY_ENTER }, - { "KEY_ESC", LV_KEY_ESC }, - { "KEY_HOME", LV_KEY_HOME }, - { "KEY_LEFT", LV_KEY_LEFT }, - { "KEY_NEXT", LV_KEY_NEXT }, - { "KEY_PREV", LV_KEY_PREV }, - { "KEY_RIGHT", LV_KEY_RIGHT }, - { "KEY_UP", LV_KEY_UP }, - { "LABEL_ALIGN_AUTO", LV_LABEL_ALIGN_AUTO }, - { "LABEL_ALIGN_CENTER", LV_LABEL_ALIGN_CENTER }, - { "LABEL_ALIGN_LEFT", LV_LABEL_ALIGN_LEFT }, - { "LABEL_ALIGN_RIGHT", LV_LABEL_ALIGN_RIGHT }, - { "LABEL_LONG_BREAK", LV_LABEL_LONG_BREAK }, - { "LABEL_LONG_CROP", LV_LABEL_LONG_CROP }, - { "LABEL_LONG_DOT", LV_LABEL_LONG_DOT }, - { "LABEL_LONG_EXPAND", LV_LABEL_LONG_EXPAND }, - { "LABEL_LONG_SROLL", LV_LABEL_LONG_SROLL }, - { "LABEL_LONG_SROLL_CIRC", LV_LABEL_LONG_SROLL_CIRC }, - { "LAYOUT_CENTER", LV_LAYOUT_CENTER }, - { "LAYOUT_COLUMN_LEFT", LV_LAYOUT_COLUMN_LEFT }, - { "LAYOUT_COLUMN_MID", LV_LAYOUT_COLUMN_MID }, - { "LAYOUT_COLUMN_RIGHT", LV_LAYOUT_COLUMN_RIGHT }, - { "LAYOUT_GRID", LV_LAYOUT_GRID }, - { "LAYOUT_OFF", LV_LAYOUT_OFF }, - { "LAYOUT_PRETTY_BOTTOM", LV_LAYOUT_PRETTY_BOTTOM }, - { "LAYOUT_PRETTY_MID", LV_LAYOUT_PRETTY_MID }, - { "LAYOUT_PRETTY_TOP", LV_LAYOUT_PRETTY_TOP }, - { "LAYOUT_ROW_BOTTOM", LV_LAYOUT_ROW_BOTTOM }, - { "LAYOUT_ROW_MID", LV_LAYOUT_ROW_MID }, - { "LAYOUT_ROW_TOP", LV_LAYOUT_ROW_TOP }, - { "LED_PART_MAIN", LV_LED_PART_MAIN }, - { "LIME", 65280 }, - { "LINEMETER_PART_MAIN", LV_LINEMETER_PART_MAIN }, - { "LIST_PART_BG", LV_LIST_PART_BG }, - { "LIST_PART_EDGE_FLASH", LV_LIST_PART_EDGE_FLASH }, - { "LIST_PART_SCROLLBAR", LV_LIST_PART_SCROLLBAR }, - { "MAGENTA", 16711935 }, - { "MAROON", 8388608 }, - { "MSGBOX_PART_BG", LV_MSGBOX_PART_BG }, - { "MSGBOX_PART_BTN", LV_MSGBOX_PART_BTN }, - { "MSGBOX_PART_BTN_BG", LV_MSGBOX_PART_BTN_BG }, - { "NAVY", 128 }, - { "OBJMASK_PART_MAIN", LV_OBJMASK_PART_MAIN }, - { "OBJ_PART_ALL", LV_OBJ_PART_ALL }, - { "OBJ_PART_MAIN", LV_OBJ_PART_MAIN }, - { "OLIVE", 8421376 }, - { "OPA_0", LV_OPA_0 }, - { "OPA_10", LV_OPA_10 }, - { "OPA_100", LV_OPA_100 }, - { "OPA_20", LV_OPA_20 }, - { "OPA_30", LV_OPA_30 }, - { "OPA_40", LV_OPA_40 }, - { "OPA_50", LV_OPA_50 }, - { "OPA_60", LV_OPA_60 }, - { "OPA_70", LV_OPA_70 }, - { "OPA_80", LV_OPA_80 }, - { "OPA_90", LV_OPA_90 }, - { "OPA_COVER", LV_OPA_COVER }, - { "OPA_TRANSP", LV_OPA_TRANSP }, - { "PAGE_EDGE_BOTTOM", LV_PAGE_EDGE_BOTTOM }, - { "PAGE_EDGE_LEFT", LV_PAGE_EDGE_LEFT }, - { "PAGE_EDGE_RIGHT", LV_PAGE_EDGE_RIGHT }, - { "PAGE_EDGE_TOP", LV_PAGE_EDGE_TOP }, - { "PAGE_PART_BG", LV_PAGE_PART_BG }, - { "PAGE_PART_EDGE_FLASH", LV_PAGE_PART_EDGE_FLASH }, - { "PAGE_PART_SCROLLABLE", LV_PAGE_PART_SCROLLABLE }, - { "PAGE_PART_SCROLLBAR", LV_PAGE_PART_SCROLLBAR }, - { "PROTECT_CHILD_CHG", LV_PROTECT_CHILD_CHG }, - { "PROTECT_CLICK_FOCUS", LV_PROTECT_CLICK_FOCUS }, - { "PROTECT_EVENT_TO_DISABLED", LV_PROTECT_EVENT_TO_DISABLED }, - { "PROTECT_FOLLOW", LV_PROTECT_FOLLOW }, - { "PROTECT_NONE", LV_PROTECT_NONE }, - { "PROTECT_PARENT", LV_PROTECT_PARENT }, - { "PROTECT_POS", LV_PROTECT_POS }, - { "PROTECT_PRESS_LOST", LV_PROTECT_PRESS_LOST }, - { "PURPLE", 8388736 }, - { "RED", 16711680 }, - { "ROLLER_MODE_INFINITE", LV_ROLLER_MODE_INFINITE }, - { "ROLLER_MODE_NORMAL", LV_ROLLER_MODE_NORMAL }, - { "ROLLER_PART_BG", LV_ROLLER_PART_BG }, - { "ROLLER_PART_SELECTED", LV_ROLLER_PART_SELECTED }, - { "SCROLLBAR_MODE_AUTO", LV_SCROLLBAR_MODE_AUTO }, - { "SCROLLBAR_MODE_DRAG", LV_SCROLLBAR_MODE_DRAG }, - { "SCROLLBAR_MODE_HIDE", LV_SCROLLBAR_MODE_HIDE }, - { "SCROLLBAR_MODE_OFF", LV_SCROLLBAR_MODE_OFF }, - { "SCROLLBAR_MODE_ON", LV_SCROLLBAR_MODE_ON }, - { "SCROLLBAR_MODE_UNHIDE", LV_SCROLLBAR_MODE_UNHIDE }, - { "SCR_LOAD_ANIM_FADE_ON", LV_SCR_LOAD_ANIM_FADE_ON }, - { "SCR_LOAD_ANIM_MOVE_BOTTOM", LV_SCR_LOAD_ANIM_MOVE_BOTTOM }, - { "SCR_LOAD_ANIM_MOVE_LEFT", LV_SCR_LOAD_ANIM_MOVE_LEFT }, - { "SCR_LOAD_ANIM_MOVE_RIGHT", LV_SCR_LOAD_ANIM_MOVE_RIGHT }, - { "SCR_LOAD_ANIM_MOVE_TOP", LV_SCR_LOAD_ANIM_MOVE_TOP }, - { "SCR_LOAD_ANIM_NONE", LV_SCR_LOAD_ANIM_NONE }, - { "SCR_LOAD_ANIM_OVER_BOTTOM", LV_SCR_LOAD_ANIM_OVER_BOTTOM }, - { "SCR_LOAD_ANIM_OVER_LEFT", LV_SCR_LOAD_ANIM_OVER_LEFT }, - { "SCR_LOAD_ANIM_OVER_RIGHT", LV_SCR_LOAD_ANIM_OVER_RIGHT }, - { "SCR_LOAD_ANIM_OVER_TOP", LV_SCR_LOAD_ANIM_OVER_TOP }, - { "SILVER", 12632256 }, - { "SLIDER_PART_BG", LV_SLIDER_PART_BG }, - { "SLIDER_PART_INDIC", LV_SLIDER_PART_INDIC }, - { "SLIDER_PART_KNOB", LV_SLIDER_PART_KNOB }, - { "SLIDER_TYPE_NORMAL", LV_SLIDER_TYPE_NORMAL }, - { "SLIDER_TYPE_RANGE", LV_SLIDER_TYPE_RANGE }, - { "SLIDER_TYPE_SYMMETRICAL", LV_SLIDER_TYPE_SYMMETRICAL }, - { "SPINBOX_PART_BG", LV_SPINBOX_PART_BG }, - { "SPINBOX_PART_CURSOR", LV_SPINBOX_PART_CURSOR }, - { "SPINNER_DIR_BACKWARD", LV_SPINNER_DIR_BACKWARD }, - { "SPINNER_DIR_FORWARD", LV_SPINNER_DIR_FORWARD }, - { "SPINNER_PART_BG", LV_SPINNER_PART_BG }, - { "SPINNER_PART_INDIC", LV_SPINNER_PART_INDIC }, - { "SPINNER_TYPE_CONSTANT_ARC", LV_SPINNER_TYPE_CONSTANT_ARC }, - { "SPINNER_TYPE_FILLSPIN_ARC", LV_SPINNER_TYPE_FILLSPIN_ARC }, - { "SPINNER_TYPE_SPINNING_ARC", LV_SPINNER_TYPE_SPINNING_ARC }, - { "STATE_CHECKED", LV_STATE_CHECKED }, - { "STATE_DEFAULT", LV_STATE_DEFAULT }, - { "STATE_DISABLED", LV_STATE_DISABLED }, - { "STATE_EDITED", LV_STATE_EDITED }, - { "STATE_FOCUSED", LV_STATE_FOCUSED }, - { "STATE_HOVERED", LV_STATE_HOVERED }, - { "STATE_PRESSED", LV_STATE_PRESSED }, - { "STYLE_BG_BLEND_MODE", LV_STYLE_BG_BLEND_MODE }, - { "STYLE_BG_COLOR", LV_STYLE_BG_COLOR }, - { "STYLE_BG_GRAD_COLOR", LV_STYLE_BG_GRAD_COLOR }, - { "STYLE_BG_GRAD_DIR", LV_STYLE_BG_GRAD_DIR }, - { "STYLE_BG_GRAD_STOP", LV_STYLE_BG_GRAD_STOP }, - { "STYLE_BG_MAIN_STOP", LV_STYLE_BG_MAIN_STOP }, - { "STYLE_BG_OPA", LV_STYLE_BG_OPA }, - { "STYLE_BORDER_BLEND_MODE", LV_STYLE_BORDER_BLEND_MODE }, - { "STYLE_BORDER_COLOR", LV_STYLE_BORDER_COLOR }, - { "STYLE_BORDER_OPA", LV_STYLE_BORDER_OPA }, - { "STYLE_BORDER_POST", LV_STYLE_BORDER_POST }, - { "STYLE_BORDER_SIDE", LV_STYLE_BORDER_SIDE }, - { "STYLE_BORDER_WIDTH", LV_STYLE_BORDER_WIDTH }, - { "STYLE_CLIP_CORNER", LV_STYLE_CLIP_CORNER }, - { "STYLE_IMAGE_BLEND_MODE", LV_STYLE_IMAGE_BLEND_MODE }, - { "STYLE_IMAGE_OPA", LV_STYLE_IMAGE_OPA }, - { "STYLE_IMAGE_RECOLOR", LV_STYLE_IMAGE_RECOLOR }, - { "STYLE_IMAGE_RECOLOR_OPA", LV_STYLE_IMAGE_RECOLOR_OPA }, - { "STYLE_LINE_BLEND_MODE", LV_STYLE_LINE_BLEND_MODE }, - { "STYLE_LINE_COLOR", LV_STYLE_LINE_COLOR }, - { "STYLE_LINE_DASH_GAP", LV_STYLE_LINE_DASH_GAP }, - { "STYLE_LINE_DASH_WIDTH", LV_STYLE_LINE_DASH_WIDTH }, - { "STYLE_LINE_OPA", LV_STYLE_LINE_OPA }, - { "STYLE_LINE_ROUNDED", LV_STYLE_LINE_ROUNDED }, - { "STYLE_LINE_WIDTH", LV_STYLE_LINE_WIDTH }, - { "STYLE_MARGIN_BOTTOM", LV_STYLE_MARGIN_BOTTOM }, - { "STYLE_MARGIN_LEFT", LV_STYLE_MARGIN_LEFT }, - { "STYLE_MARGIN_RIGHT", LV_STYLE_MARGIN_RIGHT }, - { "STYLE_MARGIN_TOP", LV_STYLE_MARGIN_TOP }, - { "STYLE_OPA_SCALE", LV_STYLE_OPA_SCALE }, - { "STYLE_OUTLINE_BLEND_MODE", LV_STYLE_OUTLINE_BLEND_MODE }, - { "STYLE_OUTLINE_COLOR", LV_STYLE_OUTLINE_COLOR }, - { "STYLE_OUTLINE_OPA", LV_STYLE_OUTLINE_OPA }, - { "STYLE_OUTLINE_PAD", LV_STYLE_OUTLINE_PAD }, - { "STYLE_OUTLINE_WIDTH", LV_STYLE_OUTLINE_WIDTH }, - { "STYLE_PAD_BOTTOM", LV_STYLE_PAD_BOTTOM }, - { "STYLE_PAD_INNER", LV_STYLE_PAD_INNER }, - { "STYLE_PAD_LEFT", LV_STYLE_PAD_LEFT }, - { "STYLE_PAD_RIGHT", LV_STYLE_PAD_RIGHT }, - { "STYLE_PAD_TOP", LV_STYLE_PAD_TOP }, - { "STYLE_PATTERN_BLEND_MODE", LV_STYLE_PATTERN_BLEND_MODE }, - { "STYLE_PATTERN_IMAGE", LV_STYLE_PATTERN_IMAGE }, - { "STYLE_PATTERN_OPA", LV_STYLE_PATTERN_OPA }, - { "STYLE_PATTERN_RECOLOR", LV_STYLE_PATTERN_RECOLOR }, - { "STYLE_PATTERN_RECOLOR_OPA", LV_STYLE_PATTERN_RECOLOR_OPA }, - { "STYLE_PATTERN_REPEAT", LV_STYLE_PATTERN_REPEAT }, - { "STYLE_RADIUS", LV_STYLE_RADIUS }, - { "STYLE_SCALE_BORDER_WIDTH", LV_STYLE_SCALE_BORDER_WIDTH }, - { "STYLE_SCALE_END_BORDER_WIDTH", LV_STYLE_SCALE_END_BORDER_WIDTH }, - { "STYLE_SCALE_END_COLOR", LV_STYLE_SCALE_END_COLOR }, - { "STYLE_SCALE_END_LINE_WIDTH", LV_STYLE_SCALE_END_LINE_WIDTH }, - { "STYLE_SCALE_GRAD_COLOR", LV_STYLE_SCALE_GRAD_COLOR }, - { "STYLE_SCALE_WIDTH", LV_STYLE_SCALE_WIDTH }, - { "STYLE_SHADOW_BLEND_MODE", LV_STYLE_SHADOW_BLEND_MODE }, - { "STYLE_SHADOW_COLOR", LV_STYLE_SHADOW_COLOR }, - { "STYLE_SHADOW_OFS_X", LV_STYLE_SHADOW_OFS_X }, - { "STYLE_SHADOW_OFS_Y", LV_STYLE_SHADOW_OFS_Y }, - { "STYLE_SHADOW_OPA", LV_STYLE_SHADOW_OPA }, - { "STYLE_SHADOW_SPREAD", LV_STYLE_SHADOW_SPREAD }, - { "STYLE_SHADOW_WIDTH", LV_STYLE_SHADOW_WIDTH }, - { "STYLE_SIZE", LV_STYLE_SIZE }, - { "STYLE_TEXT_BLEND_MODE", LV_STYLE_TEXT_BLEND_MODE }, - { "STYLE_TEXT_COLOR", LV_STYLE_TEXT_COLOR }, - { "STYLE_TEXT_DECOR", LV_STYLE_TEXT_DECOR }, - { "STYLE_TEXT_FONT", LV_STYLE_TEXT_FONT }, - { "STYLE_TEXT_LETTER_SPACE", LV_STYLE_TEXT_LETTER_SPACE }, - { "STYLE_TEXT_LINE_SPACE", LV_STYLE_TEXT_LINE_SPACE }, - { "STYLE_TEXT_OPA", LV_STYLE_TEXT_OPA }, - { "STYLE_TEXT_SEL_BG_COLOR", LV_STYLE_TEXT_SEL_BG_COLOR }, - { "STYLE_TEXT_SEL_COLOR", LV_STYLE_TEXT_SEL_COLOR }, - { "STYLE_TRANSFORM_ANGLE", LV_STYLE_TRANSFORM_ANGLE }, - { "STYLE_TRANSFORM_HEIGHT", LV_STYLE_TRANSFORM_HEIGHT }, - { "STYLE_TRANSFORM_WIDTH", LV_STYLE_TRANSFORM_WIDTH }, - { "STYLE_TRANSFORM_ZOOM", LV_STYLE_TRANSFORM_ZOOM }, - { "STYLE_TRANSITION_DELAY", LV_STYLE_TRANSITION_DELAY }, - { "STYLE_TRANSITION_PATH", LV_STYLE_TRANSITION_PATH }, - { "STYLE_TRANSITION_PROP_1", LV_STYLE_TRANSITION_PROP_1 }, - { "STYLE_TRANSITION_PROP_2", LV_STYLE_TRANSITION_PROP_2 }, - { "STYLE_TRANSITION_PROP_3", LV_STYLE_TRANSITION_PROP_3 }, - { "STYLE_TRANSITION_PROP_4", LV_STYLE_TRANSITION_PROP_4 }, - { "STYLE_TRANSITION_PROP_5", LV_STYLE_TRANSITION_PROP_5 }, - { "STYLE_TRANSITION_PROP_6", LV_STYLE_TRANSITION_PROP_6 }, - { "STYLE_TRANSITION_TIME", LV_STYLE_TRANSITION_TIME }, - { "STYLE_VALUE_ALIGN", LV_STYLE_VALUE_ALIGN }, - { "STYLE_VALUE_BLEND_MODE", LV_STYLE_VALUE_BLEND_MODE }, - { "STYLE_VALUE_COLOR", LV_STYLE_VALUE_COLOR }, - { "STYLE_VALUE_FONT", LV_STYLE_VALUE_FONT }, - { "STYLE_VALUE_LETTER_SPACE", LV_STYLE_VALUE_LETTER_SPACE }, - { "STYLE_VALUE_LINE_SPACE", LV_STYLE_VALUE_LINE_SPACE }, - { "STYLE_VALUE_OFS_X", LV_STYLE_VALUE_OFS_X }, - { "STYLE_VALUE_OFS_Y", LV_STYLE_VALUE_OFS_Y }, - { "STYLE_VALUE_OPA", LV_STYLE_VALUE_OPA }, - { "STYLE_VALUE_STR", LV_STYLE_VALUE_STR }, - { "SWITCH_PART_BG", LV_SWITCH_PART_BG }, - { "SWITCH_PART_INDIC", LV_SWITCH_PART_INDIC }, - { "SWITCH_PART_KNOB", LV_SWITCH_PART_KNOB }, - { "TABLE_PART_BG", LV_TABLE_PART_BG }, - { "TABLE_PART_CELL1", LV_TABLE_PART_CELL1 }, - { "TABLE_PART_CELL2", LV_TABLE_PART_CELL2 }, - { "TABLE_PART_CELL3", LV_TABLE_PART_CELL3 }, - { "TABLE_PART_CELL4", LV_TABLE_PART_CELL4 }, - { "TABVIEW_PART_BG", LV_TABVIEW_PART_BG }, - { "TABVIEW_PART_BG_SCROLLABLE", LV_TABVIEW_PART_BG_SCROLLABLE }, - { "TABVIEW_PART_INDIC", LV_TABVIEW_PART_INDIC }, - { "TABVIEW_PART_TAB_BG", LV_TABVIEW_PART_TAB_BG }, - { "TABVIEW_PART_TAB_BTN", LV_TABVIEW_PART_TAB_BTN }, - { "TABVIEW_TAB_POS_BOTTOM", LV_TABVIEW_TAB_POS_BOTTOM }, - { "TABVIEW_TAB_POS_LEFT", LV_TABVIEW_TAB_POS_LEFT }, - { "TABVIEW_TAB_POS_NONE", LV_TABVIEW_TAB_POS_NONE }, - { "TABVIEW_TAB_POS_RIGHT", LV_TABVIEW_TAB_POS_RIGHT }, - { "TABVIEW_TAB_POS_TOP", LV_TABVIEW_TAB_POS_TOP }, - { "TEAL", 32896 }, - { "TEXTAREA_CURSOR_LAST", LV_TEXTAREA_CURSOR_LAST }, - { "TEXTAREA_PART_BG", LV_TEXTAREA_PART_BG }, - { "TEXTAREA_PART_CURSOR", LV_TEXTAREA_PART_CURSOR }, - { "TEXTAREA_PART_EDGE_FLASH", LV_TEXTAREA_PART_EDGE_FLASH }, - { "TEXTAREA_PART_PLACEHOLDER", LV_TEXTAREA_PART_PLACEHOLDER }, - { "TEXTAREA_PART_SCROLLBAR", LV_TEXTAREA_PART_SCROLLBAR }, - { "TEXT_DECOR_NONE", LV_TEXT_DECOR_NONE }, - { "TEXT_DECOR_STRIKETHROUGH", LV_TEXT_DECOR_STRIKETHROUGH }, - { "TEXT_DECOR_UNDERLINE", LV_TEXT_DECOR_UNDERLINE }, - { "TILEVIEW_PART_BG", LV_TILEVIEW_PART_BG }, - { "TILEVIEW_PART_EDGE_FLASH", LV_TILEVIEW_PART_EDGE_FLASH }, - { "TILEVIEW_PART_SCROLLBAR", LV_TILEVIEW_PART_SCROLLBAR }, - { "TXT_CMD_STATE_IN", LV_TXT_CMD_STATE_IN }, - { "TXT_CMD_STATE_PAR", LV_TXT_CMD_STATE_PAR }, - { "TXT_CMD_STATE_WAIT", LV_TXT_CMD_STATE_WAIT }, - { "TXT_FLAG_CENTER", LV_TXT_FLAG_CENTER }, - { "TXT_FLAG_EXPAND", LV_TXT_FLAG_EXPAND }, - { "TXT_FLAG_FIT", LV_TXT_FLAG_FIT }, - { "TXT_FLAG_NONE", LV_TXT_FLAG_NONE }, - { "TXT_FLAG_RECOLOR", LV_TXT_FLAG_RECOLOR }, - { "TXT_FLAG_RIGHT", LV_TXT_FLAG_RIGHT }, - { "WHITE", 16777215 }, - { "WIN_PART_BG", LV_WIN_PART_BG }, - { "WIN_PART_CONTENT_SCROLLABLE", LV_WIN_PART_CONTENT_SCROLLABLE }, - { "WIN_PART_HEADER", LV_WIN_PART_HEADER }, - { "WIN_PART_SCROLLBAR", LV_WIN_PART_SCROLLBAR }, - { "YELLOW", 16776960 }, - -}; - -const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]); - - -#if !BE_USE_PRECOMPILED_OBJECT -//#if 1 // TODO we will do pre-compiled later - - -be_native_module_attr_table(lvgl) { - // Symbols - be_native_module_str("SYMBOL_AUDIO", "\xef\x80\x81"), - be_native_module_str("SYMBOL_VIDEO", "\xef\x80\x88"), - be_native_module_str("SYMBOL_LIST", "\xef\x80\x8b"), - be_native_module_str("SYMBOL_OK", "\xef\x80\x8c"), - be_native_module_str("SYMBOL_CLOSE", "\xef\x80\x8d"), - be_native_module_str("SYMBOL_POWER", "\xef\x80\x91"), - be_native_module_str("SYMBOL_SETTINGS", "\xef\x80\x93"), - be_native_module_str("SYMBOL_HOME", "\xef\x80\x95"), - be_native_module_str("SYMBOL_DOWNLOAD", "\xef\x80\x99"), - be_native_module_str("SYMBOL_DRIVE", "\xef\x80\x9c"), - be_native_module_str("SYMBOL_REFRESH", "\xef\x80\xa1"), - be_native_module_str("SYMBOL_MUTE", "\xef\x80\xa6"), - be_native_module_str("SYMBOL_VOLUME_MID", "\xef\x80\xa7"), - be_native_module_str("SYMBOL_VOLUME_MAX", "\xef\x80\xa8"), - be_native_module_str("SYMBOL_IMAGE", "\xef\x80\xbe"), - be_native_module_str("SYMBOL_EDIT", "\xef\x8C\x84"), - be_native_module_str("SYMBOL_PREV", "\xef\x81\x88"), - be_native_module_str("SYMBOL_PLAY", "\xef\x81\x8b"), - be_native_module_str("SYMBOL_PAUSE", "\xef\x81\x8c"), - be_native_module_str("SYMBOL_STOP", "\xef\x81\x8d"), - be_native_module_str("SYMBOL_NEXT", "\xef\x81\x91"), - be_native_module_str("SYMBOL_EJECT", "\xef\x81\x92"), - be_native_module_str("SYMBOL_LEFT", "\xef\x81\x93"), - be_native_module_str("SYMBOL_RIGHT", "\xef\x81\x94"), - be_native_module_str("SYMBOL_PLUS", "\xef\x81\xa7"), - be_native_module_str("SYMBOL_MINUS", "\xef\x81\xa8"), - be_native_module_str("SYMBOL_EYE_OPEN", "\xef\x81\xae"), - be_native_module_str("SYMBOL_EYE_CLOSE", "\xef\x81\xb0"), - be_native_module_str("SYMBOL_WARNING", "\xef\x81\xb1"), - be_native_module_str("SYMBOL_SHUFFLE", "\xef\x81\xb4"), - be_native_module_str("SYMBOL_UP", "\xef\x81\xb7"), - be_native_module_str("SYMBOL_DOWN", "\xef\x81\xb8"), - be_native_module_str("SYMBOL_LOOP", "\xef\x81\xb9"), - be_native_module_str("SYMBOL_DIRECTORY", "\xef\x81\xbb"), - be_native_module_str("SYMBOL_UPLOAD", "\xef\x82\x93"), - be_native_module_str("SYMBOL_CALL", "\xef\x82\x95"), - be_native_module_str("SYMBOL_CUT", "\xef\x83\x84"), - be_native_module_str("SYMBOL_COPY", "\xef\x83\x85"), - be_native_module_str("SYMBOL_SAVE", "\xef\x83\x87"), - be_native_module_str("SYMBOL_CHARGE", "\xef\x83\xa7"), - be_native_module_str("SYMBOL_PASTE", "\xef\x83\xAA"), - be_native_module_str("SYMBOL_BELL", "\xef\x83\xb3"), - be_native_module_str("SYMBOL_KEYBOARD", "\xef\x84\x9c"), - be_native_module_str("SYMBOL_GPS", "\xef\x84\xa4"), - be_native_module_str("SYMBOL_FILE", "\xef\x85\x9b"), - be_native_module_str("SYMBOL_WIFI", "\xef\x87\xab"), - be_native_module_str("SYMBOL_BATTERY_FULL", "\xef\x89\x80"), - be_native_module_str("SYMBOL_BATTERY_3", "\xef\x89\x81"), - be_native_module_str("SYMBOL_BATTERY_2", "\xef\x89\x82"), - be_native_module_str("SYMBOL_BATTERY_1", "\xef\x89\x83"), - be_native_module_str("SYMBOL_BATTERY_EMPTY", "\xef\x89\x84"), - be_native_module_str("SYMBOL_USB", "\xef\x8a\x87"), - be_native_module_str("SYMBOL_BLUETOOTH", "\xef\x8a\x93"), - be_native_module_str("SYMBOL_TRASH", "\xef\x8B\xAD"), - be_native_module_str("SYMBOL_BACKSPACE", "\xef\x95\x9A"), - be_native_module_str("SYMBOL_SD_CARD", "\xef\x9F\x82"), - be_native_module_str("SYMBOL_NEW_LINE", "\xef\xA2\xA2"), - - be_native_module_str("SYMBOL_DUMMY", "\xEF\xA3\xBF"), - - be_native_module_str("SYMBOL_BULLET", "\xE2\x80\xA2"), - - -/* `lvgl` module functions */ - - - - be_native_module_function("member", lv0_member), - be_native_module_function("start", lv0_start), - - be_native_module_function("register_button_encoder", lv0_register_button_encoder), - - be_native_module_function("montserrat_font", lv0_load_montserrat_font), - be_native_module_function("seg7_font", lv0_load_seg7_font), - be_native_module_function("load_font", lv0_load_font), - be_native_module_function("load_freetype_font", lv0_load_freetype_font), - - be_native_module_function("screenshot", lv0_screenshot), - - -}; - -be_define_native_module(lvgl, NULL); - -#else - -be_define_local_const_str(SYMBOL_AUDIO, "\xef\x80\x81", 0, 3); -be_define_local_const_str(SYMBOL_VIDEO, "\xef\x80\x88", 0, 3); -be_define_local_const_str(SYMBOL_LIST, "\xef\x80\x8b", 0, 3); -be_define_local_const_str(SYMBOL_OK, "\xef\x80\x8c", 0, 3); -be_define_local_const_str(SYMBOL_CLOSE, "\xef\x80\x8d", 0, 3); -be_define_local_const_str(SYMBOL_POWER, "\xef\x80\x91", 0, 3); -be_define_local_const_str(SYMBOL_SETTINGS, "\xef\x80\x93", 0, 3); -be_define_local_const_str(SYMBOL_HOME, "\xef\x80\x95", 0, 3); -be_define_local_const_str(SYMBOL_DOWNLOAD, "\xef\x80\x99", 0, 3); -be_define_local_const_str(SYMBOL_DRIVE, "\xef\x80\x9c", 0, 3); -be_define_local_const_str(SYMBOL_REFRESH, "\xef\x80\xa1", 0, 3); -be_define_local_const_str(SYMBOL_MUTE, "\xef\x80\xa6", 0, 3); -be_define_local_const_str(SYMBOL_VOLUME_MID, "\xef\x80\xa7", 0, 3); -be_define_local_const_str(SYMBOL_VOLUME_MAX, "\xef\x80\xa8", 0, 3); -be_define_local_const_str(SYMBOL_IMAGE, "\xef\x80\xbe", 0, 3); -be_define_local_const_str(SYMBOL_EDIT, "\xef\x8C\x84", 0, 3); -be_define_local_const_str(SYMBOL_PREV, "\xef\x81\x88", 0, 3); -be_define_local_const_str(SYMBOL_PLAY, "\xef\x81\x8b", 0, 3); -be_define_local_const_str(SYMBOL_PAUSE, "\xef\x81\x8c", 0, 3); -be_define_local_const_str(SYMBOL_STOP, "\xef\x81\x8d", 0, 3); -be_define_local_const_str(SYMBOL_NEXT, "\xef\x81\x91", 0, 3); -be_define_local_const_str(SYMBOL_EJECT, "\xef\x81\x92", 0, 3); -be_define_local_const_str(SYMBOL_LEFT, "\xef\x81\x93", 0, 3); -be_define_local_const_str(SYMBOL_RIGHT, "\xef\x81\x94", 0, 3); -be_define_local_const_str(SYMBOL_PLUS, "\xef\x81\xa7", 0, 3); -be_define_local_const_str(SYMBOL_MINUS, "\xef\x81\xa8", 0, 3); -be_define_local_const_str(SYMBOL_EYE_OPEN, "\xef\x81\xae", 0, 3); -be_define_local_const_str(SYMBOL_EYE_CLOSE, "\xef\x81\xb0", 0, 3); -be_define_local_const_str(SYMBOL_WARNING, "\xef\x81\xb1", 0, 3); -be_define_local_const_str(SYMBOL_SHUFFLE, "\xef\x81\xb4", 0, 3); -be_define_local_const_str(SYMBOL_UP, "\xef\x81\xb7", 0, 3); -be_define_local_const_str(SYMBOL_DOWN, "\xef\x81\xb8", 0, 3); -be_define_local_const_str(SYMBOL_LOOP, "\xef\x81\xb9", 0, 3); -be_define_local_const_str(SYMBOL_DIRECTORY, "\xef\x81\xbb", 0, 3); -be_define_local_const_str(SYMBOL_UPLOAD, "\xef\x82\x93", 0, 3); -be_define_local_const_str(SYMBOL_CALL, "\xef\x82\x95", 0, 3); -be_define_local_const_str(SYMBOL_CUT, "\xef\x83\x84", 0, 3); -be_define_local_const_str(SYMBOL_COPY, "\xef\x83\x85", 0, 3); -be_define_local_const_str(SYMBOL_SAVE, "\xef\x83\x87", 0, 3); -be_define_local_const_str(SYMBOL_CHARGE, "\xef\x83\xa7", 0, 3); -be_define_local_const_str(SYMBOL_PASTE, "\xef\x83\xAA", 0, 3); -be_define_local_const_str(SYMBOL_BELL, "\xef\x83\xb3", 0, 3); -be_define_local_const_str(SYMBOL_KEYBOARD, "\xef\x84\x9c", 0, 3); -be_define_local_const_str(SYMBOL_GPS, "\xef\x84\xa4", 0, 3); -be_define_local_const_str(SYMBOL_FILE, "\xef\x85\x9b", 0, 3); -be_define_local_const_str(SYMBOL_WIFI, "\xef\x87\xab", 0, 3); -be_define_local_const_str(SYMBOL_BATTERY_FULL, "\xef\x89\x80", 0, 3); -be_define_local_const_str(SYMBOL_BATTERY_3, "\xef\x89\x81", 0, 3); -be_define_local_const_str(SYMBOL_BATTERY_2, "\xef\x89\x82", 0, 3); -be_define_local_const_str(SYMBOL_BATTERY_1, "\xef\x89\x83", 0, 3); -be_define_local_const_str(SYMBOL_BATTERY_EMPTY, "\xef\x89\x84", 0, 3); -be_define_local_const_str(SYMBOL_USB, "\xef\x8a\x87", 0, 3); -be_define_local_const_str(SYMBOL_BLUETOOTH, "\xef\x8a\x93", 0, 3); -be_define_local_const_str(SYMBOL_TRASH, "\xef\x8B\xAD", 0, 3); -be_define_local_const_str(SYMBOL_BACKSPACE, "\xef\x95\x9A", 0, 3); -be_define_local_const_str(SYMBOL_SD_CARD, "\xef\x9F\x82", 0, 3); -be_define_local_const_str(SYMBOL_NEW_LINE, "\xef\xA2\xA2", 0, 3); - -be_define_local_const_str(SYMBOL_DUMMY, "\xEF\xA3\xBF", 0, 3); - -be_define_local_const_str(SYMBOL_BULLET, "\xE2\x80\xA2", 0, 3); - - -/* @const_object_info_begin -module lvgl (scope: global) { - SYMBOL_AUDIO, str(&be_local_const_str_SYMBOL_AUDIO) - SYMBOL_VIDEO, str(&be_local_const_str_SYMBOL_VIDEO) - SYMBOL_LIST, str(&be_local_const_str_SYMBOL_LIST) - SYMBOL_OK, str(&be_local_const_str_SYMBOL_OK) - SYMBOL_CLOSE, str(&be_local_const_str_SYMBOL_CLOSE) - SYMBOL_POWER, str(&be_local_const_str_SYMBOL_POWER) - SYMBOL_SETTINGS, str(&be_local_const_str_SYMBOL_SETTINGS) - SYMBOL_HOME, str(&be_local_const_str_SYMBOL_HOME) - SYMBOL_DOWNLOAD, str(&be_local_const_str_SYMBOL_DOWNLOAD) - SYMBOL_DRIVE, str(&be_local_const_str_SYMBOL_DRIVE) - SYMBOL_REFRESH, str(&be_local_const_str_SYMBOL_REFRESH) - SYMBOL_MUTE, str(&be_local_const_str_SYMBOL_MUTE) - SYMBOL_VOLUME_MID, str(&be_local_const_str_SYMBOL_VOLUME_MID) - SYMBOL_VOLUME_MAX, str(&be_local_const_str_SYMBOL_VOLUME_MAX) - SYMBOL_IMAGE, str(&be_local_const_str_SYMBOL_IMAGE) - SYMBOL_EDIT, str(&be_local_const_str_SYMBOL_EDIT) - SYMBOL_PREV, str(&be_local_const_str_SYMBOL_PREV) - SYMBOL_PLAY, str(&be_local_const_str_SYMBOL_PLAY) - SYMBOL_PAUSE, str(&be_local_const_str_SYMBOL_PAUSE) - SYMBOL_STOP, str(&be_local_const_str_SYMBOL_STOP) - SYMBOL_NEXT, str(&be_local_const_str_SYMBOL_NEXT) - SYMBOL_EJECT, str(&be_local_const_str_SYMBOL_EJECT) - SYMBOL_LEFT, str(&be_local_const_str_SYMBOL_LEFT) - SYMBOL_RIGHT, str(&be_local_const_str_SYMBOL_RIGHT) - SYMBOL_PLUS, str(&be_local_const_str_SYMBOL_PLUS) - SYMBOL_MINUS, str(&be_local_const_str_SYMBOL_MINUS) - SYMBOL_EYE_OPEN, str(&be_local_const_str_SYMBOL_EYE_OPEN) - SYMBOL_EYE_CLOSE, str(&be_local_const_str_SYMBOL_EYE_CLOSE) - SYMBOL_WARNING, str(&be_local_const_str_SYMBOL_WARNING) - SYMBOL_SHUFFLE, str(&be_local_const_str_SYMBOL_SHUFFLE) - SYMBOL_UP, str(&be_local_const_str_SYMBOL_UP) - SYMBOL_DOWN, str(&be_local_const_str_SYMBOL_DOWN) - SYMBOL_LOOP, str(&be_local_const_str_SYMBOL_LOOP) - SYMBOL_DIRECTORY, str(&be_local_const_str_SYMBOL_DIRECTORY) - SYMBOL_UPLOAD, str(&be_local_const_str_SYMBOL_UPLOAD) - SYMBOL_CALL, str(&be_local_const_str_SYMBOL_CALL) - SYMBOL_CUT, str(&be_local_const_str_SYMBOL_CUT) - SYMBOL_COPY, str(&be_local_const_str_SYMBOL_COPY) - SYMBOL_SAVE, str(&be_local_const_str_SYMBOL_SAVE) - SYMBOL_CHARGE, str(&be_local_const_str_SYMBOL_CHARGE) - SYMBOL_PASTE, str(&be_local_const_str_SYMBOL_PASTE) - SYMBOL_BELL, str(&be_local_const_str_SYMBOL_BELL) - SYMBOL_KEYBOARD, str(&be_local_const_str_SYMBOL_KEYBOARD) - SYMBOL_GPS, str(&be_local_const_str_SYMBOL_GPS) - SYMBOL_FILE, str(&be_local_const_str_SYMBOL_FILE) - SYMBOL_WIFI, str(&be_local_const_str_SYMBOL_WIFI) - SYMBOL_BATTERY_FULL, str(&be_local_const_str_SYMBOL_BATTERY_FULL) - SYMBOL_BATTERY_3, str(&be_local_const_str_SYMBOL_BATTERY_3) - SYMBOL_BATTERY_2, str(&be_local_const_str_SYMBOL_BATTERY_2) - SYMBOL_BATTERY_1, str(&be_local_const_str_SYMBOL_BATTERY_1) - SYMBOL_BATTERY_EMPTY, str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) - SYMBOL_USB, str(&be_local_const_str_SYMBOL_USB) - SYMBOL_BLUETOOTH, str(&be_local_const_str_SYMBOL_BLUETOOTH) - SYMBOL_TRASH, str(&be_local_const_str_SYMBOL_TRASH) - SYMBOL_BACKSPACE, str(&be_local_const_str_SYMBOL_BACKSPACE) - SYMBOL_SD_CARD, str(&be_local_const_str_SYMBOL_SD_CARD) - SYMBOL_NEW_LINE, str(&be_local_const_str_SYMBOL_NEW_LINE) - - SYMBOL_DUMMY, str(&be_local_const_str_SYMBOL_DUMMY) - - SYMBOL_BULLET, str(&be_local_const_str_SYMBOL_BULLET) - - - member, func(lv0_member) - start, func(lv0_start) - - register_button_encoder, func(lv0_register_button_encoder) - - montserrat_font, func(lv0_load_montserrat_font) - seg7_font, func(lv0_load_seg7_font) - load_font, func(lv0_load_font) - load_freetype_font, func(lv0_load_freetype_font) - - screenshot, func(lv0_screenshot) - - - -} -@const_object_info_end */ -#include "../generate/be_fixed_lvgl.h" -#endif - -#endif // USE_LVGL - -/********************************************************************/ diff --git a/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c new file mode 100644 index 000000000..456753a64 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_clock_icon_lib.c @@ -0,0 +1,313 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: set_time +********************************************************************/ +be_local_closure(set_time, /* name */ + be_nested_proto( + 11, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("hour", -1241306097, 4), + /* K2 */ be_nested_string("minute", 954666857, 6), + /* K3 */ be_nested_string("sec", -1155074638, 3), + /* K4 */ be_nested_string("format", -1180859054, 6), + /* K5 */ be_nested_string("%02d%s%02d", 1587999717, 10), + /* K6 */ be_const_int(2), + /* K7 */ be_nested_string(":", 1057798253, 1), + /* K8 */ be_nested_string(" ", 621580159, 1), + /* K9 */ be_nested_string("set_text", 1849641155, 8), + }), + (be_nested_const_str("set_time", 900236405, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[27]) { /* code */ + 0xA4120000, // 0000 IMPORT R4 K0 + 0x88140101, // 0001 GETMBR R5 R0 K1 + 0x20140205, // 0002 NE R5 R1 R5 + 0x74160005, // 0003 JMPT R5 #000A + 0x88140102, // 0004 GETMBR R5 R0 K2 + 0x20140405, // 0005 NE R5 R2 R5 + 0x74160002, // 0006 JMPT R5 #000A + 0x88140103, // 0007 GETMBR R5 R0 K3 + 0x20140605, // 0008 NE R5 R3 R5 + 0x7816000F, // 0009 JMPF R5 #001A + 0x8C140904, // 000A GETMET R5 R4 K4 + 0x581C0005, // 000B LDCONST R7 K5 + 0x5C200200, // 000C MOVE R8 R1 + 0x10240706, // 000D MOD R9 R3 K6 + 0x78260001, // 000E JMPF R9 #0011 + 0x58240007, // 000F LDCONST R9 K7 + 0x70020000, // 0010 JMP #0012 + 0x58240008, // 0011 LDCONST R9 K8 + 0x5C280400, // 0012 MOVE R10 R2 + 0x7C140A00, // 0013 CALL R5 5 + 0x90020201, // 0014 SETMBR R0 K1 R1 + 0x90020402, // 0015 SETMBR R0 K2 R2 + 0x90020603, // 0016 SETMBR R0 K3 R3 + 0x8C180109, // 0017 GETMET R6 R0 K9 + 0x5C200A00, // 0018 MOVE R8 R5 + 0x7C180400, // 0019 CALL R6 2 + 0x80000000, // 001A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: every_second +********************************************************************/ +be_local_closure(every_second, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 9]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + /* K1 */ be_nested_string("time_dump", -964556549, 9), + /* K2 */ be_nested_string("rtc", 1070575216, 3), + /* K3 */ be_nested_string("local", -1673304312, 5), + /* K4 */ be_nested_string("year", -1367388900, 4), + /* K5 */ be_nested_string("set_time", 900236405, 8), + /* K6 */ be_nested_string("hour", -1241306097, 4), + /* K7 */ be_nested_string("min", -913357481, 3), + /* K8 */ be_nested_string("sec", -1155074638, 3), + }), + (be_nested_const_str("every_second", 2075451465, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[17]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0xB80E0000, // 0002 GETNGBL R3 K0 + 0x8C0C0702, // 0003 GETMET R3 R3 K2 + 0x7C0C0200, // 0004 CALL R3 1 + 0x940C0703, // 0005 GETIDX R3 R3 K3 + 0x7C040400, // 0006 CALL R1 2 + 0x94080304, // 0007 GETIDX R2 R1 K4 + 0x540E07B1, // 0008 LDINT R3 1970 + 0x20080403, // 0009 NE R2 R2 R3 + 0x780A0004, // 000A JMPF R2 #0010 + 0x8C080105, // 000B GETMET R2 R0 K5 + 0x94100306, // 000C GETIDX R4 R1 K6 + 0x94140307, // 000D GETIDX R5 R1 K7 + 0x94180308, // 000E GETIDX R6 R1 K8 + 0x7C080800, // 000F CALL R2 4 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 12, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[22]) { /* constants */ + /* K0 */ be_nested_string("init", 380752755, 4), + /* K1 */ be_nested_string("lv", 1529997255, 2), + /* K2 */ be_nested_string("seg7_font", -195276607, 9), + /* K3 */ be_nested_string("set_style_text_font", 1028590019, 19), + /* K4 */ be_nested_string("PART_MAIN", -1821475788, 9), + /* K5 */ be_nested_string("STATE_DEFAULT", 712406428, 13), + /* K6 */ be_nested_string("get_height", -723211773, 10), + /* K7 */ be_nested_string("set_text", 1849641155, 8), + /* K8 */ be_nested_string("--:--", 1370615441, 5), + /* K9 */ be_nested_string("refr_size", 1958144468, 9), + /* K10 */ be_nested_string("get_width", -1001549996, 9), + /* K11 */ be_nested_string("set_y", 1866178391, 5), + /* K12 */ be_const_int(2), + /* K13 */ be_nested_string("get_style_pad_right", -1144679830, 19), + /* K14 */ be_nested_string("set_x", 1849400772, 5), + /* K15 */ be_const_int(3), + /* K16 */ be_nested_string("set_style_pad_right", -980898242, 19), + /* K17 */ be_nested_string("set_style_bg_color", 1689513089, 18), + /* K18 */ be_nested_string("lv_color", 1419148319, 8), + /* K19 */ be_nested_string("COLOR_BLACK", 264427940, 11), + /* K20 */ be_nested_string("tasmota", 424643812, 7), + /* K21 */ be_nested_string("add_driver", 1654458371, 10), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[82]) { /* code */ + 0x600C0003, // 0000 GETGBL R3 G3 + 0x5C100000, // 0001 MOVE R4 R0 + 0x7C0C0200, // 0002 CALL R3 1 + 0x8C0C0700, // 0003 GETMET R3 R3 K0 + 0x5C140200, // 0004 MOVE R5 R1 + 0x5C180400, // 0005 MOVE R6 R2 + 0x7C0C0600, // 0006 CALL R3 3 + 0xB80E0200, // 0007 GETNGBL R3 K1 + 0x8C0C0702, // 0008 GETMET R3 R3 K2 + 0x5416000F, // 0009 LDINT R5 16 + 0x7C0C0400, // 000A CALL R3 2 + 0x4C100000, // 000B LDNIL R4 + 0x20100604, // 000C NE R4 R3 R4 + 0x78120007, // 000D JMPF R4 #0016 + 0x8C100103, // 000E GETMET R4 R0 K3 + 0x5C180600, // 000F MOVE R6 R3 + 0xB81E0200, // 0010 GETNGBL R7 K1 + 0x881C0F04, // 0011 GETMBR R7 R7 K4 + 0xB8220200, // 0012 GETNGBL R8 K1 + 0x88201105, // 0013 GETMBR R8 R8 K5 + 0x301C0E08, // 0014 OR R7 R7 R8 + 0x7C100600, // 0015 CALL R4 3 + 0x4C100000, // 0016 LDNIL R4 + 0x20100204, // 0017 NE R4 R1 R4 + 0x78120033, // 0018 JMPF R4 #004D + 0x8C100306, // 0019 GETMET R4 R1 K6 + 0x7C100200, // 001A CALL R4 1 + 0x8C140107, // 001B GETMET R5 R0 K7 + 0x581C0008, // 001C LDCONST R7 K8 + 0x7C140400, // 001D CALL R5 2 + 0x8C140109, // 001E GETMET R5 R0 K9 + 0x7C140200, // 001F CALL R5 1 + 0x8C14010A, // 0020 GETMET R5 R0 K10 + 0x7C140200, // 0021 CALL R5 1 + 0x8C18010B, // 0022 GETMET R6 R0 K11 + 0x8C200306, // 0023 GETMET R8 R1 K6 + 0x7C200200, // 0024 CALL R8 1 + 0x8C240106, // 0025 GETMET R9 R0 K6 + 0x7C240200, // 0026 CALL R9 1 + 0x04201009, // 0027 SUB R8 R8 R9 + 0x0C20110C, // 0028 DIV R8 R8 K12 + 0x7C180400, // 0029 CALL R6 2 + 0x8C18030D, // 002A GETMET R6 R1 K13 + 0xB8220200, // 002B GETNGBL R8 K1 + 0x88201104, // 002C GETMBR R8 R8 K4 + 0xB8260200, // 002D GETNGBL R9 K1 + 0x88241305, // 002E GETMBR R9 R9 K5 + 0x30201009, // 002F OR R8 R8 R9 + 0x7C180400, // 0030 CALL R6 2 + 0x8C1C010E, // 0031 GETMET R7 R0 K14 + 0x8C24030A, // 0032 GETMET R9 R1 K10 + 0x7C240200, // 0033 CALL R9 1 + 0x04241205, // 0034 SUB R9 R9 R5 + 0x04241206, // 0035 SUB R9 R9 R6 + 0x0424130F, // 0036 SUB R9 R9 K15 + 0x7C1C0400, // 0037 CALL R7 2 + 0x8C1C0310, // 0038 GETMET R7 R1 K16 + 0x00240C05, // 0039 ADD R9 R6 R5 + 0x542A0005, // 003A LDINT R10 6 + 0x0024120A, // 003B ADD R9 R9 R10 + 0xB82A0200, // 003C GETNGBL R10 K1 + 0x88281504, // 003D GETMBR R10 R10 K4 + 0xB82E0200, // 003E GETNGBL R11 K1 + 0x882C1705, // 003F GETMBR R11 R11 K5 + 0x3028140B, // 0040 OR R10 R10 R11 + 0x7C1C0600, // 0041 CALL R7 3 + 0x8C1C0111, // 0042 GETMET R7 R0 K17 + 0xB8262400, // 0043 GETNGBL R9 K18 + 0xB82A0200, // 0044 GETNGBL R10 K1 + 0x88281513, // 0045 GETMBR R10 R10 K19 + 0x7C240200, // 0046 CALL R9 1 + 0xB82A0200, // 0047 GETNGBL R10 K1 + 0x88281504, // 0048 GETMBR R10 R10 K4 + 0xB82E0200, // 0049 GETNGBL R11 K1 + 0x882C1705, // 004A GETMBR R11 R11 K5 + 0x3028140B, // 004B OR R10 R10 R11 + 0x7C1C0600, // 004C CALL R7 3 + 0xB8122800, // 004D GETNGBL R4 K20 + 0x8C100915, // 004E GETMET R4 R4 K21 + 0x5C180000, // 004F MOVE R6 R0 + 0x7C100400, // 0050 CALL R4 2 + 0x80000000, // 0051 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: del +********************************************************************/ +be_local_closure(del, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("del", -816214454, 3), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("remove_driver", 1030243768, 13), + }), + (be_nested_const_str("del", -816214454, 3)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[10]) { /* code */ + 0x60040003, // 0000 GETGBL R1 G3 + 0x5C080000, // 0001 MOVE R2 R0 + 0x7C040200, // 0002 CALL R1 1 + 0x8C040300, // 0003 GETMET R1 R1 K0 + 0x7C040200, // 0004 CALL R1 1 + 0xB8060200, // 0005 GETNGBL R1 K1 + 0x8C040302, // 0006 GETMET R1 R1 K2 + 0x5C0C0000, // 0007 MOVE R3 R0 + 0x7C040400, // 0008 CALL R1 2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_clock_icon +********************************************************************/ +extern const bclass be_class_lv_label; +be_local_class(lv_clock_icon, + 3, + &be_class_lv_label, + be_nested_map(7, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("sec", -1155074638, 3, -1), be_const_var(2) }, + { be_nested_key("hour", -1241306097, 4, -1), be_const_var(0) }, + { be_nested_key("set_time", 900236405, 8, 6), be_const_closure(set_time_closure) }, + { be_nested_key("every_second", 2075451465, 12, -1), be_const_closure(every_second_closure) }, + { be_nested_key("minute", 954666857, 6, -1), be_const_var(1) }, + { be_nested_key("init", 380752755, 4, 2), be_const_closure(init_closure) }, + { be_nested_key("del", -816214454, 3, -1), be_const_closure(del_closure) }, + })), + (be_nested_const_str("lv_clock_icon", -1037751086, 13)) +); +/*******************************************************************/ + +void be_load_lv_clock_icon_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_clock_icon); + be_setglobal(vm, "lv_clock_icon"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_color_lib.c b/lib/libesp32/Berry/default/be_lvgl_color_lib.c index d76fd8ced..ec82ccedb 100644 --- a/lib/libesp32/Berry/default/be_lvgl_color_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_color_lib.c @@ -9,36 +9,23 @@ extern int lco_init(bvm *vm); // generic function extern int lco_tostring(bvm *vm); // generic function +extern int lco_toint(bvm *vm); // generic function -#if BE_USE_PRECOMPILED_OBJECT #include "../generate/be_fixed_be_class_lv_color.h" -#endif void be_load_lvgl_color_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, // keeping track of styles to avoid GC - { "init", lco_init }, - { "tostring", lco_tostring }, - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_color", members); -#else be_pushntvclass(vm, &be_class_lv_color); be_setglobal(vm, "lv_color"); be_pop(vm, 1); -#endif } /* @const_object_info_begin class be_class_lv_color (scope: global, name: lv_color) { - .p, var + _p, var init, func(lco_init) tostring, func(lco_tostring) + toint, func(lco_toint) } @const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c b/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c new file mode 100644 index 000000000..219e3e4df --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_ctypes_definitions.c @@ -0,0 +1,499 @@ +/******************************************************************** + * Tasmota LVGL ctypes mapping + *******************************************************************/ +#include "be_ctypes.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** + * Generated code, don't edit + *******************************************************************/ + +static const char * be_ctypes_instance_mappings[]; /* forward definition */ + +const be_ctypes_structure_t be_lv_point = { + 4, /* size in bytes */ + 2, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[2]) { + { "x", 0, 0, 0, ctypes_i16, 0 }, + { "y", 2, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_area = { + 8, /* size in bytes */ + 4, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[4]) { + { "x1", 0, 0, 0, ctypes_i16, 0 }, + { "x2", 4, 0, 0, ctypes_i16, 0 }, + { "y1", 2, 0, 0, ctypes_i16, 0 }, + { "y2", 6, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_rect_dsc = { + 51, /* size in bytes */ + 29, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[29]) { + { "bg_color", 4, 0, 0, ctypes_u16, 1 }, + { "bg_grad_color", 6, 0, 0, ctypes_u16, 1 }, + { "bg_grad_color_stop", 9, 0, 0, ctypes_u8, 0 }, + { "bg_grad_dir", 11, 0, 3, ctypes_bf, 0 }, + { "bg_img_opa", 22, 0, 0, ctypes_u8, 0 }, + { "bg_img_recolor", 20, 0, 0, ctypes_u16, 1 }, + { "bg_img_recolor_opa", 23, 0, 0, ctypes_u8, 0 }, + { "bg_img_src", 12, 0, 0, ctypes_ptr32, 0 }, + { "bg_img_symbol_font", 16, 0, 0, ctypes_ptr32, 0 }, + { "bg_img_tiled", 24, 0, 0, ctypes_u8, 0 }, + { "bg_main_color_stop", 8, 0, 0, ctypes_u8, 0 }, + { "bg_opa", 10, 0, 0, ctypes_u8, 0 }, + { "blend_mode", 2, 0, 0, ctypes_u8, 0 }, + { "border_color", 26, 0, 0, ctypes_u16, 1 }, + { "border_opa", 30, 0, 0, ctypes_u8, 0 }, + { "border_post", 31, 0, 1, ctypes_bf, 0 }, + { "border_side", 31, 1, 5, ctypes_bf, 0 }, + { "border_width", 28, 0, 0, ctypes_i16, 0 }, + { "outline_color", 32, 0, 0, ctypes_u16, 1 }, + { "outline_opa", 38, 0, 0, ctypes_u8, 0 }, + { "outline_pad", 36, 0, 0, ctypes_i16, 0 }, + { "outline_width", 34, 0, 0, ctypes_i16, 0 }, + { "radius", 0, 0, 0, ctypes_i16, 0 }, + { "shadow_color", 40, 0, 0, ctypes_u16, 1 }, + { "shadow_ofs_x", 44, 0, 0, ctypes_i16, 0 }, + { "shadow_ofs_y", 46, 0, 0, ctypes_i16, 0 }, + { "shadow_opa", 50, 0, 0, ctypes_u8, 0 }, + { "shadow_spread", 48, 0, 0, ctypes_i16, 0 }, + { "shadow_width", 42, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_line_dsc = { + 10, /* size in bytes */ + 9, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[9]) { + { "blend_mode", 9, 0, 2, ctypes_bf, 0 }, + { "color", 0, 0, 0, ctypes_u16, 1 }, + { "dash_gap", 6, 0, 0, ctypes_i16, 0 }, + { "dash_width", 4, 0, 0, ctypes_i16, 0 }, + { "opa", 8, 0, 0, ctypes_u8, 0 }, + { "raw_end", 9, 4, 1, ctypes_bf, 0 }, + { "round_end", 9, 3, 1, ctypes_bf, 0 }, + { "round_start", 9, 2, 1, ctypes_bf, 0 }, + { "width", 2, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_img_dsc = { + 21, /* size in bytes */ + 10, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[10]) { + { "angle", 0, 0, 0, ctypes_u16, 0 }, + { "antialias", 20, 0, 1, ctypes_bf, 0 }, + { "blend_mode", 12, 0, 4, ctypes_bf, 0 }, + { "frame_id", 16, 0, 0, ctypes_i32, 0 }, + { "opa", 11, 0, 0, ctypes_u8, 0 }, + { "pivot_x", 4, 0, 0, ctypes_i16, 0 }, + { "pivot_y", 6, 0, 0, ctypes_i16, 0 }, + { "recolor", 8, 0, 0, ctypes_u16, 1 }, + { "recolor_opa", 10, 0, 0, ctypes_u8, 0 }, + { "zoom", 2, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_common_dsc = { + 5, /* size in bytes */ + 2, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[2]) { + { "cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_line_param_cfg = { + 9, /* size in bytes */ + 5, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[5]) { + { "p1_x", 0, 0, 0, ctypes_i16, 0 }, + { "p1_y", 2, 0, 0, ctypes_i16, 0 }, + { "p2_x", 4, 0, 0, ctypes_i16, 0 }, + { "p2_y", 6, 0, 0, ctypes_i16, 0 }, + { "side", 8, 0, 2, ctypes_bf, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_line_param = { + 41, /* size in bytes */ + 15, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[15]) { + { "cfg_p1_x", 8, 0, 0, ctypes_i16, 0 }, + { "cfg_p1_y", 10, 0, 0, ctypes_i16, 0 }, + { "cfg_p2_x", 12, 0, 0, ctypes_i16, 0 }, + { "cfg_p2_y", 14, 0, 0, ctypes_i16, 0 }, + { "cfg_side", 16, 0, 2, ctypes_bf, 0 }, + { "dsc_cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "dsc_type", 4, 0, 0, ctypes_u8, 0 }, + { "flat", 40, 0, 1, ctypes_bf, 0 }, + { "inv", 40, 1, 1, ctypes_bf, 0 }, + { "origo_x", 20, 0, 0, ctypes_i16, 0 }, + { "origo_y", 22, 0, 0, ctypes_i16, 0 }, + { "spx", 36, 0, 0, ctypes_i32, 0 }, + { "steep", 32, 0, 0, ctypes_i32, 0 }, + { "xy_steep", 24, 0, 0, ctypes_i32, 0 }, + { "yx_steep", 28, 0, 0, ctypes_i32, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_angle_param_cfg = { + 8, /* size in bytes */ + 4, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[4]) { + { "end_angle", 6, 0, 0, ctypes_i16, 0 }, + { "start_angle", 4, 0, 0, ctypes_i16, 0 }, + { "vertex_p_x", 0, 0, 0, ctypes_i16, 0 }, + { "vertex_p_y", 2, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_angle_param = { + 104, /* size in bytes */ + 37, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[37]) { + { "cfg_end_angle", 14, 0, 0, ctypes_i16, 0 }, + { "cfg_start_angle", 12, 0, 0, ctypes_i16, 0 }, + { "cfg_vertex_p_x", 8, 0, 0, ctypes_i16, 0 }, + { "cfg_vertex_p_y", 10, 0, 0, ctypes_i16, 0 }, + { "delta_deg", 102, 0, 0, ctypes_u16, 0 }, + { "dsc_cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "dsc_type", 4, 0, 0, ctypes_u8, 0 }, + { "end_line_cfg_p1_x", 68, 0, 0, ctypes_i16, 0 }, + { "end_line_cfg_p1_y", 70, 0, 0, ctypes_i16, 0 }, + { "end_line_cfg_p2_x", 72, 0, 0, ctypes_i16, 0 }, + { "end_line_cfg_p2_y", 74, 0, 0, ctypes_i16, 0 }, + { "end_line_cfg_side", 76, 0, 2, ctypes_bf, 0 }, + { "end_line_dsc_cb", 60, 0, 0, ctypes_ptr32, 0 }, + { "end_line_dsc_type", 64, 0, 0, ctypes_u8, 0 }, + { "end_line_flat", 100, 0, 1, ctypes_bf, 0 }, + { "end_line_inv", 100, 1, 1, ctypes_bf, 0 }, + { "end_line_origo_x", 80, 0, 0, ctypes_i16, 0 }, + { "end_line_origo_y", 82, 0, 0, ctypes_i16, 0 }, + { "end_line_spx", 96, 0, 0, ctypes_i32, 0 }, + { "end_line_steep", 92, 0, 0, ctypes_i32, 0 }, + { "end_line_xy_steep", 84, 0, 0, ctypes_i32, 0 }, + { "end_line_yx_steep", 88, 0, 0, ctypes_i32, 0 }, + { "start_line_cfg_p1_x", 24, 0, 0, ctypes_i16, 0 }, + { "start_line_cfg_p1_y", 26, 0, 0, ctypes_i16, 0 }, + { "start_line_cfg_p2_x", 28, 0, 0, ctypes_i16, 0 }, + { "start_line_cfg_p2_y", 30, 0, 0, ctypes_i16, 0 }, + { "start_line_cfg_side", 32, 0, 2, ctypes_bf, 0 }, + { "start_line_dsc_cb", 16, 0, 0, ctypes_ptr32, 0 }, + { "start_line_dsc_type", 20, 0, 0, ctypes_u8, 0 }, + { "start_line_flat", 56, 0, 1, ctypes_bf, 0 }, + { "start_line_inv", 56, 1, 1, ctypes_bf, 0 }, + { "start_line_origo_x", 36, 0, 0, ctypes_i16, 0 }, + { "start_line_origo_y", 38, 0, 0, ctypes_i16, 0 }, + { "start_line_spx", 52, 0, 0, ctypes_i32, 0 }, + { "start_line_steep", 48, 0, 0, ctypes_i32, 0 }, + { "start_line_xy_steep", 40, 0, 0, ctypes_i32, 0 }, + { "start_line_yx_steep", 44, 0, 0, ctypes_i32, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_radius_param_cfg = { + 11, /* size in bytes */ + 6, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[6]) { + { "outer", 10, 0, 1, ctypes_bf, 0 }, + { "radius", 8, 0, 0, ctypes_i16, 0 }, + { "rect_x1", 0, 0, 0, ctypes_i16, 0 }, + { "rect_x2", 4, 0, 0, ctypes_i16, 0 }, + { "rect_y1", 2, 0, 0, ctypes_i16, 0 }, + { "rect_y2", 6, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_sqrt_res = { + 4, /* size in bytes */ + 2, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[2]) { + { "f", 2, 0, 0, ctypes_u16, 0 }, + { "i", 0, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_radius_param = { + 28, /* size in bytes */ + 11, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[11]) { + { "cfg_outer", 18, 0, 1, ctypes_bf, 0 }, + { "cfg_radius", 16, 0, 0, ctypes_i16, 0 }, + { "cfg_rect_x1", 8, 0, 0, ctypes_i16, 0 }, + { "cfg_rect_x2", 12, 0, 0, ctypes_i16, 0 }, + { "cfg_rect_y1", 10, 0, 0, ctypes_i16, 0 }, + { "cfg_rect_y2", 14, 0, 0, ctypes_i16, 0 }, + { "dsc_cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "dsc_type", 4, 0, 0, ctypes_u8, 0 }, + { "y_prev", 20, 0, 0, ctypes_i32, 0 }, + { "y_prev_x_f", 26, 0, 0, ctypes_u16, 0 }, + { "y_prev_x_i", 24, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_fade_param_cfg = { + 14, /* size in bytes */ + 8, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[8]) { + { "coords_x1", 0, 0, 0, ctypes_i16, 0 }, + { "coords_x2", 4, 0, 0, ctypes_i16, 0 }, + { "coords_y1", 2, 0, 0, ctypes_i16, 0 }, + { "coords_y2", 6, 0, 0, ctypes_i16, 0 }, + { "opa_bottom", 13, 0, 0, ctypes_u8, 0 }, + { "opa_top", 12, 0, 0, ctypes_u8, 0 }, + { "y_bottom", 10, 0, 0, ctypes_i16, 0 }, + { "y_top", 8, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_fade_param = { + 22, /* size in bytes */ + 10, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[10]) { + { "cfg_coords_x1", 8, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_x2", 12, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_y1", 10, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_y2", 14, 0, 0, ctypes_i16, 0 }, + { "cfg_opa_bottom", 21, 0, 0, ctypes_u8, 0 }, + { "cfg_opa_top", 20, 0, 0, ctypes_u8, 0 }, + { "cfg_y_bottom", 18, 0, 0, ctypes_i16, 0 }, + { "cfg_y_top", 16, 0, 0, ctypes_i16, 0 }, + { "dsc_cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "dsc_type", 4, 0, 0, ctypes_u8, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_map_param_cfg = { + 12, /* size in bytes */ + 5, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[5]) { + { "coords_x1", 0, 0, 0, ctypes_i16, 0 }, + { "coords_x2", 4, 0, 0, ctypes_i16, 0 }, + { "coords_y1", 2, 0, 0, ctypes_i16, 0 }, + { "coords_y2", 6, 0, 0, ctypes_i16, 0 }, + { "map", 8, 0, 0, ctypes_ptr32, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_map_param = { + 20, /* size in bytes */ + 7, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[7]) { + { "cfg_coords_x1", 8, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_x2", 12, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_y1", 10, 0, 0, ctypes_i16, 0 }, + { "cfg_coords_y2", 14, 0, 0, ctypes_i16, 0 }, + { "cfg_map", 16, 0, 0, ctypes_ptr32, 0 }, + { "dsc_cb", 0, 0, 0, ctypes_ptr32, 0 }, + { "dsc_type", 4, 0, 0, ctypes_u8, 0 }, +}}; + +const be_ctypes_structure_t be_lv_draw_mask_saved = { + 8, /* size in bytes */ + 2, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[2]) { + { "custom_id", 4, 0, 0, ctypes_ptr32, 0 }, + { "param", 0, 0, 0, ctypes_ptr32, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_scale = { + 34, /* size in bytes */ + 15, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[15]) { + { "angle_range", 30, 0, 0, ctypes_u16, 0 }, + { "label_color", 18, 0, 0, ctypes_i16, 0 }, + { "label_gap", 16, 0, 0, ctypes_i16, 0 }, + { "max", 24, 0, 0, ctypes_i32, 0 }, + { "min", 20, 0, 0, ctypes_i32, 0 }, + { "r_mod", 28, 0, 0, ctypes_i16, 0 }, + { "rotation", 32, 0, 0, ctypes_i16, 0 }, + { "tick_cnt", 2, 0, 0, ctypes_u16, 0 }, + { "tick_color", 0, 0, 0, ctypes_u16, 1 }, + { "tick_length", 4, 0, 0, ctypes_u16, 0 }, + { "tick_major_color", 8, 0, 0, ctypes_u16, 1 }, + { "tick_major_length", 12, 0, 0, ctypes_u16, 0 }, + { "tick_major_nth", 10, 0, 0, ctypes_u16, 0 }, + { "tick_major_width", 14, 0, 0, ctypes_u16, 0 }, + { "tick_width", 6, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_indicator = { + 16, /* size in bytes */ + 5, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[5]) { + { "end_value", 12, 0, 0, ctypes_i32, 0 }, + { "opa", 5, 0, 0, ctypes_u8, 0 }, + { "scale", 0, 0, 0, ctypes_ptr32, 0 }, + { "start_value", 8, 0, 0, ctypes_i32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_indicator_needle_img = { + 24, /* size in bytes */ + 8, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[8]) { + { "end_value", 12, 0, 0, ctypes_i32, 0 }, + { "opa", 5, 0, 0, ctypes_u8, 0 }, + { "pivot_x", 20, 0, 0, ctypes_i16, 0 }, + { "pivot_y", 22, 0, 0, ctypes_i16, 0 }, + { "scale", 0, 0, 0, ctypes_ptr32, 0 }, + { "src", 16, 0, 0, ctypes_ptr32, 0 }, + { "start_value", 8, 0, 0, ctypes_i32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_indicator_needle_line = { + 22, /* size in bytes */ + 8, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[8]) { + { "color", 20, 0, 0, ctypes_u16, 1 }, + { "end_value", 12, 0, 0, ctypes_i32, 0 }, + { "opa", 5, 0, 0, ctypes_u8, 0 }, + { "r_mod", 18, 0, 0, ctypes_i16, 0 }, + { "scale", 0, 0, 0, ctypes_ptr32, 0 }, + { "start_value", 8, 0, 0, ctypes_i32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, + { "width", 16, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_indicator_arc = { + 28, /* size in bytes */ + 9, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[9]) { + { "color", 24, 0, 0, ctypes_u16, 1 }, + { "end_value", 12, 0, 0, ctypes_i32, 0 }, + { "opa", 5, 0, 0, ctypes_u8, 0 }, + { "r_mod", 26, 0, 0, ctypes_i16, 0 }, + { "scale", 0, 0, 0, ctypes_ptr32, 0 }, + { "src", 20, 0, 0, ctypes_ptr32, 0 }, + { "start_value", 8, 0, 0, ctypes_i32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, + { "width", 16, 0, 0, ctypes_u16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_meter_indicator_scale_lines = { + 23, /* size in bytes */ + 9, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[9]) { + { "color_end", 20, 0, 0, ctypes_u16, 1 }, + { "color_start", 18, 0, 0, ctypes_u16, 1 }, + { "end_value", 12, 0, 0, ctypes_i32, 0 }, + { "local_grad", 22, 0, 1, ctypes_bf, 0 }, + { "opa", 5, 0, 0, ctypes_u8, 0 }, + { "scale", 0, 0, 0, ctypes_ptr32, 0 }, + { "start_value", 8, 0, 0, ctypes_i32, 0 }, + { "type", 4, 0, 0, ctypes_u8, 0 }, + { "width_mod", 16, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_obj_class = { + 27, /* size in bytes */ + 10, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[10]) { + { "base_class", 0, 0, 0, ctypes_ptr32, 0 }, + { "constructor_cb", 4, 0, 0, ctypes_ptr32, 0 }, + { "destructor_cb", 8, 0, 0, ctypes_ptr32, 0 }, + { "editable", 24, 0, 2, ctypes_bf, 0 }, + { "event_cb", 16, 0, 0, ctypes_ptr32, 0 }, + { "group_def", 24, 2, 2, ctypes_bf, 0 }, + { "height_def", 22, 0, 0, ctypes_i16, 0 }, + { "instance_size", 24, 4, 16, ctypes_bf, 0 }, + { "user_data", 12, 0, 0, ctypes_ptr32, 0 }, + { "width_def", 20, 0, 0, ctypes_i16, 0 }, +}}; + +const be_ctypes_structure_t be_lv_event = { + 25, /* size in bytes */ + 7, /* number of elements */ + be_ctypes_instance_mappings, + (const be_ctypes_structure_item_t[7]) { + { "code", 8, 0, 0, ctypes_i32, 0 }, + { "current_target", 4, 0, 0, ctypes_ptr32, 0 }, + { "deleted", 24, 0, 1, ctypes_bf, 0 }, + { "param", 16, 0, 0, ctypes_ptr32, 0 }, + { "prev", 20, 0, 0, ctypes_ptr32, 0 }, + { "target", 0, 0, 0, ctypes_ptr32, 0 }, + { "user_data", 12, 0, 0, ctypes_ptr32, 0 }, +}}; + +static const char * be_ctypes_instance_mappings[] = { + "lv_color", + NULL +}; + +static be_define_ctypes_class(lv_area, &be_lv_area, &be_class_ctypes, "lv_area"); +static be_define_ctypes_class(lv_draw_img_dsc, &be_lv_draw_img_dsc, &be_class_ctypes, "lv_draw_img_dsc"); +static be_define_ctypes_class(lv_draw_line_dsc, &be_lv_draw_line_dsc, &be_class_ctypes, "lv_draw_line_dsc"); +static be_define_ctypes_class(lv_draw_mask_angle_param, &be_lv_draw_mask_angle_param, &be_class_ctypes, "lv_draw_mask_angle_param"); +static be_define_ctypes_class(lv_draw_mask_angle_param_cfg, &be_lv_draw_mask_angle_param_cfg, &be_class_ctypes, "lv_draw_mask_angle_param_cfg"); +static be_define_ctypes_class(lv_draw_mask_common_dsc, &be_lv_draw_mask_common_dsc, &be_class_ctypes, "lv_draw_mask_common_dsc"); +static be_define_ctypes_class(lv_draw_mask_fade_param, &be_lv_draw_mask_fade_param, &be_class_ctypes, "lv_draw_mask_fade_param"); +static be_define_ctypes_class(lv_draw_mask_fade_param_cfg, &be_lv_draw_mask_fade_param_cfg, &be_class_ctypes, "lv_draw_mask_fade_param_cfg"); +static be_define_ctypes_class(lv_draw_mask_line_param, &be_lv_draw_mask_line_param, &be_class_ctypes, "lv_draw_mask_line_param"); +static be_define_ctypes_class(lv_draw_mask_line_param_cfg, &be_lv_draw_mask_line_param_cfg, &be_class_ctypes, "lv_draw_mask_line_param_cfg"); +static be_define_ctypes_class(lv_draw_mask_map_param, &be_lv_draw_mask_map_param, &be_class_ctypes, "lv_draw_mask_map_param"); +static be_define_ctypes_class(lv_draw_mask_map_param_cfg, &be_lv_draw_mask_map_param_cfg, &be_class_ctypes, "lv_draw_mask_map_param_cfg"); +static be_define_ctypes_class(lv_draw_mask_radius_param, &be_lv_draw_mask_radius_param, &be_class_ctypes, "lv_draw_mask_radius_param"); +static be_define_ctypes_class(lv_draw_mask_radius_param_cfg, &be_lv_draw_mask_radius_param_cfg, &be_class_ctypes, "lv_draw_mask_radius_param_cfg"); +static be_define_ctypes_class(lv_draw_mask_saved, &be_lv_draw_mask_saved, &be_class_ctypes, "lv_draw_mask_saved"); +static be_define_ctypes_class(lv_draw_rect_dsc, &be_lv_draw_rect_dsc, &be_class_ctypes, "lv_draw_rect_dsc"); +static be_define_ctypes_class(lv_event, &be_lv_event, &be_class_ctypes, "lv_event"); +static be_define_ctypes_class(lv_meter_indicator, &be_lv_meter_indicator, &be_class_ctypes, "lv_meter_indicator"); +static be_define_ctypes_class(lv_meter_indicator_arc, &be_lv_meter_indicator_arc, &be_class_ctypes, "lv_meter_indicator_arc"); +static be_define_ctypes_class(lv_meter_indicator_needle_img, &be_lv_meter_indicator_needle_img, &be_class_ctypes, "lv_meter_indicator_needle_img"); +static be_define_ctypes_class(lv_meter_indicator_needle_line, &be_lv_meter_indicator_needle_line, &be_class_ctypes, "lv_meter_indicator_needle_line"); +static be_define_ctypes_class(lv_meter_indicator_scale_lines, &be_lv_meter_indicator_scale_lines, &be_class_ctypes, "lv_meter_indicator_scale_lines"); +static be_define_ctypes_class(lv_meter_scale, &be_lv_meter_scale, &be_class_ctypes, "lv_meter_scale"); +static be_define_ctypes_class(lv_obj_class, &be_lv_obj_class, &be_class_ctypes, "lv_obj_class"); +static be_define_ctypes_class(lv_point, &be_lv_point, &be_class_ctypes, "lv_point"); +static be_define_ctypes_class(lv_sqrt_res, &be_lv_sqrt_res, &be_class_ctypes, "lv_sqrt_res"); + +void be_load_ctypes_lvgl_definitions_lib(bvm *vm) { + ctypes_register_class(vm, &be_class_lv_area, &be_lv_area); + ctypes_register_class(vm, &be_class_lv_draw_img_dsc, &be_lv_draw_img_dsc); + ctypes_register_class(vm, &be_class_lv_draw_line_dsc, &be_lv_draw_line_dsc); + ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param, &be_lv_draw_mask_angle_param); + ctypes_register_class(vm, &be_class_lv_draw_mask_angle_param_cfg, &be_lv_draw_mask_angle_param_cfg); + ctypes_register_class(vm, &be_class_lv_draw_mask_common_dsc, &be_lv_draw_mask_common_dsc); + ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param, &be_lv_draw_mask_fade_param); + ctypes_register_class(vm, &be_class_lv_draw_mask_fade_param_cfg, &be_lv_draw_mask_fade_param_cfg); + ctypes_register_class(vm, &be_class_lv_draw_mask_line_param, &be_lv_draw_mask_line_param); + ctypes_register_class(vm, &be_class_lv_draw_mask_line_param_cfg, &be_lv_draw_mask_line_param_cfg); + ctypes_register_class(vm, &be_class_lv_draw_mask_map_param, &be_lv_draw_mask_map_param); + ctypes_register_class(vm, &be_class_lv_draw_mask_map_param_cfg, &be_lv_draw_mask_map_param_cfg); + ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param, &be_lv_draw_mask_radius_param); + ctypes_register_class(vm, &be_class_lv_draw_mask_radius_param_cfg, &be_lv_draw_mask_radius_param_cfg); + ctypes_register_class(vm, &be_class_lv_draw_mask_saved, &be_lv_draw_mask_saved); + ctypes_register_class(vm, &be_class_lv_draw_rect_dsc, &be_lv_draw_rect_dsc); + ctypes_register_class(vm, &be_class_lv_event, &be_lv_event); + ctypes_register_class(vm, &be_class_lv_meter_indicator, &be_lv_meter_indicator); + ctypes_register_class(vm, &be_class_lv_meter_indicator_arc, &be_lv_meter_indicator_arc); + ctypes_register_class(vm, &be_class_lv_meter_indicator_needle_img, &be_lv_meter_indicator_needle_img); + ctypes_register_class(vm, &be_class_lv_meter_indicator_needle_line, &be_lv_meter_indicator_needle_line); + ctypes_register_class(vm, &be_class_lv_meter_indicator_scale_lines, &be_lv_meter_indicator_scale_lines); + ctypes_register_class(vm, &be_class_lv_meter_scale, &be_lv_meter_scale); + ctypes_register_class(vm, &be_class_lv_obj_class, &be_lv_obj_class); + ctypes_register_class(vm, &be_class_lv_point, &be_lv_point); + ctypes_register_class(vm, &be_class_lv_sqrt_res, &be_lv_sqrt_res); +} +/********************************************************************/ + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_font_lib.c b/lib/libesp32/Berry/default/be_lvgl_font_lib.c index 0bf03c3f9..e17fd506f 100644 --- a/lib/libesp32/Berry/default/be_lvgl_font_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_font_lib.c @@ -7,36 +7,26 @@ #include "lvgl.h" -extern int lvx_init(bvm *vm); // generic function extern int lvx_tostring(bvm *vm); // generic function +extern int lvx_init_ctor(bvm *vm, void * func); +extern int be_call_c_func(bvm *vm, void * func, const char * return_type, const char * arg_type); + + +// create font either empty or from parameter on stack +int lvbe_font_create(bvm *vm) { return be_call_c_func(vm, NULL, "+lv_group", ""); } -#if BE_USE_PRECOMPILED_OBJECT #include "../generate/be_fixed_be_class_lv_font.h" -#endif void be_load_lvgl_font_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, // keeping track of styles to avoid GC - { "init", lvx_init }, - { "tostring", lvx_tostring }, - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_font", members); -#else be_pushntvclass(vm, &be_class_lv_font); be_setglobal(vm, "lv_font"); be_pop(vm, 1); -#endif } /* @const_object_info_begin class be_class_lv_font (scope: global, name: lv_font) { - .p, var - init, func(lvx_init) + _p, var + init, func(lvbe_font_create) tostring, func(lvx_tostring) } @const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_lvgl_glob_lib.c b/lib/libesp32/Berry/default/be_lvgl_glob_lib.c new file mode 100644 index 000000000..e15184fed --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_glob_lib.c @@ -0,0 +1,816 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: get_object_from_ptr +********************************************************************/ +be_local_closure(get_object_from_ptr, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("cb_obj", 1195696482, 6), + /* K1 */ be_nested_string("find", -1108310694, 4), + }), + (be_nested_const_str("get_object_from_ptr", -1949948095, 19)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[10]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x20080403, // 0002 NE R2 R2 R3 + 0x780A0004, // 0003 JMPF R2 #0009 + 0x88080100, // 0004 GETMBR R2 R0 K0 + 0x8C080501, // 0005 GETMET R2 R2 K1 + 0x5C100200, // 0006 MOVE R4 R1 + 0x7C080400, // 0007 CALL R2 2 + 0x80040400, // 0008 RET 1 R2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_event_impl +********************************************************************/ +be_local_closure(widget_event_impl, /* name */ + be_nested_proto( + 12, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("lv_obj_class", -255311002, 12), + /* K2 */ be_nested_string("lv_event", -1860877328, 8), + /* K3 */ be_nested_string("target", 845187144, 6), + /* K4 */ be_nested_string("get_object_from_ptr", -1949948095, 19), + /* K5 */ be_nested_string("instance", 193386898, 8), + /* K6 */ be_nested_string("get", 1410115415, 3), + /* K7 */ be_nested_string("widget_event", 1951408186, 12), + }), + (be_nested_const_str("widget_event_impl", -2116536735, 17)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[28]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C100200, // 0003 CALL R4 1 + 0xB8160400, // 0004 GETNGBL R5 K2 + 0x5C180400, // 0005 MOVE R6 R2 + 0x7C140200, // 0006 CALL R5 1 + 0x88180B03, // 0007 GETMBR R6 R5 K3 + 0x8C1C0104, // 0008 GETMET R7 R0 K4 + 0x60240009, // 0009 GETGBL R9 G9 + 0x5C280C00, // 000A MOVE R10 R6 + 0x7C240200, // 000B CALL R9 1 + 0x7C1C0400, // 000C CALL R7 2 + 0x60200004, // 000D GETGBL R8 G4 + 0x5C240E00, // 000E MOVE R9 R7 + 0x7C200200, // 000F CALL R8 1 + 0x1C201105, // 0010 EQ R8 R8 K5 + 0x78220008, // 0011 JMPF R8 #001B + 0x8C200706, // 0012 GETMET R8 R3 K6 + 0x5C280E00, // 0013 MOVE R10 R7 + 0x582C0007, // 0014 LDCONST R11 K7 + 0x7C200600, // 0015 CALL R8 3 + 0x78220003, // 0016 JMPF R8 #001B + 0x8C200F07, // 0017 GETMET R8 R7 K7 + 0x5C280800, // 0018 MOVE R10 R4 + 0x5C2C0A00, // 0019 MOVE R11 R5 + 0x7C200600, // 001A CALL R8 3 + 0x80000000, // 001B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: lvgl_event_dispatch +********************************************************************/ +be_local_closure(lvgl_event_dispatch, /* name */ + be_nested_proto( + 10, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("lv_event", -1860877328, 8), + /* K2 */ be_nested_string("toptr", -915119842, 5), + /* K3 */ be_nested_string("target", 845187144, 6), + /* K4 */ be_nested_string("cb_event_closure", -466699971, 16), + /* K5 */ be_nested_string("get_object_from_ptr", -1949948095, 19), + }), + (be_nested_const_str("lvgl_event_dispatch", 2104396622, 19)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[17]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0xB80E0200, // 0001 GETNGBL R3 K1 + 0x8C100502, // 0002 GETMET R4 R2 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x7C100400, // 0004 CALL R4 2 + 0x7C0C0200, // 0005 CALL R3 1 + 0x88100703, // 0006 GETMBR R4 R3 K3 + 0x88140104, // 0007 GETMBR R5 R0 K4 + 0x94140A04, // 0008 GETIDX R5 R5 R4 + 0x8C180105, // 0009 GETMET R6 R0 K5 + 0x5C200800, // 000A MOVE R8 R4 + 0x7C180400, // 000B CALL R6 2 + 0x5C1C0A00, // 000C MOVE R7 R5 + 0x5C200C00, // 000D MOVE R8 R6 + 0x5C240600, // 000E MOVE R9 R3 + 0x7C1C0400, // 000F CALL R7 2 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_dtor_impl +********************************************************************/ +be_local_closure(widget_dtor_impl, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("lv_obj_class", -255311002, 12), + /* K2 */ be_nested_string("get_object_from_ptr", -1949948095, 19), + /* K3 */ be_nested_string("instance", 193386898, 8), + /* K4 */ be_nested_string("get", 1410115415, 3), + /* K5 */ be_nested_string("widget_destructor", -87578951, 17), + }), + (be_nested_const_str("widget_dtor_impl", 520430610, 16)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[21]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C100200, // 0003 CALL R4 1 + 0x8C140102, // 0004 GETMET R5 R0 K2 + 0x5C1C0400, // 0005 MOVE R7 R2 + 0x7C140400, // 0006 CALL R5 2 + 0x60180004, // 0007 GETGBL R6 G4 + 0x5C1C0A00, // 0008 MOVE R7 R5 + 0x7C180200, // 0009 CALL R6 1 + 0x1C180D03, // 000A EQ R6 R6 K3 + 0x781A0007, // 000B JMPF R6 #0014 + 0x8C180704, // 000C GETMET R6 R3 K4 + 0x5C200A00, // 000D MOVE R8 R5 + 0x58240005, // 000E LDCONST R9 K5 + 0x7C180600, // 000F CALL R6 3 + 0x781A0002, // 0010 JMPF R6 #0014 + 0x8C180B05, // 0011 GETMET R6 R5 K5 + 0x5C200800, // 0012 MOVE R8 R4 + 0x7C180400, // 0013 CALL R6 2 + 0x80000000, // 0014 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: register_obj +********************************************************************/ +be_local_closure(register_obj, /* name */ + be_nested_proto( + 4, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("cb_obj", 1195696482, 6), + /* K1 */ be_nested_string("_p", 1594591802, 2), + }), + (be_nested_const_str("register_obj", -312352526, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[13]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x1C080403, // 0002 EQ R2 R2 R3 + 0x780A0002, // 0003 JMPF R2 #0007 + 0x60080013, // 0004 GETGBL R2 G19 + 0x7C080000, // 0005 CALL R2 0 + 0x90020002, // 0006 SETMBR R0 K0 R2 + 0x60080009, // 0007 GETGBL R2 G9 + 0x880C0301, // 0008 GETMBR R3 R1 K1 + 0x7C080200, // 0009 CALL R2 1 + 0x880C0100, // 000A GETMBR R3 R0 K0 + 0x980C0401, // 000B SETIDX R3 R2 R1 + 0x80000000, // 000C RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: gen_cb +********************************************************************/ +be_local_closure(gen_cb, /* name */ + be_nested_proto( + 8, /* nstack */ + 5, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("lvgl_event_dispatch", 2104396622, 19), + }), + (be_nested_const_str("", 607256038, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x68040000, // 0000 GETUPV R1 U0 + 0x8C040300, // 0001 GETMET R1 R1 K0 + 0x5C0C0000, // 0002 MOVE R3 R0 + 0x7C040400, // 0003 CALL R1 2 + 0x80040200, // 0004 RET 1 R1 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("lv_event_cb", -1814236280, 11), + /* K1 */ be_nested_string("cb_event_closure", -466699971, 16), + /* K2 */ be_nested_string("event_cb", -1166269279, 8), + /* K3 */ be_nested_string("tasmota", 424643812, 7), + /* K4 */ be_nested_string("gen_cb", -1049739745, 6), + /* K5 */ be_nested_string("register_obj", -312352526, 12), + /* K6 */ be_nested_string("null_cb", -1961430836, 7), + /* K7 */ be_nested_string("cb_do_nothing", 1488730702, 13), + }), + (be_nested_const_str("gen_cb", -1049739745, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[41]) { /* code */ + 0x1C140300, // 0000 EQ R5 R1 K0 + 0x78160018, // 0001 JMPF R5 #001B + 0x88140101, // 0002 GETMBR R5 R0 K1 + 0x4C180000, // 0003 LDNIL R6 + 0x1C140A06, // 0004 EQ R5 R5 R6 + 0x78160002, // 0005 JMPF R5 #0009 + 0x60140013, // 0006 GETGBL R5 G19 + 0x7C140000, // 0007 CALL R5 0 + 0x90020205, // 0008 SETMBR R0 K1 R5 + 0x88140102, // 0009 GETMBR R5 R0 K2 + 0x4C180000, // 000A LDNIL R6 + 0x1C140A06, // 000B EQ R5 R5 R6 + 0x78160004, // 000C JMPF R5 #0012 + 0xB8160600, // 000D GETNGBL R5 K3 + 0x8C140B04, // 000E GETMET R5 R5 K4 + 0x841C0000, // 000F CLOSURE R7 P0 + 0x7C140400, // 0010 CALL R5 2 + 0x90020405, // 0011 SETMBR R0 K2 R5 + 0x8C140105, // 0012 GETMET R5 R0 K5 + 0x5C1C0600, // 0013 MOVE R7 R3 + 0x7C140400, // 0014 CALL R5 2 + 0x88140101, // 0015 GETMBR R5 R0 K1 + 0x98140802, // 0016 SETIDX R5 R4 R2 + 0x88140102, // 0017 GETMBR R5 R0 K2 + 0xA0000000, // 0018 CLOSE R0 + 0x80040A00, // 0019 RET 1 R5 + 0x7002000B, // 001A JMP #0027 + 0x88140106, // 001B GETMBR R5 R0 K6 + 0x4C180000, // 001C LDNIL R6 + 0x1C140A06, // 001D EQ R5 R5 R6 + 0x78160004, // 001E JMPF R5 #0024 + 0xB8160600, // 001F GETNGBL R5 K3 + 0x8C140B04, // 0020 GETMET R5 R5 K4 + 0x881C0107, // 0021 GETMBR R7 R0 K7 + 0x7C140400, // 0022 CALL R5 2 + 0x90020C05, // 0023 SETMBR R0 K6 R5 + 0x88140106, // 0024 GETMBR R5 R0 K6 + 0xA0000000, // 0025 CLOSE R0 + 0x80040A00, // 0026 RET 1 R5 + 0xA0000000, // 0027 CLOSE R0 + 0x80000000, // 0028 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: deregister_obj +********************************************************************/ +be_local_closure(deregister_obj, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("cb_obj", 1195696482, 6), + /* K1 */ be_nested_string("remove", -611183107, 6), + /* K2 */ be_nested_string("cb_event_closure", -466699971, 16), + }), + (be_nested_const_str("deregister_obj", -385000303, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[17]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x4C0C0000, // 0001 LDNIL R3 + 0x20080403, // 0002 NE R2 R2 R3 + 0x780A0003, // 0003 JMPF R2 #0008 + 0x88080100, // 0004 GETMBR R2 R0 K0 + 0x8C080501, // 0005 GETMET R2 R2 K1 + 0x5C100200, // 0006 MOVE R4 R1 + 0x7C080400, // 0007 CALL R2 2 + 0x88080102, // 0008 GETMBR R2 R0 K2 + 0x4C0C0000, // 0009 LDNIL R3 + 0x20080403, // 000A NE R2 R2 R3 + 0x780A0003, // 000B JMPF R2 #0010 + 0x88080102, // 000C GETMBR R2 R0 K2 + 0x8C080501, // 000D GETMET R2 R2 K1 + 0x5C100200, // 000E MOVE R4 R1 + 0x7C080400, // 000F CALL R2 2 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_cb +********************************************************************/ +be_local_closure(widget_cb, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 3]) { + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("widget_ctor_impl", 194252479, 16), + }), + (be_nested_const_str("", 607256038, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("widget_dtor_impl", 520430610, 16), + }), + (be_nested_const_str("", 607256038, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 1, /* has upvals */ + ( &(const bupvaldesc[ 1]) { /* upvals */ + be_local_const_upval(1, 0), + }), + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("widget_event_impl", -2116536735, 17), + }), + (be_nested_const_str("", 607256038, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x68080000, // 0000 GETUPV R2 U0 + 0x8C080500, // 0001 GETMET R2 R2 K0 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x80040400, // 0005 RET 1 R2 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[14]) { /* constants */ + /* K0 */ be_nested_string("widget_ctor_cb", 876007560, 14), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("gen_cb", -1049739745, 6), + /* K3 */ be_nested_string("widget_dtor_cb", -1143421451, 14), + /* K4 */ be_nested_string("widget_event_cb", 1508466754, 15), + /* K5 */ be_nested_string("widget_struct_default", 781673633, 21), + /* K6 */ be_nested_string("lv_obj_class", -255311002, 12), + /* K7 */ be_nested_string("lv_obj", -37134147, 6), + /* K8 */ be_nested_string("_class", -1562820946, 6), + /* K9 */ be_nested_string("copy", -446502332, 4), + /* K10 */ be_nested_string("base_class", 1107737279, 10), + /* K11 */ be_nested_string("constructor_cb", -1805861999, 14), + /* K12 */ be_nested_string("destructor_cb", 1930283190, 13), + /* K13 */ be_nested_string("event_cb", -1166269279, 8), + }), + (be_nested_const_str("widget_cb", -1531384241, 9)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[53]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x4C080000, // 0001 LDNIL R2 + 0x1C040202, // 0002 EQ R1 R1 R2 + 0x78060004, // 0003 JMPF R1 #0009 + 0xB8060200, // 0004 GETNGBL R1 K1 + 0x8C040302, // 0005 GETMET R1 R1 K2 + 0x840C0000, // 0006 CLOSURE R3 P0 + 0x7C040400, // 0007 CALL R1 2 + 0x90020001, // 0008 SETMBR R0 K0 R1 + 0x88040103, // 0009 GETMBR R1 R0 K3 + 0x4C080000, // 000A LDNIL R2 + 0x1C040202, // 000B EQ R1 R1 R2 + 0x78060004, // 000C JMPF R1 #0012 + 0xB8060200, // 000D GETNGBL R1 K1 + 0x8C040302, // 000E GETMET R1 R1 K2 + 0x840C0001, // 000F CLOSURE R3 P1 + 0x7C040400, // 0010 CALL R1 2 + 0x90020601, // 0011 SETMBR R0 K3 R1 + 0x88040104, // 0012 GETMBR R1 R0 K4 + 0x4C080000, // 0013 LDNIL R2 + 0x1C040202, // 0014 EQ R1 R1 R2 + 0x78060004, // 0015 JMPF R1 #001B + 0xB8060200, // 0016 GETNGBL R1 K1 + 0x8C040302, // 0017 GETMET R1 R1 K2 + 0x840C0002, // 0018 CLOSURE R3 P2 + 0x7C040400, // 0019 CALL R1 2 + 0x90020801, // 001A SETMBR R0 K4 R1 + 0x88040105, // 001B GETMBR R1 R0 K5 + 0x4C080000, // 001C LDNIL R2 + 0x1C040202, // 001D EQ R1 R1 R2 + 0x78060013, // 001E JMPF R1 #0033 + 0xB8060C00, // 001F GETNGBL R1 K6 + 0xB80A0E00, // 0020 GETNGBL R2 K7 + 0x88080508, // 0021 GETMBR R2 R2 K8 + 0x7C040200, // 0022 CALL R1 1 + 0x8C040309, // 0023 GETMET R1 R1 K9 + 0x7C040200, // 0024 CALL R1 1 + 0x90020A01, // 0025 SETMBR R0 K5 R1 + 0x88040105, // 0026 GETMBR R1 R0 K5 + 0xB80A0E00, // 0027 GETNGBL R2 K7 + 0x88080508, // 0028 GETMBR R2 R2 K8 + 0x90061402, // 0029 SETMBR R1 K10 R2 + 0x88040105, // 002A GETMBR R1 R0 K5 + 0x88080100, // 002B GETMBR R2 R0 K0 + 0x90061602, // 002C SETMBR R1 K11 R2 + 0x88040105, // 002D GETMBR R1 R0 K5 + 0x88080103, // 002E GETMBR R2 R0 K3 + 0x90061802, // 002F SETMBR R1 K12 R2 + 0x88040105, // 0030 GETMBR R1 R0 K5 + 0x88080104, // 0031 GETMBR R2 R0 K4 + 0x90061A02, // 0032 SETMBR R1 K13 R2 + 0xA0000000, // 0033 CLOSE R0 + 0x80000000, // 0034 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: +********************************************************************/ +be_local_closure(anonymous, /* name */ + be_nested_proto( + 2, /* nstack */ + 0, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("LVG: call to unsupported callback", 504176819, 33), + }), + (be_nested_const_str("", 1160973142, 11)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 4]) { /* code */ + 0x60000001, // 0000 GETGBL R0 G1 + 0x58040000, // 0001 LDCONST R1 K0 + 0x7C000200, // 0002 CALL R0 1 + 0x80000000, // 0003 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: create_custom_widget +********************************************************************/ +be_local_closure(create_custom_widget, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[27]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("lv_obj", -37134147, 6), + /* K2 */ be_nested_string("value_error", 773297791, 11), + /* K3 */ be_nested_string("arg must be a subclass of lv_obj", 1641882079, 32), + /* K4 */ be_nested_string("widget_struct_by_class", -488593454, 22), + /* K5 */ be_nested_string("find", -1108310694, 4), + /* K6 */ be_nested_string("widget_cb", -1531384241, 9), + /* K7 */ be_nested_string("widget_struct_default", 781673633, 21), + /* K8 */ be_nested_string("copy", -446502332, 4), + /* K9 */ be_nested_string("base_class", 1107737279, 10), + /* K10 */ be_nested_string("_class", -1562820946, 6), + /* K11 */ be_nested_string("get", 1410115415, 3), + /* K12 */ be_nested_string("widget_width_def", -308888434, 16), + /* K13 */ be_nested_string("width_def", 1143717879, 9), + /* K14 */ be_nested_string("widget_height_def", -1163299483, 17), + /* K15 */ be_nested_string("height_def", -1946728458, 10), + /* K16 */ be_nested_string("widget_editable", -473174010, 15), + /* K17 */ be_nested_string("editable", 60532369, 8), + /* K18 */ be_nested_string("widget_group_def", 1246968785, 16), + /* K19 */ be_nested_string("group_def", 1524213328, 9), + /* K20 */ be_nested_string("widget_instance_size", 2055354779, 20), + /* K21 */ be_nested_string("instance_size", -14697778, 13), + /* K22 */ be_nested_string("lv", 1529997255, 2), + /* K23 */ be_nested_string("obj_class_create_obj", -990576664, 20), + /* K24 */ be_nested_string("_p", 1594591802, 2), + /* K25 */ be_nested_string("register_obj", -312352526, 12), + /* K26 */ be_nested_string("class_init_obj", 178410604, 14), + }), + (be_nested_const_str("create_custom_widget", 1140594778, 20)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[85]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0x6010000F, // 0001 GETGBL R4 G15 + 0x5C140200, // 0002 MOVE R5 R1 + 0xB81A0200, // 0003 GETNGBL R6 K1 + 0x7C100400, // 0004 CALL R4 2 + 0x74120000, // 0005 JMPT R4 #0007 + 0xB0060503, // 0006 RAISE 1 K2 K3 + 0x88100104, // 0007 GETMBR R4 R0 K4 + 0x4C140000, // 0008 LDNIL R5 + 0x1C100805, // 0009 EQ R4 R4 R5 + 0x78120002, // 000A JMPF R4 #000E + 0x60100013, // 000B GETGBL R4 G19 + 0x7C100000, // 000C CALL R4 0 + 0x90020804, // 000D SETMBR R0 K4 R4 + 0x60100005, // 000E GETGBL R4 G5 + 0x5C140200, // 000F MOVE R5 R1 + 0x7C100200, // 0010 CALL R4 1 + 0x88140104, // 0011 GETMBR R5 R0 K4 + 0x8C140B05, // 0012 GETMET R5 R5 K5 + 0x5C1C0800, // 0013 MOVE R7 R4 + 0x7C140400, // 0014 CALL R5 2 + 0x4C180000, // 0015 LDNIL R6 + 0x1C180A06, // 0016 EQ R6 R5 R6 + 0x781A002F, // 0017 JMPF R6 #0048 + 0x8C180106, // 0018 GETMET R6 R0 K6 + 0x7C180200, // 0019 CALL R6 1 + 0x88180107, // 001A GETMBR R6 R0 K7 + 0x8C180D08, // 001B GETMET R6 R6 K8 + 0x7C180200, // 001C CALL R6 1 + 0x5C140C00, // 001D MOVE R5 R6 + 0x60180003, // 001E GETGBL R6 G3 + 0x5C1C0200, // 001F MOVE R7 R1 + 0x7C180200, // 0020 CALL R6 1 + 0x88180D0A, // 0021 GETMBR R6 R6 K10 + 0x90161206, // 0022 SETMBR R5 K9 R6 + 0x8C18070B, // 0023 GETMET R6 R3 K11 + 0x5C200200, // 0024 MOVE R8 R1 + 0x5824000C, // 0025 LDCONST R9 K12 + 0x7C180600, // 0026 CALL R6 3 + 0x781A0001, // 0027 JMPF R6 #002A + 0x8818030C, // 0028 GETMBR R6 R1 K12 + 0x90161A06, // 0029 SETMBR R5 K13 R6 + 0x8C18070B, // 002A GETMET R6 R3 K11 + 0x5C200200, // 002B MOVE R8 R1 + 0x5824000E, // 002C LDCONST R9 K14 + 0x7C180600, // 002D CALL R6 3 + 0x781A0001, // 002E JMPF R6 #0031 + 0x8818030E, // 002F GETMBR R6 R1 K14 + 0x90161E06, // 0030 SETMBR R5 K15 R6 + 0x8C18070B, // 0031 GETMET R6 R3 K11 + 0x5C200200, // 0032 MOVE R8 R1 + 0x58240010, // 0033 LDCONST R9 K16 + 0x7C180600, // 0034 CALL R6 3 + 0x781A0001, // 0035 JMPF R6 #0038 + 0x88180310, // 0036 GETMBR R6 R1 K16 + 0x90162206, // 0037 SETMBR R5 K17 R6 + 0x8C18070B, // 0038 GETMET R6 R3 K11 + 0x5C200200, // 0039 MOVE R8 R1 + 0x58240012, // 003A LDCONST R9 K18 + 0x7C180600, // 003B CALL R6 3 + 0x781A0001, // 003C JMPF R6 #003F + 0x88180312, // 003D GETMBR R6 R1 K18 + 0x90162606, // 003E SETMBR R5 K19 R6 + 0x8C18070B, // 003F GETMET R6 R3 K11 + 0x5C200200, // 0040 MOVE R8 R1 + 0x58240014, // 0041 LDCONST R9 K20 + 0x7C180600, // 0042 CALL R6 3 + 0x781A0001, // 0043 JMPF R6 #0046 + 0x88180314, // 0044 GETMBR R6 R1 K20 + 0x90162A06, // 0045 SETMBR R5 K21 R6 + 0x88180104, // 0046 GETMBR R6 R0 K4 + 0x98180805, // 0047 SETIDX R6 R4 R5 + 0xB81A2C00, // 0048 GETNGBL R6 K22 + 0x8C180D17, // 0049 GETMET R6 R6 K23 + 0x5C200A00, // 004A MOVE R8 R5 + 0x5C240400, // 004B MOVE R9 R2 + 0x7C180600, // 004C CALL R6 3 + 0x881C0D18, // 004D GETMBR R7 R6 K24 + 0x90063007, // 004E SETMBR R1 K24 R7 + 0x8C1C0119, // 004F GETMET R7 R0 K25 + 0x5C240200, // 0050 MOVE R9 R1 + 0x7C1C0400, // 0051 CALL R7 2 + 0x8C1C031A, // 0052 GETMET R7 R1 K26 + 0x7C1C0200, // 0053 CALL R7 1 + 0x80000000, // 0054 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_ctor_impl +********************************************************************/ +be_local_closure(widget_ctor_impl, /* name */ + be_nested_proto( + 10, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("lv_obj_class", -255311002, 12), + /* K2 */ be_nested_string("get_object_from_ptr", -1949948095, 19), + /* K3 */ be_nested_string("cb_obj", 1195696482, 6), + /* K4 */ be_nested_string("find", -1108310694, 4), + /* K5 */ be_nested_string("instance", 193386898, 8), + /* K6 */ be_nested_string("get", 1410115415, 3), + /* K7 */ be_nested_string("widget_constructor", -1751181362, 18), + }), + (be_nested_const_str("widget_ctor_impl", 194252479, 16)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[28]) { /* code */ + 0xA40E0000, // 0000 IMPORT R3 K0 + 0xB8120200, // 0001 GETNGBL R4 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x7C100200, // 0003 CALL R4 1 + 0x8C140102, // 0004 GETMET R5 R0 K2 + 0x5C1C0400, // 0005 MOVE R7 R2 + 0x7C140400, // 0006 CALL R5 2 + 0x88180103, // 0007 GETMBR R6 R0 K3 + 0x8C180D04, // 0008 GETMET R6 R6 K4 + 0x5C200A00, // 0009 MOVE R8 R5 + 0x7C180400, // 000A CALL R6 2 + 0x781A0001, // 000B JMPF R6 #000E + 0x88180103, // 000C GETMBR R6 R0 K3 + 0x94140C05, // 000D GETIDX R5 R6 R5 + 0x60180004, // 000E GETGBL R6 G4 + 0x5C1C0A00, // 000F MOVE R7 R5 + 0x7C180200, // 0010 CALL R6 1 + 0x1C180D05, // 0011 EQ R6 R6 K5 + 0x781A0007, // 0012 JMPF R6 #001B + 0x8C180706, // 0013 GETMET R6 R3 K6 + 0x5C200A00, // 0014 MOVE R8 R5 + 0x58240007, // 0015 LDCONST R9 K7 + 0x7C180600, // 0016 CALL R6 3 + 0x781A0002, // 0017 JMPF R6 #001B + 0x8C180B07, // 0018 GETMET R6 R5 K7 + 0x5C200800, // 0019 MOVE R8 R4 + 0x7C180400, // 001A CALL R6 2 + 0x80000000, // 001B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: LVGL_glob +********************************************************************/ +be_local_class(LVGL_glob, + 9, + NULL, + be_nested_map(20, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("widget_ctor_cb", 876007560, 14, 9), be_const_var(4) }, + { be_nested_key("get_object_from_ptr", -1949948095, 19, 4), be_const_closure(get_object_from_ptr_closure) }, + { be_nested_key("cb_obj", 1195696482, 6, 7), be_const_var(0) }, + { be_nested_key("widget_struct_by_class", -488593454, 22, -1), be_const_var(8) }, + { be_nested_key("widget_event_impl", -2116536735, 17, -1), be_const_closure(widget_event_impl_closure) }, + { be_nested_key("widget_dtor_cb", -1143421451, 14, 6), be_const_var(5) }, + { be_nested_key("cb_event_closure", -466699971, 16, -1), be_const_var(1) }, + { be_nested_key("lvgl_event_dispatch", 2104396622, 19, 16), be_const_closure(lvgl_event_dispatch_closure) }, + { be_nested_key("widget_dtor_impl", 520430610, 16, -1), be_const_closure(widget_dtor_impl_closure) }, + { be_nested_key("null_cb", -1961430836, 7, -1), be_const_var(3) }, + { be_nested_key("register_obj", -312352526, 12, 8), be_const_closure(register_obj_closure) }, + { be_nested_key("gen_cb", -1049739745, 6, -1), be_const_closure(gen_cb_closure) }, + { be_nested_key("widget_struct_default", 781673633, 21, -1), be_const_var(7) }, + { be_nested_key("deregister_obj", -385000303, 14, 12), be_const_closure(deregister_obj_closure) }, + { be_nested_key("widget_event_cb", 1508466754, 15, -1), be_const_var(6) }, + { be_nested_key("widget_cb", -1531384241, 9, -1), be_const_closure(widget_cb_closure) }, + { be_nested_key("cb_do_nothing", 1488730702, 13, 3), be_const_closure(anonymous_closure) }, + { be_nested_key("event_cb", -1166269279, 8, -1), be_const_var(2) }, + { be_nested_key("create_custom_widget", 1140594778, 20, -1), be_const_closure(create_custom_widget_closure) }, + { be_nested_key("widget_ctor_impl", 194252479, 16, -1), be_const_closure(widget_ctor_impl_closure) }, + })), + (be_nested_const_str("LVGL_glob", 315437079, 9)) +); +/*******************************************************************/ + +void be_load_LVGL_glob_class(bvm *vm) { + be_pushntvclass(vm, &be_class_LVGL_glob); + be_setglobal(vm, "LVGL_glob"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_module.c b/lib/libesp32/Berry/default/be_lvgl_module.c new file mode 100644 index 000000000..e4cb5c74a --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_module.c @@ -0,0 +1,747 @@ +/******************************************************************** + * Generated code, don't edit + *******************************************************************/ +/******************************************************************** + * LVGL Module + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" +#include "be_lvgl.h" + +extern int lv0_member(bvm *vm); // resolve virtual members + +extern int lv0_start(bvm *vm); + +extern int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic + +extern int lv0_load_montserrat_font(bvm *vm); +extern int lv0_load_seg7_font(bvm *vm); +extern int lv0_load_font(bvm *vm); +extern int lv0_load_freetype_font(bvm *vm); + +extern int lv0_screenshot(bvm *vm); + +static int lv_get_hor_res(void) { + return lv_disp_get_hor_res(lv_disp_get_default()); +} +static int lv_get_ver_res(void) { + return lv_disp_get_ver_res(lv_disp_get_default()); +} + +/* `lv` methods */ +const lvbe_call_c_t lv_func[] = { + + { "clamp_height", (void*) &lv_clamp_height, "i", "iiii" }, + { "clamp_width", (void*) &lv_clamp_width, "i", "iiii" }, + { "color_mix", (void*) &lv_color_mix, "lv_color", "(lv_color)(lv_color)i" }, + { "dpx", (void*) &lv_dpx, "i", "i" }, + { "draw_arc", (void*) &lv_draw_arc, "", "iiiii(lv_area)(lv_draw_arc_dsc)" }, + { "draw_arc_dsc_init", (void*) &lv_draw_arc_dsc_init, "", "(lv_draw_arc_dsc)" }, + { "draw_arc_get_area", (void*) &lv_draw_arc_get_area, "", "iiiiiib(lv_area)" }, + { "draw_img", (void*) &lv_draw_img, "", "(lv_area)(lv_area).(lv_draw_img_dsc)" }, + { "draw_img_dsc_init", (void*) &lv_draw_img_dsc_init, "", "(lv_draw_img_dsc)" }, + { "draw_label", (void*) &lv_draw_label, "", "(lv_area)(lv_area)(lv_draw_label_dsc)s(lv_draw_label_hint)" }, + { "draw_label_dsc_init", (void*) &lv_draw_label_dsc_init, "", "(lv_draw_label_dsc)" }, + { "draw_letter", (void*) &lv_draw_letter, "", "(lv_point)(lv_area)(lv_font)i(lv_color)ii" }, + { "draw_line", (void*) &lv_draw_line, "", "(lv_point)(lv_point)(lv_area)(lv_draw_line_dsc)" }, + { "draw_line_dsc_init", (void*) &lv_draw_line_dsc_init, "", "(lv_draw_line_dsc)" }, + { "draw_mask_add", (void*) &lv_draw_mask_add, "i", ".." }, + { "draw_mask_angle_init", (void*) &lv_draw_mask_angle_init, "", "(lv_draw_mask_angle_param)iiii" }, + { "draw_mask_fade_init", (void*) &lv_draw_mask_fade_init, "", "(lv_draw_mask_fade_param)(lv_area)iiii" }, + { "draw_mask_get_cnt", (void*) &lv_draw_mask_get_cnt, "i", "" }, + { "draw_mask_line_angle_init", (void*) &lv_draw_mask_line_angle_init, "", "(lv_draw_mask_line_param)iiii" }, + { "draw_mask_line_points_init", (void*) &lv_draw_mask_line_points_init, "", "(lv_draw_mask_line_param)iiiii" }, + { "draw_mask_map_init", (void*) &lv_draw_mask_map_init, "", "(lv_draw_mask_map_param)(lv_area)(lv_opa)" }, + { "draw_mask_radius_init", (void*) &lv_draw_mask_radius_init, "", "(lv_draw_mask_radius_param)(lv_area)ib" }, + { "draw_mask_remove_custom", (void*) &lv_draw_mask_remove_custom, ".", "." }, + { "draw_mask_remove_id", (void*) &lv_draw_mask_remove_id, ".", "i" }, + { "draw_polygon", (void*) &lv_draw_polygon, "", "ii(lv_area)(lv_draw_rect_dsc)" }, + { "draw_rect", (void*) &lv_draw_rect, "", "(lv_area)(lv_area)(lv_draw_rect_dsc)" }, + { "draw_rect_dsc_init", (void*) &lv_draw_rect_dsc_init, "", "(lv_draw_rect_dsc)" }, + { "draw_triangle", (void*) &lv_draw_triangle, "", "i(lv_area)(lv_draw_rect_dsc)" }, + { "event_register_id", (void*) &lv_event_register_id, "i", "" }, + { "event_send", (void*) &lv_event_send, "i", "(lv_obj)i." }, + { "event_set_cover_res", (void*) &lv_event_set_cover_res, "", "(lv_event)(lv_cover_res)" }, + { "event_set_ext_draw_size", (void*) &lv_event_set_ext_draw_size, "", "(lv_event)i" }, + { "get_hor_res", (void*) &lv_get_hor_res, "i", "" }, + { "get_ver_res", (void*) &lv_get_ver_res, "i", "" }, + { "group_get_default", (void*) &lv_group_get_default, "lv_group", "" }, + { "img_src_get_type", (void*) &lv_img_src_get_type, "i", "." }, + { "indev_get_obj_act", (void*) &lv_indev_get_obj_act, "lv_obj", "" }, + { "indev_read_timer_cb", (void*) &lv_indev_read_timer_cb, "", "(lv_timer)" }, + { "layer_sys", (void*) &lv_layer_sys, "lv_obj", "" }, + { "layer_top", (void*) &lv_layer_top, "lv_obj", "" }, + { "layout_register", (void*) &lv_layout_register, "i", "^lv_layout_update_cb^." }, + { "obj_class_create_obj", (void*) &lv_obj_class_create_obj, "lv_obj", "(_lv_obj_class)(lv_obj)" }, + { "obj_del_anim_ready_cb", (void*) &lv_obj_del_anim_ready_cb, "", "(lv_anim)" }, + { "obj_draw_dsc_init", (void*) &lv_obj_draw_dsc_init, "", "(lv_obj_draw_part_dsc)(lv_area)" }, + { "obj_enable_style_refresh", (void*) &lv_obj_enable_style_refresh, "", "b" }, + { "obj_event_base", (void*) &lv_obj_event_base, "i", "(lv_obj_class)(lv_event)" }, + { "obj_report_style_change", (void*) &lv_obj_report_style_change, "", "(lv_style)" }, + { "obj_style_get_selector_part", (void*) &lv_obj_style_get_selector_part, "i", "(lv_style_selector)" }, + { "obj_style_get_selector_state", (void*) &lv_obj_style_get_selector_state, "i", "(lv_style_selector)" }, + { "refr_now", (void*) &lv_refr_now, "", "(lv_disp)" }, + { "scr_act", (void*) &lv_scr_act, "lv_obj", "" }, + { "scr_load", (void*) &lv_scr_load, "", "(lv_obj)" }, + { "scr_load_anim", (void*) &lv_scr_load_anim, "", "(lv_obj)iiib" }, + { "theme_apply", (void*) &lv_theme_apply, "", "(lv_obj)" }, + { "theme_get_color_primary", (void*) &lv_theme_get_color_primary, "lv_color", "(lv_obj)" }, + { "theme_get_color_secondary", (void*) &lv_theme_get_color_secondary, "lv_color", "(lv_obj)" }, + { "theme_get_font_large", (void*) &lv_theme_get_font_large, "lv_font", "(lv_obj)" }, + { "theme_get_font_normal", (void*) &lv_theme_get_font_normal, "lv_font", "(lv_obj)" }, + { "theme_get_font_small", (void*) &lv_theme_get_font_small, "lv_font", "(lv_obj)" }, + { "theme_set_apply_cb", (void*) &lv_theme_set_apply_cb, "", "(lv_theme)^lv_theme_apply_cb^" }, + { "theme_set_parent", (void*) &lv_theme_set_parent, "", "(lv_theme)(lv_theme)" }, + +}; +const size_t lv_func_size = sizeof(lv_func) / sizeof(lv_func[0]); + + + + +typedef struct be_constint_t { + const char * name; + int32_t value; +} be_constint_t; + +const be_constint_t lv0_constants[] = { + + { "ALIGN_BOTTOM_LEFT", LV_ALIGN_BOTTOM_LEFT }, + { "ALIGN_BOTTOM_MID", LV_ALIGN_BOTTOM_MID }, + { "ALIGN_BOTTOM_RIGHT", LV_ALIGN_BOTTOM_RIGHT }, + { "ALIGN_CENTER", LV_ALIGN_CENTER }, + { "ALIGN_DEFAULT", LV_ALIGN_DEFAULT }, + { "ALIGN_LEFT_MID", LV_ALIGN_LEFT_MID }, + { "ALIGN_OUT_BOTTOM_LEFT", LV_ALIGN_OUT_BOTTOM_LEFT }, + { "ALIGN_OUT_BOTTOM_MID", LV_ALIGN_OUT_BOTTOM_MID }, + { "ALIGN_OUT_BOTTOM_RIGHT", LV_ALIGN_OUT_BOTTOM_RIGHT }, + { "ALIGN_OUT_LEFT_BOTTOM", LV_ALIGN_OUT_LEFT_BOTTOM }, + { "ALIGN_OUT_LEFT_MID", LV_ALIGN_OUT_LEFT_MID }, + { "ALIGN_OUT_LEFT_TOP", LV_ALIGN_OUT_LEFT_TOP }, + { "ALIGN_OUT_RIGHT_BOTTOM", LV_ALIGN_OUT_RIGHT_BOTTOM }, + { "ALIGN_OUT_RIGHT_MID", LV_ALIGN_OUT_RIGHT_MID }, + { "ALIGN_OUT_RIGHT_TOP", LV_ALIGN_OUT_RIGHT_TOP }, + { "ALIGN_OUT_TOP_LEFT", LV_ALIGN_OUT_TOP_LEFT }, + { "ALIGN_OUT_TOP_MID", LV_ALIGN_OUT_TOP_MID }, + { "ALIGN_OUT_TOP_RIGHT", LV_ALIGN_OUT_TOP_RIGHT }, + { "ALIGN_RIGHT_MID", LV_ALIGN_RIGHT_MID }, + { "ALIGN_TOP_LEFT", LV_ALIGN_TOP_LEFT }, + { "ALIGN_TOP_MID", LV_ALIGN_TOP_MID }, + { "ALIGN_TOP_RIGHT", LV_ALIGN_TOP_RIGHT }, + { "ANIM_IMG_PART_MAIN", LV_ANIM_IMG_PART_MAIN }, + { "ANIM_OFF", LV_ANIM_OFF }, + { "ANIM_ON", LV_ANIM_ON }, + { "ARC_MODE_NORMAL", LV_ARC_MODE_NORMAL }, + { "ARC_MODE_REVERSE", LV_ARC_MODE_REVERSE }, + { "ARC_MODE_SYMMETRICAL", LV_ARC_MODE_SYMMETRICAL }, + { "BAR_MODE_NORMAL", LV_BAR_MODE_NORMAL }, + { "BAR_MODE_RANGE", LV_BAR_MODE_RANGE }, + { "BAR_MODE_SYMMETRICAL", LV_BAR_MODE_SYMMETRICAL }, + { "BASE_DIR_AUTO", LV_BASE_DIR_AUTO }, + { "BASE_DIR_LTR", LV_BASE_DIR_LTR }, + { "BASE_DIR_NEUTRAL", LV_BASE_DIR_NEUTRAL }, + { "BASE_DIR_RTL", LV_BASE_DIR_RTL }, + { "BASE_DIR_WEAK", LV_BASE_DIR_WEAK }, + { "BLEND_MODE_ADDITIVE", LV_BLEND_MODE_ADDITIVE }, + { "BLEND_MODE_NORMAL", LV_BLEND_MODE_NORMAL }, + { "BLEND_MODE_SUBTRACTIVE", LV_BLEND_MODE_SUBTRACTIVE }, + { "BORDER_SIDE_BOTTOM", LV_BORDER_SIDE_BOTTOM }, + { "BORDER_SIDE_FULL", LV_BORDER_SIDE_FULL }, + { "BORDER_SIDE_INTERNAL", LV_BORDER_SIDE_INTERNAL }, + { "BORDER_SIDE_LEFT", LV_BORDER_SIDE_LEFT }, + { "BORDER_SIDE_NONE", LV_BORDER_SIDE_NONE }, + { "BORDER_SIDE_RIGHT", LV_BORDER_SIDE_RIGHT }, + { "BORDER_SIDE_TOP", LV_BORDER_SIDE_TOP }, + { "BTNMATRIX_CTRL_CHECKABLE", LV_BTNMATRIX_CTRL_CHECKABLE }, + { "BTNMATRIX_CTRL_CHECKED", LV_BTNMATRIX_CTRL_CHECKED }, + { "BTNMATRIX_CTRL_CLICK_TRIG", LV_BTNMATRIX_CTRL_CLICK_TRIG }, + { "BTNMATRIX_CTRL_CUSTOM_1", LV_BTNMATRIX_CTRL_CUSTOM_1 }, + { "BTNMATRIX_CTRL_CUSTOM_2", LV_BTNMATRIX_CTRL_CUSTOM_2 }, + { "BTNMATRIX_CTRL_DISABLED", LV_BTNMATRIX_CTRL_DISABLED }, + { "BTNMATRIX_CTRL_HIDDEN", LV_BTNMATRIX_CTRL_HIDDEN }, + { "BTNMATRIX_CTRL_NO_REPEAT", LV_BTNMATRIX_CTRL_NO_REPEAT }, + { "BTNMATRIX_CTRL_RECOLOR", LV_BTNMATRIX_CTRL_RECOLOR }, + { "CHART_AXIS_PRIMARY_X", LV_CHART_AXIS_PRIMARY_X }, + { "CHART_AXIS_PRIMARY_Y", LV_CHART_AXIS_PRIMARY_Y }, + { "CHART_AXIS_SECONDARY_X", LV_CHART_AXIS_SECONDARY_X }, + { "CHART_AXIS_SECONDARY_Y", LV_CHART_AXIS_SECONDARY_Y }, + { "CHART_TYPE_BAR", LV_CHART_TYPE_BAR }, + { "CHART_TYPE_LINE", LV_CHART_TYPE_LINE }, + { "CHART_TYPE_NONE", LV_CHART_TYPE_NONE }, + { "CHART_TYPE_SCATTER", LV_CHART_TYPE_SCATTER }, + { "CHART_UPDATE_MODE_CIRCULAR", LV_CHART_UPDATE_MODE_CIRCULAR }, + { "CHART_UPDATE_MODE_SHIFT", LV_CHART_UPDATE_MODE_SHIFT }, + { "COLORWHEEL_MODE_HUE", LV_COLORWHEEL_MODE_HUE }, + { "COLORWHEEL_MODE_SATURATION", LV_COLORWHEEL_MODE_SATURATION }, + { "COLORWHEEL_MODE_VALUE", LV_COLORWHEEL_MODE_VALUE }, + { "COLOR_AQUA", 65535 }, + { "COLOR_BLACK", 0 }, + { "COLOR_BLUE", 255 }, + { "COLOR_CYAN", 65535 }, + { "COLOR_GRAY", 8421504 }, + { "COLOR_GREEN", 32768 }, + { "COLOR_LIME", 65280 }, + { "COLOR_MAGENTA", 16711935 }, + { "COLOR_MAROON", 8388608 }, + { "COLOR_NAVY", 128 }, + { "COLOR_OLIVE", 8421376 }, + { "COLOR_PURPLE", 8388736 }, + { "COLOR_RED", 16711680 }, + { "COLOR_SILVER", 12632256 }, + { "COLOR_TEAL", 32896 }, + { "COLOR_WHITE", 16777215 }, + { "COLOR_YELLOW", 16776960 }, + { "COVER_RES_COVER", LV_COVER_RES_COVER }, + { "COVER_RES_MASKED", LV_COVER_RES_MASKED }, + { "COVER_RES_NOT_COVER", LV_COVER_RES_NOT_COVER }, + { "DIR_ALL", LV_DIR_ALL }, + { "DIR_BOTTOM", LV_DIR_BOTTOM }, + { "DIR_HOR", LV_DIR_HOR }, + { "DIR_LEFT", LV_DIR_LEFT }, + { "DIR_NONE", LV_DIR_NONE }, + { "DIR_RIGHT", LV_DIR_RIGHT }, + { "DIR_TOP", LV_DIR_TOP }, + { "DIR_VER", LV_DIR_VER }, + { "DISP_ROT_180", LV_DISP_ROT_180 }, + { "DISP_ROT_270", LV_DISP_ROT_270 }, + { "DISP_ROT_90", LV_DISP_ROT_90 }, + { "DISP_ROT_NONE", LV_DISP_ROT_NONE }, + { "DRAW_MASK_LINE_SIDE_BOTTOM", LV_DRAW_MASK_LINE_SIDE_BOTTOM }, + { "DRAW_MASK_LINE_SIDE_LEFT", LV_DRAW_MASK_LINE_SIDE_LEFT }, + { "DRAW_MASK_LINE_SIDE_RIGHT", LV_DRAW_MASK_LINE_SIDE_RIGHT }, + { "DRAW_MASK_LINE_SIDE_TOP", LV_DRAW_MASK_LINE_SIDE_TOP }, + { "DRAW_MASK_RES_CHANGED", LV_DRAW_MASK_RES_CHANGED }, + { "DRAW_MASK_RES_FULL_COVER", LV_DRAW_MASK_RES_FULL_COVER }, + { "DRAW_MASK_RES_TRANSP", LV_DRAW_MASK_RES_TRANSP }, + { "DRAW_MASK_RES_UNKNOWN", LV_DRAW_MASK_RES_UNKNOWN }, + { "DRAW_MASK_TYPE_ANGLE", LV_DRAW_MASK_TYPE_ANGLE }, + { "DRAW_MASK_TYPE_FADE", LV_DRAW_MASK_TYPE_FADE }, + { "DRAW_MASK_TYPE_LINE", LV_DRAW_MASK_TYPE_LINE }, + { "DRAW_MASK_TYPE_MAP", LV_DRAW_MASK_TYPE_MAP }, + { "DRAW_MASK_TYPE_RADIUS", LV_DRAW_MASK_TYPE_RADIUS }, + { "EVENT_ALL", LV_EVENT_ALL }, + { "EVENT_CANCEL", LV_EVENT_CANCEL }, + { "EVENT_CHILD_CHANGED", LV_EVENT_CHILD_CHANGED }, + { "EVENT_CLICKED", LV_EVENT_CLICKED }, + { "EVENT_COVER_CHECK", LV_EVENT_COVER_CHECK }, + { "EVENT_DEFOCUSED", LV_EVENT_DEFOCUSED }, + { "EVENT_DELETE", LV_EVENT_DELETE }, + { "EVENT_DRAW_MAIN", LV_EVENT_DRAW_MAIN }, + { "EVENT_DRAW_MAIN_BEGIN", LV_EVENT_DRAW_MAIN_BEGIN }, + { "EVENT_DRAW_MAIN_END", LV_EVENT_DRAW_MAIN_END }, + { "EVENT_DRAW_PART_BEGIN", LV_EVENT_DRAW_PART_BEGIN }, + { "EVENT_DRAW_PART_END", LV_EVENT_DRAW_PART_END }, + { "EVENT_DRAW_POST", LV_EVENT_DRAW_POST }, + { "EVENT_DRAW_POST_BEGIN", LV_EVENT_DRAW_POST_BEGIN }, + { "EVENT_DRAW_POST_END", LV_EVENT_DRAW_POST_END }, + { "EVENT_FOCUSED", LV_EVENT_FOCUSED }, + { "EVENT_GESTURE", LV_EVENT_GESTURE }, + { "EVENT_GET_SELF_SIZE", LV_EVENT_GET_SELF_SIZE }, + { "EVENT_HIT_TEST", LV_EVENT_HIT_TEST }, + { "EVENT_INSERT", LV_EVENT_INSERT }, + { "EVENT_KEY", LV_EVENT_KEY }, + { "EVENT_LAYOUT_CHANGED", LV_EVENT_LAYOUT_CHANGED }, + { "EVENT_LEAVE", LV_EVENT_LEAVE }, + { "EVENT_LONG_PRESSED", LV_EVENT_LONG_PRESSED }, + { "EVENT_LONG_PRESSED_REPEAT", LV_EVENT_LONG_PRESSED_REPEAT }, + { "EVENT_PRESSED", LV_EVENT_PRESSED }, + { "EVENT_PRESSING", LV_EVENT_PRESSING }, + { "EVENT_PRESS_LOST", LV_EVENT_PRESS_LOST }, + { "EVENT_READY", LV_EVENT_READY }, + { "EVENT_REFRESH", LV_EVENT_REFRESH }, + { "EVENT_REFR_EXT_DRAW_SIZE", LV_EVENT_REFR_EXT_DRAW_SIZE }, + { "EVENT_RELEASED", LV_EVENT_RELEASED }, + { "EVENT_SCROLL", LV_EVENT_SCROLL }, + { "EVENT_SCROLL_BEGIN", LV_EVENT_SCROLL_BEGIN }, + { "EVENT_SCROLL_END", LV_EVENT_SCROLL_END }, + { "EVENT_SHORT_CLICKED", LV_EVENT_SHORT_CLICKED }, + { "EVENT_SIZE_CHANGED", LV_EVENT_SIZE_CHANGED }, + { "EVENT_STYLE_CHANGED", LV_EVENT_STYLE_CHANGED }, + { "EVENT_VALUE_CHANGED", LV_EVENT_VALUE_CHANGED }, + { "FLEX_ALIGN_CENTER", LV_FLEX_ALIGN_CENTER }, + { "FLEX_ALIGN_END", LV_FLEX_ALIGN_END }, + { "FLEX_ALIGN_SPACE_AROUND", LV_FLEX_ALIGN_SPACE_AROUND }, + { "FLEX_ALIGN_SPACE_BETWEEN", LV_FLEX_ALIGN_SPACE_BETWEEN }, + { "FLEX_ALIGN_SPACE_EVENLY", LV_FLEX_ALIGN_SPACE_EVENLY }, + { "FLEX_ALIGN_START", LV_FLEX_ALIGN_START }, + { "FLEX_FLOW_COLUMN", LV_FLEX_FLOW_COLUMN }, + { "FLEX_FLOW_COLUMN_REVERSE", LV_FLEX_FLOW_COLUMN_REVERSE }, + { "FLEX_FLOW_COLUMN_WRAP", LV_FLEX_FLOW_COLUMN_WRAP }, + { "FLEX_FLOW_COLUMN_WRAP_REVERSE", LV_FLEX_FLOW_COLUMN_WRAP_REVERSE }, + { "FLEX_FLOW_ROW", LV_FLEX_FLOW_ROW }, + { "FLEX_FLOW_ROW_REVERSE", LV_FLEX_FLOW_ROW_REVERSE }, + { "FLEX_FLOW_ROW_WRAP", LV_FLEX_FLOW_ROW_WRAP }, + { "FLEX_FLOW_ROW_WRAP_REVERSE", LV_FLEX_FLOW_ROW_WRAP_REVERSE }, + { "FS_MODE_RD", LV_FS_MODE_RD }, + { "FS_MODE_WR", LV_FS_MODE_WR }, + { "FS_RES_BUSY", LV_FS_RES_BUSY }, + { "FS_RES_DENIED", LV_FS_RES_DENIED }, + { "FS_RES_FS_ERR", LV_FS_RES_FS_ERR }, + { "FS_RES_FULL", LV_FS_RES_FULL }, + { "FS_RES_HW_ERR", LV_FS_RES_HW_ERR }, + { "FS_RES_INV_PARAM", LV_FS_RES_INV_PARAM }, + { "FS_RES_LOCKED", LV_FS_RES_LOCKED }, + { "FS_RES_NOT_EX", LV_FS_RES_NOT_EX }, + { "FS_RES_NOT_IMP", LV_FS_RES_NOT_IMP }, + { "FS_RES_OK", LV_FS_RES_OK }, + { "FS_RES_OUT_OF_MEM", LV_FS_RES_OUT_OF_MEM }, + { "FS_RES_TOUT", LV_FS_RES_TOUT }, + { "FS_RES_UNKNOWN", LV_FS_RES_UNKNOWN }, + { "FS_SEEK_CUR", LV_FS_SEEK_CUR }, + { "FS_SEEK_END", LV_FS_SEEK_END }, + { "FS_SEEK_SET", LV_FS_SEEK_SET }, + { "GRAD_DIR_HOR", LV_GRAD_DIR_HOR }, + { "GRAD_DIR_NONE", LV_GRAD_DIR_NONE }, + { "GRAD_DIR_VER", LV_GRAD_DIR_VER }, + { "GRID_ALIGN_CENTER", LV_GRID_ALIGN_CENTER }, + { "GRID_ALIGN_END", LV_GRID_ALIGN_END }, + { "GRID_ALIGN_SPACE_AROUND", LV_GRID_ALIGN_SPACE_AROUND }, + { "GRID_ALIGN_SPACE_BETWEEN", LV_GRID_ALIGN_SPACE_BETWEEN }, + { "GRID_ALIGN_SPACE_EVENLY", LV_GRID_ALIGN_SPACE_EVENLY }, + { "GRID_ALIGN_START", LV_GRID_ALIGN_START }, + { "GRID_ALIGN_STRETCH", LV_GRID_ALIGN_STRETCH }, + { "GROUP_REFOCUS_POLICY_NEXT", LV_GROUP_REFOCUS_POLICY_NEXT }, + { "GROUP_REFOCUS_POLICY_PREV", LV_GROUP_REFOCUS_POLICY_PREV }, + { "IMGBTN_STATE_CHECKED_DISABLED", LV_IMGBTN_STATE_CHECKED_DISABLED }, + { "IMGBTN_STATE_CHECKED_PRESSED", LV_IMGBTN_STATE_CHECKED_PRESSED }, + { "IMGBTN_STATE_CHECKED_RELEASED", LV_IMGBTN_STATE_CHECKED_RELEASED }, + { "IMGBTN_STATE_DISABLED", LV_IMGBTN_STATE_DISABLED }, + { "IMGBTN_STATE_PRESSED", LV_IMGBTN_STATE_PRESSED }, + { "IMGBTN_STATE_RELEASED", LV_IMGBTN_STATE_RELEASED }, + { "IMG_CF_ALPHA_1BIT", LV_IMG_CF_ALPHA_1BIT }, + { "IMG_CF_ALPHA_2BIT", LV_IMG_CF_ALPHA_2BIT }, + { "IMG_CF_ALPHA_4BIT", LV_IMG_CF_ALPHA_4BIT }, + { "IMG_CF_ALPHA_8BIT", LV_IMG_CF_ALPHA_8BIT }, + { "IMG_CF_INDEXED_1BIT", LV_IMG_CF_INDEXED_1BIT }, + { "IMG_CF_INDEXED_2BIT", LV_IMG_CF_INDEXED_2BIT }, + { "IMG_CF_INDEXED_4BIT", LV_IMG_CF_INDEXED_4BIT }, + { "IMG_CF_INDEXED_8BIT", LV_IMG_CF_INDEXED_8BIT }, + { "IMG_CF_RAW", LV_IMG_CF_RAW }, + { "IMG_CF_RAW_ALPHA", LV_IMG_CF_RAW_ALPHA }, + { "IMG_CF_RAW_CHROMA_KEYED", LV_IMG_CF_RAW_CHROMA_KEYED }, + { "IMG_CF_TRUE_COLOR", LV_IMG_CF_TRUE_COLOR }, + { "IMG_CF_TRUE_COLOR_ALPHA", LV_IMG_CF_TRUE_COLOR_ALPHA }, + { "IMG_CF_TRUE_COLOR_CHROMA_KEYED", LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED }, + { "IMG_CF_UNKNOWN", LV_IMG_CF_UNKNOWN }, + { "IMG_SRC_FILE", LV_IMG_SRC_FILE }, + { "IMG_SRC_SYMBOL", LV_IMG_SRC_SYMBOL }, + { "IMG_SRC_UNKNOWN", LV_IMG_SRC_UNKNOWN }, + { "IMG_SRC_VARIABLE", LV_IMG_SRC_VARIABLE }, + { "INDEV_STATE_PRESSED", LV_INDEV_STATE_PRESSED }, + { "INDEV_STATE_RELEASED", LV_INDEV_STATE_RELEASED }, + { "INDEV_TYPE_BUTTON", LV_INDEV_TYPE_BUTTON }, + { "INDEV_TYPE_ENCODER", LV_INDEV_TYPE_ENCODER }, + { "INDEV_TYPE_KEYPAD", LV_INDEV_TYPE_KEYPAD }, + { "INDEV_TYPE_NONE", LV_INDEV_TYPE_NONE }, + { "INDEV_TYPE_POINTER", LV_INDEV_TYPE_POINTER }, + { "KEY_BACKSPACE", LV_KEY_BACKSPACE }, + { "KEY_DEL", LV_KEY_DEL }, + { "KEY_DOWN", LV_KEY_DOWN }, + { "KEY_END", LV_KEY_END }, + { "KEY_ENTER", LV_KEY_ENTER }, + { "KEY_ESC", LV_KEY_ESC }, + { "KEY_HOME", LV_KEY_HOME }, + { "KEY_LEFT", LV_KEY_LEFT }, + { "KEY_NEXT", LV_KEY_NEXT }, + { "KEY_PREV", LV_KEY_PREV }, + { "KEY_RIGHT", LV_KEY_RIGHT }, + { "KEY_UP", LV_KEY_UP }, + { "LABEL_LONG_CLIP", LV_LABEL_LONG_CLIP }, + { "LABEL_LONG_DOT", LV_LABEL_LONG_DOT }, + { "LABEL_LONG_SCROLL", LV_LABEL_LONG_SCROLL }, + { "LABEL_LONG_SCROLL_CIRCULAR", LV_LABEL_LONG_SCROLL_CIRCULAR }, + { "LABEL_LONG_WRAP", LV_LABEL_LONG_WRAP }, + { "METER_INDICATOR_TYPE_ARC", LV_METER_INDICATOR_TYPE_ARC }, + { "METER_INDICATOR_TYPE_NEEDLE_IMG", LV_METER_INDICATOR_TYPE_NEEDLE_IMG }, + { "METER_INDICATOR_TYPE_NEEDLE_LINE", LV_METER_INDICATOR_TYPE_NEEDLE_LINE }, + { "METER_INDICATOR_TYPE_SCALE_LINES", LV_METER_INDICATOR_TYPE_SCALE_LINES }, + { "OBJ_CLASS_EDITABLE_FALSE", LV_OBJ_CLASS_EDITABLE_FALSE }, + { "OBJ_CLASS_EDITABLE_INHERIT", LV_OBJ_CLASS_EDITABLE_INHERIT }, + { "OBJ_CLASS_EDITABLE_TRUE", LV_OBJ_CLASS_EDITABLE_TRUE }, + { "OBJ_CLASS_GROUP_DEF_FALSE", LV_OBJ_CLASS_GROUP_DEF_FALSE }, + { "OBJ_CLASS_GROUP_DEF_INHERIT", LV_OBJ_CLASS_GROUP_DEF_INHERIT }, + { "OBJ_CLASS_GROUP_DEF_TRUE", LV_OBJ_CLASS_GROUP_DEF_TRUE }, + { "OBJ_FLAG_ADV_HITTEST", LV_OBJ_FLAG_ADV_HITTEST }, + { "OBJ_FLAG_CHECKABLE", LV_OBJ_FLAG_CHECKABLE }, + { "OBJ_FLAG_CLICKABLE", LV_OBJ_FLAG_CLICKABLE }, + { "OBJ_FLAG_CLICK_FOCUSABLE", LV_OBJ_FLAG_CLICK_FOCUSABLE }, + { "OBJ_FLAG_EVENT_BUBBLE", LV_OBJ_FLAG_EVENT_BUBBLE }, + { "OBJ_FLAG_FLOATING", LV_OBJ_FLAG_FLOATING }, + { "OBJ_FLAG_GESTURE_BUBBLE", LV_OBJ_FLAG_GESTURE_BUBBLE }, + { "OBJ_FLAG_HIDDEN", LV_OBJ_FLAG_HIDDEN }, + { "OBJ_FLAG_IGNORE_LAYOUT", LV_OBJ_FLAG_IGNORE_LAYOUT }, + { "OBJ_FLAG_LAYOUT_1", LV_OBJ_FLAG_LAYOUT_1 }, + { "OBJ_FLAG_LAYOUT_2", LV_OBJ_FLAG_LAYOUT_2 }, + { "OBJ_FLAG_PRESS_LOCK", LV_OBJ_FLAG_PRESS_LOCK }, + { "OBJ_FLAG_SCROLLABLE", LV_OBJ_FLAG_SCROLLABLE }, + { "OBJ_FLAG_SCROLL_CHAIN", LV_OBJ_FLAG_SCROLL_CHAIN }, + { "OBJ_FLAG_SCROLL_ELASTIC", LV_OBJ_FLAG_SCROLL_ELASTIC }, + { "OBJ_FLAG_SCROLL_MOMENTUM", LV_OBJ_FLAG_SCROLL_MOMENTUM }, + { "OBJ_FLAG_SCROLL_ONE", LV_OBJ_FLAG_SCROLL_ONE }, + { "OBJ_FLAG_SCROLL_ON_FOCUS", LV_OBJ_FLAG_SCROLL_ON_FOCUS }, + { "OBJ_FLAG_SNAPABLE", LV_OBJ_FLAG_SNAPABLE }, + { "OBJ_FLAG_USER_1", LV_OBJ_FLAG_USER_1 }, + { "OBJ_FLAG_USER_2", LV_OBJ_FLAG_USER_2 }, + { "OBJ_FLAG_USER_3", LV_OBJ_FLAG_USER_3 }, + { "OBJ_FLAG_USER_4", LV_OBJ_FLAG_USER_4 }, + { "OBJ_FLAG_WIDGET_1", LV_OBJ_FLAG_WIDGET_1 }, + { "OBJ_FLAG_WIDGET_2", LV_OBJ_FLAG_WIDGET_2 }, + { "OBJ_TREE_WALK_END", LV_OBJ_TREE_WALK_END }, + { "OBJ_TREE_WALK_NEXT", LV_OBJ_TREE_WALK_NEXT }, + { "OBJ_TREE_WALK_SKIP_CHILDREN", LV_OBJ_TREE_WALK_SKIP_CHILDREN }, + { "OPA_0", LV_OPA_0 }, + { "OPA_10", LV_OPA_10 }, + { "OPA_100", LV_OPA_100 }, + { "OPA_20", LV_OPA_20 }, + { "OPA_30", LV_OPA_30 }, + { "OPA_40", LV_OPA_40 }, + { "OPA_50", LV_OPA_50 }, + { "OPA_60", LV_OPA_60 }, + { "OPA_70", LV_OPA_70 }, + { "OPA_80", LV_OPA_80 }, + { "OPA_90", LV_OPA_90 }, + { "OPA_COVER", LV_OPA_COVER }, + { "OPA_TRANSP", LV_OPA_TRANSP }, + { "PALETTE_AMBER", LV_PALETTE_AMBER }, + { "PALETTE_BLUE", LV_PALETTE_BLUE }, + { "PALETTE_BLUE_GREY", LV_PALETTE_BLUE_GREY }, + { "PALETTE_BROWN", LV_PALETTE_BROWN }, + { "PALETTE_CYAN", LV_PALETTE_CYAN }, + { "PALETTE_DEEP_ORANGE", LV_PALETTE_DEEP_ORANGE }, + { "PALETTE_DEEP_PURPLE", LV_PALETTE_DEEP_PURPLE }, + { "PALETTE_GREEN", LV_PALETTE_GREEN }, + { "PALETTE_GREY", LV_PALETTE_GREY }, + { "PALETTE_INDIGO", LV_PALETTE_INDIGO }, + { "PALETTE_LIGHT_BLUE", LV_PALETTE_LIGHT_BLUE }, + { "PALETTE_LIGHT_GREEN", LV_PALETTE_LIGHT_GREEN }, + { "PALETTE_LIME", LV_PALETTE_LIME }, + { "PALETTE_NONE", LV_PALETTE_NONE }, + { "PALETTE_ORANGE", LV_PALETTE_ORANGE }, + { "PALETTE_PINK", LV_PALETTE_PINK }, + { "PALETTE_PURPLE", LV_PALETTE_PURPLE }, + { "PALETTE_RED", LV_PALETTE_RED }, + { "PALETTE_TEAL", LV_PALETTE_TEAL }, + { "PALETTE_YELLOW", LV_PALETTE_YELLOW }, + { "PART_ANY", LV_PART_ANY }, + { "PART_CURSOR", LV_PART_CURSOR }, + { "PART_CUSTOM_FIRST", LV_PART_CUSTOM_FIRST }, + { "PART_INDICATOR", LV_PART_INDICATOR }, + { "PART_ITEMS", LV_PART_ITEMS }, + { "PART_KNOB", LV_PART_KNOB }, + { "PART_MAIN", LV_PART_MAIN }, + { "PART_SCROLLBAR", LV_PART_SCROLLBAR }, + { "PART_SELECTED", LV_PART_SELECTED }, + { "PART_TEXTAREA_PLACEHOLDER", LV_PART_TEXTAREA_PLACEHOLDER }, + { "PART_TICKS", LV_PART_TICKS }, + { "RADIUS_CIRCLE", LV_RADIUS_CIRCLE }, + { "RES_INV", LV_RES_INV }, + { "RES_OK", LV_RES_OK }, + { "ROLLER_MODE_INFINITE", LV_ROLLER_MODE_INFINITE }, + { "ROLLER_MODE_NORMAL", LV_ROLLER_MODE_NORMAL }, + { "SCROLLBAR_MODE_ACTIVE", LV_SCROLLBAR_MODE_ACTIVE }, + { "SCROLLBAR_MODE_AUTO", LV_SCROLLBAR_MODE_AUTO }, + { "SCROLLBAR_MODE_OFF", LV_SCROLLBAR_MODE_OFF }, + { "SCROLLBAR_MODE_ON", LV_SCROLLBAR_MODE_ON }, + { "SCROLL_SNAP_CENTER", LV_SCROLL_SNAP_CENTER }, + { "SCROLL_SNAP_END", LV_SCROLL_SNAP_END }, + { "SCROLL_SNAP_NONE", LV_SCROLL_SNAP_NONE }, + { "SCROLL_SNAP_START", LV_SCROLL_SNAP_START }, + { "SCR_LOAD_ANIM_FADE_ON", LV_SCR_LOAD_ANIM_FADE_ON }, + { "SCR_LOAD_ANIM_MOVE_BOTTOM", LV_SCR_LOAD_ANIM_MOVE_BOTTOM }, + { "SCR_LOAD_ANIM_MOVE_LEFT", LV_SCR_LOAD_ANIM_MOVE_LEFT }, + { "SCR_LOAD_ANIM_MOVE_RIGHT", LV_SCR_LOAD_ANIM_MOVE_RIGHT }, + { "SCR_LOAD_ANIM_MOVE_TOP", LV_SCR_LOAD_ANIM_MOVE_TOP }, + { "SCR_LOAD_ANIM_NONE", LV_SCR_LOAD_ANIM_NONE }, + { "SCR_LOAD_ANIM_OVER_BOTTOM", LV_SCR_LOAD_ANIM_OVER_BOTTOM }, + { "SCR_LOAD_ANIM_OVER_LEFT", LV_SCR_LOAD_ANIM_OVER_LEFT }, + { "SCR_LOAD_ANIM_OVER_RIGHT", LV_SCR_LOAD_ANIM_OVER_RIGHT }, + { "SCR_LOAD_ANIM_OVER_TOP", LV_SCR_LOAD_ANIM_OVER_TOP }, + { "SIZE_CONTENT", LV_SIZE_CONTENT }, + { "SLIDER_MODE_NORMAL", LV_SLIDER_MODE_NORMAL }, + { "SLIDER_MODE_RANGE", LV_SLIDER_MODE_RANGE }, + { "SLIDER_MODE_SYMMETRICAL", LV_SLIDER_MODE_SYMMETRICAL }, + { "SPAN_MODE_BREAK", LV_SPAN_MODE_BREAK }, + { "SPAN_MODE_EXPAND", LV_SPAN_MODE_EXPAND }, + { "SPAN_MODE_FIXED", LV_SPAN_MODE_FIXED }, + { "SPAN_OVERFLOW_CLIP", LV_SPAN_OVERFLOW_CLIP }, + { "SPAN_OVERFLOW_ELLIPSIS", LV_SPAN_OVERFLOW_ELLIPSIS }, + { "STATE_ANY", LV_STATE_ANY }, + { "STATE_CHECKED", LV_STATE_CHECKED }, + { "STATE_DEFAULT", LV_STATE_DEFAULT }, + { "STATE_DISABLED", LV_STATE_DISABLED }, + { "STATE_EDITED", LV_STATE_EDITED }, + { "STATE_FOCUSED", LV_STATE_FOCUSED }, + { "STATE_FOCUS_KEY", LV_STATE_FOCUS_KEY }, + { "STATE_HOVERED", LV_STATE_HOVERED }, + { "STATE_PRESSED", LV_STATE_PRESSED }, + { "STATE_SCROLLED", LV_STATE_SCROLLED }, + { "STATE_USER_1", LV_STATE_USER_1 }, + { "STATE_USER_2", LV_STATE_USER_2 }, + { "STATE_USER_3", LV_STATE_USER_3 }, + { "STATE_USER_4", LV_STATE_USER_4 }, + { "STYLE_ALIGN", LV_STYLE_ALIGN }, + { "STYLE_ANIM_SPEED", LV_STYLE_ANIM_SPEED }, + { "STYLE_ANIM_TIME", LV_STYLE_ANIM_TIME }, + { "STYLE_ARC_COLOR", LV_STYLE_ARC_COLOR }, + { "STYLE_ARC_COLOR_FILTERED", LV_STYLE_ARC_COLOR_FILTERED }, + { "STYLE_ARC_IMG_SRC", LV_STYLE_ARC_IMG_SRC }, + { "STYLE_ARC_OPA", LV_STYLE_ARC_OPA }, + { "STYLE_ARC_ROUNDED", LV_STYLE_ARC_ROUNDED }, + { "STYLE_ARC_WIDTH", LV_STYLE_ARC_WIDTH }, + { "STYLE_BASE_DIR", LV_STYLE_BASE_DIR }, + { "STYLE_BG_COLOR", LV_STYLE_BG_COLOR }, + { "STYLE_BG_COLOR_FILTERED", LV_STYLE_BG_COLOR_FILTERED }, + { "STYLE_BG_GRAD_COLOR", LV_STYLE_BG_GRAD_COLOR }, + { "STYLE_BG_GRAD_COLOR_FILTERED", LV_STYLE_BG_GRAD_COLOR_FILTERED }, + { "STYLE_BG_GRAD_DIR", LV_STYLE_BG_GRAD_DIR }, + { "STYLE_BG_GRAD_STOP", LV_STYLE_BG_GRAD_STOP }, + { "STYLE_BG_IMG_OPA", LV_STYLE_BG_IMG_OPA }, + { "STYLE_BG_IMG_RECOLOR", LV_STYLE_BG_IMG_RECOLOR }, + { "STYLE_BG_IMG_RECOLOR_FILTERED", LV_STYLE_BG_IMG_RECOLOR_FILTERED }, + { "STYLE_BG_IMG_RECOLOR_OPA", LV_STYLE_BG_IMG_RECOLOR_OPA }, + { "STYLE_BG_IMG_SRC", LV_STYLE_BG_IMG_SRC }, + { "STYLE_BG_IMG_TILED", LV_STYLE_BG_IMG_TILED }, + { "STYLE_BG_MAIN_STOP", LV_STYLE_BG_MAIN_STOP }, + { "STYLE_BG_OPA", LV_STYLE_BG_OPA }, + { "STYLE_BLEND_MODE", LV_STYLE_BLEND_MODE }, + { "STYLE_BORDER_COLOR", LV_STYLE_BORDER_COLOR }, + { "STYLE_BORDER_COLOR_FILTERED", LV_STYLE_BORDER_COLOR_FILTERED }, + { "STYLE_BORDER_OPA", LV_STYLE_BORDER_OPA }, + { "STYLE_BORDER_POST", LV_STYLE_BORDER_POST }, + { "STYLE_BORDER_SIDE", LV_STYLE_BORDER_SIDE }, + { "STYLE_BORDER_WIDTH", LV_STYLE_BORDER_WIDTH }, + { "STYLE_CLIP_CORNER", LV_STYLE_CLIP_CORNER }, + { "STYLE_COLOR_FILTER_DSC", LV_STYLE_COLOR_FILTER_DSC }, + { "STYLE_COLOR_FILTER_OPA", LV_STYLE_COLOR_FILTER_OPA }, + { "STYLE_HEIGHT", LV_STYLE_HEIGHT }, + { "STYLE_IMG_OPA", LV_STYLE_IMG_OPA }, + { "STYLE_IMG_RECOLOR", LV_STYLE_IMG_RECOLOR }, + { "STYLE_IMG_RECOLOR_FILTERED", LV_STYLE_IMG_RECOLOR_FILTERED }, + { "STYLE_IMG_RECOLOR_OPA", LV_STYLE_IMG_RECOLOR_OPA }, + { "STYLE_LAYOUT", LV_STYLE_LAYOUT }, + { "STYLE_LINE_COLOR", LV_STYLE_LINE_COLOR }, + { "STYLE_LINE_COLOR_FILTERED", LV_STYLE_LINE_COLOR_FILTERED }, + { "STYLE_LINE_DASH_GAP", LV_STYLE_LINE_DASH_GAP }, + { "STYLE_LINE_DASH_WIDTH", LV_STYLE_LINE_DASH_WIDTH }, + { "STYLE_LINE_OPA", LV_STYLE_LINE_OPA }, + { "STYLE_LINE_ROUNDED", LV_STYLE_LINE_ROUNDED }, + { "STYLE_LINE_WIDTH", LV_STYLE_LINE_WIDTH }, + { "STYLE_MAX_HEIGHT", LV_STYLE_MAX_HEIGHT }, + { "STYLE_MAX_WIDTH", LV_STYLE_MAX_WIDTH }, + { "STYLE_MIN_HEIGHT", LV_STYLE_MIN_HEIGHT }, + { "STYLE_MIN_WIDTH", LV_STYLE_MIN_WIDTH }, + { "STYLE_OPA", LV_STYLE_OPA }, + { "STYLE_OUTLINE_COLOR", LV_STYLE_OUTLINE_COLOR }, + { "STYLE_OUTLINE_COLOR_FILTERED", LV_STYLE_OUTLINE_COLOR_FILTERED }, + { "STYLE_OUTLINE_OPA", LV_STYLE_OUTLINE_OPA }, + { "STYLE_OUTLINE_PAD", LV_STYLE_OUTLINE_PAD }, + { "STYLE_OUTLINE_WIDTH", LV_STYLE_OUTLINE_WIDTH }, + { "STYLE_PAD_BOTTOM", LV_STYLE_PAD_BOTTOM }, + { "STYLE_PAD_COLUMN", LV_STYLE_PAD_COLUMN }, + { "STYLE_PAD_LEFT", LV_STYLE_PAD_LEFT }, + { "STYLE_PAD_RIGHT", LV_STYLE_PAD_RIGHT }, + { "STYLE_PAD_ROW", LV_STYLE_PAD_ROW }, + { "STYLE_PAD_TOP", LV_STYLE_PAD_TOP }, + { "STYLE_PROP_ANY", LV_STYLE_PROP_ANY }, + { "STYLE_PROP_INV", LV_STYLE_PROP_INV }, + { "STYLE_RADIUS", LV_STYLE_RADIUS }, + { "STYLE_SHADOW_COLOR", LV_STYLE_SHADOW_COLOR }, + { "STYLE_SHADOW_COLOR_FILTERED", LV_STYLE_SHADOW_COLOR_FILTERED }, + { "STYLE_SHADOW_OFS_X", LV_STYLE_SHADOW_OFS_X }, + { "STYLE_SHADOW_OFS_Y", LV_STYLE_SHADOW_OFS_Y }, + { "STYLE_SHADOW_OPA", LV_STYLE_SHADOW_OPA }, + { "STYLE_SHADOW_SPREAD", LV_STYLE_SHADOW_SPREAD }, + { "STYLE_SHADOW_WIDTH", LV_STYLE_SHADOW_WIDTH }, + { "STYLE_TEXT_ALIGN", LV_STYLE_TEXT_ALIGN }, + { "STYLE_TEXT_COLOR", LV_STYLE_TEXT_COLOR }, + { "STYLE_TEXT_COLOR_FILTERED", LV_STYLE_TEXT_COLOR_FILTERED }, + { "STYLE_TEXT_DECOR", LV_STYLE_TEXT_DECOR }, + { "STYLE_TEXT_FONT", LV_STYLE_TEXT_FONT }, + { "STYLE_TEXT_LETTER_SPACE", LV_STYLE_TEXT_LETTER_SPACE }, + { "STYLE_TEXT_LINE_SPACE", LV_STYLE_TEXT_LINE_SPACE }, + { "STYLE_TEXT_OPA", LV_STYLE_TEXT_OPA }, + { "STYLE_TRANSFORM_ANGLE", LV_STYLE_TRANSFORM_ANGLE }, + { "STYLE_TRANSFORM_HEIGHT", LV_STYLE_TRANSFORM_HEIGHT }, + { "STYLE_TRANSFORM_WIDTH", LV_STYLE_TRANSFORM_WIDTH }, + { "STYLE_TRANSFORM_ZOOM", LV_STYLE_TRANSFORM_ZOOM }, + { "STYLE_TRANSITION", LV_STYLE_TRANSITION }, + { "STYLE_TRANSLATE_X", LV_STYLE_TRANSLATE_X }, + { "STYLE_TRANSLATE_Y", LV_STYLE_TRANSLATE_Y }, + { "STYLE_WIDTH", LV_STYLE_WIDTH }, + { "STYLE_X", LV_STYLE_X }, + { "STYLE_Y", LV_STYLE_Y }, + { "TABLE_CELL_CTRL_CUSTOM_1", LV_TABLE_CELL_CTRL_CUSTOM_1 }, + { "TABLE_CELL_CTRL_CUSTOM_2", LV_TABLE_CELL_CTRL_CUSTOM_2 }, + { "TABLE_CELL_CTRL_CUSTOM_3", LV_TABLE_CELL_CTRL_CUSTOM_3 }, + { "TABLE_CELL_CTRL_CUSTOM_4", LV_TABLE_CELL_CTRL_CUSTOM_4 }, + { "TABLE_CELL_CTRL_MERGE_RIGHT", LV_TABLE_CELL_CTRL_MERGE_RIGHT }, + { "TABLE_CELL_CTRL_TEXT_CROP", LV_TABLE_CELL_CTRL_TEXT_CROP }, + { "TEXTAREA_CURSOR_LAST", LV_TEXTAREA_CURSOR_LAST }, + { "TEXT_ALIGN_AUTO", LV_TEXT_ALIGN_AUTO }, + { "TEXT_ALIGN_CENTER", LV_TEXT_ALIGN_CENTER }, + { "TEXT_ALIGN_LEFT", LV_TEXT_ALIGN_LEFT }, + { "TEXT_ALIGN_RIGHT", LV_TEXT_ALIGN_RIGHT }, + { "TEXT_CMD_STATE_IN", LV_TEXT_CMD_STATE_IN }, + { "TEXT_CMD_STATE_PAR", LV_TEXT_CMD_STATE_PAR }, + { "TEXT_CMD_STATE_WAIT", LV_TEXT_CMD_STATE_WAIT }, + { "TEXT_DECOR_NONE", LV_TEXT_DECOR_NONE }, + { "TEXT_DECOR_STRIKETHROUGH", LV_TEXT_DECOR_STRIKETHROUGH }, + { "TEXT_DECOR_UNDERLINE", LV_TEXT_DECOR_UNDERLINE }, + { "TEXT_FLAG_EXPAND", LV_TEXT_FLAG_EXPAND }, + { "TEXT_FLAG_FIT", LV_TEXT_FLAG_FIT }, + { "TEXT_FLAG_NONE", LV_TEXT_FLAG_NONE }, + { "TEXT_FLAG_RECOLOR", LV_TEXT_FLAG_RECOLOR }, + +}; + +const size_t lv0_constants_size = sizeof(lv0_constants)/sizeof(lv0_constants[0]); + +be_define_local_const_str(SYMBOL_AUDIO, "\xef\x80\x81", 0, 3); +be_define_local_const_str(SYMBOL_VIDEO, "\xef\x80\x88", 0, 3); +be_define_local_const_str(SYMBOL_LIST, "\xef\x80\x8b", 0, 3); +be_define_local_const_str(SYMBOL_OK, "\xef\x80\x8c", 0, 3); +be_define_local_const_str(SYMBOL_CLOSE, "\xef\x80\x8d", 0, 3); +be_define_local_const_str(SYMBOL_POWER, "\xef\x80\x91", 0, 3); +be_define_local_const_str(SYMBOL_SETTINGS, "\xef\x80\x93", 0, 3); +be_define_local_const_str(SYMBOL_HOME, "\xef\x80\x95", 0, 3); +be_define_local_const_str(SYMBOL_DOWNLOAD, "\xef\x80\x99", 0, 3); +be_define_local_const_str(SYMBOL_DRIVE, "\xef\x80\x9c", 0, 3); +be_define_local_const_str(SYMBOL_REFRESH, "\xef\x80\xa1", 0, 3); +be_define_local_const_str(SYMBOL_MUTE, "\xef\x80\xa6", 0, 3); +be_define_local_const_str(SYMBOL_VOLUME_MID, "\xef\x80\xa7", 0, 3); +be_define_local_const_str(SYMBOL_VOLUME_MAX, "\xef\x80\xa8", 0, 3); +be_define_local_const_str(SYMBOL_IMAGE, "\xef\x80\xbe", 0, 3); +be_define_local_const_str(SYMBOL_EDIT, "\xef\x8C\x84", 0, 3); +be_define_local_const_str(SYMBOL_PREV, "\xef\x81\x88", 0, 3); +be_define_local_const_str(SYMBOL_PLAY, "\xef\x81\x8b", 0, 3); +be_define_local_const_str(SYMBOL_PAUSE, "\xef\x81\x8c", 0, 3); +be_define_local_const_str(SYMBOL_STOP, "\xef\x81\x8d", 0, 3); +be_define_local_const_str(SYMBOL_NEXT, "\xef\x81\x91", 0, 3); +be_define_local_const_str(SYMBOL_EJECT, "\xef\x81\x92", 0, 3); +be_define_local_const_str(SYMBOL_LEFT, "\xef\x81\x93", 0, 3); +be_define_local_const_str(SYMBOL_RIGHT, "\xef\x81\x94", 0, 3); +be_define_local_const_str(SYMBOL_PLUS, "\xef\x81\xa7", 0, 3); +be_define_local_const_str(SYMBOL_MINUS, "\xef\x81\xa8", 0, 3); +be_define_local_const_str(SYMBOL_EYE_OPEN, "\xef\x81\xae", 0, 3); +be_define_local_const_str(SYMBOL_EYE_CLOSE, "\xef\x81\xb0", 0, 3); +be_define_local_const_str(SYMBOL_WARNING, "\xef\x81\xb1", 0, 3); +be_define_local_const_str(SYMBOL_SHUFFLE, "\xef\x81\xb4", 0, 3); +be_define_local_const_str(SYMBOL_UP, "\xef\x81\xb7", 0, 3); +be_define_local_const_str(SYMBOL_DOWN, "\xef\x81\xb8", 0, 3); +be_define_local_const_str(SYMBOL_LOOP, "\xef\x81\xb9", 0, 3); +be_define_local_const_str(SYMBOL_DIRECTORY, "\xef\x81\xbb", 0, 3); +be_define_local_const_str(SYMBOL_UPLOAD, "\xef\x82\x93", 0, 3); +be_define_local_const_str(SYMBOL_CALL, "\xef\x82\x95", 0, 3); +be_define_local_const_str(SYMBOL_CUT, "\xef\x83\x84", 0, 3); +be_define_local_const_str(SYMBOL_COPY, "\xef\x83\x85", 0, 3); +be_define_local_const_str(SYMBOL_SAVE, "\xef\x83\x87", 0, 3); +be_define_local_const_str(SYMBOL_CHARGE, "\xef\x83\xa7", 0, 3); +be_define_local_const_str(SYMBOL_PASTE, "\xef\x83\xAA", 0, 3); +be_define_local_const_str(SYMBOL_BELL, "\xef\x83\xb3", 0, 3); +be_define_local_const_str(SYMBOL_KEYBOARD, "\xef\x84\x9c", 0, 3); +be_define_local_const_str(SYMBOL_GPS, "\xef\x84\xa4", 0, 3); +be_define_local_const_str(SYMBOL_FILE, "\xef\x85\x9b", 0, 3); +be_define_local_const_str(SYMBOL_WIFI, "\xef\x87\xab", 0, 3); +be_define_local_const_str(SYMBOL_BATTERY_FULL, "\xef\x89\x80", 0, 3); +be_define_local_const_str(SYMBOL_BATTERY_3, "\xef\x89\x81", 0, 3); +be_define_local_const_str(SYMBOL_BATTERY_2, "\xef\x89\x82", 0, 3); +be_define_local_const_str(SYMBOL_BATTERY_1, "\xef\x89\x83", 0, 3); +be_define_local_const_str(SYMBOL_BATTERY_EMPTY, "\xef\x89\x84", 0, 3); +be_define_local_const_str(SYMBOL_USB, "\xef\x8a\x87", 0, 3); +be_define_local_const_str(SYMBOL_BLUETOOTH, "\xef\x8a\x93", 0, 3); +be_define_local_const_str(SYMBOL_TRASH, "\xef\x8B\xAD", 0, 3); +be_define_local_const_str(SYMBOL_BACKSPACE, "\xef\x95\x9A", 0, 3); +be_define_local_const_str(SYMBOL_SD_CARD, "\xef\x9F\x82", 0, 3); +be_define_local_const_str(SYMBOL_NEW_LINE, "\xef\xA2\xA2", 0, 3); + +be_define_local_const_str(SYMBOL_DUMMY, "\xEF\xA3\xBF", 0, 3); + +be_define_local_const_str(SYMBOL_BULLET, "\xE2\x80\xA2", 0, 3); + + +/* @const_object_info_begin +module lvgl (scope: global) { + SYMBOL_AUDIO, str(&be_local_const_str_SYMBOL_AUDIO) + SYMBOL_VIDEO, str(&be_local_const_str_SYMBOL_VIDEO) + SYMBOL_LIST, str(&be_local_const_str_SYMBOL_LIST) + SYMBOL_OK, str(&be_local_const_str_SYMBOL_OK) + SYMBOL_CLOSE, str(&be_local_const_str_SYMBOL_CLOSE) + SYMBOL_POWER, str(&be_local_const_str_SYMBOL_POWER) + SYMBOL_SETTINGS, str(&be_local_const_str_SYMBOL_SETTINGS) + SYMBOL_HOME, str(&be_local_const_str_SYMBOL_HOME) + SYMBOL_DOWNLOAD, str(&be_local_const_str_SYMBOL_DOWNLOAD) + SYMBOL_DRIVE, str(&be_local_const_str_SYMBOL_DRIVE) + SYMBOL_REFRESH, str(&be_local_const_str_SYMBOL_REFRESH) + SYMBOL_MUTE, str(&be_local_const_str_SYMBOL_MUTE) + SYMBOL_VOLUME_MID, str(&be_local_const_str_SYMBOL_VOLUME_MID) + SYMBOL_VOLUME_MAX, str(&be_local_const_str_SYMBOL_VOLUME_MAX) + SYMBOL_IMAGE, str(&be_local_const_str_SYMBOL_IMAGE) + SYMBOL_EDIT, str(&be_local_const_str_SYMBOL_EDIT) + SYMBOL_PREV, str(&be_local_const_str_SYMBOL_PREV) + SYMBOL_PLAY, str(&be_local_const_str_SYMBOL_PLAY) + SYMBOL_PAUSE, str(&be_local_const_str_SYMBOL_PAUSE) + SYMBOL_STOP, str(&be_local_const_str_SYMBOL_STOP) + SYMBOL_NEXT, str(&be_local_const_str_SYMBOL_NEXT) + SYMBOL_EJECT, str(&be_local_const_str_SYMBOL_EJECT) + SYMBOL_LEFT, str(&be_local_const_str_SYMBOL_LEFT) + SYMBOL_RIGHT, str(&be_local_const_str_SYMBOL_RIGHT) + SYMBOL_PLUS, str(&be_local_const_str_SYMBOL_PLUS) + SYMBOL_MINUS, str(&be_local_const_str_SYMBOL_MINUS) + SYMBOL_EYE_OPEN, str(&be_local_const_str_SYMBOL_EYE_OPEN) + SYMBOL_EYE_CLOSE, str(&be_local_const_str_SYMBOL_EYE_CLOSE) + SYMBOL_WARNING, str(&be_local_const_str_SYMBOL_WARNING) + SYMBOL_SHUFFLE, str(&be_local_const_str_SYMBOL_SHUFFLE) + SYMBOL_UP, str(&be_local_const_str_SYMBOL_UP) + SYMBOL_DOWN, str(&be_local_const_str_SYMBOL_DOWN) + SYMBOL_LOOP, str(&be_local_const_str_SYMBOL_LOOP) + SYMBOL_DIRECTORY, str(&be_local_const_str_SYMBOL_DIRECTORY) + SYMBOL_UPLOAD, str(&be_local_const_str_SYMBOL_UPLOAD) + SYMBOL_CALL, str(&be_local_const_str_SYMBOL_CALL) + SYMBOL_CUT, str(&be_local_const_str_SYMBOL_CUT) + SYMBOL_COPY, str(&be_local_const_str_SYMBOL_COPY) + SYMBOL_SAVE, str(&be_local_const_str_SYMBOL_SAVE) + SYMBOL_CHARGE, str(&be_local_const_str_SYMBOL_CHARGE) + SYMBOL_PASTE, str(&be_local_const_str_SYMBOL_PASTE) + SYMBOL_BELL, str(&be_local_const_str_SYMBOL_BELL) + SYMBOL_KEYBOARD, str(&be_local_const_str_SYMBOL_KEYBOARD) + SYMBOL_GPS, str(&be_local_const_str_SYMBOL_GPS) + SYMBOL_FILE, str(&be_local_const_str_SYMBOL_FILE) + SYMBOL_WIFI, str(&be_local_const_str_SYMBOL_WIFI) + SYMBOL_BATTERY_FULL, str(&be_local_const_str_SYMBOL_BATTERY_FULL) + SYMBOL_BATTERY_3, str(&be_local_const_str_SYMBOL_BATTERY_3) + SYMBOL_BATTERY_2, str(&be_local_const_str_SYMBOL_BATTERY_2) + SYMBOL_BATTERY_1, str(&be_local_const_str_SYMBOL_BATTERY_1) + SYMBOL_BATTERY_EMPTY, str(&be_local_const_str_SYMBOL_BATTERY_EMPTY) + SYMBOL_USB, str(&be_local_const_str_SYMBOL_USB) + SYMBOL_BLUETOOTH, str(&be_local_const_str_SYMBOL_BLUETOOTH) + SYMBOL_TRASH, str(&be_local_const_str_SYMBOL_TRASH) + SYMBOL_BACKSPACE, str(&be_local_const_str_SYMBOL_BACKSPACE) + SYMBOL_SD_CARD, str(&be_local_const_str_SYMBOL_SD_CARD) + SYMBOL_NEW_LINE, str(&be_local_const_str_SYMBOL_NEW_LINE) + + SYMBOL_DUMMY, str(&be_local_const_str_SYMBOL_DUMMY) + + SYMBOL_BULLET, str(&be_local_const_str_SYMBOL_BULLET) + + + member, func(lv0_member) + start, func(lv0_start) + + register_button_encoder, func(lv0_register_button_encoder) + + montserrat_font, func(lv0_load_montserrat_font) + seg7_font, func(lv0_load_seg7_font) + load_font, func(lv0_load_font) + load_freetype_font, func(lv0_load_freetype_font) + + screenshot, func(lv0_screenshot) +} +@const_object_info_end */ +#include "../generate/be_fixed_lvgl.h" + +#endif // USE_LVGL + +/********************************************************************/ diff --git a/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c b/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c new file mode 100644 index 000000000..c74b25481 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_signal_arcs_lib.c @@ -0,0 +1,430 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: set_percentage +********************************************************************/ +be_local_closure(set_percentage, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("percentage", -1756136011, 10), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_string("invalidate", -1645232368, 10), + }), + (be_nested_const_str("set_percentage", -1342944572, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[18]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x540E0018, // 0001 LDINT R3 25 + 0x0C080403, // 0002 DIV R2 R2 R3 + 0x540E0063, // 0003 LDINT R3 100 + 0x240C0203, // 0004 GT R3 R1 R3 + 0x780E0000, // 0005 JMPF R3 #0007 + 0x54060063, // 0006 LDINT R1 100 + 0x140C0301, // 0007 LT R3 R1 K1 + 0x780E0000, // 0008 JMPF R3 #000A + 0x58040001, // 0009 LDCONST R1 K1 + 0x90020001, // 000A SETMBR R0 K0 R1 + 0x540E0018, // 000B LDINT R3 25 + 0x0C0C0203, // 000C DIV R3 R1 R3 + 0x200C0403, // 000D NE R3 R2 R3 + 0x780E0001, // 000E JMPF R3 #0011 + 0x8C0C0102, // 000F GETMET R3 R0 K2 + 0x7C0C0200, // 0010 CALL R3 1 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_string("_lvgl", -1605747813, 5), + /* K1 */ be_nested_string("create_custom_widget", 1140594778, 20), + /* K2 */ be_nested_string("percentage", -1756136011, 10), + /* K3 */ be_nested_string("p1", -1605446022, 2), + /* K4 */ be_nested_string("lv_point", -174745506, 8), + /* K5 */ be_nested_string("p2", -1622223641, 2), + /* K6 */ be_nested_string("area", -1693507260, 4), + /* K7 */ be_nested_string("lv_area", -1773816895, 7), + /* K8 */ be_nested_string("line_dsc", -200476318, 8), + /* K9 */ be_nested_string("lv_draw_line_dsc", -1872162060, 16), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[20]) { /* code */ + 0xB80A0000, // 0000 GETNGBL R2 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x540A0063, // 0005 LDINT R2 100 + 0x90020402, // 0006 SETMBR R0 K2 R2 + 0xB80A0800, // 0007 GETNGBL R2 K4 + 0x7C080000, // 0008 CALL R2 0 + 0x90020602, // 0009 SETMBR R0 K3 R2 + 0xB80A0800, // 000A GETNGBL R2 K4 + 0x7C080000, // 000B CALL R2 0 + 0x90020A02, // 000C SETMBR R0 K5 R2 + 0xB80A0E00, // 000D GETNGBL R2 K7 + 0x7C080000, // 000E CALL R2 0 + 0x90020C02, // 000F SETMBR R0 K6 R2 + 0xB80A1200, // 0010 GETNGBL R2 K9 + 0x7C080000, // 0011 CALL R2 0 + 0x90021002, // 0012 SETMBR R0 K8 R2 + 0x80000000, // 0013 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_event +********************************************************************/ +be_local_closure(widget_event, /* name */ + be_nested_proto( + 28, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_const_int(1), + }), + (be_nested_const_str("atleast1", 1956331672, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x28040100, // 0000 GE R1 R0 K0 + 0x78060001, // 0001 JMPF R1 #0004 + 0x80040000, // 0002 RET 1 R0 + 0x70020000, // 0003 JMP #0005 + 0x80060000, // 0004 RET 1 K0 + 0x80000000, // 0005 RET 0 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[36]) { /* constants */ + /* K0 */ be_nested_string("lv", 1529997255, 2), + /* K1 */ be_nested_string("obj_event_base", 1624064363, 14), + /* K2 */ be_nested_string("RES_OK", 1233817284, 6), + /* K3 */ be_nested_string("code", -114201356, 4), + /* K4 */ be_nested_string("math", -293037681, 4), + /* K5 */ be_nested_string("get_height", -723211773, 10), + /* K6 */ be_nested_string("get_width", -1001549996, 9), + /* K7 */ be_const_int(2), + /* K8 */ be_const_int(3), + /* K9 */ be_nested_string("EVENT_DRAW_MAIN", 1955620614, 15), + /* K10 */ be_nested_string("lv_area", -1773816895, 7), + /* K11 */ be_nested_string("param", 1309554226, 5), + /* K12 */ be_nested_string("get_coords", 1044089006, 10), + /* K13 */ be_nested_string("area", -1693507260, 4), + /* K14 */ be_nested_string("x1", 274927234, 2), + /* K15 */ be_nested_string("y1", -1939865569, 2), + /* K16 */ be_nested_string("draw_line_dsc_init", -428273650, 18), + /* K17 */ be_nested_string("line_dsc", -200476318, 8), + /* K18 */ be_nested_string("init_draw_line_dsc", -1787031256, 18), + /* K19 */ be_nested_string("PART_MAIN", -1821475788, 9), + /* K20 */ be_nested_string("round_start", -1345482912, 11), + /* K21 */ be_const_int(1), + /* K22 */ be_nested_string("round_end", 985288225, 9), + /* K23 */ be_nested_string("width", -1786286561, 5), + /* K24 */ be_nested_string("get_style_line_color", 805371932, 20), + /* K25 */ be_nested_string("STATE_DEFAULT", 712406428, 13), + /* K26 */ be_nested_string("get_style_bg_color", 964794381, 18), + /* K27 */ be_nested_string("deg", -967213025, 3), + /* K28 */ be_nested_string("acos", 1006755615, 4), + /* K29 */ be_nested_string("p1", -1605446022, 2), + /* K30 */ be_nested_string("x", -49524601, 1), + /* K31 */ be_nested_string("y", -66302220, 1), + /* K32 */ be_nested_string("color", 1031692888, 5), + /* K33 */ be_nested_string("percentage", -1756136011, 10), + /* K34 */ be_nested_string("draw_arc", 1828251676, 8), + /* K35 */ be_const_int(0), + }), + (be_nested_const_str("widget_event", 1951408186, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[181]) { /* code */ + 0xB80E0000, // 0000 GETNGBL R3 K0 + 0x8C0C0701, // 0001 GETMET R3 R3 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x5C180400, // 0003 MOVE R6 R2 + 0x7C0C0600, // 0004 CALL R3 3 + 0xB8120000, // 0005 GETNGBL R4 K0 + 0x88100902, // 0006 GETMBR R4 R4 K2 + 0x200C0604, // 0007 NE R3 R3 R4 + 0x780E0000, // 0008 JMPF R3 #000A + 0x80000600, // 0009 RET 0 + 0x880C0503, // 000A GETMBR R3 R2 K3 + 0xA4120800, // 000B IMPORT R4 K4 + 0x84140000, // 000C CLOSURE R5 P0 + 0x8C180105, // 000D GETMET R6 R0 K5 + 0x7C180200, // 000E CALL R6 1 + 0x8C1C0106, // 000F GETMET R7 R0 K6 + 0x7C1C0200, // 0010 CALL R7 1 + 0x5C200A00, // 0011 MOVE R8 R5 + 0x54260007, // 0012 LDINT R9 8 + 0x0C240C09, // 0013 DIV R9 R6 R9 + 0x7C200200, // 0014 CALL R8 1 + 0x5C240A00, // 0015 MOVE R9 R5 + 0x08281107, // 0016 MUL R10 R8 K7 + 0x04280C0A, // 0017 SUB R10 R6 R10 + 0x0C281508, // 0018 DIV R10 R10 K8 + 0x7C240200, // 0019 CALL R9 1 + 0x0C281307, // 001A DIV R10 R9 K7 + 0xB82E0000, // 001B GETNGBL R11 K0 + 0x882C1709, // 001C GETMBR R11 R11 K9 + 0x1C2C060B, // 001D EQ R11 R3 R11 + 0x782E0094, // 001E JMPF R11 #00B4 + 0xB82E1400, // 001F GETNGBL R11 K10 + 0x8830050B, // 0020 GETMBR R12 R2 K11 + 0x7C2C0200, // 0021 CALL R11 1 + 0x8C30010C, // 0022 GETMET R12 R0 K12 + 0x8838010D, // 0023 GETMBR R14 R0 K13 + 0x7C300400, // 0024 CALL R12 2 + 0x8830010D, // 0025 GETMBR R12 R0 K13 + 0x8830190E, // 0026 GETMBR R12 R12 K14 + 0x8834010D, // 0027 GETMBR R13 R0 K13 + 0x88341B0F, // 0028 GETMBR R13 R13 K15 + 0xB83A0000, // 0029 GETNGBL R14 K0 + 0x8C381D10, // 002A GETMET R14 R14 K16 + 0x88400111, // 002B GETMBR R16 R0 K17 + 0x7C380400, // 002C CALL R14 2 + 0x8C380112, // 002D GETMET R14 R0 K18 + 0xB8420000, // 002E GETNGBL R16 K0 + 0x88402113, // 002F GETMBR R16 R16 K19 + 0x88440111, // 0030 GETMBR R17 R0 K17 + 0x7C380600, // 0031 CALL R14 3 + 0x88380111, // 0032 GETMBR R14 R0 K17 + 0x903A2915, // 0033 SETMBR R14 K20 K21 + 0x88380111, // 0034 GETMBR R14 R0 K17 + 0x903A2D15, // 0035 SETMBR R14 K22 K21 + 0x88380111, // 0036 GETMBR R14 R0 K17 + 0x083C1308, // 0037 MUL R15 R9 K8 + 0x003C1F15, // 0038 ADD R15 R15 K21 + 0x54420003, // 0039 LDINT R16 4 + 0x0C3C1E10, // 003A DIV R15 R15 R16 + 0x903A2E0F, // 003B SETMBR R14 K23 R15 + 0x8C380118, // 003C GETMET R14 R0 K24 + 0xB8420000, // 003D GETNGBL R16 K0 + 0x88402113, // 003E GETMBR R16 R16 K19 + 0xB8460000, // 003F GETNGBL R17 K0 + 0x88442319, // 0040 GETMBR R17 R17 K25 + 0x30402011, // 0041 OR R16 R16 R17 + 0x7C380400, // 0042 CALL R14 2 + 0x8C3C011A, // 0043 GETMET R15 R0 K26 + 0xB8460000, // 0044 GETNGBL R17 K0 + 0x88442313, // 0045 GETMBR R17 R17 K19 + 0xB84A0000, // 0046 GETNGBL R18 K0 + 0x88482519, // 0047 GETMBR R18 R18 K25 + 0x30442212, // 0048 OR R17 R17 R18 + 0x7C3C0400, // 0049 CALL R15 2 + 0x04400C09, // 004A SUB R16 R6 R9 + 0x0C440F07, // 004B DIV R17 R7 K7 + 0x0444220A, // 004C SUB R17 R17 R10 + 0x60480009, // 004D GETGBL R18 G9 + 0x544E0059, // 004E LDINT R19 90 + 0x8C50091B, // 004F GETMET R20 R4 K27 + 0x8C58091C, // 0050 GETMET R22 R4 K28 + 0x6060000A, // 0051 GETGBL R24 G10 + 0x5C642200, // 0052 MOVE R25 R17 + 0x7C600200, // 0053 CALL R24 1 + 0x6064000A, // 0054 GETGBL R25 G10 + 0x5C682000, // 0055 MOVE R26 R16 + 0x7C640200, // 0056 CALL R25 1 + 0x0C603019, // 0057 DIV R24 R24 R25 + 0x7C580400, // 0058 CALL R22 2 + 0x7C500400, // 0059 CALL R20 2 + 0x044C2614, // 005A SUB R19 R19 R20 + 0x7C480200, // 005B CALL R18 1 + 0x544E002C, // 005C LDINT R19 45 + 0x244C2413, // 005D GT R19 R18 R19 + 0x784E0000, // 005E JMPF R19 #0060 + 0x544A002C, // 005F LDINT R18 45 + 0x884C011D, // 0060 GETMBR R19 R0 K29 + 0x0C500F07, // 0061 DIV R20 R7 K7 + 0x00501814, // 0062 ADD R20 R12 R20 + 0x904E3C14, // 0063 SETMBR R19 K30 R20 + 0x884C011D, // 0064 GETMBR R19 R0 K29 + 0x00501A06, // 0065 ADD R20 R13 R6 + 0x04502915, // 0066 SUB R20 R20 K21 + 0x0450280A, // 0067 SUB R20 R20 R10 + 0x904E3E14, // 0068 SETMBR R19 K31 R20 + 0x884C0111, // 0069 GETMBR R19 R0 K17 + 0x88500121, // 006A GETMBR R20 R0 K33 + 0x54560018, // 006B LDINT R21 25 + 0x28502815, // 006C GE R20 R20 R21 + 0x78520001, // 006D JMPF R20 #0070 + 0x5C501C00, // 006E MOVE R20 R14 + 0x70020000, // 006F JMP #0071 + 0x5C501E00, // 0070 MOVE R20 R15 + 0x904E4014, // 0071 SETMBR R19 K32 R20 + 0xB84E0000, // 0072 GETNGBL R19 K0 + 0x8C4C2722, // 0073 GETMET R19 R19 K34 + 0x8854011D, // 0074 GETMBR R21 R0 K29 + 0x88542B1E, // 0075 GETMBR R21 R21 K30 + 0x8858011D, // 0076 GETMBR R22 R0 K29 + 0x88582D1F, // 0077 GETMBR R22 R22 K31 + 0x005C1208, // 0078 ADD R23 R9 R8 + 0x085E4617, // 0079 MUL R23 K35 R23 + 0x005C2E0A, // 007A ADD R23 R23 R10 + 0x58600023, // 007B LDCONST R24 K35 + 0x54660167, // 007C LDINT R25 360 + 0x5C681600, // 007D MOVE R26 R11 + 0x886C0111, // 007E GETMBR R27 R0 K17 + 0x7C4C1000, // 007F CALL R19 8 + 0x884C0111, // 0080 GETMBR R19 R0 K17 + 0x88500121, // 0081 GETMBR R20 R0 K33 + 0x54560031, // 0082 LDINT R21 50 + 0x28502815, // 0083 GE R20 R20 R21 + 0x78520001, // 0084 JMPF R20 #0087 + 0x5C501C00, // 0085 MOVE R20 R14 + 0x70020000, // 0086 JMP #0088 + 0x5C501E00, // 0087 MOVE R20 R15 + 0x904E4014, // 0088 SETMBR R19 K32 R20 + 0xB84E0000, // 0089 GETNGBL R19 K0 + 0x8C4C2722, // 008A GETMET R19 R19 K34 + 0x8854011D, // 008B GETMBR R21 R0 K29 + 0x88542B1E, // 008C GETMBR R21 R21 K30 + 0x8858011D, // 008D GETMBR R22 R0 K29 + 0x88582D1F, // 008E GETMBR R22 R22 K31 + 0x005C1208, // 008F ADD R23 R9 R8 + 0x085E2A17, // 0090 MUL R23 K21 R23 + 0x005C2E0A, // 0091 ADD R23 R23 R10 + 0x045C2F15, // 0092 SUB R23 R23 K21 + 0x5462010D, // 0093 LDINT R24 270 + 0x04603012, // 0094 SUB R24 R24 R18 + 0x5466010D, // 0095 LDINT R25 270 + 0x00643212, // 0096 ADD R25 R25 R18 + 0x5C681600, // 0097 MOVE R26 R11 + 0x886C0111, // 0098 GETMBR R27 R0 K17 + 0x7C4C1000, // 0099 CALL R19 8 + 0x884C0111, // 009A GETMBR R19 R0 K17 + 0x88500121, // 009B GETMBR R20 R0 K33 + 0x5456004A, // 009C LDINT R21 75 + 0x28502815, // 009D GE R20 R20 R21 + 0x78520001, // 009E JMPF R20 #00A1 + 0x5C501C00, // 009F MOVE R20 R14 + 0x70020000, // 00A0 JMP #00A2 + 0x5C501E00, // 00A1 MOVE R20 R15 + 0x904E4014, // 00A2 SETMBR R19 K32 R20 + 0xB84E0000, // 00A3 GETNGBL R19 K0 + 0x8C4C2722, // 00A4 GETMET R19 R19 K34 + 0x8854011D, // 00A5 GETMBR R21 R0 K29 + 0x88542B1E, // 00A6 GETMBR R21 R21 K30 + 0x8858011D, // 00A7 GETMBR R22 R0 K29 + 0x88582D1F, // 00A8 GETMBR R22 R22 K31 + 0x005C1208, // 00A9 ADD R23 R9 R8 + 0x085E0E17, // 00AA MUL R23 K7 R23 + 0x005C2E0A, // 00AB ADD R23 R23 R10 + 0x045C2F07, // 00AC SUB R23 R23 K7 + 0x5462010D, // 00AD LDINT R24 270 + 0x04603012, // 00AE SUB R24 R24 R18 + 0x5466010D, // 00AF LDINT R25 270 + 0x00643212, // 00B0 ADD R25 R25 R18 + 0x5C681600, // 00B1 MOVE R26 R11 + 0x886C0111, // 00B2 GETMBR R27 R0 K17 + 0x7C4C1000, // 00B3 CALL R19 8 + 0x80000000, // 00B4 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_percentage +********************************************************************/ +be_local_closure(get_percentage, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("percentage", -1756136011, 10), + }), + (be_nested_const_str("get_percentage", -1414483304, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_signal_arcs +********************************************************************/ +extern const bclass be_class_lv_obj; +be_local_class(lv_signal_arcs, + 5, + &be_class_lv_obj, + be_nested_map(9, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("percentage", -1756136011, 10, 4), be_const_var(0) }, + { be_nested_key("p1", -1605446022, 2, 3), be_const_var(1) }, + { be_nested_key("p2", -1622223641, 2, -1), be_const_var(2) }, + { be_nested_key("area", -1693507260, 4, -1), be_const_var(3) }, + { be_nested_key("line_dsc", -200476318, 8, -1), be_const_var(4) }, + { be_nested_key("set_percentage", -1342944572, 14, -1), be_const_closure(set_percentage_closure) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("widget_event", 1951408186, 12, -1), be_const_closure(widget_event_closure) }, + { be_nested_key("get_percentage", -1414483304, 14, 5), be_const_closure(get_percentage_closure) }, + })), + (be_nested_const_str("lv_signal_arcs", -1455810308, 14)) +); +/*******************************************************************/ + +void be_load_lv_signal_arcs_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_signal_arcs); + be_setglobal(vm, "lv_signal_arcs"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c b/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c new file mode 100644 index 000000000..2bf2afa96 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_signal_bars_lib.c @@ -0,0 +1,388 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: set_percentage +********************************************************************/ +be_local_closure(set_percentage, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("percentage", -1756136011, 10), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_string("invalidate", -1645232368, 10), + }), + (be_nested_const_str("set_percentage", -1342944572, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[18]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x540E0013, // 0001 LDINT R3 20 + 0x0C080403, // 0002 DIV R2 R2 R3 + 0x540E0063, // 0003 LDINT R3 100 + 0x240C0203, // 0004 GT R3 R1 R3 + 0x780E0000, // 0005 JMPF R3 #0007 + 0x54060063, // 0006 LDINT R1 100 + 0x140C0301, // 0007 LT R3 R1 K1 + 0x780E0000, // 0008 JMPF R3 #000A + 0x58040001, // 0009 LDCONST R1 K1 + 0x90020001, // 000A SETMBR R0 K0 R1 + 0x540E0013, // 000B LDINT R3 20 + 0x0C0C0203, // 000C DIV R3 R1 R3 + 0x200C0403, // 000D NE R3 R2 R3 + 0x780E0001, // 000E JMPF R3 #0011 + 0x8C0C0102, // 000F GETMET R3 R0 K2 + 0x7C0C0200, // 0010 CALL R3 1 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_string("_lvgl", -1605747813, 5), + /* K1 */ be_nested_string("create_custom_widget", 1140594778, 20), + /* K2 */ be_nested_string("percentage", -1756136011, 10), + /* K3 */ be_nested_string("p1", -1605446022, 2), + /* K4 */ be_nested_string("lv_point", -174745506, 8), + /* K5 */ be_nested_string("p2", -1622223641, 2), + /* K6 */ be_nested_string("area", -1693507260, 4), + /* K7 */ be_nested_string("lv_area", -1773816895, 7), + /* K8 */ be_nested_string("line_dsc", -200476318, 8), + /* K9 */ be_nested_string("lv_draw_line_dsc", -1872162060, 16), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[20]) { /* code */ + 0xB80A0000, // 0000 GETNGBL R2 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100000, // 0002 MOVE R4 R0 + 0x5C140200, // 0003 MOVE R5 R1 + 0x7C080600, // 0004 CALL R2 3 + 0x540A0063, // 0005 LDINT R2 100 + 0x90020402, // 0006 SETMBR R0 K2 R2 + 0xB80A0800, // 0007 GETNGBL R2 K4 + 0x7C080000, // 0008 CALL R2 0 + 0x90020602, // 0009 SETMBR R0 K3 R2 + 0xB80A0800, // 000A GETNGBL R2 K4 + 0x7C080000, // 000B CALL R2 0 + 0x90020A02, // 000C SETMBR R0 K5 R2 + 0xB80A0E00, // 000D GETNGBL R2 K7 + 0x7C080000, // 000E CALL R2 0 + 0x90020C02, // 000F SETMBR R0 K6 R2 + 0xB80A1200, // 0010 GETNGBL R2 K9 + 0x7C080000, // 0011 CALL R2 0 + 0x90021002, // 0012 SETMBR R0 K8 R2 + 0x80000000, // 0013 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: widget_event +********************************************************************/ +be_local_closure(widget_event, /* name */ + be_nested_proto( + 23, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 1, /* has sup protos */ + ( &(const struct bproto*[ 1]) { + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_const_int(1), + }), + (be_nested_const_str("atleast1", 1956331672, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x28040100, // 0000 GE R1 R0 K0 + 0x78060001, // 0001 JMPF R1 #0004 + 0x80040000, // 0002 RET 1 R0 + 0x70020000, // 0003 JMP #0005 + 0x80060000, // 0004 RET 1 K0 + 0x80000000, // 0005 RET 0 + }) + ), + }), + 1, /* has constants */ + ( &(const bvalue[38]) { /* constants */ + /* K0 */ be_nested_string("lv", 1529997255, 2), + /* K1 */ be_nested_string("obj_event_base", 1624064363, 14), + /* K2 */ be_nested_string("RES_OK", 1233817284, 6), + /* K3 */ be_nested_string("code", -114201356, 4), + /* K4 */ be_nested_string("get_height", -723211773, 10), + /* K5 */ be_nested_string("get_width", -1001549996, 9), + /* K6 */ be_const_int(3), + /* K7 */ be_const_int(2), + /* K8 */ be_nested_string("EVENT_DRAW_MAIN", 1955620614, 15), + /* K9 */ be_nested_string("lv_area", -1773816895, 7), + /* K10 */ be_nested_string("param", 1309554226, 5), + /* K11 */ be_nested_string("get_coords", 1044089006, 10), + /* K12 */ be_nested_string("area", -1693507260, 4), + /* K13 */ be_nested_string("x1", 274927234, 2), + /* K14 */ be_nested_string("y1", -1939865569, 2), + /* K15 */ be_nested_string("draw_line_dsc_init", -428273650, 18), + /* K16 */ be_nested_string("line_dsc", -200476318, 8), + /* K17 */ be_nested_string("init_draw_line_dsc", -1787031256, 18), + /* K18 */ be_nested_string("PART_MAIN", -1821475788, 9), + /* K19 */ be_nested_string("round_start", -1345482912, 11), + /* K20 */ be_const_int(1), + /* K21 */ be_nested_string("round_end", 985288225, 9), + /* K22 */ be_nested_string("width", -1786286561, 5), + /* K23 */ be_nested_string("get_style_line_color", 805371932, 20), + /* K24 */ be_nested_string("STATE_DEFAULT", 712406428, 13), + /* K25 */ be_nested_string("get_style_bg_color", 964794381, 18), + /* K26 */ be_nested_string("event_send", 598925582, 10), + /* K27 */ be_nested_string("EVENT_DRAW_PART_BEGIN", -903102272, 21), + /* K28 */ be_const_int(0), + /* K29 */ be_nested_string("color", 1031692888, 5), + /* K30 */ be_nested_string("percentage", -1756136011, 10), + /* K31 */ be_nested_string("p1", -1605446022, 2), + /* K32 */ be_nested_string("y", -66302220, 1), + /* K33 */ be_nested_string("x", -49524601, 1), + /* K34 */ be_nested_string("p2", -1622223641, 2), + /* K35 */ be_nested_string("draw_line", 1634465686, 9), + /* K36 */ be_nested_string("stop_iteration", -121173395, 14), + /* K37 */ be_nested_string("EVENT_DRAW_PART_END", -993342004, 19), + }), + (be_nested_const_str("widget_event", 1951408186, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[137]) { /* code */ + 0xB80E0000, // 0000 GETNGBL R3 K0 + 0x8C0C0701, // 0001 GETMET R3 R3 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x5C180400, // 0003 MOVE R6 R2 + 0x7C0C0600, // 0004 CALL R3 3 + 0xB8120000, // 0005 GETNGBL R4 K0 + 0x88100902, // 0006 GETMBR R4 R4 K2 + 0x200C0604, // 0007 NE R3 R3 R4 + 0x780E0000, // 0008 JMPF R3 #000A + 0x80000600, // 0009 RET 0 + 0x880C0503, // 000A GETMBR R3 R2 K3 + 0x84100000, // 000B CLOSURE R4 P0 + 0x8C140104, // 000C GETMET R5 R0 K4 + 0x7C140200, // 000D CALL R5 1 + 0x8C180105, // 000E GETMET R6 R0 K5 + 0x7C180200, // 000F CALL R6 1 + 0x5C1C0800, // 0010 MOVE R7 R4 + 0x5422000E, // 0011 LDINT R8 15 + 0x0C200C08, // 0012 DIV R8 R6 R8 + 0x7C1C0200, // 0013 CALL R7 1 + 0x5C200800, // 0014 MOVE R8 R4 + 0x08240F06, // 0015 MUL R9 R7 K6 + 0x04240C09, // 0016 SUB R9 R6 R9 + 0x542A0003, // 0017 LDINT R10 4 + 0x0C24120A, // 0018 DIV R9 R9 R10 + 0x7C200200, // 0019 CALL R8 1 + 0x0C241107, // 001A DIV R9 R8 K7 + 0xB82A0000, // 001B GETNGBL R10 K0 + 0x88281508, // 001C GETMBR R10 R10 K8 + 0x1C28060A, // 001D EQ R10 R3 R10 + 0x782A0068, // 001E JMPF R10 #0088 + 0xB82A1200, // 001F GETNGBL R10 K9 + 0x882C050A, // 0020 GETMBR R11 R2 K10 + 0x7C280200, // 0021 CALL R10 1 + 0x8C2C010B, // 0022 GETMET R11 R0 K11 + 0x8834010C, // 0023 GETMBR R13 R0 K12 + 0x7C2C0400, // 0024 CALL R11 2 + 0x882C010C, // 0025 GETMBR R11 R0 K12 + 0x882C170D, // 0026 GETMBR R11 R11 K13 + 0x8830010C, // 0027 GETMBR R12 R0 K12 + 0x8830190E, // 0028 GETMBR R12 R12 K14 + 0xB8360000, // 0029 GETNGBL R13 K0 + 0x8C341B0F, // 002A GETMET R13 R13 K15 + 0x883C0110, // 002B GETMBR R15 R0 K16 + 0x7C340400, // 002C CALL R13 2 + 0x8C340111, // 002D GETMET R13 R0 K17 + 0xB83E0000, // 002E GETNGBL R15 K0 + 0x883C1F12, // 002F GETMBR R15 R15 K18 + 0x88400110, // 0030 GETMBR R16 R0 K16 + 0x7C340600, // 0031 CALL R13 3 + 0x88340110, // 0032 GETMBR R13 R0 K16 + 0x90362714, // 0033 SETMBR R13 K19 K20 + 0x88340110, // 0034 GETMBR R13 R0 K16 + 0x90362B14, // 0035 SETMBR R13 K21 K20 + 0x88340110, // 0036 GETMBR R13 R0 K16 + 0x90362C08, // 0037 SETMBR R13 K22 R8 + 0x8C340117, // 0038 GETMET R13 R0 K23 + 0xB83E0000, // 0039 GETNGBL R15 K0 + 0x883C1F12, // 003A GETMBR R15 R15 K18 + 0xB8420000, // 003B GETNGBL R16 K0 + 0x88402118, // 003C GETMBR R16 R16 K24 + 0x303C1E10, // 003D OR R15 R15 R16 + 0x7C340400, // 003E CALL R13 2 + 0x8C380119, // 003F GETMET R14 R0 K25 + 0xB8420000, // 0040 GETNGBL R16 K0 + 0x88402112, // 0041 GETMBR R16 R16 K18 + 0xB8460000, // 0042 GETNGBL R17 K0 + 0x88442318, // 0043 GETMBR R17 R17 K24 + 0x30402011, // 0044 OR R16 R16 R17 + 0x7C380400, // 0045 CALL R14 2 + 0xB83E0000, // 0046 GETNGBL R15 K0 + 0x8C3C1F1A, // 0047 GETMET R15 R15 K26 + 0x5C440000, // 0048 MOVE R17 R0 + 0xB84A0000, // 0049 GETNGBL R18 K0 + 0x8848251B, // 004A GETMBR R18 R18 K27 + 0x884C0110, // 004B GETMBR R19 R0 K16 + 0x7C3C0800, // 004C CALL R15 4 + 0x603C0010, // 004D GETGBL R15 G16 + 0x40423906, // 004E CONNECT R16 K28 K6 + 0x7C3C0200, // 004F CALL R15 1 + 0xA802002C, // 0050 EXBLK 0 #007E + 0x5C401E00, // 0051 MOVE R16 R15 + 0x7C400000, // 0052 CALL R16 0 + 0x88440110, // 0053 GETMBR R17 R0 K16 + 0x8848011E, // 0054 GETMBR R18 R0 K30 + 0x004C2114, // 0055 ADD R19 R16 K20 + 0x54520013, // 0056 LDINT R20 20 + 0x084C2614, // 0057 MUL R19 R19 R20 + 0x28482413, // 0058 GE R18 R18 R19 + 0x784A0001, // 0059 JMPF R18 #005C + 0x5C481A00, // 005A MOVE R18 R13 + 0x70020000, // 005B JMP #005D + 0x5C481C00, // 005C MOVE R18 R14 + 0x90463A12, // 005D SETMBR R17 K29 R18 + 0x8844011F, // 005E GETMBR R17 R0 K31 + 0x00481805, // 005F ADD R18 R12 R5 + 0x04482514, // 0060 SUB R18 R18 K20 + 0x04482409, // 0061 SUB R18 R18 R9 + 0x90464012, // 0062 SETMBR R17 K32 R18 + 0x8844011F, // 0063 GETMBR R17 R0 K31 + 0x00481007, // 0064 ADD R18 R8 R7 + 0x08482012, // 0065 MUL R18 R16 R18 + 0x00481612, // 0066 ADD R18 R11 R18 + 0x00482409, // 0067 ADD R18 R18 R9 + 0x90464212, // 0068 SETMBR R17 K33 R18 + 0x88440122, // 0069 GETMBR R17 R0 K34 + 0x044A0C10, // 006A SUB R18 K6 R16 + 0x044C0A08, // 006B SUB R19 R5 R8 + 0x08482413, // 006C MUL R18 R18 R19 + 0x544E0003, // 006D LDINT R19 4 + 0x0C482413, // 006E DIV R18 R18 R19 + 0x00481812, // 006F ADD R18 R12 R18 + 0x00482409, // 0070 ADD R18 R18 R9 + 0x90464012, // 0071 SETMBR R17 K32 R18 + 0x88440122, // 0072 GETMBR R17 R0 K34 + 0x8848011F, // 0073 GETMBR R18 R0 K31 + 0x88482521, // 0074 GETMBR R18 R18 K33 + 0x90464212, // 0075 SETMBR R17 K33 R18 + 0xB8460000, // 0076 GETNGBL R17 K0 + 0x8C442323, // 0077 GETMET R17 R17 K35 + 0x884C011F, // 0078 GETMBR R19 R0 K31 + 0x88500122, // 0079 GETMBR R20 R0 K34 + 0x5C541400, // 007A MOVE R21 R10 + 0x88580110, // 007B GETMBR R22 R0 K16 + 0x7C440A00, // 007C CALL R17 5 + 0x7001FFD2, // 007D JMP #0051 + 0x583C0024, // 007E LDCONST R15 K36 + 0xAC3C0200, // 007F CATCH R15 1 0 + 0xB0080000, // 0080 RAISE 2 R0 R0 + 0xB83E0000, // 0081 GETNGBL R15 K0 + 0x8C3C1F1A, // 0082 GETMET R15 R15 K26 + 0x5C440000, // 0083 MOVE R17 R0 + 0xB84A0000, // 0084 GETNGBL R18 K0 + 0x88482525, // 0085 GETMBR R18 R18 K37 + 0x884C0110, // 0086 GETMBR R19 R0 K16 + 0x7C3C0800, // 0087 CALL R15 4 + 0x80000000, // 0088 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_percentage +********************************************************************/ +be_local_closure(get_percentage, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_string("percentage", -1756136011, 10), + }), + (be_nested_const_str("get_percentage", -1414483304, 14)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_signal_bars +********************************************************************/ +extern const bclass be_class_lv_obj; +be_local_class(lv_signal_bars, + 5, + &be_class_lv_obj, + be_nested_map(9, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("percentage", -1756136011, 10, 4), be_const_var(0) }, + { be_nested_key("p1", -1605446022, 2, 3), be_const_var(1) }, + { be_nested_key("p2", -1622223641, 2, -1), be_const_var(2) }, + { be_nested_key("area", -1693507260, 4, -1), be_const_var(3) }, + { be_nested_key("line_dsc", -200476318, 8, -1), be_const_var(4) }, + { be_nested_key("set_percentage", -1342944572, 14, -1), be_const_closure(set_percentage_closure) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("widget_event", 1951408186, 12, -1), be_const_closure(widget_event_closure) }, + { be_nested_key("get_percentage", -1414483304, 14, 5), be_const_closure(get_percentage_closure) }, + })), + (be_nested_const_str("lv_signal_bars", -780994737, 14)) +); +/*******************************************************************/ + +void be_load_lv_signal_bars_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_signal_bars); + be_setglobal(vm, "lv_signal_bars"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c index c1b7bd816..70bca472b 100644 --- a/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c +++ b/lib/libesp32/Berry/default/be_lvgl_widgets_lib.c @@ -18,7 +18,6 @@ extern int lv0_init(bvm *vm); extern int lco_init(bvm *vm); extern int lco_tostring(bvm *vm); -extern int lvx_init_2(bvm *vm); // generic function extern int lvx_member(bvm *vm); extern int lvx_tostring(bvm *vm); // generic function @@ -27,20 +26,108 @@ extern int lvs_tostring(bvm *vm); BE_EXPORT_VARIABLE extern const bclass be_class_lv_obj; +/* `lv_style` external functions definitions */ +extern int lvbe_style_set_width(bvm *vm); +extern int lvbe_style_set_min_width(bvm *vm); +extern int lvbe_style_set_max_width(bvm *vm); +extern int lvbe_style_set_height(bvm *vm); +extern int lvbe_style_set_min_height(bvm *vm); +extern int lvbe_style_set_max_height(bvm *vm); +extern int lvbe_style_set_x(bvm *vm); +extern int lvbe_style_set_y(bvm *vm); +extern int lvbe_style_set_align(bvm *vm); +extern int lvbe_style_set_transform_width(bvm *vm); +extern int lvbe_style_set_transform_height(bvm *vm); +extern int lvbe_style_set_translate_x(bvm *vm); +extern int lvbe_style_set_translate_y(bvm *vm); +extern int lvbe_style_set_transform_zoom(bvm *vm); +extern int lvbe_style_set_transform_angle(bvm *vm); +extern int lvbe_style_set_pad_top(bvm *vm); +extern int lvbe_style_set_pad_bottom(bvm *vm); +extern int lvbe_style_set_pad_left(bvm *vm); +extern int lvbe_style_set_pad_right(bvm *vm); +extern int lvbe_style_set_pad_row(bvm *vm); +extern int lvbe_style_set_pad_column(bvm *vm); +extern int lvbe_style_set_radius(bvm *vm); +extern int lvbe_style_set_clip_corner(bvm *vm); +extern int lvbe_style_set_opa(bvm *vm); +extern int lvbe_style_set_color_filter_dsc(bvm *vm); +extern int lvbe_style_set_color_filter_opa(bvm *vm); +extern int lvbe_style_set_anim_time(bvm *vm); +extern int lvbe_style_set_anim_speed(bvm *vm); +extern int lvbe_style_set_transition(bvm *vm); +extern int lvbe_style_set_blend_mode(bvm *vm); +extern int lvbe_style_set_layout(bvm *vm); +extern int lvbe_style_set_base_dir(bvm *vm); +extern int lvbe_style_set_bg_color(bvm *vm); +extern int lvbe_style_set_bg_color_filtered(bvm *vm); +extern int lvbe_style_set_bg_opa(bvm *vm); +extern int lvbe_style_set_bg_grad_color(bvm *vm); +extern int lvbe_style_set_bg_grad_color_filtered(bvm *vm); +extern int lvbe_style_set_bg_grad_dir(bvm *vm); +extern int lvbe_style_set_bg_main_stop(bvm *vm); +extern int lvbe_style_set_bg_grad_stop(bvm *vm); +extern int lvbe_style_set_bg_img_src(bvm *vm); +extern int lvbe_style_set_bg_img_opa(bvm *vm); +extern int lvbe_style_set_bg_img_recolor(bvm *vm); +extern int lvbe_style_set_bg_img_recolor_filtered(bvm *vm); +extern int lvbe_style_set_bg_img_recolor_opa(bvm *vm); +extern int lvbe_style_set_bg_img_tiled(bvm *vm); +extern int lvbe_style_set_border_color(bvm *vm); +extern int lvbe_style_set_border_color_filtered(bvm *vm); +extern int lvbe_style_set_border_opa(bvm *vm); +extern int lvbe_style_set_border_width(bvm *vm); +extern int lvbe_style_set_border_side(bvm *vm); +extern int lvbe_style_set_border_post(bvm *vm); +extern int lvbe_style_set_text_color(bvm *vm); +extern int lvbe_style_set_text_color_filtered(bvm *vm); +extern int lvbe_style_set_text_opa(bvm *vm); +extern int lvbe_style_set_text_font(bvm *vm); +extern int lvbe_style_set_text_letter_space(bvm *vm); +extern int lvbe_style_set_text_line_space(bvm *vm); +extern int lvbe_style_set_text_decor(bvm *vm); +extern int lvbe_style_set_text_align(bvm *vm); +extern int lvbe_style_set_img_opa(bvm *vm); +extern int lvbe_style_set_img_recolor(bvm *vm); +extern int lvbe_style_set_img_recolor_filtered(bvm *vm); +extern int lvbe_style_set_img_recolor_opa(bvm *vm); +extern int lvbe_style_set_outline_width(bvm *vm); +extern int lvbe_style_set_outline_color(bvm *vm); +extern int lvbe_style_set_outline_color_filtered(bvm *vm); +extern int lvbe_style_set_outline_opa(bvm *vm); +extern int lvbe_style_set_outline_pad(bvm *vm); +extern int lvbe_style_set_shadow_width(bvm *vm); +extern int lvbe_style_set_shadow_ofs_x(bvm *vm); +extern int lvbe_style_set_shadow_ofs_y(bvm *vm); +extern int lvbe_style_set_shadow_spread(bvm *vm); +extern int lvbe_style_set_shadow_color(bvm *vm); +extern int lvbe_style_set_shadow_color_filtered(bvm *vm); +extern int lvbe_style_set_shadow_opa(bvm *vm); +extern int lvbe_style_set_line_width(bvm *vm); +extern int lvbe_style_set_line_dash_width(bvm *vm); +extern int lvbe_style_set_line_dash_gap(bvm *vm); +extern int lvbe_style_set_line_rounded(bvm *vm); +extern int lvbe_style_set_line_color(bvm *vm); +extern int lvbe_style_set_line_color_filtered(bvm *vm); +extern int lvbe_style_set_line_opa(bvm *vm); +extern int lvbe_style_set_arc_width(bvm *vm); +extern int lvbe_style_set_arc_rounded(bvm *vm); +extern int lvbe_style_set_arc_color(bvm *vm); +extern int lvbe_style_set_arc_color_filtered(bvm *vm); +extern int lvbe_style_set_arc_opa(bvm *vm); +extern int lvbe_style_set_arc_img_src(bvm *vm); + /* `lv_img` external functions definitions */ extern int lvbe_img_set_tasmota_logo(bvm *vm); extern int lvbe_img_create(bvm *vm); extern int lvbe_img_set_src(bvm *vm); -extern int lvbe_img_set_auto_size(bvm *vm); extern int lvbe_img_set_offset_x(bvm *vm); extern int lvbe_img_set_offset_y(bvm *vm); -extern int lvbe_img_set_pivot(bvm *vm); extern int lvbe_img_set_angle(bvm *vm); +extern int lvbe_img_set_pivot(bvm *vm); extern int lvbe_img_set_zoom(bvm *vm); extern int lvbe_img_set_antialias(bvm *vm); extern int lvbe_img_get_src(bvm *vm); -extern int lvbe_img_get_file_name(bvm *vm); -extern int lvbe_img_get_auto_size(bvm *vm); extern int lvbe_img_get_offset_x(bvm *vm); extern int lvbe_img_get_offset_y(bvm *vm); extern int lvbe_img_get_angle(bvm *vm); @@ -48,111 +135,312 @@ extern int lvbe_img_get_pivot(bvm *vm); extern int lvbe_img_get_zoom(bvm *vm); extern int lvbe_img_get_antialias(bvm *vm); -/* `lv_style` external functions definitions */ -extern int lvbe_style_copy(bvm *vm); -extern int lvbe_style_list_init(bvm *vm); -extern int lvbe_style_list_copy(bvm *vm); -extern int lvbe_style_list_get_style(bvm *vm); -extern int lvbe_style_reset(bvm *vm); -extern int lvbe_style_remove_prop(bvm *vm); -extern int lvbe_style_list_get_local_style(bvm *vm); -extern int lvbe_style_set_radius(bvm *vm); -extern int lvbe_style_set_clip_corner(bvm *vm); -extern int lvbe_style_set_size(bvm *vm); -extern int lvbe_style_set_transform_width(bvm *vm); -extern int lvbe_style_set_transform_height(bvm *vm); -extern int lvbe_style_set_transform_angle(bvm *vm); -extern int lvbe_style_set_transform_zoom(bvm *vm); -extern int lvbe_style_set_opa_scale(bvm *vm); -extern int lvbe_style_set_pad_top(bvm *vm); -extern int lvbe_style_set_pad_bottom(bvm *vm); -extern int lvbe_style_set_pad_left(bvm *vm); -extern int lvbe_style_set_pad_right(bvm *vm); -extern int lvbe_style_set_pad_inner(bvm *vm); -extern int lvbe_style_set_margin_top(bvm *vm); -extern int lvbe_style_set_margin_bottom(bvm *vm); -extern int lvbe_style_set_margin_left(bvm *vm); -extern int lvbe_style_set_margin_right(bvm *vm); -extern int lvbe_style_set_bg_blend_mode(bvm *vm); -extern int lvbe_style_set_bg_main_stop(bvm *vm); -extern int lvbe_style_set_bg_grad_stop(bvm *vm); -extern int lvbe_style_set_bg_grad_dir(bvm *vm); -extern int lvbe_style_set_bg_color(bvm *vm); -extern int lvbe_style_set_bg_grad_color(bvm *vm); -extern int lvbe_style_set_bg_opa(bvm *vm); -extern int lvbe_style_set_border_width(bvm *vm); -extern int lvbe_style_set_border_side(bvm *vm); -extern int lvbe_style_set_border_blend_mode(bvm *vm); -extern int lvbe_style_set_border_post(bvm *vm); -extern int lvbe_style_set_border_color(bvm *vm); -extern int lvbe_style_set_border_opa(bvm *vm); -extern int lvbe_style_set_outline_width(bvm *vm); -extern int lvbe_style_set_outline_pad(bvm *vm); -extern int lvbe_style_set_outline_blend_mode(bvm *vm); -extern int lvbe_style_set_outline_color(bvm *vm); -extern int lvbe_style_set_outline_opa(bvm *vm); -extern int lvbe_style_set_shadow_width(bvm *vm); -extern int lvbe_style_set_shadow_ofs_x(bvm *vm); -extern int lvbe_style_set_shadow_ofs_y(bvm *vm); -extern int lvbe_style_set_shadow_spread(bvm *vm); -extern int lvbe_style_set_shadow_blend_mode(bvm *vm); -extern int lvbe_style_set_shadow_color(bvm *vm); -extern int lvbe_style_set_shadow_opa(bvm *vm); -extern int lvbe_style_set_pattern_repeat(bvm *vm); -extern int lvbe_style_set_pattern_blend_mode(bvm *vm); -extern int lvbe_style_set_pattern_recolor(bvm *vm); -extern int lvbe_style_set_pattern_opa(bvm *vm); -extern int lvbe_style_set_pattern_recolor_opa(bvm *vm); -extern int lvbe_style_set_pattern_image(bvm *vm); -extern int lvbe_style_set_value_letter_space(bvm *vm); -extern int lvbe_style_set_value_line_space(bvm *vm); -extern int lvbe_style_set_value_blend_mode(bvm *vm); -extern int lvbe_style_set_value_ofs_x(bvm *vm); -extern int lvbe_style_set_value_ofs_y(bvm *vm); -extern int lvbe_style_set_value_align(bvm *vm); -extern int lvbe_style_set_value_color(bvm *vm); -extern int lvbe_style_set_value_opa(bvm *vm); -extern int lvbe_style_set_value_font(bvm *vm); -extern int lvbe_style_set_value_str(bvm *vm); -extern int lvbe_style_set_text_letter_space(bvm *vm); -extern int lvbe_style_set_text_line_space(bvm *vm); -extern int lvbe_style_set_text_decor(bvm *vm); -extern int lvbe_style_set_text_blend_mode(bvm *vm); -extern int lvbe_style_set_text_color(bvm *vm); -extern int lvbe_style_set_text_sel_color(bvm *vm); -extern int lvbe_style_set_text_sel_bg_color(bvm *vm); -extern int lvbe_style_set_text_opa(bvm *vm); -extern int lvbe_style_set_text_font(bvm *vm); -extern int lvbe_style_set_line_width(bvm *vm); -extern int lvbe_style_set_line_blend_mode(bvm *vm); -extern int lvbe_style_set_line_dash_width(bvm *vm); -extern int lvbe_style_set_line_dash_gap(bvm *vm); -extern int lvbe_style_set_line_rounded(bvm *vm); -extern int lvbe_style_set_line_color(bvm *vm); -extern int lvbe_style_set_line_opa(bvm *vm); -extern int lvbe_style_set_image_blend_mode(bvm *vm); -extern int lvbe_style_set_image_recolor(bvm *vm); -extern int lvbe_style_set_image_opa(bvm *vm); -extern int lvbe_style_set_image_recolor_opa(bvm *vm); -extern int lvbe_style_set_transition_time(bvm *vm); -extern int lvbe_style_set_transition_delay(bvm *vm); -extern int lvbe_style_set_transition_prop_1(bvm *vm); -extern int lvbe_style_set_transition_prop_2(bvm *vm); -extern int lvbe_style_set_transition_prop_3(bvm *vm); -extern int lvbe_style_set_transition_prop_4(bvm *vm); -extern int lvbe_style_set_transition_prop_5(bvm *vm); -extern int lvbe_style_set_transition_prop_6(bvm *vm); -extern int lvbe_style_set_transition_path(bvm *vm); -extern int lvbe_style_set_scale_width(bvm *vm); -extern int lvbe_style_set_scale_border_width(bvm *vm); -extern int lvbe_style_set_scale_end_border_width(bvm *vm); -extern int lvbe_style_set_scale_end_line_width(bvm *vm); -extern int lvbe_style_set_scale_grad_color(bvm *vm); -extern int lvbe_style_set_scale_end_color(bvm *vm); +/* `lv_obj` external functions definitions */ +extern int lvbe_obj_add_event_cb(bvm *vm); +extern int lvbe_obj_remove_event_cb(bvm *vm); +extern int lvbe_obj_remove_event_dsc(bvm *vm); +extern int lvbe_obj_create(bvm *vm); +extern int lvbe_obj_add_flag(bvm *vm); +extern int lvbe_obj_clear_flag(bvm *vm); +extern int lvbe_obj_add_state(bvm *vm); +extern int lvbe_obj_clear_state(bvm *vm); +extern int lvbe_obj_set_user_data(bvm *vm); +extern int lvbe_obj_has_flag(bvm *vm); +extern int lvbe_obj_has_flag_any(bvm *vm); +extern int lvbe_obj_get_state(bvm *vm); +extern int lvbe_obj_has_state(bvm *vm); +extern int lvbe_obj_get_group(bvm *vm); +extern int lvbe_obj_get_user_data(bvm *vm); +extern int lvbe_obj_allocate_spec_attr(bvm *vm); +extern int lvbe_obj_check_type(bvm *vm); +extern int lvbe_obj_has_class(bvm *vm); +extern int lvbe_obj_get_class(bvm *vm); +extern int lvbe_obj_is_valid(bvm *vm); +extern int lvbe_obj_dpx(bvm *vm); +extern int lvbe_obj_class_init_obj(bvm *vm); +extern int lvbe_obj_is_editable(bvm *vm); +extern int lvbe_obj_is_group_def(bvm *vm); +extern int lvbe_obj_init_draw_rect_dsc(bvm *vm); +extern int lvbe_obj_init_draw_label_dsc(bvm *vm); +extern int lvbe_obj_init_draw_img_dsc(bvm *vm); +extern int lvbe_obj_init_draw_line_dsc(bvm *vm); +extern int lvbe_obj_init_draw_arc_dsc(bvm *vm); +extern int lvbe_obj_calculate_ext_draw_size(bvm *vm); +extern int lvbe_obj_refresh_ext_draw_size(bvm *vm); +extern int lvbe_obj_set_pos(bvm *vm); +extern int lvbe_obj_set_x(bvm *vm); +extern int lvbe_obj_set_y(bvm *vm); +extern int lvbe_obj_set_size(bvm *vm); +extern int lvbe_obj_refr_size(bvm *vm); +extern int lvbe_obj_set_width(bvm *vm); +extern int lvbe_obj_set_height(bvm *vm); +extern int lvbe_obj_set_content_width(bvm *vm); +extern int lvbe_obj_set_content_height(bvm *vm); +extern int lvbe_obj_set_layout(bvm *vm); +extern int lvbe_obj_is_layout_positioned(bvm *vm); +extern int lvbe_obj_mark_layout_as_dirty(bvm *vm); +extern int lvbe_obj_update_layout(bvm *vm); +extern int lvbe_obj_set_align(bvm *vm); +extern int lvbe_obj_align(bvm *vm); +extern int lvbe_obj_align_to(bvm *vm); +extern int lvbe_obj_center(bvm *vm); +extern int lvbe_obj_get_coords(bvm *vm); +extern int lvbe_obj_get_x(bvm *vm); +extern int lvbe_obj_get_x2(bvm *vm); +extern int lvbe_obj_get_y(bvm *vm); +extern int lvbe_obj_get_y2(bvm *vm); +extern int lvbe_obj_get_width(bvm *vm); +extern int lvbe_obj_get_height(bvm *vm); +extern int lvbe_obj_get_content_width(bvm *vm); +extern int lvbe_obj_get_content_height(bvm *vm); +extern int lvbe_obj_get_content_coords(bvm *vm); +extern int lvbe_obj_get_self_width(bvm *vm); +extern int lvbe_obj_get_self_height(bvm *vm); +extern int lvbe_obj_refresh_self_size(bvm *vm); +extern int lvbe_obj_refr_pos(bvm *vm); +extern int lvbe_obj_move_to(bvm *vm); +extern int lvbe_obj_move_children_by(bvm *vm); +extern int lvbe_obj_invalidate_area(bvm *vm); +extern int lvbe_obj_invalidate(bvm *vm); +extern int lvbe_obj_area_is_visible(bvm *vm); +extern int lvbe_obj_is_visible(bvm *vm); +extern int lvbe_obj_set_ext_click_area(bvm *vm); +extern int lvbe_obj_get_click_area(bvm *vm); +extern int lvbe_obj_hit_test(bvm *vm); +extern int lvbe_obj_set_scrollbar_mode(bvm *vm); +extern int lvbe_obj_set_scroll_dir(bvm *vm); +extern int lvbe_obj_set_scroll_snap_x(bvm *vm); +extern int lvbe_obj_set_scroll_snap_y(bvm *vm); +extern int lvbe_obj_get_scrollbar_mode(bvm *vm); +extern int lvbe_obj_get_scroll_dir(bvm *vm); +extern int lvbe_obj_get_scroll_snap_x(bvm *vm); +extern int lvbe_obj_get_scroll_snap_y(bvm *vm); +extern int lvbe_obj_get_scroll_x(bvm *vm); +extern int lvbe_obj_get_scroll_y(bvm *vm); +extern int lvbe_obj_get_scroll_top(bvm *vm); +extern int lvbe_obj_get_scroll_bottom(bvm *vm); +extern int lvbe_obj_get_scroll_left(bvm *vm); +extern int lvbe_obj_get_scroll_right(bvm *vm); +extern int lvbe_obj_get_scroll_end(bvm *vm); +extern int lvbe_obj_scroll_by(bvm *vm); +extern int lvbe_obj_scroll_to(bvm *vm); +extern int lvbe_obj_scroll_to_x(bvm *vm); +extern int lvbe_obj_scroll_to_y(bvm *vm); +extern int lvbe_obj_scroll_to_view(bvm *vm); +extern int lvbe_obj_scroll_to_view_recursive(bvm *vm); +extern int lvbe_obj_is_scrolling(bvm *vm); +extern int lvbe_obj_update_snap(bvm *vm); +extern int lvbe_obj_get_scrollbar_area(bvm *vm); +extern int lvbe_obj_scrollbar_invalidate(bvm *vm); +extern int lvbe_obj_readjust_scroll(bvm *vm); +extern int lvbe_obj_add_style(bvm *vm); +extern int lvbe_obj_remove_style(bvm *vm); +extern int lvbe_obj_remove_style_all(bvm *vm); +extern int lvbe_obj_refresh_style(bvm *vm); +extern int lvbe_obj_get_style_prop(bvm *vm); +extern int lvbe_obj_set_local_style_prop(bvm *vm); +extern int lvbe_obj_get_local_style_prop(bvm *vm); +extern int lvbe_obj_remove_local_style_prop(bvm *vm); +extern int lvbe_obj_fade_in(bvm *vm); +extern int lvbe_obj_fade_out(bvm *vm); +extern int lvbe_obj_set_style_pad_all(bvm *vm); +extern int lvbe_obj_set_style_pad_hor(bvm *vm); +extern int lvbe_obj_set_style_pad_ver(bvm *vm); +extern int lvbe_obj_set_style_pad_gap(bvm *vm); +extern int lvbe_obj_set_style_size(bvm *vm); +extern int lvbe_obj_get_style_width(bvm *vm); +extern int lvbe_obj_get_style_min_width(bvm *vm); +extern int lvbe_obj_get_style_max_width(bvm *vm); +extern int lvbe_obj_get_style_height(bvm *vm); +extern int lvbe_obj_get_style_min_height(bvm *vm); +extern int lvbe_obj_get_style_max_height(bvm *vm); +extern int lvbe_obj_get_style_x(bvm *vm); +extern int lvbe_obj_get_style_y(bvm *vm); +extern int lvbe_obj_get_style_align(bvm *vm); +extern int lvbe_obj_get_style_transform_width(bvm *vm); +extern int lvbe_obj_get_style_transform_height(bvm *vm); +extern int lvbe_obj_get_style_translate_x(bvm *vm); +extern int lvbe_obj_get_style_translate_y(bvm *vm); +extern int lvbe_obj_get_style_transform_zoom(bvm *vm); +extern int lvbe_obj_get_style_transform_angle(bvm *vm); +extern int lvbe_obj_get_style_pad_top(bvm *vm); +extern int lvbe_obj_get_style_pad_bottom(bvm *vm); +extern int lvbe_obj_get_style_pad_left(bvm *vm); +extern int lvbe_obj_get_style_pad_right(bvm *vm); +extern int lvbe_obj_get_style_pad_row(bvm *vm); +extern int lvbe_obj_get_style_pad_column(bvm *vm); +extern int lvbe_obj_get_style_radius(bvm *vm); +extern int lvbe_obj_get_style_clip_corner(bvm *vm); +extern int lvbe_obj_get_style_opa(bvm *vm); +extern int lvbe_obj_get_style_color_filter_opa(bvm *vm); +extern int lvbe_obj_get_style_anim_time(bvm *vm); +extern int lvbe_obj_get_style_anim_speed(bvm *vm); +extern int lvbe_obj_get_style_blend_mode(bvm *vm); +extern int lvbe_obj_get_style_layout(bvm *vm); +extern int lvbe_obj_get_style_base_dir(bvm *vm); +extern int lvbe_obj_get_style_bg_color(bvm *vm); +extern int lvbe_obj_get_style_bg_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_bg_opa(bvm *vm); +extern int lvbe_obj_get_style_bg_grad_color(bvm *vm); +extern int lvbe_obj_get_style_bg_grad_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_bg_grad_dir(bvm *vm); +extern int lvbe_obj_get_style_bg_main_stop(bvm *vm); +extern int lvbe_obj_get_style_bg_grad_stop(bvm *vm); +extern int lvbe_obj_get_style_bg_img_src(bvm *vm); +extern int lvbe_obj_get_style_bg_img_opa(bvm *vm); +extern int lvbe_obj_get_style_bg_img_recolor(bvm *vm); +extern int lvbe_obj_get_style_bg_img_recolor_filtered(bvm *vm); +extern int lvbe_obj_get_style_bg_img_recolor_opa(bvm *vm); +extern int lvbe_obj_get_style_bg_img_tiled(bvm *vm); +extern int lvbe_obj_get_style_border_color(bvm *vm); +extern int lvbe_obj_get_style_border_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_border_opa(bvm *vm); +extern int lvbe_obj_get_style_border_width(bvm *vm); +extern int lvbe_obj_get_style_border_side(bvm *vm); +extern int lvbe_obj_get_style_border_post(bvm *vm); +extern int lvbe_obj_get_style_text_color(bvm *vm); +extern int lvbe_obj_get_style_text_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_text_opa(bvm *vm); +extern int lvbe_obj_get_style_text_font(bvm *vm); +extern int lvbe_obj_get_style_text_letter_space(bvm *vm); +extern int lvbe_obj_get_style_text_line_space(bvm *vm); +extern int lvbe_obj_get_style_text_decor(bvm *vm); +extern int lvbe_obj_get_style_text_align(bvm *vm); +extern int lvbe_obj_get_style_img_opa(bvm *vm); +extern int lvbe_obj_get_style_img_recolor(bvm *vm); +extern int lvbe_obj_get_style_img_recolor_filtered(bvm *vm); +extern int lvbe_obj_get_style_img_recolor_opa(bvm *vm); +extern int lvbe_obj_get_style_outline_width(bvm *vm); +extern int lvbe_obj_get_style_outline_color(bvm *vm); +extern int lvbe_obj_get_style_outline_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_outline_opa(bvm *vm); +extern int lvbe_obj_get_style_outline_pad(bvm *vm); +extern int lvbe_obj_get_style_shadow_width(bvm *vm); +extern int lvbe_obj_get_style_shadow_ofs_x(bvm *vm); +extern int lvbe_obj_get_style_shadow_ofs_y(bvm *vm); +extern int lvbe_obj_get_style_shadow_spread(bvm *vm); +extern int lvbe_obj_get_style_shadow_color(bvm *vm); +extern int lvbe_obj_get_style_shadow_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_shadow_opa(bvm *vm); +extern int lvbe_obj_get_style_line_width(bvm *vm); +extern int lvbe_obj_get_style_line_dash_width(bvm *vm); +extern int lvbe_obj_get_style_line_dash_gap(bvm *vm); +extern int lvbe_obj_get_style_line_rounded(bvm *vm); +extern int lvbe_obj_get_style_line_color(bvm *vm); +extern int lvbe_obj_get_style_line_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_line_opa(bvm *vm); +extern int lvbe_obj_get_style_arc_width(bvm *vm); +extern int lvbe_obj_get_style_arc_rounded(bvm *vm); +extern int lvbe_obj_get_style_arc_color(bvm *vm); +extern int lvbe_obj_get_style_arc_color_filtered(bvm *vm); +extern int lvbe_obj_get_style_arc_opa(bvm *vm); +extern int lvbe_obj_get_style_arc_img_src(bvm *vm); +extern int lvbe_obj_set_style_width(bvm *vm); +extern int lvbe_obj_set_style_min_width(bvm *vm); +extern int lvbe_obj_set_style_max_width(bvm *vm); +extern int lvbe_obj_set_style_height(bvm *vm); +extern int lvbe_obj_set_style_min_height(bvm *vm); +extern int lvbe_obj_set_style_max_height(bvm *vm); +extern int lvbe_obj_set_style_x(bvm *vm); +extern int lvbe_obj_set_style_y(bvm *vm); +extern int lvbe_obj_set_style_align(bvm *vm); +extern int lvbe_obj_set_style_transform_width(bvm *vm); +extern int lvbe_obj_set_style_transform_height(bvm *vm); +extern int lvbe_obj_set_style_translate_x(bvm *vm); +extern int lvbe_obj_set_style_translate_y(bvm *vm); +extern int lvbe_obj_set_style_transform_zoom(bvm *vm); +extern int lvbe_obj_set_style_transform_angle(bvm *vm); +extern int lvbe_obj_set_style_pad_top(bvm *vm); +extern int lvbe_obj_set_style_pad_bottom(bvm *vm); +extern int lvbe_obj_set_style_pad_left(bvm *vm); +extern int lvbe_obj_set_style_pad_right(bvm *vm); +extern int lvbe_obj_set_style_pad_row(bvm *vm); +extern int lvbe_obj_set_style_pad_column(bvm *vm); +extern int lvbe_obj_set_style_radius(bvm *vm); +extern int lvbe_obj_set_style_clip_corner(bvm *vm); +extern int lvbe_obj_set_style_opa(bvm *vm); +extern int lvbe_obj_set_style_color_filter_dsc(bvm *vm); +extern int lvbe_obj_set_style_color_filter_opa(bvm *vm); +extern int lvbe_obj_set_style_anim_time(bvm *vm); +extern int lvbe_obj_set_style_anim_speed(bvm *vm); +extern int lvbe_obj_set_style_transition(bvm *vm); +extern int lvbe_obj_set_style_blend_mode(bvm *vm); +extern int lvbe_obj_set_style_layout(bvm *vm); +extern int lvbe_obj_set_style_base_dir(bvm *vm); +extern int lvbe_obj_set_style_bg_color(bvm *vm); +extern int lvbe_obj_set_style_bg_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_bg_opa(bvm *vm); +extern int lvbe_obj_set_style_bg_grad_color(bvm *vm); +extern int lvbe_obj_set_style_bg_grad_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_bg_grad_dir(bvm *vm); +extern int lvbe_obj_set_style_bg_main_stop(bvm *vm); +extern int lvbe_obj_set_style_bg_grad_stop(bvm *vm); +extern int lvbe_obj_set_style_bg_img_src(bvm *vm); +extern int lvbe_obj_set_style_bg_img_opa(bvm *vm); +extern int lvbe_obj_set_style_bg_img_recolor(bvm *vm); +extern int lvbe_obj_set_style_bg_img_recolor_filtered(bvm *vm); +extern int lvbe_obj_set_style_bg_img_recolor_opa(bvm *vm); +extern int lvbe_obj_set_style_bg_img_tiled(bvm *vm); +extern int lvbe_obj_set_style_border_color(bvm *vm); +extern int lvbe_obj_set_style_border_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_border_opa(bvm *vm); +extern int lvbe_obj_set_style_border_width(bvm *vm); +extern int lvbe_obj_set_style_border_side(bvm *vm); +extern int lvbe_obj_set_style_border_post(bvm *vm); +extern int lvbe_obj_set_style_text_color(bvm *vm); +extern int lvbe_obj_set_style_text_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_text_opa(bvm *vm); +extern int lvbe_obj_set_style_text_font(bvm *vm); +extern int lvbe_obj_set_style_text_letter_space(bvm *vm); +extern int lvbe_obj_set_style_text_line_space(bvm *vm); +extern int lvbe_obj_set_style_text_decor(bvm *vm); +extern int lvbe_obj_set_style_text_align(bvm *vm); +extern int lvbe_obj_set_style_img_opa(bvm *vm); +extern int lvbe_obj_set_style_img_recolor(bvm *vm); +extern int lvbe_obj_set_style_img_recolor_filtered(bvm *vm); +extern int lvbe_obj_set_style_img_recolor_opa(bvm *vm); +extern int lvbe_obj_set_style_outline_width(bvm *vm); +extern int lvbe_obj_set_style_outline_color(bvm *vm); +extern int lvbe_obj_set_style_outline_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_outline_opa(bvm *vm); +extern int lvbe_obj_set_style_outline_pad(bvm *vm); +extern int lvbe_obj_set_style_shadow_width(bvm *vm); +extern int lvbe_obj_set_style_shadow_ofs_x(bvm *vm); +extern int lvbe_obj_set_style_shadow_ofs_y(bvm *vm); +extern int lvbe_obj_set_style_shadow_spread(bvm *vm); +extern int lvbe_obj_set_style_shadow_color(bvm *vm); +extern int lvbe_obj_set_style_shadow_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_shadow_opa(bvm *vm); +extern int lvbe_obj_set_style_line_width(bvm *vm); +extern int lvbe_obj_set_style_line_dash_width(bvm *vm); +extern int lvbe_obj_set_style_line_dash_gap(bvm *vm); +extern int lvbe_obj_set_style_line_rounded(bvm *vm); +extern int lvbe_obj_set_style_line_color(bvm *vm); +extern int lvbe_obj_set_style_line_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_line_opa(bvm *vm); +extern int lvbe_obj_set_style_arc_width(bvm *vm); +extern int lvbe_obj_set_style_arc_rounded(bvm *vm); +extern int lvbe_obj_set_style_arc_color(bvm *vm); +extern int lvbe_obj_set_style_arc_color_filtered(bvm *vm); +extern int lvbe_obj_set_style_arc_opa(bvm *vm); +extern int lvbe_obj_set_style_arc_img_src(bvm *vm); +extern int lvbe_obj_del(bvm *vm); +extern int lvbe_obj_clean(bvm *vm); +extern int lvbe_obj_del_async(bvm *vm); +extern int lvbe_obj_set_parent(bvm *vm); +extern int lvbe_obj_move_foreground(bvm *vm); +extern int lvbe_obj_move_background(bvm *vm); +extern int lvbe_obj_get_screen(bvm *vm); +extern int lvbe_obj_get_parent(bvm *vm); +extern int lvbe_obj_get_child(bvm *vm); +extern int lvbe_obj_get_child_cnt(bvm *vm); +extern int lvbe_obj_get_child_id(bvm *vm); +extern int lvbe_obj_tree_walk(bvm *vm); /* `lv_group` external functions definitions */ extern int lvbe_group_create(bvm *vm); extern int lvbe_group_del(bvm *vm); +extern int lvbe_group_set_default(bvm *vm); extern int lvbe_group_add_obj(bvm *vm); extern int lvbe_group_remove_obj(bvm *vm); extern int lvbe_group_remove_all_objs(bvm *vm); @@ -164,321 +452,124 @@ extern int lvbe_group_send_data(bvm *vm); extern int lvbe_group_set_focus_cb(bvm *vm); extern int lvbe_group_set_refocus_policy(bvm *vm); extern int lvbe_group_set_editing(bvm *vm); -extern int lvbe_group_set_click_focus(bvm *vm); extern int lvbe_group_set_wrap(bvm *vm); extern int lvbe_group_get_focused(bvm *vm); +extern int lvbe_group_get_focus_cb(bvm *vm); extern int lvbe_group_get_editing(bvm *vm); -extern int lvbe_group_get_click_focus(bvm *vm); extern int lvbe_group_get_wrap(bvm *vm); +extern int lvbe_group_get_obj_count(bvm *vm); /* `lv_indev` external functions definitions */ -extern int lvbe_indev_get_type(bvm *vm); extern int lvbe_indev_enable(bvm *vm); +extern int lvbe_indev_get_type(bvm *vm); +extern int lvbe_indev_reset(bvm *vm); +extern int lvbe_indev_reset_long_press(bvm *vm); +extern int lvbe_indev_set_cursor(bvm *vm); extern int lvbe_indev_set_group(bvm *vm); -extern int lvbe_indev_get_obj_act(bvm *vm); +extern int lvbe_indev_set_button_points(bvm *vm); +extern int lvbe_indev_get_point(bvm *vm); +extern int lvbe_indev_get_gesture_dir(bvm *vm); +extern int lvbe_indev_get_key(bvm *vm); +extern int lvbe_indev_get_scroll_dir(bvm *vm); +extern int lvbe_indev_get_scroll_obj(bvm *vm); +extern int lvbe_indev_get_vect(bvm *vm); +extern int lvbe_indev_wait_release(bvm *vm); extern int lvbe_indev_search_obj(bvm *vm); -/* `lv_obj` external functions definitions */ -extern int lvbe_obj_create(bvm *vm); -extern int lvbe_obj_del(bvm *vm); -extern int lvbe_obj_del_anim_ready_cb(bvm *vm); -extern int lvbe_obj_del_async(bvm *vm); -extern int lvbe_obj_clean(bvm *vm); -extern int lvbe_obj_invalidate_area(bvm *vm); -extern int lvbe_obj_invalidate(bvm *vm); -extern int lvbe_obj_area_is_visible(bvm *vm); -extern int lvbe_obj_is_visible(bvm *vm); -extern int lvbe_obj_set_parent(bvm *vm); -extern int lvbe_obj_move_foreground(bvm *vm); -extern int lvbe_obj_move_background(bvm *vm); -extern int lvbe_obj_set_pos(bvm *vm); -extern int lvbe_obj_set_x(bvm *vm); -extern int lvbe_obj_set_y(bvm *vm); -extern int lvbe_obj_set_size(bvm *vm); -extern int lvbe_obj_set_width(bvm *vm); -extern int lvbe_obj_set_height(bvm *vm); -extern int lvbe_obj_set_width_fit(bvm *vm); -extern int lvbe_obj_set_height_fit(bvm *vm); -extern int lvbe_obj_set_width_margin(bvm *vm); -extern int lvbe_obj_set_height_margin(bvm *vm); -extern int lvbe_obj_align(bvm *vm); -extern int lvbe_obj_align_x(bvm *vm); -extern int lvbe_obj_align_y(bvm *vm); -extern int lvbe_obj_align_mid(bvm *vm); -extern int lvbe_obj_align_mid_x(bvm *vm); -extern int lvbe_obj_align_mid_y(bvm *vm); -extern int lvbe_obj_realign(bvm *vm); -extern int lvbe_obj_set_auto_realign(bvm *vm); -extern int lvbe_obj_set_ext_click_area(bvm *vm); -extern int lvbe_obj_add_style(bvm *vm); -extern int lvbe_obj_remove_style(bvm *vm); -extern int lvbe_obj_clean_style_list(bvm *vm); -extern int lvbe_obj_reset_style_list(bvm *vm); -extern int lvbe_obj_refresh_style(bvm *vm); -extern int lvbe_obj_report_style_mod(bvm *vm); -extern int lvbe_obj_remove_style_local_prop(bvm *vm); -extern int lvbe_obj_set_hidden(bvm *vm); -extern int lvbe_obj_set_adv_hittest(bvm *vm); -extern int lvbe_obj_set_click(bvm *vm); -extern int lvbe_obj_set_top(bvm *vm); -extern int lvbe_obj_set_drag(bvm *vm); -extern int lvbe_obj_set_drag_dir(bvm *vm); -extern int lvbe_obj_set_drag_throw(bvm *vm); -extern int lvbe_obj_set_drag_parent(bvm *vm); -extern int lvbe_obj_set_focus_parent(bvm *vm); -extern int lvbe_obj_set_gesture_parent(bvm *vm); -extern int lvbe_obj_set_parent_event(bvm *vm); -extern int lvbe_obj_set_base_dir(bvm *vm); -extern int lvbe_obj_add_protect(bvm *vm); -extern int lvbe_obj_clear_protect(bvm *vm); -extern int lvbe_obj_set_state(bvm *vm); -extern int lvbe_obj_add_state(bvm *vm); -extern int lvbe_obj_clear_state(bvm *vm); -extern int lvbe_obj_finish_transitions(bvm *vm); -extern int lvbe_obj_set_event_cb(bvm *vm); -extern int lvbe_obj_set_signal_cb(bvm *vm); -extern int lvbe_obj_set_design_cb(bvm *vm); -extern int lvbe_obj_allocate_ext_attr(bvm *vm); -extern int lvbe_obj_refresh_ext_draw_pad(bvm *vm); -extern int lvbe_obj_get_screen(bvm *vm); -extern int lvbe_obj_get_parent(bvm *vm); -extern int lvbe_obj_get_child(bvm *vm); -extern int lvbe_obj_get_child_back(bvm *vm); -extern int lvbe_obj_count_children(bvm *vm); -extern int lvbe_obj_count_children_recursive(bvm *vm); -extern int lvbe_obj_get_coords(bvm *vm); -extern int lvbe_obj_get_inner_coords(bvm *vm); -extern int lvbe_obj_get_x(bvm *vm); -extern int lvbe_obj_get_y(bvm *vm); -extern int lvbe_obj_get_width(bvm *vm); -extern int lvbe_obj_get_height(bvm *vm); -extern int lvbe_obj_get_width_fit(bvm *vm); -extern int lvbe_obj_get_height_fit(bvm *vm); -extern int lvbe_obj_get_height_margin(bvm *vm); -extern int lvbe_obj_get_width_margin(bvm *vm); -extern int lvbe_obj_get_width_grid(bvm *vm); -extern int lvbe_obj_get_height_grid(bvm *vm); -extern int lvbe_obj_get_auto_realign(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_left(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_right(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_top(bvm *vm); -extern int lvbe_obj_get_ext_click_pad_bottom(bvm *vm); -extern int lvbe_obj_get_ext_draw_pad(bvm *vm); -extern int lvbe_obj_get_local_style(bvm *vm); -extern int lvbe_obj_get_hidden(bvm *vm); -extern int lvbe_obj_get_adv_hittest(bvm *vm); -extern int lvbe_obj_get_click(bvm *vm); -extern int lvbe_obj_get_top(bvm *vm); -extern int lvbe_obj_get_drag(bvm *vm); -extern int lvbe_obj_get_drag_dir(bvm *vm); -extern int lvbe_obj_get_drag_throw(bvm *vm); -extern int lvbe_obj_get_drag_parent(bvm *vm); -extern int lvbe_obj_get_focus_parent(bvm *vm); -extern int lvbe_obj_get_parent_event(bvm *vm); -extern int lvbe_obj_get_gesture_parent(bvm *vm); -extern int lvbe_obj_get_base_dir(bvm *vm); -extern int lvbe_obj_get_protect(bvm *vm); -extern int lvbe_obj_is_protected(bvm *vm); -extern int lvbe_obj_get_state(bvm *vm); -extern int lvbe_obj_is_point_on_coords(bvm *vm); -extern int lvbe_obj_hittest(bvm *vm); -extern int lvbe_obj_get_ext_attr(bvm *vm); -extern int lvbe_obj_get_type(bvm *vm); -extern int lvbe_obj_get_user_data(bvm *vm); -extern int lvbe_obj_set_user_data(bvm *vm); -extern int lvbe_obj_get_group(bvm *vm); -extern int lvbe_obj_is_focused(bvm *vm); -extern int lvbe_obj_get_focused_obj(bvm *vm); -extern int lvbe_obj_handle_get_type_signal(bvm *vm); -extern int lvbe_obj_init_draw_rect_dsc(bvm *vm); -extern int lvbe_obj_init_draw_label_dsc(bvm *vm); -extern int lvbe_obj_init_draw_img_dsc(bvm *vm); -extern int lvbe_obj_init_draw_line_dsc(bvm *vm); -extern int lvbe_obj_get_draw_rect_ext_pad_size(bvm *vm); -extern int lvbe_obj_fade_in(bvm *vm); -extern int lvbe_obj_fade_out(bvm *vm); -extern int lvbe_obj_get_style_radius(bvm *vm); -extern int lvbe_obj_set_style_local_radius(bvm *vm); -extern int lvbe_obj_get_style_clip_corner(bvm *vm); -extern int lvbe_obj_set_style_local_clip_corner(bvm *vm); -extern int lvbe_obj_get_style_size(bvm *vm); -extern int lvbe_obj_set_style_local_size(bvm *vm); -extern int lvbe_obj_get_style_transform_width(bvm *vm); -extern int lvbe_obj_set_style_local_transform_width(bvm *vm); -extern int lvbe_obj_get_style_transform_height(bvm *vm); -extern int lvbe_obj_set_style_local_transform_height(bvm *vm); -extern int lvbe_obj_get_style_transform_angle(bvm *vm); -extern int lvbe_obj_set_style_local_transform_angle(bvm *vm); -extern int lvbe_obj_get_style_transform_zoom(bvm *vm); -extern int lvbe_obj_set_style_local_transform_zoom(bvm *vm); -extern int lvbe_obj_get_style_opa_scale(bvm *vm); -extern int lvbe_obj_set_style_local_opa_scale(bvm *vm); -extern int lvbe_obj_get_style_pad_top(bvm *vm); -extern int lvbe_obj_set_style_local_pad_top(bvm *vm); -extern int lvbe_obj_get_style_pad_bottom(bvm *vm); -extern int lvbe_obj_set_style_local_pad_bottom(bvm *vm); -extern int lvbe_obj_get_style_pad_left(bvm *vm); -extern int lvbe_obj_set_style_local_pad_left(bvm *vm); -extern int lvbe_obj_get_style_pad_right(bvm *vm); -extern int lvbe_obj_set_style_local_pad_right(bvm *vm); -extern int lvbe_obj_get_style_pad_inner(bvm *vm); -extern int lvbe_obj_set_style_local_pad_inner(bvm *vm); -extern int lvbe_obj_get_style_margin_top(bvm *vm); -extern int lvbe_obj_set_style_local_margin_top(bvm *vm); -extern int lvbe_obj_get_style_margin_bottom(bvm *vm); -extern int lvbe_obj_set_style_local_margin_bottom(bvm *vm); -extern int lvbe_obj_get_style_margin_left(bvm *vm); -extern int lvbe_obj_set_style_local_margin_left(bvm *vm); -extern int lvbe_obj_get_style_margin_right(bvm *vm); -extern int lvbe_obj_set_style_local_margin_right(bvm *vm); -extern int lvbe_obj_get_style_bg_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_bg_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_bg_main_stop(bvm *vm); -extern int lvbe_obj_set_style_local_bg_main_stop(bvm *vm); -extern int lvbe_obj_get_style_bg_grad_stop(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_stop(bvm *vm); -extern int lvbe_obj_get_style_bg_grad_dir(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_dir(bvm *vm); -extern int lvbe_obj_get_style_bg_color(bvm *vm); -extern int lvbe_obj_set_style_local_bg_color(bvm *vm); -extern int lvbe_obj_get_style_bg_grad_color(bvm *vm); -extern int lvbe_obj_set_style_local_bg_grad_color(bvm *vm); -extern int lvbe_obj_get_style_bg_opa(bvm *vm); -extern int lvbe_obj_set_style_local_bg_opa(bvm *vm); -extern int lvbe_obj_get_style_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_border_width(bvm *vm); -extern int lvbe_obj_get_style_border_side(bvm *vm); -extern int lvbe_obj_set_style_local_border_side(bvm *vm); -extern int lvbe_obj_get_style_border_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_border_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_border_post(bvm *vm); -extern int lvbe_obj_set_style_local_border_post(bvm *vm); -extern int lvbe_obj_get_style_border_color(bvm *vm); -extern int lvbe_obj_set_style_local_border_color(bvm *vm); -extern int lvbe_obj_get_style_border_opa(bvm *vm); -extern int lvbe_obj_set_style_local_border_opa(bvm *vm); -extern int lvbe_obj_get_style_outline_width(bvm *vm); -extern int lvbe_obj_set_style_local_outline_width(bvm *vm); -extern int lvbe_obj_get_style_outline_pad(bvm *vm); -extern int lvbe_obj_set_style_local_outline_pad(bvm *vm); -extern int lvbe_obj_get_style_outline_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_outline_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_outline_color(bvm *vm); -extern int lvbe_obj_set_style_local_outline_color(bvm *vm); -extern int lvbe_obj_get_style_outline_opa(bvm *vm); -extern int lvbe_obj_set_style_local_outline_opa(bvm *vm); -extern int lvbe_obj_get_style_shadow_width(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_width(bvm *vm); -extern int lvbe_obj_get_style_shadow_ofs_x(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_ofs_x(bvm *vm); -extern int lvbe_obj_get_style_shadow_ofs_y(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_ofs_y(bvm *vm); -extern int lvbe_obj_get_style_shadow_spread(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_spread(bvm *vm); -extern int lvbe_obj_get_style_shadow_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_shadow_color(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_color(bvm *vm); -extern int lvbe_obj_get_style_shadow_opa(bvm *vm); -extern int lvbe_obj_set_style_local_shadow_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_repeat(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_repeat(bvm *vm); -extern int lvbe_obj_get_style_pattern_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_pattern_recolor(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_recolor(bvm *vm); -extern int lvbe_obj_get_style_pattern_opa(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_recolor_opa(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_recolor_opa(bvm *vm); -extern int lvbe_obj_get_style_pattern_image(bvm *vm); -extern int lvbe_obj_set_style_local_pattern_image(bvm *vm); -extern int lvbe_obj_get_style_value_letter_space(bvm *vm); -extern int lvbe_obj_set_style_local_value_letter_space(bvm *vm); -extern int lvbe_obj_get_style_value_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_value_line_space(bvm *vm); -extern int lvbe_obj_get_style_value_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_value_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_value_ofs_x(bvm *vm); -extern int lvbe_obj_set_style_local_value_ofs_x(bvm *vm); -extern int lvbe_obj_get_style_value_ofs_y(bvm *vm); -extern int lvbe_obj_set_style_local_value_ofs_y(bvm *vm); -extern int lvbe_obj_get_style_value_align(bvm *vm); -extern int lvbe_obj_set_style_local_value_align(bvm *vm); -extern int lvbe_obj_get_style_value_color(bvm *vm); -extern int lvbe_obj_set_style_local_value_color(bvm *vm); -extern int lvbe_obj_get_style_value_opa(bvm *vm); -extern int lvbe_obj_set_style_local_value_opa(bvm *vm); -extern int lvbe_obj_set_style_local_value_font(bvm *vm); -extern int lvbe_obj_get_style_value_str(bvm *vm); -extern int lvbe_obj_set_style_local_value_str(bvm *vm); -extern int lvbe_obj_get_style_text_letter_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_letter_space(bvm *vm); -extern int lvbe_obj_get_style_text_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_line_space(bvm *vm); -extern int lvbe_obj_set_style_local_text_decor(bvm *vm); -extern int lvbe_obj_get_style_text_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_text_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_text_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_color(bvm *vm); -extern int lvbe_obj_get_style_text_sel_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_sel_color(bvm *vm); -extern int lvbe_obj_get_style_text_sel_bg_color(bvm *vm); -extern int lvbe_obj_set_style_local_text_sel_bg_color(bvm *vm); -extern int lvbe_obj_get_style_text_opa(bvm *vm); -extern int lvbe_obj_set_style_local_text_opa(bvm *vm); -extern int lvbe_obj_set_style_local_text_font(bvm *vm); -extern int lvbe_obj_get_style_line_width(bvm *vm); -extern int lvbe_obj_set_style_local_line_width(bvm *vm); -extern int lvbe_obj_get_style_line_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_line_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_line_dash_width(bvm *vm); -extern int lvbe_obj_set_style_local_line_dash_width(bvm *vm); -extern int lvbe_obj_get_style_line_dash_gap(bvm *vm); -extern int lvbe_obj_set_style_local_line_dash_gap(bvm *vm); -extern int lvbe_obj_get_style_line_rounded(bvm *vm); -extern int lvbe_obj_set_style_local_line_rounded(bvm *vm); -extern int lvbe_obj_get_style_line_color(bvm *vm); -extern int lvbe_obj_set_style_local_line_color(bvm *vm); -extern int lvbe_obj_get_style_line_opa(bvm *vm); -extern int lvbe_obj_set_style_local_line_opa(bvm *vm); -extern int lvbe_obj_get_style_image_blend_mode(bvm *vm); -extern int lvbe_obj_set_style_local_image_blend_mode(bvm *vm); -extern int lvbe_obj_get_style_image_recolor(bvm *vm); -extern int lvbe_obj_set_style_local_image_recolor(bvm *vm); -extern int lvbe_obj_get_style_image_opa(bvm *vm); -extern int lvbe_obj_set_style_local_image_opa(bvm *vm); -extern int lvbe_obj_get_style_image_recolor_opa(bvm *vm); -extern int lvbe_obj_set_style_local_image_recolor_opa(bvm *vm); -extern int lvbe_obj_get_style_transition_time(bvm *vm); -extern int lvbe_obj_set_style_local_transition_time(bvm *vm); -extern int lvbe_obj_get_style_transition_delay(bvm *vm); -extern int lvbe_obj_set_style_local_transition_delay(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_1(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_1(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_2(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_2(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_3(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_3(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_4(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_4(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_5(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_5(bvm *vm); -extern int lvbe_obj_get_style_transition_prop_6(bvm *vm); -extern int lvbe_obj_set_style_local_transition_prop_6(bvm *vm); -extern int lvbe_obj_set_style_local_transition_path(bvm *vm); -extern int lvbe_obj_get_style_scale_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_width(bvm *vm); -extern int lvbe_obj_get_style_scale_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_border_width(bvm *vm); -extern int lvbe_obj_get_style_scale_end_border_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_border_width(bvm *vm); -extern int lvbe_obj_get_style_scale_end_line_width(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_line_width(bvm *vm); -extern int lvbe_obj_get_style_scale_grad_color(bvm *vm); -extern int lvbe_obj_set_style_local_scale_grad_color(bvm *vm); -extern int lvbe_obj_get_style_scale_end_color(bvm *vm); -extern int lvbe_obj_set_style_local_scale_end_color(bvm *vm); +/* `lv_chart` external functions definitions */ +extern int lvbe_chart_create(bvm *vm); +extern int lvbe_chart_set_type(bvm *vm); +extern int lvbe_chart_set_point_count(bvm *vm); +extern int lvbe_chart_set_range(bvm *vm); +extern int lvbe_chart_set_update_mode(bvm *vm); +extern int lvbe_chart_set_div_line_count(bvm *vm); +extern int lvbe_chart_set_zoom_x(bvm *vm); +extern int lvbe_chart_set_zoom_y(bvm *vm); +extern int lvbe_chart_get_zoom_x(bvm *vm); +extern int lvbe_chart_get_zoom_y(bvm *vm); +extern int lvbe_chart_set_axis_tick(bvm *vm); +extern int lvbe_chart_get_type(bvm *vm); +extern int lvbe_chart_get_point_count(bvm *vm); +extern int lvbe_chart_get_x_start_point(bvm *vm); +extern int lvbe_chart_get_point_pos_by_id(bvm *vm); +extern int lvbe_chart_refresh(bvm *vm); +extern int lvbe_chart_remove_series(bvm *vm); +extern int lvbe_chart_hide_series(bvm *vm); +extern int lvbe_chart_set_series_color(bvm *vm); +extern int lvbe_chart_set_x_start_point(bvm *vm); +extern int lvbe_chart_set_cursor_pos(bvm *vm); +extern int lvbe_chart_set_cursor_point(bvm *vm); +extern int lvbe_chart_get_cursor_point(bvm *vm); +extern int lvbe_chart_set_all_value(bvm *vm); +extern int lvbe_chart_set_next_value(bvm *vm); +extern int lvbe_chart_set_next_value2(bvm *vm); +extern int lvbe_chart_set_value_by_id(bvm *vm); +extern int lvbe_chart_set_value_by_id2(bvm *vm); +extern int lvbe_chart_set_ext_y_array(bvm *vm); +extern int lvbe_chart_set_ext_x_array(bvm *vm); +extern int lvbe_chart_get_pressed_point(bvm *vm); + +/* `lv_colorwheel` external functions definitions */ +extern int lvbe_colorwheel_create(bvm *vm); +extern int lvbe_colorwheel_set_hsv(bvm *vm); +extern int lvbe_colorwheel_set_rgb(bvm *vm); +extern int lvbe_colorwheel_set_mode(bvm *vm); +extern int lvbe_colorwheel_set_mode_fixed(bvm *vm); +extern int lvbe_colorwheel_get_hsv(bvm *vm); +extern int lvbe_colorwheel_get_rgb(bvm *vm); +extern int lvbe_colorwheel_get_color_mode(bvm *vm); +extern int lvbe_colorwheel_get_color_mode_fixed(bvm *vm); + +/* `lv_imgbtn` external functions definitions */ +extern int lvbe_imgbtn_create(bvm *vm); +extern int lvbe_imgbtn_set_src(bvm *vm); + +/* `lv_led` external functions definitions */ +extern int lvbe_led_create(bvm *vm); +extern int lvbe_led_set_color(bvm *vm); +extern int lvbe_led_set_brightness(bvm *vm); +extern int lvbe_led_on(bvm *vm); +extern int lvbe_led_off(bvm *vm); +extern int lvbe_led_toggle(bvm *vm); +extern int lvbe_led_get_brightness(bvm *vm); + +/* `lv_meter` external functions definitions */ +extern int lvbe_meter_create(bvm *vm); +extern int lvbe_meter_add_scale(bvm *vm); +extern int lvbe_meter_set_scale_ticks(bvm *vm); +extern int lvbe_meter_set_scale_major_ticks(bvm *vm); +extern int lvbe_meter_set_scale_range(bvm *vm); +extern int lvbe_meter_add_needle_line(bvm *vm); +extern int lvbe_meter_add_needle_img(bvm *vm); +extern int lvbe_meter_add_arc(bvm *vm); +extern int lvbe_meter_add_scale_lines(bvm *vm); +extern int lvbe_meter_set_indicator_value(bvm *vm); +extern int lvbe_meter_set_indicator_start_value(bvm *vm); +extern int lvbe_meter_set_indicator_end_value(bvm *vm); + +/* `lv_msgbox` external functions definitions */ +extern int lvbe_msgbox_create(bvm *vm); +extern int lvbe_msgbox_get_title(bvm *vm); +extern int lvbe_msgbox_get_close_btn(bvm *vm); +extern int lvbe_msgbox_get_text(bvm *vm); +extern int lvbe_msgbox_get_btns(bvm *vm); +extern int lvbe_msgbox_get_active_btn_text(bvm *vm); +extern int lvbe_msgbox_close(bvm *vm); + +/* `lv_spinbox` external functions definitions */ +extern int lvbe_spinbox_create(bvm *vm); +extern int lvbe_spinbox_set_value(bvm *vm); +extern int lvbe_spinbox_set_rollover(bvm *vm); +extern int lvbe_spinbox_set_digit_format(bvm *vm); +extern int lvbe_spinbox_set_step(bvm *vm); +extern int lvbe_spinbox_set_range(bvm *vm); +extern int lvbe_spinbox_get_rollover(bvm *vm); +extern int lvbe_spinbox_get_value(bvm *vm); +extern int lvbe_spinbox_get_step(bvm *vm); +extern int lvbe_spinbox_step_next(bvm *vm); +extern int lvbe_spinbox_step_prev(bvm *vm); +extern int lvbe_spinbox_increment(bvm *vm); +extern int lvbe_spinbox_decrement(bvm *vm); /* `lv_arc` external functions definitions */ extern int lvbe_arc_create(bvm *vm); @@ -489,84 +580,49 @@ extern int lvbe_arc_set_bg_start_angle(bvm *vm); extern int lvbe_arc_set_bg_end_angle(bvm *vm); extern int lvbe_arc_set_bg_angles(bvm *vm); extern int lvbe_arc_set_rotation(bvm *vm); -extern int lvbe_arc_set_type(bvm *vm); +extern int lvbe_arc_set_mode(bvm *vm); extern int lvbe_arc_set_value(bvm *vm); extern int lvbe_arc_set_range(bvm *vm); -extern int lvbe_arc_set_chg_rate(bvm *vm); -extern int lvbe_arc_set_adjustable(bvm *vm); +extern int lvbe_arc_set_change_rate(bvm *vm); extern int lvbe_arc_get_angle_start(bvm *vm); extern int lvbe_arc_get_angle_end(bvm *vm); extern int lvbe_arc_get_bg_angle_start(bvm *vm); extern int lvbe_arc_get_bg_angle_end(bvm *vm); -extern int lvbe_arc_get_type(bvm *vm); extern int lvbe_arc_get_value(bvm *vm); extern int lvbe_arc_get_min_value(bvm *vm); extern int lvbe_arc_get_max_value(bvm *vm); -extern int lvbe_arc_is_dragged(bvm *vm); -extern int lvbe_arc_get_adjustable(bvm *vm); +extern int lvbe_arc_get_mode(bvm *vm); /* `lv_bar` external functions definitions */ extern int lvbe_bar_create(bvm *vm); extern int lvbe_bar_set_value(bvm *vm); extern int lvbe_bar_set_start_value(bvm *vm); extern int lvbe_bar_set_range(bvm *vm); -extern int lvbe_bar_set_type(bvm *vm); -extern int lvbe_bar_set_anim_time(bvm *vm); +extern int lvbe_bar_set_mode(bvm *vm); extern int lvbe_bar_get_value(bvm *vm); extern int lvbe_bar_get_start_value(bvm *vm); extern int lvbe_bar_get_min_value(bvm *vm); extern int lvbe_bar_get_max_value(bvm *vm); -extern int lvbe_bar_get_type(bvm *vm); -extern int lvbe_bar_get_anim_time(bvm *vm); +extern int lvbe_bar_get_mode(bvm *vm); /* `lv_btn` external functions definitions */ extern int lvbe_btn_create(bvm *vm); -extern int lvbe_btn_set_checkable(bvm *vm); -extern int lvbe_btn_set_state(bvm *vm); -extern int lvbe_btn_toggle(bvm *vm); -extern int lvbe_btn_set_layout(bvm *vm); -extern int lvbe_btn_set_fit4(bvm *vm); -extern int lvbe_btn_set_fit2(bvm *vm); -extern int lvbe_btn_set_fit(bvm *vm); -extern int lvbe_btn_get_state(bvm *vm); -extern int lvbe_btn_get_checkable(bvm *vm); -extern int lvbe_btn_get_layout(bvm *vm); -extern int lvbe_btn_get_fit_left(bvm *vm); -extern int lvbe_btn_get_fit_right(bvm *vm); -extern int lvbe_btn_get_fit_top(bvm *vm); -extern int lvbe_btn_get_fit_bottom(bvm *vm); /* `lv_btnmatrix` external functions definitions */ extern int lvbe_btnmatrix_create(bvm *vm); extern int lvbe_btnmatrix_set_map(bvm *vm); extern int lvbe_btnmatrix_set_ctrl_map(bvm *vm); -extern int lvbe_btnmatrix_set_focused_btn(bvm *vm); -extern int lvbe_btnmatrix_set_recolor(bvm *vm); +extern int lvbe_btnmatrix_set_selected_btn(bvm *vm); extern int lvbe_btnmatrix_set_btn_ctrl(bvm *vm); extern int lvbe_btnmatrix_clear_btn_ctrl(bvm *vm); extern int lvbe_btnmatrix_set_btn_ctrl_all(bvm *vm); extern int lvbe_btnmatrix_clear_btn_ctrl_all(bvm *vm); extern int lvbe_btnmatrix_set_btn_width(bvm *vm); -extern int lvbe_btnmatrix_set_one_check(bvm *vm); -extern int lvbe_btnmatrix_set_align(bvm *vm); -extern int lvbe_btnmatrix_get_recolor(bvm *vm); -extern int lvbe_btnmatrix_get_active_btn(bvm *vm); -extern int lvbe_btnmatrix_get_active_btn_text(bvm *vm); -extern int lvbe_btnmatrix_get_focused_btn(bvm *vm); +extern int lvbe_btnmatrix_set_one_checked(bvm *vm); +extern int lvbe_btnmatrix_get_selected_btn(bvm *vm); extern int lvbe_btnmatrix_get_btn_text(bvm *vm); -extern int lvbe_btnmatrix_get_btn_ctrl(bvm *vm); -extern int lvbe_btnmatrix_get_one_check(bvm *vm); -extern int lvbe_btnmatrix_get_align(bvm *vm); - -/* `lv_calendar` external functions definitions */ -extern int lvbe_calendar_create(bvm *vm); -extern int lvbe_calendar_set_today_date(bvm *vm); -extern int lvbe_calendar_set_showed_date(bvm *vm); -extern int lvbe_calendar_set_highlighted_dates(bvm *vm); -extern int lvbe_calendar_set_day_names(bvm *vm); -extern int lvbe_calendar_set_month_names(bvm *vm); -extern int lvbe_calendar_get_highlighted_dates_num(bvm *vm); -extern int lvbe_calendar_get_day_of_week(bvm *vm); +extern int lvbe_btnmatrix_has_btn_ctrl(bvm *vm); +extern int lvbe_btnmatrix_get_one_checked(bvm *vm); /* `lv_canvas` external functions definitions */ extern int lvbe_canvas_create(bvm *vm); @@ -586,362 +642,86 @@ extern int lvbe_canvas_draw_line(bvm *vm); extern int lvbe_canvas_draw_polygon(bvm *vm); extern int lvbe_canvas_draw_arc(bvm *vm); -/* `lv_chart` external functions definitions */ -extern int lvbe_chart_create(bvm *vm); -extern int lvbe_chart_remove_series(bvm *vm); -extern int lvbe_chart_clear_series(bvm *vm); -extern int lvbe_chart_hide_series(bvm *vm); -extern int lvbe_chart_set_div_line_count(bvm *vm); -extern int lvbe_chart_set_y_range(bvm *vm); -extern int lvbe_chart_set_type(bvm *vm); -extern int lvbe_chart_set_point_count(bvm *vm); -extern int lvbe_chart_init_points(bvm *vm); -extern int lvbe_chart_set_points(bvm *vm); -extern int lvbe_chart_set_next(bvm *vm); -extern int lvbe_chart_set_update_mode(bvm *vm); -extern int lvbe_chart_set_x_tick_length(bvm *vm); -extern int lvbe_chart_set_y_tick_length(bvm *vm); -extern int lvbe_chart_set_secondary_y_tick_length(bvm *vm); -extern int lvbe_chart_set_x_tick_texts(bvm *vm); -extern int lvbe_chart_set_secondary_y_tick_texts(bvm *vm); -extern int lvbe_chart_set_y_tick_texts(bvm *vm); -extern int lvbe_chart_set_x_start_point(bvm *vm); -extern int lvbe_chart_set_ext_array(bvm *vm); -extern int lvbe_chart_set_point_id(bvm *vm); -extern int lvbe_chart_set_series_axis(bvm *vm); -extern int lvbe_chart_set_cursor_point(bvm *vm); -extern int lvbe_chart_get_type(bvm *vm); -extern int lvbe_chart_get_point_count(bvm *vm); -extern int lvbe_chart_get_x_start_point(bvm *vm); -extern int lvbe_chart_get_point_id(bvm *vm); -extern int lvbe_chart_get_series_axis(bvm *vm); -extern int lvbe_chart_get_series_area(bvm *vm); -extern int lvbe_chart_get_cursor_point(bvm *vm); -extern int lvbe_chart_get_nearest_index_from_coord(bvm *vm); -extern int lvbe_chart_get_x_from_index(bvm *vm); -extern int lvbe_chart_get_y_from_index(bvm *vm); -extern int lvbe_chart_refresh(bvm *vm); - /* `lv_checkbox` external functions definitions */ extern int lvbe_checkbox_create(bvm *vm); extern int lvbe_checkbox_set_text(bvm *vm); extern int lvbe_checkbox_set_text_static(bvm *vm); -extern int lvbe_checkbox_set_checked(bvm *vm); -extern int lvbe_checkbox_set_disabled(bvm *vm); -extern int lvbe_checkbox_set_state(bvm *vm); extern int lvbe_checkbox_get_text(bvm *vm); -extern int lvbe_checkbox_is_checked(bvm *vm); -extern int lvbe_checkbox_is_inactive(bvm *vm); -extern int lvbe_checkbox_get_state(bvm *vm); - -/* `lv_cont` external functions definitions */ -extern int lvbe_cont_create(bvm *vm); -extern int lvbe_cont_set_layout(bvm *vm); -extern int lvbe_cont_set_fit4(bvm *vm); -extern int lvbe_cont_set_fit2(bvm *vm); -extern int lvbe_cont_set_fit(bvm *vm); -extern int lvbe_cont_get_layout(bvm *vm); -extern int lvbe_cont_get_fit_left(bvm *vm); -extern int lvbe_cont_get_fit_right(bvm *vm); -extern int lvbe_cont_get_fit_top(bvm *vm); -extern int lvbe_cont_get_fit_bottom(bvm *vm); - -/* `lv_cpicker` external functions definitions */ -extern int lvbe_cpicker_create(bvm *vm); -extern int lvbe_cpicker_set_type(bvm *vm); -extern int lvbe_cpicker_set_hue(bvm *vm); -extern int lvbe_cpicker_set_saturation(bvm *vm); -extern int lvbe_cpicker_set_value(bvm *vm); -extern int lvbe_cpicker_set_hsv(bvm *vm); -extern int lvbe_cpicker_set_color(bvm *vm); -extern int lvbe_cpicker_set_color_mode(bvm *vm); -extern int lvbe_cpicker_set_color_mode_fixed(bvm *vm); -extern int lvbe_cpicker_set_knob_colored(bvm *vm); -extern int lvbe_cpicker_get_color_mode(bvm *vm); -extern int lvbe_cpicker_get_color_mode_fixed(bvm *vm); -extern int lvbe_cpicker_get_hue(bvm *vm); -extern int lvbe_cpicker_get_saturation(bvm *vm); -extern int lvbe_cpicker_get_value(bvm *vm); -extern int lvbe_cpicker_get_hsv(bvm *vm); -extern int lvbe_cpicker_get_color(bvm *vm); -extern int lvbe_cpicker_get_knob_colored(bvm *vm); /* `lv_dropdown` external functions definitions */ extern int lvbe_dropdown_create(bvm *vm); extern int lvbe_dropdown_set_text(bvm *vm); -extern int lvbe_dropdown_clear_options(bvm *vm); extern int lvbe_dropdown_set_options(bvm *vm); extern int lvbe_dropdown_set_options_static(bvm *vm); extern int lvbe_dropdown_add_option(bvm *vm); +extern int lvbe_dropdown_clear_options(bvm *vm); extern int lvbe_dropdown_set_selected(bvm *vm); extern int lvbe_dropdown_set_dir(bvm *vm); -extern int lvbe_dropdown_set_max_height(bvm *vm); extern int lvbe_dropdown_set_symbol(bvm *vm); -extern int lvbe_dropdown_set_show_selected(bvm *vm); +extern int lvbe_dropdown_set_selected_highlight(bvm *vm); +extern int lvbe_dropdown_get_list(bvm *vm); extern int lvbe_dropdown_get_text(bvm *vm); extern int lvbe_dropdown_get_options(bvm *vm); extern int lvbe_dropdown_get_selected(bvm *vm); extern int lvbe_dropdown_get_option_cnt(bvm *vm); extern int lvbe_dropdown_get_selected_str(bvm *vm); -extern int lvbe_dropdown_get_max_height(bvm *vm); extern int lvbe_dropdown_get_symbol(bvm *vm); +extern int lvbe_dropdown_get_selected_highlight(bvm *vm); extern int lvbe_dropdown_get_dir(bvm *vm); -extern int lvbe_dropdown_get_show_selected(bvm *vm); extern int lvbe_dropdown_open(bvm *vm); extern int lvbe_dropdown_close(bvm *vm); -/* `lv_gauge` external functions definitions */ -extern int lvbe_gauge_create(bvm *vm); -extern int lvbe_gauge_set_needle_count(bvm *vm); -extern int lvbe_gauge_set_value(bvm *vm); -extern int lvbe_gauge_set_range(bvm *vm); -extern int lvbe_gauge_set_critical_value(bvm *vm); -extern int lvbe_gauge_set_scale(bvm *vm); -extern int lvbe_gauge_set_angle_offset(bvm *vm); -extern int lvbe_gauge_set_needle_img(bvm *vm); -extern int lvbe_gauge_set_formatter_cb(bvm *vm); -extern int lvbe_gauge_get_value(bvm *vm); -extern int lvbe_gauge_get_needle_count(bvm *vm); -extern int lvbe_gauge_get_min_value(bvm *vm); -extern int lvbe_gauge_get_max_value(bvm *vm); -extern int lvbe_gauge_get_critical_value(bvm *vm); -extern int lvbe_gauge_get_label_count(bvm *vm); -extern int lvbe_gauge_get_line_count(bvm *vm); -extern int lvbe_gauge_get_scale_angle(bvm *vm); -extern int lvbe_gauge_get_angle_offset(bvm *vm); -extern int lvbe_gauge_get_needle_img(bvm *vm); -extern int lvbe_gauge_get_needle_img_pivot_x(bvm *vm); -extern int lvbe_gauge_get_needle_img_pivot_y(bvm *vm); - -/* `lv_imgbtn` external functions definitions */ -extern int lvbe_imgbtn_create(bvm *vm); -extern int lvbe_imgbtn_set_src(bvm *vm); -extern int lvbe_imgbtn_set_state(bvm *vm); -extern int lvbe_imgbtn_toggle(bvm *vm); -extern int lvbe_imgbtn_set_checkable(bvm *vm); -extern int lvbe_imgbtn_get_src(bvm *vm); -extern int lvbe_imgbtn_get_state(bvm *vm); - -/* `lv_keyboard` external functions definitions */ -extern int lvbe_keyboard_create(bvm *vm); -extern int lvbe_keyboard_set_textarea(bvm *vm); -extern int lvbe_keyboard_set_mode(bvm *vm); -extern int lvbe_keyboard_set_cursor_manage(bvm *vm); -extern int lvbe_keyboard_set_map(bvm *vm); -extern int lvbe_keyboard_set_ctrl_map(bvm *vm); -extern int lvbe_keyboard_get_textarea(bvm *vm); -extern int lvbe_keyboard_get_mode(bvm *vm); -extern int lvbe_keyboard_get_cursor_manage(bvm *vm); -extern int lvbe_keyboard_def_event_cb(bvm *vm); - /* `lv_label` external functions definitions */ extern int lvbe_label_create(bvm *vm); extern int lvbe_label_set_text(bvm *vm); extern int lvbe_label_set_text_fmt(bvm *vm); extern int lvbe_label_set_text_static(bvm *vm); extern int lvbe_label_set_long_mode(bvm *vm); -extern int lvbe_label_set_align(bvm *vm); extern int lvbe_label_set_recolor(bvm *vm); -extern int lvbe_label_set_anim_speed(bvm *vm); extern int lvbe_label_set_text_sel_start(bvm *vm); extern int lvbe_label_set_text_sel_end(bvm *vm); extern int lvbe_label_get_text(bvm *vm); extern int lvbe_label_get_long_mode(bvm *vm); -extern int lvbe_label_get_align(bvm *vm); extern int lvbe_label_get_recolor(bvm *vm); -extern int lvbe_label_get_anim_speed(bvm *vm); extern int lvbe_label_get_letter_pos(bvm *vm); extern int lvbe_label_get_letter_on(bvm *vm); extern int lvbe_label_is_char_under_pos(bvm *vm); -extern int lvbe_label_get_text_sel_start(bvm *vm); -extern int lvbe_label_get_text_sel_end(bvm *vm); +extern int lvbe_label_get_text_selection_start(bvm *vm); +extern int lvbe_label_get_text_selection_end(bvm *vm); extern int lvbe_label_ins_text(bvm *vm); extern int lvbe_label_cut_text(bvm *vm); -extern int lvbe_label_refr_text(bvm *vm); - -/* `lv_led` external functions definitions */ -extern int lvbe_led_create(bvm *vm); -extern int lvbe_led_set_bright(bvm *vm); -extern int lvbe_led_on(bvm *vm); -extern int lvbe_led_off(bvm *vm); -extern int lvbe_led_toggle(bvm *vm); -extern int lvbe_led_get_bright(bvm *vm); /* `lv_line` external functions definitions */ extern int lvbe_line_create(bvm *vm); extern int lvbe_line_set_points(bvm *vm); -extern int lvbe_line_set_auto_size(bvm *vm); extern int lvbe_line_set_y_invert(bvm *vm); -extern int lvbe_line_get_auto_size(bvm *vm); extern int lvbe_line_get_y_invert(bvm *vm); -/* `lv_linemeter` external functions definitions */ -extern int lvbe_linemeter_create(bvm *vm); -extern int lvbe_linemeter_set_value(bvm *vm); -extern int lvbe_linemeter_set_range(bvm *vm); -extern int lvbe_linemeter_set_scale(bvm *vm); -extern int lvbe_linemeter_set_angle_offset(bvm *vm); -extern int lvbe_linemeter_set_mirror(bvm *vm); -extern int lvbe_linemeter_get_value(bvm *vm); -extern int lvbe_linemeter_get_min_value(bvm *vm); -extern int lvbe_linemeter_get_max_value(bvm *vm); -extern int lvbe_linemeter_get_line_count(bvm *vm); -extern int lvbe_linemeter_get_scale_angle(bvm *vm); -extern int lvbe_linemeter_get_angle_offset(bvm *vm); -extern int lvbe_linemeter_draw_scale(bvm *vm); -extern int lvbe_linemeter_get_mirror(bvm *vm); - -/* `lv_list` external functions definitions */ -extern int lvbe_list_create(bvm *vm); -extern int lvbe_list_clean(bvm *vm); -extern int lvbe_list_add_btn(bvm *vm); -extern int lvbe_list_remove(bvm *vm); -extern int lvbe_list_focus_btn(bvm *vm); -extern int lvbe_list_set_scrollbar_mode(bvm *vm); -extern int lvbe_list_set_scroll_propagation(bvm *vm); -extern int lvbe_list_set_edge_flash(bvm *vm); -extern int lvbe_list_set_anim_time(bvm *vm); -extern int lvbe_list_set_layout(bvm *vm); -extern int lvbe_list_get_btn_text(bvm *vm); -extern int lvbe_list_get_btn_label(bvm *vm); -extern int lvbe_list_get_btn_img(bvm *vm); -extern int lvbe_list_get_prev_btn(bvm *vm); -extern int lvbe_list_get_next_btn(bvm *vm); -extern int lvbe_list_get_btn_index(bvm *vm); -extern int lvbe_list_get_size(bvm *vm); -extern int lvbe_list_get_btn_selected(bvm *vm); -extern int lvbe_list_get_layout(bvm *vm); -extern int lvbe_list_get_scrollbar_mode(bvm *vm); -extern int lvbe_list_get_scroll_propagation(bvm *vm); -extern int lvbe_list_get_edge_flash(bvm *vm); -extern int lvbe_list_get_anim_time(bvm *vm); -extern int lvbe_list_up(bvm *vm); -extern int lvbe_list_down(bvm *vm); -extern int lvbe_list_focus(bvm *vm); - -/* `lv_msgbox` external functions definitions */ -extern int lvbe_msgbox_create(bvm *vm); -extern int lvbe_msgbox_add_btns(bvm *vm); -extern int lvbe_msgbox_set_text(bvm *vm); -extern int lvbe_msgbox_set_text_fmt(bvm *vm); -extern int lvbe_msgbox_set_anim_time(bvm *vm); -extern int lvbe_msgbox_start_auto_close(bvm *vm); -extern int lvbe_msgbox_stop_auto_close(bvm *vm); -extern int lvbe_msgbox_set_recolor(bvm *vm); -extern int lvbe_msgbox_get_text(bvm *vm); -extern int lvbe_msgbox_get_active_btn(bvm *vm); -extern int lvbe_msgbox_get_active_btn_text(bvm *vm); -extern int lvbe_msgbox_get_anim_time(bvm *vm); -extern int lvbe_msgbox_get_recolor(bvm *vm); -extern int lvbe_msgbox_get_btnmatrix(bvm *vm); - -/* `lv_objmask` external functions definitions */ -extern int lvbe_objmask_create(bvm *vm); -extern int lvbe_objmask_update_mask(bvm *vm); -extern int lvbe_objmask_remove_mask(bvm *vm); - -/* `lv_page` external functions definitions */ -extern int lvbe_page_create(bvm *vm); -extern int lvbe_page_clean(bvm *vm); -extern int lvbe_page_get_scrollable(bvm *vm); -extern int lvbe_page_get_anim_time(bvm *vm); -extern int lvbe_page_set_scrollbar_mode(bvm *vm); -extern int lvbe_page_set_anim_time(bvm *vm); -extern int lvbe_page_set_scroll_propagation(bvm *vm); -extern int lvbe_page_set_edge_flash(bvm *vm); -extern int lvbe_page_set_scrollable_fit2(bvm *vm); -extern int lvbe_page_set_scrollable_fit(bvm *vm); -extern int lvbe_page_set_scrl_width(bvm *vm); -extern int lvbe_page_set_scrl_height(bvm *vm); -extern int lvbe_page_set_scrl_layout(bvm *vm); -extern int lvbe_page_get_scrollbar_mode(bvm *vm); -extern int lvbe_page_get_scroll_propagation(bvm *vm); -extern int lvbe_page_get_edge_flash(bvm *vm); -extern int lvbe_page_get_width_fit(bvm *vm); -extern int lvbe_page_get_height_fit(bvm *vm); -extern int lvbe_page_get_width_grid(bvm *vm); -extern int lvbe_page_get_height_grid(bvm *vm); -extern int lvbe_page_get_scrl_width(bvm *vm); -extern int lvbe_page_get_scrl_height(bvm *vm); -extern int lvbe_page_get_scrl_layout(bvm *vm); -extern int lvbe_page_get_scrl_fit_left(bvm *vm); -extern int lvbe_page_get_scrl_fit_right(bvm *vm); -extern int lvbe_page_get_scrl_fit_top(bvm *vm); -extern int lvbe_page_get_scrl_fit_bottom(bvm *vm); -extern int lvbe_page_on_edge(bvm *vm); -extern int lvbe_page_glue_obj(bvm *vm); -extern int lvbe_page_focus(bvm *vm); -extern int lvbe_page_scroll_hor(bvm *vm); -extern int lvbe_page_scroll_ver(bvm *vm); -extern int lvbe_page_start_edge_flash(bvm *vm); - /* `lv_roller` external functions definitions */ extern int lvbe_roller_create(bvm *vm); extern int lvbe_roller_set_options(bvm *vm); -extern int lvbe_roller_set_align(bvm *vm); extern int lvbe_roller_set_selected(bvm *vm); extern int lvbe_roller_set_visible_row_count(bvm *vm); -extern int lvbe_roller_set_auto_fit(bvm *vm); -extern int lvbe_roller_set_anim_time(bvm *vm); extern int lvbe_roller_get_selected(bvm *vm); -extern int lvbe_roller_get_option_cnt(bvm *vm); extern int lvbe_roller_get_selected_str(bvm *vm); -extern int lvbe_roller_get_align(bvm *vm); -extern int lvbe_roller_get_auto_fit(bvm *vm); extern int lvbe_roller_get_options(bvm *vm); -extern int lvbe_roller_get_anim_time(bvm *vm); +extern int lvbe_roller_get_option_cnt(bvm *vm); /* `lv_slider` external functions definitions */ extern int lvbe_slider_create(bvm *vm); extern int lvbe_slider_set_value(bvm *vm); extern int lvbe_slider_set_left_value(bvm *vm); extern int lvbe_slider_set_range(bvm *vm); -extern int lvbe_slider_set_anim_time(bvm *vm); -extern int lvbe_slider_set_type(bvm *vm); +extern int lvbe_slider_set_mode(bvm *vm); extern int lvbe_slider_get_value(bvm *vm); extern int lvbe_slider_get_left_value(bvm *vm); extern int lvbe_slider_get_min_value(bvm *vm); extern int lvbe_slider_get_max_value(bvm *vm); extern int lvbe_slider_is_dragged(bvm *vm); -extern int lvbe_slider_get_anim_time(bvm *vm); -extern int lvbe_slider_get_type(bvm *vm); - -/* `lv_spinbox` external functions definitions */ -extern int lvbe_spinbox_create(bvm *vm); -extern int lvbe_spinbox_set_rollover(bvm *vm); -extern int lvbe_spinbox_set_value(bvm *vm); -extern int lvbe_spinbox_set_digit_format(bvm *vm); -extern int lvbe_spinbox_set_step(bvm *vm); -extern int lvbe_spinbox_set_range(bvm *vm); -extern int lvbe_spinbox_set_padding_left(bvm *vm); -extern int lvbe_spinbox_get_rollover(bvm *vm); -extern int lvbe_spinbox_get_value(bvm *vm); -extern int lvbe_spinbox_get_step(bvm *vm); -extern int lvbe_spinbox_step_next(bvm *vm); -extern int lvbe_spinbox_step_prev(bvm *vm); -extern int lvbe_spinbox_increment(bvm *vm); -extern int lvbe_spinbox_decrement(bvm *vm); - -/* `lv_spinner` external functions definitions */ -extern int lvbe_spinner_create(bvm *vm); -extern int lvbe_spinner_set_arc_length(bvm *vm); -extern int lvbe_spinner_set_spin_time(bvm *vm); -extern int lvbe_spinner_set_type(bvm *vm); -extern int lvbe_spinner_set_dir(bvm *vm); -extern int lvbe_spinner_get_arc_length(bvm *vm); -extern int lvbe_spinner_get_spin_time(bvm *vm); -extern int lvbe_spinner_get_type(bvm *vm); -extern int lvbe_spinner_get_dir(bvm *vm); -extern int lvbe_spinner_anim_cb(bvm *vm); +extern int lvbe_slider_get_mode(bvm *vm); /* `lv_switch` external functions definitions */ extern int lvbe_switch_create(bvm *vm); -extern int lvbe_switch_on(bvm *vm); -extern int lvbe_switch_off(bvm *vm); -extern int lvbe_switch_toggle(bvm *vm); -extern int lvbe_switch_set_anim_time(bvm *vm); -extern int lvbe_switch_get_state(bvm *vm); -extern int lvbe_switch_get_anim_time(bvm *vm); /* `lv_table` external functions definitions */ extern int lvbe_table_create(bvm *vm); @@ -950,33 +730,14 @@ extern int lvbe_table_set_cell_value_fmt(bvm *vm); extern int lvbe_table_set_row_cnt(bvm *vm); extern int lvbe_table_set_col_cnt(bvm *vm); extern int lvbe_table_set_col_width(bvm *vm); -extern int lvbe_table_set_cell_align(bvm *vm); -extern int lvbe_table_set_cell_type(bvm *vm); -extern int lvbe_table_set_cell_crop(bvm *vm); -extern int lvbe_table_set_cell_merge_right(bvm *vm); +extern int lvbe_table_add_cell_ctrl(bvm *vm); +extern int lvbe_table_clear_cell_ctrl(bvm *vm); extern int lvbe_table_get_cell_value(bvm *vm); extern int lvbe_table_get_row_cnt(bvm *vm); extern int lvbe_table_get_col_cnt(bvm *vm); extern int lvbe_table_get_col_width(bvm *vm); -extern int lvbe_table_get_cell_align(bvm *vm); -extern int lvbe_table_get_cell_type(bvm *vm); -extern int lvbe_table_get_cell_crop(bvm *vm); -extern int lvbe_table_get_cell_merge_right(bvm *vm); -extern int lvbe_table_get_pressed_cell(bvm *vm); - -/* `lv_tabview` external functions definitions */ -extern int lvbe_tabview_create(bvm *vm); -extern int lvbe_tabview_add_tab(bvm *vm); -extern int lvbe_tabview_clean_tab(bvm *vm); -extern int lvbe_tabview_set_tab_act(bvm *vm); -extern int lvbe_tabview_set_tab_name(bvm *vm); -extern int lvbe_tabview_set_anim_time(bvm *vm); -extern int lvbe_tabview_set_btns_pos(bvm *vm); -extern int lvbe_tabview_get_tab_act(bvm *vm); -extern int lvbe_tabview_get_tab_count(bvm *vm); -extern int lvbe_tabview_get_tab(bvm *vm); -extern int lvbe_tabview_get_anim_time(bvm *vm); -extern int lvbe_tabview_get_btns_pos(bvm *vm); +extern int lvbe_table_has_cell_ctrl(bvm *vm); +extern int lvbe_table_get_selected_cell(bvm *vm); /* `lv_textarea` external functions definitions */ extern int lvbe_textarea_create(bvm *vm); @@ -987,193 +748,69 @@ extern int lvbe_textarea_del_char_forward(bvm *vm); extern int lvbe_textarea_set_text(bvm *vm); extern int lvbe_textarea_set_placeholder_text(bvm *vm); extern int lvbe_textarea_set_cursor_pos(bvm *vm); -extern int lvbe_textarea_set_cursor_hidden(bvm *vm); extern int lvbe_textarea_set_cursor_click_pos(bvm *vm); -extern int lvbe_textarea_set_pwd_mode(bvm *vm); +extern int lvbe_textarea_set_password_mode(bvm *vm); extern int lvbe_textarea_set_one_line(bvm *vm); -extern int lvbe_textarea_set_text_align(bvm *vm); extern int lvbe_textarea_set_accepted_chars(bvm *vm); extern int lvbe_textarea_set_max_length(bvm *vm); extern int lvbe_textarea_set_insert_replace(bvm *vm); -extern int lvbe_textarea_set_scrollbar_mode(bvm *vm); -extern int lvbe_textarea_set_scroll_propagation(bvm *vm); -extern int lvbe_textarea_set_edge_flash(bvm *vm); -extern int lvbe_textarea_set_text_sel(bvm *vm); -extern int lvbe_textarea_set_pwd_show_time(bvm *vm); -extern int lvbe_textarea_set_cursor_blink_time(bvm *vm); +extern int lvbe_textarea_set_text_selection(bvm *vm); +extern int lvbe_textarea_set_password_show_time(bvm *vm); +extern int lvbe_textarea_set_align(bvm *vm); extern int lvbe_textarea_get_text(bvm *vm); extern int lvbe_textarea_get_placeholder_text(bvm *vm); extern int lvbe_textarea_get_label(bvm *vm); extern int lvbe_textarea_get_cursor_pos(bvm *vm); -extern int lvbe_textarea_get_cursor_hidden(bvm *vm); extern int lvbe_textarea_get_cursor_click_pos(bvm *vm); -extern int lvbe_textarea_get_pwd_mode(bvm *vm); +extern int lvbe_textarea_get_password_mode(bvm *vm); extern int lvbe_textarea_get_one_line(bvm *vm); extern int lvbe_textarea_get_accepted_chars(bvm *vm); extern int lvbe_textarea_get_max_length(bvm *vm); -extern int lvbe_textarea_get_scrollbar_mode(bvm *vm); -extern int lvbe_textarea_get_scroll_propagation(bvm *vm); -extern int lvbe_textarea_get_edge_flash(bvm *vm); extern int lvbe_textarea_text_is_selected(bvm *vm); -extern int lvbe_textarea_get_text_sel_en(bvm *vm); -extern int lvbe_textarea_get_pwd_show_time(bvm *vm); -extern int lvbe_textarea_get_cursor_blink_time(bvm *vm); +extern int lvbe_textarea_get_text_selection(bvm *vm); +extern int lvbe_textarea_get_password_show_time(bvm *vm); extern int lvbe_textarea_clear_selection(bvm *vm); extern int lvbe_textarea_cursor_right(bvm *vm); extern int lvbe_textarea_cursor_left(bvm *vm); extern int lvbe_textarea_cursor_down(bvm *vm); extern int lvbe_textarea_cursor_up(bvm *vm); -/* `lv_tileview` external functions definitions */ -extern int lvbe_tileview_create(bvm *vm); -extern int lvbe_tileview_add_element(bvm *vm); -extern int lvbe_tileview_set_valid_positions(bvm *vm); -extern int lvbe_tileview_set_tile_act(bvm *vm); -extern int lvbe_tileview_set_edge_flash(bvm *vm); -extern int lvbe_tileview_set_anim_time(bvm *vm); -extern int lvbe_tileview_get_tile_act(bvm *vm); -extern int lvbe_tileview_get_edge_flash(bvm *vm); -extern int lvbe_tileview_get_anim_time(bvm *vm); - -/* `lv_win` external functions definitions */ -extern int lvbe_win_create(bvm *vm); -extern int lvbe_win_clean(bvm *vm); -extern int lvbe_win_add_btn_right(bvm *vm); -extern int lvbe_win_add_btn_left(bvm *vm); -extern int lvbe_win_close_event_cb(bvm *vm); -extern int lvbe_win_set_title(bvm *vm); -extern int lvbe_win_set_header_height(bvm *vm); -extern int lvbe_win_set_btn_width(bvm *vm); -extern int lvbe_win_set_content_size(bvm *vm); -extern int lvbe_win_set_layout(bvm *vm); -extern int lvbe_win_set_scrollbar_mode(bvm *vm); -extern int lvbe_win_set_anim_time(bvm *vm); -extern int lvbe_win_set_drag(bvm *vm); -extern int lvbe_win_title_set_alignment(bvm *vm); -extern int lvbe_win_get_title(bvm *vm); -extern int lvbe_win_get_content(bvm *vm); -extern int lvbe_win_get_header_height(bvm *vm); -extern int lvbe_win_get_btn_width(bvm *vm); -extern int lvbe_win_get_from_btn(bvm *vm); -extern int lvbe_win_get_layout(bvm *vm); -extern int lvbe_win_get_sb_mode(bvm *vm); -extern int lvbe_win_get_anim_time(bvm *vm); -extern int lvbe_win_get_width(bvm *vm); -extern int lvbe_win_get_drag(bvm *vm); -extern int lvbe_win_title_get_alignment(bvm *vm); -extern int lvbe_win_focus(bvm *vm); -extern int lvbe_win_scroll_hor(bvm *vm); -extern int lvbe_win_scroll_ver(bvm *vm); - - -#if BE_USE_PRECOMPILED_OBJECT - -#include "../generate/be_fixed_be_class_lv_img.h" #include "../generate/be_fixed_be_class_lv_style.h" +#include "../generate/be_fixed_be_class_lv_img.h" +#include "../generate/be_fixed_be_class_lv_obj.h" #include "../generate/be_fixed_be_class_lv_group.h" #include "../generate/be_fixed_be_class_lv_indev.h" -#include "../generate/be_fixed_be_class_lv_obj.h" +#include "../generate/be_fixed_be_class_lv_chart.h" +#include "../generate/be_fixed_be_class_lv_colorwheel.h" +#include "../generate/be_fixed_be_class_lv_imgbtn.h" +#include "../generate/be_fixed_be_class_lv_led.h" +#include "../generate/be_fixed_be_class_lv_meter.h" +#include "../generate/be_fixed_be_class_lv_msgbox.h" +#include "../generate/be_fixed_be_class_lv_spinbox.h" #include "../generate/be_fixed_be_class_lv_arc.h" #include "../generate/be_fixed_be_class_lv_bar.h" #include "../generate/be_fixed_be_class_lv_btn.h" #include "../generate/be_fixed_be_class_lv_btnmatrix.h" -#include "../generate/be_fixed_be_class_lv_calendar.h" #include "../generate/be_fixed_be_class_lv_canvas.h" -#include "../generate/be_fixed_be_class_lv_chart.h" #include "../generate/be_fixed_be_class_lv_checkbox.h" -#include "../generate/be_fixed_be_class_lv_cont.h" -#include "../generate/be_fixed_be_class_lv_cpicker.h" #include "../generate/be_fixed_be_class_lv_dropdown.h" -#include "../generate/be_fixed_be_class_lv_gauge.h" -#include "../generate/be_fixed_be_class_lv_imgbtn.h" -#include "../generate/be_fixed_be_class_lv_keyboard.h" #include "../generate/be_fixed_be_class_lv_label.h" -#include "../generate/be_fixed_be_class_lv_led.h" #include "../generate/be_fixed_be_class_lv_line.h" -#include "../generate/be_fixed_be_class_lv_linemeter.h" -#include "../generate/be_fixed_be_class_lv_list.h" -#include "../generate/be_fixed_be_class_lv_msgbox.h" -#include "../generate/be_fixed_be_class_lv_objmask.h" -#include "../generate/be_fixed_be_class_lv_page.h" #include "../generate/be_fixed_be_class_lv_roller.h" #include "../generate/be_fixed_be_class_lv_slider.h" -#include "../generate/be_fixed_be_class_lv_spinbox.h" -#include "../generate/be_fixed_be_class_lv_spinner.h" #include "../generate/be_fixed_be_class_lv_switch.h" #include "../generate/be_fixed_be_class_lv_table.h" -#include "../generate/be_fixed_be_class_lv_tabview.h" #include "../generate/be_fixed_be_class_lv_textarea.h" -#include "../generate/be_fixed_be_class_lv_tileview.h" -#include "../generate/be_fixed_be_class_lv_win.h" - -#endif - - -void be_load_lv_img_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_img_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_img", members); - - be_getglobal(vm, "lv_img"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_img); - be_setglobal(vm, "lv_img"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_img (scope: global, name: lv_img, super: be_class_lv_obj) { - .p, var - init, func(lvbe_img_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ void be_load_lv_style_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvs_init }, - { "tostring", lvs_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_style", members); - - be_getglobal(vm, "lv_style"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_style); be_setglobal(vm, "lv_style"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin -class be_class_lv_style (scope: global, name: lv_style, super: be_class_lv_obj) { - .p, var +class be_class_lv_style (scope: global, name: lv_style) { + _p, var init, func(lvs_init) tostring, func(lvs_tostring) member, func(lvx_member) @@ -1181,30 +818,49 @@ class be_class_lv_style (scope: global, name: lv_style, super: be_class_lv_obj) } @const_object_info_end */ +void be_load_lv_img_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_img); + be_setglobal(vm, "lv_img"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_img (scope: global, name: lv_img, super: be_class_lv_obj) { + _p, var + _class, int(&lv_img_class) + init, func(lvbe_img_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_obj_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_obj); + be_setglobal(vm, "lv_obj"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_obj (scope: global, name: lv_obj) { + _p, var + _class, int(&lv_obj_class) + init, func(lvbe_obj_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + void be_load_lv_group_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_group_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_group", members); -#else be_pushntvclass(vm, &be_class_lv_group); be_setglobal(vm, "lv_group"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_group (scope: global, name: lv_group) { - .p, var + _p, var init, func(lvbe_group_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1213,34 +869,14 @@ class be_class_lv_group (scope: global, name: lv_group) { @const_object_info_end */ void be_load_lv_indev_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lv0_init }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_indev", members); - - be_getglobal(vm, "lv_indev"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_indev); be_setglobal(vm, "lv_indev"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin -class be_class_lv_indev (scope: global, name: lv_indev, super: be_class_lv_obj) { - .p, var +class be_class_lv_indev (scope: global, name: lv_indev) { + _p, var init, func(lv0_init) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1248,31 +884,119 @@ class be_class_lv_indev (scope: global, name: lv_indev, super: be_class_lv_obj) } @const_object_info_end */ -void be_load_lv_obj_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_obj_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_obj", members); -#else - be_pushntvclass(vm, &be_class_lv_obj); - be_setglobal(vm, "lv_obj"); +void be_load_lv_chart_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_chart); + be_setglobal(vm, "lv_chart"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin -class be_class_lv_obj (scope: global, name: lv_obj) { - .p, var - init, func(lvbe_obj_create) +class be_class_lv_chart (scope: global, name: lv_chart, super: be_class_lv_obj) { + _p, var + _class, int(&lv_chart_class) + init, func(lvbe_chart_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_colorwheel_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_colorwheel); + be_setglobal(vm, "lv_colorwheel"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_colorwheel (scope: global, name: lv_colorwheel, super: be_class_lv_obj) { + _p, var + _class, int(&lv_colorwheel_class) + init, func(lvbe_colorwheel_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_imgbtn_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_imgbtn); + be_setglobal(vm, "lv_imgbtn"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_imgbtn (scope: global, name: lv_imgbtn, super: be_class_lv_obj) { + _p, var + _class, int(&lv_imgbtn_class) + init, func(lvbe_imgbtn_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_led_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_led); + be_setglobal(vm, "lv_led"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_led (scope: global, name: lv_led, super: be_class_lv_obj) { + _p, var + _class, int(&lv_led_class) + init, func(lvbe_led_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_meter_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_meter); + be_setglobal(vm, "lv_meter"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_meter (scope: global, name: lv_meter, super: be_class_lv_obj) { + _p, var + _class, int(&lv_meter_class) + init, func(lvbe_meter_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_msgbox_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_msgbox); + be_setglobal(vm, "lv_msgbox"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_msgbox (scope: global, name: lv_msgbox, super: be_class_lv_obj) { + _p, var + _class, int(&lv_msgbox_class) + init, func(lvbe_msgbox_create) + tostring, func(lvx_tostring) + member, func(lvx_member) + +} +@const_object_info_end */ + +void be_load_lv_spinbox_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_spinbox); + be_setglobal(vm, "lv_spinbox"); + be_pop(vm, 1); +}; + +/* @const_object_info_begin +class be_class_lv_spinbox (scope: global, name: lv_spinbox, super: be_class_lv_obj) { + _p, var + _class, int(&lv_spinbox_class) + init, func(lvbe_spinbox_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1280,34 +1004,15 @@ class be_class_lv_obj (scope: global, name: lv_obj) { @const_object_info_end */ void be_load_lv_arc_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_arc_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_arc", members); - - be_getglobal(vm, "lv_arc"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_arc); be_setglobal(vm, "lv_arc"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_arc (scope: global, name: lv_arc, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_arc_class) init, func(lvbe_arc_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1316,34 +1021,15 @@ class be_class_lv_arc (scope: global, name: lv_arc, super: be_class_lv_obj) { @const_object_info_end */ void be_load_lv_bar_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_bar_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_bar", members); - - be_getglobal(vm, "lv_bar"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_bar); be_setglobal(vm, "lv_bar"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_bar (scope: global, name: lv_bar, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_bar_class) init, func(lvbe_bar_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1352,34 +1038,15 @@ class be_class_lv_bar (scope: global, name: lv_bar, super: be_class_lv_obj) { @const_object_info_end */ void be_load_lv_btn_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_btn_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_btn", members); - - be_getglobal(vm, "lv_btn"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_btn); be_setglobal(vm, "lv_btn"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_btn (scope: global, name: lv_btn, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_btn_class) init, func(lvbe_btn_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1388,34 +1055,15 @@ class be_class_lv_btn (scope: global, name: lv_btn, super: be_class_lv_obj) { @const_object_info_end */ void be_load_lv_btnmatrix_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_btnmatrix_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_btnmatrix", members); - - be_getglobal(vm, "lv_btnmatrix"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_btnmatrix); be_setglobal(vm, "lv_btnmatrix"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_btnmatrix (scope: global, name: lv_btnmatrix, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_btnmatrix_class) init, func(lvbe_btnmatrix_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1423,71 +1071,16 @@ class be_class_lv_btnmatrix (scope: global, name: lv_btnmatrix, super: be_class_ } @const_object_info_end */ -void be_load_lv_calendar_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_calendar_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_calendar", members); - - be_getglobal(vm, "lv_calendar"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_calendar); - be_setglobal(vm, "lv_calendar"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_calendar (scope: global, name: lv_calendar, super: be_class_lv_obj) { - .p, var - init, func(lvbe_calendar_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_canvas_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_canvas_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_canvas", members); - - be_getglobal(vm, "lv_canvas"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_canvas); be_setglobal(vm, "lv_canvas"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_canvas (scope: global, name: lv_canvas, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_canvas_class) init, func(lvbe_canvas_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1495,71 +1088,16 @@ class be_class_lv_canvas (scope: global, name: lv_canvas, super: be_class_lv_obj } @const_object_info_end */ -void be_load_lv_chart_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_chart_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_chart", members); - - be_getglobal(vm, "lv_chart"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_chart); - be_setglobal(vm, "lv_chart"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_chart (scope: global, name: lv_chart, super: be_class_lv_obj) { - .p, var - init, func(lvbe_chart_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_checkbox_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_checkbox_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_checkbox", members); - - be_getglobal(vm, "lv_checkbox"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_checkbox); be_setglobal(vm, "lv_checkbox"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_checkbox (scope: global, name: lv_checkbox, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_checkbox_class) init, func(lvbe_checkbox_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1567,107 +1105,16 @@ class be_class_lv_checkbox (scope: global, name: lv_checkbox, super: be_class_lv } @const_object_info_end */ -void be_load_lv_cont_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_cont_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_cont", members); - - be_getglobal(vm, "lv_cont"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_cont); - be_setglobal(vm, "lv_cont"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_cont (scope: global, name: lv_cont, super: be_class_lv_obj) { - .p, var - init, func(lvbe_cont_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_cpicker_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_cpicker_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_cpicker", members); - - be_getglobal(vm, "lv_cpicker"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_cpicker); - be_setglobal(vm, "lv_cpicker"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_cpicker (scope: global, name: lv_cpicker, super: be_class_lv_obj) { - .p, var - init, func(lvbe_cpicker_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_dropdown_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_dropdown_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_dropdown", members); - - be_getglobal(vm, "lv_dropdown"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_dropdown); be_setglobal(vm, "lv_dropdown"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_dropdown (scope: global, name: lv_dropdown, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_dropdown_class) init, func(lvbe_dropdown_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1675,143 +1122,16 @@ class be_class_lv_dropdown (scope: global, name: lv_dropdown, super: be_class_lv } @const_object_info_end */ -void be_load_lv_gauge_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_gauge_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_gauge", members); - - be_getglobal(vm, "lv_gauge"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_gauge); - be_setglobal(vm, "lv_gauge"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_gauge (scope: global, name: lv_gauge, super: be_class_lv_obj) { - .p, var - init, func(lvbe_gauge_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_imgbtn_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_imgbtn_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_imgbtn", members); - - be_getglobal(vm, "lv_imgbtn"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_imgbtn); - be_setglobal(vm, "lv_imgbtn"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_imgbtn (scope: global, name: lv_imgbtn, super: be_class_lv_obj) { - .p, var - init, func(lvbe_imgbtn_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_keyboard_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_keyboard_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_keyboard", members); - - be_getglobal(vm, "lv_keyboard"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_keyboard); - be_setglobal(vm, "lv_keyboard"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_keyboard (scope: global, name: lv_keyboard, super: be_class_lv_obj) { - .p, var - init, func(lvbe_keyboard_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_label_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_label_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_label", members); - - be_getglobal(vm, "lv_label"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_label); be_setglobal(vm, "lv_label"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_label (scope: global, name: lv_label, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_label_class) init, func(lvbe_label_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1819,71 +1139,16 @@ class be_class_lv_label (scope: global, name: lv_label, super: be_class_lv_obj) } @const_object_info_end */ -void be_load_lv_led_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_led_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_led", members); - - be_getglobal(vm, "lv_led"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_led); - be_setglobal(vm, "lv_led"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_led (scope: global, name: lv_led, super: be_class_lv_obj) { - .p, var - init, func(lvbe_led_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_line_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_line_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_line", members); - - be_getglobal(vm, "lv_line"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_line); be_setglobal(vm, "lv_line"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_line (scope: global, name: lv_line, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_line_class) init, func(lvbe_line_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -1891,215 +1156,16 @@ class be_class_lv_line (scope: global, name: lv_line, super: be_class_lv_obj) { } @const_object_info_end */ -void be_load_lv_linemeter_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_linemeter_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_linemeter", members); - - be_getglobal(vm, "lv_linemeter"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_linemeter); - be_setglobal(vm, "lv_linemeter"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_linemeter (scope: global, name: lv_linemeter, super: be_class_lv_obj) { - .p, var - init, func(lvbe_linemeter_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_list_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_list_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_list", members); - - be_getglobal(vm, "lv_list"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_list); - be_setglobal(vm, "lv_list"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_list (scope: global, name: lv_list, super: be_class_lv_obj) { - .p, var - init, func(lvbe_list_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_msgbox_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_msgbox_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_msgbox", members); - - be_getglobal(vm, "lv_msgbox"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_msgbox); - be_setglobal(vm, "lv_msgbox"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_msgbox (scope: global, name: lv_msgbox, super: be_class_lv_obj) { - .p, var - init, func(lvbe_msgbox_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_objmask_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_objmask_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_objmask", members); - - be_getglobal(vm, "lv_objmask"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_objmask); - be_setglobal(vm, "lv_objmask"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_objmask (scope: global, name: lv_objmask, super: be_class_lv_obj) { - .p, var - init, func(lvbe_objmask_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_page_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_page_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_page", members); - - be_getglobal(vm, "lv_page"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_page); - be_setglobal(vm, "lv_page"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_page (scope: global, name: lv_page, super: be_class_lv_obj) { - .p, var - init, func(lvbe_page_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_roller_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_roller_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_roller", members); - - be_getglobal(vm, "lv_roller"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_roller); be_setglobal(vm, "lv_roller"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_roller (scope: global, name: lv_roller, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_roller_class) init, func(lvbe_roller_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -2108,34 +1174,15 @@ class be_class_lv_roller (scope: global, name: lv_roller, super: be_class_lv_obj @const_object_info_end */ void be_load_lv_slider_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_slider_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_slider", members); - - be_getglobal(vm, "lv_slider"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_slider); be_setglobal(vm, "lv_slider"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_slider (scope: global, name: lv_slider, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_slider_class) init, func(lvbe_slider_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -2143,107 +1190,16 @@ class be_class_lv_slider (scope: global, name: lv_slider, super: be_class_lv_obj } @const_object_info_end */ -void be_load_lv_spinbox_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_spinbox_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_spinbox", members); - - be_getglobal(vm, "lv_spinbox"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_spinbox); - be_setglobal(vm, "lv_spinbox"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_spinbox (scope: global, name: lv_spinbox, super: be_class_lv_obj) { - .p, var - init, func(lvbe_spinbox_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_spinner_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_spinner_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_spinner", members); - - be_getglobal(vm, "lv_spinner"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_spinner); - be_setglobal(vm, "lv_spinner"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_spinner (scope: global, name: lv_spinner, super: be_class_lv_obj) { - .p, var - init, func(lvbe_spinner_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_switch_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_switch_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_switch", members); - - be_getglobal(vm, "lv_switch"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_switch); be_setglobal(vm, "lv_switch"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_switch (scope: global, name: lv_switch, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_switch_class) init, func(lvbe_switch_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -2252,34 +1208,15 @@ class be_class_lv_switch (scope: global, name: lv_switch, super: be_class_lv_obj @const_object_info_end */ void be_load_lv_table_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_table_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_table", members); - - be_getglobal(vm, "lv_table"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_table); be_setglobal(vm, "lv_table"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_table (scope: global, name: lv_table, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_table_class) init, func(lvbe_table_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -2287,71 +1224,16 @@ class be_class_lv_table (scope: global, name: lv_table, super: be_class_lv_obj) } @const_object_info_end */ -void be_load_lv_tabview_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_tabview_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_tabview", members); - - be_getglobal(vm, "lv_tabview"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_tabview); - be_setglobal(vm, "lv_tabview"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_tabview (scope: global, name: lv_tabview, super: be_class_lv_obj) { - .p, var - init, func(lvbe_tabview_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - void be_load_lv_textarea_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_textarea_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_textarea", members); - - be_getglobal(vm, "lv_textarea"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else be_pushntvclass(vm, &be_class_lv_textarea); be_setglobal(vm, "lv_textarea"); be_pop(vm, 1); -#endif }; /* @const_object_info_begin class be_class_lv_textarea (scope: global, name: lv_textarea, super: be_class_lv_obj) { - .p, var + _p, var + _class, int(&lv_textarea_class) init, func(lvbe_textarea_create) tostring, func(lvx_tostring) member, func(lvx_member) @@ -2359,78 +1241,6 @@ class be_class_lv_textarea (scope: global, name: lv_textarea, super: be_class_lv } @const_object_info_end */ -void be_load_lv_tileview_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_tileview_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_tileview", members); - - be_getglobal(vm, "lv_tileview"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_tileview); - be_setglobal(vm, "lv_tileview"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_tileview (scope: global, name: lv_tileview, super: be_class_lv_obj) { - .p, var - init, func(lvbe_tileview_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - -void be_load_lv_win_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - { "init", lvbe_win_create }, - { "tostring", lvx_tostring }, - { "member", lvx_member }, - - - // { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - - { NULL, NULL } - }; - be_regclass(vm, "lv_win", members); - - be_getglobal(vm, "lv_win"); - be_getglobal(vm, "lv_obj"); - be_setsuper(vm, -2); - be_pop(vm, 2); -#else - be_pushntvclass(vm, &be_class_lv_win); - be_setglobal(vm, "lv_win"); - be_pop(vm, 1); -#endif -}; - -/* @const_object_info_begin -class be_class_lv_win (scope: global, name: lv_win, super: be_class_lv_obj) { - .p, var - init, func(lvbe_win_create) - tostring, func(lvx_tostring) - member, func(lvx_member) - -} -@const_object_info_end */ - #endif // USE_LVGL diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c new file mode 100644 index 000000000..2ea1663c3 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_icon_lib.c @@ -0,0 +1,138 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 10, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[18]) { /* constants */ + /* K0 */ be_nested_string("init", 380752755, 4), + /* K1 */ be_nested_string("set_style_line_color", -629728320, 20), + /* K2 */ be_nested_string("lv_color", 1419148319, 8), + /* K3 */ be_nested_string("lv", 1529997255, 2), + /* K4 */ be_nested_string("COLOR_WHITE", -1758096026, 11), + /* K5 */ be_nested_string("PART_MAIN", -1821475788, 9), + /* K6 */ be_nested_string("STATE_DEFAULT", 712406428, 13), + /* K7 */ be_nested_string("set_style_bg_color", 1689513089, 18), + /* K8 */ be_nested_string("COLOR_BLACK", 264427940, 11), + /* K9 */ be_nested_string("get_height", -723211773, 10), + /* K10 */ be_nested_string("get_style_pad_right", -1144679830, 19), + /* K11 */ be_nested_string("set_height", 1080207399, 10), + /* K12 */ be_const_int(3), + /* K13 */ be_nested_string("set_width", 484671920, 9), + /* K14 */ be_nested_string("set_x", 1849400772, 5), + /* K15 */ be_nested_string("get_width", -1001549996, 9), + /* K16 */ be_nested_string("set_style_pad_right", -980898242, 19), + /* K17 */ be_const_int(1), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[65]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x8C080101, // 0006 GETMET R2 R0 K1 + 0xB8120400, // 0007 GETNGBL R4 K2 + 0xB8160600, // 0008 GETNGBL R5 K3 + 0x88140B04, // 0009 GETMBR R5 R5 K4 + 0x7C100200, // 000A CALL R4 1 + 0xB8160600, // 000B GETNGBL R5 K3 + 0x88140B05, // 000C GETMBR R5 R5 K5 + 0xB81A0600, // 000D GETNGBL R6 K3 + 0x88180D06, // 000E GETMBR R6 R6 K6 + 0x30140A06, // 000F OR R5 R5 R6 + 0x7C080600, // 0010 CALL R2 3 + 0x8C080107, // 0011 GETMET R2 R0 K7 + 0xB8120400, // 0012 GETNGBL R4 K2 + 0xB8160600, // 0013 GETNGBL R5 K3 + 0x88140B08, // 0014 GETMBR R5 R5 K8 + 0x7C100200, // 0015 CALL R4 1 + 0xB8160600, // 0016 GETNGBL R5 K3 + 0x88140B05, // 0017 GETMBR R5 R5 K5 + 0xB81A0600, // 0018 GETNGBL R6 K3 + 0x88180D06, // 0019 GETMBR R6 R6 K6 + 0x30140A06, // 001A OR R5 R5 R6 + 0x7C080600, // 001B CALL R2 3 + 0x4C080000, // 001C LDNIL R2 + 0x20080202, // 001D NE R2 R1 R2 + 0x780A0020, // 001E JMPF R2 #0040 + 0x8C080309, // 001F GETMET R2 R1 K9 + 0x7C080200, // 0020 CALL R2 1 + 0x8C0C030A, // 0021 GETMET R3 R1 K10 + 0xB8160600, // 0022 GETNGBL R5 K3 + 0x88140B05, // 0023 GETMBR R5 R5 K5 + 0xB81A0600, // 0024 GETNGBL R6 K3 + 0x88180D06, // 0025 GETMBR R6 R6 K6 + 0x30140A06, // 0026 OR R5 R5 R6 + 0x7C0C0400, // 0027 CALL R3 2 + 0x8C10010B, // 0028 GETMET R4 R0 K11 + 0x5C180400, // 0029 MOVE R6 R2 + 0x7C100400, // 002A CALL R4 2 + 0x54120003, // 002B LDINT R4 4 + 0x08100404, // 002C MUL R4 R2 R4 + 0x0C10090C, // 002D DIV R4 R4 K12 + 0x8C14010D, // 002E GETMET R5 R0 K13 + 0x5C1C0800, // 002F MOVE R7 R4 + 0x7C140400, // 0030 CALL R5 2 + 0x8C14010E, // 0031 GETMET R5 R0 K14 + 0x8C1C030F, // 0032 GETMET R7 R1 K15 + 0x7C1C0200, // 0033 CALL R7 1 + 0x041C0E04, // 0034 SUB R7 R7 R4 + 0x041C0E03, // 0035 SUB R7 R7 R3 + 0x7C140400, // 0036 CALL R5 2 + 0x8C140310, // 0037 GETMET R5 R1 K16 + 0x001C0604, // 0038 ADD R7 R3 R4 + 0x001C0F11, // 0039 ADD R7 R7 K17 + 0xB8220600, // 003A GETNGBL R8 K3 + 0x88201105, // 003B GETMBR R8 R8 K5 + 0xB8260600, // 003C GETNGBL R9 K3 + 0x88241306, // 003D GETMBR R9 R9 K6 + 0x30201009, // 003E OR R8 R8 R9 + 0x7C140600, // 003F CALL R5 3 + 0x80000000, // 0040 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_wifi_arcs_icon +********************************************************************/ +extern const bclass be_class_lv_wifi_arcs; +be_local_class(lv_wifi_arcs_icon, + 0, + &be_class_lv_wifi_arcs, + be_nested_map(1, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + })), + (be_nested_const_str("lv_wifi_arcs_icon", 1507982909, 17)) +); +/*******************************************************************/ + +void be_load_lv_wifi_arcs_icon_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_wifi_arcs_icon); + be_setglobal(vm, "lv_wifi_arcs_icon"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c new file mode 100644 index 000000000..91c207196 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_arcs_lib.c @@ -0,0 +1,167 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: every_second +********************************************************************/ +be_local_closure(every_second, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + /* K1 */ be_nested_string("wifi", 120087624, 4), + /* K2 */ be_nested_string("find", -1108310694, 4), + /* K3 */ be_nested_string("quality", -1697296346, 7), + /* K4 */ be_nested_string("ip", 1261996636, 2), + /* K5 */ be_nested_string("set_percentage", -1342944572, 14), + /* K6 */ be_const_int(0), + }), + (be_nested_const_str("every_second", 2075451465, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[23]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x8C080302, // 0003 GETMET R2 R1 K2 + 0x58100003, // 0004 LDCONST R4 K3 + 0x7C080400, // 0005 CALL R2 2 + 0x8C0C0302, // 0006 GETMET R3 R1 K2 + 0x58140004, // 0007 LDCONST R5 K4 + 0x7C0C0400, // 0008 CALL R3 2 + 0x4C100000, // 0009 LDNIL R4 + 0x1C100604, // 000A EQ R4 R3 R4 + 0x78120003, // 000B JMPF R4 #0010 + 0x8C100105, // 000C GETMET R4 R0 K5 + 0x58180006, // 000D LDCONST R6 K6 + 0x7C100400, // 000E CALL R4 2 + 0x70020005, // 000F JMP #0016 + 0x4C100000, // 0010 LDNIL R4 + 0x20100404, // 0011 NE R4 R2 R4 + 0x78120002, // 0012 JMPF R4 #0016 + 0x8C100105, // 0013 GETMET R4 R0 K5 + 0x5C180400, // 0014 MOVE R6 R2 + 0x7C100400, // 0015 CALL R4 2 + 0x80000000, // 0016 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("init", 380752755, 4), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("add_driver", 1654458371, 10), + /* K3 */ be_nested_string("set_percentage", -1342944572, 14), + /* K4 */ be_const_int(0), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[14]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0xB80A0200, // 0006 GETNGBL R2 K1 + 0x8C080502, // 0007 GETMET R2 R2 K2 + 0x5C100000, // 0008 MOVE R4 R0 + 0x7C080400, // 0009 CALL R2 2 + 0x8C080103, // 000A GETMET R2 R0 K3 + 0x58100004, // 000B LDCONST R4 K4 + 0x7C080400, // 000C CALL R2 2 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: del +********************************************************************/ +be_local_closure(del, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("del", -816214454, 3), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("remove_driver", 1030243768, 13), + }), + (be_nested_const_str("del", -816214454, 3)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[10]) { /* code */ + 0x60040003, // 0000 GETGBL R1 G3 + 0x5C080000, // 0001 MOVE R2 R0 + 0x7C040200, // 0002 CALL R1 1 + 0x8C040300, // 0003 GETMET R1 R1 K0 + 0x7C040200, // 0004 CALL R1 1 + 0xB8060200, // 0005 GETNGBL R1 K1 + 0x8C040302, // 0006 GETMET R1 R1 K2 + 0x5C0C0000, // 0007 MOVE R3 R0 + 0x7C040400, // 0008 CALL R1 2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_wifi_arcs +********************************************************************/ +extern const bclass be_class_lv_signal_arcs; +be_local_class(lv_wifi_arcs, + 0, + &be_class_lv_signal_arcs, + be_nested_map(3, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("every_second", 2075451465, 12, 1), be_const_closure(every_second_closure) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("del", -816214454, 3, -1), be_const_closure(del_closure) }, + })), + (be_nested_const_str("lv_wifi_arcs", 2082091963, 12)) +); +/*******************************************************************/ + +void be_load_lv_wifi_arcs_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_wifi_arcs); + be_setglobal(vm, "lv_wifi_arcs"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c new file mode 100644 index 000000000..e9738f746 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_icon_lib.c @@ -0,0 +1,134 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 9, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[17]) { /* constants */ + /* K0 */ be_nested_string("init", 380752755, 4), + /* K1 */ be_nested_string("set_style_line_color", -629728320, 20), + /* K2 */ be_nested_string("lv_color", 1419148319, 8), + /* K3 */ be_nested_string("lv", 1529997255, 2), + /* K4 */ be_nested_string("COLOR_WHITE", -1758096026, 11), + /* K5 */ be_nested_string("PART_MAIN", -1821475788, 9), + /* K6 */ be_nested_string("STATE_DEFAULT", 712406428, 13), + /* K7 */ be_nested_string("set_style_bg_color", 1689513089, 18), + /* K8 */ be_nested_string("COLOR_BLACK", 264427940, 11), + /* K9 */ be_nested_string("get_height", -723211773, 10), + /* K10 */ be_nested_string("get_style_pad_right", -1144679830, 19), + /* K11 */ be_nested_string("set_height", 1080207399, 10), + /* K12 */ be_nested_string("set_width", 484671920, 9), + /* K13 */ be_nested_string("set_x", 1849400772, 5), + /* K14 */ be_nested_string("get_width", -1001549996, 9), + /* K15 */ be_nested_string("set_style_pad_right", -980898242, 19), + /* K16 */ be_const_int(1), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[62]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x8C080101, // 0006 GETMET R2 R0 K1 + 0xB8120400, // 0007 GETNGBL R4 K2 + 0xB8160600, // 0008 GETNGBL R5 K3 + 0x88140B04, // 0009 GETMBR R5 R5 K4 + 0x7C100200, // 000A CALL R4 1 + 0xB8160600, // 000B GETNGBL R5 K3 + 0x88140B05, // 000C GETMBR R5 R5 K5 + 0xB81A0600, // 000D GETNGBL R6 K3 + 0x88180D06, // 000E GETMBR R6 R6 K6 + 0x30140A06, // 000F OR R5 R5 R6 + 0x7C080600, // 0010 CALL R2 3 + 0x8C080107, // 0011 GETMET R2 R0 K7 + 0xB8120400, // 0012 GETNGBL R4 K2 + 0xB8160600, // 0013 GETNGBL R5 K3 + 0x88140B08, // 0014 GETMBR R5 R5 K8 + 0x7C100200, // 0015 CALL R4 1 + 0xB8160600, // 0016 GETNGBL R5 K3 + 0x88140B05, // 0017 GETMBR R5 R5 K5 + 0xB81A0600, // 0018 GETNGBL R6 K3 + 0x88180D06, // 0019 GETMBR R6 R6 K6 + 0x30140A06, // 001A OR R5 R5 R6 + 0x7C080600, // 001B CALL R2 3 + 0x4C080000, // 001C LDNIL R2 + 0x20080202, // 001D NE R2 R1 R2 + 0x780A001D, // 001E JMPF R2 #003D + 0x8C080309, // 001F GETMET R2 R1 K9 + 0x7C080200, // 0020 CALL R2 1 + 0x8C0C030A, // 0021 GETMET R3 R1 K10 + 0xB8160600, // 0022 GETNGBL R5 K3 + 0x88140B05, // 0023 GETMBR R5 R5 K5 + 0xB81A0600, // 0024 GETNGBL R6 K3 + 0x88180D06, // 0025 GETMBR R6 R6 K6 + 0x30140A06, // 0026 OR R5 R5 R6 + 0x7C0C0400, // 0027 CALL R3 2 + 0x8C10010B, // 0028 GETMET R4 R0 K11 + 0x5C180400, // 0029 MOVE R6 R2 + 0x7C100400, // 002A CALL R4 2 + 0x8C10010C, // 002B GETMET R4 R0 K12 + 0x5C180400, // 002C MOVE R6 R2 + 0x7C100400, // 002D CALL R4 2 + 0x8C10010D, // 002E GETMET R4 R0 K13 + 0x8C18030E, // 002F GETMET R6 R1 K14 + 0x7C180200, // 0030 CALL R6 1 + 0x04180C02, // 0031 SUB R6 R6 R2 + 0x04180C03, // 0032 SUB R6 R6 R3 + 0x7C100400, // 0033 CALL R4 2 + 0x8C10030F, // 0034 GETMET R4 R1 K15 + 0x00180602, // 0035 ADD R6 R3 R2 + 0x00180D10, // 0036 ADD R6 R6 K16 + 0xB81E0600, // 0037 GETNGBL R7 K3 + 0x881C0F05, // 0038 GETMBR R7 R7 K5 + 0xB8220600, // 0039 GETNGBL R8 K3 + 0x88201106, // 003A GETMBR R8 R8 K6 + 0x301C0E08, // 003B OR R7 R7 R8 + 0x7C100600, // 003C CALL R4 3 + 0x80000000, // 003D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_wifi_bars_icon +********************************************************************/ +extern const bclass be_class_lv_wifi_bars; +be_local_class(lv_wifi_bars_icon, + 0, + &be_class_lv_wifi_bars, + be_nested_map(1, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + })), + (be_nested_const_str("lv_wifi_bars_icon", -1489151756, 17)) +); +/*******************************************************************/ + +void be_load_lv_wifi_bars_icon_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_wifi_bars_icon); + be_setglobal(vm, "lv_wifi_bars_icon"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c new file mode 100644 index 000000000..15abf0a57 --- /dev/null +++ b/lib/libesp32/Berry/default/be_lvgl_wifi_bars_lib.c @@ -0,0 +1,167 @@ +/******************************************************************** + * Tasmota LVGL lv_signal_bars widget + *******************************************************************/ +#include "be_constobj.h" + +#ifdef USE_LVGL + +#include "lvgl.h" + +/******************************************************************** +** Solidified function: every_second +********************************************************************/ +be_local_closure(every_second, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + /* K1 */ be_nested_string("wifi", 120087624, 4), + /* K2 */ be_nested_string("find", -1108310694, 4), + /* K3 */ be_nested_string("quality", -1697296346, 7), + /* K4 */ be_nested_string("ip", 1261996636, 2), + /* K5 */ be_nested_string("set_percentage", -1342944572, 14), + /* K6 */ be_const_int(0), + }), + (be_nested_const_str("every_second", 2075451465, 12)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[23]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0x8C080302, // 0003 GETMET R2 R1 K2 + 0x58100003, // 0004 LDCONST R4 K3 + 0x7C080400, // 0005 CALL R2 2 + 0x8C0C0302, // 0006 GETMET R3 R1 K2 + 0x58140004, // 0007 LDCONST R5 K4 + 0x7C0C0400, // 0008 CALL R3 2 + 0x4C100000, // 0009 LDNIL R4 + 0x1C100604, // 000A EQ R4 R3 R4 + 0x78120003, // 000B JMPF R4 #0010 + 0x8C100105, // 000C GETMET R4 R0 K5 + 0x58180006, // 000D LDCONST R6 K6 + 0x7C100400, // 000E CALL R4 2 + 0x70020005, // 000F JMP #0016 + 0x4C100000, // 0010 LDNIL R4 + 0x20100404, // 0011 NE R4 R2 R4 + 0x78120002, // 0012 JMPF R4 #0016 + 0x8C100105, // 0013 GETMET R4 R0 K5 + 0x5C180400, // 0014 MOVE R6 R2 + 0x7C100400, // 0015 CALL R4 2 + 0x80000000, // 0016 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("init", 380752755, 4), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("add_driver", 1654458371, 10), + /* K3 */ be_nested_string("set_percentage", -1342944572, 14), + /* K4 */ be_const_int(0), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[14]) { /* code */ + 0x60080003, // 0000 GETGBL R2 G3 + 0x5C0C0000, // 0001 MOVE R3 R0 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080500, // 0003 GETMET R2 R2 K0 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0xB80A0200, // 0006 GETNGBL R2 K1 + 0x8C080502, // 0007 GETMET R2 R2 K2 + 0x5C100000, // 0008 MOVE R4 R0 + 0x7C080400, // 0009 CALL R2 2 + 0x8C080103, // 000A GETMET R2 R0 K3 + 0x58100004, // 000B LDCONST R4 K4 + 0x7C080400, // 000C CALL R2 2 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: del +********************************************************************/ +be_local_closure(del, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("del", -816214454, 3), + /* K1 */ be_nested_string("tasmota", 424643812, 7), + /* K2 */ be_nested_string("remove_driver", 1030243768, 13), + }), + (be_nested_const_str("del", -816214454, 3)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[10]) { /* code */ + 0x60040003, // 0000 GETGBL R1 G3 + 0x5C080000, // 0001 MOVE R2 R0 + 0x7C040200, // 0002 CALL R1 1 + 0x8C040300, // 0003 GETMET R1 R1 K0 + 0x7C040200, // 0004 CALL R1 1 + 0xB8060200, // 0005 GETNGBL R1 K1 + 0x8C040302, // 0006 GETMET R1 R1 K2 + 0x5C0C0000, // 0007 MOVE R3 R0 + 0x7C040400, // 0008 CALL R1 2 + 0x80000000, // 0009 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: lv_wifi_bars +********************************************************************/ +extern const bclass be_class_lv_signal_bars; +be_local_class(lv_wifi_bars, + 0, + &be_class_lv_signal_bars, + be_nested_map(3, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("every_second", 2075451465, 12, 1), be_const_closure(every_second_closure) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("del", -816214454, 3, -1), be_const_closure(del_closure) }, + })), + (be_nested_const_str("lv_wifi_bars", 2109539196, 12)) +); +/*******************************************************************/ + +void be_load_lv_wifi_bars_class(bvm *vm) { + be_pushntvclass(vm, &be_class_lv_wifi_bars); + be_setglobal(vm, "lv_wifi_bars"); + be_pop(vm, 1); +} + +#endif // USE_LVGL \ No newline at end of file diff --git a/lib/libesp32/Berry/default/be_md5_lib.c b/lib/libesp32/Berry/default/be_md5_lib.c index 3f55dd6a1..2c8dfd77b 100644 --- a/lib/libesp32/Berry/default/be_md5_lib.c +++ b/lib/libesp32/Berry/default/be_md5_lib.c @@ -11,27 +11,12 @@ extern int m_md5_init(bvm *vm); extern int m_md5_update(bvm *vm); extern int m_md5_finish(bvm *vm); -#if BE_USE_PRECOMPILED_OBJECT #include "../generate/be_fixed_be_class_md5.h" -#endif void be_load_md5_lib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { ".p", NULL }, - - { "init", m_md5_init }, - { "update", m_md5_update }, - { "finish", m_md5_finish }, - - { NULL, NULL } - }; - be_regclass(vm, "MD5", members); -#else be_pushntvclass(vm, &be_class_md5); be_setglobal(vm, "MD5"); be_pop(vm, 1); -#endif } /* @const_object_info_begin diff --git a/lib/libesp32/Berry/default/be_modtab.c b/lib/libesp32/Berry/default/be_modtab.c index ab8017ed1..aa795dbff 100644 --- a/lib/libesp32/Berry/default/be_modtab.c +++ b/lib/libesp32/Berry/default/be_modtab.c @@ -20,13 +20,17 @@ be_extern_native_module(sys); be_extern_native_module(debug); be_extern_native_module(gc); be_extern_native_module(solidify); +be_extern_native_module(introspect); +be_extern_native_module(strict); /* Tasmota specific */ +be_extern_native_module(persist); be_extern_native_module(light); be_extern_native_module(gpio); be_extern_native_module(energy); be_extern_native_module(webserver); be_extern_native_module(flash); +be_extern_native_module(path); #ifdef USE_LVGL be_extern_native_module(lvgl); #endif // USE_LVGL @@ -67,9 +71,17 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = { #endif #if BE_USE_SOLIDIFY_MODULE &be_native_module(solidify), +#endif +#if BE_USE_INTROSPECT_MODULE + &be_native_module(introspect), +#endif +#if BE_USE_STRICT_MODULE + &be_native_module(strict), #endif /* user-defined modules register start */ + &be_native_module(path), + &be_native_module(persist), &be_native_module(gpio), #ifdef USE_LIGHT &be_native_module(light), @@ -94,14 +106,37 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = { #ifdef ESP32 extern void be_load_tasmota_ntvlib(bvm *vm); extern void be_load_wirelib(bvm *vm); -extern void be_load_driverlib(bvm *vm); +extern void be_load_onewirelib(bvm *vm); +extern void be_load_serial_lib(bvm *vm); +extern void be_load_Driver_class(bvm *vm); +extern void be_load_Timer_class(bvm *vm); extern void be_load_driver_i2c_lib(bvm *vm); +extern void be_load_AXP192_class(bvm *vm); extern void be_load_md5_lib(bvm *vm); +extern void be_load_webclient_lib(bvm *vm); +extern void be_load_crypto_lib(bvm *vm); + +extern void be_load_ctypes_lib(bvm *vm); +extern void be_load_ctypes_energy_definitions_lib(bvm *vm); + +#ifdef USE_I2S_AUDIO_BERRY +extern void be_load_driver_audio_lib(bvm *vm); +#endif #ifdef USE_LVGL extern void be_load_lvgl_color_lib(bvm *vm); extern void be_load_lvgl_font_lib(bvm *vm); extern void be_load_lv_all_lib(bvm *vm); +extern void be_load_ctypes_lvgl_definitions_lib(bvm *vm); +extern void be_load_LVGL_glob_class(bvm *vm); +// custom widgets +extern void be_load_lv_signal_bars_class(bvm *vm); +extern void be_load_lv_wifi_bars_class(bvm *vm); +extern void be_load_lv_wifi_bars_icon_class(bvm *vm); +extern void be_load_lv_signal_arcs_class(bvm *vm); +extern void be_load_lv_wifi_arcs_class(bvm *vm); +extern void be_load_lv_wifi_arcs_icon_class(bvm *vm); +extern void be_load_lv_clock_icon_class(bvm *vm); #endif// USE_LVGL /* this code loads the native class definitions */ @@ -113,19 +148,48 @@ BERRY_API void be_load_custom_libs(bvm *vm) #if !BE_USE_PRECOMPILED_OBJECT /* be_load_xxxlib(vm); */ #endif + be_load_Timer_class(vm); be_load_tasmota_ntvlib(vm); - be_load_driverlib(vm); + be_load_Driver_class(vm); be_load_md5_lib(vm); + be_load_serial_lib(vm); + be_load_ctypes_lib(vm); +#ifdef USE_ALEXA_AVS + be_load_crypto_lib(vm); +#endif #ifdef USE_I2C be_load_wirelib(vm); be_load_driver_i2c_lib(vm); + be_load_AXP192_class(vm); #endif // USE_I2C +#ifdef USE_ENERGY_SENSOR + be_load_ctypes_energy_definitions_lib(vm); +#endif // USE_ENERGY_SENSOR +#ifdef USE_WEBCLIENT + be_load_webclient_lib(vm); +#endif // USE_WEBCLIENT +#if defined(USE_ONEWIRE) || defined(USE_DS18x20) + be_load_onewirelib(vm); +#endif +#ifdef USE_I2S_AUDIO_BERRY + be_load_driver_audio_lib(vm); +#endif #ifdef USE_LVGL // LVGL be_load_lvgl_color_lib(vm); be_load_lvgl_font_lib(vm); be_load_lv_all_lib(vm); + be_load_ctypes_lvgl_definitions_lib(vm); + be_load_LVGL_glob_class(vm); + // custom widgets + be_load_lv_signal_bars_class(vm); + be_load_lv_wifi_bars_class(vm); + be_load_lv_wifi_bars_icon_class(vm); + be_load_lv_signal_arcs_class(vm); + be_load_lv_wifi_arcs_class(vm); + be_load_lv_wifi_arcs_icon_class(vm); + be_load_lv_clock_icon_class(vm); #endif // USE_LVGL } #endif diff --git a/lib/libesp32/Berry/default/be_onewire_lib.c b/lib/libesp32/Berry/default/be_onewire_lib.c new file mode 100644 index 000000000..838e6ccf9 --- /dev/null +++ b/lib/libesp32/Berry/default/be_onewire_lib.c @@ -0,0 +1,57 @@ +/******************************************************************** + * Tasmota lib + * + * To use: `import wire` + * + * 2 wire communication - I2C + *******************************************************************/ +#include "be_constobj.h" + +#if defined(USE_ONEWIRE) || defined(USE_DS18x20) + +extern int b_onewire_init(bvm *vm); +extern int b_onewire_deinit(bvm *vm); + +extern int b_onewire_reset(bvm *vm); +extern int b_onewire_select(bvm *vm); +extern int b_onewire_skip(bvm *vm); +extern int b_onewire_depower(bvm *vm); + +extern int b_onewire_write(bvm *vm); +extern int b_onewire_read(bvm *vm); + +extern int b_onewire_reset_search(bvm *vm); +extern int b_onewire_target_search(bvm *vm); +extern int b_onewire_search(bvm *vm); + +#include "../generate/be_fixed_be_class_tasmota_onewire.h" + +void be_load_onewirelib(bvm *vm) { + be_pushntvclass(vm, &be_class_tasmota_onewire); + be_setglobal(vm, "OneWire"); + be_pop(vm, 1); +} + +/* @const_object_info_begin + +class be_class_tasmota_onewire (scope: global, name: OneWire) { + .p, var + + init, func(b_onewire_init) + deinit, func(b_onewire_deinit) + + reset, func(b_onewire_reset) + select, func(b_onewire_select) + skip, func(b_onewire_skip) + depower, func(b_onewire_depower) + + write, func(b_onewire_write) + read, func(b_onewire_read) + + reset_search, func(b_onewire_reset_search) + target_search, func(b_onewire_target_search) + search, func(b_onewire_search) +} +@const_object_info_end */ + +#endif // defined(USE_ONEWIRE) || defined(USE_DS18x20) diff --git a/lib/libesp32/Berry/default/be_path_tasmota_lib.c b/lib/libesp32/Berry/default/be_path_tasmota_lib.c new file mode 100644 index 000000000..c4208203f --- /dev/null +++ b/lib/libesp32/Berry/default/be_path_tasmota_lib.c @@ -0,0 +1,52 @@ +/******************************************************************** +** Copyright (c) 2018-2020 Guan Wenliang +** This file is part of the Berry default interpreter. +** skiars@qq.com, https://github.com/Skiars/berry +** See Copyright Notice in the LICENSE file or at +** https://github.com/Skiars/berry/blob/master/LICENSE +********************************************************************/ + +/******************************************************************** + * Berry module `path` + * + * Minimal version of `import path` + * + *******************************************************************/ +#include "be_object.h" +#include "be_strlib.h" +#include "be_mem.h" +#include "be_sys.h" +#include + +static int m_path_exists(bvm *vm) +{ + const char *path = NULL; + if (be_top(vm) >= 1 && be_isstring(vm, 1)) { + path = be_tostring(vm, 1); + } + be_pushbool(vm, be_isexist(path)); + be_return(vm); +} +extern time_t be_last_modified(void *hfile); + +static int m_path_last_modified(bvm *vm) +{ + if (be_top(vm) >= 1 && be_isstring(vm, 1)) { + const char *path = be_tostring(vm, 1); + void * f = be_fopen(path, "r"); + if (f) { + be_pushint(vm, be_last_modified(f)); + be_fclose(f); + be_return(vm); + } + } + be_return_nil(vm); +} + +/* @const_object_info_begin +module path (scope: global, file: tasmota_path) { + exists, func(m_path_exists) + last_modified, func(m_path_last_modified) +} +@const_object_info_end */ +#include "../generate/be_fixed_tasmota_path.h" diff --git a/lib/libesp32/Berry/default/be_persist_lib.c b/lib/libesp32/Berry/default/be_persist_lib.c new file mode 100644 index 000000000..c14f09cea --- /dev/null +++ b/lib/libesp32/Berry/default/be_persist_lib.c @@ -0,0 +1,482 @@ +/******************************************************************** + * Tasmota lib + * + * To use: `import power` + * + * read power values + *******************************************************************/ +#include "be_constobj.h" + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(tostring, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("format", -1180859054, 6), + /* K2 */ be_nested_string("", 1553432777, 18), + /* K3 */ be_nested_string("_p", 1594591802, 2), + }), + (be_nested_const_str("tostring", -1995258651, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[11]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x8C080301, // 0001 GETMET R2 R1 K1 + 0x58100002, // 0002 LDCONST R4 K2 + 0x60140005, // 0003 GETGBL R5 G5 + 0x5C180000, // 0004 MOVE R6 R0 + 0x7C140200, // 0005 CALL R5 1 + 0x60180008, // 0006 GETGBL R6 G8 + 0x881C0103, // 0007 GETMBR R7 R0 K3 + 0x7C180200, // 0008 CALL R6 1 + 0x7C080800, // 0009 CALL R2 4 + 0x80040400, // 000A RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: member +********************************************************************/ +be_local_closure(member, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("find", -1108310694, 4), + }), + (be_nested_const_str("member", 719708611, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x80040400, // 0004 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: setmember +********************************************************************/ +be_local_closure(setmember, /* name */ + be_nested_proto( + 4, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("setmember", 1432909441, 9)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x880C0100, // 0000 GETMBR R3 R0 K0 + 0x980C0202, // 0001 SETIDX R3 R1 R2 + 0x500C0200, // 0002 LDBOOL R3 1 0 + 0x90020203, // 0003 SETMBR R0 K1 R3 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: zero +********************************************************************/ +be_local_closure(zero, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("zero", -1955600541, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x60040013, // 0000 GETGBL R1 G19 + 0x7C040000, // 0001 CALL R1 0 + 0x90020001, // 0002 SETMBR R0 K0 R1 + 0x50040200, // 0003 LDBOOL R1 1 0 + 0x90020201, // 0004 SETMBR R0 K1 R1 + 0x80000000, // 0005 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: save +********************************************************************/ +be_local_closure(save, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("_filename", 1430813195, 9), + /* K2 */ be_nested_string("w", -234078410, 1), + /* K3 */ be_nested_string("write", -1104765092, 5), + /* K4 */ be_nested_string("dump", -631966073, 4), + /* K5 */ be_nested_string("_p", 1594591802, 2), + /* K6 */ be_nested_string("close", 667630371, 5), + /* K7 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("save", -855671224, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[30]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x4C080000, // 0001 LDNIL R2 + 0xA802000D, // 0002 EXBLK 0 #0011 + 0x600C0011, // 0003 GETGBL R3 G17 + 0x88100101, // 0004 GETMBR R4 R0 K1 + 0x58140002, // 0005 LDCONST R5 K2 + 0x7C0C0400, // 0006 CALL R3 2 + 0x5C080600, // 0007 MOVE R2 R3 + 0x8C0C0503, // 0008 GETMET R3 R2 K3 + 0x8C140304, // 0009 GETMET R5 R1 K4 + 0x881C0105, // 000A GETMBR R7 R0 K5 + 0x7C140400, // 000B CALL R5 2 + 0x7C0C0400, // 000C CALL R3 2 + 0x8C0C0506, // 000D GETMET R3 R2 K6 + 0x7C0C0200, // 000E CALL R3 1 + 0xA8040001, // 000F EXBLK 1 1 + 0x70020009, // 0010 JMP #001B + 0xAC0C0002, // 0011 CATCH R3 0 2 + 0x70020006, // 0012 JMP #001A + 0x4C140000, // 0013 LDNIL R5 + 0x20140405, // 0014 NE R5 R2 R5 + 0x78160001, // 0015 JMPF R5 #0018 + 0x8C140506, // 0016 GETMET R5 R2 K6 + 0x7C140200, // 0017 CALL R5 1 + 0xB0040604, // 0018 RAISE 1 R3 R4 + 0x70020000, // 0019 JMP #001B + 0xB0080000, // 001A RAISE 2 R0 R0 + 0x500C0000, // 001B LDBOOL R3 0 0 + 0x90020E03, // 001C SETMBR R0 K7 R3 + 0x80000000, // 001D RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: has +********************************************************************/ +be_local_closure(has, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("has", -306245661, 3), + }), + (be_nested_const_str("has", -306245661, 3)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x80040400, // 0004 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove +********************************************************************/ +be_local_closure(remove, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("remove", -611183107, 6), + /* K2 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("remove", -611183107, 6)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 7]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x8C080501, // 0001 GETMET R2 R2 K1 + 0x5C100200, // 0002 MOVE R4 R1 + 0x7C080400, // 0003 CALL R2 2 + 0x50080200, // 0004 LDBOOL R2 1 0 + 0x90020402, // 0005 SETMBR R0 K2 R2 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: load +********************************************************************/ +be_local_closure(load, /* name */ + be_nested_proto( + 9, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[10]) { /* constants */ + /* K0 */ be_nested_string("json", 916562499, 4), + /* K1 */ be_nested_string("path", -2071507658, 4), + /* K2 */ be_nested_string("exists", 1002329533, 6), + /* K3 */ be_nested_string("_filename", 1430813195, 9), + /* K4 */ be_nested_string("r", -150190315, 1), + /* K5 */ be_nested_string("load", -435725847, 4), + /* K6 */ be_nested_string("read", -824204347, 4), + /* K7 */ be_nested_string("close", 667630371, 5), + /* K8 */ be_nested_string("_p", 1594591802, 2), + /* K9 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("load", -435725847, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[37]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0xA40A0200, // 0001 IMPORT R2 K1 + 0x4C0C0000, // 0002 LDNIL R3 + 0x4C100000, // 0003 LDNIL R4 + 0x8C140502, // 0004 GETMET R5 R2 K2 + 0x881C0103, // 0005 GETMBR R7 R0 K3 + 0x7C140400, // 0006 CALL R5 2 + 0x7816001B, // 0007 JMPF R5 #0024 + 0xA802000D, // 0008 EXBLK 0 #0017 + 0x60140011, // 0009 GETGBL R5 G17 + 0x88180103, // 000A GETMBR R6 R0 K3 + 0x581C0004, // 000B LDCONST R7 K4 + 0x7C140400, // 000C CALL R5 2 + 0x5C0C0A00, // 000D MOVE R3 R5 + 0x8C140305, // 000E GETMET R5 R1 K5 + 0x8C1C0706, // 000F GETMET R7 R3 K6 + 0x7C1C0200, // 0010 CALL R7 1 + 0x7C140400, // 0011 CALL R5 2 + 0x5C100A00, // 0012 MOVE R4 R5 + 0x8C140707, // 0013 GETMET R5 R3 K7 + 0x7C140200, // 0014 CALL R5 1 + 0xA8040001, // 0015 EXBLK 1 1 + 0x70020009, // 0016 JMP #0021 + 0xAC140002, // 0017 CATCH R5 0 2 + 0x70020006, // 0018 JMP #0020 + 0x4C1C0000, // 0019 LDNIL R7 + 0x201C0607, // 001A NE R7 R3 R7 + 0x781E0001, // 001B JMPF R7 #001E + 0x8C1C0707, // 001C GETMET R7 R3 K7 + 0x7C1C0200, // 001D CALL R7 1 + 0xB0040A06, // 001E RAISE 1 R5 R6 + 0x70020000, // 001F JMP #0021 + 0xB0080000, // 0020 RAISE 2 R0 R0 + 0x90021004, // 0021 SETMBR R0 K8 R4 + 0x50140000, // 0022 LDBOOL R5 0 0 + 0x90021205, // 0023 SETMBR R0 K9 R5 + 0x80000000, // 0024 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(init, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("_filename", 1430813195, 9), + /* K1 */ be_nested_string("_persist.json", 2008425138, 13), + /* K2 */ be_nested_string("_p", 1594591802, 2), + /* K3 */ be_nested_string("copy", -446502332, 4), + /* K4 */ be_nested_string("load", -435725847, 4), + /* K5 */ be_nested_string("_dirty", 283846766, 6), + }), + (be_nested_const_str("init", 380752755, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[20]) { /* code */ + 0x90020101, // 0000 SETMBR R0 K0 K1 + 0x6008000F, // 0001 GETGBL R2 G15 + 0x5C0C0200, // 0002 MOVE R3 R1 + 0x60100013, // 0003 GETGBL R4 G19 + 0x7C080400, // 0004 CALL R2 2 + 0x780A0003, // 0005 JMPF R2 #000A + 0x8C080303, // 0006 GETMET R2 R1 K3 + 0x7C080200, // 0007 CALL R2 1 + 0x90020402, // 0008 SETMBR R0 K2 R2 + 0x70020002, // 0009 JMP #000D + 0x60080013, // 000A GETGBL R2 G19 + 0x7C080000, // 000B CALL R2 0 + 0x90020402, // 000C SETMBR R0 K2 R2 + 0x8C080104, // 000D GETMET R2 R0 K4 + 0x88100102, // 000E GETMBR R4 R0 K2 + 0x88140100, // 000F GETMBR R5 R0 K0 + 0x7C080600, // 0010 CALL R2 3 + 0x50080000, // 0011 LDBOOL R2 0 0 + 0x90020A02, // 0012 SETMBR R0 K5 R2 + 0x80000000, // 0013 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: find +********************************************************************/ +be_local_closure(find, /* name */ + be_nested_proto( + 7, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_p", 1594591802, 2), + /* K1 */ be_nested_string("find", -1108310694, 4), + }), + (be_nested_const_str("find", -1108310694, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 6]) { /* code */ + 0x880C0100, // 0000 GETMBR R3 R0 K0 + 0x8C0C0701, // 0001 GETMET R3 R3 K1 + 0x5C140200, // 0002 MOVE R5 R1 + 0x5C180400, // 0003 MOVE R6 R2 + 0x7C0C0600, // 0004 CALL R3 3 + 0x80040600, // 0005 RET 1 R3 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified class: Persist +********************************************************************/ +be_local_class(Persist, + 3, + NULL, + be_nested_map(13, + ( (struct bmapnode*) &(const bmapnode[]) { + { be_nested_key("tostring", -1995258651, 8, -1), be_const_closure(tostring_closure) }, + { be_nested_key("member", 719708611, 6, 3), be_const_closure(member_closure) }, + { be_nested_key("setmember", 1432909441, 9, 5), be_const_closure(setmember_closure) }, + { be_nested_key("zero", -1955600541, 4, 9), be_const_closure(zero_closure) }, + { be_nested_key("save", -855671224, 4, -1), be_const_closure(save_closure) }, + { be_nested_key("has", -306245661, 3, -1), be_const_closure(has_closure) }, + { be_nested_key("_filename", 1430813195, 9, 10), be_const_var(0) }, + { be_nested_key("remove", -611183107, 6, -1), be_const_closure(remove_closure) }, + { be_nested_key("_dirty", 283846766, 6, -1), be_const_var(2) }, + { be_nested_key("load", -435725847, 4, -1), be_const_closure(load_closure) }, + { be_nested_key("init", 380752755, 4, -1), be_const_closure(init_closure) }, + { be_nested_key("_p", 1594591802, 2, 1), be_const_var(1) }, + { be_nested_key("find", -1108310694, 4, -1), be_const_closure(find_closure) }, + })), + (be_nested_const_str("Persist", 1456346147, 7)) +); + +/******************************************************************** +** Solidified function: _anonymous_ +********************************************************************/ +be_local_closure(_anonymous_, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_const_class(be_class_Persist), + }), + (be_nested_const_str("_anonymous_", 1957281476, 11)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[ 5]) { /* code */ + 0x58040000, // 0000 LDCONST R1 K0 + 0xB4000000, // 0001 CLASS K0 + 0x5C080200, // 0002 MOVE R2 R1 + 0x7C080000, // 0003 CALL R2 0 + 0x80040400, // 0004 RET 1 R2 + }) + ) +); +/*******************************************************************/ + +/* @const_object_info_begin +module persist (scope: global) { + init, closure(_anonymous__closure) +} +@const_object_info_end */ +#include "../generate/be_fixed_persist.h" diff --git a/lib/libesp32/Berry/default/be_port.cpp b/lib/libesp32/Berry/default/be_port.cpp index b7befafed..88815a000 100644 --- a/lib/libesp32/Berry/default/be_port.cpp +++ b/lib/libesp32/Berry/default/be_port.cpp @@ -16,8 +16,10 @@ #include "static_block.hpp" // Local pointer for file managment -#include -extern FS *ufsp; +#ifdef USE_UFILESYS + #include + extern FS *ufsp; +#endif // USE_UFILESYS /* this file contains configuration for the file system. */ @@ -58,12 +60,10 @@ extern "C" { #ifndef BERRY_LOGSZ #define BERRY_LOGSZ 700 #endif -extern "C" { - extern void *berry_malloc(size_t size); -} + static char * log_berry_buffer = nullptr; static_block { - log_berry_buffer = (char*) berry_malloc(BERRY_LOGSZ); + log_berry_buffer = (char*) malloc(BERRY_LOGSZ); if (log_berry_buffer) log_berry_buffer[0] = 0; } extern void berry_log(const char * berry_buf); @@ -105,6 +105,7 @@ BERRY_API char* be_readstring(char *buffer, size_t size) void* be_fopen(const char *filename, const char *modes) { +#ifdef USE_UFILESYS if (ufsp != nullptr && filename != nullptr && modes != nullptr) { char fname2[strlen(filename) + 2]; if (filename[0] == '/') { @@ -121,12 +122,14 @@ void* be_fopen(const char *filename, const char *modes) return f_ptr; } } +#endif // USE_UFILESYS return nullptr; // return fopen(filename, modes); } int be_fclose(void *hfile) { +#ifdef USE_UFILESYS // Serial.printf("be_fclose\n"); if (ufsp != nullptr && hfile != nullptr) { File * f_ptr = (File*) hfile; @@ -134,23 +137,27 @@ int be_fclose(void *hfile) delete f_ptr; return 0; } +#endif // USE_UFILESYS return -1; // return fclose(hfile); } size_t be_fwrite(void *hfile, const void *buffer, size_t length) { +#ifdef USE_UFILESYS // Serial.printf("be_fwrite %d\n", length); if (ufsp != nullptr && hfile != nullptr && buffer != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->write((const uint8_t*) buffer, length); } +#endif // USE_UFILESYS return 0; // return fwrite(buffer, 1, length, hfile); } size_t be_fread(void *hfile, void *buffer, size_t length) { +#ifdef USE_UFILESYS // Serial.printf("be_fread %d\n", length); if (ufsp != nullptr && hfile != nullptr && buffer != nullptr) { File * f_ptr = (File*) hfile; @@ -160,12 +167,14 @@ size_t be_fread(void *hfile, void *buffer, size_t length) return ret; } } +#endif // USE_UFILESYS return 0; // return fread(buffer, 1, length, hfile); } char* be_fgets(void *hfile, void *buffer, int size) { +#ifdef USE_UFILESYS // Serial.printf("be_fgets %d\n", size); uint8_t * buf = (uint8_t*) buffer; if (ufsp != nullptr && hfile != nullptr && buffer != nullptr && size > 0) { @@ -176,12 +185,14 @@ char* be_fgets(void *hfile, void *buffer, int size) return (char*) buffer; } } +#endif // USE_UFILESYS return nullptr; // return fgets(buffer, size, hfile); } int be_fseek(void *hfile, long offset) { +#ifdef USE_UFILESYS // Serial.printf("be_fseek %d\n", offset); if (ufsp != nullptr && hfile != nullptr) { File * f_ptr = (File*) hfile; @@ -189,34 +200,40 @@ int be_fseek(void *hfile, long offset) return 0; // success } } +#endif // USE_UFILESYS return -1; // return fseek(hfile, offset, SEEK_SET); } long int be_ftell(void *hfile) { +#ifdef USE_UFILESYS // Serial.printf("be_ftell\n"); if (ufsp != nullptr && hfile != nullptr) { File * f_ptr = (File*) hfile; return f_ptr->position(); } +#endif // USE_UFILESYS return 0; // return ftell(hfile); } long int be_fflush(void *hfile) { +#ifdef USE_UFILESYS // Serial.printf("be_fflush\n"); if (ufsp != nullptr && hfile != nullptr) { File * f_ptr = (File*) hfile; f_ptr->flush(); } +#endif // USE_UFILESYS return 0; // return fflush(hfile); } size_t be_fsize(void *hfile) { +#ifdef USE_UFILESYS // Serial.printf("be_fsize\n"); if (ufsp != nullptr && hfile != nullptr) { File * f_ptr = (File*) hfile; @@ -227,10 +244,37 @@ size_t be_fsize(void *hfile) // size = ftell(hfile); // fseek(hfile, offset, SEEK_SET); // return size; +#endif // USE_UFILESYS return 0; } +extern "C" time_t be_last_modified(void *hfile) +{ +#ifdef USE_UFILESYS + if (ufsp != nullptr && hfile != nullptr) { + File * f_ptr = (File*) hfile; + return f_ptr->getLastWrite(); + } +#endif // USE_UFILESYS + return 0; +} +int be_isexist(const char *filename) +{ +#ifdef USE_UFILESYS + if (ufsp != nullptr) { + char fname2[strlen(filename) + 2]; + if (filename[0] == '/') { + strcpy(fname2, filename); // copy unchanged + } else { + fname2[0] = '/'; + strcpy(fname2 + 1, filename); // prepend with '/' + } + return ufsp->exists(fname2); + } +#endif // USE_UFILESYS + return 0; +} #if BE_USE_FILE_SYSTEM #if defined(USE_FATFS) /* FatFs */ diff --git a/lib/libesp32/Berry/default/be_serial_lib.c b/lib/libesp32/Berry/default/be_serial_lib.c new file mode 100644 index 000000000..4f1c4b577 --- /dev/null +++ b/lib/libesp32/Berry/default/be_serial_lib.c @@ -0,0 +1,66 @@ +/******************************************************************** + * Tasmota lib + * + * To use: `import wire` + * + * 2 wire communication - I2C + *******************************************************************/ +#include "be_constobj.h" + +#include "esp32-hal.h" + +extern int b_serial_init(bvm *vm); +extern int b_serial_deinit(bvm *vm); + +extern int b_serial_write(bvm *vm); +extern int b_serial_read(bvm *vm); +extern int b_serial_available(bvm *vm); +extern int b_serial_flush(bvm *vm); + +#include "../generate/be_fixed_be_class_tasmota_serial.h" + +void be_load_serial_lib(bvm *vm) { + be_pushntvclass(vm, &be_class_tasmota_serial); + be_setglobal(vm, "serial"); + be_pop(vm, 1); +} + +/* @const_object_info_begin + +class be_class_tasmota_serial (scope: global, name: serial) { + .p, var + + SERIAL_5N1, int(SERIAL_5N1) + SERIAL_6N1, int(SERIAL_6N1) + SERIAL_7N1, int(SERIAL_7N1) + SERIAL_8N1, int(SERIAL_8N1) + SERIAL_5N2, int(SERIAL_5N2) + SERIAL_6N2, int(SERIAL_6N2) + SERIAL_7N2, int(SERIAL_7N2) + SERIAL_8N2, int(SERIAL_8N2) + SERIAL_5E1, int(SERIAL_5E1) + SERIAL_6E1, int(SERIAL_6E1) + SERIAL_7E1, int(SERIAL_7E1) + SERIAL_8E1, int(SERIAL_8E1) + SERIAL_5E2, int(SERIAL_5E2) + SERIAL_6E2, int(SERIAL_6E2) + SERIAL_7E2, int(SERIAL_7E2) + SERIAL_8E2, int(SERIAL_8E2) + SERIAL_5O1, int(SERIAL_5O1) + SERIAL_6O1, int(SERIAL_6O1) + SERIAL_7O1, int(SERIAL_7O1) + SERIAL_8O1, int(SERIAL_8O1) + SERIAL_5O2, int(SERIAL_5O2) + SERIAL_6O2, int(SERIAL_6O2) + SERIAL_7O2, int(SERIAL_7O2) + SERIAL_8O2, int(SERIAL_8O2) + + init, func(b_serial_init) + deinit, func(b_serial_deinit) + + write, func(b_serial_write) + read, func(b_serial_read) + available, func(b_serial_available) + flush, func(b_serial_flush) +} +@const_object_info_end */ diff --git a/lib/libesp32/Berry/default/be_tasmotalib.c b/lib/libesp32/Berry/default/be_tasmotalib.c index b6e2cc526..6f58aab49 100644 --- a/lib/libesp32/Berry/default/be_tasmotalib.c +++ b/lib/libesp32/Berry/default/be_tasmotalib.c @@ -5,8 +5,13 @@ *******************************************************************/ #include "be_constobj.h" +struct dummy_struct {}; // we need a struct name but don't need any meaningful content, we just take the address +extern struct TasmotaGlobal_t TasmotaGlobal; +extern struct dummy_struct be_tasmota_global_struct; + extern int l_getFreeHeap(bvm *vm); extern int l_publish(bvm *vm); +extern int l_publish_result(bvm *vm); extern int l_cmd(bvm *vm); extern int l_get_cb(bvm *vm); extern int l_getoption(bvm *vm); @@ -14,7 +19,10 @@ extern int l_millis(bvm *vm); extern int l_timereached(bvm *vm); extern int l_rtc(bvm *vm); extern int l_time_dump(bvm *vm); +extern int l_strftime(bvm *vm); extern int l_memory(bvm *vm); +extern int l_wifi(bvm *vm); +extern int l_eth(bvm *vm); extern int l_yield(bvm *vm); extern int l_delay(bvm *vm); extern int l_scaleuint(bvm *vm); @@ -33,2447 +41,1576 @@ extern int l_webSend(bvm *vm); extern int l_webSendDecimal(bvm *vm); extern int l_getlight(bvm *vm); -extern int l_getpower(bvm *vm); extern int l_setlight(bvm *vm); +extern int l_getpower(bvm *vm); extern int l_setpower(bvm *vm); +extern int l_getswitch(bvm *vm); extern int l_i2cenabled(bvm *vm); - /******************************************************************** - // add `chars_in_string(s:string,c:string) -> int`` - // looks for any char in c, and return the position of the first char - // or -1 if not found - // inv is optional and inverses the behavior, i.e. look for chars not in the list - "def chars_in_string(s,c,inv) " - "var inverted = inv ? true : false " - "for i:0..size(s)-1 " - "var found = false " - "for j:0..size(c)-1 " - "if s[i] == c[j] found = true end " - "end " - "if inverted != found return i end " - "end " - "return -1 " - "end " +** Solidified function: init ********************************************************************/ -/******************************************************************** -** Solidified function: chars_in_string -********************************************************************/ - -be_define_local_const_str(chars_in_string_str_name, "chars_in_string", -1146182164, 15); -be_define_local_const_str(chars_in_string_str_source, "string", 398550328, 6); -be_define_local_const_str(chars_in_string_str_2, "stop_iteration", -121173395, 14); - -static const bvalue chars_in_string_ktab[3] = { - { { .i=0 }, BE_INT}, - { { .i=1 }, BE_INT}, - { { .s=be_local_const_str(chars_in_string_str_2) }, BE_STRING}, -}; - -static const uint32_t chars_in_string_code[44] = { - 0x780E0001, // 0000 JMPF R3 #0003 - 0x50100200, // 0001 LDBOOL R4 1 0 - 0x70020000, // 0002 JMP #0004 - 0x50100000, // 0003 LDBOOL R4 0 0 - 0x60140000, // 0004 GETGBL R5 G0 - 0x60180012, // 0005 GETGBL R6 G18 - 0x5C1C0200, // 0006 MOVE R7 R1 - 0x7C180200, // 0007 CALL R6 1 - 0x4180D01, // 0008 SUB R6 R6 R257 - 0x401A0006, // 0009 CONNECT R6 R256 R6 - 0x7C140200, // 000A CALL R5 1 - 0xA802001A, // 000B EXBLK 0 #0027 - 0x5C180A00, // 000C MOVE R6 R5 - 0x7C180000, // 000D CALL R6 0 - 0x501C0000, // 000E LDBOOL R7 0 0 - 0x60200000, // 000F GETGBL R8 G0 - 0x60240012, // 0010 GETGBL R9 G18 - 0x5C280400, // 0011 MOVE R10 R2 - 0x7C240200, // 0012 CALL R9 1 - 0x4241301, // 0013 SUB R9 R9 R257 - 0x40260009, // 0014 CONNECT R9 R256 R9 - 0x7C200200, // 0015 CALL R8 1 - 0xA8020007, // 0016 EXBLK 0 #001F - 0x5C241000, // 0017 MOVE R9 R8 - 0x7C240000, // 0018 CALL R9 0 - 0x94280206, // 0019 GETIDX R10 R1 R6 - 0x942C0409, // 001A GETIDX R11 R2 R9 - 0x1C28140B, // 001B EQ R10 R10 R11 - 0x782A0000, // 001C JMPF R10 #001E - 0x501C0200, // 001D LDBOOL R7 1 0 - 0x7001FFF7, // 001E JMP #0017 - 0x58200002, // 001F LDCONST R8 K2 - 0xAC200200, // 0020 CATCH R8 1 0 - 0xB0080000, // 0021 RAISE 2 R0 R0 - 0x20200807, // 0022 NE R8 R4 R7 - 0x78220001, // 0023 JMPF R8 #0026 - 0xA8040001, // 0024 EXBLK 1 1 - 0x80040C00, // 0025 RET 1 R6 - 0x7001FFE4, // 0026 JMP #000C - 0x58140002, // 0027 LDCONST R5 K2 - 0xAC140200, // 0028 CATCH R5 1 0 - 0xB0080000, // 0029 RAISE 2 R0 R0 - 0x5415FFFE, // 002A LDINT R5 -1 - 0x80040A00, // 002B RET 1 R5 -}; - -static const bproto chars_in_string_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked 0x08 - 12, // nstack - 0, // nupvals - 4, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &chars_in_string_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &chars_in_string_code, // code - be_local_const_str(chars_in_string_str_name), // name - 44, // codesize - 3, // nconst - 0, // nproto - be_local_const_str(chars_in_string_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -const bclosure chars_in_string_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &chars_in_string_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** -// find a key in map, case insensitive, return actual key or nil if not found -def find_key_i(m,keyi) - import string - var keyu = string.toupper(keyi) - if classof(m) == map - for k:m.keys() - if string.toupper(k)==keyu || keyi=='?' - return k - end - end - end -end -********************************************************************/ -/******************************************************************** -** Solidified function: find_key_i -********************************************************************/ - -be_define_local_const_str(find_key_i_str_name, "find_key_i", 850136726, 10); -be_define_local_const_str(find_key_i_str_source, "string", 398550328, 6); -be_define_local_const_str(find_key_i_str_0, "string", 398550328, 6); -be_define_local_const_str(find_key_i_str_1, "toupper", -602983720, 7); -be_define_local_const_str(find_key_i_str_2, "keys", -112588595, 4); -be_define_local_const_str(find_key_i_str_3, "?", 973910158, 1); -be_define_local_const_str(find_key_i_str_4, "stop_iteration", -121173395, 14); - -static const bvalue find_key_i_ktab[5] = { - { { .s=be_local_const_str(find_key_i_str_0) }, BE_STRING}, - { { .s=be_local_const_str(find_key_i_str_1) }, BE_STRING}, - { { .s=be_local_const_str(find_key_i_str_2) }, BE_STRING}, - { { .s=be_local_const_str(find_key_i_str_3) }, BE_STRING}, - { { .s=be_local_const_str(find_key_i_str_4) }, BE_STRING}, -}; - -static const uint32_t find_key_i_code[31] = { - 0xA40E0000, // 0000 IMPORT R3 R256 - 0x8C100701, // 0001 GETMET R4 R3 R257 - 0x5C180400, // 0002 MOVE R6 R2 - 0x7C100400, // 0003 CALL R4 2 - 0x60140004, // 0004 GETGBL R5 G4 - 0x5C180200, // 0005 MOVE R6 R1 - 0x7C140200, // 0006 CALL R5 1 - 0x6018000B, // 0007 GETGBL R6 G11 - 0x1C140A06, // 0008 EQ R5 R5 R6 - 0x78160013, // 0009 JMPF R5 #001E - 0x60140000, // 000A GETGBL R5 G0 - 0x8C180302, // 000B GETMET R6 R1 R258 - 0x7C180200, // 000C CALL R6 1 - 0x7C140200, // 000D CALL R5 1 - 0xA802000B, // 000E EXBLK 0 #001B - 0x5C180A00, // 000F MOVE R6 R5 - 0x7C180000, // 0010 CALL R6 0 - 0x8C1C0701, // 0011 GETMET R7 R3 R257 - 0x5C240C00, // 0012 MOVE R9 R6 - 0x7C1C0400, // 0013 CALL R7 2 - 0x1C1C0E04, // 0014 EQ R7 R7 R4 - 0x741E0001, // 0015 JMPT R7 #0018 - 0x1C1C0503, // 0016 EQ R7 R2 R259 - 0x781E0001, // 0017 JMPF R7 #001A - 0xA8040001, // 0018 EXBLK 1 1 - 0x80040C00, // 0019 RET 1 R6 - 0x7001FFF3, // 001A JMP #000F - 0x58140004, // 001B LDCONST R5 K4 - 0xAC140200, // 001C CATCH R5 1 0 - 0xB0080000, // 001D RAISE 2 R0 R0 - 0x80000000, // 001E RET 0 R0 -}; - -static const bproto find_key_i_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 10, // nstack - 0, // nupvals - 3, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &find_key_i_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &find_key_i_code, // code - be_local_const_str(find_key_i_str_name), // name - 31, // codesize - 5, // nconst - 0, // nproto - be_local_const_str(find_key_i_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -const bclosure find_key_i_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &find_key_i_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - - -/******************************************************************** - // # split the item when there is an operator, returns a list of (left,op,right) - // # ex: "Dimmer>50" -> ["Dimmer",tasmota_gt,"50"] - "def find_op(item) " - "import string " - "var op_chars = '=<>!' " - "var pos = self.chars_in_string(item, op_chars) " - "if pos >= 0 " - "var op_split = string.split(item,pos) " - "var op_left = op_split[0] " - "var op_rest = op_split[1] " - "pos = self.chars_in_string(op_rest, op_chars, true) " - "if pos >= 0 " - "var op_split2 = string.split(op_rest,pos) " - "var op_middle = op_split2[0] " - "var op_right = op_split2[1] " - "return [op_left,op_middle,op_right] " - "end " - "end " - "return [item, nil, nil] " - "end " -********************************************************************/ -/******************************************************************** -** Solidified function: find_op -********************************************************************/ - -be_define_local_const_str(find_op_str_name, "find_op", -528253920, 7); -be_define_local_const_str(find_op_str_source, "string", 398550328, 6); -be_define_local_const_str(find_op_str_0, "string", 398550328, 6); -be_define_local_const_str(find_op_str_1, "=<>!", -1630497019, 4); -be_define_local_const_str(find_op_str_2, "chars_in_string", -1146182164, 15); -be_define_local_const_str(find_op_str_4, "split", -2017972765, 5); - -static const bvalue find_op_ktab[6] = { - { { .s=be_local_const_str(find_op_str_0) }, BE_STRING}, - { { .s=be_local_const_str(find_op_str_1) }, BE_STRING}, - { { .s=be_local_const_str(find_op_str_2) }, BE_STRING}, - { { .i=0 }, BE_INT}, - { { .s=be_local_const_str(find_op_str_4) }, BE_STRING}, - { { .i=1 }, BE_INT}, -}; - -static const uint32_t find_op_code[42] = { - 0xA40A0000, // 0000 IMPORT R2 R256 - 0x580C0001, // 0001 LDCONST R3 K1 - 0x8C100102, // 0002 GETMET R4 R0 R258 - 0x5C180200, // 0003 MOVE R6 R1 - 0x5C1C0600, // 0004 MOVE R7 R3 - 0x7C100600, // 0005 CALL R4 3 - 0x28140903, // 0006 GE R5 R4 R259 - 0x78160019, // 0007 JMPF R5 #0022 - 0x8C140504, // 0008 GETMET R5 R2 R260 - 0x5C1C0200, // 0009 MOVE R7 R1 - 0x5C200800, // 000A MOVE R8 R4 - 0x7C140600, // 000B CALL R5 3 - 0x94180B03, // 000C GETIDX R6 R5 R259 - 0x941C0B05, // 000D GETIDX R7 R5 R261 - 0x8C200102, // 000E GETMET R8 R0 R258 - 0x5C280E00, // 000F MOVE R10 R7 - 0x5C2C0600, // 0010 MOVE R11 R3 - 0x50300200, // 0011 LDBOOL R12 1 0 - 0x7C200800, // 0012 CALL R8 4 - 0x5C101000, // 0013 MOVE R4 R8 - 0x28200903, // 0014 GE R8 R4 R259 - 0x7822000B, // 0015 JMPF R8 #0022 - 0x8C200504, // 0016 GETMET R8 R2 R260 - 0x5C280E00, // 0017 MOVE R10 R7 - 0x5C2C0800, // 0018 MOVE R11 R4 - 0x7C200600, // 0019 CALL R8 3 - 0x94241103, // 001A GETIDX R9 R8 R259 - 0x94281105, // 001B GETIDX R10 R8 R261 - 0x602C000A, // 001C GETGBL R11 G10 - 0x7C2C0000, // 001D CALL R11 0 - 0x40301606, // 001E CONNECT R12 R11 R6 - 0x40301609, // 001F CONNECT R12 R11 R9 - 0x4030160A, // 0020 CONNECT R12 R11 R10 - 0x80041600, // 0021 RET 1 R11 - 0x6014000A, // 0022 GETGBL R5 G10 - 0x7C140000, // 0023 CALL R5 0 - 0x40180A01, // 0024 CONNECT R6 R5 R1 - 0x4C180000, // 0025 LDNIL 6 - 0x40180A06, // 0026 CONNECT R6 R5 R6 - 0x4C180000, // 0027 LDNIL 6 - 0x40180A06, // 0028 CONNECT R6 R5 R6 - 0x80040A00, // 0029 RET 1 R5 -}; - -static const bproto find_op_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 13, // nstack - 0, // nupvals - 2, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &find_op_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &find_op_code, // code - be_local_const_str(find_op_str_name), // name - 42, // codesize - 6, // nconst - 0, // nproto - be_local_const_str(find_op_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -const bclosure find_op_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &find_op_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** - // Rules - "def add_rule(pat,f) " - "if !self._rules " - "self._rules={} " - "end " - "if type(f) == 'function' " - "self._rules[pat] = f " - "else " - "raise 'value_error', 'the second argument is not a function' " - "end " - "end " -********************************************************************/ - -/******************************************************************** -** Solidified function: add_rule -********************************************************************/ - -be_define_local_const_str(add_rule_str_name, "add_rule", 596540743, 8); -be_define_local_const_str(add_rule_str_source, "string", 398550328, 6); -be_define_local_const_str(add_rule_str_0, "_rules", -28750191, 6); -be_define_local_const_str(add_rule_str_1, "function", -1630125495, 8); -be_define_local_const_str(add_rule_str_2, "value_error", 773297791, 11); -be_define_local_const_str(add_rule_str_3, "the second argument is not a function", -340392827, 37); - -static const bvalue add_rule_ktab[4] = { - { { .s=be_local_const_str(add_rule_str_0) }, BE_STRING}, - { { .s=be_local_const_str(add_rule_str_1) }, BE_STRING}, - { { .s=be_local_const_str(add_rule_str_2) }, BE_STRING}, - { { .s=be_local_const_str(add_rule_str_3) }, BE_STRING}, -}; - -static const uint32_t add_rule_code[15] = { - 0x880C0100, // 0000 GETMBR R3 R0 R256 - 0x740E0002, // 0001 JMPT R3 #0005 - 0x600C000B, // 0002 GETGBL R3 G11 - 0x7C0C0000, // 0003 CALL R3 0 - 0x90020003, // 0004 SETMBR R0 R256 R3 - 0x600C0015, // 0005 GETGBL R3 G21 - 0x5C100400, // 0006 MOVE R4 R2 - 0x7C0C0200, // 0007 CALL R3 1 - 0x1C0C0701, // 0008 EQ R3 R3 R257 - 0x780E0002, // 0009 JMPF R3 #000D - 0x880C0100, // 000A GETMBR R3 R0 R256 - 0x980C0202, // 000B SETIDX R3 R1 R2 - 0x70020000, // 000C JMP #000E - 0xB0060503, // 000D RAISE 1 R258 R259 - 0x80000000, // 000E RET 0 R0 -}; - -static const bproto add_rule_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 5, // nstack - 0, // nupvals - 3, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &add_rule_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &add_rule_code, // code - be_local_const_str(add_rule_str_name), // name - 15, // codesize - 4, // nconst - 0, // nproto - be_local_const_str(add_rule_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure add_rule_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &add_rule_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - -/******************************************************************** - "def remove_rule(pat) " - "if self._rules " - "self._rules.remove(pat) " - "end " - "end " -********************************************************************/ - -/******************************************************************** -** Solidified function: remove_rule -********************************************************************/ - -be_define_local_const_str(remove_rule_str_name, "remove_rule", -838755968, 11); -be_define_local_const_str(remove_rule_str_source, "string", 398550328, 6); -be_define_local_const_str(remove_rule_str_0, "_rules", -28750191, 6); -be_define_local_const_str(remove_rule_str_1, "remove", -611183107, 6); - -static const bvalue remove_rule_ktab[2] = { - { { .s=be_local_const_str(remove_rule_str_0) }, BE_STRING}, - { { .s=be_local_const_str(remove_rule_str_1) }, BE_STRING}, -}; - -static const uint32_t remove_rule_code[7] = { - 0x88080100, // 0000 GETMBR R2 R0 R256 - 0x780A0003, // 0001 JMPF R2 #0006 - 0x88080100, // 0002 GETMBR R2 R0 R256 - 0x8C080501, // 0003 GETMET R2 R2 R257 - 0x5C100200, // 0004 MOVE R4 R1 - 0x7C080400, // 0005 CALL R2 2 - 0x80000000, // 0006 RET 0 R0 -}; - -static const bproto remove_rule_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 5, // nstack - 0, // nupvals - 2, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &remove_rule_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &remove_rule_code, // code - be_local_const_str(remove_rule_str_name), // name - 7, // codesize - 2, // nconst - 0, // nproto - be_local_const_str(remove_rule_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure remove_rule_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &remove_rule_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** - // Rules trigger if match. return true if match, false if not - "def try_rule(event, rule, f) " - "import string " - "var rl_list = self.find_op(rule) " - "var sub_event = event " - "var rl = string.split(rl_list[0],'#') " - "for it:rl " - "found=self.find_key_i(sub_event,it) " - "if found == nil return false end " - "sub_event = sub_event[found] " - "end " - "var op=rl_list[1]" - "var op2=rl_list[2]" - "if op " - "if op=='==' " - "if str(sub_event) != str(op2) return false end " - "elif op=='!==' " - "if str(sub_event) == str(op2) return false end " - "elif op=='=' " - "if real(sub_event) != real(op2) return false end " - "elif op=='!=' " - "if real(sub_event) == real(op2) return false end " - "elif op=='>' " - "if real(sub_event) <= real(op2) return false end " - "elif op=='>=' " - "if real(sub_event) < real(op2) return false end " - "elif op=='<' " - "if real(sub_event) >= real(op2) return false end " - "elif op=='<=' " - "if real(sub_event) > real(op2) return false end " - "end " - "end " - "f(sub_event, rl_list[0], event) " - "return true " - "end " -********************************************************************/ -/******************************************************************** -** Solidified function: try_rule -********************************************************************/ - -be_define_local_const_str(try_rule_str_name, "try_rule", 1986449405, 8); -be_define_local_const_str(try_rule_str_source, "string", 398550328, 6); -be_define_local_const_str(try_rule_str_0, "string", 398550328, 6); -be_define_local_const_str(try_rule_str_1, "find_op", -528253920, 7); -be_define_local_const_str(try_rule_str_2, "split", -2017972765, 5); -be_define_local_const_str(try_rule_str_4, "#", 638357778, 1); -be_define_local_const_str(try_rule_str_5, "find_key_i", 850136726, 10); -be_define_local_const_str(try_rule_str_6, "stop_iteration", -121173395, 14); -be_define_local_const_str(try_rule_str_9, "==", -1863000881, 2); -be_define_local_const_str(try_rule_str_10, "!==", 559817114, 3); -be_define_local_const_str(try_rule_str_11, "=", 940354920, 1); -be_define_local_const_str(try_rule_str_12, "!=", -1866252285, 2); -be_define_local_const_str(try_rule_str_13, ">", 990687777, 1); -be_define_local_const_str(try_rule_str_14, ">=", 284975636, 2); -be_define_local_const_str(try_rule_str_15, "<", 957132539, 1); -be_define_local_const_str(try_rule_str_16, "<=", -1795743310, 2); - -static const bvalue try_rule_ktab[17] = { - { { .s=be_local_const_str(try_rule_str_0) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_1) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_2) }, BE_STRING}, - { { .i=0 }, BE_INT}, - { { .s=be_local_const_str(try_rule_str_4) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_5) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_6) }, BE_STRING}, - { { .i=1 }, BE_INT}, - { { .i=2 }, BE_INT}, - { { .s=be_local_const_str(try_rule_str_9) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_10) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_11) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_12) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_13) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_14) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_15) }, BE_STRING}, - { { .s=be_local_const_str(try_rule_str_16) }, BE_STRING}, -}; - -static const uint32_t try_rule_code[143] = { - 0xA4120000, // 0000 IMPORT R4 R256 - 0x8C140101, // 0001 GETMET R5 R0 R257 - 0x5C1C0400, // 0002 MOVE R7 R2 - 0x7C140400, // 0003 CALL R5 2 - 0x5C180200, // 0004 MOVE R6 R1 - 0x8C1C0902, // 0005 GETMET R7 R4 R258 - 0x94240B03, // 0006 GETIDX R9 R5 R259 - 0x58280004, // 0007 LDCONST R10 K4 - 0x7C1C0600, // 0008 CALL R7 3 - 0x60200000, // 0009 GETGBL R8 G0 - 0x5C240E00, // 000A MOVE R9 R7 - 0x7C200200, // 000B CALL R8 1 - 0xA802000D, // 000C EXBLK 0 #001B - 0x5C241000, // 000D MOVE R9 R8 - 0x7C240000, // 000E CALL R9 0 - 0x8C280105, // 000F GETMET R10 R0 R261 - 0x5C300C00, // 0010 MOVE R12 R6 - 0x5C341200, // 0011 MOVE R13 R9 - 0x7C280600, // 0012 CALL R10 3 - 0x4C2C0000, // 0013 LDNIL 11 - 0x1C2C140B, // 0014 EQ R11 R10 R11 - 0x782E0002, // 0015 JMPF R11 #0019 - 0x502C0000, // 0016 LDBOOL R11 0 0 - 0xA8040001, // 0017 EXBLK 1 1 - 0x80041600, // 0018 RET 1 R11 - 0x94180C0A, // 0019 GETIDX R6 R6 R10 - 0x7001FFF1, // 001A JMP #000D - 0x58200006, // 001B LDCONST R8 K6 - 0xAC200200, // 001C CATCH R8 1 0 - 0xB0080000, // 001D RAISE 2 R0 R0 - 0x94200B07, // 001E GETIDX R8 R5 R263 - 0x94240B08, // 001F GETIDX R9 R5 R264 - 0x78220066, // 0020 JMPF R8 #0088 - 0x1C281109, // 0021 EQ R10 R8 R265 - 0x782A000A, // 0022 JMPF R10 #002E - 0x60280013, // 0023 GETGBL R10 G19 - 0x5C2C0C00, // 0024 MOVE R11 R6 - 0x7C280200, // 0025 CALL R10 1 - 0x602C0013, // 0026 GETGBL R11 G19 - 0x5C301200, // 0027 MOVE R12 R9 - 0x7C2C0200, // 0028 CALL R11 1 - 0x2028140B, // 0029 NE R10 R10 R11 - 0x782A0001, // 002A JMPF R10 #002D - 0x50280000, // 002B LDBOOL R10 0 0 - 0x80041400, // 002C RET 1 R10 - 0x70020059, // 002D JMP #0088 - 0x1C28110A, // 002E EQ R10 R8 R266 - 0x782A000A, // 002F JMPF R10 #003B - 0x60280013, // 0030 GETGBL R10 G19 - 0x5C2C0C00, // 0031 MOVE R11 R6 - 0x7C280200, // 0032 CALL R10 1 - 0x602C0013, // 0033 GETGBL R11 G19 - 0x5C301200, // 0034 MOVE R12 R9 - 0x7C2C0200, // 0035 CALL R11 1 - 0x1C28140B, // 0036 EQ R10 R10 R11 - 0x782A0001, // 0037 JMPF R10 #003A - 0x50280000, // 0038 LDBOOL R10 0 0 - 0x80041400, // 0039 RET 1 R10 - 0x7002004C, // 003A JMP #0088 - 0x1C28110B, // 003B EQ R10 R8 R267 - 0x782A000A, // 003C JMPF R10 #0048 - 0x60280011, // 003D GETGBL R10 G17 - 0x5C2C0C00, // 003E MOVE R11 R6 - 0x7C280200, // 003F CALL R10 1 - 0x602C0011, // 0040 GETGBL R11 G17 - 0x5C301200, // 0041 MOVE R12 R9 - 0x7C2C0200, // 0042 CALL R11 1 - 0x2028140B, // 0043 NE R10 R10 R11 - 0x782A0001, // 0044 JMPF R10 #0047 - 0x50280000, // 0045 LDBOOL R10 0 0 - 0x80041400, // 0046 RET 1 R10 - 0x7002003F, // 0047 JMP #0088 - 0x1C28110C, // 0048 EQ R10 R8 R268 - 0x782A000A, // 0049 JMPF R10 #0055 - 0x60280011, // 004A GETGBL R10 G17 - 0x5C2C0C00, // 004B MOVE R11 R6 - 0x7C280200, // 004C CALL R10 1 - 0x602C0011, // 004D GETGBL R11 G17 - 0x5C301200, // 004E MOVE R12 R9 - 0x7C2C0200, // 004F CALL R11 1 - 0x1C28140B, // 0050 EQ R10 R10 R11 - 0x782A0001, // 0051 JMPF R10 #0054 - 0x50280000, // 0052 LDBOOL R10 0 0 - 0x80041400, // 0053 RET 1 R10 - 0x70020032, // 0054 JMP #0088 - 0x1C28110D, // 0055 EQ R10 R8 R269 - 0x782A000A, // 0056 JMPF R10 #0062 - 0x60280011, // 0057 GETGBL R10 G17 - 0x5C2C0C00, // 0058 MOVE R11 R6 - 0x7C280200, // 0059 CALL R10 1 - 0x602C0011, // 005A GETGBL R11 G17 - 0x5C301200, // 005B MOVE R12 R9 - 0x7C2C0200, // 005C CALL R11 1 - 0x1828140B, // 005D LE R10 R10 R11 - 0x782A0001, // 005E JMPF R10 #0061 - 0x50280000, // 005F LDBOOL R10 0 0 - 0x80041400, // 0060 RET 1 R10 - 0x70020025, // 0061 JMP #0088 - 0x1C28110E, // 0062 EQ R10 R8 R270 - 0x782A000A, // 0063 JMPF R10 #006F - 0x60280011, // 0064 GETGBL R10 G17 - 0x5C2C0C00, // 0065 MOVE R11 R6 - 0x7C280200, // 0066 CALL R10 1 - 0x602C0011, // 0067 GETGBL R11 G17 - 0x5C301200, // 0068 MOVE R12 R9 - 0x7C2C0200, // 0069 CALL R11 1 - 0x1428140B, // 006A LT R10 R10 R11 - 0x782A0001, // 006B JMPF R10 #006E - 0x50280000, // 006C LDBOOL R10 0 0 - 0x80041400, // 006D RET 1 R10 - 0x70020018, // 006E JMP #0088 - 0x1C28110F, // 006F EQ R10 R8 R271 - 0x782A000A, // 0070 JMPF R10 #007C - 0x60280011, // 0071 GETGBL R10 G17 - 0x5C2C0C00, // 0072 MOVE R11 R6 - 0x7C280200, // 0073 CALL R10 1 - 0x602C0011, // 0074 GETGBL R11 G17 - 0x5C301200, // 0075 MOVE R12 R9 - 0x7C2C0200, // 0076 CALL R11 1 - 0x2828140B, // 0077 GE R10 R10 R11 - 0x782A0001, // 0078 JMPF R10 #007B - 0x50280000, // 0079 LDBOOL R10 0 0 - 0x80041400, // 007A RET 1 R10 - 0x7002000B, // 007B JMP #0088 - 0x1C281110, // 007C EQ R10 R8 R272 - 0x782A0009, // 007D JMPF R10 #0088 - 0x60280011, // 007E GETGBL R10 G17 - 0x5C2C0C00, // 007F MOVE R11 R6 - 0x7C280200, // 0080 CALL R10 1 - 0x602C0011, // 0081 GETGBL R11 G17 - 0x5C301200, // 0082 MOVE R12 R9 - 0x7C2C0200, // 0083 CALL R11 1 - 0x2428140B, // 0084 GT R10 R10 R11 - 0x782A0001, // 0085 JMPF R10 #0088 - 0x50280000, // 0086 LDBOOL R10 0 0 - 0x80041400, // 0087 RET 1 R10 - 0x5C280600, // 0088 MOVE R10 R3 - 0x5C2C0C00, // 0089 MOVE R11 R6 - 0x94300B03, // 008A GETIDX R12 R5 R259 - 0x5C340200, // 008B MOVE R13 R1 - 0x7C280600, // 008C CALL R10 3 - 0x50280200, // 008D LDBOOL R10 1 0 - 0x80041400, // 008E RET 1 R10 -}; - -static const bproto try_rule_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 14, // nstack - 0, // nupvals - 4, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &try_rule_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &try_rule_code, // code - be_local_const_str(try_rule_str_name), // name - 143, // codesize - 17, // nconst - 0, // nproto - be_local_const_str(try_rule_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure try_rule_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &try_rule_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** - // Run rules, i.e. check each individual rule - // Returns true if at least one rule matched, false if none - "def exec_rules(ev_json) " - "if self._rules " - "import json " - "var ev = json.load(ev_json) " - "var ret = false " - "if ev == nil " - "print('BRY: ERROR, bad json: '+ev_json, 3) " - "else " - "for r: self._rules.keys() " - "ret = self.try_rule(ev,r,self._rules[r]) || ret " - "end " - "end " - "return ret " - "end " - "return false " - "end " - -********************************************************************/ - -/******************************************************************** -** Solidified function: exec_rules -********************************************************************/ - -be_define_local_const_str(exec_rules_str_name, "exec_rules", 1445221092, 10); -be_define_local_const_str(exec_rules_str_source, "string", 398550328, 6); -be_define_local_const_str(exec_rules_str_0, "_rules", -28750191, 6); -be_define_local_const_str(exec_rules_str_1, "json", 916562499, 4); -be_define_local_const_str(exec_rules_str_2, "load", -435725847, 4); -be_define_local_const_str(exec_rules_str_3, "BRY: ERROR, bad json: ", -1579831487, 22); -be_define_local_const_str(exec_rules_str_5, "keys", -112588595, 4); -be_define_local_const_str(exec_rules_str_6, "try_rule", 1986449405, 8); -be_define_local_const_str(exec_rules_str_7, "stop_iteration", -121173395, 14); - -static const bvalue exec_rules_ktab[8] = { - { { .s=be_local_const_str(exec_rules_str_0) }, BE_STRING}, - { { .s=be_local_const_str(exec_rules_str_1) }, BE_STRING}, - { { .s=be_local_const_str(exec_rules_str_2) }, BE_STRING}, - { { .s=be_local_const_str(exec_rules_str_3) }, BE_STRING}, - { { .i=3 }, BE_INT}, - { { .s=be_local_const_str(exec_rules_str_5) }, BE_STRING}, - { { .s=be_local_const_str(exec_rules_str_6) }, BE_STRING}, - { { .s=be_local_const_str(exec_rules_str_7) }, BE_STRING}, -}; - -static const uint32_t exec_rules_code[40] = { - 0x88080100, // 0000 GETMBR R2 R0 R256 - 0x780A0023, // 0001 JMPF R2 #0026 - 0xA40A0200, // 0002 IMPORT R2 R257 - 0x8C0C0502, // 0003 GETMET R3 R2 R258 - 0x5C140200, // 0004 MOVE R5 R1 - 0x7C0C0400, // 0005 CALL R3 2 - 0x50100000, // 0006 LDBOOL R4 0 0 - 0x4C140000, // 0007 LDNIL 5 - 0x1C140605, // 0008 EQ R5 R3 R5 - 0x78160004, // 0009 JMPF R5 #000F - 0x6014000F, // 000A GETGBL R5 G15 - 0x1A0601, // 000B ADD R6 R259 R1 - 0x581C0004, // 000C LDCONST R7 K4 - 0x7C140400, // 000D CALL R5 2 - 0x70020015, // 000E JMP #0025 - 0x60140000, // 000F GETGBL R5 G0 - 0x88180100, // 0010 GETMBR R6 R0 R256 - 0x8C180D05, // 0011 GETMET R6 R6 R261 - 0x7C180200, // 0012 CALL R6 1 - 0x7C140200, // 0013 CALL R5 1 - 0xA802000C, // 0014 EXBLK 0 #0022 - 0x5C180A00, // 0015 MOVE R6 R5 - 0x7C180000, // 0016 CALL R6 0 - 0x8C1C0106, // 0017 GETMET R7 R0 R262 - 0x5C240600, // 0018 MOVE R9 R3 - 0x5C280C00, // 0019 MOVE R10 R6 - 0x882C0100, // 001A GETMBR R11 R0 R256 - 0x942C1606, // 001B GETIDX R11 R11 R6 - 0x7C1C0800, // 001C CALL R7 4 - 0x741E0001, // 001D JMPT R7 #0020 - 0x74120000, // 001E JMPT R4 #0020 - 0x50100001, // 001F LDBOOL R4 0 1 - 0x50100200, // 0020 LDBOOL R4 1 0 - 0x7001FFF2, // 0021 JMP #0015 - 0x58140007, // 0022 LDCONST R5 K7 - 0xAC140200, // 0023 CATCH R5 1 0 - 0xB0080000, // 0024 RAISE 2 R0 R0 - 0x80040800, // 0025 RET 1 R4 - 0x50080000, // 0026 LDBOOL R2 0 0 - 0x80040400, // 0027 RET 1 R2 -}; - -static const bproto exec_rules_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 12, // nstack - 0, // nupvals - 2, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &exec_rules_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &exec_rules_code, // code - be_local_const_str(exec_rules_str_name), // name - 40, // codesize - 8, // nconst - 0, // nproto - be_local_const_str(exec_rules_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -const bclosure exec_rules_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &exec_rules_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** - "def set_timer(delay,f) " - "if !self._timers self._timers=[] end " - "self._timers.push([self.millis(delay),f]) " - "end " -********************************************************************/ -/******************************************************************** -** Solidified function: set_timer -********************************************************************/ - -be_define_local_const_str(set_timer_str_name, "set_timer", 2135414533, 9); -be_define_local_const_str(set_timer_str_source, "string", 398550328, 6); -be_define_local_const_str(set_timer_str_0, "_timers", -1694866380, 7); -be_define_local_const_str(set_timer_str_1, "push", -2022703139, 4); -be_define_local_const_str(set_timer_str_2, "millis", 1214679063, 6); - -static const bvalue set_timer_ktab[3] = { - { { .s=be_local_const_str(set_timer_str_0) }, BE_STRING}, - { { .s=be_local_const_str(set_timer_str_1) }, BE_STRING}, - { { .s=be_local_const_str(set_timer_str_2) }, BE_STRING}, -}; - -static const uint32_t set_timer_code[16] = { - 0x880C0100, // 0000 GETMBR R3 R0 R256 - 0x740E0002, // 0001 JMPT R3 #0005 - 0x600C000A, // 0002 GETGBL R3 G10 - 0x7C0C0000, // 0003 CALL R3 0 - 0x90020003, // 0004 SETMBR R0 R256 R3 - 0x880C0100, // 0005 GETMBR R3 R0 R256 - 0x8C0C0701, // 0006 GETMET R3 R3 R257 - 0x6014000A, // 0007 GETGBL R5 G10 - 0x7C140000, // 0008 CALL R5 0 - 0x8C180102, // 0009 GETMET R6 R0 R258 - 0x5C200200, // 000A MOVE R8 R1 - 0x7C180400, // 000B CALL R6 2 - 0x40180A06, // 000C CONNECT R6 R5 R6 - 0x40180A02, // 000D CONNECT R6 R5 R2 - 0x7C0C0400, // 000E CALL R3 2 - 0x80000000, // 000F RET 0 R0 -}; - -static const bproto set_timer_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 9, // nstack - 0, // nupvals - 3, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &set_timer_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &set_timer_code, // code - be_local_const_str(set_timer_str_name), // name - 16, // codesize - 3, // nconst - 0, // nproto - be_local_const_str(set_timer_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -const bclosure set_timer_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &set_timer_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - - -/******************************************************************** - // run every 50ms tick - "def run_deferred() " - "if self._timers " - "var i=0 " - "while i wire1 or wire2 or nil - // scan for the first occurrence of the addr, starting with bus1 then bus2 - // optional: skip if index is disabled via I2CEnable - "def wire_scan(addr,idx) " - // skip if the I2C index is disabled - "if idx != nil && !self.i2c_enabled(idx) return nil end " - "if self.wire1.detect(addr) return self.wire1 end " - "if self.wire2.detect(addr) return self.wire2 end " - "return nil " - "end " -********************************************************************/ -/******************************************************************** -** Solidified function: wire_scan -********************************************************************/ - -be_define_local_const_str(wire_scan_str_name, "wire_scan", -1623691416, 9); -be_define_local_const_str(wire_scan_str_source, "string", 398550328, 6); -be_define_local_const_str(wire_scan_str_0, "i2c_enabled", 218388101, 11); -be_define_local_const_str(wire_scan_str_1, "wire1", -1082245877, 5); -be_define_local_const_str(wire_scan_str_2, "detect", 8884370, 6); -be_define_local_const_str(wire_scan_str_3, "wire2", -1065468258, 5); - -static const bvalue wire_scan_ktab[4] = { - { { .s=be_local_const_str(wire_scan_str_0) }, BE_STRING}, - { { .s=be_local_const_str(wire_scan_str_1) }, BE_STRING}, - { { .s=be_local_const_str(wire_scan_str_2) }, BE_STRING}, - { { .s=be_local_const_str(wire_scan_str_3) }, BE_STRING}, -}; - -static const uint32_t wire_scan_code[25] = { - 0x4C0C0000, // 0000 LDNIL 3 - 0x200C0403, // 0001 NE R3 R2 R3 - 0x780E0005, // 0002 JMPF R3 #0009 - 0x8C0C0100, // 0003 GETMET R3 R0 R256 - 0x5C140400, // 0004 MOVE R5 R2 - 0x7C0C0400, // 0005 CALL R3 2 - 0x740E0001, // 0006 JMPT R3 #0009 - 0x4C0C0000, // 0007 LDNIL 3 - 0x80040600, // 0008 RET 1 R3 - 0x880C0101, // 0009 GETMBR R3 R0 R257 - 0x8C0C0702, // 000A GETMET R3 R3 R258 - 0x5C140200, // 000B MOVE R5 R1 - 0x7C0C0400, // 000C CALL R3 2 - 0x780E0001, // 000D JMPF R3 #0010 - 0x880C0101, // 000E GETMBR R3 R0 R257 - 0x80040600, // 000F RET 1 R3 - 0x880C0103, // 0010 GETMBR R3 R0 R259 - 0x8C0C0702, // 0011 GETMET R3 R3 R258 - 0x5C140200, // 0012 MOVE R5 R1 - 0x7C0C0400, // 0013 CALL R3 2 - 0x780E0001, // 0014 JMPF R3 #0017 - 0x880C0103, // 0015 GETMBR R3 R0 R259 - 0x80040600, // 0016 RET 1 R3 - 0x4C0C0000, // 0017 LDNIL 3 - 0x80040600, // 0018 RET 1 R3 -}; - -static const bproto wire_scan_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 6, // nstack - 0, // nupvals - 3, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &wire_scan_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &wire_scan_code, // code - be_local_const_str(wire_scan_str_name), // name - 25, // codesize - 4, // nconst - 0, // nproto - be_local_const_str(wire_scan_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure wire_scan_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &wire_scan_proto, // proto - { NULL } // upvals -}; - -/*******************************************************************/ - -/******************************************************************** - def time_str(time) - import string - var tm = self.time_dump(time) - return string.format("%04d-%02d-%02dT%02d:%02d:%02d", tm['year'], tm['month'], tm['day'], tm['hour'], tm['min'], tm['sec']) - end -********************************************************************/ -/******************************************************************** -** Solidified function: time_str -********************************************************************/ - -/********** Solidified proto: time_str */ -be_define_local_const_str(time_str_str_name, "time_str", -1681139684, 8); -be_define_local_const_str(time_str_str_source, "input", -103256197, 5); -be_define_local_const_str(time_str_str_0, "string", 398550328, 6); -be_define_local_const_str(time_str_str_1, "time_dump", -964556549, 9); -be_define_local_const_str(time_str_str_2, "format", -1180859054, 6); -be_define_local_const_str(time_str_str_3, "%04d-%02d-%02dT%02d:%02d:%02d", -869438695, 29); -be_define_local_const_str(time_str_str_4, "year", -1367388900, 4); -be_define_local_const_str(time_str_str_5, "month", -696646139, 5); -be_define_local_const_str(time_str_str_6, "day", -464576003, 3); -be_define_local_const_str(time_str_str_7, "hour", -1241306097, 4); -be_define_local_const_str(time_str_str_8, "min", -913357481, 3); -be_define_local_const_str(time_str_str_9, "sec", -1155074638, 3); - -static const bvalue time_str_ktab[10] = { - { { .s=be_local_const_str(time_str_str_0) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_1) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_2) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_3) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_4) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_5) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_6) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_7) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_8) }, BE_STRING}, - { { .s=be_local_const_str(time_str_str_9) }, BE_STRING}, -}; - -static const uint32_t time_str_code[14] = { - 0xA40A0000, // 0000 IMPORT R2 R256 - 0x8C0C0101, // 0001 GETMET R3 R0 R257 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x8C100502, // 0004 GETMET R4 R2 R258 - 0x58180003, // 0005 LDCONST R6 K3 - 0x941C0704, // 0006 GETIDX R7 R3 R260 - 0x94200705, // 0007 GETIDX R8 R3 R261 - 0x94240706, // 0008 GETIDX R9 R3 R262 - 0x94280707, // 0009 GETIDX R10 R3 R263 - 0x942C0708, // 000A GETIDX R11 R3 R264 - 0x94300709, // 000B GETIDX R12 R3 R265 - 0x7C101000, // 000C CALL R4 8 - 0x80040800, // 000D RET 1 R4 -}; - -be_define_local_proto(time_str, 13, 2, 1, 0, 0); -be_define_local_closure(time_str); - -/*******************************************************************/ - -/******************************************************************** - // cmd high-level function - "def cmd(command) " - "import json " - "var ret = self._cmd(command) " - "var j = json.load(ret) " - "if type(j) == 'instance' " - "return j " - "else " - "return {'response':j} " - "end " - "end " -********************************************************************/ -/******************************************************************** -** Solidified function: cmd -********************************************************************/ - -be_define_local_const_str(cmd_str_name, "cmd", -158181397, 3); -be_define_local_const_str(cmd_str_source, "string", 398550328, 6); -be_define_local_const_str(cmd_str_0, "json", 916562499, 4); -be_define_local_const_str(cmd_str_1, "_cmd", -875145154, 4); -be_define_local_const_str(cmd_str_2, "load", -435725847, 4); -be_define_local_const_str(cmd_str_3, "instance", 193386898, 8); -be_define_local_const_str(cmd_str_4, "response", 1499316702, 8); - -static const bvalue cmd_ktab[5] = { - { { .s=be_local_const_str(cmd_str_0) }, BE_STRING}, - { { .s=be_local_const_str(cmd_str_1) }, BE_STRING}, - { { .s=be_local_const_str(cmd_str_2) }, BE_STRING}, - { { .s=be_local_const_str(cmd_str_3) }, BE_STRING}, - { { .s=be_local_const_str(cmd_str_4) }, BE_STRING}, -}; - -static const uint32_t cmd_code[19] = { - 0xA40A0000, // 0000 IMPORT R2 R256 - 0x8C0C0101, // 0001 GETMET R3 R0 R257 - 0x5C140200, // 0002 MOVE R5 R1 - 0x7C0C0400, // 0003 CALL R3 2 - 0x8C100502, // 0004 GETMET R4 R2 R258 - 0x5C180600, // 0005 MOVE R6 R3 - 0x7C100400, // 0006 CALL R4 2 - 0x60140015, // 0007 GETGBL R5 G21 - 0x5C180800, // 0008 MOVE R6 R4 - 0x7C140200, // 0009 CALL R5 1 - 0x1C140B03, // 000A EQ R5 R5 R259 - 0x78160001, // 000B JMPF R5 #000E - 0x80040800, // 000C RET 1 R4 - 0x70020003, // 000D JMP #0012 - 0x6014000B, // 000E GETGBL R5 G11 - 0x7C140000, // 000F CALL R5 0 - 0x98160804, // 0010 SETIDX R5 R260 R4 - 0x80040A00, // 0011 RET 1 R5 - 0x80000000, // 0012 RET 0 R0 -}; - -static const bproto cmd_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 7, // nstack - 0, // nupvals - 2, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &cmd_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &cmd_code, // code - be_local_const_str(cmd_str_name), // name - 19, // codesize - 5, // nconst - 0, // nproto - be_local_const_str(cmd_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure cmd_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &cmd_proto, // proto - { NULL } // upvals -}; - +be_local_closure(load, /* name */ + be_nested_proto( + 15, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[18]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("path", -2071507658, 4), + /* K2 */ be_nested_string("find", -1108310694, 4), + /* K3 */ be_nested_string(".", 722245873, 1), + /* K4 */ be_const_int(0), + /* K5 */ be_nested_string(".be", 1325797348, 3), + /* K6 */ be_nested_string("split", -2017972765, 5), + /* K7 */ be_const_int(1), + /* K8 */ be_nested_string("be", 942383232, 2), + /* K9 */ be_nested_string("bec", 1336821081, 3), + /* K10 */ be_nested_string("io_error", 1970281036, 8), + /* K11 */ be_nested_string("file extension is not '.be' or '.bec'", -1199247657, 37), + /* K12 */ be_nested_string("c", -435409838, 1), + /* K13 */ be_nested_string("last_modified", 772177145, 13), + /* K14 */ be_nested_string("file", -1427482813, 4), + /* K15 */ be_nested_string("save", -855671224, 4), + /* K16 */ be_nested_string("format", -1180859054, 6), + /* K17 */ be_nested_string("BRY: could not save compiled file %s (%s)", 736659787, 41), + }), + (be_nested_const_str("load", -435725847, 4)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[87]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0xA40E0200, // 0001 IMPORT R3 K1 + 0x8C100502, // 0002 GETMET R4 R2 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x581C0003, // 0004 LDCONST R7 K3 + 0x7C100600, // 0005 CALL R4 3 + 0x14100904, // 0006 LT R4 R4 K4 + 0x78120000, // 0007 JMPF R4 #0009 + 0x00040305, // 0008 ADD R1 R1 K5 + 0x8C100506, // 0009 GETMET R4 R2 K6 + 0x5C180200, // 000A MOVE R6 R1 + 0x581C0003, // 000B LDCONST R7 K3 + 0x7C100600, // 000C CALL R4 3 + 0x6014000C, // 000D GETGBL R5 G12 + 0x5C180800, // 000E MOVE R6 R4 + 0x7C140200, // 000F CALL R5 1 + 0x18140B07, // 0010 LE R5 R5 K7 + 0x74160007, // 0011 JMPT R5 #001A + 0x5415FFFE, // 0012 LDINT R5 -1 + 0x94140805, // 0013 GETIDX R5 R4 R5 + 0x20140B08, // 0014 NE R5 R5 K8 + 0x78160004, // 0015 JMPF R5 #001B + 0x5415FFFE, // 0016 LDINT R5 -1 + 0x94140805, // 0017 GETIDX R5 R4 R5 + 0x20140B09, // 0018 NE R5 R5 K9 + 0x78160000, // 0019 JMPF R5 #001B + 0xB006150B, // 001A RAISE 1 K10 K11 + 0x5415FFFE, // 001B LDINT R5 -1 + 0x94140205, // 001C GETIDX R5 R1 R5 + 0x1C140B0C, // 001D EQ R5 R5 K12 + 0x8C18070D, // 001E GETMET R6 R3 K13 + 0x5C200200, // 001F MOVE R8 R1 + 0x7C180400, // 0020 CALL R6 2 + 0x78160005, // 0021 JMPF R5 #0028 + 0x4C1C0000, // 0022 LDNIL R7 + 0x1C1C0C07, // 0023 EQ R7 R6 R7 + 0x781E0001, // 0024 JMPF R7 #0027 + 0x501C0000, // 0025 LDBOOL R7 0 0 + 0x80040E00, // 0026 RET 1 R7 + 0x70020013, // 0027 JMP #003C + 0x8C1C070D, // 0028 GETMET R7 R3 K13 + 0x0024030C, // 0029 ADD R9 R1 K12 + 0x7C1C0400, // 002A CALL R7 2 + 0x4C200000, // 002B LDNIL R8 + 0x1C200C08, // 002C EQ R8 R6 R8 + 0x78220004, // 002D JMPF R8 #0033 + 0x4C200000, // 002E LDNIL R8 + 0x1C200E08, // 002F EQ R8 R7 R8 + 0x78220001, // 0030 JMPF R8 #0033 + 0x50200000, // 0031 LDBOOL R8 0 0 + 0x80041000, // 0032 RET 1 R8 + 0x4C200000, // 0033 LDNIL R8 + 0x20200E08, // 0034 NE R8 R7 R8 + 0x78220005, // 0035 JMPF R8 #003C + 0x4C200000, // 0036 LDNIL R8 + 0x1C200C08, // 0037 EQ R8 R6 R8 + 0x74220001, // 0038 JMPT R8 #003B + 0x28200E06, // 0039 GE R8 R7 R6 + 0x78220000, // 003A JMPF R8 #003C + 0x50140200, // 003B LDBOOL R5 1 0 + 0x601C000D, // 003C GETGBL R7 G13 + 0x5C200200, // 003D MOVE R8 R1 + 0x5824000E, // 003E LDCONST R9 K14 + 0x7C1C0400, // 003F CALL R7 2 + 0x74160011, // 0040 JMPT R5 #0053 + 0xA8020005, // 0041 EXBLK 0 #0048 + 0x8C20010F, // 0042 GETMET R8 R0 K15 + 0x0028030C, // 0043 ADD R10 R1 K12 + 0x5C2C0E00, // 0044 MOVE R11 R7 + 0x7C200600, // 0045 CALL R8 3 + 0xA8040001, // 0046 EXBLK 1 1 + 0x7002000A, // 0047 JMP #0053 + 0xAC200001, // 0048 CATCH R8 0 1 + 0x70020007, // 0049 JMP #0052 + 0x60240001, // 004A GETGBL R9 G1 + 0x8C280510, // 004B GETMET R10 R2 K16 + 0x58300011, // 004C LDCONST R12 K17 + 0x0034030C, // 004D ADD R13 R1 K12 + 0x5C381000, // 004E MOVE R14 R8 + 0x7C280800, // 004F CALL R10 4 + 0x7C240200, // 0050 CALL R9 1 + 0x70020000, // 0051 JMP #0053 + 0xB0080000, // 0052 RAISE 2 R0 R0 + 0x5C200E00, // 0053 MOVE R8 R7 + 0x7C200000, // 0054 CALL R8 0 + 0x50200200, // 0055 LDBOOL R8 1 0 + 0x80041000, // 0056 RET 1 R8 + }) + ) +); /*******************************************************************/ /******************************************************************** - "def get_light(l) " - "print('tasmota.get_light() is deprecated, use light.get()') " - "import light " - "if l != nil " - "return light.get(l) " - "else " - "return light.get() " - "end " - "end " +** Solidified function: find_op ********************************************************************/ +be_local_closure(find_op, /* name */ + be_nested_proto( + 13, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("=<>!", -1630497019, 4), + /* K2 */ be_nested_string("chars_in_string", -1146182164, 15), + /* K3 */ be_const_int(0), + /* K4 */ be_nested_string("split", -2017972765, 5), + /* K5 */ be_const_int(1), + }), + (be_nested_const_str("find_op", -528253920, 7)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[42]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0x580C0001, // 0001 LDCONST R3 K1 + 0x8C100102, // 0002 GETMET R4 R0 K2 + 0x5C180200, // 0003 MOVE R6 R1 + 0x5C1C0600, // 0004 MOVE R7 R3 + 0x7C100600, // 0005 CALL R4 3 + 0x28140903, // 0006 GE R5 R4 K3 + 0x78160019, // 0007 JMPF R5 #0022 + 0x8C140504, // 0008 GETMET R5 R2 K4 + 0x5C1C0200, // 0009 MOVE R7 R1 + 0x5C200800, // 000A MOVE R8 R4 + 0x7C140600, // 000B CALL R5 3 + 0x94180B03, // 000C GETIDX R6 R5 K3 + 0x941C0B05, // 000D GETIDX R7 R5 K5 + 0x8C200102, // 000E GETMET R8 R0 K2 + 0x5C280E00, // 000F MOVE R10 R7 + 0x5C2C0600, // 0010 MOVE R11 R3 + 0x50300200, // 0011 LDBOOL R12 1 0 + 0x7C200800, // 0012 CALL R8 4 + 0x5C101000, // 0013 MOVE R4 R8 + 0x28200903, // 0014 GE R8 R4 K3 + 0x7822000B, // 0015 JMPF R8 #0022 + 0x8C200504, // 0016 GETMET R8 R2 K4 + 0x5C280E00, // 0017 MOVE R10 R7 + 0x5C2C0800, // 0018 MOVE R11 R4 + 0x7C200600, // 0019 CALL R8 3 + 0x94241103, // 001A GETIDX R9 R8 K3 + 0x94281105, // 001B GETIDX R10 R8 K5 + 0x602C0012, // 001C GETGBL R11 G18 + 0x7C2C0000, // 001D CALL R11 0 + 0x40301606, // 001E CONNECT R12 R11 R6 + 0x40301609, // 001F CONNECT R12 R11 R9 + 0x4030160A, // 0020 CONNECT R12 R11 R10 + 0x80041600, // 0021 RET 1 R11 + 0x60140012, // 0022 GETGBL R5 G18 + 0x7C140000, // 0023 CALL R5 0 + 0x40180A01, // 0024 CONNECT R6 R5 R1 + 0x4C180000, // 0025 LDNIL R6 + 0x40180A06, // 0026 CONNECT R6 R5 R6 + 0x4C180000, // 0027 LDNIL R6 + 0x40180A06, // 0028 CONNECT R6 R5 R6 + 0x80040A00, // 0029 RET 1 R5 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove_timer +********************************************************************/ +be_local_closure(remove_timer, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_string("tasmota", 424643812, 7), + /* K1 */ be_nested_string("_timers", -1694866380, 7), + /* K2 */ be_const_int(0), + /* K3 */ be_nested_string("size", 597743964, 4), + /* K4 */ be_nested_string("id", 926444256, 2), + /* K5 */ be_nested_string("remove", -611183107, 6), + /* K6 */ be_const_int(1), + }), + (be_nested_const_str("remove_timer", -153495081, 12)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[23]) { /* code */ + 0xB80A0000, // 0000 GETNGBL R2 K0 + 0x88080501, // 0001 GETMBR R2 R2 K1 + 0x780A0012, // 0002 JMPF R2 #0016 + 0x58080002, // 0003 LDCONST R2 K2 + 0xB80E0000, // 0004 GETNGBL R3 K0 + 0x880C0701, // 0005 GETMBR R3 R3 K1 + 0x8C0C0703, // 0006 GETMET R3 R3 K3 + 0x7C0C0200, // 0007 CALL R3 1 + 0x140C0403, // 0008 LT R3 R2 R3 + 0x780E000B, // 0009 JMPF R3 #0016 + 0x880C0101, // 000A GETMBR R3 R0 K1 + 0x940C0602, // 000B GETIDX R3 R3 R2 + 0x880C0704, // 000C GETMBR R3 R3 K4 + 0x1C0C0601, // 000D EQ R3 R3 R1 + 0x780E0004, // 000E JMPF R3 #0014 + 0x880C0101, // 000F GETMBR R3 R0 K1 + 0x8C0C0705, // 0010 GETMET R3 R3 K5 + 0x5C140400, // 0011 MOVE R5 R2 + 0x7C0C0400, // 0012 CALL R3 2 + 0x70020000, // 0013 JMP #0015 + 0x00080506, // 0014 ADD R2 R2 K6 + 0x7001FFED, // 0015 JMP #0004 + 0x80000000, // 0016 RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: get_light ********************************************************************/ - -be_define_local_const_str(get_light_str_name, "get_light", 381930476, 9); -be_define_local_const_str(get_light_str_source, "string", 398550328, 6); -be_define_local_const_str(get_light_str_0, "tasmota.get_light() is deprecated, use light.get()", -769213649, 50); -be_define_local_const_str(get_light_str_1, "light", -493019601, 5); -be_define_local_const_str(get_light_str_2, "get", 1410115415, 3); - -static const bvalue get_light_ktab[3] = { - { { .s=be_local_const_str(get_light_str_0) }, BE_STRING}, - { { .s=be_local_const_str(get_light_str_1) }, BE_STRING}, - { { .s=be_local_const_str(get_light_str_2) }, BE_STRING}, -}; - -static const uint32_t get_light_code[16] = { - 0x6008000F, // 0000 GETGBL R2 G15 - 0x580C0000, // 0001 LDCONST R3 K0 - 0x7C080200, // 0002 CALL R2 1 - 0xA40A0200, // 0003 IMPORT R2 R257 - 0x4C0C0000, // 0004 LDNIL 3 - 0x200C0203, // 0005 NE R3 R1 R3 - 0x780E0004, // 0006 JMPF R3 #000C - 0x8C0C0502, // 0007 GETMET R3 R2 R258 - 0x5C140200, // 0008 MOVE R5 R1 - 0x7C0C0400, // 0009 CALL R3 2 - 0x80040600, // 000A RET 1 R3 - 0x70020002, // 000B JMP #000F - 0x8C0C0502, // 000C GETMET R3 R2 R258 - 0x7C0C0200, // 000D CALL R3 1 - 0x80040600, // 000E RET 1 R3 - 0x80000000, // 000F RET 0 R0 -}; - -static const bproto get_light_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 6, // nstack - 0, // nupvals - 2, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &get_light_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &get_light_code, // code - be_local_const_str(get_light_str_name), // name - 16, // codesize - 3, // nconst - 0, // nproto - be_local_const_str(get_light_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure get_light_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &get_light_proto, // proto - { NULL } // upvals -}; - +be_local_closure(get_light, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("tasmota.get_light() is deprecated, use light.get()", -769213649, 50), + /* K1 */ be_nested_string("light", -493019601, 5), + /* K2 */ be_nested_string("get", 1410115415, 3), + }), + (be_nested_const_str("get_light", 381930476, 9)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[16]) { /* code */ + 0x60080001, // 0000 GETGBL R2 G1 + 0x580C0000, // 0001 LDCONST R3 K0 + 0x7C080200, // 0002 CALL R2 1 + 0xA40A0200, // 0003 IMPORT R2 K1 + 0x4C0C0000, // 0004 LDNIL R3 + 0x200C0203, // 0005 NE R3 R1 R3 + 0x780E0004, // 0006 JMPF R3 #000C + 0x8C0C0502, // 0007 GETMET R3 R2 K2 + 0x5C140200, // 0008 MOVE R5 R1 + 0x7C0C0400, // 0009 CALL R3 2 + 0x80040600, // 000A RET 1 R3 + 0x70020002, // 000B JMP #000F + 0x8C0C0502, // 000C GETMET R3 R2 K2 + 0x7C0C0200, // 000D CALL R3 1 + 0x80040600, // 000E RET 1 R3 + 0x80000000, // 000F RET 0 + }) + ) +); /*******************************************************************/ + /******************************************************************** - - // set_light and get_light deprecetaion - "def set_light(v,l) " - "print('tasmota.set_light() is deprecated, use light.set()') " - "import light " - "if l != nil " - "return light.set(v,l) " - "else " - "return light.set(v) " - "end " - "end " - +** Solidified function: exec_rules ********************************************************************/ +be_local_closure(exec_rules, /* name */ + be_nested_proto( + 12, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_string("_rules", -28750191, 6), + /* K1 */ be_nested_string("json", 916562499, 4), + /* K2 */ be_nested_string("load", -435725847, 4), + /* K3 */ be_nested_string("BRY: ERROR, bad json: ", -1579831487, 22), + /* K4 */ be_const_int(3), + /* K5 */ be_nested_string("keys", -112588595, 4), + /* K6 */ be_nested_string("try_rule", 1986449405, 8), + /* K7 */ be_nested_string("stop_iteration", -121173395, 14), + }), + (be_nested_const_str("exec_rules", 1445221092, 10)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[40]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x780A0023, // 0001 JMPF R2 #0026 + 0xA40A0200, // 0002 IMPORT R2 K1 + 0x8C0C0502, // 0003 GETMET R3 R2 K2 + 0x5C140200, // 0004 MOVE R5 R1 + 0x7C0C0400, // 0005 CALL R3 2 + 0x50100000, // 0006 LDBOOL R4 0 0 + 0x4C140000, // 0007 LDNIL R5 + 0x1C140605, // 0008 EQ R5 R3 R5 + 0x78160004, // 0009 JMPF R5 #000F + 0x60140001, // 000A GETGBL R5 G1 + 0x001A0601, // 000B ADD R6 K3 R1 + 0x581C0004, // 000C LDCONST R7 K4 + 0x7C140400, // 000D CALL R5 2 + 0x70020015, // 000E JMP #0025 + 0x60140010, // 000F GETGBL R5 G16 + 0x88180100, // 0010 GETMBR R6 R0 K0 + 0x8C180D05, // 0011 GETMET R6 R6 K5 + 0x7C180200, // 0012 CALL R6 1 + 0x7C140200, // 0013 CALL R5 1 + 0xA802000C, // 0014 EXBLK 0 #0022 + 0x5C180A00, // 0015 MOVE R6 R5 + 0x7C180000, // 0016 CALL R6 0 + 0x8C1C0106, // 0017 GETMET R7 R0 K6 + 0x5C240600, // 0018 MOVE R9 R3 + 0x5C280C00, // 0019 MOVE R10 R6 + 0x882C0100, // 001A GETMBR R11 R0 K0 + 0x942C1606, // 001B GETIDX R11 R11 R6 + 0x7C1C0800, // 001C CALL R7 4 + 0x741E0001, // 001D JMPT R7 #0020 + 0x74120000, // 001E JMPT R4 #0020 + 0x50100001, // 001F LDBOOL R4 0 1 + 0x50100200, // 0020 LDBOOL R4 1 0 + 0x7001FFF2, // 0021 JMP #0015 + 0x58140007, // 0022 LDCONST R5 K7 + 0xAC140200, // 0023 CATCH R5 1 0 + 0xB0080000, // 0024 RAISE 2 R0 R0 + 0x80040800, // 0025 RET 1 R4 + 0x50080000, // 0026 LDBOOL R2 0 0 + 0x80040400, // 0027 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** -** Solidified function: set_light +** Solidified function: remove_driver ********************************************************************/ +be_local_closure(remove_driver, /* name */ + be_nested_proto( + 6, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("_drivers", -1034638311, 8), + /* K1 */ be_nested_string("find", -1108310694, 4), + /* K2 */ be_nested_string("pop", 1362321360, 3), + }), + (be_nested_const_str("remove_driver", 1030243768, 13)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[14]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x780A000A, // 0001 JMPF R2 #000D + 0x88080100, // 0002 GETMBR R2 R0 K0 + 0x8C080501, // 0003 GETMET R2 R2 K1 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x4C0C0000, // 0006 LDNIL R3 + 0x200C0403, // 0007 NE R3 R2 R3 + 0x780E0003, // 0008 JMPF R3 #000D + 0x880C0100, // 0009 GETMBR R3 R0 K0 + 0x8C0C0702, // 000A GETMET R3 R3 K2 + 0x5C140400, // 000B MOVE R5 R2 + 0x7C0C0400, // 000C CALL R3 2 + 0x80000000, // 000D RET 0 + }) + ) +); +/*******************************************************************/ -be_define_local_const_str(set_light_str_name, "set_light", -1118891144, 9); -be_define_local_const_str(set_light_str_source, "string", 398550328, 6); -be_define_local_const_str(set_light_str_0, "tasmota.set_light() is deprecated, use light.set()", 2124937871, 50); -be_define_local_const_str(set_light_str_1, "light", -493019601, 5); -be_define_local_const_str(set_light_str_2, "set", -970520829, 3); - -static const bvalue set_light_ktab[3] = { - { { .s=be_local_const_str(set_light_str_0) }, BE_STRING}, - { { .s=be_local_const_str(set_light_str_1) }, BE_STRING}, - { { .s=be_local_const_str(set_light_str_2) }, BE_STRING}, -}; - -static const uint32_t set_light_code[18] = { - 0x600C000F, // 0000 GETGBL R3 G15 - 0x58100000, // 0001 LDCONST R4 K0 - 0x7C0C0200, // 0002 CALL R3 1 - 0xA40E0200, // 0003 IMPORT R3 R257 - 0x4C100000, // 0004 LDNIL 4 - 0x20100404, // 0005 NE R4 R2 R4 - 0x78120005, // 0006 JMPF R4 #000D - 0x8C100702, // 0007 GETMET R4 R3 R258 - 0x5C180200, // 0008 MOVE R6 R1 - 0x5C1C0400, // 0009 MOVE R7 R2 - 0x7C100600, // 000A CALL R4 3 - 0x80040800, // 000B RET 1 R4 - 0x70020003, // 000C JMP #0011 - 0x8C100702, // 000D GETMET R4 R3 R258 - 0x5C180200, // 000E MOVE R6 R1 - 0x7C100400, // 000F CALL R4 2 - 0x80040800, // 0010 RET 1 R4 - 0x80000000, // 0011 RET 0 R0 -}; - -static const bproto set_light_proto = { - NULL, // bgcobject *next - 8, // type - 0x08, // marked - 8, // nstack - 0, // nupvals - 3, // argc - 0, // varg - NULL, // bgcobject *gray - NULL, // bupvaldesc *upvals - (bvalue*) &set_light_ktab, // ktab - NULL, // bproto **ptab - (binstruction*) &set_light_code, // code - be_local_const_str(set_light_str_name), // name - 18, // codesize - 3, // nconst - 0, // nproto - be_local_const_str(set_light_str_source), // source -#if BE_DEBUG_RUNTIME_INFO /* debug information */ - NULL, // lineinfo - 0, // nlineinfo -#endif -#if BE_DEBUG_VAR_INFO - NULL, // varinfo - 0, // nvarinfo -#endif -}; - -static const bclosure set_light_closure = { - NULL, // bgcobject *next - 36, // type - 0x08, // marked - 0, // nupvals - NULL, // bgcobject *gray - (bproto*) &set_light_proto, // proto - { NULL } // upvals -}; +/******************************************************************** +** Solidified function: try_rule +********************************************************************/ +be_local_closure(try_rule, /* name */ + be_nested_proto( + 15, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[16]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("find_op", -528253920, 7), + /* K2 */ be_nested_string("split", -2017972765, 5), + /* K3 */ be_const_int(0), + /* K4 */ be_nested_string("#", 638357778, 1), + /* K5 */ be_nested_string("find_key_i", 850136726, 10), + /* K6 */ be_const_int(1), + /* K7 */ be_const_int(2), + /* K8 */ be_nested_string("==", -1863000881, 2), + /* K9 */ be_nested_string("!==", 559817114, 3), + /* K10 */ be_nested_string("=", 940354920, 1), + /* K11 */ be_nested_string("!=", -1866252285, 2), + /* K12 */ be_nested_string(">", 990687777, 1), + /* K13 */ be_nested_string(">=", 284975636, 2), + /* K14 */ be_nested_string("<", 957132539, 1), + /* K15 */ be_nested_string("<=", -1795743310, 2), + }), + (be_nested_const_str("try_rule", 1986449405, 8)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[141]) { /* code */ + 0xA4120000, // 0000 IMPORT R4 K0 + 0x8C140101, // 0001 GETMET R5 R0 K1 + 0x5C1C0400, // 0002 MOVE R7 R2 + 0x7C140400, // 0003 CALL R5 2 + 0x5C180200, // 0004 MOVE R6 R1 + 0x8C1C0902, // 0005 GETMET R7 R4 K2 + 0x94240B03, // 0006 GETIDX R9 R5 K3 + 0x58280004, // 0007 LDCONST R10 K4 + 0x7C1C0600, // 0008 CALL R7 3 + 0x58200003, // 0009 LDCONST R8 K3 + 0x6024000C, // 000A GETGBL R9 G12 + 0x5C280E00, // 000B MOVE R10 R7 + 0x7C240200, // 000C CALL R9 1 + 0x14241009, // 000D LT R9 R8 R9 + 0x7826000C, // 000E JMPF R9 #001C + 0x94240E08, // 000F GETIDX R9 R7 R8 + 0x8C280105, // 0010 GETMET R10 R0 K5 + 0x5C300C00, // 0011 MOVE R12 R6 + 0x5C341200, // 0012 MOVE R13 R9 + 0x7C280600, // 0013 CALL R10 3 + 0x4C2C0000, // 0014 LDNIL R11 + 0x1C2C140B, // 0015 EQ R11 R10 R11 + 0x782E0001, // 0016 JMPF R11 #0019 + 0x502C0000, // 0017 LDBOOL R11 0 0 + 0x80041600, // 0018 RET 1 R11 + 0x94180C0A, // 0019 GETIDX R6 R6 R10 + 0x00201106, // 001A ADD R8 R8 K6 + 0x7001FFED, // 001B JMP #000A + 0x94240B06, // 001C GETIDX R9 R5 K6 + 0x94280B07, // 001D GETIDX R10 R5 K7 + 0x78260066, // 001E JMPF R9 #0086 + 0x1C2C1308, // 001F EQ R11 R9 K8 + 0x782E000A, // 0020 JMPF R11 #002C + 0x602C0008, // 0021 GETGBL R11 G8 + 0x5C300C00, // 0022 MOVE R12 R6 + 0x7C2C0200, // 0023 CALL R11 1 + 0x60300008, // 0024 GETGBL R12 G8 + 0x5C341400, // 0025 MOVE R13 R10 + 0x7C300200, // 0026 CALL R12 1 + 0x202C160C, // 0027 NE R11 R11 R12 + 0x782E0001, // 0028 JMPF R11 #002B + 0x502C0000, // 0029 LDBOOL R11 0 0 + 0x80041600, // 002A RET 1 R11 + 0x70020059, // 002B JMP #0086 + 0x1C2C1309, // 002C EQ R11 R9 K9 + 0x782E000A, // 002D JMPF R11 #0039 + 0x602C0008, // 002E GETGBL R11 G8 + 0x5C300C00, // 002F MOVE R12 R6 + 0x7C2C0200, // 0030 CALL R11 1 + 0x60300008, // 0031 GETGBL R12 G8 + 0x5C341400, // 0032 MOVE R13 R10 + 0x7C300200, // 0033 CALL R12 1 + 0x1C2C160C, // 0034 EQ R11 R11 R12 + 0x782E0001, // 0035 JMPF R11 #0038 + 0x502C0000, // 0036 LDBOOL R11 0 0 + 0x80041600, // 0037 RET 1 R11 + 0x7002004C, // 0038 JMP #0086 + 0x1C2C130A, // 0039 EQ R11 R9 K10 + 0x782E000A, // 003A JMPF R11 #0046 + 0x602C000A, // 003B GETGBL R11 G10 + 0x5C300C00, // 003C MOVE R12 R6 + 0x7C2C0200, // 003D CALL R11 1 + 0x6030000A, // 003E GETGBL R12 G10 + 0x5C341400, // 003F MOVE R13 R10 + 0x7C300200, // 0040 CALL R12 1 + 0x202C160C, // 0041 NE R11 R11 R12 + 0x782E0001, // 0042 JMPF R11 #0045 + 0x502C0000, // 0043 LDBOOL R11 0 0 + 0x80041600, // 0044 RET 1 R11 + 0x7002003F, // 0045 JMP #0086 + 0x1C2C130B, // 0046 EQ R11 R9 K11 + 0x782E000A, // 0047 JMPF R11 #0053 + 0x602C000A, // 0048 GETGBL R11 G10 + 0x5C300C00, // 0049 MOVE R12 R6 + 0x7C2C0200, // 004A CALL R11 1 + 0x6030000A, // 004B GETGBL R12 G10 + 0x5C341400, // 004C MOVE R13 R10 + 0x7C300200, // 004D CALL R12 1 + 0x1C2C160C, // 004E EQ R11 R11 R12 + 0x782E0001, // 004F JMPF R11 #0052 + 0x502C0000, // 0050 LDBOOL R11 0 0 + 0x80041600, // 0051 RET 1 R11 + 0x70020032, // 0052 JMP #0086 + 0x1C2C130C, // 0053 EQ R11 R9 K12 + 0x782E000A, // 0054 JMPF R11 #0060 + 0x602C000A, // 0055 GETGBL R11 G10 + 0x5C300C00, // 0056 MOVE R12 R6 + 0x7C2C0200, // 0057 CALL R11 1 + 0x6030000A, // 0058 GETGBL R12 G10 + 0x5C341400, // 0059 MOVE R13 R10 + 0x7C300200, // 005A CALL R12 1 + 0x182C160C, // 005B LE R11 R11 R12 + 0x782E0001, // 005C JMPF R11 #005F + 0x502C0000, // 005D LDBOOL R11 0 0 + 0x80041600, // 005E RET 1 R11 + 0x70020025, // 005F JMP #0086 + 0x1C2C130D, // 0060 EQ R11 R9 K13 + 0x782E000A, // 0061 JMPF R11 #006D + 0x602C000A, // 0062 GETGBL R11 G10 + 0x5C300C00, // 0063 MOVE R12 R6 + 0x7C2C0200, // 0064 CALL R11 1 + 0x6030000A, // 0065 GETGBL R12 G10 + 0x5C341400, // 0066 MOVE R13 R10 + 0x7C300200, // 0067 CALL R12 1 + 0x142C160C, // 0068 LT R11 R11 R12 + 0x782E0001, // 0069 JMPF R11 #006C + 0x502C0000, // 006A LDBOOL R11 0 0 + 0x80041600, // 006B RET 1 R11 + 0x70020018, // 006C JMP #0086 + 0x1C2C130E, // 006D EQ R11 R9 K14 + 0x782E000A, // 006E JMPF R11 #007A + 0x602C000A, // 006F GETGBL R11 G10 + 0x5C300C00, // 0070 MOVE R12 R6 + 0x7C2C0200, // 0071 CALL R11 1 + 0x6030000A, // 0072 GETGBL R12 G10 + 0x5C341400, // 0073 MOVE R13 R10 + 0x7C300200, // 0074 CALL R12 1 + 0x282C160C, // 0075 GE R11 R11 R12 + 0x782E0001, // 0076 JMPF R11 #0079 + 0x502C0000, // 0077 LDBOOL R11 0 0 + 0x80041600, // 0078 RET 1 R11 + 0x7002000B, // 0079 JMP #0086 + 0x1C2C130F, // 007A EQ R11 R9 K15 + 0x782E0009, // 007B JMPF R11 #0086 + 0x602C000A, // 007C GETGBL R11 G10 + 0x5C300C00, // 007D MOVE R12 R6 + 0x7C2C0200, // 007E CALL R11 1 + 0x6030000A, // 007F GETGBL R12 G10 + 0x5C341400, // 0080 MOVE R13 R10 + 0x7C300200, // 0081 CALL R12 1 + 0x242C160C, // 0082 GT R11 R11 R12 + 0x782E0001, // 0083 JMPF R11 #0086 + 0x502C0000, // 0084 LDBOOL R11 0 0 + 0x80041600, // 0085 RET 1 R11 + 0x5C2C0600, // 0086 MOVE R11 R3 + 0x5C300C00, // 0087 MOVE R12 R6 + 0x94340B03, // 0088 GETIDX R13 R5 K3 + 0x5C380200, // 0089 MOVE R14 R1 + 0x7C2C0600, // 008A CALL R11 3 + 0x502C0200, // 008B LDBOOL R11 1 0 + 0x80041600, // 008C RET 1 R11 + }) + ) +); /*******************************************************************/ /******************************************************************** ** Solidified function: cb_dispatch ********************************************************************/ - -/********** Solidified proto: cb_dispatch */ -be_define_local_const_str(cb_dispatch_str_name, "cb_dispatch", 1741510499, 11); -be_define_local_const_str(cb_dispatch_str_source, "input", -103256197, 5); -be_define_local_const_str(cb_dispatch_str_0, "_cb", -251666929, 3); -be_define_local_const_str(cb_dispatch_str_2, "find", -1108310694, 4); - -static const bvalue cb_dispatch_ktab[3] = { - { { .s=be_local_const_str(cb_dispatch_str_0) }, BE_STRING}, - { { .i=0 }, BE_INT}, - { { .s=be_local_const_str(cb_dispatch_str_2) }, BE_STRING}, -}; - -static const uint32_t cb_dispatch_code[20] = { - 0x88180100, // 0000 GETMBR R6 R0 R256 - 0x4C1C0000, // 0001 LDNIL 7 - 0x1C180C07, // 0002 EQ R6 R6 R7 - 0x781A0000, // 0003 JMPF R6 #0005 - 0x80060200, // 0004 RET 1 R257 - 0x88180100, // 0005 GETMBR R6 R0 R256 - 0x8C180D02, // 0006 GETMET R6 R6 R258 - 0x5C200200, // 0007 MOVE R8 R1 - 0x7C180400, // 0008 CALL R6 2 - 0x4C1C0000, // 0009 LDNIL 7 - 0x201C0C07, // 000A NE R7 R6 R7 - 0x781E0006, // 000B JMPF R7 #0013 - 0x5C1C0C00, // 000C MOVE R7 R6 - 0x5C200400, // 000D MOVE R8 R2 - 0x5C240600, // 000E MOVE R9 R3 - 0x5C280800, // 000F MOVE R10 R4 - 0x5C2C0A00, // 0010 MOVE R11 R5 - 0x7C1C0800, // 0011 CALL R7 4 - 0x80040E00, // 0012 RET 1 R7 - 0x80060200, // 0013 RET 1 R257 -}; - -be_define_local_proto(cb_dispatch, 12, 6, 1, 0, 0); -be_define_local_closure(cb_dispatch); - +be_local_closure(cb_dispatch, /* name */ + be_nested_proto( + 12, /* nstack */ + 6, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("_cb", -251666929, 3), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_string("find", -1108310694, 4), + }), + (be_nested_const_str("cb_dispatch", 1741510499, 11)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[20]) { /* code */ + 0x88180100, // 0000 GETMBR R6 R0 K0 + 0x4C1C0000, // 0001 LDNIL R7 + 0x1C180C07, // 0002 EQ R6 R6 R7 + 0x781A0000, // 0003 JMPF R6 #0005 + 0x80060200, // 0004 RET 1 K1 + 0x88180100, // 0005 GETMBR R6 R0 K0 + 0x8C180D02, // 0006 GETMET R6 R6 K2 + 0x5C200200, // 0007 MOVE R8 R1 + 0x7C180400, // 0008 CALL R6 2 + 0x4C1C0000, // 0009 LDNIL R7 + 0x201C0C07, // 000A NE R7 R6 R7 + 0x781E0006, // 000B JMPF R7 #0013 + 0x5C1C0C00, // 000C MOVE R7 R6 + 0x5C200400, // 000D MOVE R8 R2 + 0x5C240600, // 000E MOVE R9 R3 + 0x5C280800, // 000F MOVE R10 R4 + 0x5C2C0A00, // 0010 MOVE R11 R5 + 0x7C1C0800, // 0011 CALL R7 4 + 0x80040E00, // 0012 RET 1 R7 + 0x80060200, // 0013 RET 1 K1 + }) + ) +); /*******************************************************************/ + /******************************************************************** -** Solidified function: gen_cb +** Solidified function: gc ********************************************************************/ - -/********** Solidified proto: gen_cb */ -be_define_local_const_str(gen_cb_str_name, "gen_cb", -1049739745, 6); -be_define_local_const_str(gen_cb_str_source, "input", -103256197, 5); -be_define_local_const_str(gen_cb_str_0, "_cb", -251666929, 3); -be_define_local_const_str(gen_cb_str_2, "find", -1108310694, 4); -be_define_local_const_str(gen_cb_str_3, "_get_cb", 1448849122, 7); -be_define_local_const_str(gen_cb_str_4, "stop_iteration", -121173395, 14); -be_define_local_const_str(gen_cb_str_5, "internal_error", -1775809127, 14); -be_define_local_const_str(gen_cb_str_6, "No callback available", 633786138, 21); - -static const bvalue gen_cb_ktab[7] = { - { { .s=be_local_const_str(gen_cb_str_0) }, BE_STRING}, - { { .i=0 }, BE_INT}, - { { .s=be_local_const_str(gen_cb_str_2) }, BE_STRING}, - { { .s=be_local_const_str(gen_cb_str_3) }, BE_STRING}, - { { .s=be_local_const_str(gen_cb_str_4) }, BE_STRING}, - { { .s=be_local_const_str(gen_cb_str_5) }, BE_STRING}, - { { .s=be_local_const_str(gen_cb_str_6) }, BE_STRING}, -}; - -static const uint32_t gen_cb_code[34] = { - 0x88080100, // 0000 GETMBR R2 R0 R256 - 0x4C0C0000, // 0001 LDNIL 3 - 0x1C080403, // 0002 EQ R2 R2 R3 - 0x780A0002, // 0003 JMPF R2 #0007 - 0x6008000B, // 0004 GETGBL R2 G11 - 0x7C080000, // 0005 CALL R2 0 - 0x90020002, // 0006 SETMBR R0 R256 R2 - 0x60080000, // 0007 GETGBL R2 G0 - 0x540E0012, // 0008 LDINT R3 19 - 0x400E0203, // 0009 CONNECT R3 R257 R3 - 0x7C080200, // 000A CALL R2 1 - 0xA8020010, // 000B EXBLK 0 #001D - 0x5C0C0400, // 000C MOVE R3 R2 - 0x7C0C0000, // 000D CALL R3 0 - 0x88100100, // 000E GETMBR R4 R0 R256 - 0x8C100902, // 000F GETMET R4 R4 R258 - 0x5C180600, // 0010 MOVE R6 R3 - 0x7C100400, // 0011 CALL R4 2 - 0x4C140000, // 0012 LDNIL 5 - 0x1C100805, // 0013 EQ R4 R4 R5 - 0x78120006, // 0014 JMPF R4 #001C - 0x88100100, // 0015 GETMBR R4 R0 R256 - 0x98100601, // 0016 SETIDX R4 R3 R1 - 0x8C100103, // 0017 GETMET R4 R0 R259 - 0x5C180600, // 0018 MOVE R6 R3 - 0x7C100400, // 0019 CALL R4 2 - 0xA8040001, // 001A EXBLK 1 1 - 0x80040800, // 001B RET 1 R4 - 0x7001FFEE, // 001C JMP #000C - 0x58080004, // 001D LDCONST R2 K4 - 0xAC080200, // 001E CATCH R2 1 0 - 0xB0080000, // 001F RAISE 2 R0 R0 - 0xB0060B06, // 0020 RAISE 1 R261 R262 - 0x80000000, // 0021 RET 0 R0 -}; - -be_define_local_proto(gen_cb, 7, 2, 1, 0, 0); -be_define_local_closure(gen_cb); - +be_local_closure(gc, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_string("gc", 1042313471, 2), + /* K1 */ be_nested_string("collect", -1895928271, 7), + /* K2 */ be_nested_string("allocated", 429986098, 9), + }), + (be_nested_const_str("gc", 1042313471, 2)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[ 6]) { /* code */ + 0xA4060000, // 0000 IMPORT R1 K0 + 0x8C080301, // 0001 GETMET R2 R1 K1 + 0x7C080200, // 0002 CALL R2 1 + 0x8C080302, // 0003 GETMET R2 R1 K2 + 0x7C080200, // 0004 CALL R2 1 + 0x80040400, // 0005 RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: event +********************************************************************/ +be_local_closure(event, /* name */ + be_nested_proto( + 20, /* nstack */ + 6, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[19]) { /* constants */ + /* K0 */ be_nested_string("introspect", 164638290, 10), + /* K1 */ be_nested_string("every_50ms", -1911083288, 10), + /* K2 */ be_nested_string("run_deferred", 371594696, 12), + /* K3 */ be_nested_string("cmd", -158181397, 3), + /* K4 */ be_nested_string("exec_cmd", 493567399, 8), + /* K5 */ be_nested_string("rule", -64077613, 4), + /* K6 */ be_nested_string("exec_rules", 1445221092, 10), + /* K7 */ be_nested_string("gc", 1042313471, 2), + /* K8 */ be_nested_string("_drivers", -1034638311, 8), + /* K9 */ be_const_int(0), + /* K10 */ be_nested_string("get", 1410115415, 3), + /* K11 */ be_nested_string("function", -1630125495, 8), + /* K12 */ be_nested_string("string", 398550328, 6), + /* K13 */ be_nested_string("format", -1180859054, 6), + /* K14 */ be_nested_string("BRY: Exception> '%s' - %s", -2047976332, 25), + /* K15 */ be_const_int(1), + /* K16 */ be_nested_string("save_before_restart", 1253239338, 19), + /* K17 */ be_nested_string("persist", -377883517, 7), + /* K18 */ be_nested_string("save", -855671224, 4), + }), + (be_nested_const_str("event", -30355297, 5)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[81]) { /* code */ + 0xA41A0000, // 0000 IMPORT R6 K0 + 0x1C1C0301, // 0001 EQ R7 R1 K1 + 0x781E0001, // 0002 JMPF R7 #0005 + 0x8C1C0102, // 0003 GETMET R7 R0 K2 + 0x7C1C0200, // 0004 CALL R7 1 + 0x501C0000, // 0005 LDBOOL R7 0 0 + 0x1C200303, // 0006 EQ R8 R1 K3 + 0x78220006, // 0007 JMPF R8 #000F + 0x8C200104, // 0008 GETMET R8 R0 K4 + 0x5C280400, // 0009 MOVE R10 R2 + 0x5C2C0600, // 000A MOVE R11 R3 + 0x5C300800, // 000B MOVE R12 R4 + 0x7C200800, // 000C CALL R8 4 + 0x80041000, // 000D RET 1 R8 + 0x7002003B, // 000E JMP #004B + 0x1C200305, // 000F EQ R8 R1 K5 + 0x78220004, // 0010 JMPF R8 #0016 + 0x8C200106, // 0011 GETMET R8 R0 K6 + 0x5C280800, // 0012 MOVE R10 R4 + 0x7C200400, // 0013 CALL R8 2 + 0x80041000, // 0014 RET 1 R8 + 0x70020034, // 0015 JMP #004B + 0x1C200307, // 0016 EQ R8 R1 K7 + 0x78220003, // 0017 JMPF R8 #001C + 0x8C200107, // 0018 GETMET R8 R0 K7 + 0x7C200200, // 0019 CALL R8 1 + 0x80041000, // 001A RET 1 R8 + 0x7002002E, // 001B JMP #004B + 0x88200108, // 001C GETMBR R8 R0 K8 + 0x7822002C, // 001D JMPF R8 #004B + 0x58200009, // 001E LDCONST R8 K9 + 0x6024000C, // 001F GETGBL R9 G12 + 0x88280108, // 0020 GETMBR R10 R0 K8 + 0x7C240200, // 0021 CALL R9 1 + 0x14241009, // 0022 LT R9 R8 R9 + 0x78260026, // 0023 JMPF R9 #004B + 0x88240108, // 0024 GETMBR R9 R0 K8 + 0x94241208, // 0025 GETIDX R9 R9 R8 + 0x8C280D0A, // 0026 GETMET R10 R6 K10 + 0x5C301200, // 0027 MOVE R12 R9 + 0x5C340200, // 0028 MOVE R13 R1 + 0x7C280600, // 0029 CALL R10 3 + 0x602C0004, // 002A GETGBL R11 G4 + 0x5C301400, // 002B MOVE R12 R10 + 0x7C2C0200, // 002C CALL R11 1 + 0x1C2C170B, // 002D EQ R11 R11 K11 + 0x782E0019, // 002E JMPF R11 #0049 + 0xA802000C, // 002F EXBLK 0 #003D + 0x5C2C1400, // 0030 MOVE R11 R10 + 0x5C301200, // 0031 MOVE R12 R9 + 0x5C340400, // 0032 MOVE R13 R2 + 0x5C380600, // 0033 MOVE R14 R3 + 0x5C3C0800, // 0034 MOVE R15 R4 + 0x5C400A00, // 0035 MOVE R16 R5 + 0x7C2C0A00, // 0036 CALL R11 5 + 0x5C1C1600, // 0037 MOVE R7 R11 + 0x781E0001, // 0038 JMPF R7 #003B + 0xA8040001, // 0039 EXBLK 1 1 + 0x7002000F, // 003A JMP #004B + 0xA8040001, // 003B EXBLK 1 1 + 0x7002000B, // 003C JMP #0049 + 0xAC2C0002, // 003D CATCH R11 0 2 + 0x70020008, // 003E JMP #0048 + 0xA4361800, // 003F IMPORT R13 K12 + 0x60380001, // 0040 GETGBL R14 G1 + 0x8C3C1B0D, // 0041 GETMET R15 R13 K13 + 0x5844000E, // 0042 LDCONST R17 K14 + 0x5C481600, // 0043 MOVE R18 R11 + 0x5C4C1800, // 0044 MOVE R19 R12 + 0x7C3C0800, // 0045 CALL R15 4 + 0x7C380200, // 0046 CALL R14 1 + 0x70020000, // 0047 JMP #0049 + 0xB0080000, // 0048 RAISE 2 R0 R0 + 0x0020110F, // 0049 ADD R8 R8 K15 + 0x7001FFD3, // 004A JMP #001F + 0x1C200310, // 004B EQ R8 R1 K16 + 0x78220002, // 004C JMPF R8 #0050 + 0xA4222200, // 004D IMPORT R8 K17 + 0x8C241112, // 004E GETMET R9 R8 K18 + 0x7C240200, // 004F CALL R9 1 + 0x80040E00, // 0050 RET 1 R7 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: remove_cmd +********************************************************************/ +be_local_closure(remove_cmd, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_string("_ccmd", -2131545883, 5), + /* K1 */ be_nested_string("remove", -611183107, 6), + }), + (be_nested_const_str("remove_cmd", -462651594, 10)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[ 7]) { /* code */ + 0x88080100, // 0000 GETMBR R2 R0 K0 + 0x780A0003, // 0001 JMPF R2 #0006 + 0x88080100, // 0002 GETMBR R2 R0 K0 + 0x8C080501, // 0003 GETMET R2 R2 K1 + 0x5C100200, // 0004 MOVE R4 R1 + 0x7C080400, // 0005 CALL R2 2 + 0x80000000, // 0006 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: exec_cmd +********************************************************************/ +be_local_closure(exec_cmd, /* name */ + be_nested_proto( + 12, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_string("_ccmd", -2131545883, 5), + /* K1 */ be_nested_string("json", 916562499, 4), + /* K2 */ be_nested_string("load", -435725847, 4), + /* K3 */ be_nested_string("find_key_i", 850136726, 10), + /* K4 */ be_nested_string("resolvecmnd", 993361485, 11), + }), + (be_nested_const_str("exec_cmd", 493567399, 8)), + (be_nested_const_str("Tasmota.be", 825809411, 10)), + ( &(const binstruction[27]) { /* code */ + 0x88100100, // 0000 GETMBR R4 R0 K0 + 0x78120016, // 0001 JMPF R4 #0019 + 0xA4120200, // 0002 IMPORT R4 K1 + 0x8C140902, // 0003 GETMET R5 R4 K2 + 0x5C1C0600, // 0004 MOVE R7 R3 + 0x7C140400, // 0005 CALL R5 2 + 0x8C180103, // 0006 GETMET R6 R0 K3 + 0x88200100, // 0007 GETMBR R8 R0 K0 + 0x5C240200, // 0008 MOVE R9 R1 + 0x7C180600, // 0009 CALL R6 3 + 0x4C1C0000, // 000A LDNIL R7 + 0x201C0C07, // 000B NE R7 R6 R7 + 0x781E000B, // 000C JMPF R7 #0019 + 0x8C1C0104, // 000D GETMET R7 R0 K4 + 0x5C240C00, // 000E MOVE R9 R6 + 0x7C1C0400, // 000F CALL R7 2 + 0x881C0100, // 0010 GETMBR R7 R0 K0 + 0x941C0E06, // 0011 GETIDX R7 R7 R6 + 0x5C200C00, // 0012 MOVE R8 R6 + 0x5C240400, // 0013 MOVE R9 R2 + 0x5C280600, // 0014 MOVE R10 R3 + 0x5C2C0A00, // 0015 MOVE R11 R5 + 0x7C1C0800, // 0016 CALL R7 4 + 0x501C0200, // 0017 LDBOOL R7 1 0 + 0x80040E00, // 0018 RET 1 R7 + 0x50100000, // 0019 LDBOOL R4 0 0 + 0x80040800, // 001A RET 1 R4 + }) + ) +); /*******************************************************************/ -#if BE_USE_PRECOMPILED_OBJECT #include "../generate/be_fixed_be_class_tasmota.h" -#endif // Class definition void be_load_tasmota_ntvlib(bvm *vm) { -#if !BE_USE_PRECOMPILED_OBJECT - static const bnfuncinfo members[] = { - { "_rules", NULL }, - { "_timers", NULL }, - { "_ccmd", NULL }, - { "_drivers", NULL }, - { "_cb", NULL}, - { "wire1", NULL }, - { "wire2", NULL }, - { "get_free_heap", l_getFreeHeap }, - { "publish", l_publish }, - { "_cmd", l_cmd }, - { "_get_cb", l_get_cb }, - { "get_option", l_getoption }, - { "millis", l_millis }, - { "time_reached", l_timereached }, - { "rtc", l_rtc }, - { "time_dump", l_time_dump }, - { "memory", l_memory }, - { "yield", l_yield }, - { "delay", l_delay }, - { "scale_uint", l_scaleuint }, - { "log", l_logInfo }, - { "save", l_save }, - - { "resp_cmnd", l_respCmnd }, - { "resp_cmnd_str", l_respCmndStr }, - { "resp_cmnd_done", l_respCmndDone }, - { "resp_cmnd_error", l_respCmndError }, - { "resp_cmnd_failed", l_respCmndFailed }, - { "resolvecmnd", l_resolveCmnd }, - - { "response_append", l_respAppend }, - { "web_send", l_webSend }, - { "web_send_decimal", l_webSendDecimal }, - - { "get_power", l_getpower }, - { "set_power", l_setpower }, - - { "i2c_enabled", l_i2cenabled }, - - { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ - { "cmd", (bntvfunc) &cmd_closure }, - { "chars_in_string", (bntvfunc) &chars_in_string_closure }, - { "find_key_i", (bntvfunc) &find_key_i_closure }, - { "find_op", (bntvfunc) &find_op_closure }, - { "add_rule", (bntvfunc) &add_rule_closure }, - { "remove_rule", (bntvfunc) &remove_rule_closure }, - { "try_rule", (bntvfunc) &try_rule_closure }, - { "exec_rules", (bntvfunc) &exec_rules_closure }, - { "set_timer", (bntvfunc) &set_timer_closure }, - { "run_deferred", (bntvfunc) &run_deferred_closure }, - { "add_cmd", (bntvfunc) &add_cmd_closure }, - { "remove_cmd", (bntvfunc) &remove_cmd_closure }, - { "exec_cmd", (bntvfunc) &exec_cmd_closure }, - { "gc", (bntvfunc) &gc_closure }, - { "event", (bntvfunc) &event_closure }, - { "add_driver", (bntvfunc) &add_driver_closure }, - { "load", (bntvfunc) &load_closure }, - { "wire_scan", (bntvfunc) &wire_scan_closure }, - { "time_str", (bntvfunc) &time_str_closure }, - - // callbacks - { "cb_dispatch", (bntvfunc) &cb_dispatch_closure }, - { "gen_cb", (bntvfunc) &gen_cb_closure }, - - // deprecated - { "get_light", (bntvfunc) &get_light_closure }, - { "set_light", (bntvfunc) &set_light_closure }, - - { NULL, NULL } - }; - be_regclass(vm, "Tasmota", members); -#else be_pushntvclass(vm, &be_class_tasmota); be_setglobal(vm, "Tasmota"); be_pop(vm, 1); -#endif } /* @const_object_info_begin @@ -2485,9 +1622,16 @@ class be_class_tasmota (scope: global, name: Tasmota) { _cb, var wire1, var wire2, var + global, var + + _global_def, comptr(&be_tasmota_global_struct) + _global_addr, comptr(&TasmotaGlobal) + + init, closure(init_closure) get_free_heap, func(l_getFreeHeap) publish, func(l_publish) + publish_result, func(l_publish_result) _cmd, func(l_cmd) _get_cb, func(l_get_cb) get_option, func(l_getoption) @@ -2495,7 +1639,10 @@ class be_class_tasmota (scope: global, name: Tasmota) { time_reached, func(l_timereached) rtc, func(l_rtc) time_dump, func(l_time_dump) + strftime, func(l_strftime) memory, func(l_memory) + wifi, func(l_wifi) + eth, func(l_eth) yield, func(l_yield) delay, func(l_delay) scale_uint, func(l_scaleuint) @@ -2515,6 +1662,7 @@ class be_class_tasmota (scope: global, name: Tasmota) { get_power, func(l_getpower) set_power, func(l_setpower) + get_switch, func(l_getswitch) i2c_enabled, func(l_i2cenabled) @@ -2528,12 +1676,14 @@ class be_class_tasmota (scope: global, name: Tasmota) { exec_rules, closure(exec_rules_closure) set_timer, closure(set_timer_closure) run_deferred, closure(run_deferred_closure) + remove_timer, closure(remove_timer_closure) add_cmd, closure(add_cmd_closure) remove_cmd, closure(remove_cmd_closure) exec_cmd, closure(exec_cmd_closure) gc, closure(gc_closure) event, closure(event_closure) add_driver, closure(add_driver_closure) + remove_driver, closure(remove_driver_closure) load, closure(load_closure) wire_scan, closure(wire_scan_closure) time_str, closure(time_str_closure) diff --git a/lib/libesp32/Berry/default/be_timer_class.c b/lib/libesp32/Berry/default/be_timer_class.c new file mode 100644 index 000000000..e6c495851 --- /dev/null +++ b/lib/libesp32/Berry/default/be_timer_class.c @@ -0,0 +1,110 @@ +/******************************************************************** + * Tasmota lib + * + * class Timer + *******************************************************************/ +#include "be_constobj.h" + +/******************************************************************** +** Solidified function: tostring +********************************************************************/ +be_local_closure(tostring, /* name */ + be_nested_proto( + 10, /* nstack */ + 1, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_string("string", 398550328, 6), + /* K1 */ be_nested_string("format", -1180859054, 6), + /* K2 */ be_nested_string(" f(self, cmd, idx, payload, payload_json)) + end +end diff --git a/lib/libesp32/Berry/default/embedded/Tasmota.be b/lib/libesp32/Berry/default/embedded/Tasmota.be index 05c764c56..17a49c740 100644 --- a/lib/libesp32/Berry/default/embedded/Tasmota.be +++ b/lib/libesp32/Berry/default/embedded/Tasmota.be @@ -1,72 +1,389 @@ #- Native code used for testing and code solidification -# #- Do not use it -# -class Tasmota2 : Tasmota +class Timer + var due, f, id + def init(due, f, id) + self.due = due + self.f = f + self.id = id + end + def tostring() + import string + return string.format(" int`` + # looks for any char in c, and return the position of the first char + # or -1 if not found + # inv is optional and inverses the behavior, i.e. look for chars not in the list + def chars_in_string(s,c,inv) + var inverted = inv ? true : false + var i = 0 + while i < size(s) + # for i:0..size(s)-1 + var found = false + var j = 0 + while j < size(c) + # for j:0..size(c)-1 + if s[i] == c[j] found = true end + j += 1 + end + if inverted != found return i end + i += 1 + end + return -1 + end + + # find a key in map, case insensitive, return actual key or nil if not found + def find_key_i(m,keyi) + import string + var keyu = string.toupper(keyi) + if classof(m) == map + for k:m.keys() + if string.toupper(k)==keyu || keyi=='?' + return k + end + end + end + end + + + # split the item when there is an operator, returns a list of (left,op,right) + # ex: "Dimmer>50" -> ["Dimmer",tasmota_gt,"50"] + def find_op(item) + import string + var op_chars = '=<>!' + var pos = self.chars_in_string(item, op_chars) + if pos >= 0 + var op_split = string.split(item,pos) + var op_left = op_split[0] + var op_rest = op_split[1] + pos = self.chars_in_string(op_rest, op_chars, true) + if pos >= 0 + var op_split2 = string.split(op_rest,pos) + var op_middle = op_split2[0] + var op_right = op_split2[1] + return [op_left,op_middle,op_right] + end + end + return [item, nil, nil] + end + + # Rules + def add_rule(pat,f) + if !self._rules + self._rules={} + end + if type(f) == 'function' + self._rules[pat] = f + else + raise 'value_error', 'the second argument is not a function' + end + end + + def remove_rule(pat) + if self._rules + self._rules.remove(pat) + end + end + + # Rules trigger if match. return true if match, false if not + def try_rule(event, rule, f) + import string + var rl_list = self.find_op(rule) + var sub_event = event + var rl = string.split(rl_list[0],'#') + var i = 0 + while i < size(rl) + # for it:rl + var it = rl[i] + var found=self.find_key_i(sub_event,it) + if found == nil return false end + sub_event = sub_event[found] + i += 1 + end + var op=rl_list[1] + var op2=rl_list[2] + if op + if op=='==' + if str(sub_event) != str(op2) return false end + elif op=='!==' + if str(sub_event) == str(op2) return false end + elif op=='=' + if real(sub_event) != real(op2) return false end + elif op=='!=' + if real(sub_event) == real(op2) return false end + elif op=='>' + if real(sub_event) <= real(op2) return false end + elif op=='>=' + if real(sub_event) < real(op2) return false end + elif op=='<' + if real(sub_event) >= real(op2) return false end + elif op=='<=' + if real(sub_event) > real(op2) return false end + end + end + f(sub_event, rl_list[0], event) + return true + end + + # Run rules, i.e. check each individual rule + # Returns true if at least one rule matched, false if none + def exec_rules(ev_json) + if self._rules + import json + var ev = json.load(ev_json) + var ret = false + if ev == nil + print('BRY: ERROR, bad json: '+ev_json, 3) + else + for r: self._rules.keys() + ret = self.try_rule(ev,r,self._rules[r]) || ret + end + end + return ret + end + return false + end + + def set_timer(delay,f,id) + if !self._timers self._timers=[] end + self._timers.push(Timer(self.millis(delay),f,id)) + end + + # run every 50ms tick + def run_deferred() + if self._timers + var i=0 + while i wire1 or wire2 or nil + # scan for the first occurrence of the addr, starting with bus1 then bus2 + # optional: skip if index is disabled via I2CEnable + def wire_scan(addr,idx) + # skip if the I2C index is disabled + if idx != nil && !self.i2c_enabled(idx) return nil end + if self.wire1.detect(addr) return self.wire1 end + if self.wire2.detect(addr) return self.wire2 end + return nil + end + + def time_str(time) + import string + var tm = self.time_dump(time) + return string.format("%04d-%02d-%02dT%02d:%02d:%02d", tm['year'], tm['month'], tm['day'], tm['hour'], tm['min'], tm['sec']) + end def load(f) import string + import path + + # if the filename has no '.' append '.be' + if string.find(f, '.') < 0 + f += ".be" + end # check that the file ends with '.be' of '.bec' var fl = string.split(f,'.') if (size(fl) <= 1 || (fl[-1] != 'be' && fl[-1] != 'bec')) raise "io_error", "file extension is not '.be' or '.bec'" end - var native = f[size(f)-1] == 'c' - # load - works the same for .be and .bec - # try if file exists - try - var ff = open(f, 'r') - ff.close() - except 'io_error' - return false # signals that file does not exist + var is_bytecode = f[-1] == 'c' # file is Berry source and not bytecode + var f_time = path.last_modified(f) + + if is_bytecode + if f_time == nil return false end # file does not exist + # f is the right file, continue + else + var f_time_bc = path.last_modified(f + "c") # timestamp for bytecode + if f_time == nil && f_time_bc == nil return false end + if f_time_bc != nil && (f_time == nil || f_time_bc >= f_time) + # bytecode exists and is more recent than berry source, use bytecode + ##### temporarily disable loading from bec file + # f = f + "c" # use bytecode name + is_bytecode = true + end end - - var c = compile(f,'file') + + var c = compile(f, 'file') # save the compiled bytecode - if !native + if !is_bytecode try - self.save(f+'c', c) + self.save(f + 'c', c) except .. as e - self.log(string.format('BRY: could not save compiled file %s (%s)',f+'c',e)) + print(string.format('BRY: could not save compiled file %s (%s)',f+'c',e)) end end # call the compiled code c() # call successfuls return true - end - def event(type, cmd, idx, payload) - if type=='cmd' return self.exec_cmd(cmd, idx, payload) - elif type=='rule' return self.exec_rules(payload) - elif type=='mqtt_data' return nil - elif type=='gc' return self.gc() - elif type=='every_50ms' return self.run_deferred() + def event(event_type, cmd, idx, payload, raw) + import introspect + if event_type=='every_50ms' self.run_deferred() end #- first run deferred events -# + + var done = false + if event_type=='cmd' return self.exec_cmd(cmd, idx, payload) + elif event_type=='rule' return self.exec_rules(payload) + elif event_type=='gc' return self.gc() elif self._drivers - for d:self._drivers - try - if type=='every_second' && d.every_second d.every_second() - elif type=='every_100ms' && d.every_100ms d.every_100ms() - elif type=='web_add_button' && d.web_add_button d.web_add_button() - elif type=='web_add_main_button' && d.web_add_main_button d.web_add_main_button() - elif type=='save_before_restart' && d.save_before_restart d.save_before_restart() - elif type=='web_add_handler' && d.web_add_handler d.web_add_handler() - elif type=='web_sensor' && d.web_sensor d.web_sensor() - elif type=='json_append' && d.json_append d.json_append() - elif type=='button_pressed' && d.button_pressed d.button_pressed() - elif type=='web_add_handler' && d.display d.display() - elif type=='display' && d.display d.display() + var i = 0 + while i < size(self._drivers) + #for d:self._drivers + var d = self._drivers[i] + var f = introspect.get(d, event_type) # try to match a function or method with the same name + if type(f) == 'function' + try + done = f(d, cmd, idx, payload, raw) + if done break end + except .. as e,m + import string + print(string.format("BRY: Exception> '%s' - %s", e, m)) end - except .. as e,m - import string - self.log(string.format('BRY: exception %s - %m',3)) end + i += 1 + end + end + + # save persist + if event_type=='save_before_restart' + import persist + persist.save() + end + + return done + end + + def add_driver(d) + if self._drivers + self._drivers.push(d) + else + self._drivers = [d] + end + end + + def remove_driver(d) + if self._drivers + var idx = self._drivers.find(d) + if idx != nil + self._drivers.pop(idx) end end end + # cmd high-level function + def cmd(command) + import json + var ret = self._cmd(command) + var j = json.load(ret) + if type(j) == 'instance' + return j + else + return {'response':j} + end + end + + # set_light and get_light deprecetaion + def get_light(l) + print('tasmota.get_light() is deprecated, use light.get()') + import light + if l != nil + return light.get(l) + else + return light.get() + end + end + def set_light(v,l) + print('tasmota.set_light() is deprecated, use light.set()') + import light + if l != nil + return light.set(v,l) + else + return light.set(v) + end + end + + #- dispatch callback number n, with parameters v0,v1,v2,v3 -# def cb_dispatch(n,v0,v1,v2,v3) if self._cb == nil return 0 end @@ -91,4 +408,3 @@ class Tasmota2 : Tasmota end end -tasmota = Tasmota2() \ No newline at end of file diff --git a/lib/libesp32/Berry/default/embedded/Wire.be b/lib/libesp32/Berry/default/embedded/Wire.be new file mode 100644 index 000000000..a5e28ddd8 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/Wire.be @@ -0,0 +1,25 @@ +#- Native code used for testing and code solidification -# +#- Do not use it -# + +class Wire + var bus + + def read_bytes(addr,reg,size) + self._begin_transmission(addr) + self._write(reg) + self._end_transmission(false) + self._request_from(addr,size) + var ret=bytes(size) + while (self._available()) + ret..self._read() + end + return ret + end + + def write_bytes(addr,reg,b) + self._begin_transmission(addr) + self._write(reg) + self._write(b) + self._end_transmission() + end +end diff --git a/lib/libesp32/Berry/default/embedded/i2c_axp192.be b/lib/libesp32/Berry/default/embedded/i2c_axp192.be new file mode 100644 index 000000000..3d958334f --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/i2c_axp192.be @@ -0,0 +1,176 @@ +#------------------------------------------------------------- + - Generic driver for AXP192 - solidified + -------------------------------------------------------------# +class AXP192 : I2C_Driver + def init() + super(self, I2C_Driver).init("AXP192", 0x34) + end + + # Return True = Battery Exist + def battery_present() + if self.wire.read(self.addr, 0x01, 1) & 0x20 return true + else return false + end + end + + # Input Power Status ??? + def get_input_power_status() + return self.wire.read(self.addr, 0x00, 1) + end + + # Battery Charging Status + def get_battery_chargin_status() + return self.wire.read(self.addr, 0x01, 1) + end + + # AXP chip temperature in °C + def get_temp() + return self.read12(0x5E) * 0.1 - 144.7 + end + + def get_bat_power() + return self.read24(0x70) * 0.00055 + end + + def get_bat_voltage() + return self.read12(0x78) * 0.0011 + end + def get_bat_current() + return (self.read13(0x7A) - self.read13(0x7C)) * 0.5 + end + def get_bat_charge_current() + return self.read13(0x7A) * 0.5 + end + def get_aps_voltage() + return self.read12(0x7E) * 0.0014 + end + def get_vbus_voltage() + return self.read12(0x5A) * 0.0017 + end + def get_vbus_current() + return self.read12(0x5C) * 0.375 + end + + # set LDO voltage + # ldo: 2/3 + # voltage: (mV) 1800mV - 3300mV in 100mV steps + def set_ldo_voltage(ldo, voltage) + if voltage > 3300 voltage = 15 + else voltage = (voltage / 100) - 18 + end + + if ldo == 2 + self.write8(0x28, self.read8(0x28) & 0x0F | ((voltage & 0x0F) << 4)) + end + if ldo == 3 + self.write8(0x28, self.read8(0x28) & 0xF0 | (voltage & 0x0F)) + end + end + + # set DCDC enable, 1/2/3 + def set_dcdc_enable(dcdc, state) + if dcdc == 1 self.write_bit(0x12, 0, state) end + if dcdc == 2 self.write_bit(0x12, 4, state) end + if dcdc == 3 self.write_bit(0x12, 1, state) end + end + + # set LDO enable, 2/3 (LDO 1 is always on) + def set_ldo_enable(ldo, state) + if ldo == 2 self.write_bit(0x12, 2, state) end + if ldo == 3 self.write_bit(0x12, 3, state) end + end + + # set GPIO output state 0/1/2 and 3/4 + def write_gpio(gpio, state) + if gpio >= 0 && gpio <= 2 + self.write_bit(0x94, gpio, state) + elif gpio >= 3 && gpio <= 4 + self.write_bit(0x96, gpio - 3, state) + end + end + + # Set voltage on DC-DC1/2/3 + # dcdc: 1/2/3 (warning some C libs start at 0) + # voltage: + def set_dc_voltage(dcdc, voltage) + if dcdc < 1 || dcdc > 3 return end + var v + if voltage < 700 v = 0 + elif voltage > 3500 v = 112 + elif dcdc == 2 && voltage > 2275 v = 63 # dcdc2 is limited to 2.275V + else v = (voltage - 700) / 25 + end + + var addr = 0x26 + if dcdc == 3 addr = 0x27 + elif dcdc == 2 addr = 0x23 + end + + self.write8(addr, self.read8(addr) & 0x80 | (v & 0x7F)) + end + + # Set charging current + # 100mA = 0 + # 190mA = 1 + # 280mA = 2 + # 360mA = 3 + # 450mA = 4 + # 550mA = 5 + # 630mA = 6 + # 700mA = 7 + # 780mA = 8 + # 880mA = 9 + # 960mA = 10 + # 1000mA = 11 + # 1080mA = 12 + # 1160mA = 13 + # 1240mA = 14 + # 1320mA = 15 + def set_chg_current(current_code) + self.write8(0x33, self.read8(0x33) & 0xF0 | (current_code & 0x0F)) + end + + # // Low Volt Level 1, when APS Volt Output < 3.4496 V + # // Low Volt Level 2, when APS Volt Output < 3.3992 V, then this flag is SET (0x01) + # // Flag will reset once battery volt is charged above Low Volt Level 1 + # // Note: now AXP192 have the Shutdown Voltage of 3.0V (B100) Def in REG 31H + def get_warning_level() + return self.read12(0x47) & 1 + end + + #- trigger a read every second -# + # def every_second() + # if !self.wire return nil end #- exit if not initialized -# + # end + + #- display sensor value in the web UI -# + def web_sensor() + if !self.wire return nil end #- exit if not initialized -# + import string + var msg = string.format( + "{s}VBus Voltage{m}%.3f V{e}".. + "{s}VBus Current{m}%.1f mA{e}".. + "{s}Batt Voltage{m}%.3f V{e}".. + "{s}Batt Current{m}%.1f mA{e}".. + #"{s}Batt Power{m}%.3f{e}".. + "{s}Temp AXP{m}%.1f °C{e}", + self.get_vbus_voltage(), self.get_vbus_voltage(), + self.get_bat_voltage(), self.get_bat_current(), + #self.get_bat_power(), + self.get_temp() + ) + tasmota.web_send_decimal(msg) + end + + #- add sensor value to teleperiod -# + def json_append() + if !self.wire return nil end #- exit if not initialized -# + # import string + # var ax = int(self.accel[0] * 1000) + # var ay = int(self.accel[1] * 1000) + # var az = int(self.accel[2] * 1000) + # var msg = string.format(",\"MPU6886\":{\"AX\":%i,\"AY\":%i,\"AZ\":%i,\"GX\":%i,\"GY\":%i,\"GZ\":%i}", + # ax, ay, az, self.gyro[0], self.gyro[1], self.gyro[2]) + # tasmota.response_append(msg) + end +end diff --git a/lib/libesp32/Berry/default/embedded/i2c_driver.be b/lib/libesp32/Berry/default/embedded/i2c_driver.be new file mode 100644 index 000000000..a3210b766 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/i2c_driver.be @@ -0,0 +1,104 @@ +#------------------------------------------------------------- + - IMPORTANT + - THIS CLASS IS ALREADY BAKED IN TASMOTA + - + - It is here for debugging and documentation purpose only + -------------------------------------------------------------# + +#------------------------------------------------------------- + - I2C_Driver class to simplify development of I2C drivers + - + - I2C_Driver(name, addr [, i2c_index]) -> nil + - name: name of I2C device for logging, or function to detect the model + - addr: I2C address of device, will probe all I2C buses for it + - i2c_index: (optional) check is the device is not disabled + -------------------------------------------------------------# + +class I2C_Driver : Driver + var wire #- wire object to reach the device, if nil then the module is not initialized -# + var addr #- I2C address of the device -# + var name #- model namme of the device, cannot be nil -# + + #- Init and look for device + - Input: + - name_or_detect : name of the device (if string) + or function to detect the precise model(if function) + the function is passed a single argument `self` + and must return a string, or `nil` if the device is invalid + - addr : I2C address of device (int 0..255) + - i2c_index : Tasmota I2C index, see `I2CDEVICES.md` (int) + --# + def init(name_or_detect, addr, i2c_index) + var tasmota = self.get_tasmota() #- retrieve the 'tasmota' singleton -# + + #- check if the i2c index is disabled by Tasmota configuration -# + if i2c_index != nil && !tasmota.i2c_enabled(i2c_index) return end + + self.addr = addr #- address for AXP192 -# + self.wire = tasmota.wire_scan(self.addr) #- get the right I2C bus -# + + if self.wire + #- find name of device, can be a string or a method -# + if type(name_or_detect) == 'function' + self.name = name_or_detect(self) + else + self.name = name_or_detect + end + #- if name is invalid, it means we can't detect device, abort -# + if self.name == nil self.wire = nil end + + if self.wire + print("I2C:", self.name, "detected on bus", self.wire.bus) + end + end + end + + #- write register with 8 bits value -# + def write8(reg, val) + return self.wire.write(self.addr, reg, val, 1) + end + + # Set or clear a specific bit in a register + # write_bit(reg:int, bit:int, state:bool) -> nil + # reg: I2C register number (0..255) + # bit: bit of I2C register to change (0..7) + # state: boolean value to write to specified bit + def write_bit(reg, bit, state) + if bit < 0 || bit > 7 return end + var mark = 1 << bit + if state self.write8(reg, self.read8(reg) | mark) + else self.write8(reg, self.read8(reg) & (0xFF - mark)) + end + end + + # read 8 bits + def read8(reg) + return self.wire.read(self.addr, reg, 1) + end + # read 12 bits + def read12(reg) + var buf = self.wire.read_bytes(self.addr, reg, 2) + return (buf[0] << 4) + buf[1] + end + # read 13 bits + def read13(reg) + var buf = self.wire.read_bytes(self.addr, reg, 2) + return (buf[0] << 5) + buf[1] + end + # read 24 bits + def read24(reg) + var buf = self.wire.read_bytes(self.addr, reg, 3) + return (buf[0] << 16) + (buf[1] << 8) + buf[2] + end + # read 32 bits + def read32(reg) + var buf = self.wire.read_bytes(self.addr, reg, 4) + return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3] + end +end + +#- Example + +d = I2C_Driver("MPU", 0x68, 58) + +-# \ No newline at end of file diff --git a/lib/libesp32/Berry/default/embedded/lv_clock_icon.be b/lib/libesp32/Berry/default/embedded/lv_clock_icon.be new file mode 100644 index 000000000..9dde54e40 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/lv_clock_icon.be @@ -0,0 +1,54 @@ +#- LVGL lv_clock_icon + - +--# + +class lv_clock_icon: lv_label + var hour, minute, sec + + def init(parent, copy) + super(self).init(parent, copy) + var f_s7_16 = lv.seg7_font(16) + if f_s7_16 != nil self.set_style_text_font(f_s7_16, lv.PART_MAIN | lv.STATE_DEFAULT) end + + if parent != nil + var parent_height = parent.get_height() + + self.set_text("--:--") + self.refr_size() + var w = self.get_width() + self.set_y((parent.get_height() - self.get_height()) / 2) # center vertically + + var pad_right = parent.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_x(parent.get_width() - w - pad_right - 3) + parent.set_style_pad_right(pad_right + w + 6, lv.PART_MAIN | lv.STATE_DEFAULT) + + self.set_style_bg_color(lv_color(lv.COLOR_BLACK), lv.PART_MAIN | lv.STATE_DEFAULT) + end + + tasmota.add_driver(self) + end + + def set_time(hour, minute, sec) + import string + if hour != self.hour || minute != self.minute || sec != self.sec + var txt = string.format("%02d%s%02d", hour, sec % 2 ? ":" : " ", minute) + self.hour = hour + self.minute = minute + self.sec = sec + #if txt[0] == '0' txt = '!' .. string.split(txt,1)[1] end # replace first char with '!' + self.set_text(txt) + end + end + + def every_second() + var now = tasmota.time_dump(tasmota.rtc()['local']) + if now['year'] != 1970 + self.set_time(now['hour'], now['min'], now['sec']) + end + end + + def del() + super(self).del() + tasmota.remove_driver(self) + end +end \ No newline at end of file diff --git a/lib/libesp32/Berry/default/embedded/lv_signal_arcs.be b/lib/libesp32/Berry/default/embedded/lv_signal_arcs.be new file mode 100644 index 000000000..1170035d4 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/lv_signal_arcs.be @@ -0,0 +1,133 @@ +#- LVGL lv_signal_bars and lv_wifi_bars + - +--# + +class lv_signal_arcs : lv_obj + var percentage # value to display, range 0..100 + var p1, p2, area, line_dsc # instances of objects kept to avoid re-instanciating at each call + + def init(parent) + # init custom widget (don't call super constructor) + _lvgl.create_custom_widget(self, parent) + # own values + self.percentage = 100 + # pre-allocate buffers + self.p1 = lv_point() + self.p2 = lv_point() + self.area = lv_area() + self.line_dsc = lv_draw_line_dsc() + end + + def widget_event(cl, event) + # Call the ancestor's event handler + if lv.obj_event_base(cl, event) != lv.RES_OK return end + var code = event.code + + import math + def atleast1(x) if x >= 1 return x else return 1 end end + # the model is that we have 4 bars and inter-bar (1/4 of width) + var height = self.get_height() + var width = self.get_width() + + var inter_bar = atleast1(height / 8) + var bar = atleast1((height - inter_bar * 2) / 3) + var bar_offset = bar / 2 + #print("inter_bar", inter_bar, "bar", bar, "bar_offset", bar_offset) + + if code == lv.EVENT_DRAW_MAIN + var clip_area = lv_area(event.param) + + # get coordinates of object + self.get_coords(self.area) + var x_ofs = self.area.x1 + var y_ofs = self.area.y1 + + lv.draw_line_dsc_init(self.line_dsc) # initialize lv_draw_line_dsc structure + self.init_draw_line_dsc(lv.PART_MAIN, self.line_dsc) # copy the current values + + self.line_dsc.round_start = 1 + self.line_dsc.round_end = 1 + self.line_dsc.width = (bar * 3 + 1) / 4 + var on_color = self.get_style_line_color(lv.PART_MAIN | lv.STATE_DEFAULT) + var off_color = self.get_style_bg_color(lv.PART_MAIN | lv.STATE_DEFAULT) + + # initial calculation, but does not take into account bounding box + # var angle = int(math.deg(math.atan2(width / 2, height))) + + # better calculation + var hypotenuse = height - bar # center if at bar/2 from bottom and circle stops at bar/2 from top + var adjacent = width / 2 - bar_offset # stop at bar_offset from side + var angle = int(90 - math.deg(math.acos(real(adjacent) / real(hypotenuse)))) + if (angle > 45) angle = 45 end + + # print("hypotenuse",hypotenuse,"adjacent",adjacent,"angle",angle) + self.p1.x = x_ofs + width / 2 + self.p1.y = y_ofs + height - 1 - bar_offset + + self.line_dsc.color = self.percentage >= 25 ? on_color : off_color + lv.draw_arc(self.p1.x, self.p1.y, 0 * (bar + inter_bar) + bar_offset, 0, 360, clip_area, self.line_dsc) + self.line_dsc.color = self.percentage >= 50 ? on_color : off_color + lv.draw_arc(self.p1.x, self.p1.y, 1 * (bar + inter_bar) + bar_offset - 1, 270 - angle, 270 + angle, clip_area, self.line_dsc) + self.line_dsc.color = self.percentage >= 75 ? on_color : off_color + lv.draw_arc(self.p1.x, self.p1.y, 2 * (bar + inter_bar) + bar_offset - 2, 270 - angle, 270 + angle, clip_area, self.line_dsc) + + #elif mode == lv.DESIGN_DRAW_POST # commented since we don't want a frame around this object + # self.ancestor_design.call(self, clip_area, mode) + end + end + + def set_percentage(v) + var old_bars = self.percentage / 25 + if v > 100 v = 100 end + if v < 0 v = 0 end + self.percentage = v + if old_bars != v / 25 + self.invalidate() # be frugal and avoid updating the widget if it's not needed + end + end + + def get_percentage() + return self.percentage + end +end + +class lv_wifi_arcs: lv_signal_arcs + def init(parent) + super(self).init(parent) + tasmota.add_driver(self) + self.set_percentage(0) # we generally start with 0, meaning not connected + end + + def every_second() + var wifi = tasmota.wifi() + var quality = wifi.find("quality") + var ip = wifi.find("ip") + if ip == nil + self.set_percentage(0) + elif quality != nil + self.set_percentage(quality) + end + end + + def del() + super(self).del() + tasmota.remove_driver(self) + end +end + +class lv_wifi_arcs_icon: lv_wifi_arcs + def init(parent) + super(self).init(parent) + self.set_style_line_color(lv_color(lv.COLOR_WHITE), lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_style_bg_color(lv_color(lv.COLOR_BLACK), lv.PART_MAIN | lv.STATE_DEFAULT) + if parent != nil + var parent_height = parent.get_height() + var pad_right = parent.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_height(parent_height) + var w = (parent_height*4)/3 + self.set_width(w) # 130% + self.set_x(parent.get_width() - w - pad_right) + parent.set_style_pad_right(pad_right + w + 1, lv.PART_MAIN | lv.STATE_DEFAULT) + end + end +end \ No newline at end of file diff --git a/lib/libesp32/Berry/default/embedded/lv_signal_bars.be b/lib/libesp32/Berry/default/embedded/lv_signal_bars.be new file mode 100644 index 000000000..acce47f93 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/lv_signal_bars.be @@ -0,0 +1,118 @@ +#- LVGL lv_signal_bars and lv_wifi_bars + - +--# + +class lv_signal_bars : lv_obj + var percentage # value to display, range 0..100 + var p1, p2, area, line_dsc # instances of objects kept to avoid re-instanciating at each call + + def init(parent) + # init custom widget (don't call super constructor) + _lvgl.create_custom_widget(self, parent) + # own values + self.percentage = 100 + # pre-allocate buffers + self.p1 = lv_point() + self.p2 = lv_point() + self.area = lv_area() + self.line_dsc = lv_draw_line_dsc() + end + + def widget_event(cl, event) + # Call the ancestor's event handler + if lv.obj_event_base(cl, event) != lv.RES_OK return end + var code = event.code + + def atleast1(x) if x >= 1 return x else return 1 end end + # the model is that we have 4 bars and inter-bar (1/4 of width) + var height = self.get_height() + var width = self.get_width() + + var inter_bar = atleast1(width / 15) + var bar = atleast1((width - inter_bar * 3) / 4) + var bar_offset = bar / 2 + + if code == lv.EVENT_DRAW_MAIN + var clip_area = lv_area(event.param) + + # get coordinates of object + self.get_coords(self.area) + var x_ofs = self.area.x1 + var y_ofs = self.area.y1 + + lv.draw_line_dsc_init(self.line_dsc) # initialize lv_draw_line_dsc structure + self.init_draw_line_dsc(lv.PART_MAIN, self.line_dsc) # copy the current values + + self.line_dsc.round_start = 1 + self.line_dsc.round_end = 1 + self.line_dsc.width = bar + var on_color = self.get_style_line_color(lv.PART_MAIN | lv.STATE_DEFAULT) + var off_color = self.get_style_bg_color(lv.PART_MAIN | lv.STATE_DEFAULT) + + lv.event_send(self, lv.EVENT_DRAW_PART_BEGIN, self.line_dsc) + for i:0..3 # 4 bars + self.line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color + self.p1.y = y_ofs + height - 1 - bar_offset + self.p1.x = x_ofs + i * (bar + inter_bar) + bar_offset + self.p2.y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset + self.p2.x = self.p1.x + lv.draw_line(self.p1, self.p2, clip_area, self.line_dsc) + end + lv.event_send(self, lv.EVENT_DRAW_PART_END, self.line_dsc) + end + end + + def set_percentage(v) + var old_bars = self.percentage / 20 + if v > 100 v = 100 end + if v < 0 v = 0 end + self.percentage = v + if old_bars != v / 20 + self.invalidate() # be frugal and avoid updating the widget if it's not needed + end + end + + def get_percentage() + return self.percentage + end +end + +class lv_wifi_bars: lv_signal_bars + def init(parent) + super(self).init(parent) + tasmota.add_driver(self) + self.set_percentage(0) # we generally start with 0, meaning not connected + end + + def every_second() + var wifi = tasmota.wifi() + var quality = wifi.find("quality") + var ip = wifi.find("ip") + if ip == nil + self.set_percentage(0) + elif quality != nil + self.set_percentage(quality) + end + end + + def del() + super(self).del() + tasmota.remove_driver(self) + end +end + +class lv_wifi_bars_icon: lv_wifi_bars + def init(parent) + super(self).init(parent) + self.set_style_line_color(lv_color(lv.COLOR_WHITE), lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_style_bg_color(lv_color(lv.COLOR_BLACK), lv.PART_MAIN | lv.STATE_DEFAULT) + if parent != nil + var parent_height = parent.get_height() + var pad_right = parent.get_style_pad_right(lv.PART_MAIN | lv.STATE_DEFAULT) + self.set_height(parent_height) + self.set_width(parent_height) + self.set_x(parent.get_width() - parent_height - pad_right) + parent.set_style_pad_right(pad_right + parent_height + 1, lv.PART_MAIN | lv.STATE_DEFAULT) + end + end +end diff --git a/lib/libesp32/Berry/default/embedded/lvgl_glob.be b/lib/libesp32/Berry/default/embedded/lvgl_glob.be new file mode 100644 index 000000000..ebc5b21b0 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/lvgl_glob.be @@ -0,0 +1,257 @@ +#- embedded class for LVGL globals -# + +#- This class stores all globals used by LVGL and cannot be stored in the solidified module -# +#- this limits the globals to a single value '_lvgl' -# +class LVGL_glob + # all variables are lazily initialized to reduce the memory pressure. Until they are used, they consume zero memory + var cb_obj # map between a native C pointer (as int) and the corresponding lv_* berry object, also helps marking the objects as non-gc-able + var cb_event_closure # mapping for event closures per LVGL native pointer (int) + var event_cb # native callback for lv_event + + #- below are native callbacks mapped to a closure to a method of this instance -# + var null_cb # cb called if type is not supported + var widget_ctor_cb + var widget_dtor_cb + var widget_event_cb + + var widget_struct_default + var widget_struct_by_class + + #- this is the fallback callback, if the event is unknown or unsupported -# + static cb_do_nothing = def() print("LVG: call to unsupported callback") end + + #- register an lv_* object in the mapping -# + def register_obj(obj) + if self.cb_obj == nil self.cb_obj = {} end + var native_ptr = int(obj._p) + self.cb_obj[native_ptr] = obj + end + + def get_object_from_ptr(ptr) + if self.cb_obj != nil + return self.cb_obj.find(ptr) # raise an exception if something is wrong + end + end + + def lvgl_event_dispatch(event_ptr) + import introspect + + var event = lv_event(introspect.toptr(event_ptr)) + + var target = event.target + var f = self.cb_event_closure[target] + var obj = self.get_object_from_ptr(target) + #print('>> lvgl_event_dispatch', f, obj, event) + f(obj, event) + end + + def gen_cb(name, f, obj, ptr) + #print('>> gen_cb', name, obj, ptr) + # record the object, whatever the callback + + if name == "lv_event_cb" + if self.cb_event_closure == nil self.cb_event_closure = {} end + if self.event_cb == nil self.event_cb = tasmota.gen_cb(/ event_ptr -> self.lvgl_event_dispatch(event_ptr)) end # encapsulate 'self' in closure + + self.register_obj(obj) + self.cb_event_closure[ptr] = f + return self.event_cb + # elif name == "" + else + if self.null_cb == nil self.null_cb = tasmota.gen_cb(self.cb_do_nothing) end + return self.null_cb + end + end + + def widget_ctor_impl(cl_ptr, obj_ptr) + import introspect + var cl = lv_obj_class(cl_ptr) + var obj = self.get_object_from_ptr(obj_ptr) + if self.cb_obj.find(obj) obj = self.cb_obj[obj] end + # print("widget_ctor_impl", cl, obj) + if type(obj) == 'instance' && introspect.get(obj, 'widget_constructor') + obj.widget_constructor(cl) + end + end + def widget_dtor_impl(cl_ptr, obj_ptr) + import introspect + var cl = lv_obj_class(cl_ptr) + var obj = self.get_object_from_ptr(obj_ptr) + # print("widget_dtor_impl", cl, obj) + if type(obj) == 'instance' && introspect.get(obj, 'widget_destructor') + obj.widget_destructor(cl) + end + end + def widget_event_impl(cl_ptr, e_ptr) + import introspect + var cl = lv_obj_class(cl_ptr) + var event = lv_event(e_ptr) + var obj_ptr = event.target + var obj = self.get_object_from_ptr(int(obj_ptr)) + if type(obj) == 'instance' && introspect.get(obj, 'widget_event') + obj.widget_event(cl, event) + end + # print("widget_event_impl", cl, obj_ptr, obj, event) + end + + + def widget_cb() + if self.widget_ctor_cb == nil self.widget_ctor_cb = tasmota.gen_cb(/ cl, obj -> self.widget_ctor_impl(cl, obj)) end + if self.widget_dtor_cb == nil self.widget_dtor_cb = tasmota.gen_cb(/ cl, obj -> self.widget_dtor_impl(cl, obj)) end + if self.widget_event_cb == nil self.widget_event_cb = tasmota.gen_cb(/ cl, e -> self.widget_event_impl(cl, e)) end + + if self.widget_struct_default == nil + self.widget_struct_default = lv_obj_class(lv_obj._class).copy() + self.widget_struct_default.base_class = lv_obj._class # by default, inherit from base class `lv_obj`, this can be overriden + self.widget_struct_default.constructor_cb = self.widget_ctor_cb # set the berry cb dispatchers + self.widget_struct_default.destructor_cb = self.widget_dtor_cb + self.widget_struct_default.event_cb = self.widget_event_cb + end + end + + #- deregister_obj all information linked to a specific LVGL native object (int) -# + def deregister_obj(obj) + if self.cb_obj != nil self.cb_obj.remove(obj) end + if self.cb_event_closure != nil self.cb_event_closure.remove(obj) end + end + + #- initialize a custom widget -# + #- arg must be a subclass of lv_obj -# + def create_custom_widget(obj, parent) + import introspect + + if !isinstance(obj, lv_obj) raise "value_error", "arg must be a subclass of lv_obj" end + if self.widget_struct_by_class == nil self.widget_struct_by_class = {} end + + var obj_classname = classname(obj) + var obj_class_struct = self.widget_struct_by_class.find(obj_classname) + # print("classname=",obj_classname,"_class",super(obj)._class) + #- not already built, create a new one for this class -# + if obj_class_struct == nil + self.widget_cb() # set up all structures + obj_class_struct = self.widget_struct_default.copy() # get a copy of the structure with pre-defined callbacks + obj_class_struct.base_class = super(obj)._class + if introspect.get(obj, 'widget_width_def') obj_class_struct.width_def = obj.widget_width_def end + if introspect.get(obj, 'widget_height_def') obj_class_struct.height_def = obj.widget_height_def end + if introspect.get(obj, 'widget_editable') obj_class_struct.editable = obj.widget_editable end + if introspect.get(obj, 'widget_group_def') obj_class_struct.group_def = obj.widget_group_def end + if introspect.get(obj, 'widget_instance_size') obj_class_struct.instance_size = obj.widget_instance_size end + + #- keep a copy of the structure to avoid GC and reuse if needed -# + self.widget_struct_by_class[obj_classname] = obj_class_struct + end + + var lv_obj_ptr = lv.obj_class_create_obj(obj_class_struct, parent) + obj._p = lv_obj_ptr._p + self.register_obj(obj) + obj.class_init_obj() + end +end + +_lvgl = LVGL_glob() + +# class lv_custom_widget : lv_obj +# # static widget_width_def +# # static widget_height_def +# # static widget_editable +# # static widget_group_def +# # static widget_instance_size +# # +# var percentage # value to display, range 0..100 +# var p1, p2, area, line_dsc # instances of objects kept to avoid re-instanciating at each call + +# def init(parent) +# _lvgl.create_custom_widget(self, parent) +# # own values +# self.percentage = 100 +# # pre-allocate buffers +# self.p1 = lv_point() +# self.p2 = lv_point() +# self.area = lv_area() +# self.line_dsc = lv_draw_line_dsc() +# end + +# # def widget_constructor(cl) +# # print("widget_constructor", cl) +# # end + +# # def widget_destructor(cl) +# # print("widget_destructor", cl) +# # end + +# def widget_event(cl, event) +# var res = lv.obj_event_base(cl, event) +# if res != lv.RES_OK return end + +# def atleast1(x) if x >= 1 return x else return 1 end end +# # the model is that we have 4 bars and inter-bar (1/4 of width) +# var height = self.get_height() +# var width = self.get_width() + +# var inter_bar = atleast1(width / 15) +# var bar = atleast1((width - inter_bar * 3) / 4) +# var bar_offset = bar / 2 + +# var code = event.code +# if code == lv.EVENT_DRAW_MAIN +# var clip_area = lv_area(event.param) +# print("widget_event DRAW", clip_area.tomap()) +# # lv.event_send(self, lv.EVENT_DRAW_MAIN, clip_area) + +# # get coordinates of object +# self.get_coords(self.area) +# var x_ofs = self.area.x1 +# var y_ofs = self.area.y1 + +# lv.draw_line_dsc_init(self.line_dsc) # initialize lv_draw_line_dsc structure +# self.init_draw_line_dsc(lv.PART_MAIN, self.line_dsc) + +# self.line_dsc.round_start = 1 +# self.line_dsc.round_end = 1 +# self.line_dsc.width = bar + +# var on_color = self.get_style_line_color(lv.PART_MAIN | lv.STATE_DEFAULT) +# var off_color = self.get_style_bg_color(lv.PART_MAIN | lv.STATE_DEFAULT) + +# lv.event_send(self, lv.EVENT_DRAW_PART_BEGIN, self.line_dsc) +# for i:0..3 # 4 bars +# self.line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color +# self.p1.y = y_ofs + height - 1 - bar_offset +# self.p1.x = x_ofs + i * (bar + inter_bar) + bar_offset +# self.p2.y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset +# self.p2.x = self.p1.x +# lv.draw_line(self.p1, self.p2, clip_area, self.line_dsc) +# end +# lv.event_send(self, lv.EVENT_DRAW_PART_END, self.line_dsc) + +# end +# end + +# def set_percentage(v) +# var old_bars = self.percentage / 5 +# if v > 100 v = 100 end +# if v < 0 v = 0 end +# self.percentage = v +# if old_bars != v / 5 +# self.invalidate() # be frugal and avoid updating the widget if it's not needed +# end +# end + +# def get_percentage() +# return self.percentage +# end +# end + +# ########## ########## ########## ########## ########## ########## ########## ########## + +# lv.start() + +# hres = lv.get_hor_res() # should be 320 +# vres = lv.get_ver_res() # should be 240 + +# scr = lv.scr_act() # default screean object +# f20 = lv.montserrat_font(20) # load embedded Montserrat 20 + +# scr.set_style_bg_color(lv_color(0x0000A0), lv.PART_MAIN | lv.STATE_DEFAULT) + +# w = lv_custom_widget(scr) diff --git a/lib/libesp32/Berry/default/embedded/openhasp.be b/lib/libesp32/Berry/default/embedded/openhasp.be new file mode 100644 index 000000000..3abd8284e --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/openhasp.be @@ -0,0 +1,321 @@ + +import string +import json + +#- ------------------------------------------------------------ + Class `lvh_obj` encapsulating `lv_obj`` + + Provide a mapping for virtual members + Stores the associated page and object id + + Adds specific virtual members used by OpenHASP +- ------------------------------------------------------------ -# +class lvh_obj + static _lv_class = lv_obj + #- mapping from OpenHASP attribute to LVGL attribute -# + #- if mapping is null, we use set_X and get_X from our own class -# + static _attr_map = { + "x": "x", + "y": "y", + "w": "width", + "h": "height", + "radius": "radius", + "border_side": "border_side", + "text": nil, # apply to self + "hidden": nil, # apply to self + "enabled": nil, # apply to self + "toggle": nil, + } + + var _lv_obj # native lvgl object + var _lv_label # sub-label if exists + + def init(parent) + var obj_class = self._lv_class # need to copy to a var to distinguish from method call + self._lv_obj = obj_class(parent) + end + + def obj() + return self._lv_obj + end + + def tostring() + return "" + end + + #- ------------------------------------------------------------ + Mapping of synthetic attributes + - text + - hidden + - enabled + - ------------------------------------------------------------ -# + #- `hidden` attributes mapped to LV_OBJ_FLAG_HIDDEN -# + def set_hidden(h) + if h + self._lv_obj.add_flag(lv.OBJ_FLAG_HIDDEN) + else + self._lv_obj.clear_flag(lv.OBJ_FLAG_HIDDEN) + end + end + + def get_hidden() + return self._lv_obj.has_flag(lv.OBJ_FLAG_HIDDEN) + end + + def set_enabled(h) + if h + self._lv_obj.add_flag(lv.OBJ_FLAG_CLICKABLE) + else + self._lv_obj.clear_flag(lv.OBJ_FLAG_CLICKABLE) + end + end + + def get_enabled() + return self._lv_obj.has_flag(lv.OBJ_FLAG_CLICKABLE) + end + + def set_toggle(t) + if t == "TRUE" t = true end + if t == "FASLE" t = false end + if t + self._lv_obj.add_state(lv.STATE_CHECKED) + else + self._lv_obj.clear_state(lv.STATE_CHECKED) + end + end + + def get_toggle() + return self._lv_obj.has_state(lv.STATE_CHECKED) + end + + #- set_text: create a `lv_label` sub object to the current object -# + #- (default case, may be overriden by object that directly take text) -# + def set_text(t) + if self._lv_label == nil + self._lv_label = lv_label(self.obj()) + end + self._lv_label.set_text(t) + end + + def get_text() + if self._lv_label == nil + return nil + end + return self._lv_label.get_text() + end + + #- ------------------------------------------------------------ + Mapping of virtual attributes + - ------------------------------------------------------------ -# + def member(k) + if self._attr_map.has(k) + import introspect + if self._attr_map[k] + var f = introspect.get(self._lv_obj, "get_" + self._attr_map[k]) + if type(f) == 'function' + return f(self._lv_obj) + end + else + # call self method + var f = introspect.get(self, "get_" + k) + if type(f) == 'function' + return f(self, k) + end + end + end + raise "value_error", "unknown attribute " + str(k) + end + + def setmember(k, v) + # print(">> setmember", k, v) + # print(">>", classname(self), self._attr_map) + if self._attr_map.has(k) + import introspect + if self._attr_map[k] + var f = introspect.get(self._lv_obj, "set_" + self._attr_map[k]) + # print("f=", f) + if type(f) == 'function' + f(self._lv_obj, v) + return + end + else + # call self method + var f = introspect.get(self, "set_" + k) + # print("f==",f) + if type(f) == 'function' + f(self, v) + return + end + end + + end + # silently ignore if the attribute name is not supported + end +end + +#- creat sub-classes of lvh_obj and map the LVGL class in static '_lv_class' attribute -# +class lvh_arc : lvh_obj static _lv_class = lv_arc end +class lvh_bar : lvh_obj static _lv_class = lv_bar end +class lvh_btn : lvh_obj static _lv_class = lv_btn end +class lvh_btnmatrix : lvh_obj static _lv_class = lv_btnmatrix end +class lvh_checkbox : lvh_obj static _lv_class = lv_checkbox end +class lvh_dropdown : lvh_obj static _lv_class = lv_dropdown end +class lvh_img : lvh_obj static _lv_class = lv_img end +class lvh_label : lvh_obj static _lv_class = lv_label end +class lvh_line : lvh_obj static _lv_class = lv_line end +class lvh_roller : lvh_obj static _lv_class = lv_roller end +class lvh_slider : lvh_obj static _lv_class = lv_slider end +class lvh_slider : lvh_obj static _lv_class = lv_slider end +class lvh_switch : lvh_obj static _lv_class = lv_switch end +class lvh_textarea : lvh_obj static _lv_class = lv_textarea end + +#- ------------------------------------------------------------ + Class `lvh_page` encapsulating `lv_obj` as screen (created with lv_obj(0)) +- ------------------------------------------------------------ -# +# ex of transition: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, false) +class lvh_page + var _obj_id # list of objects by id numbers + var _page_id + var _lv_scr # lvgl screen object + + #- init(page_number) -# + def init(page_number) + import string + import global + + # if no parameter, default to page #1 + if page_number == nil page_number = 1 end + + self._page_id = page_number # remember our page_number + self._obj_id = {} # init list of objects + if page_number == 1 + self._lv_scr = lv.scr_act() # default screen + else + self._lv_scr = lv_obj(0) # allocate a new screen + self._lv_scr.set_style_bg_color(lv_color(0x000000), lv.PART_MAIN | lv.STATE_DEFAULT) # set black background + end + + # create a global for this page of form p, ex p1 + var glob_name = string.format("p%i", self._page_id) + global.(glob_name) = self + end + + #- retrieve lvgl screen object for this page -# + def get_scr() + return self._lv_scr + end + + #- add an object to this page -# + def set_obj(id, o) + self._obj_id[id] = o + end + + #- return id of this page -# + def id() + return self._page_id + end + + #- show this page, with animation -# + def show(anim, duration) + # ignore if the screen is already active + if self._lv_scr._p == lv.scr_act()._p return end # do nothing + + # default animation is lv.SCR_LOAD_ANIM_MOVE_RIGHT + if anim == nil anim = lv.SCR_LOAD_ANIM_MOVE_RIGHT end + # default duration of 500ms + if duration == nil duration = 500 end + + # load new screen with anumation, no delay, 500ms transition time, no auto-delete + lv.scr_load_anim(self._lv_scr, lv.SCR_LOAD_ANIM_MOVE_RIGHT, duration, 0, false) + end +end + +#- pages -# +var lvh_page_cur = lvh_page(1) +var lvh_pages = { 1: lvh_page_cur } # always create page #1 + +f = open("pages.jsonl","r") +var jsonl = string.split(f.read(), "\n") +f.close() + +#- ------------------------------------------------------------ + Parse page information + + Create a new page object if required + Change the active page +- ------------------------------------------------------------ -# +def parse_page(jline) + if jline.has("page") && type(jline["page"]) == 'int' + var page = int(jline["page"]) + # does the page already exist? + if lvh_pages.has(page) + # yes, just change the current page + lvh_page_cur = lvh_pages[page] + else + # no, create a new page + lvh_page_cur = lvh_page(page) + lvh_pages[page] = lvh_page_cur + end + end +end + +#- ------------------------------------------------------------ + Parse single object + +- ------------------------------------------------------------ -# +def parse_obj(jline, page) + import global + import introspect + + # line must contain 'obj' and 'id', otherwise it is ignored + if jline.has("obj") && jline.has("id") && type(jline["id"]) == 'int' + # 'obj_id' must be between 1 and 254 + var obj_id = int(jline["id"]) + if obj_id < 1 || obj_id > 254 + raise "value error", "invalid id " + str(obj_id) + end + + # extract openhasp class, prefix with `lvh_`. Ex: `btn` becomes `lvh_btn` + var obj_type = jline["obj"] + + # check if a class with the requested name exists + var obj_class = introspect.get(global, "lvh_" + obj_type) + if obj_class == nil + raise "value error", "cannot find object of type " + str(obj_type) + end + + # instanciate the object, passing the lvgl screen as paren object + var obj = obj_class(page.get_scr()) + + # add object to page object + lvh_page_cur.set_obj(obj_id, obj) + + # set attributes + # try every attribute, if not supported it is silently ignored + for k:jline.keys() + obj.(k) = jline[k] + end + + # create a global variable for this object of form pb, ex p1b2 + var glob_name = string.format("p%ib%i", lvh_page_cur.id(), obj_id) + global.(glob_name) = obj + end +end + +# ex: +# {'page': 1, 'h': 50, 'obj': 'label', 'hidden': false, 'text': 'Hello', 'x': 5, 'id': 1, 'enabled': true, 'y': 5, 'w': 50} +# {"page":1,"id":2,"obj":"btn","x":5,"y":90,"h":90,"w":50,"text":"World","enabled":false,"hidden":false} + +#- ------------------------------------------------------------ + Parse jsonl file line by line + +- ------------------------------------------------------------ -# +for j:jsonl + var jline = json.load(j) + + # parse page first + parse_page(jline) + parse_obj(jline, lvh_page_cur) +end + +print(lvh_pages[1]._obj_id) diff --git a/lib/libesp32/Berry/default/embedded/persist.be b/lib/libesp32/Berry/default/embedded/persist.be new file mode 100644 index 000000000..2ef685f3f --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/persist.be @@ -0,0 +1,111 @@ +#- persistance module for Berry -# +#- -# +#- To solidify: -# +#- + # load only persis_module and persist_module.init + import solidify + solidify.dump(persist_module.init) + # copy and paste into `be_persist_lib.c` +-# +var persist_module = module("persist") + +persist_module.init = def (m) + + class Persist + var _filename + var _p + var _dirty + + #- persist can be initialized with pre-existing values. The map is not copied so any change will be reflected -# + def init(m) + # print("Persist init") + self._filename = '_persist.json' + if isinstance(m,map) + self._p = m.copy() # need to copy instead? + else + self._p = {} + end + self.load(self._p, self._filename) + self._dirty = false + # print("Persist init") + end + + #- virtual member getter, if a key does not exists return `nil`-# + def member(key) + return self._p.find(key) + end + + #- virtual member setter -# + def setmember(key, value) + self._p[key] = value + self._dirty = true + end + + #- clear all entries -# + def zero() + self._p = {} + self._dirty = true + end + + def remove(k) + self._p.remove(k) + self._dirty = true + end + + def has(k) + return self._p.has(k) + end + + def find(k, d) + return self._p.find(k, d) + end + + #- custom tostring -# + def tostring() + import string + return string.format("", classname(self), str(self._p)) + end + + def load() + import json + import path + var f # file object + var val # values loaded from json + + if path.exists(self._filename) + try + f = open(self._filename, "r") + val = json.load(f.read()) + f.close() + except .. as e, m + if f != nil f.close() end + raise e, m + end + self._p = val + self._dirty = false + end + + # print("Loading") + end + + def save() + import json + + var f # file object + try + f = open(self._filename, "w") + f.write(json.dump(self._p)) + f.close() + except .. as e, m + if f != nil f.close() end + raise e, m + end + self._dirty = false + # print("Saving") + end + end + + return Persist() # return an instance of this class +end + +return persist_module diff --git a/lib/libesp32/Berry/default/embedded/test_crypto.be b/lib/libesp32/Berry/default/embedded/test_crypto.be new file mode 100644 index 000000000..f2edbfee5 --- /dev/null +++ b/lib/libesp32/Berry/default/embedded/test_crypto.be @@ -0,0 +1,30 @@ +ec = crypto.EC_C25519() + +# Alice +sk_A = bytes('77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a') +pk_A = ec.public_key(sk_A) +assert(pk_A == bytes('8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a')) + +# Bob +sk_B = bytes('5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb') +pk_B = ec.public_key(sk_B) +assert(pk_B == bytes('de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f')) + +psk = ec.shared_key(sk_A, pk_B) +assert(psk == bytes('4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742')) +psk2 = ec.shared_key(sk_B, pk_A) +assert(psk2 == bytes('4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742')) + +#- test vectors from RFC77748 + + Alice's private key, a: + 77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a + Alice's public key, X25519(a, 9): + 8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a + Bob's private key, b: + 5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb + Bob's public key, X25519(b, 9): + de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f + Their shared secret, K: + 4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742 +-# diff --git a/lib/libesp32/Berry/generate/be_const_strtab.h b/lib/libesp32/Berry/generate/be_const_strtab.h index e9a6f9bf1..2e2a39dc7 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab.h +++ b/lib/libesp32/Berry/generate/be_const_strtab.h @@ -1,588 +1,691 @@ -extern const bcstring be_const_str_TM1638CLK; -extern const bcstring be_const_str_add; -extern const bcstring be_const_str_MAX31855CS; -extern const bcstring be_const_str_RISING; -extern const bcstring be_const_str_scan; -extern const bcstring be_const_str_set_power; -extern const bcstring be_const_str_deg; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_real; -extern const bcstring be_const_str_SYMBOL_BATTERY_3; -extern const bcstring be_const_str_WEBCAM_VSYNC; -extern const bcstring be_const_str_cmd; -extern const bcstring be_const_str_SDM120_RX; -extern const bcstring be_const_str_SYMBOL_HOME; -extern const bcstring be_const_str_GPS_TX; -extern const bcstring be_const_str_AS3935; -extern const bcstring be_const_str_SYMBOL_PASTE; -extern const bcstring be_const_str_web_add_main_button; -extern const bcstring be_const_str_RFSEND; -extern const bcstring be_const_str_erase; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_read; -extern const bcstring be_const_str_DI; -extern const bcstring be_const_str_CNTR1_NP; -extern const bcstring be_const_str_lv_list; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_ADC_PH; -extern const bcstring be_const_str_PWM1; -extern const bcstring be_const_str_PZEM0XX_TX; -extern const bcstring be_const_str_format; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_get_free_heap; -extern const bcstring be_const_str_lv_msgbox; -extern const bcstring be_const_str_publish; -extern const bcstring be_const_str_finish; -extern const bcstring be_const_str_memory; -extern const bcstring be_const_str_SYMBOL_DUMMY; -extern const bcstring be_const_str_SYMBOL_SETTINGS; -extern const bcstring be_const_str_content_button; -extern const bcstring be_const_str_SYMBOL_POWER; -extern const bcstring be_const_str_AZ_TXD; -extern const bcstring be_const_str__end_transmission; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_SDM72_RX; -extern const bcstring be_const_str_SYMBOL_CHARGE; -extern const bcstring be_const_str_DHT11; -extern const bcstring be_const_str_SYMBOL_LEFT; -extern const bcstring be_const_str_lv_gauge; -extern const bcstring be_const_str_LEDLNK_INV; -extern const bcstring be_const_str_WEBCAM_HSD; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_HX711_SCK; -extern const bcstring be_const_str_init; -extern const bcstring be_const_str_SYMBOL_NEW_LINE; -extern const bcstring be_const_str_resp_cmnd_failed; -extern const bcstring be_const_str_KEY1_TC; -extern const bcstring be_const_str_SYMBOL_FILE; -extern const bcstring be_const_str__rules; -extern const bcstring be_const_str_lv_objmask; -extern const bcstring be_const_str_opt_call; -extern const bcstring be_const_str_reverse_gamma10; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_HPMA_TX; -extern const bcstring be_const_str_SYMBOL_REFRESH; -extern const bcstring be_const_str_raise; -extern const bcstring be_const_str__drivers; -extern const bcstring be_const_str_has_arg; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_read_bytes; -extern const bcstring be_const_str_A4988_DIR; -extern const bcstring be_const_str_ADC_LIGHT; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_web_send; -extern const bcstring be_const_str_PZEM017_RX; -extern const bcstring be_const_str_RFRECV; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_ARIRFRCV; -extern const bcstring be_const_str_CSE7766_RX; -extern const bcstring be_const_str_RC522_CS; -extern const bcstring be_const_str_pin_mode; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_SSD1331_DC; -extern const bcstring be_const_str_ST7789_CS; -extern const bcstring be_const_str_SYMBOL_BATTERY_2; -extern const bcstring be_const_str_SYMBOL_BACKSPACE; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_SYMBOL_OK; -extern const bcstring be_const_str_TX2X_TXD_BLACK; -extern const bcstring be_const_str_delay; -extern const bcstring be_const_str_resp_cmnd_done; -extern const bcstring be_const_str_SPI_DC; -extern const bcstring be_const_str_for; -extern const bcstring be_const_str_SYMBOL_USB; -extern const bcstring be_const_str_gen_cb; -extern const bcstring be_const_str_TXD; -extern const bcstring be_const_str_millis; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_screenshot; -extern const bcstring be_const_str_web_add_handler; -extern const bcstring be_const_str_ADC_TEMP; -extern const bcstring be_const_str_CNTR1; -extern const bcstring be_const_str_RDM6300_RX; -extern const bcstring be_const_str_state; -extern const bcstring be_const_str_opt_add; -extern const bcstring be_const_str_content_send; -extern const bcstring be_const_str__cmd; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_HJL_CF; -extern const bcstring be_const_str_lv_btnmatrix; -extern const bcstring be_const_str_IEM3000_TX; -extern const bcstring be_const_str_lv_checkbox; -extern const bcstring be_const_str_return; -extern const bcstring be_const_str_MGC3130_XFER; -extern const bcstring be_const_str_MHZ_TXD; -extern const bcstring be_const_str_SOLAXX1_RX; -extern const bcstring be_const_str_pin; -extern const bcstring be_const_str_FALLING; -extern const bcstring be_const_str_SYMBOL_EDIT; -extern const bcstring be_const_str__get_cb; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_WE517_RX; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_ADC_JOY; -extern const bcstring be_const_str_SYMBOL_CLOSE; -extern const bcstring be_const_str_SYMBOL_PLAY; -extern const bcstring be_const_str_WEBCAM_DATA; -extern const bcstring be_const_str_arg; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_web_send_decimal; -extern const bcstring be_const_str_TASMOTACLIENT_RXD; -extern const bcstring be_const_str_pin_used; -extern const bcstring be_const_str_PWM1_INV; -extern const bcstring be_const_str_chars_in_string; -extern const bcstring be_const_str_MCP39F5_RX; -extern const bcstring be_const_str_resp_cmnd_str; -extern const bcstring be_const_str_SYMBOL_RIGHT; -extern const bcstring be_const_str_WE517_TX; -extern const bcstring be_const_str_CSE7761_TX; -extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; -extern const bcstring be_const_str_setmember; -extern const bcstring be_const_str_ST7789_DC; -extern const bcstring be_const_str_ZIGBEE_RST; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_resolvecmnd; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_find_op; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_upper; -extern const bcstring be_const_str_ILI9341_DC; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_WEBCAM_HREF; -extern const bcstring be_const_str_DEEPSLEEP; -extern const bcstring be_const_str_SYMBOL_BATTERY_1; -extern const bcstring be_const_str_WIEGAND_D0; -extern const bcstring be_const_str_SM16716_SEL; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_SM2135_DAT; -extern const bcstring be_const_str_I2C_SDA; -extern const bcstring be_const_str_ZIGBEE_RX; -extern const bcstring be_const_str_A4988_ENA; -extern const bcstring be_const_str_CSE7766_TX; -extern const bcstring be_const_str_INPUT; -extern const bcstring be_const_str_P9813_CLK; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_lv_line; -extern const bcstring be_const_str_lv_switch; -extern const bcstring be_const_str_rtc; -extern const bcstring be_const_str_web_add_button; -extern const bcstring be_const_str_SYMBOL_WIFI; -extern const bcstring be_const_str_lv_group; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_resp_cmnd; -extern const bcstring be_const_str_write; -extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; -extern const bcstring be_const_str_exec_rules; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str_TM1637CLK; -extern const bcstring be_const_str_keys; -extern const bcstring be_const_str_lv_cont; -extern const bcstring be_const_str_SYMBOL_DOWNLOAD; -extern const bcstring be_const_str_SYMBOL_LOOP; -extern const bcstring be_const_str_lv_dropdown; -extern const bcstring be_const_str_IRSEND; -extern const bcstring be_const_str_SPI_MOSI; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_lv_win; -extern const bcstring be_const_str_ADC_INPUT; -extern const bcstring be_const_str_ILI9488_CS; -extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; -extern const bcstring be_const_str_SYMBOL_MUTE; -extern const bcstring be_const_str_add_cmd; -extern const bcstring be_const_str_DDSU666_TX; -extern const bcstring be_const_str_cb_dispatch; -extern const bcstring be_const_str_PN532_RXD; -extern const bcstring be_const_str_event; -extern const bcstring be_const_str_SDS0X1_TX; -extern const bcstring be_const_str_lv_imgbtn; -extern const bcstring be_const_str_KEY1; -extern const bcstring be_const_str_SBR_TX; -extern const bcstring be_const_str_toupper; -extern const bcstring be_const_str_if; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_DDS2382_RX; -extern const bcstring be_const_str_lv_color; -extern const bcstring be_const_str_lv_img; -extern const bcstring be_const_str_HLW_CF; -extern const bcstring be_const_str_WEBCAM_PCLK; -extern const bcstring be_const_str_content_flush; -extern const bcstring be_const_str_BOILER_OT_TX; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_wire2; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_wire; -extern const bcstring be_const_str_fromstring; -extern const bcstring be_const_str_lv_arc; -extern const bcstring be_const_str_wire_scan; -extern const bcstring be_const_str_ROT1B_NP; -extern const bcstring be_const_str_SPI_CLK; -extern const bcstring be_const_str_yield; -extern const bcstring be_const_str_set_timer; -extern const bcstring be_const_str_WEBCAM_PSCLK; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_WEBCAM_SIOC; -extern const bcstring be_const_str_WIEGAND_D1; -extern const bcstring be_const_str_i2c_enabled; -extern const bcstring be_const_str_lv_tabview; -extern const bcstring be_const_str_LOW; -extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_get_option; -extern const bcstring be_const_str_AZ_RXD; -extern const bcstring be_const_str_HRE_CLOCK; -extern const bcstring be_const_str_exec_cmd; -extern const bcstring be_const_str_button_pressed; -extern const bcstring be_const_str_BS814_DAT; -extern const bcstring be_const_str_lv_textarea; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_TM1637DIO; -extern const bcstring be_const_str_tolower; -extern const bcstring be_const_str_Driver; -extern const bcstring be_const_str_EXS_ENABLE; -extern const bcstring be_const_str_I2C_SCL; -extern const bcstring be_const_str_NRG_CF1; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_SR04_ECHO; -extern const bcstring be_const_str_SSPI_DC; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_traceback; -extern const bcstring be_const_str_ETH_PHY_MDC; -extern const bcstring be_const_str_SYMBOL_LIST; -extern const bcstring be_const_str_bytes; -extern const bcstring be_const_str_MHZ_RXD; -extern const bcstring be_const_str__cb; -extern const bcstring be_const_str_SYMBOL_EJECT; -extern const bcstring be_const_str_digital_read; -extern const bcstring be_const_str_HIGH; -extern const bcstring be_const_str_PROJECTOR_CTRL_RX; -extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; -extern const bcstring be_const_str_ARIRFSEL; -extern const bcstring be_const_str_DHT22; -extern const bcstring be_const_str_REL1; -extern const bcstring be_const_str_NONE; -extern const bcstring be_const_str_SYMBOL_VIDEO; -extern const bcstring be_const_str_run_deferred; -extern const bcstring be_const_str_SPI_CS; -extern const bcstring be_const_str_gc; -extern const bcstring be_const_str_BS814_CLK; -extern const bcstring be_const_str_lv_style; -extern const bcstring be_const_str_SYMBOL_AUDIO; -extern const bcstring be_const_str_CHANGE; -extern const bcstring be_const_str_SYMBOL_EYE_OPEN; -extern const bcstring be_const_str_web_sensor; -extern const bcstring be_const_str_DSB_OUT; extern const bcstring be_const_str_MCP39F5_RST; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_SM16716_CLK; -extern const bcstring be_const_str_SSPI_MISO; -extern const bcstring be_const_str_SYMBOL_SD_CARD; -extern const bcstring be_const_str_get_power; -extern const bcstring be_const_str_TFMINIPLUS_RX; -extern const bcstring be_const_str_lv_slider; -extern const bcstring be_const_str_NRG_SEL_INV; -extern const bcstring be_const_str_WS2812; -extern const bcstring be_const_str_lv_spinbox; -extern const bcstring be_const_str_start; -extern const bcstring be_const_str_SM2135_CLK; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_HM10_TX; -extern const bcstring be_const_str_SSPI_MAX31865_CS1; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_wire1; -extern const bcstring be_const_str_SENSOR_END; -extern const bcstring be_const_str_TASMOTACLIENT_RST; -extern const bcstring be_const_str_DHT11_OUT; -extern const bcstring be_const_str_SYMBOL_DOWN; -extern const bcstring be_const_str_SYMBOL_TRASH; -extern const bcstring be_const_str__read; -extern const bcstring be_const_str_IEM3000_RX; -extern const bcstring be_const_str_LED1; -extern const bcstring be_const_str_SYMBOL_UP; -extern const bcstring be_const_str_every_100ms; -extern const bcstring be_const_str_detect; -extern const bcstring be_const_str_lv_indev; -extern const bcstring be_const_str_SOLAXX1_TX; -extern const bcstring be_const_str_seg7_font; -extern const bcstring be_const_str_KEY1_INV_NP; -extern const bcstring be_const_str_TCP_RX; -extern const bcstring be_const_str_WEBCAM_PWDN; -extern const bcstring be_const_str_PROJECTOR_CTRL_TX; -extern const bcstring be_const_str_SDS0X1_RX; -extern const bcstring be_const_str__write; -extern const bcstring be_const_str_lv_cpicker; -extern const bcstring be_const_str_lv_roller; -extern const bcstring be_const_str_CSE7761_RX; -extern const bcstring be_const_str_ROT1B; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_save_before_restart; -extern const bcstring be_const_str_A4988_MS1; -extern const bcstring be_const_str_MIEL_HVAC_RX; -extern const bcstring be_const_str_lv_font; -extern const bcstring be_const_str_DDS2382_TX; -extern const bcstring be_const_str_MD5; -extern const bcstring be_const_str_OPEN_DRAIN; -extern const bcstring be_const_str_SYMBOL_BULLET; -extern const bcstring be_const_str_TCP_TX; -extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_OUTPUT_LO; -extern const bcstring be_const_str_write_bytes; -extern const bcstring be_const_str_HX711_DAT; -extern const bcstring be_const_str_SYMBOL_STOP; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; -extern const bcstring be_const_str__begin_transmission; -extern const bcstring be_const_str_SSPI_MOSI; -extern const bcstring be_const_str_digital_write; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_content_stop; -extern const bcstring be_const_str_lv_spinner; -extern const bcstring be_const_str_TUYA_RX; -extern const bcstring be_const_str_HM10_RX; -extern const bcstring be_const_str_TM1638DIO; -extern const bcstring be_const_str_remove_cmd; -extern const bcstring be_const_str_DSB; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_montserrat_font; -extern const bcstring be_const_str_SYMBOL_PLUS; -extern const bcstring be_const_str_SYMBOL_VOLUME_MID; -extern const bcstring be_const_str_CC1101_GDO2; -extern const bcstring be_const_str_ZIGBEE_TX; -extern const bcstring be_const_str__available; -extern const bcstring be_const_str_WEBCAM_PSRCS; -extern const bcstring be_const_str_DYP_RX; -extern const bcstring be_const_str_INPUT_PULLDOWN; -extern const bcstring be_const_str_LE01MR_TX; -extern const bcstring be_const_str_MAX31855CLK; -extern const bcstring be_const_str_SYMBOL_PREV; -extern const bcstring be_const_str__ccmd; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_content_send_style; -extern const bcstring be_const_str_DCKI; -extern const bcstring be_const_str_SAIR_TX; -extern const bcstring be_const_str_SSD1331_CS; -extern const bcstring be_const_str_check_privileged_access; -extern const bcstring be_const_str_SR04_TRIG; -extern const bcstring be_const_str_arg_size; -extern const bcstring be_const_str_SYMBOL_MINUS; -extern const bcstring be_const_str_MIEL_HVAC_TX; -extern const bcstring be_const_str_resp_cmnd_error; -extern const bcstring be_const_str_IBEACON_RX; -extern const bcstring be_const_str_add_driver; -extern const bcstring be_const_str_get_light; -extern const bcstring be_const_str_save; -extern const bcstring be_const_str_ILI9341_CS; -extern const bcstring be_const_str_RF_SENSOR; -extern const bcstring be_const_str_SYMBOL_COPY; -extern const bcstring be_const_str_SYMBOL_DRIVE; -extern const bcstring be_const_str_ZEROCROSS; -extern const bcstring be_const_str_BACKLIGHT; -extern const bcstring be_const_str_OPTION_A; -extern const bcstring be_const_str_P9813_DAT; -extern const bcstring be_const_str_SDCARD_CS; -extern const bcstring be_const_str_set; -extern const bcstring be_const_str_GPS_RX; -extern const bcstring be_const_str_TELEINFO_RX; -extern const bcstring be_const_str_SYMBOL_SAVE; -extern const bcstring be_const_str_lv_keyboard; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_MAX7219CS; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str_DDSU666_RX; -extern const bcstring be_const_str_lv_table; -extern const bcstring be_const_str_ADC_CT_POWER; -extern const bcstring be_const_str_TFMINIPLUS_TX; -extern const bcstring be_const_str_gamma10; -extern const bcstring be_const_str_SBR_RX; -extern const bcstring be_const_str_Wire; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_find_key_i; -extern const bcstring be_const_str_content_start; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_gamma8; -extern const bcstring be_const_str_A4988_STP; -extern const bcstring be_const_str_BUZZER_INV; -extern const bcstring be_const_str_SYMBOL_CALL; -extern const bcstring be_const_str_lv_led; -extern const bcstring be_const_str_BOILER_OT_RX; -extern const bcstring be_const_str_INPUT_PULLUP; -extern const bcstring be_const_str_TELEINFO_ENABLE; -extern const bcstring be_const_str_SYMBOL_CUT; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str_get_tasmota; -extern const bcstring be_const_str_on; -extern const bcstring be_const_str_; -extern const bcstring be_const_str_KEY1_NP; -extern const bcstring be_const_str_REL1_INV; -extern const bcstring be_const_str_isinstance; -extern const bcstring be_const_str_lv_calendar; -extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_register_button_encoder; -extern const bcstring be_const_str_I2C_Driver; -extern const bcstring be_const_str_SDM630_RX; -extern const bcstring be_const_str_WINDMETER_SPEED; -extern const bcstring be_const_str__timers; -extern const bcstring be_const_str_AS608_TX; -extern const bcstring be_const_str_EPAPER42_CS; -extern const bcstring be_const_str_MCP39F5_TX; -extern const bcstring be_const_str_every_second; -extern const bcstring be_const_str_WEBCAM_SIOD; -extern const bcstring be_const_str_load_freetype_font; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_BUZZER; -extern const bcstring be_const_str_MGC3130_RESET; -extern const bcstring be_const_str_asin; -extern const bcstring be_const_str_time_reached; -extern const bcstring be_const_str_PZEM016_RX; -extern const bcstring be_const_str_SYMBOL_PAUSE; -extern const bcstring be_const_str_lv_canvas; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_bus; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_HPMA_RX; -extern const bcstring be_const_str_SYMBOL_GPS; -extern const bcstring be_const_str_ADC_BUTTON_INV; -extern const bcstring be_const_str_LMT01; -extern const bcstring be_const_str_TASMOTACLIENT_TXD; -extern const bcstring be_const_str_asstring; -extern const bcstring be_const_str_KEY1_INV; -extern const bcstring be_const_str_SYMBOL_SHUFFLE; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_OUTPUT; -extern const bcstring be_const_str__request_from; -extern const bcstring be_const_str_FTC532; -extern const bcstring be_const_str_OUTPUT_HI; -extern const bcstring be_const_str_SSD1351_CS; -extern const bcstring be_const_str_SYMBOL_KEYBOARD; -extern const bcstring be_const_str_lv_obj; -extern const bcstring be_const_str_SYMBOL_DIRECTORY; -extern const bcstring be_const_str_add_rule; -extern const bcstring be_const_str_IRRECV; -extern const bcstring be_const_str_imin; -extern const bcstring be_const_str_lv_btn; -extern const bcstring be_const_str_lv_chart; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_RA8876_CS; -extern const bcstring be_const_str_RC522_RST; -extern const bcstring be_const_str_SAIR_RX; -extern const bcstring be_const_str_SPI_MISO; -extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_HRE_DATA; -extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; -extern const bcstring be_const_str_SSPI_SCLK; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_BL0940_RX; -extern const bcstring be_const_str_MAX31855DO; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_EPD_DATA; -extern const bcstring be_const_str_IBEACON_TX; -extern const bcstring be_const_str_RXD; -extern const bcstring be_const_str_WEBCAM_RESET; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_try_rule; -extern const bcstring be_const_str_ADC_RANGE; -extern const bcstring be_const_str_PZEM004_RX; -extern const bcstring be_const_str_time_dump; -extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; -extern const bcstring be_const_str_SYMBOL_IMAGE; -extern const bcstring be_const_str_print; -extern const bcstring be_const_str_NEOPOOL_TX; -extern const bcstring be_const_str_LEDLNK; -extern const bcstring be_const_str_OLED_RESET; -extern const bcstring be_const_str_SDM630_TX; -extern const bcstring be_const_str_SYMBOL_NEXT; -extern const bcstring be_const_str_var; -extern const bcstring be_const_str_CC1101_GDO0; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_remove_rule; -extern const bcstring be_const_str_LED1_INV; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_update; -extern const bcstring be_const_str_MAX7219CLK; -extern const bcstring be_const_str_SWT1; -extern const bcstring be_const_str_WEBCAM_XCLK; -extern const bcstring be_const_str_ROT1A_NP; -extern const bcstring be_const_str_name; -extern const bcstring be_const_str_NRF24_CS; -extern const bcstring be_const_str_SYMBOL_WARNING; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_addr; -extern const bcstring be_const_str_lv_tileview; -extern const bcstring be_const_str_XPT2046_CS; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_HALLEFFECT; -extern const bcstring be_const_str_PULLUP; -extern const bcstring be_const_str_MP3_DFR562; -extern const bcstring be_const_str_SI7021; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_lv_bar; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_ETH_PHY_POWER; -extern const bcstring be_const_str_MAX7219DIN; -extern const bcstring be_const_str_SYMBOL_BELL; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_HRXL_RX; -extern const bcstring be_const_str_SSD1351_DC; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_NRF24_DC; -extern const bcstring be_const_str_PN532_TXD; -extern const bcstring be_const_str_SYMBOL_BLUETOOTH; -extern const bcstring be_const_str_TM1638STB; -extern const bcstring be_const_str_TUYA_TX; -extern const bcstring be_const_str_Tasmota; -extern const bcstring be_const_str_set_light; -extern const bcstring be_const_str_PMS5003_RX; -extern const bcstring be_const_str_response_append; -extern const bcstring be_const_str_ROT1A; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_as; -extern const bcstring be_const_str_ETH_PHY_MDIO; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_ADE7953_IRQ; -extern const bcstring be_const_str_SSPI_CS; -extern const bcstring be_const_str_SWT1_NP; -extern const bcstring be_const_str_EPAPER29_CS; -extern const bcstring be_const_str_VL53L0X_XSHUT1; -extern const bcstring be_const_str_display; -extern const bcstring be_const_str_SDM72_TX; -extern const bcstring be_const_str_lv_page; -extern const bcstring be_const_str_SM16716_DAT; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_NEOPOOL_RX; -extern const bcstring be_const_str_load_font; -extern const bcstring be_const_str_lv_linemeter; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_LE01MR_RX; +extern const bcstring be_const_str_except; extern const bcstring be_const_str_PULLDOWN; -extern const bcstring be_const_str_member; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_ADC_BUTTON; -extern const bcstring be_const_str_scale_uint; -extern const bcstring be_const_str_time_str; -extern const bcstring be_const_str_AS608_RX; -extern const bcstring be_const_str_PMS5003_TX; -extern const bcstring be_const_str_SYMBOL_UPLOAD; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_get; -extern const bcstring be_const_str_NRG_SEL; +extern const bcstring be_const_str_CNTR1_NP; +extern const bcstring be_const_str_montserrat_font; +extern const bcstring be_const_str_name; +extern const bcstring be_const_str_public_key; +extern const bcstring be_const_str_DSB_OUT; +extern const bcstring be_const_str_gc; +extern const bcstring be_const_str_P9813_DAT; +extern const bcstring be_const_str_pin_used; +extern const bcstring be_const_str_rtc; +extern const bcstring be_const_str_seg7_font; +extern const bcstring be_const_str_ETH_PHY_POWER; +extern const bcstring be_const_str_SERIAL_7N1; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str__drivers; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_setmember; +extern const bcstring be_const_str_DI; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_SYMBOL_SHUFFLE; +extern const bcstring be_const_str_TFMINIPLUS_TX; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_set_light; +extern const bcstring be_const_str_SAIR_TX; +extern const bcstring be_const_str_redirect; +extern const bcstring be_const_str_RDM6300_RX; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_TM1637DIO; +extern const bcstring be_const_str_TUYA_TX; +extern const bcstring be_const_str_WEBCAM_PSCLK; +extern const bcstring be_const_str__begin_transmission; extern const bcstring be_const_str_lv_label; -extern const bcstring be_const_str_SDM120_TX; -extern const bcstring be_const_str_json_append; -extern const bcstring be_const_str_else; +extern const bcstring be_const_str_SERIAL_7O1; +extern const bcstring be_const_str_loop; +extern const bcstring be_const_str_SYMBOL_LIST; +extern const bcstring be_const_str_ELECTRIQ_MOODL_TX; +extern const bcstring be_const_str_CHANGE; +extern const bcstring be_const_str_P9813_CLK; +extern const bcstring be_const_str_SYMBOL_NEW_LINE; +extern const bcstring be_const_str_SYMBOL_VOLUME_MID; +extern const bcstring be_const_str_lv_color; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_SYMBOL_REFRESH; +extern const bcstring be_const_str_get_string; +extern const bcstring be_const_str_SYMBOL_BELL; +extern const bcstring be_const_str_dot_size; +extern const bcstring be_const_str_SYMBOL_DRIVE; +extern const bcstring be_const_str_WIEGAND_D1; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_SWT1_PD; +extern const bcstring be_const_str_GPS_RX; +extern const bcstring be_const_str_SERIAL_6O1; +extern const bcstring be_const_str_TELEINFO_RX; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_elif; +extern const bcstring be_const_str_dot_w; +extern const bcstring be_const_str_SYMBOL_EDIT; +extern const bcstring be_const_str__end_transmission; +extern const bcstring be_const_str_ZIGBEE_RST; +extern const bcstring be_const_str_OPTION_A; +extern const bcstring be_const_str_AudioFileSourceFS; +extern const bcstring be_const_str_I2S_OUT_SLCT; +extern const bcstring be_const_str_SYMBOL_KEYBOARD; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_DHT11_OUT; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str_LE01MR_RX; +extern const bcstring be_const_str_SERIAL_5O1; +extern const bcstring be_const_str_SHELLY_DIMMER_RST_INV; +extern const bcstring be_const_str__rules; +extern const bcstring be_const_str_DDS2382_TX; +extern const bcstring be_const_str_SYMBOL_FILE; +extern const bcstring be_const_str_remove_cmd; +extern const bcstring be_const_str_remove_rule; +extern const bcstring be_const_str_SERIAL_6N1; +extern const bcstring be_const_str_add_cmd; +extern const bcstring be_const_str_arg; +extern const bcstring be_const_str_calldepth; +extern const bcstring be_const_str_MGC3130_XFER; +extern const bcstring be_const_str_PZEM016_RX; +extern const bcstring be_const_str_SM2135_CLK; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str_print; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str_SYMBOL_PASTE; +extern const bcstring be_const_str_dot_p; +extern const bcstring be_const_str_add_rule; +extern const bcstring be_const_str_IRSEND; +extern const bcstring be_const_str_SPI_CS; +extern const bcstring be_const_str_WEBCAM_SIOD; +extern const bcstring be_const_str_get_switch; +extern const bcstring be_const_str_MGC3130_RESET; +extern const bcstring be_const_str_SYMBOL_SETTINGS; +extern const bcstring be_const_str_WE517_TX; +extern const bcstring be_const_str_setbits; +extern const bcstring be_const_str_FALLING; +extern const bcstring be_const_str_PWM1_INV; +extern const bcstring be_const_str_HIGH; +extern const bcstring be_const_str_deg; +extern const bcstring be_const_str_SYMBOL_OK; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_TXD; +extern const bcstring be_const_str_gen_cb; +extern const bcstring be_const_str_get_option; +extern const bcstring be_const_str_SR04_ECHO; +extern const bcstring be_const_str_add_header; +extern const bcstring be_const_str_BUZZER; +extern const bcstring be_const_str_ADC_TEMP; +extern const bcstring be_const_str_PMS5003_RX; +extern const bcstring be_const_str_ROT1B_NP; +extern const bcstring be_const_str_Wire; +extern const bcstring be_const_str_members; +extern const bcstring be_const_str_MCP39F5_TX; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_KEY1_NP; +extern const bcstring be_const_str_EXS_ENABLE; +extern const bcstring be_const_str_WEBCAM_SIOC; +extern const bcstring be_const_str_list; +extern const bcstring be_const_str_SYMBOL_GPS; +extern const bcstring be_const_str_time_str; +extern const bcstring be_const_str_ADC_RANGE; +extern const bcstring be_const_str_SYMBOL_MUTE; +extern const bcstring be_const_str_add_driver; +extern const bcstring be_const_str_erase; +extern const bcstring be_const_str_remove_driver; +extern const bcstring be_const_str_write8; +extern const bcstring be_const_str_MCP39F5_RX; +extern const bcstring be_const_str__def; +extern const bcstring be_const_str_lv_font; +extern const bcstring be_const_str_resolvecmnd; +extern const bcstring be_const_str_ILI9341_DC; +extern const bcstring be_const_str_HX711_DAT; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_RFRECV; +extern const bcstring be_const_str_SSPI_MISO; +extern const bcstring be_const_str_member; +extern const bcstring be_const_str_A4988_ENA; +extern const bcstring be_const_str_tomap; +extern const bcstring be_const_str_web_send_decimal; +extern const bcstring be_const_str_wire; +extern const bcstring be_const_str_SDM120_RX; +extern const bcstring be_const_str__available; +extern const bcstring be_const_str_lv_indev; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_SYMBOL_PAUSE; +extern const bcstring be_const_str_WEBCAM_HSD; +extern const bcstring be_const_str_reset; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str_var; +extern const bcstring be_const_str_SYMBOL_USB; +extern const bcstring be_const_str_WEBCAM_DATA; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_pin_mode; +extern const bcstring be_const_str_shared_key; +extern const bcstring be_const_str_SYMBOL_WIFI; +extern const bcstring be_const_str_WE517_RX; +extern const bcstring be_const_str__write; extern const bcstring be_const_str_input; +extern const bcstring be_const_str_WEBCAM_RESET; +extern const bcstring be_const_str_XPT2046_CS; +extern const bcstring be_const_str_ZIGBEE_RX; +extern const bcstring be_const_str_lv_chart; +extern const bcstring be_const_str_write_bit; +extern const bcstring be_const_str_I2S_OUT_DATA; +extern const bcstring be_const_str_RISING; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_AS608_RX; +extern const bcstring be_const_str_NRF24_CS; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_lv_btn; +extern const bcstring be_const_str_SYMBOL_AUDIO; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_SWT1_NP; +extern const bcstring be_const_str_SYMBOL_HOME; +extern const bcstring be_const_str_INPUT_PULLUP; +extern const bcstring be_const_str_KEY1_INV_NP; +extern const bcstring be_const_str_TASMOTACLIENT_TXD; +extern const bcstring be_const_str_exec_rules; +extern const bcstring be_const_str_SAIR_RX; +extern const bcstring be_const_str_SERIAL_6O2; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_SPI_CLK; +extern const bcstring be_const_str_encrypt; +extern const bcstring be_const_str_EPAPER42_CS; +extern const bcstring be_const_str_TM1637CLK; +extern const bcstring be_const_str_AudioGenerator; +extern const bcstring be_const_str_PROJECTOR_CTRL_RX; +extern const bcstring be_const_str_WEBCAM_PSRCS; +extern const bcstring be_const_str__timers; +extern const bcstring be_const_str_ROT1A_NP; +extern const bcstring be_const_str_SDM630_TX; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_CSE7761_TX; +extern const bcstring be_const_str_HPMA_RX; +extern const bcstring be_const_str_SYMBOL_BATTERY_3; +extern const bcstring be_const_str_cb_dispatch; +extern const bcstring be_const_str_select; +extern const bcstring be_const_str_SERIAL_8N1; +extern const bcstring be_const_str_TASMOTACLIENT_RST; +extern const bcstring be_const_str_arg_name; +extern const bcstring be_const_str_lv_img; +extern const bcstring be_const_str_lv_switch; +extern const bcstring be_const_str_set_timeouts; +extern const bcstring be_const_str_SDM120_TX; +extern const bcstring be_const_str_class; +extern const bcstring be_const_str_SSPI_DC; +extern const bcstring be_const_str_SYMBOL_UPLOAD; +extern const bcstring be_const_str_SYMBOL_VOLUME_MAX; +extern const bcstring be_const_str_init; +extern const bcstring be_const_str_try_rule; +extern const bcstring be_const_str_eth; +extern const bcstring be_const_str_LED1_INV; +extern const bcstring be_const_str_HALLEFFECT; +extern const bcstring be_const_str_lv_led; +extern const bcstring be_const_str_IBEACON_RX; +extern const bcstring be_const_str_close; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_content_start; +extern const bcstring be_const_str_serial; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_SYMBOL_SAVE; +extern const bcstring be_const_str_fromb64; +extern const bcstring be_const_str_get_free_heap; +extern const bcstring be_const_str_read8; +extern const bcstring be_const_str_set_power; +extern const bcstring be_const_str_MAX31855DO; +extern const bcstring be_const_str_bytes; +extern const bcstring be_const_str_lv_arc; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_NRG_SEL_INV; +extern const bcstring be_const_str_SYMBOL_LEFT; +extern const bcstring be_const_str_has; +extern const bcstring be_const_str_DDSU666_TX; +extern const bcstring be_const_str_sin; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str_time_reached; +extern const bcstring be_const_str_ZIGBEE_TX; +extern const bcstring be_const_str_HRE_CLOCK; +extern const bcstring be_const_str_RXD; +extern const bcstring be_const_str_PZEM017_RX; +extern const bcstring be_const_str_WEBCAM_PWDN; +extern const bcstring be_const_str_lv_msgbox; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_FTC532; +extern const bcstring be_const_str_SSPI_SCLK; +extern const bcstring be_const_str_item; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_strftime; +extern const bcstring be_const_str_PWM1; +extern const bcstring be_const_str_SYMBOL_CALL; +extern const bcstring be_const_str_format; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_SSD1351_DC; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_CSE7766_RX; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_get_power; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str_SERIAL_5E2; +extern const bcstring be_const_str_SYMBOL_LOOP; +extern const bcstring be_const_str_add; +extern const bcstring be_const_str_addr; +extern const bcstring be_const_str_INPUT; +extern const bcstring be_const_str_SSPI_CS; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_yield; +extern const bcstring be_const_str_MHZ_TXD; +extern const bcstring be_const_str_type; +extern const bcstring be_const_str_SYMBOL_DUMMY; +extern const bcstring be_const_str_chars_in_string; +extern const bcstring be_const_str_seti; +extern const bcstring be_const_str_MHZ_RXD; +extern const bcstring be_const_str_event; +extern const bcstring be_const_str_PMS5003_TX; +extern const bcstring be_const_str_SPI_MOSI; +extern const bcstring be_const_str_WINDMETER_SPEED; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_SDCARD_CS; +extern const bcstring be_const_str_SDM72_TX; +extern const bcstring be_const_str_SYMBOL_POWER; +extern const bcstring be_const_str_wire1; +extern const bcstring be_const_str_AudioOutput; +extern const bcstring be_const_str__request_from; +extern const bcstring be_const_str_DYP_RX; +extern const bcstring be_const_str_GET; +extern const bcstring be_const_str_lv_dropdown; +extern const bcstring be_const_str_remove_timer; +extern const bcstring be_const_str_url_encode; +extern const bcstring be_const_str_available; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_BL0940_RX; +extern const bcstring be_const_str_INPUT_PULLDOWN; +extern const bcstring be_const_str_SBR_TX; +extern const bcstring be_const_str_DEEPSLEEP; +extern const bcstring be_const_str_HM10_RX; +extern const bcstring be_const_str_MIEL_HVAC_TX; +extern const bcstring be_const_str_get_light; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_DCKI; +extern const bcstring be_const_str_set_auth; +extern const bcstring be_const_str_response_append; +extern const bcstring be_const_str_ADC_LIGHT; +extern const bcstring be_const_str_scale_uint; +extern const bcstring be_const_str_HLW_CF; +extern const bcstring be_const_str_scan; +extern const bcstring be_const_str_NRG_SEL; +extern const bcstring be_const_str_get; +extern const bcstring be_const_str_lv_obj; +extern const bcstring be_const_str_EPAPER29_CS; +extern const bcstring be_const_str_SERIAL_7O2; +extern const bcstring be_const_str_update; +extern const bcstring be_const_str_BS814_DAT; +extern const bcstring be_const_str_ctypes_bytes; +extern const bcstring be_const_str_opt_call; +extern const bcstring be_const_str__cmd; +extern const bcstring be_const_str_BOILER_OT_TX; +extern const bcstring be_const_str_WEBCAM_XCLK; +extern const bcstring be_const_str_stop; +extern const bcstring be_const_str_SYMBOL_TRASH; +extern const bcstring be_const_str_load_freetype_font; +extern const bcstring be_const_str_asstring; +extern const bcstring be_const_str_CC1101_GDO2; +extern const bcstring be_const_str_HRE_DATA; +extern const bcstring be_const_str_MP3_DFR562; +extern const bcstring be_const_str_content_flush; +extern const bcstring be_const_str_DDSU666_RX; +extern const bcstring be_const_str_PN532_TXD; +extern const bcstring be_const_str_SERIAL_7E2; +extern const bcstring be_const_str_SYMBOL_EYE_OPEN; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_WIEGAND_D0; +extern const bcstring be_const_str_global; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_LMT01; +extern const bcstring be_const_str_depower; +extern const bcstring be_const_str_lv_btnmatrix; +extern const bcstring be_const_str_SYMBOL_PLUS; +extern const bcstring be_const_str_load_font; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_resp_cmnd; +extern const bcstring be_const_str_lv_meter; +extern const bcstring be_const_str_NRG_CF1; +extern const bcstring be_const_str_lv_slider; +extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_DSB; +extern const bcstring be_const_str_I2C_Driver; +extern const bcstring be_const_str_SSD1351_CS; +extern const bcstring be_const_str_WEBCAM_VSYNC; +extern const bcstring be_const_str_web_send; +extern const bcstring be_const_str_SYMBOL_BATTERY_1; +extern const bcstring be_const_str_SYMBOL_NEXT; +extern const bcstring be_const_str_ADC_BUTTON_INV; +extern const bcstring be_const_str_KEY1_INV_PD; +extern const bcstring be_const_str_SM16716_DAT; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_hex; +extern const bcstring be_const_str_register_button_encoder; +extern const bcstring be_const_str_DAC; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_PZEM004_RX; +extern const bcstring be_const_str_SERIAL_8E1; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_ST7789_DC; +extern const bcstring be_const_str_KEY1_PD; +extern const bcstring be_const_str_KEY1_TC; +extern const bcstring be_const_str_LEDLNK; +extern const bcstring be_const_str_cmd; +extern const bcstring be_const_str_content_send_style; +extern const bcstring be_const_str_OUTPUT_OPEN_DRAIN; +extern const bcstring be_const_str_SERIAL_5N1; +extern const bcstring be_const_str_SYMBOL_BULLET; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_check_privileged_access; +extern const bcstring be_const_str_fromstring; +extern const bcstring be_const_str_OLED_RESET; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_resp_cmnd_str; +extern const bcstring be_const_str_SBR_RX; +extern const bcstring be_const_str_lv_spinbox; +extern const bcstring be_const_str_resp_cmnd_done; +extern const bcstring be_const_str_set; +extern const bcstring be_const_str_ETH_PHY_MDIO; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_find_key_i; +extern const bcstring be_const_str_A4988_STP; +extern const bcstring be_const_str_TASMOTACLIENT_RST_INV; +extern const bcstring be_const_str_dot_len; +extern const bcstring be_const_str_ADE7953_IRQ; +extern const bcstring be_const_str_NEOPOOL_RX; +extern const bcstring be_const_str_SYMBOL_STOP; +extern const bcstring be_const_str_IBEACON_TX; +extern const bcstring be_const_str_ADC_JOY; +extern const bcstring be_const_str_SYMBOL_DOWNLOAD; +extern const bcstring be_const_str_SERIAL_8O2; +extern const bcstring be_const_str_lv_colorwheel; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_BOILER_OT_RX; +extern const bcstring be_const_str_SERIAL_6E2; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_SM16716_SEL; +extern const bcstring be_const_str_SYMBOL_COPY; +extern const bcstring be_const_str_flush; +extern const bcstring be_const_str_decrypt; +extern const bcstring be_const_str_resp_cmnd_failed; +extern const bcstring be_const_str_A4988_DIR; +extern const bcstring be_const_str_MAX7219DIN; +extern const bcstring be_const_str_SR04_TRIG; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_size; +extern const bcstring be_const_str_KEY1_INV; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_content_send; +extern const bcstring be_const_str_i2c_enabled; +extern const bcstring be_const_str_SYMBOL_BLUETOOTH; +extern const bcstring be_const_str_lv_line; +extern const bcstring be_const_str_publish; +extern const bcstring be_const_str_dot_p2; +extern const bcstring be_const_str_ADC_CT_POWER; +extern const bcstring be_const_str_TM1638STB; +extern const bcstring be_const_str_AS608_TX; +extern const bcstring be_const_str_MAX7219CS; +extern const bcstring be_const_str_SOLAXX1_RX; +extern const bcstring be_const_str_WEBCAM_HREF; +extern const bcstring be_const_str_WS2812; +extern const bcstring be_const_str_DHT11; +extern const bcstring be_const_str_lv_bar; +extern const bcstring be_const_str_reset_search; +extern const bcstring be_const_str_write; +extern const bcstring be_const_str_finish; +extern const bcstring be_const_str_SYMBOL_DIRECTORY; +extern const bcstring be_const_str_SYMBOL_IMAGE; +extern const bcstring be_const_str_SYMBOL_MINUS; +extern const bcstring be_const_str_SYMBOL_RIGHT; +extern const bcstring be_const_str_TASMOTACLIENT_RXD; +extern const bcstring be_const_str__ccmd; +extern const bcstring be_const_str_last_modified; +extern const bcstring be_const_str_GPS_TX; +extern const bcstring be_const_str__get_cb; +extern const bcstring be_const_str_SYMBOL_BATTERY_FULL; +extern const bcstring be_const_str_exists; +extern const bcstring be_const_str_save; +extern const bcstring be_const_str_SERIAL_7N2; +extern const bcstring be_const_str_SWT1; +extern const bcstring be_const_str_MAX7219CLK; +extern const bcstring be_const_str_SYMBOL_SD_CARD; +extern const bcstring be_const_str_set_useragent; +extern const bcstring be_const_str_SERIAL_7E1; +extern const bcstring be_const_str_ROT1A; +extern const bcstring be_const_str_ST7789_CS; +extern const bcstring be_const_str_SDS0X1_TX; +extern const bcstring be_const_str_ctypes_bytes_dyn; +extern const bcstring be_const_str_pin; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_ETH_PHY_MDC; +extern const bcstring be_const_str_NRF24_DC; +extern const bcstring be_const_str_millis; +extern const bcstring be_const_str_time_dump; +extern const bcstring be_const_str_begin; +extern const bcstring be_const_str_DHT22; +extern const bcstring be_const_str_SYMBOL_UP; +extern const bcstring be_const_str_I2S_IN_CLK; +extern const bcstring be_const_str_nan; +extern const bcstring be_const_str_AES_GCM; +extern const bcstring be_const_str_HX711_SCK; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_CC1101_GDO0; +extern const bcstring be_const_str_set_timer; +extern const bcstring be_const_str_BS814_CLK; +extern const bcstring be_const_str_IEM3000_TX; +extern const bcstring be_const_str_SERIAL_8N2; +extern const bcstring be_const_str_SSD1331_CS; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_A4988_MS1; +extern const bcstring be_const_str_LED1; +extern const bcstring be_const_str_SERIAL_8E2; +extern const bcstring be_const_str_SYMBOL_BATTERY_EMPTY; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_I2S_IN_SLCT; +extern const bcstring be_const_str_AZ_TXD; +extern const bcstring be_const_str__global_def; +extern const bcstring be_const_str_lv_style; +extern const bcstring be_const_str__ptr; +extern const bcstring be_const_str_SERIAL_5N2; +extern const bcstring be_const_str_ZEROCROSS; +extern const bcstring be_const_str_exec_cmd; +extern const bcstring be_const_str_OPEN_DRAIN; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_lv_roller; +extern const bcstring be_const_str_KEY1; +extern const bcstring be_const_str_read13; +extern const bcstring be_const_str_SYMBOL_CHARGE; +extern const bcstring be_const_str_TM1638CLK; +extern const bcstring be_const_str_dac_voltage; +extern const bcstring be_const_str_POST; +extern const bcstring be_const_str_RFSEND; +extern const bcstring be_const_str_gamma10; +extern const bcstring be_const_str_INTERRUPT; +extern const bcstring be_const_str_SOLAXX1_TX; +extern const bcstring be_const_str_lv_textarea; +extern const bcstring be_const_str__cb; +extern const bcstring be_const_str_return; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_ADC_INPUT; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_tob64; +extern const bcstring be_const_str_AS3935; +extern const bcstring be_const_str_SYMBOL_PREV; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_AudioFileSource; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_digital_read; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_CNTR1; +extern const bcstring be_const_str_SSPI_MAX31865_CS1; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_PULLUP; +extern const bcstring be_const_str_start; +extern const bcstring be_const_str_OneWire; +extern const bcstring be_const_str_lv_canvas; +extern const bcstring be_const_str_toptr; +extern const bcstring be_const_str_HM10_TX; +extern const bcstring be_const_str_publish_result; +extern const bcstring be_const_str_SSD1331_DC; +extern const bcstring be_const_str_screenshot; +extern const bcstring be_const_str_tag; +extern const bcstring be_const_str_PZEM0XX_TX; +extern const bcstring be_const_str_Tasmota; +extern const bcstring be_const_str_SENSOR_END; +extern const bcstring be_const_str_VL53L0X_XSHUT1; +extern const bcstring be_const_str_concat; +extern const bcstring be_const_str_wifi; +extern const bcstring be_const_str_ILI9341_CS; +extern const bcstring be_const_str_SDM72_RX; +extern const bcstring be_const_str_TCP_TX; +extern const bcstring be_const_str_ADC_PH; +extern const bcstring be_const_str_SYMBOL_CLOSE; +extern const bcstring be_const_str_CSE7766_TX; +extern const bcstring be_const_str_SHELLY_DIMMER_BOOT0; +extern const bcstring be_const_str_wire2; +extern const bcstring be_const_str_AudioOutputI2S; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_IEM3000_RX; +extern const bcstring be_const_str_TFMINIPLUS_RX; +extern const bcstring be_const_str_content_stop; +extern const bcstring be_const_str_write_bytes; +extern const bcstring be_const_str_SI7021; +extern const bcstring be_const_str_digital_write; +extern const bcstring be_const_str_ROT1B; +extern const bcstring be_const_str_PN532_RXD; +extern const bcstring be_const_str_TX2X_TXD_BLACK; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_LOW; +extern const bcstring be_const_str_TELEINFO_ENABLE; +extern const bcstring be_const_str_TM1638DIO; +extern const bcstring be_const_str_BUZZER_INV; +extern const bcstring be_const_str_LEDLNK_INV; +extern const bcstring be_const_str_MAX31855CS; +extern const bcstring be_const_str_SYMBOL_VIDEO; +extern const bcstring be_const_str_content_button; +extern const bcstring be_const_str_read; +extern const bcstring be_const_str_I2C_SDA; +extern const bcstring be_const_str_read12; +extern const bcstring be_const_str_SYMBOL_EJECT; +extern const bcstring be_const_str_bus; +extern const bcstring be_const_str_MIEL_HVAC_RX; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_ILI9488_CS; +extern const bcstring be_const_str_SSPI_MOSI; +extern const bcstring be_const_str_get_size; +extern const bcstring be_const_str_resp_cmnd_error; +extern const bcstring be_const_str_ARIRFRCV; +extern const bcstring be_const_str_SYMBOL_PLAY; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_I2S_OUT_CLK; +extern const bcstring be_const_str_call; +extern const bcstring be_const_str__buffer; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_on; +extern const bcstring be_const_str_OUTPUT_LO; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_SDS0X1_RX; +extern const bcstring be_const_str_atan2; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_RC522_CS; +extern const bcstring be_const_str_has_arg; +extern const bcstring be_const_str_ARIRFSEL; +extern const bcstring be_const_str_TCP_RX; +extern const bcstring be_const_str_lv_checkbox; +extern const bcstring be_const_str_raise; +extern const bcstring be_const_str_DDS2382_RX; +extern const bcstring be_const_str_NEOPOOL_TX; +extern const bcstring be_const_str_SYMBOL_CUT; +extern const bcstring be_const_str_MAX31855CLK; +extern const bcstring be_const_str_RC522_RST; +extern const bcstring be_const_str_REL1_INV; +extern const bcstring be_const_str_read24; +extern const bcstring be_const_str_SYMBOL_DOWN; +extern const bcstring be_const_str_SYMBOL_EYE_CLOSE; +extern const bcstring be_const_str__class; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str_static; +extern const bcstring be_const_str_AudioGeneratorMP3; +extern const bcstring be_const_str_SYMBOL_BATTERY_2; +extern const bcstring be_const_str_delay; +extern const bcstring be_const_str_state; +extern const bcstring be_const_str_SDM630_RX; +extern const bcstring be_const_str_toint; +extern const bcstring be_const_str_BACKLIGHT; +extern const bcstring be_const_str_; +extern const bcstring be_const_str_REL1; +extern const bcstring be_const_str_fromptr; +extern const bcstring be_const_str_target_search; +extern const bcstring be_const_str_detect; +extern const bcstring be_const_str_HRXL_RX; +extern const bcstring be_const_str_OUTPUT_HI; +extern const bcstring be_const_str_SYMBOL_WARNING; +extern const bcstring be_const_str_read32; +extern const bcstring be_const_str_SPI_DC; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_search; +extern const bcstring be_const_str_OUTPUT; +extern const bcstring be_const_str_isnan; +extern const bcstring be_const_str_webclient; +extern const bcstring be_const_str_HJL_CF; +extern const bcstring be_const_str_TUYA_RX; +extern const bcstring be_const_str_SERIAL_5O2; +extern const bcstring be_const_str_SPI_MISO; +extern const bcstring be_const_str_isrunning; +extern const bcstring be_const_str_IRRECV; +extern const bcstring be_const_str_SERIAL_6N2; +extern const bcstring be_const_str_AudioGeneratorWAV; +extern const bcstring be_const_str_PROJECTOR_CTRL_TX; +extern const bcstring be_const_str__read; +extern const bcstring be_const_str_EPD_DATA; +extern const bcstring be_const_str_geti; +extern const bcstring be_const_str_SYMBOL_BACKSPACE; +extern const bcstring be_const_str_RF_SENSOR; +extern const bcstring be_const_str_SERIAL_8O1; +extern const bcstring be_const_str__p; +extern const bcstring be_const_str_AZ_RXD; +extern const bcstring be_const_str__global_addr; +extern const bcstring be_const_str_arg_size; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_lv_group; +extern const bcstring be_const_str_read_bytes; +extern const bcstring be_const_str_I2C_SCL; +extern const bcstring be_const_str_RA8876_CS; +extern const bcstring be_const_str_find_op; +extern const bcstring be_const_str_EC_C25519; +extern const bcstring be_const_str_I2S_IN_DATA; +extern const bcstring be_const_str_SERIAL_6E1; +extern const bcstring be_const_str_reverse_gamma10; +extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_gamma8; +extern const bcstring be_const_str_memory; +extern const bcstring be_const_str_run_deferred; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_wire_scan; +extern const bcstring be_const_str_NONE; +extern const bcstring be_const_str_SM16716_CLK; +extern const bcstring be_const_str_getbits; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_ADC_BUTTON; +extern const bcstring be_const_str_insert; +extern const bcstring be_const_str_lv_table; +extern const bcstring be_const_str_if; +extern const bcstring be_const_str_LE01MR_TX; +extern const bcstring be_const_str_MD5; +extern const bcstring be_const_str_dot_p1; +extern const bcstring be_const_str_CSE7761_RX; +extern const bcstring be_const_str_HPMA_TX; +extern const bcstring be_const_str_SM2135_DAT; +extern const bcstring be_const_str_skip; +extern const bcstring be_const_str_SERIAL_5E1; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_WEBCAM_PCLK; +extern const bcstring be_const_str_lv_imgbtn; diff --git a/lib/libesp32/Berry/generate/be_const_strtab_def.h b/lib/libesp32/Berry/generate/be_const_strtab_def.h index 8b1647b10..5ac383b80 100644 --- a/lib/libesp32/Berry/generate/be_const_strtab_def.h +++ b/lib/libesp32/Berry/generate/be_const_strtab_def.h @@ -1,880 +1,1034 @@ -be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_add); -be_define_const_str(add, "add", 993596020u, 0, 3, NULL); -be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, NULL); -be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_scan); -be_define_const_str(scan, "scan", 3974641896u, 0, 4, &be_const_str_set_power); -be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_list); -be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_real); -be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); -be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_WEBCAM_VSYNC); -be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_cmd); -be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, NULL); -be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str_SYMBOL_HOME); -be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, NULL); -be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, NULL); -be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, &be_const_str_SYMBOL_PASTE); -be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, &be_const_str_web_add_main_button); -be_define_const_str(web_add_main_button, "web_add_main_button", 3960367664u, 0, 19, NULL); -be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_erase); -be_define_const_str(erase, "erase", 1010949589u, 0, 5, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_read); -be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); -be_define_const_str(DI, "DI", 1070498734u, 0, 2, NULL); -be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_lv_list); -be_define_const_str(lv_list, "lv_list", 2876551248u, 0, 7, NULL); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_clear); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); -be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_PWM1); -be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_PZEM0XX_TX); -be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_format); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_log10); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); -be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_lv_msgbox); -be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, &be_const_str_publish); -be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); -be_define_const_str(finish, "finish", 1494643858u, 0, 6, &be_const_str_memory); -be_define_const_str(memory, "memory", 2229924270u, 0, 6, NULL); -be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_SYMBOL_SETTINGS); -be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_content_button); -be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, NULL); -be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, NULL); -be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str__end_transmission); -be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_super); -be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); -be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_SYMBOL_CHARGE); -be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, NULL); -be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_SYMBOL_LEFT); -be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_lv_gauge); -be_define_const_str(lv_gauge, "lv_gauge", 118613531u, 0, 8, NULL); -be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_WEBCAM_HSD); -be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_type); -be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); -be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_init); -be_define_const_str(init, "init", 380752755u, 0, 4, NULL); -be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_resp_cmnd_failed); -be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); -be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_SYMBOL_FILE); -be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str__rules); -be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, &be_const_str_lv_objmask); -be_define_const_str(lv_objmask, "lv_objmask", 1311221665u, 0, 10, NULL); -be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str_reverse_gamma10); -be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, &be_const_str_false); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_SYMBOL_REFRESH); -be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, NULL); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_has_arg); -be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_read_bytes); -be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); -be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_ADC_LIGHT); -be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_copy); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_web_send); -be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); -be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_RFRECV); -be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, &be_const_str_resize); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); -be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_CSE7766_RX); -be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, NULL); -be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_pin_mode); -be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, NULL); -be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_ST7789_CS); -be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, &be_const_str_SYMBOL_BATTERY_2); -be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, NULL); -be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, &be_const_str_try); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, &be_const_str_TX2X_TXD_BLACK); -be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, &be_const_str_delay); -be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_resp_cmnd_done); -be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, NULL); -be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_for); -be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, &be_const_str_gen_cb); -be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, NULL); -be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_millis); -be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_srand); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_web_add_handler); -be_define_const_str(web_add_handler, "web_add_handler", 3990174962u, 0, 15, NULL); -be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_CNTR1); -be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, &be_const_str_RDM6300_RX); -be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_state); -be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_content_send); -be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, NULL); -be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, &be_const_str_setitem); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); -be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, NULL); -be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL); -be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_lv_checkbox); -be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_return); -be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); -be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, NULL); -be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_SOLAXX1_RX); -be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_pin); -be_define_const_str(pin, "pin", 1866532500u, 0, 3, NULL); -be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_SYMBOL_EDIT); -be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str__get_cb); -be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, &be_const_str_lower); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_map); -be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); -be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, NULL); -be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_SYMBOL_CLOSE); -be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, &be_const_str_SYMBOL_PLAY); -be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_WEBCAM_DATA); -be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, NULL); -be_define_const_str(arg, "arg", 1047474471u, 0, 3, &be_const_str_dump); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_web_send_decimal); -be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, NULL); -be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, &be_const_str_pin_used); -be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, NULL); -be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, NULL); -be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, NULL); -be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str_resp_cmnd_str); -be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); -be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_WE517_TX); -be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, NULL); -be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_SHELLY_DIMMER_BOOT0); -be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_setmember); -be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); -be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, &be_const_str_ZIGBEE_RST); -be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, &be_const_str_number); -be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_resolvecmnd); -be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, &be_const_str_except); +be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_except); be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_find_op); -be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_remove); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, &be_const_str_upper); -be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); -be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, &be_const_str_true); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, NULL); -be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_SYMBOL_BATTERY_1); -be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, NULL); -be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL); -be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); -be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, NULL); -be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_ZIGBEE_RX); -be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, NULL); -be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_CSE7766_TX); -be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, &be_const_str_INPUT); -be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_P9813_CLK); -be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, NULL); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_lv_line); -be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, &be_const_str_lv_switch); -be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_rtc); -be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, &be_const_str_web_add_button); -be_define_const_str(web_add_button, "web_add_button", 3537875058u, 0, 14, NULL); -be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_lv_group); -be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, NULL); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(count, "count", 967958004u, 0, 5, NULL); -be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, &be_const_str_write); -be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); -be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, &be_const_str_exec_rules); -be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_TM1637CLK); -be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, &be_const_str_keys); -be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_lv_cont); -be_define_const_str(lv_cont, "lv_cont", 1391686552u, 0, 7, NULL); -be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, &be_const_str_SYMBOL_LOOP); -be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_lv_dropdown); -be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, NULL); -be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, NULL); -be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_abs); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_acos); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_lv_win); -be_define_const_str(lv_win, "lv_win", 780927558u, 0, 6, NULL); -be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_ILI9488_CS); -be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_SYMBOL_EYE_CLOSE); -be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str_SYMBOL_MUTE); -be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, NULL); -be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, NULL); -be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, &be_const_str_cb_dispatch); -be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, NULL); -be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_event); -be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); -be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, NULL); -be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); -be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_SBR_TX); -be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, &be_const_str_toupper); -be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, &be_const_str_if); -be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, NULL); -be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_lv_color); -be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, &be_const_str_lv_img); -be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); -be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_WEBCAM_PCLK); -be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_content_flush); -be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); -be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_wire2); -be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); -be_define_const_str(top, "top", 2802900028u, 0, 3, &be_const_str_wire); -be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); -be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, &be_const_str_lv_arc); -be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, &be_const_str_wire_scan); -be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); -be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_SPI_CLK); -be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_yield); -be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); -be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); -be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str_pop); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); -be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, NULL); -be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_i2c_enabled); -be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, &be_const_str_lv_tabview); -be_define_const_str(lv_tabview, "lv_tabview", 2109024786u, 0, 10, NULL); -be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_calldepth); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_get_option); -be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); -be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str_HRE_CLOCK); -be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_exec_cmd); -be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); -be_define_const_str(button_pressed, "button_pressed", 1694209616u, 0, 14, NULL); -be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_lv_textarea); -be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); -be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, NULL); -be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); -be_define_const_str(Driver, "Driver", 3576386303u, 0, 6, &be_const_str_EXS_ENABLE); -be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_I2C_SCL); -be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, NULL); -be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_sin); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, NULL); -be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_SSPI_DC); -be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, &be_const_str_deinit); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_SYMBOL_LIST); -be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, &be_const_str_bytes); -be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, NULL); -be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str__cb); -be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, NULL); -be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, &be_const_str_digital_read); -be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, NULL); -be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_PROJECTOR_CTRL_RX); -be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_SYMBOL_BATTERY_EMPTY); -be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, NULL); -be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_DHT22); -be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_REL1); -be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, NULL); -be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_SYMBOL_VIDEO); -be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, &be_const_str_run_deferred); -be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); -be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_gc); +be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, NULL); +be_define_const_str(CNTR1_NP, "CNTR1_NP", 4288381648u, 0, 8, &be_const_str_montserrat_font); +be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, &be_const_str_name); +be_define_const_str(name, "name", 2369371622u, 0, 4, &be_const_str_public_key); +be_define_const_str(public_key, "public_key", 4169142980u, 0, 10, NULL); +be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_gc); be_define_const_str(gc, "gc", 1042313471u, 0, 2, NULL); -be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_lv_style); -be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, NULL); -be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, NULL); -be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_SYMBOL_EYE_OPEN); -be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_web_sensor); -be_define_const_str(web_sensor, "web_sensor", 2900096972u, 0, 10, NULL); -be_define_const_str(DSB_OUT, "DSB_OUT", 732335085u, 0, 7, &be_const_str_MCP39F5_RST); -be_define_const_str(MCP39F5_RST, "MCP39F5_RST", 3657125652u, 0, 11, &be_const_str_log); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, NULL); -be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_SSPI_MISO); -be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_SYMBOL_SD_CARD); -be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_get_power); -be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, NULL); -be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_lv_slider); -be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, NULL); -be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, NULL); -be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, &be_const_str_lv_spinbox); -be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, &be_const_str_start); -be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); -be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_SSPI_MAX31865_CS1); -be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_allocated); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_pow); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_wire1); -be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); -be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_TASMOTACLIENT_RST); -be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, NULL); -be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_SYMBOL_DOWN); -be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, NULL); -be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str__read); -be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); -be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, &be_const_str_LED1); -be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_SYMBOL_UP); -be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, &be_const_str_every_100ms); -be_define_const_str(every_100ms, "every_100ms", 1546407804u, 0, 11, NULL); -be_define_const_str(detect, "detect", 8884370u, 0, 6, &be_const_str_lv_indev); -be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, NULL); -be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_seg7_font); +be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_pin_used); +be_define_const_str(pin_used, "pin_used", 4033854612u, 0, 8, &be_const_str_rtc); +be_define_const_str(rtc, "rtc", 1070575216u, 0, 3, NULL); be_define_const_str(seg7_font, "seg7_font", 4099690689u, 0, 9, NULL); -be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_TCP_RX); -be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, NULL); -be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, NULL); -be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str_SDS0X1_RX); -be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str__write); -be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_lv_cpicker); -be_define_const_str(lv_cpicker, "lv_cpicker", 1935129251u, 0, 10, NULL); -be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); -be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_ROT1B); -be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, &be_const_str_item); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_save_before_restart); -be_define_const_str(save_before_restart, "save_before_restart", 1253239338u, 0, 19, NULL); -be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_MIEL_HVAC_RX); -be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, NULL); -be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, NULL); -be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, NULL); -be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, &be_const_str_OPEN_DRAIN); -be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_SYMBOL_BULLET); -be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_TCP_TX); -be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, &be_const_str_insert); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_do); -be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); -be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_write_bytes); -be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); -be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_SYMBOL_STOP); -be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, &be_const_str_floor); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_load); -be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); -be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str__begin_transmission); -be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, NULL); -be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_digital_write); -be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, NULL); -be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, &be_const_str_lv_spinner); -be_define_const_str(lv_spinner, "lv_spinner", 3361501901u, 0, 10, NULL); -be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, NULL); -be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_TM1638DIO); -be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, &be_const_str_remove_cmd); -be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, NULL); -be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_reverse); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(montserrat_font, "montserrat_font", 1819065874u, 0, 15, NULL); -be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, NULL); -be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, NULL); -be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_ZIGBEE_TX); -be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, &be_const_str__available); -be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); -be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, NULL); -be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, NULL); -be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_LE01MR_TX); -be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_MAX31855CLK); -be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_SYMBOL_PREV); -be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str__ccmd); -be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_content_send_style); -be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); -be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_SAIR_TX); -be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_SSD1331_CS); -be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_check_privileged_access); -be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, NULL); -be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, &be_const_str_arg_size); -be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, NULL); -be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, NULL); -be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, NULL); -be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); -be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_add_driver); -be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_get_light); -be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_save); -be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); -be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_RF_SENSOR); -be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_SYMBOL_COPY); -be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_SYMBOL_DRIVE); -be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_ZEROCROSS); -be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, NULL); -be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, &be_const_str_OPTION_A); -be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, &be_const_str_P9813_DAT); -be_define_const_str(P9813_DAT, "P9813_DAT", 778577052u, 0, 9, &be_const_str_SDCARD_CS); -be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_set); -be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); -be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, NULL); -be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, NULL); -be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, NULL); -be_define_const_str(lv_keyboard, "lv_keyboard", 197530229u, 0, 11, &be_const_str_setrange); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); -be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_find); -be_define_const_str(find, "find", 3186656602u, 0, 4, NULL); -be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_lv_table); -be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, NULL); -be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_TFMINIPLUS_TX); -be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, NULL); -be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); -be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_Wire); -be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, NULL); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_find_key_i); -be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); -be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_tanh); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, NULL); -be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_BUZZER_INV); -be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_SYMBOL_CALL); -be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_lv_led); -be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL); -be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_INPUT_PULLUP); -be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_TELEINFO_ENABLE); -be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); -be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, &be_const_str_compile); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_get_tasmota); -be_define_const_str(get_tasmota, "get_tasmota", 334356779u, 0, 11, NULL); -be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_KEY1_NP); -be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, &be_const_str_REL1_INV); -be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_isinstance); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_lv_calendar); -be_define_const_str(lv_calendar, "lv_calendar", 3284396894u, 0, 11, NULL); -be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str_imax); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_register_button_encoder); -be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); -be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, &be_const_str_SDM630_RX); -be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_WINDMETER_SPEED); -be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str__timers); -be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL); -be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_EPAPER42_CS); -be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_MCP39F5_TX); -be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, NULL); -be_define_const_str(every_second, "every_second", 2075451465u, 0, 12, NULL); -be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_load_freetype_font); -be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, NULL); -be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, &be_const_str_MGC3130_RESET); -be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_asin); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, NULL); -be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); -be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_SYMBOL_PAUSE); -be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_lv_canvas); -be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, NULL); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(bus, "bus", 1607822841u, 0, 3, &be_const_str_end); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, &be_const_str_SYMBOL_GPS); -be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, NULL); -be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_LMT01); -be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_TASMOTACLIENT_TXD); -be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, &be_const_str_asstring); -be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); -be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_SYMBOL_SHUFFLE); -be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, &be_const_str_elif); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str__request_from); -be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, NULL); -be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_OUTPUT_HI); -be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_SSD1351_CS); -be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str_SYMBOL_KEYBOARD); -be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_lv_obj); -be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); -be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_add_rule); -be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); -be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_imin); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_lv_btn); -be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL); -be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, &be_const_str_str); -be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); -be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_RC522_RST); -be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_SAIR_RX); -be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SPI_MISO); -be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_SYMBOL_VOLUME_MAX); -be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, NULL); -be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_SSPI_SCLK); -be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_BL0940_RX); -be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_MAX31855DO); -be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_open); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, NULL); -be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, &be_const_str_RXD); -be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, &be_const_str_WEBCAM_RESET); -be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_tan); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_try_rule); -be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); -be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_PZEM004_RX); -be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_time_dump); -be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); -be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, NULL); -be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, &be_const_str_print); -be_define_const_str(print, "print", 372738696u, 0, 5, NULL); -be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, NULL); -be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_OLED_RESET); -be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_SDM630_TX); -be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_SYMBOL_NEXT); -be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, &be_const_str_assert); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_remove_rule); -be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); -be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_update); -be_define_const_str(update, "update", 672109684u, 0, 6, NULL); -be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_SWT1); -be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, &be_const_str_WEBCAM_XCLK); -be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, NULL); -be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_name); -be_define_const_str(name, "name", 2369371622u, 0, 4, NULL); -be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_SYMBOL_WARNING); -be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(addr, "addr", 1087856498u, 0, 4, &be_const_str_lv_tileview); -be_define_const_str(lv_tileview, "lv_tileview", 2419887973u, 0, 11, NULL); -be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, NULL); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, NULL); -be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_PULLUP); -be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, NULL); -be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_SI7021); -be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_cosh); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_lv_bar); -be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, NULL); -be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); -be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_MAX7219DIN); -be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_SYMBOL_BELL); -be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, &be_const_str___iterator__); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); -be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_SSD1351_DC); -be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_PN532_TXD); -be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_SYMBOL_BLUETOOTH); -be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_TM1638STB); -be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, &be_const_str_TUYA_TX); -be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, &be_const_str_Tasmota); -be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, &be_const_str_set_light); +be_define_const_str(ETH_PHY_POWER, "ETH_PHY_POWER", 487529454u, 0, 13, &be_const_str_SERIAL_7N1); +be_define_const_str(SERIAL_7N1, "SERIAL_7N1", 1891060246u, 0, 10, &be_const_str_rad); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); +be_define_const_str(_drivers, "_drivers", 3260328985u, 0, 8, &be_const_str_abs); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_issubclass); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_module); +be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_setmember); +be_define_const_str(setmember, "setmember", 1432909441u, 0, 9, NULL); +be_define_const_str(DI, "DI", 1070498734u, 0, 2, &be_const_str_find); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(SYMBOL_SHUFFLE, "SYMBOL_SHUFFLE", 1123310147u, 0, 14, &be_const_str_TFMINIPLUS_TX); +be_define_const_str(TFMINIPLUS_TX, "TFMINIPLUS_TX", 2527875337u, 0, 13, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, NULL); be_define_const_str(set_light, "set_light", 3176076152u, 0, 9, NULL); -be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_response_append); -be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); -be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_hex); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); -be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_SSPI_CS); -be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str_SWT1_NP); -be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, NULL); -be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_VL53L0X_XSHUT1); -be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_display); -be_define_const_str(display, "display", 1164572437u, 0, 7, NULL); -be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_lv_page); -be_define_const_str(lv_page, "lv_page", 2373170067u, 0, 7, NULL); -be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_tostring); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); -be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_load_font); -be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_lv_linemeter); -be_define_const_str(lv_linemeter, "lv_linemeter", 1413069363u, 0, 12, &be_const_str_sinh); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); -be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_PULLDOWN); -be_define_const_str(PULLDOWN, "PULLDOWN", 1853074086u, 0, 8, &be_const_str_member); -be_define_const_str(member, "member", 719708611u, 0, 6, &be_const_str_push); -be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); -be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_scale_uint); -be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, &be_const_str_time_str); -be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); -be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, NULL); -be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_SYMBOL_UPLOAD); -be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_char); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_get); -be_define_const_str(get, "get", 1410115415u, 0, 3, NULL); -be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_lv_label); +be_define_const_str(SAIR_TX, "SAIR_TX", 268017311u, 0, 7, &be_const_str_redirect); +be_define_const_str(redirect, "redirect", 389758641u, 0, 8, NULL); +be_define_const_str(RDM6300_RX, "RDM6300_RX", 1522345628u, 0, 10, &be_const_str_isinstance); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_toupper); +be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); +be_define_const_str(TM1637DIO, "TM1637DIO", 1574659381u, 0, 9, &be_const_str_TUYA_TX); +be_define_const_str(TUYA_TX, "TUYA_TX", 1541301465u, 0, 7, NULL); +be_define_const_str(WEBCAM_PSCLK, "WEBCAM_PSCLK", 3150007456u, 0, 12, &be_const_str__begin_transmission); +be_define_const_str(_begin_transmission, "_begin_transmission", 2779461176u, 0, 19, &be_const_str_lv_label); be_define_const_str(lv_label, "lv_label", 4199664246u, 0, 8, NULL); -be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_json_append); -be_define_const_str(json_append, "json_append", 3002019284u, 0, 11, &be_const_str_else); -be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(SERIAL_7O1, "SERIAL_7O1", 1823802675u, 0, 10, &be_const_str_loop); +be_define_const_str(loop, "loop", 3723446379u, 0, 4, NULL); +be_define_const_str(SYMBOL_LIST, "SYMBOL_LIST", 70793990u, 0, 11, NULL); +be_define_const_str(ELECTRIQ_MOODL_TX, "ELECTRIQ_MOODL_TX", 31009247u, 0, 17, NULL); +be_define_const_str(CHANGE, "CHANGE", 4280911421u, 0, 6, &be_const_str_P9813_CLK); +be_define_const_str(P9813_CLK, "P9813_CLK", 2455391001u, 0, 9, &be_const_str_SYMBOL_NEW_LINE); +be_define_const_str(SYMBOL_NEW_LINE, "SYMBOL_NEW_LINE", 2014334315u, 0, 15, &be_const_str_SYMBOL_VOLUME_MID); +be_define_const_str(SYMBOL_VOLUME_MID, "SYMBOL_VOLUME_MID", 158835057u, 0, 17, &be_const_str_lv_color); +be_define_const_str(lv_color, "lv_color", 1419148319u, 0, 8, NULL); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); +be_define_const_str(SYMBOL_REFRESH, "SYMBOL_REFRESH", 1266229761u, 0, 14, &be_const_str_get_string); +be_define_const_str(get_string, "get_string", 4195847969u, 0, 10, NULL); +be_define_const_str(SYMBOL_BELL, "SYMBOL_BELL", 1736196487u, 0, 11, NULL); +be_define_const_str(dot_size, ".size", 1965188224u, 0, 5, &be_const_str_SYMBOL_DRIVE); +be_define_const_str(SYMBOL_DRIVE, "SYMBOL_DRIVE", 567203502u, 0, 12, &be_const_str_WIEGAND_D1); +be_define_const_str(WIEGAND_D1, "WIEGAND_D1", 4175558140u, 0, 10, &be_const_str_imax); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, NULL); +be_define_const_str(SWT1_PD, "SWT1_PD", 4166278953u, 0, 7, NULL); +be_define_const_str(GPS_RX, "GPS_RX", 1075637342u, 0, 6, &be_const_str_SERIAL_6O1); +be_define_const_str(SERIAL_6O1, "SERIAL_6O1", 266153272u, 0, 10, &be_const_str_TELEINFO_RX); +be_define_const_str(TELEINFO_RX, "TELEINFO_RX", 1195717356u, 0, 11, &be_const_str_codedump); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, NULL); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); +be_define_const_str(dot_w, ".w", 1255414514u, 0, 2, &be_const_str_SYMBOL_EDIT); +be_define_const_str(SYMBOL_EDIT, "SYMBOL_EDIT", 1396182822u, 0, 11, &be_const_str__end_transmission); +be_define_const_str(_end_transmission, "_end_transmission", 3237480400u, 0, 17, NULL); +be_define_const_str(ZIGBEE_RST, "ZIGBEE_RST", 721588661u, 0, 10, NULL); +be_define_const_str(OPTION_A, "OPTION_A", 1133299440u, 0, 8, NULL); +be_define_const_str(AudioFileSourceFS, "AudioFileSourceFS", 1839147653u, 0, 17, &be_const_str_I2S_OUT_SLCT); +be_define_const_str(I2S_OUT_SLCT, "I2S_OUT_SLCT", 4037293837u, 0, 12, &be_const_str_SYMBOL_KEYBOARD); +be_define_const_str(SYMBOL_KEYBOARD, "SYMBOL_KEYBOARD", 1621492879u, 0, 15, &be_const_str_push); +be_define_const_str(push, "push", 2272264157u, 0, 4, NULL); +be_define_const_str(DHT11_OUT, "DHT11_OUT", 1645300734u, 0, 9, &be_const_str_break); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(LE01MR_RX, "LE01MR_RX", 1521590809u, 0, 9, &be_const_str_SERIAL_5O1); +be_define_const_str(SERIAL_5O1, "SERIAL_5O1", 3782657917u, 0, 10, &be_const_str_SHELLY_DIMMER_RST_INV); +be_define_const_str(SHELLY_DIMMER_RST_INV, "SHELLY_DIMMER_RST_INV", 2366759773u, 0, 21, &be_const_str__rules); +be_define_const_str(_rules, "_rules", 4266217105u, 0, 6, NULL); +be_define_const_str(DDS2382_TX, "DDS2382_TX", 1438117864u, 0, 10, &be_const_str_SYMBOL_FILE); +be_define_const_str(SYMBOL_FILE, "SYMBOL_FILE", 237085260u, 0, 11, &be_const_str_remove_cmd); +be_define_const_str(remove_cmd, "remove_cmd", 3832315702u, 0, 10, &be_const_str_remove_rule); +be_define_const_str(remove_rule, "remove_rule", 3456211328u, 0, 11, NULL); +be_define_const_str(SERIAL_6N1, "SERIAL_6N1", 198895701u, 0, 10, &be_const_str_add_cmd); +be_define_const_str(add_cmd, "add_cmd", 3361630879u, 0, 7, &be_const_str_arg); +be_define_const_str(arg, "arg", 1047474471u, 0, 3, NULL); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, NULL); +be_define_const_str(MGC3130_XFER, "MGC3130_XFER", 4178219131u, 0, 12, &be_const_str_PZEM016_RX); +be_define_const_str(PZEM016_RX, "PZEM016_RX", 1004012055u, 0, 10, &be_const_str_SM2135_CLK); +be_define_const_str(SM2135_CLK, "SM2135_CLK", 2383410011u, 0, 10, &be_const_str_load); +be_define_const_str(load, "load", 3859241449u, 0, 4, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_print); +be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_try); +be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); +be_define_const_str(SYMBOL_PASTE, "SYMBOL_PASTE", 2281577421u, 0, 12, NULL); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_add_rule); +be_define_const_str(add_rule, "add_rule", 596540743u, 0, 8, NULL); +be_define_const_str(IRSEND, "IRSEND", 184848336u, 0, 6, &be_const_str_SPI_CS); +be_define_const_str(SPI_CS, "SPI_CS", 553701236u, 0, 6, &be_const_str_WEBCAM_SIOD); +be_define_const_str(WEBCAM_SIOD, "WEBCAM_SIOD", 302703242u, 0, 11, &be_const_str_get_switch); +be_define_const_str(get_switch, "get_switch", 164821028u, 0, 10, NULL); +be_define_const_str(MGC3130_RESET, "MGC3130_RESET", 405013121u, 0, 13, &be_const_str_SYMBOL_SETTINGS); +be_define_const_str(SYMBOL_SETTINGS, "SYMBOL_SETTINGS", 339656335u, 0, 15, &be_const_str_WE517_TX); +be_define_const_str(WE517_TX, "WE517_TX", 2954817217u, 0, 8, &be_const_str_setbits); +be_define_const_str(setbits, "setbits", 2762408167u, 0, 7, NULL); +be_define_const_str(FALLING, "FALLING", 2851701064u, 0, 7, &be_const_str_PWM1_INV); +be_define_const_str(PWM1_INV, "PWM1_INV", 3939021030u, 0, 8, NULL); +be_define_const_str(HIGH, "HIGH", 2066738941u, 0, 4, &be_const_str_deg); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); +be_define_const_str(SYMBOL_OK, "SYMBOL_OK", 4033162940u, 0, 9, NULL); +be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); +be_define_const_str(TXD, "TXD", 3614562079u, 0, 3, &be_const_str_gen_cb); +be_define_const_str(gen_cb, "gen_cb", 3245227551u, 0, 6, &be_const_str_get_option); +be_define_const_str(get_option, "get_option", 2123730033u, 0, 10, NULL); +be_define_const_str(SR04_ECHO, "SR04_ECHO", 1906909592u, 0, 9, &be_const_str_add_header); +be_define_const_str(add_header, "add_header", 927130612u, 0, 10, NULL); +be_define_const_str(BUZZER, "BUZZER", 1550039611u, 0, 6, NULL); +be_define_const_str(ADC_TEMP, "ADC_TEMP", 3771053440u, 0, 8, &be_const_str_PMS5003_RX); +be_define_const_str(PMS5003_RX, "PMS5003_RX", 3934985650u, 0, 10, &be_const_str_ROT1B_NP); +be_define_const_str(ROT1B_NP, "ROT1B_NP", 3710079736u, 0, 8, &be_const_str_Wire); +be_define_const_str(Wire, "Wire", 1938276536u, 0, 4, &be_const_str_members); +be_define_const_str(members, "members", 937576464u, 0, 7, NULL); +be_define_const_str(MCP39F5_TX, "MCP39F5_TX", 1332322047u, 0, 10, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); +be_define_const_str(KEY1_NP, "KEY1_NP", 709918726u, 0, 7, NULL); +be_define_const_str(EXS_ENABLE, "EXS_ENABLE", 1896914313u, 0, 10, &be_const_str_WEBCAM_SIOC); +be_define_const_str(WEBCAM_SIOC, "WEBCAM_SIOC", 218815147u, 0, 11, &be_const_str_list); +be_define_const_str(list, "list", 217798785u, 0, 4, NULL); +be_define_const_str(SYMBOL_GPS, "SYMBOL_GPS", 3044165570u, 0, 10, &be_const_str_time_str); +be_define_const_str(time_str, "time_str", 2613827612u, 0, 8, NULL); +be_define_const_str(ADC_RANGE, "ADC_RANGE", 3467329543u, 0, 9, &be_const_str_SYMBOL_MUTE); +be_define_const_str(SYMBOL_MUTE, "SYMBOL_MUTE", 563116043u, 0, 11, &be_const_str_add_driver); +be_define_const_str(add_driver, "add_driver", 1654458371u, 0, 10, &be_const_str_erase); +be_define_const_str(erase, "erase", 1010949589u, 0, 5, NULL); +be_define_const_str(remove_driver, "remove_driver", 1030243768u, 0, 13, &be_const_str_write8); +be_define_const_str(write8, "write8", 3133991532u, 0, 6, NULL); +be_define_const_str(MCP39F5_RX, "MCP39F5_RX", 190458217u, 0, 10, &be_const_str__def); +be_define_const_str(_def, "_def", 1985022181u, 0, 4, &be_const_str_lv_font); +be_define_const_str(lv_font, "lv_font", 1550958453u, 0, 7, &be_const_str_resolvecmnd); +be_define_const_str(resolvecmnd, "resolvecmnd", 993361485u, 0, 11, NULL); +be_define_const_str(ILI9341_DC, "ILI9341_DC", 28838624u, 0, 10, NULL); +be_define_const_str(HX711_DAT, "HX711_DAT", 2935118250u, 0, 9, &be_const_str_copy); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, NULL); +be_define_const_str(RFRECV, "RFRECV", 354742801u, 0, 6, NULL); +be_define_const_str(SSPI_MISO, "SSPI_MISO", 2485347173u, 0, 9, &be_const_str_member); +be_define_const_str(member, "member", 719708611u, 0, 6, NULL); +be_define_const_str(A4988_ENA, "A4988_ENA", 1517502682u, 0, 9, &be_const_str_tomap); +be_define_const_str(tomap, "tomap", 612167626u, 0, 5, &be_const_str_web_send_decimal); +be_define_const_str(web_send_decimal, "web_send_decimal", 1407210204u, 0, 16, &be_const_str_wire); +be_define_const_str(wire, "wire", 4082753944u, 0, 4, NULL); +be_define_const_str(SDM120_RX, "SDM120_RX", 1367571753u, 0, 9, &be_const_str__available); +be_define_const_str(_available, "_available", 1306196581u, 0, 10, NULL); +be_define_const_str(lv_indev, "lv_indev", 225602374u, 0, 8, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, NULL); +be_define_const_str(SYMBOL_PAUSE, "SYMBOL_PAUSE", 641998172u, 0, 12, &be_const_str_WEBCAM_HSD); +be_define_const_str(WEBCAM_HSD, "WEBCAM_HSD", 2648502504u, 0, 10, &be_const_str_reset); +be_define_const_str(reset, "reset", 1695364032u, 0, 5, &be_const_str_import); +be_define_const_str(import, "import", 288002260u, 66, 6, &be_const_str_var); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(SYMBOL_USB, "SYMBOL_USB", 1962656552u, 0, 10, NULL); +be_define_const_str(WEBCAM_DATA, "WEBCAM_DATA", 1476954421u, 0, 11, &be_const_str_tostring); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(pin_mode, "pin_mode", 3258314030u, 0, 8, &be_const_str_shared_key); +be_define_const_str(shared_key, "shared_key", 2200833624u, 0, 10, NULL); +be_define_const_str(SYMBOL_WIFI, "SYMBOL_WIFI", 682141303u, 0, 11, &be_const_str_WE517_RX); +be_define_const_str(WE517_RX, "WE517_RX", 4096577879u, 0, 8, &be_const_str__write); +be_define_const_str(_write, "_write", 2215462825u, 0, 6, &be_const_str_input); be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); +be_define_const_str(WEBCAM_RESET, "WEBCAM_RESET", 2171221520u, 0, 12, &be_const_str_XPT2046_CS); +be_define_const_str(XPT2046_CS, "XPT2046_CS", 4049231042u, 0, 10, &be_const_str_ZIGBEE_RX); +be_define_const_str(ZIGBEE_RX, "ZIGBEE_RX", 93215470u, 0, 9, &be_const_str_lv_chart); +be_define_const_str(lv_chart, "lv_chart", 2652494144u, 0, 8, &be_const_str_write_bit); +be_define_const_str(write_bit, "write_bit", 2660990436u, 0, 9, NULL); +be_define_const_str(I2S_OUT_DATA, "I2S_OUT_DATA", 1176288293u, 0, 12, &be_const_str_RISING); +be_define_const_str(RISING, "RISING", 1256404539u, 0, 6, &be_const_str_floor); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, NULL); +be_define_const_str(AS608_RX, "AS608_RX", 4275502016u, 0, 8, &be_const_str_NRF24_CS); +be_define_const_str(NRF24_CS, "NRF24_CS", 555833194u, 0, 8, &be_const_str_classname); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_lv_btn); +be_define_const_str(lv_btn, "lv_btn", 1612829968u, 0, 6, NULL); +be_define_const_str(SYMBOL_AUDIO, "SYMBOL_AUDIO", 3056537956u, 0, 12, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); +be_define_const_str(top, "top", 2802900028u, 0, 3, NULL); +be_define_const_str(SWT1_NP, "SWT1_NP", 4033043739u, 0, 7, &be_const_str_SYMBOL_HOME); +be_define_const_str(SYMBOL_HOME, "SYMBOL_HOME", 730845525u, 0, 11, NULL); +be_define_const_str(INPUT_PULLUP, "INPUT_PULLUP", 2912931654u, 0, 12, &be_const_str_KEY1_INV_NP); +be_define_const_str(KEY1_INV_NP, "KEY1_INV_NP", 3160558586u, 0, 11, &be_const_str_TASMOTACLIENT_TXD); +be_define_const_str(TASMOTACLIENT_TXD, "TASMOTACLIENT_TXD", 1386193940u, 0, 17, &be_const_str_exec_rules); +be_define_const_str(exec_rules, "exec_rules", 1445221092u, 0, 10, NULL); +be_define_const_str(SAIR_RX, "SAIR_RX", 1273688713u, 0, 7, &be_const_str_SERIAL_6O2); +be_define_const_str(SERIAL_6O2, "SERIAL_6O2", 316486129u, 0, 10, &be_const_str_open); +be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(SPI_CLK, "SPI_CLK", 3943233814u, 0, 7, &be_const_str_encrypt); +be_define_const_str(encrypt, "encrypt", 2194327650u, 0, 7, NULL); +be_define_const_str(EPAPER42_CS, "EPAPER42_CS", 3274717451u, 0, 11, &be_const_str_TM1637CLK); +be_define_const_str(TM1637CLK, "TM1637CLK", 2797300857u, 0, 9, NULL); +be_define_const_str(AudioGenerator, "AudioGenerator", 1839297342u, 0, 14, NULL); +be_define_const_str(PROJECTOR_CTRL_RX, "PROJECTOR_CTRL_RX", 1542762460u, 0, 17, &be_const_str_WEBCAM_PSRCS); +be_define_const_str(WEBCAM_PSRCS, "WEBCAM_PSRCS", 624464864u, 0, 12, &be_const_str__timers); +be_define_const_str(_timers, "_timers", 2600100916u, 0, 7, NULL); +be_define_const_str(ROT1A_NP, "ROT1A_NP", 2322706903u, 0, 8, &be_const_str_SDM630_TX); +be_define_const_str(SDM630_TX, "SDM630_TX", 696213075u, 0, 9, &be_const_str_assert); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); +be_define_const_str(CSE7761_TX, "CSE7761_TX", 3354719142u, 0, 10, &be_const_str_HPMA_RX); +be_define_const_str(HPMA_RX, "HPMA_RX", 3462528998u, 0, 7, NULL); +be_define_const_str(SYMBOL_BATTERY_3, "SYMBOL_BATTERY_3", 662591301u, 0, 16, &be_const_str_cb_dispatch); +be_define_const_str(cb_dispatch, "cb_dispatch", 1741510499u, 0, 11, &be_const_str_select); +be_define_const_str(select, "select", 297952813u, 0, 6, NULL); +be_define_const_str(SERIAL_8N1, "SERIAL_8N1", 2369297235u, 0, 10, &be_const_str_TASMOTACLIENT_RST); +be_define_const_str(TASMOTACLIENT_RST, "TASMOTACLIENT_RST", 3326196213u, 0, 17, &be_const_str_arg_name); +be_define_const_str(arg_name, "arg_name", 1345046155u, 0, 8, &be_const_str_lv_img); +be_define_const_str(lv_img, "lv_img", 2474052327u, 0, 6, NULL); +be_define_const_str(lv_switch, "lv_switch", 3407171508u, 0, 9, &be_const_str_set_timeouts); +be_define_const_str(set_timeouts, "set_timeouts", 3732850900u, 0, 12, NULL); +be_define_const_str(SDM120_TX, "SDM120_TX", 2509332415u, 0, 9, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); +be_define_const_str(SSPI_DC, "SSPI_DC", 1782271864u, 0, 7, NULL); +be_define_const_str(SYMBOL_UPLOAD, "SYMBOL_UPLOAD", 3293679647u, 0, 13, &be_const_str_SYMBOL_VOLUME_MAX); +be_define_const_str(SYMBOL_VOLUME_MAX, "SYMBOL_VOLUME_MAX", 3582646093u, 0, 17, &be_const_str_init); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_try_rule); +be_define_const_str(try_rule, "try_rule", 1986449405u, 0, 8, NULL); +be_define_const_str(eth, "eth", 2191266556u, 0, 3, NULL); +be_define_const_str(LED1_INV, "LED1_INV", 2112045097u, 0, 8, NULL); +be_define_const_str(HALLEFFECT, "HALLEFFECT", 3334305407u, 0, 10, &be_const_str_lv_led); +be_define_const_str(lv_led, "lv_led", 3192184733u, 0, 6, NULL); +be_define_const_str(IBEACON_RX, "IBEACON_RX", 2466155575u, 0, 10, &be_const_str_close); +be_define_const_str(close, "close", 667630371u, 0, 5, NULL); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, NULL); +be_define_const_str(content_start, "content_start", 2937509069u, 0, 13, &be_const_str_serial); +be_define_const_str(serial, "serial", 3687697785u, 0, 6, NULL); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); +be_define_const_str(SYMBOL_SAVE, "SYMBOL_SAVE", 2439821015u, 0, 11, &be_const_str_fromb64); +be_define_const_str(fromb64, "fromb64", 2717019639u, 0, 7, &be_const_str_get_free_heap); +be_define_const_str(get_free_heap, "get_free_heap", 625069757u, 0, 13, &be_const_str_read8); +be_define_const_str(read8, "read8", 2802788167u, 0, 5, &be_const_str_set_power); +be_define_const_str(set_power, "set_power", 549820893u, 0, 9, NULL); +be_define_const_str(MAX31855DO, "MAX31855DO", 552730368u, 0, 10, &be_const_str_bytes); +be_define_const_str(bytes, "bytes", 1706151940u, 0, 5, &be_const_str_lv_arc); +be_define_const_str(lv_arc, "lv_arc", 4170125384u, 0, 6, &be_const_str_nil); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(NRG_SEL_INV, "NRG_SEL_INV", 3567431069u, 0, 11, &be_const_str_SYMBOL_LEFT); +be_define_const_str(SYMBOL_LEFT, "SYMBOL_LEFT", 1563517575u, 0, 11, &be_const_str_has); +be_define_const_str(has, "has", 3988721635u, 0, 3, NULL); +be_define_const_str(DDSU666_TX, "DDSU666_TX", 1880604150u, 0, 10, NULL); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_sqrt); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_time_reached); +be_define_const_str(time_reached, "time_reached", 2075136773u, 0, 12, NULL); +be_define_const_str(ZIGBEE_TX, "ZIGBEE_TX", 25119256u, 0, 9, NULL); +be_define_const_str(HRE_CLOCK, "HRE_CLOCK", 2870559111u, 0, 9, &be_const_str_RXD); +be_define_const_str(RXD, "RXD", 2311579049u, 0, 3, NULL); +be_define_const_str(PZEM017_RX, "PZEM017_RX", 3227495894u, 0, 10, &be_const_str_WEBCAM_PWDN); +be_define_const_str(WEBCAM_PWDN, "WEBCAM_PWDN", 2219597454u, 0, 11, &be_const_str_lv_msgbox); +be_define_const_str(lv_msgbox, "lv_msgbox", 689085206u, 0, 9, NULL); +be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); +be_define_const_str(FTC532, "FTC532", 3182343438u, 0, 6, &be_const_str_SSPI_SCLK); +be_define_const_str(SSPI_SCLK, "SSPI_SCLK", 136688954u, 0, 9, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_strftime); +be_define_const_str(strftime, "strftime", 187738851u, 0, 8, NULL); +be_define_const_str(PWM1, "PWM1", 1353352426u, 0, 4, &be_const_str_SYMBOL_CALL); +be_define_const_str(SYMBOL_CALL, "SYMBOL_CALL", 1444504366u, 0, 11, &be_const_str_format); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(SSD1351_DC, "SSD1351_DC", 84950353u, 0, 10, &be_const_str_as); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(CSE7766_RX, "CSE7766_RX", 1546766819u, 0, 10, &be_const_str_atan); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_get_power); +be_define_const_str(get_power, "get_power", 3009799377u, 0, 9, &be_const_str_true); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(SERIAL_5E2, "SERIAL_5E2", 1180552854u, 0, 10, &be_const_str_SYMBOL_LOOP); +be_define_const_str(SYMBOL_LOOP, "SYMBOL_LOOP", 2762053208u, 0, 11, &be_const_str_add); +be_define_const_str(add, "add", 993596020u, 0, 3, &be_const_str_addr); +be_define_const_str(addr, "addr", 1087856498u, 0, 4, NULL); +be_define_const_str(INPUT, "INPUT", 1638025307u, 0, 5, &be_const_str_SSPI_CS); +be_define_const_str(SSPI_CS, "SSPI_CS", 977784795u, 0, 7, &be_const_str___iterator__); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, NULL); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, &be_const_str_yield); +be_define_const_str(yield, "yield", 1821831854u, 0, 5, NULL); +be_define_const_str(MHZ_TXD, "MHZ_TXD", 3310158233u, 0, 7, &be_const_str_type); +be_define_const_str(type, "type", 1361572173u, 0, 4, NULL); +be_define_const_str(SYMBOL_DUMMY, "SYMBOL_DUMMY", 3621732138u, 0, 12, &be_const_str_chars_in_string); +be_define_const_str(chars_in_string, "chars_in_string", 3148785132u, 0, 15, &be_const_str_seti); +be_define_const_str(seti, "seti", 1500556254u, 0, 4, NULL); +be_define_const_str(MHZ_RXD, "MHZ_RXD", 328619727u, 0, 7, &be_const_str_event); +be_define_const_str(event, "event", 4264611999u, 0, 5, NULL); +be_define_const_str(PMS5003_TX, "PMS5003_TX", 3868169364u, 0, 10, &be_const_str_SPI_MOSI); +be_define_const_str(SPI_MOSI, "SPI_MOSI", 2494218614u, 0, 8, &be_const_str_WINDMETER_SPEED); +be_define_const_str(WINDMETER_SPEED, "WINDMETER_SPEED", 1980822204u, 0, 15, &be_const_str_setitem); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); +be_define_const_str(SDCARD_CS, "SDCARD_CS", 3348952003u, 0, 9, &be_const_str_SDM72_TX); +be_define_const_str(SDM72_TX, "SDM72_TX", 2042143269u, 0, 8, &be_const_str_SYMBOL_POWER); +be_define_const_str(SYMBOL_POWER, "SYMBOL_POWER", 1125993627u, 0, 12, &be_const_str_wire1); +be_define_const_str(wire1, "wire1", 3212721419u, 0, 5, NULL); +be_define_const_str(AudioOutput, "AudioOutput", 3257792048u, 0, 11, &be_const_str__request_from); +be_define_const_str(_request_from, "_request_from", 3965148604u, 0, 13, NULL); +be_define_const_str(DYP_RX, "DYP_RX", 2122310285u, 0, 6, &be_const_str_GET); +be_define_const_str(GET, "GET", 2531704439u, 0, 3, &be_const_str_lv_dropdown); +be_define_const_str(lv_dropdown, "lv_dropdown", 2797165301u, 0, 11, &be_const_str_remove_timer); +be_define_const_str(remove_timer, "remove_timer", 4141472215u, 0, 12, &be_const_str_url_encode); +be_define_const_str(url_encode, "url_encode", 528392145u, 0, 10, NULL); +be_define_const_str(available, "available", 1727918744u, 0, 9, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, NULL); +be_define_const_str(BL0940_RX, "BL0940_RX", 2908993179u, 0, 9, &be_const_str_INPUT_PULLDOWN); +be_define_const_str(INPUT_PULLDOWN, "INPUT_PULLDOWN", 1172232591u, 0, 14, &be_const_str_SBR_TX); +be_define_const_str(SBR_TX, "SBR_TX", 3419096015u, 0, 6, NULL); +be_define_const_str(DEEPSLEEP, "DEEPSLEEP", 189922226u, 0, 9, &be_const_str_HM10_RX); +be_define_const_str(HM10_RX, "HM10_RX", 515085922u, 0, 7, &be_const_str_MIEL_HVAC_TX); +be_define_const_str(MIEL_HVAC_TX, "MIEL_HVAC_TX", 567403014u, 0, 12, &be_const_str_get_light); +be_define_const_str(get_light, "get_light", 381930476u, 0, 9, &be_const_str_setrange); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, NULL); +be_define_const_str(DCKI, "DCKI", 3846847480u, 0, 4, &be_const_str_set_auth); +be_define_const_str(set_auth, "set_auth", 1057170930u, 0, 8, NULL); +be_define_const_str(response_append, "response_append", 450346371u, 0, 15, NULL); +be_define_const_str(ADC_LIGHT, "ADC_LIGHT", 3982461502u, 0, 9, &be_const_str_scale_uint); +be_define_const_str(scale_uint, "scale_uint", 3090811094u, 0, 10, NULL); +be_define_const_str(HLW_CF, "HLW_CF", 3982619486u, 0, 6, &be_const_str_scan); +be_define_const_str(scan, "scan", 3974641896u, 0, 4, NULL); +be_define_const_str(NRG_SEL, "NRG_SEL", 1771358125u, 0, 7, &be_const_str_get); +be_define_const_str(get, "get", 1410115415u, 0, 3, &be_const_str_lv_obj); +be_define_const_str(lv_obj, "lv_obj", 4257833149u, 0, 6, NULL); +be_define_const_str(EPAPER29_CS, "EPAPER29_CS", 3916373594u, 0, 11, &be_const_str_SERIAL_7O2); +be_define_const_str(SERIAL_7O2, "SERIAL_7O2", 1840580294u, 0, 10, &be_const_str_update); +be_define_const_str(update, "update", 672109684u, 0, 6, NULL); +be_define_const_str(BS814_DAT, "BS814_DAT", 3620403837u, 0, 9, &be_const_str_ctypes_bytes); +be_define_const_str(ctypes_bytes, "ctypes_bytes", 3879019703u, 0, 12, NULL); +be_define_const_str(opt_call, "()", 685372826u, 0, 2, &be_const_str__cmd); +be_define_const_str(_cmd, "_cmd", 3419822142u, 0, 4, NULL); +be_define_const_str(BOILER_OT_TX, "BOILER_OT_TX", 671743623u, 0, 12, &be_const_str_WEBCAM_XCLK); +be_define_const_str(WEBCAM_XCLK, "WEBCAM_XCLK", 536207425u, 0, 11, &be_const_str_stop); +be_define_const_str(stop, "stop", 3411225317u, 0, 4, NULL); +be_define_const_str(SYMBOL_TRASH, "SYMBOL_TRASH", 3169100368u, 0, 12, &be_const_str_load_freetype_font); +be_define_const_str(load_freetype_font, "load_freetype_font", 2368447592u, 0, 18, NULL); +be_define_const_str(asstring, "asstring", 1298225088u, 0, 8, NULL); +be_define_const_str(CC1101_GDO2, "CC1101_GDO2", 974166265u, 0, 11, &be_const_str_HRE_DATA); +be_define_const_str(HRE_DATA, "HRE_DATA", 1820377643u, 0, 8, &be_const_str_MP3_DFR562); +be_define_const_str(MP3_DFR562, "MP3_DFR562", 2859952977u, 0, 10, &be_const_str_content_flush); +be_define_const_str(content_flush, "content_flush", 214922475u, 0, 13, NULL); +be_define_const_str(DDSU666_RX, "DDSU666_RX", 1812507936u, 0, 10, &be_const_str_PN532_TXD); +be_define_const_str(PN532_TXD, "PN532_TXD", 3093418644u, 0, 9, &be_const_str_SERIAL_7E2); +be_define_const_str(SERIAL_7E2, "SERIAL_7E2", 97385204u, 0, 10, &be_const_str_SYMBOL_EYE_OPEN); +be_define_const_str(SYMBOL_EYE_OPEN, "SYMBOL_EYE_OPEN", 3449311676u, 0, 15, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_pop); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, NULL); +be_define_const_str(WIEGAND_D0, "WIEGAND_D0", 4192335759u, 0, 10, NULL); +be_define_const_str(global, "global", 503252654u, 0, 6, &be_const_str_lower); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); +be_define_const_str(LMT01, "LMT01", 2490623797u, 0, 5, &be_const_str_depower); +be_define_const_str(depower, "depower", 3563819571u, 0, 7, &be_const_str_lv_btnmatrix); +be_define_const_str(lv_btnmatrix, "lv_btnmatrix", 626248489u, 0, 12, NULL); +be_define_const_str(SYMBOL_PLUS, "SYMBOL_PLUS", 2860093262u, 0, 11, NULL); +be_define_const_str(load_font, "load_font", 1875840019u, 0, 9, &be_const_str_log); +be_define_const_str(log, "log", 1062293841u, 0, 3, NULL); +be_define_const_str(resp_cmnd, "resp_cmnd", 2869459626u, 0, 9, NULL); +be_define_const_str(lv_meter, "lv_meter", 2603676121u, 0, 8, NULL); +be_define_const_str(NRG_CF1, "NRG_CF1", 3292534757u, 0, 7, &be_const_str_lv_slider); +be_define_const_str(lv_slider, "lv_slider", 2274180781u, 0, 9, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, NULL); +be_define_const_str(DSB, "DSB", 98073254u, 0, 3, &be_const_str_I2C_Driver); +be_define_const_str(I2C_Driver, "I2C_Driver", 1714501658u, 0, 10, NULL); +be_define_const_str(SSD1351_CS, "SSD1351_CS", 488746042u, 0, 10, &be_const_str_WEBCAM_VSYNC); +be_define_const_str(WEBCAM_VSYNC, "WEBCAM_VSYNC", 4032882166u, 0, 12, &be_const_str_web_send); +be_define_const_str(web_send, "web_send", 2989941448u, 0, 8, NULL); +be_define_const_str(SYMBOL_BATTERY_1, "SYMBOL_BATTERY_1", 629036063u, 0, 16, &be_const_str_SYMBOL_NEXT); +be_define_const_str(SYMBOL_NEXT, "SYMBOL_NEXT", 1102844455u, 0, 11, NULL); +be_define_const_str(ADC_BUTTON_INV, "ADC_BUTTON_INV", 2027625326u, 0, 14, &be_const_str_KEY1_INV_PD); +be_define_const_str(KEY1_INV_PD, "KEY1_INV_PD", 3828014584u, 0, 11, &be_const_str_SM16716_DAT); +be_define_const_str(SM16716_DAT, "SM16716_DAT", 1905621806u, 0, 11, &be_const_str_deinit); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_hex); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_register_button_encoder); +be_define_const_str(register_button_encoder, "register_button_encoder", 2811301550u, 0, 23, NULL); +be_define_const_str(DAC, "DAC", 788912847u, 0, 3, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(PZEM004_RX, "PZEM004_RX", 3411153194u, 0, 10, &be_const_str_SERIAL_8E1); +be_define_const_str(SERIAL_8E1, "SERIAL_8E1", 2371121616u, 0, 10, &be_const_str_tan); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(ST7789_DC, "ST7789_DC", 2533509745u, 0, 9, NULL); +be_define_const_str(KEY1_PD, "KEY1_PD", 3934075620u, 0, 7, NULL); +be_define_const_str(KEY1_TC, "KEY1_TC", 25685109u, 0, 7, &be_const_str_LEDLNK); +be_define_const_str(LEDLNK, "LEDLNK", 2862810701u, 0, 6, &be_const_str_cmd); +be_define_const_str(cmd, "cmd", 4136785899u, 0, 3, &be_const_str_content_send_style); +be_define_const_str(content_send_style, "content_send_style", 1087907647u, 0, 18, NULL); +be_define_const_str(OUTPUT_OPEN_DRAIN, "OUTPUT_OPEN_DRAIN", 2147249436u, 0, 17, &be_const_str_SERIAL_5N1); +be_define_const_str(SERIAL_5N1, "SERIAL_5N1", 3313031680u, 0, 10, &be_const_str_SYMBOL_BULLET); +be_define_const_str(SYMBOL_BULLET, "SYMBOL_BULLET", 587181862u, 0, 13, &be_const_str_allocated); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_check_privileged_access); +be_define_const_str(check_privileged_access, "check_privileged_access", 3692933968u, 0, 23, &be_const_str_fromstring); +be_define_const_str(fromstring, "fromstring", 610302344u, 0, 10, NULL); +be_define_const_str(OLED_RESET, "OLED_RESET", 4048987655u, 0, 10, &be_const_str_dump); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); +be_define_const_str(resp_cmnd_str, "resp_cmnd_str", 737845590u, 0, 13, NULL); +be_define_const_str(SBR_RX, "SBR_RX", 3350999801u, 0, 6, &be_const_str_lv_spinbox); +be_define_const_str(lv_spinbox, "lv_spinbox", 2666096729u, 0, 10, &be_const_str_resp_cmnd_done); +be_define_const_str(resp_cmnd_done, "resp_cmnd_done", 2601874875u, 0, 14, &be_const_str_set); +be_define_const_str(set, "set", 3324446467u, 0, 3, NULL); +be_define_const_str(ETH_PHY_MDIO, "ETH_PHY_MDIO", 3261871568u, 0, 12, &be_const_str_exp); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_find_key_i); +be_define_const_str(find_key_i, "find_key_i", 850136726u, 0, 10, NULL); +be_define_const_str(A4988_STP, "A4988_STP", 1622172049u, 0, 9, &be_const_str_TASMOTACLIENT_RST_INV); +be_define_const_str(TASMOTACLIENT_RST_INV, "TASMOTACLIENT_RST_INV", 2601785365u, 0, 21, NULL); +be_define_const_str(dot_len, ".len", 850842136u, 0, 4, &be_const_str_ADE7953_IRQ); +be_define_const_str(ADE7953_IRQ, "ADE7953_IRQ", 2329185922u, 0, 11, &be_const_str_NEOPOOL_RX); +be_define_const_str(NEOPOOL_RX, "NEOPOOL_RX", 1917974474u, 0, 10, &be_const_str_SYMBOL_STOP); +be_define_const_str(SYMBOL_STOP, "SYMBOL_STOP", 2836505202u, 0, 11, NULL); +be_define_const_str(IBEACON_TX, "IBEACON_TX", 3471826977u, 0, 10, NULL); +be_define_const_str(ADC_JOY, "ADC_JOY", 1116943612u, 0, 7, &be_const_str_SYMBOL_DOWNLOAD); +be_define_const_str(SYMBOL_DOWNLOAD, "SYMBOL_DOWNLOAD", 2607324090u, 0, 15, NULL); +be_define_const_str(SERIAL_8O2, "SERIAL_8O2", 272345123u, 0, 10, NULL); +be_define_const_str(lv_colorwheel, "lv_colorwheel", 1107232566u, 0, 13, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_BOILER_OT_RX); +be_define_const_str(BOILER_OT_RX, "BOILER_OT_RX", 603647409u, 0, 12, &be_const_str_SERIAL_6E2); +be_define_const_str(SERIAL_6E2, "SERIAL_6E2", 317471867u, 0, 10, &be_const_str_collect); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); +be_define_const_str(SM16716_SEL, "SM16716_SEL", 142377379u, 0, 11, &be_const_str_SYMBOL_COPY); +be_define_const_str(SYMBOL_COPY, "SYMBOL_COPY", 4193681815u, 0, 11, &be_const_str_flush); +be_define_const_str(flush, "flush", 3002334877u, 0, 5, NULL); +be_define_const_str(decrypt, "decrypt", 2886974618u, 0, 7, &be_const_str_resp_cmnd_failed); +be_define_const_str(resp_cmnd_failed, "resp_cmnd_failed", 2136281562u, 0, 16, NULL); +be_define_const_str(A4988_DIR, "A4988_DIR", 2223595843u, 0, 9, &be_const_str_MAX7219DIN); +be_define_const_str(MAX7219DIN, "MAX7219DIN", 380687049u, 0, 10, &be_const_str_SR04_TRIG); +be_define_const_str(SR04_TRIG, "SR04_TRIG", 68671263u, 0, 9, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, NULL); +be_define_const_str(KEY1_INV, "KEY1_INV", 263542563u, 0, 8, &be_const_str_byte); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_content_send); +be_define_const_str(content_send, "content_send", 1673733649u, 0, 12, &be_const_str_i2c_enabled); +be_define_const_str(i2c_enabled, "i2c_enabled", 218388101u, 0, 11, NULL); +be_define_const_str(SYMBOL_BLUETOOTH, "SYMBOL_BLUETOOTH", 679376572u, 0, 16, &be_const_str_lv_line); +be_define_const_str(lv_line, "lv_line", 2692732914u, 0, 7, &be_const_str_publish); +be_define_const_str(publish, "publish", 264247304u, 0, 7, NULL); +be_define_const_str(dot_p2, ".p2", 232398067u, 0, 3, &be_const_str_ADC_CT_POWER); +be_define_const_str(ADC_CT_POWER, "ADC_CT_POWER", 3382284599u, 0, 12, &be_const_str_TM1638STB); +be_define_const_str(TM1638STB, "TM1638STB", 823674593u, 0, 9, NULL); +be_define_const_str(AS608_TX, "AS608_TX", 48630934u, 0, 8, &be_const_str_MAX7219CS); +be_define_const_str(MAX7219CS, "MAX7219CS", 2593198244u, 0, 9, &be_const_str_SOLAXX1_RX); +be_define_const_str(SOLAXX1_RX, "SOLAXX1_RX", 971867054u, 0, 10, &be_const_str_WEBCAM_HREF); +be_define_const_str(WEBCAM_HREF, "WEBCAM_HREF", 3161890024u, 0, 11, &be_const_str_WS2812); +be_define_const_str(WS2812, "WS2812", 3539741218u, 0, 6, NULL); +be_define_const_str(DHT11, "DHT11", 367083569u, 0, 5, &be_const_str_lv_bar); +be_define_const_str(lv_bar, "lv_bar", 1582673229u, 0, 6, &be_const_str_reset_search); +be_define_const_str(reset_search, "reset_search", 1350414305u, 0, 12, NULL); +be_define_const_str(write, "write", 3190202204u, 0, 5, NULL); +be_define_const_str(finish, "finish", 1494643858u, 0, 6, NULL); +be_define_const_str(SYMBOL_DIRECTORY, "SYMBOL_DIRECTORY", 1886053449u, 0, 16, &be_const_str_SYMBOL_IMAGE); +be_define_const_str(SYMBOL_IMAGE, "SYMBOL_IMAGE", 815601151u, 0, 12, NULL); +be_define_const_str(SYMBOL_MINUS, "SYMBOL_MINUS", 1806749158u, 0, 12, &be_const_str_SYMBOL_RIGHT); +be_define_const_str(SYMBOL_RIGHT, "SYMBOL_RIGHT", 2984010648u, 0, 12, &be_const_str_TASMOTACLIENT_RXD); +be_define_const_str(TASMOTACLIENT_RXD, "TASMOTACLIENT_RXD", 72868318u, 0, 17, NULL); +be_define_const_str(_ccmd, "_ccmd", 2163421413u, 0, 5, &be_const_str_last_modified); +be_define_const_str(last_modified, "last_modified", 772177145u, 0, 13, NULL); +be_define_const_str(GPS_TX, "GPS_TX", 4228740808u, 0, 6, &be_const_str__get_cb); +be_define_const_str(_get_cb, "_get_cb", 1448849122u, 0, 7, NULL); +be_define_const_str(SYMBOL_BATTERY_FULL, "SYMBOL_BATTERY_FULL", 2638935545u, 0, 19, &be_const_str_exists); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, NULL); +be_define_const_str(save, "save", 3439296072u, 0, 4, NULL); +be_define_const_str(SERIAL_7N2, "SERIAL_7N2", 1874282627u, 0, 10, NULL); +be_define_const_str(SWT1, "SWT1", 805224112u, 0, 4, NULL); +be_define_const_str(MAX7219CLK, "MAX7219CLK", 963568838u, 0, 10, &be_const_str_SYMBOL_SD_CARD); +be_define_const_str(SYMBOL_SD_CARD, "SYMBOL_SD_CARD", 2542376484u, 0, 14, &be_const_str_set_useragent); +be_define_const_str(set_useragent, "set_useragent", 612237244u, 0, 13, NULL); +be_define_const_str(SERIAL_7E1, "SERIAL_7E1", 147718061u, 0, 10, NULL); +be_define_const_str(ROT1A, "ROT1A", 759599716u, 0, 5, &be_const_str_ST7789_CS); +be_define_const_str(ST7789_CS, "ST7789_CS", 2937305434u, 0, 9, NULL); +be_define_const_str(SDS0X1_TX, "SDS0X1_TX", 165045983u, 0, 9, &be_const_str_ctypes_bytes_dyn); +be_define_const_str(ctypes_bytes_dyn, "ctypes_bytes_dyn", 915205307u, 0, 16, NULL); +be_define_const_str(pin, "pin", 1866532500u, 0, 3, &be_const_str_range); +be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); +be_define_const_str(ETH_PHY_MDC, "ETH_PHY_MDC", 1519379581u, 0, 11, &be_const_str_NRF24_DC); +be_define_const_str(NRF24_DC, "NRF24_DC", 688921313u, 0, 8, &be_const_str_millis); +be_define_const_str(millis, "millis", 1214679063u, 0, 6, &be_const_str_time_dump); +be_define_const_str(time_dump, "time_dump", 3330410747u, 0, 9, NULL); +be_define_const_str(begin, "begin", 1748273790u, 0, 5, NULL); +be_define_const_str(DHT22, "DHT22", 215937903u, 0, 5, &be_const_str_SYMBOL_UP); +be_define_const_str(SYMBOL_UP, "SYMBOL_UP", 3886401511u, 0, 9, NULL); +be_define_const_str(I2S_IN_CLK, "I2S_IN_CLK", 2996930120u, 0, 10, &be_const_str_nan); +be_define_const_str(nan, "nan", 797905850u, 0, 3, NULL); +be_define_const_str(AES_GCM, "AES_GCM", 3832208678u, 0, 7, &be_const_str_HX711_SCK); +be_define_const_str(HX711_SCK, "HX711_SCK", 3785979404u, 0, 9, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, NULL); +be_define_const_str(CC1101_GDO0, "CC1101_GDO0", 940611027u, 0, 11, NULL); +be_define_const_str(set_timer, "set_timer", 2135414533u, 0, 9, NULL); +be_define_const_str(BS814_CLK, "BS814_CLK", 3002713336u, 0, 9, &be_const_str_IEM3000_TX); +be_define_const_str(IEM3000_TX, "IEM3000_TX", 1185907310u, 0, 10, &be_const_str_SERIAL_8N2); +be_define_const_str(SERIAL_8N2, "SERIAL_8N2", 2386074854u, 0, 10, &be_const_str_SSD1331_CS); +be_define_const_str(SSD1331_CS, "SSD1331_CS", 4191047928u, 0, 10, &be_const_str_clear); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, NULL); +be_define_const_str(A4988_MS1, "A4988_MS1", 1729976611u, 0, 9, &be_const_str_LED1); +be_define_const_str(LED1, "LED1", 21005825u, 0, 4, &be_const_str_SERIAL_8E2); +be_define_const_str(SERIAL_8E2, "SERIAL_8E2", 2421454473u, 0, 10, &be_const_str_SYMBOL_BATTERY_EMPTY); +be_define_const_str(SYMBOL_BATTERY_EMPTY, "SYMBOL_BATTERY_EMPTY", 3945064277u, 0, 20, &be_const_str___upper__); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); +be_define_const_str(I2S_IN_SLCT, "I2S_IN_SLCT", 706051516u, 0, 11, NULL); +be_define_const_str(AZ_TXD, "AZ_TXD", 850268709u, 0, 6, &be_const_str__global_def); +be_define_const_str(_global_def, "_global_def", 646007001u, 0, 11, &be_const_str_lv_style); +be_define_const_str(lv_style, "lv_style", 4151611549u, 0, 8, NULL); +be_define_const_str(_ptr, "_ptr", 306235816u, 0, 4, NULL); +be_define_const_str(SERIAL_5N2, "SERIAL_5N2", 3363364537u, 0, 10, &be_const_str_ZEROCROSS); +be_define_const_str(ZEROCROSS, "ZEROCROSS", 1747596785u, 0, 9, &be_const_str_exec_cmd); +be_define_const_str(exec_cmd, "exec_cmd", 493567399u, 0, 8, NULL); +be_define_const_str(OPEN_DRAIN, "OPEN_DRAIN", 677872608u, 0, 10, &be_const_str_attrdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_lv_roller); +be_define_const_str(lv_roller, "lv_roller", 661902064u, 0, 9, NULL); +be_define_const_str(KEY1, "KEY1", 6715975u, 0, 4, &be_const_str_read13); +be_define_const_str(read13, "read13", 12887293u, 0, 6, NULL); +be_define_const_str(SYMBOL_CHARGE, "SYMBOL_CHARGE", 2106391946u, 0, 13, &be_const_str_TM1638CLK); +be_define_const_str(TM1638CLK, "TM1638CLK", 3045182446u, 0, 9, &be_const_str_dac_voltage); +be_define_const_str(dac_voltage, "dac_voltage", 1552257222u, 0, 11, NULL); +be_define_const_str(POST, "POST", 1929554311u, 0, 4, &be_const_str_RFSEND); +be_define_const_str(RFSEND, "RFSEND", 1862630731u, 0, 6, &be_const_str_gamma10); +be_define_const_str(gamma10, "gamma10", 3472052483u, 0, 7, NULL); +be_define_const_str(INTERRUPT, "INTERRUPT", 3809502704u, 0, 9, &be_const_str_SOLAXX1_TX); +be_define_const_str(SOLAXX1_TX, "SOLAXX1_TX", 903770840u, 0, 10, &be_const_str_lv_textarea); +be_define_const_str(lv_textarea, "lv_textarea", 2864635074u, 0, 11, NULL); +be_define_const_str(_cb, "_cb", 4043300367u, 0, 3, &be_const_str_return); +be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(ADC_INPUT, "ADC_INPUT", 2207556878u, 0, 9, &be_const_str_asin); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_tob64); +be_define_const_str(tob64, "tob64", 373777640u, 0, 5, NULL); +be_define_const_str(AS3935, "AS3935", 603621745u, 0, 6, NULL); +be_define_const_str(SYMBOL_PREV, "SYMBOL_PREV", 2952615023u, 0, 11, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); +be_define_const_str(AudioFileSource, "AudioFileSource", 2959980058u, 0, 15, &be_const_str_compile); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_digital_read); +be_define_const_str(digital_read, "digital_read", 3585496928u, 0, 12, &be_const_str_int); +be_define_const_str(int, "int", 2515107422u, 0, 3, NULL); +be_define_const_str(CNTR1, "CNTR1", 510376965u, 0, 5, NULL); +be_define_const_str(SSPI_MAX31865_CS1, "SSPI_MAX31865_CS1", 1256578724u, 0, 17, &be_const_str_def); +be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); +be_define_const_str(PULLUP, "PULLUP", 3417628531u, 0, 6, &be_const_str_start); +be_define_const_str(start, "start", 1697318111u, 0, 5, NULL); +be_define_const_str(OneWire, "OneWire", 2298990722u, 0, 7, &be_const_str_lv_canvas); +be_define_const_str(lv_canvas, "lv_canvas", 142865412u, 0, 9, &be_const_str_toptr); +be_define_const_str(toptr, "toptr", 3379847454u, 0, 5, NULL); +be_define_const_str(HM10_TX, "HM10_TX", 1522037252u, 0, 7, &be_const_str_publish_result); +be_define_const_str(publish_result, "publish_result", 2013351252u, 0, 14, NULL); +be_define_const_str(SSD1331_DC, "SSD1331_DC", 3386560859u, 0, 10, &be_const_str_screenshot); +be_define_const_str(screenshot, "screenshot", 3894592561u, 0, 10, &be_const_str_tag); +be_define_const_str(tag, "tag", 2516003219u, 0, 3, NULL); +be_define_const_str(PZEM0XX_TX, "PZEM0XX_TX", 944775704u, 0, 10, &be_const_str_Tasmota); +be_define_const_str(Tasmota, "Tasmota", 4047617668u, 0, 7, NULL); +be_define_const_str(SENSOR_END, "SENSOR_END", 3512542657u, 0, 10, &be_const_str_VL53L0X_XSHUT1); +be_define_const_str(VL53L0X_XSHUT1, "VL53L0X_XSHUT1", 2341134183u, 0, 14, &be_const_str_concat); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, NULL); +be_define_const_str(wifi, "wifi", 120087624u, 0, 4, NULL); +be_define_const_str(ILI9341_CS, "ILI9341_CS", 3519318851u, 0, 10, &be_const_str_SDM72_RX); +be_define_const_str(SDM72_RX, "SDM72_RX", 766750035u, 0, 8, &be_const_str_TCP_TX); +be_define_const_str(TCP_TX, "TCP_TX", 2762594089u, 0, 6, NULL); +be_define_const_str(ADC_PH, "ADC_PH", 3820290594u, 0, 6, &be_const_str_SYMBOL_CLOSE); +be_define_const_str(SYMBOL_CLOSE, "SYMBOL_CLOSE", 2654402806u, 0, 12, NULL); +be_define_const_str(CSE7766_TX, "CSE7766_TX", 674624821u, 0, 10, NULL); +be_define_const_str(SHELLY_DIMMER_BOOT0, "SHELLY_DIMMER_BOOT0", 2948777716u, 0, 19, &be_const_str_wire2); +be_define_const_str(wire2, "wire2", 3229499038u, 0, 5, NULL); +be_define_const_str(AudioOutputI2S, "AudioOutputI2S", 638031784u, 0, 14, &be_const_str_str); +be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, NULL); +be_define_const_str(IEM3000_RX, "IEM3000_RX", 1117811096u, 0, 10, NULL); +be_define_const_str(TFMINIPLUS_RX, "TFMINIPLUS_RX", 1522203935u, 0, 13, &be_const_str_content_stop); +be_define_const_str(content_stop, "content_stop", 658554751u, 0, 12, NULL); +be_define_const_str(write_bytes, "write_bytes", 1227543792u, 0, 11, NULL); +be_define_const_str(SI7021, "SI7021", 864377911u, 0, 6, &be_const_str_digital_write); +be_define_const_str(digital_write, "digital_write", 3435877979u, 0, 13, NULL); +be_define_const_str(ROT1B, "ROT1B", 809932573u, 0, 5, NULL); +be_define_const_str(PN532_RXD, "PN532_RXD", 1780093022u, 0, 9, &be_const_str_TX2X_TXD_BLACK); +be_define_const_str(TX2X_TXD_BLACK, "TX2X_TXD_BLACK", 956526176u, 0, 14, NULL); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_LOW); +be_define_const_str(LOW, "LOW", 3526092385u, 0, 3, &be_const_str_TELEINFO_ENABLE); +be_define_const_str(TELEINFO_ENABLE, "TELEINFO_ENABLE", 1600974501u, 0, 15, NULL); +be_define_const_str(TM1638DIO, "TM1638DIO", 1408212414u, 0, 9, NULL); +be_define_const_str(BUZZER_INV, "BUZZER_INV", 3274564335u, 0, 10, &be_const_str_LEDLNK_INV); +be_define_const_str(LEDLNK_INV, "LEDLNK_INV", 3559015101u, 0, 10, &be_const_str_MAX31855CS); +be_define_const_str(MAX31855CS, "MAX31855CS", 753620511u, 0, 10, &be_const_str_SYMBOL_VIDEO); +be_define_const_str(SYMBOL_VIDEO, "SYMBOL_VIDEO", 789726913u, 0, 12, &be_const_str_content_button); +be_define_const_str(content_button, "content_button", 1956476087u, 0, 14, &be_const_str_read); +be_define_const_str(read, "read", 3470762949u, 0, 4, NULL); +be_define_const_str(I2C_SDA, "I2C_SDA", 1052592262u, 0, 7, &be_const_str_read12); +be_define_const_str(read12, "read12", 4291076970u, 0, 6, NULL); +be_define_const_str(SYMBOL_EJECT, "SYMBOL_EJECT", 873760647u, 0, 12, &be_const_str_bus); +be_define_const_str(bus, "bus", 1607822841u, 0, 3, NULL); +be_define_const_str(MIEL_HVAC_RX, "MIEL_HVAC_RX", 3720609648u, 0, 12, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(ILI9488_CS, "ILI9488_CS", 2363112073u, 0, 10, &be_const_str_SSPI_MOSI); +be_define_const_str(SSPI_MOSI, "SSPI_MOSI", 3745917497u, 0, 9, &be_const_str_get_size); +be_define_const_str(get_size, "get_size", 2803644713u, 0, 8, &be_const_str_resp_cmnd_error); +be_define_const_str(resp_cmnd_error, "resp_cmnd_error", 2404088863u, 0, 15, NULL); +be_define_const_str(ARIRFRCV, "ARIRFRCV", 1120816444u, 0, 8, &be_const_str_SYMBOL_PLAY); +be_define_const_str(SYMBOL_PLAY, "SYMBOL_PLAY", 1750902100u, 0, 11, &be_const_str_count); +be_define_const_str(count, "count", 967958004u, 0, 5, NULL); +be_define_const_str(I2S_OUT_CLK, "I2S_OUT_CLK", 2580200387u, 0, 11, &be_const_str_call); +be_define_const_str(call, "call", 3018949801u, 0, 4, NULL); +be_define_const_str(_buffer, "_buffer", 2044888568u, 0, 7, &be_const_str_cosh); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_on); +be_define_const_str(on, "on", 1630810064u, 0, 2, NULL); +be_define_const_str(OUTPUT_LO, "OUTPUT_LO", 3724620328u, 0, 9, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(SDS0X1_RX, "SDS0X1_RX", 1170717385u, 0, 9, &be_const_str_atan2); +be_define_const_str(atan2, "atan2", 3173440503u, 0, 5, NULL); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(RC522_CS, "RC522_CS", 2639619996u, 0, 8, &be_const_str_has_arg); +be_define_const_str(has_arg, "has_arg", 424878688u, 0, 7, NULL); +be_define_const_str(ARIRFSEL, "ARIRFSEL", 233874443u, 0, 8, &be_const_str_TCP_RX); +be_define_const_str(TCP_RX, "TCP_RX", 3904354751u, 0, 6, &be_const_str_lv_checkbox); +be_define_const_str(lv_checkbox, "lv_checkbox", 7454841u, 0, 11, &be_const_str_raise); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); +be_define_const_str(DDS2382_RX, "DDS2382_RX", 432446462u, 0, 10, &be_const_str_NEOPOOL_TX); +be_define_const_str(NEOPOOL_TX, "NEOPOOL_TX", 2924925804u, 0, 10, &be_const_str_SYMBOL_CUT); +be_define_const_str(SYMBOL_CUT, "SYMBOL_CUT", 3455112394u, 0, 10, NULL); +be_define_const_str(MAX31855CLK, "MAX31855CLK", 715977727u, 0, 11, &be_const_str_RC522_RST); +be_define_const_str(RC522_RST, "RC522_RST", 720511443u, 0, 9, &be_const_str_REL1_INV); +be_define_const_str(REL1_INV, "REL1_INV", 3733155371u, 0, 8, &be_const_str_read24); +be_define_const_str(read24, "read24", 1808533811u, 0, 6, NULL); +be_define_const_str(SYMBOL_DOWN, "SYMBOL_DOWN", 1107513570u, 0, 11, &be_const_str_SYMBOL_EYE_CLOSE); +be_define_const_str(SYMBOL_EYE_CLOSE, "SYMBOL_EYE_CLOSE", 404721792u, 0, 16, &be_const_str__class); +be_define_const_str(_class, "_class", 2732146350u, 0, 6, NULL); +be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_static); +be_define_const_str(static, "static", 3532702267u, 71, 6, NULL); +be_define_const_str(AudioGeneratorMP3, "AudioGeneratorMP3", 2199818488u, 0, 17, &be_const_str_SYMBOL_BATTERY_2); +be_define_const_str(SYMBOL_BATTERY_2, "SYMBOL_BATTERY_2", 645813682u, 0, 16, &be_const_str_delay); +be_define_const_str(delay, "delay", 1322381784u, 0, 5, &be_const_str_state); +be_define_const_str(state, "state", 2016490230u, 0, 5, NULL); +be_define_const_str(SDM630_RX, "SDM630_RX", 1971606309u, 0, 9, &be_const_str_toint); +be_define_const_str(toint, "toint", 3613182909u, 0, 5, NULL); +be_define_const_str(BACKLIGHT, "BACKLIGHT", 3147761926u, 0, 9, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_REL1); +be_define_const_str(REL1, "REL1", 3142397887u, 0, 4, &be_const_str_fromptr); +be_define_const_str(fromptr, "fromptr", 666189689u, 0, 7, &be_const_str_target_search); +be_define_const_str(target_search, "target_search", 1947846553u, 0, 13, NULL); +be_define_const_str(detect, "detect", 8884370u, 0, 6, NULL); +be_define_const_str(HRXL_RX, "HRXL_RX", 92702006u, 0, 7, &be_const_str_OUTPUT_HI); +be_define_const_str(OUTPUT_HI, "OUTPUT_HI", 3153592902u, 0, 9, &be_const_str_SYMBOL_WARNING); +be_define_const_str(SYMBOL_WARNING, "SYMBOL_WARNING", 4119913686u, 0, 14, &be_const_str_read32); +be_define_const_str(read32, "read32", 1741276240u, 0, 6, NULL); +be_define_const_str(SPI_DC, "SPI_DC", 553259951u, 0, 6, &be_const_str_keys); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_search); +be_define_const_str(search, "search", 2150836393u, 0, 6, NULL); +be_define_const_str(OUTPUT, "OUTPUT", 1469629700u, 0, 6, &be_const_str_isnan); +be_define_const_str(isnan, "isnan", 2981347434u, 0, 5, &be_const_str_webclient); +be_define_const_str(webclient, "webclient", 4076389146u, 0, 9, NULL); +be_define_const_str(HJL_CF, "HJL_CF", 786158487u, 0, 6, &be_const_str_TUYA_RX); +be_define_const_str(TUYA_RX, "TUYA_RX", 1609397679u, 0, 7, NULL); +be_define_const_str(SERIAL_5O2, "SERIAL_5O2", 3732325060u, 0, 10, &be_const_str_SPI_MISO); +be_define_const_str(SPI_MISO, "SPI_MISO", 150818010u, 0, 8, &be_const_str_isrunning); +be_define_const_str(isrunning, "isrunning", 1688182268u, 0, 9, NULL); +be_define_const_str(IRRECV, "IRRECV", 1743648982u, 0, 6, &be_const_str_SERIAL_6N2); +be_define_const_str(SERIAL_6N2, "SERIAL_6N2", 148562844u, 0, 10, NULL); +be_define_const_str(AudioGeneratorWAV, "AudioGeneratorWAV", 2746509368u, 0, 17, &be_const_str_PROJECTOR_CTRL_TX); +be_define_const_str(PROJECTOR_CTRL_TX, "PROJECTOR_CTRL_TX", 535811130u, 0, 17, &be_const_str__read); +be_define_const_str(_read, "_read", 346717030u, 0, 5, NULL); +be_define_const_str(EPD_DATA, "EPD_DATA", 3799141097u, 0, 8, NULL); +be_define_const_str(geti, "geti", 2381006490u, 0, 4, NULL); +be_define_const_str(SYMBOL_BACKSPACE, "SYMBOL_BACKSPACE", 1997168681u, 0, 16, NULL); +be_define_const_str(RF_SENSOR, "RF_SENSOR", 2289628100u, 0, 9, &be_const_str_SERIAL_8O1); +be_define_const_str(SERIAL_8O1, "SERIAL_8O1", 289122742u, 0, 10, &be_const_str__p); +be_define_const_str(_p, "_p", 1594591802u, 0, 2, NULL); +be_define_const_str(AZ_RXD, "AZ_RXD", 699914019u, 0, 6, &be_const_str__global_addr); +be_define_const_str(_global_addr, "_global_addr", 533766721u, 0, 12, &be_const_str_arg_size); +be_define_const_str(arg_size, "arg_size", 3310243257u, 0, 8, &be_const_str_char); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_iter); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_lv_group); +be_define_const_str(lv_group, "lv_group", 3852039019u, 0, 8, &be_const_str_read_bytes); +be_define_const_str(read_bytes, "read_bytes", 3576733173u, 0, 10, NULL); +be_define_const_str(I2C_SCL, "I2C_SCL", 164217098u, 0, 7, &be_const_str_RA8876_CS); +be_define_const_str(RA8876_CS, "RA8876_CS", 2529944108u, 0, 9, &be_const_str_find_op); +be_define_const_str(find_op, "find_op", 3766713376u, 0, 7, NULL); +be_define_const_str(EC_C25519, "EC_C25519", 95492591u, 0, 9, NULL); +be_define_const_str(I2S_IN_DATA, "I2S_IN_DATA", 4125971460u, 0, 11, &be_const_str_SERIAL_6E1); +be_define_const_str(SERIAL_6E1, "SERIAL_6E1", 334249486u, 0, 10, &be_const_str_reverse_gamma10); +be_define_const_str(reverse_gamma10, "reverse_gamma10", 739112262u, 0, 15, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_gamma8); +be_define_const_str(gamma8, "gamma8", 3802843830u, 0, 6, &be_const_str_memory); +be_define_const_str(memory, "memory", 2229924270u, 0, 6, &be_const_str_run_deferred); +be_define_const_str(run_deferred, "run_deferred", 371594696u, 0, 12, NULL); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(wire_scan, "wire_scan", 2671275880u, 0, 9, NULL); +be_define_const_str(NONE, "NONE", 1932136219u, 0, 4, &be_const_str_SM16716_CLK); +be_define_const_str(SM16716_CLK, "SM16716_CLK", 3037641483u, 0, 11, &be_const_str_getbits); +be_define_const_str(getbits, "getbits", 3094168979u, 0, 7, &be_const_str_remove); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(ADC_BUTTON, "ADC_BUTTON", 3393454690u, 0, 10, &be_const_str_insert); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_lv_table); +be_define_const_str(lv_table, "lv_table", 1675691020u, 0, 8, &be_const_str_if); +be_define_const_str(if, "if", 959999494u, 50, 2, NULL); +be_define_const_str(LE01MR_TX, "LE01MR_TX", 1589687023u, 0, 9, &be_const_str_MD5); +be_define_const_str(MD5, "MD5", 1935726387u, 0, 3, NULL); +be_define_const_str(dot_p1, ".p1", 249175686u, 0, 3, &be_const_str_CSE7761_RX); +be_define_const_str(CSE7761_RX, "CSE7761_RX", 65423248u, 0, 10, &be_const_str_HPMA_TX); +be_define_const_str(HPMA_TX, "HPMA_TX", 173233104u, 0, 7, &be_const_str_SM2135_DAT); +be_define_const_str(SM2135_DAT, "SM2135_DAT", 2882726942u, 0, 10, &be_const_str_skip); +be_define_const_str(skip, "skip", 1097563074u, 0, 4, NULL); +be_define_const_str(SERIAL_5E1, "SERIAL_5E1", 1163775235u, 0, 10, NULL); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_WEBCAM_PCLK); +be_define_const_str(WEBCAM_PCLK, "WEBCAM_PCLK", 3813770649u, 0, 11, &be_const_str_lv_imgbtn); +be_define_const_str(lv_imgbtn, "lv_imgbtn", 2402844429u, 0, 9, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_TM1638CLK, - (const bstring *)&be_const_str_MAX31855CS, + (const bstring *)&be_const_str_MCP39F5_RST, NULL, - (const bstring *)&be_const_str_RISING, - (const bstring *)&be_const_str_deg, - (const bstring *)&be_const_str_SYMBOL_BATTERY_3, - (const bstring *)&be_const_str_SDM120_RX, - (const bstring *)&be_const_str_GPS_TX, - (const bstring *)&be_const_str_AS3935, - (const bstring *)&be_const_str_RFSEND, + (const bstring *)&be_const_str_PULLDOWN, NULL, - (const bstring *)&be_const_str_DI, (const bstring *)&be_const_str_CNTR1_NP, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str_ADC_PH, - NULL, - (const bstring *)&be_const_str_get_free_heap, - (const bstring *)&be_const_str_finish, - (const bstring *)&be_const_str_SYMBOL_DUMMY, - (const bstring *)&be_const_str_SYMBOL_POWER, - (const bstring *)&be_const_str_AZ_TXD, - NULL, - (const bstring *)&be_const_str_codedump, - (const bstring *)&be_const_str_SDM72_RX, - (const bstring *)&be_const_str_DHT11, - NULL, - (const bstring *)&be_const_str_LEDLNK_INV, - (const bstring *)&be_const_str_HX711_SCK, - (const bstring *)&be_const_str_SYMBOL_NEW_LINE, - (const bstring *)&be_const_str_KEY1_TC, - (const bstring *)&be_const_str_opt_call, - (const bstring *)&be_const_str_HPMA_TX, - (const bstring *)&be_const_str_raise, - NULL, + (const bstring *)&be_const_str_DSB_OUT, + (const bstring *)&be_const_str_P9813_DAT, + (const bstring *)&be_const_str_seg7_font, + (const bstring *)&be_const_str_ETH_PHY_POWER, (const bstring *)&be_const_str__drivers, - NULL, - (const bstring *)&be_const_str_A4988_DIR, - (const bstring *)&be_const_str_PZEM017_RX, - (const bstring *)&be_const_str_ARIRFRCV, - (const bstring *)&be_const_str_RC522_CS, - (const bstring *)&be_const_str_def, - (const bstring *)&be_const_str_SSD1331_DC, - (const bstring *)&be_const_str_SYMBOL_BACKSPACE, - (const bstring *)&be_const_str_SYMBOL_OK, - NULL, - (const bstring *)&be_const_str_SPI_DC, - (const bstring *)&be_const_str_SYMBOL_USB, - (const bstring *)&be_const_str_TXD, - (const bstring *)&be_const_str_screenshot, - (const bstring *)&be_const_str_ADC_TEMP, - (const bstring *)&be_const_str_opt_add, - (const bstring *)&be_const_str__cmd, - (const bstring *)&be_const_str_HJL_CF, - (const bstring *)&be_const_str_lv_btnmatrix, - NULL, - (const bstring *)&be_const_str_IEM3000_TX, - (const bstring *)&be_const_str_MGC3130_XFER, - (const bstring *)&be_const_str_MHZ_TXD, - (const bstring *)&be_const_str_FALLING, - (const bstring *)&be_const_str_WE517_RX, - (const bstring *)&be_const_str_atan, - (const bstring *)&be_const_str_ADC_JOY, - (const bstring *)&be_const_str_arg, - (const bstring *)&be_const_str_TASMOTACLIENT_RXD, - (const bstring *)&be_const_str_PWM1_INV, - (const bstring *)&be_const_str_chars_in_string, - (const bstring *)&be_const_str_MCP39F5_RX, - (const bstring *)&be_const_str_SYMBOL_RIGHT, - NULL, - (const bstring *)&be_const_str_CSE7761_TX, - NULL, - NULL, - (const bstring *)&be_const_str_ST7789_DC, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str___lower__, - (const bstring *)&be_const_str_ILI9341_DC, - (const bstring *)&be_const_str_WEBCAM_HREF, - (const bstring *)&be_const_str_DEEPSLEEP, - (const bstring *)&be_const_str_WIEGAND_D0, - (const bstring *)&be_const_str_SM16716_SEL, - (const bstring *)&be_const_str_SM2135_DAT, - (const bstring *)&be_const_str_I2C_SDA, - (const bstring *)&be_const_str_A4988_ENA, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str_SYMBOL_WIFI, - (const bstring *)&be_const_str_class, - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str_resp_cmnd, + (const bstring *)&be_const_str_DI, + (const bstring *)&be_const_str_SYMBOL_SHUFFLE, + (const bstring *)&be_const_str_set_light, + (const bstring *)&be_const_str_SAIR_TX, + (const bstring *)&be_const_str_RDM6300_RX, + (const bstring *)&be_const_str_TM1637DIO, + (const bstring *)&be_const_str_WEBCAM_PSCLK, + (const bstring *)&be_const_str_SERIAL_7O1, + (const bstring *)&be_const_str_SYMBOL_LIST, (const bstring *)&be_const_str_ELECTRIQ_MOODL_TX, - (const bstring *)&be_const_str_classof, NULL, + (const bstring *)&be_const_str_CHANGE, + (const bstring *)&be_const_str_tanh, + (const bstring *)&be_const_str_SYMBOL_REFRESH, + NULL, + (const bstring *)&be_const_str_SYMBOL_BELL, + (const bstring *)&be_const_str_dot_size, + (const bstring *)&be_const_str_SWT1_PD, + (const bstring *)&be_const_str_GPS_RX, + (const bstring *)&be_const_str_elif, + (const bstring *)&be_const_str_dot_w, + (const bstring *)&be_const_str_ZIGBEE_RST, + (const bstring *)&be_const_str_OPTION_A, + (const bstring *)&be_const_str_AudioFileSourceFS, + (const bstring *)&be_const_str_DHT11_OUT, + (const bstring *)&be_const_str_LE01MR_RX, + (const bstring *)&be_const_str_DDS2382_TX, + (const bstring *)&be_const_str_SERIAL_6N1, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str_MGC3130_XFER, + (const bstring *)&be_const_str___lower__, + (const bstring *)&be_const_str_SYMBOL_PASTE, NULL, (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_SYMBOL_DOWNLOAD, (const bstring *)&be_const_str_IRSEND, - (const bstring *)&be_const_str_SPI_MOSI, - (const bstring *)&be_const_str_ADC_INPUT, - (const bstring *)&be_const_str_add_cmd, - (const bstring *)&be_const_str_DDSU666_TX, - (const bstring *)&be_const_str_PN532_RXD, - (const bstring *)&be_const_str_SDS0X1_TX, - (const bstring *)&be_const_str_lv_imgbtn, - (const bstring *)&be_const_str_KEY1, - NULL, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_DDS2382_RX, - (const bstring *)&be_const_str_HLW_CF, - (const bstring *)&be_const_str_BOILER_OT_TX, - (const bstring *)&be_const_str_top, - (const bstring *)&be_const_str_fromstring, - (const bstring *)&be_const_str_ROT1B_NP, - (const bstring *)&be_const_str_set_timer, - (const bstring *)&be_const_str_WEBCAM_PSCLK, - (const bstring *)&be_const_str_WEBCAM_SIOC, - (const bstring *)&be_const_str_WIEGAND_D1, - (const bstring *)&be_const_str_LOW, - NULL, - (const bstring *)&be_const_str_AZ_RXD, - (const bstring *)&be_const_str_button_pressed, - (const bstring *)&be_const_str_BS814_DAT, - (const bstring *)&be_const_str_TM1637DIO, - (const bstring *)&be_const_str_tolower, - (const bstring *)&be_const_str_Driver, - (const bstring *)&be_const_str_NRG_CF1, - (const bstring *)&be_const_str_SR04_ECHO, - (const bstring *)&be_const_str_ETH_PHY_MDC, - NULL, - (const bstring *)&be_const_str_MHZ_RXD, - (const bstring *)&be_const_str_SYMBOL_EJECT, + (const bstring *)&be_const_str_MGC3130_RESET, + (const bstring *)&be_const_str_FALLING, (const bstring *)&be_const_str_HIGH, - (const bstring *)&be_const_str_ARIRFSEL, - (const bstring *)&be_const_str_NONE, + (const bstring *)&be_const_str_SYMBOL_OK, NULL, - (const bstring *)&be_const_str_SPI_CS, - (const bstring *)&be_const_str_BS814_CLK, - (const bstring *)&be_const_str_SYMBOL_AUDIO, - (const bstring *)&be_const_str_CHANGE, - (const bstring *)&be_const_str_DSB_OUT, - (const bstring *)&be_const_str_SM16716_CLK, - (const bstring *)&be_const_str_TFMINIPLUS_RX, - (const bstring *)&be_const_str_NRG_SEL_INV, - (const bstring *)&be_const_str_WS2812, - (const bstring *)&be_const_str_SM2135_CLK, - (const bstring *)&be_const_str_HM10_TX, - (const bstring *)&be_const_str_SENSOR_END, - (const bstring *)&be_const_str_DHT11_OUT, - (const bstring *)&be_const_str_SYMBOL_TRASH, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_IEM3000_RX, - (const bstring *)&be_const_str_detect, - (const bstring *)&be_const_str_SOLAXX1_TX, - (const bstring *)&be_const_str_KEY1_INV_NP, - (const bstring *)&be_const_str_WEBCAM_PWDN, - (const bstring *)&be_const_str_PROJECTOR_CTRL_TX, - (const bstring *)&be_const_str_lv_roller, - (const bstring *)&be_const_str_CSE7761_RX, - (const bstring *)&be_const_str_A4988_MS1, - (const bstring *)&be_const_str_lv_font, - (const bstring *)&be_const_str_DDS2382_TX, - (const bstring *)&be_const_str_MD5, - (const bstring *)&be_const_str_OUTPUT_LO, + (const bstring *)&be_const_str_for, + (const bstring *)&be_const_str_TXD, + (const bstring *)&be_const_str_SR04_ECHO, + (const bstring *)&be_const_str_BUZZER, + (const bstring *)&be_const_str_ADC_TEMP, + (const bstring *)&be_const_str_MCP39F5_TX, + (const bstring *)&be_const_str_KEY1_NP, + (const bstring *)&be_const_str_EXS_ENABLE, + (const bstring *)&be_const_str_SYMBOL_GPS, + (const bstring *)&be_const_str_ADC_RANGE, + (const bstring *)&be_const_str_remove_driver, + (const bstring *)&be_const_str_MCP39F5_RX, + (const bstring *)&be_const_str_ILI9341_DC, NULL, (const bstring *)&be_const_str_HX711_DAT, - (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, - (const bstring *)&be_const_str_SSPI_MOSI, - (const bstring *)&be_const_str_content_stop, - (const bstring *)&be_const_str_TUYA_RX, - (const bstring *)&be_const_str_HM10_RX, - (const bstring *)&be_const_str_DSB, + (const bstring *)&be_const_str_RFRECV, NULL, - (const bstring *)&be_const_str_montserrat_font, + (const bstring *)&be_const_str_SSPI_MISO, + (const bstring *)&be_const_str_A4988_ENA, + (const bstring *)&be_const_str_SDM120_RX, + (const bstring *)&be_const_str_lv_indev, + (const bstring *)&be_const_str_pow, + (const bstring *)&be_const_str_SYMBOL_PAUSE, NULL, - (const bstring *)&be_const_str_SYMBOL_PLUS, - (const bstring *)&be_const_str_SYMBOL_VOLUME_MID, - (const bstring *)&be_const_str_CC1101_GDO2, - (const bstring *)&be_const_str_WEBCAM_PSRCS, - (const bstring *)&be_const_str_DYP_RX, - (const bstring *)&be_const_str_INPUT_PULLDOWN, - (const bstring *)&be_const_str_DCKI, - (const bstring *)&be_const_str_SR04_TRIG, - (const bstring *)&be_const_str_SYMBOL_MINUS, - (const bstring *)&be_const_str_MIEL_HVAC_TX, - (const bstring *)&be_const_str_resp_cmnd_error, - (const bstring *)&be_const_str_IBEACON_RX, - (const bstring *)&be_const_str_ILI9341_CS, - (const bstring *)&be_const_str_BACKLIGHT, - (const bstring *)&be_const_str_GPS_RX, - (const bstring *)&be_const_str_TELEINFO_RX, - (const bstring *)&be_const_str_SYMBOL_SAVE, - (const bstring *)&be_const_str_lv_keyboard, - (const bstring *)&be_const_str_MAX7219CS, - (const bstring *)&be_const_str_DDSU666_RX, - (const bstring *)&be_const_str_ADC_CT_POWER, - (const bstring *)&be_const_str_gamma10, - NULL, - (const bstring *)&be_const_str_SBR_RX, - (const bstring *)&be_const_str_collect, - (const bstring *)&be_const_str_content_start, - (const bstring *)&be_const_str_gamma8, - (const bstring *)&be_const_str_A4988_STP, - (const bstring *)&be_const_str_BOILER_OT_RX, - (const bstring *)&be_const_str_SYMBOL_CUT, - NULL, - NULL, - NULL, - (const bstring *)&be_const_str_on, - (const bstring *)&be_const_str_, - (const bstring *)&be_const_str_SHELLY_DIMMER_RST_INV, - NULL, - (const bstring *)&be_const_str_I2C_Driver, - NULL, - NULL, - (const bstring *)&be_const_str_AS608_TX, - (const bstring *)&be_const_str_every_second, - (const bstring *)&be_const_str_WEBCAM_SIOD, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_BUZZER, - (const bstring *)&be_const_str_time_reached, - (const bstring *)&be_const_str_PZEM016_RX, - NULL, - (const bstring *)&be_const_str___upper__, - (const bstring *)&be_const_str_while, - NULL, - (const bstring *)&be_const_str_bus, - (const bstring *)&be_const_str_HPMA_RX, - (const bstring *)&be_const_str_ADC_BUTTON_INV, - (const bstring *)&be_const_str_KEY1_INV, - (const bstring *)&be_const_str_OUTPUT, - NULL, - (const bstring *)&be_const_str_FTC532, - (const bstring *)&be_const_str_SYMBOL_DIRECTORY, - (const bstring *)&be_const_str_IRRECV, - (const bstring *)&be_const_str_lv_chart, - (const bstring *)&be_const_str_RA8876_CS, - (const bstring *)&be_const_str_HRE_DATA, - (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, - (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_EPD_DATA, - (const bstring *)&be_const_str_IBEACON_TX, - NULL, - (const bstring *)&be_const_str_ADC_RANGE, - NULL, - (const bstring *)&be_const_str_TASMOTACLIENT_RST_INV, - (const bstring *)&be_const_str_SYMBOL_IMAGE, - (const bstring *)&be_const_str_NEOPOOL_TX, - (const bstring *)&be_const_str_LEDLNK, - (const bstring *)&be_const_str_CC1101_GDO0, - (const bstring *)&be_const_str_LED1_INV, - (const bstring *)&be_const_str_MAX7219CLK, - (const bstring *)&be_const_str_ROT1A_NP, - (const bstring *)&be_const_str_NRF24_CS, - (const bstring *)&be_const_str_addr, - (const bstring *)&be_const_str_XPT2046_CS, - (const bstring *)&be_const_str_opt_eq, - (const bstring *)&be_const_str_HALLEFFECT, - (const bstring *)&be_const_str_MP3_DFR562, - NULL, - (const bstring *)&be_const_str_break, - (const bstring *)&be_const_str_ETH_PHY_POWER, - NULL, - (const bstring *)&be_const_str_HRXL_RX, - (const bstring *)&be_const_str_NRF24_DC, - (const bstring *)&be_const_str_PMS5003_RX, - (const bstring *)&be_const_str_ROT1A, - (const bstring *)&be_const_str_as, - (const bstring *)&be_const_str_ETH_PHY_MDIO, - (const bstring *)&be_const_str_ADE7953_IRQ, - (const bstring *)&be_const_str_EPAPER29_CS, - (const bstring *)&be_const_str_SDM72_TX, - (const bstring *)&be_const_str_SM16716_DAT, - (const bstring *)&be_const_str_NEOPOOL_RX, - NULL, - (const bstring *)&be_const_str_LE01MR_RX, - (const bstring *)&be_const_str_ADC_BUTTON, + (const bstring *)&be_const_str_SYMBOL_USB, + (const bstring *)&be_const_str_WEBCAM_DATA, + (const bstring *)&be_const_str_pin_mode, + (const bstring *)&be_const_str_SYMBOL_WIFI, + (const bstring *)&be_const_str_WEBCAM_RESET, + (const bstring *)&be_const_str_I2S_OUT_DATA, (const bstring *)&be_const_str_AS608_RX, NULL, - (const bstring *)&be_const_str_PMS5003_TX, + (const bstring *)&be_const_str_SYMBOL_AUDIO, NULL, - (const bstring *)&be_const_str_NRG_SEL, + (const bstring *)&be_const_str_top, + (const bstring *)&be_const_str_SWT1_NP, + (const bstring *)&be_const_str_INPUT_PULLUP, + (const bstring *)&be_const_str_SAIR_RX, + (const bstring *)&be_const_str_SPI_CLK, + (const bstring *)&be_const_str_EPAPER42_CS, + (const bstring *)&be_const_str_AudioGenerator, + NULL, + NULL, + NULL, + (const bstring *)&be_const_str_PROJECTOR_CTRL_RX, + (const bstring *)&be_const_str_ROT1A_NP, + (const bstring *)&be_const_str_CSE7761_TX, + (const bstring *)&be_const_str_SYMBOL_BATTERY_3, + NULL, + (const bstring *)&be_const_str_SERIAL_8N1, + (const bstring *)&be_const_str_lv_switch, (const bstring *)&be_const_str_SDM120_TX, - (const bstring *)&be_const_str_input + (const bstring *)&be_const_str_SSPI_DC, + (const bstring *)&be_const_str_SYMBOL_UPLOAD, + (const bstring *)&be_const_str_eth, + (const bstring *)&be_const_str_LED1_INV, + NULL, + (const bstring *)&be_const_str_HALLEFFECT, + NULL, + (const bstring *)&be_const_str_IBEACON_RX, + (const bstring *)&be_const_str_imin, + (const bstring *)&be_const_str_content_start, + (const bstring *)&be_const_str_classof, + (const bstring *)&be_const_str_SYMBOL_SAVE, + (const bstring *)&be_const_str_MAX31855DO, + (const bstring *)&be_const_str_NRG_SEL_INV, + (const bstring *)&be_const_str_DDSU666_TX, + (const bstring *)&be_const_str_sin, + (const bstring *)&be_const_str_ZIGBEE_TX, + (const bstring *)&be_const_str_HRE_CLOCK, + (const bstring *)&be_const_str_PZEM017_RX, + (const bstring *)&be_const_str_srand, + (const bstring *)&be_const_str_FTC532, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str_PWM1, + (const bstring *)&be_const_str_SSD1351_DC, + NULL, + (const bstring *)&be_const_str_CSE7766_RX, + (const bstring *)&be_const_str_SERIAL_5E2, + (const bstring *)&be_const_str_INPUT, + (const bstring *)&be_const_str_pi, + (const bstring *)&be_const_str_MHZ_TXD, + (const bstring *)&be_const_str_SYMBOL_DUMMY, + (const bstring *)&be_const_str_MHZ_RXD, + (const bstring *)&be_const_str_PMS5003_TX, + (const bstring *)&be_const_str_SDCARD_CS, + (const bstring *)&be_const_str_AudioOutput, + (const bstring *)&be_const_str_DYP_RX, + (const bstring *)&be_const_str_available, + (const bstring *)&be_const_str_BL0940_RX, + (const bstring *)&be_const_str_DEEPSLEEP, + NULL, + (const bstring *)&be_const_str_DCKI, + (const bstring *)&be_const_str_response_append, + (const bstring *)&be_const_str_ADC_LIGHT, + NULL, + (const bstring *)&be_const_str_HLW_CF, + (const bstring *)&be_const_str_NRG_SEL, + (const bstring *)&be_const_str_EPAPER29_CS, + (const bstring *)&be_const_str_BS814_DAT, + (const bstring *)&be_const_str_opt_call, + (const bstring *)&be_const_str_BOILER_OT_TX, + (const bstring *)&be_const_str_SYMBOL_TRASH, + NULL, + (const bstring *)&be_const_str_asstring, + (const bstring *)&be_const_str_CC1101_GDO2, + (const bstring *)&be_const_str_DDSU666_RX, + (const bstring *)&be_const_str_WIEGAND_D0, + (const bstring *)&be_const_str_global, + (const bstring *)&be_const_str_LMT01, + (const bstring *)&be_const_str_SYMBOL_PLUS, + (const bstring *)&be_const_str_load_font, + (const bstring *)&be_const_str_resp_cmnd, + (const bstring *)&be_const_str_lv_meter, + NULL, + (const bstring *)&be_const_str_NRG_CF1, + (const bstring *)&be_const_str_DSB, + NULL, + (const bstring *)&be_const_str_SSD1351_CS, + (const bstring *)&be_const_str_SYMBOL_BATTERY_1, + (const bstring *)&be_const_str_ADC_BUTTON_INV, + (const bstring *)&be_const_str_DAC, + (const bstring *)&be_const_str_PZEM004_RX, + (const bstring *)&be_const_str_ST7789_DC, + (const bstring *)&be_const_str_KEY1_PD, + (const bstring *)&be_const_str_KEY1_TC, + (const bstring *)&be_const_str_OUTPUT_OPEN_DRAIN, + (const bstring *)&be_const_str_OLED_RESET, + (const bstring *)&be_const_str_resp_cmnd_str, + (const bstring *)&be_const_str_SBR_RX, + (const bstring *)&be_const_str_ETH_PHY_MDIO, + (const bstring *)&be_const_str_A4988_STP, + (const bstring *)&be_const_str_dot_len, + (const bstring *)&be_const_str_IBEACON_TX, + (const bstring *)&be_const_str_ADC_JOY, + NULL, + NULL, + (const bstring *)&be_const_str_SERIAL_8O2, + (const bstring *)&be_const_str_lv_colorwheel, + NULL, + NULL, + (const bstring *)&be_const_str_opt_eq, + NULL, + (const bstring *)&be_const_str_SM16716_SEL, + (const bstring *)&be_const_str_decrypt, + (const bstring *)&be_const_str_A4988_DIR, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str_KEY1_INV, + (const bstring *)&be_const_str_SYMBOL_BLUETOOTH, + (const bstring *)&be_const_str_dot_p2, + (const bstring *)&be_const_str_AS608_TX, + (const bstring *)&be_const_str_DHT11, + (const bstring *)&be_const_str_write, + NULL, + (const bstring *)&be_const_str_finish, + (const bstring *)&be_const_str_SYMBOL_DIRECTORY, + (const bstring *)&be_const_str_SYMBOL_MINUS, + (const bstring *)&be_const_str__ccmd, + (const bstring *)&be_const_str_GPS_TX, + (const bstring *)&be_const_str_SYMBOL_BATTERY_FULL, + (const bstring *)&be_const_str_save, + (const bstring *)&be_const_str_SERIAL_7N2, + (const bstring *)&be_const_str_SWT1, + NULL, + (const bstring *)&be_const_str_MAX7219CLK, + (const bstring *)&be_const_str_SERIAL_7E1, + (const bstring *)&be_const_str_ROT1A, + (const bstring *)&be_const_str_SDS0X1_TX, + NULL, + NULL, + (const bstring *)&be_const_str_pin, + (const bstring *)&be_const_str_ETH_PHY_MDC, + (const bstring *)&be_const_str_begin, + (const bstring *)&be_const_str_DHT22, + (const bstring *)&be_const_str_I2S_IN_CLK, + NULL, + (const bstring *)&be_const_str_AES_GCM, + (const bstring *)&be_const_str_CC1101_GDO0, + NULL, + (const bstring *)&be_const_str_set_timer, + (const bstring *)&be_const_str_BS814_CLK, + (const bstring *)&be_const_str_A4988_MS1, + (const bstring *)&be_const_str_I2S_IN_SLCT, + (const bstring *)&be_const_str_AZ_TXD, + (const bstring *)&be_const_str__ptr, + (const bstring *)&be_const_str_SERIAL_5N2, + (const bstring *)&be_const_str_OPEN_DRAIN, + (const bstring *)&be_const_str_KEY1, + (const bstring *)&be_const_str_SYMBOL_CHARGE, + (const bstring *)&be_const_str_POST, + (const bstring *)&be_const_str_INTERRUPT, + (const bstring *)&be_const_str__cb, + (const bstring *)&be_const_str_else, + NULL, + (const bstring *)&be_const_str_ADC_INPUT, + (const bstring *)&be_const_str_AS3935, + NULL, + (const bstring *)&be_const_str_SYMBOL_PREV, + (const bstring *)&be_const_str_AudioFileSource, + (const bstring *)&be_const_str_CNTR1, + (const bstring *)&be_const_str_SSPI_MAX31865_CS1, + (const bstring *)&be_const_str_PULLUP, + (const bstring *)&be_const_str_OneWire, + NULL, + (const bstring *)&be_const_str_HM10_TX, + NULL, + NULL, + (const bstring *)&be_const_str_SSD1331_DC, + (const bstring *)&be_const_str_PZEM0XX_TX, + NULL, + NULL, + (const bstring *)&be_const_str_SENSOR_END, + (const bstring *)&be_const_str_wifi, + (const bstring *)&be_const_str_ILI9341_CS, + (const bstring *)&be_const_str_ADC_PH, + (const bstring *)&be_const_str_CSE7766_TX, + (const bstring *)&be_const_str_SHELLY_DIMMER_BOOT0, + NULL, + (const bstring *)&be_const_str_AudioOutputI2S, + (const bstring *)&be_const_str_resize, + (const bstring *)&be_const_str_IEM3000_RX, + (const bstring *)&be_const_str_TFMINIPLUS_RX, + (const bstring *)&be_const_str_write_bytes, + (const bstring *)&be_const_str_SI7021, + NULL, + (const bstring *)&be_const_str_ROT1B, + (const bstring *)&be_const_str_PN532_RXD, + (const bstring *)&be_const_str_opt_neq, + (const bstring *)&be_const_str_TM1638DIO, + (const bstring *)&be_const_str_BUZZER_INV, + (const bstring *)&be_const_str_I2C_SDA, + (const bstring *)&be_const_str_SYMBOL_EJECT, + (const bstring *)&be_const_str_MIEL_HVAC_RX, + (const bstring *)&be_const_str_ILI9488_CS, + NULL, + NULL, + (const bstring *)&be_const_str_ARIRFRCV, + (const bstring *)&be_const_str_I2S_OUT_CLK, + (const bstring *)&be_const_str__buffer, + NULL, + (const bstring *)&be_const_str_OUTPUT_LO, + (const bstring *)&be_const_str_SDS0X1_RX, + NULL, + (const bstring *)&be_const_str_sinh, + (const bstring *)&be_const_str_RC522_CS, + (const bstring *)&be_const_str_ARIRFSEL, + (const bstring *)&be_const_str_DDS2382_RX, + (const bstring *)&be_const_str_MAX31855CLK, + (const bstring *)&be_const_str_SYMBOL_DOWN, + (const bstring *)&be_const_str_split, + (const bstring *)&be_const_str_AudioGeneratorMP3, + (const bstring *)&be_const_str_SDM630_RX, + (const bstring *)&be_const_str_BACKLIGHT, + (const bstring *)&be_const_str_, + (const bstring *)&be_const_str_detect, + NULL, + (const bstring *)&be_const_str_HRXL_RX, + (const bstring *)&be_const_str_SPI_DC, + (const bstring *)&be_const_str_OUTPUT, + (const bstring *)&be_const_str_HJL_CF, + (const bstring *)&be_const_str_SERIAL_5O2, + NULL, + (const bstring *)&be_const_str_IRRECV, + NULL, + (const bstring *)&be_const_str_AudioGeneratorWAV, + (const bstring *)&be_const_str_EPD_DATA, + (const bstring *)&be_const_str_geti, + (const bstring *)&be_const_str_SYMBOL_BACKSPACE, + (const bstring *)&be_const_str_RF_SENSOR, + (const bstring *)&be_const_str_AZ_RXD, + (const bstring *)&be_const_str_I2C_SCL, + (const bstring *)&be_const_str_EC_C25519, + (const bstring *)&be_const_str_I2S_IN_DATA, + NULL, + (const bstring *)&be_const_str_opt_add, + (const bstring *)&be_const_str_real, + (const bstring *)&be_const_str_wire_scan, + (const bstring *)&be_const_str_NONE, + (const bstring *)&be_const_str_ADC_BUTTON, + (const bstring *)&be_const_str_LE01MR_TX, + (const bstring *)&be_const_str_dot_p1, + (const bstring *)&be_const_str_SERIAL_5E1, + NULL, + (const bstring *)&be_const_str_opt_connect }; static const struct bconststrtab m_const_string_table = { - .size = 283, - .count = 567, + .size = 334, + .count = 669, .table = m_string_table }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_I2C_Driver.h b/lib/libesp32/Berry/generate/be_fixed_be_class_I2C_Driver.h new file mode 100644 index 000000000..4257b0850 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_I2C_Driver.h @@ -0,0 +1,27 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_I2C_Driver_map) { + { be_const_key(read32, -1), be_const_closure(read32_closure) }, + { be_const_key(write8, 6), be_const_closure(write8_closure) }, + { be_const_key(name, -1), be_const_var(0) }, + { be_const_key(addr, 10), be_const_var(1) }, + { be_const_key(read12, -1), be_const_closure(read12_closure) }, + { be_const_key(write_bit, 8), be_const_closure(write_bit_closure) }, + { be_const_key(read13, -1), be_const_closure(read13_closure) }, + { be_const_key(read24, -1), be_const_closure(read24_closure) }, + { be_const_key(wire, -1), be_const_var(2) }, + { be_const_key(init, -1), be_const_closure(init_closure) }, + { be_const_key(read8, -1), be_const_closure(read8_closure) }, +}; + +static be_define_const_map( + be_class_I2C_Driver_map, + 11 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_I2C_Driver, + 3, + (bclass *)&be_class_Driver, + I2C_Driver +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_aes_gcm.h b/lib/libesp32/Berry/generate/be_fixed_be_class_aes_gcm.h new file mode 100644 index 000000000..829383a3f --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_aes_gcm.h @@ -0,0 +1,22 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_aes_gcm_map) { + { be_const_key(encrypt, 4), be_const_func(m_aes_gcm_encryt) }, + { be_const_key(dot_p2, -1), be_const_var(0) }, + { be_const_key(decrypt, -1), be_const_func(m_aes_gcm_decryt) }, + { be_const_key(init, -1), be_const_func(m_aes_gcm_init) }, + { be_const_key(dot_p1, -1), be_const_var(1) }, + { be_const_key(tag, -1), be_const_func(m_aes_gcm_tag) }, +}; + +static be_define_const_map( + be_class_aes_gcm_map, + 6 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_aes_gcm, + 2, + NULL, + AES_GCM +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source.h new file mode 100644 index 000000000..e7e5e0998 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source.h @@ -0,0 +1,17 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_file_source_map) { + { be_const_key(dot_p, -1), be_const_var(0) }, +}; + +static be_define_const_map( + be_class_audio_file_source_map, + 1 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_file_source, + 1, + NULL, + AudioFileSource +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source_fs.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source_fs.h new file mode 100644 index 000000000..6605ba27e --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_file_source_fs.h @@ -0,0 +1,18 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_file_source_fs_map) { + { be_const_key(deinit, -1), be_const_func(i2s_file_source_fs_deinit) }, + { be_const_key(init, -1), be_const_func(i2s_file_source_fs_init) }, +}; + +static be_define_const_map( + be_class_audio_file_source_fs_map, + 2 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_file_source_fs, + 0, + (bclass *)&be_class_audio_file_source, + AudioFileSourceFS +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator.h new file mode 100644 index 000000000..840da47d1 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator.h @@ -0,0 +1,17 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_generator_map) { + { be_const_key(dot_p, -1), be_const_var(0) }, +}; + +static be_define_const_map( + be_class_audio_generator_map, + 1 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_generator, + 1, + NULL, + AudioGenerator +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_mp3.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_mp3.h new file mode 100644 index 000000000..dbe5f0d4f --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_mp3.h @@ -0,0 +1,22 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_generator_mp3_map) { + { be_const_key(begin, -1), be_const_func(i2s_generator_mp3_begin) }, + { be_const_key(loop, -1), be_const_func(i2s_generator_mp3_loop) }, + { be_const_key(isrunning, -1), be_const_func(i2s_generator_mp3_isrunning) }, + { be_const_key(init, 1), be_const_func(i2s_generator_mp3_init) }, + { be_const_key(deinit, -1), be_const_func(i2s_generator_mp3_deinit) }, + { be_const_key(stop, -1), be_const_func(i2s_generator_mp3_stop) }, +}; + +static be_define_const_map( + be_class_audio_generator_mp3_map, + 6 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_generator_mp3, + 0, + (bclass *)&be_class_audio_generator, + AudioGeneratorMP3 +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_wav.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_wav.h new file mode 100644 index 000000000..f08522407 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_generator_wav.h @@ -0,0 +1,22 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_generator_wav_map) { + { be_const_key(begin, -1), be_const_func(i2s_generator_wav_begin) }, + { be_const_key(loop, -1), be_const_func(i2s_generator_wav_loop) }, + { be_const_key(isrunning, -1), be_const_func(i2s_generator_wav_isrunning) }, + { be_const_key(init, 1), be_const_func(i2s_generator_wav_init) }, + { be_const_key(deinit, -1), be_const_func(i2s_generator_wav_deinit) }, + { be_const_key(stop, -1), be_const_func(i2s_generator_wav_stop) }, +}; + +static be_define_const_map( + be_class_audio_generator_wav_map, + 6 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_generator_wav, + 0, + (bclass *)&be_class_audio_generator, + AudioGeneratorWAV +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output.h new file mode 100644 index 000000000..afb2705cb --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output.h @@ -0,0 +1,17 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_output_map) { + { be_const_key(dot_p, -1), be_const_var(0) }, +}; + +static be_define_const_map( + be_class_audio_output_map, + 1 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_output, + 1, + NULL, + AudioOutput +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output_i2s.h b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output_i2s.h new file mode 100644 index 000000000..4e6b84e0d --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_audio_output_i2s.h @@ -0,0 +1,19 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_audio_output_i2s_map) { + { be_const_key(init, -1), be_const_func(i2s_output_i2s_init) }, + { be_const_key(deinit, -1), be_const_func(i2s_output_i2s_deinit) }, + { be_const_key(stop, -1), be_const_func(i2s_output_i2s_stop) }, +}; + +static be_define_const_map( + be_class_audio_output_i2s_map, + 3 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_audio_output_i2s, + 0, + (bclass *)&be_class_audio_output, + AudioOutputI2S +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_bytes.h b/lib/libesp32/Berry/generate/be_fixed_be_class_bytes.h index 44f8eff3e..cb188a521 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_bytes.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_bytes.h @@ -1,33 +1,44 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_bytes_map) { - { be_const_key(copy, -1), be_const_func(m_copy) }, { be_const_key(setitem, -1), be_const_func(m_setitem) }, - { be_const_key(tostring, -1), be_const_func(m_tostring) }, - { be_const_key(item, -1), be_const_func(m_item) }, - { be_const_key(init, 8), be_const_func(m_init) }, - { be_const_key(size, 6), be_const_func(m_size) }, - { be_const_key(opt_connect, 7), be_const_func(m_connect) }, + { be_const_key(opt_connect, -1), be_const_func(m_connect) }, + { be_const_key(geti, -1), be_const_func(m_geti) }, + { be_const_key(deinit, -1), be_const_func(m_deinit) }, + { be_const_key(add, 18), be_const_func(m_add) }, + { be_const_key(get, -1), be_const_func(m_getu) }, + { be_const_key(asstring, 9), be_const_func(m_asstring) }, + { be_const_key(dot_p, -1), be_const_var(0) }, + { be_const_key(copy, 25), be_const_func(m_copy) }, + { be_const_key(size, -1), be_const_func(m_size) }, + { be_const_key(getbits, -1), be_const_closure(getbits_closure) }, + { be_const_key(opt_eq, -1), be_const_func(m_equal) }, + { be_const_key(tob64, 3), be_const_func(m_tob64) }, + { be_const_key(init, -1), be_const_func(m_init) }, { be_const_key(opt_add, -1), be_const_func(m_merge) }, + { be_const_key(setbits, -1), be_const_closure(setbits_closure) }, + { be_const_key(_buffer, -1), be_const_func(m_buffer) }, + { be_const_key(tostring, -1), be_const_func(m_tostring) }, + { be_const_key(dot_len, -1), be_const_var(1) }, + { be_const_key(fromb64, 13), be_const_func(m_fromb64) }, + { be_const_key(dot_size, 6), be_const_var(2) }, + { be_const_key(resize, -1), be_const_func(m_resize) }, + { be_const_key(seti, -1), be_const_func(m_set) }, + { be_const_key(opt_neq, 5), be_const_func(m_nequal) }, + { be_const_key(item, -1), be_const_func(m_item) }, { be_const_key(fromstring, -1), be_const_func(m_fromstring) }, - { be_const_key(opt_eq, 14), be_const_func(m_equal) }, - { be_const_key(get, 1), be_const_func(m_get) }, - { be_const_key(asstring, 5), be_const_func(m_asstring) }, - { be_const_key(add, -1), be_const_func(m_add) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(clear, -1), be_const_func(m_clear) }, - { be_const_key(opt_neq, 4), be_const_func(m_nequal) }, - { be_const_key(resize, 9), be_const_func(m_resize) }, + { be_const_key(clear, 24), be_const_func(m_clear) }, + { be_const_key(set, 10), be_const_func(m_set) }, }; static be_define_const_map( be_class_bytes_map, - 17 + 28 ); BE_EXPORT_VARIABLE be_define_const_class( be_class_bytes, - 1, + 3, NULL, bytes ); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes.h b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes.h new file mode 100644 index 000000000..cf75e6d9a --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes.h @@ -0,0 +1,22 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_ctypes_map) { + { be_const_key(_def, 5), be_const_nil() }, + { be_const_key(setmember, 0), be_const_func(be_ctypes_setmember) }, + { be_const_key(copy, -1), be_const_func(be_ctypes_copy) }, + { be_const_key(init, -1), be_const_func(be_ctypes_init) }, + { be_const_key(tomap, -1), be_const_func(be_ctypes_tomap) }, + { be_const_key(member, -1), be_const_func(be_ctypes_member) }, +}; + +static be_define_const_map( + be_class_ctypes_map, + 6 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_ctypes, + 0, + (bclass *)&be_class_bytes, + ctypes_bytes +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_dyn.h b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_dyn.h new file mode 100644 index 000000000..101f9d66a --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_ctypes_dyn.h @@ -0,0 +1,18 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_ctypes_dyn_map) { + { be_const_key(_def, -1), be_const_var(0) }, + { be_const_key(init, 0), be_const_func(be_ctypes_dyn_init) }, +}; + +static be_define_const_map( + be_class_ctypes_dyn_map, + 2 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_ctypes_dyn, + 1, + (bclass *)&be_class_ctypes, + ctypes_bytes_dyn +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_ec_c25519.h b/lib/libesp32/Berry/generate/be_fixed_be_class_ec_c25519.h new file mode 100644 index 000000000..87182a254 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_ec_c25519.h @@ -0,0 +1,18 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_ec_c25519_map) { + { be_const_key(public_key, 1), be_const_func(m_ec_c25519_pubkey) }, + { be_const_key(shared_key, -1), be_const_func(m_ec_c25519_sharedkey) }, +}; + +static be_define_const_map( + be_class_ec_c25519_map, + 2 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_ec_c25519, + 0, + NULL, + EC_C25519 +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_list.h b/lib/libesp32/Berry/generate/be_fixed_be_class_list.h index 98a52b494..300efcce0 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_list.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_list.h @@ -14,7 +14,7 @@ static be_define_const_map_slots(be_class_list_map) { { be_const_key(tostring, 3), be_const_func(m_tostring) }, { be_const_key(opt_eq, -1), be_const_func(m_equal) }, { be_const_key(init, -1), be_const_func(m_init) }, - { be_const_key(dot_p, 17), be_const_int(0) }, + { be_const_key(dot_p, 17), be_const_var(0) }, { be_const_key(setitem, -1), be_const_func(m_setitem) }, { be_const_key(opt_connect, 4), be_const_func(m_connect) }, { be_const_key(opt_neq, -1), be_const_func(m_nequal) }, diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h index dfa8110f5..f09506e53 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_arc.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_arc_map) { - { be_const_key(init, 2), be_const_func(lvbe_arc_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_arc_create) }, + { be_const_key(_class, -1), be_const_int(&lv_arc_class) }, }; static be_define_const_map( be_class_lv_arc_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h index 2d4336f44..76964a962 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_bar.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_bar_map) { - { be_const_key(init, 2), be_const_func(lvbe_bar_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_bar_create) }, + { be_const_key(_class, -1), be_const_int(&lv_bar_class) }, }; static be_define_const_map( be_class_lv_bar_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h index cf8d80833..b2ee1f2ad 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btn.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_btn_map) { - { be_const_key(init, 2), be_const_func(lvbe_btn_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_btn_create) }, + { be_const_key(_class, -1), be_const_int(&lv_btn_class) }, }; static be_define_const_map( be_class_lv_btn_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h index ec4dc09e0..10cd47c67 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_btnmatrix.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_btnmatrix_map) { - { be_const_key(init, 2), be_const_func(lvbe_btnmatrix_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_btnmatrix_create) }, + { be_const_key(_class, -1), be_const_int(&lv_btnmatrix_class) }, }; static be_define_const_map( be_class_lv_btnmatrix_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h deleted file mode 100644 index 593c30b69..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_calendar.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_calendar_map) { - { be_const_key(init, 2), be_const_func(lvbe_calendar_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_calendar_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_calendar, - 1, - (bclass *)&be_class_lv_obj, - lv_calendar -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h index 74607f0a4..ab1cd13f7 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_canvas.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_canvas_map) { - { be_const_key(init, 2), be_const_func(lvbe_canvas_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_canvas_create) }, + { be_const_key(_class, -1), be_const_int(&lv_canvas_class) }, }; static be_define_const_map( be_class_lv_canvas_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h index 0ebc1f578..fbb9a5a35 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_chart.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_chart_map) { - { be_const_key(init, 2), be_const_func(lvbe_chart_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_chart_create) }, + { be_const_key(_class, -1), be_const_int(&lv_chart_class) }, }; static be_define_const_map( be_class_lv_chart_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h index f64be0ded..db6ef87c0 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_checkbox.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_checkbox_map) { - { be_const_key(init, 2), be_const_func(lvbe_checkbox_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_checkbox_create) }, + { be_const_key(_class, -1), be_const_int(&lv_checkbox_class) }, }; static be_define_const_map( be_class_lv_checkbox_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_color.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_color.h index 252a6d6ab..7eaaf4687 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_color.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_color.h @@ -1,14 +1,15 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_color_map) { + { be_const_key(toint, -1), be_const_func(lco_toint) }, + { be_const_key(tostring, 0), be_const_func(lco_tostring) }, + { be_const_key(_p, -1), be_const_var(0) }, { be_const_key(init, -1), be_const_func(lco_init) }, - { be_const_key(tostring, 2), be_const_func(lco_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, }; static be_define_const_map( be_class_lv_color_map, - 3 + 4 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_colorwheel.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_colorwheel.h new file mode 100644 index 000000000..ab8ca8e55 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_colorwheel.h @@ -0,0 +1,21 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_lv_colorwheel_map) { + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_colorwheel_create) }, + { be_const_key(_class, -1), be_const_int(&lv_colorwheel_class) }, +}; + +static be_define_const_map( + be_class_lv_colorwheel_map, + 5 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_lv_colorwheel, + 1, + (bclass *)&be_class_lv_obj, + lv_colorwheel +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h deleted file mode 100644 index 3ab5828ba..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cont.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_cont_map) { - { be_const_key(init, 2), be_const_func(lvbe_cont_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_cont_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_cont, - 1, - (bclass *)&be_class_lv_obj, - lv_cont -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h deleted file mode 100644 index 5a91a5708..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_cpicker.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_cpicker_map) { - { be_const_key(init, 2), be_const_func(lvbe_cpicker_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_cpicker_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_cpicker, - 1, - (bclass *)&be_class_lv_obj, - lv_cpicker -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h index c36d9970e..e54e7444b 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_dropdown.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_dropdown_map) { - { be_const_key(init, 2), be_const_func(lvbe_dropdown_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_dropdown_create) }, + { be_const_key(_class, -1), be_const_int(&lv_dropdown_class) }, }; static be_define_const_map( be_class_lv_dropdown_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_font.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_font.h index 47cf8975f..dcecfbacb 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_font.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_font.h @@ -1,9 +1,9 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_font_map) { - { be_const_key(init, -1), be_const_func(lvx_init) }, - { be_const_key(tostring, 2), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(init, -1), be_const_func(lvbe_font_create) }, + { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, + { be_const_key(_p, -1), be_const_var(0) }, }; static be_define_const_map( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h deleted file mode 100644 index 2e84145b9..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_gauge.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_gauge_map) { - { be_const_key(init, 2), be_const_func(lvbe_gauge_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_gauge_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_gauge, - 1, - (bclass *)&be_class_lv_obj, - lv_gauge -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h index 46f29f0c1..2fc1565ef 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_group.h @@ -1,9 +1,9 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_group_map) { - { be_const_key(init, 2), be_const_func(lvbe_group_create) }, + { be_const_key(init, -1), be_const_func(lvbe_group_create) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(_p, -1), be_const_var(0) }, { be_const_key(member, 0), be_const_func(lvx_member) }, }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h index 6f04c933b..9d045bff5 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_img.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_img_map) { - { be_const_key(init, 2), be_const_func(lvbe_img_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_img_create) }, + { be_const_key(_class, -1), be_const_int(&lv_img_class) }, }; static be_define_const_map( be_class_lv_img_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h index 2270dfdff..5c503e9f7 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_imgbtn.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_imgbtn_map) { - { be_const_key(init, 2), be_const_func(lvbe_imgbtn_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_imgbtn_create) }, + { be_const_key(_class, -1), be_const_int(&lv_imgbtn_class) }, }; static be_define_const_map( be_class_lv_imgbtn_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h index c8428ec95..e3cc68685 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_indev.h @@ -1,9 +1,9 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_indev_map) { - { be_const_key(init, 2), be_const_func(lv0_init) }, + { be_const_key(init, -1), be_const_func(lv0_init) }, { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(_p, -1), be_const_var(0) }, { be_const_key(member, 0), be_const_func(lvx_member) }, }; @@ -15,6 +15,6 @@ static be_define_const_map( BE_EXPORT_VARIABLE be_define_const_class( be_class_lv_indev, 1, - (bclass *)&be_class_lv_obj, + NULL, lv_indev ); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h deleted file mode 100644 index 68d674421..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_keyboard.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_keyboard_map) { - { be_const_key(init, 2), be_const_func(lvbe_keyboard_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_keyboard_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_keyboard, - 1, - (bclass *)&be_class_lv_obj, - lv_keyboard -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h index 5bcfae692..293667015 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_label.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_label_map) { - { be_const_key(init, 2), be_const_func(lvbe_label_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_label_create) }, + { be_const_key(_class, -1), be_const_int(&lv_label_class) }, }; static be_define_const_map( be_class_lv_label_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h index 70bc6b820..4aec12410 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_led.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_led_map) { - { be_const_key(init, 2), be_const_func(lvbe_led_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_led_create) }, + { be_const_key(_class, -1), be_const_int(&lv_led_class) }, }; static be_define_const_map( be_class_lv_led_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h index 7c32984a9..23d07c9d6 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_line.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_line_map) { - { be_const_key(init, 2), be_const_func(lvbe_line_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_line_create) }, + { be_const_key(_class, -1), be_const_int(&lv_line_class) }, }; static be_define_const_map( be_class_lv_line_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h deleted file mode 100644 index af20fbd2f..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_linemeter.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_linemeter_map) { - { be_const_key(init, 2), be_const_func(lvbe_linemeter_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_linemeter_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_linemeter, - 1, - (bclass *)&be_class_lv_obj, - lv_linemeter -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h deleted file mode 100644 index 56701ea96..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_list.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_list_map) { - { be_const_key(init, 2), be_const_func(lvbe_list_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_list_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_list, - 1, - (bclass *)&be_class_lv_obj, - lv_list -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_meter.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_meter.h new file mode 100644 index 000000000..e013f2a04 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_meter.h @@ -0,0 +1,21 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_lv_meter_map) { + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_meter_create) }, + { be_const_key(_class, -1), be_const_int(&lv_meter_class) }, +}; + +static be_define_const_map( + be_class_lv_meter_map, + 5 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_lv_meter, + 1, + (bclass *)&be_class_lv_obj, + lv_meter +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h index f60c95fdd..26c557b78 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_msgbox.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_msgbox_map) { - { be_const_key(init, 2), be_const_func(lvbe_msgbox_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_msgbox_create) }, + { be_const_key(_class, -1), be_const_int(&lv_msgbox_class) }, }; static be_define_const_map( be_class_lv_msgbox_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h index 5f5328325..71fe9af2b 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_obj.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_obj_map) { - { be_const_key(init, 2), be_const_func(lvbe_obj_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_obj_create) }, + { be_const_key(_class, -1), be_const_int(&lv_obj_class) }, }; static be_define_const_map( be_class_lv_obj_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h deleted file mode 100644 index e0d00517a..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_objmask.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_objmask_map) { - { be_const_key(init, 2), be_const_func(lvbe_objmask_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_objmask_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_objmask, - 1, - (bclass *)&be_class_lv_obj, - lv_objmask -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h deleted file mode 100644 index a345946de..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_page.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_page_map) { - { be_const_key(init, 2), be_const_func(lvbe_page_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_page_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_page, - 1, - (bclass *)&be_class_lv_obj, - lv_page -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h index 82995edf2..feb05546e 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_roller.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_roller_map) { - { be_const_key(init, 2), be_const_func(lvbe_roller_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_roller_create) }, + { be_const_key(_class, -1), be_const_int(&lv_roller_class) }, }; static be_define_const_map( be_class_lv_roller_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h index 10a0a7823..84e65fe66 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_slider.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_slider_map) { - { be_const_key(init, 2), be_const_func(lvbe_slider_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_slider_create) }, + { be_const_key(_class, -1), be_const_int(&lv_slider_class) }, }; static be_define_const_map( be_class_lv_slider_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h index 14129797d..f847eb1da 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinbox.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_spinbox_map) { - { be_const_key(init, 2), be_const_func(lvbe_spinbox_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_spinbox_create) }, + { be_const_key(_class, -1), be_const_int(&lv_spinbox_class) }, }; static be_define_const_map( be_class_lv_spinbox_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h deleted file mode 100644 index 5f5e44912..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_spinner.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_spinner_map) { - { be_const_key(init, 2), be_const_func(lvbe_spinner_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_spinner_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_spinner, - 1, - (bclass *)&be_class_lv_obj, - lv_spinner -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h index f3bc896ad..72b469a6b 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_style.h @@ -1,9 +1,9 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_style_map) { - { be_const_key(init, 2), be_const_func(lvs_init) }, + { be_const_key(init, -1), be_const_func(lvs_init) }, { be_const_key(tostring, -1), be_const_func(lvs_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(_p, -1), be_const_var(0) }, { be_const_key(member, 0), be_const_func(lvx_member) }, }; @@ -15,6 +15,6 @@ static be_define_const_map( BE_EXPORT_VARIABLE be_define_const_class( be_class_lv_style, 1, - (bclass *)&be_class_lv_obj, + NULL, lv_style ); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h index 335286fce..c21de2f9d 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_switch.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_switch_map) { - { be_const_key(init, 2), be_const_func(lvbe_switch_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_switch_create) }, + { be_const_key(_class, -1), be_const_int(&lv_switch_class) }, }; static be_define_const_map( be_class_lv_switch_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h index 9ad524712..d69ab1791 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_table.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_table_map) { - { be_const_key(init, 2), be_const_func(lvbe_table_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_table_create) }, + { be_const_key(_class, -1), be_const_int(&lv_table_class) }, }; static be_define_const_map( be_class_lv_table_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h deleted file mode 100644 index 1c29ebe88..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tabview.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_tabview_map) { - { be_const_key(init, 2), be_const_func(lvbe_tabview_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_tabview_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_tabview, - 1, - (bclass *)&be_class_lv_obj, - lv_tabview -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h index 0284a9e59..1153745fc 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_textarea.h @@ -1,15 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_lv_textarea_map) { - { be_const_key(init, 2), be_const_func(lvbe_textarea_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, + { be_const_key(tostring, 3), be_const_func(lvx_tostring) }, + { be_const_key(member, -1), be_const_func(lvx_member) }, + { be_const_key(_p, -1), be_const_var(0) }, + { be_const_key(init, 4), be_const_func(lvbe_textarea_create) }, + { be_const_key(_class, -1), be_const_int(&lv_textarea_class) }, }; static be_define_const_map( be_class_lv_textarea_map, - 4 + 5 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h deleted file mode 100644 index 34111754a..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_tileview.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_tileview_map) { - { be_const_key(init, 2), be_const_func(lvbe_tileview_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_tileview_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_tileview, - 1, - (bclass *)&be_class_lv_obj, - lv_tileview -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h b/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h deleted file mode 100644 index 5d65d04e9..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_lv_win.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_lv_win_map) { - { be_const_key(init, 2), be_const_func(lvbe_win_create) }, - { be_const_key(tostring, -1), be_const_func(lvx_tostring) }, - { be_const_key(dot_p, -1), be_const_int(0) }, - { be_const_key(member, 0), be_const_func(lvx_member) }, -}; - -static be_define_const_map( - be_class_lv_win_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_lv_win, - 1, - (bclass *)&be_class_lv_obj, - lv_win -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_map.h b/lib/libesp32/Berry/generate/be_fixed_be_class_map.h index 06c75a050..e65bc42c2 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_map.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_map.h @@ -1,22 +1,23 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_map_map) { - { be_const_key(dot_p, 2), be_const_int(0) }, - { be_const_key(insert, -1), be_const_func(m_insert) }, - { be_const_key(remove, -1), be_const_func(m_remove) }, - { be_const_key(tostring, -1), be_const_func(m_tostring) }, - { be_const_key(iter, 5), be_const_func(m_iter) }, { be_const_key(size, -1), be_const_func(m_size) }, - { be_const_key(keys, -1), be_const_func(m_keys) }, - { be_const_key(setitem, -1), be_const_func(m_setitem) }, - { be_const_key(find, 0), be_const_func(m_find) }, + { be_const_key(tostring, -1), be_const_func(m_tostring) }, + { be_const_key(has, 11), be_const_func(m_has) }, { be_const_key(init, -1), be_const_func(m_init) }, - { be_const_key(item, 1), be_const_func(m_item) }, + { be_const_key(insert, -1), be_const_func(m_insert) }, + { be_const_key(keys, -1), be_const_func(m_keys) }, + { be_const_key(find, -1), be_const_func(m_find) }, + { be_const_key(dot_p, 2), be_const_var(0) }, + { be_const_key(setitem, 4), be_const_func(m_setitem) }, + { be_const_key(remove, -1), be_const_func(m_remove) }, + { be_const_key(item, 6), be_const_func(m_item) }, + { be_const_key(iter, -1), be_const_func(m_iter) }, }; static be_define_const_map( be_class_map_map, - 11 + 12 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_md5.h b/lib/libesp32/Berry/generate/be_fixed_be_class_md5.h index 59979b2ad..121a8e6ea 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_md5.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_md5.h @@ -2,7 +2,7 @@ static be_define_const_map_slots(be_class_md5_map) { { be_const_key(update, -1), be_const_func(m_md5_update) }, - { be_const_key(dot_p, -1), be_const_int(0) }, + { be_const_key(dot_p, -1), be_const_var(0) }, { be_const_key(finish, -1), be_const_func(m_md5_finish) }, { be_const_key(init, 1), be_const_func(m_md5_init) }, }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_range.h b/lib/libesp32/Berry/generate/be_fixed_be_class_range.h index fc55c6304..371840af1 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_range.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_range.h @@ -5,9 +5,9 @@ static be_define_const_map_slots(be_class_range_map) { { be_const_key(iter, -1), be_const_func(m_iter) }, { be_const_key(lower, -1), be_const_func(m_lower) }, { be_const_key(init, 4), be_const_func(m_init) }, - { be_const_key(__upper__, -1), be_const_int(0) }, + { be_const_key(__upper__, -1), be_const_var(0) }, { be_const_key(tostring, -1), be_const_func(m_tostring) }, - { be_const_key(__lower__, -1), be_const_int(1) }, + { be_const_key(__lower__, -1), be_const_var(1) }, { be_const_key(upper, 1), be_const_func(m_upper) }, }; diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h index 34c41ed47..71c9ec7aa 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota.h @@ -1,73 +1,84 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_tasmota_map) { - { be_const_key(millis, 52), be_const_func(l_millis) }, - { be_const_key(gc, -1), be_const_closure(gc_closure) }, - { be_const_key(scale_uint, -1), be_const_func(l_scaleuint) }, - { be_const_key(log, -1), be_const_func(l_logInfo) }, - { be_const_key(add_rule, -1), be_const_closure(add_rule_closure) }, - { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, - { be_const_key(_cmd, -1), be_const_func(l_cmd) }, - { be_const_key(web_send, 16), be_const_func(l_webSend) }, - { be_const_key(set_timer, -1), be_const_closure(set_timer_closure) }, - { be_const_key(_cb, -1), be_const_int(0) }, - { be_const_key(exec_cmd, -1), be_const_closure(exec_cmd_closure) }, - { be_const_key(i2c_enabled, 42), be_const_func(l_i2cenabled) }, - { be_const_key(cmd, -1), be_const_closure(cmd_closure) }, - { be_const_key(resp_cmnd_done, 28), be_const_func(l_respCmndDone) }, - { be_const_key(set_light, 1), be_const_closure(set_light_closure) }, - { be_const_key(get_light, -1), be_const_closure(get_light_closure) }, - { be_const_key(_rules, 50), be_const_int(1) }, - { be_const_key(time_reached, -1), be_const_func(l_timereached) }, - { be_const_key(web_send_decimal, -1), be_const_func(l_webSendDecimal) }, - { be_const_key(load, 22), be_const_closure(load_closure) }, - { be_const_key(yield, -1), be_const_func(l_yield) }, - { be_const_key(event, -1), be_const_closure(event_closure) }, - { be_const_key(add_cmd, 40), be_const_closure(add_cmd_closure) }, - { be_const_key(find_key_i, -1), be_const_closure(find_key_i_closure) }, - { be_const_key(delay, 43), be_const_func(l_delay) }, - { be_const_key(remove_cmd, -1), be_const_closure(remove_cmd_closure) }, - { be_const_key(remove_rule, 56), be_const_closure(remove_rule_closure) }, - { be_const_key(resolvecmnd, 29), be_const_func(l_resolveCmnd) }, - { be_const_key(get_option, -1), be_const_func(l_getoption) }, - { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, - { be_const_key(response_append, -1), be_const_func(l_respAppend) }, - { be_const_key(_timers, -1), be_const_int(2) }, - { be_const_key(try_rule, -1), be_const_closure(try_rule_closure) }, - { be_const_key(set_power, 45), be_const_func(l_setpower) }, - { be_const_key(resp_cmnd_error, -1), be_const_func(l_respCmndError) }, - { be_const_key(publish, -1), be_const_func(l_publish) }, - { be_const_key(_ccmd, 13), be_const_int(3) }, - { be_const_key(_get_cb, -1), be_const_func(l_get_cb) }, - { be_const_key(wire1, 15), be_const_int(4) }, - { be_const_key(gen_cb, 6), be_const_closure(gen_cb_closure) }, - { be_const_key(rtc, -1), be_const_func(l_rtc) }, - { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, - { be_const_key(run_deferred, -1), be_const_closure(run_deferred_closure) }, - { be_const_key(memory, 47), be_const_func(l_memory) }, - { be_const_key(time_str, 53), be_const_closure(time_str_closure) }, - { be_const_key(save, -1), be_const_func(l_save) }, - { be_const_key(find_op, 25), be_const_closure(find_op_closure) }, - { be_const_key(chars_in_string, -1), be_const_closure(chars_in_string_closure) }, - { be_const_key(get_power, -1), be_const_func(l_getpower) }, - { be_const_key(wire2, 8), be_const_int(5) }, - { be_const_key(wire_scan, 55), be_const_closure(wire_scan_closure) }, - { be_const_key(resp_cmnd_failed, -1), be_const_func(l_respCmndFailed) }, - { be_const_key(exec_rules, -1), be_const_closure(exec_rules_closure) }, { be_const_key(cb_dispatch, -1), be_const_closure(cb_dispatch_closure) }, + { be_const_key(get_option, -1), be_const_func(l_getoption) }, + { be_const_key(publish_result, 63), be_const_func(l_publish_result) }, + { be_const_key(try_rule, 18), be_const_closure(try_rule_closure) }, + { be_const_key(eth, 26), be_const_func(l_eth) }, { be_const_key(resp_cmnd, -1), be_const_func(l_respCmnd) }, - { be_const_key(_drivers, -1), be_const_int(6) }, - { be_const_key(add_driver, -1), be_const_closure(add_driver_closure) }, + { be_const_key(_cmd, -1), be_const_func(l_cmd) }, + { be_const_key(exec_cmd, -1), be_const_closure(exec_cmd_closure) }, + { be_const_key(add_cmd, -1), be_const_closure(add_cmd_closure) }, + { be_const_key(resolvecmnd, -1), be_const_func(l_resolveCmnd) }, + { be_const_key(find_op, -1), be_const_closure(find_op_closure) }, + { be_const_key(add_driver, 40), be_const_closure(add_driver_closure) }, + { be_const_key(remove_rule, 4), be_const_closure(remove_rule_closure) }, + { be_const_key(load, -1), be_const_closure(load_closure) }, + { be_const_key(response_append, -1), be_const_func(l_respAppend) }, + { be_const_key(wire1, 20), be_const_var(0) }, + { be_const_key(set_light, -1), be_const_closure(set_light_closure) }, + { be_const_key(time_reached, 3), be_const_func(l_timereached) }, + { be_const_key(log, -1), be_const_func(l_logInfo) }, + { be_const_key(gc, -1), be_const_closure(gc_closure) }, + { be_const_key(init, 8), be_const_closure(init_closure) }, + { be_const_key(get_free_heap, -1), be_const_func(l_getFreeHeap) }, + { be_const_key(global, 36), be_const_var(1) }, + { be_const_key(event, -1), be_const_closure(event_closure) }, + { be_const_key(time_str, 45), be_const_closure(time_str_closure) }, + { be_const_key(set_power, -1), be_const_func(l_setpower) }, + { be_const_key(rtc, 42), be_const_func(l_rtc) }, + { be_const_key(millis, -1), be_const_func(l_millis) }, + { be_const_key(save, -1), be_const_func(l_save) }, + { be_const_key(resp_cmnd_error, -1), be_const_func(l_respCmndError) }, + { be_const_key(resp_cmnd_str, -1), be_const_func(l_respCmndStr) }, + { be_const_key(strftime, -1), be_const_func(l_strftime) }, + { be_const_key(wifi, -1), be_const_func(l_wifi) }, + { be_const_key(_drivers, -1), be_const_var(2) }, + { be_const_key(chars_in_string, -1), be_const_closure(chars_in_string_closure) }, + { be_const_key(_cb, 0), be_const_var(3) }, + { be_const_key(resp_cmnd_failed, 59), be_const_func(l_respCmndFailed) }, + { be_const_key(get_power, -1), be_const_func(l_getpower) }, + { be_const_key(get_light, 2), be_const_closure(get_light_closure) }, + { be_const_key(gen_cb, -1), be_const_closure(gen_cb_closure) }, + { be_const_key(remove_timer, -1), be_const_closure(remove_timer_closure) }, + { be_const_key(_global_addr, -1), be_const_comptr(&TasmotaGlobal) }, + { be_const_key(web_send, 54), be_const_func(l_webSend) }, + { be_const_key(time_dump, -1), be_const_func(l_time_dump) }, + { be_const_key(get_switch, 38), be_const_func(l_getswitch) }, + { be_const_key(exec_rules, -1), be_const_closure(exec_rules_closure) }, + { be_const_key(find_key_i, 5), be_const_closure(find_key_i_closure) }, + { be_const_key(yield, -1), be_const_func(l_yield) }, + { be_const_key(web_send_decimal, 34), be_const_func(l_webSendDecimal) }, + { be_const_key(i2c_enabled, 13), be_const_func(l_i2cenabled) }, + { be_const_key(_get_cb, -1), be_const_func(l_get_cb) }, + { be_const_key(cmd, 14), be_const_closure(cmd_closure) }, + { be_const_key(publish, 10), be_const_func(l_publish) }, + { be_const_key(_ccmd, -1), be_const_var(4) }, + { be_const_key(_timers, -1), be_const_var(5) }, + { be_const_key(resp_cmnd_done, -1), be_const_func(l_respCmndDone) }, + { be_const_key(wire_scan, -1), be_const_closure(wire_scan_closure) }, + { be_const_key(_rules, -1), be_const_var(6) }, + { be_const_key(remove_cmd, -1), be_const_closure(remove_cmd_closure) }, + { be_const_key(scale_uint, -1), be_const_func(l_scaleuint) }, + { be_const_key(run_deferred, -1), be_const_closure(run_deferred_closure) }, + { be_const_key(set_timer, -1), be_const_closure(set_timer_closure) }, + { be_const_key(wire2, 47), be_const_var(7) }, + { be_const_key(remove_driver, -1), be_const_closure(remove_driver_closure) }, + { be_const_key(delay, -1), be_const_func(l_delay) }, + { be_const_key(_global_def, -1), be_const_comptr(&be_tasmota_global_struct) }, + { be_const_key(memory, -1), be_const_func(l_memory) }, + { be_const_key(add_rule, 29), be_const_closure(add_rule_closure) }, }; static be_define_const_map( be_class_tasmota_map, - 57 + 68 ); BE_EXPORT_VARIABLE be_define_const_class( be_class_tasmota, - 7, + 8, NULL, Tasmota ); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_driver.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_driver.h deleted file mode 100644 index e29fc31da..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_driver.h +++ /dev/null @@ -1,28 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_tasmota_driver_map) { - { be_const_key(every_100ms, -1), be_const_int(0) }, - { be_const_key(display, -1), be_const_int(1) }, - { be_const_key(web_add_handler, -1), be_const_int(2) }, - { be_const_key(save_before_restart, -1), be_const_int(3) }, - { be_const_key(web_add_main_button, 10), be_const_int(4) }, - { be_const_key(json_append, -1), be_const_int(5) }, - { be_const_key(web_add_button, 3), be_const_int(6) }, - { be_const_key(add_cmd, -1), be_const_closure(add_cmd_closure) }, - { be_const_key(button_pressed, 4), be_const_int(7) }, - { be_const_key(every_second, -1), be_const_int(8) }, - { be_const_key(web_sensor, 5), be_const_int(9) }, - { be_const_key(get_tasmota, -1), be_const_func(d_getTasmotaGlob) }, -}; - -static be_define_const_map( - be_class_tasmota_driver_map, - 12 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_tasmota_driver, - 10, - NULL, - Driver -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_i2c_driver.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_i2c_driver.h deleted file mode 100644 index 0e1c2e03e..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_i2c_driver.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_class_tasmota_i2c_driver_map) { - { be_const_key(wire, -1), be_const_int(0) }, - { be_const_key(addr, -1), be_const_int(1) }, - { be_const_key(name, 1), be_const_int(2) }, - { be_const_key(add_cmd, -1), be_const_closure(init_closure) }, -}; - -static be_define_const_map( - be_class_tasmota_i2c_driver_map, - 4 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_class_tasmota_i2c_driver, - 3, - (bclass *)&be_class_tasmota_driver, - I2C_Driver -); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_onewire.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_onewire.h new file mode 100644 index 000000000..6363d83b2 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_onewire.h @@ -0,0 +1,28 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_tasmota_onewire_map) { + { be_const_key(reset, -1), be_const_func(b_onewire_reset) }, + { be_const_key(search, 10), be_const_func(b_onewire_search) }, + { be_const_key(depower, -1), be_const_func(b_onewire_depower) }, + { be_const_key(init, 2), be_const_func(b_onewire_init) }, + { be_const_key(deinit, -1), be_const_func(b_onewire_deinit) }, + { be_const_key(reset_search, -1), be_const_func(b_onewire_reset_search) }, + { be_const_key(skip, -1), be_const_func(b_onewire_skip) }, + { be_const_key(dot_p, -1), be_const_var(0) }, + { be_const_key(write, -1), be_const_func(b_onewire_write) }, + { be_const_key(read, -1), be_const_func(b_onewire_read) }, + { be_const_key(select, 11), be_const_func(b_onewire_select) }, + { be_const_key(target_search, -1), be_const_func(b_onewire_target_search) }, +}; + +static be_define_const_map( + be_class_tasmota_onewire_map, + 12 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_tasmota_onewire, + 1, + NULL, + OneWire +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_serial.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_serial.h new file mode 100644 index 000000000..630b45973 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_serial.h @@ -0,0 +1,47 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_tasmota_serial_map) { + { be_const_key(SERIAL_5E2, 3), be_const_int(SERIAL_5E2) }, + { be_const_key(SERIAL_8E1, -1), be_const_int(SERIAL_8E1) }, + { be_const_key(SERIAL_8O1, 22), be_const_int(SERIAL_8O1) }, + { be_const_key(SERIAL_5O1, -1), be_const_int(SERIAL_5O1) }, + { be_const_key(read, 0), be_const_func(b_serial_read) }, + { be_const_key(flush, -1), be_const_func(b_serial_flush) }, + { be_const_key(SERIAL_7E2, -1), be_const_int(SERIAL_7E2) }, + { be_const_key(SERIAL_5N2, -1), be_const_int(SERIAL_5N2) }, + { be_const_key(SERIAL_6N2, -1), be_const_int(SERIAL_6N2) }, + { be_const_key(SERIAL_6E2, -1), be_const_int(SERIAL_6E2) }, + { be_const_key(available, -1), be_const_func(b_serial_available) }, + { be_const_key(SERIAL_6N1, 12), be_const_int(SERIAL_6N1) }, + { be_const_key(SERIAL_7O1, -1), be_const_int(SERIAL_7O1) }, + { be_const_key(SERIAL_7N1, 14), be_const_int(SERIAL_7N1) }, + { be_const_key(SERIAL_6O1, -1), be_const_int(SERIAL_6O1) }, + { be_const_key(SERIAL_6E1, -1), be_const_int(SERIAL_6E1) }, + { be_const_key(write, -1), be_const_func(b_serial_write) }, + { be_const_key(SERIAL_8O2, -1), be_const_int(SERIAL_8O2) }, + { be_const_key(SERIAL_5O2, 24), be_const_int(SERIAL_5O2) }, + { be_const_key(SERIAL_5E1, 26), be_const_int(SERIAL_5E1) }, + { be_const_key(deinit, -1), be_const_func(b_serial_deinit) }, + { be_const_key(SERIAL_5N1, -1), be_const_int(SERIAL_5N1) }, + { be_const_key(SERIAL_8N1, 1), be_const_int(SERIAL_8N1) }, + { be_const_key(SERIAL_7E1, -1), be_const_int(SERIAL_7E1) }, + { be_const_key(SERIAL_8N2, -1), be_const_int(SERIAL_8N2) }, + { be_const_key(dot_p, 8), be_const_var(0) }, + { be_const_key(SERIAL_8E2, -1), be_const_int(SERIAL_8E2) }, + { be_const_key(SERIAL_7O2, -1), be_const_int(SERIAL_7O2) }, + { be_const_key(SERIAL_7N2, -1), be_const_int(SERIAL_7N2) }, + { be_const_key(init, -1), be_const_func(b_serial_init) }, + { be_const_key(SERIAL_6O2, 9), be_const_int(SERIAL_6O2) }, +}; + +static be_define_const_map( + be_class_tasmota_serial_map, + 31 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_tasmota_serial, + 1, + NULL, + serial +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h index d43d4aa8e..71ade9f7e 100644 --- a/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_tasmota_wire.h @@ -2,7 +2,7 @@ static be_define_const_map_slots(be_class_tasmota_wire_map) { { be_const_key(_end_transmission, 10), be_const_func(b_wire_endtransmission) }, - { be_const_key(bus, -1), be_const_int(0) }, + { be_const_key(bus, -1), be_const_var(0) }, { be_const_key(_read, 7), be_const_func(b_wire_read) }, { be_const_key(read, -1), be_const_func(b_wire_validread) }, { be_const_key(_request_from, -1), be_const_func(b_wire_requestfrom) }, diff --git a/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h new file mode 100644 index 000000000..6a7044c15 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_be_class_webclient.h @@ -0,0 +1,31 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(be_class_webclient_map) { + { be_const_key(url_encode, 3), be_const_func(wc_urlencode) }, + { be_const_key(POST, -1), be_const_func(wc_POST) }, + { be_const_key(dot_p, -1), be_const_var(0) }, + { be_const_key(begin, 5), be_const_func(wc_begin) }, + { be_const_key(set_useragent, 2), be_const_func(wc_set_useragent) }, + { be_const_key(set_auth, 12), be_const_func(wc_set_auth) }, + { be_const_key(close, -1), be_const_func(wc_close) }, + { be_const_key(add_header, 9), be_const_func(wc_addheader) }, + { be_const_key(get_size, -1), be_const_func(wc_getsize) }, + { be_const_key(deinit, -1), be_const_func(wc_deinit) }, + { be_const_key(set_timeouts, -1), be_const_func(wc_set_timeouts) }, + { be_const_key(GET, 13), be_const_func(wc_GET) }, + { be_const_key(init, -1), be_const_func(wc_init) }, + { be_const_key(dot_w, -1), be_const_var(1) }, + { be_const_key(get_string, 11), be_const_func(wc_getstring) }, +}; + +static be_define_const_map( + be_class_webclient_map, + 15 +); + +BE_EXPORT_VARIABLE be_define_const_class( + be_class_webclient, + 2, + NULL, + webclient +); diff --git a/lib/libesp32/Berry/generate/be_fixed_be_tasmota_driver.h b/lib/libesp32/Berry/generate/be_fixed_be_tasmota_driver.h deleted file mode 100644 index 362eebe48..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_be_tasmota_driver.h +++ /dev/null @@ -1,25 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(be_tasmota_driver_map) { - { be_const_key(get_tasmota, -1), be_const_func(d_getTasmotaGlob) }, - { be_const_key(web_sensor, -1), be_const_int(0) }, - { be_const_key(json_append, 0), be_const_int(1) }, - { be_const_key(every_second, 4), be_const_int(2) }, - { be_const_key(every_100ms, 7), be_const_int(3) }, - { be_const_key(web_add_main_button, -1), be_const_int(4) }, - { be_const_key(web_add_button, -1), be_const_int(5) }, - { be_const_key(save_before_restart, -1), be_const_int(6) }, - { be_const_key(button_pressed, 1), be_const_int(7) }, -}; - -static be_define_const_map( - be_tasmota_driver_map, - 9 -); - -BE_EXPORT_VARIABLE be_define_const_class( - be_tasmota_driver, - 8, - NULL, - Driver -); diff --git a/lib/libesp32/Berry/generate/be_fixed_energy.h b/lib/libesp32/Berry/generate/be_fixed_energy.h index 0608b0ba2..719d24f2d 100644 --- a/lib/libesp32/Berry/generate/be_fixed_energy.h +++ b/lib/libesp32/Berry/generate/be_fixed_energy.h @@ -1,12 +1,16 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libenergy_map) { - { be_const_key(read, -1), be_const_func(b_nrg_read) }, + { be_const_key(init, -1), be_const_closure(init_closure) }, + { be_const_key(_ptr, 3), be_const_comptr(&Energy) }, + { be_const_key(setmember, -1), be_const_closure(setmember_closure) }, + { be_const_key(member, 2), be_const_closure(member_closure) }, + { be_const_key(read, -1), be_const_closure(read_closure) }, }; static be_define_const_map( m_libenergy_map, - 1 + 5 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/generate/be_fixed_gpio.h b/lib/libesp32/Berry/generate/be_fixed_gpio.h index 480e53d40..891d18896 100644 --- a/lib/libesp32/Berry/generate/be_fixed_gpio.h +++ b/lib/libesp32/Berry/generate/be_fixed_gpio.h @@ -1,269 +1,281 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libgpio_map) { - { be_const_key(MAX31855CLK, -1), be_const_int(79) }, - { be_const_key(DHT11_OUT, 197), be_const_int(40) }, - { be_const_key(PZEM004_RX, 113), be_const_int(47) }, - { be_const_key(BS814_DAT, 115), be_const_int(215) }, - { be_const_key(ROT1B_NP, -1), be_const_int(212) }, - { be_const_key(WEBCAM_HREF, -1), be_const_int(161) }, - { be_const_key(SPI_CLK, 233), be_const_int(23) }, - { be_const_key(TCP_TX, -1), be_const_int(171) }, - { be_const_key(SM16716_DAT, 72), be_const_int(92) }, - { be_const_key(AZ_RXD, 136), be_const_int(77) }, - { be_const_key(PWM1, -1), be_const_int(13) }, - { be_const_key(EXS_ENABLE, -1), be_const_int(129) }, - { be_const_key(ETH_PHY_POWER, -1), be_const_int(173) }, - { be_const_key(HIGH, -1), be_const_int(1) }, - { be_const_key(ETH_PHY_MDIO, -1), be_const_int(175) }, - { be_const_key(MP3_DFR562, 11), be_const_int(67) }, - { be_const_key(HM10_RX, -1), be_const_int(138) }, - { be_const_key(SSPI_MOSI, -1), be_const_int(27) }, - { be_const_key(KEY1_INV_NP, -1), be_const_int(4) }, - { be_const_key(NONE, -1), be_const_int(0) }, - { be_const_key(DDS2382_RX, 18), be_const_int(123) }, - { be_const_key(DSB_OUT, -1), be_const_int(42) }, - { be_const_key(FTC532, -1), be_const_int(195) }, - { be_const_key(ARIRFSEL, 222), be_const_int(99) }, - { be_const_key(pin, -1), be_const_func(gp_pin) }, - { be_const_key(RFRECV, -1), be_const_int(36) }, - { be_const_key(HRXL_RX, -1), be_const_int(144) }, - { be_const_key(HRE_CLOCK, -1), be_const_int(106) }, - { be_const_key(AS608_RX, -1), be_const_int(188) }, - { be_const_key(SDS0X1_TX, -1), be_const_int(54) }, - { be_const_key(TM1637DIO, 112), be_const_int(223) }, - { be_const_key(ILI9488_CS, 138), be_const_int(201) }, - { be_const_key(WEBCAM_VSYNC, 184), be_const_int(160) }, - { be_const_key(TASMOTACLIENT_RST, 224), be_const_int(132) }, - { be_const_key(INPUT, 57), be_const_int(239) }, - { be_const_key(SBR_TX, -1), be_const_int(56) }, - { be_const_key(HPMA_TX, -1), be_const_int(135) }, - { be_const_key(MCP39F5_RX, 41), be_const_int(87) }, - { be_const_key(OUTPUT, 69), be_const_int(2) }, - { be_const_key(AZ_TXD, -1), be_const_int(76) }, - { be_const_key(ADC_BUTTON, -1), be_const_int(150) }, - { be_const_key(ETH_PHY_MDC, -1), be_const_int(174) }, - { be_const_key(ZEROCROSS, -1), be_const_int(236) }, - { be_const_key(AS3935, 147), be_const_int(146) }, - { be_const_key(SSPI_MAX31865_CS1, -1), be_const_int(105) }, - { be_const_key(LEDLNK_INV, 56), be_const_int(18) }, - { be_const_key(RDM6300_RX, -1), be_const_int(113) }, - { be_const_key(TM1638STB, -1), be_const_int(66) }, - { be_const_key(SR04_TRIG, 166), be_const_int(58) }, - { be_const_key(CSE7761_RX, -1), be_const_int(229) }, - { be_const_key(HM10_TX, -1), be_const_int(139) }, - { be_const_key(SM16716_CLK, 111), be_const_int(91) }, - { be_const_key(ADC_TEMP, 120), be_const_int(148) }, - { be_const_key(NRG_SEL_INV, -1), be_const_int(82) }, - { be_const_key(OPEN_DRAIN, -1), be_const_int(16) }, - { be_const_key(ST7789_DC, 196), be_const_int(207) }, - { be_const_key(INPUT_PULLDOWN, 122), be_const_int(9) }, - { be_const_key(SM2135_CLK, 219), be_const_int(126) }, - { be_const_key(WEBCAM_PSCLK, 32), be_const_int(163) }, - { be_const_key(ADC_CT_POWER, 82), be_const_int(153) }, - { be_const_key(OUTPUT_OPEN_DRAIN, -1), be_const_int(18) }, - { be_const_key(CC1101_GDO2, -1), be_const_int(143) }, - { be_const_key(SM2135_DAT, 28), be_const_int(127) }, - { be_const_key(digital_write, -1), be_const_func(gp_digital_write) }, - { be_const_key(GPS_TX, 68), be_const_int(137) }, - { be_const_key(TFMINIPLUS_RX, -1), be_const_int(235) }, - { be_const_key(RC522_CS, -1), be_const_int(196) }, - { be_const_key(PMS5003_TX, -1), be_const_int(52) }, - { be_const_key(DDS2382_TX, -1), be_const_int(122) }, - { be_const_key(IEM3000_RX, 133), be_const_int(180) }, - { be_const_key(ZIGBEE_RX, -1), be_const_int(112) }, - { be_const_key(ZIGBEE_RST, -1), be_const_int(181) }, - { be_const_key(HPMA_RX, -1), be_const_int(134) }, - { be_const_key(SDS0X1_RX, -1), be_const_int(55) }, - { be_const_key(WEBCAM_RESET, -1), be_const_int(155) }, - { be_const_key(CNTR1, 249), be_const_int(11) }, - { be_const_key(ADC_LIGHT, 231), be_const_int(149) }, - { be_const_key(HRE_DATA, 34), be_const_int(107) }, - { be_const_key(OUTPUT_HI, -1), be_const_int(120) }, - { be_const_key(LED1_INV, 176), be_const_int(10) }, - { be_const_key(LMT01, -1), be_const_int(178) }, - { be_const_key(DSB, -1), be_const_int(41) }, - { be_const_key(CSE7766_RX, -1), be_const_int(97) }, - { be_const_key(SBR_RX, -1), be_const_int(57) }, - { be_const_key(PROJECTOR_CTRL_TX, 148), be_const_int(224) }, - { be_const_key(DI, 211), be_const_int(94) }, - { be_const_key(PZEM0XX_TX, -1), be_const_int(46) }, - { be_const_key(SENSOR_END, -1), be_const_int(240) }, - { be_const_key(A4988_ENA, 97), be_const_int(118) }, - { be_const_key(WEBCAM_PSRCS, 46), be_const_int(165) }, - { be_const_key(ELECTRIQ_MOODL_TX, -1), be_const_int(145) }, - { be_const_key(WEBCAM_XCLK, -1), be_const_int(156) }, - { be_const_key(PN532_RXD, -1), be_const_int(90) }, - { be_const_key(BL0940_RX, 195), be_const_int(170) }, - { be_const_key(PMS5003_RX, -1), be_const_int(53) }, - { be_const_key(HALLEFFECT, -1), be_const_int(237) }, - { be_const_key(PWM1_INV, 172), be_const_int(14) }, - { be_const_key(TASMOTACLIENT_RXD, -1), be_const_int(131) }, - { be_const_key(WEBCAM_SIOD, 110), be_const_int(157) }, - { be_const_key(TM1637CLK, 33), be_const_int(222) }, - { be_const_key(IRRECV, -1), be_const_int(34) }, - { be_const_key(SPI_MOSI, -1), be_const_int(22) }, - { be_const_key(TELEINFO_RX, 182), be_const_int(176) }, - { be_const_key(TASMOTACLIENT_RST_INV, -1), be_const_int(133) }, + { be_const_key(SENSOR_END, 167), be_const_int(250) }, + { be_const_key(DHT11_OUT, -1), be_const_int(40) }, + { be_const_key(HM10_TX, 199), be_const_int(139) }, + { be_const_key(DHT22, 6), be_const_int(38) }, + { be_const_key(ARIRFRCV, 226), be_const_int(98) }, + { be_const_key(WEBCAM_HREF, 183), be_const_int(161) }, + { be_const_key(SM16716_CLK, 168), be_const_int(91) }, + { be_const_key(ZIGBEE_RST, 264), be_const_int(181) }, + { be_const_key(KEY1_INV_NP, 223), be_const_int(4) }, + { be_const_key(KEY1_TC, 81), be_const_int(169) }, { be_const_key(PROJECTOR_CTRL_RX, -1), be_const_int(225) }, - { be_const_key(WIEGAND_D0, -1), be_const_int(216) }, - { be_const_key(ADE7953_IRQ, -1), be_const_int(108) }, - { be_const_key(SPI_DC, -1), be_const_int(25) }, - { be_const_key(IRSEND, -1), be_const_int(33) }, - { be_const_key(TFMINIPLUS_TX, 87), be_const_int(234) }, - { be_const_key(I2C_SCL, -1), be_const_int(19) }, - { be_const_key(MAX7219DIN, -1), be_const_int(232) }, - { be_const_key(ROT1A_NP, -1), be_const_int(211) }, - { be_const_key(PZEM017_RX, 156), be_const_int(49) }, - { be_const_key(WINDMETER_SPEED, -1), be_const_int(168) }, - { be_const_key(RC522_RST, -1), be_const_int(191) }, - { be_const_key(SR04_ECHO, 89), be_const_int(59) }, - { be_const_key(BOILER_OT_TX, -1), be_const_int(167) }, - { be_const_key(ZIGBEE_TX, 104), be_const_int(111) }, - { be_const_key(REL1_INV, -1), be_const_int(8) }, - { be_const_key(WS2812, -1), be_const_int(43) }, - { be_const_key(BUZZER, 0), be_const_int(15) }, - { be_const_key(CC1101_GDO0, -1), be_const_int(142) }, - { be_const_key(SWT1_NP, -1), be_const_int(6) }, - { be_const_key(SSPI_DC, 49), be_const_int(30) }, - { be_const_key(ADC_RANGE, 128), be_const_int(152) }, - { be_const_key(OPTION_A, 174), be_const_int(194) }, - { be_const_key(SHELLY_DIMMER_RST_INV, -1), be_const_int(190) }, - { be_const_key(MGC3130_XFER, -1), be_const_int(73) }, - { be_const_key(VL53L0X_XSHUT1, 140), be_const_int(230) }, - { be_const_key(SSD1351_CS, -1), be_const_int(204) }, - { be_const_key(LEDLNK, 63), be_const_int(17) }, - { be_const_key(P9813_DAT, 67), be_const_int(193) }, - { be_const_key(pin_mode, 218), be_const_func(gp_pin_mode) }, - { be_const_key(RF_SENSOR, -1), be_const_int(75) }, - { be_const_key(TELEINFO_ENABLE, -1), be_const_int(177) }, - { be_const_key(RISING, -1), be_const_int(1) }, - { be_const_key(DHT11, -1), be_const_int(37) }, - { be_const_key(SDCARD_CS, -1), be_const_int(210) }, - { be_const_key(ROT1B, 169), be_const_int(103) }, - { be_const_key(TUYA_RX, -1), be_const_int(72) }, - { be_const_key(SSPI_CS, -1), be_const_int(29) }, - { be_const_key(DCKI, -1), be_const_int(95) }, - { be_const_key(XPT2046_CS, -1), be_const_int(227) }, - { be_const_key(DDSU666_RX, -1), be_const_int(125) }, - { be_const_key(A4988_STP, -1), be_const_int(117) }, - { be_const_key(SOLAXX1_RX, -1), be_const_int(110) }, - { be_const_key(NRG_SEL, -1), be_const_int(81) }, - { be_const_key(HX711_DAT, -1), be_const_int(69) }, - { be_const_key(SSPI_MISO, -1), be_const_int(26) }, - { be_const_key(WEBCAM_HSD, -1), be_const_int(164) }, - { be_const_key(GPS_RX, -1), be_const_int(136) }, - { be_const_key(NEOPOOL_RX, -1), be_const_int(219) }, - { be_const_key(PZEM016_RX, -1), be_const_int(48) }, - { be_const_key(CSE7761_TX, -1), be_const_int(228) }, - { be_const_key(OLED_RESET, -1), be_const_int(32) }, - { be_const_key(ADC_INPUT, 101), be_const_int(147) }, - { be_const_key(LE01MR_TX, 80), be_const_int(141) }, - { be_const_key(EPAPER29_CS, 238), be_const_int(202) }, - { be_const_key(DHT22, -1), be_const_int(38) }, - { be_const_key(BACKLIGHT, -1), be_const_int(31) }, - { be_const_key(NRG_CF1, -1), be_const_int(83) }, - { be_const_key(MCP39F5_RST, 1), be_const_int(88) }, - { be_const_key(SDM120_TX, -1), be_const_int(60) }, - { be_const_key(HLW_CF, -1), be_const_int(84) }, - { be_const_key(BOILER_OT_RX, -1), be_const_int(166) }, - { be_const_key(TUYA_TX, -1), be_const_int(71) }, - { be_const_key(NRF24_DC, -1), be_const_int(198) }, - { be_const_key(TM1638DIO, -1), be_const_int(65) }, - { be_const_key(IBEACON_RX, 179), be_const_int(115) }, - { be_const_key(DEEPSLEEP, -1), be_const_int(128) }, - { be_const_key(HJL_CF, -1), be_const_int(85) }, - { be_const_key(DDSU666_TX, 154), be_const_int(124) }, - { be_const_key(MHZ_TXD, -1), be_const_int(44) }, - { be_const_key(MIEL_HVAC_TX, 22), be_const_int(183) }, - { be_const_key(BS814_CLK, 209), be_const_int(214) }, - { be_const_key(SM16716_SEL, -1), be_const_int(93) }, - { be_const_key(KEY1_TC, 48), be_const_int(169) }, - { be_const_key(SWT1, 5), be_const_int(5) }, - { be_const_key(WEBCAM_DATA, 217), be_const_int(159) }, - { be_const_key(PULLDOWN, -1), be_const_int(8) }, - { be_const_key(A4988_MS1, -1), be_const_int(119) }, - { be_const_key(pin_used, -1), be_const_func(gp_pin_used) }, - { be_const_key(IBEACON_TX, 220), be_const_int(114) }, - { be_const_key(NRF24_CS, -1), be_const_int(197) }, - { be_const_key(RXD, -1), be_const_int(101) }, - { be_const_key(NEOPOOL_TX, -1), be_const_int(218) }, - { be_const_key(WEBCAM_SIOC, -1), be_const_int(158) }, - { be_const_key(TASMOTACLIENT_TXD, -1), be_const_int(130) }, - { be_const_key(MAX31855CS, -1), be_const_int(78) }, - { be_const_key(TM1638CLK, -1), be_const_int(64) }, - { be_const_key(ILI9341_CS, -1), be_const_int(199) }, - { be_const_key(PN532_TXD, -1), be_const_int(89) }, - { be_const_key(LOW, -1), be_const_int(0) }, - { be_const_key(SOLAXX1_TX, -1), be_const_int(109) }, - { be_const_key(SDM72_RX, -1), be_const_int(221) }, - { be_const_key(PULLUP, -1), be_const_int(4) }, - { be_const_key(MIEL_HVAC_RX, -1), be_const_int(184) }, - { be_const_key(MAX31855DO, 216), be_const_int(80) }, - { be_const_key(REL1, -1), be_const_int(7) }, - { be_const_key(HX711_SCK, -1), be_const_int(68) }, - { be_const_key(WEBCAM_PCLK, -1), be_const_int(162) }, - { be_const_key(ARIRFRCV, 175), be_const_int(98) }, - { be_const_key(SAIR_TX, -1), be_const_int(50) }, - { be_const_key(digital_read, -1), be_const_func(gp_digital_read) }, - { be_const_key(LE01MR_RX, 125), be_const_int(140) }, - { be_const_key(TX2X_TXD_BLACK, -1), be_const_int(70) }, - { be_const_key(KEY1_INV, -1), be_const_int(3) }, - { be_const_key(ADC_JOY, -1), be_const_int(104) }, - { be_const_key(ST7789_CS, -1), be_const_int(206) }, + { be_const_key(TFMINIPLUS_RX, -1), be_const_int(235) }, { be_const_key(SSD1331_CS, -1), be_const_int(208) }, - { be_const_key(FALLING, -1), be_const_int(2) }, - { be_const_key(SPI_CS, -1), be_const_int(24) }, - { be_const_key(BUZZER_INV, -1), be_const_int(16) }, - { be_const_key(RFSEND, -1), be_const_int(35) }, - { be_const_key(WE517_RX, -1), be_const_int(186) }, - { be_const_key(INPUT_PULLUP, -1), be_const_int(5) }, - { be_const_key(A4988_DIR, 223), be_const_int(116) }, - { be_const_key(SSPI_SCLK, -1), be_const_int(28) }, - { be_const_key(EPAPER42_CS, 252), be_const_int(203) }, - { be_const_key(SDM120_RX, -1), be_const_int(61) }, - { be_const_key(DYP_RX, -1), be_const_int(182) }, - { be_const_key(EPD_DATA, -1), be_const_int(238) }, - { be_const_key(TXD, -1), be_const_int(100) }, - { be_const_key(P9813_CLK, -1), be_const_int(192) }, - { be_const_key(MHZ_RXD, -1), be_const_int(45) }, + { be_const_key(MP3_DFR562, 162), be_const_int(67) }, + { be_const_key(WEBCAM_VSYNC, 140), be_const_int(160) }, + { be_const_key(CNTR1, 246), be_const_int(11) }, + { be_const_key(ROT1B_NP, -1), be_const_int(212) }, + { be_const_key(ELECTRIQ_MOODL_TX, -1), be_const_int(145) }, + { be_const_key(TASMOTACLIENT_RXD, -1), be_const_int(131) }, + { be_const_key(NONE, -1), be_const_int(0) }, + { be_const_key(RF_SENSOR, -1), be_const_int(75) }, + { be_const_key(MAX31855CS, -1), be_const_int(78) }, + { be_const_key(SPI_MOSI, 233), be_const_int(22) }, + { be_const_key(I2S_OUT_DATA, -1), be_const_int(243) }, + { be_const_key(HPMA_TX, 108), be_const_int(135) }, + { be_const_key(TASMOTACLIENT_RST_INV, 156), be_const_int(133) }, + { be_const_key(IEM3000_RX, -1), be_const_int(180) }, + { be_const_key(BS814_DAT, 196), be_const_int(215) }, + { be_const_key(OUTPUT_LO, -1), be_const_int(121) }, + { be_const_key(SSD1351_CS, 236), be_const_int(204) }, + { be_const_key(TM1637DIO, -1), be_const_int(223) }, + { be_const_key(INTERRUPT, 240), be_const_int(249) }, + { be_const_key(PN532_RXD, 195), be_const_int(90) }, + { be_const_key(SM2135_CLK, -1), be_const_int(126) }, + { be_const_key(DI, -1), be_const_int(94) }, + { be_const_key(TM1638CLK, 87), be_const_int(64) }, + { be_const_key(DSB_OUT, 65), be_const_int(42) }, + { be_const_key(I2S_OUT_SLCT, -1), be_const_int(245) }, + { be_const_key(RDM6300_RX, -1), be_const_int(113) }, + { be_const_key(TUYA_RX, 59), be_const_int(72) }, { be_const_key(WIEGAND_D1, -1), be_const_int(217) }, - { be_const_key(SSD1331_DC, 90), be_const_int(209) }, - { be_const_key(ADC_PH, -1), be_const_int(213) }, - { be_const_key(CSE7766_TX, -1), be_const_int(96) }, - { be_const_key(ADC_BUTTON_INV, 81), be_const_int(151) }, - { be_const_key(CNTR1_NP, -1), be_const_int(12) }, - { be_const_key(OUTPUT_LO, 85), be_const_int(121) }, - { be_const_key(SHELLY_DIMMER_BOOT0, -1), be_const_int(189) }, - { be_const_key(WEBCAM_PWDN, -1), be_const_int(154) }, - { be_const_key(KEY1, 246), be_const_int(1) }, - { be_const_key(RA8876_CS, 204), be_const_int(205) }, - { be_const_key(SDM630_RX, 171), be_const_int(63) }, - { be_const_key(ILI9341_DC, -1), be_const_int(200) }, - { be_const_key(LED1, 257), be_const_int(9) }, + { be_const_key(EPAPER42_CS, 133), be_const_int(203) }, + { be_const_key(INPUT_PULLDOWN, -1), be_const_int(9) }, + { be_const_key(A4988_DIR, 75), be_const_int(116) }, + { be_const_key(NEOPOOL_RX, -1), be_const_int(219) }, + { be_const_key(PZEM016_RX, 36), be_const_int(48) }, + { be_const_key(digital_write, 225), be_const_func(gp_digital_write) }, + { be_const_key(NRG_CF1, -1), be_const_int(83) }, + { be_const_key(FTC532, -1), be_const_int(195) }, + { be_const_key(DDS2382_TX, -1), be_const_int(122) }, + { be_const_key(WEBCAM_RESET, 230), be_const_int(155) }, + { be_const_key(TELEINFO_ENABLE, 42), be_const_int(177) }, + { be_const_key(IRRECV, 89), be_const_int(34) }, + { be_const_key(SDM120_RX, 148), be_const_int(61) }, + { be_const_key(PMS5003_TX, -1), be_const_int(52) }, + { be_const_key(CC1101_GDO2, -1), be_const_int(143) }, + { be_const_key(HPMA_RX, 238), be_const_int(134) }, + { be_const_key(MAX7219CS, -1), be_const_int(233) }, + { be_const_key(CSE7766_RX, 46), be_const_int(97) }, + { be_const_key(RISING, 103), be_const_int(1) }, { be_const_key(SPI_MISO, -1), be_const_int(21) }, - { be_const_key(SSD1351_DC, 30), be_const_int(226) }, - { be_const_key(MAX7219CLK, -1), be_const_int(231) }, - { be_const_key(MCP39F5_TX, -1), be_const_int(86) }, - { be_const_key(ROT1A, -1), be_const_int(102) }, - { be_const_key(TCP_RX, 42), be_const_int(172) }, - { be_const_key(WE517_TX, -1), be_const_int(185) }, - { be_const_key(SAIR_RX, 214), be_const_int(51) }, - { be_const_key(IEM3000_TX, 143), be_const_int(179) }, - { be_const_key(SDM630_TX, -1), be_const_int(62) }, - { be_const_key(KEY1_NP, 251), be_const_int(2) }, + { be_const_key(RFRECV, -1), be_const_int(36) }, + { be_const_key(SHELLY_DIMMER_RST_INV, 228), be_const_int(190) }, + { be_const_key(TASMOTACLIENT_RST, -1), be_const_int(132) }, + { be_const_key(PULLDOWN, 189), be_const_int(8) }, + { be_const_key(SSPI_CS, -1), be_const_int(29) }, + { be_const_key(TUYA_TX, -1), be_const_int(71) }, + { be_const_key(LED1_INV, 0), be_const_int(10) }, + { be_const_key(digital_read, -1), be_const_func(gp_digital_read) }, + { be_const_key(CSE7766_TX, 215), be_const_int(96) }, + { be_const_key(DCKI, -1), be_const_int(95) }, + { be_const_key(ILI9341_CS, -1), be_const_int(199) }, + { be_const_key(pin_used, -1), be_const_func(gp_pin_used) }, + { be_const_key(ADC_RANGE, 237), be_const_int(152) }, + { be_const_key(PZEM0XX_TX, 31), be_const_int(46) }, + { be_const_key(ROT1A_NP, -1), be_const_int(211) }, + { be_const_key(ROT1A, 202), be_const_int(102) }, + { be_const_key(HALLEFFECT, -1), be_const_int(237) }, + { be_const_key(OPEN_DRAIN, -1), be_const_int(16) }, + { be_const_key(TM1638DIO, 220), be_const_int(65) }, + { be_const_key(IEM3000_TX, -1), be_const_int(179) }, + { be_const_key(MAX7219DIN, 118), be_const_int(232) }, + { be_const_key(A4988_ENA, -1), be_const_int(118) }, + { be_const_key(MHZ_TXD, 23), be_const_int(44) }, + { be_const_key(WEBCAM_PWDN, -1), be_const_int(154) }, + { be_const_key(SDS0X1_RX, -1), be_const_int(55) }, + { be_const_key(SPI_CS, -1), be_const_int(24) }, + { be_const_key(BS814_CLK, -1), be_const_int(214) }, + { be_const_key(CSE7761_RX, -1), be_const_int(229) }, + { be_const_key(ADC_JOY, -1), be_const_int(104) }, + { be_const_key(OPTION_A, 171), be_const_int(194) }, + { be_const_key(RFSEND, -1), be_const_int(35) }, + { be_const_key(HRE_DATA, 135), be_const_int(107) }, + { be_const_key(BOILER_OT_TX, 221), be_const_int(167) }, + { be_const_key(ETH_PHY_MDC, 30), be_const_int(174) }, + { be_const_key(LED1, 11), be_const_int(9) }, + { be_const_key(DDSU666_RX, 64), be_const_int(125) }, + { be_const_key(MAX31855CLK, -1), be_const_int(79) }, + { be_const_key(RA8876_CS, -1), be_const_int(205) }, + { be_const_key(AZ_TXD, -1), be_const_int(76) }, + { be_const_key(SBR_TX, -1), be_const_int(56) }, + { be_const_key(REL1_INV, 212), be_const_int(8) }, + { be_const_key(CC1101_GDO0, -1), be_const_int(142) }, + { be_const_key(AZ_RXD, 149), be_const_int(77) }, + { be_const_key(EPAPER29_CS, 229), be_const_int(202) }, + { be_const_key(P9813_DAT, 177), be_const_int(193) }, + { be_const_key(PWM1, -1), be_const_int(13) }, + { be_const_key(INPUT, -1), be_const_int(239) }, + { be_const_key(PN532_TXD, -1), be_const_int(89) }, + { be_const_key(I2S_IN_DATA, -1), be_const_int(246) }, + { be_const_key(SOLAXX1_TX, -1), be_const_int(109) }, + { be_const_key(LEDLNK_INV, 208), be_const_int(18) }, + { be_const_key(ADC_LIGHT, -1), be_const_int(149) }, + { be_const_key(SDS0X1_TX, 92), be_const_int(54) }, + { be_const_key(ADC_PH, 1), be_const_int(213) }, + { be_const_key(WEBCAM_XCLK, 267), be_const_int(156) }, + { be_const_key(ADC_BUTTON_INV, -1), be_const_int(151) }, + { be_const_key(IBEACON_TX, 13), be_const_int(114) }, + { be_const_key(SWT1_NP, -1), be_const_int(6) }, + { be_const_key(SDCARD_CS, 62), be_const_int(210) }, + { be_const_key(KEY1_PD, -1), be_const_int(240) }, + { be_const_key(BUZZER, 69), be_const_int(15) }, + { be_const_key(SM2135_DAT, -1), be_const_int(127) }, + { be_const_key(CNTR1_NP, -1), be_const_int(12) }, + { be_const_key(NRF24_CS, 49), be_const_int(197) }, + { be_const_key(DYP_RX, -1), be_const_int(182) }, + { be_const_key(IRSEND, -1), be_const_int(33) }, + { be_const_key(WEBCAM_SIOC, 258), be_const_int(158) }, + { be_const_key(MAX7219CLK, 56), be_const_int(231) }, + { be_const_key(WIEGAND_D0, 165), be_const_int(216) }, + { be_const_key(ZIGBEE_RX, -1), be_const_int(112) }, + { be_const_key(CHANGE, 33), be_const_int(4) }, + { be_const_key(AS608_RX, -1), be_const_int(188) }, + { be_const_key(TCP_RX, -1), be_const_int(172) }, + { be_const_key(PZEM017_RX, -1), be_const_int(49) }, + { be_const_key(NRF24_DC, -1), be_const_int(198) }, + { be_const_key(BACKLIGHT, 35), be_const_int(31) }, + { be_const_key(SSPI_MOSI, -1), be_const_int(27) }, + { be_const_key(MAX31855DO, -1), be_const_int(80) }, + { be_const_key(LE01MR_RX, -1), be_const_int(140) }, + { be_const_key(I2S_IN_SLCT, -1), be_const_int(248) }, + { be_const_key(ETH_PHY_POWER, -1), be_const_int(173) }, + { be_const_key(ADE7953_IRQ, 29), be_const_int(108) }, + { be_const_key(SSPI_MISO, -1), be_const_int(26) }, + { be_const_key(WINDMETER_SPEED, 79), be_const_int(168) }, + { be_const_key(IBEACON_RX, -1), be_const_int(115) }, + { be_const_key(TX2X_TXD_BLACK, 8), be_const_int(70) }, + { be_const_key(TM1637CLK, 102), be_const_int(222) }, + { be_const_key(KEY1_INV, -1), be_const_int(3) }, + { be_const_key(BOILER_OT_RX, -1), be_const_int(166) }, + { be_const_key(DDSU666_TX, -1), be_const_int(124) }, + { be_const_key(WEBCAM_DATA, -1), be_const_int(159) }, + { be_const_key(DDS2382_RX, -1), be_const_int(123) }, + { be_const_key(EXS_ENABLE, 53), be_const_int(129) }, + { be_const_key(AS608_TX, -1), be_const_int(187) }, + { be_const_key(OLED_RESET, 100), be_const_int(32) }, + { be_const_key(AS3935, -1), be_const_int(146) }, + { be_const_key(LMT01, -1), be_const_int(178) }, + { be_const_key(ADC_INPUT, -1), be_const_int(147) }, + { be_const_key(SDM72_TX, 235), be_const_int(220) }, + { be_const_key(ADC_TEMP, -1), be_const_int(148) }, + { be_const_key(LEDLNK, 7), be_const_int(17) }, + { be_const_key(DAC, -1), be_const_int(-1) }, + { be_const_key(SAIR_RX, -1), be_const_int(51) }, + { be_const_key(SOLAXX1_RX, -1), be_const_int(110) }, + { be_const_key(WEBCAM_PCLK, -1), be_const_int(162) }, + { be_const_key(KEY1_NP, 14), be_const_int(2) }, + { be_const_key(TFMINIPLUS_TX, -1), be_const_int(234) }, + { be_const_key(SR04_TRIG, -1), be_const_int(58) }, + { be_const_key(A4988_STP, 182), be_const_int(117) }, + { be_const_key(TASMOTACLIENT_TXD, -1), be_const_int(130) }, + { be_const_key(HX711_DAT, 207), be_const_int(69) }, + { be_const_key(HM10_RX, -1), be_const_int(138) }, + { be_const_key(ARIRFSEL, 249), be_const_int(99) }, + { be_const_key(MIEL_HVAC_TX, 141), be_const_int(183) }, + { be_const_key(NRG_SEL, -1), be_const_int(81) }, + { be_const_key(DEEPSLEEP, 132), be_const_int(128) }, + { be_const_key(CSE7761_TX, -1), be_const_int(228) }, + { be_const_key(WS2812, 18), be_const_int(43) }, + { be_const_key(WE517_RX, 188), be_const_int(186) }, + { be_const_key(PROJECTOR_CTRL_TX, -1), be_const_int(224) }, + { be_const_key(SI7021, 242), be_const_int(39) }, + { be_const_key(SM16716_SEL, -1), be_const_int(93) }, + { be_const_key(KEY1_INV_PD, -1), be_const_int(241) }, + { be_const_key(SPI_CLK, -1), be_const_int(23) }, + { be_const_key(ZEROCROSS, -1), be_const_int(236) }, + { be_const_key(OUTPUT_OPEN_DRAIN, -1), be_const_int(18) }, + { be_const_key(REL1, -1), be_const_int(7) }, + { be_const_key(NRG_SEL_INV, -1), be_const_int(82) }, + { be_const_key(RC522_CS, -1), be_const_int(196) }, + { be_const_key(ADC_BUTTON, -1), be_const_int(150) }, + { be_const_key(SAIR_TX, -1), be_const_int(50) }, + { be_const_key(OUTPUT_HI, 105), be_const_int(120) }, + { be_const_key(LE01MR_TX, -1), be_const_int(141) }, + { be_const_key(ILI9341_DC, 22), be_const_int(200) }, + { be_const_key(SR04_ECHO, 263), be_const_int(59) }, + { be_const_key(HJL_CF, 241), be_const_int(85) }, + { be_const_key(I2S_OUT_CLK, -1), be_const_int(244) }, + { be_const_key(MIEL_HVAC_RX, 12), be_const_int(184) }, + { be_const_key(GPS_RX, 247), be_const_int(136) }, + { be_const_key(pin_mode, -1), be_const_func(gp_pin_mode) }, + { be_const_key(P9813_CLK, -1), be_const_int(192) }, + { be_const_key(ZIGBEE_TX, 262), be_const_int(111) }, + { be_const_key(dac_voltage, -1), be_const_func(gp_dac_voltage) }, + { be_const_key(INPUT_PULLUP, -1), be_const_int(5) }, + { be_const_key(SDM120_TX, -1), be_const_int(60) }, + { be_const_key(HRXL_RX, -1), be_const_int(144) }, + { be_const_key(pin, -1), be_const_func(gp_pin) }, + { be_const_key(HRE_CLOCK, -1), be_const_int(106) }, + { be_const_key(DHT11, -1), be_const_int(37) }, + { be_const_key(PWM1_INV, 109), be_const_int(14) }, + { be_const_key(A4988_MS1, 94), be_const_int(119) }, + { be_const_key(SBR_RX, -1), be_const_int(57) }, + { be_const_key(SWT1_PD, -1), be_const_int(242) }, + { be_const_key(FALLING, 5), be_const_int(2) }, + { be_const_key(PULLUP, -1), be_const_int(4) }, + { be_const_key(TELEINFO_RX, -1), be_const_int(176) }, + { be_const_key(MCP39F5_RX, -1), be_const_int(87) }, + { be_const_key(ETH_PHY_MDIO, -1), be_const_int(175) }, + { be_const_key(BL0940_RX, -1), be_const_int(170) }, + { be_const_key(NEOPOOL_TX, 248), be_const_int(218) }, + { be_const_key(VL53L0X_XSHUT1, -1), be_const_int(230) }, + { be_const_key(MCP39F5_RST, 203), be_const_int(88) }, + { be_const_key(HLW_CF, 231), be_const_int(84) }, + { be_const_key(WEBCAM_PSRCS, -1), be_const_int(165) }, + { be_const_key(SSD1331_DC, -1), be_const_int(209) }, + { be_const_key(ST7789_CS, -1), be_const_int(206) }, + { be_const_key(SDM72_RX, 66), be_const_int(221) }, + { be_const_key(SSD1351_DC, -1), be_const_int(226) }, + { be_const_key(SSPI_SCLK, -1), be_const_int(28) }, + { be_const_key(I2S_IN_CLK, -1), be_const_int(247) }, + { be_const_key(SM16716_DAT, -1), be_const_int(92) }, { be_const_key(I2C_SDA, -1), be_const_int(20) }, + { be_const_key(PZEM004_RX, -1), be_const_int(47) }, + { be_const_key(TCP_TX, -1), be_const_int(171) }, + { be_const_key(SDM630_RX, -1), be_const_int(63) }, + { be_const_key(SWT1, -1), be_const_int(5) }, + { be_const_key(ROT1B, -1), be_const_int(103) }, + { be_const_key(I2C_SCL, -1), be_const_int(19) }, + { be_const_key(RXD, -1), be_const_int(101) }, + { be_const_key(DSB, 261), be_const_int(41) }, + { be_const_key(MCP39F5_TX, 252), be_const_int(86) }, + { be_const_key(HIGH, 266), be_const_int(1) }, + { be_const_key(RC522_RST, -1), be_const_int(191) }, + { be_const_key(SSPI_DC, -1), be_const_int(30) }, + { be_const_key(LOW, -1), be_const_int(0) }, + { be_const_key(BUZZER_INV, -1), be_const_int(16) }, + { be_const_key(XPT2046_CS, -1), be_const_int(227) }, + { be_const_key(WEBCAM_HSD, -1), be_const_int(164) }, + { be_const_key(TM1638STB, -1), be_const_int(66) }, + { be_const_key(PMS5003_RX, -1), be_const_int(53) }, + { be_const_key(SPI_DC, -1), be_const_int(25) }, + { be_const_key(MHZ_RXD, -1), be_const_int(45) }, + { be_const_key(ILI9488_CS, 119), be_const_int(201) }, + { be_const_key(HX711_SCK, 57), be_const_int(68) }, + { be_const_key(SDM630_TX, 227), be_const_int(62) }, + { be_const_key(SHELLY_DIMMER_BOOT0, -1), be_const_int(189) }, + { be_const_key(EPD_DATA, -1), be_const_int(238) }, + { be_const_key(WE517_TX, -1), be_const_int(185) }, + { be_const_key(TXD, 234), be_const_int(100) }, + { be_const_key(OUTPUT, -1), be_const_int(2) }, + { be_const_key(SSPI_MAX31865_CS1, -1), be_const_int(105) }, + { be_const_key(WEBCAM_PSCLK, -1), be_const_int(163) }, + { be_const_key(WEBCAM_SIOD, -1), be_const_int(157) }, { be_const_key(MGC3130_RESET, -1), be_const_int(74) }, - { be_const_key(SI7021, -1), be_const_int(39) }, - { be_const_key(MAX7219CS, 151), be_const_int(233) }, - { be_const_key(SDM72_TX, -1), be_const_int(220) }, - { be_const_key(AS608_TX, 6), be_const_int(187) }, - { be_const_key(CHANGE, -1), be_const_int(4) }, + { be_const_key(KEY1, -1), be_const_int(1) }, + { be_const_key(MGC3130_XFER, -1), be_const_int(73) }, + { be_const_key(ST7789_DC, 245), be_const_int(207) }, + { be_const_key(GPS_TX, 123), be_const_int(137) }, + { be_const_key(ADC_CT_POWER, 58), be_const_int(153) }, }; static be_define_const_map( m_libgpio_map, - 258 + 270 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/generate/be_fixed_introspect.h b/lib/libesp32/Berry/generate/be_fixed_introspect.h new file mode 100644 index 000000000..c5bc4a6aa --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_introspect.h @@ -0,0 +1,21 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(m_libintrospect_map) { + { be_const_key(get, -1), be_const_func(m_findmember) }, + { be_const_key(toptr, 3), be_const_func(m_toptr) }, + { be_const_key(set, -1), be_const_func(m_setmember) }, + { be_const_key(fromptr, -1), be_const_func(m_fromptr) }, + { be_const_key(members, 1), be_const_func(m_attrlist) }, +}; + +static be_define_const_map( + m_libintrospect_map, + 5 +); + +static be_define_const_module( + m_libintrospect, + "introspect" +); + +BE_EXPORT_VARIABLE be_define_const_native_module(introspect, NULL); diff --git a/lib/libesp32/Berry/generate/be_fixed_m_builtin.h b/lib/libesp32/Berry/generate/be_fixed_m_builtin.h index 423be6100..57e049fc3 100644 --- a/lib/libesp32/Berry/generate/be_fixed_m_builtin.h +++ b/lib/libesp32/Berry/generate/be_fixed_m_builtin.h @@ -1,62 +1,64 @@ #include "be_constobj.h" static be_define_const_map_slots(m_builtin_map) { - { be_const_key(print, 19), be_const_int(15) }, - { be_const_key(isinstance, -1), be_const_int(8) }, - { be_const_key(classname, -1), be_const_int(3) }, - { be_const_key(module, -1), be_const_int(12) }, - { be_const_key(size, -1), be_const_int(18) }, - { be_const_key(type, 9), be_const_int(21) }, - { be_const_key(compile, -1), be_const_int(5) }, - { be_const_key(open, -1), be_const_int(14) }, - { be_const_key(real, -1), be_const_int(17) }, - { be_const_key(__iterator__, -1), be_const_int(0) }, - { be_const_key(super, -1), be_const_int(20) }, - { be_const_key(issubclass, -1), be_const_int(9) }, - { be_const_key(classof, -1), be_const_int(4) }, - { be_const_key(map, 8), be_const_int(11) }, - { be_const_key(int, 2), be_const_int(7) }, - { be_const_key(input, 3), be_const_int(6) }, - { be_const_key(number, -1), be_const_int(13) }, - { be_const_key(list, 7), be_const_int(10) }, - { be_const_key(str, 1), be_const_int(19) }, - { be_const_key(range, -1), be_const_int(16) }, - { be_const_key(bytes, -1), be_const_int(2) }, - { be_const_key(assert, -1), be_const_int(1) }, + { be_const_key(number, 16), be_const_int(7) }, + { be_const_key(map, -1), be_const_int(19) }, + { be_const_key(classname, 22), be_const_int(5) }, + { be_const_key(bytes, 2), be_const_int(21) }, + { be_const_key(int, 12), be_const_int(9) }, + { be_const_key(module, -1), be_const_int(11) }, + { be_const_key(print, 20), be_const_int(1) }, + { be_const_key(issubclass, -1), be_const_int(14) }, + { be_const_key(assert, -1), be_const_int(0) }, + { be_const_key(list, -1), be_const_int(18) }, + { be_const_key(__iterator__, -1), be_const_int(16) }, + { be_const_key(real, -1), be_const_int(10) }, + { be_const_key(super, 21), be_const_int(3) }, + { be_const_key(isinstance, 8), be_const_int(15) }, + { be_const_key(classof, 4), be_const_int(6) }, + { be_const_key(input, -1), be_const_int(2) }, + { be_const_key(call, 19), be_const_int(22) }, + { be_const_key(compile, -1), be_const_int(13) }, + { be_const_key(open, -1), be_const_int(17) }, + { be_const_key(size, -1), be_const_int(12) }, + { be_const_key(range, -1), be_const_int(20) }, + { be_const_key(str, -1), be_const_int(8) }, + { be_const_key(type, -1), be_const_int(4) }, }; static be_define_const_map( m_builtin_map, - 22 + 23 ); static const bvalue __vlist_array[] = { - be_const_func(l_iterator), be_const_func(l_assert), - be_const_class(be_class_bytes), - be_const_func(l_classname), - be_const_func(l_classof), - be_const_func(l_compile), - be_const_func(l_input), - be_const_func(l_int), - be_const_func(l_isinstance), - be_const_func(l_issubclass), - be_const_class(be_class_list), - be_const_class(be_class_map), - be_const_func(l_module), - be_const_func(l_number), - be_const_func(be_nfunc_open), be_const_func(l_print), - be_const_class(be_class_range), - be_const_func(l_real), - be_const_func(l_size), - be_const_func(l_str), + be_const_func(l_input), be_const_func(l_super), be_const_func(l_type), + be_const_func(l_classname), + be_const_func(l_classof), + be_const_func(l_number), + be_const_func(l_str), + be_const_func(l_int), + be_const_func(l_real), + be_const_func(l_module), + be_const_func(l_size), + be_const_func(l_compile), + be_const_func(l_issubclass), + be_const_func(l_isinstance), + be_const_func(l_iterator), + be_const_func(be_nfunc_open), + be_const_class(be_class_list), + be_const_class(be_class_map), + be_const_class(be_class_range), + be_const_class(be_class_bytes), + be_const_func(l_call), }; static be_define_const_vector( m_builtin_vector, __vlist_array, - 22 + 23 ); diff --git a/lib/libesp32/Berry/generate/be_fixed_math.h b/lib/libesp32/Berry/generate/be_fixed_math.h index 028e6e006..111c556c8 100644 --- a/lib/libesp32/Berry/generate/be_fixed_math.h +++ b/lib/libesp32/Berry/generate/be_fixed_math.h @@ -1,35 +1,38 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libmath_map) { - { be_const_key(tanh, 11), be_const_func(m_tanh) }, - { be_const_key(acos, -1), be_const_func(m_acos) }, - { be_const_key(pi, -1), be_const_real(M_PI) }, - { be_const_key(log10, -1), be_const_func(m_log10) }, - { be_const_key(deg, 18), be_const_func(m_deg) }, - { be_const_key(pow, -1), be_const_func(m_pow) }, - { be_const_key(asin, -1), be_const_func(m_asin) }, - { be_const_key(rad, -1), be_const_func(m_rad) }, - { be_const_key(ceil, 14), be_const_func(m_ceil) }, - { be_const_key(log, -1), be_const_func(m_log) }, - { be_const_key(imax, -1), be_const_int(M_IMAX) }, - { be_const_key(imin, 3), be_const_int(M_IMIN) }, + { be_const_key(asin, 7), be_const_func(m_asin) }, + { be_const_key(isnan, -1), be_const_func(m_isnan) }, + { be_const_key(sinh, 22), be_const_func(m_sinh) }, { be_const_key(cos, -1), be_const_func(m_cos) }, - { be_const_key(sin, -1), be_const_func(m_sin) }, - { be_const_key(exp, -1), be_const_func(m_exp) }, - { be_const_key(atan, 1), be_const_func(m_atan) }, - { be_const_key(tan, 7), be_const_func(m_tan) }, - { be_const_key(srand, -1), be_const_func(m_srand) }, - { be_const_key(sqrt, -1), be_const_func(m_sqrt) }, - { be_const_key(abs, -1), be_const_func(m_abs) }, - { be_const_key(cosh, -1), be_const_func(m_cosh) }, - { be_const_key(floor, -1), be_const_func(m_floor) }, { be_const_key(rand, -1), be_const_func(m_rand) }, - { be_const_key(sinh, 4), be_const_func(m_sinh) }, + { be_const_key(deg, -1), be_const_func(m_deg) }, + { be_const_key(log10, 16), be_const_func(m_log10) }, + { be_const_key(acos, -1), be_const_func(m_acos) }, + { be_const_key(cosh, -1), be_const_func(m_cosh) }, + { be_const_key(tanh, 21), be_const_func(m_tanh) }, + { be_const_key(rad, 11), be_const_func(m_rad) }, + { be_const_key(abs, -1), be_const_func(m_abs) }, + { be_const_key(atan2, -1), be_const_func(m_atan2) }, + { be_const_key(tan, 19), be_const_func(m_tan) }, + { be_const_key(ceil, 15), be_const_func(m_ceil) }, + { be_const_key(nan, -1), be_const_real(NAN) }, + { be_const_key(imin, -1), be_const_int(M_IMIN) }, + { be_const_key(pow, -1), be_const_func(m_pow) }, + { be_const_key(atan, -1), be_const_func(m_atan) }, + { be_const_key(imax, 25), be_const_int(M_IMAX) }, + { be_const_key(exp, 17), be_const_func(m_exp) }, + { be_const_key(log, 1), be_const_func(m_log) }, + { be_const_key(sqrt, -1), be_const_func(m_sqrt) }, + { be_const_key(srand, -1), be_const_func(m_srand) }, + { be_const_key(floor, -1), be_const_func(m_floor) }, + { be_const_key(sin, -1), be_const_func(m_sin) }, + { be_const_key(pi, 8), be_const_real(M_PI) }, }; static be_define_const_map( m_libmath_map, - 24 + 27 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/generate/be_fixed_persist.h b/lib/libesp32/Berry/generate/be_fixed_persist.h new file mode 100644 index 000000000..2bcedb715 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_persist.h @@ -0,0 +1,17 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(m_libpersist_map) { + { be_const_key(init, -1), be_const_closure(_anonymous__closure) }, +}; + +static be_define_const_map( + m_libpersist_map, + 1 +); + +static be_define_const_module( + m_libpersist, + "persist" +); + +BE_EXPORT_VARIABLE be_define_const_native_module(persist, NULL); diff --git a/lib/libesp32/Berry/generate/be_fixed_strict.h b/lib/libesp32/Berry/generate/be_fixed_strict.h new file mode 100644 index 000000000..fe93fca6d --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_strict.h @@ -0,0 +1,17 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(m_libstrict_map) { + { be_const_key(init, -1), be_const_func(m_init) }, +}; + +static be_define_const_map( + m_libstrict_map, + 1 +); + +static be_define_const_module( + m_libstrict, + "strict" +); + +BE_EXPORT_VARIABLE be_define_const_native_module(strict, NULL); diff --git a/lib/libesp32/Berry/generate/be_fixed_tasmota.h b/lib/libesp32/Berry/generate/be_fixed_tasmota.h deleted file mode 100644 index 12eff88ab..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_tasmota.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "be_constobj.h" - diff --git a/lib/libesp32/Berry/generate/be_fixed_tasmota_driver.h b/lib/libesp32/Berry/generate/be_fixed_tasmota_driver.h deleted file mode 100644 index 771dedc65..000000000 --- a/lib/libesp32/Berry/generate/be_fixed_tasmota_driver.h +++ /dev/null @@ -1,25 +0,0 @@ -#include "be_constobj.h" - -static be_define_const_map_slots(tasmota_driver_map) { - { be_const_key(get_tasmota, -1), be_const_func(d_getTasmotaGlob) }, - { be_const_key(web_sensor, -1), be_const_int(0) }, - { be_const_key(json_append, 0), be_const_int(1) }, - { be_const_key(every_second, 4), be_const_int(2) }, - { be_const_key(every_100ms, 7), be_const_int(3) }, - { be_const_key(web_add_main_button, -1), be_const_int(4) }, - { be_const_key(web_add_button, -1), be_const_int(5) }, - { be_const_key(save_before_restart, -1), be_const_int(6) }, - { be_const_key(button_pressed, 1), be_const_int(7) }, -}; - -static be_define_const_map( - tasmota_driver_map, - 9 -); - -BE_EXPORT_VARIABLE be_define_const_class( - tasmota_driver, - 8, - NULL, - Driver -); diff --git a/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h b/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h new file mode 100644 index 000000000..7ff9e3d66 --- /dev/null +++ b/lib/libesp32/Berry/generate/be_fixed_tasmota_path.h @@ -0,0 +1,18 @@ +#include "be_constobj.h" + +static be_define_const_map_slots(m_libpath_map) { + { be_const_key(exists, -1), be_const_func(m_path_exists) }, + { be_const_key(last_modified, 0), be_const_func(m_path_last_modified) }, +}; + +static be_define_const_map( + m_libpath_map, + 2 +); + +static be_define_const_module( + m_libpath, + "path" +); + +BE_EXPORT_VARIABLE be_define_const_native_module(path, NULL); diff --git a/lib/libesp32/Berry/generate/be_fixed_webserver.h b/lib/libesp32/Berry/generate/be_fixed_webserver.h index 1dc1b5daa..4af8183a3 100644 --- a/lib/libesp32/Berry/generate/be_fixed_webserver.h +++ b/lib/libesp32/Berry/generate/be_fixed_webserver.h @@ -1,24 +1,26 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libwebserver_map) { - { be_const_key(on, 5), be_const_func(w_webserver_on) }, - { be_const_key(state, 6), be_const_func(w_webserver_state) }, - { be_const_key(content_flush, -1), be_const_func(w_webserver_content_flush) }, - { be_const_key(content_send, -1), be_const_func(w_webserver_content_send) }, - { be_const_key(arg, -1), be_const_func(w_webserver_arg) }, - { be_const_key(has_arg, -1), be_const_func(w_webserver_has_arg) }, - { be_const_key(content_start, 2), be_const_func(w_webserver_content_start) }, + { be_const_key(state, 5), be_const_func(w_webserver_state) }, + { be_const_key(member, 9), be_const_func(w_webserver_member) }, { be_const_key(content_button, -1), be_const_func(w_webserver_content_button) }, + { be_const_key(content_start, -1), be_const_func(w_webserver_content_start) }, + { be_const_key(content_send, -1), be_const_func(w_webserver_content_send) }, + { be_const_key(content_flush, -1), be_const_func(w_webserver_content_flush) }, + { be_const_key(redirect, 8), be_const_func(w_webserver_redirect) }, { be_const_key(content_send_style, -1), be_const_func(w_webserver_content_send_style) }, - { be_const_key(check_privileged_access, 12), be_const_func(w_webserver_check_privileged_access) }, + { be_const_key(arg, -1), be_const_func(w_webserver_arg) }, { be_const_key(content_stop, -1), be_const_func(w_webserver_content_stop) }, - { be_const_key(member, -1), be_const_func(w_webserver_member) }, + { be_const_key(arg_name, -1), be_const_func(w_webserver_arg_name) }, + { be_const_key(has_arg, -1), be_const_func(w_webserver_has_arg) }, { be_const_key(arg_size, -1), be_const_func(w_webserver_argsize) }, + { be_const_key(check_privileged_access, 11), be_const_func(w_webserver_check_privileged_access) }, + { be_const_key(on, 3), be_const_func(w_webserver_on) }, }; static be_define_const_map( m_libwebserver_map, - 13 + 15 ); static be_define_const_module( diff --git a/lib/libesp32/Berry/include/be_ctypes.h b/lib/libesp32/Berry/include/be_ctypes.h new file mode 100644 index 000000000..4faa3e376 --- /dev/null +++ b/lib/libesp32/Berry/include/be_ctypes.h @@ -0,0 +1,83 @@ +/******************************************************************** + * Tasmota ctypes mapping headers + *******************************************************************/ +#ifndef __BE_CONSTOBJ_H__ +#define __BE_CONSTOBJ_H__ + +#include "be_constobj.h" + +enum { + ctypes_i32 = 14, + ctypes_i16 = 12, + ctypes_i8 = 11, + ctypes_u32 = 4, + ctypes_u16 = 2, + ctypes_u8 = 1, + + // big endian + ctypes_be_i32 = -14, + ctypes_be_i16 = -12, + ctypes_be_i8 = -11, + ctypes_be_u32 = -4, + ctypes_be_u16 = -2, + ctypes_be_u8 = -1, + + // floating point + ctypes_float = 5, + ctypes_double = 10, + + // pointer + ctypes_ptr32 = 9, + ctypes_ptr64 = -9, + + ctypes_bf = 0, //bif-field +}; + +typedef struct be_ctypes_structure_item_t { + const char * name; + uint16_t offset_bytes; + uint8_t offset_bits : 3; + uint8_t len_bits : 5; + int8_t type : 5; + uint8_t mapping : 3; +} be_ctypes_structure_item_t; + +typedef struct be_ctypes_structure_t { + uint16_t size_bytes; /* size in bytes */ + uint16_t size_elt; /* number of elements */ + const char **instance_mapping; /* array of instance class names for automatic instanciation of class */ + const be_ctypes_structure_item_t * items; +} be_ctypes_structure_t; + +typedef struct be_ctypes_class_t { + const char * name; + const be_ctypes_structure_t * definitions; +} be_ctypes_class_t; + +typedef struct be_ctypes_classes_t { + uint16_t size; + const char **instance_mapping; /* array of instance class names for automatic instanciation of class */ + const be_ctypes_class_t * classes; +} be_ctypes_classes_t; + +BE_EXPORT_VARIABLE const bclass be_class_ctypes; + +static void ctypes_register_class(bvm *vm, const bclass * ctypes_class, const be_ctypes_structure_t * definitions) { + be_pushntvclass(vm, ctypes_class); + be_setglobal(vm, str(ctypes_class->name)); + be_pop(vm, 1); +} + +// Define a sub-class of ctypes with only one member which points to the ctypes defintion +#define be_define_ctypes_class(_c_name, _def, _super, _name) \ + be_local_class(_c_name, \ + 0, \ + _super, \ + be_nested_map(1, \ + ( (struct bmapnode*) &(const bmapnode[]) { \ + { be_nested_key("_def", 1985022181, 4, -1), be_const_comptr(_def) },\ + })), \ + (be_nested_const_str(_name, 0, sizeof(_name)-1)) \ + ) + +#endif // __BE_CONSTOBJ_H__ diff --git a/lib/libesp32/Berry/src/be_api.c b/lib/libesp32/Berry/src/be_api.c index 14236a5ce..d883c08d7 100644 --- a/lib/libesp32/Berry/src/be_api.c +++ b/lib/libesp32/Berry/src/be_api.c @@ -36,7 +36,7 @@ static void class_init(bvm *vm, bclass *c, const bnfuncinfo *lib) if (lib->function) { /* method */ be_prim_method_bind(vm, c, s, lib->function); } else { - be_member_bind(vm, c, s); /* member */ + be_member_bind(vm, c, s, btrue); /* member */ } ++lib; } @@ -208,6 +208,12 @@ BERRY_API bbool be_isinstance(bvm *vm, int index) return var_isinstance(v); } +BERRY_API bbool be_ismodule(bvm *vm, int index) +{ + bvalue *v = be_indexof(vm, index); + return var_ismodule(v); +} + BERRY_API bbool be_islist(bvm *vm, int index) { bvalue *v = be_indexof(vm, index); @@ -602,23 +608,18 @@ BERRY_API bbool be_getbuiltin(bvm *vm, const char *name) BERRY_API bbool be_setmember(bvm *vm, int index, const char *k) { - int res = BE_NIL; bvalue *o = be_indexof(vm, index); + bvalue *v = be_indexof(vm, -1); if (var_isinstance(o)) { bstring *key = be_newstr(vm, k); - bvalue *v = be_indexof(vm, -1); binstance *obj = var_toobj(o); - res = be_instance_setmember(vm, obj, key, v); + return be_instance_setmember(vm, obj, key, v); } else if (var_ismodule(o)) { bstring *key = be_newstr(vm, k); bmodule *mod = var_toobj(o); - bvalue *v = be_module_bind(vm, mod, key); - if (v) { - *v = *be_indexof(vm, -1); - return btrue; - } + return be_module_setmember(vm, mod, key, v); } - return res != BE_NIL; + return bfalse; } BERRY_API bbool be_copy(bvm *vm, int index) @@ -634,7 +635,8 @@ BERRY_API bbool be_copy(bvm *vm, int index) return bfalse; } -static int ins_member(bvm *vm, int index, const char *k) +/* `onlyins` limits the search to instance, and discards module. Makes sure getmethod does not return anything for module. */ +static int ins_member(bvm *vm, int index, const char *k, bbool onlyins) { int type = BE_NIL; bvalue *o = be_indexof(vm, index); @@ -643,18 +645,27 @@ static int ins_member(bvm *vm, int index, const char *k) if (var_isinstance(o)) { binstance *obj = var_toobj(o); type = be_instance_member(vm, obj, be_newstr(vm, k), top); + } else if (var_isclass(o) && !onlyins) { + bclass *cl = var_toobj(o); + type = be_class_member(vm, cl, be_newstr(vm, k), top); + } else if (var_ismodule(o) && !onlyins) { + bmodule *module = var_toobj(o); + type = be_module_attr(vm, module, be_newstr(vm, k), top); + } + if (type == BE_NONE) { + type = BE_NIL; } return type; } BERRY_API bbool be_getmember(bvm *vm, int index, const char *k) { - return ins_member(vm, index, k) != BE_NIL; + return ins_member(vm, index, k, bfalse) != BE_NIL; } BERRY_API bbool be_getmethod(bvm *vm, int index, const char *k) { - return basetype(ins_member(vm, index, k)) == BE_FUNCTION; + return basetype(ins_member(vm, index, k, btrue)) == BE_FUNCTION; } BERRY_API bbool be_getindex(bvm *vm, int index) diff --git a/lib/libesp32/Berry/src/be_baselib.c b/lib/libesp32/Berry/src/be_baselib.c index d1bfd83b1..f80b321b1 100644 --- a/lib/libesp32/Berry/src/be_baselib.c +++ b/lib/libesp32/Berry/src/be_baselib.c @@ -6,9 +6,14 @@ ** https://github.com/Skiars/berry/blob/master/LICENSE ********************************************************************/ #include "be_object.h" +#include "be_vm.h" #include "be_exec.h" #include "be_mem.h" #include "be_gc.h" +#include "be_class.h" +#include "be_vector.h" +#include "be_string.h" +#include "be_map.h" #include #define READLINE_STEP 100 @@ -71,12 +76,105 @@ static int l_input(bvm *vm) return m_readline(vm); } +/* Look in the current class and all super classes for a method corresponding to a specific closure pointer */ +static bclass *find_class_closure(bclass *cl, bclosure *needle) +{ + while (cl) { + bmapnode *node; /* iterate on members of the class */ + bmap *members = be_class_members(cl); + if (members) { /* only iterate if there are members */ + bmapiter iter = be_map_iter(); + while ((node = be_map_next(members, &iter)) != NULL) { + if (var_type(&node->value) == BE_CLOSURE) { /* only native functions are considered */ + bclosure *clos_iter = var_toobj(&node->value); /* retrieve the method's closure */ + if (clos_iter == needle) { + /* we found the closure, we now know its class */ + return cl; + } + } + } + } + cl = be_class_super(cl); /* move to super class */ + } + return NULL; /* not found */ +} + static int l_super(bvm *vm) { - if (be_top(vm)) { + int argc = be_top(vm); + + /* if no argument, or arg 1 is nil, return nil */ + if (argc == 0 || be_isnil(vm, 1)) { + be_return_nil(vm); + } + + /* if arg 1 is a class, simply return super */ + if (be_isclass(vm, 1)) { be_getsuper(vm, 1); be_return(vm); } + + /* arg 1 is an instance */ + if (be_isinstance(vm, 1)) { + binstance *o = var_toobj(be_indexof(vm, 1)); + bclass *target_class = NULL; /* the minimal class expected, or any super class */ + bclass *base_class = NULL; /* current class of the caller, if any */ + + /* if arg 2 is present, it must be a class */ + if (argc >= 2) { + if (be_isclass(vm, 2)) { + target_class = var_toobj(be_indexof(vm, 2)); + } else if (be_isnil(vm, 2)) { + // ignore, revert to standard super() behavior if second arg is explicit nil + } else { + be_raise(vm, "type_error", "leveled super() requires 'instance' and 'class' arguments"); + } + } + + /* now the more complex part, if arg 1 is an instance */ + /* if instance is the sole argument, try to find if it comes from a method of a class and set 'base_class' accordinly */ + /* later it will be equivalent to passing this class as second argument */ + if (argc == 1) { + /* we look in the callstack for the caller's closure */ + int size = be_stack_count(&vm->callstack); + if (size >= 2) { /* need at least 2 stackframes: current (for super() native) and caller (the one we are interested in) */ + bcallframe *caller = be_vector_at(&vm->callstack, size - 2); /* get the callframe of caller */ + bvalue *func = caller->func; /* function object of caller */ + if (var_type(func) == BE_CLOSURE) { /* only useful if the caller is a Berry closure (i.e. not native) */ + bclosure *clos_ctx = var_toobj(func); /* this is the closure we look for in the class chain */ + base_class = find_class_closure(o->_class, clos_ctx); /* iterate on current and super classes to find where the closure belongs */ + } + } + } + + if (base_class || target_class) { + if (base_class) { + target_class = base_class->super; + if (!target_class) be_return_nil(vm); /* fast exit if top class */ + } + /* leveled super, i.e. fix the parenthood class level */ + if (o) { + o = be_instance_super(o); /* always skip the current class and move to super */ + } + while (o) { + bclass *c = be_instance_class(o); + if (c == target_class) break; /* found */ + o = be_instance_super(o); + } + bvalue *top = be_incrtop(vm); + if (o) { + var_setinstance(top, o); /* return the instance with the specified parent class */ + } else { + var_setnil(top); /* not found, return nil */ + } + be_return(vm); + } else { + be_getsuper(vm, 1); + be_return(vm); + } + } + + /* fall through, return nil if we don't know what to do */ be_return_nil(vm); } @@ -133,6 +231,10 @@ static int l_int(bvm *vm) be_pushint(vm, (bint)be_toreal(vm, 1)); } else if (be_isint(vm, 1)) { be_pushvalue(vm, 1); + } else if (be_isbool(vm, 1)) { + be_pushint(vm, be_tobool(vm, 1) ? 1 : 0); + } else if (be_iscomptr(vm, 1)) { + be_pushint(vm, (int) be_tocomptr(vm, 1)); } else { be_return_nil(vm); } @@ -179,6 +281,55 @@ static int l_iterator(bvm *vm) be_return_nil(vm); } +/* call a function with variable number of arguments */ +/* first argument is a callable object (function, closure, native function, native closure) */ +/* then all subsequent arguments are pushed except the last one */ +/* If the last argument is a 'list', then all elements are pushed as arguments */ +/* otherwise the last argument is pushed as well */ +static int l_call(bvm *vm) +{ + int top = be_top(vm); + if (top >= 1 && be_isfunction(vm, 1)) { + size_t arg_count = top - 1; /* we have at least 'top - 1' arguments */ + /* test if last argument is a list */ + + if (top > 1 && be_isinstance(vm, top) && be_getmember(vm, top, ".p") && be_islist(vm, top + 1)) { + int32_t list_size = be_data_size(vm, top + 1); + + if (list_size > 0) { + be_stack_require(vm, list_size + 3); /* make sure we don't overflow the stack */ + for (int i = 0; i < list_size; i++) { + be_pushnil(vm); + } + be_moveto(vm, top + 1, top + 1 + list_size); + be_moveto(vm, top, top + list_size); + + be_refpush(vm, -2); + be_pushiter(vm, -1); + while (be_iter_hasnext(vm, -2)) { + be_iter_next(vm, -2); + be_moveto(vm, -1, top); + top++; + be_pop(vm, 1); + } + be_pop(vm, 1); /* remove iterator */ + be_refpop(vm); + } + be_pop(vm, 2); + arg_count = arg_count - 1 + list_size; + } + /* actual call */ + be_call(vm, arg_count); + /* remove args */ + be_pop(vm, arg_count); + /* return value */ + + be_return(vm); + } + be_raise(vm, "value_error", "first argument must be a function"); + be_return_nil(vm); +} + static int l_str(bvm *vm) { if (be_top(vm)) { @@ -309,6 +460,12 @@ void be_load_baselib(bvm *vm) be_regfunc(vm, "isinstance", l_isinstance); be_regfunc(vm, "__iterator__", l_iterator); } + +/* call must be added later to respect order of builtins */ +void be_load_baselib_call(bvm *vm) +{ + be_regfunc(vm, "call", l_call); +} #else extern const bclass be_class_list; extern const bclass be_class_map; @@ -339,6 +496,7 @@ vartab m_builtin (scope: local) { map, class(be_class_map) range, class(be_class_range) bytes, class(be_class_bytes) + call, func(l_call) } @const_object_info_end */ #include "../generate/be_fixed_m_builtin.h" diff --git a/lib/libesp32/Berry/src/be_bytecode.c b/lib/libesp32/Berry/src/be_bytecode.c index b8242d326..521317e63 100644 --- a/lib/libesp32/Berry/src/be_bytecode.c +++ b/lib/libesp32/Berry/src/be_bytecode.c @@ -23,7 +23,7 @@ #define MAGIC_NUMBER1 0xBE #define MAGIC_NUMBER2 0xCD #define MAGIC_NUMBER3 0xFE -#define BYTECODE_VERSION 1 +#define BYTECODE_VERSION 2 #define USE_64BIT_INT (BE_INTGER_TYPE == 2 \ || BE_INTGER_TYPE == 1 && LONG_MAX == 9223372036854775807L) @@ -129,7 +129,7 @@ static bstring** save_members(bvm *vm, void *fp, bclass *c, int nvar) } while ((node = be_map_next(members, &iter)) != NULL) { be_assert(var_isstr(&node->key)); - if (var_isint(&node->value)) { /* cache member name */ + if (var_isindex(&node->value)) { /* cache member name */ if (vars == NULL) { return NULL; /* should never be executed */ } @@ -137,14 +137,21 @@ static bstring** save_members(bvm *vm, void *fp, bclass *c, int nvar) } else { /* save method's name and function */ bproto *proto; bvalue *value = &node->value; - be_assert(var_isclosure(value) || var_isproto(value)); + be_assert(var_isclosure(value) || var_isproto(value) || var_isnil(value)); save_string(fp, var_tostr(&node->key)); /* save method name */ if (var_isproto(value)) { /* the method is a prototype */ proto = var_toobj(value); - } else { /* the method is a closure */ - proto = cast(bclosure *, var_toobj(value))->proto; + save_proto(vm, fp, proto); /* only save prototype */ + } else if (var_isclosure(value)) { /* the method is a closure */ + proto = cast(bclosure *, var_toobj(value))->proto; + save_proto(vm, fp, proto); /* only save prototype */ + } else if (var_isnil(value)) { + /* this is a static member (nil default) */ + save_word(fp, 0); /* store a zero byte that will be seen as a zero length method name which is invalid */ + } else { + be_raise(vm, "internal_error", "unsupported member in class"); + return NULL; /* should never be executed */ } - save_proto(vm, fp, proto); /* only save prototype */ } } return vars; @@ -179,12 +186,18 @@ static void save_value(bvm *vm, void *fp, bvalue *v) } } -static void save_bytecode(void *fp, bproto *proto) +static void save_bytecode(bvm *vm, void *fp, bproto *proto) { + int forbid_gbl = comp_is_named_gbl(vm); binstruction *code = proto->code, *end; save_long(fp, (uint32_t)proto->codesize); for (end = code + proto->codesize; code < end; ++code) { save_long(fp, (uint32_t)*code); + if (forbid_gbl) { /* we are saving only named globals, so make sure we don't save OP_GETGBL or OP_SETGBL */ + if ((uint32_t)*code == OP_GETGBL || (uint32_t)*code == OP_SETGBL) { + be_raise(vm, "internal_error", "GETGBL/SETGBL found when saving with named globals"); + } + } } } @@ -223,7 +236,9 @@ static void save_proto(bvm *vm, void *fp, bproto *proto) save_string(fp, proto->source); /* source */ save_byte(fp, proto->argc); /* argc */ save_byte(fp, proto->nstack); /* nstack */ - save_bytecode(fp, proto); /* bytecode */ + save_byte(fp, proto->varg); /* varg */ + save_byte(fp, 0x00); /* reserved */ + save_bytecode(vm, fp, proto); /* bytecode */ save_constants(vm, fp, proto); /* constant */ save_proto_table(vm, fp, proto); /* proto table */ save_upvals(fp, proto); /* upvals description table */ @@ -253,8 +268,13 @@ static void save_globals(bvm *vm, void *fp) static void save_global_info(bvm *vm, void *fp) { save_long(fp, be_builtin_count(vm)); - save_long(fp, be_global_count(vm)); - save_globals(vm, fp); + if (comp_is_named_gbl(vm)) { + /* named globals only so no need to save current globals */ + save_long(fp, 0); + } else { + save_long(fp, be_global_count(vm)); + save_globals(vm, fp); + } } void be_bytecode_save(bvm *vm, const char *filename, bproto *proto) @@ -273,7 +293,7 @@ void be_bytecode_save(bvm *vm, const char *filename, bproto *proto) #endif /* BE_USE_BYTECODE_SAVER */ #if BE_USE_BYTECODE_LOADER -static void load_proto(bvm *vm, void *fp, bproto **proto, int info); +static bbool load_proto(bvm *vm, void *fp, bproto **proto, int info, int version); static uint8_t load_byte(void *fp) { @@ -313,9 +333,13 @@ static int load_head(void *fp) res = buffer[0] == MAGIC_NUMBER1 && buffer[1] == MAGIC_NUMBER2 && buffer[2] == MAGIC_NUMBER3 && - buffer[3] == BYTECODE_VERSION && + buffer[3] <= BYTECODE_VERSION && buffer[4] == vm_sizeinfo(); - return res; + if (res) { + return buffer[3]; + } else { + return 0; + } } bbool be_bytecode_check(const char *path) @@ -385,7 +409,7 @@ static bstring* cache_string(bvm *vm, void *fp) return str; } -static void load_class(bvm *vm, void *fp, bvalue *v) +static void load_class(bvm *vm, void *fp, bvalue *v, int version) { int nvar, count; bclass *c = be_newclass(vm, NULL, NULL); @@ -399,24 +423,29 @@ static void load_class(bvm *vm, void *fp, bvalue *v) value = vm->top; var_setproto(value, NULL); be_incrtop(vm); - load_proto(vm, fp, (bproto**)&var_toobj(value), -3); - be_method_bind(vm, c, name, var_toobj(value)); + if (load_proto(vm, fp, (bproto**)&var_toobj(value), -3, version)) { + /* actual method */ + be_method_bind(vm, c, name, var_toobj(value)); + } else { + /* no proto, static member set to nil */ + be_member_bind(vm, c, name, bfalse); + } be_stackpop(vm, 2); /* pop the cached string and proto */ } for (count = 0; count < nvar; ++count) { /* load member-variable table */ bstring *name = cache_string(vm, fp); - be_member_bind(vm, c, name); + be_member_bind(vm, c, name, btrue); be_stackpop(vm, 1); /* pop the cached string */ } } -static void load_value(bvm *vm, void *fp, bvalue *v) +static void load_value(bvm *vm, void *fp, bvalue *v, int version) { switch (load_byte(fp)) { case BE_INT: var_setint(v, load_int(fp)); break; case BE_REAL: var_setreal(v, load_real(fp)); break; case BE_STRING: var_setstr(v, load_string(vm, fp)); break; - case BE_CLASS: load_class(vm, fp, v); break; + case BE_CLASS: load_class(vm, fp, v, version); break; default: break; } } @@ -449,7 +478,7 @@ static void load_bytecode(bvm *vm, void *fp, bproto *proto, int info) } } -static void load_constant(bvm *vm, void *fp, bproto *proto) +static void load_constant(bvm *vm, void *fp, bproto *proto, int version) { int size = (int)load_long(fp); /* nconst */ if (size) { @@ -458,12 +487,12 @@ static void load_constant(bvm *vm, void *fp, bproto *proto) proto->ktab = v; proto->nconst = size; for (end = v + size; v < end; ++v) { - load_value(vm, fp, v); + load_value(vm, fp, v, version); } } } -static void load_proto_table(bvm *vm, void *fp, bproto *proto) +static void load_proto_table(bvm *vm, void *fp, bproto *proto, int version) { int size = (int)load_long(fp); /* proto count */ if (size) { @@ -472,7 +501,7 @@ static void load_proto_table(bvm *vm, void *fp, bproto *proto) proto->ptab = p; proto->nproto = size; while (size--) { - load_proto(vm, fp, p++, -1); + load_proto(vm, fp, p++, -1, version); } } } @@ -492,17 +521,28 @@ static void load_upvals(bvm *vm, void *fp, bproto *proto) } } -static void load_proto(bvm *vm, void *fp, bproto **proto, int info) +static bbool load_proto(bvm *vm, void *fp, bproto **proto, int info, int version) { - *proto = be_newproto(vm); - (*proto)->name = load_string(vm, fp); - (*proto)->source = load_string(vm, fp); - (*proto)->argc = load_byte(fp); - (*proto)->nstack = load_byte(fp); - load_bytecode(vm, fp, *proto, info); - load_constant(vm, fp, *proto); - load_proto_table(vm, fp, *proto); - load_upvals(vm, fp, *proto); + /* first load the name */ + /* if empty, it's a static member so don't allocate an actual proto */ + bstring *name = load_string(vm, fp); + if (str_len(name)) { + *proto = be_newproto(vm); + (*proto)->name = name; + (*proto)->source = load_string(vm, fp); + (*proto)->argc = load_byte(fp); + (*proto)->nstack = load_byte(fp); + if (version > 1) { + (*proto)->varg = load_byte(fp); + load_byte(fp); /* discard reserved byte */ + } + load_bytecode(vm, fp, *proto, info); + load_constant(vm, fp, *proto, version); + load_proto_table(vm, fp, *proto, version); + load_upvals(vm, fp, *proto); + return btrue; + } + return bfalse; /* no proto read */ } void load_global_info(bvm *vm, void *fp) @@ -510,7 +550,7 @@ void load_global_info(bvm *vm, void *fp) int i; int bcnt = (int)load_long(fp); /* builtin count */ int gcnt = (int)load_long(fp); /* global count */ - if (bcnt != be_builtin_count(vm)) { + if (bcnt > be_builtin_count(vm)) { bytecode_error(vm, be_pushfstring(vm, "inconsistent number of builtin objects.")); } @@ -530,15 +570,18 @@ bclosure* be_bytecode_load(bvm *vm, const char *filename) if (fp == NULL) { bytecode_error(vm, be_pushfstring(vm, "can not open file '%s'.", filename)); - } else if (load_head(fp)) { - bclosure *cl = be_newclosure(vm, 0); - var_setclosure(vm->top, cl); - be_stackpush(vm); - load_global_info(vm, fp); - load_proto(vm, fp, &cl->proto, -1); - be_stackpop(vm, 2); /* pop the closure and list */ - be_fclose(fp); - return cl; + } else { + int version = load_head(fp); + if (version) { + bclosure *cl = be_newclosure(vm, 0); + var_setclosure(vm->top, cl); + be_stackpush(vm); + load_global_info(vm, fp); + load_proto(vm, fp, &cl->proto, -1, version); + be_stackpop(vm, 2); /* pop the closure and list */ + be_fclose(fp); + return cl; + } } bytecode_error(vm, be_pushfstring(vm, "invalid bytecode file '%s'.", filename)); diff --git a/lib/libesp32/Berry/src/be_byteslib.c b/lib/libesp32/Berry/src/be_byteslib.c index f26fe1909..ecc665c31 100644 --- a/lib/libesp32/Berry/src/be_byteslib.c +++ b/lib/libesp32/Berry/src/be_byteslib.c @@ -13,6 +13,7 @@ #include "be_exec.h" #include "be_vm.h" #include "be_mem.h" +#include "be_constobj.h" #include #include @@ -21,134 +22,375 @@ #define BYTES_OVERHEAD 4 // bytes overhead to be added when allocating (used to store len and size) #define BYTES_HEADROOM 8 // keep a natural headroom of 8 bytes when resizing +#define BYTES_SIZE_FIXED -1 // if size is -1, then the bytes object cannot be reized +#define BYTES_SIZE_MAPPED -2 // if size is -2, then the bytes object is mapped to a fixed memory region, i.e. cannot be resized + +#define BYTES_RESIZE_ERROR "attribute_error" +#define BYTES_RESIZE_MESSAGE "bytes object size if fixed and cannot be resized" +/* be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); */ + typedef struct buf_impl { - uint16_t size; // size in bytes of the buffer - uint16_t len; // current size of the data in buffer. Invariant: len <= size - uint8_t buf[]; // the actual data + int32_t size; // size in bytes of the buffer + int32_t len; // current size of the data in buffer. Invariant: len <= size + uint8_t *bufptr; // the actual data + int32_t prev_size; // previous value read from the instance + int32_t prev_len; // previous value read from the instance + uint8_t *prev_bufptr; + bbool fixed; // is size fixed? (actually encoded as negative size) + bbool mapped; } buf_impl; +/******************************************************************** +** Base64 lib from https://github.com/Densaugeo/base64_arduino +** +********************************************************************/ + +/* binary_to_base64: + * Description: + * Converts a single byte from a binary value to the corresponding base64 character + * Parameters: + * v - Byte to convert + * Returns: + * ascii code of base64 character. If byte is >= 64, then there is not corresponding base64 character + * and 255 is returned + */ +static unsigned char binary_to_base64(unsigned char v); + +/* base64_to_binary: + * Description: + * Converts a single byte from a base64 character to the corresponding binary value + * Parameters: + * c - Base64 character (as ascii code) + * Returns: + * 6-bit binary value + */ +static unsigned char base64_to_binary(unsigned char c); + +/* encode_base64_length: + * Description: + * Calculates length of base64 string needed for a given number of binary bytes + * Parameters: + * input_length - Amount of binary data in bytes + * Returns: + * Number of base64 characters needed to encode input_length bytes of binary data + */ +static unsigned int encode_base64_length(unsigned int input_length); + +/* decode_base64_length: + * Description: + * Calculates number of bytes of binary data in a base64 string + * Parameters: + * input - Base64-encoded null-terminated string + * Returns: + * Number of bytes of binary data in input + */ +static unsigned int decode_base64_length(unsigned char input[]); + +/* encode_base64: + * Description: + * Converts an array of bytes to a base64 null-terminated string + * Parameters: + * input - Pointer to input data + * input_length - Number of bytes to read from input pointer + * output - Pointer to output string. Null terminator will be added automatically + * Returns: + * Length of encoded string in bytes (not including null terminator) + */ +static unsigned int encode_base64(unsigned char input[], unsigned int input_length, unsigned char output[]); + +/* decode_base64: + * Description: + * Converts a base64 null-terminated string to an array of bytes + * Parameters: + * input - Pointer to input string + * output - Pointer to output array + * Returns: + * Number of bytes in the decoded binary + */ +static unsigned int decode_base64(unsigned char input[], unsigned char output[]); + +static unsigned char binary_to_base64(unsigned char v) { + // Capital letters - 'A' is ascii 65 and base64 0 + if(v < 26) return v + 'A'; + + // Lowercase letters - 'a' is ascii 97 and base64 26 + if(v < 52) return v + 71; + + // Digits - '0' is ascii 48 and base64 52 + if(v < 62) return v - 4; + + // '+' is ascii 43 and base64 62 + if(v == 62) return '+'; + + // '/' is ascii 47 and base64 63 + if(v == 63) return '/'; + + return 64; +} + +static unsigned char base64_to_binary(unsigned char c) { + // Capital letters - 'A' is ascii 65 and base64 0 + if('A' <= c && c <= 'Z') return c - 'A'; + + // Lowercase letters - 'a' is ascii 97 and base64 26 + if('a' <= c && c <= 'z') return c - 71; + + // Digits - '0' is ascii 48 and base64 52 + if('0' <= c && c <= '9') return c + 4; + + // '+' is ascii 43 and base64 62 + if(c == '+') return 62; + + // '/' is ascii 47 and base64 63 + if(c == '/') return 63; + + return 255; +} + +static unsigned int encode_base64_length(unsigned int input_length) { + return (input_length + 2)/3*4; +} + +static unsigned int decode_base64_length(unsigned char input[]) { + unsigned char *start = input; + + while(base64_to_binary(input[0]) < 64) { + ++input; + } + + unsigned int input_length = input - start; + + unsigned int output_length = input_length/4*3; + + switch(input_length % 4) { + default: return output_length; + case 2: return output_length + 1; + case 3: return output_length + 2; + } +} + +static unsigned int encode_base64(unsigned char input[], unsigned int input_length, unsigned char output[]) { + unsigned int full_sets = input_length/3; + + // While there are still full sets of 24 bits... + for(unsigned int i = 0; i < full_sets; ++i) { + output[0] = binary_to_base64( input[0] >> 2); + output[1] = binary_to_base64((input[0] & 0x03) << 4 | input[1] >> 4); + output[2] = binary_to_base64((input[1] & 0x0F) << 2 | input[2] >> 6); + output[3] = binary_to_base64( input[2] & 0x3F); + + input += 3; + output += 4; + } + + switch(input_length % 3) { + case 0: + output[0] = '\0'; + break; + case 1: + output[0] = binary_to_base64( input[0] >> 2); + output[1] = binary_to_base64((input[0] & 0x03) << 4); + output[2] = '='; + output[3] = '='; + output[4] = '\0'; + break; + case 2: + output[0] = binary_to_base64( input[0] >> 2); + output[1] = binary_to_base64((input[0] & 0x03) << 4 | input[1] >> 4); + output[2] = binary_to_base64((input[1] & 0x0F) << 2); + output[3] = '='; + output[4] = '\0'; + break; + } + + return encode_base64_length(input_length); +} + +static unsigned int decode_base64(unsigned char input[], unsigned char output[]) { + unsigned int output_length = decode_base64_length(input); + + // While there are still full sets of 24 bits... + for(unsigned int i = 2; i < output_length; i += 3) { + output[0] = base64_to_binary(input[0]) << 2 | base64_to_binary(input[1]) >> 4; + output[1] = base64_to_binary(input[1]) << 4 | base64_to_binary(input[2]) >> 2; + output[2] = base64_to_binary(input[2]) << 6 | base64_to_binary(input[3]); + + input += 4; + output += 3; + } + + switch(output_length % 3) { + case 1: + output[0] = base64_to_binary(input[0]) << 2 | base64_to_binary(input[1]) >> 4; + break; + case 2: + output[0] = base64_to_binary(input[0]) << 2 | base64_to_binary(input[1]) >> 4; + output[1] = base64_to_binary(input[1]) << 4 | base64_to_binary(input[2]) >> 2; + break; + } + + return output_length; +} + /******************************************************************** ** Buffer low-level implementation ** ** Extracted from Tasmota SBuffer lib ********************************************************************/ -static inline uint8_t* buf_get_buf(buf_impl* buf) -{ - return &buf->buf[0]; -} +// static inline uint8_t* buf_get_buf(buf_impl* attr) +// { +// return &attr->bufptr[0]; +// } // shrink or increase. If increase, fill with zeores. Cannot go beyond `size` -static void buf_set_len(buf_impl* buf, const size_t len) +static void buf_set_len(buf_impl* attr, const size_t len) { - uint16_t old_len = buf->len; - buf->len = (len <= buf->size) ? len : buf->size; - if (old_len < buf->len) { - memset((void*) &buf->buf[old_len], 0, buf->len - old_len); + uint16_t old_len = attr->len; + attr->len = ((int32_t)len <= attr->size) ? len : attr->size; + if (old_len < attr->len) { + memset((void*) &attr->bufptr[old_len], 0, attr->len - old_len); } } -static void buf_set1(buf_impl* buf, const size_t offset, const uint8_t data) +static size_t buf_add1(buf_impl* attr, const uint8_t data) // append 8 bits value { - if (offset < buf->len) { - buf->buf[offset] = data; + if (attr->len < attr->size) { // do we have room for 1 byte + attr->bufptr[attr->len++] = data; } + return attr->len; } -static size_t buf_add1(buf_impl* buf, const uint8_t data) // append 8 bits value +static size_t buf_add2_le(buf_impl* attr, const uint16_t data) // append 16 bits value { - if (buf->len < buf->size) { // do we have room for 1 byte - buf->buf[buf->len++] = data; + if (attr->len < attr->size - 1) { // do we have room for 2 bytes + attr->bufptr[attr->len++] = data; + attr->bufptr[attr->len++] = data >> 8; } - return buf->len; + return attr->len; } -static size_t buf_add2_le(buf_impl* buf, const uint16_t data) // append 16 bits value +static size_t buf_add2_be(buf_impl* attr, const uint16_t data) // append 16 bits value { - if (buf->len < buf->size - 1) { // do we have room for 2 bytes - buf->buf[buf->len++] = data; - buf->buf[buf->len++] = data >> 8; + if (attr->len < attr->size - 1) { // do we have room for 2 bytes + attr->bufptr[attr->len++] = data >> 8; + attr->bufptr[attr->len++] = data; } - return buf->len; + return attr->len; } -static size_t buf_add2_be(buf_impl* buf, const uint16_t data) // append 16 bits value +static size_t buf_add4_le(buf_impl* attr, const uint32_t data) // append 32 bits value { - if (buf->len < buf->size - 1) { // do we have room for 2 bytes - buf->buf[buf->len++] = data >> 8; - buf->buf[buf->len++] = data; + if (attr->len < attr->size - 3) { // do we have room for 4 bytes + attr->bufptr[attr->len++] = data; + attr->bufptr[attr->len++] = data >> 8; + attr->bufptr[attr->len++] = data >> 16; + attr->bufptr[attr->len++] = data >> 24; } - return buf->len; + return attr->len; } -static size_t buf_add4_le(buf_impl* buf, const uint32_t data) // append 32 bits value +size_t buf_add4_be(buf_impl* attr, const uint32_t data) // append 32 bits value { - if (buf->len < buf->size - 3) { // do we have room for 4 bytes - buf->buf[buf->len++] = data; - buf->buf[buf->len++] = data >> 8; - buf->buf[buf->len++] = data >> 16; - buf->buf[buf->len++] = data >> 24; + if (attr->len < attr->size - 3) { // do we have room for 4 bytes + attr->bufptr[attr->len++] = data >> 24; + attr->bufptr[attr->len++] = data >> 16; + attr->bufptr[attr->len++] = data >> 8; + attr->bufptr[attr->len++] = data; } - return buf->len; + return attr->len; } -size_t buf_add4_be(buf_impl* buf, const uint32_t data) // append 32 bits value +static size_t buf_add_buf(buf_impl* attr, buf_impl* attr2) { - if (buf->len < buf->size - 3) { // do we have room for 4 bytes - buf->buf[buf->len++] = data >> 24; - buf->buf[buf->len++] = data >> 16; - buf->buf[buf->len++] = data >> 8; - buf->buf[buf->len++] = data; - } - return buf->len; -} - -static size_t buf_add_buf(buf_impl* buf, buf_impl* buf2) -{ - if (buf->len + buf2->len <= buf->size) { - for (uint32_t i = 0; i < buf2->len; i++) { - buf->buf[buf->len++] = buf2->buf[i]; + if (attr->len + attr2->len <= attr->size) { + for (int32_t i = 0; i < attr2->len; i++) { + attr->bufptr[attr->len++] = attr2->bufptr[i]; } } - return buf->len; + return attr->len; } -static uint8_t buf_get1(buf_impl* buf, int offset) +static uint8_t buf_get1(buf_impl* attr, int offset) { - if ((offset >= 0) && (offset < buf->len)) { - return buf->buf[offset]; + if ((offset >= 0) && (offset < attr->len)) { + return attr->bufptr[offset]; } return 0; } -static uint16_t buf_get2_le(buf_impl* buf, int offset) { - if ((offset >= 0) && (offset < buf->len - 1)) { - return buf->buf[offset] | (buf->buf[offset+1] << 8); +static void buf_set1(buf_impl* attr, size_t offset, uint8_t data) +{ + if ((int32_t)offset < attr->len) { + attr->bufptr[offset] = data; + } +} + +static void buf_set2_le(buf_impl* attr, size_t offset, uint16_t data) +{ + if ((int32_t)offset + 1 < attr->len) { + attr->bufptr[offset] = data & 0xFF; + attr->bufptr[offset+1] = data >> 8; + } +} + +static void buf_set2_be(buf_impl* attr, size_t offset, uint16_t data) +{ + if ((int32_t)offset + 1 < attr->len) { + attr->bufptr[offset+1] = data & 0xFF; + attr->bufptr[offset] = data >> 8; + } +} + +static uint16_t buf_get2_le(buf_impl* attr, size_t offset) +{ + if ((int32_t)offset + 1 < attr->len) { + return attr->bufptr[offset] | (attr->bufptr[offset+1] << 8); } return 0; } -static uint16_t buf_get2_be(buf_impl* buf, int offset) +static uint16_t buf_get2_be(buf_impl* attr, size_t offset) { - if (offset < buf->len - 1) { - return buf->buf[offset+1] | (buf->buf[offset] << 8); + if ((int32_t)offset + 1 < attr->len) { + return attr->bufptr[offset+1] | (attr->bufptr[offset] << 8); } return 0; } -static uint32_t buf_get4_le(buf_impl* buf, int offset) +static void buf_set4_le(buf_impl* attr, size_t offset, uint32_t data) { - if ((offset >= 0) && (offset < buf->len - 3)) { - return buf->buf[offset] | (buf->buf[offset+1] << 8) | - (buf->buf[offset+2] << 16) | (buf->buf[offset+3] << 24); + if ((int32_t)offset + 3 < attr->len) { + attr->bufptr[offset] = data & 0xFF; + attr->bufptr[offset+1] = (data >> 8) & 0xFF; + attr->bufptr[offset+2] = (data >> 16) & 0xFF; + attr->bufptr[offset+3] = data >> 24; + } +} + +static void buf_set4_be(buf_impl* attr, size_t offset, uint32_t data) +{ + if ((int32_t)offset + 3 < attr->len) { + attr->bufptr[offset+3] = data & 0xFF; + attr->bufptr[offset+2] = (data >> 8) & 0xFF; + attr->bufptr[offset+1] = (data >> 16) & 0xFF; + attr->bufptr[offset] = data >> 24; + } +} + +static uint32_t buf_get4_le(buf_impl* attr, size_t offset) +{ + if ((int32_t)offset + 3 < attr->len) { + return attr->bufptr[offset] | (attr->bufptr[offset+1] << 8) | + (attr->bufptr[offset+2] << 16) | (attr->bufptr[offset+3] << 24); } return 0; } -static uint32_t buf_get4_be(buf_impl* buf, int offset) +static uint32_t buf_get4_be(buf_impl* attr, size_t offset) { - if (offset < buf->len - 3) { - return buf->buf[offset+3] | (buf->buf[offset+2] << 8) | - (buf->buf[offset+1] << 16) | (buf->buf[offset] << 24); + if ((int32_t)offset + 3 < attr->len) { + return attr->bufptr[offset+3] | (attr->bufptr[offset+2] << 8) | + (attr->bufptr[offset+1] << 16) | (attr->bufptr[offset] << 24); } return 0; } @@ -157,7 +399,7 @@ static uint32_t buf_get4_be(buf_impl* buf, int offset) static bbool buf_equals(buf_impl* buf1, buf_impl* buf2) { if (buf1 == buf2) { return btrue; } - if (!buf1 || !buf2) { return bfalse; } // at least one buf is not empty + if (!buf1 || !buf2) { return bfalse; } // at least one attr is not empty // we know that both buf1 and buf2 are non-null if (buf1->len != buf2->len) { return bfalse; } size_t len = buf1->len; @@ -175,119 +417,240 @@ static uint8_t asc2byte(char chr) else if (chr >= 'a' && chr <= 'f') { rVal = chr + 10 - 'a'; } return rVal; } + // does not check if there is enough room before hand, truncated if buffer too small -static void buf_add_hex(buf_impl* buf, const char *hex, size_t len) +static void buf_add_hex(buf_impl* attr, const char *hex, size_t len) { uint8_t val; for (; len > 1; len -= 2) { val = asc2byte(*hex++) << 4; val |= asc2byte(*hex++); - buf_add1(buf, val); + buf_add1(attr, val); } } /******************************************************************** ** Wrapping into lib ********************************************************************/ -// typedef int (*bntvfunc)(bvm*); /* native function pointer */ -int free_bytes_buf(bvm* vm) + +/* load instance attribute into a single structure, and store 'previous' values in order to later update only the changed ones */ +/* stack item 1 must contain the instance */ +buf_impl m_read_attributes(bvm *vm, int idx) { - int argc = be_top(vm); - if (argc > 0) { - buf_impl * buf = (buf_impl*) be_tocomptr(vm, 1); - if (buf != NULL) { - be_os_free(buf); + buf_impl attr; + be_getmember(vm, idx, ".p"); + attr.bufptr = attr.prev_bufptr = be_tocomptr(vm, -1); + be_pop(vm, 1); + + be_getmember(vm, idx, ".len"); + attr.len = attr.prev_len = be_toint(vm, -1); + be_pop(vm, 1); + + be_getmember(vm, idx, ".size"); + int32_t signed_size = be_toint(vm, -1); + attr.fixed = bfalse; + attr.mapped = bfalse; + if (signed_size < 0) { + if (signed_size == BYTES_SIZE_MAPPED) { + attr.mapped = btrue; } + signed_size = attr.len; + attr.fixed = btrue; } - be_return_nil(vm); + attr.size = attr.prev_size = signed_size; + be_pop(vm, 1); + return attr; } -buf_impl * bytes_alloc(int32_t size) +/* Write back attributes to the bytes instance, only if values changed after loading */ +/* stack item 1 must contain the instance */ +void m_write_attributes(bvm *vm, int rel_idx, const buf_impl * attr) { - if (size < 4) { size = 4; } + int idx = be_absindex(vm, rel_idx); + if (attr->bufptr != attr->prev_bufptr) { + be_pushcomptr(vm, attr->bufptr); + be_setmember(vm, idx, ".p"); + be_pop(vm, 1); + } + + if (attr->len != attr->prev_len) { + be_pushint(vm, attr->len); + be_setmember(vm, idx, ".len"); + be_pop(vm, 1); + } + + int32_t new_size = attr->size; + if (attr->mapped) { + new_size = BYTES_SIZE_MAPPED; + } else if (attr->fixed) { + new_size = BYTES_SIZE_FIXED; + } + if (new_size != attr->prev_size) { + be_pushint(vm, new_size); + be_setmember(vm, idx, ".size"); + be_pop(vm, 1); + } +} + +// buf_impl * bytes_realloc(bvm *vm, buf_impl *oldbuf, int32_t size) +void bytes_realloc(bvm *vm, buf_impl * attr, int32_t size) +{ + if (!attr->fixed && size < 4) { size = 4; } if (size > BYTES_MAX_SIZE) { size = BYTES_MAX_SIZE; } - buf_impl * next = (buf_impl*) be_os_malloc(size + BYTES_OVERHEAD); - next->size = size; - next->len = 0; - return next; + size_t oldsize = attr->bufptr ? attr->size : 0; + attr->bufptr = (uint8_t*) be_realloc(vm, attr->bufptr, oldsize, size); /* malloc */ + attr->size = size; + if (!attr->bufptr) { + attr->len = 0; /* allocate a new buffer */ + } } /* allocate a new `bytes` object with pre-allocated size */ static void bytes_new_object(bvm *vm, size_t size) { - be_getglobal(vm, "bytes"); /* eventually change with be_getbuiltin */ - be_call(vm, 0); /* stack has only instance */ - be_getmember(vm, -1, "init"); - be_pushvalue(vm, -2); - be_pushint(vm, size); /* stack: instance, init func, instance, size */ - be_call(vm, 2); /* stack: instance, ret, instance, size */ - be_pop(vm, 3); /* remove ret, instance, size */ + be_getbuiltin(vm, "bytes"); + be_pushint(vm, size); + be_call(vm, 1); + be_pop(vm, 1); } +/* + * constructor for bytes() + * Arg0 is always self + * + * Option 1: main use + * Arg1: string - a string representing the bytes in HEX + * + * Option 2: + * Arg1: string - a string representing the bytes in HEX + * Arg2: int - pre-reserved buffer size. If negative, size is fixed and cannot be later changed + * + * Option 3: used by subclasses like ctypes + * Arg1: int - pre-reserved buffer size. If negative, size is fixed and cannot be later changed + * + * Option 4: mapped buffer + * Arg1: comptr - buffer address of the mapped buffer + * Arg2: int - buffer size. Always fixed (negative or positive) + * + * */ static int m_init(bvm *vm) { int argc = be_top(vm); - int size = BYTES_DEFAULT_SIZE; + buf_impl attr = { 0, 0, NULL, 0, -1, NULL, bfalse, bfalse }; /* initialize prev_values to invalid to force a write at the end */ + /* size cannot be 0, len cannot be negative */ const char * hex_in = NULL; + + int32_t size_arg = 0; if (argc > 1 && be_isint(vm, 2)) { - int new_size = be_toint(vm, 2) + BYTES_HEADROOM; - if (new_size > size) { - size = new_size; - } - } else if (argc > 1 && be_isstring(vm, 2)) { - hex_in = be_tostring(vm, 2); - if (hex_in) { - size = strlen(hex_in) / 2 + BYTES_HEADROOM; // allocate headroom + size_arg = be_toint(vm, 2); /* raw size arg, can be positive or negative */ + } else if (argc > 2 && be_isint(vm, 3)) { + size_arg = be_toint(vm, 3); /* raw size arg, can be positive or negative */ + } + + if (argc > 1 && be_iscomptr(vm, 2)) { + if (size_arg) { + attr.len = (size_arg < 0) ? -size_arg : size_arg; + attr.bufptr = be_tocomptr(vm, 2); + attr.fixed = btrue; + attr.mapped = btrue; + m_write_attributes(vm, 1, &attr); /* write attributes back to instance */ + be_return_nil(vm); + } else { + be_raise(vm, "value_error", "size is required"); } } - buf_impl * buf = bytes_alloc(size); - if (!buf) { + if (size_arg == 0) { size_arg = BYTES_DEFAULT_SIZE; } /* if not specified, use default size */ + + /* compute actual size to be reserved */ + if (size_arg >= 0) { + size_arg += BYTES_HEADROOM; /* add automatic headroom to slightly overallocate */ + if (size_arg > attr.size) { + attr.size = size_arg; + } + } else { + attr.size = -size_arg; /* set the size to a fixed negative value */ + attr.fixed = btrue; + } + size_arg = attr.size; + + /* if arg1 is string, we convert hex */ + if (argc > 1 && be_isstring(vm, 2)) { + hex_in = be_tostring(vm, 2); + if (hex_in) { + size_arg = strlen(hex_in) / 2; /* allocate headroom */ + } + } + + /* check if fixed size that we have the right size */ + if (attr.fixed && size_arg > attr.size) { + be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); + } + + /* allocate */ + bytes_realloc(vm, &attr, attr.size); /* allocate new buffer */ + if (!attr.bufptr) { be_throw(vm, BE_MALLOC_FAIL); } if (hex_in) { - buf_add_hex(buf, hex_in, strlen(hex_in)); - } - be_newcomobj(vm, buf, &free_bytes_buf); - be_setmember(vm, 1, ".p"); + buf_add_hex(&attr, hex_in, strlen(hex_in)); + } + + /* if fixed size, set len to size */ + if (attr.fixed) { + buf_set_len(&attr, attr.size); + } + + m_write_attributes(vm, 1, &attr); /* write attributes back to instance */ + be_return_nil(vm); +} + +/* deallocate buffer */ +static int m_deinit(bvm *vm) +{ + buf_impl attr = m_read_attributes(vm, 1); + if (attr.bufptr != NULL && !attr.mapped) { + be_realloc(vm, attr.bufptr, attr.size, 0); + } + attr.size = 0; + attr.len = 0; + attr.bufptr = NULL; + m_write_attributes(vm, 1, &attr); be_return_nil(vm); } /* grow or shrink to the exact value */ /* stack item 1 must contain the instance */ -static buf_impl * _bytes_resize(bvm *vm, buf_impl * buf, size_t new_size) { - buf_impl * new_buf = bytes_alloc(new_size); - if (!new_buf) { +void _bytes_resize(bvm *vm, buf_impl * attr, size_t new_size) { + bytes_realloc(vm, attr, new_size); + if (!attr->bufptr) { be_throw(vm, BE_MALLOC_FAIL); } - memmove(buf_get_buf(new_buf), buf_get_buf(buf), buf->len); - new_buf->len = buf->len; - /* replace the .p attribute */ - be_newcomobj(vm, new_buf, &free_bytes_buf); - be_setmember(vm, 1, ".p"); - be_pop(vm, 1); /* remove comobj from stack */ - /* the old buffer will be garbage collected later */ - return new_buf; } /* grow if needed but don't shrink */ /* if grow, then add some headroom */ /* stack item 1 must contain the instance */ -static buf_impl * bytes_resize(bvm *vm, buf_impl * buf, size_t new_size) { - if (buf->size >= new_size) { return buf; } /* no resize needed */ - return _bytes_resize(vm, buf, new_size + BYTES_HEADROOM); +void bytes_resize(bvm *vm, buf_impl * attr, size_t new_size) { + if (attr->mapped) { return; } /* if mapped, don't bother with allocation */ + /* when resized to smaller, we introduce a new heurstic */ + /* If the buffer is 64 bytes or smaller, don't shrink */ + /* Shrink buffer only if target size is smaller than half the original size */ + if (attr->size >= (int32_t)new_size) { /* enough room, consider if need to shrink */ + if (attr->size <= 64) { return; } /* don't shrink if below 64 bytes */ + if (attr->size < (int32_t)new_size * 2) { return; } + } + _bytes_resize(vm, attr, new_size); } -static buf_impl * bytes_check_data(bvm *vm, size_t add_size) { - be_getmember(vm, 1, ".p"); - buf_impl * buf = be_tocomptr(vm, -1); - be_pop(vm, 1); /* remove member from stack */ +buf_impl bytes_check_data(bvm *vm, size_t add_size) { + buf_impl attr = m_read_attributes(vm, 1); /* check if the `size` is big enough */ - if (buf->len + add_size > buf->size) { + if (attr.len + (int32_t)add_size > attr.size) { /* it does not fit so we need to realocate the buffer */ - buf = bytes_resize(vm, buf, buf->len + add_size); + bytes_resize(vm, &attr, attr.len + add_size); } - return buf; + return attr; } static size_t tohex(char * out, size_t outsz, const uint8_t * in, size_t insz) { @@ -305,13 +668,26 @@ static size_t tohex(char * out, size_t outsz, const uint8_t * in, size_t insz) { static int m_tostring(bvm *vm) { - buf_impl * buf = bytes_check_data(vm, 0); - size_t len = buf->len; - size_t hex_len = len * 2 + 5 + 2 + 2 + 1; /* reserve size for `bytes("")\0` - 9 chars */ + int argc = be_top(vm); + int32_t max_len = 32; /* limit to 32 bytes by default */ + int truncated = 0; + if (argc > 1 && be_isint(vm, 2)) { + max_len = be_toint(vm, 2); /* you can specify the len as second argument, or 0 for unlimited */ + } + buf_impl attr = m_read_attributes(vm, 1); + int32_t len = attr.len; + if (max_len > 0 && len > max_len) { + len = max_len; /* limit output size */ + truncated = 1; + } + size_t hex_len = len * 2 + 5 + 2 + 2 + 1 + truncated * 3; /* reserve size for `bytes("")\0` - 9 chars */ char * hex_out = be_pushbuffer(vm, hex_len); size_t l = be_strlcpy(hex_out, "bytes('", hex_len); - l += tohex(&hex_out[l], hex_len - l, buf_get_buf(buf), buf->len); + l += tohex(&hex_out[l], hex_len - l, attr.bufptr, len); + if (truncated) { + l += be_strlcpy(&hex_out[l], "...", hex_len - l); + } l += be_strlcpy(&hex_out[l], "')", hex_len - l); be_pushnstring(vm, hex_out, l); /* make escape string from buffer */ @@ -324,8 +700,8 @@ static int m_tostring(bvm *vm) */ static int m_asstring(bvm *vm) { - buf_impl * buf = bytes_check_data(vm, 0); - be_pushnstring(vm, (const char*) buf_get_buf(buf), buf->len); + buf_impl attr = bytes_check_data(vm, 0); + be_pushnstring(vm, (const char*) attr.bufptr, attr.len); be_return(vm); } @@ -334,13 +710,17 @@ static int m_fromstring(bvm *vm) int argc = be_top(vm); if (argc >= 2 && be_isstring(vm, 2)) { const char *s = be_tostring(vm, 2); - size_t len = strlen(s); - buf_impl * buf = bytes_check_data(vm, 0); - buf = bytes_resize(vm, buf, len); /* resize if needed */ - if (len > buf->size) { len = buf->size; } /* avoid overflow */ - memmove(buf_get_buf(buf), s, len); - buf->len = len; + int32_t len = be_strlen(vm, 2); /* calling be_strlen to support null chars in string */ + buf_impl attr = bytes_check_data(vm, 0); + if (attr.fixed && attr.len != len) { + be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); + } + bytes_resize(vm, &attr, len); /* resize if needed */ + if (len > attr.size) { len = attr.size; } /* avoid overflow */ + memmove(attr.bufptr, s, len); + attr.len = len; be_pop(vm, 1); /* remove arg to leave instance */ + m_write_attributes(vm, 1, &attr); /* update attributes */ be_return(vm); } be_raise(vm, "type_error", "operand must be a string"); @@ -358,7 +738,8 @@ static int m_fromstring(bvm *vm) static int m_add(bvm *vm) { int argc = be_top(vm); - buf_impl * buf = bytes_check_data(vm, 4); /* we reserve 4 bytes anyways */ + buf_impl attr = bytes_check_data(vm, 4); /* we reserve 4 bytes anyways */ + if (attr.fixed) { be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); } if (argc >= 2 && be_isint(vm, 2)) { int32_t v = be_toint(vm, 2); int vsize = 1; @@ -366,16 +747,17 @@ static int m_add(bvm *vm) vsize = be_toint(vm, 3); } switch (vsize) { - case 0: break; + case 0: break; case -1: /* fallback below */ - case 1: buf_add1(buf, v); break; - case 2: buf_add2_le(buf, v); break; - case 4: buf_add4_le(buf, v); break; - case -2: buf_add2_be(buf, v); break; - case -4: buf_add4_be(buf, v); break; + case 1: buf_add1(&attr, v); break; + case 2: buf_add2_le(&attr, v); break; + case 4: buf_add4_le(&attr, v); break; + case -2: buf_add2_be(&attr, v); break; + case -4: buf_add4_be(&attr, v); break; default: be_raise(vm, "type_error", "size must be -4, -2, -1, 0, 1, 2 or 4."); } be_pop(vm, argc - 1); + m_write_attributes(vm, 1, &attr); /* update attributes */ be_return(vm); } be_return_nil(vm); @@ -383,16 +765,16 @@ static int m_add(bvm *vm) /* * Get an int made of 1, 2 or 4 bytes, in little or big endian - * `get(index:int[, size:int = 1]) -> instance` + * `get(index:int[, size:int = 1]) -> int` * * size: may be 1, 2, 4 (little endian), or -1, -2, -4 (big endian) - * obvisouly -1 is idntical to 1 + * obvisouly -1 is identical to 1 * 0 returns nil */ -static int m_get(bvm *vm) +static int m_get(bvm *vm, bbool sign) { int argc = be_top(vm); - buf_impl * buf = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ + buf_impl attr = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ if (argc >=2 && be_isint(vm, 2)) { int32_t idx = be_toint(vm, 2); int vsize = 1; @@ -403,11 +785,17 @@ static int m_get(bvm *vm) switch (vsize) { case 0: break; case -1: /* fallback below */ - case 1: ret = buf_get1(buf, idx); break; - case 2: ret = buf_get2_le(buf, idx); break; - case 4: ret = buf_get4_le(buf, idx); break; - case -2: ret = buf_get2_be(buf, idx); break; - case -4: ret = buf_get4_be(buf, idx); break; + case 1: ret = buf_get1(&attr, idx); + if (sign) { ret = (int8_t)(uint8_t) ret; } + break; + case 2: ret = buf_get2_le(&attr, idx); + if (sign) { ret = (int16_t)(uint16_t) ret; } + break; + case 4: ret = buf_get4_le(&attr, idx); break; + case -2: ret = buf_get2_be(&attr, idx); + if (sign) { ret = (int16_t)(uint16_t) ret; } + break; + case -4: ret = buf_get4_be(&attr, idx); break; default: be_raise(vm, "type_error", "size must be -4, -2, -1, 0, 1, 2 or 4."); } be_pop(vm, argc - 1); @@ -421,15 +809,64 @@ static int m_get(bvm *vm) be_return_nil(vm); } +/* signed int */ +static int m_geti(bvm *vm) +{ + return m_get(vm, 1); +} + +/* unsigned int */ +static int m_getu(bvm *vm) +{ + return m_get(vm, 0); +} + +/* + * Set an int made of 1, 2 or 4 bytes, in little or big endian + * `set(index:int, value:int[, size:int = 1]) -> nil` + * + * size: may be 1, 2, 4 (little endian), or -1, -2, -4 (big endian) + * obvisouly -1 is identical to 1 + * 0 returns nil + */ +static int m_set(bvm *vm) +{ + int argc = be_top(vm); + buf_impl attr = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ + if (argc >=3 && be_isint(vm, 2) && be_isint(vm, 3)) { + int32_t idx = be_toint(vm, 2); + int32_t value = be_toint(vm, 3); + int vsize = 1; + if (argc >= 4 && be_isint(vm, 4)) { + vsize = be_toint(vm, 4); + } + switch (vsize) { + case 0: break; + case -1: /* fallback below */ + case 1: buf_set1(&attr, idx, value); break; + case 2: buf_set2_le(&attr, idx, value); break; + case 4: buf_set4_le(&attr, idx, value); break; + case -2: buf_set2_be(&attr, idx, value); break; + case -4: buf_set4_be(&attr, idx, value); break; + default: be_raise(vm, "type_error", "size must be -4, -2, -1, 0, 1, 2 or 4."); + } + be_pop(vm, argc - 1); + m_write_attributes(vm, 1, &attr); /* update attributes */ + be_return_nil(vm); + } + be_return_nil(vm); +} + static int m_setitem(bvm *vm) { int argc = be_top(vm); - buf_impl * buf = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ + buf_impl attr = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ if (argc >=3 && be_isint(vm, 2) && be_isint(vm, 3)) { int index = be_toint(vm, 2); int val = be_toint(vm, 3); - if (index >= 0 && index < buf->len) { - buf_set1(buf, index, val); + if (index >= 0 && index < attr.len) { + buf_set1(&attr, index, val); + m_write_attributes(vm, 1, &attr); /* update attributes */ be_return_nil(vm); } } @@ -440,11 +877,11 @@ static int m_setitem(bvm *vm) static int m_item(bvm *vm) { int argc = be_top(vm); - buf_impl * buf = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ - if (argc >=2 && be_isint(vm, 2)) { + buf_impl attr = bytes_check_data(vm, 0); /* we reserve 4 bytes anyways */ + if (argc >=2 && be_isint(vm, 2)) { /* single byte */ int index = be_toint(vm,2); - if (index >= 0 && index < buf->len) { - be_pushint(vm, buf_get1(buf, index)); + if (index >= 0 && index < attr.len) { + be_pushint(vm, buf_get1(&attr, index)); be_return(vm); } } @@ -452,7 +889,7 @@ static int m_item(bvm *vm) const char *cname = be_classname(vm, 2); if (!strcmp(cname, "range")) { bint lower, upper; - bint size = buf->len; + bint size = attr.len; /* get index range */ be_getmember(vm, 2, "__lower__"); lower = be_toint(vm, -1); @@ -465,12 +902,12 @@ static int m_item(bvm *vm) lower = lower < 0 ? 0 : lower; /* construction result list instance */ bytes_new_object(vm, upper > lower ? upper-lower : 0); - be_getmember(vm, -1, ".p"); - buf_impl * buf2 = be_tocomptr(vm, -1); - be_pop(vm, 1); /* remove .p and leave bytes instance */ + buf_impl attr2 = m_read_attributes(vm, -1); + for (; lower <= upper; ++lower) { - buf_add1(buf2, buf->buf[lower]); + buf_add1(&attr2, attr.bufptr[lower]); } + m_write_attributes(vm, -1, &attr2); /* update instance */ be_return(vm); } } @@ -480,17 +917,15 @@ static int m_item(bvm *vm) static int m_size(bvm *vm) { - buf_impl * buf = bytes_check_data(vm, 0); - be_pushint(vm, buf->len); + buf_impl attr = m_read_attributes(vm, 1); + be_pushint(vm, attr.len); be_return(vm); } static int m_resize(bvm *vm) { int argc = be_top(vm); - be_getmember(vm, 1, ".p"); - buf_impl * buf = be_tocomptr(vm, -1); - be_pop(vm, 1); + buf_impl attr = m_read_attributes(vm, 1); if (argc <= 1 || !be_isint(vm, 2)) { be_raise(vm, "type_error", "size must be of type 'int'"); @@ -499,42 +934,42 @@ static int m_resize(bvm *vm) if (new_len < 0) { new_len = 0; } + if (attr.fixed && attr.len != new_len) { + be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); + } - buf = bytes_resize(vm, buf, new_len); - buf_set_len(buf, new_len); + bytes_resize(vm, &attr, new_len); + buf_set_len(&attr, new_len); be_pop(vm, 1); + m_write_attributes(vm, 1, &attr); /* update instance */ be_return(vm); } static int m_clear(bvm *vm) { - buf_impl * buf = bytes_check_data(vm, 0); - buf->len = 0; + buf_impl attr = m_read_attributes(vm, 1); + if (attr.fixed) { be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); } + attr.len = 0; + m_write_attributes(vm, 1, &attr); /* update instance */ be_return_nil(vm); } static int m_merge(bvm *vm) { int argc = be_top(vm); - buf_impl * buf1 = bytes_check_data(vm, 0); /* no resize yet */ - if (argc >= 2 && be_isinstance(vm, 2)) { - be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ - if (be_isderived(vm, 2)) { - be_getmember(vm, 2, ".p"); - buf_impl * buf2 = be_tocomptr(vm, -1); - be_pop(vm, 4); /* remove class, member, and 2 operands */ + buf_impl attr = m_read_attributes(vm, 1); /* no resize yet */ + if (argc >= 2 && be_isbytes(vm, 2)) { + buf_impl attr2 = m_read_attributes(vm, 2); - /* allocate new object */ - bytes_new_object(vm, buf1->len + buf2->len); - be_getmember(vm, -1, ".p"); - /* .p is on top of stack, then instance */ - buf_impl * buf3 = be_tocomptr(vm, -1); - be_pop(vm, 1); - buf_add_buf(buf3, buf1); - buf_add_buf(buf3, buf2); + /* allocate new object */ + bytes_new_object(vm, attr.len + attr2.len); + buf_impl attr3 = m_read_attributes(vm, -1); - be_return(vm); /* return self */ - } + buf_add_buf(&attr3, &attr); + buf_add_buf(&attr3, &attr2); + + m_write_attributes(vm, -1, &attr3); /* update instance */ + be_return(vm); /* return self */ } be_raise(vm, "type_error", "operand must be bytes"); be_return_nil(vm); /* return self */ @@ -542,12 +977,11 @@ static int m_merge(bvm *vm) static int m_copy(bvm *vm) { - buf_impl * buf1 = bytes_check_data(vm, 0); /* no resize */ - bytes_new_object(vm, buf1->len); - be_getmember(vm, -1, ".p"); - buf_impl * buf2 = be_tocomptr(vm, -1); - be_pop(vm, 1); - buf_add_buf(buf2, buf1); + buf_impl attr = m_read_attributes(vm, 1); + bytes_new_object(vm, attr.len); + buf_impl attr2 = m_read_attributes(vm, -1); + buf_add_buf(&attr2, &attr); + m_write_attributes(vm, -1, &attr2); /* update instance */ be_return(vm); /* return self */ } @@ -555,23 +989,22 @@ static int m_copy(bvm *vm) static int m_connect(bvm *vm) { int argc = be_top(vm); - buf_impl * buf1 = bytes_check_data(vm, 0); /* don't resize yet */ - if (argc >= 2 && (be_isinstance(vm, 2) || be_isint(vm, 2))) { + buf_impl attr = m_read_attributes(vm, 1); + if (attr.fixed) { be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); } + if (argc >= 2 && (be_isbytes(vm, 2) || be_isint(vm, 2))) { if (be_isint(vm, 2)) { - buf1 = bytes_resize(vm, buf1, buf1->len + 1); /* resize */ - buf_add1(buf1, be_toint(vm, 2)); - be_pop(vm, 1); /* remove operand */ + bytes_resize(vm, &attr, attr.len + 1); /* resize */ + buf_add1(&attr, be_toint(vm, 2)); + m_write_attributes(vm, 1, &attr); /* update instance */ + be_pushvalue(vm, 1); be_return(vm); /* return self */ } else { - be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ - if (be_isderived(vm, 2)) { - be_getmember(vm, 2, ".p"); - buf_impl * buf2 = be_tocomptr(vm, -1); - buf1 = bytes_resize(vm, buf1, buf1->len + buf2->len); /* resize buf1 for total size */ - buf_add_buf(buf1, buf2); - be_pop(vm, 3); /* remove class, member, and last operand */ - be_return(vm); /* return self */ - } + buf_impl attr2 = m_read_attributes(vm, 2); + bytes_resize(vm, &attr, attr.len + attr2.len); /* resize buf1 for total size */ + buf_add_buf(&attr, &attr2); + m_write_attributes(vm, 1, &attr); /* update instance */ + be_pushvalue(vm, 1); + be_return(vm); /* return self */ } } be_raise(vm, "type_error", "operand must be bytes or int"); @@ -580,19 +1013,18 @@ static int m_connect(bvm *vm) static int bytes_equal(bvm *vm, bbool iseq) { - be_getmember(vm, 1, ".p"); - buf_impl * buf1 = be_tocomptr(vm, -1); - be_pop(vm, 1); - - be_getmember(vm, 2, ".p"); - buf_impl * buf2 = be_tocomptr(vm, -1); - be_pop(vm, 1); - bbool ret; - if (buf_equals(buf1, buf2)) { - ret = iseq; - } else { + buf_impl attr1 = m_read_attributes(vm, 1); + if (!be_isbytes(vm, 2)) { ret = !iseq; + } else { + buf_impl attr2 = m_read_attributes(vm, 2); + + if (buf_equals(&attr1, &attr2)) { + ret = iseq; + } else { + ret = !iseq; + } } be_pushbool(vm, ret); be_return(vm); @@ -608,51 +1040,342 @@ static int m_nequal(bvm *vm) return bytes_equal(vm, bfalse); } +/* + * Converts bytes() to a base64 string + * + * Note: there are no line breaks inserted + * + * `b.tob64() -> string` + */ +static int m_tob64(bvm *vm) +{ + buf_impl attr = m_read_attributes(vm, 1); + int32_t len = attr.len; + int32_t b64_len = encode_base64_length(len) + 1; /* size of base64 encoded string for this binary length, add NULL terminator */ + + char * b64_out = be_pushbuffer(vm, b64_len); + size_t converted = encode_base64(attr.bufptr, len, (unsigned char*)b64_out); + + be_pushnstring(vm, b64_out, converted); /* make string from buffer */ + be_remove(vm, -2); /* remove buffer */ + be_return(vm); +} + +/* + * Converts base63 to bytes() + * + * `bytes().fromb64() -> bytes()` + */ +static int m_fromb64(bvm *vm) +{ + int argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + const char *s = be_tostring(vm, 2); + int32_t bin_len = decode_base64_length((unsigned char*)s); /* do a first pass to calculate the buffer size */ + + buf_impl attr = m_read_attributes(vm, 1); + if (attr.fixed && attr.len != bin_len) { + be_raise(vm, BYTES_RESIZE_ERROR, BYTES_RESIZE_MESSAGE); + } + bytes_resize(vm, &attr, bin_len); /* resize if needed */ + if (bin_len > attr.size) { /* avoid overflow */ + be_raise(vm, "memory_error", "cannot allocate buffer"); + } + + int32_t bin_len_final = decode_base64((unsigned char*)s, attr.bufptr); /* decode */ + attr.len = bin_len_final; + be_pop(vm, 1); /* remove arg to leave instance */ + m_write_attributes(vm, 1, &attr); /* update instance */ + be_return(vm); + } + be_raise(vm, "type_error", "operand must be a string"); + be_return_nil(vm); +} + + +/* + * Advanced API + */ + +/* + * Retrieve the memory address of the raw buffer + * to be used in C functions. + * + * Note: the address is guaranteed not to move unless you + * resize the buffer + * + * `_buffer() -> comptr` + */ +static int m_buffer(bvm *vm) +{ + buf_impl attr = m_read_attributes(vm, 1); + be_pushcomptr(vm, attr.bufptr); + be_return(vm); +} + /* * External API */ BERRY_API void be_pushbytes(bvm *vm, const void * bytes, size_t len) { bytes_new_object(vm, len); - be_getmember(vm, -1, ".p"); - buf_impl * buf = be_tocomptr(vm, -1); - be_pop(vm, 1); /* remove .p1 and leave instance */ - if (len > buf->size) { len = buf->size; } /* double check if the buffer allocated was smaller */ - memmove((void*)buf_get_buf(buf), bytes, len); - buf->len = len; + buf_impl attr = m_read_attributes(vm, -1); + if ((int32_t)len > attr.size) { len = attr.size; } /* double check if the buffer allocated was smaller */ + memmove((void*)attr.bufptr, bytes, len); + attr.len = len; + m_write_attributes(vm, -1, &attr); /* update instance */ /* bytes instance is on top of stack */ } BERRY_API const void *be_tobytes(bvm *vm, int rel_index, size_t *len) { int index = be_absindex(vm, rel_index); - if (be_isinstance(vm, index)) { - be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ - if (be_isderived(vm, index)) { - be_getmember(vm, index, ".p"); - buf_impl * buf = be_tocomptr(vm, -1); - be_pop(vm, 2); /* class and .p */ - if (len) { *len = buf->len; } - return (void*) buf_get_buf(buf); - } else { - be_pop(vm, 1); /* remove class */ - } + if (be_isbytes(vm, index)) { + buf_impl attr = m_read_attributes(vm, index); + if (len) { *len = attr.len; } + return (void*) attr.bufptr; } if (len) { *len = 0; } return NULL; } +BERRY_API bbool be_isbytes(bvm *vm, int rel_index) +{ + bbool ret = bfalse; + int index = be_absindex(vm, rel_index); + if (be_isinstance(vm, index)) { + be_getbuiltin(vm, "bytes"); + if (be_isderived(vm, index)) { + ret = btrue; + } + be_pop(vm, 1); + } + return ret; +} + +/* Helper code to compile bytecode + + +class Bytes : bytes +#------------------------------------------------------------- +#- 'getbits' function +#- +#- Reads a bit-field in a `bytes()` object +#- +#- Input: +#- offset_bits (int): bit number to start reading from (0 = LSB) +#- len_bits (int): how many bits to read +#- Output: +#- valuer (int) +#-------------------------------------------------------------# + def getbits(offset_bits, len_bits) + if len_bits <= 0 || len_bits > 32 raise "value_error", "length in bits must be between 0 and 32" end + var ret = 0 + + var offset_bytes = offset_bits >> 3 + offset_bits = offset_bits % 8 + + var bit_shift = 0 #- bit number to write to -# + + while (len_bits > 0) + var block_bits = 8 - offset_bits # how many bits to read in the current block (block = byte) -# + if block_bits > len_bits block_bits = len_bits end + + var mask = ( (1<> offset_bits) << bit_shift) + + #- move the input window -# + bit_shift += block_bits + len_bits -= block_bits + offset_bits = 0 #- start at full next byte -# + offset_bytes += 1 + end + + return ret + end + + #------------------------------------------------------------- + #- 'setbits' function + #- + #- Writes a bit-field in a `bytes()` object + #- + #- Input: + #- offset_bits (int): bit number to start writing to (0 = LSB) + #- len_bits (int): how many bits to write + #- val (int): value to set + #-------------------------------------------------------------# + def setbits(offset_bits, len_bits, val) + if len_bits < 0 || len_bits > 32 raise "value_error", "length in bits must be between 0 and 32" end + + val = int(val) #- convert bool or others to int -# + var offset_bytes = offset_bits >> 3 + offset_bits = offset_bits % 8 + + while (len_bits > 0) + var block_bits = 8 - offset_bits #- how many bits to write in the current block (block = byte) -# + if block_bits > len_bits block_bits = len_bits end + + var mask_val = (1<>= block_bits + len_bits -= block_bits + offset_bits = 0 #- start at full next byte -# + offset_bytes += 1 + end + return self + end +end + +*/ + +/******************************************************************** +** Solidified function: getbits +********************************************************************/ +be_local_closure(getbits, /* name */ + be_nested_proto( + 9, /* nstack */ + 3, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_nested_string("value_error", 773297791, 11), + /* K2 */ be_nested_string("length in bits must be between 0 and 32", -1710458168, 39), + /* K3 */ be_const_int(3), + /* K4 */ be_const_int(1), + }), + (be_nested_const_str("getbits", -1200798317, 7)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[32]) { /* code */ + 0x180C0500, // 0000 LE R3 R2 K0 + 0x740E0002, // 0001 JMPT R3 #0005 + 0x540E001F, // 0002 LDINT R3 32 + 0x240C0403, // 0003 GT R3 R2 R3 + 0x780E0000, // 0004 JMPF R3 #0006 + 0xB0060302, // 0005 RAISE 1 K1 K2 + 0x580C0000, // 0006 LDCONST R3 K0 + 0x3C100303, // 0007 SHR R4 R1 K3 + 0x54160007, // 0008 LDINT R5 8 + 0x10040205, // 0009 MOD R1 R1 R5 + 0x58140000, // 000A LDCONST R5 K0 + 0x24180500, // 000B GT R6 R2 K0 + 0x781A0011, // 000C JMPF R6 #001F + 0x541A0007, // 000D LDINT R6 8 + 0x04180C01, // 000E SUB R6 R6 R1 + 0x241C0C02, // 000F GT R7 R6 R2 + 0x781E0000, // 0010 JMPF R7 #0012 + 0x5C180400, // 0011 MOVE R6 R2 + 0x381E0806, // 0012 SHL R7 K4 R6 + 0x041C0F04, // 0013 SUB R7 R7 K4 + 0x381C0E01, // 0014 SHL R7 R7 R1 + 0x94200004, // 0015 GETIDX R8 R0 R4 + 0x2C201007, // 0016 AND R8 R8 R7 + 0x3C201001, // 0017 SHR R8 R8 R1 + 0x38201005, // 0018 SHL R8 R8 R5 + 0x300C0608, // 0019 OR R3 R3 R8 + 0x00140A06, // 001A ADD R5 R5 R6 + 0x04080406, // 001B SUB R2 R2 R6 + 0x58040000, // 001C LDCONST R1 K0 + 0x00100904, // 001D ADD R4 R4 K4 + 0x7001FFEB, // 001E JMP #000B + 0x80040600, // 001F RET 1 R3 + }) + ) +); +/*******************************************************************/ + +/******************************************************************** +** Solidified function: setbits +********************************************************************/ +be_local_closure(setbits, /* name */ + be_nested_proto( + 10, /* nstack */ + 4, /* argc */ + 0, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_const_int(0), + /* K1 */ be_nested_string("value_error", 773297791, 11), + /* K2 */ be_nested_string("length in bits must be between 0 and 32", -1710458168, 39), + /* K3 */ be_const_int(3), + /* K4 */ be_const_int(1), + }), + (be_nested_const_str("setbits", -1532559129, 7)), + (be_nested_const_str("input", -103256197, 5)), + ( &(const binstruction[37]) { /* code */ + 0x14100500, // 0000 LT R4 R2 K0 + 0x74120002, // 0001 JMPT R4 #0005 + 0x5412001F, // 0002 LDINT R4 32 + 0x24100404, // 0003 GT R4 R2 R4 + 0x78120000, // 0004 JMPF R4 #0006 + 0xB0060302, // 0005 RAISE 1 K1 K2 + 0x60100009, // 0006 GETGBL R4 G9 + 0x5C140600, // 0007 MOVE R5 R3 + 0x7C100200, // 0008 CALL R4 1 + 0x5C0C0800, // 0009 MOVE R3 R4 + 0x3C100303, // 000A SHR R4 R1 K3 + 0x54160007, // 000B LDINT R5 8 + 0x10040205, // 000C MOD R1 R1 R5 + 0x24140500, // 000D GT R5 R2 K0 + 0x78160014, // 000E JMPF R5 #0024 + 0x54160007, // 000F LDINT R5 8 + 0x04140A01, // 0010 SUB R5 R5 R1 + 0x24180A02, // 0011 GT R6 R5 R2 + 0x781A0000, // 0012 JMPF R6 #0014 + 0x5C140400, // 0013 MOVE R5 R2 + 0x381A0805, // 0014 SHL R6 K4 R5 + 0x04180D04, // 0015 SUB R6 R6 K4 + 0x541E00FE, // 0016 LDINT R7 255 + 0x38200C01, // 0017 SHL R8 R6 R1 + 0x041C0E08, // 0018 SUB R7 R7 R8 + 0x94200004, // 0019 GETIDX R8 R0 R4 + 0x2C201007, // 001A AND R8 R8 R7 + 0x2C240606, // 001B AND R9 R3 R6 + 0x38241201, // 001C SHL R9 R9 R1 + 0x30201009, // 001D OR R8 R8 R9 + 0x98000808, // 001E SETIDX R0 R4 R8 + 0x3C0C0605, // 001F SHR R3 R3 R5 + 0x04080405, // 0020 SUB R2 R2 R5 + 0x58040000, // 0021 LDCONST R1 K0 + 0x00100904, // 0022 ADD R4 R4 K4 + 0x7001FFE8, // 0023 JMP #000D + 0x80040000, // 0024 RET 1 R0 + }) + ) +); +/*******************************************************************/ + #if !BE_USE_PRECOMPILED_OBJECT void be_load_byteslib(bvm *vm) { static const bnfuncinfo members[] = { { ".p", NULL }, + { ".size", NULL }, + { ".len", NULL }, + { "_buffer", m_buffer }, { "init", m_init }, + { "deinit", m_deinit }, { "tostring", m_tostring }, { "asstring", m_asstring }, { "fromstring", m_fromstring }, + { "tob64", m_tob64 }, + { "fromb64", m_fromb64 }, { "add", m_add }, - { "get", m_get }, + { "get", m_getu }, + { "geti", m_geti }, + { "set", m_set }, + { "seti", m_set }, // setters for signed and unsigned are identical { "item", m_item }, { "setitem", m_setitem }, { "size", m_size }, @@ -663,6 +1386,11 @@ void be_load_byteslib(bvm *vm) { "..", m_connect }, { "==", m_equal }, { "!=", m_nequal }, + + { NULL, (bntvfunc) BE_CLOSURE }, /* mark section for berry closures */ + { "getbits", (bntvfunc) &getbits_closure }, + { "setbits", (bntvfunc) &setbits_closure }, + { NULL, NULL } }; be_regclass(vm, "bytes", members); @@ -671,12 +1399,21 @@ void be_load_byteslib(bvm *vm) /* @const_object_info_begin class be_class_bytes (scope: global, name: bytes) { .p, var + .size, var + .len, var + _buffer, func(m_buffer) init, func(m_init) + deinit, func(m_deinit) tostring, func(m_tostring) asstring, func(m_asstring) fromstring, func(m_fromstring) + tob64, func(m_tob64) + fromb64, func(m_fromb64) add, func(m_add) - get, func(m_get) + get, func(m_getu) + geti, func(m_geti) + set, func(m_set) + seti, func(m_set) item, func(m_item) setitem, func(m_setitem) size, func(m_size) @@ -687,6 +1424,9 @@ class be_class_bytes (scope: global, name: bytes) { .., func(m_connect) ==, func(m_equal) !=, func(m_nequal) + + getbits, closure(getbits_closure) + setbits, closure(setbits_closure) } @const_object_info_end */ #include "../generate/be_fixed_be_class_bytes.h" diff --git a/lib/libesp32/Berry/src/be_class.c b/lib/libesp32/Berry/src/be_class.c index ffb196372..960612d1b 100644 --- a/lib/libesp32/Berry/src/be_class.c +++ b/lib/libesp32/Berry/src/be_class.c @@ -14,6 +14,7 @@ #include "be_vm.h" #include "be_func.h" #include "be_var.h" +#include #define check_members(vm, c) \ if (!(c)->members) { \ @@ -53,18 +54,25 @@ int be_class_attribute(bvm *vm, bclass *c, bstring *attr) } } } - return BE_NIL; + return BE_NONE; } -void be_member_bind(bvm *vm, bclass *c, bstring *name) +void be_member_bind(bvm *vm, bclass *c, bstring *name, bbool var) { bvalue *attr; set_fixed(name); check_members(vm, c); attr = be_map_insertstr(vm, c->members, name, NULL); restore_fixed(name); - attr->v.i = c->nvar++; - attr->type = MT_VARIABLE; + if (var) { + /* this is an instance variable so we set it as MT_VARIABLE */ + attr->v.i = c->nvar++; + attr->type = MT_VARIABLE; + } else { + /* this is a static class constant, leave it as BE_NIL */ + attr->v.i = 0; + attr->type = BE_NIL; + } } void be_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p) @@ -135,6 +143,23 @@ static binstance* instance_member(bvm *vm, return NULL; } +static bclass* class_member(bvm *vm, + bclass *obj, bstring *name, bvalue *dst) +{ + for (; obj; obj = obj->super) { + bmap *members = obj->members; + if (members) { + bvalue *v = be_map_findstr(vm, members, name); + if (v) { + *dst = *v; + return obj; + } + } + } + var_setnil(dst); + return NULL; +} + void be_class_upvalue_init(bvm *vm, bclass *c) { bmap *mbr = c->members; @@ -154,6 +179,7 @@ void be_class_upvalue_init(bvm *vm, bclass *c) } } +/* (internal) Instanciate an instance for a single class and initialize variables to nil */ static binstance* newobjself(bvm *vm, bclass *c) { size_t size = sizeof(binstance) + sizeof(bvalue) * (c->nvar - 1); @@ -161,15 +187,17 @@ static binstance* newobjself(bvm *vm, bclass *c) binstance *obj = cast_instance(gco); be_assert(obj != NULL); if (obj) { /* initialize members */ - bvalue *v = obj->members, *end = v + c->nvar; - while (v < end) { var_setnil(v); ++v; } - obj->_class = c; - obj->super = NULL; - obj->sub = NULL; + bvalue *v = obj->members, *end = v + c->nvar; /* instance variables is a simple array of pointers at obj->members of size c->nvar */ + while (v < end) { var_setnil(v); ++v; } /* Initialize all instance variables to `nil` */ + obj->_class = c; /* set its class object */ + obj->super = NULL; /* no super class instance for now */ + obj->sub = NULL; /* no subclass instance for now */ } return obj; } +/* (internal) Instanciate the whole chain of instances when there is a class hierarchy */ +/* All variables set to nil, constructors are not called here */ static binstance* newobject(bvm *vm, bclass *c) { binstance *obj, *prev; @@ -177,23 +205,26 @@ static binstance* newobject(bvm *vm, bclass *c) obj = prev = newobjself(vm, c); var_setinstance(vm->top, obj); be_incrtop(vm); /* protect new objects from GC */ - for (c = c->super; c; c = c->super) { + for (c = c->super; c; c = c->super) { /* initialize one instance object per class and per superclass */ prev->super = newobjself(vm, c); - prev->super->sub = prev; + prev->super->sub = prev; /* link the super/sub classes instances */ prev = prev->super; } be_stackpop(vm, 1); return obj; } +/* Instanciate new instance from stack with argc parameters */ +/* Pushes the constructor on the stack to be executed if a construtor is found */ +/* Returns true if a constructor is found */ bbool be_class_newobj(bvm *vm, bclass *c, bvalue *reg, int argc, int mode) { bvalue init; size_t pos = reg - vm->reg; - binstance *obj = newobject(vm, c); - reg = vm->reg + pos - mode; /* the stack may have changed */ + binstance *obj = newobject(vm, c); /* create empty object hierarchy from class hierarchy */ + reg = vm->reg + pos - mode; /* the stack may have changed, mode=1 when class is instanciated from module #104 */ var_setinstance(reg, obj); - var_setinstance(reg + mode, obj); + var_setinstance(reg + mode, obj); /* copy to reg and reg+1 if mode==1 */ /* find constructor */ obj = instance_member(vm, obj, str_literal(vm, "init"), &init); if (obj && var_type(&init) != MT_VARIABLE) { @@ -207,11 +238,18 @@ bbool be_class_newobj(bvm *vm, bclass *c, bvalue *reg, int argc, int mode) return bfalse; } -int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst) +/* Default empty constructor */ +static int default_init_native_method(bvm *vm) { + be_return_nil(vm); +} + +/* Find instance member by name and copy value to `dst` */ +/* Do not look into virtual members */ +int be_instance_member_simple(bvm *vm, binstance *instance, bstring *name, bvalue *dst) { int type; be_assert(name != NULL); - obj = instance_member(vm, obj, name, dst); + binstance * obj = instance_member(vm, instance, name, dst); type = var_type(dst); if (obj && type == MT_VARIABLE) { *dst = obj->members[dst->v.i]; @@ -219,6 +257,63 @@ int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst) return type; } +/* Find instance member by name and copy value to `dst` */ +/* Input: none of `obj`, `name` and `dst` may not be NULL */ +/* Returns the type of the member or BE_NONE if member not found */ +/* TODO need to support synthetic members */ +int be_instance_member(bvm *vm, binstance *instance, bstring *name, bvalue *dst) +{ + int type; + be_assert(name != NULL); + binstance * obj = instance_member(vm, instance, name, dst); + type = var_type(dst); + if (obj && type == MT_VARIABLE) { + *dst = obj->members[dst->v.i]; + } + if (obj) { + return type; + } else { /* if no method found, try virtual */ + /* if 'init' does not exist, create a virtual empty constructor */ + if (strcmp(str(name), "init") == 0) { + var_setntvfunc(dst, default_init_native_method); + return var_type(dst); + } else { + /* get method 'member' */ + obj = instance_member(vm, instance, str_literal(vm, "member"), vm->top); + if (obj && basetype(var_type(vm->top)) == BE_FUNCTION) { + bvalue *top = vm->top; + var_setinstance(&top[1], instance); + var_setstr(&top[2], name); + vm->top += 3; /* prevent gc collection results */ + be_dofunc(vm, top, 2); /* call method 'member' */ + vm->top -= 3; + *dst = *vm->top; /* copy result to R(A) */ + if (obj && var_type(dst) == MT_VARIABLE) { + *dst = obj->members[dst->v.i]; + } + type = var_type(dst); + if (type != BE_NIL) { + return type; + } + } + } + } + return BE_NONE; +} + +int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst) +{ + int type; + be_assert(name != NULL); + obj = class_member(vm, obj, name, dst); + type = var_type(dst); + if (obj) { + return type; + } else { + return BE_NONE; + } +} + bbool be_instance_setmember(bvm *vm, binstance *o, bstring *name, bvalue *src) { bvalue v; @@ -241,8 +336,20 @@ bbool be_instance_setmember(bvm *vm, binstance *o, bstring *name, bvalue *src) vm->top += 4; /* prevent collection results */ be_dofunc(vm, top, 3); /* call method 'member' */ vm->top -= 4; - return var_tobool(top); + return btrue; } } return bfalse; } + +bbool be_class_setmember(bvm *vm, bclass *o, bstring *name, bvalue *src) +{ + bvalue v; + be_assert(name != NULL); + bclass * obj = class_member(vm, o, name, &v); + if (obj && !var_istype(&v, MT_VARIABLE)) { + be_map_insertstr(vm, obj->members, name, src); + return btrue; + } + return bfalse; +} diff --git a/lib/libesp32/Berry/src/be_class.h b/lib/libesp32/Berry/src/be_class.h index 3b9458013..6a114f53b 100644 --- a/lib/libesp32/Berry/src/be_class.h +++ b/lib/libesp32/Berry/src/be_class.h @@ -10,7 +10,7 @@ #include "be_object.h" -#define MT_VARIABLE BE_INT +#define MT_VARIABLE BE_INDEX #define MT_METHOD BE_CLOSURE #define MT_PRIMMETHOD BE_NTVFUNC @@ -52,14 +52,17 @@ struct binstance { bclass* be_newclass(bvm *vm, bstring *name, bclass *super); void be_class_compress(bvm *vm, bclass *c); int be_class_attribute(bvm *vm, bclass *c, bstring *attr); -void be_member_bind(bvm *vm, bclass *c, bstring *name); +void be_member_bind(bvm *vm, bclass *c, bstring *name, bbool var); void be_method_bind(bvm *vm, bclass *c, bstring *name, bproto *p); void be_prim_method_bind(bvm *vm, bclass *c, bstring *name, bntvfunc f); void be_closure_method_bind(bvm *vm, bclass *c, bstring *name, bclosure *cl); int be_class_closure_count(bclass *c); void be_class_upvalue_init(bvm *vm, bclass *c); bbool be_class_newobj(bvm *vm, bclass *c, bvalue *argv, int argc, int mode); +int be_instance_member_simple(bvm *vm, binstance *obj, bstring *name, bvalue *dst); int be_instance_member(bvm *vm, binstance *obj, bstring *name, bvalue *dst); +int be_class_member(bvm *vm, bclass *obj, bstring *name, bvalue *dst); bbool be_instance_setmember(bvm *vm, binstance *obj, bstring *name, bvalue *src); +bbool be_class_setmember(bvm *vm, bclass *obj, bstring *name, bvalue *src); #endif diff --git a/lib/libesp32/Berry/src/be_code.c b/lib/libesp32/Berry/src/be_code.c index 8d4a62b05..b0feff4e1 100644 --- a/lib/libesp32/Berry/src/be_code.c +++ b/lib/libesp32/Berry/src/be_code.c @@ -14,7 +14,6 @@ #include "be_var.h" #include "be_exec.h" #include "be_vm.h" -#include #define NOT_MASK (1 << 0) #define NOT_EXPR (1 << 1) @@ -24,8 +23,8 @@ #define min(a, b) ((a) < (b) ? (a) : (b)) #define notexpr(e) isset((e)->not, NOT_EXPR) #define notmask(e) isset((e)->not, NOT_MASK) -#define exp2anyreg(f, e) exp2reg(f, e, (f)->freereg) -#define var2anyreg(f, e) var2reg(f, e, (f)->freereg) +#define exp2anyreg(f, e) exp2reg(f, e, -1) /* -1 means allocate a new register if needed */ +#define var2anyreg(f, e) var2reg(f, e, -1) /* -1 means allocate a new register if needed */ #define hasjump(e) ((e)->t != (e)->f || notexpr(e)) #define code_bool(f, r, b, j) codeABC(f, OP_LDBOOL, r, b, j) #define code_call(f, a, b) codeABC(f, OP_CALL, a, b, 0) @@ -57,6 +56,7 @@ static void codelineinfo(bfuncinfo *finfo) #define codelineinfo(finfo) #endif +/* Add new instruction in the code vector */ static int codeinst(bfuncinfo *finfo, binstruction ins) { /* put new instruction in code array */ @@ -78,10 +78,13 @@ static int codeABx(bfuncinfo *finfo, bopcode op, int a, int bx) return codeinst(finfo, ISET_OP(op) | ISET_RA(a) | ISET_Bx(bx)); } +/* Move value from register b to register a */ +/* Check the previous instruction to compact both instruction as one if possible */ +/* If b is a constant, add LDCONST or add MOVE otherwise */ static void code_move(bfuncinfo *finfo, int a, int b) { - if (finfo->pc) { - binstruction *i = be_vector_end(&finfo->code); + if (finfo->pc) { /* If not the first instruction of the function */ + binstruction *i = be_vector_end(&finfo->code); /* get the last instruction */ bopcode op = IGET_OP(*i); if (op <= OP_LDNIL) { /* binop or unop */ /* remove redundant MOVE instruction */ @@ -99,6 +102,8 @@ static void code_move(bfuncinfo *finfo, int a, int b) } } +/* Free register at top (checks that it´s a register) */ +/* Warning: the register must be at top of stack */ static void free_expreg(bfuncinfo *finfo, bexpdesc *e) { /* release temporary register */ @@ -107,6 +112,8 @@ static void free_expreg(bfuncinfo *finfo, bexpdesc *e) } } +/* Privat. Allocate `count` new registers on the stack and uptade proto´s max nstack accordingly */ +/* Note: deallocate is simpler and handled by a macro */ static void allocstack(bfuncinfo *finfo, int count) { int nstack = finfo->freereg + count; @@ -118,6 +125,7 @@ static void allocstack(bfuncinfo *finfo, int count) } } +/* Allocate `count` registers at top of stack, update stack accordingly */ int be_code_allocregs(bfuncinfo *finfo, int count) { int base = finfo->freereg; @@ -228,6 +236,8 @@ void be_code_patchjump(bfuncinfo *finfo, int jmp) patchlistaux(finfo, jmp, finfo->pc, finfo->pc); } +/* Allocate new constant for value k */ +/* If k is NULL then push `nil` value */ static int newconst(bfuncinfo *finfo, bvalue *k) { int idx = be_vector_count(&finfo->kvec); @@ -240,6 +250,8 @@ static int newconst(bfuncinfo *finfo, bvalue *k) return idx; } +/* Find constant by value and return constant number, or -1 if constant does not exist */ +/* The search is linear and limited to BE_CONST_SEARCH_SIZE elements for performance reasons */ static int findconst(bfuncinfo *finfo, bexpdesc *e) { int i, count = be_vector_count(&finfo->kvec); @@ -248,7 +260,7 @@ static int findconst(bfuncinfo *finfo, bexpdesc *e) * so only search the constant table for the * previous value. **/ - count = count < 50 ? count : 50; + count = count < BE_CONST_SEARCH_SIZE ? count : BE_CONST_SEARCH_SIZE; for (i = 0; i < count; ++i) { bvalue *k = be_vector_at(&finfo->kvec, i); switch (e->type) { @@ -274,10 +286,11 @@ static int findconst(bfuncinfo *finfo, bexpdesc *e) return -1; } +/* convert expdesc to constant and return kreg index (either constant kindex or register number) */ static int exp2const(bfuncinfo *finfo, bexpdesc *e) { - int idx = findconst(finfo, e); - if (idx == -1) { + int idx = findconst(finfo, e); /* does the constant already exist? */ + if (idx == -1) { /* if not add it */ bvalue k; switch (e->type) { case ETINT: @@ -292,16 +305,16 @@ static int exp2const(bfuncinfo *finfo, bexpdesc *e) k.type = BE_STRING; k.v.s = e->v.s; break; - default: + default: /* all other values are filled later */ break; } - idx = newconst(finfo, &k); + idx = newconst(finfo, &k); /* create new constant */ } - if (idx < 256) { - e->type = ETCONST; + if (idx < 256) { /* if constant number fits in KB or KC */ + e->type = ETCONST; /* new type is constant by index */ e->v.idx = setK(idx); } else { /* index value is too large */ - e->type = ETREG; + e->type = ETREG; /* does not fit in compact mode, allocate an explicit register and emit LDCONTS */ e->v.idx = be_code_allocregs(finfo, 1); codeABx(finfo, OP_LDCONST, e->v.idx, idx); } @@ -322,9 +335,38 @@ static void free_suffix(bfuncinfo *finfo, bexpdesc *e) } } +static int suffix_destreg(bfuncinfo *finfo, bexpdesc *e1, int dst) +{ + int cand_dst = dst; /* candidate for new dst */ + int nlocal = be_list_count(finfo->local); + int reg1 = (e1->v.ss.tt == ETREG) ? e1->v.ss.obj : -1; /* check if obj is ETREG or -1 */ + int reg2 = (!isK(e1->v.ss.idx) && e1->v.ss.idx >= nlocal) ? e1->v.ss.idx : -1; /* check if idx is ETREG or -1 */ + + if (reg1 >= 0 && reg2 >= 0) { + /* both are ETREG, we keep the lowest and discard the other */ + if (reg1 != reg2) { + cand_dst = min(reg1, reg2); + be_code_freeregs(finfo, 1); /* and free the other one */ + } else { + cand_dst = reg1; /* both ETREG are equal, we return its value */ + } + } else if (reg1 >= 0) { + cand_dst = reg1; + } else if (reg2 >= 0) { + cand_dst = reg2; + } else { + // dst unchanged + } + + if (dst >= finfo->freereg) { + dst = cand_dst; /* if dst was allocating a new register, use the more precise candidate */ + } + return dst; +} + static int code_suffix(bfuncinfo *finfo, bopcode op, bexpdesc *e, int dst) { - free_suffix(finfo, e); /* free temporary registers */ + dst = suffix_destreg(finfo, e, dst); if (dst > finfo->freereg) { dst = finfo->freereg; } @@ -340,6 +382,9 @@ static void code_closure(bfuncinfo *finfo, int idx, int dst) codeABx(finfo, OP_CLOSURE, dst, idx); /* load closure to register */ } +/* Given an integer, check if we should create a constant */ +/* True for values 0..3 and if there is room for kindex */ +/* This optimization makes code more compact for commonly used ints */ static bbool constint(bfuncinfo *finfo, bint i) { /* cache common numbers */ @@ -350,8 +395,14 @@ static bbool constint(bfuncinfo *finfo, bint i) return bfalse; } +/* Compute variable from an expdesc */ +/* Return constant index, or existing register or fallback to dst */ +/* At exit, If dst is `freereg`, the register is allocated */ static int var2reg(bfuncinfo *finfo, bexpdesc *e, int dst) { + if (dst < 0) { /* if unspecified, allocate a new register if needed */ + dst = finfo->freereg; + } be_assert(e != NULL); switch (e->type) { case ETINT: @@ -376,6 +427,9 @@ static int var2reg(bfuncinfo *finfo, bexpdesc *e, int dst) case ETGLOBAL: codeABx(finfo, OP_GETGBL, dst, e->v.idx); break; + case ETNGLOBAL: + codeABC(finfo, OP_GETNGBL, dst, e->v.ss.idx, 0); + break; case ETUPVAL: codeABx(finfo, OP_GETUPV, dst, e->v.idx); break; @@ -401,7 +455,7 @@ static int var2reg(bfuncinfo *finfo, bexpdesc *e, int dst) static int exp2reg(bfuncinfo *finfo, bexpdesc *e, int dst) { int reg = var2reg(finfo, e, dst); - if (hasjump(e)) { + if (hasjump(e)) { /* if conditional expression */ int pcf = NO_JUMP; /* position of an eventual LOAD false */ int pct = NO_JUMP; /* position of an eventual LOAD true */ int jpt = appendjump(finfo, jumpboolop(e, 1), e); @@ -418,31 +472,47 @@ static int exp2reg(bfuncinfo *finfo, bexpdesc *e, int dst) return reg; } -static int codedestreg(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2) +/* Select dest registers from both expressions */ +/* If one of them is already a register, keep it */ +/* If e1 or e2 are registers, we keep the lowest and free the highest (that must be at top) */ +/* If none is a register, allocate a new one */ +/* Returns the destination register, guaranteed to be ETREG */ +static int codedestreg(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2, int dst) { - int dst, con1 = e1->type == ETREG, con2 = e2->type == ETREG; + int cand_dst = dst; + int con1 = e1->type == ETREG, con2 = e2->type == ETREG; if (con1 && con2) { - dst = min(e1->v.idx, e2->v.idx); + cand_dst = min(e1->v.idx, e2->v.idx); be_code_freeregs(finfo, 1); } else if (con1) { - dst = e1->v.idx; + cand_dst = e1->v.idx; } else if (con2) { - dst = e2->v.idx; + cand_dst = e2->v.idx; } else { - dst = be_code_allocregs(finfo, 1); + if (dst >= finfo->freereg) { + cand_dst = be_code_allocregs(finfo, 1); + return cand_dst; + } + } + if (dst >= finfo->freereg) { + return cand_dst; + } else { + return dst; } - return dst; } -static void binaryexp(bfuncinfo *finfo, bopcode op, bexpdesc *e1, bexpdesc *e2) +/* compute binary expression and update e1 as result */ +/* On exit, e1 is guaranteed to be ETREG, which may have been allocated */ +static void binaryexp(bfuncinfo *finfo, bopcode op, bexpdesc *e1, bexpdesc *e2, int dst) { - int src1 = exp2anyreg(finfo, e1); + if (dst < 0) { dst = finfo->freereg; } + int src1 = exp2reg(finfo, e1, dst); /* potentially force the target for src1 reg */ int src2 = exp2anyreg(finfo, e2); - int dst = codedestreg(finfo, e1, e2); + dst = codedestreg(finfo, e1, e2, dst); codeABC(finfo, op, dst, src1, src2); e1->type = ETREG; - e1->v.idx = dst; + e1->v.idx = dst; /* update register as output */ } void be_code_prebinop(bfuncinfo *finfo, int op, bexpdesc *e) @@ -460,7 +530,8 @@ void be_code_prebinop(bfuncinfo *finfo, int op, bexpdesc *e) } } -void be_code_binop(bfuncinfo *finfo, int op, bexpdesc *e1, bexpdesc *e2) +/* Apply binary operator `op` to e1 and e2, result in e1 */ +void be_code_binop(bfuncinfo *finfo, int op, bexpdesc *e1, bexpdesc *e2, int dst) { switch (op) { case OptAnd: @@ -478,12 +549,14 @@ void be_code_binop(bfuncinfo *finfo, int op, bexpdesc *e1, bexpdesc *e2) case OptNE: case OptGT: case OptGE: case OptConnect: case OptBitAnd: case OptBitOr: case OptBitXor: case OptShiftL: case OptShiftR: - binaryexp(finfo, (bopcode)(op - OptAdd), e1, e2); + binaryexp(finfo, (bopcode)(op - OptAdd), e1, e2, dst); break; default: break; } } +/* Apply unary operator and return register number */ +/* If input is register, change in place or allocate new register */ static void unaryexp(bfuncinfo *finfo, bopcode op, bexpdesc *e) { int src = exp2anyreg(finfo, e); @@ -493,6 +566,9 @@ static void unaryexp(bfuncinfo *finfo, bopcode op, bexpdesc *e) e->v.idx = dst; } +/* Apply not to conditional expression */ +/* If literal compute the value */ +/* Or invert t/f subexpressions */ static void code_not(bexpdesc *e) { switch (e->type) { @@ -512,6 +588,7 @@ static void code_not(bexpdesc *e) e->type = ETBOOL; } +/* Negative value of literal or emit NEG opcode */ static int code_neg(bfuncinfo *finfo, bexpdesc *e) { switch (e->type) { @@ -525,6 +602,7 @@ static int code_neg(bfuncinfo *finfo, bexpdesc *e) return 0; } +/* Bit flip of literal or emit FLIP opcode */ static int code_flip(bfuncinfo *finfo, bexpdesc *e) { switch (e->type) { @@ -537,6 +615,7 @@ static int code_flip(bfuncinfo *finfo, bexpdesc *e) return 0; } +/* Apply unary operator: not, neg or bitflip */ int be_code_unop(bfuncinfo *finfo, int op, bexpdesc *e) { switch (op) { @@ -552,6 +631,15 @@ int be_code_unop(bfuncinfo *finfo, int op, bexpdesc *e) return 0; } +static void setbgblvar(bfuncinfo *finfo, bopcode op, bexpdesc *e1, int src) +{ + if (isK(src)) { /* move const to register */ + code_move(finfo, finfo->freereg, src); + src = finfo->freereg; + } + codeABC(finfo, op, src, e1->v.idx, 0); +} + static void setsupvar(bfuncinfo *finfo, bopcode op, bexpdesc *e1, int src) { if (isK(src)) { /* move const to register */ @@ -572,23 +660,30 @@ static void setsfxvar(bfuncinfo *finfo, bopcode op, bexpdesc *e1, int src) codeABC(finfo, op, obj, e1->v.ss.idx, src); } +/* Assign expr e2 to e1 */ +/* e1 must be in a register and have a valid idx */ +/* return 1 if assignment was possible, 0 if type is not compatible */ int be_code_setvar(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2) { int src = exp2reg(finfo, e2, - e1->type == ETLOCAL ? e1->v.idx : finfo->freereg); + e1->type == ETLOCAL ? e1->v.idx : -1); /* Convert e2 to kreg */ + /* If e1 is a local variable, use the register */ if (e1->type != ETLOCAL || e1->v.idx != src) { - free_expreg(finfo, e2); /* free source (only ETREG) */ + free_expreg(finfo, e2); /* free source (checks only ETREG) */ /* TODO e2 is at top */ } switch (e1->type) { case ETLOCAL: /* It can't be ETREG. */ if (e1->v.idx != src) { - code_move(finfo, e1->v.idx, src); + code_move(finfo, e1->v.idx, src); /* do explicit move only if needed */ } break; - case ETGLOBAL: /* store to grobal R(A) -> G(Bx) */ + case ETGLOBAL: /* store to grobal R(A) -> G(Bx) by global index */ setsupvar(finfo, OP_SETGBL, e1, src); break; + case ETNGLOBAL: /* store to global R(A) -> G(Bx) by name */ + setbgblvar(finfo, OP_SETNGBL, e1, src); + break; case ETUPVAL: setsupvar(finfo, OP_SETUPV, e1, src); break; @@ -604,6 +699,9 @@ int be_code_setvar(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2) return 0; } +/* Get the expdesc as a register */ +/* if already in a register, use the existing register */ +/* if local or const, allocate a new register and copy value */ int be_code_nextreg(bfuncinfo *finfo, bexpdesc *e) { int dst = finfo->freereg; @@ -627,6 +725,9 @@ int be_code_getmethod(bfuncinfo *finfo, bexpdesc *e) return dst; } +/* Generate a CALL instruction at base register with argc consecutive values */ +/* i.e. arg1 is base+1... */ +/* Important: argc registers are freed upon call, which are supposed to be registers above base */ void be_code_call(bfuncinfo *finfo, int base, int argc) { codeABC(finfo, OP_CALL, base, argc, 0); @@ -645,10 +746,12 @@ int be_code_proto(bfuncinfo *finfo, bproto *proto) void be_code_closure(bfuncinfo *finfo, bexpdesc *e, int idx) { - int reg = e->type == ETGLOBAL ? finfo->freereg: e->v.idx; + int reg = (e->type == ETGLOBAL || e->type == ETNGLOBAL) ? finfo->freereg: e->v.idx; code_closure(finfo, idx, reg); - if (e->type == ETGLOBAL) { /* store to grobal R(A) -> G(Bx) */ + if (e->type == ETGLOBAL) { /* store to global R(A) -> G(Bx) */ codeABx(finfo, OP_SETGBL, reg, e->v.idx); + } else if (e->type == ETNGLOBAL) { /* store R(A) -> GLOBAL[RK(B)] */ + codeABC(finfo, OP_SETNGBL, reg, e->v.idx, 0); } } @@ -703,6 +806,8 @@ void be_code_ret(bfuncinfo *finfo, bexpdesc *e) } } +/* Package a suffix object from `c` with key `k` */ +/* Both expdesc are materialized in kregs */ static void package_suffix(bfuncinfo *finfo, bexpdesc *c, bexpdesc *k) { int key = exp2anyreg(finfo, k); @@ -711,12 +816,19 @@ static void package_suffix(bfuncinfo *finfo, bexpdesc *c, bexpdesc *k) c->v.ss.idx = key; } +int be_code_nglobal(bfuncinfo *finfo, bexpdesc *k) +{ + return exp2anyreg(finfo, k); +} + +/* Package a MEMBER suffix object from `c` with key `k` */ void be_code_member(bfuncinfo *finfo, bexpdesc *c, bexpdesc *k) { package_suffix(finfo, c, k); c->type = ETMEMBER; } +/* Package a INDEX suffix object from `c` with key `k` */ void be_code_index(bfuncinfo *finfo, bexpdesc *c, bexpdesc *k) { package_suffix(finfo, c, k); @@ -727,15 +839,18 @@ void be_code_class(bfuncinfo *finfo, bexpdesc *dst, bclass *c) { int src; bvalue var; - var_setclass(&var, c); - src = newconst(finfo, &var); - if (dst->type == ETLOCAL) { + var_setclass(&var, c); /* new var of CLASS type */ + src = newconst(finfo, &var); /* allocate a new constant and return kreg */ + if (dst->type == ETLOCAL) { /* if target is a local variable, just assign */ codeABx(finfo, OP_LDCONST, dst->v.idx, src); - } else { + } else if (dst->type == ETGLOBAL) { /* otherwise set as global with same name as class name */ codeABx(finfo, OP_LDCONST, finfo->freereg, src); codeABx(finfo, OP_SETGBL, finfo->freereg, dst->v.idx); + } else if (dst->type == ETNGLOBAL) { + codeABx(finfo, OP_LDCONST, finfo->freereg, src); + codeABC(finfo, OP_SETNGBL, finfo->freereg, dst->v.idx, 0); } - codeABx(finfo, OP_CLASS, 0, src); + codeABx(finfo, OP_CLASS, 0, src); /* emit CLASS opcode to register class */ } void be_code_setsuper(bfuncinfo *finfo, bexpdesc *c, bexpdesc *s) @@ -747,6 +862,12 @@ void be_code_setsuper(bfuncinfo *finfo, bexpdesc *c, bexpdesc *s) free_expreg(finfo, s); } +/* Emit IMPORT opcode for import module */ +/* `m` is module name, is copied to register if not already */ +/* `v` is destination where the imported module is stored */ +/* If destination is a local variable, it is the destination of the IMPORT opcode */ +/* otherwise the value is copied to a temporary register and stored to the destination */ +/* TODO is this optilization useful, isn´t it done anyways by be_code_move optim? */ void be_code_import(bfuncinfo *finfo, bexpdesc *m, bexpdesc *v) { int dst, src = exp2anyreg(finfo, m); @@ -780,6 +901,10 @@ void be_code_catch(bfuncinfo *finfo, int base, int ecnt, int vcnt, int *jmp) } } +/* Emit RAISE opcode */ +/* e1 is the exception code */ +/* e2 is the exception description */ +/* both are materialized to a temp register (if not null) */ void be_code_raise(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2) { if (e1) { @@ -787,7 +912,7 @@ void be_code_raise(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2) int src2 = e2 ? exp2anyreg(finfo, e2) : 0; codeABC(finfo, OP_RAISE, e2 != NULL, src1, src2); } else { - codeABC(finfo, OP_RAISE, 2, 0, 0); + codeABC(finfo, OP_RAISE, 2, 0, 0); /* rethrow the current exception with parameters already on top of stack */ } /* release the register occupied by the expression */ free_expreg(finfo, e1); diff --git a/lib/libesp32/Berry/src/be_code.h b/lib/libesp32/Berry/src/be_code.h index 8dfc21501..54d0c317c 100644 --- a/lib/libesp32/Berry/src/be_code.h +++ b/lib/libesp32/Berry/src/be_code.h @@ -14,7 +14,7 @@ int be_code_allocregs(bfuncinfo *finfo, int count); void be_code_prebinop(bfuncinfo *finfo, int op, bexpdesc *e); -void be_code_binop(bfuncinfo *finfo, int op, bexpdesc *e1, bexpdesc *e2); +void be_code_binop(bfuncinfo *finfo, int op, bexpdesc *e1, bexpdesc *e2, int dst); int be_code_unop(bfuncinfo *finfo, int op, bexpdesc *e); int be_code_setvar(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2); int be_code_nextreg(bfuncinfo *finfo, bexpdesc *e); @@ -31,6 +31,7 @@ void be_code_closure(bfuncinfo *finfo, bexpdesc *e, int idx); void be_code_close(bfuncinfo *finfo, int isret); void be_code_class(bfuncinfo *finfo, bexpdesc *dst, bclass *c); void be_code_ret(bfuncinfo *finfo, bexpdesc *e); +int be_code_nglobal(bfuncinfo *finfo, bexpdesc *k); void be_code_member(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2); void be_code_index(bfuncinfo *finfo, bexpdesc *c, bexpdesc *k); void be_code_setsuper(bfuncinfo *finfo, bexpdesc *c, bexpdesc *s); diff --git a/lib/libesp32/Berry/src/be_constobj.h b/lib/libesp32/Berry/src/be_constobj.h index d4fd9ad70..49f9c97b6 100644 --- a/lib/libesp32/Berry/src/be_constobj.h +++ b/lib/libesp32/Berry/src/be_constobj.h @@ -37,21 +37,46 @@ extern "C" { .type = BE_FUNCTION \ } +#define be_const_nil() { \ + .v.i = 0, \ + .type = BE_NIL \ +} + #define be_const_int(_val) { \ .v.i = (bint)(_val), \ .type = BE_INT \ } +#define be_const_var(_val) { \ + .v.i = (bint)(_val), \ + .type = BE_INDEX \ +} + #define be_const_real(_val) { \ .v.r = (breal)(_val), \ .type = BE_REAL \ } +#define be_const_real_hex(_val) { \ + .v.p = (void*)(_val), \ + .type = BE_REAL \ +} + +#define be_const_bool(_val) { \ + .v.b = (bbool)(_val), \ + .type = BE_BOOL \ +} + #define be_const_str(_str) { \ .v.s = (bstring*)(_str), \ .type = BE_STRING \ } +#define be_const_comptr(_val) { \ + .v.c = (const void*)(_val), \ + .type = BE_COMPTR \ +} + #define be_const_class(_class) { \ .v.c = &(_class), \ .type = BE_CLASS \ @@ -88,6 +113,15 @@ const bclass _name = { \ .name = (bstring*)&be_const_str_##_name_ \ } +#define be_define_const_empty_class(_name, _super, _name_) \ +const bclass _name = { \ + be_const_header(BE_CLASS), \ + .nvar = 0, \ + .super = (bclass*)_super, \ + .members = NULL, \ + .name = (bstring*)&be_const_str_##_name_ \ +} + #define be_define_const_module(_name, _name_) \ const bmodule _name = { \ be_const_header(BE_MODULE), \ @@ -113,6 +147,39 @@ const bntvmodule be_native_module(_module) = { \ .init = _init \ } +/* defines needed for solidified classes */ +#define be_local_class(_name, _nvar, _super, _map, _cname) \ + const bclass be_class_##_name = { \ + be_const_header(BE_CLASS), \ + .nvar = _nvar, \ + .super = (bclass*)_super, \ + .members = (bmap*)_map, \ + .name = _cname \ +} + +#define be_nested_map(_size, _slots) \ + & (const bmap) { \ + be_const_header(BE_MAP), \ + .slots = _slots, \ + .lastfree = NULL, \ + .size = _size, \ + .count = _size \ + } + +#define be_nested_string(_str, _hash, _len) \ + { \ + { .s=(be_nested_const_str(_str, _hash, _len )) \ + }, \ + BE_STRING \ + } + +#define be_nested_key(_str, _hash, _len, _next) \ + { \ + { .s=(be_nested_const_str(_str, _hash, _len )) }, \ + BE_STRING, \ + (uint32_t)(_next) & 0xFFFFFF \ + } + #else #define be_const_key(_str, _next) { \ @@ -126,16 +193,41 @@ const bntvmodule be_native_module(_module) = { \ BE_FUNCTION \ } +#define be_const_nil() { \ + bvaldata(0), \ + BE_NIL \ +} + #define be_const_int(_val) { \ bvaldata(bint(_val)), \ BE_INT \ } +#define be_const_bool(_val) { \ + bvaldata(bbool(_val)), \ + BE_BOOL \ +} + +#define be_const_var(_val) { \ + bvaldata(bint(_val)), \ + BE_INDEX \ +} + #define be_const_real(_val) { \ bvaldata(breal(_val)), \ BE_REAL \ } +#define be_const_real_hex(_val) { \ + bvaldata((void*)(_val)), \ + BE_REAL \ +} + +#define be_const_comptr(_val) { \ + bvaldata((void*)(_val)), \ + BE_COMPTR \ +} + #define be_const_str(_string) { \ bvaldata(bstring(_string)), \ BE_STRING \ @@ -166,7 +258,13 @@ const bmap _name( \ #define be_define_const_class(_name, _nvar, _super, _name_) \ const bclass _name( \ - _nvar, _super, (bmap*)&_name##_map, \ + _nvar, (bclass*)_super, (bmap*)&_name##_map, \ + (bstring*)&be_const_str_##_name_ \ +) + +#define be_define_const_empty_class(_name, _super, _name_) \ +const bclass _name( \ + 0, (bclass*)_super, NULL, \ (bstring*)&be_const_str_##_name_ \ ) diff --git a/lib/libesp32/Berry/src/be_debug.c b/lib/libesp32/Berry/src/be_debug.c index f46446199..4c6be85a8 100644 --- a/lib/libesp32/Berry/src/be_debug.c +++ b/lib/libesp32/Berry/src/be_debug.c @@ -60,13 +60,20 @@ void be_print_inst(binstruction ins, int pc) case OP_GETMBR: case OP_SETMBR: case OP_GETMET: case OP_GETIDX: case OP_SETIDX: case OP_AND: case OP_OR: case OP_XOR: case OP_SHL: case OP_SHR: - logbuf("%s\tR%d\tR%d\tR%d", opc2str(op), IGET_RA(ins), IGET_RKB(ins), IGET_RKC(ins)); + logbuf("%s\tR%d\t%c%d\t%c%d", opc2str(op), IGET_RA(ins), + isKB(ins) ? 'K' : 'R', IGET_RKB(ins) & KR_MASK, + isKC(ins) ? 'K' : 'R', IGET_RKC(ins) & KR_MASK); + break; + case OP_GETNGBL: case OP_SETNGBL: + logbuf("%s\tR%d\t%c%d", opc2str(op), IGET_RA(ins), + isKB(ins) ? 'K' : 'R', IGET_RKB(ins) & KR_MASK); break; case OP_GETGBL: case OP_SETGBL: logbuf("%s\tR%d\tG%d", opc2str(op), IGET_RA(ins), IGET_Bx(ins)); break; case OP_MOVE: case OP_SETSUPER: case OP_NEG: case OP_FLIP: case OP_IMPORT: - logbuf("%s\tR%d\tR%d", opc2str(op), IGET_RA(ins), IGET_RKB(ins)); + logbuf("%s\tR%d\t%c%d", opc2str(op), IGET_RA(ins), + isKB(ins) ? 'K' : 'R', IGET_RKB(ins) & KR_MASK); break; case OP_JMP: logbuf("%s\t\t#%.4X", opc2str(op), IGET_sBx(ins) + pc + 1); @@ -81,7 +88,12 @@ void be_print_inst(binstruction ins, int pc) logbuf("%s\tR%d\t%d\t%d", opc2str(op), IGET_RA(ins), IGET_RKB(ins), IGET_RKC(ins)); break; case OP_RET: - logbuf("%s\t%d\tR%d", opc2str(op), IGET_RA(ins), IGET_RKB(ins)); + if (IGET_RA(ins)) { + logbuf("%s\t%d\t%c%d", opc2str(op), IGET_RA(ins), + isKB(ins) ? 'K' : 'R', IGET_RKB(ins) & KR_MASK); + } else { + logbuf("%s\t%d", opc2str(op), IGET_RA(ins)); /* RET 0 does not take an additional parameter */ + } break; case OP_GETUPV: case OP_SETUPV: logbuf("%s\tR%d\tU%d", opc2str(op), IGET_RA(ins), IGET_Bx(ins)); @@ -99,10 +111,12 @@ void be_print_inst(binstruction ins, int pc) logbuf("%s\tK%d", opc2str(op), IGET_Bx(ins)); break; case OP_CLOSE: case OP_LDNIL: - logbuf("%s\t%d", opc2str(op), IGET_RA(ins)); + logbuf("%s\tR%d", opc2str(op), IGET_RA(ins)); break; case OP_RAISE: - logbuf("%s\t%d\tR%d\tR%d", opc2str(op), IGET_RA(ins), IGET_RKB(ins), IGET_RKC(ins)); + logbuf("%s\t%d\t%c%d\t%c%d", opc2str(op), IGET_RA(ins), + isKB(ins) ? 'K' : 'R', IGET_RKB(ins) & KR_MASK, + isKC(ins) ? 'K' : 'R', IGET_RKC(ins) & KR_MASK); break; case OP_EXBLK: if (IGET_RA(ins)) { diff --git a/lib/libesp32/Berry/src/be_decoder.h b/lib/libesp32/Berry/src/be_decoder.h index 354de5665..c6cfd7ade 100644 --- a/lib/libesp32/Berry/src/be_decoder.h +++ b/lib/libesp32/Berry/src/be_decoder.h @@ -46,6 +46,9 @@ #define IsBx_MAX cast_int(IBx_MASK >> 1) #define IsBx_MIN cast_int(-IsBx_MAX - 1) +/* mask for K/R values */ +#define KR_MASK ((1 << (IRKB_BITS-1)) - 1) + /* get field */ #define IGET_OP(i) cast(bopcode, INS_GETx(i, IOP_MASK, IOP_POS)) #define IGET_RA(i) INS_GETx(i, IRA_MASK, IRA_POS) diff --git a/lib/libesp32/Berry/src/be_exec.c b/lib/libesp32/Berry/src/be_exec.c index 4bca65877..2d71dab0f 100644 --- a/lib/libesp32/Berry/src/be_exec.c +++ b/lib/libesp32/Berry/src/be_exec.c @@ -82,6 +82,8 @@ void be_throw(bvm *vm, int errorcode) } } +/* Fatal error Exit */ +/* Raise a BE_EXIT exception if within a try/catch block, or exit VM */ BERRY_API void be_exit(bvm *vm, int status) { if (vm->errjmp) { @@ -99,6 +101,8 @@ void be_throw_message(bvm *vm, int errorcode, const char *msg) be_throw(vm, errorcode); } +/* Exec protected: exec function and capture any exception and contain it within call */ +/* Exceptions or fatal errors are not propagated */ int be_execprotected(bvm *vm, bpfunc f, void *data) { struct blongjmp jmp; @@ -292,6 +296,7 @@ static void m_pcall(bvm *vm, void *data) be_dofunc(vm, p->v, p->argc); } +/* Protected call: contain any exception of fatal error and restore context if something went wrong */ int be_protectedcall(bvm *vm, bvalue *v, int argc) { int res; @@ -308,7 +313,8 @@ int be_protectedcall(bvm *vm, bvalue *v, int argc) } #if BE_DEBUG && defined(be_assert) -/* increase top register */ +/* increase top register and return new top */ +/* Does not expand the stack if there is not enough room, but may corrupt memory */ bvalue* be_incrtop(bvm *vm) { bvalue *top = vm->top++; @@ -317,6 +323,7 @@ bvalue* be_incrtop(bvm *vm) } #endif +/* TODO what is the difference with be_stack_push? */ void be_stackpush(bvm *vm) { /* make sure there is enough stack space */ @@ -324,6 +331,7 @@ void be_stackpush(bvm *vm) be_incrtop(vm); } +/* check that the stack is able to store `count` items, and increase stack if needed */ void be_stack_require(bvm *vm, int count) { if (vm->top + count >= vm->stacktop) { @@ -331,6 +339,7 @@ void be_stack_require(bvm *vm, int count) } } +/* Scan the entire callstack and adjust all pointer by `offset` */ static void update_callstack(bvm *vm, intptr_t offset) { bcallframe *cf = be_stack_top(&vm->callstack); @@ -353,20 +362,25 @@ static void update_upvalues(bvm *vm, intptr_t offset) } } +/* Resize the stack to new `size` as number of elements */ +/* Then update all pointers in callstack and upvalues with the new stack address */ static void stack_resize(bvm *vm, size_t size) { intptr_t offset; - bvalue *old = vm->stack; - size_t os = (vm->stacktop - old) * sizeof(bvalue); - vm->stack = be_realloc(vm, old, os, sizeof(bvalue) * size); - vm->stacktop = vm->stack + size; - offset = ptr_offset(vm->stack, old); + bvalue *old = vm->stack; /* save original pointer of stack before resize */ + size_t os = (vm->stacktop - old) * sizeof(bvalue); /* size of current stack allocated in bytes */ + vm->stack = be_realloc(vm, old, os, sizeof(bvalue) * size); /* reallocate with the new size */ + vm->stacktop = vm->stack + size; /* compute new stacktop */ + offset = ptr_offset(vm->stack, old); /* compute the address difference between old and ne stack addresses */ /* update callframes */ update_callstack(vm, offset); /* update open upvalues */ update_upvalues(vm, offset); } +/* Stack resize internal API */ +/* Increases the stack by `n` elements, reallocate stack if needed and update all callstacks and upvals */ +/* Check if we are above the max allowed stack */ void be_stack_expansion(bvm *vm, int n) { size_t size = vm->stacktop - vm->stack; diff --git a/lib/libesp32/Berry/src/be_filelib.c b/lib/libesp32/Berry/src/be_filelib.c index 2a489555a..87691809b 100644 --- a/lib/libesp32/Berry/src/be_filelib.c +++ b/lib/libesp32/Berry/src/be_filelib.c @@ -16,10 +16,17 @@ static int i_write(bvm *vm) { be_getmember(vm, 1, ".p"); - if(be_iscomptr(vm, -1) && be_isstring(vm, 2)) { + if(be_iscomptr(vm, -1) && (be_isstring(vm, 2) || be_isbytes(vm, 2))) { void *fh = be_tocomptr(vm, -1); - const char *data = be_tostring(vm, 2); - be_fwrite(fh, data, be_strlen(vm, 2)); + size_t size = 0; + const char *data = NULL; + if (be_isstring(vm, 2)) { + data = be_tostring(vm, 2); + size = be_strlen(vm, 2); + } else { + data = be_tobytes(vm, 2, &size); + } + be_fwrite(fh, data, size); } be_return_nil(vm); } @@ -52,6 +59,43 @@ static int i_read(bvm *vm) be_return_nil(vm); } +static int i_readbytes(bvm *vm) +{ + int argc = be_top(vm); + be_getmember(vm, 1, ".p"); + if (be_iscomptr(vm, -1)) { + void *fh = be_tocomptr(vm, -1); + size_t size = readsize(vm, argc, fh); + if (size) { + /* avoid double allocation, using directly the internal buffer of bytes() */ + be_getbuiltin(vm, "bytes"); + be_pushint(vm, size); + be_call(vm, 1); /* call bytes() constructor with pre-sized buffer */ + be_pop(vm, 1); /* bytes() instance is at top */ + + be_getmember(vm, -1, "resize"); + be_pushvalue(vm, -2); + be_pushint(vm, size); + be_call(vm, 2); /* call b.resize(size) */ + be_pop(vm, 3); /* bytes() instance is at top */ + + char *buffer = (char*) be_tobytes(vm, -1, NULL); /* we get the address of the internam buffer of size 'size' */ + size = be_fread(fh, buffer, size); + + /* resize if something went wrong */ + be_getmember(vm, -1, "resize"); + be_pushvalue(vm, -2); + be_pushint(vm, size); + be_call(vm, 2); /* call b.resize(size) */ + be_pop(vm, 3); /* bytes() instance is at top */ + } else { + be_pushbytes(vm, NULL, 0); + } + be_return(vm); + } + be_return_nil(vm); +} + static int i_readline(bvm *vm) { be_getmember(vm, 1, ".p"); @@ -144,6 +188,7 @@ int be_nfunc_open(bvm *vm) { ".p", NULL }, { "write", i_write }, { "read", i_read }, + { "readbytes", i_readbytes }, { "readline", i_readline }, { "seek", i_seek }, { "tell", i_tell }, diff --git a/lib/libesp32/Berry/src/be_gc.c b/lib/libesp32/Berry/src/be_gc.c index fca6ad45d..0475de7b3 100644 --- a/lib/libesp32/Berry/src/be_gc.c +++ b/lib/libesp32/Berry/src/be_gc.c @@ -339,12 +339,19 @@ static void free_lstring(bvm *vm, bgcobject *obj) } } +static void free_instance(bvm *vm, bgcobject *obj) +{ + binstance *o = cast_instance(obj); + int nvar = be_instance_member_count(o); + be_free(vm, obj, sizeof(binstance) + sizeof(bvalue) * (nvar - 1)); +} + static void free_object(bvm *vm, bgcobject *obj) { switch (obj->type) { case BE_STRING: free_lstring(vm, obj); break; /* long string */ case BE_CLASS: be_free(vm, obj, sizeof(bclass)); break; - case BE_INSTANCE: be_free(vm, obj, sizeof(binstance)); break; + case BE_INSTANCE: free_instance(vm, obj); break; case BE_MAP: be_map_delete(vm, cast_map(obj)); break; case BE_LIST: be_list_delete(vm, cast_list(obj)); break; case BE_CLOSURE: free_closure(vm, obj); break; @@ -451,10 +458,13 @@ static void destruct_object(bvm *vm, bgcobject *obj) int type; binstance *ins = cast_instance(obj); /* does not GC when creating the string "deinit". */ - type = be_instance_member(vm, ins, str_literal(vm, "deinit"), vm->top); + type = be_instance_member_simple(vm, ins, str_literal(vm, "deinit"), vm->top); be_incrtop(vm); if (basetype(type) == BE_FUNCTION) { - be_dofunc(vm, vm->top - 1, 1); + var_setinstance(vm->top, ins); /* push instance on stack as arg 1 */ + be_incrtop(vm); + be_dofunc(vm, vm->top - 2, 1); /* warning, there shoudln't be any exception raised here, or the gc stops */ + be_stackpop(vm, 1); } be_stackpop(vm, 1); } diff --git a/lib/libesp32/Berry/src/be_globallib.c b/lib/libesp32/Berry/src/be_globallib.c index 8b5e16abd..1d8267b95 100644 --- a/lib/libesp32/Berry/src/be_globallib.c +++ b/lib/libesp32/Berry/src/be_globallib.c @@ -83,4 +83,4 @@ module global (scope: global, depend: BE_USE_GLOBAL_MODULE) { #include "../generate/be_fixed_global.h" #endif -#endif /* BE_USE_INTROSPECT_MODULE */ +#endif /* BE_USE_GLOBAL_MODULE */ diff --git a/lib/libesp32/Berry/src/be_introspectlib.c b/lib/libesp32/Berry/src/be_introspectlib.c new file mode 100644 index 000000000..cd6b95f55 --- /dev/null +++ b/lib/libesp32/Berry/src/be_introspectlib.c @@ -0,0 +1,158 @@ +/******************************************************************** +** Copyright (c) 2018-2020 Guan Wenliang +** This file is part of the Berry default interpreter. +** skiars@qq.com, https://github.com/Skiars/berry +** See Copyright Notice in the LICENSE file or at +** https://github.com/Skiars/berry/blob/master/LICENSE +********************************************************************/ +#include "be_object.h" +#include "be_module.h" +#include "be_string.h" +#include "be_vector.h" +#include "be_class.h" +#include "be_debug.h" +#include "be_map.h" +#include "be_vm.h" +#include "be_exec.h" +#include "be_gc.h" +#include + +#if BE_USE_INTROSPECT_MODULE + +#define global(vm) ((vm)->gbldesc.global) +#define builtin(vm) ((vm)->gbldesc.builtin) + +static void dump_map_keys(bvm *vm, bmap *map) +{ + if (!map) { return; } /* protect agains potential null pointer */ + bmapnode *node; + bmapiter iter = be_map_iter(); + while ((node = be_map_next(map, &iter)) != NULL) { + if (var_isstr(&node->key)) { + bstring *s = var_tostr(&node->key); + be_pushstring(vm, str(s)); + be_data_push(vm, -2); + be_pop(vm, 1); + } + } +} + +static int m_attrlist(bvm *vm) +{ + int top = be_top(vm); + be_newobject(vm, "list"); + if (top >= 1) { + bvalue *v = be_indexof(vm, 1); + void *obj = var_toobj(v); + switch (var_type(v)) { + case BE_NIL: dump_map_keys(vm, global(vm).vtab); break; + case BE_MODULE: dump_map_keys(vm, ((bmodule*)obj)->table); break; + case BE_CLASS: dump_map_keys(vm, ((bclass*)obj)->members); break; + case BE_INSTANCE: dump_map_keys(vm, ((binstance*)obj)->_class->members); break; + default: break; + } + } else { /* if no parameter, then dump globals */ + dump_map_keys(vm, global(vm).vtab); + } + be_pop(vm, 1); + be_return(vm); +} + +static void m_findmember_protected(bvm *vm, void* data) +{ + be_getmember(vm, 1, (const char*) data); +} + +static int m_findmember(bvm *vm) +{ + int top = be_top(vm); + if (top >= 2 && (be_isinstance(vm, 1) || be_ismodule(vm, 1) || be_isclass(vm, 1)) && be_isstring(vm, 2)) { + int ret = be_execprotected(vm, &m_findmember_protected, (void*) be_tostring(vm, 2)); + if (ret == BE_OK) { + // be_getmember(vm, 1, be_tostring(vm, 2)); + be_return(vm); + } + } + be_return_nil(vm); +} + +static int m_setmember(bvm *vm) +{ + int top = be_top(vm); + if (top >= 3 && (be_isinstance(vm, 1) || be_ismodule(vm, 1)) && be_isstring(vm, 2)) { + be_setmember(vm, 1, be_tostring(vm, 2)); + be_return(vm); + } + be_return_nil(vm); +} + +static int m_toptr(bvm *vm) +{ + int top = be_top(vm); + if (top >= 1) { + bvalue *v = be_indexof(vm, 1); + if (var_basetype(v) >= BE_FUNCTION || var_type(v) == BE_COMPTR) { + be_pushcomptr(vm, var_toobj(v)); + be_return(vm); + } else if (var_type(v) == BE_INT) { + be_pushcomptr(vm, (void*) var_toint(v)); + be_return(vm); + } else { + be_raise(vm, "value_error", "unsupported for this type"); + } + } + be_return_nil(vm); +} + +static int m_fromptr(bvm *vm) +{ + int top = be_top(vm); + if (top >= 1) { + void* v; + if (be_iscomptr(vm, 1)) { + v = be_tocomptr(vm, 1); + } else { + v = (void*) be_toint(vm, 1); + } + if (v) { + bgcobject * ptr = (bgcobject*) v; + if (var_basetype(ptr) >= BE_GCOBJECT) { + bvalue *top = be_incrtop(vm); + var_setobj(top, ptr->type, ptr); + } else { + be_raise(vm, "value_error", "unsupported for this type"); + } + be_return(vm); + } + } + be_return_nil(vm); +} + +#if !BE_USE_PRECOMPILED_OBJECT +be_native_module_attr_table(introspect) { + be_native_module_function("members", m_attrlist), + + be_native_module_function("get", m_findmember), + be_native_module_function("set", m_setmember), + + be_native_module_function("toptr", m_toptr), + be_native_module_function("fromptr", m_fromptr), +}; + +be_define_native_module(introspect, NULL); +#else +/* @const_object_info_begin +module introspect (scope: global, depend: BE_USE_INTROSPECT_MODULE) { + members, func(m_attrlist) + + get, func(m_findmember) + set, func(m_setmember) + + toptr, func(m_toptr) + fromptr, func(m_fromptr) +} +@const_object_info_end */ +#include "../generate/be_fixed_introspect.h" +#endif + +#endif /* BE_USE_INTROSPECT_MODULE */ diff --git a/lib/libesp32/Berry/src/be_lexer.c b/lib/libesp32/Berry/src/be_lexer.c index eea82109d..c4c736508 100644 --- a/lib/libesp32/Berry/src/be_lexer.c +++ b/lib/libesp32/Berry/src/be_lexer.c @@ -38,7 +38,7 @@ static const char* const kwords_tab[] = { ":", "?", "->", "if", "elif", "else", "while", "for", "def", "end", "class", "break", "continue", "return", "true", "false", "nil", "var", "do", - "import", "as", "try", "except", "raise" + "import", "as", "try", "except", "raise", "static" }; void be_lexerror(blexer *lexer, const char *msg) @@ -572,7 +572,6 @@ void be_lexer_deinit(blexer *lexer) { be_free(lexer->vm, lexer->buf.s, lexer->buf.size); keyword_unregiste(lexer->vm); - be_stackpop(lexer->vm, 1); /* pop strtab */ } int be_lexer_scan_next(blexer *lexer) diff --git a/lib/libesp32/Berry/src/be_lexer.h b/lib/libesp32/Berry/src/be_lexer.h index 09090db6b..467070946 100644 --- a/lib/libesp32/Berry/src/be_lexer.h +++ b/lib/libesp32/Berry/src/be_lexer.h @@ -88,7 +88,8 @@ typedef enum { KeyAs, /* keyword as */ KeyTry, /* keyword try */ KeyExcept, /* keyword except */ - KeyRaise /* keyword raise */ + KeyRaise, /* keyword raise */ + KeyStatic /* keyword static */ } btokentype; struct blexerreader { diff --git a/lib/libesp32/Berry/src/be_libs.c b/lib/libesp32/Berry/src/be_libs.c index a4c774df4..0c55717f3 100644 --- a/lib/libesp32/Berry/src/be_libs.c +++ b/lib/libesp32/Berry/src/be_libs.c @@ -8,6 +8,7 @@ #include "be_libs.h" extern void be_load_baselib(bvm *vm); +extern void be_load_baselib_call(bvm *vm); extern void be_load_listlib(bvm *vm); extern void be_load_maplib(bvm *vm); extern void be_load_rangelib(bvm *vm); @@ -23,5 +24,6 @@ void be_loadlibs(bvm *vm) be_load_rangelib(vm); be_load_filelib(vm); be_load_byteslib(vm); + be_load_baselib_call(vm); #endif } diff --git a/lib/libesp32/Berry/src/be_listlib.c b/lib/libesp32/Berry/src/be_listlib.c index 3733c78c0..cc8c8d8d4 100644 --- a/lib/libesp32/Berry/src/be_listlib.c +++ b/lib/libesp32/Berry/src/be_listlib.c @@ -209,15 +209,31 @@ static int m_item(bvm *vm) static int m_find(bvm *vm) { + bbool found = bfalse; + int idx; be_getmember(vm, 1, ".p"); list_check_data(vm, 2); - if (be_isint(vm, 2)) { - be_pushvalue(vm, 2); - if (be_getindex(vm, -2)) { - be_return(vm); + list_check_ref(vm); + be_refpush(vm, 1); + be_pushiter(vm, -1); + for (idx=0; be_iter_hasnext(vm, -2); idx++) { + be_iter_next(vm, -2); + be_pushvalue(vm, 2); /* push needle to compare */ + if (be_iseq(vm)) { + found = btrue; + be_pop(vm, 2); + break; } + be_pop(vm, 2); + } + be_pop(vm, 1); /* pop iterator */ + be_refpop(vm); + if (found) { + be_pushint(vm, idx); + be_return(vm); + } else { + be_return_nil(vm); } - be_return_nil(vm); } static int m_setitem(bvm *vm) diff --git a/lib/libesp32/Berry/src/be_maplib.c b/lib/libesp32/Berry/src/be_maplib.c index 936e3164d..c984222ea 100644 --- a/lib/libesp32/Berry/src/be_maplib.c +++ b/lib/libesp32/Berry/src/be_maplib.c @@ -121,6 +121,15 @@ static int m_find(bvm *vm) be_return(vm); } +static int m_has(bvm *vm) +{ + be_getmember(vm, 1, ".p"); + map_check_data(vm, 2); + be_pushvalue(vm, 2); + be_pushbool(vm, be_getindex(vm, -2)); + be_return(vm); +} + static int m_insert(bvm *vm) { bbool res; @@ -232,6 +241,7 @@ class be_class_map (scope: global, name: map) { item, func(m_item) setitem, func(m_setitem) find, func(m_find) + has, func(m_has) size, func(m_size) insert, func(m_insert) iter, func(m_iter) diff --git a/lib/libesp32/Berry/src/be_mathlib.c b/lib/libesp32/Berry/src/be_mathlib.c index 4ee24b1cf..b9598f525 100644 --- a/lib/libesp32/Berry/src/be_mathlib.c +++ b/lib/libesp32/Berry/src/be_mathlib.c @@ -34,6 +34,17 @@ #define mathfunc(func) func #endif +static int m_isnan(bvm *vm) +{ + if (be_top(vm) >= 1 && be_isreal(vm, 1)) { + breal x = be_toreal(vm, 1); + be_pushbool(vm, isnan(x)); + } else { + be_pushbool(vm, bfalse); + } + be_return(vm); +} + static int m_abs(bvm *vm) { if (be_top(vm) >= 1 && be_isnumber(vm, 1)) { @@ -133,6 +144,18 @@ static int m_atan(bvm *vm) be_return(vm); } +static int m_atan2(bvm *vm) +{ + if (be_top(vm) >= 2 && be_isnumber(vm, 1) && be_isnumber(vm, 2)) { + breal y = be_toreal(vm, 1); + breal x = be_toreal(vm, 2); + be_pushreal(vm, mathfunc(atan2)(y, x)); + } else { + be_pushreal(vm, (breal)0.0); + } + be_return(vm); +} + static int m_sinh(bvm *vm) { if (be_top(vm) >= 1 && be_isnumber(vm, 1)) { @@ -260,6 +283,7 @@ static int m_rand(bvm *vm) #if !BE_USE_PRECOMPILED_OBJECT be_native_module_attr_table(math) { + be_native_module_function("isnan", m_isnan), be_native_module_function("abs", m_abs), be_native_module_function("ceil", m_ceil), be_native_module_function("floor", m_floor), @@ -269,6 +293,7 @@ be_native_module_attr_table(math) { be_native_module_function("asin", m_asin), be_native_module_function("acos", m_acos), be_native_module_function("atan", m_atan), + be_native_module_function("atan2", m_atan2), be_native_module_function("sinh", m_sinh), be_native_module_function("cosh", m_cosh), be_native_module_function("tanh", m_tanh), @@ -282,6 +307,7 @@ be_native_module_attr_table(math) { be_native_module_function("srand", m_srand), be_native_module_function("rand", m_rand), be_native_module_real("pi", M_PI), + be_native_module_real("nan", NAN), be_native_module_int("imax", M_IMAX), be_native_module_int("imin", M_IMIN), }; @@ -290,6 +316,7 @@ be_define_native_module(math, NULL); #else /* @const_object_info_begin module math (scope: global, depend: BE_USE_MATH_MODULE) { + isnan, func(m_isnan) abs, func(m_abs) ceil, func(m_ceil) floor, func(m_floor) @@ -299,6 +326,7 @@ module math (scope: global, depend: BE_USE_MATH_MODULE) { asin, func(m_asin) acos, func(m_acos) atan, func(m_atan) + atan2, func(m_atan2) sinh, func(m_sinh) cosh, func(m_cosh) tanh, func(m_tanh) @@ -312,6 +340,7 @@ module math (scope: global, depend: BE_USE_MATH_MODULE) { srand, func(m_srand) rand, func(m_rand) pi, real(M_PI) + nan, real(NAN) imax, int(M_IMAX) imin, int(M_IMIN) } diff --git a/lib/libesp32/Berry/src/be_module.c b/lib/libesp32/Berry/src/be_module.c index fcda03173..b69eb35cb 100644 --- a/lib/libesp32/Berry/src/be_module.c +++ b/lib/libesp32/Berry/src/be_module.c @@ -252,6 +252,22 @@ static void cache_module(bvm *vm, bstring *name) *v = vm->top[-1]; } +/* Try to run '()' function of module. Module is already loaded. */ +static void module_init(bvm *vm) { + if (be_ismodule(vm, -1)) { + if (be_getmember(vm, -1, "init")) { + /* found, call it with current module as parameter */ + be_pushvalue(vm, -2); + be_call(vm, 1); + /* the result of init() is cached and returned */ + be_pop(vm, 1); + be_remove(vm, -2); /* remove initial module */ + } else { + be_pop(vm, 1); + } + } +} + /* load module to vm->top */ int be_module_load(bvm *vm, bstring *path) { @@ -260,8 +276,11 @@ int be_module_load(bvm *vm, bstring *path) res = load_native(vm, path); if (res == BE_IO_ERROR) res = load_package(vm, path); - if (res == BE_OK) + if (res == BE_OK) { + /* on first load of the module, try running the '()' function */ + module_init(vm); cache_module(vm, path); + } } return res; } @@ -286,22 +305,58 @@ void be_module_delete(bvm *vm, bmodule *module) be_free(vm, module, sizeof(bmodule)); } -bvalue* be_module_attr(bvm *vm, bmodule *module, bstring *attr) +int be_module_attr(bvm *vm, bmodule *module, bstring *attr, bvalue *dst) { - return be_map_findstr(vm, module->table, attr); + bvalue *member = be_map_findstr(vm, module->table, attr); + if (!member) { /* try the 'member' function */ + member = be_map_findstr(vm, module->table, str_literal(vm, "member")); + if (member && var_basetype(member) == BE_FUNCTION) { + bvalue *top = vm->top; + top[0] = *member; + var_setstr(&top[1], attr); + vm->top += 2; /* prevent collection results */ + be_dofunc(vm, top, 1); /* call method 'method' */ + vm->top -= 2; + *dst = *vm->top; /* copy result to R(A) */ + if (var_basetype(dst) != BE_NIL) { + return var_type(dst); + } + } + return BE_NONE; + } else { + *dst = *member; + return var_type(dst); + } } -bvalue* be_module_bind(bvm *vm, bmodule *module, bstring *attr) +bbool be_module_setmember(bvm *vm, bmodule *module, bstring *attr, bvalue *src) { + assert(src); bmap *attrs = module->table; if (!gc_isconst(attrs)) { bvalue *v = be_map_findstr(vm, attrs, attr); if (v == NULL) { v = be_map_insertstr(vm, attrs, attr, NULL); } - return v; + if (v) { + *v = *src; + return btrue; + } + } else { + /* if not writable, try 'setmember' */ + int type = be_module_attr(vm, module, str_literal(vm, "setmember"), vm->top); + if (basetype(type) == BE_FUNCTION) { + bvalue *top = vm->top; + // top[0] already has 'member' + var_setstr(&top[1], attr); /* attribute name */ + top[2] = *src; /* new value */ + vm->top += 3; /* prevent collection results */ + be_dofunc(vm, top, 2); /* call method 'setmember' */ + vm->top -= 3; + return btrue; + } } - return NULL; + return bfalse; } const char* be_module_name(bmodule *module) diff --git a/lib/libesp32/Berry/src/be_module.h b/lib/libesp32/Berry/src/be_module.h index 1a95df59b..4f9b869de 100644 --- a/lib/libesp32/Berry/src/be_module.h +++ b/lib/libesp32/Berry/src/be_module.h @@ -34,8 +34,8 @@ typedef struct bmodule { bmodule* be_module_new(bvm *vm); void be_module_delete(bvm *vm, bmodule *module); int be_module_load(bvm *vm, bstring *path); -bvalue* be_module_attr(bvm *vm, bmodule *module, bstring *attr); -bvalue* be_module_bind(bvm *vm, bmodule *module, bstring *attr); +int be_module_attr(bvm *vm, bmodule *module, bstring *attr, bvalue *dst); +bbool be_module_setmember(bvm *vm, bmodule *module, bstring *attr, bvalue *src); const char* be_module_name(bmodule *module); bbool be_module_setname(bmodule *module, bstring *name); diff --git a/lib/libesp32/Berry/src/be_object.c b/lib/libesp32/Berry/src/be_object.c index a0da81939..6c246231c 100644 --- a/lib/libesp32/Berry/src/be_object.c +++ b/lib/libesp32/Berry/src/be_object.c @@ -29,6 +29,8 @@ const char* be_vtype2str(bvalue *v) case BE_MAP: return "map"; case BE_INSTANCE: return "instance"; case BE_MODULE: return "module"; + case BE_INDEX: return "var"; + case BE_COMPTR: return "ptr"; default: return "invalid type"; } } diff --git a/lib/libesp32/Berry/src/be_object.h b/lib/libesp32/Berry/src/be_object.h index d465138ec..49ac5dbc3 100644 --- a/lib/libesp32/Berry/src/be_object.h +++ b/lib/libesp32/Berry/src/be_object.h @@ -13,12 +13,13 @@ /* basic types, do not change value */ #define BE_NONE (-1) /* unknow type */ #define BE_COMPTR (-2) /* common pointer */ +#define BE_INDEX (-3) /* index for instance variable, previously BE_INT */ #define BE_NIL 0 #define BE_INT 1 #define BE_REAL 2 #define BE_BOOL 3 #define BE_FUNCTION 4 -#define BE_STRING 5 +#define BE_STRING 5 /* from this type can be gced, see BE_GCOBJECT */ #define BE_CLASS 6 #define BE_INSTANCE 7 #define BE_PROTO 8 @@ -207,6 +208,8 @@ typedef const char* (*breader)(void*, size_t*); #define var_islist(_v) var_istype(_v, BE_LIST) #define var_ismap(_v) var_istype(_v, BE_MAP) #define var_ismodule(_v) var_istype(_v, BE_MODULE) +#define var_isindex(_v) var_istype(_v, BE_INDEX) +#define var_iscomptr(_v) var_istype(_v, BE_COMPTR) #define var_isnumber(_v) (var_isint(_v) || var_isreal(_v)) #define var_setnil(_v) var_settype(_v, BE_NIL) @@ -223,6 +226,7 @@ typedef const char* (*breader)(void*, size_t*); #define var_setlist(_v, _o) var_setobj(_v, BE_LIST, _o) #define var_setmap(_v, _o) var_setobj(_v, BE_MAP, _o) #define var_setmodule(_v, _o) var_setobj(_v, BE_MODULE, _o) +#define var_setindex(_v, _i) { var_settype(_v, BE_INDEX); (_v)->v.i = (_i); } #define var_setproto(_v, _o) var_setobj(_v, BE_PROTO, _o) #define var_tobool(_v) ((_v)->v.b) diff --git a/lib/libesp32/Berry/src/be_opcodes.h b/lib/libesp32/Berry/src/be_opcodes.h index 562bd4b31..12c3781e0 100644 --- a/lib/libesp32/Berry/src/be_opcodes.h +++ b/lib/libesp32/Berry/src/be_opcodes.h @@ -51,5 +51,7 @@ OPCODE(CLOSE), /* A | close upvalues */ OPCODE(IMPORT), /* A, B, C | IF (A == C) import module name as RK(B) to RK(A), ELSE from module RK(C) import name as RK(B) to RK(A) */ OPCODE(EXBLK), /* A, Bx | ... */ OPCODE(CATCH), /* A, B, C | ... */ -OPCODE(RAISE), /* A, B, C | ... */ -OPCODE(CLASS) /* Bx | init class in K[Bx] */ +OPCODE(RAISE), /* A, B, C | RAISE(B,C) B is code, C is description. A==0 only B provided, A==1 B and C are provided, A==2 rethrow with both parameters already on stack */ +OPCODE(CLASS), /* Bx | init class in K[Bx] */ +OPCODE(GETNGBL), /* A, B | R(A) <- GLOBAL[RK(B)] by name */ +OPCODE(SETNGBL) /* A, B | R(A) -> GLOBAL[RK(B)] by name */ diff --git a/lib/libesp32/Berry/src/be_parser.c b/lib/libesp32/Berry/src/be_parser.c index 1839e9392..fcef0165a 100644 --- a/lib/libesp32/Berry/src/be_parser.c +++ b/lib/libesp32/Berry/src/be_parser.c @@ -87,6 +87,8 @@ static void match_token(bparser *parser, btokentype type) scan_next_token(parser); /* skip this token */ } +/* Check that the next token is not of type `type` */ +/* or raise an exception */ static void match_notoken(bparser *parser, btokentype type) { if (next_type(parser) == type) { /* error when token is match */ @@ -95,6 +97,7 @@ static void match_notoken(bparser *parser, btokentype type) } } +/* check that if the expdesc is a symbol, it is a valid one or raise an exception */ static void check_symbol(bparser *parser, bexpdesc *e) { if (e->type == ETVOID && e->v.s == NULL) { /* error when token is not a symbol */ @@ -103,6 +106,7 @@ static void check_symbol(bparser *parser, bexpdesc *e) } } +/* check that the value in `e` is valid for a variable, i.e. contains a value or a valid symbol */ static void check_var(bparser *parser, bexpdesc *e) { check_symbol(parser, e); /* check the token is a symbol */ @@ -172,14 +176,15 @@ void end_varinfo(bparser *parser, int beginpc) #endif +/* Initialize bblockinfo structure */ static void begin_block(bfuncinfo *finfo, bblockinfo *binfo, int type) { - binfo->prev = finfo->binfo; - finfo->binfo = binfo; + binfo->prev = finfo->binfo; /* save previous block */ + finfo->binfo = binfo; /* tell parser this is the current block */ binfo->type = (bbyte)type; binfo->hasupval = 0; - binfo->beginpc = finfo->pc; - binfo->nactlocals = (bbyte)be_list_count(finfo->local); + binfo->beginpc = finfo->pc; /* set starting pc for this block */ + binfo->nactlocals = (bbyte)be_list_count(finfo->local); /* count number of local variables in previous block */ if (type & BLOCK_LOOP) { binfo->breaklist = NO_JUMP; binfo->continuelist = NO_JUMP; @@ -197,9 +202,9 @@ static void end_block_ex(bparser *parser, int beginpc) be_code_patchlist(finfo, binfo->continuelist, binfo->beginpc); } end_varinfo(parser, beginpc); - be_list_resize(parser->vm, finfo->local, binfo->nactlocals); - finfo->freereg = binfo->nactlocals; - finfo->binfo = binfo->prev; + be_list_resize(parser->vm, finfo->local, binfo->nactlocals); /* remove local variables from this block, they are now out of scope */ + finfo->freereg = binfo->nactlocals; /* adjust first free register accordingly */ + finfo->binfo = binfo->prev; /* restore previous block */ } static void end_block(bparser *parser) @@ -207,6 +212,8 @@ static void end_block(bparser *parser) end_block_ex(parser, -1); } +/* Return the name of the source for this parser, could be `string`, + `stdin` or the name of the current function */ static bstring* parser_source(bparser *parser) { if (parser->finfo) { @@ -215,29 +222,30 @@ static bstring* parser_source(bparser *parser) return be_newstr(parser->vm, parser->lexer.fname); } +/* Initialize a function block and create a new `bprotoˋ */ static void begin_func(bparser *parser, bfuncinfo *finfo, bblockinfo *binfo) { bvm *vm = parser->vm; bproto *proto = be_newproto(vm); var_setproto(vm->top, proto); be_stackpush(vm); - be_vector_init(vm, &finfo->code, sizeof(binstruction)); + be_vector_init(vm, &finfo->code, sizeof(binstruction)); /* vector for code, vectors are not gced */ proto->code = be_vector_data(&finfo->code); proto->codesize = be_vector_capacity(&finfo->code); - be_vector_init(vm, &finfo->kvec, sizeof(bvalue)); + be_vector_init(vm, &finfo->kvec, sizeof(bvalue)); /* vector for constants */ proto->ktab = be_vector_data(&finfo->kvec); proto->nconst = be_vector_capacity(&finfo->kvec); - be_vector_init(vm, &finfo->pvec, sizeof(bproto*)); + be_vector_init(vm, &finfo->pvec, sizeof(bproto*)); /* vector for subprotos */ proto->ptab = be_vector_data(&finfo->pvec); proto->nproto = be_vector_capacity(&finfo->pvec); - proto->source = parser_source(parser); - finfo->local = be_list_new(vm); - var_setlist(vm->top, finfo->local); + proto->source = parser_source(parser); /* keep a copy of source for function */ + finfo->local = be_list_new(vm); /* list for local variables */ + var_setlist(vm->top, finfo->local); /* push list of local variables on the stack (avoid gc) */ be_stackpush(vm); - finfo->upval = be_map_new(vm); + finfo->upval = be_map_new(vm); /* push a map for upvals on stack */ var_setmap(vm->top, finfo->upval); be_stackpush(vm); - finfo->prev = parser->finfo; + finfo->prev = parser->finfo; /* init finfo */ finfo->lexer = &parser->lexer; finfo->proto = proto; finfo->freereg = 0; @@ -258,6 +266,7 @@ static void begin_func(bparser *parser, bfuncinfo *finfo, bblockinfo *binfo) begin_block(finfo, binfo, 0); } +/* compute the upval structure */ static void setupvals(bfuncinfo *finfo) { bproto *proto = finfo->proto; @@ -282,6 +291,7 @@ static void setupvals(bfuncinfo *finfo) } } +/* Function is complete, finalize bproto */ static void end_func(bparser *parser) { bvm *vm = parser->vm; @@ -289,9 +299,9 @@ static void end_func(bparser *parser) bproto *proto = finfo->proto; be_code_ret(finfo, NULL); /* append a return to last code */ - end_block(parser); - setupvals(finfo); - proto->code = be_vector_release(vm, &finfo->code); + end_block(parser); /* close block */ + setupvals(finfo); /* close upvals */ + proto->code = be_vector_release(vm, &finfo->code); /* compact all vectors and return NULL if empty */ proto->codesize = finfo->pc; proto->ktab = be_vector_release(vm, &finfo->kvec); proto->nconst = be_vector_count(&finfo->kvec); @@ -305,10 +315,11 @@ static void end_func(bparser *parser) proto->varinfo = be_vector_release(vm, &finfo->varvec); proto->nvarinfo = be_vector_count(&finfo->varvec); #endif - parser->finfo = parser->finfo->prev; + parser->finfo = parser->finfo->prev; /* restore previous `finfo` */ be_stackpop(vm, 2); /* pop upval and local */ } +/* is the next token a binary operator? If yes return the operator or `OP_NOT_BINARY` */ static btokentype get_binop(bparser *parser) { btokentype op = next_type(parser); @@ -318,6 +329,8 @@ static btokentype get_binop(bparser *parser) return OP_NOT_BINARY; } +/* is the next token a unary operator? If yes return the operator or `OP_NOT_BINARY` */ +/* operator 'negative' 'not' and 'flip' */ static btokentype get_unary_op(bparser *parser) { btokentype op = next_type(parser); @@ -327,6 +340,8 @@ static btokentype get_unary_op(bparser *parser) return OP_NOT_UNARY; } +/* is the next token an assignment operator? If yes return the operator or `OP_NOT_BINARY` */ +/* `=`, `+=`, ... `>>=` */ static btokentype get_assign_op(bparser *parser) { btokentype op = next_type(parser); @@ -336,6 +351,7 @@ static btokentype get_assign_op(bparser *parser) return OP_NOT_ASSIGN; } +/* Initialize bexpdesc structure with specific type and value as int */ static void init_exp(bexpdesc *e, exptype_t type, bint i) { e->type = (bbyte)type; @@ -346,6 +362,8 @@ static void init_exp(bexpdesc *e, exptype_t type, bint i) e->v.i = i; } +/* find local variable by name, starting at index `begin` */ +/* linear search, returns -1 if not found */ static int find_localvar(bfuncinfo *finfo, bstring *s, int begin) { int i, count = be_list_count(finfo->local); @@ -358,12 +376,22 @@ static int find_localvar(bfuncinfo *finfo, bstring *s, int begin) return -1; /* not found */ } +/* create a new local variable by name, or return the current register if already exists */ +/* returns the Reg number for the variable */ +/* If STRICT, we don't allow a var to hide a var from outer scope */ +/* We don't allow the same var to be defined twice in same scope */ static int new_localvar(bparser *parser, bstring *name) { bfuncinfo *finfo = parser->finfo; - int reg = find_localvar(finfo, name, finfo->binfo->nactlocals); + int reg = find_localvar(finfo, name, finfo->binfo->nactlocals); /* look if already exists skipping the local variables from upper blocks */ + /* 'strict': raise an exception if the local variable shadows another local variable */ if (reg == -1) { bvalue *var; + if (comp_is_strict(parser->vm)) { + if (find_localvar(finfo, name, 0) >= 0 && str(name)[0] != '.') { /* we do accept nested redifinition of internal variables starting with ':' */ + push_error(parser, "strict: redefinition of '%s' from outer scope", str(name)); + } + } reg = be_list_count(finfo->local); /* new local index */ var = be_list_push(parser->vm, finfo->local, NULL); var_setstr(var, name); @@ -371,10 +399,13 @@ static int new_localvar(bparser *parser, bstring *name) be_code_allocregs(finfo, 1); /* use a register */ } begin_varinfo(parser, name); + } else { + push_error(parser, "redefinition of '%s'", str(name)); } return reg; } +/* Find upval by name, if found return its index number, or -1 */ static int find_upval(bfuncinfo *finfo, bstring *s) { bvm *vm = finfo->lexer->vm; @@ -385,6 +416,8 @@ static int find_upval(bfuncinfo *finfo, bstring *s) return -1; } +/* Recursively search for upper blocks that are referenced in upvals */ +/* and mark them with `hasupval` */ static void mark_upval(bfuncinfo *finfo, int level) { bblockinfo *binfo = finfo->prev->binfo; @@ -413,12 +446,14 @@ static int new_upval(bvm *vm, bfuncinfo *finfo, bstring *name, bexpdesc *var) return index; } +/* create a new variable in currenr context as name, and create expdesc for it */ +/* If within a block, create as local, otherwise as global */ static void new_var(bparser *parser, bstring *name, bexpdesc *var) { bfuncinfo *finfo = parser->finfo; if (finfo->prev || finfo->binfo->prev || parser->islocal) { init_exp(var, ETLOCAL, 0); - var->v.idx = new_localvar(parser, name); + var->v.idx = new_localvar(parser, name); /* if local, contains the index in current local var list */ } else { init_exp(var, ETGLOBAL, 0); var->v.idx = be_global_new(parser->vm, name); @@ -426,6 +461,14 @@ static void new_var(bparser *parser, bstring *name, bexpdesc *var) push_error(parser, "too many global variables (in '%s')", str(name)); } + if (comp_is_named_gbl(parser->vm)) { + /* change to ETNGLBAL */ + bexpdesc key; + init_exp(&key, ETSTRING, 0); + key.v.s = name; + init_exp(var, ETNGLOBAL, 0); + var->v.idx = be_code_nglobal(parser->finfo, &key); + } } } @@ -446,10 +489,17 @@ static int singlevaraux(bvm *vm, bfuncinfo *finfo, bstring *s, bexpdesc *var) int res = singlevaraux(vm, finfo->prev, s, var); if (res == ETUPVAL || res == ETLOCAL) { idx = new_upval(vm, finfo, s, var); /* new upvalue */ - } else if (be_global_find(vm, s) >= 0) { - return ETGLOBAL; /* global variable */ } else { - return ETVOID; /* unknow (new variable or error) */ + idx = be_global_find(vm, s); + if (idx >= 0) { + if (idx < be_builtin_count(vm)) { + return ETGLOBAL; /* global variable */ + } else { + return comp_is_named_gbl(vm) ? ETNGLOBAL : ETGLOBAL; /* global variable */ + } + } else { + return ETVOID; /* unknow (new variable or error) */ + } } } init_exp(var, ETUPVAL, idx); @@ -458,8 +508,12 @@ static int singlevaraux(bvm *vm, bfuncinfo *finfo, bstring *s, bexpdesc *var) } } +/* get variable from next toden as name */ +/* and create an expdesc from it */ +/* can be new, global, named global, upval */ static void singlevar(bparser *parser, bexpdesc *var) { + bexpdesc key; bstring *varname = next_token(parser).u.s; int type = singlevaraux(parser->vm, parser->finfo, varname, var); switch (type) { @@ -471,27 +525,55 @@ static void singlevar(bparser *parser, bexpdesc *var) init_exp(var, ETGLOBAL, 0); var->v.idx = be_global_find(parser->vm, varname); break; + case ETNGLOBAL: + init_exp(&key, ETSTRING, 0); + key.v.s = varname; + init_exp(var, ETNGLOBAL, 0); + var->v.idx = be_code_nglobal(parser->finfo, &key); + break; default: break; } } +/* parse a vararg argument in the form `def f(a, *b) end` */ +/* Munch the '*', read the token, create variable and declare the function as vararg */ +static void func_vararg(bparser *parser) { + bexpdesc v; + bstring *str; + match_token(parser, OptMul); /* skip '*' */ + str = next_token(parser).u.s; + match_token(parser, TokenId); /* match and skip ID */ + new_var(parser, str, &v); /* new variable */ + parser->finfo->proto->varg = 1; /* set varg flag */ +} + +/* Parse function or method definition variable list */ +/* Create an implicit local variable for each argument starting at R0 */ +/* Update function proto argc to the expected number or arguments */ +/* Raise an exception if multiple arguments have the same name */ +/* New: vararg support */ static void func_varlist(bparser *parser) { bexpdesc v; bstring *str; - /* '(' [ID {',' ID}] ')' */ + /* '(' [ ID {',' ID}] ')' or */ + /* '(' '*' ID ')' or */ + /* '(' [ ID {',' ID}] ',' '*' ID ')' */ match_token(parser, OptLBK); /* skip '(' */ - if (match_id(parser, str) != NULL) { + if (next_type(parser) == OptMul) { + func_vararg(parser); + } else if (match_id(parser, str) != NULL) { new_var(parser, str, &v); /* new variable */ while (match_skip(parser, OptComma)) { /* ',' */ - str = next_token(parser).u.s; - match_token(parser, TokenId); /* match and skip ID */ - /* new local variable */ - if (find_localvar(parser->finfo, str, 0) == -1) { - new_var(parser, str, &v); + if (next_type(parser) == OptMul) { + func_vararg(parser); + break; } else { - push_error(parser, "redefinition of '%s'", str(str)); + str = next_token(parser).u.s; + match_token(parser, TokenId); /* match and skip ID */ + /* new local variable */ + new_var(parser, str, &v); } } } @@ -499,29 +581,33 @@ static void func_varlist(bparser *parser) parser->finfo->proto->argc = parser->finfo->freereg; } +/* Parse a function includind arg list and body */ +/* Given name and type (function or method) */ +/* Returns `bproto` object */ static bproto* funcbody(bparser *parser, bstring *name, int type) { bfuncinfo finfo; bblockinfo binfo; /* '(' varlist ')' block 'end' */ - begin_func(parser, &finfo, &binfo); + begin_func(parser, &finfo, &binfo); /* init new function context */ finfo.proto->name = name; - if (type & FUNC_METHOD) { + if (type & FUNC_METHOD) { /* If method, add an implicit first argument `self` */ new_localvar(parser, parser_newstr(parser, "self")); } - func_varlist(parser); - stmtlist(parser); - end_func(parser); + func_varlist(parser); /* parse arg list */ + stmtlist(parser); /* parse statement without final `end` */ + end_func(parser); /* close function context */ match_token(parser, KeyEnd); /* skip 'end' */ - return finfo.proto; + return finfo.proto; /* return fully constructed `bproto` */ } -/* anonymous function */ +/* anonymous function, build `bproto` object with name `_anonymous_` */ +/* and build a expdesc for the bproto */ static void anon_func(bparser *parser, bexpdesc *e) { bproto *proto; - bstring *name = parser_newstr(parser, ""); + bstring *name = parser_newstr(parser, "_anonymous_"); /* 'def' ID '(' varlist ')' block 'end' */ scan_next_token(parser); /* skip 'def' */ proto = funcbody(parser, name, FUNC_ANONYMOUS); @@ -545,11 +631,7 @@ static void lambda_varlist(bparser *parser) str = next_token(parser).u.s; match_token(parser, TokenId); /* match and skip ID */ /* new local variable */ - if (find_localvar(parser->finfo, str, 0) == -1) { - new_var(parser, str, &v); - } else { - push_error(parser, "redefinition of '%s'", str(str)); - } + new_var(parser, str, &v); } } match_token(parser, OptArrow); /* skip '->' */ @@ -576,6 +658,9 @@ static void lambda_expr(bparser *parser, bexpdesc *e) be_stackpop(parser->vm, 1); } +/* Instanciate a builtin type by name */ +/* Allocates a new register for the value, and call empty constructor */ +/* Is allocated as LOCAL and must be changed to REG when completed */ static void new_primtype(bparser *parser, const char *type, bexpdesc *e) { int idx; @@ -587,17 +672,19 @@ static void new_primtype(bparser *parser, const char *type, bexpdesc *e) init_exp(e, ETGLOBAL, idx); idx = be_code_nextreg(finfo, e); be_code_call(finfo, idx, 0); - e->type = ETLOCAL; + e->type = ETLOCAL; /* declare as local, will be changed to ETREG when completely initialized */ } +/* Parse next member within a list */ +/* `l` contains the current list. The expr is evaluated and added to the list */ static void list_nextmember(bparser *parser, bexpdesc *l) { bexpdesc e, v = *l; bfuncinfo *finfo = parser->finfo; expr(parser, &e); /* value */ - check_var(parser, &e); - be_code_binop(finfo, OptConnect, &v, &e); - be_code_freeregs(finfo, 1); + check_var(parser, &e); /* check that we don´t have an unknown symbol */ + be_code_binop(finfo, OptConnect, &v, &e, -1); /* add it to list with CONNECT */ + be_code_freeregs(finfo, 1); /* since left arg is LOCAL, an ETREG was allocated. Free it */ } static void map_nextmember(bparser *parser, bexpdesc *l) @@ -605,25 +692,25 @@ static void map_nextmember(bparser *parser, bexpdesc *l) bexpdesc e, v = *l; bfuncinfo *finfo = parser->finfo; expr(parser, &e); /* key */ - check_var(parser, &e); - be_code_index(finfo, &v, &e); + check_var(parser, &e); /* check if value is valid */ + be_code_index(finfo, &v, &e); /* package as `v` as INDEX suffix for value `e` */ match_token(parser, OptColon); /* ':' */ - expr(parser, &e); /* value */ - check_var(parser, &e); - be_code_setvar(finfo, &v, &e); + expr(parser, &e); /* value in `e` */ + check_var(parser, &e); /* check if value is correct */ + be_code_setvar(finfo, &v, &e); /* set suffi INDEX value to e */ } static void list_expr(bparser *parser, bexpdesc *e) { /* '[' {expr ','} [expr] ']' */ - new_primtype(parser, "list", e); /* new list */ + new_primtype(parser, "list", e); /* new list, created as LOCAL first */ while (next_type(parser) != OptRSB) { list_nextmember(parser, e); if (!match_skip(parser, OptComma)) { /* ',' */ break; } } - e->type = ETREG; + e->type = ETREG; /* then turned to REG */ match_token(parser, OptRSB); /* skip ']' */ } @@ -641,14 +728,16 @@ static void map_expr(bparser *parser, bexpdesc *e) match_token(parser, OptRBR); /* skip '}' */ } +/* push each argument as new reg and return number of args */ +/* TODO `e` is ignored by caller */ static int exprlist(bparser *parser, bexpdesc *e) { bfuncinfo *finfo = parser->finfo; int n = 1; /* expr { ',' expr } */ - expr(parser, e); - check_var(parser, e); - be_code_nextreg(finfo, e); + expr(parser, e); /* parse expr */ + check_var(parser, e); /* check if valid */ + be_code_nextreg(finfo, e); /* move result to next reg */ while (match_skip(parser, OptComma)) { /* ',' */ expr(parser, e); check_var(parser, e); @@ -658,6 +747,9 @@ static int exprlist(bparser *parser, bexpdesc *e) return n; } +/* parse call to method or function */ +/* `e` can be a member (method) or a register */ +/* On return, `e` is ETREG to the result of the call */ static void call_expr(bparser *parser, bexpdesc *e) { bexpdesc args; @@ -671,14 +763,15 @@ static void call_expr(bparser *parser, bexpdesc *e) if (ismember) { base = be_code_getmethod(finfo, e); } else { - base = be_code_nextreg(finfo, e); + base = be_code_nextreg(finfo, e); /* allocate a new base reg if not at top already */ } + /* base is always taken at top of freereg and allocates 1 reg for function and 2 regs for method */ scan_next_token(parser); /* skip '(' */ - if (next_type(parser) != OptRBK) { - argc = exprlist(parser, &args); + if (next_type(parser) != OptRBK) { /* if arg list is not empty */ + argc = exprlist(parser, &args); /* push each argument as new reg and return number of args */ } match_token(parser, OptRBK); /* skip ')' */ - argc += ismember; + argc += ismember; /* if method there is an additional implicit arg */ be_code_call(finfo, base, argc); if (e->type != ETREG) { e->type = ETREG; @@ -686,6 +779,8 @@ static void call_expr(bparser *parser, bexpdesc *e) } } +/* Parse member expression */ +/* Generates an ETMEMBER object that is materialized later into GETMBR, GETMET or SETMBR */ static void member_expr(bparser *parser, bexpdesc *e) { bstring *str; @@ -697,6 +792,13 @@ static void member_expr(bparser *parser, bexpdesc *e) init_exp(&key, ETSTRING, 0); key.v.s = str; be_code_member(parser->finfo, e, &key); + } else if (next_type(parser) == OptLBK) { + scan_next_token(parser); /* skip '(' */ + bexpdesc key; + expr(parser, &key); + check_var(parser, &key); + match_token(parser, OptRBK); /* skip ')' */ + be_code_member(parser->finfo, e, &key); } else { push_error(parser, "invalid syntax near '%s'", be_token2str(parser->vm, &next_token(parser))); @@ -798,10 +900,12 @@ static void suffix_expr(bparser *parser, bexpdesc *e) static void suffix_alloc_reg(bparser *parser, bexpdesc *l) { bfuncinfo *finfo = parser->finfo; - bbool suffix = l->type == ETINDEX || l->type == ETMEMBER; + bbool is_suffix = l->type == ETINDEX || l->type == ETMEMBER; /* is suffix */ + bbool is_suffix_reg = l->v.ss.tt == ETREG || l->v.ss.tt == ETLOCAL || l->v.ss.tt == ETGLOBAL || l->v.ss.tt == ETNGLOBAL; /* if suffix, does it need a register */ + bbool is_global = l->type == ETGLOBAL || l->type == ETNGLOBAL; /* in the suffix expression, if the object is a temporary * variable (l->v.ss.tt == ETREG), it needs to be cached. */ - if (suffix && l->v.ss.tt == ETREG) { + if (is_global || (is_suffix && is_suffix_reg)) { be_code_allocregs(finfo, 1); } } @@ -809,9 +913,11 @@ static void suffix_alloc_reg(bparser *parser, bexpdesc *l) /* compound assignment */ static void compound_assign(bparser *parser, int op, bexpdesc *l, bexpdesc *r) { + int dst = -1; /* destination register in case of compound assignment */ if (op != OptAssign) { /* check left variable */ check_var(parser, l); /* cache the register of the object when continuously assigning */ + dst = parser->finfo->freereg; suffix_alloc_reg(parser, l); } expr(parser, r); /* right expression */ @@ -820,20 +926,37 @@ static void compound_assign(bparser *parser, int op, bexpdesc *l, bexpdesc *r) bexpdesc e = *l; op = op < OptAndAssign ? op - OptAddAssign + OptAdd : op - OptAndAssign + OptBitAnd; - be_code_binop(parser->finfo, op, &e, r); /* coding operation */ + be_code_binop(parser->finfo, op, &e, r, dst); /* coding operation */ *r = e; } } +/* check if we need to create a new local variable with this name to be assigned to */ +/* Returns true if it´s a new local variable */ +/* A new implicit local variable is created if no global has the same name (excluding builtins) */ +/* This means that you can override a builtin silently */ +/* This also means that a function cannot create a global, they must preexist or create with `global` module */ +/* TODO add warning in strict mode */ static int check_newvar(bparser *parser, bexpdesc *e) { if (e->type == ETGLOBAL) { if (e->v.idx < be_builtin_count(parser->vm)) { e->v.s = be_builtin_name(parser->vm, e->v.idx); + if (comp_is_strict(parser->vm)) { + push_error(parser, "strict: redefinition of builtin '%s'", + str(e->v.s)); + } return btrue; } return bfalse; } + if (comp_is_strict(parser->vm)) { + bfuncinfo *finfo = parser->finfo; + if ((e->type == ETVOID) && (finfo->prev || finfo->binfo->prev || parser->islocal)) { + push_error(parser, "strict: no global '%s', did you mean 'var %s'?", + str(e->v.s), str(e->v.s)); + } + } return e->type == ETVOID; } @@ -875,6 +998,7 @@ static void cond_expr(bparser *parser, bexpdesc *e) if (next_type(parser) == OptQuestion) { int jf, jl = NO_JUMP; /* jump list */ bfuncinfo *finfo = parser->finfo; + check_var(parser, e); /* check if valid */ scan_next_token(parser); /* skip '?' */ be_code_jumpbool(finfo, e, bfalse); /* go if true */ jf = e->f; @@ -899,39 +1023,42 @@ static void cond_expr(bparser *parser, bexpdesc *e) static void sub_expr(bparser *parser, bexpdesc *e, int prio) { bfuncinfo *finfo = parser->finfo; - btokentype op = get_unary_op(parser); - if (op != OP_NOT_UNARY) { + btokentype op = get_unary_op(parser); /* check if first token in unary op */ + if (op != OP_NOT_UNARY) { /* unary op found */ int line, res; - scan_next_token(parser); - line = parser->lexer.linenumber; - sub_expr(parser, e, UNARY_OP_PRIO); - check_var(parser, e); - res = be_code_unop(finfo, op, e); + scan_next_token(parser); /* move to next token */ + line = parser->lexer.linenumber; /* remember line number for error reporting */ + sub_expr(parser, e, UNARY_OP_PRIO); /* parse subexpr with new prio */ + check_var(parser, e); /* check that the value is ok */ + res = be_code_unop(finfo, op, e); /* apply unary op with optimizations if the token is a value */ if (res) { /* encode unary op */ parser->lexer.linenumber = line; push_error(parser, "wrong type argument to unary '%s'", res == 1 ? "negative" : "bit-flip"); } } else { - suffix_expr(parser, e); + suffix_expr(parser, e); /* parse left part of binop */ } - op = get_binop(parser); - while (op != OP_NOT_BINARY && prio > binary_op_prio(op)) { + op = get_binop(parser); /* check if binop */ + while (op != OP_NOT_BINARY && prio > binary_op_prio(op)) { /* is binop applicable */ bexpdesc e2; - check_var(parser, e); - scan_next_token(parser); + check_var(parser, e); /* check that left part is valid */ + scan_next_token(parser); /* move to next token */ be_code_prebinop(finfo, op, e); /* and or */ init_exp(&e2, ETVOID, 0); - sub_expr(parser, &e2, binary_op_prio(op)); - check_var(parser, &e2); - be_code_binop(finfo, op, e, &e2); /* encode binary op */ - op = get_binop(parser); + sub_expr(parser, &e2, binary_op_prio(op)); /* parse right side */ + check_var(parser, &e2); /* check if valid */ + be_code_binop(finfo, op, e, &e2, -1); /* encode binary op */ + op = get_binop(parser); /* is there a following binop? */ } if (prio == ASSIGN_OP_PRIO) { cond_expr(parser, e); } } +/* Parse new expression and return value in `e` (overwritten) */ +/* Initializes an empty expdes and parse subexpr */ +/* Always allocates a new temp register at top of freereg */ static void expr(bparser *parser, bexpdesc *e) { init_exp(e, ETVOID, 0); @@ -1208,7 +1335,7 @@ static void return_stmt(bparser *parser) static void check_class_attr(bparser *parser, bclass *c, bstring *attr) { - if (be_class_attribute(parser->vm, c, attr) != BE_NIL) { + if (be_class_attribute(parser->vm, c, attr) != BE_NONE) { push_error(parser, "redefinition of the attribute '%s'", str(attr)); } @@ -1221,11 +1348,11 @@ static void classvar_stmt(bparser *parser, bclass *c) scan_next_token(parser); /* skip 'var' */ if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name); + be_member_bind(parser->vm, c, name, btrue); while (match_skip(parser, OptComma)) { /* ',' */ if (match_id(parser, name) != NULL) { check_class_attr(parser, c, name); - be_member_bind(parser->vm, c, name); + be_member_bind(parser->vm, c, name, btrue); } else { parser_error(parser, "class var error"); } @@ -1235,6 +1362,47 @@ static void classvar_stmt(bparser *parser, bclass *c) } } +static void class_static_assignment_expr(bparser *parser, bexpdesc *e, bstring *name) +{ + if (match_skip(parser, OptAssign)) { /* '=' */ + bexpdesc e1, e2; + /* parse the right expression */ + expr(parser, &e2); + + e1 = *e; /* copy the class description */ + bexpdesc key; /* build the member key */ + init_exp(&key, ETSTRING, 0); + key.v.s = name; + + be_code_member(parser->finfo, &e1, &key); /* compute member accessor */ + be_code_setvar(parser->finfo, &e1, &e2); /* set member */ + } +} + +static void classstatic_stmt(bparser *parser, bclass *c, bexpdesc *e) +{ + bstring *name; + /* 'static' ID ['=' expr] {',' ID ['=' expr] } */ + scan_next_token(parser); /* skip 'static' */ + if (match_id(parser, name) != NULL) { + check_class_attr(parser, c, name); + be_member_bind(parser->vm, c, name, bfalse); + class_static_assignment_expr(parser, e, name); + + while (match_skip(parser, OptComma)) { /* ',' */ + if (match_id(parser, name) != NULL) { + check_class_attr(parser, c, name); + be_member_bind(parser->vm, c, name, bfalse); + class_static_assignment_expr(parser, e, name); + } else { + parser_error(parser, "class static error"); + } + } + } else { + parser_error(parser, "class static error"); + } +} + static void classdef_stmt(bparser *parser, bclass *c) { bexpdesc e; @@ -1252,20 +1420,22 @@ static void classdef_stmt(bparser *parser, bclass *c) static void class_inherit(bparser *parser, bexpdesc *e) { if (next_type(parser) == OptColon) { /* ':' */ + bexpdesc ec = *e; /* work on a copy because we preserve original class */ bexpdesc e1; scan_next_token(parser); /* skip ':' */ expr(parser, &e1); check_var(parser, &e1); - be_code_setsuper(parser->finfo, e, &e1); + be_code_setsuper(parser->finfo, &ec, &e1); } } -static void class_block(bparser *parser, bclass *c) +static void class_block(bparser *parser, bclass *c, bexpdesc *e) { /* { [;] } */ while (block_follow(parser)) { switch (next_type(parser)) { case KeyVar: classvar_stmt(parser, c); break; + case KeyStatic: classstatic_stmt(parser, c, e); break; case KeyDef: classdef_stmt(parser, c); break; case OptSemic: scan_next_token(parser); break; default: push_error(parser, @@ -1285,7 +1455,7 @@ static void class_stmt(bparser *parser) new_var(parser, name, &e); be_code_class(parser->finfo, &e, c); class_inherit(parser, &e); - class_block(parser, c); + class_block(parser, c, &e); be_class_compress(parser->vm, c); /* compress class size */ match_token(parser, KeyEnd); /* skip 'end' */ } else { @@ -1520,7 +1690,7 @@ bclosure* be_parser_source(bvm *vm, mainfunc(&parser, cl); be_lexer_deinit(&parser.lexer); be_global_release_space(vm); /* clear global space */ - be_stackpop(vm, 1); + be_stackpop(vm, 2); /* pop strtab */ scan_next_token(&parser); /* clear lexer */ return cl; } diff --git a/lib/libesp32/Berry/src/be_parser.h b/lib/libesp32/Berry/src/be_parser.h index 47c9f6f48..5b5510f2c 100644 --- a/lib/libesp32/Berry/src/be_parser.h +++ b/lib/libesp32/Berry/src/be_parser.h @@ -12,7 +12,7 @@ #include "be_string.h" typedef enum { - ETVOID, + ETVOID, /* unknown (new variable or error) */ ETNIL, ETBOOL, ETREAL, @@ -20,12 +20,13 @@ typedef enum { ETSTRING, ETPROTO, ETCONST, - ETLOCAL, - ETGLOBAL, + ETLOCAL, /* local variable, allocated until end of scope */ + ETGLOBAL, /* global by index number */ ETUPVAL, - ETMEMBER, - ETINDEX, - ETREG + ETMEMBER, /* member accessor (by name) */ + ETINDEX, /* index accessor (ex array index) */ + ETREG, /* temporary register, can be freed if top of stack */ + ETNGLOBAL /* named global */ } exptype_t; typedef struct { diff --git a/lib/libesp32/Berry/src/be_solidifylib.c b/lib/libesp32/Berry/src/be_solidifylib.c index c0f66da81..8e4447a9a 100644 --- a/lib/libesp32/Berry/src/be_solidifylib.c +++ b/lib/libesp32/Berry/src/be_solidifylib.c @@ -18,6 +18,7 @@ #include #if BE_USE_SOLIDIFY_MODULE +#include #ifndef INST_BUF_SIZE #define INST_BUF_SIZE 96 @@ -32,105 +33,138 @@ be_writestring(__lbuf); \ } while (0) -/* output only valid types for ktab, or NULL */ -static const char * m_type_ktab(int type) +static void m_solidify_bvalue(bvm *vm, bvalue * value) { - switch (type){ - case BE_NIL: return "BE_NIL"; - case BE_INT: return "BE_INT"; - case BE_REAL: return "BE_REAL"; - case BE_BOOL: return "BE_BOOL"; - case BE_STRING: return "BE_STRING"; - default: return NULL; + int type = var_type(value); + switch (type) { + case BE_NIL: + logfmt("be_const_nil()"); + break; + case BE_BOOL: + logfmt("be_const_bool(%i)", var_tobool(value)); + break; + case BE_INT: +#if BE_INTGER_TYPE == 2 + logfmt("be_const_int(%lli)", var_toint(value)); +#else + logfmt("be_const_int(%li)", var_toint(value)); +#endif + break; + case BE_INDEX: +#if BE_INTGER_TYPE == 2 + logfmt("be_const_var(%lli)", var_toint(value)); +#else + logfmt("be_const_var(%li)", var_toint(value)); +#endif + break; + case BE_REAL: +#if BE_USE_SINGLE_FLOAT + logfmt("be_const_real_hex(0x%08X)", (uint32_t) var_toobj(value)); +#else + logfmt("be_const_real_hex(0x%016" PRIx64 ")", (uint64_t)var_toobj(value)); +#endif + break; + case BE_STRING: + { + logfmt("be_nested_string(\""); + be_writestring(str(var_tostr(value))); + size_t len = strlen(str(var_tostr(value))); + if (len >= 255) { + be_raise(vm, "internal_error", "Strings greater than 255 chars not supported yet"); + } + logfmt("\", %i, %zu)", be_strhash(var_tostr(value)), len >= 255 ? 255 : len); + } + break; + case BE_CLOSURE: + logfmt("be_const_closure(%s_closure)", str(((bclosure*) var_toobj(value))->proto->name)); + break; + case BE_CLASS: + logfmt("be_const_class(be_class_%s)", str(((bclass*) var_toobj(value))->name)); + break; + default: + { + char error[64]; + snprintf(error, sizeof(error), "Unsupported type in function constants: %i", type); + be_raise(vm, "internal_error", error); + } } } -static void m_solidify_proto(bvm *vm, bproto *pr, const char * func_name, int builtins) +static void m_solidify_subclass(bvm *vm, bclass *cl, int builtins); + +/* solidify any inner class */ +static void m_solidify_proto_inner_class(bvm *vm, bproto *pr, int builtins) +{ + // parse any class in constants to output it first + if (pr->nconst > 0) { + for (int k = 0; k < pr->nconst; k++) { + if (var_type(&pr->ktab[k]) == BE_CLASS) { + // output the class + m_solidify_subclass(vm, (bclass*) var_toobj(&pr->ktab[k]), builtins); + } + } + } +} + + +static void m_solidify_proto(bvm *vm, bproto *pr, const char * func_name, int builtins, int indent) { // const char * func_name = str(pr->name); const char * func_source = str(pr->source); + logfmt("%*sbe_nested_proto(\n", indent, ""); + indent += 2; + + logfmt("%*s%d, /* nstack */\n", indent, "", pr->nstack); + logfmt("%*s%d, /* argc */\n", indent, "", pr->argc); + logfmt("%*s%d, /* varg */\n", indent, "", pr->varg); + logfmt("%*s%d, /* has upvals */\n", indent, "", (pr->nupvals > 0) ? 1 : 0); + + if (pr->nupvals > 0) { + logfmt("%*s( &(const bupvaldesc[%2d]) { /* upvals */\n", indent, "", pr->nupvals); + for (int32_t i = 0; i < pr->nupvals; i++) { + logfmt("%*s be_local_const_upval(%i, %i),\n", indent, "", pr->upvals[i].instack, pr->upvals[i].idx); + } + logfmt("%*s}),\n", indent, ""); + } else { + logfmt("%*sNULL, /* no upvals */\n", indent, ""); + } + + logfmt("%*s%d, /* has sup protos */\n", indent, "", (pr->nproto > 0) ? 1 : 0); if (pr->nproto > 0) { + logfmt("%*s( &(const struct bproto*[%2d]) {\n", indent, "", pr->nproto); for (int32_t i = 0; i < pr->nproto; i++) { size_t sub_len = strlen(func_name) + 10; char sub_name[sub_len]; snprintf(sub_name, sizeof(sub_name), "%s_%d", func_name, i); - m_solidify_proto(vm, pr->ptab[i], sub_name, builtins); + m_solidify_proto(vm, pr->ptab[i], sub_name, builtins, indent+2); + logfmt(",\n"); } + logfmt("%*s}),\n", indent, ""); + } else { + logfmt("%*sNULL, /* no sub protos */\n", indent, ""); } - logfmt("\n/********** Solidified proto: %s */\n", func_name); - - if (pr->nproto > 0) { - logfmt("static const bproto *%s_subproto[%i] = {\n", func_name, pr->nproto); - for (int32_t i = 0; i < pr->nproto; i++) { - logfmt(" &%s_%d_proto,\n", func_name, i); - // logfmt(" be_local_const_upval(%i, %i),\n", pr->upvals[i].instack, pr->upvals[i].idx); TODO - } - logfmt("};\n\n"); - } - - if (pr->nupvals > 0) { - logfmt("static const bupvaldesc %s_upvals[%i] = {\n", func_name, pr->nupvals); - for (int32_t i = 0; i < pr->nupvals; i++) { - logfmt(" be_local_const_upval(%i, %i),\n", pr->upvals[i].instack, pr->upvals[i].idx); - // logfmt("// upval[%d] = { .instack = %i, .idx = %i }\n", i, pr->upvals[i].instack, pr->upvals[i].idx); - } - logfmt("};\n\n"); - } - - /* create static strings for name and source */ - logfmt("be_define_local_const_str(%s_str_name, \"%s\", %i, %u);\n", - func_name, str(pr->name), be_strhash(pr->name), str_len(pr->name)); - logfmt("be_define_local_const_str(%s_str_source, \"%s\", %i, %u);\n", - func_name, func_source, be_strhash(pr->source), str_len(pr->source)); - - /* create static strings first */ - for (int i = 0; i < pr->nconst; i++) { - if (pr->ktab[i].type == BE_STRING) { - logfmt("be_define_local_const_str(%s_str_%i, \"", - func_name, i); - be_writestring(str(pr->ktab[i].v.s)); - size_t len = strlen(str(pr->ktab[i].v.s)); - if (len >= 255) { - be_raise(vm, "internal_error", "Strings greater than 255 chars not supported yet"); - } - logfmt("\", %i, %zu);\n", be_strhash(pr->ktab[i].v.s), len >= 255 ? 255 : len); - } - } - logfmt("\n"); - + logfmt("%*s%d, /* has constants */\n", indent, "", (pr->nconst > 0) ? 1 : 0); if (pr->nconst > 0) { - logfmt("static const bvalue %s_ktab[%i] = {\n", func_name, pr->nconst); + logfmt("%*s( &(const bvalue[%2d]) { /* constants */\n", indent, "", pr->nconst); for (int k = 0; k < pr->nconst; k++) { - int type = pr->ktab[k].type; - const char *type_name = m_type_ktab(type); - if (type_name == NULL) { - char error[64]; - snprintf(error, sizeof(error), "Unsupported type in function constants: %i", type); - be_raise(vm, "internal_error", error); - } - if (type == BE_STRING) { - logfmt(" { { .s=be_local_const_str(%s_str_%i) }, %s},\n", func_name, k, type_name); - } else if (type == BE_INT) { - logfmt(" { { .i=%" BE_INT_FMTLEN "i }, %s},\n", pr->ktab[k].v.i, type_name); - } else if (type == BE_REAL) { - #if BE_USE_SINGLE_FLOAT - logfmt(" { { .p=(void*)0x%08X }, %s},\n", (uint32_t) pr->ktab[k].v.p, type_name); - #else - logfmt(" { { .p=(void*)0x%016llX }, %s},\n", (uint64_t) pr->ktab[k].v.p, type_name); - #endif - } else if (type == BE_BOOL) { - logfmt(" { { .b=%i }, %s},\n", pr->ktab[k].v.b, type_name); - } + logfmt("%*s/* K%-3d */ ", indent, "", k); + m_solidify_bvalue(vm, &pr->ktab[k]); + logfmt(",\n"); } - logfmt("};\n\n"); + logfmt("%*s}),\n", indent, ""); + } else { + logfmt("%*sNULL, /* no const */\n", indent, ""); } - logfmt("static const uint32_t %s_code[%i] = {\n", func_name, pr->codesize); + logfmt("%*s(be_nested_const_str(\"%s\", %i, %i)),\n", indent, "", str(pr->name), be_strhash(pr->name), str_len(pr->name)); + logfmt("%*s(be_nested_const_str(\"%s\", %i, %i)),\n", indent, "", func_source, be_strhash(pr->source), str_len(pr->source)); + + logfmt("%*s( &(const binstruction[%2d]) { /* code */\n", indent, "", pr->codesize); for (int pc = 0; pc < pr->codesize; pc++) { uint32_t ins = pr->code[pc]; - logfmt(" 0x%04X, //", ins); + logfmt("%*s 0x%08X, //", indent, "", ins); be_print_inst(ins, pc); bopcode op = IGET_OP(ins); if (op == OP_GETGBL || op == OP_SETGBL) { @@ -143,10 +177,10 @@ static void m_solidify_proto(bvm *vm, bproto *pr, const char * func_name, int bu } } } - logfmt("};\n\n"); + logfmt("%*s})\n", indent, ""); + indent -= 2; + logfmt("%*s)", indent, ""); - logfmt("be_define_local_proto(%s, %d, %d, %d, %d, %d);\n", - func_name, pr->nstack, pr->argc, (pr->nconst > 0) ? 1 : 0, (pr->nproto > 0) ? 1 : 0, (pr->nupvals > 0) ? 1 : 0); } static void m_solidify_closure(bvm *vm, bclosure *cl, int builtins) @@ -158,19 +192,104 @@ static void m_solidify_closure(bvm *vm, bclosure *cl, int builtins) be_raise(vm, "internal_error", "Unsupported upvals in closure"); } + int indent = 2; + + m_solidify_proto_inner_class(vm, pr, builtins); + logfmt("\n"); logfmt("/********************************************************************\n"); logfmt("** Solidified function: %s\n", func_name); logfmt("********************************************************************/\n"); - m_solidify_proto(vm, pr, func_name, builtins); + logfmt("be_local_closure(%s, /* name */\n", func_name); + + m_solidify_proto(vm, pr, func_name, builtins, indent); + logfmt("\n"); // closure - logfmt("be_define_local_closure(%s);\n\n", func_name); - + logfmt(");\n"); logfmt("/*******************************************************************/\n\n"); } +static void m_solidify_subclass(bvm *vm, bclass *cl, int builtins) +{ + const char * class_name = str(cl->name); + + /* iterate on members to dump closures */ + if (cl->members) { + bmapnode *node; + bmapiter iter = be_map_iter(); + while ((node = be_map_next(cl->members, &iter)) != NULL) { + if (var_isstr(&node->key) && var_isclosure(&node->value)) { + bclosure *f = var_toobj(&node->value); + m_solidify_closure(vm, f, builtins); + } + } + } + + + logfmt("\n"); + logfmt("/********************************************************************\n"); + logfmt("** Solidified class: %s\n", class_name); + logfmt("********************************************************************/\n"); + + if (cl->super) { + logfmt("extern const bclass be_class_%s;\n", str(cl->super->name)); + } + + logfmt("be_local_class(%s,\n", class_name); + logfmt(" %i,\n", cl->nvar); + if (cl->super) { + logfmt(" &be_class_%s,\n", str(cl->super->name)); + } else { + logfmt(" NULL,\n"); + } + + if (cl->members) { + logfmt(" be_nested_map(%i,\n", cl->members->count); + + logfmt(" ( (struct bmapnode*) &(const bmapnode[]) {\n"); + for (int i = 0; i < cl->members->count; i++) { + bmapnode * node = &cl->members->slots[i]; + if (node->key.type != BE_STRING) { + char error[64]; + snprintf(error, sizeof(error), "Unsupported type in key: %i", node->key.type); + be_raise(vm, "internal_error", error); + } + int key_next = node->key.next; + size_t len = strlen(str(node->key.v.s)); + if (0xFFFFFF == key_next) { + key_next = -1; /* more readable */ + } + logfmt(" { be_nested_key(\"%s\", %i, %zu, %i), ", str(node->key.v.s), be_strhash(node->key.v.s), len >= 255 ? 255 : len, key_next); + m_solidify_bvalue(vm, &node->value); + + logfmt(" },\n"); + } + logfmt(" })),\n"); + } else { + logfmt(" NULL,\n"); + } + + logfmt(" (be_nested_const_str(\"%s\", %i, %i))\n", class_name, be_strhash(cl->name), str_len(cl->name)); + logfmt(");\n"); + +} + + +static void m_solidify_class(bvm *vm, bclass *cl, int builtins) +{ + const char * class_name = str(cl->name); + m_solidify_subclass(vm, cl, builtins); + logfmt("/*******************************************************************/\n\n"); + + logfmt("void be_load_%s_class(bvm *vm) {\n", class_name); + logfmt(" be_pushntvclass(vm, &be_class_%s);\n", class_name); + logfmt(" be_setglobal(vm, \"%s\");\n", class_name); + logfmt(" be_pop(vm, 1);\n"); + logfmt("}\n"); +} + #define be_builtin_count(vm) \ be_vector_count(&(vm)->gbldesc.builtin.vlist) @@ -180,6 +299,8 @@ static int m_dump(bvm *vm) bvalue *v = be_indexof(vm, 1); if (var_isclosure(v)) { m_solidify_closure(vm, var_toobj(v), be_builtin_count(vm)); + } else if (var_isclass(v)) { + m_solidify_class(vm, var_toobj(v), be_builtin_count(vm)); } } be_return_nil(vm); diff --git a/lib/libesp32/Berry/src/be_strictlib.c b/lib/libesp32/Berry/src/be_strictlib.c new file mode 100644 index 000000000..b40329886 --- /dev/null +++ b/lib/libesp32/Berry/src/be_strictlib.c @@ -0,0 +1,40 @@ +/******************************************************************** +** Copyright (c) 2018-2021 Guan Wenliang & Stephan Hadinger +** This file is part of the Berry default interpreter. +** skiars@qq.com, https://github.com/Skiars/berry +** See Copyright Notice in the LICENSE file or at +** https://github.com/Skiars/berry/blob/master/LICENSE +********************************************************************/ +#include "be_object.h" +#include "be_module.h" +#include "be_string.h" +#include "be_vector.h" +#include "be_class.h" +#include "be_debug.h" +#include "be_map.h" +#include "be_vm.h" + +#if BE_USE_STRICT_MODULE + +static int m_init(bvm *vm) +{ + comp_set_strict(vm); /* enable compiler strict mode */ + be_return_nil(vm); +} + +#if !BE_USE_PRECOMPILED_OBJECT +be_native_module_attr_table(strict) { + be_native_module_function("init", m_init), +}; + +be_define_native_module(strict, NULL); +#else +/* @const_object_info_begin +module strict (scope: strict, depend: BE_USE_STRICT_MODULE) { + init, func(m_init) +} +@const_object_info_end */ +#include "../generate/be_fixed_strict.h" +#endif + +#endif /* BE_USE_STRICT_MODULE */ diff --git a/lib/libesp32/Berry/src/be_string.c b/lib/libesp32/Berry/src/be_string.c index d9685968f..b6890a937 100644 --- a/lib/libesp32/Berry/src/be_string.c +++ b/lib/libesp32/Berry/src/be_string.c @@ -55,7 +55,6 @@ int be_eqstr(bstring *s1, bstring *s2) blstring *ls2 = cast(blstring*, s2); return ls1->llen == ls2->llen && !strcmp(lstr(ls1), lstr(ls2)); } - // TODO one is long const and the other is long string /* const short strings */ if (gc_isconst(s1) || gc_isconst(s2)) { /* one of the two string is short const */ if (cast(bcstring*, s1)->hash && cast(bcstring*, s2)->hash) { diff --git a/lib/libesp32/Berry/src/be_strlib.c b/lib/libesp32/Berry/src/be_strlib.c index 67cb528c3..7b9bf8acf 100644 --- a/lib/libesp32/Berry/src/be_strlib.c +++ b/lib/libesp32/Berry/src/be_strlib.c @@ -80,6 +80,7 @@ static bstring* sim2str(bvm *vm, bvalue *v) case BE_BOOL: strcpy(sbuf, var_tobool(v) ? "true" : "false"); break; + case BE_INDEX: case BE_INT: sprintf(sbuf, BE_INT_FORMAT, var_toint(v)); break; @@ -96,6 +97,9 @@ static bstring* sim2str(bvm *vm, bvalue *v) case BE_MODULE: module2str(sbuf, v); break; + case BE_COMPTR: + sprintf(sbuf, "", var_toobj(v)); + break; default: strcpy(sbuf, "(unknow value)"); break; @@ -322,15 +326,47 @@ BERRY_API const char *be_str2num(bvm *vm, const char *str) return sout; } +static bstring* string_range(bvm *vm, bstring *str, binstance *range) +{ + bint lower, upper; + bint size = str_len(str); /* size of source string */ + // bint size = be_data_size(vm, -1); /* get source list size */ + /* get index range */ + bvalue temp; + be_instance_member(vm, range, be_newstr(vm, "__lower__"), &temp); + lower = var_toint(&temp); + be_instance_member(vm, range, be_newstr(vm, "__upper__"), &temp); + upper = var_toint(&temp); + /* protection scope */ + if (upper < 0) { upper = size + upper; } + if (lower < 0) { lower = size + lower; } + upper = upper < size ? upper : size - 1; + lower = lower < 0 ? 0 : lower; + if (lower > upper) { + return be_newstrn(vm, "", 0); /* empty string */ + } + return be_newstrn(vm, str(str) + lower, upper - lower + 1); + +} + /* string subscript operation */ bstring* be_strindex(bvm *vm, bstring *str, bvalue *idx) { if (var_isint(idx)) { int pos = var_toidx(idx); - if (pos < str_len(str)) { + int size = str_len(str); + if (pos < 0) { pos = size + pos; } + if ((pos < size) && (pos >= 0)) { return be_newstrn(vm, str(str) + pos, 1); } be_raise(vm, "index_error", "string index out of range"); + } else if (var_isinstance(idx)) { + binstance * ins = var_toobj(idx); + const char *cname = str(be_instance_name(ins)); + if (!strcmp(cname, "range")) { + return string_range(vm, str, ins); + } + // str(be_instance_name(i)) } be_raise(vm, "index_error", "string indices must be integers"); return NULL; @@ -511,11 +547,15 @@ static int str_format(bvm *vm) concat2(vm); p = get_mode(p + 1, mode); buf[0] = '\0'; - if (index > top) { + if (index > top && *p != '%') { be_raise(vm, "runtime_error", be_pushfstring(vm, "bad argument #%d to 'format': no value", index)); } switch (*p) { + case '%': + be_pushstring(vm, "%"); + --index; /* compensate the future ++index */ + break; case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': if (be_isint(vm, index)) { diff --git a/lib/libesp32/Berry/src/be_vm.c b/lib/libesp32/Berry/src/be_vm.c index 97fee645c..27cd4f685 100644 --- a/lib/libesp32/Berry/src/be_vm.c +++ b/lib/libesp32/Berry/src/be_vm.c @@ -12,6 +12,7 @@ #include "be_class.h" #include "be_func.h" #include "be_vector.h" +#include "be_list.h" #include "be_map.h" #include "be_module.h" #include "be_mem.h" @@ -28,14 +29,14 @@ #define vm_error(vm, except, ...) \ be_raise(vm, except, be_pushfstring(vm, __VA_ARGS__)) -#define RA() (reg + IGET_RA(ins)) -#define RKB() ((isKB(ins) ? ktab : reg) + KR2idx(IGET_RKB(ins))) -#define RKC() ((isKC(ins) ? ktab : reg) + KR2idx(IGET_RKC(ins))) +#define RA() (reg + IGET_RA(ins)) /* Get value of register A */ +#define RKB() ((isKB(ins) ? ktab : reg) + KR2idx(IGET_RKB(ins))) /* Get value of register or constant B */ +#define RKC() ((isKC(ins) ? ktab : reg) + KR2idx(IGET_RKC(ins))) /* Get value of register or constant C */ -#define var2cl(_v) cast(bclosure*, var_toobj(_v)) -#define var2real(_v) (var_isreal(_v) ? (_v)->v.r : (breal)(_v)->v.i) -#define val2bool(v) ((v) ? btrue : bfalse) -#define ibinop(op, a, b) ((a)->v.i op (b)->v.i) +#define var2cl(_v) cast(bclosure*, var_toobj(_v)) /* cast var to closure */ +#define var2real(_v) (var_isreal(_v) ? (_v)->v.r : (breal)(_v)->v.i) /* get var as real or convert to real if integer */ +#define val2bool(v) ((v) ? btrue : bfalse) /* get var as bool (trur if non zero) */ +#define ibinop(op, a, b) ((a)->v.i op (b)->v.i) /* apply binary operator to both arguments as integers */ #if BE_USE_DEBUG_HOOK #define DEBUG_HOOK() \ @@ -76,7 +77,7 @@ res = var_tobool(a) op var_tobool(b); \ } else if (var_isstr(a)) { /* string op string */ \ res = 1 op be_eqstr(a->v.s, b->v.s); \ - } else if (var_isclass(a) || var_isfunction(a)) { \ + } else if (var_isclass(a) || var_isfunction(a) || var_iscomptr(a)) { \ res = var_toobj(a) op var_toobj(b); \ } else { \ binop_error(vm, #op, a, b); \ @@ -122,6 +123,8 @@ _vm->cf->status = PRIM_FUNC; \ } +static void prep_closure(bvm *vm, bvalue *reg, int argc, int mode); + static void attribute_error(bvm *vm, const char *t, bvalue *b, bvalue *c) { const char *attr = var_isstr(c) ? str(var_tostr(c)) : be_vtype2str(c); @@ -149,6 +152,8 @@ static void call_error(bvm *vm, bvalue *v) "'%s' value is not callable", be_vtype2str(v)); } +/* Check that the return value is bool or raise an exception */ +/* `obj` and `method` are only passed for error reporting */ static void check_bool(bvm *vm, binstance *obj, const char *method) { if (!var_isbool(vm->top)) { @@ -182,25 +187,29 @@ static void do_linehook(bvm *vm) } #endif +/* Prepare the stack for the function/method call */ +/* `func` is a pointer to the function/method on the stack, it contains the closure before call and the result after the call */ +/* `nstackˋ is the stack depth used by the function (determined by compiler), we add BE_STACK_FREE_MIN as a safety margin */ static void precall(bvm *vm, bvalue *func, int nstack, int mode) { bcallframe *cf; - int expan = nstack + BE_STACK_FREE_MIN; - if (vm->stacktop < func + expan) { - size_t fpos = func - vm->stack; - be_stack_expansion(vm, expan); - func = vm->stack + fpos; + int expan = nstack + BE_STACK_FREE_MIN; /* `expan` is the minimum required space on the stack */ + if (vm->stacktop < func + expan) { /* do we have too little space left on the stack? */ + size_t fpos = func - vm->stack; /* compute offset of `func` from base stack, in case stack is reallocated and base address changes */ + be_stack_expansion(vm, expan); /* expand stack (vector object), warning stack address changes */ + func = vm->stack + fpos; /* recompute `func` address with new stack address */ } - be_stack_push(vm, &vm->callstack, NULL); - cf = be_stack_top(&vm->callstack); + be_stack_push(vm, &vm->callstack, NULL); /* push a NULL value on callstack */ + cf = be_stack_top(&vm->callstack); /* get address of new callframe at top of callstack */ cf->func = func - mode; - cf->top = vm->top; - cf->reg = vm->reg; - vm->reg = func + 1; - vm->top = vm->reg + nstack; - vm->cf = cf; + cf->top = vm->top; /* save previous stack top */ + cf->reg = vm->reg; /* save previous stack base */ + vm->reg = func + 1; /* new stack base is right after function */ + vm->top = vm->reg + nstack; /* new stack top is above the registers used by the function, so we don´t mess with them */ + vm->cf = cf; /* set new current callframe */ } +/* Prepare call of closure, setting the instruction pointer (ip) */ static void push_closure(bvm *vm, bvalue *func, int nstack, int mode) { bclosure *cl = var_toobj(func); @@ -228,7 +237,8 @@ static bbool obj2bool(bvm *vm, bvalue *var) binstance *obj = var_toobj(var); bstring *tobool = str_literal(vm, "tobool"); /* get operator method */ - if (be_instance_member(vm, obj, tobool, vm->top)) { + int type = be_instance_member(vm, obj, tobool, vm->top); + if (type != BE_NONE && type != BE_NIL) { vm->top[1] = *var; /* move self to argv[0] */ be_dofunc(vm, vm->top, 1); /* call method 'tobool' */ /* check the return value */ @@ -259,7 +269,7 @@ bbool be_value2bool(bvm *vm, bvalue *v) static void obj_method(bvm *vm, bvalue *o, bstring *attr, bvalue *dst) { binstance *obj = var_toobj(o); - int type = be_instance_member(vm, obj, attr, dst); + int type = be_instance_member_simple(vm, obj, attr, dst); if (basetype(type) != BE_FUNCTION) { vm_error(vm, "attribute_error", "the '%s' object has no method '%s'", @@ -267,27 +277,11 @@ static void obj_method(bvm *vm, bvalue *o, bstring *attr, bvalue *dst) } } -static int obj_attribute(bvm *vm, bvalue *o, bvalue *c, bvalue *dst) +static int obj_attribute(bvm *vm, bvalue *o, bstring *attr, bvalue *dst) { - bvalue instance = *o; /* save instance to send it later to member */ - bstring *attr = var_tostr(c); binstance *obj = var_toobj(o); int type = be_instance_member(vm, obj, attr, dst); - if (basetype(type) == BE_NIL) { /* if no method found, try virtual */ - /* get method 'member' */ - int type2 = be_instance_member(vm, obj, str_literal(vm, "member"), vm->top); - if (basetype(type2) == BE_FUNCTION) { - bvalue *top = vm->top; - top[1] = instance; /* move instance to argv[0] */ - top[2] = *c; /* move method name to argv[1] */ - vm->top += 3; /* prevent collection results */ - be_dofunc(vm, top, 2); /* call method 'member' */ - vm->top -= 3; - *dst = *vm->top; /* copy result to R(A) */ - type = var_type(dst); - } - } - if (basetype(type) == BE_NIL) { + if (type == BE_NONE) { vm_error(vm, "attribute_error", "the '%s' object has no attribute '%s'", str(be_instance_name(obj)), str(attr)); @@ -295,6 +289,32 @@ static int obj_attribute(bvm *vm, bvalue *o, bvalue *c, bvalue *dst) return type; } +static int class_attribute(bvm *vm, bvalue *o, bvalue *c, bvalue *dst) +{ + bstring *attr = var_tostr(c); + bclass *obj = var_toobj(o); + int type = be_class_member(vm, obj, attr, dst); + if (type == BE_NONE || type == BE_INDEX) { + vm_error(vm, "attribute_error", + "the '%s' class has no static attribute '%s'", + str(obj->name), str(attr)); + } + return type; +} + +static int module_attribute(bvm *vm, bvalue *o, bvalue *c, bvalue *dst) +{ + bstring *attr = var_tostr(c); + bmodule *module = var_toobj(o); + int type = be_module_attr(vm, module, attr, dst); + if (type == BE_NONE) { + vm_error(vm, "attribute_error", + "module '%s' has no member '%s'", + be_module_name(module), str(attr)); + } + return type; +} + static bbool object_eqop(bvm *vm, const char *op, bbool iseq, bvalue *a, bvalue *b) { @@ -421,6 +441,7 @@ BERRY_API bvm* be_vm_new(void) be_globalvar_init(vm); be_gc_setpause(vm, 1); be_loadlibs(vm); + vm->compopt = 0; #if BE_USE_OBSERVABILITY_HOOK vm->obshook = NULL; #endif @@ -454,9 +475,9 @@ static void vm_exec(bvm *vm) vm->cf->status |= BASE_FRAME; newframe: /* a new call frame */ be_assert(var_isclosure(vm->cf->func)); - clos = var_toobj(vm->cf->func); - ktab = clos->proto->ktab; - reg = vm->reg; + clos = var_toobj(vm->cf->func); /* `clos` is the current function/closure */ + ktab = clos->proto->ktab; /* `ktab` is the current constant table */ + reg = vm->reg; /* `reg` is the current stack base for the callframe */ vm_exec_loop() { opcase(LDNIL): { var_setnil(RA()); @@ -486,6 +507,34 @@ newframe: /* a new call frame */ *v = *be_global_var(vm, idx); dispatch(); } + opcase(GETNGBL): { /* get Global by name */ + bvalue *v = RA(); + bvalue *b = RKB(); + if (var_isstr(b)) { + bstring *name = var_tostr(b); + int idx = be_global_find(vm, name); + if (idx > -1) { + *v = *be_global_var(vm, idx); + } else { + vm_error(vm, "attribute_error", "'%s' undeclared", str(name)); + } + } else { + vm_error(vm, "internal_error", "global name must be a string"); + } + dispatch(); + } + opcase(SETNGBL): { /* set Global by name */ + bvalue *v = RA(); + bvalue *b = RKB(); + if (var_isstr(b)) { + bstring *name = var_tostr(b); + int idx = be_global_new(vm, name); + *be_global_var(vm, idx) = *v; + } else { + vm_error(vm, "internal_error", "global name must be a string"); + } + dispatch(); + } opcase(SETGBL): { bvalue *v = RA(); int idx = IGET_Bx(ins); @@ -694,7 +743,7 @@ newframe: /* a new call frame */ opcase(FLIP): { bvalue *dst = RA(), *a = RKB(); if (var_isint(a)) { - var_setint(dst, -a->v.i); + var_setint(dst, ~a->v.i); } else if (var_isinstance(a)) { ins_unop(vm, "~", *RKB()); reg = vm->reg; @@ -739,32 +788,14 @@ newframe: /* a new call frame */ opcase(GETMBR): { bvalue *a = RA(), *b = RKB(), *c = RKC(); if (var_isinstance(b) && var_isstr(c)) { - obj_attribute(vm, b, c, a); + obj_attribute(vm, b, var_tostr(c), a); + reg = vm->reg; + } else if (var_isclass(b) && var_isstr(c)) { + class_attribute(vm, b, c, a); reg = vm->reg; } else if (var_ismodule(b) && var_isstr(c)) { - bstring *attr = var_tostr(c); - bmodule *module = var_toobj(b); - bvalue *v = be_module_attr(vm, module, attr); - if (v) { - *a = *v; - } else { - bvalue *member = be_module_attr(vm, module, str_literal(vm, "member")); - var_setnil(a); - if (member && var_basetype(member) == BE_FUNCTION) { - bvalue *top = vm->top; - top[0] = *member; - top[1] = *c; /* move name to argv[0] */ - vm->top += 2; /* prevent collection results */ - be_dofunc(vm, top, 1); /* call method 'method' */ - vm->top -= 2; - *a = *vm->top; /* copy result to R(A) */ - } - if (var_basetype(a) == BE_NIL) { - vm_error(vm, "attribute_error", - "module '%s' has no attribute '%s'", - be_module_name(module), str(attr)); - } - } + module_attribute(vm, b, c, a); + reg = vm->reg; } else { attribute_error(vm, "attribute", b, c); } @@ -773,49 +804,23 @@ newframe: /* a new call frame */ opcase(GETMET): { bvalue *a = RA(), *b = RKB(), *c = RKC(); if (var_isinstance(b) && var_isstr(c)) { - bvalue self = *b; - bstring *attr = var_tostr(c); binstance *obj = var_toobj(b); - int type = obj_attribute(vm, b, c, a); + int type = obj_attribute(vm, b, var_tostr(c), a); reg = vm->reg; if (basetype(type) == BE_FUNCTION) { /* check if the object is a superinstance, if so get the lowest possible subclass */ while (obj->sub) { obj = obj->sub; } - var_setobj(&self, var_type(&self), obj); /* replace superinstance by lowest subinstance */ - a[1] = self; + var_setinstance(&a[1], obj); /* replace superinstance by lowest subinstance */ } else { vm_error(vm, "attribute_error", "class '%s' has no method '%s'", - str(be_instance_name(obj)), str(attr)); + str(be_instance_name(obj)), str(var_tostr(c))); } } else if (var_ismodule(b) && var_isstr(c)) { - bstring *attr = var_tostr(c); - bmodule *module = var_toobj(b); - bvalue *src = be_module_attr(vm, module, attr); - if (src) { - var_settype(a, NOT_METHOD); - a[1] = *src; - } else { - bvalue *member = be_module_attr(vm, module, str_literal(vm, "member")); - var_setnil(a); - if (member && var_basetype(member) == BE_FUNCTION) { - bvalue *top = vm->top; - top[0] = *member; - top[1] = *c; /* move name to argv[0] */ - vm->top += 2; /* prevent collection results */ - be_dofunc(vm, top, 1); /* call method 'method' */ - vm->top -= 2; - var_settype(a, NOT_METHOD); - a[1] = *vm->top; /* copy result to R(A) */ - } - if (var_basetype(a) == BE_NIL) { - vm_error(vm, "attribute_error", - "module '%s' has no method '%s'", - be_module_name(module), str(attr)); - } - } + module_attribute(vm, b, c, &a[1]); + var_settype(a, NOT_METHOD); } else { attribute_error(vm, "method", b, c); } @@ -833,26 +838,23 @@ newframe: /* a new call frame */ } dispatch(); } + if (var_isclass(a) && var_isstr(b)) { + bclass *obj = var_toobj(a); + bstring *attr = var_tostr(b); + if (!be_class_setmember(vm, obj, attr, c)) { + vm_error(vm, "attribute_error", + "class '%s' cannot assign to static attribute '%s'", + str(be_class_name(obj)), str(attr)); + } + dispatch(); + } if (var_ismodule(a) && var_isstr(b)) { bmodule *obj = var_toobj(a); bstring *attr = var_tostr(b); - bvalue tmp = *c; /* stack may change */ - bvalue *v = be_module_bind(vm, obj, attr); - if (v != NULL) { - *v = tmp; - dispatch(); - } - /* if it failed, try 'setmeemner' */ - bvalue *member = be_module_attr(vm, obj, str_literal(vm, "setmember")); - if (member && var_basetype(member) == BE_FUNCTION) { - bvalue *top = vm->top; - top[0] = *member; - top[1] = *b; /* move name to argv[0] */ - top[2] = tmp; /* move value to argv[1] */ - vm->top += 3; /* prevent collection results */ - be_dofunc(vm, top, 2); /* call method 'setmember' */ - vm->top -= 3; + if (be_module_setmember(vm, obj, attr, c)) { dispatch(); + } else { + // fall through exception below } } attribute_error(vm, "writable attribute", a, b); @@ -959,7 +961,7 @@ newframe: /* a new call frame */ dispatch(); } opcase(RAISE): { - if (IGET_RA(ins) < 2) { + if (IGET_RA(ins) < 2) { /* A==2 means no arguments are passed to RAISE, i.e. rethrow with current exception */ bvalue *top = vm->top; top[0] = *RKB(); /* push the exception value to top */ if (IGET_RA(ins)) { /* has exception argument? */ @@ -986,8 +988,8 @@ newframe: /* a new call frame */ dispatch(); } opcase(CALL): { - bvalue *var = RA(); - int mode = 0, argc = IGET_RKB(ins); + bvalue *var = RA(); /* `var` is the register for the call followed by arguments */ + int mode = 0, argc = IGET_RKB(ins); /* B contains number of arguments pushed on stack */ recall: /* goto: instantiation class and call constructor */ switch (var_type(var)) { case NOT_METHOD: @@ -995,8 +997,8 @@ newframe: /* a new call frame */ ++var, --argc, mode = 1; goto recall; case BE_CLASS: - if (be_class_newobj(vm, var_toobj(var), var, ++argc, mode)) { - reg = vm->reg + mode; + if (be_class_newobj(vm, var_toobj(var), var, ++argc, mode)) { /* instanciate object and find constructor */ + reg = vm->reg + mode; /* constructor found */ mode = 0; var = RA() + 1; /* to next register */ goto recall; /* call constructor */ @@ -1011,16 +1013,32 @@ newframe: /* a new call frame */ goto recall; /* call '()' method */ } case BE_CLOSURE: { - bvalue *v, *end; - bproto *proto = var2cl(var)->proto; - push_closure(vm, var, proto->nstack, mode); - reg = vm->reg; - v = reg + argc; - end = reg + proto->argc; - for (; v < end; ++v) { - var_setnil(v); - } - goto newframe; + // bvalue *v, *end; + // bproto *proto = var2cl(var)->proto; /* get proto for closure */ + // push_closure(vm, var, proto->nstack, mode); /* prepare stack for closure */ + // reg = vm->reg; /* `reg` has changed, now new base register */ + // v = reg + argc; /* end of provided arguments */ + // end = reg + proto->argc; /* end of expected arguments */ + // for (; v < end; ++v) { /* set all not provided arguments to nil */ + // var_setnil(v); + // } + // if (proto->varg) { /* there are vararg at the last argument, build the list */ + // /* code below uses mostly low-level calls for performance */ + // be_stack_require(vm, argc + 2); /* make sure we don't overflow the stack */ + // bvalue *top_save = vm->top; /* save original stack, we need fresh slots to create the 'list' instance */ + // vm->top = v; /* move top of stack right after last argument */ + // be_newobject(vm, "list"); /* this creates 2 objects on stack: list instance, BE_LIST object */ + // blist *list = var_toobj(vm->top-1); /* get low-level BE_LIST structure */ + // v = reg + proto->argc - 1; /* last argument */ + // for (; v < reg + argc; v++) { + // be_list_push(vm, list, v); /* push all varargs into list */ + // } + // *(reg + proto->argc - 1) = *(vm->top-2); /* change the vararg argument to now contain the list instance */ + // vm->top = top_save; /* restore top of stack pointer */ + // } + prep_closure(vm, var, argc, mode); + reg = vm->reg; /* `reg` has changed, now new base register */ + goto newframe; /* continue execution of the closure */ } case BE_NTVCLOS: { bntvclos *f = var_toobj(var); @@ -1037,14 +1055,10 @@ newframe: /* a new call frame */ break; } case BE_MODULE: { - bmodule *f = var_toobj(var); - bvalue *member = be_module_attr(vm, f, str_literal(vm, "()")); - if (member && var_basetype(member) == BE_FUNCTION) { - *var = *member; - goto recall; /* call '()' method */ - } else { - call_error(vm, var); - } + bvalue attr; + var_setstr(&attr, str_literal(vm, "()")); + module_attribute(vm, var, &attr, var); /* exception if not found */ + goto recall; /* call '()' method */ break; } default: @@ -1084,16 +1098,43 @@ newframe: /* a new call frame */ } } -static void do_closure(bvm *vm, bvalue *reg, int argc) +static void prep_closure(bvm *vm, bvalue *reg, int argc, int mode) { bvalue *v, *end; bproto *proto = var2cl(reg)->proto; - push_closure(vm, reg, proto->nstack, 0); + push_closure(vm, reg, proto->nstack, mode); v = vm->reg + argc; end = vm->reg + proto->argc; for (; v <= end; ++v) { var_setnil(v); } + if (proto->varg) { /* there are vararg at the last argument, build the list */ + /* code below uses mostly low-level calls for performance */ + be_stack_require(vm, argc + 2); /* make sure we don't overflow the stack */ + bvalue *top_save = vm->top; /* save original stack, we need fresh slots to create the 'list' instance */ + vm->top = v; /* move top of stack right after last argument */ + be_newobject(vm, "list"); /* this creates 2 objects on stack: list instance, BE_LIST object */ + blist *list = var_toobj(vm->top-1); /* get low-level BE_LIST structure */ + v = vm->reg + proto->argc - 1; /* last argument */ + for (; v < vm->reg + argc; v++) { + be_list_push(vm, list, v); /* push all varargs into list */ + } + *(vm->reg + proto->argc - 1) = *(vm->top-2); /* change the vararg argument to now contain the list instance */ + vm->top = top_save; /* restore top of stack pointer */ + } +} + +static void do_closure(bvm *vm, bvalue *reg, int argc) +{ + // bvalue *v, *end; + // bproto *proto = var2cl(reg)->proto; + // push_closure(vm, reg, proto->nstack, 0); + // v = vm->reg + argc; + // end = vm->reg + proto->argc; + // for (; v <= end; ++v) { + // var_setnil(v); + // } + prep_closure(vm, reg, argc, 0); vm_exec(vm); } diff --git a/lib/libesp32/Berry/src/be_vm.h b/lib/libesp32/Berry/src/be_vm.h index e2df0b475..627c8fcaf 100644 --- a/lib/libesp32/Berry/src/be_vm.h +++ b/lib/libesp32/Berry/src/be_vm.h @@ -10,6 +10,20 @@ #include "be_object.h" +#define comp_is_named_gbl(vm) ((vm)->compopt & (1<compopt |= (1<compopt &= ~(1<compopt & (1<compopt |= (1<compopt &= ~(1< b.add(1)) +assert_attribute_error(/-> b.add(2,2)) +assert_attribute_error(/-> b.resize(4)) +assert_attribute_error(/-> b.fromstring("aaaaa")) +assert_attribute_error(/-> b.fromb64('RFVmdw==')) +assert_attribute_error(/-> b.clear()) +assert_attribute_error(/-> b.bytes()) + +#- add -# +b=bytes("112233", -3) +assert(b+b == bytes("112233112233")) + +#- bytes mapped -# +b1=bytes("112233445566") +ptr=b1._buffer() +b2=bytes(ptr, -4) +assert(b2 == bytes("11223344")) +b2=bytes(ptr, 4) +assert(b2 == bytes("11223344")) +b2=bytes(ptr, 6) +assert(b2 == bytes("112233445566")) +assert(b1 == b2) + +b2.set(0,0xAABB,2) +assert(b2 == bytes("BBAA33445566")) +assert(b1 == bytes("BBAA33445566")) +assert(b1 == b2) \ No newline at end of file diff --git a/lib/libesp32/Berry/tests/class_const.be b/lib/libesp32/Berry/tests/class_const.be new file mode 100644 index 000000000..dda433174 --- /dev/null +++ b/lib/libesp32/Berry/tests/class_const.be @@ -0,0 +1,93 @@ +def assert_attribute_error(f) + try + f() + assert(false, 'unexpected execution flow') + except .. as e, m + assert(e == 'attribute_error') + end +end + +class A + static a + def init() self.b = 2 end + def f() end + var b + static c, s, r +end + +assert(A.a == nil) +assert(A.c == nil) +assert(A.s == nil) +assert_attribute_error(/-> A.b) +assert_attribute_error(/-> A.d) + +a = A() +assert(a.b == 2) +assert(a.a == nil) +assert(a.c == nil) + +A.a = 1 +A.c = 3 +A.s = "foo" +A.r = 3.5 +assert(a.a == 1) +assert(a.c == 3) +assert(A.a == 1) +assert(A.c == 3) +import gc gc.collect() +assert(A.s == "foo") +assert(a.s == "foo") +assert(A.r == 3.5) +assert(a.r == 3.5) + +#- test valid or invalid methods and members -# + +def assert_attribute_error(c) + try + compile(c)() + assert(false, 'unexpected execution flow') + except .. as e, m + assert(e == 'attribute_error') + end +end + +class A + var a, g + static h + def init() self.a = 1 end + def f(x, y) return type(self) end +end +a=A() +a.g = def (x, y) return type(x) end +A.h = def (x, y) return type(x) end + +assert(type(a.g) == 'function') +assert(type(a.h) == 'function') + +assert_attribute_error("a.g(1,2)") +assert(a.h(1) == 'instance') +# A.h(1) - error + +#- test static initializers -# +class A + static a = 1, b, c = 3.5, d = 42, e = "foo", f = [1], g = {} + var aa,ab +end + +assert(A.a == 1) +assert(A.b == nil) +assert(A.c == 3.5) +assert(A.d == 42) +assert(A.e == "foo") +assert(A.f == [1]) + +a = A() +assert(a.a == 1) +assert(a.b == nil) +assert(a.c == 3.5) +assert(a.d == 42) +assert(a.e == "foo") +assert(a.f == [1]) +assert(a.g == A.g) +assert(a.aa == nil) +assert(a.ab == nil) diff --git a/lib/libesp32/Berry/tests/compiler.be b/lib/libesp32/Berry/tests/compiler.be new file mode 100644 index 000000000..90303734f --- /dev/null +++ b/lib/libesp32/Berry/tests/compiler.be @@ -0,0 +1,28 @@ +#- test for issue #117 -# + +class A var a end +a=A() +a.a = ["foo", "bar"] + +s = nil +def fs(m) s = m end + +class B + var b, i + def nok() + fs(self.b.a[self.i]) # wrong behavior + end + def ok() + var i = self.i + fs(self.b.a[i]) # works correctly + end +end +b=B() +b.i=0 +b.b=a + +b.nok() +assert(s == "foo") + +b.ok() +assert(s == "foo") diff --git a/lib/libesp32/Berry/tests/compound.be b/lib/libesp32/Berry/tests/compound.be new file mode 100644 index 000000000..bda74c9e2 --- /dev/null +++ b/lib/libesp32/Berry/tests/compound.be @@ -0,0 +1,19 @@ +# test bug in compound statements + +a = 0 +assert(a == 0) +a += 1 +assert(a == 1) +a += 10/2 +assert(a == 6) + +class A var a def init() self.a = 1 end def f(x) self.a+=x/2 end def g(x) self.a = self.a + x/2 end end + +a = A() +assert(a.a == 1) +a.f(10) +assert(a.a == 6) +b=A() +assert(b.a == 1) +b.g(10) +assert(b.a == 6) \ No newline at end of file diff --git a/lib/libesp32/Berry/tests/introspect.be b/lib/libesp32/Berry/tests/introspect.be new file mode 100644 index 000000000..91531f57a --- /dev/null +++ b/lib/libesp32/Berry/tests/introspect.be @@ -0,0 +1,28 @@ +#- introspect -# +import introspect + +#- test for modules -# +m = module("m") +m.a = 1 +m.b = def () return "foo" end + +assert(introspect.members(m) == ['a', 'b']) +assert(introspect.get(m, 'a') == 1) +assert(type(introspect.get(m, 'b')) == 'function') + +introspect.set(m, 'a', 2) +assert(m.a == 2) + +#- test for instance -# +class A var a,b static c=1,d=2 def f() end end +a=A() + +assert(introspect.members(A) == ['a', 'f', 'b', 'c', 'd']) #- class members -# +assert(introspect.members(a) == ['a', 'f', 'b', 'c', 'd']) #- instance members -# + +assert(introspect.get(a, 'c') == 1) +assert(introspect.get(a, 'd') == 2) +assert(introspect.get(a, 'a') == nil) + +introspect.set(a, 'a', 3) +assert(a.a == 3) diff --git a/lib/libesp32/Berry/tests/lexergc.be b/lib/libesp32/Berry/tests/lexergc.be new file mode 100644 index 000000000..155800b95 --- /dev/null +++ b/lib/libesp32/Berry/tests/lexergc.be @@ -0,0 +1,12 @@ +#- check the gc bug fixed in #110 -# +#- Berry must be compiled with `#define BE_USE_DEBUG_GC 1` -# +#- for the initial bug to happen -# + +code = "()" #- this code triggers a lexer exception -# + +try + compile(code) + assert(false) #- this should never be reached -# +except .. as e, m + assert(m == "string:1: unexpected symbol near ')'") +end \ No newline at end of file diff --git a/lib/libesp32/Berry/tests/member_indirect.be b/lib/libesp32/Berry/tests/member_indirect.be new file mode 100644 index 000000000..046521acd --- /dev/null +++ b/lib/libesp32/Berry/tests/member_indirect.be @@ -0,0 +1,75 @@ +#- new syntax for indirect members -# + +#- module accessor -# +s_pi = 'pi' + +import math +assert(math.('pi') == math.pi) +assert(math.(s_pi) == math.pi) + +#- module writer -# +m = module("m") + +m.('aa') = 1 +m.('a' + 'b') = 2 +s_ac = 'ac' +m.(s_ac) = 3 +assert(m.aa == 1) +assert(m.ab == 2) +assert(m.ac == 3) +assert(m.('a'+'a') == 1) + +#- class accessor -# +class A1 + static a = 1, b = 2 + static s = "foo" + def f() return 0 end +end +assert(A1.a == 1) +assert(A1.b == 2) +assert(A1.s == "foo") +assert(type(A1.f) == 'function') + +#- instance accessor -# +class A2 + var a, b + static s_a = 'a' + def init(a,b) + self.(self.('s_a')) = a + self.('b') = b + end + def f(x) + return x+1 + end + def g(a,b) + return A2(a,b) + end +end +a = A2(1,2) + +#- reading members -# +assert(a.a == 1) +assert(a.b == 2) +assert(a.(A2.s_a) == 1) +assert(a.('b') == 2) + +#- writing members -# +a.('a') = 10 +a.('bb'[0]) = 11 +assert(a.a == 10) +assert(a.b == 11) + +#- calling methods -# +assert(a.f(1) == 2) +assert(a.('f')(2) == 3) + +#- mulit-level -# +assert(a.('g')(3,4).('a') == 3) +a.('a') = a.g(3,4) +assert(a.a.b == 4) +assert(a.('a').b == 4) +assert(a.('a').('b') == 4) +assert(a.a.('b') == 4) + +a.('a').('b') += 1 +assert(a.a.b == 5) diff --git a/lib/libesp32/Berry/tests/string.be b/lib/libesp32/Berry/tests/string.be index fad58f935..683f7d585 100644 --- a/lib/libesp32/Berry/tests/string.be +++ b/lib/libesp32/Berry/tests/string.be @@ -28,3 +28,9 @@ assert(s.split('a b c d e f', '1') == ['a b c d e f']) assert(s.split('a b c d e f', ' ') == ['a', 'b', 'c', 'd', 'e', 'f']) assert(s.split('a b c d e f', ' ', 2) == ['a', 'b', 'c d e f']) assert(s.split('a b c d e f', '') == ['a b c d e f']) + +assert(s.format("%%") == "%") +assert(s.format("%i%%", 12) == "12%") +assert(s.format("%i%%%i", 12, 13) == "12%13") +assert(s.format("%s%%", "foo") == "foo%") +assert(s.format("%.1f%%", 3.5) == "3.5%") diff --git a/lib/libesp32/Berry/tests/super_auto.be b/lib/libesp32/Berry/tests/super_auto.be new file mode 100644 index 000000000..8d7ede85f --- /dev/null +++ b/lib/libesp32/Berry/tests/super_auto.be @@ -0,0 +1,132 @@ +#- test for new auto class inference of super() -# + +#- test that we can call init() even if it's not defined -# +class Z end +z=Z() +assert(z.init != nil) +z.init() #- should do nothing -# + +#- check the old way still works -# +class A1 + var a + def init(a) + self.a = a + end +end +class B1:A1 + var b + def init(a,b) + super(self,A1).init(a) + self.b = b + end +end +class C1:B1 + var c + def init(a,b,c) + super(self,B1).init(a,b) + self.c = c + end +end +#- -# +c1=C1(1,2,3) +assert(c1.a == 1) +assert(c1.b == 2) +assert(c1.c == 3) + +#- test simple behavior -# +class A0 var a end +class B0:A0 var b end +class C0:B0 end +c0=C0() +assert(classof(c0) == C0) +assert(classof(super(c0)) == B0) +assert(classof(super(super(c0))) == A0) +assert(super(super(super(c0))) == nil) + +assert(super(C0) == B0) +assert(super(super(C0)) == A0) +assert(super(super(super(C0))) == nil) + +assert(classof(super(c0,B0)) == B0) +assert(classof(super(c0,A0)) == A0) + +#- test auto inference of target superclass -# +class A + var a + def init(a) + self.a = a + end +end +class B:A + var b + def init(a,b) + super(self).init(a) + self.b = b + end +end +class C:B + var c + def init(a,b,c) + super(self).init(a,b) + self.c = c + end +end +#- -# +c=C(1,2,3) + +assert(c.a == 1) +assert(c.b == 2) +assert(c.c == 3)class A +end +class B:A + var b + def init(a,b) super(self).init(a) self.b = b end +end +class C:B + var c + def init(a,b,c) super(self).init(a,b) self.c = c end +end +c=C(1,2,3) + +#- variant if A2 does not have an init() method, still works -# +class A2 + static a=1 +end +class B2:A2 + var b + def init(a,b) super(self).init(a) self.b = b end +end +class C2:B2 + var c + def init(a,b,c) super(self).init(a,b) self.c = c end +end +#- -# +c2=C2(1,2,3) +assert(c2.a == 1) +assert(c2.b == 2) +assert(c2.c == 3) + +#- difference in behavior whether the second arg is provided or not -# +class A3 +end +class B3:A3 + def b1() + return super(self) + end + def b2(c) + return super(self, c) + end +end +class C3:B3 +end +#- -# +b3=B3() +c3=C3() +assert(classof(c3.b1()) == A3) +assert(classof(b3.b1()) == A3) +assert(classof(c3.b2(B3)) == B3) +assert(classof(c3.b2(A3)) == A3) + +assert(classof(c3.b2(nil)) == B3) #- testing super(self,nil) in B3::b2() -# + +assert(c3.b2(C3) == nil) #- if specifying the current class, can't find any relevant class in supers -# \ No newline at end of file diff --git a/lib/libesp32/Berry/tests/super_leveled.be b/lib/libesp32/Berry/tests/super_leveled.be new file mode 100644 index 000000000..e88914941 --- /dev/null +++ b/lib/libesp32/Berry/tests/super_leveled.be @@ -0,0 +1,43 @@ +#- test for leveled use of super() -# + +#- setup -# +class A def r() return 'a' end def f() return self.r() end end +class B:A def r() return 'b' end def f() return super(self,A).f() + 'b' end end +class C:B def r() return 'c' end def f() return super(self,B).f() + 'c' end end +a=A() +b=B() +c=C() + +#- regular behavior -# +assert(classname(a) == 'A') +assert(classname(b) == 'B') +assert(classname(c) == 'C') +assert(a.r() == 'a') +assert(b.r() == 'b') +assert(c.r() == 'c') +assert(a.f() == 'a') + +#- standard use of super() -# +assert(super(a) == nil) +assert(super(A) == nil) +assert(classname(super(B)) == 'A') +assert(classname(super(C)) == 'B') +assert(classname(super(super(C))) == 'A') +assert(super(super(super(C))) == nil) + +#- super() levele -# +assert(super(a,A) == nil) +assert(super(b,B) == nil) +assert(super(c,C) == nil) +assert(classname(super(c,B)) == 'B') +assert(classname(super(c,A)) == 'A') +assert(super(c,map) == nil) #- not a parent class -# + +#- wrapping it all -# +assert(a.f() == 'a') +assert(b.f() == 'bb') + +#- the last one is tricky: + c.f() -> calls f() in class B -> calls f() in class A -> calls r() of overall class hence C +-# +assert(c.f() == 'cbc') \ No newline at end of file diff --git a/lib/libesp32/Berry/tests/vararg.be b/lib/libesp32/Berry/tests/vararg.be new file mode 100644 index 000000000..7dd3541d3 --- /dev/null +++ b/lib/libesp32/Berry/tests/vararg.be @@ -0,0 +1,14 @@ +#- vararg -# +def f(a,*b) return b end + +assert(f() == []) +assert(f(1) == []) +assert(f(1,2) == [2]) +assert(f(1,2,3) == [2, 3]) + +def g(*a) return a end + +assert(g() == []) +assert(g("foo") == ["foo"]) +assert(g("foo", nil) == ["foo", nil]) +assert(g("foo", nil, 2) == ["foo", nil, 2]) diff --git a/lib/libesp32/Berry/tools/coc/block_builder.cpp b/lib/libesp32/Berry/tools/coc/block_builder.cpp index 9cf05be95..acea6777c 100755 --- a/lib/libesp32/Berry/tools/coc/block_builder.cpp +++ b/lib/libesp32/Berry/tools/coc/block_builder.cpp @@ -33,10 +33,12 @@ block_builder::block_builder(const object_block *object, const macro_table *macr m_strtab.push_back(it->second); } - for (auto i : object->data) { - if (i.second.depend.empty() || macro->query(i.second.depend)) { - m_block.data[i.first] = i.second.value; - m_strtab.push_back(i.first); + for (auto key : object->data_ordered) { + auto second = object->data.at(key); + if (second.depend.empty() || macro->query(second.depend)) { + m_block.data[key] = second.value; + m_strtab.push_back(key); + m_block.data_ordered.push_back(key); /* record insertion order */ } } } @@ -106,10 +108,9 @@ std::string block_builder::vartab_tostring(const block &block) idxblk = block; idxblk.data.clear(); - for (auto it : block.data) { - varvec.push_back(it.second); - it.second = "int(" + std::to_string(index++) + ")"; - idxblk.data.insert(it); + for (auto key : block.data_ordered) { + varvec.push_back(block.data.at(key)); + idxblk.data[key] = "int(" + std::to_string(index++) + ")"; } ostr << map_tostring(idxblk, block.name + "_map", true) << std::endl; diff --git a/lib/libesp32/Berry/tools/coc/block_builder.h b/lib/libesp32/Berry/tools/coc/block_builder.h index 7eb82bd3e..1a45ada3e 100755 --- a/lib/libesp32/Berry/tools/coc/block_builder.h +++ b/lib/libesp32/Berry/tools/coc/block_builder.h @@ -28,6 +28,7 @@ private: std::string name; std::map attr; std::map data; + std::vector data_ordered; /* used to retrieve in insertion order */ }; std::string block_tostring(const block &block); diff --git a/lib/libesp32/Berry/tools/coc/coc_parser.cpp b/lib/libesp32/Berry/tools/coc/coc_parser.cpp index f1e86ecb5..2bbd69965 100644 --- a/lib/libesp32/Berry/tools/coc/coc_parser.cpp +++ b/lib/libesp32/Berry/tools/coc/coc_parser.cpp @@ -186,4 +186,5 @@ void coc_parser::parse_body_item(object_block *object) if (parse_char_continue(',')) value.depend = parse_tonewline(); object->data[key] = value; + object->data_ordered.push_back(key); } diff --git a/lib/libesp32/Berry/tools/coc/hash_map.cpp b/lib/libesp32/Berry/tools/coc/hash_map.cpp index 988b8a03a..e05ca4677 100755 --- a/lib/libesp32/Berry/tools/coc/hash_map.cpp +++ b/lib/libesp32/Berry/tools/coc/hash_map.cpp @@ -128,7 +128,7 @@ hash_map::entry hash_map::entry_modify(entry entry, int *var_count) { entry.key = coc::escape_operator(entry.key); if (entry.value == "var") { - entry.value = "be_const_int(" + entry.value = "be_const_var(" + std::to_string(*var_count) + ")"; ++(*var_count); } else { diff --git a/lib/libesp32/Berry/tools/coc/object_block.h b/lib/libesp32/Berry/tools/coc/object_block.h index 474545457..c437f2b62 100644 --- a/lib/libesp32/Berry/tools/coc/object_block.h +++ b/lib/libesp32/Berry/tools/coc/object_block.h @@ -20,6 +20,7 @@ struct object_block { std::string name; std::map attr; std::map data; + std::vector data_ordered; /* preserve order of keys */ }; #endif diff --git a/lib/libesp32/Berry/tools/coc/str_build.cpp b/lib/libesp32/Berry/tools/coc/str_build.cpp index affd5016e..ebc44301e 100644 --- a/lib/libesp32/Berry/tools/coc/str_build.cpp +++ b/lib/libesp32/Berry/tools/coc/str_build.cpp @@ -46,7 +46,7 @@ void str_build::keywords() { "var", opif + 14 }, { "do", opif + 15 }, { "import", opif + 16 }, { "as", opif + 17 }, { "try", opif + 18 }, { "except", opif + 19 }, - { "raise", opif + 20 } + { "raise", opif + 20 }, { "static", opif + 21 } }; for (auto it : tab) { make_ceil(it.first, it.second); diff --git a/lib/libesp32/Berry/tools/grammar/berry.bytecode b/lib/libesp32/Berry/tools/grammar/berry.bytecode index 9e150635d..2d71dde22 100755 --- a/lib/libesp32/Berry/tools/grammar/berry.bytecode +++ b/lib/libesp32/Berry/tools/grammar/berry.bytecode @@ -4,18 +4,13 @@ -- description -- -- a double dash ('--') start a line comment. --- a: n means that the size of entity 'a' is 'n' bytes. --- 'a: .n means that the size of entity 'a' is 'n' bits. --- a: --- b means that the entity 'a' is realized by the 'b' structure. --- a: --- b --- c 'b' and 'c' are arranged in a compact order (one byte alignment). +-- a: b means that the entity 'a' is realized by the 'b' structure. +-- a: b c 'b' and 'c' are arranged in a compact order (one byte alignment). -- [a] means that structure 'a' can be repeated 0 to any times. -- [a](b) means that structure 'a' can be repeated 'b' times. -- a | b means that the entity can be implemented by structure 'a' or 'b'. --- a -> b is equivalent to 'a: --- b'. +-- N a number indicates the byte count of the field (eg. 'a: 1'). +-- .N means the number of bits in the field (eg. 'a: .1'). -- only the first entity is a file entity (the root). ------------------------------------------------------------------------------- @@ -26,7 +21,7 @@ bytecode_file: -- little endian header: 8 magic_number: 3 -- 0xbecdfe (berry code file) - version: 1 -- update with file structure definition + version: 2 -- update with file structure definition integer_size: .1 float_size: .1 -- reserved space @@ -35,7 +30,7 @@ main_function -> function global_desc: builtin_count: 4 - global_count: 4 + global_count: 4 -- excluding builtins global_name -> [ string ](global_count) @@ -48,7 +43,8 @@ function: string argc: 1 -- arguments count nstack: 1 -- number of stack size by this function - extra: 2 -- extra data + varg: 1 + extra: 1 -- extra data bytecode: code_size: 4 code_array -> [ -- bytecode array @@ -62,7 +58,7 @@ function: [function](proto_count) upval_table: upval_count: 1 - upvals -> [ + upvals: [ instack: 1 index: 1 ](upval_count) @@ -82,9 +78,9 @@ class: string member_count: 4 -- number of member variables method_count: 4 -- number of method - method_table -> [ + method_table: [ string -- method name - function -- method function body + function | nil -- method function body or nil (static member) if the first byte is null (which would be an empty func name) ](method_count) member_index_table -> [ string -- member name @@ -92,5 +88,5 @@ class: nil: 1 boolean: 1 -integer: 4 or 8 -float: 4 or 8 +integer: 4 | 8 +float: 4 | 8 diff --git a/lib/libesp32/Berry/tools/grammar/berry.ebnf b/lib/libesp32/Berry/tools/grammar/berry.ebnf index dedf72a90..1ca79a763 100644 --- a/lib/libesp32/Berry/tools/grammar/berry.ebnf +++ b/lib/libesp32/Berry/tools/grammar/berry.ebnf @@ -17,7 +17,7 @@ func_body = '(' [arg_field {',' arg_field}] ')' block 'end'; arg_field = ['*'] ID; (* class define statement *) class_stmt = 'class' ID [':' ID] class_block 'end'; -class_block = {'var' ID {',' ID} | func_stmt}; +class_block = {'var' ID {',' ID} | 'static' ID ['=' expr] {',' ID ['=' expr] } | func_stmt}; import_stmt = 'import' (ID (['as' ID] | {',' ID}) | STRING 'as' ID); (* exceptional handling statement *) try_stmt = 'try' block except_block {except_block} 'end'; diff --git a/lib/libesp32/Berry/tools/plugins/vscode/skiars.berry-0.1.0/syntaxes/berry.json b/lib/libesp32/Berry/tools/plugins/vscode/skiars.berry-0.1.0/syntaxes/berry.json index 1cd1d7cfd..661d969a5 100755 --- a/lib/libesp32/Berry/tools/plugins/vscode/skiars.berry-0.1.0/syntaxes/berry.json +++ b/lib/libesp32/Berry/tools/plugins/vscode/skiars.berry-0.1.0/syntaxes/berry.json @@ -67,7 +67,7 @@ "keywords": { "patterns": [{ "name": "keyword.berry", - "match": "\\b(var|def|class|true|false|nil|self|super|import|as)\\b" + "match": "\\b(var|static|def|class|true|false|nil|self|super|import|as)\\b" }] }, "identifier": { diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h index 2555b0808..40abad981 100644 --- a/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h +++ b/lib/libesp32/ESP32-to-ESP8266-compat/src/esp8266toEsp32.h @@ -32,12 +32,21 @@ * ESP32 analogWrite emulation support \*********************************************************************************************/ -#define PWM_SUPPORTED_CHANNELS 8 -#define PWM_CHANNEL_OFFSET 2 // Webcam uses channel 0, so we offset standard PWM +#if CONFIG_IDF_TARGET_ESP32C3 + #define PWM_SUPPORTED_CHANNELS 6 + #define PWM_CHANNEL_OFFSET 1 // Webcam uses channel 0, so we offset standard PWM -uint8_t _pwm_channel[PWM_SUPPORTED_CHANNELS] = { 99, 99, 99, 99, 99, 99, 99, 99 }; -uint32_t _pwm_frequency = 977; // Default 977Hz -uint8_t _pwm_bit_num = 10; // Default 1023 + uint8_t _pwm_channel[PWM_SUPPORTED_CHANNELS] = { 99, 99, 99, 99, 99, 99 }; + uint32_t _pwm_frequency = 977; // Default 977Hz + uint8_t _pwm_bit_num = 10; // Default 1023 +#else // other ESP32 + #define PWM_SUPPORTED_CHANNELS 8 + #define PWM_CHANNEL_OFFSET 2 // Webcam uses channel 0, so we offset standard PWM + + uint8_t _pwm_channel[PWM_SUPPORTED_CHANNELS] = { 99, 99, 99, 99, 99, 99, 99, 99 }; + uint32_t _pwm_frequency = 977; // Default 977Hz + uint8_t _pwm_bit_num = 10; // Default 1023 +#endif // CONFIG_IDF_TARGET_ESP32C3 vs ESP32 inline uint32_t _analog_pin2chan(uint32_t pin) { for (uint32_t channel = 0; channel < PWM_SUPPORTED_CHANNELS; channel++) { diff --git a/lib/libesp32/LITTLEFS/LICENSE b/lib/libesp32/LITTLEFS/LICENSE deleted file mode 100755 index d159169d1..000000000 --- a/lib/libesp32/LITTLEFS/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - 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 -this service 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. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. 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. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -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 -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the 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. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE 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. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - 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. - - 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 -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This 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. diff --git a/lib/libesp32/LITTLEFS/README.md b/lib/libesp32/LITTLEFS/README.md deleted file mode 100755 index 8c5cec1d6..000000000 --- a/lib/libesp32/LITTLEFS/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# LittleFS_esp32 - -#### ***Notice: The Library is been integrated to [Arduino esp32 core idf-release/v4.2 branch](https://github.com/espressif/arduino-esp32/tree/idf-release/v4.2 ) for future major core release. On built-in library, #define tweaks below will be unavailable.*** - - -## LittleFS library for arduino-esp32 - -- A LittleFS wrapper for Arduino ESP32 of [littlefs-project](https://github.com/littlefs-project/littlefs) -- Based on [ESP-IDF port of joltwallet/esp_littlefs](https://github.com/joltwallet/esp_littlefs) , thank you Brian! -- As a reference, see [LillteFS library for ESP8266 core](https://github.com/esp8266/Arduino/tree/master/libraries/LittleFS) -- [PR](https://github.com/espressif/arduino-esp32/pull/4096) and [merge](https://github.com/espressif/arduino-esp32/pull/4483) at esp32 core development -- [PR](https://github.com/espressif/esp-idf/pull/5469) at esp-idf development -- The functionality is similar to SPIFFS - -### Installation - -- Use **Arduino Library Manager** -- Or download / use **git** to have latest repository of **LITTLEFS** added to Arduino IDE **/libraries** folder -(File > Preferences > Sketchbook location). -- See ``` #define CONFIG_LITTLEFS_FOR_IDF_3_2 ``` in **esp_littlefs.c**. -Now it is defined / undefined automatically by detecting the IDF version and core version. -When defined, the library works with old and new IDFs 3.2 - 4.x but file timestamp feature is removed. -See LITTLEFS_time example. -- See ``` #define CONFIG_LITTLEFS_SPIFFS_COMPAT ``` in **esp_littlefs.c**. -When set to 1, folders are recursively created or deleted if empty on creating/deleting a new file like SPIFFS. Default is 0. -- The other ``` #define CONFIG_LITTLEFS_xxxxx ``` are set to optimal default values. -Read [here](https://github.com/joltwallet/esp_littlefs/blob/master/Kconfig) and [here](https://github.com/littlefs-project//littlefs/blob/master/README.md) if you want to modify. -- For low-level default error reporting modifications, see the defines at beginning of the **lfs.c** here. - -### Usage - -- Use LITTLEFS [with identical methods as SPIFFS](https://diyprojects.io/esp32-get-started-spiff-library-read-write-modify-files/) plus mkdir() and rmdir() -- A quick startup based on your existing code you can re-define SPIFFS -``` -#define USE_LittleFS - -#include -#ifdef USE_LittleFS - #define SPIFFS LITTLEFS - #include -#else - #include -#endif - ``` - - Note, this may not work if your sketch uses other libraries that use SPIFFS themselves. - - See also [esp_partition.h](https://github.com/espressif/esp-idf/blob/master/components/spi_flash/include/esp_partition.h) . LITTLEFS re-uses same type and subtype as SPIFFS - -### Differences with SPIFFS - -- LittleFS has folders, you need to iterate files in folders unless you set ``` #define CONFIG_LITTLEFS_SPIFFS_COMPAT 1 ``` -- At root a "/folder" = "folder" -- Requires a label for mount point, NULL will not work. Recommended is to use default LITTLEFS.begin() -- maxOpenFiles parameter is unused, kept for compatibility -- LITTLEFS.mkdir(path) and LITTLEFS.rmdir(path) are available -- file.seek() behaves like on FFat see [more details](https://github.com/lorol/LITTLEFS/issues/11) -- file.write() and file.print() when partition space is ending may return different than really written bytes (on other FS is also inconsistent). -- Speed comparison based on **LittleFS_test.ino** sketch (for a file 1048576 bytes): - -|Filesystem|Read time [ms]|Write time [ms]| -|----|----|----| -|FAT|276|14493| -|LITTLEFS|446*|16387| -|SPIFFS|767|65622| - -*The read speed improved by changing ```#define CONFIG_LITTLEFS_CACHE_SIZE``` from 128 to 512 - - -### Arduino ESP32 LittleFS filesystem upload tool - -- Use (replace if exists) [arduino-esp32fs-plugin](https://github.com/me-no-dev/arduino-esp32fs-plugin/pull/23 ) with [this variant](https://github.com/lorol/arduino-esp32fs-plugin), which supports SPIFFS, LittleFS and FatFS -- Requires [mklittlefs executable](https://github.com/earlephilhower/mklittlefs) which is available [in releases section here](https://github.com/lorol/arduino-esp32fs-plugin ) or download the zipped binary [here](https://github.com/earlephilhower/mklittlefs/releases) or from **esp-quick-toolchain** releases [here](https://github.com/earlephilhower/esp-quick-toolchain/releases) -- Copy it to **/tools** folder of esp32 platform where **espota** and **esptool** (.py or.exe) tools are located -- Restart Arduino IDE. - -### PlatformIO - -- See [LITTLEFS_PlatformIO example here](https://github.com/lorol/LITTLEFS/tree/master/examples/LITTLEFS_PlatformIO) - ( based on notes below from [BlueAndi](https://github.com/BlueAndi) ) -- Add to _platformio.ini_: - `extra_scripts = replace_fs.py` - -- Add _replace_fs.py_ to project root directory (where platformio.ini is located): - - ```python - Import("env") - print("Replace MKSPIFFSTOOL with mklittlefs.exe") - env.Replace (MKSPIFFSTOOL = "mklittlefs.exe") - ``` - -- Add _mklittlefs.exe_ to project root directory as well. - -## Credits and license - -- This work is based on [littlefs-project](https://github.com/littlefs-project/littlefs) , [ESP-IDF port of joltwallet/esp_littlefs](https://github.com/joltwallet/esp_littlefs) , [Espressif Arduino core for the ESP32, the ESP-IDF - SPIFFS Library](https://github.com/espressif/arduino-esp32/tree/master/libraries/SPIFFS) -- Licensed under GPL v2 ([text](LICENSE)) - -## To Do - - [x] Submit to be added to Arduino Library Manager - - [x] Optional drop-in compatibility with SPIFFS' lack of folders, similar to esp8266' way - implemented as a choice by a #define - - [recursive folders auto creation](https://github.com/esp8266/Arduino/blob/master/libraries/LittleFS/src/LittleFS.cpp#L60) when a new file is created at non-existing path - - [recursive folders auto deletion](https://github.com/esp8266/Arduino/blob/master/libraries/LittleFS/src/LittleFS.h#L149) on "last file" deletion (SPIFFS cannot have "folder w/o file") - - review other differences: opendir(), rmdir(), unlink() - - [ ] Retire this library when released by esp32 Arduino core - - [ ] Cleanup examples diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/.gitignore b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/.gitignore deleted file mode 100755 index 87515a624..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.pio -.vscode -mklittlefs.exe -mklittlefs \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/README.md b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/README.md deleted file mode 100755 index 773445b6d..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# How to run on PlatformIO IDE - -- Download and extract to this project root a **mklittlefs** executable for your OS [from a zipped binary here](https://github.com/earlephilhower/mklittlefs/releases) -- Open **LITTLEFS_PlatformIO** folder -- Run PlatformIO project task: **Upload Filesystem Image** -- Run PlatformIO project task: **Upload and Monitor** -- You will see a Serial output like: -``` ---- Miniterm on COM5 115200,8,N,1 --- ---- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- -ets Jun 8 2016 00:22:57 - -rst:0x1 (POWERON_RESET),boot:0x13 (Snfigsip: 0, SPIWP:0xee -clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 -mode:DIO, clock div:2 -load:0x3fff0018,len:4 -load:0x3fff001c,len:1044 -load:0x40078000,len:10044 -load:0x40080400,len:5872 -entry 0x400806ac -Listing directory: / - FILE: /file1.txt SIZE: 3 LAST WRITE: 2020-10-06 15:10:33 - DIR : /testfolder LAST WRITE: 2020-10-06 15:10:33 -Creating Dir: /mydir -Dir created -Writing file: /mydir/hello2.txt -- file written -Listing directory: / - FILE: /file1.txt SIZE: 3 LAST WRITE: 2020-10-06 15:10:33 - DIR : /mydir LAST WRITE: 1970-01-01 00:00:00 -Listing directory: /mydir - FILE: /mydir/hello2.txt SIZE: 6 LAST WRITE: 1970-01-01 00:00:00 - DIR : /testfolder LAST WRITE: 2020-10-06 15:10:33 -Listing directory: /testfolder - FILE: /testfolder/test2.txt SIZE: 3 LAST WRITE: 2020-10-06 15:10:33 -Deleting file: /mydir/hello2.txt -- file deleted -Removing Dir: /mydir -Dir removed -Listing directory: / - FILE: /file1.txt SIZE: 3 LAST WRITE: 2020-10-06 15:10:33 - DIR : /testfolder LAST WRITE: 2020-10-06 15:10:33 -Listing directory: /testfolder - FILE: /testfolder/test2.txt SIZE: 3 LAST WRITE: 2020-10-06 15:10:33 -Writing file: /hello.txt -- file written -Appending to file: /hello.txt -- message appended -Reading file: /hello.txt -- read from file: -Hello World! -Renaming file /hello.txt to /foo.txt -- file renamed -Reading file: /foo.txt -- read from file: -Hello World! -Deleting file: /foo.txt -- file deleted -Testing file I/O with /test.txt -- writing................................................................ - - 1048576 bytes written in 12006 ms -- reading................................................................ -- 1048576 bytes read in 547 ms -Deleting file: /test.txt -- file deleted -Test complete -``` -- If you have a module with more than 4MB flash, you can uncomment **partitions_custom.csv** in **platformio.ini** and modify the csv file accordingly \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/file1.txt b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/file1.txt deleted file mode 100755 index 7c4a013e5..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/file1.txt +++ /dev/null @@ -1 +0,0 @@ -aaa \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/testfolder/test2.txt b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/testfolder/test2.txt deleted file mode 100755 index 01f02e32c..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/data/testfolder/test2.txt +++ /dev/null @@ -1 +0,0 @@ -bbb \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/include/.placeholder.txt b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/include/.placeholder.txt deleted file mode 100755 index e69de29bb..000000000 diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/lib/.placeholder.txt b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/lib/.placeholder.txt deleted file mode 100755 index e69de29bb..000000000 diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/littlefsbuilder.py b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/littlefsbuilder.py deleted file mode 100755 index 93937e296..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/littlefsbuilder.py +++ /dev/null @@ -1,2 +0,0 @@ -Import("env") -env.Replace( MKSPIFFSTOOL=env.get("PROJECT_DIR") + '/mklittlefs' ) \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/partitions_custom.csv b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/partitions_custom.csv deleted file mode 100755 index 97846fa59..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/partitions_custom.csv +++ /dev/null @@ -1,6 +0,0 @@ -# Name, Type, SubType, Offset, Size, Flags -ota_0, app, ota_0, 0x10000, 0x1A0000, -ota_1, app, ota_1, , 0x1A0000, -otadata, data, ota, 0x350000, 0x2000, -nvs, data, nvs, , 0x6000, -data, data, spiffs, , 0xA8000, diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/platformio.ini b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/platformio.ini deleted file mode 100755 index 43e34ec0d..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/platformio.ini +++ /dev/null @@ -1,35 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter -; Upload options: custom upload port, speed and extra flags -; Library options: dependencies, extra library storages -; Advanced options: extra scripting -; -; Please visit documentation for the other options and examples -; https://docs.platformio.org/page/projectconf.html - -[platformio] -default_envs = esp32 - -[env] -framework = arduino - -[env:esp32] -platform = espressif32 -;platform = https://github.com/platformio/platform-espressif32.git -;board_build.mcu = esp32 -platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git - -build_flags = - ${env.build_flags} - -D=${PIOENV} - ;-D CONFIG_LITTLEFS_FOR_IDF_3_2 - -lib_deps = https://github.com/lorol/LITTLEFS.git - -board = esp32dev -;board_build.partitions = partitions_custom.csv -monitor_filters = esp32_exception_decoder -monitor_speed = 115200 - -extra_scripts = ./littlefsbuilder.py diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/src/main.cpp b/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/src/main.cpp deleted file mode 100755 index 786f04380..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_PlatformIO/src/main.cpp +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include "FS.h" -#include - -#ifndef CONFIG_LITTLEFS_FOR_IDF_3_2 - #include -#endif - -/* You only need to format LITTLEFS the first time you run a - test or else use the LITTLEFS plugin to create a partition - https://github.com/lorol/arduino-esp32littlefs-plugin */ - -#define FORMAT_LITTLEFS_IF_FAILED true - -void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ - Serial.printf("Listing directory: %s\r\n", dirname); - - File root = fs.open(dirname); - if(!root){ - Serial.println("- failed to open directory"); - return; - } - if(!root.isDirectory()){ - Serial.println(" - not a directory"); - return; - } - - File file = root.openNextFile(); - while(file){ - if(file.isDirectory()){ - Serial.print(" DIR : "); - -#ifdef CONFIG_LITTLEFS_FOR_IDF_3_2 - Serial.println(file.name()); -#else - Serial.print(file.name()); - time_t t= file.getLastWrite(); - struct tm * tmstruct = localtime(&t); - Serial.printf(" LAST WRITE: %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct->tm_year)+1900,( tmstruct->tm_mon)+1, tmstruct->tm_mday,tmstruct->tm_hour , tmstruct->tm_min, tmstruct->tm_sec); -#endif - - if(levels){ - listDir(fs, file.name(), levels -1); - } - } else { - Serial.print(" FILE: "); - Serial.print(file.name()); - Serial.print(" SIZE: "); - -#ifdef CONFIG_LITTLEFS_FOR_IDF_3_2 - Serial.println(file.size()); -#else - Serial.print(file.size()); - time_t t= file.getLastWrite(); - struct tm * tmstruct = localtime(&t); - Serial.printf(" LAST WRITE: %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct->tm_year)+1900,( tmstruct->tm_mon)+1, tmstruct->tm_mday,tmstruct->tm_hour , tmstruct->tm_min, tmstruct->tm_sec); -#endif - } - file = root.openNextFile(); - } -} - -void createDir(fs::FS &fs, const char * path){ - Serial.printf("Creating Dir: %s\n", path); - if(fs.mkdir(path)){ - Serial.println("Dir created"); - } else { - Serial.println("mkdir failed"); - } -} - -void removeDir(fs::FS &fs, const char * path){ - Serial.printf("Removing Dir: %s\n", path); - if(fs.rmdir(path)){ - Serial.println("Dir removed"); - } else { - Serial.println("rmdir failed"); - } -} - -void readFile(fs::FS &fs, const char * path){ - Serial.printf("Reading file: %s\r\n", path); - - File file = fs.open(path); - if(!file || file.isDirectory()){ - Serial.println("- failed to open file for reading"); - return; - } - - Serial.println("- read from file:"); - while(file.available()){ - Serial.write(file.read()); - } - file.close(); -} - -void writeFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Writing file: %s\r\n", path); - - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("- file written"); - } else { - Serial.println("- write failed"); - } - file.close(); -} - -void appendFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Appending to file: %s\r\n", path); - - File file = fs.open(path, FILE_APPEND); - if(!file){ - Serial.println("- failed to open file for appending"); - return; - } - if(file.print(message)){ - Serial.println("- message appended"); - } else { - Serial.println("- append failed"); - } - file.close(); -} - -void renameFile(fs::FS &fs, const char * path1, const char * path2){ - Serial.printf("Renaming file %s to %s\r\n", path1, path2); - if (fs.rename(path1, path2)) { - Serial.println("- file renamed"); - } else { - Serial.println("- rename failed"); - } -} - -void deleteFile(fs::FS &fs, const char * path){ - Serial.printf("Deleting file: %s\r\n", path); - if(fs.remove(path)){ - Serial.println("- file deleted"); - } else { - Serial.println("- delete failed"); - } -} - -// SPIFFS-like write and delete file, better use #define CONFIG_LITTLEFS_SPIFFS_COMPAT 1 - -void writeFile2(fs::FS &fs, const char * path, const char * message){ - if(!fs.exists(path)){ - if (strchr(path, '/')) { - Serial.printf("Create missing folders of: %s\r\n", path); - char *pathStr = strdup(path); - if (pathStr) { - char *ptr = strchr(pathStr, '/'); - while (ptr) { - *ptr = 0; - fs.mkdir(pathStr); - *ptr = '/'; - ptr = strchr(ptr+1, '/'); - } - } - free(pathStr); - } - } - - Serial.printf("Writing file to: %s\r\n", path); - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("- file written"); - } else { - Serial.println("- write failed"); - } - file.close(); -} - -void deleteFile2(fs::FS &fs, const char * path){ - Serial.printf("Deleting file and empty folders on path: %s\r\n", path); - - if(fs.remove(path)){ - Serial.println("- file deleted"); - } else { - Serial.println("- delete failed"); - } - - char *pathStr = strdup(path); - if (pathStr) { - char *ptr = strrchr(pathStr, '/'); - if (ptr) { - Serial.printf("Removing all empty folders on path: %s\r\n", path); - } - while (ptr) { - *ptr = 0; - fs.rmdir(pathStr); - ptr = strrchr(pathStr, '/'); - } - free(pathStr); - } -} - -void testFileIO(fs::FS &fs, const char * path){ - Serial.printf("Testing file I/O with %s\r\n", path); - - static uint8_t buf[512]; - size_t len = 0; - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - - size_t i; - Serial.print("- writing" ); - uint32_t start = millis(); - for(i=0; i<2048; i++){ - if ((i & 0x001F) == 0x001F){ - Serial.print("."); - } - file.write(buf, 512); - } - Serial.println(""); - uint32_t end = millis() - start; - Serial.printf(" - %u bytes written in %u ms\r\n", 2048 * 512, end); - file.close(); - - file = fs.open(path); - start = millis(); - end = start; - i = 0; - if(file && !file.isDirectory()){ - len = file.size(); - size_t flen = len; - start = millis(); - Serial.print("- reading" ); - while(len){ - size_t toRead = len; - if(toRead > 512){ - toRead = 512; - } - file.read(buf, toRead); - if ((i++ & 0x001F) == 0x001F){ - Serial.print("."); - } - len -= toRead; - } - Serial.println(""); - end = millis() - start; - Serial.printf("- %u bytes read in %u ms\r\n", flen, end); - file.close(); - } else { - Serial.println("- failed to open file for reading"); - } -} - -void setup(){ - Serial.begin(115200); - if(!LITTLEFS.begin(FORMAT_LITTLEFS_IF_FAILED)){ - Serial.println("LITTLEFS Mount Failed"); - return; - } - - listDir(LITTLEFS, "/", 0); - createDir(LITTLEFS, "/mydir"); - writeFile(LITTLEFS, "/mydir/hello2.txt", "Hello2"); - //writeFile(LITTLEFS, "/mydir/newdir2/newdir3/hello3.txt", "Hello3"); - writeFile2(LITTLEFS, "/mydir/newdir2/newdir3/hello3.txt", "Hello3"); - listDir(LITTLEFS, "/", 3); - deleteFile(LITTLEFS, "/mydir/hello2.txt"); - //deleteFile(LITTLEFS, "/mydir/newdir2/newdir3/hello3.txt"); - deleteFile2(LITTLEFS, "/mydir/newdir2/newdir3/hello3.txt"); - removeDir(LITTLEFS, "/mydir"); - listDir(LITTLEFS, "/", 3); - writeFile(LITTLEFS, "/hello.txt", "Hello "); - appendFile(LITTLEFS, "/hello.txt", "World!\r\n"); - readFile(LITTLEFS, "/hello.txt"); - renameFile(LITTLEFS, "/hello.txt", "/foo.txt"); - readFile(LITTLEFS, "/foo.txt"); - deleteFile(LITTLEFS, "/foo.txt"); - testFileIO(LITTLEFS, "/test.txt"); - deleteFile(LITTLEFS, "/test.txt"); - - Serial.println( "Test complete" ); -} - -void loop(){ - -} diff --git a/lib/libesp32/LITTLEFS/examples/LITTLEFS_time/LITTLEFS_time.ino b/lib/libesp32/LITTLEFS/examples/LITTLEFS_time/LITTLEFS_time.ino deleted file mode 100755 index 933cd4f3b..000000000 --- a/lib/libesp32/LITTLEFS/examples/LITTLEFS_time/LITTLEFS_time.ino +++ /dev/null @@ -1,219 +0,0 @@ -#include "FS.h" -//#include "SPIFFS.h" -#include "LITTLEFS.h" -#include -#include - -#define SPIFFS LITTLEFS - -/* This examples uses "quick re-define" of SPIFFS to run - an existing sketch with LITTLEFS instead of SPIFFS - - To get time/date stamps by file.getLastWrite(), you need an - esp32 core on IDF 3.3 and comment a line in file esp_littlefs.c: - - //#define CONFIG_LITTLEFS_FOR_IDF_3_2 - - You only need to format LITTLEFS the first time you run a - test or else use the LITTLEFS plugin to create a partition - https://github.com/lorol/arduino-esp32littlefs-plugin */ - -#define FORMAT_LITTLEFS_IF_FAILED true - -const char* ssid = "yourssid"; -const char* password = "yourpass"; - -long timezone = 1; -byte daysavetime = 1; - -void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ - Serial.printf("Listing directory: %s\n", dirname); - - File root = fs.open(dirname); - if(!root){ - Serial.println("Failed to open directory"); - return; - } - if(!root.isDirectory()){ - Serial.println("Not a directory"); - return; - } - - File file = root.openNextFile(); - while(file){ - if(file.isDirectory()){ - Serial.print(" DIR : "); - Serial.print (file.name()); - time_t t= file.getLastWrite(); - struct tm * tmstruct = localtime(&t); - Serial.printf(" LAST WRITE: %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct->tm_year)+1900,( tmstruct->tm_mon)+1, tmstruct->tm_mday,tmstruct->tm_hour , tmstruct->tm_min, tmstruct->tm_sec); - if(levels){ - listDir(fs, file.name(), levels -1); - } - } else { - Serial.print(" FILE: "); - Serial.print(file.name()); - Serial.print(" SIZE: "); - Serial.print(file.size()); - time_t t= file.getLastWrite(); - struct tm * tmstruct = localtime(&t); - Serial.printf(" LAST WRITE: %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct->tm_year)+1900,( tmstruct->tm_mon)+1, tmstruct->tm_mday,tmstruct->tm_hour , tmstruct->tm_min, tmstruct->tm_sec); - } - file = root.openNextFile(); - } -} - -void createDir(fs::FS &fs, const char * path){ - Serial.printf("Creating Dir: %s\n", path); - if(fs.mkdir(path)){ - Serial.println("Dir created"); - } else { - Serial.println("mkdir failed"); - } -} - -void removeDir(fs::FS &fs, const char * path){ - Serial.printf("Removing Dir: %s\n", path); - if(fs.rmdir(path)){ - Serial.println("Dir removed"); - } else { - Serial.println("rmdir failed"); - } -} - -void readFile(fs::FS &fs, const char * path){ - Serial.printf("Reading file: %s\n", path); - - File file = fs.open(path); - if(!file){ - Serial.println("Failed to open file for reading"); - return; - } - - Serial.print("Read from file: "); - while(file.available()){ - Serial.write(file.read()); - } - file.close(); -} - -void writeFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Writing file: %s\n", path); - - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("Failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("File written"); - } else { - Serial.println("Write failed"); - } - file.close(); -} - -void appendFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Appending to file: %s\n", path); - - File file = fs.open(path, FILE_APPEND); - if(!file){ - Serial.println("Failed to open file for appending"); - return; - } - if(file.print(message)){ - Serial.println("Message appended"); - } else { - Serial.println("Append failed"); - } - file.close(); -} - -void renameFile(fs::FS &fs, const char * path1, const char * path2){ - Serial.printf("Renaming file %s to %s\n", path1, path2); - if (fs.rename(path1, path2)) { - Serial.println("File renamed"); - } else { - Serial.println("Rename failed"); - } -} - -void deleteFile(fs::FS &fs, const char * path){ - Serial.printf("Deleting file: %s\n", path); - if(fs.remove(path)){ - Serial.println("File deleted"); - } else { - Serial.println("Delete failed"); - } -} - -void setup(){ - Serial.begin(115200); - // We start by connecting to a WiFi network - Serial.println(); - Serial.println(); - Serial.print("Connecting to "); - Serial.println(ssid); - - WiFi.begin(ssid, password); - - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println("WiFi connected"); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); - Serial.println("Contacting Time Server"); - configTime(3600*timezone, daysavetime*3600, "time.nist.gov", "0.pool.ntp.org", "1.pool.ntp.org"); - struct tm tmstruct ; - delay(2000); - tmstruct.tm_year = 0; - getLocalTime(&tmstruct, 5000); - Serial.printf("\nNow is : %d-%02d-%02d %02d:%02d:%02d\n",(tmstruct.tm_year)+1900,( tmstruct.tm_mon)+1, tmstruct.tm_mday,tmstruct.tm_hour , tmstruct.tm_min, tmstruct.tm_sec); - Serial.println(""); - - if(!SPIFFS.begin(FORMAT_LITTLEFS_IF_FAILED)){ - Serial.println("LITTLEFS Mount Failed"); - return; - } - - Serial.println("----list 1----"); - listDir(SPIFFS, "/", 1); - - Serial.println("----remove old dir----"); - removeDir(SPIFFS, "/mydir"); - - Serial.println("----create a new dir----"); - createDir(SPIFFS, "/mydir"); - - Serial.println("----remove the new dir----"); - removeDir(SPIFFS, "/mydir"); - - Serial.println("----create the new again----"); - createDir(SPIFFS, "/mydir"); - - Serial.println("----create and work with file----"); - writeFile(SPIFFS, "/mydir/hello.txt", "Hello "); - appendFile(SPIFFS, "/mydir/hello.txt", "World!\n"); - - Serial.println("----list 2----"); - listDir(SPIFFS, "/", 1); - - Serial.println("----attempt to remove dir w/ file----"); - removeDir(SPIFFS, "/mydir"); - - Serial.println("----remove dir after deleting file----"); - deleteFile(SPIFFS, "/mydir/hello.txt"); - removeDir(SPIFFS, "/mydir"); - - Serial.println("----list 3----"); - listDir(SPIFFS, "/", 1); - - Serial.println( "Test complete" ); - -} - -void loop(){ - -} diff --git a/lib/libesp32/LITTLEFS/examples/LittleFS_test/LittleFS_test.ino b/lib/libesp32/LITTLEFS/examples/LittleFS_test/LittleFS_test.ino deleted file mode 100755 index 3abb8908e..000000000 --- a/lib/libesp32/LITTLEFS/examples/LittleFS_test/LittleFS_test.ino +++ /dev/null @@ -1,270 +0,0 @@ -#include -#include "FS.h" -#include - -/* You only need to format LITTLEFS the first time you run a - test or else use the LITTLEFS plugin to create a partition - https://github.com/lorol/arduino-esp32littlefs-plugin */ - -#define FORMAT_LITTLEFS_IF_FAILED true - -void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ - Serial.printf("Listing directory: %s\r\n", dirname); - - File root = fs.open(dirname); - if(!root){ - Serial.println("- failed to open directory"); - return; - } - if(!root.isDirectory()){ - Serial.println(" - not a directory"); - return; - } - - File file = root.openNextFile(); - while(file){ - if(file.isDirectory()){ - Serial.print(" DIR : "); - Serial.println(file.name()); - if(levels){ - listDir(fs, file.name(), levels -1); - } - } else { - Serial.print(" FILE: "); - Serial.print(file.name()); - Serial.print("\tSIZE: "); - Serial.println(file.size()); - } - file = root.openNextFile(); - } -} - -void createDir(fs::FS &fs, const char * path){ - Serial.printf("Creating Dir: %s\n", path); - if(fs.mkdir(path)){ - Serial.println("Dir created"); - } else { - Serial.println("mkdir failed"); - } -} - -void removeDir(fs::FS &fs, const char * path){ - Serial.printf("Removing Dir: %s\n", path); - if(fs.rmdir(path)){ - Serial.println("Dir removed"); - } else { - Serial.println("rmdir failed"); - } -} - -void readFile(fs::FS &fs, const char * path){ - Serial.printf("Reading file: %s\r\n", path); - - File file = fs.open(path); - if(!file || file.isDirectory()){ - Serial.println("- failed to open file for reading"); - return; - } - - Serial.println("- read from file:"); - while(file.available()){ - Serial.write(file.read()); - } - file.close(); -} - -void writeFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Writing file: %s\r\n", path); - - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("- file written"); - } else { - Serial.println("- write failed"); - } - file.close(); -} - -void appendFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Appending to file: %s\r\n", path); - - File file = fs.open(path, FILE_APPEND); - if(!file){ - Serial.println("- failed to open file for appending"); - return; - } - if(file.print(message)){ - Serial.println("- message appended"); - } else { - Serial.println("- append failed"); - } - file.close(); -} - -void renameFile(fs::FS &fs, const char * path1, const char * path2){ - Serial.printf("Renaming file %s to %s\r\n", path1, path2); - if (fs.rename(path1, path2)) { - Serial.println("- file renamed"); - } else { - Serial.println("- rename failed"); - } -} - -void deleteFile(fs::FS &fs, const char * path){ - Serial.printf("Deleting file: %s\r\n", path); - if(fs.remove(path)){ - Serial.println("- file deleted"); - } else { - Serial.println("- delete failed"); - } -} - -// SPIFFS-like write and delete file, better use #define CONFIG_LITTLEFS_SPIFFS_COMPAT 1 - -void writeFile2(fs::FS &fs, const char * path, const char * message){ - if(!fs.exists(path)){ - if (strchr(path, '/')) { - Serial.printf("Create missing folders of: %s\r\n", path); - char *pathStr = strdup(path); - if (pathStr) { - char *ptr = strchr(pathStr, '/'); - while (ptr) { - *ptr = 0; - fs.mkdir(pathStr); - *ptr = '/'; - ptr = strchr(ptr+1, '/'); - } - } - free(pathStr); - } - } - - Serial.printf("Writing file to: %s\r\n", path); - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("- file written"); - } else { - Serial.println("- write failed"); - } - file.close(); -} - -void deleteFile2(fs::FS &fs, const char * path){ - Serial.printf("Deleting file and empty folders on path: %s\r\n", path); - - if(fs.remove(path)){ - Serial.println("- file deleted"); - } else { - Serial.println("- delete failed"); - } - - char *pathStr = strdup(path); - if (pathStr) { - char *ptr = strrchr(pathStr, '/'); - if (ptr) { - Serial.printf("Removing all empty folders on path: %s\r\n", path); - } - while (ptr) { - *ptr = 0; - fs.rmdir(pathStr); - ptr = strrchr(pathStr, '/'); - } - free(pathStr); - } -} - -void testFileIO(fs::FS &fs, const char * path){ - Serial.printf("Testing file I/O with %s\r\n", path); - - static uint8_t buf[512]; - size_t len = 0; - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("- failed to open file for writing"); - return; - } - - size_t i; - Serial.print("- writing" ); - uint32_t start = millis(); - for(i=0; i<2048; i++){ - if ((i & 0x001F) == 0x001F){ - Serial.print("."); - } - file.write(buf, 512); - } - Serial.println(""); - uint32_t end = millis() - start; - Serial.printf(" - %u bytes written in %u ms\r\n", 2048 * 512, end); - file.close(); - - file = fs.open(path); - start = millis(); - end = start; - i = 0; - if(file && !file.isDirectory()){ - len = file.size(); - size_t flen = len; - start = millis(); - Serial.print("- reading" ); - while(len){ - size_t toRead = len; - if(toRead > 512){ - toRead = 512; - } - file.read(buf, toRead); - if ((i++ & 0x001F) == 0x001F){ - Serial.print("."); - } - len -= toRead; - } - Serial.println(""); - end = millis() - start; - Serial.printf("- %u bytes read in %u ms\r\n", flen, end); - file.close(); - } else { - Serial.println("- failed to open file for reading"); - } -} - -void setup(){ - Serial.begin(115200); - if(!LITTLEFS.begin(FORMAT_LITTLEFS_IF_FAILED)){ - Serial.println("LITTLEFS Mount Failed"); - return; - } - Serial.println( "SPIFFS-like write file to new path and delete it w/folders" ); - writeFile2(LITTLEFS, "/new1/new2/new3/hello3.txt", "Hello3"); - listDir(LITTLEFS, "/", 3); - deleteFile2(LITTLEFS, "/new1/new2/new3/hello3.txt"); - - listDir(LITTLEFS, "/", 3); - createDir(LITTLEFS, "/mydir"); - writeFile(LITTLEFS, "/mydir/hello2.txt", "Hello2"); - listDir(LITTLEFS, "/", 1); - deleteFile(LITTLEFS, "/mydir/hello2.txt"); - removeDir(LITTLEFS, "/mydir"); - listDir(LITTLEFS, "/", 1); - writeFile(LITTLEFS, "/hello.txt", "Hello "); - appendFile(LITTLEFS, "/hello.txt", "World!\r\n"); - readFile(LITTLEFS, "/hello.txt"); - renameFile(LITTLEFS, "/hello.txt", "/foo.txt"); - readFile(LITTLEFS, "/foo.txt"); - deleteFile(LITTLEFS, "/foo.txt"); - testFileIO(LITTLEFS, "/test.txt"); - deleteFile(LITTLEFS, "/test.txt"); - - Serial.println( "Test complete" ); -} - -void loop(){ - -} diff --git a/lib/libesp32/LITTLEFS/library.json b/lib/libesp32/LITTLEFS/library.json deleted file mode 100755 index d87eba610..000000000 --- a/lib/libesp32/LITTLEFS/library.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name":"LittleFS_esp32", - "description":"LittleFS for esp32", - "keywords":"littlefs, spiffs", - "authors": - { - "name": "lorol", - "maintainer": true - }, - "repository": - { - "type": "git", - "url": "https://github.com/lorol/LITTLEFS.git" - }, - "version": "1.0.5", - "license": "LGPL-2.0", - "frameworks": "arduino", - "platforms": "espressif32" -} \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/library.properties b/lib/libesp32/LITTLEFS/library.properties deleted file mode 100755 index 262590f63..000000000 --- a/lib/libesp32/LITTLEFS/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=LittleFS_esp32 -version=1.0.5 -author=lorol -maintainer=lorol -sentence=LittleFS for esp32 based on esp_littlefs IDF component. Use esp32 core-provided LITTLEFS library instead of this one when available in future core releases. -paragraph= For esp32 core 1.0.4 release, use #define CONFIG_LITTLEFS_FOR_IDF_3_2 and for more SPIFFS compatibility, set #define CONFIG_LITTLEFS_SPIFFS_COMPAT 1 -category=Data Storage -url=https://github.com/lorol/LITTLEFS -architectures=esp32 \ No newline at end of file diff --git a/lib/libesp32/LITTLEFS/src/LICENSE b/lib/libesp32/LITTLEFS/src/LICENSE deleted file mode 100755 index 54a9f1e0e..000000000 --- a/lib/libesp32/LITTLEFS/src/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright 2020 Brian Pugh - -Permission 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: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE 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. diff --git a/lib/libesp32/LITTLEFS/src/LICENSE.md b/lib/libesp32/LITTLEFS/src/LICENSE.md deleted file mode 100755 index ed69bea47..000000000 --- a/lib/libesp32/LITTLEFS/src/LICENSE.md +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2017, Arm Limited. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -- Neither the name of ARM nor the names of its contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/libesp32/LITTLEFS/src/LITTLEFS.cpp b/lib/libesp32/LITTLEFS/src/LITTLEFS.cpp deleted file mode 100755 index a188d65f0..000000000 --- a/lib/libesp32/LITTLEFS/src/LITTLEFS.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -static constexpr const char LFS_NAME[] = "spiffs"; - -#include "vfs_api.h" - -extern "C" { -#include -#include -#include -#include "esp_littlefs.h" -} - -#include "LITTLEFS.h" - -using namespace fs; - -LITTLEFSFS::LITTLEFSFS() : FS(FSImplPtr(new VFSImpl())) -{ - -} - -bool LITTLEFSFS::begin(bool formatOnFail, const char * basePath, uint8_t maxOpenFiles) -{ - if(esp_littlefs_mounted(LFS_NAME)){ - log_w("LITTLEFS Already Mounted!"); - return true; - } - - esp_vfs_littlefs_conf_t conf = { - .base_path = basePath, - .partition_label = LFS_NAME, - .format_if_mount_failed = false - }; - - esp_err_t err = esp_vfs_littlefs_register(&conf); - if(err == ESP_FAIL && formatOnFail){ - if(format()){ - err = esp_vfs_littlefs_register(&conf); - } - } - if(err != ESP_OK){ - log_e("Mounting LITTLEFS failed! Error: %d", err); - return false; - } - _impl->mountpoint(basePath); - return true; -} - -void LITTLEFSFS::end() -{ - if(esp_littlefs_mounted(LFS_NAME)){ - esp_err_t err = esp_vfs_littlefs_unregister(LFS_NAME); - if(err){ - log_e("Unmounting LITTLEFS failed! Error: %d", err); - return; - } - _impl->mountpoint(NULL); - } -} - -bool LITTLEFSFS::format() -{ - disableCore0WDT(); - esp_err_t err = esp_littlefs_format(LFS_NAME); - enableCore0WDT(); - if(err){ - log_e("Formatting LITTLEFS failed! Error: %d", err); - return false; - } - return true; -} - -size_t LITTLEFSFS::totalBytes() -{ - size_t total,used; - if(esp_littlefs_info(LFS_NAME, &total, &used)){ - return 0; - } - return total; -} - -size_t LITTLEFSFS::usedBytes() -{ - size_t total,used; - if(esp_littlefs_info(LFS_NAME, &total, &used)){ - return 0; - } - return used; -} - -LITTLEFSFS LITTLEFS; - diff --git a/lib/libesp32/LITTLEFS/src/LITTLEFS.h b/lib/libesp32/LITTLEFS/src/LITTLEFS.h deleted file mode 100755 index fbd6f09e1..000000000 --- a/lib/libesp32/LITTLEFS/src/LITTLEFS.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#ifndef _LITTLEFS_H_ -#define _LITTLEFS_H_ - -#include "FS.h" - -namespace fs -{ - -class LITTLEFSFS : public FS -{ -public: - LITTLEFSFS(); - bool begin(bool formatOnFail=false, const char * basePath="/littlefs", uint8_t maxOpenFiles=5); - bool format(); - size_t totalBytes(); - size_t usedBytes(); - void end(); -}; - -} - -extern fs::LITTLEFSFS LITTLEFS; - - -#endif diff --git a/lib/libesp32/LITTLEFS/src/esp_littlefs.c b/lib/libesp32/LITTLEFS/src/esp_littlefs.c deleted file mode 100755 index edcc2b360..000000000 --- a/lib/libesp32/LITTLEFS/src/esp_littlefs.c +++ /dev/null @@ -1,1630 +0,0 @@ -/** - * @file esp_littlefs.c - * @brief Maps LittleFS <-> ESP_VFS - * @author Brian Pugh - * - * @note Modified and used by lorol for Arduino esp32 core - * - * Copyright 2020 Brian Pugh - * Permission 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: - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - * THE 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. - */ - -//#define LOG_LOCAL_LEVEL 5 - -#if __has_include("esp_arduino_version.h") -#include "esp_arduino_version.h" -#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(2, 0, 0) -#warning("Use the built-in LITTLEFS library") -#endif -#else -//#warning("LITTLEFS: no esp_arduino_version.h file, likely 1.0.x") -#endif - -#if __has_include("esp_idf_version.h") -#include "esp_idf_version.h" -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(3, 3, 0) -//#warning("IDF is 3.3 or later, LittleFS file timestamps are enabled") -#endif -#else -#define CONFIG_LITTLEFS_FOR_IDF_3_2 /* For old IDF 3.2 compatibility, core release 1.0.4 - no timestamps */ -//#warning("IDF < 3.3, no LittleFS file timestamps") -#endif - -//#define CONFIG_LITTLEFS_USE_ONLY_HASH -#define CONFIG_LITTLEFS_HUMAN_READABLE 0 /* Use 1 for verbose errors */ -#define CONFIG_LITTLEFS_SPIFFS_COMPAT 0 /* Use 1 for better drop-in replacement of SPIFFS */ -#define CONFIG_LITTLEFS_MAX_PARTITIONS 3 -#define CONFIG_LITTLEFS_PAGE_SIZE 256 -#define CONFIG_LITTLEFS_OBJ_NAME_LEN 64 -#define CONFIG_LITTLEFS_READ_SIZE 128 -#define CONFIG_LITTLEFS_WRITE_SIZE 128 -#define CONFIG_LITTLEFS_LOOKAHEAD_SIZE 128 -#define CONFIG_LITTLEFS_CACHE_SIZE 512 /* Old value was 128 */ -#define CONFIG_LITTLEFS_BLOCK_CYCLES 512 - -#ifdef CONFIG_LITTLEFS_FOR_IDF_3_2 - #define CONFIG_LITTLEFS_USE_MTIME 0 -#else - #define CONFIG_LITTLEFS_USE_MTIME 1 - #define CONFIG_LITTLEFS_MTIME_USE_SECONDS 1 -#endif - -#include "esp_log.h" -#include "esp_spi_flash.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include -#include -#include -#include -#include -#include - -#if CONFIG_IDF_TARGET_ESP32C3 -#include "esp32c3/rom/spi_flash.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "esp32s2/rom/spi_flash.h" -#elif __has_include("esp32/rom/spi_flash.h") -//#warning("LITTLEFS: IDF 4, spi_flash.h file location different from IDF 3") -#include "esp32/rom/spi_flash.h" //IDF 4 -#else -//#warning("LITTLEFS: IDF 3") -#include "rom/spi_flash.h" //IDF 3 -#endif - -#include "esp_system.h" - -#include "esp_littlefs.h" -#include "littlefs_api.h" - - -static const char TAG[] = "esp_littlefs"; - -#define CONFIG_LITTLEFS_BLOCK_SIZE 4096 /* ESP32 can only operate at 4kb */ - -/* File Descriptor Caching Params */ -#define CONFIG_LITTLEFS_FD_CACHE_REALLOC_FACTOR 2 /* Amount to resize FD cache by */ -#define CONFIG_LITTLEFS_FD_CACHE_MIN_SIZE 4 /* Minimum size of FD cache */ -#define CONFIG_LITTLEFS_FD_CACHE_HYST 4 /* When shrinking, leave this many trailing FD slots available */ - -/** - * @brief littlefs DIR structure - */ -typedef struct { - DIR dir; /*!< VFS DIR struct */ - lfs_dir_t d; /*!< littlefs DIR struct */ - struct dirent e; /*!< Last open dirent */ - long offset; /*!< Offset of the current dirent */ - char *path; /*!< Requested directory name */ -} vfs_littlefs_dir_t; - -static int vfs_littlefs_open(void* ctx, const char * path, int flags, int mode); -static ssize_t vfs_littlefs_write(void* ctx, int fd, const void * data, size_t size); -static ssize_t vfs_littlefs_read(void* ctx, int fd, void * dst, size_t size); -static int vfs_littlefs_close(void* ctx, int fd); -static off_t vfs_littlefs_lseek(void* ctx, int fd, off_t offset, int mode); -static int vfs_littlefs_stat(void* ctx, const char * path, struct stat * st); -static int vfs_littlefs_unlink(void* ctx, const char *path); -static int vfs_littlefs_rename(void* ctx, const char *src, const char *dst); -static DIR* vfs_littlefs_opendir(void* ctx, const char* name); -static int vfs_littlefs_closedir(void* ctx, DIR* pdir); -static struct dirent* vfs_littlefs_readdir(void* ctx, DIR* pdir); -static int vfs_littlefs_readdir_r(void* ctx, DIR* pdir, - struct dirent* entry, struct dirent** out_dirent); -static long vfs_littlefs_telldir(void* ctx, DIR* pdir); -static void vfs_littlefs_seekdir(void* ctx, DIR* pdir, long offset); -static int vfs_littlefs_mkdir(void* ctx, const char* name, mode_t mode); -static int vfs_littlefs_rmdir(void* ctx, const char* name); -static int vfs_littlefs_fsync(void* ctx, int fd); - -static esp_err_t esp_littlefs_init(const esp_vfs_littlefs_conf_t* conf); -static esp_err_t esp_littlefs_erase_partition(const char *partition_label); -static esp_err_t esp_littlefs_by_label(const char* label, int * index); -static esp_err_t esp_littlefs_get_empty(int *index); -static void esp_littlefs_free(esp_littlefs_t ** efs); -static void esp_littlefs_dir_free(vfs_littlefs_dir_t *dir); -static int esp_littlefs_flags_conv(int m); -#if CONFIG_LITTLEFS_USE_MTIME -static int vfs_littlefs_utime(void *ctx, const char *path, const struct utimbuf *times); -static void vfs_littlefs_update_mtime(esp_littlefs_t *efs, const char *path); -static int vfs_littlefs_update_mtime_value(esp_littlefs_t *efs, const char *path, time_t t); -static time_t vfs_littlefs_get_mtime(esp_littlefs_t *efs, const char *path); -#endif - -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH -/* The only way in LittleFS to get info is via a path (lfs_stat), so it cannot - * be done if the path isn't stored. */ -static int vfs_littlefs_fstat(void* ctx, int fd, struct stat * st); -#endif - -#if CONFIG_LITTLEFS_SPIFFS_COMPAT -static void mkdirs(esp_littlefs_t * efs, const char *dir); -static void rmdirs(esp_littlefs_t * efs, const char *dir); -#endif // CONFIG_LITTLEFS_SPIFFS_COMPAT - -static int sem_take(esp_littlefs_t *efs); -static int sem_give(esp_littlefs_t *efs); - -static SemaphoreHandle_t _efs_lock = NULL; -static esp_littlefs_t * _efs[CONFIG_LITTLEFS_MAX_PARTITIONS] = { 0 }; - -/******************** - * Helper Functions * - ********************/ -void esp_littlefs_free_fds(esp_littlefs_t * efs) { - /* Need to free all files that were opened */ - while (efs->file) { - vfs_littlefs_file_t * next = efs->file->next; - free(efs->file); - efs->file = next; - } - free(efs->cache); - efs->cache = 0; - efs->cache_size = efs->fd_count = 0; -} - - -/******************** - * Public Functions * - ********************/ - -bool esp_littlefs_mounted(const char* partition_label) { - int index; - esp_err_t err; - - err = esp_littlefs_by_label(partition_label, &index); - if(err != ESP_OK) return false; - return _efs[index]->cache_size > 0; -} - -esp_err_t esp_littlefs_info(const char* partition_label, size_t *total_bytes, size_t *used_bytes){ - int index; - esp_err_t err; - esp_littlefs_t *efs = NULL; - - err = esp_littlefs_by_label(partition_label, &index); - if(err != ESP_OK) return false; - efs = _efs[index]; - - if(total_bytes) *total_bytes = efs->cfg.block_size * efs->cfg.block_count; - if(used_bytes) *used_bytes = efs->cfg.block_size * lfs_fs_size(efs->fs); - - return ESP_OK; -} - -esp_err_t esp_vfs_littlefs_register(const esp_vfs_littlefs_conf_t * conf) -{ - assert(conf->base_path); - const esp_vfs_t vfs = { - .flags = ESP_VFS_FLAG_CONTEXT_PTR, - .write_p = &vfs_littlefs_write, - .lseek_p = &vfs_littlefs_lseek, - .read_p = &vfs_littlefs_read, - .open_p = &vfs_littlefs_open, - .close_p = &vfs_littlefs_close, -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - .fstat_p = &vfs_littlefs_fstat, -#else - .fstat_p = NULL, /* Not supported */ -#endif - .stat_p = &vfs_littlefs_stat, - .link_p = NULL, /* Not Supported */ - .unlink_p = &vfs_littlefs_unlink, - .rename_p = &vfs_littlefs_rename, - .opendir_p = &vfs_littlefs_opendir, - .closedir_p = &vfs_littlefs_closedir, - .readdir_p = &vfs_littlefs_readdir, - .readdir_r_p = &vfs_littlefs_readdir_r, - .seekdir_p = &vfs_littlefs_seekdir, - .telldir_p = &vfs_littlefs_telldir, - .mkdir_p = &vfs_littlefs_mkdir, - .rmdir_p = &vfs_littlefs_rmdir, - .fsync_p = &vfs_littlefs_fsync, -#ifndef CONFIG_LITTLEFS_FOR_IDF_3_2 -#if CONFIG_LITTLEFS_USE_MTIME - .utime_p = &vfs_littlefs_utime, -#else - .utime_p = NULL, -#endif // CONFIG_LITTLEFS_USE_MTIME -#endif //CONFIG_LITTLEFS_FOR_IDF_3_2 - }; - - esp_err_t err = esp_littlefs_init(conf); - if (err != ESP_OK) { - ESP_LOGE(TAG, "Failed to initialize LittleFS"); - return err; - } - - int index; - if (esp_littlefs_by_label(conf->partition_label, &index) != ESP_OK) { - ESP_LOGE(TAG, "Unable to find partition \"%s\"", conf->partition_label); - return ESP_ERR_NOT_FOUND; - } - - strlcat(_efs[index]->base_path, conf->base_path, ESP_VFS_PATH_MAX + 1); - err = esp_vfs_register(conf->base_path, &vfs, _efs[index]); - if (err != ESP_OK) { - esp_littlefs_free(&_efs[index]); - ESP_LOGE(TAG, "Failed to register Littlefs to \"%s\"", conf->base_path); - return err; - } - - ESP_LOGV(TAG, "Successfully registered LittleFS to \"%s\"", conf->base_path); - return ESP_OK; -} - -esp_err_t esp_vfs_littlefs_unregister(const char* partition_label) -{ - assert(partition_label); - int index; - if (esp_littlefs_by_label(partition_label, &index) != ESP_OK) { - ESP_LOGE(TAG, "Partition was never registered."); - return ESP_ERR_INVALID_STATE; - } - ESP_LOGV(TAG, "Unregistering \"%s\"", partition_label); - esp_err_t err = esp_vfs_unregister(_efs[index]->base_path); - if (err != ESP_OK) { - ESP_LOGE(TAG, "Failed to unregister \"%s\"", partition_label); - return err; - } - esp_littlefs_free(&_efs[index]); - _efs[index] = NULL; - return ESP_OK; -} - -esp_err_t esp_littlefs_format(const char* partition_label) { - assert( partition_label ); - - bool was_mounted = false; - bool efs_free = false; - int index = -1; - esp_err_t err; - esp_littlefs_t *efs = NULL; - - ESP_LOGV(TAG, "Formatting \"%s\"", partition_label); - - /* Get a context */ - err = esp_littlefs_by_label(partition_label, &index); - - if( err != ESP_OK ){ - /* Create a tmp context */ - ESP_LOGV(TAG, "Temporarily creating EFS context."); - efs_free = true; - const esp_vfs_littlefs_conf_t conf = { - /* base_name not necessary for initializing */ - .dont_mount = true, - .partition_label = partition_label, - }; - err = esp_littlefs_init(&conf); /* Internally MIGHT call esp_littlefs_format */ - if( err != ESP_OK ) { - ESP_LOGE(TAG, "Failed to initialize to format."); - goto exit; - } - - err = esp_littlefs_by_label(partition_label, &index); - if ( err != ESP_OK) { - ESP_LOGE(TAG, "Error obtaining context."); - goto exit; - } - } - - efs = _efs[index]; - assert( efs ); - - /* Unmount if mounted */ - if(efs->cache_size > 0){ - int res; - ESP_LOGV(TAG, "Partition was mounted. Unmounting..."); - was_mounted = true; - res = lfs_unmount(efs->fs); - if(res != LFS_ERR_OK){ - ESP_LOGE(TAG, "Failed to unmount."); - return ESP_FAIL; - } - esp_littlefs_free_fds(efs); - } - - /* Erase and Format */ - { - int res; - ESP_LOGV(TAG, "Formatting filesystem"); - esp_littlefs_erase_partition(partition_label); - res = lfs_format(efs->fs, &efs->cfg); - if( res != LFS_ERR_OK ) { - ESP_LOGE(TAG, "Failed to format filesystem"); - return ESP_FAIL; - } - } - - /* Mount filesystem */ - if( was_mounted ) { - int res; - /* Remount the partition */ - ESP_LOGV(TAG, "Remounting formatted partition"); - res = lfs_mount(efs->fs, &efs->cfg); - if( res != LFS_ERR_OK ) { - ESP_LOGE(TAG, "Failed to re-mount filesystem"); - return ESP_FAIL; - } - efs->cache_size = CONFIG_LITTLEFS_FD_CACHE_MIN_SIZE; // Initial size of cache; will resize ondemand - efs->cache = calloc(sizeof(*efs->cache), efs->cache_size); - } - ESP_LOGV(TAG, "Format Success!"); - - err = ESP_OK; - -exit: - if(efs_free && index>=0) esp_littlefs_free(&_efs[index]); - return err; -} - -#if CONFIG_LITTLEFS_HUMAN_READABLE -/** - * @brief converts an enumerated lfs error into a string. - * @param lfs_error The littlefs error. - */ -const char * esp_littlefs_errno(enum lfs_error lfs_errno) { - switch(lfs_errno){ - case LFS_ERR_OK: return "LFS_ERR_OK"; - case LFS_ERR_IO: return "LFS_ERR_IO"; - case LFS_ERR_CORRUPT: return "LFS_ERR_CORRUPT"; - case LFS_ERR_NOENT: return "LFS_ERR_NOENT"; - case LFS_ERR_EXIST: return "LFS_ERR_EXIST"; - case LFS_ERR_NOTDIR: return "LFS_ERR_NOTDIR"; - case LFS_ERR_ISDIR: return "LFS_ERR_ISDIR"; - case LFS_ERR_NOTEMPTY: return "LFS_ERR_NOTEMPTY"; - case LFS_ERR_BADF: return "LFS_ERR_BADF"; - case LFS_ERR_FBIG: return "LFS_ERR_FBIG"; - case LFS_ERR_INVAL: return "LFS_ERR_INVAL"; - case LFS_ERR_NOSPC: return "LFS_ERR_NOSPC"; - case LFS_ERR_NOMEM: return "LFS_ERR_NOMEM"; - case LFS_ERR_NOATTR: return "LFS_ERR_NOATTR"; - case LFS_ERR_NAMETOOLONG: return "LFS_ERR_NAMETOOLONG"; - default: return "LFS_ERR_UNDEFINED"; - } - return ""; -} -#else -#define esp_littlefs_errno(x) "" -#endif - -/******************** - * Static Functions * - ********************/ - -/*** Helpers ***/ - -/** - * @brief Free and clear a littlefs definition structure. - * @param efs Pointer to pointer to struct. Done this way so we can also zero - * out the pointer. - */ -static void esp_littlefs_free(esp_littlefs_t ** efs) -{ - esp_littlefs_t * e = *efs; - if (e == NULL) return; - *efs = NULL; - - if (e->fs) { - if(e->cache_size > 0) lfs_unmount(e->fs); - free(e->fs); - } - if(e->lock) vSemaphoreDelete(e->lock); - esp_littlefs_free_fds(e); - free(e); -} - -/** - * @brief Free a vfs_littlefs_dir_t struct. - */ -static void esp_littlefs_dir_free(vfs_littlefs_dir_t *dir){ - if(dir == NULL) return; - if(dir->path) free(dir->path); - free(dir); -} - -/** - * Get a mounted littlefs filesystem by label. - * @param[in] label - * @param[out] index index into _efs - * @return ESP_OK on success - */ -static esp_err_t esp_littlefs_by_label(const char* label, int * index){ - int i; - esp_littlefs_t * p; - - if(!label || !index) return ESP_ERR_INVALID_ARG; - - ESP_LOGV(TAG, "Searching for existing filesystem for partition \"%s\"", label); - - for (i = 0; i < CONFIG_LITTLEFS_MAX_PARTITIONS; i++) { - p = _efs[i]; - if (p) { - if (strncmp(label, p->partition->label, 17) == 0) { - *index = i; - ESP_LOGV(TAG, "Found existing filesystem \"%s\" at index %d", label, *index); - return ESP_OK; - } - } - } - - ESP_LOGV(TAG, "Existing filesystem \"%s\" not found", label); - return ESP_ERR_NOT_FOUND; -} - -/** - * @brief Get the index of an unallocated LittleFS slot. - * @param[out] index Indexd of free LittleFS slot - * @return ESP_OK on success - */ -static esp_err_t esp_littlefs_get_empty(int *index) { - assert(index); - for(uint8_t i=0; i < CONFIG_LITTLEFS_MAX_PARTITIONS; i++){ - if( _efs[i] == NULL ){ - *index = i; - return ESP_OK; - } - } - ESP_LOGE(TAG, "No more free partitions available."); - return ESP_FAIL; -} - -/** - * @brief erase a partition; make sure LittleFS is unmounted first. - * @param partition_label NULL-terminated string of partition to erase - * @return ESP_OK on success - */ -static esp_err_t esp_littlefs_erase_partition(const char *partition_label) { - ESP_LOGV(TAG, "Erasing partition..."); - - const esp_partition_t* partition = esp_partition_find_first( - ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, - partition_label); - if (!partition) { - ESP_LOGE(TAG, "partition \"%s\" could not be found", partition_label); - return ESP_ERR_NOT_FOUND; - } - - if( esp_partition_erase_range(partition, 0, partition->size) != ESP_OK ) { - ESP_LOGE(TAG, "Failed to erase partition"); - return ESP_FAIL; - } - - return ESP_OK; -} - -/** - * @brief Convert fcntl flags to littlefs flags - * @param m fcntl flags - * @return lfs flags - */ -static int esp_littlefs_flags_conv(int m) { - int lfs_flags = 0; - if (m == O_APPEND) {ESP_LOGV(TAG, "O_APPEND"); lfs_flags |= LFS_O_APPEND;} - if (m == O_RDONLY) {ESP_LOGV(TAG, "O_RDONLY"); lfs_flags |= LFS_O_RDONLY;} - if (m & O_WRONLY) {ESP_LOGV(TAG, "O_WRONLY"); lfs_flags |= LFS_O_WRONLY;} - if (m & O_RDWR) {ESP_LOGV(TAG, "O_RDWR"); lfs_flags |= LFS_O_RDWR;} - if (m & O_EXCL) {ESP_LOGV(TAG, "O_EXCL"); lfs_flags |= LFS_O_EXCL;} - if (m & O_CREAT) {ESP_LOGV(TAG, "O_CREAT"); lfs_flags |= LFS_O_CREAT;} - if (m & O_TRUNC) {ESP_LOGV(TAG, "O_TRUNC"); lfs_flags |= LFS_O_TRUNC;} - return lfs_flags; -} - -/** - * @brief Initialize and mount littlefs - * @param[in] conf Filesystem Configuration - * @return ESP_OK on success - */ -static esp_err_t esp_littlefs_init(const esp_vfs_littlefs_conf_t* conf) -{ - int index = -1; - esp_err_t err = ESP_FAIL; - const esp_partition_t* partition = NULL; - esp_littlefs_t * efs = NULL; - - if( _efs_lock == NULL ){ - static portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; - portENTER_CRITICAL(&mux); - if( _efs_lock == NULL ){ - _efs_lock = xSemaphoreCreateMutex(); - assert(_efs_lock); - } - portEXIT_CRITICAL(&mux); - } - - xSemaphoreTake(_efs_lock, portMAX_DELAY); - - if (esp_littlefs_get_empty(&index) != ESP_OK) { - ESP_LOGE(TAG, "max mounted partitions reached"); - err = ESP_ERR_INVALID_STATE; - goto exit; - } - - /* Input and Environment Validation */ - if (esp_littlefs_by_label(conf->partition_label, &index) == ESP_OK) { - ESP_LOGE(TAG, "Partition already used"); - err = ESP_ERR_INVALID_STATE; - goto exit; - } - - { - uint32_t flash_page_size = g_rom_flashchip.page_size; - uint32_t log_page_size = CONFIG_LITTLEFS_PAGE_SIZE; - if (log_page_size % flash_page_size != 0) { - ESP_LOGE(TAG, "LITTLEFS_PAGE_SIZE is not multiple of flash chip page size (%d)", - flash_page_size); - err = ESP_ERR_INVALID_ARG; - goto exit; - } - } - - if ( NULL == conf->partition_label ) { - ESP_LOGE(TAG, "Partition label must be provided."); - err = ESP_ERR_INVALID_ARG; - goto exit; - } - - partition = esp_partition_find_first( - ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, - conf->partition_label); - - if (!partition) { - ESP_LOGE(TAG, "partition \"%s\" could not be found", conf->partition_label); - err = ESP_ERR_NOT_FOUND; - goto exit; - } - - /* Allocate Context */ - efs = calloc(1, sizeof(esp_littlefs_t)); - if (efs == NULL) { - ESP_LOGE(TAG, "esp_littlefs could not be malloced"); - err = ESP_ERR_NO_MEM; - goto exit; - } - efs->partition = partition; - - { /* LittleFS Configuration */ - efs->cfg.context = efs; - - // block device operations - efs->cfg.read = littlefs_api_read; - efs->cfg.prog = littlefs_api_prog; - efs->cfg.erase = littlefs_api_erase; - efs->cfg.sync = littlefs_api_sync; - - // block device configuration - efs->cfg.read_size = CONFIG_LITTLEFS_READ_SIZE; - efs->cfg.prog_size = CONFIG_LITTLEFS_WRITE_SIZE; - efs->cfg.block_size = CONFIG_LITTLEFS_BLOCK_SIZE;; - efs->cfg.block_count = efs->partition->size / efs->cfg.block_size; - efs->cfg.cache_size = CONFIG_LITTLEFS_CACHE_SIZE; - efs->cfg.lookahead_size = CONFIG_LITTLEFS_LOOKAHEAD_SIZE; - efs->cfg.block_cycles = CONFIG_LITTLEFS_BLOCK_CYCLES; - } - - efs->lock = xSemaphoreCreateRecursiveMutex(); - if (efs->lock == NULL) { - ESP_LOGE(TAG, "mutex lock could not be created"); - err = ESP_ERR_NO_MEM; - goto exit; - } - - efs->fs = calloc(1, sizeof(lfs_t)); - if (efs->fs == NULL) { - ESP_LOGE(TAG, "littlefs could not be malloced"); - err = ESP_ERR_NO_MEM; - goto exit; - } - - // Mount and Error Check - _efs[index] = efs; - if(!conf->dont_mount){ - int res = lfs_mount(efs->fs, &efs->cfg); - - if (conf->format_if_mount_failed && res != LFS_ERR_OK) { - esp_err_t err; - ESP_LOGW(TAG, "mount failed, %s (%i). formatting...", esp_littlefs_errno(res), res); - err = esp_littlefs_format(efs->partition->label); - if(err != ESP_OK) { - ESP_LOGE(TAG, "format failed"); - err = ESP_FAIL; - goto exit; - } - res = lfs_mount(efs->fs, &efs->cfg); - } - if (res != LFS_ERR_OK) { - ESP_LOGE(TAG, "mount failed, %s (%i)", esp_littlefs_errno(res), res); - err = ESP_FAIL; - goto exit; - } - efs->cache_size = 4; - efs->cache = calloc(sizeof(*efs->cache), efs->cache_size); - } - - err = ESP_OK; - -exit: - if(err != ESP_OK){ - if( index >= 0 ) { - esp_littlefs_free(&_efs[index]); - } - else{ - esp_littlefs_free(&efs); - } - } - xSemaphoreGive(_efs_lock); - return err; -} - -/** - * @brief - * @parameter efs file system context - */ -static inline int sem_take(esp_littlefs_t *efs) { - int res; -#if LOG_LOCAL_LEVEL >= 5 - ESP_LOGV(TAG, "------------------------ Sem Taking [%s]", pcTaskGetTaskName(NULL)); -#endif - res = xSemaphoreTakeRecursive(efs->lock, portMAX_DELAY); -#if LOG_LOCAL_LEVEL >= 5 - ESP_LOGV(TAG, "--------------------->>> Sem Taken [%s]", pcTaskGetTaskName(NULL)); -#endif - return res; -} - -/** - * @brief - * @parameter efs file system context - */ -static inline int sem_give(esp_littlefs_t *efs) { -#if LOG_LOCAL_LEVEL >= 5 - ESP_LOGV(TAG, "---------------------<<< Sem Give [%s]", pcTaskGetTaskName(NULL)); -#endif - return xSemaphoreGiveRecursive(efs->lock); -} - - -/* We are using a double allocation system here, which an array and a linked list. - The array contains the pointer to the file descriptor (the index in the array is what's returned to the user). - The linked list is used for file descriptors. - This means that position of nodes in the list must stay consistent: - - Allocation is obvious (append to the list from the head, and realloc the pointers array) - There is still a O(N) search in the cache for a free position to store - - Searching is a O(1) process (good) - - Deallocation is more tricky. That is, for example, - if you need to remove node 5 in a 12 nodes list, you'll have to: - 1) Mark the 5th position as freed (if it's the last position of the array realloc smaller) - 2) Walk the list until finding the pointer to the node O(N) and scrub the node so the chained list stays consistent - 3) Deallocate the node -*/ - -/** - * @brief Get a file descriptor - * @param[in,out] efs file system context - * @param[out] file pointer to a file that'll be filled with a file object - * @param[in] path_len the length of the filepath in bytes (including terminating zero byte) - * @return integer file descriptor. Returns -1 if a FD cannot be obtained. - * @warning This must be called with lock taken - */ -static int esp_littlefs_allocate_fd(esp_littlefs_t *efs, vfs_littlefs_file_t ** file -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - , const size_t path_len -#endif - ) -{ - int i = -1; - - assert( efs->fd_count < UINT16_MAX ); - assert( efs->cache_size < UINT16_MAX ); - - /* Make sure there is enough space in the cache to store new fd */ - if (efs->fd_count + 1 > efs->cache_size) { - uint16_t new_size = (uint16_t)MIN(UINT16_MAX, CONFIG_LITTLEFS_FD_CACHE_REALLOC_FACTOR * efs->cache_size); - /* Resize the cache */ - vfs_littlefs_file_t ** new_cache = realloc(efs->cache, new_size * sizeof(*efs->cache)); - if (!new_cache) { - ESP_LOGE(TAG, "Unable to allocate file cache"); - return -1; /* If it fails here, no harm is done to the filesystem, so it's safe */ - } - /* Zero out the new portions of the cache */ - memset(&new_cache[efs->cache_size], 0, (new_size - efs->cache_size) * sizeof(*efs->cache)); - efs->cache = new_cache; - efs->cache_size = new_size; - } - - - /* Allocate file descriptor here now */ -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - *file = calloc(1, sizeof(**file) + path_len); -#else - *file = calloc(1, sizeof(**file)); -#endif - - if (*file == NULL) { - /* If it fails here, the file system might have a larger cache, but it's harmless, no need to reverse it */ - ESP_LOGE(TAG, "Unable to allocate FD"); - return -1; - } - - /* Starting from here, nothing can fail anymore */ - -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - /* The trick here is to avoid dual allocation so the path pointer - should point to the next byte after it: - file => [ lfs_file | # | next | path | free_space ] - | /\ - |__/ - */ - (*file)->path = (char*)(*file) + sizeof(**file); -#endif - - /* Now find a free place in cache */ - for(i=0; i < efs->cache_size; i++) { - if (efs->cache[i] == NULL) { - efs->cache[i] = *file; - break; - } - } - /* Save file in the list */ - (*file)->next = efs->file; - efs->file = *file; - efs->fd_count++; - return i; -} - -/** - * @brief Release a file descriptor - * @param[in,out] efs file system context - * @param[in] fd File Descriptor to release - * @return 0 on success. -1 if a FD cannot be obtained. - * @warning This must be called with lock taken - */ -static int esp_littlefs_free_fd(esp_littlefs_t *efs, int fd){ - vfs_littlefs_file_t * file, * head; - - if((uint32_t)fd >= efs->cache_size) { - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return -1; - } - - /* Get the file descriptor to free it */ - file = efs->cache[fd]; - head = efs->file; - /* Search for file in SLL to remove it */ - if (file == head) { - /* Last file, can't fail */ - efs->file = efs->file->next; - } else { - while (head && head->next != file) { - head = head->next; - } - if (!head) { - ESP_LOGE(TAG, "Inconsistent list"); - return -1; - } - /* Transaction starts here and can't fail anymore */ - head->next = file->next; - } - efs->cache[fd] = NULL; - efs->fd_count--; - - ESP_LOGV(TAG, "Clearing FD"); - free(file); - -#if 0 - /* Realloc smaller if its possible - * * Find and realloc based on number of trailing NULL ptrs in cache - * * Leave some hysteris to prevent thrashing around resize points - * This is disabled for now because it adds unnecessary complexity - * and binary size increase that outweights its ebenfits. - */ - if(efs->cache_size > CONFIG_LITTLEFS_FD_CACHE_MIN_SIZE) { - uint16_t n_free; - uint16_t new_size = efs->cache_size / CONFIG_LITTLEFS_FD_CACHE_REALLOC_FACTOR; - - if(new_size >= CONFIG_LITTLEFS_FD_CACHE_MIN_SIZE) { - /* Count number of trailing NULL ptrs */ - for(n_free=0; n_free < efs->cache_size; n_free++) { - if(efs->cache[efs->cache_size - n_free - 1] != NULL) { - break; - } - } - - if(n_free >= (efs->cache_size - new_size)){ - new_size += CONFIG_LITTLEFS_FD_CACHE_HYST; - ESP_LOGV(TAG, "Reallocating cache %i -> %i", efs->cache_size, new_size); - vfs_littlefs_file_t ** new_cache; - new_cache = realloc(efs->cache, new_size * sizeof(*efs->cache)); - /* No harm on realloc failure, continue using the oversized cache */ - if(new_cache) { - efs->cache = new_cache; - efs->cache_size = new_size; - } - } - } - } -#endif - - return 0; -} - -/** - * @brief Compute the 32bit DJB2 hash of the given string. - * @param[in] path the path to hash - * @returns the hash for this path - */ -static uint32_t compute_hash(const char * path) { - uint32_t hash = 5381; - char c; - - while ((c = *path++)) - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - return hash; -} - -/** - * @brief finds an open file descriptor by file name. - * @param[in,out] efs file system context - * @param[in] path File path to check. - * @returns integer file descriptor. Returns -1 if not found. - * @warning This must be called with lock taken - * @warning if CONFIG_LITTLEFS_USE_ONLY_HASH, there is a slim chance an - * erroneous FD may be returned on hash collision. - */ -static int esp_littlefs_get_fd_by_name(esp_littlefs_t *efs, const char *path){ - uint32_t hash = compute_hash(path); - - for(uint16_t i=0, j=0; i < efs->cache_size && j < efs->fd_count; i++){ - if (efs->cache[i]) { - ++j; - - if ( - efs->cache[i]->hash == hash // Faster than strcmp -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - && strcmp(path, efs->cache[i]->path) == 0 // May as well check incase of hash collision. Usually short-circuited. -#endif - ) { - ESP_LOGV(TAG, "Found \"%s\" at FD %d.", path, i); - return i; - } - } - } - ESP_LOGV(TAG, "Unable to get a find FD for \"%s\"", path); - return -1; -} - -/*** Filesystem Hooks ***/ - -static int vfs_littlefs_open(void* ctx, const char * path, int flags, int mode) { - /* Note: mode is currently unused */ - int fd=-1, lfs_flags, res; - esp_littlefs_t *efs = (esp_littlefs_t *)ctx; - vfs_littlefs_file_t *file = NULL; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - size_t path_len = strlen(path) + 1; // include NULL terminator -#endif - assert(path); - - ESP_LOGV(TAG, "Opening %s", path); - - /* Convert flags to lfs flags */ - lfs_flags = esp_littlefs_flags_conv(flags); - - /* Get a FD */ - sem_take(efs); - - fd = esp_littlefs_allocate_fd(efs, &file -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - , path_len -#endif - ); - - if(fd < 0) { - errno = -fd; - sem_give(efs); - ESP_LOGV(TAG, "Error obtaining FD"); - return LFS_ERR_INVAL; - } - -#if CONFIG_LITTLEFS_SPIFFS_COMPAT - /* Create all parent directories (if necessary) */ - ESP_LOGV(TAG, "LITTLEFS_SPIFFS_COMPAT attempting to create all directories for %s", path); - mkdirs(efs, path); -#endif // CONFIG_LITTLEFS_SPIFFS_COMPAT - - /* Open File */ - res = lfs_file_open(efs->fs, &file->file, path, lfs_flags); - - if( res < 0 ) { - errno = -res; - esp_littlefs_free_fd(efs, fd); - sem_give(efs); -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to open file %s. Error %s (%d)", - path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to open file. Error %s (%d)", - esp_littlefs_errno(res), res); -#endif - return LFS_ERR_INVAL; - } - - /* Sync after opening. If we are overwriting a file, this will free that - * file's blocks in storage, prevent OOS errors. - * See TEST_CASE: - * "Rewriting file frees space immediately (#7426)" - */ - res = lfs_file_sync(efs->fs, &file->file); - if(res < 0){ - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to sync at opening file \"%s\". Error %s (%d)", - file->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to sync at opening file %d. Error %d", fd, res); -#endif - } - - file->hash = compute_hash(path); -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - memcpy(file->path, path, path_len); -#endif - -#if CONFIG_LITTLEFS_USE_MTIME - if (lfs_flags != LFS_O_RDONLY) { - /* If this is being opened as not read-only */ - vfs_littlefs_update_mtime(efs, path); - } -#endif - - sem_give(efs); - ESP_LOGV(TAG, "Done opening %s", path); - return fd; -} - -static ssize_t vfs_littlefs_write(void* ctx, int fd, const void * data, size_t size) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - ssize_t res; - vfs_littlefs_file_t *file = NULL; - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_file_write(efs->fs, &file->file, data, size); - sem_give(efs); - - if(res < 0){ - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to write FD %d; path \"%s\". Error %s (%d)", - fd, file->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to write FD %d. Error %s (%d)", - fd, esp_littlefs_errno(res), res); -#endif - return res; - } - - return res; -} - -static ssize_t vfs_littlefs_read(void* ctx, int fd, void * dst, size_t size) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - ssize_t res; - vfs_littlefs_file_t *file = NULL; - - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_file_read(efs->fs, &file->file, dst, size); - sem_give(efs); - - if(res < 0){ - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to read file \"%s\". Error %s (%d)", - file->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to read FD %d. Error %s (%d)", - fd, esp_littlefs_errno(res), res); -#endif - return res; - } - - return res; -} - -static int vfs_littlefs_close(void* ctx, int fd) { - // TODO update mtime on close? SPIFFS doesn't do this - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - int res; - vfs_littlefs_file_t *file = NULL; - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_file_close(efs->fs, &file->file); - if(res < 0){ - errno = -res; - sem_give(efs); -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to close file \"%s\". Error %s (%d)", - file->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to close Fd %d. Error %s (%d)", - fd, esp_littlefs_errno(res), res); -#endif - return res; - } - esp_littlefs_free_fd(efs, fd); - sem_give(efs); - return res; -} - -static off_t vfs_littlefs_lseek(void* ctx, int fd, off_t offset, int mode) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - lfs_soff_t res; - vfs_littlefs_file_t *file = NULL; - int whence; - - switch (mode) { - case SEEK_SET: whence = LFS_SEEK_SET; break; - case SEEK_CUR: whence = LFS_SEEK_CUR; break; - case SEEK_END: whence = LFS_SEEK_END; break; - default: - ESP_LOGE(TAG, "Invalid mode"); - return -1; - } - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_file_seek(efs->fs, &file->file, offset, whence); - sem_give(efs); - - if(res < 0){ - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to seek file \"%s\" to offset %08x. Error %s (%d)", - file->path, (unsigned int)offset, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to seek FD %d to offset %08x. Error (%d)", - fd, (unsigned int)offset, res); -#endif - return res; - } - - return res; -} - -static int vfs_littlefs_fsync(void* ctx, int fd) -{ - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - ssize_t res; - vfs_littlefs_file_t *file = NULL; - - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD %d must be <%d.", fd, efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_file_sync(efs->fs, &file->file); - sem_give(efs); - - if(res < 0){ - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to sync file \"%s\". Error %s (%d)", - file->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to sync file %d. Error %d", fd, res); -#endif - return res; - } - - return res; -} - - -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH -static int vfs_littlefs_fstat(void* ctx, int fd, struct stat * st) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - struct lfs_info info; - int res; - vfs_littlefs_file_t *file = NULL; - - memset(st, 0, sizeof(struct stat)); - st->st_blksize = efs->cfg.block_size; - - sem_take(efs); - if((uint32_t)fd > efs->cache_size) { - sem_give(efs); - ESP_LOGE(TAG, "FD must be <%d.", efs->cache_size); - return LFS_ERR_BADF; - } - file = efs->cache[fd]; - res = lfs_stat(efs->fs, file->path, &info); - if (res < 0) { - errno = -res; - sem_give(efs); - ESP_LOGV(TAG, "Failed to stat file \"%s\". Error %s (%d)", - file->path, esp_littlefs_errno(res), res); - return res; - } - -#if CONFIG_LITTLEFS_USE_MTIME - st->st_mtime = vfs_littlefs_get_mtime(efs, file->path); -#endif - - sem_give(efs); - - st->st_size = info.size; - st->st_mode = ((info.type==LFS_TYPE_REG)?S_IFREG:S_IFDIR); - return 0; -} -#endif - -static int vfs_littlefs_stat(void* ctx, const char * path, struct stat * st) { - assert(path); - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - struct lfs_info info; - int res; - - memset(st, 0, sizeof(struct stat)); - st->st_blksize = efs->cfg.block_size; - - sem_take(efs); - res = lfs_stat(efs->fs, path, &info); - if (res < 0) { - errno = -res; - sem_give(efs); - /* Not strictly an error, since stat can be used to check - * if a file exists */ - ESP_LOGV(TAG, "Failed to stat path \"%s\". Error %s (%d)", - path, esp_littlefs_errno(res), res); - return res; - } -#if CONFIG_LITTLEFS_USE_MTIME - st->st_mtime = vfs_littlefs_get_mtime(efs, path); -#endif - sem_give(efs); - st->st_size = info.size; - st->st_mode = ((info.type==LFS_TYPE_REG)?S_IFREG:S_IFDIR); - return 0; -} - -static int vfs_littlefs_unlink(void* ctx, const char *path) { -#define fail_str_1 "Failed to unlink path \"%s\"." - assert(path); - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - struct lfs_info info; - int res; - - sem_take(efs); - res = lfs_stat(efs->fs, path, &info); - if (res < 0) { - errno = -res; - sem_give(efs); - ESP_LOGV(TAG, fail_str_1 " Error %s (%d)", - path, esp_littlefs_errno(res), res); - return res; - } - - if(esp_littlefs_get_fd_by_name(efs, path) >= 0) { - sem_give(efs); - ESP_LOGE(TAG, fail_str_1 " Has open FD.", path); - return -1; - } -/* commented for old core revisions compatibility */ -/* - if (info.type == LFS_TYPE_DIR) { - sem_give(efs); - ESP_LOGV(TAG, "Cannot unlink a directory."); - return LFS_ERR_ISDIR; - } -*/ - res = lfs_remove(efs->fs, path); - if (res < 0) { - errno = -res; - sem_give(efs); - ESP_LOGV(TAG, fail_str_1 " Error %s (%d)", - path, esp_littlefs_errno(res), res); - return res; - } - -#if CONFIG_LITTLEFS_SPIFFS_COMPAT - /* Attempt to delete all parent directories that are empty */ - rmdirs(efs, path); -#endif // CONFIG_LITTLEFS_SPIFFS_COMPAT - - sem_give(efs); - - return 0; -#undef fail_str_1 -} - -static int vfs_littlefs_rename(void* ctx, const char *src, const char *dst) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - int res; - - sem_take(efs); - - if(esp_littlefs_get_fd_by_name(efs, src) >= 0){ - sem_give(efs); - ESP_LOGE(TAG, "Cannot rename; src \"%s\" is open.", src); - return -1; - } - else if(esp_littlefs_get_fd_by_name(efs, dst) >= 0){ - sem_give(efs); - ESP_LOGE(TAG, "Cannot rename; dst \"%s\" is open.", dst); - return -1; - } - - res = lfs_rename(efs->fs, src, dst); - sem_give(efs); - if (res < 0) { - errno = -res; - ESP_LOGV(TAG, "Failed to rename \"%s\" -> \"%s\". Error %s (%d)", - src, dst, esp_littlefs_errno(res), res); - return res; - } - - return 0; -} - -static DIR* vfs_littlefs_opendir(void* ctx, const char* name) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - int res; - vfs_littlefs_dir_t *dir = NULL; - - dir = calloc(1, sizeof(vfs_littlefs_dir_t)); - if( dir == NULL ) { - ESP_LOGE(TAG, "dir struct could not be malloced"); - goto exit; - } - - dir->path = strdup(name); - if(dir->path == NULL){ - ESP_LOGE(TAG, "dir path name could not be malloced"); - goto exit; - } - - sem_take(efs); - res = lfs_dir_open(efs->fs, &dir->d, dir->path); - sem_give(efs); - if (res < 0) { - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to opendir \"%s\". Error %s (%d)", - dir->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to opendir \"%s\". Error %d", dir->path, res); -#endif - goto exit; - } - - return (DIR *)dir; - -exit: - esp_littlefs_dir_free(dir); - return NULL; -} - -static int vfs_littlefs_closedir(void* ctx, DIR* pdir) { - assert(pdir); - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - vfs_littlefs_dir_t * dir = (vfs_littlefs_dir_t *) pdir; - int res; - - sem_take(efs); - res = lfs_dir_close(efs->fs, &dir->d); - sem_give(efs); - if (res < 0) { - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to closedir \"%s\". Error %s (%d)", - dir->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to closedir \"%s\". Error %d", dir->path, res); -#endif - return res; - } - - esp_littlefs_dir_free(dir); - return 0; -} - -static struct dirent* vfs_littlefs_readdir(void* ctx, DIR* pdir) { - assert(pdir); - vfs_littlefs_dir_t * dir = (vfs_littlefs_dir_t *) pdir; - int res; - struct dirent* out_dirent; - - res = vfs_littlefs_readdir_r(ctx, pdir, &dir->e, &out_dirent); - if (res != 0) return NULL; - return out_dirent; -} - -static int vfs_littlefs_readdir_r(void* ctx, DIR* pdir, - struct dirent* entry, struct dirent** out_dirent) { - assert(pdir); - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - vfs_littlefs_dir_t * dir = (vfs_littlefs_dir_t *) pdir; - int res; - struct lfs_info info = { 0 }; - - sem_take(efs); - do{ /* Read until we get a real object name */ - res = lfs_dir_read(efs->fs, &dir->d, &info); - }while( res>0 && (strcmp(info.name, ".") == 0 || strcmp(info.name, "..") == 0)); - sem_give(efs); - if (res < 0) { - errno = -res; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to readdir \"%s\". Error %s (%d)", - dir->path, esp_littlefs_errno(res), res); -#else - ESP_LOGV(TAG, "Failed to readdir \"%s\". Error %d", dir->path, res); -#endif - return -1; - } - - if(info.type == LFS_TYPE_REG) { - ESP_LOGV(TAG, "readdir a file of size %d named \"%s\"", - info.size, info.name); - } - else { - ESP_LOGV(TAG, "readdir a dir named \"%s\"", info.name); - } - - if(res == 0) { - /* End of Objs */ - ESP_LOGV(TAG, "Reached the end of the directory."); - *out_dirent = NULL; - } - else { - entry->d_ino = 0; - entry->d_type = info.type == LFS_TYPE_REG ? DT_REG : DT_DIR; - strncpy(entry->d_name, info.name, sizeof(entry->d_name)); - *out_dirent = entry; - } - dir->offset++; - - return 0; -} - -static long vfs_littlefs_telldir(void* ctx, DIR* pdir) { - assert(pdir); - vfs_littlefs_dir_t * dir = (vfs_littlefs_dir_t *) pdir; - return dir->offset; -} - -static void vfs_littlefs_seekdir(void* ctx, DIR* pdir, long offset) { - assert(pdir); - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - vfs_littlefs_dir_t * dir = (vfs_littlefs_dir_t *) pdir; - int res; - - if (offset < dir->offset) { - /* close and re-open dir to rewind to beginning */ - sem_take(efs); - res = lfs_dir_rewind(efs->fs, &dir->d); - sem_give(efs); - if (res < 0) { - errno = -res; - ESP_LOGV(TAG, "Failed to rewind dir \"%s\". Error %s (%d)", - dir->path, esp_littlefs_errno(res), res); - return; - } - dir->offset = 0; - } - - while(dir->offset < offset){ - struct dirent *out_dirent; - res = vfs_littlefs_readdir_r(ctx, pdir, &dir->e, &out_dirent); - if( res != 0 ){ - ESP_LOGE(TAG, "Error readdir_r"); - return; - } - } -} - -static int vfs_littlefs_mkdir(void* ctx, const char* name, mode_t mode) { - /* Note: mode is currently unused */ - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - int res; - ESP_LOGV(TAG, "mkdir \"%s\"", name); - - sem_take(efs); - res = lfs_mkdir(efs->fs, name); - sem_give(efs); - if (res < 0) { - errno = -res; - ESP_LOGV(TAG, "Failed to mkdir \"%s\". Error %s (%d)", - name, esp_littlefs_errno(res), res); - return res; - } - return 0; -} - -static int vfs_littlefs_rmdir(void* ctx, const char* name) { - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - struct lfs_info info; - int res; - - /* Error Checking */ - sem_take(efs); - res = lfs_stat(efs->fs, name, &info); - if (res < 0) { - errno = -res; - sem_give(efs); - ESP_LOGV(TAG, "\"%s\" doesn't exist.", name); - return -1; - } - - if (info.type != LFS_TYPE_DIR) { - sem_give(efs); - ESP_LOGV(TAG, "\"%s\" is not a directory.", name); - return -1; - } - - /* Unlink the dir */ - res = lfs_remove(efs->fs, name); - sem_give(efs); - if ( res < 0) { - errno = -res; - ESP_LOGV(TAG, "Failed to unlink path \"%s\". Error %s (%d)", - name, esp_littlefs_errno(res), res); - return -1; - } - - return 0; -} - -#if CONFIG_LITTLEFS_USE_MTIME -/** - * Sets the mtime attr to t. - */ -static int vfs_littlefs_update_mtime_value(esp_littlefs_t *efs, const char *path, time_t t) -{ - int res; - res = lfs_setattr(efs->fs, path, LITTLEFS_ATTR_MTIME, - &t, sizeof(t)); - if( res < 0 ) { - errno = -res; - ESP_LOGV(TAG, "Failed to update mtime (%d)", res); - } - - return res; -} - -/** - * Sets the mtime attr to an appropriate value - */ -static void vfs_littlefs_update_mtime(esp_littlefs_t *efs, const char *path) -{ - vfs_littlefs_utime(efs, path, NULL); -} - - -static int vfs_littlefs_utime(void *ctx, const char *path, const struct utimbuf *times) -{ - esp_littlefs_t * efs = (esp_littlefs_t *)ctx; - time_t t; - - assert(path); - - if (times) { - t = times->modtime; - } else { -#if CONFIG_LITTLEFS_MTIME_USE_SECONDS - // use current time - t = time(NULL); -#elif CONFIG_LITTLEFS_MTIME_USE_NONCE - assert( sizeof(time_t) == 4 ); - t = vfs_littlefs_get_mtime(efs, path); - if( 0 == t ) t = esp_random(); - else t += 1; - - if( 0 == t ) t = 1; -#else -#error "Invalid MTIME configuration" -#endif - } - - int ret = vfs_littlefs_update_mtime_value(efs, path, t); - return ret; -} - -static time_t vfs_littlefs_get_mtime(esp_littlefs_t *efs, const char *path) -{ - time_t t = 0; - int size; - size = lfs_getattr(efs->fs, path, LITTLEFS_ATTR_MTIME, - &t, sizeof(t)); - if( size < 0 ) { - errno = -size; -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - ESP_LOGV(TAG, "Failed to get mtime attribute %s (%d)", - esp_littlefs_errno(size), size); -#else - ESP_LOGV(TAG, "Failed to get mtime attribute %d", size); -#endif - } - return t; -} -#endif //CONFIG_LITTLEFS_USE_MTIME - -#if CONFIG_LITTLEFS_SPIFFS_COMPAT -/** - * @brief Recursively make all parent directories for a file. - * @param[in] dir Path of directories to make up to. The last element - * of the path is assumed to be the file and IS NOT created. - * e.g. - * "foo/bar/baz" - * will create directories "foo" and "bar" - */ -static void mkdirs(esp_littlefs_t * efs, const char *dir) { - char tmp[CONFIG_LITTLEFS_OBJ_NAME_LEN]; - char *p = NULL; - - strlcpy(tmp, dir, sizeof(tmp)); - for(p = tmp + 1; *p; p++) { - if(*p == '/') { - *p = '\0'; - vfs_littlefs_mkdir((void*)efs, tmp, S_IRWXU); - *p = '/'; - } - } -} - -/** - * @brief Recursively attempt to delete all empty directories for a file. - * @param[in] dir Path of directories to delete. The last element of the path - * is assumed to be the file and IS NOT deleted. - * e.g. - * "foo/bar/baz" - * will attempt to delete directories (in order): - * 1. "foo/bar/baz" - * 2. "foo/bar" - * 3. "foo" - */ - -static void rmdirs(esp_littlefs_t * efs, const char *dir) { - char tmp[CONFIG_LITTLEFS_OBJ_NAME_LEN]; - char *p = NULL; - - strlcpy(tmp, dir, sizeof(tmp)); - for(p = tmp + strlen(tmp) - 1; p != tmp; p--) { - if(*p == '/') { - *p = '\0'; - vfs_littlefs_rmdir((void*)efs, tmp); - *p = '/'; - } - } -} - -#endif // CONFIG_LITTLEFS_SPIFFS_COMPAT diff --git a/lib/libesp32/LITTLEFS/src/esp_littlefs.h b/lib/libesp32/LITTLEFS/src/esp_littlefs.h deleted file mode 100755 index 549c967e6..000000000 --- a/lib/libesp32/LITTLEFS/src/esp_littlefs.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef ESP_LITTLEFS_H__ -#define ESP_LITTLEFS_H__ - -#include -#include -#include -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/semphr.h" -#include "esp_err.h" -#include -#include -#include -#include -#include -#include -#include -#include "sdkconfig.h" - -#include "lfs.h" //#include "littlefs/lfs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Last Modified Time - * - * Use 't' for LITTLEFS_ATTR_MTIME to match example: - * https://github.com/ARMmbed/littlefs/issues/23#issuecomment-482293539 - * And to match other external tools such as: - * https://github.com/earlephilhower/mklittlefs - */ -#define LITTLEFS_ATTR_MTIME ((uint8_t) 't') - -/** - *Configuration structure for esp_vfs_littlefs_register. - */ -typedef struct { - const char *base_path; /**< Mounting point. */ - const char *partition_label; /**< Label of partition to use. */ - uint8_t format_if_mount_failed:1; /**< Format the file system if it fails to mount. */ - uint8_t dont_mount:1; /**< Don't attempt to mount or format. Overrides format_if_mount_failed */ -} esp_vfs_littlefs_conf_t; - -/** - * Register and mount littlefs to VFS with given path prefix. - * - * @param conf Pointer to esp_vfs_littlefs_conf_t configuration structure - * - * @return - * - ESP_OK if success - * - ESP_ERR_NO_MEM if objects could not be allocated - * - ESP_ERR_INVALID_STATE if already mounted or partition is encrypted - * - ESP_ERR_NOT_FOUND if partition for littlefs was not found - * - ESP_FAIL if mount or format fails - */ -esp_err_t esp_vfs_littlefs_register(const esp_vfs_littlefs_conf_t * conf); - -/** - * Unregister and unmount littlefs from VFS - * - * @param partition_label Label of the partition to unregister. - * - * @return - * - ESP_OK if successful - * - ESP_ERR_INVALID_STATE already unregistered - */ -esp_err_t esp_vfs_littlefs_unregister(const char* partition_label); - -/** - * Check if littlefs is mounted - * - * @param partition_label Label of the partition to check. - * - * @return - * - true if mounted - * - false if not mounted - */ -bool esp_littlefs_mounted(const char* partition_label); - -/** - * Format the littlefs partition - * - * @param partition_label Label of the partition to format. - * @return - * - ESP_OK if successful - * - ESP_FAIL on error - */ -esp_err_t esp_littlefs_format(const char* partition_label); - -/** - * Get information for littlefs - * - * @param partition_label Optional, label of the partition to get info for. - * @param[out] total_bytes Size of the file system - * @param[out] used_bytes Current used bytes in the file system - * - * @return - * - ESP_OK if success - * - ESP_ERR_INVALID_STATE if not mounted - */ -esp_err_t esp_littlefs_info(const char* partition_label, size_t *total_bytes, size_t *used_bytes); - -#if CONFIG_LITTLEFS_HUMAN_READABLE -/** - * @brief converts an enumerated lfs error into a string. - * @param lfs_errno The enumerated littlefs error. - */ -const char * esp_littlefs_errno(enum lfs_error lfs_errno); -#endif - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif diff --git a/lib/libesp32/LITTLEFS/src/lfs.c b/lib/libesp32/LITTLEFS/src/lfs.c deleted file mode 100755 index a5bfb914e..000000000 --- a/lib/libesp32/LITTLEFS/src/lfs.c +++ /dev/null @@ -1,4918 +0,0 @@ -/* - * The little filesystem - * - * Copyright (c) 2017, Arm Limited. All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - * - * @note Modified and used by lorol for Arduino esp32 core tests - */ - -//#define LFS_NO_ERROR /* Change default error reporting level: LFS_NO_DEBUG, LFS_NO_WARN, LFS_NO_ERROR, LFS_YES_TRACE */ - -#include "lfs.h" -#include "lfs_util.h" - -#define LFS_BLOCK_NULL ((lfs_block_t)-1) -#define LFS_BLOCK_INLINE ((lfs_block_t)-2) - -/// Caching block device operations /// -static inline void lfs_cache_drop(lfs_t *lfs, lfs_cache_t *rcache) { - // do not zero, cheaper if cache is readonly or only going to be - // written with identical data (during relocates) - (void)lfs; - rcache->block = LFS_BLOCK_NULL; -} - -static inline void lfs_cache_zero(lfs_t *lfs, lfs_cache_t *pcache) { - // zero to avoid information leak - memset(pcache->buffer, 0xff, lfs->cfg->cache_size); - pcache->block = LFS_BLOCK_NULL; -} - -static int lfs_bd_read(lfs_t *lfs, - const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, - lfs_block_t block, lfs_off_t off, - void *buffer, lfs_size_t size) { - uint8_t *data = buffer; - if (block >= lfs->cfg->block_count || - off+size > lfs->cfg->block_size) { - return LFS_ERR_CORRUPT; - } - - while (size > 0) { - lfs_size_t diff = size; - - if (pcache && block == pcache->block && - off < pcache->off + pcache->size) { - if (off >= pcache->off) { - // is already in pcache? - diff = lfs_min(diff, pcache->size - (off-pcache->off)); - memcpy(data, &pcache->buffer[off-pcache->off], diff); - - data += diff; - off += diff; - size -= diff; - continue; - } - - // pcache takes priority - diff = lfs_min(diff, pcache->off-off); - } - - if (block == rcache->block && - off < rcache->off + rcache->size) { - if (off >= rcache->off) { - // is already in rcache? - diff = lfs_min(diff, rcache->size - (off-rcache->off)); - memcpy(data, &rcache->buffer[off-rcache->off], diff); - - data += diff; - off += diff; - size -= diff; - continue; - } - - // rcache takes priority - diff = lfs_min(diff, rcache->off-off); - } - - if (size >= hint && off % lfs->cfg->read_size == 0 && - size >= lfs->cfg->read_size) { - // bypass cache? - diff = lfs_aligndown(diff, lfs->cfg->read_size); - int err = lfs->cfg->read(lfs->cfg, block, off, data, diff); - if (err) { - return err; - } - - data += diff; - off += diff; - size -= diff; - continue; - } - - // load to cache, first condition can no longer fail - LFS_ASSERT(block < lfs->cfg->block_count); - rcache->block = block; - rcache->off = lfs_aligndown(off, lfs->cfg->read_size); - rcache->size = lfs_min( - lfs_min( - lfs_alignup(off+hint, lfs->cfg->read_size), - lfs->cfg->block_size) - - rcache->off, - lfs->cfg->cache_size); - int err = lfs->cfg->read(lfs->cfg, rcache->block, - rcache->off, rcache->buffer, rcache->size); - LFS_ASSERT(err <= 0); - if (err) { - return err; - } - } - - return 0; -} - -enum { - LFS_CMP_EQ = 0, - LFS_CMP_LT = 1, - LFS_CMP_GT = 2, -}; - -static int lfs_bd_cmp(lfs_t *lfs, - const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, - lfs_block_t block, lfs_off_t off, - const void *buffer, lfs_size_t size) { - const uint8_t *data = buffer; - - for (lfs_off_t i = 0; i < size; i++) { - uint8_t dat; - int err = lfs_bd_read(lfs, - pcache, rcache, hint-i, - block, off+i, &dat, 1); - if (err) { - return err; - } - - if (dat != data[i]) { - return (dat < data[i]) ? LFS_CMP_LT : LFS_CMP_GT; - } - } - - return LFS_CMP_EQ; -} - -static int lfs_bd_flush(lfs_t *lfs, - lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate) { - if (pcache->block != LFS_BLOCK_NULL && pcache->block != LFS_BLOCK_INLINE) { - LFS_ASSERT(pcache->block < lfs->cfg->block_count); - lfs_size_t diff = lfs_alignup(pcache->size, lfs->cfg->prog_size); - int err = lfs->cfg->prog(lfs->cfg, pcache->block, - pcache->off, pcache->buffer, diff); - LFS_ASSERT(err <= 0); - if (err) { - return err; - } - - if (validate) { - // check data on disk - lfs_cache_drop(lfs, rcache); - int res = lfs_bd_cmp(lfs, - NULL, rcache, diff, - pcache->block, pcache->off, pcache->buffer, diff); - if (res < 0) { - return res; - } - - if (res != LFS_CMP_EQ) { - return LFS_ERR_CORRUPT; - } - } - - lfs_cache_zero(lfs, pcache); - } - - return 0; -} - -static int lfs_bd_sync(lfs_t *lfs, - lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate) { - lfs_cache_drop(lfs, rcache); - - int err = lfs_bd_flush(lfs, pcache, rcache, validate); - if (err) { - return err; - } - - err = lfs->cfg->sync(lfs->cfg); - LFS_ASSERT(err <= 0); - return err; -} - -static int lfs_bd_prog(lfs_t *lfs, - lfs_cache_t *pcache, lfs_cache_t *rcache, bool validate, - lfs_block_t block, lfs_off_t off, - const void *buffer, lfs_size_t size) { - const uint8_t *data = buffer; - LFS_ASSERT(block == LFS_BLOCK_INLINE || block < lfs->cfg->block_count); - LFS_ASSERT(off + size <= lfs->cfg->block_size); - - while (size > 0) { - if (block == pcache->block && - off >= pcache->off && - off < pcache->off + lfs->cfg->cache_size) { - // already fits in pcache? - lfs_size_t diff = lfs_min(size, - lfs->cfg->cache_size - (off-pcache->off)); - memcpy(&pcache->buffer[off-pcache->off], data, diff); - - data += diff; - off += diff; - size -= diff; - - pcache->size = lfs_max(pcache->size, off - pcache->off); - if (pcache->size == lfs->cfg->cache_size) { - // eagerly flush out pcache if we fill up - int err = lfs_bd_flush(lfs, pcache, rcache, validate); - if (err) { - return err; - } - } - - continue; - } - - // pcache must have been flushed, either by programming and - // entire block or manually flushing the pcache - LFS_ASSERT(pcache->block == LFS_BLOCK_NULL); - - // prepare pcache, first condition can no longer fail - pcache->block = block; - pcache->off = lfs_aligndown(off, lfs->cfg->prog_size); - pcache->size = 0; - } - - return 0; -} - -static int lfs_bd_erase(lfs_t *lfs, lfs_block_t block) { - LFS_ASSERT(block < lfs->cfg->block_count); - int err = lfs->cfg->erase(lfs->cfg, block); - LFS_ASSERT(err <= 0); - return err; -} - - -/// Small type-level utilities /// -// operations on block pairs -static inline void lfs_pair_swap(lfs_block_t pair[2]) { - lfs_block_t t = pair[0]; - pair[0] = pair[1]; - pair[1] = t; -} - -static inline bool lfs_pair_isnull(const lfs_block_t pair[2]) { - return pair[0] == LFS_BLOCK_NULL || pair[1] == LFS_BLOCK_NULL; -} - -static inline int lfs_pair_cmp( - const lfs_block_t paira[2], - const lfs_block_t pairb[2]) { - return !(paira[0] == pairb[0] || paira[1] == pairb[1] || - paira[0] == pairb[1] || paira[1] == pairb[0]); -} - -static inline bool lfs_pair_sync( - const lfs_block_t paira[2], - const lfs_block_t pairb[2]) { - return (paira[0] == pairb[0] && paira[1] == pairb[1]) || - (paira[0] == pairb[1] && paira[1] == pairb[0]); -} - -static inline void lfs_pair_fromle32(lfs_block_t pair[2]) { - pair[0] = lfs_fromle32(pair[0]); - pair[1] = lfs_fromle32(pair[1]); -} - -static inline void lfs_pair_tole32(lfs_block_t pair[2]) { - pair[0] = lfs_tole32(pair[0]); - pair[1] = lfs_tole32(pair[1]); -} - -// operations on 32-bit entry tags -typedef uint32_t lfs_tag_t; -typedef int32_t lfs_stag_t; - -#define LFS_MKTAG(type, id, size) \ - (((lfs_tag_t)(type) << 20) | ((lfs_tag_t)(id) << 10) | (lfs_tag_t)(size)) - -#define LFS_MKTAG_IF(cond, type, id, size) \ - ((cond) ? LFS_MKTAG(type, id, size) : LFS_MKTAG(LFS_FROM_NOOP, 0, 0)) - -#define LFS_MKTAG_IF_ELSE(cond, type1, id1, size1, type2, id2, size2) \ - ((cond) ? LFS_MKTAG(type1, id1, size1) : LFS_MKTAG(type2, id2, size2)) - -static inline bool lfs_tag_isvalid(lfs_tag_t tag) { - return !(tag & 0x80000000); -} - -static inline bool lfs_tag_isdelete(lfs_tag_t tag) { - return ((int32_t)(tag << 22) >> 22) == -1; -} - -static inline uint16_t lfs_tag_type1(lfs_tag_t tag) { - return (tag & 0x70000000) >> 20; -} - -static inline uint16_t lfs_tag_type3(lfs_tag_t tag) { - return (tag & 0x7ff00000) >> 20; -} - -static inline uint8_t lfs_tag_chunk(lfs_tag_t tag) { - return (tag & 0x0ff00000) >> 20; -} - -static inline int8_t lfs_tag_splice(lfs_tag_t tag) { - return (int8_t)lfs_tag_chunk(tag); -} - -static inline uint16_t lfs_tag_id(lfs_tag_t tag) { - return (tag & 0x000ffc00) >> 10; -} - -static inline lfs_size_t lfs_tag_size(lfs_tag_t tag) { - return tag & 0x000003ff; -} - -static inline lfs_size_t lfs_tag_dsize(lfs_tag_t tag) { - return sizeof(tag) + lfs_tag_size(tag + lfs_tag_isdelete(tag)); -} - -// operations on attributes in attribute lists -struct lfs_mattr { - lfs_tag_t tag; - const void *buffer; -}; - -struct lfs_diskoff { - lfs_block_t block; - lfs_off_t off; -}; - -#define LFS_MKATTRS(...) \ - (struct lfs_mattr[]){__VA_ARGS__}, \ - sizeof((struct lfs_mattr[]){__VA_ARGS__}) / sizeof(struct lfs_mattr) - -// operations on global state -static inline void lfs_gstate_xor(lfs_gstate_t *a, const lfs_gstate_t *b) { - for (int i = 0; i < 3; i++) { - ((uint32_t*)a)[i] ^= ((const uint32_t*)b)[i]; - } -} - -static inline bool lfs_gstate_iszero(const lfs_gstate_t *a) { - for (int i = 0; i < 3; i++) { - if (((uint32_t*)a)[i] != 0) { - return false; - } - } - return true; -} - -static inline bool lfs_gstate_hasorphans(const lfs_gstate_t *a) { - return lfs_tag_size(a->tag); -} - -static inline uint8_t lfs_gstate_getorphans(const lfs_gstate_t *a) { - return lfs_tag_size(a->tag); -} - -static inline bool lfs_gstate_hasmove(const lfs_gstate_t *a) { - return lfs_tag_type1(a->tag); -} - -static inline bool lfs_gstate_hasmovehere(const lfs_gstate_t *a, - const lfs_block_t *pair) { - return lfs_tag_type1(a->tag) && lfs_pair_cmp(a->pair, pair) == 0; -} - -static inline void lfs_gstate_fromle32(lfs_gstate_t *a) { - a->tag = lfs_fromle32(a->tag); - a->pair[0] = lfs_fromle32(a->pair[0]); - a->pair[1] = lfs_fromle32(a->pair[1]); -} - -static inline void lfs_gstate_tole32(lfs_gstate_t *a) { - a->tag = lfs_tole32(a->tag); - a->pair[0] = lfs_tole32(a->pair[0]); - a->pair[1] = lfs_tole32(a->pair[1]); -} - -// other endianness operations -static void lfs_ctz_fromle32(struct lfs_ctz *ctz) { - ctz->head = lfs_fromle32(ctz->head); - ctz->size = lfs_fromle32(ctz->size); -} - -static void lfs_ctz_tole32(struct lfs_ctz *ctz) { - ctz->head = lfs_tole32(ctz->head); - ctz->size = lfs_tole32(ctz->size); -} - -static inline void lfs_superblock_fromle32(lfs_superblock_t *superblock) { - superblock->version = lfs_fromle32(superblock->version); - superblock->block_size = lfs_fromle32(superblock->block_size); - superblock->block_count = lfs_fromle32(superblock->block_count); - superblock->name_max = lfs_fromle32(superblock->name_max); - superblock->file_max = lfs_fromle32(superblock->file_max); - superblock->attr_max = lfs_fromle32(superblock->attr_max); -} - -static inline void lfs_superblock_tole32(lfs_superblock_t *superblock) { - superblock->version = lfs_tole32(superblock->version); - superblock->block_size = lfs_tole32(superblock->block_size); - superblock->block_count = lfs_tole32(superblock->block_count); - superblock->name_max = lfs_tole32(superblock->name_max); - superblock->file_max = lfs_tole32(superblock->file_max); - superblock->attr_max = lfs_tole32(superblock->attr_max); -} - - -/// Internal operations predeclared here /// -static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir, - const struct lfs_mattr *attrs, int attrcount); -static int lfs_dir_compact(lfs_t *lfs, - lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, - lfs_mdir_t *source, uint16_t begin, uint16_t end); -static int lfs_file_outline(lfs_t *lfs, lfs_file_t *file); -static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file); -static void lfs_fs_preporphans(lfs_t *lfs, int8_t orphans); -static void lfs_fs_prepmove(lfs_t *lfs, - uint16_t id, const lfs_block_t pair[2]); -static int lfs_fs_pred(lfs_t *lfs, const lfs_block_t dir[2], - lfs_mdir_t *pdir); -static lfs_stag_t lfs_fs_parent(lfs_t *lfs, const lfs_block_t dir[2], - lfs_mdir_t *parent); -static int lfs_fs_relocate(lfs_t *lfs, - const lfs_block_t oldpair[2], lfs_block_t newpair[2]); -int lfs_fs_traverseraw(lfs_t *lfs, - int (*cb)(void *data, lfs_block_t block), void *data, - bool includeorphans); -static int lfs_fs_forceconsistency(lfs_t *lfs); -static int lfs_deinit(lfs_t *lfs); -#ifdef LFS_MIGRATE -static int lfs1_traverse(lfs_t *lfs, - int (*cb)(void*, lfs_block_t), void *data); -#endif - -/// Block allocator /// -static int lfs_alloc_lookahead(void *p, lfs_block_t block) { - lfs_t *lfs = (lfs_t*)p; - lfs_block_t off = ((block - lfs->free.off) - + lfs->cfg->block_count) % lfs->cfg->block_count; - - if (off < lfs->free.size) { - lfs->free.buffer[off / 32] |= 1U << (off % 32); - } - - return 0; -} - -static void lfs_alloc_ack(lfs_t *lfs) { - lfs->free.ack = lfs->cfg->block_count; -} - -// Invalidate the lookahead buffer. This is done during mounting and -// failed traversals -static void lfs_alloc_reset(lfs_t *lfs) { - lfs->free.off = lfs->seed % lfs->cfg->block_count; //lfs->free.off = lfs->seed % lfs->cfg->block_size; - lfs->free.size = 0; - lfs->free.i = 0; - lfs_alloc_ack(lfs); -} - -static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) { - while (true) { - while (lfs->free.i != lfs->free.size) { - lfs_block_t off = lfs->free.i; - lfs->free.i += 1; - lfs->free.ack -= 1; - - if (!(lfs->free.buffer[off / 32] & (1U << (off % 32)))) { - // found a free block - *block = (lfs->free.off + off) % lfs->cfg->block_count; - - // eagerly find next off so an alloc ack can - // discredit old lookahead blocks - while (lfs->free.i != lfs->free.size && - (lfs->free.buffer[lfs->free.i / 32] - & (1U << (lfs->free.i % 32)))) { - lfs->free.i += 1; - lfs->free.ack -= 1; - } - - return 0; - } - } - - // check if we have looked at all blocks since last ack - if (lfs->free.ack == 0) { - LFS_ERROR("No more free space %"PRIu32, - lfs->free.i + lfs->free.off); - return LFS_ERR_NOSPC; - } - - lfs->free.off = (lfs->free.off + lfs->free.size) - % lfs->cfg->block_count; - lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, lfs->free.ack); - lfs->free.i = 0; - - // find mask of free blocks from tree - memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); - int err = lfs_fs_traverseraw(lfs, lfs_alloc_lookahead, lfs, true); - if (err) { - lfs_alloc_reset(lfs); - return err; - } - } -} - -/// Metadata pair and directory operations /// -static lfs_stag_t lfs_dir_getslice(lfs_t *lfs, const lfs_mdir_t *dir, - lfs_tag_t gmask, lfs_tag_t gtag, - lfs_off_t goff, void *gbuffer, lfs_size_t gsize) { - lfs_off_t off = dir->off; - lfs_tag_t ntag = dir->etag; - lfs_stag_t gdiff = 0; - - if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair) && - lfs_tag_id(gmask) != 0 && - lfs_tag_id(lfs->gdisk.tag) <= lfs_tag_id(gtag)) { - // synthetic moves - gdiff -= LFS_MKTAG(0, 1, 0); - } - - // iterate over dir block backwards (for faster lookups) - while (off >= sizeof(lfs_tag_t) + lfs_tag_dsize(ntag)) { - off -= lfs_tag_dsize(ntag); - lfs_tag_t tag = ntag; - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, sizeof(ntag), - dir->pair[0], off, &ntag, sizeof(ntag)); - if (err) { - return err; - } - - ntag = (lfs_frombe32(ntag) ^ tag) & 0x7fffffff; - - if (lfs_tag_id(gmask) != 0 && - lfs_tag_type1(tag) == LFS_TYPE_SPLICE && - lfs_tag_id(tag) <= lfs_tag_id(gtag - gdiff)) { - if (tag == (LFS_MKTAG(LFS_TYPE_CREATE, 0, 0) | - (LFS_MKTAG(0, 0x3ff, 0) & (gtag - gdiff)))) { - // found where we were created - return LFS_ERR_NOENT; - } - - // move around splices - gdiff += LFS_MKTAG(0, lfs_tag_splice(tag), 0); - } - - if ((gmask & tag) == (gmask & (gtag - gdiff))) { - if (lfs_tag_isdelete(tag)) { - return LFS_ERR_NOENT; - } - - lfs_size_t diff = lfs_min(lfs_tag_size(tag), gsize); - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, diff, - dir->pair[0], off+sizeof(tag)+goff, gbuffer, diff); - if (err) { - return err; - } - - memset((uint8_t*)gbuffer + diff, 0, gsize - diff); - - return tag + gdiff; - } - } - - return LFS_ERR_NOENT; -} - -static lfs_stag_t lfs_dir_get(lfs_t *lfs, const lfs_mdir_t *dir, - lfs_tag_t gmask, lfs_tag_t gtag, void *buffer) { - return lfs_dir_getslice(lfs, dir, - gmask, gtag, - 0, buffer, lfs_tag_size(gtag)); -} - -static int lfs_dir_getread(lfs_t *lfs, const lfs_mdir_t *dir, - const lfs_cache_t *pcache, lfs_cache_t *rcache, lfs_size_t hint, - lfs_tag_t gmask, lfs_tag_t gtag, - lfs_off_t off, void *buffer, lfs_size_t size) { - uint8_t *data = buffer; - if (off+size > lfs->cfg->block_size) { - return LFS_ERR_CORRUPT; - } - - while (size > 0) { - lfs_size_t diff = size; - - if (pcache && pcache->block == LFS_BLOCK_INLINE && - off < pcache->off + pcache->size) { - if (off >= pcache->off) { - // is already in pcache? - diff = lfs_min(diff, pcache->size - (off-pcache->off)); - memcpy(data, &pcache->buffer[off-pcache->off], diff); - - data += diff; - off += diff; - size -= diff; - continue; - } - - // pcache takes priority - diff = lfs_min(diff, pcache->off-off); - } - - if (rcache->block == LFS_BLOCK_INLINE && - off < rcache->off + rcache->size) { - if (off >= rcache->off) { - // is already in rcache? - diff = lfs_min(diff, rcache->size - (off-rcache->off)); - memcpy(data, &rcache->buffer[off-rcache->off], diff); - - data += diff; - off += diff; - size -= diff; - continue; - } - - // rcache takes priority - diff = lfs_min(diff, rcache->off-off); - } - - // load to cache, first condition can no longer fail - rcache->block = LFS_BLOCK_INLINE; - rcache->off = lfs_aligndown(off, lfs->cfg->read_size); - rcache->size = lfs_min(lfs_alignup(off+hint, lfs->cfg->read_size), - lfs->cfg->cache_size); - int err = lfs_dir_getslice(lfs, dir, gmask, gtag, - rcache->off, rcache->buffer, rcache->size); - if (err < 0) { - return err; - } - } - - return 0; -} - -static int lfs_dir_traverse_filter(void *p, - lfs_tag_t tag, const void *buffer) { - lfs_tag_t *filtertag = p; - (void)buffer; - - // which mask depends on unique bit in tag structure - uint32_t mask = (tag & LFS_MKTAG(0x100, 0, 0)) - ? LFS_MKTAG(0x7ff, 0x3ff, 0) - : LFS_MKTAG(0x700, 0x3ff, 0); - - // check for redundancy - if ((mask & tag) == (mask & *filtertag) || - lfs_tag_isdelete(*filtertag) || - (LFS_MKTAG(0x7ff, 0x3ff, 0) & tag) == ( - LFS_MKTAG(LFS_TYPE_DELETE, 0, 0) | - (LFS_MKTAG(0, 0x3ff, 0) & *filtertag))) { - return true; - } - - // check if we need to adjust for created/deleted tags - if (lfs_tag_type1(tag) == LFS_TYPE_SPLICE && - lfs_tag_id(tag) <= lfs_tag_id(*filtertag)) { - *filtertag += LFS_MKTAG(0, lfs_tag_splice(tag), 0); - } - - return false; -} - -static int lfs_dir_traverse(lfs_t *lfs, - const lfs_mdir_t *dir, lfs_off_t off, lfs_tag_t ptag, - const struct lfs_mattr *attrs, int attrcount, - lfs_tag_t tmask, lfs_tag_t ttag, - uint16_t begin, uint16_t end, int16_t diff, - int (*cb)(void *data, lfs_tag_t tag, const void *buffer), void *data) { - // iterate over directory and attrs - while (true) { - lfs_tag_t tag; - const void *buffer; - struct lfs_diskoff disk; - if (off+lfs_tag_dsize(ptag) < dir->off) { - off += lfs_tag_dsize(ptag); - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, sizeof(tag), - dir->pair[0], off, &tag, sizeof(tag)); - if (err) { - return err; - } - - tag = (lfs_frombe32(tag) ^ ptag) | 0x80000000; - disk.block = dir->pair[0]; - disk.off = off+sizeof(lfs_tag_t); - buffer = &disk; - ptag = tag; - } else if (attrcount > 0) { - tag = attrs[0].tag; - buffer = attrs[0].buffer; - attrs += 1; - attrcount -= 1; - } else { - return 0; - } - - lfs_tag_t mask = LFS_MKTAG(0x7ff, 0, 0); - if ((mask & tmask & tag) != (mask & tmask & ttag)) { - continue; - } - - // do we need to filter? inlining the filtering logic here allows - // for some minor optimizations - if (lfs_tag_id(tmask) != 0) { - // scan for duplicates and update tag based on creates/deletes - int filter = lfs_dir_traverse(lfs, - dir, off, ptag, attrs, attrcount, - 0, 0, 0, 0, 0, - lfs_dir_traverse_filter, &tag); - if (filter < 0) { - return filter; - } - - if (filter) { - continue; - } - - // in filter range? - if (!(lfs_tag_id(tag) >= begin && lfs_tag_id(tag) < end)) { - continue; - } - } - - // handle special cases for mcu-side operations - if (lfs_tag_type3(tag) == LFS_FROM_NOOP) { - // do nothing - } else if (lfs_tag_type3(tag) == LFS_FROM_MOVE) { - uint16_t fromid = lfs_tag_size(tag); - uint16_t toid = lfs_tag_id(tag); - int err = lfs_dir_traverse(lfs, - buffer, 0, 0xffffffff, NULL, 0, - LFS_MKTAG(0x600, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, 0, 0), - fromid, fromid+1, toid-fromid+diff, - cb, data); - if (err) { - return err; - } - } else if (lfs_tag_type3(tag) == LFS_FROM_USERATTRS) { - for (unsigned i = 0; i < lfs_tag_size(tag); i++) { - const struct lfs_attr *a = buffer; - int err = cb(data, LFS_MKTAG(LFS_TYPE_USERATTR + a[i].type, - lfs_tag_id(tag) + diff, a[i].size), a[i].buffer); - if (err) { - return err; - } - } - } else { - int err = cb(data, tag + LFS_MKTAG(0, diff, 0), buffer); - if (err) { - return err; - } - } - } -} - -static lfs_stag_t lfs_dir_fetchmatch(lfs_t *lfs, - lfs_mdir_t *dir, const lfs_block_t pair[2], - lfs_tag_t fmask, lfs_tag_t ftag, uint16_t *id, - int (*cb)(void *data, lfs_tag_t tag, const void *buffer), void *data) { - // we can find tag very efficiently during a fetch, since we're already - // scanning the entire directory - lfs_stag_t besttag = -1; - - // if either block address is invalid we return LFS_ERR_CORRUPT here, - // otherwise later writes to the pair could fail - if (pair[0] >= lfs->cfg->block_count || pair[1] >= lfs->cfg->block_count) { - return LFS_ERR_CORRUPT; - } - - // find the block with the most recent revision - uint32_t revs[2] = {0, 0}; - int r = 0; - for (int i = 0; i < 2; i++) { - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, sizeof(revs[i]), - pair[i], 0, &revs[i], sizeof(revs[i])); - revs[i] = lfs_fromle32(revs[i]); - if (err && err != LFS_ERR_CORRUPT) { - return err; - } - - if (err != LFS_ERR_CORRUPT && - lfs_scmp(revs[i], revs[(i+1)%2]) > 0) { - r = i; - } - } - - dir->pair[0] = pair[(r+0)%2]; - dir->pair[1] = pair[(r+1)%2]; - dir->rev = revs[(r+0)%2]; - dir->off = 0; // nonzero = found some commits - - // now scan tags to fetch the actual dir and find possible match - for (int i = 0; i < 2; i++) { - lfs_off_t off = 0; - lfs_tag_t ptag = 0xffffffff; - - uint16_t tempcount = 0; - lfs_block_t temptail[2] = {LFS_BLOCK_NULL, LFS_BLOCK_NULL}; - bool tempsplit = false; - lfs_stag_t tempbesttag = besttag; - - dir->rev = lfs_tole32(dir->rev); - uint32_t crc = lfs_crc(0xffffffff, &dir->rev, sizeof(dir->rev)); - dir->rev = lfs_fromle32(dir->rev); - - while (true) { - // extract next tag - lfs_tag_t tag; - off += lfs_tag_dsize(ptag); - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, lfs->cfg->block_size, - dir->pair[0], off, &tag, sizeof(tag)); - if (err) { - if (err == LFS_ERR_CORRUPT) { - // can't continue? - dir->erased = false; - break; - } - return err; - } - - crc = lfs_crc(crc, &tag, sizeof(tag)); - tag = lfs_frombe32(tag) ^ ptag; - - // next commit not yet programmed or we're not in valid range - if (!lfs_tag_isvalid(tag)) { - dir->erased = (lfs_tag_type1(ptag) == LFS_TYPE_CRC && - dir->off % lfs->cfg->prog_size == 0); - break; - } else if (off + lfs_tag_dsize(tag) > lfs->cfg->block_size) { - dir->erased = false; - break; - } - - ptag = tag; - - if (lfs_tag_type1(tag) == LFS_TYPE_CRC) { - // check the crc attr - uint32_t dcrc; - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, lfs->cfg->block_size, - dir->pair[0], off+sizeof(tag), &dcrc, sizeof(dcrc)); - if (err) { - if (err == LFS_ERR_CORRUPT) { - dir->erased = false; - break; - } - return err; - } - dcrc = lfs_fromle32(dcrc); - - if (crc != dcrc) { - dir->erased = false; - break; - } - - // reset the next bit if we need to - ptag ^= (lfs_tag_t)(lfs_tag_chunk(tag) & 1U) << 31; - - // toss our crc into the filesystem seed for - // pseudorandom numbers - lfs->seed ^= crc; - - // update with what's found so far - besttag = tempbesttag; - dir->off = off + lfs_tag_dsize(tag); - dir->etag = ptag; - dir->count = tempcount; - dir->tail[0] = temptail[0]; - dir->tail[1] = temptail[1]; - dir->split = tempsplit; - - // reset crc - crc = 0xffffffff; - continue; - } - - // crc the entry first, hopefully leaving it in the cache - for (lfs_off_t j = sizeof(tag); j < lfs_tag_dsize(tag); j++) { - uint8_t dat; - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, lfs->cfg->block_size, - dir->pair[0], off+j, &dat, 1); - if (err) { - if (err == LFS_ERR_CORRUPT) { - dir->erased = false; - break; - } - return err; - } - - crc = lfs_crc(crc, &dat, 1); - } - - // directory modification tags? - if (lfs_tag_type1(tag) == LFS_TYPE_NAME) { - // increase count of files if necessary - if (lfs_tag_id(tag) >= tempcount) { - tempcount = lfs_tag_id(tag) + 1; - } - } else if (lfs_tag_type1(tag) == LFS_TYPE_SPLICE) { - tempcount += lfs_tag_splice(tag); - - if (tag == (LFS_MKTAG(LFS_TYPE_DELETE, 0, 0) | - (LFS_MKTAG(0, 0x3ff, 0) & tempbesttag))) { - tempbesttag |= 0x80000000; - } else if (tempbesttag != -1 && - lfs_tag_id(tag) <= lfs_tag_id(tempbesttag)) { - tempbesttag += LFS_MKTAG(0, lfs_tag_splice(tag), 0); - } - } else if (lfs_tag_type1(tag) == LFS_TYPE_TAIL) { - tempsplit = (lfs_tag_chunk(tag) & 1); - - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, lfs->cfg->block_size, - dir->pair[0], off+sizeof(tag), &temptail, 8); - if (err) { - if (err == LFS_ERR_CORRUPT) { - dir->erased = false; - break; - } - } - lfs_pair_fromle32(temptail); - } - - // found a match for our fetcher? - if ((fmask & tag) == (fmask & ftag)) { - int res = cb(data, tag, &(struct lfs_diskoff){ - dir->pair[0], off+sizeof(tag)}); - if (res < 0) { - if (res == LFS_ERR_CORRUPT) { - dir->erased = false; - break; - } - return res; - } - - if (res == LFS_CMP_EQ) { - // found a match - tempbesttag = tag; - } else if ((LFS_MKTAG(0x7ff, 0x3ff, 0) & tag) == - (LFS_MKTAG(0x7ff, 0x3ff, 0) & tempbesttag)) { - // found an identical tag, but contents didn't match - // this must mean that our besttag has been overwritten - tempbesttag = -1; - } else if (res == LFS_CMP_GT && - lfs_tag_id(tag) <= lfs_tag_id(tempbesttag)) { - // found a greater match, keep track to keep things sorted - tempbesttag = tag | 0x80000000; - } - } - } - - // consider what we have good enough - if (dir->off > 0) { - // synthetic move - if (lfs_gstate_hasmovehere(&lfs->gdisk, dir->pair)) { - if (lfs_tag_id(lfs->gdisk.tag) == lfs_tag_id(besttag)) { - besttag |= 0x80000000; - } else if (besttag != -1 && - lfs_tag_id(lfs->gdisk.tag) < lfs_tag_id(besttag)) { - besttag -= LFS_MKTAG(0, 1, 0); - } - } - - // found tag? or found best id? - if (id) { - *id = lfs_min(lfs_tag_id(besttag), dir->count); - } - - if (lfs_tag_isvalid(besttag)) { - return besttag; - } else if (lfs_tag_id(besttag) < dir->count) { - return LFS_ERR_NOENT; - } else { - return 0; - } - } - - // failed, try the other block? - lfs_pair_swap(dir->pair); - dir->rev = revs[(r+1)%2]; - } - - LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}", - dir->pair[0], dir->pair[1]); - return LFS_ERR_CORRUPT; -} - -static int lfs_dir_fetch(lfs_t *lfs, - lfs_mdir_t *dir, const lfs_block_t pair[2]) { - // note, mask=-1, tag=-1 can never match a tag since this - // pattern has the invalid bit set - return (int)lfs_dir_fetchmatch(lfs, dir, pair, - (lfs_tag_t)-1, (lfs_tag_t)-1, NULL, NULL, NULL); -} - -static int lfs_dir_getgstate(lfs_t *lfs, const lfs_mdir_t *dir, - lfs_gstate_t *gstate) { - lfs_gstate_t temp; - lfs_stag_t res = lfs_dir_get(lfs, dir, LFS_MKTAG(0x7ff, 0, 0), - LFS_MKTAG(LFS_TYPE_MOVESTATE, 0, sizeof(temp)), &temp); - if (res < 0 && res != LFS_ERR_NOENT) { - return res; - } - - if (res != LFS_ERR_NOENT) { - // xor together to find resulting gstate - lfs_gstate_fromle32(&temp); - lfs_gstate_xor(gstate, &temp); - } - - return 0; -} - -static int lfs_dir_getinfo(lfs_t *lfs, lfs_mdir_t *dir, - uint16_t id, struct lfs_info *info) { - if (id == 0x3ff) { - // special case for root - strcpy(info->name, "/"); - info->type = LFS_TYPE_DIR; - return 0; - } - - lfs_stag_t tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x780, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_NAME, id, lfs->name_max+1), info->name); - if (tag < 0) { - return (int)tag; - } - - info->type = lfs_tag_type3(tag); - - struct lfs_ctz ctz; - tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz); - if (tag < 0) { - return (int)tag; - } - lfs_ctz_fromle32(&ctz); - - if (lfs_tag_type3(tag) == LFS_TYPE_CTZSTRUCT) { - info->size = ctz.size; - } else if (lfs_tag_type3(tag) == LFS_TYPE_INLINESTRUCT) { - info->size = lfs_tag_size(tag); - } - - return 0; -} - -struct lfs_dir_find_match { - lfs_t *lfs; - const void *name; - lfs_size_t size; -}; - -static int lfs_dir_find_match(void *data, - lfs_tag_t tag, const void *buffer) { - struct lfs_dir_find_match *name = data; - lfs_t *lfs = name->lfs; - const struct lfs_diskoff *disk = buffer; - - // compare with disk - lfs_size_t diff = lfs_min(name->size, lfs_tag_size(tag)); - int res = lfs_bd_cmp(lfs, - NULL, &lfs->rcache, diff, - disk->block, disk->off, name->name, diff); - if (res != LFS_CMP_EQ) { - return res; - } - - // only equal if our size is still the same - if (name->size != lfs_tag_size(tag)) { - return (name->size < lfs_tag_size(tag)) ? LFS_CMP_LT : LFS_CMP_GT; - } - - // found a match! - return LFS_CMP_EQ; -} - -static lfs_stag_t lfs_dir_find(lfs_t *lfs, lfs_mdir_t *dir, - const char **path, uint16_t *id) { - // we reduce path to a single name if we can find it - const char *name = *path; - if (id) { - *id = 0x3ff; - } - - // default to root dir - lfs_stag_t tag = LFS_MKTAG(LFS_TYPE_DIR, 0x3ff, 0); - dir->tail[0] = lfs->root[0]; - dir->tail[1] = lfs->root[1]; - - while (true) { -nextname: - // skip slashes - name += strspn(name, "/"); - lfs_size_t namelen = strcspn(name, "/"); - - // skip '.' and root '..' - if ((namelen == 1 && memcmp(name, ".", 1) == 0) || - (namelen == 2 && memcmp(name, "..", 2) == 0)) { - name += namelen; - goto nextname; - } - - // skip if matched by '..' in name - const char *suffix = name + namelen; - lfs_size_t sufflen; - int depth = 1; - while (true) { - suffix += strspn(suffix, "/"); - sufflen = strcspn(suffix, "/"); - if (sufflen == 0) { - break; - } - - if (sufflen == 2 && memcmp(suffix, "..", 2) == 0) { - depth -= 1; - if (depth == 0) { - name = suffix + sufflen; - goto nextname; - } - } else { - depth += 1; - } - - suffix += sufflen; - } - - // found path - if (name[0] == '\0') { - return tag; - } - - // update what we've found so far - *path = name; - - // only continue if we hit a directory - if (lfs_tag_type3(tag) != LFS_TYPE_DIR) { - return LFS_ERR_NOTDIR; - } - - // grab the entry data - if (lfs_tag_id(tag) != 0x3ff) { - lfs_stag_t res = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), dir->tail); - if (res < 0) { - return res; - } - lfs_pair_fromle32(dir->tail); - } - - // find entry matching name - while (true) { - tag = lfs_dir_fetchmatch(lfs, dir, dir->tail, - LFS_MKTAG(0x780, 0, 0), - LFS_MKTAG(LFS_TYPE_NAME, 0, namelen), - // are we last name? - (strchr(name, '/') == NULL) ? id : NULL, - lfs_dir_find_match, &(struct lfs_dir_find_match){ - lfs, name, namelen}); - if (tag < 0) { - return tag; - } - - if (tag) { - break; - } - - if (!dir->split) { - return LFS_ERR_NOENT; - } - } - - // to next name - name += namelen; - } -} - -// commit logic -struct lfs_commit { - lfs_block_t block; - lfs_off_t off; - lfs_tag_t ptag; - uint32_t crc; - - lfs_off_t begin; - lfs_off_t end; -}; - -static int lfs_dir_commitprog(lfs_t *lfs, struct lfs_commit *commit, - const void *buffer, lfs_size_t size) { - int err = lfs_bd_prog(lfs, - &lfs->pcache, &lfs->rcache, false, - commit->block, commit->off , - (const uint8_t*)buffer, size); - if (err) { - return err; - } - - commit->crc = lfs_crc(commit->crc, buffer, size); - commit->off += size; - return 0; -} - -static int lfs_dir_commitattr(lfs_t *lfs, struct lfs_commit *commit, - lfs_tag_t tag, const void *buffer) { - // check if we fit - lfs_size_t dsize = lfs_tag_dsize(tag); - if (commit->off + dsize > commit->end) { - return LFS_ERR_NOSPC; - } - - // write out tag - lfs_tag_t ntag = lfs_tobe32((tag & 0x7fffffff) ^ commit->ptag); - int err = lfs_dir_commitprog(lfs, commit, &ntag, sizeof(ntag)); - if (err) { - return err; - } - - if (!(tag & 0x80000000)) { - // from memory - err = lfs_dir_commitprog(lfs, commit, buffer, dsize-sizeof(tag)); - if (err) { - return err; - } - } else { - // from disk - const struct lfs_diskoff *disk = buffer; - for (lfs_off_t i = 0; i < dsize-sizeof(tag); i++) { - // rely on caching to make this efficient - uint8_t dat; - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, dsize-sizeof(tag)-i, - disk->block, disk->off+i, &dat, 1); - if (err) { - return err; - } - - err = lfs_dir_commitprog(lfs, commit, &dat, 1); - if (err) { - return err; - } - } - } - - commit->ptag = tag & 0x7fffffff; - return 0; -} - -static int lfs_dir_commitcrc(lfs_t *lfs, struct lfs_commit *commit) { - const lfs_off_t off1 = commit->off; - const uint32_t crc1 = commit->crc; - // align to program units - const lfs_off_t end = lfs_alignup(off1 + 2*sizeof(uint32_t), - lfs->cfg->prog_size); - - // create crc tags to fill up remainder of commit, note that - // padding is not crced, which lets fetches skip padding but - // makes committing a bit more complicated - while (commit->off < end) { - lfs_off_t off = commit->off + sizeof(lfs_tag_t); - lfs_off_t noff = lfs_min(end - off, 0x3fe) + off; - if (noff < end) { - noff = lfs_min(noff, end - 2*sizeof(uint32_t)); - } - - // read erased state from next program unit - lfs_tag_t tag = 0xffffffff; - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, sizeof(tag), - commit->block, noff, &tag, sizeof(tag)); - if (err && err != LFS_ERR_CORRUPT) { - return err; - } - - // build crc tag - bool reset = ~lfs_frombe32(tag) >> 31; - tag = LFS_MKTAG(LFS_TYPE_CRC + reset, 0x3ff, noff - off); - - // write out crc - uint32_t footer[2]; - footer[0] = lfs_tobe32(tag ^ commit->ptag); - commit->crc = lfs_crc(commit->crc, &footer[0], sizeof(footer[0])); - footer[1] = lfs_tole32(commit->crc); - err = lfs_bd_prog(lfs, - &lfs->pcache, &lfs->rcache, false, - commit->block, commit->off, &footer, sizeof(footer)); - if (err) { - return err; - } - - commit->off += sizeof(tag)+lfs_tag_size(tag); - commit->ptag = tag ^ ((lfs_tag_t)reset << 31); - commit->crc = 0xffffffff; // reset crc for next "commit" - } - - // flush buffers - int err = lfs_bd_sync(lfs, &lfs->pcache, &lfs->rcache, false); - if (err) { - return err; - } - - // successful commit, check checksums to make sure - lfs_off_t off = commit->begin; - lfs_off_t noff = off1 + sizeof(uint32_t); - while (off < end) { - uint32_t crc = 0xffffffff; - for (lfs_off_t i = off; i < noff+sizeof(uint32_t); i++) { - // check against written crc, may catch blocks that - // become readonly and match our commit size exactly - if (i == off1 && crc != crc1) { - return LFS_ERR_CORRUPT; - } - - // leave it up to caching to make this efficient - uint8_t dat; - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, noff+sizeof(uint32_t)-i, - commit->block, i, &dat, 1); - if (err) { - return err; - } - - crc = lfs_crc(crc, &dat, 1); - } - - // detected write error? - if (crc != 0) { - return LFS_ERR_CORRUPT; - } - - // skip padding - off = lfs_min(end - noff, 0x3fe) + noff; - if (off < end) { - off = lfs_min(off, end - 2*sizeof(uint32_t)); - } - noff = off + sizeof(uint32_t); - } - - return 0; -} - -static int lfs_dir_alloc(lfs_t *lfs, lfs_mdir_t *dir) { - // allocate pair of dir blocks (backwards, so we write block 1 first) - for (int i = 0; i < 2; i++) { - int err = lfs_alloc(lfs, &dir->pair[(i+1)%2]); - if (err) { - return err; - } - } - - // zero for reproducability in case initial block is unreadable - dir->rev = 0; - - // rather than clobbering one of the blocks we just pretend - // the revision may be valid - int err = lfs_bd_read(lfs, - NULL, &lfs->rcache, sizeof(dir->rev), - dir->pair[0], 0, &dir->rev, sizeof(dir->rev)); - dir->rev = lfs_fromle32(dir->rev); - if (err && err != LFS_ERR_CORRUPT) { - return err; - } - - // make sure we don't immediately evict - dir->rev += dir->rev & 1; - - // set defaults - dir->off = sizeof(dir->rev); - dir->etag = 0xffffffff; - dir->count = 0; - dir->tail[0] = LFS_BLOCK_NULL; - dir->tail[1] = LFS_BLOCK_NULL; - dir->erased = false; - dir->split = false; - - // don't write out yet, let caller take care of that - return 0; -} - -static int lfs_dir_drop(lfs_t *lfs, lfs_mdir_t *dir, lfs_mdir_t *tail) { - // steal state - int err = lfs_dir_getgstate(lfs, tail, &lfs->gdelta); - if (err) { - return err; - } - - // steal tail - lfs_pair_tole32(tail->tail); - err = lfs_dir_commit(lfs, dir, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_TAIL + tail->split, 0x3ff, 8), tail->tail})); - lfs_pair_fromle32(tail->tail); - if (err) { - return err; - } - - return 0; -} - -static int lfs_dir_split(lfs_t *lfs, - lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, - lfs_mdir_t *source, uint16_t split, uint16_t end) { - // create tail directory - lfs_alloc_ack(lfs); - lfs_mdir_t tail; - int err = lfs_dir_alloc(lfs, &tail); - if (err) { - return err; - } - - tail.split = dir->split; - tail.tail[0] = dir->tail[0]; - tail.tail[1] = dir->tail[1]; - - err = lfs_dir_compact(lfs, &tail, attrs, attrcount, source, split, end); - if (err) { - return err; - } - - dir->tail[0] = tail.pair[0]; - dir->tail[1] = tail.pair[1]; - dir->split = true; - - // update root if needed - if (lfs_pair_cmp(dir->pair, lfs->root) == 0 && split == 0) { - lfs->root[0] = tail.pair[0]; - lfs->root[1] = tail.pair[1]; - } - - return 0; -} - -static int lfs_dir_commit_size(void *p, lfs_tag_t tag, const void *buffer) { - lfs_size_t *size = p; - (void)buffer; - - *size += lfs_tag_dsize(tag); - return 0; -} - -struct lfs_dir_commit_commit { - lfs_t *lfs; - struct lfs_commit *commit; -}; - -static int lfs_dir_commit_commit(void *p, lfs_tag_t tag, const void *buffer) { - struct lfs_dir_commit_commit *commit = p; - return lfs_dir_commitattr(commit->lfs, commit->commit, tag, buffer); -} - -static int lfs_dir_compact(lfs_t *lfs, - lfs_mdir_t *dir, const struct lfs_mattr *attrs, int attrcount, - lfs_mdir_t *source, uint16_t begin, uint16_t end) { - // save some state in case block is bad - const lfs_block_t oldpair[2] = {dir->pair[0], dir->pair[1]}; - bool relocated = false; - bool tired = false; - - // should we split? - while (end - begin > 1) { - // find size - lfs_size_t size = 0; - int err = lfs_dir_traverse(lfs, - source, 0, 0xffffffff, attrs, attrcount, - LFS_MKTAG(0x400, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_NAME, 0, 0), - begin, end, -begin, - lfs_dir_commit_size, &size); - if (err) { - return err; - } - - // space is complicated, we need room for tail, crc, gstate, - // cleanup delete, and we cap at half a block to give room - // for metadata updates. - if (end - begin < 0xff && - size <= lfs_min(lfs->cfg->block_size - 36, - lfs_alignup(lfs->cfg->block_size/2, - lfs->cfg->prog_size))) { - break; - } - - // can't fit, need to split, we should really be finding the - // largest size that fits with a small binary search, but right now - // it's not worth the code size - uint16_t split = (end - begin) / 2; - err = lfs_dir_split(lfs, dir, attrs, attrcount, - source, begin+split, end); - if (err) { - // if we fail to split, we may be able to overcompact, unless - // we're too big for even the full block, in which case our - // only option is to error - if (err == LFS_ERR_NOSPC && size <= lfs->cfg->block_size - 36) { - break; - } - return err; - } - - end = begin + split; - } - - // increment revision count - dir->rev += 1; - // If our revision count == n * block_cycles, we should force a relocation, - // this is how littlefs wear-levels at the metadata-pair level. Note that we - // actually use (block_cycles+1)|1, this is to avoid two corner cases: - // 1. block_cycles = 1, which would prevent relocations from terminating - // 2. block_cycles = 2n, which, due to aliasing, would only ever relocate - // one metadata block in the pair, effectively making this useless - if (lfs->cfg->block_cycles > 0 && - (dir->rev % ((lfs->cfg->block_cycles+1)|1) == 0)) { - if (lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) { - // oh no! we're writing too much to the superblock, - // should we expand? - lfs_ssize_t res = lfs_fs_size(lfs); - if (res < 0) { - return res; - } - - // do we have extra space? littlefs can't reclaim this space - // by itself, so expand cautiously - if ((lfs_size_t)res < lfs->cfg->block_count/2) { - LFS_DEBUG("Expanding superblock at rev %"PRIu32, dir->rev); - int err = lfs_dir_split(lfs, dir, attrs, attrcount, - source, begin, end); - if (err && err != LFS_ERR_NOSPC) { - return err; - } - - // welp, we tried, if we ran out of space there's not much - // we can do, we'll error later if we've become frozen - if (!err) { - end = begin; - } - } -#ifdef LFS_MIGRATE - } else if (lfs->lfs1) { - // do not proactively relocate blocks during migrations, this - // can cause a number of failure states such: clobbering the - // v1 superblock if we relocate root, and invalidating directory - // pointers if we relocate the head of a directory. On top of - // this, relocations increase the overall complexity of - // lfs_migration, which is already a delicate operation. -#endif - } else { - // we're writing too much, time to relocate - tired = true; - goto relocate; - } - } - - // begin loop to commit compaction to blocks until a compact sticks - while (true) { - { - // setup commit state - struct lfs_commit commit = { - .block = dir->pair[1], - .off = 0, - .ptag = 0xffffffff, - .crc = 0xffffffff, - - .begin = 0, - .end = lfs->cfg->block_size - 8, - }; - - // erase block to write to - int err = lfs_bd_erase(lfs, dir->pair[1]); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - // write out header - dir->rev = lfs_tole32(dir->rev); - err = lfs_dir_commitprog(lfs, &commit, - &dir->rev, sizeof(dir->rev)); - dir->rev = lfs_fromle32(dir->rev); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - // traverse the directory, this time writing out all unique tags - err = lfs_dir_traverse(lfs, - source, 0, 0xffffffff, attrs, attrcount, - LFS_MKTAG(0x400, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_NAME, 0, 0), - begin, end, -begin, - lfs_dir_commit_commit, &(struct lfs_dir_commit_commit){ - lfs, &commit}); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - // commit tail, which may be new after last size check - if (!lfs_pair_isnull(dir->tail)) { - lfs_pair_tole32(dir->tail); - err = lfs_dir_commitattr(lfs, &commit, - LFS_MKTAG(LFS_TYPE_TAIL + dir->split, 0x3ff, 8), - dir->tail); - lfs_pair_fromle32(dir->tail); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - } - - // bring over gstate? - lfs_gstate_t delta = {0}; - if (!relocated) { - lfs_gstate_xor(&delta, &lfs->gdisk); - lfs_gstate_xor(&delta, &lfs->gstate); - } - lfs_gstate_xor(&delta, &lfs->gdelta); - delta.tag &= ~LFS_MKTAG(0, 0, 0x3ff); - - err = lfs_dir_getgstate(lfs, dir, &delta); - if (err) { - return err; - } - - if (!lfs_gstate_iszero(&delta)) { - lfs_gstate_tole32(&delta); - err = lfs_dir_commitattr(lfs, &commit, - LFS_MKTAG(LFS_TYPE_MOVESTATE, 0x3ff, - sizeof(delta)), &delta); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - } - - // complete commit with crc - err = lfs_dir_commitcrc(lfs, &commit); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - // successful compaction, swap dir pair to indicate most recent - LFS_ASSERT(commit.off % lfs->cfg->prog_size == 0); - lfs_pair_swap(dir->pair); - dir->count = end - begin; - dir->off = commit.off; - dir->etag = commit.ptag; - // update gstate - lfs->gdelta = (lfs_gstate_t){0}; - if (!relocated) { - lfs->gdisk = lfs->gstate; - } - } - break; - -relocate: - // commit was corrupted, drop caches and prepare to relocate block - relocated = true; - lfs_cache_drop(lfs, &lfs->pcache); - if (!tired) { - LFS_DEBUG("Bad block at 0x%"PRIx32, dir->pair[1]); - } - - // can't relocate superblock, filesystem is now frozen - if (lfs_pair_cmp(dir->pair, (const lfs_block_t[2]){0, 1}) == 0) { - LFS_WARN("Superblock 0x%"PRIx32" has become unwritable", - dir->pair[1]); - return LFS_ERR_NOSPC; - } - - // relocate half of pair - int err = lfs_alloc(lfs, &dir->pair[1]); - if (err && (err != LFS_ERR_NOSPC || !tired)) { - return err; - } - - tired = false; - continue; - } - - if (relocated) { - // update references if we relocated - LFS_DEBUG("Relocating {0x%"PRIx32", 0x%"PRIx32"} " - "-> {0x%"PRIx32", 0x%"PRIx32"}", - oldpair[0], oldpair[1], dir->pair[0], dir->pair[1]); - int err = lfs_fs_relocate(lfs, oldpair, dir->pair); - if (err) { - return err; - } - } - - return 0; -} - -static int lfs_dir_commit(lfs_t *lfs, lfs_mdir_t *dir, - const struct lfs_mattr *attrs, int attrcount) { - // check for any inline files that aren't RAM backed and - // forcefully evict them, needed for filesystem consistency - for (lfs_file_t *f = (lfs_file_t*)lfs->mlist; f; f = f->next) { - if (dir != &f->m && lfs_pair_cmp(f->m.pair, dir->pair) == 0 && - f->type == LFS_TYPE_REG && (f->flags & LFS_F_INLINE) && - f->ctz.size > lfs->cfg->cache_size) { - int err = lfs_file_outline(lfs, f); - if (err) { - return err; - } - - err = lfs_file_flush(lfs, f); - if (err) { - return err; - } - } - } - - // calculate changes to the directory - lfs_mdir_t olddir = *dir; - bool hasdelete = false; - for (int i = 0; i < attrcount; i++) { - if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_CREATE) { - dir->count += 1; - } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE) { - LFS_ASSERT(dir->count > 0); - dir->count -= 1; - hasdelete = true; - } else if (lfs_tag_type1(attrs[i].tag) == LFS_TYPE_TAIL) { - dir->tail[0] = ((lfs_block_t*)attrs[i].buffer)[0]; - dir->tail[1] = ((lfs_block_t*)attrs[i].buffer)[1]; - dir->split = (lfs_tag_chunk(attrs[i].tag) & 1); - lfs_pair_fromle32(dir->tail); - } - } - - // should we actually drop the directory block? - if (hasdelete && dir->count == 0) { - lfs_mdir_t pdir; - int err = lfs_fs_pred(lfs, dir->pair, &pdir); - if (err && err != LFS_ERR_NOENT) { - *dir = olddir; - return err; - } - - if (err != LFS_ERR_NOENT && pdir.split) { - err = lfs_dir_drop(lfs, &pdir, dir); - if (err) { - *dir = olddir; - return err; - } - } - } - - if (dir->erased || dir->count >= 0xff) { - // try to commit - struct lfs_commit commit = { - .block = dir->pair[0], - .off = dir->off, - .ptag = dir->etag, - .crc = 0xffffffff, - - .begin = dir->off, - .end = lfs->cfg->block_size - 8, - }; - - // traverse attrs that need to be written out - lfs_pair_tole32(dir->tail); - int err = lfs_dir_traverse(lfs, - dir, dir->off, dir->etag, attrs, attrcount, - 0, 0, 0, 0, 0, - lfs_dir_commit_commit, &(struct lfs_dir_commit_commit){ - lfs, &commit}); - lfs_pair_fromle32(dir->tail); - if (err) { - if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { - goto compact; - } - *dir = olddir; - return err; - } - - // commit any global diffs if we have any - lfs_gstate_t delta = {0}; - lfs_gstate_xor(&delta, &lfs->gstate); - lfs_gstate_xor(&delta, &lfs->gdisk); - lfs_gstate_xor(&delta, &lfs->gdelta); - delta.tag &= ~LFS_MKTAG(0, 0, 0x3ff); - if (!lfs_gstate_iszero(&delta)) { - err = lfs_dir_getgstate(lfs, dir, &delta); - if (err) { - *dir = olddir; - return err; - } - - lfs_gstate_tole32(&delta); - err = lfs_dir_commitattr(lfs, &commit, - LFS_MKTAG(LFS_TYPE_MOVESTATE, 0x3ff, - sizeof(delta)), &delta); - if (err) { - if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { - goto compact; - } - *dir = olddir; - return err; - } - } - - // finalize commit with the crc - err = lfs_dir_commitcrc(lfs, &commit); - if (err) { - if (err == LFS_ERR_NOSPC || err == LFS_ERR_CORRUPT) { - goto compact; - } - *dir = olddir; - return err; - } - - // successful commit, update dir - LFS_ASSERT(commit.off % lfs->cfg->prog_size == 0); - dir->off = commit.off; - dir->etag = commit.ptag; - // and update gstate - lfs->gdisk = lfs->gstate; - lfs->gdelta = (lfs_gstate_t){0}; - } else { -compact: - // fall back to compaction - lfs_cache_drop(lfs, &lfs->pcache); - - int err = lfs_dir_compact(lfs, dir, attrs, attrcount, - dir, 0, dir->count); - if (err) { - *dir = olddir; - return err; - } - } - - // this complicated bit of logic is for fixing up any active - // metadata-pairs that we may have affected - // - // note we have to make two passes since the mdir passed to - // lfs_dir_commit could also be in this list, and even then - // we need to copy the pair so they don't get clobbered if we refetch - // our mdir. - for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { - if (&d->m != dir && lfs_pair_cmp(d->m.pair, olddir.pair) == 0) { - d->m = *dir; - for (int i = 0; i < attrcount; i++) { - if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE && - d->id == lfs_tag_id(attrs[i].tag)) { - d->m.pair[0] = LFS_BLOCK_NULL; - d->m.pair[1] = LFS_BLOCK_NULL; - } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_DELETE && - d->id > lfs_tag_id(attrs[i].tag)) { - d->id -= 1; - if (d->type == LFS_TYPE_DIR) { - ((lfs_dir_t*)d)->pos -= 1; - } - } else if (lfs_tag_type3(attrs[i].tag) == LFS_TYPE_CREATE && - d->id >= lfs_tag_id(attrs[i].tag)) { - d->id += 1; - if (d->type == LFS_TYPE_DIR) { - ((lfs_dir_t*)d)->pos += 1; - } - } - } - } - } - - for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { - if (lfs_pair_cmp(d->m.pair, olddir.pair) == 0) { - while (d->id >= d->m.count && d->m.split) { - // we split and id is on tail now - d->id -= d->m.count; - int err = lfs_dir_fetch(lfs, &d->m, d->m.tail); - if (err) { - return err; - } - } - } - } - - return 0; -} - - -/// Top level directory operations /// -int lfs_mkdir(lfs_t *lfs, const char *path) { - LFS_TRACE("lfs_mkdir(%p, \"%s\")", (void*)lfs, path); - // deorphan if we haven't yet, needed at most once after poweron - int err = lfs_fs_forceconsistency(lfs); - if (err) { - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - - struct lfs_mlist cwd; - cwd.next = lfs->mlist; - uint16_t id; - err = lfs_dir_find(lfs, &cwd.m, &path, &id); - if (!(err == LFS_ERR_NOENT && id != 0x3ff)) { - LFS_TRACE("lfs_mkdir -> %d", (err < 0) ? err : LFS_ERR_EXIST); - return (err < 0) ? err : LFS_ERR_EXIST; - } - - // check that name fits - lfs_size_t nlen = strlen(path); - if (nlen > lfs->name_max) { - LFS_TRACE("lfs_mkdir -> %d", LFS_ERR_NAMETOOLONG); - return LFS_ERR_NAMETOOLONG; - } - - // build up new directory - lfs_alloc_ack(lfs); - lfs_mdir_t dir; - err = lfs_dir_alloc(lfs, &dir); - if (err) { - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - - // find end of list - lfs_mdir_t pred = cwd.m; - while (pred.split) { - err = lfs_dir_fetch(lfs, &pred, pred.tail); - if (err) { - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - } - - // setup dir - lfs_pair_tole32(pred.tail); - err = lfs_dir_commit(lfs, &dir, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), pred.tail})); - lfs_pair_fromle32(pred.tail); - if (err) { - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - - // current block end of list? - if (cwd.m.split) { - // update tails, this creates a desync - lfs_fs_preporphans(lfs, +1); - - // it's possible our predecessor has to be relocated, and if - // our parent is our predecessor's predecessor, this could have - // caused our parent to go out of date, fortunately we can hook - // ourselves into littlefs to catch this - cwd.type = 0; - cwd.id = 0; - lfs->mlist = &cwd; - - lfs_pair_tole32(dir.pair); - err = lfs_dir_commit(lfs, &pred, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair})); - lfs_pair_fromle32(dir.pair); - if (err) { - lfs->mlist = cwd.next; - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - - lfs->mlist = cwd.next; - lfs_fs_preporphans(lfs, -1); - } - - // now insert into our parent block - lfs_pair_tole32(dir.pair); - err = lfs_dir_commit(lfs, &cwd.m, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_CREATE, id, 0), NULL}, - {LFS_MKTAG(LFS_TYPE_DIR, id, nlen), path}, - {LFS_MKTAG(LFS_TYPE_DIRSTRUCT, id, 8), dir.pair}, - {LFS_MKTAG_IF(!cwd.m.split, - LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir.pair})); - lfs_pair_fromle32(dir.pair); - if (err) { - LFS_TRACE("lfs_mkdir -> %d", err); - return err; - } - - LFS_TRACE("lfs_mkdir -> %d", 0); - return 0; -} - -int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path) { - LFS_TRACE("lfs_dir_open(%p, %p, \"%s\")", (void*)lfs, (void*)dir, path); - lfs_stag_t tag = lfs_dir_find(lfs, &dir->m, &path, NULL); - if (tag < 0) { - LFS_TRACE("lfs_dir_open -> %"PRId32, tag); - return tag; - } - - if (lfs_tag_type3(tag) != LFS_TYPE_DIR) { - LFS_TRACE("lfs_dir_open -> %d", LFS_ERR_NOTDIR); - return LFS_ERR_NOTDIR; - } - - lfs_block_t pair[2]; - if (lfs_tag_id(tag) == 0x3ff) { - // handle root dir separately - pair[0] = lfs->root[0]; - pair[1] = lfs->root[1]; - } else { - // get dir pair from parent - lfs_stag_t res = lfs_dir_get(lfs, &dir->m, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair); - if (res < 0) { - LFS_TRACE("lfs_dir_open -> %"PRId32, res); - return res; - } - lfs_pair_fromle32(pair); - } - - // fetch first pair - int err = lfs_dir_fetch(lfs, &dir->m, pair); - if (err) { - LFS_TRACE("lfs_dir_open -> %d", err); - return err; - } - - // setup entry - dir->head[0] = dir->m.pair[0]; - dir->head[1] = dir->m.pair[1]; - dir->id = 0; - dir->pos = 0; - - // add to list of mdirs - dir->type = LFS_TYPE_DIR; - dir->next = (lfs_dir_t*)lfs->mlist; - lfs->mlist = (struct lfs_mlist*)dir; - - LFS_TRACE("lfs_dir_open -> %d", 0); - return 0; -} - -int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir) { - LFS_TRACE("lfs_dir_close(%p, %p)", (void*)lfs, (void*)dir); - // remove from list of mdirs - for (struct lfs_mlist **p = &lfs->mlist; *p; p = &(*p)->next) { - if (*p == (struct lfs_mlist*)dir) { - *p = (*p)->next; - break; - } - } - - LFS_TRACE("lfs_dir_close -> %d", 0); - return 0; -} - -int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) { - LFS_TRACE("lfs_dir_read(%p, %p, %p)", - (void*)lfs, (void*)dir, (void*)info); - memset(info, 0, sizeof(*info)); - - // special offset for '.' and '..' - if (dir->pos == 0) { - info->type = LFS_TYPE_DIR; - strcpy(info->name, "."); - dir->pos += 1; - LFS_TRACE("lfs_dir_read -> %d", true); - return true; - } else if (dir->pos == 1) { - info->type = LFS_TYPE_DIR; - strcpy(info->name, ".."); - dir->pos += 1; - LFS_TRACE("lfs_dir_read -> %d", true); - return true; - } - - while (true) { - if (dir->id == dir->m.count) { - if (!dir->m.split) { - LFS_TRACE("lfs_dir_read -> %d", false); - return false; - } - - int err = lfs_dir_fetch(lfs, &dir->m, dir->m.tail); - if (err) { - LFS_TRACE("lfs_dir_read -> %d", err); - return err; - } - - dir->id = 0; - } - - int err = lfs_dir_getinfo(lfs, &dir->m, dir->id, info); - if (err && err != LFS_ERR_NOENT) { - LFS_TRACE("lfs_dir_read -> %d", err); - return err; - } - - dir->id += 1; - if (err != LFS_ERR_NOENT) { - break; - } - } - - dir->pos += 1; - LFS_TRACE("lfs_dir_read -> %d", true); - return true; -} - -int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off) { - LFS_TRACE("lfs_dir_seek(%p, %p, %"PRIu32")", - (void*)lfs, (void*)dir, off); - // simply walk from head dir - int err = lfs_dir_rewind(lfs, dir); - if (err) { - LFS_TRACE("lfs_dir_seek -> %d", err); - return err; - } - - // first two for ./.. - dir->pos = lfs_min(2, off); - off -= dir->pos; - - // skip superblock entry - dir->id = (off > 0 && lfs_pair_cmp(dir->head, lfs->root) == 0); - - while (off > 0) { - int diff = lfs_min(dir->m.count - dir->id, off); - dir->id += diff; - dir->pos += diff; - off -= diff; - - if (dir->id == dir->m.count) { - if (!dir->m.split) { - LFS_TRACE("lfs_dir_seek -> %d", LFS_ERR_INVAL); - return LFS_ERR_INVAL; - } - - err = lfs_dir_fetch(lfs, &dir->m, dir->m.tail); - if (err) { - LFS_TRACE("lfs_dir_seek -> %d", err); - return err; - } - - dir->id = 0; - } - } - - LFS_TRACE("lfs_dir_seek -> %d", 0); - return 0; -} - -lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir) { - LFS_TRACE("lfs_dir_tell(%p, %p)", (void*)lfs, (void*)dir); - (void)lfs; - LFS_TRACE("lfs_dir_tell -> %"PRId32, dir->pos); - return dir->pos; -} - -int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir) { - LFS_TRACE("lfs_dir_rewind(%p, %p)", (void*)lfs, (void*)dir); - // reload the head dir - int err = lfs_dir_fetch(lfs, &dir->m, dir->head); - if (err) { - LFS_TRACE("lfs_dir_rewind -> %d", err); - return err; - } - - dir->id = 0; - dir->pos = 0; - LFS_TRACE("lfs_dir_rewind -> %d", 0); - return 0; -} - - -/// File index list operations /// -static int lfs_ctz_index(lfs_t *lfs, lfs_off_t *off) { - lfs_off_t size = *off; - lfs_off_t b = lfs->cfg->block_size - 2*4; - lfs_off_t i = size / b; - if (i == 0) { - return 0; - } - - i = (size - 4*(lfs_popc(i-1)+2)) / b; - *off = size - b*i - 4*lfs_popc(i); - return i; -} - -static int lfs_ctz_find(lfs_t *lfs, - const lfs_cache_t *pcache, lfs_cache_t *rcache, - lfs_block_t head, lfs_size_t size, - lfs_size_t pos, lfs_block_t *block, lfs_off_t *off) { - if (size == 0) { - *block = LFS_BLOCK_NULL; - *off = 0; - return 0; - } - - lfs_off_t current = lfs_ctz_index(lfs, &(lfs_off_t){size-1}); - lfs_off_t target = lfs_ctz_index(lfs, &pos); - - while (current > target) { - lfs_size_t skip = lfs_min( - lfs_npw2(current-target+1) - 1, - lfs_ctz(current)); - - int err = lfs_bd_read(lfs, - pcache, rcache, sizeof(head), - head, 4*skip, &head, sizeof(head)); - head = lfs_fromle32(head); - if (err) { - return err; - } - - current -= 1 << skip; - } - - *block = head; - *off = pos; - return 0; -} - -static int lfs_ctz_extend(lfs_t *lfs, - lfs_cache_t *pcache, lfs_cache_t *rcache, - lfs_block_t head, lfs_size_t size, - lfs_block_t *block, lfs_off_t *off) { - while (true) { - // go ahead and grab a block - lfs_block_t nblock; - int err = lfs_alloc(lfs, &nblock); - if (err) { - return err; - } - - { - err = lfs_bd_erase(lfs, nblock); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - if (size == 0) { - *block = nblock; - *off = 0; - return 0; - } - - lfs_size_t noff = size - 1; - lfs_off_t index = lfs_ctz_index(lfs, &noff); - noff = noff + 1; - - // just copy out the last block if it is incomplete - if (noff != lfs->cfg->block_size) { - for (lfs_off_t i = 0; i < noff; i++) { - uint8_t data; - err = lfs_bd_read(lfs, - NULL, rcache, noff-i, - head, i, &data, 1); - if (err) { - return err; - } - - err = lfs_bd_prog(lfs, - pcache, rcache, true, - nblock, i, &data, 1); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - } - - *block = nblock; - *off = noff; - return 0; - } - - // append block - index += 1; - lfs_size_t skips = lfs_ctz(index) + 1; - lfs_block_t nhead = head; - for (lfs_off_t i = 0; i < skips; i++) { - nhead = lfs_tole32(nhead); - err = lfs_bd_prog(lfs, pcache, rcache, true, - nblock, 4*i, &nhead, 4); - nhead = lfs_fromle32(nhead); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - if (i != skips-1) { - err = lfs_bd_read(lfs, - NULL, rcache, sizeof(nhead), - nhead, 4*i, &nhead, sizeof(nhead)); - nhead = lfs_fromle32(nhead); - if (err) { - return err; - } - } - } - - *block = nblock; - *off = 4*skips; - return 0; - } - -relocate: - LFS_DEBUG("Bad block at 0x%"PRIx32, nblock); - - // just clear cache and try a new block - lfs_cache_drop(lfs, pcache); - } -} - -static int lfs_ctz_traverse(lfs_t *lfs, - const lfs_cache_t *pcache, lfs_cache_t *rcache, - lfs_block_t head, lfs_size_t size, - int (*cb)(void*, lfs_block_t), void *data) { - if (size == 0) { - return 0; - } - - lfs_off_t index = lfs_ctz_index(lfs, &(lfs_off_t){size-1}); - - while (true) { - int err = cb(data, head); - if (err) { - return err; - } - - if (index == 0) { - return 0; - } - - lfs_block_t heads[2]; - int count = 2 - (index & 1); - err = lfs_bd_read(lfs, - pcache, rcache, count*sizeof(head), - head, 0, &heads, count*sizeof(head)); - heads[0] = lfs_fromle32(heads[0]); - heads[1] = lfs_fromle32(heads[1]); - if (err) { - return err; - } - - for (int i = 0; i < count-1; i++) { - err = cb(data, heads[i]); - if (err) { - return err; - } - } - - head = heads[count-1]; - index -= count; - } -} - - -/// Top level file operations /// -int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, - const char *path, int flags, - const struct lfs_file_config *cfg) { - LFS_TRACE("lfs_file_opencfg(%p, %p, \"%s\", %x, %p {" - ".buffer=%p, .attrs=%p, .attr_count=%"PRIu32"})", - (void*)lfs, (void*)file, path, flags, - (void*)cfg, cfg->buffer, (void*)cfg->attrs, cfg->attr_count); - - // deorphan if we haven't yet, needed at most once after poweron - if ((flags & 3) != LFS_O_RDONLY) { - int err = lfs_fs_forceconsistency(lfs); - if (err) { - LFS_TRACE("lfs_file_opencfg -> %d", err); - return err; - } - } - - // setup simple file details - int err; - file->cfg = cfg; - file->flags = flags | LFS_F_OPENED; - file->pos = 0; - file->off = 0; - file->cache.buffer = NULL; - - // allocate entry for file if it doesn't exist - lfs_stag_t tag = lfs_dir_find(lfs, &file->m, &path, &file->id); - if (tag < 0 && !(tag == LFS_ERR_NOENT && file->id != 0x3ff)) { - err = tag; - goto cleanup; - } - - // get id, add to list of mdirs to catch update changes - file->type = LFS_TYPE_REG; - file->next = (lfs_file_t*)lfs->mlist; - lfs->mlist = (struct lfs_mlist*)file; - - if (tag == LFS_ERR_NOENT) { - if (!(flags & LFS_O_CREAT)) { - err = LFS_ERR_NOENT; - goto cleanup; - } - - // check that name fits - lfs_size_t nlen = strlen(path); - if (nlen > lfs->name_max) { - err = LFS_ERR_NAMETOOLONG; - goto cleanup; - } - - // get next slot and create entry to remember name - err = lfs_dir_commit(lfs, &file->m, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_CREATE, file->id, 0), NULL}, - {LFS_MKTAG(LFS_TYPE_REG, file->id, nlen), path}, - {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), NULL})); - if (err) { - err = LFS_ERR_NAMETOOLONG; - goto cleanup; - } - - tag = LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, 0); - } else if (flags & LFS_O_EXCL) { - err = LFS_ERR_EXIST; - goto cleanup; - } else if (lfs_tag_type3(tag) != LFS_TYPE_REG) { - err = LFS_ERR_ISDIR; - goto cleanup; - } else if (flags & LFS_O_TRUNC) { - // truncate if requested - tag = LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0); - file->flags |= LFS_F_DIRTY; - } else { - // try to load what's on disk, if it's inlined we'll fix it later - tag = lfs_dir_get(lfs, &file->m, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, file->id, 8), &file->ctz); - if (tag < 0) { - err = tag; - goto cleanup; - } - lfs_ctz_fromle32(&file->ctz); - } - - // fetch attrs - for (unsigned i = 0; i < file->cfg->attr_count; i++) { - if ((file->flags & 3) != LFS_O_WRONLY) { - lfs_stag_t res = lfs_dir_get(lfs, &file->m, - LFS_MKTAG(0x7ff, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_USERATTR + file->cfg->attrs[i].type, - file->id, file->cfg->attrs[i].size), - file->cfg->attrs[i].buffer); - if (res < 0 && res != LFS_ERR_NOENT) { - err = res; - goto cleanup; - } - } - - if ((file->flags & 3) != LFS_O_RDONLY) { - if (file->cfg->attrs[i].size > lfs->attr_max) { - err = LFS_ERR_NOSPC; - goto cleanup; - } - - file->flags |= LFS_F_DIRTY; - } - } - - // allocate buffer if needed - if (file->cfg->buffer) { - file->cache.buffer = file->cfg->buffer; - } else { - file->cache.buffer = lfs_malloc(lfs->cfg->cache_size); - if (!file->cache.buffer) { - err = LFS_ERR_NOMEM; - goto cleanup; - } - } - - // zero to avoid information leak - lfs_cache_zero(lfs, &file->cache); - - if (lfs_tag_type3(tag) == LFS_TYPE_INLINESTRUCT) { - // load inline files - file->ctz.head = LFS_BLOCK_INLINE; - file->ctz.size = lfs_tag_size(tag); - file->flags |= LFS_F_INLINE; - file->cache.block = file->ctz.head; - file->cache.off = 0; - file->cache.size = lfs->cfg->cache_size; - - // don't always read (may be new/trunc file) - if (file->ctz.size > 0) { - lfs_stag_t res = lfs_dir_get(lfs, &file->m, - LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, file->id, - lfs_min(file->cache.size, 0x3fe)), - file->cache.buffer); - if (res < 0) { - err = res; - goto cleanup; - } - } - } - - LFS_TRACE("lfs_file_opencfg -> %d", 0); - return 0; - -cleanup: - // clean up lingering resources - file->flags |= LFS_F_ERRED; - lfs_file_close(lfs, file); - LFS_TRACE("lfs_file_opencfg -> %d", err); - return err; -} - -int lfs_file_open(lfs_t *lfs, lfs_file_t *file, - const char *path, int flags) { - LFS_TRACE("lfs_file_open(%p, %p, \"%s\", %x)", - (void*)lfs, (void*)file, path, flags); - static const struct lfs_file_config defaults = {0}; - int err = lfs_file_opencfg(lfs, file, path, flags, &defaults); - LFS_TRACE("lfs_file_open -> %d", err); - return err; -} - -int lfs_file_close(lfs_t *lfs, lfs_file_t *file) { - LFS_TRACE("lfs_file_close(%p, %p)", (void*)lfs, (void*)file); - LFS_ASSERT(file->flags & LFS_F_OPENED); - - int err = lfs_file_sync(lfs, file); - - // remove from list of mdirs - for (struct lfs_mlist **p = &lfs->mlist; *p; p = &(*p)->next) { - if (*p == (struct lfs_mlist*)file) { - *p = (*p)->next; - break; - } - } - - // clean up memory - if (!file->cfg->buffer) { - lfs_free(file->cache.buffer); - } - - file->flags &= ~LFS_F_OPENED; - LFS_TRACE("lfs_file_close -> %d", err); - return err; -} - -static int lfs_file_relocate(lfs_t *lfs, lfs_file_t *file) { - LFS_ASSERT(file->flags & LFS_F_OPENED); - - while (true) { - // just relocate what exists into new block - lfs_block_t nblock; - int err = lfs_alloc(lfs, &nblock); - if (err) { - return err; - } - - err = lfs_bd_erase(lfs, nblock); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - // either read from dirty cache or disk - for (lfs_off_t i = 0; i < file->off; i++) { - uint8_t data; - if (file->flags & LFS_F_INLINE) { - err = lfs_dir_getread(lfs, &file->m, - // note we evict inline files before they can be dirty - NULL, &file->cache, file->off-i, - LFS_MKTAG(0xfff, 0x1ff, 0), - LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), - i, &data, 1); - if (err) { - return err; - } - } else { - err = lfs_bd_read(lfs, - &file->cache, &lfs->rcache, file->off-i, - file->block, i, &data, 1); - if (err) { - return err; - } - } - - err = lfs_bd_prog(lfs, - &lfs->pcache, &lfs->rcache, true, - nblock, i, &data, 1); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - } - - // copy over new state of file - memcpy(file->cache.buffer, lfs->pcache.buffer, lfs->cfg->cache_size); - file->cache.block = lfs->pcache.block; - file->cache.off = lfs->pcache.off; - file->cache.size = lfs->pcache.size; - lfs_cache_zero(lfs, &lfs->pcache); - - file->block = nblock; - file->flags |= LFS_F_WRITING; - return 0; - -relocate: - LFS_DEBUG("Bad block at 0x%"PRIx32, nblock); - - // just clear cache and try a new block - lfs_cache_drop(lfs, &lfs->pcache); - } -} - -static int lfs_file_outline(lfs_t *lfs, lfs_file_t *file) { - file->off = file->pos; - lfs_alloc_ack(lfs); - int err = lfs_file_relocate(lfs, file); - if (err) { - return err; - } - - file->flags &= ~LFS_F_INLINE; - return 0; -} - -static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) { - LFS_ASSERT(file->flags & LFS_F_OPENED); - - if (file->flags & LFS_F_READING) { - if (!(file->flags & LFS_F_INLINE)) { - lfs_cache_drop(lfs, &file->cache); - } - file->flags &= ~LFS_F_READING; - } - - if (file->flags & LFS_F_WRITING) { - lfs_off_t pos = file->pos; - - if (!(file->flags & LFS_F_INLINE)) { - // copy over anything after current branch - lfs_file_t orig = { - .ctz.head = file->ctz.head, - .ctz.size = file->ctz.size, - .flags = LFS_O_RDONLY | LFS_F_OPENED, - .pos = file->pos, - .cache = lfs->rcache, - }; - lfs_cache_drop(lfs, &lfs->rcache); - - while (file->pos < file->ctz.size) { - // copy over a byte at a time, leave it up to caching - // to make this efficient - uint8_t data; - lfs_ssize_t res = lfs_file_read(lfs, &orig, &data, 1); - if (res < 0) { - return res; - } - - res = lfs_file_write(lfs, file, &data, 1); - if (res < 0) { - return res; - } - - // keep our reference to the rcache in sync - if (lfs->rcache.block != LFS_BLOCK_NULL) { - lfs_cache_drop(lfs, &orig.cache); - lfs_cache_drop(lfs, &lfs->rcache); - } - } - - // write out what we have - while (true) { - int err = lfs_bd_flush(lfs, &file->cache, &lfs->rcache, true); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - return err; - } - - break; - -relocate: - LFS_DEBUG("Bad block at 0x%"PRIx32, file->block); - err = lfs_file_relocate(lfs, file); - if (err) { - return err; - } - } - } else { - file->pos = lfs_max(file->pos, file->ctz.size); - } - - // actual file updates - file->ctz.head = file->block; - file->ctz.size = file->pos; - file->flags &= ~LFS_F_WRITING; - file->flags |= LFS_F_DIRTY; - - file->pos = pos; - } - - return 0; -} - -int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) { - LFS_TRACE("lfs_file_sync(%p, %p)", (void*)lfs, (void*)file); - LFS_ASSERT(file->flags & LFS_F_OPENED); - - if (file->flags & LFS_F_ERRED) { - // it's not safe to do anything if our file errored - LFS_TRACE("lfs_file_sync -> %d", 0); - return 0; - } - - int err = lfs_file_flush(lfs, file); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_sync -> %d", err); - return err; - } - - if ((file->flags & LFS_F_DIRTY) && - !lfs_pair_isnull(file->m.pair)) { - // update dir entry - uint16_t type; - const void *buffer; - lfs_size_t size; - struct lfs_ctz ctz; - if (file->flags & LFS_F_INLINE) { - // inline the whole file - type = LFS_TYPE_INLINESTRUCT; - buffer = file->cache.buffer; - size = file->ctz.size; - } else { - // update the ctz reference - type = LFS_TYPE_CTZSTRUCT; - // copy ctz so alloc will work during a relocate - ctz = file->ctz; - lfs_ctz_tole32(&ctz); - buffer = &ctz; - size = sizeof(ctz); - } - - // commit file data and attributes - err = lfs_dir_commit(lfs, &file->m, LFS_MKATTRS( - {LFS_MKTAG(type, file->id, size), buffer}, - {LFS_MKTAG(LFS_FROM_USERATTRS, file->id, - file->cfg->attr_count), file->cfg->attrs})); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_sync -> %d", err); - return err; - } - - file->flags &= ~LFS_F_DIRTY; - } - - LFS_TRACE("lfs_file_sync -> %d", 0); - return 0; -} - -lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, - void *buffer, lfs_size_t size) { - LFS_TRACE("lfs_file_read(%p, %p, %p, %"PRIu32")", - (void*)lfs, (void*)file, buffer, size); - LFS_ASSERT(file->flags & LFS_F_OPENED); - LFS_ASSERT((file->flags & 3) != LFS_O_WRONLY); - - uint8_t *data = buffer; - lfs_size_t nsize = size; - - if (file->flags & LFS_F_WRITING) { - // flush out any writes - int err = lfs_file_flush(lfs, file); - if (err) { - LFS_TRACE("lfs_file_read -> %d", err); - return err; - } - } - - if (file->pos >= file->ctz.size) { - // eof if past end - LFS_TRACE("lfs_file_read -> %d", 0); - return 0; - } - - size = lfs_min(size, file->ctz.size - file->pos); - nsize = size; - - while (nsize > 0) { - // check if we need a new block - if (!(file->flags & LFS_F_READING) || - file->off == lfs->cfg->block_size) { - if (!(file->flags & LFS_F_INLINE)) { - int err = lfs_ctz_find(lfs, NULL, &file->cache, - file->ctz.head, file->ctz.size, - file->pos, &file->block, &file->off); - if (err) { - LFS_TRACE("lfs_file_read -> %d", err); - return err; - } - } else { - file->block = LFS_BLOCK_INLINE; - file->off = file->pos; - } - - file->flags |= LFS_F_READING; - } - - // read as much as we can in current block - lfs_size_t diff = lfs_min(nsize, lfs->cfg->block_size - file->off); - if (file->flags & LFS_F_INLINE) { - int err = lfs_dir_getread(lfs, &file->m, - NULL, &file->cache, lfs->cfg->block_size, - LFS_MKTAG(0xfff, 0x1ff, 0), - LFS_MKTAG(LFS_TYPE_INLINESTRUCT, file->id, 0), - file->off, data, diff); - if (err) { - LFS_TRACE("lfs_file_read -> %d", err); - return err; - } - } else { - int err = lfs_bd_read(lfs, - NULL, &file->cache, lfs->cfg->block_size, - file->block, file->off, data, diff); - if (err) { - LFS_TRACE("lfs_file_read -> %d", err); - return err; - } - } - - file->pos += diff; - file->off += diff; - data += diff; - nsize -= diff; - } - - LFS_TRACE("lfs_file_read -> %"PRId32, size); - return size; -} - -lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, - const void *buffer, lfs_size_t size) { - LFS_TRACE("lfs_file_write(%p, %p, %p, %"PRIu32")", - (void*)lfs, (void*)file, buffer, size); - LFS_ASSERT(file->flags & LFS_F_OPENED); - LFS_ASSERT((file->flags & 3) != LFS_O_RDONLY); - - const uint8_t *data = buffer; - lfs_size_t nsize = size; - - if (file->flags & LFS_F_READING) { - // drop any reads - int err = lfs_file_flush(lfs, file); - if (err) { - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - } - - if ((file->flags & LFS_O_APPEND) && file->pos < file->ctz.size) { - file->pos = file->ctz.size; - } - - if (file->pos + size > lfs->file_max) { - // Larger than file limit? - LFS_TRACE("lfs_file_write -> %d", LFS_ERR_FBIG); - return LFS_ERR_FBIG; - } - - if (!(file->flags & LFS_F_WRITING) && file->pos > file->ctz.size) { - // fill with zeros - lfs_off_t pos = file->pos; - file->pos = file->ctz.size; - - while (file->pos < pos) { - lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1); - if (res < 0) { - LFS_TRACE("lfs_file_write -> %"PRId32, res); - return res; - } - } - } - - if ((file->flags & LFS_F_INLINE) && - lfs_max(file->pos+nsize, file->ctz.size) > - lfs_min(0x3fe, lfs_min( - lfs->cfg->cache_size, lfs->cfg->block_size/8))) { - // inline file doesn't fit anymore - int err = lfs_file_outline(lfs, file); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - } - - while (nsize > 0) { - // check if we need a new block - if (!(file->flags & LFS_F_WRITING) || - file->off == lfs->cfg->block_size) { - if (!(file->flags & LFS_F_INLINE)) { - if (!(file->flags & LFS_F_WRITING) && file->pos > 0) { - // find out which block we're extending from - int err = lfs_ctz_find(lfs, NULL, &file->cache, - file->ctz.head, file->ctz.size, - file->pos-1, &file->block, &file->off); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - - // mark cache as dirty since we may have read data into it - lfs_cache_zero(lfs, &file->cache); - } - - // extend file with new blocks - lfs_alloc_ack(lfs); - int err = lfs_ctz_extend(lfs, &file->cache, &lfs->rcache, - file->block, file->pos, - &file->block, &file->off); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - } else { - file->block = LFS_BLOCK_INLINE; - file->off = file->pos; - } - - file->flags |= LFS_F_WRITING; - } - - // program as much as we can in current block - lfs_size_t diff = lfs_min(nsize, lfs->cfg->block_size - file->off); - while (true) { - int err = lfs_bd_prog(lfs, &file->cache, &lfs->rcache, true, - file->block, file->off, data, diff); - if (err) { - if (err == LFS_ERR_CORRUPT) { - goto relocate; - } - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - - break; -relocate: - err = lfs_file_relocate(lfs, file); - if (err) { - file->flags |= LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %d", err); - return err; - } - } - - file->pos += diff; - file->off += diff; - data += diff; - nsize -= diff; - - lfs_alloc_ack(lfs); - } - - file->flags &= ~LFS_F_ERRED; - LFS_TRACE("lfs_file_write -> %"PRId32, size); - return size; -} - -lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, - lfs_soff_t off, int whence) { - LFS_TRACE("lfs_file_seek(%p, %p, %"PRId32", %d)", - (void*)lfs, (void*)file, off, whence); - LFS_ASSERT(file->flags & LFS_F_OPENED); - - // write out everything beforehand, may be noop if rdonly - int err = lfs_file_flush(lfs, file); - if (err) { - LFS_TRACE("lfs_file_seek -> %d", err); - return err; - } - - // find new pos - lfs_off_t npos = file->pos; - if (whence == LFS_SEEK_SET) { - npos = off; - } else if (whence == LFS_SEEK_CUR) { - npos = file->pos + off; - } else if (whence == LFS_SEEK_END) { - npos = file->ctz.size + off; - } - - if (npos > lfs->file_max) { - // file position out of range - LFS_TRACE("lfs_file_seek -> %d", LFS_ERR_INVAL); - return LFS_ERR_INVAL; - } - - // update pos - file->pos = npos; - LFS_TRACE("lfs_file_seek -> %"PRId32, npos); - return npos; -} - -int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) { - LFS_TRACE("lfs_file_truncate(%p, %p, %"PRIu32")", - (void*)lfs, (void*)file, size); - LFS_ASSERT(file->flags & LFS_F_OPENED); - LFS_ASSERT((file->flags & 3) != LFS_O_RDONLY); - - if (size > LFS_FILE_MAX) { - LFS_TRACE("lfs_file_truncate -> %d", LFS_ERR_INVAL); - return LFS_ERR_INVAL; - } - - lfs_off_t pos = file->pos; - lfs_off_t oldsize = lfs_file_size(lfs, file); - if (size < oldsize) { - // need to flush since directly changing metadata - int err = lfs_file_flush(lfs, file); - if (err) { - LFS_TRACE("lfs_file_truncate -> %d", err); - return err; - } - - // lookup new head in ctz skip list - err = lfs_ctz_find(lfs, NULL, &file->cache, - file->ctz.head, file->ctz.size, - size, &file->block, &file->off); - if (err) { - LFS_TRACE("lfs_file_truncate -> %d", err); - return err; - } - - file->ctz.head = file->block; - file->ctz.size = size; - file->flags |= LFS_F_DIRTY | LFS_F_READING; - } else if (size > oldsize) { - // flush+seek if not already at end - if (file->pos != oldsize) { - lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_END); - if (res < 0) { - LFS_TRACE("lfs_file_truncate -> %"PRId32, res); - return (int)res; - } - } - - // fill with zeros - while (file->pos < size) { - lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1); - if (res < 0) { - LFS_TRACE("lfs_file_truncate -> %"PRId32, res); - return (int)res; - } - } - } - - // restore pos - lfs_soff_t res = lfs_file_seek(lfs, file, pos, LFS_SEEK_SET); - if (res < 0) { - LFS_TRACE("lfs_file_truncate -> %"PRId32, res); - return (int)res; - } - - LFS_TRACE("lfs_file_truncate -> %d", 0); - return 0; -} - -lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file) { - LFS_TRACE("lfs_file_tell(%p, %p)", (void*)lfs, (void*)file); - LFS_ASSERT(file->flags & LFS_F_OPENED); - (void)lfs; - LFS_TRACE("lfs_file_tell -> %"PRId32, file->pos); - return file->pos; -} - -int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file) { - LFS_TRACE("lfs_file_rewind(%p, %p)", (void*)lfs, (void*)file); - lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_SET); - if (res < 0) { - LFS_TRACE("lfs_file_rewind -> %"PRId32, res); - return (int)res; - } - - LFS_TRACE("lfs_file_rewind -> %d", 0); - return 0; -} - -lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file) { - LFS_TRACE("lfs_file_size(%p, %p)", (void*)lfs, (void*)file); - LFS_ASSERT(file->flags & LFS_F_OPENED); - (void)lfs; - if (file->flags & LFS_F_WRITING) { - LFS_TRACE("lfs_file_size -> %"PRId32, - lfs_max(file->pos, file->ctz.size)); - return lfs_max(file->pos, file->ctz.size); - } else { - LFS_TRACE("lfs_file_size -> %"PRId32, file->ctz.size); - return file->ctz.size; - } -} - - -/// General fs operations /// -int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) { - LFS_TRACE("lfs_stat(%p, \"%s\", %p)", (void*)lfs, path, (void*)info); - lfs_mdir_t cwd; - lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); - if (tag < 0) { - LFS_TRACE("lfs_stat -> %"PRId32, tag); - return (int)tag; - } - - int err = lfs_dir_getinfo(lfs, &cwd, lfs_tag_id(tag), info); - LFS_TRACE("lfs_stat -> %d", err); - return err; -} - -int lfs_remove(lfs_t *lfs, const char *path) { - LFS_TRACE("lfs_remove(%p, \"%s\")", (void*)lfs, path); - // deorphan if we haven't yet, needed at most once after poweron - int err = lfs_fs_forceconsistency(lfs); - if (err) { - LFS_TRACE("lfs_remove -> %d", err); - return err; - } - - lfs_mdir_t cwd; - lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); - if (tag < 0 || lfs_tag_id(tag) == 0x3ff) { - LFS_TRACE("lfs_remove -> %"PRId32, (tag < 0) ? tag : LFS_ERR_INVAL); - return (tag < 0) ? (int)tag : LFS_ERR_INVAL; - } - - struct lfs_mlist dir; - dir.next = lfs->mlist; - if (lfs_tag_type3(tag) == LFS_TYPE_DIR) { - // must be empty before removal - lfs_block_t pair[2]; - lfs_stag_t res = lfs_dir_get(lfs, &cwd, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair); - if (res < 0) { - LFS_TRACE("lfs_remove -> %"PRId32, res); - return (int)res; - } - lfs_pair_fromle32(pair); - - err = lfs_dir_fetch(lfs, &dir.m, pair); - if (err) { - LFS_TRACE("lfs_remove -> %d", err); - return err; - } - - if (dir.m.count > 0 || dir.m.split) { - LFS_TRACE("lfs_remove -> %d", LFS_ERR_NOTEMPTY); - return LFS_ERR_NOTEMPTY; - } - - // mark fs as orphaned - lfs_fs_preporphans(lfs, +1); - - // I know it's crazy but yes, dir can be changed by our parent's - // commit (if predecessor is child) - dir.type = 0; - dir.id = 0; - lfs->mlist = &dir; - } - - // delete the entry - err = lfs_dir_commit(lfs, &cwd, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_DELETE, lfs_tag_id(tag), 0), NULL})); - if (err) { - lfs->mlist = dir.next; - LFS_TRACE("lfs_remove -> %d", err); - return err; - } - - lfs->mlist = dir.next; - if (lfs_tag_type3(tag) == LFS_TYPE_DIR) { - // fix orphan - lfs_fs_preporphans(lfs, -1); - - err = lfs_fs_pred(lfs, dir.m.pair, &cwd); - if (err) { - LFS_TRACE("lfs_remove -> %d", err); - return err; - } - - err = lfs_dir_drop(lfs, &cwd, &dir.m); - if (err) { - LFS_TRACE("lfs_remove -> %d", err); - return err; - } - } - - LFS_TRACE("lfs_remove -> %d", 0); - return 0; -} - -int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) { - LFS_TRACE("lfs_rename(%p, \"%s\", \"%s\")", (void*)lfs, oldpath, newpath); - - // deorphan if we haven't yet, needed at most once after poweron - int err = lfs_fs_forceconsistency(lfs); - if (err) { - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - - // find old entry - lfs_mdir_t oldcwd; - lfs_stag_t oldtag = lfs_dir_find(lfs, &oldcwd, &oldpath, NULL); - if (oldtag < 0 || lfs_tag_id(oldtag) == 0x3ff) { - LFS_TRACE("lfs_rename -> %"PRId32, - (oldtag < 0) ? oldtag : LFS_ERR_INVAL); - return (oldtag < 0) ? (int)oldtag : LFS_ERR_INVAL; - } - - // find new entry - lfs_mdir_t newcwd; - uint16_t newid; - lfs_stag_t prevtag = lfs_dir_find(lfs, &newcwd, &newpath, &newid); - if ((prevtag < 0 || lfs_tag_id(prevtag) == 0x3ff) && - !(prevtag == LFS_ERR_NOENT && newid != 0x3ff)) { - LFS_TRACE("lfs_rename -> %"PRId32, - (prevtag < 0) ? prevtag : LFS_ERR_INVAL); - return (prevtag < 0) ? (int)prevtag : LFS_ERR_INVAL; - } - - // if we're in the same pair there's a few special cases... - bool samepair = (lfs_pair_cmp(oldcwd.pair, newcwd.pair) == 0); - uint16_t newoldid = lfs_tag_id(oldtag); - - struct lfs_mlist prevdir; - prevdir.next = lfs->mlist; - if (prevtag == LFS_ERR_NOENT) { - // check that name fits - lfs_size_t nlen = strlen(newpath); - if (nlen > lfs->name_max) { - LFS_TRACE("lfs_rename -> %d", LFS_ERR_NAMETOOLONG); - return LFS_ERR_NAMETOOLONG; - } - - // there is a small chance we are being renamed in the same - // directory/ to an id less than our old id, the global update - // to handle this is a bit messy - if (samepair && newid <= newoldid) { - newoldid += 1; - } - } else if (lfs_tag_type3(prevtag) != lfs_tag_type3(oldtag)) { - LFS_TRACE("lfs_rename -> %d", LFS_ERR_ISDIR); - return LFS_ERR_ISDIR; - } else if (samepair && newid == newoldid) { - // we're renaming to ourselves?? - LFS_TRACE("lfs_rename -> %d", 0); - return 0; - } else if (lfs_tag_type3(prevtag) == LFS_TYPE_DIR) { - // must be empty before removal - lfs_block_t prevpair[2]; - lfs_stag_t res = lfs_dir_get(lfs, &newcwd, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, newid, 8), prevpair); - if (res < 0) { - LFS_TRACE("lfs_rename -> %"PRId32, res); - return (int)res; - } - lfs_pair_fromle32(prevpair); - - // must be empty before removal - err = lfs_dir_fetch(lfs, &prevdir.m, prevpair); - if (err) { - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - - if (prevdir.m.count > 0 || prevdir.m.split) { - LFS_TRACE("lfs_rename -> %d", LFS_ERR_NOTEMPTY); - return LFS_ERR_NOTEMPTY; - } - - // mark fs as orphaned - lfs_fs_preporphans(lfs, +1); - - // I know it's crazy but yes, dir can be changed by our parent's - // commit (if predecessor is child) - prevdir.type = 0; - prevdir.id = 0; - lfs->mlist = &prevdir; - } - - if (!samepair) { - lfs_fs_prepmove(lfs, newoldid, oldcwd.pair); - } - - // move over all attributes - err = lfs_dir_commit(lfs, &newcwd, LFS_MKATTRS( - {LFS_MKTAG_IF(prevtag != LFS_ERR_NOENT, - LFS_TYPE_DELETE, newid, 0), NULL}, - {LFS_MKTAG(LFS_TYPE_CREATE, newid, 0), NULL}, - {LFS_MKTAG(lfs_tag_type3(oldtag), newid, strlen(newpath)), newpath}, - {LFS_MKTAG(LFS_FROM_MOVE, newid, lfs_tag_id(oldtag)), &oldcwd}, - {LFS_MKTAG_IF(samepair, - LFS_TYPE_DELETE, newoldid, 0), NULL})); - if (err) { - lfs->mlist = prevdir.next; - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - - // let commit clean up after move (if we're different! otherwise move - // logic already fixed it for us) - if (!samepair && lfs_gstate_hasmove(&lfs->gstate)) { - // prep gstate and delete move id - lfs_fs_prepmove(lfs, 0x3ff, NULL); - err = lfs_dir_commit(lfs, &oldcwd, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_DELETE, lfs_tag_id(oldtag), 0), NULL})); - if (err) { - lfs->mlist = prevdir.next; - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - } - - lfs->mlist = prevdir.next; - if (prevtag != LFS_ERR_NOENT && lfs_tag_type3(prevtag) == LFS_TYPE_DIR) { - // fix orphan - lfs_fs_preporphans(lfs, -1); - - err = lfs_fs_pred(lfs, prevdir.m.pair, &newcwd); - if (err) { - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - - err = lfs_dir_drop(lfs, &newcwd, &prevdir.m); - if (err) { - LFS_TRACE("lfs_rename -> %d", err); - return err; - } - } - - LFS_TRACE("lfs_rename -> %d", 0); - return 0; -} - -lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, - uint8_t type, void *buffer, lfs_size_t size) { - LFS_TRACE("lfs_getattr(%p, \"%s\", %"PRIu8", %p, %"PRIu32")", - (void*)lfs, path, type, buffer, size); - lfs_mdir_t cwd; - lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); - if (tag < 0) { - LFS_TRACE("lfs_getattr -> %"PRId32, tag); - return tag; - } - - uint16_t id = lfs_tag_id(tag); - if (id == 0x3ff) { - // special case for root - id = 0; - int err = lfs_dir_fetch(lfs, &cwd, lfs->root); - if (err) { - LFS_TRACE("lfs_getattr -> %d", err); - return err; - } - } - - tag = lfs_dir_get(lfs, &cwd, LFS_MKTAG(0x7ff, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_USERATTR + type, - id, lfs_min(size, lfs->attr_max)), - buffer); - if (tag < 0) { - if (tag == LFS_ERR_NOENT) { - LFS_TRACE("lfs_getattr -> %d", LFS_ERR_NOATTR); - return LFS_ERR_NOATTR; - } - - LFS_TRACE("lfs_getattr -> %"PRId32, tag); - return tag; - } - - size = lfs_tag_size(tag); - LFS_TRACE("lfs_getattr -> %"PRId32, size); - return size; -} - -static int lfs_commitattr(lfs_t *lfs, const char *path, - uint8_t type, const void *buffer, lfs_size_t size) { - lfs_mdir_t cwd; - lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); - if (tag < 0) { - return tag; - } - - uint16_t id = lfs_tag_id(tag); - if (id == 0x3ff) { - // special case for root - id = 0; - int err = lfs_dir_fetch(lfs, &cwd, lfs->root); - if (err) { - return err; - } - } - - return lfs_dir_commit(lfs, &cwd, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_USERATTR + type, id, size), buffer})); -} - -int lfs_setattr(lfs_t *lfs, const char *path, - uint8_t type, const void *buffer, lfs_size_t size) { - LFS_TRACE("lfs_setattr(%p, \"%s\", %"PRIu8", %p, %"PRIu32")", - (void*)lfs, path, type, buffer, size); - if (size > lfs->attr_max) { - LFS_TRACE("lfs_setattr -> %d", LFS_ERR_NOSPC); - return LFS_ERR_NOSPC; - } - - int err = lfs_commitattr(lfs, path, type, buffer, size); - LFS_TRACE("lfs_setattr -> %d", err); - return err; -} - -int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type) { - LFS_TRACE("lfs_removeattr(%p, \"%s\", %"PRIu8")", (void*)lfs, path, type); - int err = lfs_commitattr(lfs, path, type, NULL, 0x3ff); - LFS_TRACE("lfs_removeattr -> %d", err); - return err; -} - - -/// Filesystem operations /// -static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) { - lfs->cfg = cfg; - int err = 0; - - // validate that the lfs-cfg sizes were initiated properly before - // performing any arithmetic logics with them - LFS_ASSERT(lfs->cfg->read_size != 0); - LFS_ASSERT(lfs->cfg->prog_size != 0); - LFS_ASSERT(lfs->cfg->cache_size != 0); - - // check that block size is a multiple of cache size is a multiple - // of prog and read sizes - LFS_ASSERT(lfs->cfg->cache_size % lfs->cfg->read_size == 0); - LFS_ASSERT(lfs->cfg->cache_size % lfs->cfg->prog_size == 0); - LFS_ASSERT(lfs->cfg->block_size % lfs->cfg->cache_size == 0); - - // check that the block size is large enough to fit ctz pointers - LFS_ASSERT(4*lfs_npw2(0xffffffff / (lfs->cfg->block_size-2*4)) - <= lfs->cfg->block_size); - - // block_cycles = 0 is no longer supported. - // - // block_cycles is the number of erase cycles before littlefs evicts - // metadata logs as a part of wear leveling. Suggested values are in the - // range of 100-1000, or set block_cycles to -1 to disable block-level - // wear-leveling. - LFS_ASSERT(lfs->cfg->block_cycles != 0); - - - // setup read cache - if (lfs->cfg->read_buffer) { - lfs->rcache.buffer = lfs->cfg->read_buffer; - } else { - lfs->rcache.buffer = lfs_malloc(lfs->cfg->cache_size); - if (!lfs->rcache.buffer) { - err = LFS_ERR_NOMEM; - goto cleanup; - } - } - - // setup program cache - if (lfs->cfg->prog_buffer) { - lfs->pcache.buffer = lfs->cfg->prog_buffer; - } else { - lfs->pcache.buffer = lfs_malloc(lfs->cfg->cache_size); - if (!lfs->pcache.buffer) { - err = LFS_ERR_NOMEM; - goto cleanup; - } - } - - // zero to avoid information leaks - lfs_cache_zero(lfs, &lfs->rcache); - lfs_cache_zero(lfs, &lfs->pcache); - - // setup lookahead, must be multiple of 64-bits, 32-bit aligned - LFS_ASSERT(lfs->cfg->lookahead_size > 0); - LFS_ASSERT(lfs->cfg->lookahead_size % 8 == 0 && - (uintptr_t)lfs->cfg->lookahead_buffer % 4 == 0); - if (lfs->cfg->lookahead_buffer) { - lfs->free.buffer = lfs->cfg->lookahead_buffer; - } else { - lfs->free.buffer = lfs_malloc(lfs->cfg->lookahead_size); - if (!lfs->free.buffer) { - err = LFS_ERR_NOMEM; - goto cleanup; - } - } - - // check that the size limits are sane - LFS_ASSERT(lfs->cfg->name_max <= LFS_NAME_MAX); - lfs->name_max = lfs->cfg->name_max; - if (!lfs->name_max) { - lfs->name_max = LFS_NAME_MAX; - } - - LFS_ASSERT(lfs->cfg->file_max <= LFS_FILE_MAX); - lfs->file_max = lfs->cfg->file_max; - if (!lfs->file_max) { - lfs->file_max = LFS_FILE_MAX; - } - - LFS_ASSERT(lfs->cfg->attr_max <= LFS_ATTR_MAX); - lfs->attr_max = lfs->cfg->attr_max; - if (!lfs->attr_max) { - lfs->attr_max = LFS_ATTR_MAX; - } - - // setup default state - lfs->root[0] = LFS_BLOCK_NULL; - lfs->root[1] = LFS_BLOCK_NULL; - lfs->mlist = NULL; - lfs->seed = 0; - lfs->gdisk = (lfs_gstate_t){0}; - lfs->gstate = (lfs_gstate_t){0}; - lfs->gdelta = (lfs_gstate_t){0}; -#ifdef LFS_MIGRATE - lfs->lfs1 = NULL; -#endif - - return 0; - -cleanup: - lfs_deinit(lfs); - return err; -} - -static int lfs_deinit(lfs_t *lfs) { - // free allocated memory - if (!lfs->cfg->read_buffer) { - lfs_free(lfs->rcache.buffer); - } - - if (!lfs->cfg->prog_buffer) { - lfs_free(lfs->pcache.buffer); - } - - if (!lfs->cfg->lookahead_buffer) { - lfs_free(lfs->free.buffer); - } - - return 0; -} - -int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { - LFS_TRACE("lfs_format(%p, %p {.context=%p, " - ".read=%p, .prog=%p, .erase=%p, .sync=%p, " - ".read_size=%"PRIu32", .prog_size=%"PRIu32", " - ".block_size=%"PRIu32", .block_count=%"PRIu32", " - ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " - ".lookahead_size=%"PRIu32", .read_buffer=%p, " - ".prog_buffer=%p, .lookahead_buffer=%p, " - ".name_max=%"PRIu32", .file_max=%"PRIu32", " - ".attr_max=%"PRIu32"})", - (void*)lfs, (void*)cfg, cfg->context, - (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, - (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, - cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, - cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, - cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, - cfg->name_max, cfg->file_max, cfg->attr_max); - int err = 0; - { - err = lfs_init(lfs, cfg); - if (err) { - LFS_TRACE("lfs_format -> %d", err); - return err; - } - - // create free lookahead - memset(lfs->free.buffer, 0, lfs->cfg->lookahead_size); - lfs->free.off = 0; - lfs->free.size = lfs_min(8*lfs->cfg->lookahead_size, - lfs->cfg->block_count); - lfs->free.i = 0; - lfs_alloc_ack(lfs); - - // create root dir - lfs_mdir_t root; - err = lfs_dir_alloc(lfs, &root); - if (err) { - goto cleanup; - } - - // write one superblock - lfs_superblock_t superblock = { - .version = LFS_DISK_VERSION, - .block_size = lfs->cfg->block_size, - .block_count = lfs->cfg->block_count, - .name_max = lfs->name_max, - .file_max = lfs->file_max, - .attr_max = lfs->attr_max, - }; - - lfs_superblock_tole32(&superblock); - err = lfs_dir_commit(lfs, &root, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_CREATE, 0, 0), NULL}, - {LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), "littlefs"}, - {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), - &superblock})); - if (err) { - goto cleanup; - } - - // sanity check that fetch works - err = lfs_dir_fetch(lfs, &root, (const lfs_block_t[2]){0, 1}); - if (err) { - goto cleanup; - } - - // force compaction to prevent accidentally mounting any - // older version of littlefs that may live on disk - root.erased = false; - err = lfs_dir_commit(lfs, &root, NULL, 0); - if (err) { - goto cleanup; - } - } - -cleanup: - lfs_deinit(lfs); - LFS_TRACE("lfs_format -> %d", err); - return err; -} - -int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { - LFS_TRACE("lfs_mount(%p, %p {.context=%p, " - ".read=%p, .prog=%p, .erase=%p, .sync=%p, " - ".read_size=%"PRIu32", .prog_size=%"PRIu32", " - ".block_size=%"PRIu32", .block_count=%"PRIu32", " - ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " - ".lookahead_size=%"PRIu32", .read_buffer=%p, " - ".prog_buffer=%p, .lookahead_buffer=%p, " - ".name_max=%"PRIu32", .file_max=%"PRIu32", " - ".attr_max=%"PRIu32"})", - (void*)lfs, (void*)cfg, cfg->context, - (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, - (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, - cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, - cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, - cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, - cfg->name_max, cfg->file_max, cfg->attr_max); - int err = lfs_init(lfs, cfg); - if (err) { - LFS_TRACE("lfs_mount -> %d", err); - return err; - } - - // scan directory blocks for superblock and any global updates - lfs_mdir_t dir = {.tail = {0, 1}}; - lfs_block_t cycle = 0; - while (!lfs_pair_isnull(dir.tail)) { - if (cycle >= lfs->cfg->block_count/2) { - // loop detected - err = LFS_ERR_CORRUPT; - goto cleanup; - } - cycle += 1; - - // fetch next block in tail list - lfs_stag_t tag = lfs_dir_fetchmatch(lfs, &dir, dir.tail, - LFS_MKTAG(0x7ff, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), - NULL, - lfs_dir_find_match, &(struct lfs_dir_find_match){ - lfs, "littlefs", 8}); - if (tag < 0) { - err = tag; - goto cleanup; - } - - // has superblock? - if (tag && !lfs_tag_isdelete(tag)) { - // update root - lfs->root[0] = dir.pair[0]; - lfs->root[1] = dir.pair[1]; - - // grab superblock - lfs_superblock_t superblock; - tag = lfs_dir_get(lfs, &dir, LFS_MKTAG(0x7ff, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), - &superblock); - if (tag < 0) { - err = tag; - goto cleanup; - } - lfs_superblock_fromle32(&superblock); - - // check version - uint16_t major_version = (0xffff & (superblock.version >> 16)); - uint16_t minor_version = (0xffff & (superblock.version >> 0)); - if ((major_version != LFS_DISK_VERSION_MAJOR || - minor_version > LFS_DISK_VERSION_MINOR)) { - LFS_ERROR("Invalid version v%"PRIu16".%"PRIu16, - major_version, minor_version); - err = LFS_ERR_INVAL; - goto cleanup; - } - - // check superblock configuration - if (superblock.name_max) { - if (superblock.name_max > lfs->name_max) { - LFS_ERROR("Unsupported name_max (%"PRIu32" > %"PRIu32")", - superblock.name_max, lfs->name_max); - err = LFS_ERR_INVAL; - goto cleanup; - } - - lfs->name_max = superblock.name_max; - } - - if (superblock.file_max) { - if (superblock.file_max > lfs->file_max) { - LFS_ERROR("Unsupported file_max (%"PRIu32" > %"PRIu32")", - superblock.file_max, lfs->file_max); - err = LFS_ERR_INVAL; - goto cleanup; - } - - lfs->file_max = superblock.file_max; - } - - if (superblock.attr_max) { - if (superblock.attr_max > lfs->attr_max) { - LFS_ERROR("Unsupported attr_max (%"PRIu32" > %"PRIu32")", - superblock.attr_max, lfs->attr_max); - err = LFS_ERR_INVAL; - goto cleanup; - } - - lfs->attr_max = superblock.attr_max; - } - } - - // has gstate? - err = lfs_dir_getgstate(lfs, &dir, &lfs->gstate); - if (err) { - goto cleanup; - } - } - - // found superblock? - if (lfs_pair_isnull(lfs->root)) { - err = LFS_ERR_INVAL; - goto cleanup; - } - - // update littlefs with gstate - if (!lfs_gstate_iszero(&lfs->gstate)) { - LFS_DEBUG("Found pending gstate 0x%08"PRIx32"%08"PRIx32"%08"PRIx32, - lfs->gstate.tag, - lfs->gstate.pair[0], - lfs->gstate.pair[1]); - } - lfs->gstate.tag += !lfs_tag_isvalid(lfs->gstate.tag); - lfs->gdisk = lfs->gstate; - - // setup free lookahead - lfs_alloc_reset(lfs); - - LFS_TRACE("lfs_mount -> %d", 0); - return 0; - -cleanup: - lfs_unmount(lfs); - LFS_TRACE("lfs_mount -> %d", err); - return err; -} - -int lfs_unmount(lfs_t *lfs) { - LFS_TRACE("lfs_unmount(%p)", (void*)lfs); - int err = lfs_deinit(lfs); - LFS_TRACE("lfs_unmount -> %d", err); - return err; -} - - -/// Filesystem filesystem operations /// -int lfs_fs_traverseraw(lfs_t *lfs, - int (*cb)(void *data, lfs_block_t block), void *data, - bool includeorphans) { - // iterate over metadata pairs - lfs_mdir_t dir = {.tail = {0, 1}}; - -#ifdef LFS_MIGRATE - // also consider v1 blocks during migration - if (lfs->lfs1) { - int err = lfs1_traverse(lfs, cb, data); - if (err) { - return err; - } - - dir.tail[0] = lfs->root[0]; - dir.tail[1] = lfs->root[1]; - } -#endif - - lfs_block_t cycle = 0; - while (!lfs_pair_isnull(dir.tail)) { - if (cycle >= lfs->cfg->block_count/2) { - // loop detected - return LFS_ERR_CORRUPT; - } - cycle += 1; - - for (int i = 0; i < 2; i++) { - int err = cb(data, dir.tail[i]); - if (err) { - return err; - } - } - - // iterate through ids in directory - int err = lfs_dir_fetch(lfs, &dir, dir.tail); - if (err) { - return err; - } - - for (uint16_t id = 0; id < dir.count; id++) { - struct lfs_ctz ctz; - lfs_stag_t tag = lfs_dir_get(lfs, &dir, LFS_MKTAG(0x700, 0x3ff, 0), - LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz); - if (tag < 0) { - if (tag == LFS_ERR_NOENT) { - continue; - } - return tag; - } - lfs_ctz_fromle32(&ctz); - - if (lfs_tag_type3(tag) == LFS_TYPE_CTZSTRUCT) { - err = lfs_ctz_traverse(lfs, NULL, &lfs->rcache, - ctz.head, ctz.size, cb, data); - if (err) { - return err; - } - } else if (includeorphans && - lfs_tag_type3(tag) == LFS_TYPE_DIRSTRUCT) { - for (int i = 0; i < 2; i++) { - err = cb(data, (&ctz.head)[i]); - if (err) { - return err; - } - } - } - } - } - - // iterate over any open files - for (lfs_file_t *f = (lfs_file_t*)lfs->mlist; f; f = f->next) { - if (f->type != LFS_TYPE_REG) { - continue; - } - - if ((f->flags & LFS_F_DIRTY) && !(f->flags & LFS_F_INLINE)) { - int err = lfs_ctz_traverse(lfs, &f->cache, &lfs->rcache, - f->ctz.head, f->ctz.size, cb, data); - if (err) { - return err; - } - } - - if ((f->flags & LFS_F_WRITING) && !(f->flags & LFS_F_INLINE)) { - int err = lfs_ctz_traverse(lfs, &f->cache, &lfs->rcache, - f->block, f->pos, cb, data); - if (err) { - return err; - } - } - } - - return 0; -} - -int lfs_fs_traverse(lfs_t *lfs, - int (*cb)(void *data, lfs_block_t block), void *data) { - LFS_TRACE("lfs_fs_traverse(%p, %p, %p)", - (void*)lfs, (void*)(uintptr_t)cb, data); - int err = lfs_fs_traverseraw(lfs, cb, data, true); - LFS_TRACE("lfs_fs_traverse -> %d", 0); - return err; -} - -static int lfs_fs_pred(lfs_t *lfs, - const lfs_block_t pair[2], lfs_mdir_t *pdir) { - // iterate over all directory directory entries - pdir->tail[0] = 0; - pdir->tail[1] = 1; - lfs_block_t cycle = 0; - while (!lfs_pair_isnull(pdir->tail)) { - if (cycle >= lfs->cfg->block_count/2) { - // loop detected - return LFS_ERR_CORRUPT; - } - cycle += 1; - - if (lfs_pair_cmp(pdir->tail, pair) == 0) { - return 0; - } - - int err = lfs_dir_fetch(lfs, pdir, pdir->tail); - if (err) { - return err; - } - } - - return LFS_ERR_NOENT; -} - -struct lfs_fs_parent_match { - lfs_t *lfs; - const lfs_block_t pair[2]; -}; - -static int lfs_fs_parent_match(void *data, - lfs_tag_t tag, const void *buffer) { - struct lfs_fs_parent_match *find = data; - lfs_t *lfs = find->lfs; - const struct lfs_diskoff *disk = buffer; - (void)tag; - - lfs_block_t child[2]; - int err = lfs_bd_read(lfs, - &lfs->pcache, &lfs->rcache, lfs->cfg->block_size, - disk->block, disk->off, &child, sizeof(child)); - if (err) { - return err; - } - - lfs_pair_fromle32(child); - return (lfs_pair_cmp(child, find->pair) == 0) ? LFS_CMP_EQ : LFS_CMP_LT; -} - -static lfs_stag_t lfs_fs_parent(lfs_t *lfs, const lfs_block_t pair[2], - lfs_mdir_t *parent) { - // use fetchmatch with callback to find pairs - parent->tail[0] = 0; - parent->tail[1] = 1; - lfs_block_t cycle = 0; - while (!lfs_pair_isnull(parent->tail)) { - if (cycle >= lfs->cfg->block_count/2) { - // loop detected - return LFS_ERR_CORRUPT; - } - cycle += 1; - - lfs_stag_t tag = lfs_dir_fetchmatch(lfs, parent, parent->tail, - LFS_MKTAG(0x7ff, 0, 0x3ff), - LFS_MKTAG(LFS_TYPE_DIRSTRUCT, 0, 8), - NULL, - lfs_fs_parent_match, &(struct lfs_fs_parent_match){ - lfs, {pair[0], pair[1]}}); - if (tag && tag != LFS_ERR_NOENT) { - return tag; - } - } - - return LFS_ERR_NOENT; -} - -static int lfs_fs_relocate(lfs_t *lfs, - const lfs_block_t oldpair[2], lfs_block_t newpair[2]) { - // update internal root - if (lfs_pair_cmp(oldpair, lfs->root) == 0) { - lfs->root[0] = newpair[0]; - lfs->root[1] = newpair[1]; - } - - // update internally tracked dirs - for (struct lfs_mlist *d = lfs->mlist; d; d = d->next) { - if (lfs_pair_cmp(oldpair, d->m.pair) == 0) { - d->m.pair[0] = newpair[0]; - d->m.pair[1] = newpair[1]; - } - - if (d->type == LFS_TYPE_DIR && - lfs_pair_cmp(oldpair, ((lfs_dir_t*)d)->head) == 0) { - ((lfs_dir_t*)d)->head[0] = newpair[0]; - ((lfs_dir_t*)d)->head[1] = newpair[1]; - } - } - - // find parent - lfs_mdir_t parent; - lfs_stag_t tag = lfs_fs_parent(lfs, oldpair, &parent); - if (tag < 0 && tag != LFS_ERR_NOENT) { - return tag; - } - - if (tag != LFS_ERR_NOENT) { - // update disk, this creates a desync - lfs_fs_preporphans(lfs, +1); - - // fix pending move in this pair? this looks like an optimization but - // is in fact _required_ since relocating may outdate the move. - uint16_t moveid = 0x3ff; - if (lfs_gstate_hasmovehere(&lfs->gstate, parent.pair)) { - moveid = lfs_tag_id(lfs->gstate.tag); - LFS_DEBUG("Fixing move while relocating " - "{0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16"\n", - parent.pair[0], parent.pair[1], moveid); - lfs_fs_prepmove(lfs, 0x3ff, NULL); - if (moveid < lfs_tag_id(tag)) { - tag -= LFS_MKTAG(0, 1, 0); - } - } - - lfs_pair_tole32(newpair); - int err = lfs_dir_commit(lfs, &parent, LFS_MKATTRS( - {LFS_MKTAG_IF(moveid != 0x3ff, - LFS_TYPE_DELETE, moveid, 0), NULL}, - {tag, newpair})); - lfs_pair_fromle32(newpair); - if (err) { - return err; - } - - // next step, clean up orphans - lfs_fs_preporphans(lfs, -1); - } - - // find pred - int err = lfs_fs_pred(lfs, oldpair, &parent); - if (err && err != LFS_ERR_NOENT) { - return err; - } - - // if we can't find dir, it must be new - if (err != LFS_ERR_NOENT) { - // fix pending move in this pair? this looks like an optimization but - // is in fact _required_ since relocating may outdate the move. - uint16_t moveid = 0x3ff; - if (lfs_gstate_hasmovehere(&lfs->gstate, parent.pair)) { - moveid = lfs_tag_id(lfs->gstate.tag); - LFS_DEBUG("Fixing move while relocating " - "{0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16"\n", - parent.pair[0], parent.pair[1], moveid); - lfs_fs_prepmove(lfs, 0x3ff, NULL); - } - - // replace bad pair, either we clean up desync, or no desync occured - lfs_pair_tole32(newpair); - err = lfs_dir_commit(lfs, &parent, LFS_MKATTRS( - {LFS_MKTAG_IF(moveid != 0x3ff, - LFS_TYPE_DELETE, moveid, 0), NULL}, - {LFS_MKTAG(LFS_TYPE_TAIL + parent.split, 0x3ff, 8), newpair})); - lfs_pair_fromle32(newpair); - if (err) { - return err; - } - } - - return 0; -} - -static void lfs_fs_preporphans(lfs_t *lfs, int8_t orphans) { - LFS_ASSERT(lfs_tag_size(lfs->gstate.tag) > 0 || orphans >= 0); - lfs->gstate.tag += orphans; - lfs->gstate.tag = ((lfs->gstate.tag & ~LFS_MKTAG(0x800, 0, 0)) | - ((uint32_t)lfs_gstate_hasorphans(&lfs->gstate) << 31)); -} - -static void lfs_fs_prepmove(lfs_t *lfs, - uint16_t id, const lfs_block_t pair[2]) { - lfs->gstate.tag = ((lfs->gstate.tag & ~LFS_MKTAG(0x7ff, 0x3ff, 0)) | - ((id != 0x3ff) ? LFS_MKTAG(LFS_TYPE_DELETE, id, 0) : 0)); - lfs->gstate.pair[0] = (id != 0x3ff) ? pair[0] : 0; - lfs->gstate.pair[1] = (id != 0x3ff) ? pair[1] : 0; -} - -static int lfs_fs_demove(lfs_t *lfs) { - if (!lfs_gstate_hasmove(&lfs->gdisk)) { - return 0; - } - - // Fix bad moves - LFS_DEBUG("Fixing move {0x%"PRIx32", 0x%"PRIx32"} 0x%"PRIx16, - lfs->gdisk.pair[0], - lfs->gdisk.pair[1], - lfs_tag_id(lfs->gdisk.tag)); - - // fetch and delete the moved entry - lfs_mdir_t movedir; - int err = lfs_dir_fetch(lfs, &movedir, lfs->gdisk.pair); - if (err) { - return err; - } - - // prep gstate and delete move id - uint16_t moveid = lfs_tag_id(lfs->gdisk.tag); - lfs_fs_prepmove(lfs, 0x3ff, NULL); - err = lfs_dir_commit(lfs, &movedir, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_DELETE, moveid, 0), NULL})); - if (err) { - return err; - } - - return 0; -} - -static int lfs_fs_deorphan(lfs_t *lfs) { - if (!lfs_gstate_hasorphans(&lfs->gstate)) { - return 0; - } - - // Fix any orphans - lfs_mdir_t pdir = {.split = true, .tail = {0, 1}}; - lfs_mdir_t dir; - - // iterate over all directory directory entries - while (!lfs_pair_isnull(pdir.tail)) { - int err = lfs_dir_fetch(lfs, &dir, pdir.tail); - if (err) { - return err; - } - - // check head blocks for orphans - if (!pdir.split) { - // check if we have a parent - lfs_mdir_t parent; - lfs_stag_t tag = lfs_fs_parent(lfs, pdir.tail, &parent); - if (tag < 0 && tag != LFS_ERR_NOENT) { - return tag; - } - - if (tag == LFS_ERR_NOENT) { - // we are an orphan - LFS_DEBUG("Fixing orphan {0x%"PRIx32", 0x%"PRIx32"}", - pdir.tail[0], pdir.tail[1]); - - err = lfs_dir_drop(lfs, &pdir, &dir); - if (err) { - return err; - } - - // refetch tail - continue; - } - - lfs_block_t pair[2]; - lfs_stag_t res = lfs_dir_get(lfs, &parent, - LFS_MKTAG(0x7ff, 0x3ff, 0), tag, pair); - if (res < 0) { - return res; - } - lfs_pair_fromle32(pair); - - if (!lfs_pair_sync(pair, pdir.tail)) { - // we have desynced - LFS_DEBUG("Fixing half-orphan {0x%"PRIx32", 0x%"PRIx32"} " - "-> {0x%"PRIx32", 0x%"PRIx32"}", - pdir.tail[0], pdir.tail[1], pair[0], pair[1]); - - lfs_pair_tole32(pair); - err = lfs_dir_commit(lfs, &pdir, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), pair})); - lfs_pair_fromle32(pair); - if (err) { - return err; - } - - // refetch tail - continue; - } - } - - pdir = dir; - } - - // mark orphans as fixed - lfs_fs_preporphans(lfs, -lfs_gstate_getorphans(&lfs->gstate)); - return 0; -} - -static int lfs_fs_forceconsistency(lfs_t *lfs) { - int err = lfs_fs_demove(lfs); - if (err) { - return err; - } - - err = lfs_fs_deorphan(lfs); - if (err) { - return err; - } - - return 0; -} - -static int lfs_fs_size_count(void *p, lfs_block_t block) { - (void)block; - lfs_size_t *size = p; - *size += 1; - return 0; -} - -lfs_ssize_t lfs_fs_size(lfs_t *lfs) { - LFS_TRACE("lfs_fs_size(%p)", (void*)lfs); - lfs_size_t size = 0; - int err = lfs_fs_traverseraw(lfs, lfs_fs_size_count, &size, false); - if (err) { - LFS_TRACE("lfs_fs_size -> %d", err); - return err; - } - - LFS_TRACE("lfs_fs_size -> %d", err); - return size; -} - -#ifdef LFS_MIGRATE -////// Migration from littelfs v1 below this ////// - -/// Version info /// - -// Software library version -// Major (top-nibble), incremented on backwards incompatible changes -// Minor (bottom-nibble), incremented on feature additions -#define LFS1_VERSION 0x00010007 -#define LFS1_VERSION_MAJOR (0xffff & (LFS1_VERSION >> 16)) -#define LFS1_VERSION_MINOR (0xffff & (LFS1_VERSION >> 0)) - -// Version of On-disk data structures -// Major (top-nibble), incremented on backwards incompatible changes -// Minor (bottom-nibble), incremented on feature additions -#define LFS1_DISK_VERSION 0x00010001 -#define LFS1_DISK_VERSION_MAJOR (0xffff & (LFS1_DISK_VERSION >> 16)) -#define LFS1_DISK_VERSION_MINOR (0xffff & (LFS1_DISK_VERSION >> 0)) - - -/// v1 Definitions /// - -// File types -enum lfs1_type { - LFS1_TYPE_REG = 0x11, - LFS1_TYPE_DIR = 0x22, - LFS1_TYPE_SUPERBLOCK = 0x2e, -}; - -typedef struct lfs1 { - lfs_block_t root[2]; -} lfs1_t; - -typedef struct lfs1_entry { - lfs_off_t off; - - struct lfs1_disk_entry { - uint8_t type; - uint8_t elen; - uint8_t alen; - uint8_t nlen; - union { - struct { - lfs_block_t head; - lfs_size_t size; - } file; - lfs_block_t dir[2]; - } u; - } d; -} lfs1_entry_t; - -typedef struct lfs1_dir { - struct lfs1_dir *next; - lfs_block_t pair[2]; - lfs_off_t off; - - lfs_block_t head[2]; - lfs_off_t pos; - - struct lfs1_disk_dir { - uint32_t rev; - lfs_size_t size; - lfs_block_t tail[2]; - } d; -} lfs1_dir_t; - -typedef struct lfs1_superblock { - lfs_off_t off; - - struct lfs1_disk_superblock { - uint8_t type; - uint8_t elen; - uint8_t alen; - uint8_t nlen; - lfs_block_t root[2]; - uint32_t block_size; - uint32_t block_count; - uint32_t version; - char magic[8]; - } d; -} lfs1_superblock_t; - - -/// Low-level wrappers v1->v2 /// -static void lfs1_crc(uint32_t *crc, const void *buffer, size_t size) { - *crc = lfs_crc(*crc, buffer, size); -} - -static int lfs1_bd_read(lfs_t *lfs, lfs_block_t block, - lfs_off_t off, void *buffer, lfs_size_t size) { - // if we ever do more than writes to alternating pairs, - // this may need to consider pcache - return lfs_bd_read(lfs, &lfs->pcache, &lfs->rcache, size, - block, off, buffer, size); -} - -static int lfs1_bd_crc(lfs_t *lfs, lfs_block_t block, - lfs_off_t off, lfs_size_t size, uint32_t *crc) { - for (lfs_off_t i = 0; i < size; i++) { - uint8_t c; - int err = lfs1_bd_read(lfs, block, off+i, &c, 1); - if (err) { - return err; - } - - lfs1_crc(crc, &c, 1); - } - - return 0; -} - - -/// Endian swapping functions /// -static void lfs1_dir_fromle32(struct lfs1_disk_dir *d) { - d->rev = lfs_fromle32(d->rev); - d->size = lfs_fromle32(d->size); - d->tail[0] = lfs_fromle32(d->tail[0]); - d->tail[1] = lfs_fromle32(d->tail[1]); -} - -static void lfs1_dir_tole32(struct lfs1_disk_dir *d) { - d->rev = lfs_tole32(d->rev); - d->size = lfs_tole32(d->size); - d->tail[0] = lfs_tole32(d->tail[0]); - d->tail[1] = lfs_tole32(d->tail[1]); -} - -static void lfs1_entry_fromle32(struct lfs1_disk_entry *d) { - d->u.dir[0] = lfs_fromle32(d->u.dir[0]); - d->u.dir[1] = lfs_fromle32(d->u.dir[1]); -} - -static void lfs1_entry_tole32(struct lfs1_disk_entry *d) { - d->u.dir[0] = lfs_tole32(d->u.dir[0]); - d->u.dir[1] = lfs_tole32(d->u.dir[1]); -} - -static void lfs1_superblock_fromle32(struct lfs1_disk_superblock *d) { - d->root[0] = lfs_fromle32(d->root[0]); - d->root[1] = lfs_fromle32(d->root[1]); - d->block_size = lfs_fromle32(d->block_size); - d->block_count = lfs_fromle32(d->block_count); - d->version = lfs_fromle32(d->version); -} - - -///// Metadata pair and directory operations /// -static inline lfs_size_t lfs1_entry_size(const lfs1_entry_t *entry) { - return 4 + entry->d.elen + entry->d.alen + entry->d.nlen; -} - -static int lfs1_dir_fetch(lfs_t *lfs, - lfs1_dir_t *dir, const lfs_block_t pair[2]) { - // copy out pair, otherwise may be aliasing dir - const lfs_block_t tpair[2] = {pair[0], pair[1]}; - bool valid = false; - - // check both blocks for the most recent revision - for (int i = 0; i < 2; i++) { - struct lfs1_disk_dir test; - int err = lfs1_bd_read(lfs, tpair[i], 0, &test, sizeof(test)); - lfs1_dir_fromle32(&test); - if (err) { - if (err == LFS_ERR_CORRUPT) { - continue; - } - return err; - } - - if (valid && lfs_scmp(test.rev, dir->d.rev) < 0) { - continue; - } - - if ((0x7fffffff & test.size) < sizeof(test)+4 || - (0x7fffffff & test.size) > lfs->cfg->block_size) { - continue; - } - - uint32_t crc = 0xffffffff; - lfs1_dir_tole32(&test); - lfs1_crc(&crc, &test, sizeof(test)); - lfs1_dir_fromle32(&test); - err = lfs1_bd_crc(lfs, tpair[i], sizeof(test), - (0x7fffffff & test.size) - sizeof(test), &crc); - if (err) { - if (err == LFS_ERR_CORRUPT) { - continue; - } - return err; - } - - if (crc != 0) { - continue; - } - - valid = true; - - // setup dir in case it's valid - dir->pair[0] = tpair[(i+0) % 2]; - dir->pair[1] = tpair[(i+1) % 2]; - dir->off = sizeof(dir->d); - dir->d = test; - } - - if (!valid) { - LFS_ERROR("Corrupted dir pair at {0x%"PRIx32", 0x%"PRIx32"}", - tpair[0], tpair[1]); - return LFS_ERR_CORRUPT; - } - - return 0; -} - -static int lfs1_dir_next(lfs_t *lfs, lfs1_dir_t *dir, lfs1_entry_t *entry) { - while (dir->off + sizeof(entry->d) > (0x7fffffff & dir->d.size)-4) { - if (!(0x80000000 & dir->d.size)) { - entry->off = dir->off; - return LFS_ERR_NOENT; - } - - int err = lfs1_dir_fetch(lfs, dir, dir->d.tail); - if (err) { - return err; - } - - dir->off = sizeof(dir->d); - dir->pos += sizeof(dir->d) + 4; - } - - int err = lfs1_bd_read(lfs, dir->pair[0], dir->off, - &entry->d, sizeof(entry->d)); - lfs1_entry_fromle32(&entry->d); - if (err) { - return err; - } - - entry->off = dir->off; - dir->off += lfs1_entry_size(entry); - dir->pos += lfs1_entry_size(entry); - return 0; -} - -/// littlefs v1 specific operations /// -int lfs1_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) { - if (lfs_pair_isnull(lfs->lfs1->root)) { - return 0; - } - - // iterate over metadata pairs - lfs1_dir_t dir; - lfs1_entry_t entry; - lfs_block_t cwd[2] = {0, 1}; - - while (true) { - for (int i = 0; i < 2; i++) { - int err = cb(data, cwd[i]); - if (err) { - return err; - } - } - - int err = lfs1_dir_fetch(lfs, &dir, cwd); - if (err) { - return err; - } - - // iterate over contents - while (dir.off + sizeof(entry.d) <= (0x7fffffff & dir.d.size)-4) { - err = lfs1_bd_read(lfs, dir.pair[0], dir.off, - &entry.d, sizeof(entry.d)); - lfs1_entry_fromle32(&entry.d); - if (err) { - return err; - } - - dir.off += lfs1_entry_size(&entry); - if ((0x70 & entry.d.type) == (0x70 & LFS1_TYPE_REG)) { - err = lfs_ctz_traverse(lfs, NULL, &lfs->rcache, - entry.d.u.file.head, entry.d.u.file.size, cb, data); - if (err) { - return err; - } - } - } - - // we also need to check if we contain a threaded v2 directory - lfs_mdir_t dir2 = {.split=true, .tail={cwd[0], cwd[1]}}; - while (dir2.split) { - err = lfs_dir_fetch(lfs, &dir2, dir2.tail); - if (err) { - break; - } - - for (int i = 0; i < 2; i++) { - err = cb(data, dir2.pair[i]); - if (err) { - return err; - } - } - } - - cwd[0] = dir.d.tail[0]; - cwd[1] = dir.d.tail[1]; - - if (lfs_pair_isnull(cwd)) { - break; - } - } - - return 0; -} - -static int lfs1_moved(lfs_t *lfs, const void *e) { - if (lfs_pair_isnull(lfs->lfs1->root)) { - return 0; - } - - // skip superblock - lfs1_dir_t cwd; - int err = lfs1_dir_fetch(lfs, &cwd, (const lfs_block_t[2]){0, 1}); - if (err) { - return err; - } - - // iterate over all directory directory entries - lfs1_entry_t entry; - while (!lfs_pair_isnull(cwd.d.tail)) { - err = lfs1_dir_fetch(lfs, &cwd, cwd.d.tail); - if (err) { - return err; - } - - while (true) { - err = lfs1_dir_next(lfs, &cwd, &entry); - if (err && err != LFS_ERR_NOENT) { - return err; - } - - if (err == LFS_ERR_NOENT) { - break; - } - - if (!(0x80 & entry.d.type) && - memcmp(&entry.d.u, e, sizeof(entry.d.u)) == 0) { - return true; - } - } - } - - return false; -} - -/// Filesystem operations /// -static int lfs1_mount(lfs_t *lfs, struct lfs1 *lfs1, - const struct lfs_config *cfg) { - int err = 0; - { - err = lfs_init(lfs, cfg); - if (err) { - return err; - } - - lfs->lfs1 = lfs1; - lfs->lfs1->root[0] = LFS_BLOCK_NULL; - lfs->lfs1->root[1] = LFS_BLOCK_NULL; - - // setup free lookahead - lfs->free.off = 0; - lfs->free.size = 0; - lfs->free.i = 0; - lfs_alloc_ack(lfs); - - // load superblock - lfs1_dir_t dir; - lfs1_superblock_t superblock; - err = lfs1_dir_fetch(lfs, &dir, (const lfs_block_t[2]){0, 1}); - if (err && err != LFS_ERR_CORRUPT) { - goto cleanup; - } - - if (!err) { - err = lfs1_bd_read(lfs, dir.pair[0], sizeof(dir.d), - &superblock.d, sizeof(superblock.d)); - lfs1_superblock_fromle32(&superblock.d); - if (err) { - goto cleanup; - } - - lfs->lfs1->root[0] = superblock.d.root[0]; - lfs->lfs1->root[1] = superblock.d.root[1]; - } - - if (err || memcmp(superblock.d.magic, "littlefs", 8) != 0) { - LFS_ERROR("Invalid superblock at {0x%"PRIx32", 0x%"PRIx32"}", - 0, 1); - err = LFS_ERR_CORRUPT; - goto cleanup; - } - - uint16_t major_version = (0xffff & (superblock.d.version >> 16)); - uint16_t minor_version = (0xffff & (superblock.d.version >> 0)); - if ((major_version != LFS1_DISK_VERSION_MAJOR || - minor_version > LFS1_DISK_VERSION_MINOR)) { - LFS_ERROR("Invalid version v%d.%d", major_version, minor_version); - err = LFS_ERR_INVAL; - goto cleanup; - } - - return 0; - } - -cleanup: - lfs_deinit(lfs); - return err; -} - -static int lfs1_unmount(lfs_t *lfs) { - return lfs_deinit(lfs); -} - -/// v1 migration /// -int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg) { - LFS_TRACE("lfs_migrate(%p, %p {.context=%p, " - ".read=%p, .prog=%p, .erase=%p, .sync=%p, " - ".read_size=%"PRIu32", .prog_size=%"PRIu32", " - ".block_size=%"PRIu32", .block_count=%"PRIu32", " - ".block_cycles=%"PRIu32", .cache_size=%"PRIu32", " - ".lookahead_size=%"PRIu32", .read_buffer=%p, " - ".prog_buffer=%p, .lookahead_buffer=%p, " - ".name_max=%"PRIu32", .file_max=%"PRIu32", " - ".attr_max=%"PRIu32"})", - (void*)lfs, (void*)cfg, cfg->context, - (void*)(uintptr_t)cfg->read, (void*)(uintptr_t)cfg->prog, - (void*)(uintptr_t)cfg->erase, (void*)(uintptr_t)cfg->sync, - cfg->read_size, cfg->prog_size, cfg->block_size, cfg->block_count, - cfg->block_cycles, cfg->cache_size, cfg->lookahead_size, - cfg->read_buffer, cfg->prog_buffer, cfg->lookahead_buffer, - cfg->name_max, cfg->file_max, cfg->attr_max); - struct lfs1 lfs1; - int err = lfs1_mount(lfs, &lfs1, cfg); - if (err) { - LFS_TRACE("lfs_migrate -> %d", err); - return err; - } - - { - // iterate through each directory, copying over entries - // into new directory - lfs1_dir_t dir1; - lfs_mdir_t dir2; - dir1.d.tail[0] = lfs->lfs1->root[0]; - dir1.d.tail[1] = lfs->lfs1->root[1]; - while (!lfs_pair_isnull(dir1.d.tail)) { - // iterate old dir - err = lfs1_dir_fetch(lfs, &dir1, dir1.d.tail); - if (err) { - goto cleanup; - } - - // create new dir and bind as temporary pretend root - err = lfs_dir_alloc(lfs, &dir2); - if (err) { - goto cleanup; - } - - dir2.rev = dir1.d.rev; - dir1.head[0] = dir1.pair[0]; - dir1.head[1] = dir1.pair[1]; - lfs->root[0] = dir2.pair[0]; - lfs->root[1] = dir2.pair[1]; - - err = lfs_dir_commit(lfs, &dir2, NULL, 0); - if (err) { - goto cleanup; - } - - while (true) { - lfs1_entry_t entry1; - err = lfs1_dir_next(lfs, &dir1, &entry1); - if (err && err != LFS_ERR_NOENT) { - goto cleanup; - } - - if (err == LFS_ERR_NOENT) { - break; - } - - // check that entry has not been moved - if (entry1.d.type & 0x80) { - int moved = lfs1_moved(lfs, &entry1.d.u); - if (moved < 0) { - err = moved; - goto cleanup; - } - - if (moved) { - continue; - } - - entry1.d.type &= ~0x80; - } - - // also fetch name - char name[LFS_NAME_MAX+1]; - memset(name, 0, sizeof(name)); - err = lfs1_bd_read(lfs, dir1.pair[0], - entry1.off + 4+entry1.d.elen+entry1.d.alen, - name, entry1.d.nlen); - if (err) { - goto cleanup; - } - - bool isdir = (entry1.d.type == LFS1_TYPE_DIR); - - // create entry in new dir - err = lfs_dir_fetch(lfs, &dir2, lfs->root); - if (err) { - goto cleanup; - } - - uint16_t id; - err = lfs_dir_find(lfs, &dir2, &(const char*){name}, &id); - if (!(err == LFS_ERR_NOENT && id != 0x3ff)) { - err = (err < 0) ? err : LFS_ERR_EXIST; - goto cleanup; - } - - lfs1_entry_tole32(&entry1.d); - err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_CREATE, id, 0)}, - {LFS_MKTAG_IF_ELSE(isdir, - LFS_TYPE_DIR, id, entry1.d.nlen, - LFS_TYPE_REG, id, entry1.d.nlen), - name}, - {LFS_MKTAG_IF_ELSE(isdir, - LFS_TYPE_DIRSTRUCT, id, sizeof(entry1.d.u), - LFS_TYPE_CTZSTRUCT, id, sizeof(entry1.d.u)), - &entry1.d.u})); - lfs1_entry_fromle32(&entry1.d); - if (err) { - goto cleanup; - } - } - - if (!lfs_pair_isnull(dir1.d.tail)) { - // find last block and update tail to thread into fs - err = lfs_dir_fetch(lfs, &dir2, lfs->root); - if (err) { - goto cleanup; - } - - while (dir2.split) { - err = lfs_dir_fetch(lfs, &dir2, dir2.tail); - if (err) { - goto cleanup; - } - } - - lfs_pair_tole32(dir2.pair); - err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_SOFTTAIL, 0x3ff, 8), dir1.d.tail})); - lfs_pair_fromle32(dir2.pair); - if (err) { - goto cleanup; - } - } - - // Copy over first block to thread into fs. Unfortunately - // if this fails there is not much we can do. - LFS_DEBUG("Migrating {0x%"PRIx32", 0x%"PRIx32"} " - "-> {0x%"PRIx32", 0x%"PRIx32"}", - lfs->root[0], lfs->root[1], dir1.head[0], dir1.head[1]); - - err = lfs_bd_erase(lfs, dir1.head[1]); - if (err) { - goto cleanup; - } - - err = lfs_dir_fetch(lfs, &dir2, lfs->root); - if (err) { - goto cleanup; - } - - for (lfs_off_t i = 0; i < dir2.off; i++) { - uint8_t dat; - err = lfs_bd_read(lfs, - NULL, &lfs->rcache, dir2.off, - dir2.pair[0], i, &dat, 1); - if (err) { - goto cleanup; - } - - err = lfs_bd_prog(lfs, - &lfs->pcache, &lfs->rcache, true, - dir1.head[1], i, &dat, 1); - if (err) { - goto cleanup; - } - } - - err = lfs_bd_flush(lfs, &lfs->pcache, &lfs->rcache, true); - if (err) { - goto cleanup; - } - } - - // Create new superblock. This marks a successful migration! - err = lfs1_dir_fetch(lfs, &dir1, (const lfs_block_t[2]){0, 1}); - if (err) { - goto cleanup; - } - - dir2.pair[0] = dir1.pair[0]; - dir2.pair[1] = dir1.pair[1]; - dir2.rev = dir1.d.rev; - dir2.off = sizeof(dir2.rev); - dir2.etag = 0xffffffff; - dir2.count = 0; - dir2.tail[0] = lfs->lfs1->root[0]; - dir2.tail[1] = lfs->lfs1->root[1]; - dir2.erased = false; - dir2.split = true; - - lfs_superblock_t superblock = { - .version = LFS_DISK_VERSION, - .block_size = lfs->cfg->block_size, - .block_count = lfs->cfg->block_count, - .name_max = lfs->name_max, - .file_max = lfs->file_max, - .attr_max = lfs->attr_max, - }; - - lfs_superblock_tole32(&superblock); - err = lfs_dir_commit(lfs, &dir2, LFS_MKATTRS( - {LFS_MKTAG(LFS_TYPE_CREATE, 0, 0)}, - {LFS_MKTAG(LFS_TYPE_SUPERBLOCK, 0, 8), "littlefs"}, - {LFS_MKTAG(LFS_TYPE_INLINESTRUCT, 0, sizeof(superblock)), - &superblock})); - if (err) { - goto cleanup; - } - - // sanity check that fetch works - err = lfs_dir_fetch(lfs, &dir2, (const lfs_block_t[2]){0, 1}); - if (err) { - goto cleanup; - } - - // force compaction to prevent accidentally mounting v1 - dir2.erased = false; - err = lfs_dir_commit(lfs, &dir2, NULL, 0); - if (err) { - goto cleanup; - } - } - -cleanup: - lfs1_unmount(lfs); - LFS_TRACE("lfs_migrate -> %d", err); - return err; -} - -#endif diff --git a/lib/libesp32/LITTLEFS/src/lfs.h b/lib/libesp32/LITTLEFS/src/lfs.h deleted file mode 100755 index 35bbbabfa..000000000 --- a/lib/libesp32/LITTLEFS/src/lfs.h +++ /dev/null @@ -1,655 +0,0 @@ -/* - * The little filesystem - * - * Copyright (c) 2017, Arm Limited. All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - */ -#ifndef LFS_H -#define LFS_H - -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/// Version info /// - -// Software library version -// Major (top-nibble), incremented on backwards incompatible changes -// Minor (bottom-nibble), incremented on feature additions -#define LFS_VERSION 0x00020002 -#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) -#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0)) - -// Version of On-disk data structures -// Major (top-nibble), incremented on backwards incompatible changes -// Minor (bottom-nibble), incremented on feature additions -#define LFS_DISK_VERSION 0x00020000 -#define LFS_DISK_VERSION_MAJOR (0xffff & (LFS_DISK_VERSION >> 16)) -#define LFS_DISK_VERSION_MINOR (0xffff & (LFS_DISK_VERSION >> 0)) - - -/// Definitions /// - -// Type definitions -typedef uint32_t lfs_size_t; -typedef uint32_t lfs_off_t; - -typedef int32_t lfs_ssize_t; -typedef int32_t lfs_soff_t; - -typedef uint32_t lfs_block_t; - -// Maximum name size in bytes, may be redefined to reduce the size of the -// info struct. Limited to <= 1022. Stored in superblock and must be -// respected by other littlefs drivers. -#ifndef LFS_NAME_MAX -#define LFS_NAME_MAX 255 -#endif - -// Maximum size of a file in bytes, may be redefined to limit to support other -// drivers. Limited on disk to <= 4294967296. However, above 2147483647 the -// functions lfs_file_seek, lfs_file_size, and lfs_file_tell will return -// incorrect values due to using signed integers. Stored in superblock and -// must be respected by other littlefs drivers. -#ifndef LFS_FILE_MAX -#define LFS_FILE_MAX 2147483647 -#endif - -// Maximum size of custom attributes in bytes, may be redefined, but there is -// no real benefit to using a smaller LFS_ATTR_MAX. Limited to <= 1022. -#ifndef LFS_ATTR_MAX -#define LFS_ATTR_MAX 1022 -#endif - -// Possible error codes, these are negative to allow -// valid positive return values -enum lfs_error { - LFS_ERR_OK = 0, // No error - LFS_ERR_IO = -5, // Error during device operation - LFS_ERR_CORRUPT = -84, // Corrupted - LFS_ERR_NOENT = -2, // No directory entry - LFS_ERR_EXIST = -17, // Entry already exists - LFS_ERR_NOTDIR = -20, // Entry is not a dir - LFS_ERR_ISDIR = -21, // Entry is a dir - LFS_ERR_NOTEMPTY = -39, // Dir is not empty - LFS_ERR_BADF = -9, // Bad file number - LFS_ERR_FBIG = -27, // File too large - LFS_ERR_INVAL = -22, // Invalid parameter - LFS_ERR_NOSPC = -28, // No space left on device - LFS_ERR_NOMEM = -12, // No more memory available - LFS_ERR_NOATTR = -61, // No data/attr available - LFS_ERR_NAMETOOLONG = -36, // File name too long -}; - -// File types -enum lfs_type { - // file types - LFS_TYPE_REG = 0x001, - LFS_TYPE_DIR = 0x002, - - // internally used types - LFS_TYPE_SPLICE = 0x400, - LFS_TYPE_NAME = 0x000, - LFS_TYPE_STRUCT = 0x200, - LFS_TYPE_USERATTR = 0x300, - LFS_TYPE_FROM = 0x100, - LFS_TYPE_TAIL = 0x600, - LFS_TYPE_GLOBALS = 0x700, - LFS_TYPE_CRC = 0x500, - - // internally used type specializations - LFS_TYPE_CREATE = 0x401, - LFS_TYPE_DELETE = 0x4ff, - LFS_TYPE_SUPERBLOCK = 0x0ff, - LFS_TYPE_DIRSTRUCT = 0x200, - LFS_TYPE_CTZSTRUCT = 0x202, - LFS_TYPE_INLINESTRUCT = 0x201, - LFS_TYPE_SOFTTAIL = 0x600, - LFS_TYPE_HARDTAIL = 0x601, - LFS_TYPE_MOVESTATE = 0x7ff, - - // internal chip sources - LFS_FROM_NOOP = 0x000, - LFS_FROM_MOVE = 0x101, - LFS_FROM_USERATTRS = 0x102, -}; - -// File open flags -enum lfs_open_flags { - // open flags - LFS_O_RDONLY = 1, // Open a file as read only - LFS_O_WRONLY = 2, // Open a file as write only - LFS_O_RDWR = 3, // Open a file as read and write - LFS_O_CREAT = 0x0100, // Create a file if it does not exist - LFS_O_EXCL = 0x0200, // Fail if a file already exists - LFS_O_TRUNC = 0x0400, // Truncate the existing file to zero size - LFS_O_APPEND = 0x0800, // Move to end of file on every write - - // internally used flags - LFS_F_DIRTY = 0x010000, // File does not match storage - LFS_F_WRITING = 0x020000, // File has been written since last flush - LFS_F_READING = 0x040000, // File has been read since last flush - LFS_F_ERRED = 0x080000, // An error occured during write - LFS_F_INLINE = 0x100000, // Currently inlined in directory entry - LFS_F_OPENED = 0x200000, // File has been opened -}; - -// File seek flags -enum lfs_whence_flags { - LFS_SEEK_SET = 0, // Seek relative to an absolute position - LFS_SEEK_CUR = 1, // Seek relative to the current file position - LFS_SEEK_END = 2, // Seek relative to the end of the file -}; - - -// Configuration provided during initialization of the littlefs -struct lfs_config { - // Opaque user provided context that can be used to pass - // information to the block device operations - void *context; - - // Read a region in a block. Negative error codes are propogated - // to the user. - int (*read)(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, void *buffer, lfs_size_t size); - - // Program a region in a block. The block must have previously - // been erased. Negative error codes are propogated to the user. - // May return LFS_ERR_CORRUPT if the block should be considered bad. - int (*prog)(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, const void *buffer, lfs_size_t size); - - // Erase a block. A block must be erased before being programmed. - // The state of an erased block is undefined. Negative error codes - // are propogated to the user. - // May return LFS_ERR_CORRUPT if the block should be considered bad. - int (*erase)(const struct lfs_config *c, lfs_block_t block); - - // Sync the state of the underlying block device. Negative error codes - // are propogated to the user. - int (*sync)(const struct lfs_config *c); - - // Minimum size of a block read. All read operations will be a - // multiple of this value. - lfs_size_t read_size; - - // Minimum size of a block program. All program operations will be a - // multiple of this value. - lfs_size_t prog_size; - - // Size of an erasable block. This does not impact ram consumption and - // may be larger than the physical erase size. However, non-inlined files - // take up at minimum one block. Must be a multiple of the read - // and program sizes. - lfs_size_t block_size; - - // Number of erasable blocks on the device. - lfs_size_t block_count; - - // Number of erase cycles before littlefs evicts metadata logs and moves - // the metadata to another block. Suggested values are in the - // range 100-1000, with large values having better performance at the cost - // of less consistent wear distribution. - // - // Set to -1 to disable block-level wear-leveling. - int32_t block_cycles; - - // Size of block caches. Each cache buffers a portion of a block in RAM. - // The littlefs needs a read cache, a program cache, and one additional - // cache per file. Larger caches can improve performance by storing more - // data and reducing the number of disk accesses. Must be a multiple of - // the read and program sizes, and a factor of the block size. - lfs_size_t cache_size; - - // Size of the lookahead buffer in bytes. A larger lookahead buffer - // increases the number of blocks found during an allocation pass. The - // lookahead buffer is stored as a compact bitmap, so each byte of RAM - // can track 8 blocks. Must be a multiple of 8. - lfs_size_t lookahead_size; - - // Optional statically allocated read buffer. Must be cache_size. - // By default lfs_malloc is used to allocate this buffer. - void *read_buffer; - - // Optional statically allocated program buffer. Must be cache_size. - // By default lfs_malloc is used to allocate this buffer. - void *prog_buffer; - - // Optional statically allocated lookahead buffer. Must be lookahead_size - // and aligned to a 32-bit boundary. By default lfs_malloc is used to - // allocate this buffer. - void *lookahead_buffer; - - // Optional upper limit on length of file names in bytes. No downside for - // larger names except the size of the info struct which is controlled by - // the LFS_NAME_MAX define. Defaults to LFS_NAME_MAX when zero. Stored in - // superblock and must be respected by other littlefs drivers. - lfs_size_t name_max; - - // Optional upper limit on files in bytes. No downside for larger files - // but must be <= LFS_FILE_MAX. Defaults to LFS_FILE_MAX when zero. Stored - // in superblock and must be respected by other littlefs drivers. - lfs_size_t file_max; - - // Optional upper limit on custom attributes in bytes. No downside for - // larger attributes size but must be <= LFS_ATTR_MAX. Defaults to - // LFS_ATTR_MAX when zero. - lfs_size_t attr_max; -}; - -// File info structure -struct lfs_info { - // Type of the file, either LFS_TYPE_REG or LFS_TYPE_DIR - uint8_t type; - - // Size of the file, only valid for REG files. Limited to 32-bits. - lfs_size_t size; - - // Name of the file stored as a null-terminated string. Limited to - // LFS_NAME_MAX+1, which can be changed by redefining LFS_NAME_MAX to - // reduce RAM. LFS_NAME_MAX is stored in superblock and must be - // respected by other littlefs drivers. - char name[LFS_NAME_MAX+1]; -}; - -// Custom attribute structure, used to describe custom attributes -// committed atomically during file writes. -struct lfs_attr { - // 8-bit type of attribute, provided by user and used to - // identify the attribute - uint8_t type; - - // Pointer to buffer containing the attribute - void *buffer; - - // Size of attribute in bytes, limited to LFS_ATTR_MAX - lfs_size_t size; -}; - -// Optional configuration provided during lfs_file_opencfg -struct lfs_file_config { - // Optional statically allocated file buffer. Must be cache_size. - // By default lfs_malloc is used to allocate this buffer. - void *buffer; - - // Optional list of custom attributes related to the file. If the file - // is opened with read access, these attributes will be read from disk - // during the open call. If the file is opened with write access, the - // attributes will be written to disk every file sync or close. This - // write occurs atomically with update to the file's contents. - // - // Custom attributes are uniquely identified by an 8-bit type and limited - // to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller - // than the buffer, it will be padded with zeros. If the stored attribute - // is larger, then it will be silently truncated. If the attribute is not - // found, it will be created implicitly. - struct lfs_attr *attrs; - - // Number of custom attributes in the list - lfs_size_t attr_count; -}; - - -/// internal littlefs data structures /// -typedef struct lfs_cache { - lfs_block_t block; - lfs_off_t off; - lfs_size_t size; - uint8_t *buffer; -} lfs_cache_t; - -typedef struct lfs_mdir { - lfs_block_t pair[2]; - uint32_t rev; - lfs_off_t off; - uint32_t etag; - uint16_t count; - bool erased; - bool split; - lfs_block_t tail[2]; -} lfs_mdir_t; - -// littlefs directory type -typedef struct lfs_dir { - struct lfs_dir *next; - uint16_t id; - uint8_t type; - lfs_mdir_t m; - - lfs_off_t pos; - lfs_block_t head[2]; -} lfs_dir_t; - -// littlefs file type -typedef struct lfs_file { - struct lfs_file *next; - uint16_t id; - uint8_t type; - lfs_mdir_t m; - - struct lfs_ctz { - lfs_block_t head; - lfs_size_t size; - } ctz; - - uint32_t flags; - lfs_off_t pos; - lfs_block_t block; - lfs_off_t off; - lfs_cache_t cache; - - const struct lfs_file_config *cfg; -} lfs_file_t; - -typedef struct lfs_superblock { - uint32_t version; - lfs_size_t block_size; - lfs_size_t block_count; - lfs_size_t name_max; - lfs_size_t file_max; - lfs_size_t attr_max; -} lfs_superblock_t; - -typedef struct lfs_gstate { - uint32_t tag; - lfs_block_t pair[2]; -} lfs_gstate_t; - -// The littlefs filesystem type -typedef struct lfs { - lfs_cache_t rcache; - lfs_cache_t pcache; - - lfs_block_t root[2]; - struct lfs_mlist { - struct lfs_mlist *next; - uint16_t id; - uint8_t type; - lfs_mdir_t m; - } *mlist; - uint32_t seed; - - lfs_gstate_t gstate; - lfs_gstate_t gdisk; - lfs_gstate_t gdelta; - - struct lfs_free { - lfs_block_t off; - lfs_block_t size; - lfs_block_t i; - lfs_block_t ack; - uint32_t *buffer; - } free; - - const struct lfs_config *cfg; - lfs_size_t name_max; - lfs_size_t file_max; - lfs_size_t attr_max; - -#ifdef LFS_MIGRATE - struct lfs1 *lfs1; -#endif -} lfs_t; - - -/// Filesystem functions /// - -// Format a block device with the littlefs -// -// Requires a littlefs object and config struct. This clobbers the littlefs -// object, and does not leave the filesystem mounted. The config struct must -// be zeroed for defaults and backwards compatibility. -// -// Returns a negative error code on failure. -int lfs_format(lfs_t *lfs, const struct lfs_config *config); - -// Mounts a littlefs -// -// Requires a littlefs object and config struct. Multiple filesystems -// may be mounted simultaneously with multiple littlefs objects. Both -// lfs and config must be allocated while mounted. The config struct must -// be zeroed for defaults and backwards compatibility. -// -// Returns a negative error code on failure. -int lfs_mount(lfs_t *lfs, const struct lfs_config *config); - -// Unmounts a littlefs -// -// Does nothing besides releasing any allocated resources. -// Returns a negative error code on failure. -int lfs_unmount(lfs_t *lfs); - -/// General operations /// - -// Removes a file or directory -// -// If removing a directory, the directory must be empty. -// Returns a negative error code on failure. -int lfs_remove(lfs_t *lfs, const char *path); - -// Rename or move a file or directory -// -// If the destination exists, it must match the source in type. -// If the destination is a directory, the directory must be empty. -// -// Returns a negative error code on failure. -int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath); - -// Find info about a file or directory -// -// Fills out the info structure, based on the specified file or directory. -// Returns a negative error code on failure. -int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info); - -// Get a custom attribute -// -// Custom attributes are uniquely identified by an 8-bit type and limited -// to LFS_ATTR_MAX bytes. When read, if the stored attribute is smaller than -// the buffer, it will be padded with zeros. If the stored attribute is larger, -// then it will be silently truncated. If no attribute is found, the error -// LFS_ERR_NOATTR is returned and the buffer is filled with zeros. -// -// Returns the size of the attribute, or a negative error code on failure. -// Note, the returned size is the size of the attribute on disk, irrespective -// of the size of the buffer. This can be used to dynamically allocate a buffer -// or check for existance. -lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path, - uint8_t type, void *buffer, lfs_size_t size); - -// Set custom attributes -// -// Custom attributes are uniquely identified by an 8-bit type and limited -// to LFS_ATTR_MAX bytes. If an attribute is not found, it will be -// implicitly created. -// -// Returns a negative error code on failure. -int lfs_setattr(lfs_t *lfs, const char *path, - uint8_t type, const void *buffer, lfs_size_t size); - -// Removes a custom attribute -// -// If an attribute is not found, nothing happens. -// -// Returns a negative error code on failure. -int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type); - - -/// File operations /// - -// Open a file -// -// The mode that the file is opened in is determined by the flags, which -// are values from the enum lfs_open_flags that are bitwise-ored together. -// -// Returns a negative error code on failure. -int lfs_file_open(lfs_t *lfs, lfs_file_t *file, - const char *path, int flags); - -// Open a file with extra configuration -// -// The mode that the file is opened in is determined by the flags, which -// are values from the enum lfs_open_flags that are bitwise-ored together. -// -// The config struct provides additional config options per file as described -// above. The config struct must be allocated while the file is open, and the -// config struct must be zeroed for defaults and backwards compatibility. -// -// Returns a negative error code on failure. -int lfs_file_opencfg(lfs_t *lfs, lfs_file_t *file, - const char *path, int flags, - const struct lfs_file_config *config); - -// Close a file -// -// Any pending writes are written out to storage as though -// sync had been called and releases any allocated resources. -// -// Returns a negative error code on failure. -int lfs_file_close(lfs_t *lfs, lfs_file_t *file); - -// Synchronize a file on storage -// -// Any pending writes are written out to storage. -// Returns a negative error code on failure. -int lfs_file_sync(lfs_t *lfs, lfs_file_t *file); - -// Read data from file -// -// Takes a buffer and size indicating where to store the read data. -// Returns the number of bytes read, or a negative error code on failure. -lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file, - void *buffer, lfs_size_t size); - -// Write data to file -// -// Takes a buffer and size indicating the data to write. The file will not -// actually be updated on the storage until either sync or close is called. -// -// Returns the number of bytes written, or a negative error code on failure. -lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file, - const void *buffer, lfs_size_t size); - -// Change the position of the file -// -// The change in position is determined by the offset and whence flag. -// Returns the new position of the file, or a negative error code on failure. -lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, - lfs_soff_t off, int whence); - -// Truncates the size of the file to the specified size -// -// Returns a negative error code on failure. -int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size); - -// Return the position of the file -// -// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_CUR) -// Returns the position of the file, or a negative error code on failure. -lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file); - -// Change the position of the file to the beginning of the file -// -// Equivalent to lfs_file_seek(lfs, file, 0, LFS_SEEK_SET) -// Returns a negative error code on failure. -int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file); - -// Return the size of the file -// -// Similar to lfs_file_seek(lfs, file, 0, LFS_SEEK_END) -// Returns the size of the file, or a negative error code on failure. -lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file); - - -/// Directory operations /// - -// Create a directory -// -// Returns a negative error code on failure. -int lfs_mkdir(lfs_t *lfs, const char *path); - -// Open a directory -// -// Once open a directory can be used with read to iterate over files. -// Returns a negative error code on failure. -int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path); - -// Close a directory -// -// Releases any allocated resources. -// Returns a negative error code on failure. -int lfs_dir_close(lfs_t *lfs, lfs_dir_t *dir); - -// Read an entry in the directory -// -// Fills out the info structure, based on the specified file or directory. -// Returns a positive value on success, 0 at the end of directory, -// or a negative error code on failure. -int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info); - -// Change the position of the directory -// -// The new off must be a value previous returned from tell and specifies -// an absolute offset in the directory seek. -// -// Returns a negative error code on failure. -int lfs_dir_seek(lfs_t *lfs, lfs_dir_t *dir, lfs_off_t off); - -// Return the position of the directory -// -// The returned offset is only meant to be consumed by seek and may not make -// sense, but does indicate the current position in the directory iteration. -// -// Returns the position of the directory, or a negative error code on failure. -lfs_soff_t lfs_dir_tell(lfs_t *lfs, lfs_dir_t *dir); - -// Change the position of the directory to the beginning of the directory -// -// Returns a negative error code on failure. -int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir); - - -/// Filesystem-level filesystem operations - -// Finds the current size of the filesystem -// -// Note: Result is best effort. If files share COW structures, the returned -// size may be larger than the filesystem actually is. -// -// Returns the number of allocated blocks, or a negative error code on failure. -lfs_ssize_t lfs_fs_size(lfs_t *lfs); - -// Traverse through all blocks in use by the filesystem -// -// The provided callback will be called with each block address that is -// currently in use by the filesystem. This can be used to determine which -// blocks are in use or how much of the storage is available. -// -// Returns a negative error code on failure. -int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data); - -#ifdef LFS_MIGRATE -// Attempts to migrate a previous version of littlefs -// -// Behaves similarly to the lfs_format function. Attempts to mount -// the previous version of littlefs and update the filesystem so it can be -// mounted with the current version of littlefs. -// -// Requires a littlefs object and config struct. This clobbers the littlefs -// object, and does not leave the filesystem mounted. The config struct must -// be zeroed for defaults and backwards compatibility. -// -// Returns a negative error code on failure. -int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg); -#endif - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/lib/libesp32/LITTLEFS/src/lfs_util.c b/lib/libesp32/LITTLEFS/src/lfs_util.c deleted file mode 100755 index 0b60e3b49..000000000 --- a/lib/libesp32/LITTLEFS/src/lfs_util.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * lfs util functions - * - * Copyright (c) 2017, Arm Limited. All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - */ -#include "lfs_util.h" - -// Only compile if user does not provide custom config -#ifndef LFS_CONFIG - - -// Software CRC implementation with small lookup table -uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size) { - static const uint32_t rtable[16] = { - 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, - 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, - 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, - 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c, - }; - - const uint8_t *data = buffer; - - for (size_t i = 0; i < size; i++) { - crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 0)) & 0xf]; - crc = (crc >> 4) ^ rtable[(crc ^ (data[i] >> 4)) & 0xf]; - } - - return crc; -} - - -#endif diff --git a/lib/libesp32/LITTLEFS/src/lfs_util.h b/lib/libesp32/LITTLEFS/src/lfs_util.h deleted file mode 100755 index dbb4c5ba8..000000000 --- a/lib/libesp32/LITTLEFS/src/lfs_util.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * lfs utility functions - * - * Copyright (c) 2017, Arm Limited. All rights reserved. - * SPDX-License-Identifier: BSD-3-Clause - */ -#ifndef LFS_UTIL_H -#define LFS_UTIL_H - -// Users can override lfs_util.h with their own configuration by defining -// LFS_CONFIG as a header file to include (-DLFS_CONFIG=lfs_config.h). -// -// If LFS_CONFIG is used, none of the default utils will be emitted and must be -// provided by the config file. To start, I would suggest copying lfs_util.h -// and modifying as needed. -#ifdef LFS_CONFIG -#define LFS_STRINGIZE(x) LFS_STRINGIZE2(x) -#define LFS_STRINGIZE2(x) #x -#include LFS_STRINGIZE(LFS_CONFIG) -#else - -// System includes -#include -#include -#include -#include - -#ifndef LFS_NO_MALLOC -#include -#endif -#ifndef LFS_NO_ASSERT -#include -#endif -#if !defined(LFS_NO_DEBUG) || \ - !defined(LFS_NO_WARN) || \ - !defined(LFS_NO_ERROR) || \ - defined(LFS_YES_TRACE) -#include -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - - -// Macros, may be replaced by system specific wrappers. Arguments to these -// macros must not have side-effects as the macros can be removed for a smaller -// code footprint - -// Logging functions -#ifdef LFS_YES_TRACE -#define LFS_TRACE_(fmt, ...) \ - printf("%s:%d:trace: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) -#define LFS_TRACE(...) LFS_TRACE_(__VA_ARGS__, "") -#else -#define LFS_TRACE(...) -#endif - -#ifndef LFS_NO_DEBUG -#define LFS_DEBUG_(fmt, ...) \ - printf("%s:%d:debug: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) -#define LFS_DEBUG(...) LFS_DEBUG_(__VA_ARGS__, "") -#else -#define LFS_DEBUG(...) -#endif - -#ifndef LFS_NO_WARN -#define LFS_WARN_(fmt, ...) \ - printf("%s:%d:warn: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) -#define LFS_WARN(...) LFS_WARN_(__VA_ARGS__, "") -#else -#define LFS_WARN(...) -#endif - -#ifndef LFS_NO_ERROR -#define LFS_ERROR_(fmt, ...) \ - printf("%s:%d:error: " fmt "%s\n", __FILE__, __LINE__, __VA_ARGS__) -#define LFS_ERROR(...) LFS_ERROR_(__VA_ARGS__, "") -#else -#define LFS_ERROR(...) -#endif - -// Runtime assertions -#ifndef LFS_NO_ASSERT -#define LFS_ASSERT(test) assert(test) -#else -#define LFS_ASSERT(test) -#endif - - -// Builtin functions, these may be replaced by more efficient -// toolchain-specific implementations. LFS_NO_INTRINSICS falls back to a more -// expensive basic C implementation for debugging purposes - -// Min/max functions for unsigned 32-bit numbers -static inline uint32_t lfs_max(uint32_t a, uint32_t b) { - return (a > b) ? a : b; -} - -static inline uint32_t lfs_min(uint32_t a, uint32_t b) { - return (a < b) ? a : b; -} - -// Align to nearest multiple of a size -static inline uint32_t lfs_aligndown(uint32_t a, uint32_t alignment) { - return a - (a % alignment); -} - -static inline uint32_t lfs_alignup(uint32_t a, uint32_t alignment) { - return lfs_aligndown(a + alignment-1, alignment); -} - -// Find the smallest power of 2 greater than or equal to a -static inline uint32_t lfs_npw2(uint32_t a) { -#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) - return 32 - __builtin_clz(a-1); -#else - uint32_t r = 0; - uint32_t s; - a -= 1; - s = (a > 0xffff) << 4; a >>= s; r |= s; - s = (a > 0xff ) << 3; a >>= s; r |= s; - s = (a > 0xf ) << 2; a >>= s; r |= s; - s = (a > 0x3 ) << 1; a >>= s; r |= s; - return (r | (a >> 1)) + 1; -#endif -} - -// Count the number of trailing binary zeros in a -// lfs_ctz(0) may be undefined -static inline uint32_t lfs_ctz(uint32_t a) { -#if !defined(LFS_NO_INTRINSICS) && defined(__GNUC__) - return __builtin_ctz(a); -#else - return lfs_npw2((a & -a) + 1) - 1; -#endif -} - -// Count the number of binary ones in a -static inline uint32_t lfs_popc(uint32_t a) { -#if !defined(LFS_NO_INTRINSICS) && (defined(__GNUC__) || defined(__CC_ARM)) - return __builtin_popcount(a); -#else - a = a - ((a >> 1) & 0x55555555); - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); - return (((a + (a >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24; -#endif -} - -// Find the sequence comparison of a and b, this is the distance -// between a and b ignoring overflow -static inline int lfs_scmp(uint32_t a, uint32_t b) { - return (int)(unsigned)(a - b); -} - -// Convert between 32-bit little-endian and native order -static inline uint32_t lfs_fromle32(uint32_t a) { -#if !defined(LFS_NO_INTRINSICS) && ( \ - (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ - (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ - (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) - return a; -#elif !defined(LFS_NO_INTRINSICS) && ( \ - (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ - (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ - (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) - return __builtin_bswap32(a); -#else - return (((uint8_t*)&a)[0] << 0) | - (((uint8_t*)&a)[1] << 8) | - (((uint8_t*)&a)[2] << 16) | - (((uint8_t*)&a)[3] << 24); -#endif -} - -static inline uint32_t lfs_tole32(uint32_t a) { - return lfs_fromle32(a); -} - -// Convert between 32-bit big-endian and native order -static inline uint32_t lfs_frombe32(uint32_t a) { -#if !defined(LFS_NO_INTRINSICS) && ( \ - (defined( BYTE_ORDER ) && defined( ORDER_LITTLE_ENDIAN ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ - (defined(__BYTE_ORDER ) && defined(__ORDER_LITTLE_ENDIAN ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ - (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) - return __builtin_bswap32(a); -#elif !defined(LFS_NO_INTRINSICS) && ( \ - (defined( BYTE_ORDER ) && defined( ORDER_BIG_ENDIAN ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ - (defined(__BYTE_ORDER ) && defined(__ORDER_BIG_ENDIAN ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ - (defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) - return a; -#else - return (((uint8_t*)&a)[0] << 24) | - (((uint8_t*)&a)[1] << 16) | - (((uint8_t*)&a)[2] << 8) | - (((uint8_t*)&a)[3] << 0); -#endif -} - -static inline uint32_t lfs_tobe32(uint32_t a) { - return lfs_frombe32(a); -} - -// Calculate CRC-32 with polynomial = 0x04c11db7 -uint32_t lfs_crc(uint32_t crc, const void *buffer, size_t size); - -// Allocate memory, only used if buffers are not provided to littlefs -// Note, memory must be 64-bit aligned -static inline void *lfs_malloc(size_t size) { -#ifndef LFS_NO_MALLOC - return malloc(size); -#else - (void)size; - return NULL; -#endif -} - -// Deallocate memory, only used if buffers are not provided to littlefs -static inline void lfs_free(void *p) { -#ifndef LFS_NO_MALLOC - free(p); -#else - (void)p; -#endif -} - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif -#endif diff --git a/lib/libesp32/LITTLEFS/src/littlefs_api.c b/lib/libesp32/LITTLEFS/src/littlefs_api.c deleted file mode 100755 index 4098487c6..000000000 --- a/lib/libesp32/LITTLEFS/src/littlefs_api.c +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file littlefs_api.c - * @brief Maps the HAL of esp_partition <-> littlefs - * @author Brian Pugh - */ - -#define ESP_LOCAL_LOG_LEVEL ESP_LOG_INFO - -#include "esp_log.h" -#include "esp_partition.h" -#include "esp_vfs.h" -#include "lfs.h" -#include "esp_littlefs.h" -#include "littlefs_api.h" - -static const char TAG[] = "esp_littlefs_api"; - -int littlefs_api_read(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, void *buffer, lfs_size_t size) { - esp_littlefs_t * efs = c->context; - size_t part_off = (block * c->block_size) + off; - esp_err_t err = esp_partition_read(efs->partition, part_off, buffer, size); - if (err) { - ESP_LOGE(TAG, "failed to read addr %08x, size %08x, err %d", part_off, size, err); - return LFS_ERR_IO; - } - return 0; -} - -int littlefs_api_prog(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, const void *buffer, lfs_size_t size) { - esp_littlefs_t * efs = c->context; - size_t part_off = (block * c->block_size) + off; - esp_err_t err = esp_partition_write(efs->partition, part_off, buffer, size); - if (err) { - ESP_LOGE(TAG, "failed to write addr %08x, size %08x, err %d", part_off, size, err); - return LFS_ERR_IO; - } - return 0; -} - -int littlefs_api_erase(const struct lfs_config *c, lfs_block_t block) { - esp_littlefs_t * efs = c->context; - size_t part_off = block * c->block_size; - esp_err_t err = esp_partition_erase_range(efs->partition, part_off, c->block_size); - if (err) { - ESP_LOGE(TAG, "failed to erase addr %08x, size %08x, err %d", part_off, c->block_size, err); - return LFS_ERR_IO; - } - return 0; - -} - -int littlefs_api_sync(const struct lfs_config *c) { - /* Unnecessary for esp-idf */ - return 0; -} - diff --git a/lib/libesp32/LITTLEFS/src/littlefs_api.h b/lib/libesp32/LITTLEFS/src/littlefs_api.h deleted file mode 100755 index c1b2adc9a..000000000 --- a/lib/libesp32/LITTLEFS/src/littlefs_api.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef ESP_LITTLEFS_API_H__ -#define ESP_LITTLEFS_API_H__ - -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include "esp_vfs.h" -#include "esp_partition.h" -#include "lfs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief a file descriptor - * That's also a singly linked list used for keeping tracks of all opened file descriptor - * - * Shortcomings/potential issues of 32-bit hash (when CONFIG_LITTLEFS_USE_ONLY_HASH) listed here: - * * unlink - If a different file is open that generates a hash collision, it will report an - * error that it cannot unlink an open file. - * * rename - If a different file is open that generates a hash collision with - * src or dst, it will report an error that it cannot rename an open file. - * Potential consequences: - * 1. A file cannot be deleted while a collision-geneating file is open. - * Worst-case, if the other file is always open during the lifecycle - * of your app, it's collision file cannot be deleted, which in the - * worst-case could cause storage-capacity issues. - * 2. Same as (1), but for renames - */ -typedef struct _vfs_littlefs_file_t { - lfs_file_t file; - uint32_t hash; - struct _vfs_littlefs_file_t * next; /*!< Pointer to next file in Singly Linked List */ -#ifndef CONFIG_LITTLEFS_USE_ONLY_HASH - char * path; -#endif -} vfs_littlefs_file_t; - -/** - * @brief littlefs definition structure - */ -typedef struct { - lfs_t *fs; /*!< Handle to the underlying littlefs */ - SemaphoreHandle_t lock; /*!< FS lock */ - const esp_partition_t* partition; /*!< The partition on which littlefs is located */ - char base_path[ESP_VFS_PATH_MAX+1]; /*!< Mount point */ - - struct lfs_config cfg; /*!< littlefs Mount configuration */ - - vfs_littlefs_file_t *file; /*!< Singly Linked List of files */ - - vfs_littlefs_file_t **cache; /*!< A cache of pointers to the opened files */ - uint16_t cache_size; /*!< The cache allocated size (in pointers) */ - uint16_t fd_count; /*!< The count of opened file descriptor used to speed up computation */ -} esp_littlefs_t; - -/** - * @brief Read a region in a block. - * - * Negative error codes are propogated to the user. - * - * @return errorcode. 0 on success. - */ -int littlefs_api_read(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, void *buffer, lfs_size_t size); - -/** - * @brief Program a region in a block. - * - * The block must have previously been erased. - * Negative error codes are propogated to the user. - * May return LFS_ERR_CORRUPT if the block should be considered bad. - * - * @return errorcode. 0 on success. - */ -int littlefs_api_prog(const struct lfs_config *c, lfs_block_t block, - lfs_off_t off, const void *buffer, lfs_size_t size); - -/** - * @brief Erase a block. - * - * A block must be erased before being programmed. - * The state of an erased block is undefined. - * Negative error codes are propogated to the user. - * May return LFS_ERR_CORRUPT if the block should be considered bad. - * @return errorcode. 0 on success. - */ -int littlefs_api_erase(const struct lfs_config *c, lfs_block_t block); - -/** - * @brief Sync the state of the underlying block device. - * - * Negative error codes are propogated to the user. - * - * @return errorcode. 0 on success. - */ -int littlefs_api_sync(const struct lfs_config *c); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp index ec27c90c5..8e4656ea1 100755 --- a/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp +++ b/lib/libesp32_div/ESP32-HomeKit/src/hap_platform_keystore.cpp @@ -47,7 +47,7 @@ const char * hap_platform_keystore_get_factory_nvs_partition_name() { #ifdef HAP_USE_LITTLEFS -#include +#include extern FS *ffsp; diff --git a/lib/libesp32_div/NimBLE-Arduino/CHANGELOG.md b/lib/libesp32_div/NimBLE-Arduino/CHANGELOG.md index a76ef59a6..69bb956d7 100644 --- a/lib/libesp32_div/NimBLE-Arduino/CHANGELOG.md +++ b/lib/libesp32_div/NimBLE-Arduino/CHANGELOG.md @@ -2,6 +2,52 @@ All notable changes to this project will be documented in this file. +## [1.3.1] - 2021-08-04 + +### Fixed +- Corrected a compiler/linker error when an application or a library uses bluetooth classic due to the redefinition of `btInUse`. + +## [1.3.0] - 2021-08-02 + +### Added +- `NimBLECharacteristic::removeDescriptor`: Dynamically remove a descriptor from a characterisic. Takes effect after all connections are closed and sends a service changed indication. +- `NimBLEService::removeCharacteristic`: Dynamically remove a characteristic from a service. Takes effect after all connections are closed and sends a service changed indication +- `NimBLEServerCallbacks::onMTUChange`: This is callback is called when the MTU is updated after connection with a client. +- ESP32C3 support + +- Whitelist API: + - `NimBLEDevice::whiteListAdd`: Add a device to the whitelist. + - `NimBLEDevice::whiteListRemove`: Remove a device from the whitelist. + - `NimBLEDevice::onWhiteList`: Check if the device is on the whitelist. + - `NimBLEDevice::getWhiteListCount`: Gets the size of the whitelist + - `NimBLEDevice::getWhiteListAddress`: Get the address of a device on the whitelist by index value. + +- Bond management API: + - `NimBLEDevice::getNumBonds`: Gets the number of bonds stored. + - `NimBLEDevice::isBonded`: Checks if the device is bonded. + - `NimBLEDevice::deleteAllBonds`: Deletes all bonds. + - `NimBLEDevice::getBondedAddress`: Gets the address of a bonded device by the index value. + +- `NimBLECharacteristic::getCallbacks` to retrieve the current callback handler. +- Connection Information class: `NimBLEConnInfo`. +- `NimBLEScan::clearDuplicateCache`: This can be used to reset the cache of advertised devices so they will be immediately discovered again. + +### Changed +- FreeRTOS files have been removed as they are not used by the library. +- Services, characteristics and descriptors can now be created statically and added after. +- Excess logging and some asserts removed. +- Use ESP_LOGx macros to enable using local log level filtering. + +### Fixed +- `NimBLECharacteristicCallbacks::onSubscribe` Is now called after the connection is added to the vector. +- Corrected bonding failure when reinitializing the BLE stack. +- Writing to a characterisic with a std::string value now correctly writes values with null characters. +- Retrieving remote descriptors now uses the characterisic end handle correctly. +- Missing data in long writes to remote descriptors. +- Hanging on task notification when sending an indication from the characteristic callback. +- BLE controller memory could be released when using Arduino as a component. +- Complile errors with NimBLE release 1.3.0. + ## [1.2.0] - 2021-02-08 ### Added diff --git a/lib/libesp32_div/NimBLE-Arduino/README.md b/lib/libesp32_div/NimBLE-Arduino/README.md index 08e2a69c0..fd480fd83 100644 --- a/lib/libesp32_div/NimBLE-Arduino/README.md +++ b/lib/libesp32_div/NimBLE-Arduino/README.md @@ -72,9 +72,9 @@ such as increasing max connections, default is 3, absolute maximum connections i
    # Development Status -This Library is tracking the esp-nimble repo, nimble-1.2.0-idf master branch, currently [@f4ae049.](https://github.com/espressif/esp-nimble) +This Library is tracking the esp-nimble repo, nimble-1.3.0-idf master branch, currently [@5bb7b40.](https://github.com/espressif/esp-nimble) -Also tracking the NimBLE related changes in ESP-IDF, master branch, currently [@3caa969.](https://github.com/espressif/esp-idf/tree/master/components/bt/host/nimble) +Also tracking the NimBLE related changes in ESP-IDF, master branch, currently [@639e7ad.](https://github.com/espressif/esp-idf/tree/master/components/bt/host/nimble)
    # Acknowledgments @@ -82,10 +82,4 @@ Also tracking the NimBLE related changes in ESP-IDF, master branch, currently [@ * [beegee-tokyo](https://github.com/beegee-tokyo) for contributing your time to test/debug and contributing the beacon examples. * [Jeroen88](https://github.com/Jeroen88) for the amazing help debugging and improving the client code.
    - -# Todo -- Improve host reset handler -- Implement random address handling -- Implement bond management -- Add Bluetooth Mesh -
    + diff --git a/lib/libesp32_div/NimBLE-Arduino/docs/Migration_guide.md b/lib/libesp32_div/NimBLE-Arduino/docs/Migration_guide.md index 59854e5fd..62406c622 100644 --- a/lib/libesp32_div/NimBLE-Arduino/docs/Migration_guide.md +++ b/lib/libesp32_div/NimBLE-Arduino/docs/Migration_guide.md @@ -69,8 +69,6 @@ For example `BLEServer::createService(SERVICE_UUID)` will work just as it did be ### Characteristics -The constructor for `(Nim)BLECharacteristic` is now private, so if you currently subclass it to add logic you should switch to use `NimBLEService::createCharacteristic` instead. Any custom processing logic previously in a `BLECharacteristic` subclass should be moved to a `NimBLECharacteristicCallbacks` subclass instead, and passed into `NimBLECharacteristic::setCallbacks`. - `BLEService::createCharacteristic` (`NimBLEService::createCharacteristic`) is used the same way as originally except the properties parameter has changed. When creating a characteristic the properties are now set with `NIMBLE_PROPERTY::XXXX` instead of `BLECharacteristic::XXXX`. diff --git a/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Scan_Whitelist/NimBLE_Scan_whitelist.ino b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Scan_Whitelist/NimBLE_Scan_whitelist.ino new file mode 100644 index 000000000..cddbcc91b --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Scan_Whitelist/NimBLE_Scan_whitelist.ino @@ -0,0 +1,67 @@ +/* + * NimBLE_Scan_Whitelist demo + * + * Created May 16, 2021 + * Author: h2zero + */ + +#include + +int scanTime = 5; //In seconds +NimBLEScan* pBLEScan; + +class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { + void onResult(BLEAdvertisedDevice* advertisedDevice) { + Serial.printf("Advertised Device: %s \n", advertisedDevice->toString().c_str()); + /* + * Here we add the device scanned to the whitelist based on service data but any + * advertised data can be used for your preffered data. + */ + if (advertisedDevice->haveServiceData()) { + /* If this is a device with data we want to capture, add it to the whitelist */ + if (advertisedDevice->getServiceData(NimBLEUUID("AABB")) != "") { + Serial.printf("Adding %s to whitelist\n", std::string(advertisedDevice->getAddress()).c_str()); + NimBLEDevice::whiteListAdd(advertisedDevice->getAddress()); + } + } + } +}; + +void setup() { + Serial.begin(115200); + Serial.println("Scanning..."); + + NimBLEDevice::init(""); + pBLEScan = NimBLEDevice::getScan(); + pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); + pBLEScan->setActiveScan(true); + pBLEScan->setInterval(100); + pBLEScan->setFilterPolicy(BLE_HCI_SCAN_FILT_NO_WL); + pBLEScan->setWindow(99); +} + +void loop() { + NimBLEScanResults foundDevices = pBLEScan->start(scanTime, false); + Serial.print("Devices found: "); + Serial.println(foundDevices.getCount()); + Serial.println("Scan done!"); + + Serial.println("Whitelist contains:"); + for (auto i=0; i 0) { + if (foundDevices.getCount() == 0) { + pBLEScan->setFilterPolicy(BLE_HCI_SCAN_FILT_NO_WL); + } else { + pBLEScan->setFilterPolicy(BLE_HCI_SCAN_FILT_USE_WL); + } + } + pBLEScan->clearResults(); + delay(2000); +} diff --git a/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server/NimBLE_Server.ino b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server/NimBLE_Server.ino index f66169ce8..409ec64d6 100644 --- a/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server/NimBLE_Server.ino +++ b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server/NimBLE_Server.ino @@ -39,6 +39,9 @@ class ServerCallbacks: public NimBLEServerCallbacks { Serial.println("Client disconnected - start advertising"); NimBLEDevice::startAdvertising(); }; + void onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc) { + Serial.printf("MTU updated: %u for connection ID: %u\n", MTU, desc->conn_handle); + }; /********************* Security handled here ********************** ****** Note: these are the same return values as defaults ********/ diff --git a/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server_Whitelist/NimBLE_Server_Whitelist.ino b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server_Whitelist/NimBLE_Server_Whitelist.ino new file mode 100644 index 000000000..4c7d33549 --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/examples/NimBLE_Server_Whitelist/NimBLE_Server_Whitelist.ino @@ -0,0 +1,105 @@ +/* + * NimBLE_Server_Whitelist demo + * + * Created May 17, 2021 + * Author: h2zero + */ + +#include + +NimBLECharacteristic* pCharacteristic = nullptr; +bool deviceConnected = false; +bool oldDeviceConnected = false; +uint32_t value = 0; + +// See the following for generating UUIDs: +// https://www.uuidgenerator.net/ + +#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" +#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" + + +class MyServerCallbacks: public NimBLEServerCallbacks { + void onConnect(NimBLEServer* pServer) { + deviceConnected = true; + }; + + void onDisconnect(NimBLEServer* pServer, ble_gap_conn_desc* desc) { + // Peer disconnected, add them to the whitelist + // This allows us to use the whitelist to filter connection attempts + // which will minimize reconnection time. + NimBLEDevice::whiteListAdd(NimBLEAddress(desc->peer_ota_addr)); + deviceConnected = false; + } +}; + +void onAdvComplete(NimBLEAdvertising *pAdvertising) { + Serial.println("Advertising stopped"); + if (deviceConnected) { + return; + } + // If advertising timed out without connection start advertising without whitelist filter + pAdvertising->setScanFilter(false,false); + pAdvertising->start(); +} + + +void setup() { + Serial.begin(115200); + + // Create the BLE Device + NimBLEDevice::init("ESP32"); + + // Create the BLE Server + NimBLEServer* pServer = NimBLEDevice::createServer(); + pServer->setCallbacks(new MyServerCallbacks()); + pServer->advertiseOnDisconnect(false); + + // Create the BLE Service + NimBLEService *pService = pServer->createService(SERVICE_UUID); + + // Create a BLE Characteristic + pCharacteristic = pService->createCharacteristic( + CHARACTERISTIC_UUID, + NIMBLE_PROPERTY::READ | + NIMBLE_PROPERTY::WRITE | + NIMBLE_PROPERTY::NOTIFY ); + + // Start the service + pService->start(); + + // Start advertising + NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising(); + pAdvertising->addServiceUUID(SERVICE_UUID); + pAdvertising->setScanResponse(false); + pAdvertising->start(); + Serial.println("Waiting a client connection to notify..."); +} + +void loop() { + // notify changed value + if (deviceConnected) { + pCharacteristic->setValue((uint8_t*)&value, 4); + pCharacteristic->notify(); + value++; + } + // disconnecting + if (!deviceConnected && oldDeviceConnected) { + NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising(); + if (NimBLEDevice::getWhiteListCount() > 0) { + // Allow anyone to scan but only whitelisted can connect. + pAdvertising->setScanFilter(false,true); + } + // advertise with whitelist for 30 seconds + pAdvertising->start(30, onAdvComplete); + Serial.println("start advertising"); + oldDeviceConnected = deviceConnected; + } + // connecting + if (deviceConnected && !oldDeviceConnected) { + // do stuff here on connecting + oldDeviceConnected = deviceConnected; + } + + delay(2000); +} diff --git a/lib/libesp32_div/NimBLE-Arduino/library.json b/lib/libesp32_div/NimBLE-Arduino/library.json index a56985a06..29cff4dff 100644 --- a/lib/libesp32_div/NimBLE-Arduino/library.json +++ b/lib/libesp32_div/NimBLE-Arduino/library.json @@ -2,7 +2,7 @@ "name": "NimBLE-Arduino", "keywords": "esp32, bluetooth", "description": "Bluetooth low energy (BLE) library for arduino-esp32 based on NimBLE", - "version": "1.2.0", + "version": "1.3.1", "frameworks": "arduino", "platforms": "espressif32" } diff --git a/lib/libesp32_div/NimBLE-Arduino/library.properties b/lib/libesp32_div/NimBLE-Arduino/library.properties index 4435958d1..b08519454 100644 --- a/lib/libesp32_div/NimBLE-Arduino/library.properties +++ b/lib/libesp32_div/NimBLE-Arduino/library.properties @@ -1,5 +1,5 @@ name=NimBLE-Arduino -version=1.2.0 +version=1.3.1 author=h2zero maintainer=h2zero sentence=Bluetooth low energy (BLE) library for arduino-esp32 based on NimBLE. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.cpp b/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.cpp deleted file mode 100644 index 1c398cbf3..000000000 --- a/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.cpp +++ /dev/null @@ -1,316 +0,0 @@ -/* - * FreeRTOS.cpp - * - * Created on: Feb 24, 2017 - * Author: kolban - */ -#include "sdkconfig.h" -#include "FreeRTOS.h" -#include "NimBLELog.h" - -#include // Include the base FreeRTOS definitions -#include // Include the task definitions -#include // Include the semaphore definitions -#include - -static const char* LOG_TAG = "FreeRTOS"; - - -/** - * Sleep for the specified number of milliseconds. - * @param[in] ms The period in milliseconds for which to sleep. - */ -void FreeRTOS::sleep(uint32_t ms) { - ::vTaskDelay(ms / portTICK_PERIOD_MS); -} // sleep - - -/** - * Start a new task. - * @param[in] task The function pointer to the function to be run in the task. - * @param[in] taskName A string identifier for the task. - * @param[in] param An optional parameter to be passed to the started task. - * @param[in] stackSize An optional paremeter supplying the size of the stack in which to run the task. - */ -void FreeRTOS::startTask(void task(void*), std::string taskName, void* param, uint32_t stackSize) { - ::xTaskCreate(task, taskName.data(), stackSize, param, 5, NULL); -} // startTask - - -/** - * Delete the task. - * @param[in] pTask An optional handle to the task to be deleted. If not supplied the calling task will be deleted. - */ -void FreeRTOS::deleteTask(TaskHandle_t pTask) { - ::vTaskDelete(pTask); -} // deleteTask - - -/** - * Get the time in milliseconds since the %FreeRTOS scheduler started. - * @return The time in milliseconds since the %FreeRTOS scheduler started. - */ -uint32_t FreeRTOS::getTimeSinceStart() { - return (uint32_t) (xTaskGetTickCount() * portTICK_PERIOD_MS); -} // getTimeSinceStart - - -/** - * @brief Wait for a semaphore to be released by trying to take it and - * then releasing it again. - * @param [in] owner A debug tag. - * @return The value associated with the semaphore. - */ -uint32_t FreeRTOS::Semaphore::wait(std::string owner) { - NIMBLE_LOGD(LOG_TAG, ">> wait: Semaphore waiting: %s for %s", toString().c_str(), owner.c_str()); - - if (m_usePthreads) { - pthread_mutex_lock(&m_pthread_mutex); - } else { - xSemaphoreTake(m_semaphore, portMAX_DELAY); - } - - if (m_usePthreads) { - pthread_mutex_unlock(&m_pthread_mutex); - } else { - xSemaphoreGive(m_semaphore); - } - - NIMBLE_LOGD(LOG_TAG, "<< wait: Semaphore released: %s", toString().c_str()); - return m_value; -} // wait - - -/** - * @brief Wait for a semaphore to be released in a given period of time by trying to take it and - * then releasing it again. The value associated with the semaphore can be taken by value() call after return - * @param [in] owner A debug tag. - * @param [in] timeoutMs timeout to wait in ms. - * @return True if we took the semaphore within timeframe. - */ -bool FreeRTOS::Semaphore::timedWait(std::string owner, uint32_t timeoutMs) { - NIMBLE_LOGD(LOG_TAG, ">> wait: Semaphore waiting: %s for %s", toString().c_str(), owner.c_str()); - - if (m_usePthreads && timeoutMs != portMAX_DELAY) { - assert(false); // We apparently don't have a timed wait for pthreads. - } - - auto ret = pdTRUE; - - if (m_usePthreads) { - pthread_mutex_lock(&m_pthread_mutex); - } else { - ret = xSemaphoreTake(m_semaphore, timeoutMs); - } - - if (m_usePthreads) { - pthread_mutex_unlock(&m_pthread_mutex); - } else { - xSemaphoreGive(m_semaphore); - } - - NIMBLE_LOGD(LOG_TAG, "<< wait: Semaphore %s released: %d", toString().c_str(), ret); - return ret; -} // wait - - -/** - * @brief Construct a semaphore, the semaphore is given when created. - * @param [in] name A name string to provide debugging support. - */ -FreeRTOS::Semaphore::Semaphore(std::string name) { - m_usePthreads = false; // Are we using pThreads or FreeRTOS? - if (m_usePthreads) { - pthread_mutex_init(&m_pthread_mutex, nullptr); - } else { - //m_semaphore = xSemaphoreCreateMutex(); - m_semaphore = xSemaphoreCreateBinary(); - xSemaphoreGive(m_semaphore); - } - - m_name = name; - m_owner = std::string(""); - m_value = 0; -} - - -FreeRTOS::Semaphore::~Semaphore() { - if (m_usePthreads) { - pthread_mutex_destroy(&m_pthread_mutex); - } else { - vSemaphoreDelete(m_semaphore); - } -} - - -/** - * @brief Give the semaphore. - */ -void FreeRTOS::Semaphore::give() { - NIMBLE_LOGD(LOG_TAG, "Semaphore giving: %s", toString().c_str()); - m_owner = std::string(""); - - if (m_usePthreads) { - pthread_mutex_unlock(&m_pthread_mutex); - } else { - xSemaphoreGive(m_semaphore); - } -// #ifdef ARDUINO_ARCH_ESP32 -// FreeRTOS::sleep(10); -// #endif - -} // Semaphore::give - - -/** - * @brief Give a semaphore. - * The Semaphore is given with an associated value. - * @param [in] value The value to associate with the semaphore. - */ -void FreeRTOS::Semaphore::give(uint32_t value) { - m_value = value; - give(); -} // give - - -/** - * @brief Give a semaphore from an ISR. - */ -void FreeRTOS::Semaphore::giveFromISR() { - BaseType_t higherPriorityTaskWoken; - if (m_usePthreads) { - assert(false); - } else { - xSemaphoreGiveFromISR(m_semaphore, &higherPriorityTaskWoken); - } -} // giveFromISR - - -/** - * @brief Take a semaphore. - * Take a semaphore and wait indefinitely. - * @param [in] owner The new owner (for debugging) - * @return True if we took the semaphore. - */ -bool FreeRTOS::Semaphore::take(std::string owner) { - NIMBLE_LOGD(LOG_TAG, "Semaphore taking: %s for %s", toString().c_str(), owner.c_str()); - bool rc = false; - if (m_usePthreads) { - pthread_mutex_lock(&m_pthread_mutex); - } else { - rc = ::xSemaphoreTake(m_semaphore, portMAX_DELAY) == pdTRUE; - } - m_owner = owner; - if (rc) { - NIMBLE_LOGD(LOG_TAG, "Semaphore taken: %s", toString().c_str()); - } else { - NIMBLE_LOGE(LOG_TAG, "Semaphore NOT taken: %s", toString().c_str()); - } - return rc; -} // Semaphore::take - - -/** - * @brief Take a semaphore. - * Take a semaphore but return if we haven't obtained it in the given period of milliseconds. - * @param [in] timeoutMs Timeout in milliseconds. - * @param [in] owner The new owner (for debugging) - * @return True if we took the semaphore. - */ -bool FreeRTOS::Semaphore::take(uint32_t timeoutMs, std::string owner) { - NIMBLE_LOGD(LOG_TAG, "Semaphore taking: %s for %s", toString().c_str(), owner.c_str()); - bool rc = false; - if (m_usePthreads) { - assert(false); // We apparently don't have a timed wait for pthreads. - } else { - rc = ::xSemaphoreTake(m_semaphore, timeoutMs / portTICK_PERIOD_MS) == pdTRUE; - } - m_owner = owner; - if (rc) { - NIMBLE_LOGD(LOG_TAG, "Semaphore taken: %s", toString().c_str()); - } else { - NIMBLE_LOGE(LOG_TAG, "Semaphore NOT taken: %s", toString().c_str()); - } - return rc; -} // Semaphore::take - - - -/** - * @brief Create a string representation of the semaphore. - * @return A string representation of the semaphore. - */ -std::string FreeRTOS::Semaphore::toString() { - char hex[9]; - std::string res = "name: " + m_name + " (0x"; - snprintf(hex, sizeof(hex), "%08x", (uint32_t)m_semaphore); - res += hex; - res += "), owner: " + m_owner; - return res; -} // toString - - -/** - * @brief Set the name of the semaphore. - * @param [in] name The name of the semaphore. - */ -void FreeRTOS::Semaphore::setName(std::string name) { - m_name = name; -} // setName - - -/** - * @brief Create a ring buffer. - * @param [in] length The amount of storage to allocate for the ring buffer. - * @param [in] type The type of buffer. One of RINGBUF_TYPE_NOSPLIT, RINGBUF_TYPE_ALLOWSPLIT, RINGBUF_TYPE_BYTEBUF. - */ -#ifdef ESP_IDF_VERSION //Quick hack to detect if using IDF version that replaced ringbuf_type_t -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0) - Ringbuffer::Ringbuffer(size_t length, RingbufferType_t type) { -#else - Ringbuffer::Ringbuffer(size_t length, ringbuf_type_t type) { -#endif -#else - Ringbuffer::Ringbuffer(size_t length, ringbuf_type_t type) { -#endif - m_handle = ::xRingbufferCreate(length, type); -} // Ringbuffer - - -Ringbuffer::~Ringbuffer() { - ::vRingbufferDelete(m_handle); -} // ~Ringbuffer - - -/** - * @brief Receive data from the buffer. - * @param [out] size On return, the size of data returned. - * @param [in] wait How long to wait. - * @return A pointer to the storage retrieved. - */ -void* Ringbuffer::receive(size_t* size, TickType_t wait) { - return ::xRingbufferReceive(m_handle, size, wait); -} // receive - - -/** - * @brief Return an item. - * @param [in] item The item to be returned/released. - */ -void Ringbuffer::returnItem(void* item) { - ::vRingbufferReturnItem(m_handle, item); -} // returnItem - - -/** - * @brief Send data to the buffer. - * @param [in] data The data to place into the buffer. - * @param [in] length The length of data to place into the buffer. - * @param [in] wait How long to wait before giving up. The default is to wait indefinitely. - * @return - */ -bool Ringbuffer::send(void* data, size_t length, TickType_t wait) { - return ::xRingbufferSend(m_handle, data, length, wait) == pdTRUE; -} // send - - diff --git a/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.h b/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.h deleted file mode 100644 index fa33921fe..000000000 --- a/lib/libesp32_div/NimBLE-Arduino/src/FreeRTOS.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * FreeRTOS.h - * - * Created on: Feb 24, 2017 - * Author: kolban - */ - -#ifndef MAIN_FREERTOS_H_ -#define MAIN_FREERTOS_H_ - -#include // Include the base FreeRTOS definitions. -#include // Include the task definitions. -#include // Include the semaphore definitions. -#include // Include the ringbuffer definitions. - -#include -#include -#include - - -/** - * @brief Interface to %FreeRTOS functions. - */ -class FreeRTOS { -public: - static void sleep(uint32_t ms); - static void startTask(void task(void*), std::string taskName, void* param = nullptr, uint32_t stackSize = 2048); - static void deleteTask(TaskHandle_t pTask = nullptr); - - static uint32_t getTimeSinceStart(); - -/** - * @brief A binary semaphore class that operates like a mutex, it is already given when constructed. - */ - class Semaphore { - public: - Semaphore(std::string owner = ""); - ~Semaphore(); - void give(); - void give(uint32_t value); - void giveFromISR(); - void setName(std::string name); - bool take(std::string owner = ""); - bool take(uint32_t timeoutMs, std::string owner = ""); - std::string toString(); - bool timedWait(std::string owner = "", uint32_t timeoutMs = portMAX_DELAY); - uint32_t wait(std::string owner = ""); - /** - * @brief Get the value of the semaphore. - * @return The value stored if the semaphore was given with give(value); - */ - uint32_t value(){ return m_value; }; - - private: - SemaphoreHandle_t m_semaphore; - pthread_mutex_t m_pthread_mutex; - std::string m_name; - std::string m_owner; - uint32_t m_value; - bool m_usePthreads; - - }; -}; - - -/** - * @brief A wrapper class for a freeRTOS ringbuffer. - */ -class Ringbuffer { -public: -#ifdef ESP_IDF_VERSION //Quick hack to detect if using IDF version that replaced ringbuf_type_t -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0) - Ringbuffer(size_t length, RingbufferType_t type = RINGBUF_TYPE_NOSPLIT); -#else - Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT); -#endif -#else - Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT); -#endif - ~Ringbuffer(); - - void* receive(size_t* size, TickType_t wait = portMAX_DELAY); - void returnItem(void* item); - bool send(void* data, size_t length, TickType_t wait = portMAX_DELAY); -private: - RingbufHandle_t m_handle; -}; - -#endif /* MAIN_FREERTOS_H_ */ diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLE2904.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLE2904.h index 0a6d036a4..d8800dd2f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLE2904.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLE2904.h @@ -42,6 +42,7 @@ struct BLE2904_Data { */ class NimBLE2904: public NimBLEDescriptor { public: + NimBLE2904(NimBLECharacteristic* pCharacterisitic = nullptr); static const uint8_t FORMAT_BOOLEAN = 1; static const uint8_t FORMAT_UINT2 = 2; static const uint8_t FORMAT_UINT4 = 3; @@ -77,7 +78,6 @@ public: void setUnit(uint16_t unit); private: - NimBLE2904(NimBLECharacteristic* pCharacterisitic); friend class NimBLECharacteristic; BLE2904_Data m_data; }; // BLE2904 diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.cpp index c697fe752..ecfd49814 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.cpp @@ -734,7 +734,7 @@ uint8_t* NimBLEAdvertisedDevice::getPayload() { * @param [in] length The length of the payload in bytes. * @param [in] append Indicates if the the data should be appended (scan response). */ -void NimBLEAdvertisedDevice::setPayload(uint8_t *payload, uint8_t length, bool append) { +void NimBLEAdvertisedDevice::setPayload(const uint8_t *payload, uint8_t length, bool append) { if(!append) { m_advLength = length; m_payload.assign(payload, payload + length); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.h index ef354bc41..7d378ed0f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertisedDevice.h @@ -137,7 +137,7 @@ private: void setAddress(NimBLEAddress address); void setAdvType(uint8_t advType); - void setPayload(uint8_t *payload, uint8_t length, bool append); + void setPayload(const uint8_t *payload, uint8_t length, bool append); void setRSSI(int rssi); uint8_t findAdvField(uint8_t type, uint8_t index = 0, uint8_t *data_loc = nullptr); uint8_t findServiceData(uint8_t index, uint8_t* bytes); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertising.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertising.cpp index 3e9ae4a64..3112efff0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertising.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEAdvertising.cpp @@ -383,6 +383,7 @@ void NimBLEAdvertising::setScanResponseData(NimBLEAdvertisementData& advertiseme * @brief Start advertising. * @param [in] duration The duration, in seconds, to advertise, 0 == advertise forever. * @param [in] advCompleteCB A pointer to a callback to be invoked when advertising ends. + * @return True if advertising started successfully. */ bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdvertising *pAdv)) { NIMBLE_LOGD(LOG_TAG, ">> Advertising start: customAdvData: %d, customScanResponseData: %d", @@ -471,16 +472,14 @@ bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdv } payloadLen += add; - if(nullptr == (m_advData.uuids16 = (ble_uuid16_t*)realloc(m_advData.uuids16, + if(nullptr == (m_advData.uuids16 = (ble_uuid16_t*)realloc((void*)m_advData.uuids16, (m_advData.num_uuids16 + 1) * sizeof(ble_uuid16_t)))) { NIMBLE_LOGC(LOG_TAG, "Error, no mem"); abort(); } - memcpy(&m_advData.uuids16[m_advData.num_uuids16].value, - &it.getNative()->u16.value, 2); - - m_advData.uuids16[m_advData.num_uuids16].u.type = BLE_UUID_TYPE_16; + memcpy((void*)&m_advData.uuids16[m_advData.num_uuids16], + &it.getNative()->u16, sizeof(ble_uuid16_t)); m_advData.uuids16_is_complete = 1; m_advData.num_uuids16++; } @@ -492,16 +491,14 @@ bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdv } payloadLen += add; - if(nullptr == (m_advData.uuids32 = (ble_uuid32_t*)realloc(m_advData.uuids32, + if(nullptr == (m_advData.uuids32 = (ble_uuid32_t*)realloc((void*)m_advData.uuids32, (m_advData.num_uuids32 + 1) * sizeof(ble_uuid32_t)))) { NIMBLE_LOGC(LOG_TAG, "Error, no mem"); abort(); } - memcpy(&m_advData.uuids32[m_advData.num_uuids32].value, - &it.getNative()->u32.value, 4); - - m_advData.uuids32[m_advData.num_uuids32].u.type = BLE_UUID_TYPE_32; + memcpy((void*)&m_advData.uuids32[m_advData.num_uuids32], + &it.getNative()->u32, sizeof(ble_uuid32_t)); m_advData.uuids32_is_complete = 1; m_advData.num_uuids32++; } @@ -513,16 +510,14 @@ bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdv } payloadLen += add; - if(nullptr == (m_advData.uuids128 = (ble_uuid128_t*)realloc(m_advData.uuids128, + if(nullptr == (m_advData.uuids128 = (ble_uuid128_t*)realloc((void*)m_advData.uuids128, (m_advData.num_uuids128 + 1) * sizeof(ble_uuid128_t)))) { NIMBLE_LOGC(LOG_TAG, "Error, no mem"); abort(); } - memcpy(&m_advData.uuids128[m_advData.num_uuids128].value, - &it.getNative()->u128.value, 16); - - m_advData.uuids128[m_advData.num_uuids128].u.type = BLE_UUID_TYPE_128; + memcpy((void*)&m_advData.uuids128[m_advData.num_uuids128], + &it.getNative()->u128, sizeof(ble_uuid128_t)); m_advData.uuids128_is_complete = 1; m_advData.num_uuids128++; } @@ -599,19 +594,19 @@ bool NimBLEAdvertising::start(uint32_t duration, void (*advCompleteCB)(NimBLEAdv } if(m_advData.num_uuids128 > 0) { - free(m_advData.uuids128); + free((void*)m_advData.uuids128); m_advData.uuids128 = nullptr; m_advData.num_uuids128 = 0; } if(m_advData.num_uuids32 > 0) { - free(m_advData.uuids32); + free((void*)m_advData.uuids32); m_advData.uuids32 = nullptr; m_advData.num_uuids32 = 0; } if(m_advData.num_uuids16 > 0) { - free(m_advData.uuids16); + free((void*)m_advData.uuids16); m_advData.uuids16 = nullptr; m_advData.num_uuids16 = 0; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.cpp index 0ffa9fb03..f3965a4dc 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.cpp @@ -45,15 +45,15 @@ NimBLECharacteristic::NimBLECharacteristic(const char* uuid, uint16_t properties * @param [in] pService - pointer to the service instance this characteristic belongs to. */ NimBLECharacteristic::NimBLECharacteristic(const NimBLEUUID &uuid, uint16_t properties, NimBLEService* pService) { - m_uuid = uuid; - m_handle = NULL_HANDLE; - m_properties = properties; - m_pCallbacks = &defaultCallback; - m_pService = pService; - m_value = ""; - m_valMux = portMUX_INITIALIZER_UNLOCKED; - m_pTaskData = nullptr; - m_timestamp = 0; + m_uuid = uuid; + m_handle = NULL_HANDLE; + m_properties = properties; + m_pCallbacks = &defaultCallback; + m_pService = pService; + m_value = ""; + m_valMux = portMUX_INITIALIZER_UNLOCKED; + m_timestamp = 0; + m_removed = 0; } // NimBLECharacteristic /** @@ -95,9 +95,62 @@ NimBLEDescriptor* NimBLECharacteristic::createDescriptor(const NimBLEUUID &uuid, pDescriptor = new NimBLEDescriptor(uuid, properties, max_len, this); } - m_dscVec.push_back(pDescriptor); + addDescriptor(pDescriptor); return pDescriptor; -} // createCharacteristic +} // createDescriptor + + +/** + * @brief Add a descriptor to the characteristic. + * @param [in] pDescriptor A pointer to the descriptor to add. + */ +void NimBLECharacteristic::addDescriptor(NimBLEDescriptor *pDescriptor) { + bool foundRemoved = false; + + if(pDescriptor->m_removed > 0) { + for(auto& it : m_dscVec) { + if(it == pDescriptor) { + foundRemoved = true; + pDescriptor->m_removed = 0; + } + } + } + + if(!foundRemoved) { + m_dscVec.push_back(pDescriptor); + } + + pDescriptor->setCharacteristic(this); + NimBLEDevice::getServer()->serviceChanged(); +} + + +/** + * @brief Remove a descriptor from the characterisitc. + * @param[in] pDescriptor A pointer to the descriptor instance to remove from the characterisitc. + * @param[in] deleteDsc If true it will delete the descriptor instance and free it's resources. + */ +void NimBLECharacteristic::removeDescriptor(NimBLEDescriptor *pDescriptor, bool deleteDsc) { + // Check if the descriptor was already removed and if so, check if this + // is being called to delete the object and do so if requested. + // Otherwise, ignore the call and return. + if(pDescriptor->m_removed > 0) { + if(deleteDsc) { + for(auto it = m_dscVec.begin(); it != m_dscVec.end(); ++it) { + if ((*it) == pDescriptor) { + delete *it; + m_dscVec.erase(it); + break; + } + } + } + + return; + } + + pDescriptor->m_removed = deleteDsc ? NIMBLE_ATT_REMOVE_DELETE : NIMBLE_ATT_REMOVE_HIDE; + NimBLEDevice::getServer()->serviceChanged(); +} // removeDescriptor /** @@ -165,6 +218,11 @@ NimBLEService* NimBLECharacteristic::getService() { } // getService +void NimBLECharacteristic::setService(NimBLEService *pService) { + m_pService = pService; +} + + /** * @brief Get the UUID of the characteristic. * @return The UUID of the characteristic. @@ -301,16 +359,13 @@ void NimBLECharacteristic::setSubscribe(struct ble_gap_event *event) { subVal |= NIMBLE_SUB_INDICATE; } - if(m_pTaskData != nullptr) { - m_pTaskData->rc = (subVal & NIMBLE_SUB_INDICATE) ? 0 : - NimBLECharacteristicCallbacks::Status::ERROR_INDICATE_DISABLED; - xTaskNotifyGive(m_pTaskData->task); - } - NIMBLE_LOGI(LOG_TAG, "New subscribe value for conn: %d val: %d", - event->subscribe.conn_handle, subVal); + event->subscribe.conn_handle, subVal); + + if(!event->subscribe.cur_indicate && event->subscribe.prev_indicate) { + NimBLEDevice::getServer()->clearIndicateWait(event->subscribe.conn_handle); + } - m_pCallbacks->onSubscribe(this, &desc, subVal); auto it = m_subscribedVec.begin(); for(;it != m_subscribedVec.end(); ++it) { @@ -322,16 +377,14 @@ void NimBLECharacteristic::setSubscribe(struct ble_gap_event *event) { if(subVal > 0) { if(it == m_subscribedVec.end()) { m_subscribedVec.push_back({event->subscribe.conn_handle, subVal}); - return; + } else { + (*it).second = subVal; } - - (*it).second = subVal; - } else if(it != m_subscribedVec.end()) { m_subscribedVec.erase(it); - m_subscribedVec.shrink_to_fit(); } - + + m_pCallbacks->onSubscribe(this, &desc, subVal); } @@ -416,40 +469,20 @@ void NimBLECharacteristic::notify(bool is_notification) { // We also must create it in each loop iteration because it is consumed with each host call. os_mbuf *om = ble_hs_mbuf_from_flat((uint8_t*)value.data(), length); - NimBLECharacteristicCallbacks::Status statusRC; - if(!is_notification && (m_properties & NIMBLE_PROPERTY::INDICATE)) { - ble_task_data_t taskData = {nullptr, xTaskGetCurrentTaskHandle(),0, nullptr}; - m_pTaskData = &taskData; + if(!NimBLEDevice::getServer()->setIndicateWait(it.first)) { + NIMBLE_LOGE(LOG_TAG, "prior Indication in progress"); + os_mbuf_free_chain(om); + return; + } rc = ble_gattc_indicate_custom(it.first, m_handle, om); if(rc != 0){ - statusRC = NimBLECharacteristicCallbacks::Status::ERROR_GATT; - } else { - ulTaskNotifyTake(pdTRUE, portMAX_DELAY); - rc = m_pTaskData->rc; - } - - m_pTaskData = nullptr; - - if(rc == BLE_HS_EDONE) { - rc = 0; - statusRC = NimBLECharacteristicCallbacks::Status::SUCCESS_INDICATE; - } else if(rc == BLE_HS_ETIMEOUT) { - statusRC = NimBLECharacteristicCallbacks::Status::ERROR_INDICATE_TIMEOUT; - } else { - statusRC = NimBLECharacteristicCallbacks::Status::ERROR_INDICATE_FAILURE; + NimBLEDevice::getServer()->clearIndicateWait(it.first); } } else { - rc = ble_gattc_notify_custom(it.first, m_handle, om); - if(rc == 0) { - statusRC = NimBLECharacteristicCallbacks::Status::SUCCESS_NOTIFY; - } else { - statusRC = NimBLECharacteristicCallbacks::Status::ERROR_GATT; - } + ble_gattc_notify_custom(it.first, m_handle, om); } - - m_pCallbacks->onStatus(this, statusRC, rc); } NIMBLE_LOGD(LOG_TAG, "<< notify"); @@ -469,6 +502,13 @@ void NimBLECharacteristic::setCallbacks(NimBLECharacteristicCallbacks* pCallback } } // setCallbacks +/** + * @brief Get the callback handlers for this characteristic. + */ +NimBLECharacteristicCallbacks* NimBLECharacteristic::getCallbacks() { + return m_pCallbacks; +} //getCallbacks + /** * @brief Set the value of the characteristic. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.h index 9bb9d079b..6008d127f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLECharacteristic.h @@ -59,12 +59,26 @@ class NimBLECharacteristicCallbacks; */ class NimBLECharacteristic { public: + NimBLECharacteristic(const char* uuid, + uint16_t properties = + NIMBLE_PROPERTY::READ | + NIMBLE_PROPERTY::WRITE, + NimBLEService* pService = nullptr); + NimBLECharacteristic(const NimBLEUUID &uuid, + uint16_t properties = + NIMBLE_PROPERTY::READ | + NIMBLE_PROPERTY::WRITE, + NimBLEService* pService = nullptr); + + ~NimBLECharacteristic(); uint16_t getHandle(); NimBLEUUID getUUID(); std::string toString(); void setCallbacks(NimBLECharacteristicCallbacks* pCallbacks); + NimBLECharacteristicCallbacks* + getCallbacks(); void indicate(); void notify(bool is_notification = true); @@ -81,9 +95,11 @@ public: NIMBLE_PROPERTY::WRITE, uint16_t max_len = 100); + void addDescriptor(NimBLEDescriptor *pDescriptor); NimBLEDescriptor* getDescriptorByUUID(const char* uuid); NimBLEDescriptor* getDescriptorByUUID(const NimBLEUUID &uuid); NimBLEDescriptor* getDescriptorByHandle(uint16_t handle); + void removeDescriptor(NimBLEDescriptor *pDescriptor, bool deleteDsc = false); std::string getValue(time_t *timestamp = nullptr); size_t getDataLength(); @@ -115,30 +131,15 @@ public: setValue((uint8_t*)&s, sizeof(T)); } - - - + NimBLEService* getService(); + uint16_t getProperties(); private: - friend class NimBLEServer; - friend class NimBLEService; + friend class NimBLEServer; + friend class NimBLEService; - NimBLECharacteristic(const char* uuid, - uint16_t properties = - NIMBLE_PROPERTY::READ | - NIMBLE_PROPERTY::WRITE, - NimBLEService* pService = nullptr); - NimBLECharacteristic(const NimBLEUUID &uuid, - uint16_t properties = - NIMBLE_PROPERTY::READ | - NIMBLE_PROPERTY::WRITE, - NimBLEService* pService = nullptr); - - ~NimBLECharacteristic(); - - NimBLEService* getService(); - uint16_t getProperties(); + void setService(NimBLEService *pService); void setSubscribe(struct ble_gap_event *event); static int handleGapEvent(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); @@ -150,9 +151,9 @@ private: NimBLEService* m_pService; std::string m_value; std::vector m_dscVec; - ble_task_data_t *m_pTaskData; portMUX_TYPE m_valMux; time_t m_timestamp; + uint8_t m_removed; std::vector> m_subscribedVec; }; // NimBLECharacteristic diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.cpp index ddeb1de70..a171b8cc0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.cpp @@ -436,6 +436,24 @@ void NimBLEClient::updateConnParams(uint16_t minInterval, uint16_t maxInterval, } // updateConnParams +/** + * @brief Get detailed information about the current peer connection. + */ +NimBLEConnInfo NimBLEClient::getConnInfo() { + NimBLEConnInfo connInfo; + if (!isConnected()) { + NIMBLE_LOGE(LOG_TAG, "Not connected"); + } else { + int rc = ble_gap_conn_find(m_conn_id, &connInfo.m_desc); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Connection info not found"); + } + } + + return connInfo; +} // getConnInfo + + /** * @brief Set the timeout to wait for connection attempt to complete. * @param [in] time The number of seconds before timeout. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.h index a4b847000..d90086c4a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEClient.h @@ -23,6 +23,7 @@ #include "NimBLEAddress.h" #include "NimBLEUUID.h" #include "NimBLEUtils.h" +#include "NimBLEConnInfo.h" #include "NimBLEAdvertisedDevice.h" #include "NimBLERemoteService.h" @@ -71,6 +72,7 @@ public: void updateConnParams(uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout); void discoverAttributes(); + NimBLEConnInfo getConnInfo(); private: NimBLEClient(const NimBLEAddress &peerAddress); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEConnInfo.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEConnInfo.h new file mode 100644 index 000000000..e357d8cbc --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEConnInfo.h @@ -0,0 +1,55 @@ +#ifndef NIMBLECONNINFO_H_ +#define NIMBLECONNINFO_H_ + +#include "NimBLEAddress.h" + +/** + * @brief Connection information. + */ +class NimBLEConnInfo { +friend class NimBLEServer; +friend class NimBLEClient; + ble_gap_conn_desc m_desc; + NimBLEConnInfo() { m_desc = {}; } + NimBLEConnInfo(ble_gap_conn_desc desc) { m_desc = desc; } +public: + /** @brief Gets the over-the-air address of the connected peer */ + NimBLEAddress getAddress() { return NimBLEAddress(m_desc.peer_ota_addr); } + + /** @brief Gets the ID address of the connected peer */ + NimBLEAddress getIdAddress() { return NimBLEAddress(m_desc.peer_id_addr); } + + /** @brief Gets the connection handle of the connected peer */ + uint16_t getConnHandle() { return m_desc.conn_handle; } + + /** @brief Gets the connection interval for this connection (in 1.25ms units) */ + uint16_t getConnInterval() { return m_desc.conn_itvl; } + + /** @brief Gets the supervision timeout for this connection (in 10ms units) */ + uint16_t getConnTimeout() { return m_desc.supervision_timeout; } + + /** @brief Gets the allowable latency for this connection (unit = number of intervals) */ + uint16_t getConnLatency() { return m_desc.conn_latency; } + + /** @brief Gets the maximum transmission unit size for this connection (in bytes) */ + uint16_t getMTU() { return ble_att_mtu(m_desc.conn_handle); } + + /** @brief Check if we are in the master role in this connection */ + bool isMaster() { return (m_desc.role == BLE_GAP_ROLE_MASTER); } + + /** @brief Check if we are in the slave role in this connection */ + bool isSlave() { return (m_desc.role == BLE_GAP_ROLE_SLAVE); } + + /** @brief Check if we are connected to a bonded peer */ + bool isBonded() { return (m_desc.sec_state.bonded == 1); } + + /** @brief Check if the connection in encrypted */ + bool isEncrypted() { return (m_desc.sec_state.encrypted == 1); } + + /** @brief Check if the the connection has been authenticated */ + bool isAuthenticated() { return (m_desc.sec_state.authenticated == 1); } + + /** @brief Gets the key size used to encrypt the connection */ + uint8_t getSecKeySize() { return m_desc.sec_state.key_size; } +}; +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.cpp index 95c3291f3..f94676607 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.cpp @@ -37,6 +37,7 @@ NimBLEDescriptor::NimBLEDescriptor(const char* uuid, uint16_t properties, uint16 : NimBLEDescriptor(NimBLEUUID(uuid), max_len, properties, pCharacteristic) { } + /** * @brief NimBLEDescriptor constructor. */ @@ -47,11 +48,12 @@ NimBLEDescriptor::NimBLEDescriptor(NimBLEUUID uuid, uint16_t properties, uint16_ m_value.attr_len = 0; // Initial length is 0. m_value.attr_max_len = max_len; // Maximum length of the data. m_handle = NULL_HANDLE; // Handle is initially unknown. - m_pCharacteristic = nullptr; // No initial characteristic. + m_pCharacteristic = pCharacteristic; m_pCallbacks = &defaultCallbacks; // No initial callback. m_value.attr_value = (uint8_t*) calloc(max_len,1); // Allocate storage for the value. m_valMux = portMUX_INITIALIZER_UNLOCKED; m_properties = 0; + m_removed = 0; if (properties & BLE_GATT_CHR_F_READ) { // convert uint16_t properties to uint8_t m_properties |= BLE_ATT_F_READ; @@ -122,6 +124,7 @@ uint8_t* NimBLEDescriptor::getValue() { return m_value.attr_value; } // getValue + /** * @brief Get the value of this descriptor as a string. * @return A std::string instance containing a copy of the descriptor's value. @@ -130,9 +133,18 @@ std::string NimBLEDescriptor::getStringValue() { return std::string((char *) m_value.attr_value, m_value.attr_len); } + +/** + * @brief Get the characteristic this descriptor belongs to. + * @return A pointer to the characteristic this descriptor belongs to. + */ +NimBLECharacteristic* NimBLEDescriptor::getCharacteristic() { + return m_pCharacteristic; +} // getCharacteristic + + int NimBLEDescriptor::handleGapEvent(uint16_t conn_handle, uint16_t attr_handle, - struct ble_gatt_access_ctxt *ctxt, - void *arg) { + struct ble_gatt_access_ctxt *ctxt, void *arg) { const ble_uuid_t *uuid; int rc; NimBLEDescriptor* pDescriptor = (NimBLEDescriptor*)arg; @@ -169,7 +181,7 @@ int NimBLEDescriptor::handleGapEvent(uint16_t conn_handle, uint16_t attr_handle, if((len + next->om_len) > pDescriptor->m_value.attr_max_len) { return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN; } - memcpy(&buf[len-1], next->om_data, next->om_len); + memcpy(&buf[len], next->om_data, next->om_len); len += next->om_len; next = SLIST_NEXT(next, om_next); } @@ -237,6 +249,14 @@ void NimBLEDescriptor::setValue(const std::string &value) { setValue((uint8_t*) value.data(), value.length()); } // setValue +/** + * @brief Set the characteristic this descriptor belongs to. + * @param [in] pChar A pointer to the characteristic this descriptior belongs to. + */ +void NimBLEDescriptor::setCharacteristic(NimBLECharacteristic* pChar) { + m_pCharacteristic = pChar; +} // setCharacteristic + /** * @brief Return a string representation of the descriptor. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.h index 76318b729..5dc0ce89b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDescriptor.h @@ -43,46 +43,48 @@ class NimBLEDescriptorCallbacks; */ class NimBLEDescriptor { public: - uint16_t getHandle(); - NimBLEUUID getUUID(); - std::string toString(); + NimBLEDescriptor(const char* uuid, uint16_t properties, + uint16_t max_len, + NimBLECharacteristic* pCharacteristic = nullptr); - void setCallbacks(NimBLEDescriptorCallbacks* pCallbacks); + NimBLEDescriptor(NimBLEUUID uuid, uint16_t properties, + uint16_t max_len, + NimBLECharacteristic* pCharacteristic = nullptr); - size_t getLength(); - uint8_t* getValue(); - std::string getStringValue(); + ~NimBLEDescriptor(); + + uint16_t getHandle(); + NimBLEUUID getUUID(); + std::string toString(); + + void setCallbacks(NimBLEDescriptorCallbacks* pCallbacks); + + size_t getLength(); + uint8_t* getValue(); + std::string getStringValue(); + + void setValue(const uint8_t* data, size_t size); + void setValue(const std::string &value); + NimBLECharacteristic* getCharacteristic(); - void setValue(const uint8_t* data, size_t size); - void setValue(const std::string &value); /** * @brief Convenience template to set the descriptor value to val. * @param [in] s The value to set. */ template - void setValue(const T &s) { + void setValue(const T &s) { setValue((uint8_t*)&s, sizeof(T)); } private: friend class NimBLECharacteristic; friend class NimBLEService; - friend class NimBLE2902; friend class NimBLE2904; - NimBLEDescriptor(const char* uuid, uint16_t properties, - uint16_t max_len, - NimBLECharacteristic* pCharacteristic); - - NimBLEDescriptor(NimBLEUUID uuid, uint16_t properties, - uint16_t max_len, - NimBLECharacteristic* pCharacteristic); - - ~NimBLEDescriptor(); - static int handleGapEvent(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); void setHandle(uint16_t handle); + void setCharacteristic(NimBLECharacteristic* pChar); NimBLEUUID m_uuid; uint16_t m_handle; @@ -91,6 +93,7 @@ private: uint8_t m_properties; attr_value_t m_value; portMUX_TYPE m_valMux; + uint8_t m_removed; }; // NimBLEDescriptor diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.cpp index dc9caf3d5..bc253659a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.cpp @@ -30,7 +30,7 @@ #include "services/gap/ble_svc_gap.h" #include "services/gatt/ble_svc_gatt.h" -#ifdef ARDUINO_ARCH_ESP32 +#ifdef CONFIG_ENABLE_ARDUINO_DEPENDS #include "esp32-hal-bt.h" #endif @@ -60,6 +60,7 @@ ble_gap_event_listener NimBLEDevice::m_listener; std::list NimBLEDevice::m_cList; #endif std::list NimBLEDevice::m_ignoreList; +std::vector NimBLEDevice::m_whiteList; NimBLESecurityCallbacks* NimBLEDevice::m_securityCallbacks = nullptr; uint8_t NimBLEDevice::m_own_addr_type = BLE_OWN_ADDR_PUBLIC; uint16_t NimBLEDevice::m_scanDuplicateSize = CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE; @@ -448,6 +449,211 @@ void NimBLEDevice::setScanFilterMode(uint8_t mode) { m_scanFilterMode = mode; } +#if defined(CONFIG_BT_NIMBLE_ROLE_CENTRAL) || defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) +/** + * @brief Gets the number of bonded peers stored + */ +/*STATIC*/ +int NimBLEDevice::getNumBonds() { + ble_addr_t peer_id_addrs[MYNEWT_VAL(BLE_STORE_MAX_BONDS)]; + int num_peers, rc; + + rc = ble_store_util_bonded_peers(&peer_id_addrs[0], &num_peers, MYNEWT_VAL(BLE_STORE_MAX_BONDS)); + if (rc !=0) { + return 0; + } + + return num_peers; +} + + +/** + * @brief Deletes all bonding information. + */ + /*STATIC*/ +void NimBLEDevice::deleteAllBonds() { + ble_store_clear(); +} + + +/** + * @brief Deletes a peer bond. + * @param [in] address The address of the peer with which to delete bond info. + * @returns true on success. + */ +/*STATIC*/ +bool NimBLEDevice::deleteBond(const NimBLEAddress &address) { + ble_addr_t delAddr; + memcpy(&delAddr.val, address.getNative(),6); + delAddr.type = address.getType(); + + int rc = ble_gap_unpair(&delAddr); + if (rc != 0) { + return false; + } + + return true; +} + + +/** + * @brief Checks if a peer device is bonded. + * @param [in] address The address to check for bonding. + * @returns true if bonded. + */ +/*STATIC*/ +bool NimBLEDevice::isBonded(const NimBLEAddress &address) { + ble_addr_t peer_id_addrs[MYNEWT_VAL(BLE_STORE_MAX_BONDS)]; + int num_peers, rc; + + rc = ble_store_util_bonded_peers(&peer_id_addrs[0], &num_peers, MYNEWT_VAL(BLE_STORE_MAX_BONDS)); + if (rc != 0) { + return false; + } + + for (int i = 0; i < num_peers; i++) { + NimBLEAddress storedAddr(peer_id_addrs[i]); + if(storedAddr == address) { + return true; + } + } + + return false; +} + + +/** + * @brief Get the address of a bonded peer device by index. + * @param [in] index The index to retrieve the peer address of. + * @returns NimBLEAddress of the found bonded peer or nullptr if not found. + */ +/*STATIC*/ +NimBLEAddress NimBLEDevice::getBondedAddress(int index) { + ble_addr_t peer_id_addrs[MYNEWT_VAL(BLE_STORE_MAX_BONDS)]; + int num_peers, rc; + + rc = ble_store_util_bonded_peers(&peer_id_addrs[0], &num_peers, MYNEWT_VAL(BLE_STORE_MAX_BONDS)); + if (rc != 0) { + return nullptr; + } + + if (index > num_peers || index < 0) { + return nullptr; + } + + return NimBLEAddress(peer_id_addrs[index]); +} +#endif + +/** + * @brief Checks if a peer device is whitelisted. + * @param [in] address The address to check for in the whitelist. + * @returns true if the address is in the whitelist. + */ +bool NimBLEDevice::onWhiteList(const NimBLEAddress & address) { + for (auto &it : m_whiteList) { + if (it == address) { + return true; + } + } + + return false; +} + + +/** + * @brief Add a peer address to the whitelist. + * @param [in] address The address to add to the whitelist. + * @returns true if successful. + */ +bool NimBLEDevice::whiteListAdd(const NimBLEAddress & address) { + if (NimBLEDevice::onWhiteList(address)) { + return true; + } + + m_whiteList.push_back(address); + std::vector wlVec; + wlVec.reserve(m_whiteList.size()); + + for (auto &it : m_whiteList) { + ble_addr_t wlAddr; + memcpy(&wlAddr.val, it.getNative(), 6); + wlAddr.type = it.getType(); + wlVec.push_back(wlAddr); + } + + int rc = ble_gap_wl_set(&wlVec[0], wlVec.size()); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Failed adding to whitelist rc=%d", rc); + return false; + } + + return true; +} + + +/** + * @brief Remove a peer address from the whitelist. + * @param [in] address The address to remove from the whitelist. + * @returns true if successful. + */ +bool NimBLEDevice::whiteListRemove(const NimBLEAddress & address) { + if (!NimBLEDevice::onWhiteList(address)) { + return true; + } + + std::vector wlVec; + wlVec.reserve(m_whiteList.size()); + + for (auto &it : m_whiteList) { + if (it != address) { + ble_addr_t wlAddr; + memcpy(&wlAddr.val, it.getNative(), 6); + wlAddr.type = it.getType(); + wlVec.push_back(wlAddr); + } + } + + int rc = ble_gap_wl_set(&wlVec[0], wlVec.size()); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Failed removing from whitelist rc=%d", rc); + return false; + } + + // Don't remove from the list unless NimBLE returned success + for (auto it = m_whiteList.begin(); it < m_whiteList.end(); ++it) { + if ((*it) == address) { + m_whiteList.erase(it); + break; + } + } + + return true; +} + + +/** + * @brief Gets the count of addresses in the whitelist. + * @returns The number of addresses in the whitelist. + */ +size_t NimBLEDevice::getWhiteListCount() { + return m_whiteList.size(); +} + + +/** + * @brief Gets the address at the vector index. + * @param [in] index The vector index to retrieve the address from. + * @returns the NimBLEAddress at the whitelist index or nullptr if not found. + */ +NimBLEAddress NimBLEDevice::getWhiteListAddress(size_t index) { + if (index > m_whiteList.size()) { + NIMBLE_LOGE(LOG_TAG, "Invalid index; %u", index); + return nullptr; + } + return m_whiteList[index]; +} + /** * @brief Host reset, we pass the message so we don't make calls until resynced. @@ -534,7 +740,7 @@ void NimBLEDevice::setScanFilterMode(uint8_t mode) { int rc=0; esp_err_t errRc = ESP_OK; -#ifdef ARDUINO_ARCH_ESP32 +#ifdef CONFIG_ENABLE_ARDUINO_DEPENDS // make sure the linker includes esp32-hal-bt.c so ardruino init doesn't release BLE memory. btStarted(); #endif @@ -551,8 +757,12 @@ void NimBLEDevice::setScanFilterMode(uint8_t mode) { esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT); esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); +#ifdef CONFIG_IDF_TARGET_ESP32C3 + bt_cfg.bluetooth_mode = ESP_BT_MODE_BLE; +#else bt_cfg.mode = ESP_BT_MODE_BLE; bt_cfg.ble_max_conn = CONFIG_BT_NIMBLE_MAX_CONNECTIONS; +#endif bt_cfg.normal_adv_size = m_scanDuplicateSize; bt_cfg.scan_duplicate_type = m_scanFilterMode; @@ -771,17 +981,23 @@ void NimBLEDevice::setSecurityCallbacks(NimBLESecurityCallbacks* callbacks) { void NimBLEDevice::setOwnAddrType(uint8_t own_addr_type, bool useNRPA) { m_own_addr_type = own_addr_type; switch (own_addr_type) { +#ifdef CONFIG_IDF_TARGET_ESP32 case BLE_OWN_ADDR_PUBLIC: ble_hs_pvcy_rpa_config(NIMBLE_HOST_DISABLE_PRIVACY); break; +#endif case BLE_OWN_ADDR_RANDOM: setSecurityInitKey(BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID); +#ifdef CONFIG_IDF_TARGET_ESP32 ble_hs_pvcy_rpa_config(useNRPA ? NIMBLE_HOST_ENABLE_NRPA : NIMBLE_HOST_ENABLE_RPA); +#endif break; case BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT: case BLE_OWN_ADDR_RPA_RANDOM_DEFAULT: setSecurityInitKey(BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID); +#ifdef CONFIG_IDF_TARGET_ESP32 ble_hs_pvcy_rpa_config(NIMBLE_HOST_ENABLE_RPA); +#endif break; } } // setOwnAddrType diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.h index 27549ed60..08a042fc2 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEDevice.h @@ -95,6 +95,11 @@ public: static bool getInitialized(); static NimBLEAddress getAddress(); static std::string toString(); + static bool whiteListAdd(const NimBLEAddress & address); + static bool whiteListRemove(const NimBLEAddress & address); + static bool onWhiteList(const NimBLEAddress & address); + static size_t getWhiteListCount(); + static NimBLEAddress getWhiteListAddress(size_t index); #if defined(CONFIG_BT_NIMBLE_ROLE_OBSERVER) static NimBLEScan* getScan(); @@ -142,6 +147,14 @@ public: static std::list* getClientList(); #endif +#if defined(CONFIG_BT_NIMBLE_ROLE_CENTRAL) || defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) + static bool deleteBond(const NimBLEAddress &address); + static int getNumBonds(); + static bool isBonded(const NimBLEAddress &address); + static void deleteAllBonds(); + static NimBLEAddress getBondedAddress(int index); +#endif + private: #if defined( CONFIG_BT_NIMBLE_ROLE_CENTRAL) friend class NimBLEClient; @@ -188,6 +201,7 @@ private: static uint8_t m_own_addr_type; static uint16_t m_scanDuplicateSize; static uint8_t m_scanFilterMode; + static std::vector m_whiteList; }; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLELog.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLELog.h index 6e9ed97f3..8c1314634 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLELog.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLELog.h @@ -7,17 +7,19 @@ */ #ifndef MAIN_NIMBLELOG_H_ #define MAIN_NIMBLELOG_H_ + #include "sdkconfig.h" + #if defined(CONFIG_BT_ENABLED) +#ifdef ARDUINO_ARCH_ESP32 #include "syscfg/syscfg.h" #include "modlog/modlog.h" - // If Arduino is being used, strip out the colors and ignore log printing below ui setting. // Note: because CONFIG_LOG_DEFAULT_LEVEL is set at ERROR in Arduino we must use MODLOG_DFLT(ERROR // otherwise no messages will be printed above that level. -#ifdef ARDUINO_ARCH_ESP32 + #ifndef CORE_DEBUG_LEVEL #define CORE_DEBUG_LEVEL CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL #endif @@ -49,11 +51,15 @@ #define NIMBLE_LOGC( tag, format, ... ) MODLOG_DFLT(CRITICAL, "CRIT %s: "#format"\n",tag,##__VA_ARGS__) #else -#define NIMBLE_LOGE( tag, format, ... ) MODLOG_DFLT(ERROR, "\033[0;31mE %s: "#format"\033[0m\n",tag,##__VA_ARGS__) -#define NIMBLE_LOGW( tag, format, ... ) MODLOG_DFLT(WARN, "\033[0;33mW %s: "#format"\033[0m\n",tag,##__VA_ARGS__) -#define NIMBLE_LOGI( tag, format, ... ) MODLOG_DFLT(INFO, "\033[0;32mI %s: "#format"\033[0m\n",tag,##__VA_ARGS__) -#define NIMBLE_LOGD( tag, format, ... ) MODLOG_DFLT(DEBUG, "D %s: "#format"\n",tag,##__VA_ARGS__) -#define NIMBLE_LOGC( tag, format, ... ) MODLOG_DFLT(CRITICAL, "\033[1;31mCRIT %s: "#format"\033[0m\n",tag,##__VA_ARGS__) + +#include "esp_log.h" + +#define NIMBLE_LOGE(tag, format, ...) ESP_LOGE(tag, format, ##__VA_ARGS__) +#define NIMBLE_LOGW(tag, format, ...) ESP_LOGW(tag, format, ##__VA_ARGS__) +#define NIMBLE_LOGI(tag, format, ...) ESP_LOGI(tag, format, ##__VA_ARGS__) +#define NIMBLE_LOGD(tag, format, ...) ESP_LOGD(tag, format, ##__VA_ARGS__) +#define NIMBLE_LOGC(tag, format, ...) ESP_LOGE(tag, format, ##__VA_ARGS__) + #endif /*ARDUINO_ARCH_ESP32*/ #endif /*CONFIG_BT_ENABLED*/ diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.cpp index 8bc5090b1..85c854971 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.cpp @@ -55,6 +55,7 @@ static const char* LOG_TAG = "NimBLERemoteCharacteristic"; m_handle = chr->val_handle; m_defHandle = chr->def_handle; + m_endHandle = 0; m_charProp = chr->properties; m_pRemoteService = pRemoteService; m_notifyCallback = nullptr; @@ -146,31 +147,25 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t conn_handle, const struct ble_gatt_dsc *dsc, void *arg) { - NIMBLE_LOGD(LOG_TAG,"Descriptor Discovered >> status: %d handle: %d", - error->status, (error->status == 0) ? dsc->handle : -1); + int rc = error->status; + NIMBLE_LOGD(LOG_TAG, "Descriptor Discovered >> status: %d handle: %d", + rc, (rc == 0) ? dsc->handle : -1); desc_filter_t *filter = (desc_filter_t*)arg; const NimBLEUUID *uuid_filter = filter->uuid; ble_task_data_t *pTaskData = (ble_task_data_t*)filter->task_data; NimBLERemoteCharacteristic *characteristic = (NimBLERemoteCharacteristic*)pTaskData->pATT; - int rc=0; - if(characteristic->getRemoteService()->getClient()->getConnId() != conn_handle){ + if (characteristic->getRemoteService()->getClient()->getConnId() != conn_handle){ return 0; } - switch (error->status) { + switch (rc) { case 0: { - if(dsc->uuid.u.type == BLE_UUID_TYPE_16 && dsc->uuid.u16.value == uint16_t(0x2803)) { - NIMBLE_LOGD(LOG_TAG,"Descriptor NOT found - end of Characteristic definintion"); - rc = BLE_HS_EDONE; - break; - } - if(uuid_filter != nullptr) { - if(ble_uuid_cmp(&uuid_filter->getNative()->u, &dsc->uuid.u) != 0) { + if (uuid_filter != nullptr) { + if (ble_uuid_cmp(&uuid_filter->getNative()->u, &dsc->uuid.u) != 0) { return 0; } else { - NIMBLE_LOGD(LOG_TAG,"Descriptor Found"); rc = BLE_HS_EDONE; } } @@ -180,11 +175,10 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t conn_handle, break; } default: - rc = error->status; break; } - /** If rc == BLE_HS_EDONE, resume the task with a success error code and stop the discovery process. + /* If rc == BLE_HS_EDONE, resume the task with a success error code and stop the discovery process. * Else if rc == 0, just return 0 to continue the discovery until we get BLE_HS_EDONE. * If we get any other error code tell the application to abort by returning non-zero in the rc. */ @@ -202,6 +196,38 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t conn_handle, } +/** + * @brief callback from NimBLE when the next characteristic of the service is discovered. + */ +int NimBLERemoteCharacteristic::nextCharCB(uint16_t conn_handle, + const struct ble_gatt_error *error, + const struct ble_gatt_chr *chr, void *arg) +{ + int rc = error->status; + NIMBLE_LOGD(LOG_TAG, "Next Characteristic >> status: %d handle: %d", + rc, (rc == 0) ? chr->val_handle : -1); + + ble_task_data_t *pTaskData = (ble_task_data_t*)arg; + NimBLERemoteCharacteristic *pChar = (NimBLERemoteCharacteristic*)pTaskData->pATT; + + if (pChar->getRemoteService()->getClient()->getConnId() != conn_handle) { + return 0; + } + + if (rc == 0) { + pChar->m_endHandle = chr->def_handle - 1; + rc = BLE_HS_EDONE; + } else if (rc == BLE_HS_EDONE) { + pChar->m_endHandle = pChar->getRemoteService()->getEndHandle(); + } else { + pTaskData->rc = rc; + } + + xTaskNotifyGive(pTaskData->task); + return rc; +} + + /** * @brief Populate the descriptors (if any) for this characteristic. * @param [in] the end handle of the characteristic, or the service, whichever comes first. @@ -209,35 +235,57 @@ int NimBLERemoteCharacteristic::descriptorDiscCB(uint16_t conn_handle, bool NimBLERemoteCharacteristic::retrieveDescriptors(const NimBLEUUID *uuid_filter) { NIMBLE_LOGD(LOG_TAG, ">> retrieveDescriptors() for characteristic: %s", getUUID().toString().c_str()); - uint16_t endHandle = getRemoteService()->getEndHandle(this); - if(m_handle >= endHandle) { - return false; + // If this is the last handle then there are no descriptors + if (m_handle == getRemoteService()->getEndHandle()) { + return true; } int rc = 0; ble_task_data_t taskData = {this, xTaskGetCurrentTaskHandle(), 0, nullptr}; + + // If we don't know the end handle of this characteristic retrieve the next one in the service + // The end handle is the next characteristic definition handle -1. + if (m_endHandle == 0) { + rc = ble_gattc_disc_all_chrs(getRemoteService()->getClient()->getConnId(), + m_handle, + getRemoteService()->getEndHandle(), + NimBLERemoteCharacteristic::nextCharCB, + &taskData); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Error getting end handle rc=%d", rc); + return false; + } + + ulTaskNotifyTake(pdTRUE, portMAX_DELAY); + + if (taskData.rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Could not retrieve end handle rc=%d", taskData.rc); + return false; + } + } + desc_filter_t filter = {uuid_filter, &taskData}; rc = ble_gattc_disc_all_dscs(getRemoteService()->getClient()->getConnId(), m_handle, - endHandle, + m_endHandle, NimBLERemoteCharacteristic::descriptorDiscCB, &filter); if (rc != 0) { - NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_all_chrs: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc)); + NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_all_dscs: rc=%d %s", rc, NimBLEUtils::returnCodeToString(rc)); return false; } ulTaskNotifyTake(pdTRUE, portMAX_DELAY); - if(taskData.rc != 0) { - NIMBLE_LOGE(LOG_TAG, "ble_gattc_disc_all_chrs: startHandle:%d endHandle:%d taskData.rc=%d %s", m_handle, endHandle, taskData.rc, NimBLEUtils::returnCodeToString(0x0100+taskData.rc)); - return false; + if (taskData.rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Failed to retrieve descriptors; startHandle:%d endHandle:%d taskData.rc=%d", + m_handle, m_endHandle, taskData.rc); } - return true; NIMBLE_LOGD(LOG_TAG, "<< retrieveDescriptors(): Found %d descriptors.", m_descriptorVector.size()); + return (taskData.rc == 0); } // retrieveDescriptors @@ -664,7 +712,7 @@ std::string NimBLERemoteCharacteristic::toString() { * @return false if not connected or cant perform write for some reason. */ bool NimBLERemoteCharacteristic::writeValue(const std::string &newValue, bool response) { - return writeValue((uint8_t*)newValue.c_str(), strlen(newValue.c_str()), response); + return writeValue((uint8_t*)newValue.c_str(), newValue.length(), response); } // writeValue diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.h index 720a4da29..39e6d40fa 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteCharacteristic.h @@ -148,12 +148,15 @@ private: static int descriptorDiscCB(uint16_t conn_handle, const struct ble_gatt_error *error, uint16_t chr_val_handle, const struct ble_gatt_dsc *dsc, void *arg); + static int nextCharCB(uint16_t conn_handle, const struct ble_gatt_error *error, + const struct ble_gatt_chr *chr, void *arg); // Private properties NimBLEUUID m_uuid; uint8_t m_charProp; uint16_t m_handle; uint16_t m_defHandle; + uint16_t m_endHandle; NimBLERemoteService* m_pRemoteService; std::string m_value; notify_callback m_notifyCallback; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.cpp index cb20e0b3f..efb6662a8 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.cpp @@ -223,6 +223,20 @@ bool NimBLERemoteService::retrieveCharacteristics(const NimBLEUUID *uuid_filter) ulTaskNotifyTake(pdTRUE, portMAX_DELAY); if(taskData.rc == 0){ + if (uuid_filter == nullptr) { + if (m_characteristicVector.size() > 1) { + for (auto it = m_characteristicVector.begin(); it != m_characteristicVector.end(); ++it ) { + auto nx = std::next(it, 1); + if (nx == m_characteristicVector.end()) { + break; + } + (*it)->m_endHandle = (*nx)->m_defHandle - 1; + } + } + + m_characteristicVector.back()->m_endHandle = getEndHandle(); + } + NIMBLE_LOGD(LOG_TAG, "<< retrieveCharacteristics()"); return true; } @@ -249,23 +263,6 @@ uint16_t NimBLERemoteService::getEndHandle() { return m_endHandle; } // getEndHandle -/** - * @brief Get the end handle of specified NimBLERemoteCharacteristic. - */ - -uint16_t NimBLERemoteService::getEndHandle(NimBLERemoteCharacteristic *pCharacteristic) { - uint16_t endHandle = m_endHandle; - - for(auto &it: m_characteristicVector) { - uint16_t defHandle = it->getDefHandle() - 1; - if(defHandle > pCharacteristic->getDefHandle() && endHandle > defHandle) { - endHandle = defHandle; - } - } - - return endHandle; -} // getEndHandle - /** * @brief Get the service start handle. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.h index 4920844e4..751c9effb 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLERemoteService.h @@ -70,7 +70,6 @@ private: uint16_t getStartHandle(); uint16_t getEndHandle(); - uint16_t getEndHandle(NimBLERemoteCharacteristic *pCharacteristic); void releaseSemaphores(); // Properties diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.cpp index 00aeab03c..037055208 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.cpp @@ -110,7 +110,7 @@ NimBLEScan::~NimBLEScan() { advertisedDevice->m_timestamp = time(nullptr); advertisedDevice->setRSSI(event->disc.rssi); - advertisedDevice->setPayload(event->disc.data, event->disc.length_data, + advertisedDevice->setPayload(event->disc.data, event->disc.length_data, event->disc.event_type == BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP); if (pScan->m_pAdvertisedDeviceCallbacks) { @@ -128,7 +128,7 @@ NimBLEScan::~NimBLEScan() { advertisedDevice->m_callbackSent = true; pScan->m_pAdvertisedDeviceCallbacks->onResult(advertisedDevice); } - // If not storing results and we have invoked the callback, delete the device. + // If not storing results and we have invoked the callback, delete the device. if(pScan->m_maxResults == 0 && advertisedDevice->m_callbackSent) { pScan->erase(advertisedAddress); } @@ -316,6 +316,8 @@ bool NimBLEScan::start(uint32_t duration, void (*scanCompleteCB)(NimBLEScanResul break; case BLE_HS_EALREADY: + // Clear the cache if already scanning in case an advertiser was missed. + clearDuplicateCache(); break; case BLE_HS_EBUSY: @@ -398,6 +400,16 @@ bool NimBLEScan::stop() { } // stop +/** + * @brief Clears the duplicate scan filter cache. + */ +void NimBLEScan::clearDuplicateCache() { +#ifdef CONFIG_IDF_TARGET_ESP32 // Not available for ESP32C3 + esp_ble_scan_dupilcate_list_flush(); +#endif +} + + /** * @brief Delete peer device from the scan results vector. * @param [in] address The address of the device to delete from the results. @@ -453,6 +465,7 @@ void NimBLEScan::clearResults() { delete it; } m_scanResults.m_advertisedDevicesVector.clear(); + clearDuplicateCache(); } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.h index 57e743009..49d67c8ec 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEScan.h @@ -70,6 +70,7 @@ public: void setDuplicateFilter(bool enabled); void setLimitedOnly(bool enabled); void setFilterPolicy(uint8_t filter); + void clearDuplicateCache(); bool stop(); void clearResults(); NimBLEScanResults getResults(); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.cpp index 423e87967..082c51ad8 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.cpp @@ -37,6 +37,7 @@ static NimBLEServerCallbacks defaultCallbacks; * the NimBLEDevice class. */ NimBLEServer::NimBLEServer() { + memset(m_indWait, BLE_HS_CONN_HANDLE_NONE, sizeof(m_indWait)); // m_svcChgChrHdl = 0xffff; // Future Use m_pServerCallbacks = &defaultCallbacks; m_gattsStarted = false; @@ -90,12 +91,7 @@ NimBLEService* NimBLEServer::createService(const NimBLEUUID &uuid, uint32_t numH NimBLEService* pService = new NimBLEService(uuid, numHandles, this); m_svcVec.push_back(pService); // Save a reference to this service being on this server. - - if(m_gattsStarted) { - ble_svc_gatt_changed(0x0001, 0xffff); - m_svcChanged = true; - resetGATT(); - } + serviceChanged(); NIMBLE_LOGD(LOG_TAG, "<< createService"); return pService; @@ -156,6 +152,18 @@ NimBLEAdvertising* NimBLEServer::getAdvertising() { } // getAdvertising +/** + * @brief Sends a service changed notification and resets the GATT server. + */ +void NimBLEServer::serviceChanged() { + if(m_gattsStarted) { + m_svcChanged = true; + ble_svc_gatt_changed(0x0001, 0xffff); + resetGATT(); + } +} + + /** * @brief Start the GATT server. Required to be called after setup of all * services and characteristics / descriptors for the NimBLE host to register them. @@ -253,6 +261,63 @@ size_t NimBLEServer::getConnectedCount() { } // getConnectedCount +/** + * @brief Get the vector of the connected client ID's. + */ +std::vector NimBLEServer::getPeerDevices() { + return m_connectedPeersVec; +} // getPeerDevices + + +/** + * @brief Get the connection information of a connected peer by vector index. + * @param [in] index The vector index of the peer. + */ +NimBLEConnInfo NimBLEServer::getPeerInfo(size_t index) { + if (index >= m_connectedPeersVec.size()) { + NIMBLE_LOGE(LOG_TAG, "No peer at index %u", index); + return NimBLEConnInfo(); + } + + return getPeerIDInfo(m_connectedPeersVec[index]); +} // getPeerInfo + + +/** + * @brief Get the connection information of a connected peer by address. + * @param [in] address The address of the peer. + */ +NimBLEConnInfo NimBLEServer::getPeerInfo(const NimBLEAddress& address) { + ble_addr_t peerAddr; + memcpy(&peerAddr.val, address.getNative(),6); + peerAddr.type = address.getType(); + + NimBLEConnInfo peerInfo; + int rc = ble_gap_conn_find_by_addr(&peerAddr, &peerInfo.m_desc); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Peer info not found"); + } + + return peerInfo; +} // getPeerInfo + + +/** + * @brief Get the connection information of a connected peer by connection ID. + * @param [in] id The connection id of the peer. + */ +NimBLEConnInfo NimBLEServer::getPeerIDInfo(uint16_t id) { + NimBLEConnInfo peerInfo; + + int rc = ble_gap_conn_find(id, &peerInfo.m_desc); + if (rc != 0) { + NIMBLE_LOGE(LOG_TAG, "Peer info not found"); + } + + return peerInfo; +} // getPeerIDInfo + + /** * @brief Handle a GATT Server Event. * @@ -280,7 +345,9 @@ size_t NimBLEServer::getConnectedCount() { server->m_connectedPeersVec.push_back(event->connect.conn_handle); rc = ble_gap_conn_find(event->connect.conn_handle, &desc); - assert(rc == 0); + if (rc != 0) { + return 0; + } server->m_pServerCallbacks->onConnect(server); server->m_pServerCallbacks->onConnect(server, &desc); @@ -335,7 +402,9 @@ size_t NimBLEServer::getConnectedCount() { (it->getProperties() & BLE_GATT_CHR_F_READ_ENC)) { rc = ble_gap_conn_find(event->subscribe.conn_handle, &desc); - assert(rc == 0); + if (rc != 0) { + break; + } if(!desc.sec_state.encrypted) { NimBLEDevice::startSecurity(event->subscribe.conn_handle); @@ -354,22 +423,54 @@ size_t NimBLEServer::getConnectedCount() { NIMBLE_LOGI(LOG_TAG, "mtu update event; conn_handle=%d mtu=%d", event->mtu.conn_handle, event->mtu.value); + rc = ble_gap_conn_find(event->mtu.conn_handle, &desc); + if (rc != 0) { + return 0; + } + + server->m_pServerCallbacks->onMTUChange(event->mtu.value, &desc); return 0; } // BLE_GAP_EVENT_MTU case BLE_GAP_EVENT_NOTIFY_TX: { - if(event->notify_tx.indication && event->notify_tx.status != 0) { - for(auto &it : server->m_notifyChrVec) { - if(it->getHandle() == event->notify_tx.attr_handle) { - if(it->m_pTaskData != nullptr) { - it->m_pTaskData->rc = event->notify_tx.status; - xTaskNotifyGive(it->m_pTaskData->task); - } - break; - } + NimBLECharacteristic *pChar = nullptr; + + for(auto &it : server->m_notifyChrVec) { + if(it->getHandle() == event->notify_tx.attr_handle) { + pChar = it; } } + if(pChar == nullptr) { + return 0; + } + + NimBLECharacteristicCallbacks::Status statusRC; + + if(event->notify_tx.indication) { + if(event->notify_tx.status != 0) { + if(event->notify_tx.status == BLE_HS_EDONE) { + statusRC = NimBLECharacteristicCallbacks::Status::SUCCESS_INDICATE; + } else if(rc == BLE_HS_ETIMEOUT) { + statusRC = NimBLECharacteristicCallbacks::Status::ERROR_INDICATE_TIMEOUT; + } else { + statusRC = NimBLECharacteristicCallbacks::Status::ERROR_INDICATE_FAILURE; + } + } else { + return 0; + } + + server->clearIndicateWait(event->notify_tx.conn_handle); + } else { + if(event->notify_tx.status == 0) { + statusRC = NimBLECharacteristicCallbacks::Status::SUCCESS_NOTIFY; + } else { + statusRC = NimBLECharacteristicCallbacks::Status::ERROR_GATT; + } + } + + pChar->m_pCallbacks->onStatus(pChar, statusRC, event->notify_tx.status); + return 0; } // BLE_GAP_EVENT_NOTIFY_TX @@ -392,7 +493,10 @@ size_t NimBLEServer::getConnectedCount() { /* Delete the old bond. */ rc = ble_gap_conn_find(event->repeat_pairing.conn_handle, &desc); - assert(rc == 0); + if (rc != 0){ + return BLE_GAP_REPEAT_PAIRING_IGNORE; + } + ble_store_util_delete_peer(&desc.peer_id_addr); /* Return BLE_GAP_REPEAT_PAIRING_RETRY to indicate that the host should @@ -533,7 +637,7 @@ void NimBLEServer::removeService(NimBLEService* service, bool deleteSvc) { if(service->m_removed > 0) { if(deleteSvc) { for(auto it = m_svcVec.begin(); it != m_svcVec.end(); ++it) { - if ((*it)->getUUID() == service->getUUID()) { + if ((*it) == service) { delete *it; m_svcVec.erase(it); break; @@ -549,32 +653,35 @@ void NimBLEServer::removeService(NimBLEService* service, bool deleteSvc) { return; } - service->m_removed = deleteSvc ? 2 : 1; - m_svcChanged = true; - - ble_svc_gatt_changed(0x0001, 0xffff); - resetGATT(); + service->m_removed = deleteSvc ? NIMBLE_ATT_REMOVE_DELETE : NIMBLE_ATT_REMOVE_HIDE; + serviceChanged(); NimBLEDevice::getAdvertising()->removeServiceUUID(service->getUUID()); } /** - * @brief Adds a service which was already created, but removed from availability. + * @brief Adds a service which was either already created but removed from availability,\n + * or created and later added to services list. * @param [in] service The service object to add. * @note If it is desired to advertise the service it must be added by * calling NimBLEAdvertising::addServiceUUID. */ void NimBLEServer::addService(NimBLEService* service) { - // If adding a service that was not removed just return. + // Check that a service with the supplied UUID does not already exist. + if(getServiceByUUID(service->getUUID()) != nullptr) { + NIMBLE_LOGW(LOG_TAG, "Warning creating a duplicate service UUID: %s", + std::string(service->getUUID()).c_str()); + } + + // If adding a service that was not removed add it and return. + // Else reset GATT and send service changed notification. if(service->m_removed == 0) { + m_svcVec.push_back(service); return; } service->m_removed = 0; - m_svcChanged = true; - - ble_svc_gatt_changed(0x0001, 0xffff); - resetGATT(); + serviceChanged(); } @@ -593,7 +700,7 @@ void NimBLEServer::resetGATT() { for(auto it = m_svcVec.begin(); it != m_svcVec.end(); ) { if ((*it)->m_removed > 0) { - if ((*it)->m_removed == 2) { + if ((*it)->m_removed == NIMBLE_ATT_REMOVE_DELETE) { delete *it; it = m_svcVec.erase(it); } else { @@ -668,6 +775,27 @@ void NimBLEServer::updateConnParams(uint16_t conn_handle, }// updateConnParams +bool NimBLEServer::setIndicateWait(uint16_t conn_handle) { + for(auto i = 0; i < CONFIG_BT_NIMBLE_MAX_CONNECTIONS; i++) { + if(m_indWait[i] == conn_handle) { + return false; + } + } + + return true; +} + + +void NimBLEServer::clearIndicateWait(uint16_t conn_handle) { + for(auto i = 0; i < CONFIG_BT_NIMBLE_MAX_CONNECTIONS; i++) { + if(m_indWait[i] == conn_handle) { + m_indWait[i] = BLE_HS_CONN_HANDLE_NONE; + return; + } + } +} + + /** Default callback handlers */ void NimBLEServerCallbacks::onConnect(NimBLEServer* pServer) { @@ -688,6 +816,10 @@ void NimBLEServerCallbacks::onDisconnect(NimBLEServer* pServer, ble_gap_conn_des NIMBLE_LOGD("NimBLEServerCallbacks", "onDisconnect(): Default"); } // onDisconnect +void NimBLEServerCallbacks::onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc) { + NIMBLE_LOGD("NimBLEServerCallbacks", "onMTUChange(): Default"); +} // onMTUChange + uint32_t NimBLEServerCallbacks::onPassKeyRequest(){ NIMBLE_LOGD("NimBLEServerCallbacks", "onPassKeyRequest: default: 123456"); return 123456; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.h index aaaf287d2..ebcf39f23 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEServer.h @@ -20,11 +20,15 @@ #include "nimconfig.h" #if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL) +#define NIMBLE_ATT_REMOVE_HIDE 1 +#define NIMBLE_ATT_REMOVE_DELETE 2 + #include "NimBLEUtils.h" #include "NimBLEAddress.h" #include "NimBLEAdvertising.h" #include "NimBLEService.h" #include "NimBLESecurity.h" +#include "NimBLEConnInfo.h" class NimBLEService; @@ -58,13 +62,17 @@ public: uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout); uint16_t getPeerMTU(uint16_t conn_id); -// std::vector getPeerDevices(); + std::vector getPeerDevices(); + NimBLEConnInfo getPeerInfo(size_t index); + NimBLEConnInfo getPeerInfo(const NimBLEAddress& address); + NimBLEConnInfo getPeerIDInfo(uint16_t id); void advertiseOnDisconnect(bool); private: NimBLEServer(); ~NimBLEServer(); friend class NimBLECharacteristic; + friend class NimBLEService; friend class NimBLEDevice; friend class NimBLEAdvertising; @@ -73,6 +81,7 @@ private: bool m_svcChanged; NimBLEServerCallbacks* m_pServerCallbacks; bool m_deleteCallbacks; + uint16_t m_indWait[CONFIG_BT_NIMBLE_MAX_CONNECTIONS]; std::vector m_connectedPeersVec; // uint16_t m_svcChgChrHdl; // Future use @@ -81,7 +90,10 @@ private: std::vector m_notifyChrVec; static int handleGapEvent(struct ble_gap_event *event, void *arg); + void serviceChanged(); void resetGATT(); + bool setIndicateWait(uint16_t conn_handle); + void clearIndicateWait(uint16_t conn_handle); }; // NimBLEServer @@ -124,6 +136,14 @@ public: */ virtual void onDisconnect(NimBLEServer* pServer, ble_gap_conn_desc* desc); + /** + * @brief Called when the connection MTU changes. + * @param [in] MTU The new MTU value. + * @param [in] desc A pointer to the connection description structure containig information + * about the connection. + */ + virtual void onMTUChange(uint16_t MTU, ble_gap_conn_desc* desc); + /** * @brief Called when a client requests a passkey for pairing. * @return The passkey to be sent to the client. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.cpp index a830eec95..9c43e900c 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.cpp @@ -35,7 +35,7 @@ static const char* LOG_TAG = "NimBLEService"; // Tag for logging. * @brief Construct an instance of the NimBLEService * @param [in] uuid The UUID of the service. * @param [in] numHandles The maximum number of handles associated with the service. - * @param [in] a pointer to the server instance that this service belongs to. + * @param [in] pServer A pointer to the server instance that this service belongs to. */ NimBLEService::NimBLEService(const char* uuid, uint16_t numHandles, NimBLEServer* pServer) : NimBLEService(NimBLEUUID(uuid), numHandles, pServer) { @@ -46,7 +46,7 @@ NimBLEService::NimBLEService(const char* uuid, uint16_t numHandles, NimBLEServer * @brief Construct an instance of the BLEService * @param [in] uuid The UUID of the service. * @param [in] numHandles The maximum number of handles associated with the service. - * @param [in] a pointer to the server instance that this service belongs to. + * @param [in] pServer A pointer to the server instance that this service belongs to. */ NimBLEService::NimBLEService(const NimBLEUUID &uuid, uint16_t numHandles, NimBLEServer* pServer) { m_uuid = uuid; @@ -118,7 +118,12 @@ NimBLEUUID NimBLEService::getUUID() { */ bool NimBLEService::start() { NIMBLE_LOGD(LOG_TAG, ">> start(): Starting service: %s", toString().c_str()); - int rc = 0; + + // Rebuild the service definition if the server attributes have changed. + if(getServer()->m_svcChanged && m_pSvcDef != nullptr) { + delete(m_pSvcDef); + m_pSvcDef = nullptr; + } if(m_pSvcDef == nullptr) { // Nimble requires an array of services to be sent to the api @@ -132,8 +137,23 @@ bool NimBLEService::start() { svc[0].uuid = &m_uuid.getNative()->u; svc[0].includes = NULL; - size_t numChrs = m_chrVec.size(); + int removedCount = 0; + for(auto it = m_chrVec.begin(); it != m_chrVec.end(); ) { + if ((*it)->m_removed > 0) { + if ((*it)->m_removed == NIMBLE_ATT_REMOVE_DELETE) { + delete *it; + it = m_chrVec.erase(it); + } else { + ++removedCount; + ++it; + } + continue; + } + ++it; + } + + size_t numChrs = m_chrVec.size() - removedCount; NIMBLE_LOGD(LOG_TAG,"Adding %d characteristics for service %s", numChrs, toString().c_str()); if(!numChrs){ @@ -142,40 +162,60 @@ bool NimBLEService::start() { // Nimble requires the last characteristic to have it's uuid = 0 to indicate the end // of the characteristics for the service. We create 1 extra and set it to null // for this purpose. - pChr_a = new ble_gatt_chr_def[numChrs+1]; - NimBLECharacteristic* pCharacteristic = *m_chrVec.begin(); + pChr_a = new ble_gatt_chr_def[numChrs + 1]; + uint8_t i = 0; + for(auto chr_it = m_chrVec.begin(); chr_it != m_chrVec.end(); ++chr_it) { + if((*chr_it)->m_removed > 0) { + continue; + } - for(uint8_t i=0; i < numChrs;) { - uint8_t numDscs = pCharacteristic->m_dscVec.size(); + removedCount = 0; + for(auto it = (*chr_it)->m_dscVec.begin(); it != (*chr_it)->m_dscVec.end(); ) { + if ((*it)->m_removed > 0) { + if ((*it)->m_removed == NIMBLE_ATT_REMOVE_DELETE) { + delete *it; + it = (*chr_it)->m_dscVec.erase(it); + } else { + ++removedCount; + ++it; + } + continue; + } + + ++it; + } + + size_t numDscs = (*chr_it)->m_dscVec.size() - removedCount; if(!numDscs){ pChr_a[i].descriptors = NULL; } else { // Must have last descriptor uuid = 0 so we have to create 1 extra pDsc_a = new ble_gatt_dsc_def[numDscs+1]; - NimBLEDescriptor* pDescriptor = *pCharacteristic->m_dscVec.begin(); - for(uint8_t d=0; d < numDscs;) { - pDsc_a[d].uuid = &pDescriptor->m_uuid.getNative()->u; - pDsc_a[d].att_flags = pDescriptor->m_properties; + uint8_t d = 0; + for(auto dsc_it = (*chr_it)->m_dscVec.begin(); dsc_it != (*chr_it)->m_dscVec.end(); ++dsc_it ) { + if((*dsc_it)->m_removed > 0) { + continue; + } + pDsc_a[d].uuid = &(*dsc_it)->m_uuid.getNative()->u; + pDsc_a[d].att_flags = (*dsc_it)->m_properties; pDsc_a[d].min_key_size = 0; pDsc_a[d].access_cb = NimBLEDescriptor::handleGapEvent; - pDsc_a[d].arg = pDescriptor; - d++; - pDescriptor = *(pCharacteristic->m_dscVec.begin() + d); + pDsc_a[d].arg = (*dsc_it); + ++d; } pDsc_a[numDscs].uuid = NULL; pChr_a[i].descriptors = pDsc_a; } - pChr_a[i].uuid = &pCharacteristic->m_uuid.getNative()->u; + pChr_a[i].uuid = &(*chr_it)->m_uuid.getNative()->u; pChr_a[i].access_cb = NimBLECharacteristic::handleGapEvent; - pChr_a[i].arg = pCharacteristic; - pChr_a[i].flags = pCharacteristic->m_properties; + pChr_a[i].arg = (*chr_it); + pChr_a[i].flags = (*chr_it)->m_properties; pChr_a[i].min_key_size = 0; - pChr_a[i].val_handle = &pCharacteristic->m_handle; - i++; - pCharacteristic = *(m_chrVec.begin() + i); + pChr_a[i].val_handle = &(*chr_it)->m_handle; + ++i; } pChr_a[numChrs].uuid = NULL; @@ -187,7 +227,7 @@ bool NimBLEService::start() { m_pSvcDef = svc; } - rc = ble_gatts_count_cfg((const ble_gatt_svc_def*)m_pSvcDef); + int rc = ble_gatts_count_cfg((const ble_gatt_svc_def*)m_pSvcDef); if (rc != 0) { NIMBLE_LOGE(LOG_TAG, "ble_gatts_count_cfg failed, rc= %d, %s", rc, NimBLEUtils::returnCodeToString(rc)); return false; @@ -239,13 +279,64 @@ NimBLECharacteristic* NimBLEService::createCharacteristic(const NimBLEUUID &uuid std::string(uuid).c_str()); } - // Remember this characteristic in our vector of characteristics. - m_chrVec.push_back(pCharacteristic); - + addCharacteristic(pCharacteristic); return pCharacteristic; } // createCharacteristic +/** + * @brief Add a characteristic to the service. + * @param[in] pCharacteristic A pointer to the characteristic instance to add to the service. + */ +void NimBLEService::addCharacteristic(NimBLECharacteristic* pCharacteristic) { + bool foundRemoved = false; + + if(pCharacteristic->m_removed > 0) { + for(auto& it : m_chrVec) { + if(it == pCharacteristic) { + foundRemoved = true; + pCharacteristic->m_removed = 0; + } + } + } + + if(!foundRemoved) { + m_chrVec.push_back(pCharacteristic); + } + + pCharacteristic->setService(this); + getServer()->serviceChanged(); +} // addCharacteristic + + +/** + * @brief Remove a characteristic from the service. + * @param[in] pCharacteristic A pointer to the characteristic instance to remove from the service. + * @param[in] deleteChr If true it will delete the characteristic instance and free it's resources. + */ +void NimBLEService::removeCharacteristic(NimBLECharacteristic* pCharacteristic, bool deleteChr) { + // Check if the characteristic was already removed and if so, check if this + // is being called to delete the object and do so if requested. + // Otherwise, ignore the call and return. + if(pCharacteristic->m_removed > 0) { + if(deleteChr) { + for(auto it = m_chrVec.begin(); it != m_chrVec.end(); ++it) { + if ((*it) == pCharacteristic) { + m_chrVec.erase(it); + delete *it; + break; + } + } + } + + return; + } + + pCharacteristic->m_removed = deleteChr ? NIMBLE_ATT_REMOVE_DELETE : NIMBLE_ATT_REMOVE_HIDE; + getServer()->serviceChanged(); +} // removeCharacteristic + + /** * @brief Get a pointer to the characteristic object with the specified UUID. * @param [in] uuid The UUID of the characteristic. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.h b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.h index 1203d3e3b..ebf913d32 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEService.h @@ -36,6 +36,10 @@ class NimBLECharacteristic; class NimBLEService { public: + NimBLEService(const char* uuid, uint16_t numHandles, NimBLEServer* pServer); + NimBLEService(const NimBLEUUID &uuid, uint16_t numHandles, NimBLEServer* pServer); + ~NimBLEService(); + NimBLEServer* getServer(); NimBLEUUID getUUID(); @@ -55,6 +59,8 @@ public: NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE); + void addCharacteristic(NimBLECharacteristic* pCharacteristic); + void removeCharacteristic(NimBLECharacteristic* pCharacteristic, bool deleteChr = false); NimBLECharacteristic* getCharacteristic(const char* uuid, uint16_t instanceId = 0); NimBLECharacteristic* getCharacteristic(const NimBLEUUID &uuid, uint16_t instanceId = 0); NimBLECharacteristic* getCharacteristicByHandle(uint16_t handle); @@ -65,9 +71,6 @@ public: private: - NimBLEService(const char* uuid, uint16_t numHandles, NimBLEServer* pServer); - NimBLEService(const NimBLEUUID &uuid, uint16_t numHandles, NimBLEServer* pServer); - ~NimBLEService(); friend class NimBLEServer; friend class NimBLEDevice; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEUUID.cpp b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEUUID.cpp index ea58ae7b2..9338d7d00 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/NimBLEUUID.cpp +++ b/lib/libesp32_div/NimBLE-Arduino/src/NimBLEUUID.cpp @@ -277,10 +277,6 @@ std::string NimBLEUUID::toString() const { */ bool NimBLEUUID::operator ==(const NimBLEUUID & rhs) const { if(m_valueSet && rhs.m_valueSet) { - NIMBLE_LOGD(LOG_TAG,"Comparing UUIDs; type %u to %u; UUID %s to %s", - m_uuid.u.type, rhs.m_uuid.u.type, - this->toString().c_str(), rhs.toString().c_str()); - if(m_uuid.u.type != rhs.m_uuid.u.type) { uint8_t uuidBase[16] = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, diff --git a/lib/libesp32_div/NimBLE-Arduino/src/esp-hci/src/esp_nimble_hci.c b/lib/libesp32_div/NimBLE-Arduino/src/esp-hci/src/esp_nimble_hci.c index 9af13c355..2963e15b3 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/esp-hci/src/esp_nimble_hci.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/esp-hci/src/esp_nimble_hci.c @@ -19,13 +19,6 @@ * under the License. */ -/* - * This file has been modified by Ryan Powell, aka h2zero. - * The modifications are for the purpose of improving performance and support - * for Esprssif versions used by the ardruino-esp32 core that are less current - * than the esp-idf releases. - */ - #include #include "sysinit/sysinit.h" #include "nimble/hci_common.h" @@ -44,6 +37,8 @@ #endif #define NIMBLE_VHCI_TIMEOUT_MS 2000 +#define BLE_HCI_EVENT_HDR_LEN (2) +#define BLE_HCI_CMD_HDR_LEN (3) static ble_hci_trans_rx_cmd_fn *ble_hci_rx_cmd_hs_cb; static void *ble_hci_rx_cmd_hs_arg; @@ -276,7 +271,9 @@ void ble_hci_trans_buf_free(uint8_t *buf) */ int ble_hci_trans_set_acl_free_cb(os_mempool_put_fn *cb, void *arg) { - return BLE_ERR_UNSUPPORTED; + ble_hci_acl_pool.mpe_put_cb = cb; + ble_hci_acl_pool.mpe_put_arg = arg; + return 0; } int ble_hci_trans_reset(void) @@ -313,6 +310,7 @@ static struct os_mbuf *ble_hci_trans_acl_buf_alloc(void) static void ble_hci_rx_acl(uint8_t *data, uint16_t len) { struct os_mbuf *m; + int rc; int sr; if (len < BLE_HCI_DATA_HDR_SZ || len > MYNEWT_VAL(BLE_ACL_BUF_SIZE)) { return; @@ -321,9 +319,11 @@ static void ble_hci_rx_acl(uint8_t *data, uint16_t len) m = ble_hci_trans_acl_buf_alloc(); if (!m) { + ESP_LOGE(TAG, "%s failed to allocate ACL buffers; increase ACL_BUF_COUNT", __func__); return; } - if (os_mbuf_append(m, data, len)) { + if ((rc = os_mbuf_append(m, data, len)) != 0) { + ESP_LOGE(TAG, "%s failed to os_mbuf_append; rc = %d", __func__, rc); os_mbuf_free_chain(m); return; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/esp_nimble_cfg.h b/lib/libesp32_div/NimBLE-Arduino/src/esp_nimble_cfg.h index bafbeac8f..2cebffc85 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/esp_nimble_cfg.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/esp_nimble_cfg.h @@ -25,6 +25,10 @@ #define MYNEWT_VAL_MSYS_1_BLOCK_SIZE (292) #endif +#ifndef MYNEWT_VAL_MSYS_1_SANITY_MIN_COUNT +#define MYNEWT_VAL_MSYS_1_SANITY_MIN_COUNT (0) +#endif + #ifndef MYNEWT_VAL_MSYS_2_BLOCK_COUNT #define MYNEWT_VAL_MSYS_2_BLOCK_COUNT (0) #endif @@ -43,11 +47,15 @@ /*** nimble */ #ifndef MYNEWT_VAL_BLE_EXT_ADV -#define MYNEWT_VAL_BLE_EXT_ADV (0) +#define MYNEWT_VAL_BLE_EXT_ADV (CONFIG_BT_NIMBLE_EXT_ADV) #endif #ifndef MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE -#define MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE (31) +#ifdef CONFIG_BT_NIMBLE_EXT_ADV +#define MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE (CONFIG_BT_NIMBLE_MAX_EXT_ADV_DATA_LEN) +#else +#define MYNEWT_VAL_BLE_EXT_ADV_MAX_SIZE (0) +#endif #endif #ifndef MYNEWT_VAL_BLE_MAX_CONNECTIONS @@ -55,12 +63,20 @@ #endif #ifndef MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES +#ifdef CONFIG_BT_NIMBLE_EXT_ADV +#define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES (CONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES) +#else #define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES (0) #endif +#endif #ifndef MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS +#ifdef CONFIG_BT_NIMBLE_ENABLE_PERIODIC_ADV +#define MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS (CONFIG_BT_NIMBLE_MAX_PERIODIC_SYNCS) +#else #define MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS (0) #endif +#endif #ifndef MYNEWT_VAL_BLE_ROLE_BROADCASTER #ifdef CONFIG_BT_NIMBLE_ROLE_BROADCASTER @@ -267,9 +283,25 @@ #define MYNEWT_VAL_BLE_ATT_PREFERRED_MTU CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU #endif +#ifndef MYNEWT_VAL_BLE_HS_LOG_LVL +#define MYNEWT_VAL_BLE_HS_LOG_LVL CONFIG_BT_NIMBLE_LOG_LEVEL +#endif + #ifndef MYNEWT_VAL_BLE_PERIODIC_ADV +#ifdef CONFIG_BT_NIMBLE_EXT_ADV +#define MYNEWT_VAL_BLE_PERIODIC_ADV (CONFIG_BT_NIMBLE_ENABLE_PERIODIC_ADV) +#else #define MYNEWT_VAL_BLE_PERIODIC_ADV (0) #endif +#endif + +#ifndef MYNEWT_VAL_BLE_PERIODIC_ADV_SYNC_TRANSFER +#define MYNEWT_VAL_BLE_PERIODIC_ADV_SYNC_TRANSFER (0) +#endif + +#ifndef MYNEWT_VAL_BLE_VERSION +#define MYNEWT_VAL_BLE_VERSION (50) +#endif #ifndef MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO #define MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO (1) @@ -479,6 +511,18 @@ #define MYNEWT_VAL_BLE_HS_REQUIRE_OS (1) #endif +#ifndef MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN +#define MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN (1) +#endif + +#ifndef MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN_TIMEOUT +#define MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN_TIMEOUT CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS +#endif + +#ifndef MYNEWT_VAL_BLE_HS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_HS_SYSINIT_STAGE (200) +#endif + #ifndef MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM #define MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM #endif @@ -547,8 +591,12 @@ #define MYNEWT_VAL_BLE_MONITOR_UART_DEV ("uart0") #endif -#ifndef MYNEWT_VAL_BLE_HOST_BASED_PRIVACY +#if CONFIG_IDF_TARGET_ESP32 #define MYNEWT_VAL_BLE_HOST_BASED_PRIVACY (1) +#else +#ifndef MYNEWT_VAL_BLE_HOST_BASED_PRIVACY +#define MYNEWT_VAL_BLE_HOST_BASED_PRIVACY (CONFIG_BT_NIMBLE_HOST_BASED_PRIVACY) +#endif #endif #ifndef MYNEWT_VAL_BLE_RPA_TIMEOUT @@ -615,6 +663,27 @@ #define MYNEWT_VAL_BLE_STORE_MAX_CCCDS CONFIG_BT_NIMBLE_MAX_CCCDS #endif +/*** @apache-mynewt-nimble/nimble/host/mesh */ +#ifndef MYNEWT_VAL_BLE_MESH_ACCESS_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_ACCESS_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_ACCESS_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_ACCESS_LOG_MOD (10) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT +#define MYNEWT_VAL_BLE_MESH_ADV_BUF_COUNT (20) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_ADV_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_ADV_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_ADV_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_ADV_LOG_MOD (11) +#endif + #ifndef MYNEWT_VAL_BLE_STORE_CONFIG_PERSIST #ifdef CONFIG_BT_NIMBLE_NVS_PERSIST #define MYNEWT_VAL_BLE_STORE_CONFIG_PERSIST (1) @@ -645,6 +714,9 @@ #define MYNEWT_VAL_BLE_MESH_ADV_TASK_PRIO (9) #endif +#ifndef MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT +#define MYNEWT_VAL_BLE_MESH_APP_KEY_COUNT (4) +#endif /*** @apache-mynewt-nimble/nimble/host/mesh */ /* Overridden by apps/blemesh (defined by @apache-mynewt-nimble/nimble/host/mesh) */ @@ -758,6 +830,14 @@ #endif #endif +#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_FRIEND_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_FRIEND_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_FRIEND_LOG_MOD (14) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT #define MYNEWT_VAL_BLE_MESH_FRIEND_LPN_COUNT (2) #endif @@ -802,6 +882,14 @@ #define MYNEWT_VAL_BLE_MESH_LABEL_COUNT (1) #endif +#ifndef MYNEWT_VAL_BLE_MESH_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_LOG_MOD (9) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_LOW_POWER #ifdef CONFIG_BT_NIMBLE_MESH_LOW_POWER #define MYNEWT_VAL_BLE_MESH_LOW_POWER (1) @@ -810,6 +898,14 @@ #endif #endif +#ifndef MYNEWT_VAL_BLE_MESH_LOW_POWER_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_LOW_POWER_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_LOW_POWER_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_LOW_POWER_LOG_MOD (15) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_LPN_AUTO #define MYNEWT_VAL_BLE_MESH_LPN_AUTO (1) #endif @@ -858,6 +954,10 @@ #define MYNEWT_VAL_BLE_MESH_LPN_SCAN_LATENCY (10) #endif +#ifndef MYNEWT_VAL_BLE_MESH_MODEL_EXTENSIONS +#define MYNEWT_VAL_BLE_MESH_MODEL_EXTENSIONS (0) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT #define MYNEWT_VAL_BLE_MESH_MODEL_GROUP_COUNT (1) #endif @@ -866,10 +966,30 @@ #define MYNEWT_VAL_BLE_MESH_MODEL_KEY_COUNT (1) #endif +#ifndef MYNEWT_VAL_BLE_MESH_MODEL_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_MODEL_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_MODEL_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_MODEL_LOG_MOD (16) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE #define MYNEWT_VAL_BLE_MESH_MSG_CACHE_SIZE (10) #endif +#ifndef MYNEWT_VAL_BLE_MESH_NET_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_NET_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_NET_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_NET_LOG_MOD (17) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_NODE_COUNT +#define MYNEWT_VAL_BLE_MESH_NODE_COUNT CONFIG_BT_NIMBLE_MESH_NODE_COUNT +#endif + #ifndef MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT #define MYNEWT_VAL_BLE_MESH_NODE_ID_TIMEOUT (60) #endif @@ -915,6 +1035,22 @@ #endif #endif +#ifndef MYNEWT_VAL_BLE_MESH_PROVISIONER +#ifdef CONFIG_BT_NIMBLE_MESH_PROVISIONER +#define MYNEWT_VAL_BLE_MESH_PROVISIONER (1) +#else +#define MYNEWT_VAL_BLE_MESH_PROVISIONER (0) +#endif +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_PROV_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_PROV_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_PROV_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_PROV_LOG_MOD (18) +#endif + /* Overridden by @apache-mynewt-nimble/nimble/host/mesh (defined by @apache-mynewt-nimble/nimble/host/mesh) */ #ifndef MYNEWT_VAL_BLE_MESH_PROXY #ifdef CONFIG_BT_NIMBLE_MESH_PROXY @@ -928,6 +1064,13 @@ #define MYNEWT_VAL_BLE_MESH_PROXY_FILTER_SIZE (1) #endif +#ifndef MYNEWT_VAL_BLE_MESH_PROXY_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_PROXY_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_PROXY_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_PROXY_LOG_MOD (19) +#endif #ifndef MYNEWT_VAL_BLE_MESH_RELAY #ifdef CONFIG_BT_NIMBLE_MESH_RELAY @@ -949,6 +1092,10 @@ #define MYNEWT_VAL_BLE_MESH_RX_SEG_MSG_COUNT (2) #endif +#ifndef MYNEWT_VAL_BLE_MESH_SEG_RETRANSMIT_ATTEMPTS +#define MYNEWT_VAL_BLE_MESH_SEG_RETRANSMIT_ATTEMPTS (4) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE #define MYNEWT_VAL_BLE_MESH_SEQ_STORE_RATE (128) #endif @@ -958,6 +1105,14 @@ #define MYNEWT_VAL_BLE_MESH_SETTINGS (0) #endif +#ifndef MYNEWT_VAL_BLE_MESH_SETTINGS_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_SETTINGS_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_SETTINGS_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_SETTINGS_LOG_MOD (20) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_SHELL #define MYNEWT_VAL_BLE_MESH_SHELL (0) #endif @@ -974,10 +1129,26 @@ #define MYNEWT_VAL_BLE_MESH_SUBNET_COUNT (1) #endif +#ifndef MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE (500) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE_SHELL +#define MYNEWT_VAL_BLE_MESH_SYSINIT_STAGE_SHELL (1000) +#endif + #ifndef MYNEWT_VAL_BLE_MESH_TESTING #define MYNEWT_VAL_BLE_MESH_TESTING (0) #endif +#ifndef MYNEWT_VAL_BLE_MESH_TRANS_LOG_LVL +#define MYNEWT_VAL_BLE_MESH_TRANS_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_MESH_TRANS_LOG_MOD +#define MYNEWT_VAL_BLE_MESH_TRANS_LOG_MOD (21) +#endif + /* Overridden by apps/blemesh (defined by @apache-mynewt-nimble/nimble/host/mesh) */ #ifndef MYNEWT_VAL_BLE_MESH_TX_SEG_MAX #define MYNEWT_VAL_BLE_MESH_TX_SEG_MAX (6) @@ -987,6 +1158,103 @@ #define MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT (4) #endif +/*** @apache-mynewt-nimble/nimble/host/services/ans */ +#ifndef MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT +#define MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT (0) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_ANS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_ANS_SYSINIT_STAGE (303) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_ANS_UNR_ALERT_CAT +#define MYNEWT_VAL_BLE_SVC_ANS_UNR_ALERT_CAT (0) +#endif + +/*** @apache-mynewt-nimble/nimble/host/services/bas */ +#ifndef MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE +#define MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE (1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_READ_PERM +#define MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_READ_PERM (0) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_BAS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_BAS_SYSINIT_STAGE (303) +#endif + +/*** @apache-mynewt-nimble/nimble/host/services/dis */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_DEFAULT ("NimBLE") +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_READ_PERM (0) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_DIS_SYSINIT_STAGE (303) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_READ_PERM (-1) +#endif + /*** @apache-mynewt-nimble/nimble/host/services/gap */ #ifndef MYNEWT_VAL_BLE_SVC_GAP_APPEARANCE #define MYNEWT_VAL_BLE_SVC_GAP_APPEARANCE CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE @@ -1102,4 +1370,8 @@ #define MYNEWT_VAL_BLE_HCI_UART_STOP_BITS (1) #endif +#ifndef MYNEWT_VAL_NEWT_FEATURE_LOGCFG +#define MYNEWT_VAL_NEWT_FEATURE_LOGCFG (1) +#endif + #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_gap.h b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_gap.h index b4dbdb051..ed7fbb128 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_gap.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_gap.h @@ -128,6 +128,7 @@ struct hci_conn_update; #define BLE_GAP_EVENT_PERIODIC_REPORT 21 #define BLE_GAP_EVENT_PERIODIC_SYNC_LOST 22 #define BLE_GAP_EVENT_SCAN_REQ_RCVD 23 +#define BLE_GAP_EVENT_PERIODIC_TRANSFER 24 /*** Reason codes for the subscribe GAP event. */ @@ -390,7 +391,7 @@ struct ble_gap_ext_disc_desc { uint8_t length_data; /** Advertising data */ - uint8_t *data; + const uint8_t *data; /** Directed advertising address. Valid if BLE_HCI_ADV_DIRECT_MASK props is * set (BLE_ADDR_ANY otherwise). @@ -420,7 +421,7 @@ struct ble_gap_disc_desc { int8_t rssi; /** Advertising data */ - uint8_t *data; + const uint8_t *data; /** Directed advertising address. Valid for BLE_HCI_ADV_RPT_EVTYPE_DIR_IND * event type (BLE_ADDR_ANY otherwise). @@ -890,7 +891,7 @@ struct ble_gap_event { uint8_t data_length; /** Advertising data */ - uint8_t *data; + const uint8_t *data; } periodic_report; /** @@ -924,6 +925,47 @@ struct ble_gap_event { /** Address of scanner */ ble_addr_t scan_addr; } scan_req_rcvd; +#endif +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) + /** + * Represents a periodic advertising sync transfer received. Valid for + * the following event types: + * o BLE_GAP_EVENT_PERIODIC_TRANSFER + */ + struct { + /** BLE_ERR_SUCCESS on success or error code on failure. Sync handle + * is valid only for success. + */ + uint8_t status; + + /** Periodic sync handle */ + uint16_t sync_handle; + + /** Connection handle */ + uint16_t conn_handle; + + /** Service Data */ + uint16_t service_data; + + /** Advertising Set ID */ + uint8_t sid; + + /** Advertiser address */ + ble_addr_t adv_addr; + + /** Advertising PHY, can be one of following constants: + * - BLE_HCI_LE_PHY_1M + * - LE_HCI_LE_PHY_2M + * - BLE_HCI_LE_PHY_CODED + */ + uint8_t adv_phy; + + /** Periodic advertising interval */ + uint16_t per_adv_itvl; + + /** Advertiser clock accuracy */ + uint8_t adv_clk_accuracy; + } periodic_transfer; #endif }; }; @@ -1097,6 +1139,23 @@ int ble_gap_adv_set_fields(const struct ble_hs_adv_fields *rsp_fields); */ int ble_gap_adv_rsp_set_fields(const struct ble_hs_adv_fields *rsp_fields); +/** + * Configure LE Data Length in controller (OGF = 0x08, OCF = 0x0022). + * + * @param conn_handle Connection handle. + * @param tx_octets The preferred value of payload octets that the Controller + * should use for a new connection (Range + * 0x001B-0x00FB). + * @param tx_time The preferred maximum number of microseconds that the local Controller + * should use to transmit a single link layer packet + * (Range 0x0148-0x4290). + * + * @return 0 on success, + * other error code on failure. + */ +int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, + uint16_t tx_time); + #if MYNEWT_VAL(BLE_EXT_ADV) /** @brief Extended advertising parameters */ struct ble_gap_ext_adv_params { @@ -1203,8 +1262,8 @@ int ble_gap_ext_adv_set_addr(uint8_t instance, const ble_addr_t *addr); * @param instance Instance ID * @param duration The duration of the advertisement procedure. On * expiration, the procedure ends and - * a BLE_HS_FOREVER event is reported. - * Units are milliseconds. Specify 0 for no + * a BLE_GAP_EVENT_ADV_COMPLETE event is reported. + * Units are 10 milliseconds. Specify 0 for no * expiration. * @params max_events Number of advertising events that should be sent * before advertising ends and @@ -1297,6 +1356,9 @@ struct ble_gap_periodic_sync_params { /** Synchronization timeout for the periodic advertising train in 10ms units */ uint16_t sync_timeout; + + /** If reports should be initially disabled when sync is created */ + unsigned int reports_disabled:1; }; /** @@ -1359,7 +1421,7 @@ int ble_gap_periodic_adv_set_data(uint8_t instance, struct os_mbuf *data); * * @return 0 on success; nonzero on failure. */ -int ble_gap_periodic_adv_create_sync(const ble_addr_t *addr, uint8_t adv_sid, +int ble_gap_periodic_adv_sync_create(const ble_addr_t *addr, uint8_t adv_sid, const struct ble_gap_periodic_sync_params *params, ble_gap_event_fn *cb, void *cb_arg); @@ -1368,7 +1430,7 @@ int ble_gap_periodic_adv_create_sync(const ble_addr_t *addr, uint8_t adv_sid, * * @return 0 on success; nonzero on failure. */ -int ble_gap_periodic_adv_create_sync_cancel(void); +int ble_gap_periodic_adv_sync_create_cancel(void); /** * Terminate synchronization procedure. @@ -1377,7 +1439,74 @@ int ble_gap_periodic_adv_create_sync_cancel(void); * * @return 0 on success; nonzero on failure. */ -int ble_gap_periodic_adv_terminate_sync(uint16_t sync_handle); +int ble_gap_periodic_adv_sync_terminate(uint16_t sync_handle); + +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) +/** + * Disable or enable periodic reports for specified sync. + * + * @param sync_handle Handle identifying synchronization. + * @param enable If reports should be enabled. + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_periodic_adv_sync_reporting(uint16_t sync_handle, bool enable); + +/** + * Initialize sync transfer procedure for specified handles. + * + * This allows to transfer periodic sync to which host is synchronized. + * + * @param sync_handle Handle identifying synchronization. + * @param conn_handle Handle identifying connection. + * @param service_data Sync transfer service data + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_periodic_adv_sync_transfer(uint16_t sync_handle, + uint16_t conn_handle, + uint16_t service_data); + +/** + * Initialize set info transfer procedure for specified handles. + * + * This allows to transfer periodic sync which is being advertised by host. + * + * @param instance Advertising instance with periodic adv enabled. + * @param conn_handle Handle identifying connection. + * @param service_data Sync transfer service data + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_periodic_adv_sync_set_info(uint8_t instance, + uint16_t conn_handle, + uint16_t service_data); + +/** + * Enables or disables sync transfer reception on specified connection. + * When sync transfer arrives, BLE_GAP_EVENT_PERIODIC_TRANSFER is sent to the user. + * After that, sync transfer reception on that connection is terminated and user needs + * to call this API again when expect to receive next sync transfers. + * + * Note: If ACL connection gets disconnected before sync transfer arrived, user will + * not receive BLE_GAP_EVENT_PERIODIC_TRANSFER. Instead, sync transfer reception + * is terminated by the host automatically. + * + * @param conn_handle Handle identifying connection. + * @param params Parameters for enabled sync transfer reception. + * Specify NULL to disable reception. + * @param cb The callback to associate with this synchronization + * procedure. BLE_GAP_EVENT_PERIODIC_REPORT events + * are reported only by this callback. + * @param cb_arg The optional argument to pass to the callback + * function. + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_periodic_adv_sync_receive(uint16_t conn_handle, + const struct ble_gap_periodic_sync_params *params, + ble_gap_event_fn *cb, void *cb_arg); +#endif /** * Add peer device to periodic synchronization list. @@ -1435,7 +1564,8 @@ int ble_gap_read_periodic_adv_list_size(uint8_t *per_adv_list_size); * On expiration, the procedure ends and a * BLE_GAP_EVENT_DISC_COMPLETE event is * reported. Units are milliseconds. Specify - * BLE_HS_FOREVER for no expiration. + * BLE_HS_FOREVER for no expiration. Specify + * 0 to use stack defaults. * @param disc_params Additional arguments specifying the particulars * of the discovery procedure. * @param cb The callback to associate with this discovery @@ -1661,6 +1791,15 @@ int ble_gap_terminate(uint16_t conn_handle, uint8_t hci_reason); */ int ble_gap_wl_set(const ble_addr_t *addrs, uint8_t white_list_count); +/** + * Removes the address from controller's white list. + * + * @param addrs The entry to be removed from the white list. + * + * @return 0 on success; nonzero on failure. + */ +int ble_gap_wl_tx_rmv(const ble_addr_t *addrs); + /** * Initiates a connection parameter update procedure. * diff --git a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_adv.h b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_adv.h index b0d85c02a..e3b6ea709 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_adv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_adv.h @@ -35,7 +35,7 @@ extern "C" { struct ble_hs_adv_field { uint8_t length; uint8_t type; - uint8_t value[]; + uint8_t value[0]; }; typedef int (* ble_hs_adv_parse_func_t) (const struct ble_hs_adv_field *, @@ -46,22 +46,22 @@ struct ble_hs_adv_fields { uint8_t flags; /*** 0x02,0x03 - 16-bit service class UUIDs. */ - ble_uuid16_t *uuids16; + const ble_uuid16_t *uuids16; uint8_t num_uuids16; unsigned uuids16_is_complete:1; /*** 0x04,0x05 - 32-bit service class UUIDs. */ - ble_uuid32_t *uuids32; + const ble_uuid32_t *uuids32; uint8_t num_uuids32; unsigned uuids32_is_complete:1; /*** 0x06,0x07 - 128-bit service class UUIDs. */ - ble_uuid128_t *uuids128; + const ble_uuid128_t *uuids128; uint8_t num_uuids128; unsigned uuids128_is_complete:1; /*** 0x08,0x09 - Local name. */ - uint8_t *name; + const uint8_t *name; uint8_t name_len; unsigned name_is_complete:1; @@ -70,14 +70,14 @@ struct ble_hs_adv_fields { unsigned tx_pwr_lvl_is_present:1; /*** 0x0d - Slave connection interval range. */ - uint8_t *slave_itvl_range; + const uint8_t *slave_itvl_range; /*** 0x16 - Service data - 16-bit UUID. */ - uint8_t *svc_data_uuid16; + const uint8_t *svc_data_uuid16; uint8_t svc_data_uuid16_len; /*** 0x17 - Public target address. */ - uint8_t *public_tgt_addr; + const uint8_t *public_tgt_addr; uint8_t num_public_tgt_addrs; /*** 0x19 - Appearance. */ @@ -89,19 +89,19 @@ struct ble_hs_adv_fields { unsigned adv_itvl_is_present:1; /*** 0x20 - Service data - 32-bit UUID. */ - uint8_t *svc_data_uuid32; + const uint8_t *svc_data_uuid32; uint8_t svc_data_uuid32_len; /*** 0x21 - Service data - 128-bit UUID. */ - uint8_t *svc_data_uuid128; + const uint8_t *svc_data_uuid128; uint8_t svc_data_uuid128_len; /*** 0x24 - URI. */ - uint8_t *uri; + const uint8_t *uri; uint8_t uri_len; /*** 0xff - Manufacturer specific data. */ - uint8_t *mfg_data; + const uint8_t *mfg_data; uint8_t mfg_data_len; }; @@ -164,8 +164,8 @@ int ble_hs_adv_set_fields_mbuf(const struct ble_hs_adv_fields *adv_fields, int ble_hs_adv_set_fields(const struct ble_hs_adv_fields *adv_fields, uint8_t *dst, uint8_t *dst_len, uint8_t max_len); -int ble_hs_adv_parse_fields(struct ble_hs_adv_fields *adv_fields, uint8_t *src, - uint8_t src_len); +int ble_hs_adv_parse_fields(struct ble_hs_adv_fields *adv_fields, + const uint8_t *src, uint8_t src_len); int ble_hs_adv_parse(const uint8_t *data, uint8_t length, ble_hs_adv_parse_func_t func, void *user_data); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_log.h b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_log.h index 3fb1db978..8d0a4596e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_log.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_hs_log.h @@ -22,6 +22,11 @@ #include "modlog/modlog.h" +/* Only include the logcfg header if this version of newt can generate it. */ +#if MYNEWT_VAL(NEWT_FEATURE_LOGCFG) +#include "logcfg/logcfg.h" +#endif + #ifdef __cplusplus extern "C" { #endif @@ -29,13 +34,13 @@ extern "C" { struct os_mbuf; #define BLE_HS_LOG(lvl, ...) \ - MODLOG_ ## lvl(LOG_MODULE_NIMBLE_HOST, __VA_ARGS__) + BLE_HS_LOG_ ## lvl(__VA_ARGS__) #define BLE_HS_LOG_ADDR(lvl, addr) \ - MODLOG_ ## lvl(LOG_MODULE_NIMBLE_HOST, \ - "%02x:%02x:%02x:%02x:%02x:%02x", \ - (addr)[5], (addr)[4], (addr)[3], \ - (addr)[2], (addr)[1], (addr)[0]) + BLE_HS_LOG_ ## lvl("%02x:%02x:%02x:%02x:%02x:%02x", \ + (addr)[5], (addr)[4], (addr)[3], \ + (addr)[2], (addr)[1], (addr)[0]) + void ble_hs_log_mbuf(const struct os_mbuf *om); void ble_hs_log_flat_buf(const void *data, int len); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_l2cap.h b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_l2cap.h index 644bd9d0d..aef9682cc 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_l2cap.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_l2cap.h @@ -51,10 +51,14 @@ struct ble_hs_conn; #define BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_RSP 0x11 #define BLE_L2CAP_SIG_OP_UPDATE_REQ 0x12 #define BLE_L2CAP_SIG_OP_UPDATE_RSP 0x13 -#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ 0x14 -#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP 0x15 +#define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_REQ 0x14 +#define BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_RSP 0x15 #define BLE_L2CAP_SIG_OP_FLOW_CTRL_CREDIT 0x16 -#define BLE_L2CAP_SIG_OP_MAX 0x17 +#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ 0x17 +#define BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP 0x18 +#define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_REQ 0x19 +#define BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_RSP 0x1A +#define BLE_L2CAP_SIG_OP_MAX 0x1B #define BLE_L2CAP_SIG_ERR_CMD_NOT_UNDERSTOOD 0x0000 #define BLE_L2CAP_SIG_ERR_MTU_EXCEEDED 0x0001 @@ -70,12 +74,21 @@ struct ble_hs_conn; #define BLE_L2CAP_COC_ERR_INVALID_SOURCE_CID 0x0009 #define BLE_L2CAP_COC_ERR_SOURCE_CID_ALREADY_USED 0x000A #define BLE_L2CAP_COC_ERR_UNACCEPTABLE_PARAMETERS 0x000B +#define BLE_L2CAP_COC_ERR_INVALID_PARAMETERS 0x000C + +#define BLE_L2CAP_ERR_RECONFIG_SUCCEED 0x0000 +#define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MTU_NOT_ALLOWED 0x0001 +#define BLE_L2CAP_ERR_RECONFIG_REDUCTION_MPS_NOT_ALLOWED 0x0002 +#define BLE_L2CAP_ERR_RECONFIG_INVALID_DCID 0x0003 +#define BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM 0x0004 #define BLE_L2CAP_EVENT_COC_CONNECTED 0 #define BLE_L2CAP_EVENT_COC_DISCONNECTED 1 #define BLE_L2CAP_EVENT_COC_ACCEPT 2 #define BLE_L2CAP_EVENT_COC_DATA_RECEIVED 3 #define BLE_L2CAP_EVENT_COC_TX_UNSTALLED 4 +#define BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED 5 +#define BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED 6 typedef void ble_l2cap_sig_update_fn(uint16_t conn_handle, int status, void *arg); @@ -196,11 +209,44 @@ struct ble_l2cap_event { */ int status; } tx_unstalled; + + /** + * Represents reconfiguration done. Valid for the following event + * types: + * o BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED + * o BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED + */ + struct { + /** + * The status of the reconfiguration attempt; + * o 0: the reconfiguration was successfully done. + * o BLE host error code: the reconfiguration attempt failed for + * the specified reason. + */ + int status; + + /** Connection handle of the relevant connection */ + uint16_t conn_handle; + + /** The L2CAP channel of the relevant L2CAP connection. */ + struct ble_l2cap_chan *chan; + } reconfigured; }; }; +struct ble_l2cap_chan_info { + uint16_t scid; + uint16_t dcid; + uint16_t our_l2cap_mtu; + uint16_t peer_l2cap_mtu; + uint16_t psm; + uint16_t our_coc_mtu; + uint16_t peer_coc_mtu; +}; + typedef int ble_l2cap_event_fn(struct ble_l2cap_event *event, void *arg); + uint16_t ble_l2cap_get_conn_handle(struct ble_l2cap_chan *chan); int ble_l2cap_create_server(uint16_t psm, uint16_t mtu, ble_l2cap_event_fn *cb, void *cb_arg); @@ -211,10 +257,7 @@ int ble_l2cap_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, int ble_l2cap_disconnect(struct ble_l2cap_chan *chan); int ble_l2cap_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx); int ble_l2cap_recv_ready(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_rx); -int ble_l2cap_get_scid(struct ble_l2cap_chan *chan); -int ble_l2cap_get_dcid(struct ble_l2cap_chan *chan); -int ble_l2cap_get_our_mtu(struct ble_l2cap_chan *chan); -int ble_l2cap_get_peer_mtu(struct ble_l2cap_chan *chan); +int ble_l2cap_get_chan_info(struct ble_l2cap_chan *chan, struct ble_l2cap_chan_info *chan_info); #ifdef __cplusplus } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_sm.h b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_sm.h index 9bd25adfc..ceebb8564 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/host/ble_sm.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/host/ble_sm.h @@ -84,7 +84,16 @@ extern "C" { #define BLE_SM_IOACT_INPUT 2 #define BLE_SM_IOACT_DISP 3 #define BLE_SM_IOACT_NUMCMP 4 -#define BLE_SM_IOACT_MAX_PLUS_ONE 5 +#define BLE_SM_IOACT_OOB_SC 5 +#define BLE_SM_IOACT_MAX_PLUS_ONE 6 + +struct ble_sm_sc_oob_data { + /** Random Number. */ + uint8_t r[16]; + + /** Confirm Value. */ + uint8_t c[16]; +}; struct ble_sm_io { uint8_t action; @@ -92,9 +101,15 @@ struct ble_sm_io { uint32_t passkey; uint8_t oob[16]; uint8_t numcmp_accept; + struct { + struct ble_sm_sc_oob_data *local; + struct ble_sm_sc_oob_data *remote; + } oob_sc_data; }; }; +int ble_sm_sc_oob_generate_data(struct ble_sm_sc_oob_data *oob_data); + #if NIMBLE_BLE_SM int ble_sm_inject_io(uint16_t conn_handle, struct ble_sm_io *pkey); #else diff --git a/lib/libesp32_div/NimBLE-Arduino/src/log_common/ignore.h b/lib/libesp32_div/NimBLE-Arduino/src/log_common/ignore.h new file mode 100644 index 000000000..46282a029 --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/log_common/ignore.h @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef H_IGNORE_ +#define H_IGNORE_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * These macros prevent the "set but not used" warnings for log writes below + * the log level. + */ + +#define IGN_1(X) ((void)(X)) +#define IGN_2(X, ...) ((void)(X));IGN_1(__VA_ARGS__) +#define IGN_3(X, ...) ((void)(X));IGN_2(__VA_ARGS__) +#define IGN_4(X, ...) ((void)(X));IGN_3(__VA_ARGS__) +#define IGN_5(X, ...) ((void)(X));IGN_4(__VA_ARGS__) +#define IGN_6(X, ...) ((void)(X));IGN_5(__VA_ARGS__) +#define IGN_7(X, ...) ((void)(X));IGN_6(__VA_ARGS__) +#define IGN_8(X, ...) ((void)(X));IGN_7(__VA_ARGS__) +#define IGN_9(X, ...) ((void)(X));IGN_8(__VA_ARGS__) +#define IGN_10(X, ...) ((void)(X));IGN_9(__VA_ARGS__) +#define IGN_11(X, ...) ((void)(X));IGN_10(__VA_ARGS__) +#define IGN_12(X, ...) ((void)(X));IGN_11(__VA_ARGS__) +#define IGN_13(X, ...) ((void)(X));IGN_12(__VA_ARGS__) +#define IGN_14(X, ...) ((void)(X));IGN_13(__VA_ARGS__) +#define IGN_15(X, ...) ((void)(X));IGN_14(__VA_ARGS__) +#define IGN_16(X, ...) ((void)(X));IGN_15(__VA_ARGS__) +#define IGN_17(X, ...) ((void)(X));IGN_16(__VA_ARGS__) +#define IGN_18(X, ...) ((void)(X));IGN_17(__VA_ARGS__) +#define IGN_19(X, ...) ((void)(X));IGN_18(__VA_ARGS__) +#define IGN_20(X, ...) ((void)(X));IGN_19(__VA_ARGS__) + +#define GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, \ + _13, _14, _15, _16, _17, _18, _19, _20, NAME, ...) NAME +#define IGNORE(...) \ + GET_MACRO(__VA_ARGS__, IGN_20, IGN_19, IGN_18, IGN_17, IGN_16, IGN_15, \ + IGN_14, IGN_13, IGN_12, IGN_11, IGN_10, IGN_9, IGN_8, IGN_7, \ + IGN_6, IGN_5, IGN_4, IGN_3, IGN_2, IGN_1)(__VA_ARGS__) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/log_common/log_common.h similarity index 62% rename from lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg_priv.h rename to lib/libesp32_div/NimBLE-Arduino/src/log_common/log_common.h index 4d4390f92..ad79f8905 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/log_common/log_common.h @@ -17,18 +17,34 @@ * under the License. */ -#ifndef H_BLE_HS_DBG_PRIV_ -#define H_BLE_HS_DBG_PRIV_ +#ifndef H_LOG_COMMON_ +#define H_LOG_COMMON_ + +#include "log_common/ignore.h" #ifdef __cplusplus extern "C" { #endif -void ble_hs_dbg_event_disp(uint8_t *evbuf); -void ble_hs_dbg_set_sync_state(uint8_t sync_state); +/* +#define LOG_LEVEL_DEBUG (0) +#define LOG_LEVEL_INFO (1) +#define LOG_LEVEL_WARN (2) +#define LOG_LEVEL_ERROR (3) +#define LOG_LEVEL_CRITICAL (4) +#define LOG_LEVEL_NONE (5) +*/ +#define LOG_LEVEL_DEBUG (3) +#define LOG_LEVEL_INFO (2) +#define LOG_LEVEL_WARN (5) +#define LOG_LEVEL_ERROR (1) +#define LOG_LEVEL_CRITICAL (4) +#define LOG_LEVEL_NONE (0) +/* Up to 7 custom log levels. */ +#define LOG_LEVEL_MAX (15) #ifdef __cplusplus } #endif -#endif /* H_HOST_DBG_ */ +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/logcfg/logcfg.h b/lib/libesp32_div/NimBLE-Arduino/src/logcfg/logcfg.h new file mode 100644 index 000000000..764f87f27 --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/logcfg/logcfg.h @@ -0,0 +1,147 @@ +/** + * This file was generated by Apache newt version: 1.8.0-dev + */ + +#ifndef H_MYNEWT_LOGCFG_ +#define H_MYNEWT_LOGCFG_ + +#include "modlog/modlog.h" +#include "log_common/log_common.h" + +#if (MYNEWT_VAL(BLE_HS_LOG_LVL) == LOG_LEVEL_DEBUG) +#define BLE_HS_LOG_DEBUG(...) MODLOG_DEBUG(4, __VA_ARGS__) +#else +#define BLE_HS_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#endif + +#if (MYNEWT_VAL(BLE_HS_LOG_LVL) <= LOG_LEVEL_INFO) +#define BLE_HS_LOG_INFO(...) MODLOG_INFO(4, __VA_ARGS__) +#else +#define BLE_HS_LOG_INFO(...) IGNORE(__VA_ARGS__) +#endif + +#if (MYNEWT_VAL(BLE_HS_LOG_LVL) <= LOG_LEVEL_WARN) +#define BLE_HS_LOG_WARN(...) MODLOG_WARN(4, __VA_ARGS__) +#else +#define BLE_HS_LOG_WARN(...) IGNORE(__VA_ARGS__) +#endif + +#if (MYNEWT_VAL(BLE_HS_LOG_LVL) <= LOG_LEVEL_ERROR) +#define BLE_HS_LOG_ERROR(...) MODLOG_ERROR(4, __VA_ARGS__) +#else +#define BLE_HS_LOG_ERROR(...) IGNORE(__VA_ARGS__) +#endif + +#if (MYNEWT_VAL(BLE_HS_LOG_LVL) <= LOG_LEVEL_CRITICAL) +#define BLE_HS_LOG_CRITICAL(...) MODLOG_CRITICAL(4, __VA_ARGS__) +#else +#define BLE_HS_LOG_CRITICAL(...) IGNORE(__VA_ARGS__) +#endif + +#define BLE_HS_LOG_DISABLED(...) MODLOG_DISABLED(4, __VA_ARGS__) + +#define BLE_MESH_ACCESS_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_ACCESS_LOG_INFO(...) MODLOG_INFO(10, __VA_ARGS__) +#define BLE_MESH_ACCESS_LOG_WARN(...) MODLOG_WARN(10, __VA_ARGS__) +#define BLE_MESH_ACCESS_LOG_ERROR(...) MODLOG_ERROR(10, __VA_ARGS__) +#define BLE_MESH_ACCESS_LOG_CRITICAL(...) MODLOG_CRITICAL(10, __VA_ARGS__) +#define BLE_MESH_ACCESS_LOG_DISABLED(...) MODLOG_DISABLED(10, __VA_ARGS__) + +#define BLE_MESH_ADV_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_ADV_LOG_INFO(...) MODLOG_INFO(11, __VA_ARGS__) +#define BLE_MESH_ADV_LOG_WARN(...) MODLOG_WARN(11, __VA_ARGS__) +#define BLE_MESH_ADV_LOG_ERROR(...) MODLOG_ERROR(11, __VA_ARGS__) +#define BLE_MESH_ADV_LOG_CRITICAL(...) MODLOG_CRITICAL(11, __VA_ARGS__) +#define BLE_MESH_ADV_LOG_DISABLED(...) MODLOG_DISABLED(11, __VA_ARGS__) + +#define BLE_MESH_BEACON_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_BEACON_LOG_INFO(...) MODLOG_INFO(12, __VA_ARGS__) +#define BLE_MESH_BEACON_LOG_WARN(...) MODLOG_WARN(12, __VA_ARGS__) +#define BLE_MESH_BEACON_LOG_ERROR(...) MODLOG_ERROR(12, __VA_ARGS__) +#define BLE_MESH_BEACON_LOG_CRITICAL(...) MODLOG_CRITICAL(12, __VA_ARGS__) +#define BLE_MESH_BEACON_LOG_DISABLED(...) MODLOG_DISABLED(12, __VA_ARGS__) + +#define BLE_MESH_CRYPTO_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_CRYPTO_LOG_INFO(...) MODLOG_INFO(13, __VA_ARGS__) +#define BLE_MESH_CRYPTO_LOG_WARN(...) MODLOG_WARN(13, __VA_ARGS__) +#define BLE_MESH_CRYPTO_LOG_ERROR(...) MODLOG_ERROR(13, __VA_ARGS__) +#define BLE_MESH_CRYPTO_LOG_CRITICAL(...) MODLOG_CRITICAL(13, __VA_ARGS__) +#define BLE_MESH_CRYPTO_LOG_DISABLED(...) MODLOG_DISABLED(13, __VA_ARGS__) + +#define BLE_MESH_FRIEND_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_FRIEND_LOG_INFO(...) MODLOG_INFO(14, __VA_ARGS__) +#define BLE_MESH_FRIEND_LOG_WARN(...) MODLOG_WARN(14, __VA_ARGS__) +#define BLE_MESH_FRIEND_LOG_ERROR(...) MODLOG_ERROR(14, __VA_ARGS__) +#define BLE_MESH_FRIEND_LOG_CRITICAL(...) MODLOG_CRITICAL(14, __VA_ARGS__) +#define BLE_MESH_FRIEND_LOG_DISABLED(...) MODLOG_DISABLED(14, __VA_ARGS__) + +#define BLE_MESH_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_LOG_INFO(...) MODLOG_INFO(9, __VA_ARGS__) +#define BLE_MESH_LOG_WARN(...) MODLOG_WARN(9, __VA_ARGS__) +#define BLE_MESH_LOG_ERROR(...) MODLOG_ERROR(9, __VA_ARGS__) +#define BLE_MESH_LOG_CRITICAL(...) MODLOG_CRITICAL(9, __VA_ARGS__) +#define BLE_MESH_LOG_DISABLED(...) MODLOG_DISABLED(9, __VA_ARGS__) + +#define BLE_MESH_LOW_POWER_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_LOW_POWER_LOG_INFO(...) MODLOG_INFO(15, __VA_ARGS__) +#define BLE_MESH_LOW_POWER_LOG_WARN(...) MODLOG_WARN(15, __VA_ARGS__) +#define BLE_MESH_LOW_POWER_LOG_ERROR(...) MODLOG_ERROR(15, __VA_ARGS__) +#define BLE_MESH_LOW_POWER_LOG_CRITICAL(...) MODLOG_CRITICAL(15, __VA_ARGS__) +#define BLE_MESH_LOW_POWER_LOG_DISABLED(...) MODLOG_DISABLED(15, __VA_ARGS__) + +#define BLE_MESH_MODEL_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_MODEL_LOG_INFO(...) MODLOG_INFO(16, __VA_ARGS__) +#define BLE_MESH_MODEL_LOG_WARN(...) MODLOG_WARN(16, __VA_ARGS__) +#define BLE_MESH_MODEL_LOG_ERROR(...) MODLOG_ERROR(16, __VA_ARGS__) +#define BLE_MESH_MODEL_LOG_CRITICAL(...) MODLOG_CRITICAL(16, __VA_ARGS__) +#define BLE_MESH_MODEL_LOG_DISABLED(...) MODLOG_DISABLED(16, __VA_ARGS__) + +#define BLE_MESH_NET_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_NET_LOG_INFO(...) MODLOG_INFO(17, __VA_ARGS__) +#define BLE_MESH_NET_LOG_WARN(...) MODLOG_WARN(17, __VA_ARGS__) +#define BLE_MESH_NET_LOG_ERROR(...) MODLOG_ERROR(17, __VA_ARGS__) +#define BLE_MESH_NET_LOG_CRITICAL(...) MODLOG_CRITICAL(17, __VA_ARGS__) +#define BLE_MESH_NET_LOG_DISABLED(...) MODLOG_DISABLED(17, __VA_ARGS__) + +#define BLE_MESH_PROV_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_PROV_LOG_INFO(...) MODLOG_INFO(18, __VA_ARGS__) +#define BLE_MESH_PROV_LOG_WARN(...) MODLOG_WARN(18, __VA_ARGS__) +#define BLE_MESH_PROV_LOG_ERROR(...) MODLOG_ERROR(18, __VA_ARGS__) +#define BLE_MESH_PROV_LOG_CRITICAL(...) MODLOG_CRITICAL(18, __VA_ARGS__) +#define BLE_MESH_PROV_LOG_DISABLED(...) MODLOG_DISABLED(18, __VA_ARGS__) + +#define BLE_MESH_PROXY_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_PROXY_LOG_INFO(...) MODLOG_INFO(19, __VA_ARGS__) +#define BLE_MESH_PROXY_LOG_WARN(...) MODLOG_WARN(19, __VA_ARGS__) +#define BLE_MESH_PROXY_LOG_ERROR(...) MODLOG_ERROR(19, __VA_ARGS__) +#define BLE_MESH_PROXY_LOG_CRITICAL(...) MODLOG_CRITICAL(19, __VA_ARGS__) +#define BLE_MESH_PROXY_LOG_DISABLED(...) MODLOG_DISABLED(19, __VA_ARGS__) + +#define BLE_MESH_SETTINGS_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_SETTINGS_LOG_INFO(...) MODLOG_INFO(20, __VA_ARGS__) +#define BLE_MESH_SETTINGS_LOG_WARN(...) MODLOG_WARN(20, __VA_ARGS__) +#define BLE_MESH_SETTINGS_LOG_ERROR(...) MODLOG_ERROR(20, __VA_ARGS__) +#define BLE_MESH_SETTINGS_LOG_CRITICAL(...) MODLOG_CRITICAL(20, __VA_ARGS__) +#define BLE_MESH_SETTINGS_LOG_DISABLED(...) MODLOG_DISABLED(20, __VA_ARGS__) + +#define BLE_MESH_TRANS_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define BLE_MESH_TRANS_LOG_INFO(...) MODLOG_INFO(21, __VA_ARGS__) +#define BLE_MESH_TRANS_LOG_WARN(...) MODLOG_WARN(21, __VA_ARGS__) +#define BLE_MESH_TRANS_LOG_ERROR(...) MODLOG_ERROR(21, __VA_ARGS__) +#define BLE_MESH_TRANS_LOG_CRITICAL(...) MODLOG_CRITICAL(21, __VA_ARGS__) +#define BLE_MESH_TRANS_LOG_DISABLED(...) MODLOG_DISABLED(21, __VA_ARGS__) +#define DFLT_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define DFLT_LOG_INFO(...) MODLOG_INFO(0, __VA_ARGS__) +#define DFLT_LOG_WARN(...) MODLOG_WARN(0, __VA_ARGS__) +#define DFLT_LOG_ERROR(...) MODLOG_ERROR(0, __VA_ARGS__) +#define DFLT_LOG_CRITICAL(...) MODLOG_CRITICAL(0, __VA_ARGS__) +#define DFLT_LOG_DISABLED(...) MODLOG_DISABLED(0, __VA_ARGS__) + +#define MFG_LOG_DEBUG(...) IGNORE(__VA_ARGS__) +#define MFG_LOG_INFO(...) IGNORE(__VA_ARGS__) +#define MFG_LOG_WARN(...) IGNORE(__VA_ARGS__) +#define MFG_LOG_ERROR(...) IGNORE(__VA_ARGS__) +#define MFG_LOG_CRITICAL(...) IGNORE(__VA_ARGS__) +#define MFG_LOG_DISABLED(...) MODLOG_DISABLED(128, __VA_ARGS__) + +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/access.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/access.h index 71ca34e2d..1f99f412e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/access.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/access.h @@ -29,6 +29,12 @@ extern "C" { #define BT_MESH_KEY_UNUSED 0xffff #define BT_MESH_KEY_DEV 0xfffe +#define BT_MESH_KEY_DEV_LOCAL BT_MESH_KEY_DEV +#define BT_MESH_KEY_DEV_REMOTE 0xfffd +#define BT_MESH_KEY_DEV_ANY 0xfffc + +#define BT_MESH_IS_DEV_KEY(key) (key == BT_MESH_KEY_DEV_LOCAL || \ + key == BT_MESH_KEY_DEV_REMOTE) /** Helper to define a mesh element within an array. * @@ -137,11 +143,14 @@ struct bt_mesh_msg_ctx { /** Destination address of a received message. Not used for sending. */ u16_t recv_dst; + /** RSSI of received packet. Not used for sending. */ + s8_t recv_rssi; + /** Received TTL value. Not used for sending. */ - u8_t recv_ttl:7; + u8_t recv_ttl; /** Force sending reliably by using segment acknowledgement */ - u8_t send_rel:1; + bool send_rel; /** TTL, or BT_MESH_TTL_DEFAULT for default TTL. */ u8_t send_ttl; @@ -171,7 +180,66 @@ struct bt_mesh_model_op { /** Helper to define an empty model array */ #define BT_MESH_MODEL_NONE ((struct bt_mesh_model []){}) -#define BT_MESH_MODEL(_id, _op, _pub, _user_data) \ +/** Length of a short Mesh MIC. */ +#define BT_MESH_MIC_SHORT 4 +/** Length of a long Mesh MIC. */ +#define BT_MESH_MIC_LONG 8 + +/** @def BT_MESH_MODEL_OP_LEN + * + * @brief Helper to determine the length of an opcode. + * + * @param _op Opcode. + */ +#define BT_MESH_MODEL_OP_LEN(_op) ((_op) <= 0xff ? 1 : (_op) <= 0xffff ? 2 : 3) + +/** @def BT_MESH_MODEL_BUF_LEN + * + * @brief Helper for model message buffer length. + * + * Returns the length of a Mesh model message buffer, including the opcode + * length and a short MIC. + * + * @param _op Opcode of the message. + * @param _payload_len Length of the model payload. + */ +#define BT_MESH_MODEL_BUF_LEN(_op, _payload_len) \ + (BT_MESH_MODEL_OP_LEN(_op) + (_payload_len) + BT_MESH_MIC_SHORT) + +/** @def BT_MESH_MODEL_BUF_LEN_LONG_MIC + * + * @brief Helper for model message buffer length. + * + * Returns the length of a Mesh model message buffer, including the opcode + * length and a long MIC. + * + * @param _op Opcode of the message. + * @param _payload_len Length of the model payload. + */ +#define BT_MESH_MODEL_BUF_LEN_LONG_MIC(_op, _payload_len) \ + (BT_MESH_MODEL_OP_LEN(_op) + (_payload_len) + BT_MESH_MIC_LONG) + +/** @def BT_MESH_MODEL_BUF_DEFINE + * + * @brief Define a Mesh model message buffer using @ref NET_BUF_SIMPLE. + * + * @param _op Opcode of the message. + * @param _payload_len Length of the model message payload. + */ +#define BT_MESH_MODEL_BUF(_op, _payload_len) \ + NET_BUF_SIMPLE(BT_MESH_MODEL_BUF_LEN(_op, (_payload_len))) + +/** @def BT_MESH_MODEL_CB + * + * @brief Composition data SIG model entry with callback functions. + * + * @param _id Model ID. + * @param _op Array of model opcode handlers. + * @param _pub Model publish parameters. + * @param _user_data User data for the model. + * @param _cb Callback structure, or NULL to keep no callbacks. + */ +#define BT_MESH_MODEL_CB(_id, _op, _pub, _user_data, _cb) \ { \ .id = (_id), \ .op = _op, \ @@ -181,9 +249,21 @@ struct bt_mesh_model_op { .groups = { [0 ... (CONFIG_BT_MESH_MODEL_GROUP_COUNT - 1)] = \ BT_MESH_ADDR_UNASSIGNED }, \ .user_data = _user_data, \ + .cb = _cb, \ } -#define BT_MESH_MODEL_VND(_company, _id, _op, _pub, _user_data) \ +/** @def BT_MESH_MODEL_VND_CB + * + * @brief Composition data vendor model entry with callback functions. + * + * @param _company Company ID. + * @param _id Model ID. + * @param _op Array of model opcode handlers. + * @param _pub Model publish parameters. + * @param _user_data User data for the model. + * @param _cb Callback structure, or NULL to keep no callbacks. + */ +#define BT_MESH_MODEL_VND_CB(_company, _id, _op, _pub, _user_data, _cb) \ { \ .vnd.company = (_company), \ .vnd.id = (_id), \ @@ -194,8 +274,35 @@ struct bt_mesh_model_op { .groups = { [0 ... (CONFIG_BT_MESH_MODEL_GROUP_COUNT - 1)] = \ BT_MESH_ADDR_UNASSIGNED }, \ .user_data = _user_data, \ + .cb = _cb, \ } + +/** @def BT_MESH_MODEL + * + * @brief Composition data SIG model entry. + * + * @param _id Model ID. + * @param _op Array of model opcode handlers. + * @param _pub Model publish parameters. + * @param _user_data User data for the model. + */ +#define BT_MESH_MODEL(_id, _op, _pub, _user_data) \ + BT_MESH_MODEL_CB(_id, _op, _pub, _user_data, NULL) + +/** @def BT_MESH_MODEL_VND + * + * @brief Composition data vendor model entry. + * + * @param _company Company ID. + * @param _id Model ID. + * @param _op Array of model opcode handlers. + * @param _pub Model publish parameters. + * @param _user_data User data for the model. + */ +#define BT_MESH_MODEL_VND(_company, _id, _op, _pub, _user_data) \ + BT_MESH_MODEL_VND_CB(_company, _id, _op, _pub, _user_data, NULL) + /** @def BT_MESH_TRANSMIT * * @brief Encode transmission count & interval steps. @@ -276,6 +383,7 @@ struct bt_mesh_model_pub { u8_t period; /**< Publish Period. */ u8_t period_div:4, /**< Divisor for the Period. */ cred:1, /**< Friendship Credentials Flag. */ + fast_period:1,/**< Use FastPeriodDivisor */ count:3; /**< Retransmissions left. */ u32_t period_start; /**< Start of the current period. */ @@ -317,6 +425,52 @@ struct bt_mesh_model_pub { struct k_delayed_work timer; }; +/** Model callback functions. */ +struct bt_mesh_model_cb { + /** @brief Set value handler of user data tied to the model. + * + * @sa settings_handler::h_set + * + * @param model Model to set the persistent data of. + * @param val Data from the backend. + * + * @return 0 on success, error otherwise. + */ + int (*const settings_set)(struct bt_mesh_model *model, char *val); + + /** @brief Callback called when all settings have been loaded. + * + * This handler gets called after the settings have been loaded in + * full. + * + * @sa settings_handler::h_commit + * + * @param model Model this callback belongs to. + * + * @return 0 on success, error otherwise. + */ + int (*const settings_commit)(struct bt_mesh_model *model); + + /** @brief Model init callback. + * + * Called on every model instance during mesh initialization. + * + * @param model Model to be initialized. + * + * @return 0 on success, error otherwise. + */ + int (*const init)(struct bt_mesh_model *model); + + /** @brief Model reset callback. + * + * Called when the mesh node is reset. All model data is deleted on + * reset, and the model should clear its state. + * + * @param model Model this callback belongs to. + */ + void (*const reset)(struct bt_mesh_model *model); +}; + /** Abstraction that describes a Mesh Model instance */ struct bt_mesh_model { union { @@ -330,7 +484,7 @@ struct bt_mesh_model { /* Internal information, mainly for persistent storage */ u8_t elem_idx; /* Belongs to Nth element */ u8_t mod_idx; /* Is the Nth model in the element */ - u16_t flags; /* Information about what has changed */ + u16_t flags; /* Model flags for internal bookkeeping */ /* Model Publication */ struct bt_mesh_model_pub * const pub; @@ -343,6 +497,15 @@ struct bt_mesh_model { const struct bt_mesh_model_op * const op; + /* Model callback structure. */ + const struct bt_mesh_model_cb * const cb; + +#if MYNEWT_VAL(BLE_MESH_MODEL_EXTENSIONS) + /* Pointer to the next model in a model extension tree. */ + struct bt_mesh_model *next; + /* Pointer to the first model this model extends. */ + struct bt_mesh_model *extends; +#endif /* Model-specific user data */ void *user_data; }; @@ -402,6 +565,76 @@ int bt_mesh_model_publish(struct bt_mesh_model *model); */ struct bt_mesh_elem *bt_mesh_model_elem(struct bt_mesh_model *mod); +/** @brief Find a SIG model. + * + * @param elem Element to search for the model in. + * @param id Model ID of the model. + * + * @return A pointer to the Mesh model matching the given parameters, or NULL + * if no SIG model with the given ID exists in the given element. + */ +struct bt_mesh_model *bt_mesh_model_find(const struct bt_mesh_elem *elem, + u16_t id); + +/** @brief Find a vendor model. + * + * @param elem Element to search for the model in. + * @param company Company ID of the model. + * @param id Model ID of the model. + * + * @return A pointer to the Mesh model matching the given parameters, or NULL + * if no vendor model with the given ID exists in the given element. + */ +struct bt_mesh_model *bt_mesh_model_find_vnd(const struct bt_mesh_elem *elem, + u16_t company, u16_t id); + +/** @brief Get whether the model is in the primary element of the device. + * + * @param mod Mesh model. + * + * @return true if the model is on the primary element, false otherwise. + */ +static inline bool bt_mesh_model_in_primary(const struct bt_mesh_model *mod) +{ + return (mod->elem_idx == 0); +} + +/** @brief Immediately store the model's user data in persistent storage. + * + * @param mod Mesh model. + * @param vnd This is a vendor model. + * @param data Model data to store, or NULL to delete any model data. + * @param data_len Length of the model data. + * + * @return 0 on success, or (negative) error code on failure. + */ +int bt_mesh_model_data_store(struct bt_mesh_model *mod, bool vnd, + const void *data, size_t data_len); + +/** @brief Let a model extend another. + * + * Mesh models may be extended to reuse their functionality, forming a more + * complex model. A Mesh model may extend any number of models, in any element. + * The extensions may also be nested, ie a model that extends another may itself + * be extended. Extensions may not be cyclical, and a model can only be extended + * by one other model. + * + * A set of models that extend each other form a model extension tree. + * + * All models in an extension tree share one subscription list per element. The + * access layer will utilize the combined subscription list of all models in an + * extension tree and element, giving the models extended subscription list + * capacity. + * + * @param[in] mod Mesh model. + * @param[in] base_mod The model being extended. + * + * @retval 0 Successfully extended the base_mod model. + * @retval -EALREADY The base_mod model is already extended. + */ +int bt_mesh_model_extend(struct bt_mesh_model *mod, + struct bt_mesh_model *base_mod); + /** Node Composition */ struct bt_mesh_comp { u16_t cid; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_cli.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_cli.h index 9d80ccda7..7dc237beb 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_cli.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_cli.h @@ -31,10 +31,11 @@ struct bt_mesh_cfg_cli { }; extern const struct bt_mesh_model_op bt_mesh_cfg_cli_op[]; +extern const struct bt_mesh_model_cb bt_mesh_cfg_cli_cb; -#define BT_MESH_MODEL_CFG_CLI(cli_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_CFG_CLI, \ - bt_mesh_cfg_cli_op, NULL, cli_data) +#define BT_MESH_MODEL_CFG_CLI(cli_data) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_CFG_CLI, bt_mesh_cfg_cli_op, NULL, \ + cli_data, &bt_mesh_cfg_cli_cb) int bt_mesh_cfg_comp_data_get(u16_t net_idx, u16_t addr, u8_t page, u8_t *status, struct os_mbuf *comp); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_srv.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_srv.h index cb5d25e69..14d8a2956 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_srv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/cfg_srv.h @@ -61,10 +61,11 @@ struct bt_mesh_cfg_srv { }; extern const struct bt_mesh_model_op bt_mesh_cfg_srv_op[]; +extern const struct bt_mesh_model_cb bt_mesh_cfg_srv_cb; -#define BT_MESH_MODEL_CFG_SRV(srv_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_CFG_SRV, \ - bt_mesh_cfg_srv_op, NULL, srv_data) +#define BT_MESH_MODEL_CFG_SRV(srv_data) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_CFG_SRV, bt_mesh_cfg_srv_op, NULL, \ + srv_data, &bt_mesh_cfg_srv_cb) #ifdef __cplusplus } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/glue.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/glue.h index d6aee21f9..388ecba39 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/glue.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/glue.h @@ -24,6 +24,8 @@ #include #include "syscfg/syscfg.h" +#include "logcfg/logcfg.h" +#include "modlog/modlog.h" #include "nimble/nimble_npl.h" #include "os/os_mbuf.h" @@ -179,13 +181,19 @@ extern "C" { #define BT_GAP_ADV_SLOW_INT_MIN 0x0640 /* 1 s */ #define BT_GAP_ADV_SLOW_INT_MAX 0x0780 /* 1.2 s */ -#define BT_DBG(fmt, ...) \ - if (BT_DBG_ENABLED) { \ - BLE_HS_LOG(DEBUG, "%s: " fmt "\n", __func__, ## __VA_ARGS__); \ - } -#define BT_INFO(fmt, ...) BLE_HS_LOG(INFO, "%s: " fmt "\n", __func__, ## __VA_ARGS__); -#define BT_WARN(fmt, ...) BLE_HS_LOG(WARN, "%s: " fmt "\n", __func__, ## __VA_ARGS__); -#define BT_ERR(fmt, ...) BLE_HS_LOG(ERROR, "%s: " fmt "\n", __func__, ## __VA_ARGS__); +#ifndef MESH_LOG_MODULE +#define MESH_LOG_MODULE BLE_MESH_LOG +#endif + +#define CAT(a, ...) PRIMITIVE_CAT(a, __VA_ARGS__) +#define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__ + +#define BLE_MESH_LOG(lvl, ...) CAT(MESH_LOG_MODULE, CAT(_, lvl))(__VA_ARGS__) + +#define BT_DBG(fmt, ...) BLE_MESH_LOG(DEBUG, "%s: " fmt "\n", __func__, ## __VA_ARGS__); +#define BT_INFO(fmt, ...) BLE_MESH_LOG(INFO, "%s: " fmt "\n", __func__, ## __VA_ARGS__); +#define BT_WARN(fmt, ...) BLE_MESH_LOG(WARN, "%s: " fmt "\n", __func__, ## __VA_ARGS__); +#define BT_ERR(fmt, ...) BLE_MESH_LOG(ERROR, "%s: " fmt "\n", __func__, ## __VA_ARGS__); #define BT_GATT_ERR(_att_err) (-(_att_err)) typedef ble_addr_t bt_addr_le_t; @@ -217,6 +225,20 @@ static inline struct os_mbuf * NET_BUF_SIMPLE(uint16_t size) #define K_NO_WAIT (0) #define K_FOREVER (-1) +#if MYNEWT_VAL(BLE_EXT_ADV) +#define BT_MESH_ADV_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES)) + +#if MYNEWT_VAL(BLE_MESH_PROXY) +/* Note that BLE_MULTI_ADV_INSTANCES contains number of additional instances. + * Instance 0 is always there + */ +#if MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) < 1 +#error "Mesh needs at least BLE_MULTI_ADV_INSTANCES set to 1" +#endif +#define BT_MESH_ADV_GATT_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) - 1) +#endif /* BLE_MESH_PROXY */ +#endif /* BLE_EXT_ADV */ + /* This is by purpose */ static inline void net_buf_simple_init(struct os_mbuf *buf, size_t reserve_head) @@ -260,6 +282,11 @@ void net_buf_reserve(struct os_mbuf *om, size_t reserve); #define net_buf_clone(a, b) os_mbuf_dup(a) #define net_buf_add_be32(a, b) net_buf_simple_add_be32(a, b) #define net_buf_add_be16(a, b) net_buf_simple_add_be16(a, b) +#define net_buf_pull(a, b) net_buf_simple_pull(a, b) +#define net_buf_pull_mem(a, b) net_buf_simple_pull_mem(a, b) +#define net_buf_pull_u8(a) net_buf_simple_pull_u8(a) +#define net_buf_pull_be16(a) net_buf_simple_pull_be16(a) +#define net_buf_skip(a, b) net_buf_simple_pull_mem(a, b) #define BT_GATT_CCC_NOTIFY BLE_GATT_CHR_PROP_NOTIFY @@ -370,9 +397,11 @@ static inline unsigned int find_msb_set(u32_t op) #define CONFIG_BT_MESH_PB_ADV BLE_MESH_PB_ADV #define CONFIG_BT_MESH_PB_GATT BLE_MESH_PB_GATT #define CONFIG_BT_MESH_PROV BLE_MESH_PROV +#define CONFIG_BT_MESH_PROXY BLE_MESH_PROXY #define CONFIG_BT_TESTING BLE_MESH_TESTING #define CONFIG_BT_SETTINGS BLE_MESH_SETTINGS #define CONFIG_SETTINGS BLE_MESH_SETTINGS +#define CONFIG_BT_MESH_PROVISIONER BLE_MESH_PROVISIONER /* Above flags are used with IS_ENABLED macro */ #define IS_ENABLED(config) MYNEWT_VAL(config) @@ -394,6 +423,8 @@ static inline unsigned int find_msb_set(u32_t op) #define CONFIG_BT_MESH_IVU_DIVIDER MYNEWT_VAL(BLE_MESH_IVU_DIVIDER) #define CONFIG_BT_DEVICE_NAME MYNEWT_VAL(BLE_MESH_DEVICE_NAME) #define CONFIG_BT_MESH_TX_SEG_MAX MYNEWT_VAL(BLE_MESH_TX_SEG_MAX) +#define CONFIG_BT_MESH_LABEL_COUNT MYNEWT_VAL(BLE_MESH_LABEL_COUNT) +#define CONFIG_BT_MESH_NODE_COUNT MYNEWT_VAL(BLE_MESH_NODE_COUNT) #define printk console_printf @@ -459,7 +490,8 @@ void net_buf_slist_merge_slist(struct net_buf_slist_t *list, #define settings_load conf_load int settings_bytes_from_str(char *val_str, void *vp, int *len); -char *settings_str_from_bytes(void *vp, int vp_len, char *buf, int buf_len); +char *settings_str_from_bytes(const void *vp, int vp_len, + char *buf, int buf_len); #define snprintk snprintf #define BT_SETTINGS_SIZE(in_size) ((((((in_size) - 1) / 3) * 4) + 4) + 1) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_cli.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_cli.h index 719d621e0..8ab8d6d5b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_cli.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_cli.h @@ -35,10 +35,11 @@ struct bt_mesh_health_cli { }; extern const struct bt_mesh_model_op bt_mesh_health_cli_op[]; +extern const struct bt_mesh_model_cb bt_mesh_health_cli_cb; -#define BT_MESH_MODEL_HEALTH_CLI(cli_data) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_HEALTH_CLI, \ - bt_mesh_health_cli_op, NULL, cli_data) +#define BT_MESH_MODEL_HEALTH_CLI(cli_data) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_HEALTH_CLI, bt_mesh_health_cli_op, \ + NULL, cli_data, &bt_mesh_health_cli_cb) int bt_mesh_health_cli_set(struct bt_mesh_model *model); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_srv.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_srv.h index 0638c982a..83982376f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_srv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/health_srv.h @@ -71,6 +71,7 @@ struct bt_mesh_health_srv { int bt_mesh_fault_update(struct bt_mesh_elem *elem); extern const struct bt_mesh_model_op bt_mesh_health_srv_op[]; +extern const struct bt_mesh_model_cb bt_mesh_health_srv_cb; /** @def BT_MESH_MODEL_HEALTH_SRV * @@ -84,9 +85,9 @@ extern const struct bt_mesh_model_op bt_mesh_health_srv_op[]; * * @return New mesh model instance. */ -#define BT_MESH_MODEL_HEALTH_SRV(srv, pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_HEALTH_SRV, \ - bt_mesh_health_srv_op, pub, srv) +#define BT_MESH_MODEL_HEALTH_SRV(srv, pub) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_HEALTH_SRV, bt_mesh_health_srv_op, \ + pub, srv, &bt_mesh_health_srv_cb) #ifdef __cplusplus } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/main.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/main.h index 515d1d527..4a5bedba1 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/main.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/main.h @@ -128,6 +128,28 @@ struct bt_mesh_prov { */ int (*input)(bt_mesh_input_action_t act, u8_t size); + /** @brief The other device finished their OOB input. + * + * This callback notifies the application that it should stop + * displaying its output OOB value, as the other party finished their + * OOB input. + */ + void (*input_complete)(void); + + /** @brief Unprovisioned beacon has been received. + * + * This callback notifies the application that an unprovisioned + * beacon has been received. + * + * @param uuid UUID + * @param oob_info OOB Information + * @param uri_hash Pointer to URI Hash value. NULL if no hash was + * present in the beacon. + */ + void (*unprovisioned_beacon)(u8_t uuid[16], + bt_mesh_prov_oob_info_t oob_info, + u32_t *uri_hash); + /** @brief Provisioning link has been opened. * * This callback notifies the application that a provisioning @@ -157,6 +179,18 @@ struct bt_mesh_prov { */ void (*complete)(u16_t net_idx, u16_t addr); + /** @brief A new node has been added to the provisioning database. + * + * This callback notifies the application that provisioning has + * been successfully completed, and that a node has been assigned + * the specified NetKeyIndex and primary element address. + * + * @param net_idx NetKeyIndex given during provisioning. + * @param addr Primary element address. + * @param num_elem Number of elements that this node has. + */ + void (*node_added)(u16_t net_idx, u16_t addr, u8_t num_elem); + /** @brief Node has been reset. * * This callback notifies the application that the local node @@ -321,6 +355,19 @@ int bt_mesh_provision(const u8_t net_key[16], u16_t net_idx, u8_t flags, u32_t iv_index, u16_t addr, const u8_t dev_key[16]); +/** @brief Provision a Mesh Node using PB-ADV + * + * @param uuid UUID + * @param net_idx Network Key Index + * @param addr Address to assign to remote device. If addr is 0, the lowest + * available address will be chosen. + * @param attention_duration The attention duration to be send to remote device + * + * @return Zero on success or (negative) error code otherwise. + */ +int bt_mesh_provision_adv(const u8_t uuid[16], u16_t net_idx, u16_t addr, + u8_t attention_duration); + /** @brief Check if the local node has been provisioned. * * This API can be used to check if the local node has been provisioned diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_cli.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_cli.h index 33fbd6e9d..f2e77a47f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_cli.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_cli.h @@ -19,20 +19,19 @@ struct bt_mesh_gen_model_cli { void *op_param; }; -extern struct bt_mesh_gen_model_cli gen_onoff_cli; extern const struct bt_mesh_model_op gen_onoff_cli_op[]; +extern const struct bt_mesh_model_cb bt_mesh_gen_onoff_cli_cb; -#define BT_MESH_MODEL_GEN_ONOFF_CLI() \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_GEN_ONOFF_CLI, \ - gen_onoff_cli_op, NULL, &gen_onoff_cli) +#define BT_MESH_MODEL_GEN_ONOFF_CLI(cli_data, pub) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_GEN_ONOFF_CLI, gen_onoff_cli_op, pub,\ + cli_data, &bt_mesh_gen_onoff_cli_cb) -extern struct bt_mesh_gen_model_cli gen_level_cli; extern const struct bt_mesh_model_op gen_level_cli_op[]; +extern const struct bt_mesh_model_cb bt_mesh_gen_level_cli_cb; -#define BT_MESH_MODEL_GEN_LEVEL_CLI(pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_GEN_LEVEL_CLI, \ - gen_level_cli_op, NULL, &gen_level_cli) - +#define BT_MESH_MODEL_GEN_LEVEL_CLI(cli_data, pub) \ + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_GEN_LEVEL_CLI, gen_level_cli_op, pub,\ + cli_data, &bt_mesh_gen_level_cli_cb) int bt_mesh_gen_onoff_get(u16_t net_idx, u16_t addr, u16_t app_idx, u8_t *state); @@ -42,7 +41,6 @@ int bt_mesh_gen_level_get(u16_t net_idx, u16_t addr, u16_t app_idx, s16_t *level); int bt_mesh_gen_level_set(u16_t net_idx, u16_t addr, u16_t app_idx, s16_t val, s16_t *state); -int bt_mesh_gen_model_cli_init(struct bt_mesh_model *model, bool primary); #ifdef __cplusplus } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_srv.h b/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_srv.h index c4f4033df..e498ad346 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_srv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/mesh/model_srv.h @@ -11,43 +11,54 @@ extern "C" { #endif -struct bt_mesh_gen_onoff_srv_cb { +struct bt_mesh_gen_onoff_srv { + struct bt_mesh_model *model; + int (*get)(struct bt_mesh_model *model, u8_t *state); int (*set)(struct bt_mesh_model *model, u8_t state); }; extern const struct bt_mesh_model_op gen_onoff_srv_op[]; +extern const struct bt_mesh_model_cb gen_onoff_srv_cb; #define BT_MESH_MODEL_GEN_ONOFF_SRV(srv, pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_GEN_ONOFF_SRV, \ - gen_onoff_srv_op, pub, srv) + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_GEN_ONOFF_SRV, \ + gen_onoff_srv_op, pub, srv, &gen_onoff_srv_cb) + +struct bt_mesh_gen_level_srv { + struct bt_mesh_model *model; -struct bt_mesh_gen_level_srv_cb { int (*get)(struct bt_mesh_model *model, s16_t *level); int (*set)(struct bt_mesh_model *model, s16_t level); }; extern const struct bt_mesh_model_op gen_level_srv_op[]; +extern const struct bt_mesh_model_cb gen_level_srv_cb; #define BT_MESH_MODEL_GEN_LEVEL_SRV(srv, pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_GEN_LEVEL_SRV, \ - gen_level_srv_op, pub, srv) + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_GEN_LEVEL_SRV, \ + gen_level_srv_op, pub, srv, &gen_level_srv_cb) + +struct bt_mesh_light_lightness_srv { + struct bt_mesh_model *model; -struct bt_mesh_light_lightness_srv_cb { int (*get)(struct bt_mesh_model *model, s16_t *level); int (*set)(struct bt_mesh_model *model, s16_t level); }; extern const struct bt_mesh_model_op light_lightness_srv_op[]; +extern const struct bt_mesh_model_cb light_lightness_srv_cb; #define BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV(srv, pub) \ - BT_MESH_MODEL(BT_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, \ - light_lightness_srv_op, pub, srv) + BT_MESH_MODEL_CB(BT_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, \ + light_lightness_srv_op, pub, srv, &light_lightness_srv_cb) - -void bt_mesh_set_gen_onoff_srv_cb(struct bt_mesh_gen_onoff_srv_cb *gen_onoff_cb); -void bt_mesh_set_gen_level_srv_cb(struct bt_mesh_gen_level_srv_cb *gen_level_cb); -void bt_mesh_set_light_lightness_srv_cb(struct bt_mesh_light_lightness_srv_cb *light_lightness_cb); +void bt_mesh_set_gen_onoff_srv_cb(int (*get)(struct bt_mesh_model *model, u8_t *state), + int (*set)(struct bt_mesh_model *model, u8_t state)); +void bt_mesh_set_gen_level_srv_cb(int (*get)(struct bt_mesh_model *model, s16_t *level), + int (*set)(struct bt_mesh_model *model, s16_t level)); +void bt_mesh_set_light_lightness_srv_cb(int (*get)(struct bt_mesh_model *model, s16_t *level), + int (*set)(struct bt_mesh_model *model, s16_t level)); #ifdef __cplusplus } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/ble.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/ble.h index 1d726958d..3fc2902ec 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/ble.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/ble.h @@ -73,13 +73,19 @@ struct ble_mbuf_hdr_rxinfo /* XXX: we could just use single phy_mode field */ int8_t phy; uint8_t phy_mode; +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) + int8_t rpa_index; +#endif #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) void *user_data; #endif }; /* Flag definitions for rxinfo */ +#define BLE_MBUF_HDR_F_IGNORED (0x8000) +#define BLE_MBUF_HDR_F_SCAN_REQ_TXD (0x4000) #define BLE_MBUF_HDR_F_INITA_RESOLVED (0x2000) +#define BLE_MBUF_HDR_F_TARGETA_RESOLVED (0x2000) #define BLE_MBUF_HDR_F_EXT_ADV_SEC (0x1000) #define BLE_MBUF_HDR_F_EXT_ADV (0x0800) #define BLE_MBUF_HDR_F_RESOLVED (0x0400) @@ -89,7 +95,7 @@ struct ble_mbuf_hdr_rxinfo #define BLE_MBUF_HDR_F_DEVMATCH (0x0040) #define BLE_MBUF_HDR_F_MIC_FAILURE (0x0020) #define BLE_MBUF_HDR_F_SCAN_RSP_TXD (0x0010) -#define BLE_MBUF_HDR_F_SCAN_RSP_CHK (0x0008) +#define BLE_MBUF_HDR_F_SCAN_RSP_RXD (0x0008) #define BLE_MBUF_HDR_F_RXSTATE_MASK (0x0007) /* Transmit info. NOTE: no flags defined */ @@ -111,6 +117,12 @@ struct ble_mbuf_hdr uint32_t rem_usecs; }; +#define BLE_MBUF_HDR_IGNORED(hdr) \ + (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_IGNORED)) + +#define BLE_MBUF_HDR_SCAN_REQ_TXD(hdr) \ + (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_REQ_TXD)) + #define BLE_MBUF_HDR_EXT_ADV_SEC(hdr) \ (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_EXT_ADV_SEC)) @@ -120,8 +132,8 @@ struct ble_mbuf_hdr #define BLE_MBUF_HDR_DEVMATCH(hdr) \ (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_DEVMATCH)) -#define BLE_MBUF_HDR_SCAN_RSP_RCV(hdr) \ - (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_RSP_CHK)) +#define BLE_MBUF_HDR_SCAN_RSP_RXD(hdr) \ + (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_SCAN_RSP_RXD)) #define BLE_MBUF_HDR_AUX_INVALID(hdr) \ (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_AUX_INVALID)) @@ -141,6 +153,9 @@ struct ble_mbuf_hdr #define BLE_MBUF_HDR_INITA_RESOLVED(hdr) \ (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_INITA_RESOLVED)) +#define BLE_MBUF_HDR_TARGETA_RESOLVED(hdr) \ + (!!((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_TARGETA_RESOLVED)) + #define BLE_MBUF_HDR_RX_STATE(hdr) \ ((uint8_t)((hdr)->rxinfo.flags & BLE_MBUF_HDR_F_RXSTATE_MASK)) @@ -235,11 +250,10 @@ enum ble_error_codes BLE_ERR_UNK_ADV_INDENT = 0x42, BLE_ERR_LIMIT_REACHED = 0x43, BLE_ERR_OPERATION_CANCELLED = 0x44, + BLE_ERR_PACKET_TOO_LONG = 0x45, BLE_ERR_MAX = 0xff }; -int ble_err_from_os(int os_err); - /* HW error codes */ #define BLE_HW_ERR_DO_NOT_USE (0) /* XXX: reserve this one for now */ #define BLE_HW_ERR_HCI_SYNC_LOSS (1) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/hci_common.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/hci_common.h index 1b049c88b..10b42e71d 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/hci_common.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/hci_common.h @@ -26,16 +26,22 @@ extern "C" { #endif -/* - * HCI Command Header - * - * Comprises the following fields - * -> Opcode group field & Opcode command field (2) - * -> Parameter Length (1) - * Length of all the parameters (does not include any part of the hci - * command header - */ -#define BLE_HCI_CMD_HDR_LEN (3) +#define BLE_HCI_MAX_DATA_LEN (MYNEWT_VAL(BLE_HCI_EVT_BUF_SIZE) - \ + sizeof(struct ble_hci_ev)) + +/* Generic command header */ +struct ble_hci_cmd { + uint16_t opcode; + uint8_t length; + uint8_t data[0]; +} __attribute__((packed)); + +/* Generic event header */ +struct ble_hci_ev { + uint8_t opcode; + uint8_t length; + uint8_t data[0]; +} __attribute__((packed)); #define BLE_HCI_OPCODE_NOP (0) @@ -64,173 +70,775 @@ extern "C" { /* List of OCF for Link Control commands (OGF=0x01) */ #define BLE_HCI_OCF_DISCONNECT_CMD (0x0006) +struct ble_hci_lc_disconnect_cp { + uint16_t conn_handle; + uint8_t reason; +} __attribute__((packed)); + #define BLE_HCI_OCF_RD_REM_VER_INFO (0x001D) +struct ble_hci_rd_rem_ver_info_cp { + uint16_t conn_handle; +} __attribute__((packed)); /* List of OCF for Controller and Baseband commands (OGF=0x03) */ #define BLE_HCI_OCF_CB_SET_EVENT_MASK (0x0001) +struct ble_hci_cb_set_event_mask_cp { + uint64_t event_mask; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_RESET (0x0003) + #define BLE_HCI_OCF_CB_READ_TX_PWR (0x002D) +struct ble_hci_cb_read_tx_pwr_cp { + uint16_t conn_handle; + uint8_t type; +} __attribute__((packed)); + +struct ble_hci_cb_read_tx_pwr_rp { + uint16_t conn_handle; + int8_t tx_level; +} __attribute__((packed)); + + #define BLE_HCI_OCF_CB_SET_CTLR_TO_HOST_FC (0x0031) +struct ble_hci_cb_ctlr_to_host_fc_cp { + uint8_t enable; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_HOST_BUF_SIZE (0x0033) +struct ble_hci_cb_host_buf_size_cp { + uint16_t acl_data_len; + uint8_t sco_data_len; + uint16_t acl_num; + uint16_t sco_num; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_HOST_NUM_COMP_PKTS (0x0035) +struct ble_hci_cb_host_num_comp_pkts_entry { + uint16_t handle; + uint16_t count; +} __attribute__((packed)); +struct ble_hci_cb_host_num_comp_pkts_cp { + uint8_t handles; + struct ble_hci_cb_host_num_comp_pkts_entry h[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_SET_EVENT_MASK2 (0x0063) +struct ble_hci_cb_set_event_mask2_cp { + uint64_t event_mask2; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_RD_AUTH_PYLD_TMO (0x007B) +struct ble_hci_cb_rd_auth_pyld_tmo_cp { + uint16_t conn_handle; +} __attribute__((packed)); +struct ble_hci_cb_rd_auth_pyld_tmo_rp { + uint16_t conn_handle; + uint16_t tmo; +} __attribute__((packed)); + #define BLE_HCI_OCF_CB_WR_AUTH_PYLD_TMO (0x007C) +struct ble_hci_cb_wr_auth_pyld_tmo_cp { + uint16_t conn_handle; + uint16_t tmo; +} __attribute__((packed)); +struct ble_hci_cb_wr_auth_pyld_tmo_rp { + uint16_t conn_handle; +} __attribute__((packed)); /* List of OCF for Info Param commands (OGF=0x04) */ #define BLE_HCI_OCF_IP_RD_LOCAL_VER (0x0001) +struct ble_hci_ip_rd_local_ver_rp { + uint8_t hci_ver; + uint16_t hci_rev; + uint8_t lmp_ver; + uint16_t manufacturer; + uint16_t lmp_subver; +} __attribute__((packed)); + #define BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD (0x0002) +struct ble_hci_ip_rd_loc_supp_cmd_rp { + uint8_t commands[64]; +} __attribute__((packed)); + #define BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT (0x0003) +struct ble_hci_ip_rd_loc_supp_feat_rp { + uint64_t features; +} __attribute__((packed)); + #define BLE_HCI_OCF_IP_RD_BUF_SIZE (0x0005) +struct ble_hci_ip_rd_buf_size_rp { + uint16_t acl_data_len; + uint8_t sco_data_len; + uint16_t acl_num; + uint16_t sco_num; +} __attribute__((packed)); + #define BLE_HCI_OCF_IP_RD_BD_ADDR (0x0009) +struct ble_hci_ip_rd_bd_addr_rp { + uint8_t addr[6]; +} __attribute__((packed)); /* List of OCF for Status parameters commands (OGF = 0x05) */ #define BLE_HCI_OCF_RD_RSSI (0x0005) +struct ble_hci_rd_rssi_cp { + uint16_t handle; +} __attribute__((packed)); +struct ble_hci_rd_rssi_rp { + uint16_t handle; + int8_t rssi; +} __attribute__((packed)); /* List of OCF for LE commands (OGF = 0x08) */ #define BLE_HCI_OCF_LE_SET_EVENT_MASK (0x0001) +struct ble_hci_le_set_event_mask_cp { + uint64_t event_mask; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_BUF_SIZE (0x0002) +struct ble_hci_le_rd_buf_size_rp { + uint16_t data_len; + uint8_t data_packets; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT (0x0003) +struct ble_hci_le_rd_loc_supp_feat_rp { + uint64_t features; +} __attribute__((packed)); + /* NOTE: 0x0004 is intentionally left undefined */ #define BLE_HCI_OCF_LE_SET_RAND_ADDR (0x0005) +struct ble_hci_le_set_rand_addr_cp { + uint8_t addr[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_ADV_PARAMS (0x0006) +struct ble_hci_le_set_adv_params_cp { + uint16_t min_interval; + uint16_t max_interval; + uint8_t type; + uint8_t own_addr_type; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t chan_map; + uint8_t filter_policy; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR (0x0007) +struct ble_hci_le_rd_adv_chan_txpwr_rp { + int8_t power_level; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_ADV_DATA (0x0008) +#define BLE_HCI_MAX_ADV_DATA_LEN (31) +struct ble_hci_le_set_adv_data_cp { + uint8_t adv_data_len; + uint8_t adv_data[BLE_HCI_MAX_ADV_DATA_LEN]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA (0x0009) +#define BLE_HCI_MAX_SCAN_RSP_DATA_LEN (31) +struct ble_hci_le_set_scan_rsp_data_cp { + uint8_t scan_rsp_len; + uint8_t scan_rsp[BLE_HCI_MAX_SCAN_RSP_DATA_LEN]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_ADV_ENABLE (0x000A) +struct ble_hci_le_set_adv_enable_cp { + uint8_t enable; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_SCAN_PARAMS (0x000B) +struct ble_hci_le_set_scan_params_cp { + uint8_t scan_type; + uint16_t scan_itvl; + uint16_t scan_window; + uint8_t own_addr_type; + uint8_t filter_policy; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_SCAN_ENABLE (0x000C) +struct ble_hci_le_set_scan_enable_cp { + uint8_t enable; + uint8_t filter_duplicates; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CREATE_CONN (0x000D) +struct ble_hci_le_create_conn_cp { + uint16_t scan_itvl; + uint16_t scan_window; + uint8_t filter_policy; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t own_addr_type; + uint16_t min_conn_itvl; + uint16_t max_conn_itvl; + uint16_t conn_latency; + uint16_t tmo; + uint16_t min_ce; + uint16_t max_ce; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CREATE_CONN_CANCEL (0x000E) + #define BLE_HCI_OCF_LE_RD_WHITE_LIST_SIZE (0x000F) +struct ble_hci_le_rd_white_list_rp { + uint8_t size; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CLEAR_WHITE_LIST (0x0010) + #define BLE_HCI_OCF_LE_ADD_WHITE_LIST (0x0011) +struct ble_hci_le_add_whte_list_cp { + uint8_t addr_type; + uint8_t addr[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RMV_WHITE_LIST (0x0012) +struct ble_hci_le_rmv_white_list_cp { + uint8_t addr_type; + uint8_t addr[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CONN_UPDATE (0x0013) +struct ble_hci_le_conn_update_cp { + uint16_t conn_handle; + uint16_t conn_itvl_min; + uint16_t conn_itvl_max; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint16_t min_ce_len; + uint16_t max_ce_len; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS (0x0014) +struct ble_hci_le_set_host_chan_class_cp { + uint8_t chan_map[5]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_CHAN_MAP (0x0015) +struct ble_hci_le_rd_chan_map_cp { + uint16_t conn_handle; +} __attribute__((packed)); +struct ble_hci_le_rd_chan_map_rp { + uint16_t conn_handle; + uint8_t chan_map[5]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_REM_FEAT (0x0016) +struct ble_hci_le_rd_rem_feat_cp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_ENCRYPT (0x0017) +struct ble_hci_le_encrypt_cp { + uint8_t key[16]; + uint8_t data[16]; +} __attribute__((packed)); +struct ble_hci_le_encrypt_rp { + uint8_t data[16]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RAND (0x0018) +struct ble_hci_le_rand_rp { + uint64_t random_number; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_START_ENCRYPT (0x0019) +struct ble_hci_le_start_encrypt_cp { + uint16_t conn_handle; + uint64_t rand; + uint16_t div; + uint8_t ltk[16]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY (0x001A) +struct ble_hci_le_lt_key_req_reply_cp { + uint16_t conn_handle; + uint8_t ltk[16]; +} __attribute__((packed)); +struct ble_hci_le_lt_key_req_reply_rp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY (0x001B) +struct ble_hci_le_lt_key_req_neg_reply_cp { + uint16_t conn_handle; +} __attribute__((packed)); +struct ble_hci_le_lt_key_req_neg_reply_rp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_SUPP_STATES (0x001C) +struct ble_hci_le_rd_supp_states_rp { + uint64_t states; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RX_TEST (0x001D) +struct ble_hci_le_rx_test_cp { + uint8_t rx_chan; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_TX_TEST (0x001E) +struct ble_hci_le_tx_test_cp { + uint8_t tx_chan; + uint8_t test_data_len; + uint8_t payload; +} __attribute__((packed)); +#if MYNEWT_VAL(BLE_LL_DTM_EXTENSIONS) +struct ble_hci_le_tx_test_ext_cp { + uint8_t tx_chan; + uint8_t test_data_len; + uint8_t payload; + uint16_t interval; + uint16_t pkt_count; +} __attribute__((packed)); +#endif + #define BLE_HCI_OCF_LE_TEST_END (0x001F) +struct ble_hci_le_test_end_rp { + uint16_t num_packets; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_REM_CONN_PARAM_RR (0x0020) +struct ble_hci_le_rem_conn_param_rr_cp { + uint16_t conn_handle; + uint16_t conn_itvl_min; + uint16_t conn_itvl_max; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint16_t min_ce; + uint16_t max_ce; +} __attribute__((packed)); +struct ble_hci_le_rem_conn_param_rr_rp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR (0x0021) +struct ble_hci_le_rem_conn_params_nrr_cp { + uint16_t conn_handle; + uint8_t reason; +} __attribute__((packed)); +struct ble_hci_le_rem_conn_params_nrr_rp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_DATA_LEN (0x0022) +struct ble_hci_le_set_data_len_cp { + uint16_t conn_handle; + uint16_t tx_octets; + uint16_t tx_time; +} __attribute__((packed)); +struct ble_hci_le_set_data_len_rp { + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN (0x0023) +struct ble_hci_le_rd_sugg_def_data_len_rp { + uint16_t max_tx_octets; + uint16_t max_tx_time; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_WR_SUGG_DEF_DATA_LEN (0x0024) +struct ble_hci_le_wr_sugg_def_data_len_cp { + uint16_t max_tx_octets; + uint16_t max_tx_time; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_P256_PUBKEY (0x0025) + #define BLE_HCI_OCF_LE_GEN_DHKEY (0x0026) +struct ble_hci_le_gen_dhkey_cp { + uint8_t pkey[64]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_ADD_RESOLV_LIST (0x0027) +struct ble_hci_le_add_resolv_list_cp { + uint8_t peer_addr_type; + uint8_t peer_id_addr[6]; + uint8_t peer_irk[16]; + uint8_t local_irk[16]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RMV_RESOLV_LIST (0x0028) +struct ble_hci_le_rmv_resolve_list_cp { + uint8_t peer_addr_type; + uint8_t peer_id_addr[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CLR_RESOLV_LIST (0x0029) + #define BLE_HCI_OCF_LE_RD_RESOLV_LIST_SIZE (0x002A) +struct ble_hci_le_rd_resolv_list_size_rp { + uint8_t size; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_PEER_RESOLV_ADDR (0x002B) +struct ble_hci_le_rd_peer_recolv_addr_cp { + uint8_t peer_addr_type; + uint8_t peer_id_addr[6]; +} __attribute__((packed)); +struct ble_hci_le_rd_peer_recolv_addr_rp { + uint8_t rpa[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_LOCAL_RESOLV_ADDR (0x002C) +struct ble_hci_le_rd_local_recolv_addr_cp { + uint8_t peer_addr_type; + uint8_t peer_id_addr[6]; +} __attribute__((packed)); +struct ble_hci_le_rd_local_recolv_addr_rp { + uint8_t rpa[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_ADDR_RES_EN (0x002D) +struct ble_hci_le_set_addr_res_en_cp { + uint8_t enable; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_RPA_TMO (0x002E) +struct ble_hci_le_set_rpa_tmo_cp { + uint16_t rpa_timeout; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_MAX_DATA_LEN (0x002F) +struct ble_hci_le_rd_max_data_len_rp { + uint16_t max_tx_octests; + uint16_t max_tx_time; + uint16_t max_rx_octests; + uint16_t max_rx_time; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_PHY (0x0030) +struct ble_hci_le_rd_phy_cp { + uint16_t conn_handle; +} __attribute__((packed)); +struct ble_hci_le_rd_phy_rp { + uint16_t conn_handle; + uint8_t tx_phy; + uint8_t rx_phy; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_DEFAULT_PHY (0x0031) +struct ble_hci_le_set_default_phy_cp { + uint8_t all_phys; + uint8_t tx_phys; + uint8_t rx_phys; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_PHY (0x0032) -#define BLE_HCI_OCF_LE_ENH_RX_TEST (0x0033) -#define BLE_HCI_OCF_LE_ENH_TX_TEST (0x0034) +struct ble_hci_le_set_phy_cp { + uint16_t conn_handle; + uint8_t all_phys; + uint8_t tx_phys; + uint8_t rx_phys; + uint16_t phy_options; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_RX_TEST_V2 (0x0033) +struct ble_hci_le_rx_test_v2_cp { + uint8_t rx_chan; + uint8_t phy; + uint8_t index; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_TX_TEST_V2 (0x0034) +struct ble_hci_le_tx_test_v2_cp { + uint8_t tx_chan; + uint8_t test_data_len; + uint8_t payload; + uint8_t phy; +} __attribute__((packed)); +#if MYNEWT_VAL(BLE_LL_DTM_EXTENSIONS) +struct ble_hci_le_tx_test_v2_ext_cp { + uint8_t tx_chan; + uint8_t test_data_len; + uint8_t payload; + uint8_t phy; + uint16_t interval; + uint16_t pkt_count; +} __attribute__((packed)); +#endif + #define BLE_HCI_OCF_LE_SET_ADV_SET_RND_ADDR (0x0035) +struct ble_hci_le_set_adv_set_rnd_addr_cp { + uint8_t adv_handle; + uint8_t addr[6]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_ADV_PARAM (0x0036) +struct ble_hci_le_set_ext_adv_params_cp { + uint8_t adv_handle; + uint16_t props; + uint8_t pri_itvl_min[3]; + uint8_t pri_itvl_max[3]; + uint8_t pri_chan_map; + uint8_t own_addr_type; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t filter_policy; + int8_t tx_power; + uint8_t pri_phy; + uint8_t sec_max_skip; + uint8_t sec_phy; + uint8_t sid; + uint8_t scan_req_notif; +} __attribute__((packed)); +struct ble_hci_le_set_ext_adv_params_rp { + int8_t tx_power; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_ADV_DATA (0x0037) +struct ble_hci_le_set_ext_adv_data_cp { + uint8_t adv_handle; + uint8_t operation; + uint8_t fragment_pref; + uint8_t adv_data_len; + uint8_t adv_data[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_SCAN_RSP_DATA (0x0038) +struct ble_hci_le_set_ext_scan_rsp_data_cp { + uint8_t adv_handle; + uint8_t operation; + uint8_t fragment_pref; + uint8_t scan_rsp_len; + uint8_t scan_rsp[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_ADV_ENABLE (0x0039) +struct adv_set { + uint8_t adv_handle; + uint16_t duration; + uint8_t max_events; +} __attribute__((packed)); +struct ble_hci_le_set_ext_adv_enable_cp { + uint8_t enable; + uint8_t num_sets; + struct adv_set sets[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_MAX_ADV_DATA_LEN (0x003A) +struct ble_hci_le_rd_max_adv_data_len_rp { + uint16_t max_adv_data_len; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_NUM_OF_ADV_SETS (0x003B) +struct ble_hci_le_rd_num_of_adv_sets_rp { + uint8_t num_sets; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_REMOVE_ADV_SET (0x003C) +struct ble_hci_le_remove_adv_set_cp { + uint8_t adv_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CLEAR_ADV_SETS (0x003D) + #define BLE_HCI_OCF_LE_SET_PERIODIC_ADV_PARAMS (0x003E) +struct ble_hci_le_set_periodic_adv_params_cp { + uint8_t adv_handle; + uint16_t min_itvl; + uint16_t max_itvl; + uint16_t props; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_PERIODIC_ADV_DATA (0x003F) +struct ble_hci_le_set_periodic_adv_data_cp { + uint8_t adv_handle; + uint8_t operation; + uint8_t adv_data_len; + uint8_t adv_data[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_PERIODIC_ADV_ENABLE (0x0040) +struct ble_hci_le_set_periodic_adv_enable_cp { + uint8_t enable; + uint8_t adv_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_SCAN_PARAM (0x0041) +struct scan_params { + uint8_t type; + uint16_t itvl; + uint16_t window; +} __attribute__((packed)); +struct ble_hci_le_set_ext_scan_params_cp { + uint8_t own_addr_type; + uint8_t filter_policy; + uint8_t phys; + struct scan_params scans[0]; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_EXT_SCAN_ENABLE (0x0042) +struct ble_hci_le_set_ext_scan_enable_cp { + uint8_t enable; + uint8_t filter_dup; + uint16_t duration; + uint16_t period; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_EXT_CREATE_CONN (0x0043) +struct conn_params { + uint16_t scan_itvl; + uint16_t scan_window; + uint16_t conn_min_itvl; + uint16_t conn_max_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint16_t min_ce; + uint16_t max_ce; +} __attribute__((packed)); +struct ble_hci_le_ext_create_conn_cp { + uint8_t filter_policy; + uint8_t own_addr_type; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t init_phy_mask; + struct conn_params conn_params[0]; +} __attribute__((packed)); + +#define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_FILTER 0x01 +#define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_OPT_DISABLED 0x02 + #define BLE_HCI_OCF_LE_PERIODIC_ADV_CREATE_SYNC (0x0044) +struct ble_hci_le_periodic_adv_create_sync_cp { + uint8_t options; + uint8_t sid; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint16_t skip; + uint16_t sync_timeout; + uint8_t sync_cte_type; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL (0x0045) + #define BLE_HCI_OCF_LE_PERIODIC_ADV_TERM_SYNC (0x0046) +struct ble_hci_le_periodic_adv_term_sync_cp { + uint16_t sync_handle; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_ADD_DEV_TO_PERIODIC_ADV_LIST (0x0047) +struct ble_hci_le_add_dev_to_periodic_adv_list_cp { + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t sid; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_REM_DEV_FROM_PERIODIC_ADV_LIST (0x0048) +struct ble_hci_le_rem_dev_from_periodic_adv_list_cp { + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t sid; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_CLEAR_PERIODIC_ADV_LIST (0x0049) + #define BLE_HCI_OCF_LE_RD_PERIODIC_ADV_LIST_SIZE (0x004A) +struct ble_hci_le_rd_periodic_adv_list_size_rp { + uint8_t list_size; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_TRANSMIT_POWER (0x004B) +struct ble_hci_le_rd_transmit_power_rp { + int8_t min_tx_power; + int8_t max_tx_power; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_RD_RF_PATH_COMPENSATION (0x004C) +struct ble_hci_le_rd_rf_path_compensation_rp { + int16_t tx_path_compensation; + int16_t rx_path_compensation; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_WR_RF_PATH_COMPENSATION (0x004D) +struct ble_hci_le_wr_rf_path_compensation_cp { + int16_t tx_path_compensation; + int16_t rx_path_compensation; +} __attribute__((packed)); + #define BLE_HCI_OCF_LE_SET_PRIVACY_MODE (0x004E) +struct ble_hci_le_set_privacy_mode_cp { + uint8_t peer_id_addr_type; + uint8_t peer_id_addr[6]; + uint8_t mode; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_RX_TEST_V3 (0x004F) +#define BLE_HCI_OCF_LE_TX_TEST_V3 (0x0050) +#define BLE_HCI_OCF_LE_SET_CONNLESS_CTE_TX_PARAMS (0x0051) +#define BLE_HCI_OCF_LE_SET_CONNLESS_CTE_TX_ENABLE (0x0052) +#define BLE_HCI_OCF_LE_SET_CONNLESS_IQ_SAMPLING_ENABLE (0x0053) +#define BLE_HCI_OCF_LE_SET_CONN_CTE_RX_PARAMS (0x0054) +#define BLE_HCI_OCF_LE_SET_CONN_CTE_TX_PARAMS (0x0055) +#define BLE_HCI_OCF_LE_SET_CONN_CTE_REQ_ENABLE (0x0056) +#define BLE_HCI_OCF_LE_SET_CONN_CTE_RESP_ENABLE (0x0057) +#define BLE_HCI_OCF_LE_RD_ANTENNA_INFO (0x0058) + +#define BLE_HCI_OCF_LE_PERIODIC_ADV_RECEIVE_ENABLE (0x0059) +struct ble_hci_le_periodic_adv_receive_enable_cp { + uint16_t sync_handle; + uint8_t enable; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_PERIODIC_ADV_SYNC_TRANSFER (0x005A) +struct ble_hci_le_periodic_adv_sync_transfer_cp { + uint16_t conn_handle; + uint16_t service_data; + uint16_t sync_handle; +} __attribute__((packed)); +struct ble_hci_le_periodic_adv_sync_transfer_rp { + uint16_t conn_handle; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_PERIODIC_ADV_SET_INFO_TRANSFER (0x005B) +struct ble_hci_le_periodic_adv_set_info_transfer_cp { + uint16_t conn_handle; + uint16_t service_data; + uint8_t adv_handle; +} __attribute__((packed)); +struct ble_hci_le_periodic_adv_set_info_transfer_rp { + uint16_t conn_handle; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_PERIODIC_ADV_SYNC_TRANSFER_PARAMS (0x005C) +struct ble_hci_le_periodic_adv_sync_transfer_params_cp { + uint16_t conn_handle; + uint8_t mode; + uint16_t skip; + uint16_t sync_timeout; + uint8_t sync_cte_type; +} __attribute__((packed)); +struct ble_hci_le_periodic_adv_sync_transfer_params_rp { + uint16_t conn_handle; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_SET_DEFAULT_SYNC_TRANSFER_PARAMS (0x005D) +struct ble_hci_le_set_default_periodic_sync_transfer_params_cp { + uint8_t mode; + uint16_t skip; + uint16_t sync_timeout; + uint8_t sync_cte_type; +} __attribute__((packed)); + +#define BLE_HCI_OCF_LE_GENERATE_DHKEY_V2 (0x005E) +#define BLE_HCI_OCF_LE_MODIFY_SCA (0x005F) + +#define BLE_HCI_OCF_LE_SET_HOST_FEAT (0x0074) +struct ble_hci_le_set_host_feat_cp { + uint8_t bit_num; + uint8_t val; +} __attribute__((packed)); /* Command Specific Definitions */ -#define BLE_HCI_VARIABLE_LEN (0xFF) - -/* --- Disconnect command (OGF 0x01, OCF 0x0006) --- */ -#define BLE_HCI_DISCONNECT_CMD_LEN (3) - -/* --- Set event mask (OGF 0x03, OCF 0x0001 --- */ -#define BLE_HCI_SET_EVENT_MASK_LEN (8) - /* --- Set controller to host flow control (OGF 0x03, OCF 0x0031) --- */ -#define BLE_HCI_CTLR_TO_HOST_FC_LEN (1) - #define BLE_HCI_CTLR_TO_HOST_FC_OFF (0) #define BLE_HCI_CTLR_TO_HOST_FC_ACL (1) #define BLE_HCI_CTLR_TO_HOST_FC_SYNC (2) #define BLE_HCI_CTLR_TO_HOST_FC_BOTH (3) -/* --- Host buffer size (OGF 0x03, OCF 0x0033) --- */ -#define BLE_HCI_HOST_BUF_SIZE_LEN (7) - -/* --- Host number of completed packets (OGF 0x03, OCF 0x0035) --- */ -#define BLE_HCI_HOST_NUM_COMP_PKTS_HDR_LEN (1) -#define BLE_HCI_HOST_NUM_COMP_PKTS_ENT_LEN (4) - -/* --- Read BD_ADDR (OGF 0x04, OCF 0x0009 --- */ -#define BLE_HCI_IP_RD_BD_ADDR_ACK_PARAM_LEN (6) - -/* --- Read buffer size (OGF 0x04, OCF 0x0005) --- */ -#define BLE_HCI_IP_RD_BUF_SIZE_LEN (0) -#define BLE_HCI_IP_RD_BUF_SIZE_RSPLEN (7) /* No status byte. */ - -/* --- Read/Write authenticated payload timeout (ocf 0x007B/0x007C) */ -#define BLE_HCI_RD_AUTH_PYLD_TMO_LEN (4) -#define BLE_HCI_WR_AUTH_PYLD_TMO_LEN (2) - -/* --- Read local version information (OGF 0x04, OCF 0x0001) --- */ -#define BLE_HCI_RD_LOC_VER_INFO_RSPLEN (8) /* No status byte. */ - -/* --- Read local supported command (OGF 0x04, OCF 0x0002) --- */ -#define BLE_HCI_RD_LOC_SUPP_CMD_RSPLEN (64) /* No status byte. */ - -/* --- Read local supported features (OGF 0x04, OCF 0x0003) --- */ -#define BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN (8) /* No status byte. */ - -/* --- Read RSSI (OGF 0x05, OCF 0x0005) --- */ -#define BLE_HCI_READ_RSSI_LEN (2) -#define BLE_HCI_READ_RSSI_ACK_PARAM_LEN (3) /* No status byte. */ - -/* --- LE set event mask (OCF 0x0001) --- */ -#define BLE_HCI_SET_LE_EVENT_MASK_LEN (8) - -/* --- LE read buffer size (OCF 0x0002) --- */ -#define BLE_HCI_RD_BUF_SIZE_LEN (0) -#define BLE_HCI_RD_BUF_SIZE_RSPLEN (3) /* No status byte. */ - -/* --- LE read local supported features (OCF 0x0003) --- */ -#define BLE_HCI_RD_LE_LOC_SUPP_FEAT_RSPLEN (8) /* No status byte. */ - -/* --- LE set random address (OCF 0x0005) */ -#define BLE_HCI_SET_RAND_ADDR_LEN (6) - /* --- LE set advertising parameters (OCF 0x0006) */ -#define BLE_HCI_SET_ADV_PARAM_LEN (15) - /* Advertising types */ #define BLE_HCI_ADV_TYPE_ADV_IND (0) #define BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD (1) @@ -263,23 +871,10 @@ extern "C" { #define BLE_HCI_ADV_PEER_ADDR_MAX (1) /* --- LE advertising channel tx power (OCF 0x0007) */ -#define BLE_HCI_ADV_CHAN_TXPWR_ACK_PARAM_LEN (2) /* Includes status byte. */ #define BLE_HCI_ADV_CHAN_TXPWR_MIN (-20) #define BLE_HCI_ADV_CHAN_TXPWR_MAX (10) -/* --- LE set advertising data (OCF 0x0008) */ -#define BLE_HCI_MAX_ADV_DATA_LEN (31) -#define BLE_HCI_SET_ADV_DATA_LEN (32) - -/* --- LE set scan response data (OCF 0x0009) */ -#define BLE_HCI_MAX_SCAN_RSP_DATA_LEN (31) -#define BLE_HCI_SET_SCAN_RSP_DATA_LEN (32) - -/* --- LE set advertising enable (OCF 0x000a) */ -#define BLE_HCI_SET_ADV_ENABLE_LEN (1) - /* --- LE set scan enable (OCF 0x000c) */ -#define BLE_HCI_SET_SCAN_ENABLE_LEN (2) /* Connect peer address type */ #define BLE_HCI_CONN_PEER_ADDR_PUBLIC (0) @@ -316,7 +911,6 @@ extern "C" { #define BLE_HCI_ADV_CHANMASK_DEF (0x7) /* all channels */ /* Set scan parameters */ -#define BLE_HCI_SET_SCAN_PARAM_LEN (7) #define BLE_HCI_SCAN_TYPE_PASSIVE (0) #define BLE_HCI_SCAN_TYPE_ACTIVE (1) @@ -378,98 +972,19 @@ extern "C" { #define BLE_HCI_CONN_PEER_ADDR_RAND_ID (3) #define BLE_HCI_CONN_PEER_ADDR_MAX (3) -/* --- LE connection update (OCF 0x0013) */ -#define BLE_HCI_CONN_UPDATE_LEN (14) - -/* --- LE set host channel classification command (OCF 0x0014) */ -#define BLE_HCI_SET_HOST_CHAN_CLASS_LEN (5) - -/* --- LE read channel map command (OCF 0x0015) */ -#define BLE_HCI_RD_CHANMAP_LEN (2) -#define BLE_HCI_RD_CHANMAP_RSP_LEN (7) - -/* --- LE read remote features (OCF 0x0016) */ -#define BLE_HCI_CONN_RD_REM_FEAT_LEN (2) - -/* --- LE encrypt (OCF 0x0017) */ -#define BLE_HCI_LE_ENCRYPT_LEN (32) - -/* --- LE rand (OCF 0x0018) */ -#define BLE_HCI_LE_RAND_LEN (8) - -/* --- LE start encryption (OCF 0x0019) */ -#define BLE_HCI_LE_START_ENCRYPT_LEN (28) - -/* --- LE long term key request reply command (OCF 0x001a) */ -#define BLE_HCI_LT_KEY_REQ_REPLY_LEN (18) -#define BLE_HCI_LT_KEY_REQ_REPLY_ACK_PARAM_LEN (2) /* No status byte. */ - -/* --- LE long term key request negative reply command (OCF 0x001b) */ -#define BLE_HCI_LT_KEY_REQ_NEG_REPLY_LEN (2) -#define BLE_HCI_LT_KEY_REQ_NEG_REPLY_ACK_PARAM_LEN (2) - -/* --- LE read supported states (OCF 0x001C) --- */ -#define BLE_HCI_RD_SUPP_STATES_RSPLEN (8) - -/* --- LE receiver test command (OCF 0x001D) --- */ -#define BLE_HCI_RX_TEST_LEN (1) - -/* --- LE transitter test command (OCF 0x001E) --- */ -#define BLE_HCI_TX_TEST_LEN (3) - -/* --- LE remote connection parameter request reply (OCF 0x0020) */ -#define BLE_HCI_CONN_PARAM_REPLY_LEN (14) - -/* --- LE remote connection parameter request negative reply (OCF 0x0021) */ -#define BLE_HCI_CONN_PARAM_NEG_REPLY_LEN (3) /* --- LE set data length (OCF 0x0022) */ -#define BLE_HCI_SET_DATALEN_LEN (6) -#define BLE_HCI_SET_DATALEN_ACK_PARAM_LEN (2) /* No status byte. */ #define BLE_HCI_SET_DATALEN_TX_OCTETS_MIN (0x001b) #define BLE_HCI_SET_DATALEN_TX_OCTETS_MAX (0x00fb) #define BLE_HCI_SET_DATALEN_TX_TIME_MIN (0x0148) #define BLE_HCI_SET_DATALEN_TX_TIME_MAX (0x4290) -/* --- LE read suggested default data length (OCF 0x0023) */ -#define BLE_HCI_RD_SUGG_DATALEN_RSPLEN (4) - -/* --- LE write suggested default data length (OCF 0x0024) */ -#define BLE_HCI_WR_SUGG_DATALEN_LEN (4) - -/* --- LE generate DHKEY command (OCF 0x0026) */ -#define BLE_HCI_GEN_DHKEY_LEN (64) - -/* --- LE add device to resolving list (OCF 0x0027) */ -#define BLE_HCI_ADD_TO_RESOLV_LIST_LEN (39) - -/* --- LE add device to resolving list (OCF 0x0028) */ -#define BLE_HCI_RMV_FROM_RESOLV_LIST_LEN (7) - -/* --- LE read peer resolvable address (OCF 0x002B) */ -#define BLE_HCI_RD_PEER_RESOLV_ADDR_LEN (7) - -/* --- LE read peer resolvable address (OCF 0x002C) */ -#define BLE_HCI_RD_LOC_RESOLV_ADDR_LEN (7) - -/* --- LE set address resolution enable (OCF 0x002D) */ -#define BLE_HCI_SET_ADDR_RESOL_ENA_LEN (1) - -/* --- LE set resolvable private address timeout (OCF 0x002E) */ -#define BLE_HCI_SET_RESOLV_PRIV_ADDR_TO_LEN (2) - -/* --- LE read maximum data length (OCF 0x002F) */ -#define BLE_HCI_RD_MAX_DATALEN_RSPLEN (8) - /* --- LE read maximum default PHY (OCF 0x0030) */ -#define BLE_HCI_LE_RD_PHY_LEN (2) -#define BLE_HCI_LE_RD_PHY_RSPLEN (4) #define BLE_HCI_LE_PHY_1M (1) #define BLE_HCI_LE_PHY_2M (2) #define BLE_HCI_LE_PHY_CODED (3) /* --- LE set default PHY (OCF 0x0031) */ -#define BLE_HCI_LE_SET_DEFAULT_PHY_LEN (3) #define BLE_HCI_LE_PHY_NO_TX_PREF_MASK (0x01) #define BLE_HCI_LE_PHY_NO_RX_PREF_MASK (0x02) #define BLE_HCI_LE_PHY_1M_PREF_MASK (0x01) @@ -481,27 +996,20 @@ extern "C" { BLE_HCI_LE_PHY_CODED_PREF_MASK) /* --- LE set PHY (OCF 0x0032) */ -#define BLE_HCI_LE_SET_PHY_LEN (7) #define BLE_HCI_LE_PHY_CODED_ANY (0x0000) #define BLE_HCI_LE_PHY_CODED_S2_PREF (0x0001) #define BLE_HCI_LE_PHY_CODED_S8_PREF (0x0002) /* --- LE enhanced receiver test (OCF 0x0033) */ -#define BLE_HCI_LE_ENH_RX_TEST_LEN (3) #define BLE_HCI_LE_PHY_1M (1) #define BLE_HCI_LE_PHY_2M (2) #define BLE_HCI_LE_PHY_CODED (3) /* --- LE enhanced transmitter test (OCF 0x0034) */ -#define BLE_HCI_LE_ENH_TX_TEST_LEN (4) #define BLE_HCI_LE_PHY_CODED_S8 (3) #define BLE_HCI_LE_PHY_CODED_S2 (4) -/* --- LE set advertising set random address (OCF 0x0035) */ -#define BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN (7) - /* --- LE set extended advertising parameters (OCF 0x0036) */ -#define BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN (25) #define BLE_HCI_LE_SET_EXT_ADV_PROP_CONNECTABLE (0x0001) #define BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE (0x0002) #define BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED (0x0004) @@ -519,9 +1027,7 @@ extern "C" { /* --- LE set extended advertising data (OCF 0x0037) */ #define BLE_HCI_MAX_EXT_ADV_DATA_LEN (251) -#define BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN (4) -#define BLE_HCI_LE_SET_EXT_ADV_DATA_LEN BLE_HCI_VARIABLE_LEN #define BLE_HCI_LE_SET_DATA_OPER_INT (0) #define BLE_HCI_LE_SET_DATA_OPER_FIRST (1) #define BLE_HCI_LE_SET_DATA_OPER_LAST (2) @@ -530,69 +1036,20 @@ extern "C" { /* --- LE set extended scan response data (OCF 0x0038) */ #define BLE_HCI_MAX_EXT_SCAN_RSP_DATA_LEN (251) -#define BLE_HCI_SET_EXT_SCAN_RSP_DATA_HDR_LEN (4) - -#define BLE_HCI_LE_SET_EXT_SCAN_RSP_DATA_LEN BLE_HCI_VARIABLE_LEN - - -/* --- LE set extended advertising enable (OCF 0x0039) */ -#define BLE_HCI_LE_SET_EXT_ADV_ENABLE_LEN BLE_HCI_VARIABLE_LEN - -/* --- LE remove advertising set (OCF 0x003C) */ -#define BLE_HCI_LE_REMOVE_ADV_SET_LEN (1) - -/* --- LE read maximum advertising data length (OCF 0x003A) */ -#define BLE_HCI_RD_MAX_ADV_DATA_LEN (2) - -/* --- LE read number of supported advertising sets (OCF 0x003B) */ -#define BLE_HCI_RD_NR_SUP_ADV_SETS (1) /* --- LE set periodic advertising parameters (OCF 0x003E) */ -#define BLE_HCI_LE_SET_PERIODIC_ADV_PARAMS_LEN (7) #define BLE_HCI_LE_SET_PERIODIC_ADV_PROP_INC_TX_PWR (0x0040) #define BLE_HCI_LE_SET_PERIODIC_ADV_PROP_MASK (0x0040) /* --- LE set periodic advertising data (OCF 0x003F) */ -#define BLE_HCI_LE_SET_PERIODIC_ADV_DATA_LEN BLE_HCI_VARIABLE_LEN #define BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN (252) -#define BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN (3) - -/* --- LE periodic advertising enable (OCF 0x0040) */ -#define BLE_HCI_LE_SET_PERIODIC_ADV_ENABLE_LEN (2) - -/* --- LE set extended scan parameters (OCF 0x0041) */ -#define BLE_HCI_LE_SET_EXT_SCAN_PARAM_LEN BLE_HCI_VARIABLE_LEN -#define BLE_HCI_LE_EXT_SCAN_BASE_LEN (3) -#define BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN (5) - -/* --- LE set extended scan enable (OCF 0x0042) */ -#define BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN (6) - -/* --- LE extended create connection (OCF 0x0043) */ -#define BLE_HCI_LE_EXT_CREATE_CONN_LEN BLE_HCI_VARIABLE_LEN -#define BLE_HCI_LE_EXT_CREATE_CONN_BASE_LEN (10) - -/* --- LE periodic advertising create sync (OCF 0x0044) */ -#define BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_LEN (14) - -/* --- LE periodic advertising terminate (OCF 0x0046) */ -#define BLE_HCI_LE_PERIODIC_ADV_TERM_SYNC_LEN (2) - -/* --- LE add device to periodic advertising list (OCF 0x0047) */ -#define BLE_HCI_LE_ADD_DEV_TO_PERIODIC_ADV_LIST_LEN (8) /* --- LE remove device from periodic advertising list (OCF 0x0048) */ -#define BLE_HCI_LE_REM_DEV_FROM_PERIODIC_ADV_LIST_LEN (8) - #define BLE_HCI_PERIODIC_DATA_STATUS_COMPLETE 0x00 #define BLE_HCI_PERIODIC_DATA_STATUS_INCOMPLETE 0x01 #define BLE_HCI_PERIODIC_DATA_STATUS_TRUNCATED 0x02 -/* --- LE write RF path (OCF 0x004D) */ -#define BLE_HCI_LE_WR_RF_PATH_COMPENSATION_LEN (4) - /* --- LE set privacy mode (OCF 0x004E) */ -#define BLE_HCI_LE_SET_PRIVACY_MODE_LEN (8) #define BLE_HCI_PRIVACY_NETWORK (0) #define BLE_HCI_PRIVACY_DEVICE (1) @@ -602,25 +1059,83 @@ extern "C" { #define BLE_HCI_EVCODE_CONN_DONE (0x03) #define BLE_HCI_EVCODE_CONN_REQUEST (0x04) #define BLE_HCI_EVCODE_DISCONN_CMP (0x05) +struct ble_hci_ev_disconn_cmp { + uint8_t status; + uint16_t conn_handle; + uint8_t reason; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_AUTH_CMP (0x06) #define BLE_HCI_EVCODE_REM_NAME_REQ_CMP (0x07) + #define BLE_HCI_EVCODE_ENCRYPT_CHG (0x08) +struct ble_hci_ev_enrypt_chg { + uint8_t status; + uint16_t connection_handle; + uint8_t enabled; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_CHG_LINK_KEY_CMP (0x09) #define BLE_HCI_EVCODE_MASTER_LINK_KEY_CMP (0x0A) #define BLE_HCI_EVCODE_RD_REM_SUPP_FEAT_CMP (0x0B) #define BLE_HCI_EVCODE_RD_REM_VER_INFO_CMP (0x0C) +struct ble_hci_ev_rd_rem_ver_info_cmp { + uint8_t status; + uint16_t conn_handle; + uint8_t version; + uint16_t manufacturer; + uint16_t subversion; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_QOS_SETUP_CMP (0x0D) + #define BLE_HCI_EVCODE_COMMAND_COMPLETE (0x0E) +struct ble_hci_ev_command_complete { + uint8_t num_packets; + uint16_t opcode; + uint8_t status; + uint8_t return_params[0]; +} __attribute__((packed)); +/* NOP is exception and has no return parameters */ +struct ble_hci_ev_command_complete_nop { + uint8_t num_packets; + uint16_t opcode; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_COMMAND_STATUS (0x0F) +struct ble_hci_ev_command_status { + uint8_t status; + uint8_t num_packets; + uint16_t opcode; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_HW_ERROR (0x10) +struct ble_hci_ev_hw_error { + uint8_t hw_code; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_NUM_COMP_PKTS (0x13) +struct comp_pkt { + uint16_t handle; + uint16_t packets; +} __attribute__((packed));; +struct ble_hci_ev_num_comp_pkts { + uint8_t count; + struct comp_pkt completed[0]; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_MODE_CHANGE (0x14) #define BLE_HCI_EVCODE_RETURN_LINK_KEYS (0x15) #define BLE_HCI_EVCODE_PIN_CODE_REQ (0x16) #define BLE_HCI_EVCODE_LINK_KEY_REQ (0x17) #define BLE_HCI_EVCODE_LINK_KEY_NOTIFY (0x18) #define BLE_HCI_EVCODE_LOOPBACK_CMD (0x19) + #define BLE_HCI_EVCODE_DATA_BUF_OVERFLOW (0x1A) +struct ble_hci_ev_data_buf_overflow { + uint8_t link_type; +} __attribute__((packed)); + #define BLE_HCI_EVCODE_MAX_SLOTS_CHG (0x1B) #define BLE_HCI_EVCODE_READ_CLK_OFF_COMP (0x1C) #define BLE_HCI_EVCODE_CONN_PKT_TYPE_CHG (0x1D) @@ -635,7 +1150,13 @@ extern "C" { #define BLE_HCI_EVCODE_SYNCH_CONN_CHG (0x2D) #define BLE_HCI_EVCODE_SNIFF_SUBRATING (0x2E) #define BLE_HCI_EVCODE_EXT_INQ_RESULT (0x2F) + #define BLE_HCI_EVCODE_ENC_KEY_REFRESH (0x30) +struct ble_hci_ev_enc_key_refresh { + uint8_t status; + uint16_t conn_handle; +} __attribute__((packed)); + #define BLE_HCI_EVOCDE_IO_CAP_REQ (0x31) #define BLE_HCI_EVCODE_IO_CAP_RSP (0x32) #define BLE_HCI_EVCODE_USER_CONFIRM_REQ (0x33) @@ -648,7 +1169,13 @@ extern "C" { #define BLE_HCI_EVCODE_USER_PASSKEY_NOTIFY (0x3B) #define BLE_HCI_EVCODE_KEYPRESS_NOTIFY (0x3C) #define BLE_HCI_EVCODE_REM_HOST_SUPP_FEAT (0x3D) + #define BLE_HCI_EVCODE_LE_META (0x3E) +struct ble_hci_ev_le_meta { + uint8_t subevent; + uint8_t data[0]; +} __attribute__((packed)); + /* NOTE: 0x3F not defined */ #define BLE_HCI_EVCODE_PHYS_LINK_COMP (0x40) #define BLE_HCI_EVCODE_CHAN_SELECTED (0x41) @@ -673,63 +1200,251 @@ extern "C" { #define BLE_HCI_EVCODE_SLAVE_PAGE_RSP_TMO (0x54) #define BLE_HCI_EVCODE_SLAVE_BCAST_CHAN_MAP (0x55) #define BLE_HCI_EVCODE_INQ_RSP_NOTIFY (0x56) + #define BLE_HCI_EVCODE_AUTH_PYLD_TMO (0x57) +struct ble_hci_ev_auth_pyld_tmo { + uint16_t conn_handle; +} __attribute__((packed)); + +#define BLE_HCI_EVCODE_SAM_STATUS_CHG (0x58) + #define BLE_HCI_EVCODE_VENDOR_DEBUG (0xFF) +struct ble_hci_ev_vendor_debug { + uint8_t id; + uint8_t data[0]; +}__attribute__((packed)); /* LE sub-event codes */ #define BLE_HCI_LE_SUBEV_CONN_COMPLETE (0x01) +struct ble_hci_ev_le_subev_conn_complete { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint8_t role; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint16_t conn_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint8_t mca; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_ADV_RPT (0x02) +struct adv_report { + uint8_t type; + uint8_t addr_type; + uint8_t addr[6]; + uint8_t data_len; + uint8_t data[0]; +} __attribute__((packed)); +struct ble_hci_ev_le_subev_adv_rpt { + uint8_t subev_code; + uint8_t num_reports; + struct adv_report reports[0]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE (0x03) +struct ble_hci_ev_le_subev_conn_upd_complete { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint16_t conn_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_RD_REM_USED_FEAT (0x04) +struct ble_hci_ev_le_subev_rd_rem_used_feat { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint8_t features[8]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_LT_KEY_REQ (0x05) +struct ble_hci_ev_le_subev_lt_key_req { + uint8_t subev_code; + uint16_t conn_handle; + uint64_t rand; + uint16_t div; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ (0x06) +struct ble_hci_ev_le_subev_rem_conn_param_req { + uint8_t subev_code; + uint16_t conn_handle; + uint16_t min_interval; + uint16_t max_interval; + uint16_t latency; + uint16_t timeout; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_DATA_LEN_CHG (0x07) +struct ble_hci_ev_le_subev_data_len_chg { + uint8_t subev_code; + uint16_t conn_handle; + uint16_t max_tx_octets; + uint16_t max_tx_time; + uint16_t max_rx_octets; + uint16_t max_rx_time; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY (0x08) +struct ble_hci_ev_le_subev_rd_loc_p256_pubkey { + uint8_t subev_code; + uint8_t status; + uint8_t public_key[64]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE (0x09) +struct ble_hci_ev_le_subev_gen_dhkey_complete { + uint8_t subev_code; + uint8_t status; + uint8_t dh_key[32]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE (0x0A) +struct ble_hci_ev_le_subev_enh_conn_complete { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint8_t role; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t local_rpa[6]; + uint8_t peer_rpa[6]; + uint16_t conn_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint8_t mca; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT (0x0B) +struct dir_adv_report { + uint8_t type; + uint8_t addr_type; + uint8_t addr[6]; + uint8_t dir_addr_type; + uint8_t dir_addr[6]; + int8_t rssi; +} __attribute__((packed)); +struct ble_hci_ev_le_subev_direct_adv_rpt { + uint8_t subev_code; + uint8_t num_reports; + struct dir_adv_report reports[0]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_PHY_UPDATE_COMPLETE (0x0C) +struct ble_hci_ev_le_subev_phy_update_complete { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint8_t tx_phy; + uint8_t rx_phy; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_EXT_ADV_RPT (0x0D) +struct ext_adv_report { + uint16_t evt_type; + uint8_t addr_type; + uint8_t addr[6]; + uint8_t pri_phy; + uint8_t sec_phy; + uint8_t sid; + int8_t tx_power; + int8_t rssi; + uint16_t periodic_itvl; + uint8_t dir_addr_type; + uint8_t dir_addr[6]; + uint8_t data_len; + uint8_t data[0]; +} __attribute__((packed)); +struct ble_hci_ev_le_subev_ext_adv_rpt { + uint8_t subev_code; + uint8_t num_reports; + struct ext_adv_report reports[0]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_ESTAB (0x0E) +struct ble_hci_ev_le_subev_periodic_adv_sync_estab { + uint8_t subev_code; + uint8_t status; + uint16_t sync_handle; + uint8_t sid; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t phy; + uint16_t interval; + uint8_t aca; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_PERIODIC_ADV_RPT (0x0F) +struct ble_hci_ev_le_subev_periodic_adv_rpt { + uint8_t subev_code; + uint16_t sync_handle; + int8_t tx_power; + int8_t rssi; + uint8_t cte_type; + uint8_t data_status; + uint8_t data_len; + uint8_t data[0]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_LOST (0x10) +struct ble_hci_ev_le_subev_periodic_adv_sync_lost { + uint8_t subev_code; + uint16_t sync_handle; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_SCAN_TIMEOUT (0x11) +struct ble_hci_ev_le_subev_scan_timeout { + uint8_t subev_code; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED (0x12) +struct ble_hci_ev_le_subev_adv_set_terminated { + uint8_t subev_code; + uint8_t status; + uint8_t adv_handle; + uint16_t conn_handle; + uint8_t num_events; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD (0x13) +struct ble_hci_ev_le_subev_scan_req_rcvd { + uint8_t subev_code; + uint8_t adv_handle; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; +} __attribute__((packed)); + #define BLE_HCI_LE_SUBEV_CHAN_SEL_ALG (0x14) +struct ble_hci_ev_le_subev_chan_sel_alg { + uint8_t subev_code; + uint16_t conn_handle; + uint8_t csa; +} __attribute__((packed)); -/* Generic event header */ -#define BLE_HCI_EVENT_HDR_LEN (2) +#define BLE_HCI_LE_SUBEV_CONNLESS_IQ_RPT (0x15) +#define BLE_HCI_LE_SUBEV_CONN_IQ_RPT (0x16) +#define BLE_HCI_LE_SUBEV_CTE_REQ_FAILED (0x17) -/* Event specific definitions */ -/* Event disconnect complete */ -#define BLE_HCI_EVENT_DISCONN_COMPLETE_LEN (4) - -/* Event encryption change (code=0x08) */ -#define BLE_HCI_EVENT_ENCRYPT_CHG_LEN (4) - -/* Event hardware error (code=0x10) */ -#define BLE_HCI_EVENT_HW_ERROR_LEN (1) - -/* Event key refresh complete (code=0x30) */ -#define BLE_HCI_EVENT_ENC_KEY_REFRESH_LEN (3) - -/* Event command complete */ -#define BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN (5) -#define BLE_HCI_EVENT_CMD_COMPLETE_MIN_LEN (6) - -/* Event command status */ -#define BLE_HCI_EVENT_CMD_STATUS_LEN (6) - -/* Number of completed packets */ -#define BLE_HCI_EVENT_NUM_COMP_PKTS_HDR_LEN (1) -#define BLE_HCI_EVENT_NUM_COMP_PKTS_ENT_LEN (4) - -/* Read remote version informaton */ -#define BLE_HCI_EVENT_RD_RM_VER_LEN (8) +#define BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_TRANSFER (0x18) +struct ble_hci_ev_le_subev_periodic_adv_sync_transfer { + uint8_t subev_code; + uint8_t status; + uint16_t conn_handle; + uint16_t service_data; + uint16_t sync_handle; + uint8_t sid; + uint8_t peer_addr_type; + uint8_t peer_addr[6]; + uint8_t phy; + uint16_t interval; + uint8_t aca; +} __attribute__((packed)); /* Data buffer overflow event */ -#define BLE_HCI_EVENT_DATABUF_OVERFLOW_LEN (1) #define BLE_HCI_EVENT_ACL_BUF_OVERFLOW (0x01) /* Advertising report */ @@ -747,11 +1462,7 @@ extern "C" { #define BLE_HCI_LEGACY_ADV_EVTYPE_SCAN_RSP_ADV_IND (0x1b) #define BLE_HCI_LEGACY_ADV_EVTYPE_SCAN_RSP_ADV_SCAN_IND (0x1a) -/* LE sub-event specific definitions */ -#define BLE_HCI_LE_MIN_LEN (1) /* Not including event hdr. */ - /* LE connection complete event (sub event 0x01) */ -#define BLE_HCI_LE_CONN_COMPLETE_LEN (19) #define BLE_HCI_LE_CONN_COMPLETE_ROLE_MASTER (0x00) #define BLE_HCI_LE_CONN_COMPLETE_ROLE_SLAVE (0x01) @@ -759,53 +1470,9 @@ extern "C" { #define BLE_HCI_LE_CONN_HANDLE_MAX (0x0eff) /* LE advertising report event. (sub event 0x02) */ -#define BLE_HCI_LE_ADV_RPT_MIN_LEN (12) -#define BLE_HCI_LE_ADV_DIRECT_RPT_LEN (18) #define BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN (1) #define BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX (0x19) -/* Length of each record in an LE direct advertising report event. */ -#define BLE_HCI_LE_ADV_DIRECT_RPT_SUB_LEN (16) - -/* LE connection update complete event (sub event 0x03) */ -#define BLE_HCI_LE_CONN_UPD_LEN (10) - -/* LE long term key request event (sub event 0x05) */ -#define BLE_HCI_LE_LT_KEY_REQ_LEN (13) - -/* LE connection update complete event (sub event 0x03) */ -#define BLE_HCI_LE_RD_REM_USED_FEAT_LEN (12) - -/* LE remote connection parameter request event (sub event 0x06) */ -#define BLE_HCI_LE_REM_CONN_PARM_REQ_LEN (11) - -/* LE data length change event (sub event 0x07) */ -#define BLE_HCI_LE_DATA_LEN_CHG_LEN (11) - -/* LE PHY update complete event (sub event 0x0C) */ -#define BLE_HCI_LE_PHY_UPD_LEN (6) - -/* LE Periodic Advertising Sync Established Event (sub event 0x0e) */ -#define BLE_HCI_LE_PERIODIC_ADV_SYNC_ESTAB_LEN (16) - -/* LE Periodic Advertising Report Event (sub event 0x0f) */ -#define BLE_HCI_LE_PERIODIC_ADV_RPT_LEN (8) - -/* LE Periodic Advertising Sync Lost Event (sub event 0x10) */ -#define BLE_HCI_LE_PERIODIC_ADV_SYNC_LOST_LEN (3) - -/* LE Scan Timeout Event (sub event 0x11) */ -#define BLE_HCI_LE_SUBEV_SCAN_TIMEOUT_LEN (1) - -/* LE Advertising Set Terminated Event (sub event 0x12) */ -#define BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED_LEN (6) - -/* LE Scan Request Received event (sub event 0x13) */ -#define BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD_LEN (9) - -/* LE Channel Selection Algorithm event (sub event 0x14) */ -#define BLE_HCI_LE_SUBEV_CHAN_SEL_ALG_LEN (4) - /* Bluetooth Assigned numbers for version information.*/ #define BLE_HCI_VER_BCS_1_0b (0) #define BLE_HCI_VER_BCS_1_1 (1) @@ -817,6 +1484,8 @@ extern "C" { #define BLE_HCI_VER_BCS_4_1 (7) #define BLE_HCI_VER_BCS_4_2 (8) #define BLE_HCI_VER_BCS_5_0 (9) +#define BLE_HCI_VER_BCS_5_1 (10) +#define BLE_HCI_VER_BCS_5_2 (11) #define BLE_LMP_VER_BCS_1_0b (0) #define BLE_LMP_VER_BCS_1_1 (1) @@ -828,399 +1497,22 @@ extern "C" { #define BLE_LMP_VER_BCS_4_1 (7) #define BLE_LMP_VER_BCS_4_2 (8) #define BLE_LMP_VER_BCS_5_0 (9) +#define BLE_LMP_VER_BCS_5_1 (10) +#define BLE_LMP_VER_BCS_5_2 (11) -/* Sub-event 0x0A: enhanced connection complete */ -#define BLE_HCI_LE_ENH_CONN_COMPLETE_LEN (31) - -/*--- Shared data structures ---*/ - -/* Host buffer size (OGF=0x03, OCF=0x0033) */ -struct hci_host_buf_size -{ - uint16_t acl_pkt_len; - uint8_t sync_pkt_len; - uint16_t num_acl_pkts; - uint16_t num_sync_pkts; -}; - -/* Host number of completed packets (OGF=0x03, OCF=0x0035) */ -struct hci_host_num_comp_pkts_entry -{ - uint16_t conn_handle; - uint16_t num_pkts; -}; - -/* Read local version information (OGF=0x0004, OCF=0x0001) */ -struct hci_loc_ver_info -{ - uint8_t status; - uint8_t hci_version; - uint16_t hci_revision; - uint8_t lmp_pal_version; - uint16_t mfrg_name; - uint8_t lmp_pal_subversion; -}; - -/* set random address command (ocf = 0x0005) */ -struct hci_rand_addr -{ - uint8_t addr[6]; -}; - -/* set advertising parameters command (ocf = 0x0006) */ -struct hci_adv_params -{ - uint8_t adv_type; - uint8_t adv_channel_map; - uint8_t own_addr_type; - uint8_t peer_addr_type; - uint8_t adv_filter_policy; - uint16_t adv_itvl_min; - uint16_t adv_itvl_max; - uint8_t peer_addr[BLE_DEV_ADDR_LEN]; -}; - -/* LE create connection command (ocf=0x000d). */ -struct hci_create_conn -{ - uint16_t scan_itvl; - uint16_t scan_window; - uint8_t filter_policy; - uint8_t peer_addr_type; - uint8_t peer_addr[BLE_DEV_ADDR_LEN]; - uint8_t own_addr_type; - uint16_t conn_itvl_min; - uint16_t conn_itvl_max; - uint16_t conn_latency; - uint16_t supervision_timeout; - uint16_t min_ce_len; - uint16_t max_ce_len; -}; - -/* LE Read Local P-256 Public Key Complete Event */ -struct hci_le_subev_rd_loc_p256_pubkey { - uint8_t status; - uint8_t pubkey[64]; -} __attribute__((packed)); - -/* LE Generate DHKey Complete Event */ -struct hci_le_subev_gen_dhkey_complete { - uint8_t status; - uint8_t dhkey[32]; -} __attribute__((packed)); - -/* LE Directed Advertising Report Event */ -struct hci_le_subev_direct_adv_rpt_param { - uint8_t evt_type; - uint8_t addr_type; - uint8_t addr[6]; - uint8_t dir_addr_type; - uint8_t dir_addr[6]; - int8_t rssi; -} __attribute__((packed)); - -struct hci_le_subev_direct_adv_rpt { - uint8_t num_reports; - struct hci_le_subev_direct_adv_rpt_param params[0]; -} __attribute__((packed)); - -#if MYNEWT_VAL(BLE_EXT_ADV) -/* LE create connection command (ocf=0x0043). */ -struct hci_ext_conn_params -{ - uint16_t scan_itvl; - uint16_t scan_window; - uint16_t conn_itvl_min; - uint16_t conn_itvl_max; - uint16_t conn_latency; - uint16_t supervision_timeout; - uint16_t min_ce_len; - uint16_t max_ce_len; -}; - -struct hci_ext_create_conn -{ - uint8_t filter_policy; - uint8_t own_addr_type; - uint8_t peer_addr_type; - uint8_t peer_addr[BLE_DEV_ADDR_LEN]; - uint8_t init_phy_mask; - struct hci_ext_conn_params params[3]; -}; - -struct hci_ext_adv_report_param { - uint16_t evt_type; - uint8_t addr_type; - uint8_t addr[6]; - uint8_t prim_phy; - uint8_t sec_phy; - uint8_t sid; - int8_t tx_power; - int8_t rssi; - uint16_t per_adv_itvl; - uint8_t dir_addr_type; - uint8_t dir_addr[6]; - uint8_t adv_data_len; - uint8_t adv_data[0]; -} __attribute__((packed)); - -struct hci_ext_adv_report { - /* We support one report per event for now */ - uint8_t subevt; - uint8_t num_reports; - struct hci_ext_adv_report_param params[0]; -} __attribute__((packed)); - -/* Ext Adv Set enable parameters, not in HCI order */ -struct hci_ext_adv_set -{ - uint8_t handle; - uint8_t events; - uint16_t duration; -}; - -/* Ext Advertising Parameters */ -struct hci_ext_adv_params -{ - uint16_t properties; - uint32_t min_interval; - uint32_t max_interval; - uint8_t chan_map; - uint8_t own_addr_type; - uint8_t peer_addr_type; - uint8_t peer_addr[6]; - uint8_t filter_policy; - int8_t tx_power; - uint8_t primary_phy; - uint8_t max_skip; - uint8_t secondary_phy; - uint8_t sid; - uint8_t scan_req_notif; -}; - -/* LE Extended Advertising Report Event */ -struct hci_le_subev_ext_adv_rpt { - uint8_t num_reports; - struct hci_ext_adv_report_param params[0]; -} __attribute__((packed)); - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -/* LE Periodic Advertising Sync Established Event */ -struct hci_le_subev_periodic_adv_sync_estab { - uint8_t status; - uint16_t sync_handle; - uint8_t sid; - uint8_t adv_addr_type; - uint8_t adv_addr[6]; - uint8_t adv_phy; - uint16_t per_adv_ival; - uint8_t adv_clk_accuracy; -} __attribute__((packed)); - -/* LE Periodic Advertising Report Event */ -struct hci_le_subev_periodic_adv_rpt { - uint16_t sync_handle; - int8_t tx_power; - int8_t rssi; - uint8_t unused; - uint8_t data_status; - uint8_t data_length; - uint8_t data[0]; -} __attribute__((packed)); - -/* LE Periodic Advertising Sync Lost Event */ -struct hci_le_subev_periodic_adv_sync_lost { - uint16_t sync_handle; -} __attribute__((packed)); -#endif - -/* LE Advertising Set Terminated Event */ -struct hci_le_subev_adv_set_terminated { - uint8_t status; - uint8_t adv_handle; - uint16_t conn_handle; - uint8_t num_compl_ext_adv_ev; -} __attribute__((packed)); - -/* LE Scan Request Received Event */ -struct hci_le_subev_scan_req_rcvd { - uint8_t adv_handle; - uint8_t scan_addr_type; - uint8_t scan_addr[6]; -} __attribute__((packed)); +/* selected HCI and LMP version */ +#if MYNEWT_VAL(BLE_VERSION) == 50 +#define BLE_HCI_VER_BCS BLE_HCI_VER_BCS_5_0 +#define BLE_LMP_VER_BCS BLE_LMP_VER_BCS_5_0 +#elif MYNEWT_VAL(BLE_VERSION) == 51 +#define BLE_HCI_VER_BCS BLE_HCI_VER_BCS_5_1 +#define BLE_LMP_VER_BCS BLE_LMP_VER_BCS_5_1 +#elif MYNEWT_VAL(BLE_VERSION) == 52 +#define BLE_HCI_VER_BCS BLE_HCI_VER_BCS_5_2 +#define BLE_LMP_VER_BCS BLE_LMP_VER_BCS_5_2 #endif -/* LE Channel Selection Algorithm Event */ -struct hci_le_subev_chan_sel_alg { - uint16_t conn_handle; - uint8_t chan_sel_alg; -} __attribute__((packed)); - -/* LE connection update command (ocf=0x0013). */ -struct hci_conn_update -{ - uint16_t handle; - uint16_t conn_itvl_min; - uint16_t conn_itvl_max; - uint16_t conn_latency; - uint16_t supervision_timeout; - uint16_t min_ce_len; - uint16_t max_ce_len; -}; - -/* LE start encryption command (ocf=0x0019) (note: fields out of order). */ -struct hci_start_encrypt -{ - uint16_t connection_handle; - uint16_t encrypted_diversifier; - uint64_t random_number; - uint8_t long_term_key[16]; -}; - -/* LE long term key request reply command (ocf=0x001a). */ -struct hci_lt_key_req_reply -{ - uint16_t conn_handle; - uint8_t long_term_key[16]; -}; - -/* LE Remote connection parameter request reply command */ -struct hci_conn_param_reply -{ - uint16_t handle; - uint16_t conn_itvl_min; - uint16_t conn_itvl_max; - uint16_t conn_latency; - uint16_t supervision_timeout; - uint16_t min_ce_len; - uint16_t max_ce_len; -}; - -/* LE Remote connection parameter request negative reply command */ -struct hci_conn_param_neg_reply -{ - uint16_t handle; - uint8_t reason; -}; - -/* Encryption change event (code=0x08) (note: fields out of order) */ -struct hci_encrypt_change -{ - uint8_t status; - uint8_t encryption_enabled; - uint16_t connection_handle; -}; - -/* Encryption key refresh complete event (code=0x30) */ -struct hci_encrypt_key_refresh -{ - uint8_t status; - uint16_t connection_handle; -}; - -/* Connection complete LE meta subevent */ -struct hci_le_conn_complete -{ - uint8_t subevent_code; - uint8_t status; - uint16_t connection_handle; - uint8_t role; - uint8_t peer_addr_type; - uint8_t peer_addr[BLE_DEV_ADDR_LEN]; - uint16_t conn_itvl; - uint16_t conn_latency; - uint16_t supervision_timeout; - uint8_t master_clk_acc; - uint8_t local_rpa[BLE_DEV_ADDR_LEN]; - uint8_t peer_rpa[BLE_DEV_ADDR_LEN]; -}; - -/* Connection update complete LE meta subevent */ -struct hci_le_conn_upd_complete -{ - uint8_t subevent_code; - uint8_t status; - uint16_t connection_handle; - uint16_t conn_itvl; - uint16_t conn_latency; - uint16_t supervision_timeout; -}; - -/* Remote connection parameter request LE meta subevent */ -struct hci_le_conn_param_req -{ - uint8_t subevent_code; - uint16_t connection_handle; - uint16_t itvl_min; - uint16_t itvl_max; - uint16_t latency; - uint16_t timeout; -}; - -/* Read Remote Supported Features complete LE meta subevent */ -struct hci_le_rd_rem_supp_feat_complete -{ - uint8_t subevent_code; - uint8_t status; - uint16_t connection_handle; - uint8_t features[8]; -}; - -/* LE long term key request event (note: fields out of order). */ -struct hci_le_lt_key_req -{ - uint64_t random_number; - uint16_t connection_handle; - uint16_t encrypted_diversifier; - uint8_t subevent_code; -}; - -/* Disconnection complete event (note: fields out of order). */ -struct hci_disconn_complete -{ - uint16_t connection_handle; - uint8_t status; - uint8_t reason; -}; - -/* Read RSSI command-complete parameters (note: fields out of order). */ -struct hci_read_rssi_ack_params -{ - uint16_t connection_handle; - uint8_t status; - int8_t rssi; -}; - -/* PHY updated completed LE meta subevent */ -struct hci_le_phy_upd_complete -{ - uint8_t subevent_code; - uint8_t status; - uint16_t connection_handle; - uint8_t tx_phy; - uint8_t rx_phy; -}; - -/* LE Advertising Set Terminated subevent*/ -struct hci_le_adv_set_terminated -{ - uint8_t subevent_code; - uint8_t status; - uint8_t adv_handle; - uint16_t conn_handle; - uint8_t completed_events; -}; - -/* LE Scan Request Received subevent */ -struct hci_le_scan_req_rcvd -{ - uint8_t subevent_code; - uint8_t adv_handle; - uint8_t scan_addr_type; - uint8_t scan_addr[BLE_DEV_ADDR_LEN]; -}; - #define BLE_HCI_DATA_HDR_SZ 4 #define BLE_HCI_DATA_HANDLE(handle_pb_bc) (((handle_pb_bc) & 0x0fff) >> 0) #define BLE_HCI_DATA_PB(handle_pb_bc) (((handle_pb_bc) & 0x3000) >> 12) @@ -1237,16 +1529,6 @@ struct hci_data_hdr #define BLE_HCI_PB_FIRST_FLUSH 2 #define BLE_HCI_PB_FULL 3 -struct hci_add_dev_to_resolving_list { - uint8_t addr_type; - uint8_t addr[6]; - uint8_t local_irk[16]; - uint8_t peer_irk[16]; -}; - -/* External data structures */ -extern const uint8_t g_ble_hci_le_cmd_len[BLE_HCI_NUM_LE_CMDS]; - #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.c index a6a12316b..ff8e99997 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.c @@ -6,14 +6,13 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include - -#include -#include "mesh/mesh.h" - #include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_ACCESS)) -#include "host/ble_hs_log.h" +#define MESH_LOG_MODULE BLE_MESH_ACCESS_LOG + +#include +#include + +#include "mesh/mesh.h" #include "mesh_priv.h" #include "adv.h" @@ -29,24 +28,6 @@ static const struct bt_mesh_comp *dev_comp; static u16_t dev_primary_addr; -static const struct { - const u16_t id; - int (*const init)(struct bt_mesh_model *model, bool primary); -} model_init[] = { - { BT_MESH_MODEL_ID_CFG_SRV, bt_mesh_cfg_srv_init }, - { BT_MESH_MODEL_ID_HEALTH_SRV, bt_mesh_health_srv_init }, -#if MYNEWT_VAL(BLE_MESH_CFG_CLI) - { BT_MESH_MODEL_ID_CFG_CLI, bt_mesh_cfg_cli_init }, -#endif -#if MYNEWT_VAL(BLE_MESH_HEALTH_CLI) - { BT_MESH_MODEL_ID_HEALTH_CLI, bt_mesh_health_cli_init }, -#endif -#if MYNEWT_VAL(BLE_MESH_SHELL_MODELS) - { BT_MESH_MODEL_ID_GEN_ONOFF_CLI, bt_mesh_gen_model_cli_init }, - { BT_MESH_MODEL_ID_GEN_LEVEL_CLI, bt_mesh_gen_model_cli_init }, -#endif -}; - void bt_mesh_model_foreach(void (*func)(struct bt_mesh_model *mod, struct bt_mesh_elem *elem, bool vnd, bool primary, @@ -101,7 +82,11 @@ s32_t bt_mesh_model_pub_period_get(struct bt_mesh_model *mod) CODE_UNREACHABLE; } - return period >> mod->pub->period_div; + if (mod->pub->fast_period) { + return period >> mod->pub->period_div; + } else { + return period; + } } static s32_t next_period(struct bt_mesh_model *mod) @@ -146,7 +131,24 @@ static void publish_sent(int err, void *user_data) } } +static void publish_start(u16_t duration, int err, void *user_data) +{ + struct bt_mesh_model *mod = user_data; + struct bt_mesh_model_pub *pub = mod->pub; + + if (err) { + BT_ERR("Failed to publish: err %d", err); + return; + } + + /* Initialize the timestamp for the beginning of a new period */ + if (pub->count == BT_MESH_PUB_TRANSMIT_COUNT(pub->retransmit)) { + pub->period_start = k_uptime_get_32(); + } +} + static const struct bt_mesh_send_cb pub_sent_cb = { + .start = publish_start, .end = publish_sent, }; @@ -223,8 +225,6 @@ static void mod_publish(struct ble_npl_event *work) __ASSERT_NO_MSG(pub->update != NULL); - pub->period_start = k_uptime_get_32(); - err = pub->update(pub->mod); if (err) { BT_ERR("Failed to update publication message"); @@ -235,11 +235,6 @@ static void mod_publish(struct ble_npl_event *work) if (err) { BT_ERR("Publishing failed (err %d)", err); } - - if (pub->count) { - /* Retransmissions also control the timer */ - k_delayed_work_cancel(&pub->timer); - } } struct bt_mesh_elem *bt_mesh_model_elem(struct bt_mesh_model *mod) @@ -297,14 +292,8 @@ static void mod_init(struct bt_mesh_model *mod, struct bt_mesh_elem *elem, mod->mod_idx = mod - elem->models; } - if (vnd) { - return; - } - - for (i = 0; i < ARRAY_SIZE(model_init); i++) { - if (model_init[i].id == mod->id) { - model_init[i].init(mod, primary); - } + if (mod->cb && mod->cb->init) { + mod->cb->init(mod); } } @@ -354,7 +343,7 @@ u16_t bt_mesh_primary_addr(void) return dev_primary_addr; } -u16_t *bt_mesh_model_find_group(struct bt_mesh_model *mod, u16_t addr) +static u16_t *model_group_get(struct bt_mesh_model *mod, u16_t addr) { int i; @@ -367,6 +356,45 @@ u16_t *bt_mesh_model_find_group(struct bt_mesh_model *mod, u16_t addr) return NULL; } +struct find_group_visitor_ctx { + u16_t *entry; + struct bt_mesh_model *mod; + u16_t addr; +}; + +static enum bt_mesh_walk find_group_mod_visitor(struct bt_mesh_model *mod, + u32_t depth, void *user_data) +{ + struct find_group_visitor_ctx *ctx = user_data; + + if (mod->elem_idx != ctx->mod->elem_idx) { + return BT_MESH_WALK_CONTINUE; + } + + ctx->entry = model_group_get(mod, ctx->addr); + if (ctx->entry) { + ctx->mod = mod; + return BT_MESH_WALK_STOP; + } + + return BT_MESH_WALK_CONTINUE; +} + +u16_t *bt_mesh_model_find_group(struct bt_mesh_model **mod, u16_t addr) +{ + struct find_group_visitor_ctx ctx = { + .mod = *mod, + .entry = NULL, + .addr = addr, + }; + + bt_mesh_model_tree_walk(bt_mesh_model_root(*mod), + find_group_mod_visitor, &ctx); + + *mod = ctx.mod; + return ctx.entry; +} + static struct bt_mesh_model *bt_mesh_elem_find_group(struct bt_mesh_elem *elem, u16_t group_addr) { @@ -377,7 +405,7 @@ static struct bt_mesh_model *bt_mesh_elem_find_group(struct bt_mesh_elem *elem, for (i = 0; i < elem->model_count; i++) { model = &elem->models[i]; - match = bt_mesh_model_find_group(model, group_addr); + match = model_group_get(model, group_addr); if (match) { return model; } @@ -386,7 +414,7 @@ static struct bt_mesh_model *bt_mesh_elem_find_group(struct bt_mesh_elem *elem, for (i = 0; i < elem->vnd_model_count; i++) { model = &elem->vnd_models[i]; - match = bt_mesh_model_find_group(model, group_addr); + match = model_group_get(model, group_addr); if (match) { return model; } @@ -397,17 +425,21 @@ static struct bt_mesh_model *bt_mesh_elem_find_group(struct bt_mesh_elem *elem, struct bt_mesh_elem *bt_mesh_elem_find(u16_t addr) { - int i; + u16_t index; - for (i = 0; i < dev_comp->elem_count; i++) { - struct bt_mesh_elem *elem = &dev_comp->elem[i]; + if (BT_MESH_ADDR_IS_UNICAST(addr)) { + index = (addr - dev_comp->elem[0].addr); + if (index < dev_comp->elem_count) { + return &dev_comp->elem[index]; + } else { + return NULL; + } + } - if (BT_MESH_ADDR_IS_GROUP(addr) || - BT_MESH_ADDR_IS_VIRTUAL(addr)) { - if (bt_mesh_elem_find_group(elem, addr)) { - return elem; - } - } else if (elem->addr == addr) { + for (index = 0; index < dev_comp->elem_count; index++) { + struct bt_mesh_elem *elem = &dev_comp->elem[index]; + + if (bt_mesh_elem_find_group(elem, addr)) { return elem; } } @@ -425,7 +457,9 @@ static bool model_has_key(struct bt_mesh_model *mod, u16_t key) int i; for (i = 0; i < ARRAY_SIZE(mod->keys); i++) { - if (mod->keys[i] == key) { + if (mod->keys[i] == key || + (mod->keys[i] == BT_MESH_KEY_DEV_ANY && + BT_MESH_IS_DEV_KEY(key))) { return true; } } @@ -433,9 +467,19 @@ static bool model_has_key(struct bt_mesh_model *mod, u16_t key) return false; } +static bool model_has_dst(struct bt_mesh_model *mod, u16_t dst) +{ + if (BT_MESH_ADDR_IS_UNICAST(dst)) { + return (dev_comp->elem[mod->elem_idx].addr == dst); + } else if (BT_MESH_ADDR_IS_GROUP(dst) || BT_MESH_ADDR_IS_VIRTUAL(dst)) { + return bt_mesh_model_find_group(&mod, dst); + } + + return (mod->elem_idx == 0 && bt_mesh_fixed_group_match(dst)); +} + static const struct bt_mesh_model_op *find_op(struct bt_mesh_model *models, - u8_t model_count, u16_t dst, - u16_t app_idx, u32_t opcode, + u8_t model_count, u32_t opcode, struct bt_mesh_model **model) { u8_t i; @@ -445,17 +489,6 @@ static const struct bt_mesh_model_op *find_op(struct bt_mesh_model *models, *model = &models[i]; - if (BT_MESH_ADDR_IS_GROUP(dst) || - BT_MESH_ADDR_IS_VIRTUAL(dst)) { - if (!bt_mesh_model_find_group(*model, dst)) { - continue; - } - } - - if (!model_has_key(*model, app_idx)) { - continue; - } - for (op = (*model)->op; op->func; op++) { if (op->opcode == opcode) { return op; @@ -508,8 +541,7 @@ bool bt_mesh_fixed_group_match(u16_t addr) case BT_MESH_ADDR_ALL_NODES: return true; case BT_MESH_ADDR_PROXIES: - /* TODO: Proxy not yet supported */ - return false; + return (bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED); case BT_MESH_ADDR_FRIENDS: return (bt_mesh_friend_get() == BT_MESH_FRIEND_ENABLED); case BT_MESH_ADDR_RELAYS: @@ -540,24 +572,13 @@ void bt_mesh_model_recv(struct bt_mesh_net_rx *rx, struct os_mbuf *buf) for (i = 0; i < dev_comp->elem_count; i++) { struct bt_mesh_elem *elem = &dev_comp->elem[i]; - - if (BT_MESH_ADDR_IS_UNICAST(rx->ctx.recv_dst)) { - if (elem->addr != rx->ctx.recv_dst) { - continue; - } - } else if (BT_MESH_ADDR_IS_GROUP(rx->ctx.recv_dst) || - BT_MESH_ADDR_IS_VIRTUAL(rx->ctx.recv_dst)) { - /* find_op() will do proper model/group matching */ - } else if (i != 0 || - !bt_mesh_fixed_group_match(rx->ctx.recv_dst)) { - continue; - } + struct net_buf_simple_state state; /* SIG models cannot contain 3-byte (vendor) OpCodes, and * vendor models cannot contain SIG (1- or 2-byte) OpCodes, so * we only need to do the lookup in one of the model lists. */ - if (opcode < 0x10000) { + if (BT_MESH_MODEL_OP_LEN(opcode) < 3) { models = elem->models; count = elem->model_count; } else { @@ -565,29 +586,32 @@ void bt_mesh_model_recv(struct bt_mesh_net_rx *rx, struct os_mbuf *buf) count = elem->vnd_model_count; } - op = find_op(models, count, rx->ctx.recv_dst, rx->ctx.app_idx, - opcode, &model); - if (op) { - struct net_buf_simple_state state; + op = find_op(models, count, opcode, &model); + if (!op) { + BT_DBG("No OpCode 0x%08x for elem %d", opcode, i); + continue; + } - if (buf->om_len < op->min_len) { - BT_ERR("Too short message for OpCode 0x%08x", - (unsigned) opcode); + if (!model_has_key(model, rx->ctx.app_idx)) { continue; } - /* The callback will likely parse the buffer, so - * store the parsing state in case multiple models - * receive the message. - */ - net_buf_simple_save(buf, &state); - op->func(model, &rx->ctx, buf); - net_buf_simple_restore(buf, &state); - - } else { - BT_DBG("No OpCode 0x%08x for elem %d", - (unsigned) opcode, i); + if (!model_has_dst(model, rx->ctx.recv_dst)) { + continue; } + + if (buf->om_len < op->min_len) { + BT_ERR("Too short message for OpCode 0x%08x", opcode); + continue; + } + + /* The callback will likely parse the buffer, so + * store the parsing state in case multiple models + * receive the message. + */ + net_buf_simple_save(buf, &state); + op->func(model, &rx->ctx, buf); + net_buf_simple_restore(buf, &state); } } @@ -595,21 +619,21 @@ void bt_mesh_model_msg_init(struct os_mbuf *msg, u32_t opcode) { net_buf_simple_init(msg, 0); - if (opcode < 0x100) { - /* 1-byte OpCode */ + switch (BT_MESH_MODEL_OP_LEN(opcode)) { + case 1: net_buf_simple_add_u8(msg, opcode); - return; - } - - if (opcode < 0x10000) { - /* 2-byte OpCode */ + break; + case 2: net_buf_simple_add_be16(msg, opcode); - return; + break; + case 3: + net_buf_simple_add_u8(msg, ((opcode >> 16) & 0xff)); + net_buf_simple_add_le16(msg, opcode & 0xffff); + break; + default: + BT_WARN("Unknown opcode format"); + break; } - - /* 3-byte OpCode */ - net_buf_simple_add_u8(msg, ((opcode >> 16) & 0xff)); - net_buf_simple_add_le16(msg, opcode & 0xffff); } static int model_send(struct bt_mesh_model *model, @@ -732,7 +756,7 @@ done: return err; } -struct bt_mesh_model *bt_mesh_model_find_vnd(struct bt_mesh_elem *elem, +struct bt_mesh_model *bt_mesh_model_find_vnd(const struct bt_mesh_elem *elem, u16_t company, u16_t id) { u8_t i; @@ -747,7 +771,7 @@ struct bt_mesh_model *bt_mesh_model_find_vnd(struct bt_mesh_elem *elem, return NULL; } -struct bt_mesh_model *bt_mesh_model_find(struct bt_mesh_elem *elem, +struct bt_mesh_model *bt_mesh_model_find(const struct bt_mesh_elem *elem, u16_t id) { u8_t i; @@ -765,3 +789,68 @@ const struct bt_mesh_comp *bt_mesh_comp_get(void) { return dev_comp; } + +struct bt_mesh_model *bt_mesh_model_root(struct bt_mesh_model *mod) +{ +#ifdef CONFIG_BT_MESH_MODEL_EXTENSIONS + while (mod->next) { + mod = mod->next; + } +#endif + return mod; +} + +void bt_mesh_model_tree_walk(struct bt_mesh_model *root, + enum bt_mesh_walk (*cb)(struct bt_mesh_model *mod, + u32_t depth, + void *user_data), + void *user_data) +{ + struct bt_mesh_model *m = root; + u32_t depth = 0; + + do { + if (cb(m, depth, user_data) == BT_MESH_WALK_STOP) { + return; + } +#if MYNEWT_VAL(BLE_MESH_MODEL_EXTENSIONS) + if (m->extends) { + m = m->extends; + depth++; + } else if (m->flags & BT_MESH_MOD_NEXT_IS_PARENT) { + m = m->next->next; + depth--; + } else { + m = m->next; + } +#endif + } while (m && m != root); +} + +#if MYNEWT_VAL(BLE_MESH_MODEL_EXTENSIONS) +int bt_mesh_model_extend(struct bt_mesh_model *mod, + struct bt_mesh_model *base_mod) +{ + /* Form a cyclical LCRS tree: + * The extends-pointer points to the first child, and the next-pointer + * points to the next sibling. The last sibling is marked by the + * BT_MESH_MOD_NEXT_IS_PARENT flag, and its next-pointer points back to + * the parent. This way, the whole tree is accessible from any node. + * + * We add children (extend them) by inserting them as the first child. + */ + if (base_mod->next) { + return -EALREADY; + } + + if (mod->extends) { + base_mod->next = mod->extends; + } else { + base_mod->next = mod; + base_mod->flags |= BT_MESH_MOD_NEXT_IS_PARENT; + } + + mod->extends = base_mod; + return 0; +} +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.h index 5ce7f1990..48514983f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/access.h @@ -16,6 +16,14 @@ enum { BT_MESH_MOD_BIND_PENDING = BIT(0), BT_MESH_MOD_SUB_PENDING = BIT(1), BT_MESH_MOD_PUB_PENDING = BIT(2), + BT_MESH_MOD_DATA_PRESENT = BIT(3), + BT_MESH_MOD_NEXT_IS_PARENT = BIT(4), +}; + +/* Tree walk return codes */ +enum bt_mesh_walk { + BT_MESH_WALK_STOP, + BT_MESH_WALK_CONTINUE, }; void bt_mesh_elem_register(struct bt_mesh_elem *elem, u8_t count); @@ -25,12 +33,14 @@ u8_t bt_mesh_elem_count(void); /* Find local element based on unicast or group address */ struct bt_mesh_elem *bt_mesh_elem_find(u16_t addr); -struct bt_mesh_model *bt_mesh_model_find_vnd(struct bt_mesh_elem *elem, - u16_t company, u16_t id); -struct bt_mesh_model * bt_mesh_model_find(struct bt_mesh_elem *elem, - u16_t id); +struct bt_mesh_model *bt_mesh_model_root(struct bt_mesh_model *mod); +void bt_mesh_model_tree_walk(struct bt_mesh_model *root, + enum bt_mesh_walk (*cb)(struct bt_mesh_model *mod, + u32_t depth, + void *user_data), + void *user_data); -u16_t *bt_mesh_model_find_group(struct bt_mesh_model *mod, u16_t addr); +u16_t *bt_mesh_model_find_group(struct bt_mesh_model **mod, u16_t addr); bool bt_mesh_fixed_group_match(u16_t addr); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.c index 5364ddc73..b8fb1c7de 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.c @@ -7,12 +7,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include "mesh/mesh.h" - #include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_ADV)) -#include "host/ble_hs_log.h" +#define MESH_LOG_MODULE BLE_MESH_ADV_LOG +#include "mesh/mesh.h" #include "host/ble_hs_adv.h" #include "host/ble_gap.h" #include "nimble/hci_common.h" @@ -108,9 +106,14 @@ static inline void adv_send(struct os_mbuf *buf) adv_int = max(adv_int_min, BT_MESH_TRANSMIT_INT(BT_MESH_ADV(buf)->xmit)); +#if MYNEWT_VAL(BLE_CONTROLLER) + duration = ((BT_MESH_TRANSMIT_COUNT(BT_MESH_ADV(buf)->xmit) + 1) * + (adv_int + 10)); +#else duration = (MESH_SCAN_WINDOW_MS + ((BT_MESH_TRANSMIT_COUNT(BT_MESH_ADV(buf)->xmit) + 1) * (adv_int + 10))); +#endif BT_DBG("type %u om_len %u: %s", BT_MESH_ADV(buf)->type, buf->om_len, bt_hex(buf->om_data, buf->om_len)); @@ -188,6 +191,8 @@ mesh_adv_thread(void *args) if (BT_MESH_ADV(buf)->busy) { BT_MESH_ADV(buf)->busy = 0; adv_send(buf); + } else { + net_buf_unref(buf); } /* os_sched(NULL); */ @@ -395,6 +400,8 @@ done: int bt_mesh_scan_enable(void) { + int err; + #if MYNEWT_VAL(BLE_EXT_ADV) struct ble_gap_ext_disc_params uncoded_params = { .itvl = MESH_SCAN_INTERVAL, .window = MESH_SCAN_WINDOW, @@ -402,7 +409,7 @@ int bt_mesh_scan_enable(void) BT_DBG(""); - return ble_gap_ext_disc(g_mesh_addr_type, 0, 0, 0, 0, 0, + err = ble_gap_ext_disc(g_mesh_addr_type, 0, 0, 0, 0, 0, &uncoded_params, NULL, NULL, NULL); #else struct ble_gap_disc_params scan_param = @@ -411,13 +418,28 @@ int bt_mesh_scan_enable(void) BT_DBG(""); - return ble_gap_disc(g_mesh_addr_type, BLE_HS_FOREVER, &scan_param, NULL, NULL); + err = ble_gap_disc(g_mesh_addr_type, BLE_HS_FOREVER, &scan_param, + NULL, NULL); #endif + if (err && err != BLE_HS_EALREADY) { + BT_ERR("starting scan failed (err %d)", err); + return err; + } + + return 0; } int bt_mesh_scan_disable(void) { + int err; + BT_DBG(""); - return ble_gap_disc_cancel(); + err = ble_gap_disc_cancel(); + if (err && err != BLE_HS_EALREADY) { + BT_ERR("stopping scan failed (err %d)", err); + return err; + } + + return 0; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.h index 8e76e4197..4d0f7d8ba 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/adv.h @@ -42,15 +42,12 @@ struct bt_mesh_adv { busy:1; u8_t xmit; - union { - /* Address, used e.g. for Friend Queue messages */ - u16_t addr; + /* For transport layer segment sending */ + struct { + u8_t attempts; + } seg; - /* For transport layer segment sending */ - struct { - u8_t attempts; - } seg; - }; + u8_t flags; int ref_cnt; struct ble_npl_event ev; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/beacon.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/beacon.c index da909852f..cd540aa8c 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/beacon.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/beacon.c @@ -6,15 +6,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_BEACON_LOG + #include #include #include "os/os_mbuf.h" #include "mesh/mesh.h" -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_BEACON)) -#include "host/ble_hs_log.h" - #include "adv.h" #include "mesh_priv.h" #include "net.h" @@ -147,7 +146,6 @@ static int secure_beacon_send(void) static int unprovisioned_beacon_send(void) { -#if (MYNEWT_VAL(BLE_MESH_PB_ADV)) const struct bt_mesh_prov *prov; u8_t uri_hash[16] = { 0 }; struct os_mbuf *buf; @@ -199,10 +197,43 @@ static int unprovisioned_beacon_send(void) net_buf_unref(buf); } -#endif /* MYNEWT_VAL(BLE_MESH_PB_ADV) */ return 0; } +static void unprovisioned_beacon_recv(struct os_mbuf *buf) +{ +#if MYNEWT_VAL(BLE_MESH_PB_ADV) + const struct bt_mesh_prov *prov; + u8_t *uuid; + u16_t oob_info; + u32_t uri_hash_val; + u32_t *uri_hash = NULL; + + if (buf->om_len != 18 && buf->om_len != 22) { + BT_ERR("Invalid unprovisioned beacon length (%u)", buf->om_len); + return; + } + + uuid = net_buf_simple_pull_mem(buf, 16); + oob_info = net_buf_simple_pull_be16(buf); + + if (buf->om_len == 4) { + uri_hash_val = net_buf_simple_pull_be32(buf); + uri_hash = &uri_hash_val; + } + + BT_DBG("uuid %s", bt_hex(uuid, 16)); + + prov = bt_mesh_prov_get(); + + if (prov->unprovisioned_beacon) { + prov->unprovisioned_beacon(uuid, + (bt_mesh_prov_oob_info_t)oob_info, + uri_hash); + } +#endif +} + static void update_beacon_observation(void) { static bool first_half; @@ -249,11 +280,10 @@ static void beacon_send(struct ble_npl_event *work) k_delayed_work_submit(&beacon_timer, PROVISIONED_INTERVAL); } - } else { + } else if (IS_ENABLED(CONFIG_BT_MESH_PB_ADV)) { unprovisioned_beacon_send(); k_delayed_work_submit(&beacon_timer, UNPROVISIONED_INTERVAL); } - } static void secure_beacon_recv(struct os_mbuf *buf) @@ -351,7 +381,7 @@ void bt_mesh_beacon_recv(struct os_mbuf *buf) type = net_buf_simple_pull_u8(buf); switch (type) { case BEACON_TYPE_UNPROVISIONED: - BT_DBG("Ignoring unprovisioned device beacon"); + unprovisioned_beacon_recv(buf); break; case BEACON_TYPE_SECURE: secure_beacon_recv(buf); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_cli.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_cli.c index 17f01b993..2c2f6c3ff 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_cli.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_cli.c @@ -7,9 +7,9 @@ */ #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG #if MYNEWT_VAL(BLE_MESH_CFG_CLI) -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_MODEL)) #include "mesh/mesh.h" #include @@ -21,6 +21,9 @@ #define CID_NVAL 0xffff +/* 2 byte dummy opcode for getting compile time buffer sizes. */ +#define DUMMY_2_BYTE_OP BT_MESH_MODEL_OP_2(0xff, 0xff) + struct comp_data { u8_t *status; struct os_mbuf *comp; @@ -481,6 +484,38 @@ const struct bt_mesh_model_op bt_mesh_cfg_cli_op[] = { BT_MESH_MODEL_OP_END, }; +static int cfg_cli_init(struct bt_mesh_model *model) +{ + BT_DBG(""); + + if (!bt_mesh_model_in_primary(model)) { + BT_ERR("Configuration Client only allowed in primary element"); + return -EINVAL; + } + + if (!model->user_data) { + BT_ERR("No Configuration Client context provided"); + return -EINVAL; + } + + cli = model->user_data; + cli->model = model; + + /* + * Configuration Model security is device-key based and both the local + * and remote keys are allowed to access this model. + */ + model->keys[0] = BT_MESH_KEY_DEV_ANY; + + k_sem_init(&cli->op_sync, 0, 1); + + return 0; +} + +const struct bt_mesh_model_cb bt_mesh_cfg_cli_cb = { + .init = cfg_cli_init, +}; + static int cli_prepare(void *param, u32_t op) { if (!cli) { @@ -519,10 +554,10 @@ static int cli_wait(void) int bt_mesh_cfg_comp_data_get(u16_t net_idx, u16_t addr, u8_t page, u8_t *status, struct os_mbuf *comp) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_DEV_COMP_DATA_GET, 1); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -556,10 +591,10 @@ done: static int get_state_u8(u16_t net_idx, u16_t addr, u32_t op, u32_t rsp, u8_t *val) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(DUMMY_2_BYTE_OP, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -588,10 +623,10 @@ done: static int set_state_u8(u16_t net_idx, u16_t addr, u32_t op, u32_t rsp, u8_t new_val, u8_t *val) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(DUMMY_2_BYTE_OP, 1); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -670,10 +705,10 @@ int bt_mesh_cfg_gatt_proxy_set(u16_t net_idx, u16_t addr, u8_t val, int bt_mesh_cfg_relay_get(u16_t net_idx, u16_t addr, u8_t *status, u8_t *transmit) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_RELAY_GET, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -706,10 +741,10 @@ done: int bt_mesh_cfg_relay_set(u16_t net_idx, u16_t addr, u8_t new_relay, u8_t new_transmit, u8_t *status, u8_t *transmit) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 2 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_RELAY_SET, 2); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -744,10 +779,10 @@ done: int bt_mesh_cfg_net_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx, const u8_t net_key[16], u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 18 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NET_KEY_ADD, 18); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -788,10 +823,10 @@ int bt_mesh_cfg_app_key_add(u16_t net_idx, u16_t addr, u16_t key_net_idx, u16_t key_app_idx, const u8_t app_key[16], u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(1 + 19 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_APP_KEY_ADD, 19); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -833,10 +868,10 @@ static int mod_app_bind(u16_t net_idx, u16_t addr, u16_t elem_addr, u16_t mod_app_idx, u16_t mod_id, u16_t cid, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 8 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_APP_BIND, 8); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -904,10 +939,10 @@ int bt_mesh_cfg_mod_app_bind_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, static int mod_sub(u32_t op, u16_t net_idx, u16_t addr, u16_t elem_addr, u16_t sub_addr, u16_t mod_id, u16_t cid, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 8 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(DUMMY_2_BYTE_OP, 8); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1014,10 +1049,10 @@ static int mod_sub_va(u32_t op, u16_t net_idx, u16_t addr, u16_t elem_addr, const u8_t label[16], u16_t mod_id, u16_t cid, u16_t *virt_addr, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 22 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(DUMMY_2_BYTE_OP, 22); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1133,10 +1168,10 @@ static int mod_pub_get(u16_t net_idx, u16_t addr, u16_t elem_addr, u16_t mod_id, u16_t cid, struct bt_mesh_cfg_mod_pub *pub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 6 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_PUB_GET, 6); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1205,10 +1240,10 @@ static int mod_pub_set(u16_t net_idx, u16_t addr, u16_t elem_addr, u16_t mod_id, u16_t cid, struct bt_mesh_cfg_mod_pub *pub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 13 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_PUB_SET, 13); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1230,7 +1265,7 @@ static int mod_pub_set(u16_t net_idx, u16_t addr, u16_t elem_addr, net_buf_simple_add_le16(msg, elem_addr); net_buf_simple_add_le16(msg, pub->addr); - net_buf_simple_add_le16(msg, (pub->app_idx & (pub->cred_flag << 12))); + net_buf_simple_add_le16(msg, (pub->app_idx | (pub->cred_flag << 12))); net_buf_simple_add_u8(msg, pub->ttl); net_buf_simple_add_u8(msg, pub->period); net_buf_simple_add_u8(msg, pub->transmit); @@ -1281,10 +1316,10 @@ int bt_mesh_cfg_mod_pub_set_vnd(u16_t net_idx, u16_t addr, u16_t elem_addr, int bt_mesh_cfg_hb_sub_set(u16_t net_idx, u16_t addr, struct bt_mesh_cfg_hb_sub *sub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 5 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_SUB_SET, 5); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1325,10 +1360,10 @@ done: int bt_mesh_cfg_hb_sub_get(u16_t net_idx, u16_t addr, struct bt_mesh_cfg_hb_sub *sub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_SUB_GET, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1366,10 +1401,10 @@ done: int bt_mesh_cfg_hb_pub_set(u16_t net_idx, u16_t addr, const struct bt_mesh_cfg_hb_pub *pub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_PUB_SET, 9); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, - .app_idx = BT_MESH_KEY_DEV, + .app_idx = BT_MESH_KEY_DEV_REMOTE, .addr = addr, .send_ttl = BT_MESH_TTL_DEFAULT, }; @@ -1412,7 +1447,7 @@ done: int bt_mesh_cfg_hb_pub_get(u16_t net_idx, u16_t addr, struct bt_mesh_cfg_hb_pub *pub, u8_t *status) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_PUB_GET, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = BT_MESH_KEY_DEV, @@ -1460,29 +1495,4 @@ void bt_mesh_cfg_cli_timeout_set(s32_t timeout) msg_timeout = timeout; } -int bt_mesh_cfg_cli_init(struct bt_mesh_model *model, bool primary) -{ - BT_DBG("primary %u", primary); - - if (!primary) { - BT_ERR("Configuration Client only allowed in primary element"); - return -EINVAL; - } - - if (!model->user_data) { - BT_ERR("No Configuration Client context provided"); - return -EINVAL; - } - - cli = model->user_data; - cli->model = model; - - /* Configuration Model security is device-key based */ - model->keys[0] = BT_MESH_KEY_DEV; - - k_sem_init(&cli->op_sync, 0, 1); - - return 0; -} - #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_srv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_srv.c index 4ee9e8cfd..57aac90a3 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_srv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/cfg_srv.c @@ -6,16 +6,15 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG + #include #include #include #include "mesh/mesh.h" -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED MYNEWT_VAL(BLE_MESH_DEBUG_MODEL) -#include "host/ble_hs_log.h" - #include "mesh_priv.h" #include "adv.h" #include "net.h" @@ -34,61 +33,7 @@ static struct bt_mesh_cfg_srv *conf; -static struct label { - u16_t ref; - u16_t addr; - u8_t uuid[16]; -} labels[MYNEWT_VAL(BLE_MESH_LABEL_COUNT)]; - -static void hb_send(struct bt_mesh_model *model) -{ - - struct bt_mesh_cfg_srv *cfg = model->user_data; - u16_t feat = 0; - struct __packed { - u8_t init_ttl; - u16_t feat; - } hb; - struct bt_mesh_msg_ctx ctx = { - .net_idx = cfg->hb_pub.net_idx, - .app_idx = BT_MESH_KEY_UNUSED, - .addr = cfg->hb_pub.dst, - .send_ttl = cfg->hb_pub.ttl, - }; - struct bt_mesh_net_tx tx = { - .sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx), - .ctx = &ctx, - .src = bt_mesh_model_elem(model)->addr, - .xmit = bt_mesh_net_transmit_get(), - }; - - hb.init_ttl = cfg->hb_pub.ttl; - - if (bt_mesh_relay_get() == BT_MESH_RELAY_ENABLED) { - feat |= BT_MESH_FEAT_RELAY; - } - - if (bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED) { - feat |= BT_MESH_FEAT_PROXY; - } - - if (bt_mesh_friend_get() == BT_MESH_FRIEND_ENABLED) { - feat |= BT_MESH_FEAT_FRIEND; - } - -#if (MYNEWT_VAL(BLE_MESH_LOW_POWER)) - if (bt_mesh.lpn.state != BT_MESH_LPN_DISABLED) { - feat |= BT_MESH_FEAT_LOW_POWER; - } -#endif - - hb.feat = sys_cpu_to_be16(feat); - - BT_DBG("InitTTL %u feat 0x%04x", cfg->hb_pub.ttl, feat); - - bt_mesh_ctl_send(&tx, TRANS_CTL_OP_HEARTBEAT, &hb, sizeof(hb), - NULL, NULL, NULL); -} +static struct label labels[CONFIG_BT_MESH_LABEL_COUNT]; static int comp_add_elem(struct os_mbuf *buf, struct bt_mesh_elem *elem, bool primary) @@ -175,9 +120,9 @@ static void dev_comp_data_get(struct bt_mesh_model *model, bt_hex(buf->om_data, buf->om_len)); page = net_buf_simple_pull_u8(buf); - if (page != 0) { - BT_WARN("Composition page %u not available", page); - page = 0; + if (page != 0U) { + BT_DBG("Composition page %u not available", page); + page = 0U; } bt_mesh_model_msg_init(sdu, OP_DEV_COMP_DATA_STATUS); @@ -481,7 +426,7 @@ static void app_key_add(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_APP_KEY_STATUS, 4); u16_t key_net_idx, key_app_idx; u8_t status; @@ -508,7 +453,7 @@ static void app_key_update(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_APP_KEY_STATUS, 4); u16_t key_net_idx, key_app_idx; u8_t status; @@ -564,7 +509,7 @@ static void app_key_del(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_APP_KEY_STATUS, 4); u16_t key_net_idx, key_app_idx; struct bt_mesh_app_key *key; u8_t status; @@ -617,8 +562,8 @@ static void app_key_get(struct bt_mesh_model *model, struct os_mbuf *buf) { struct os_mbuf *msg = - NET_BUF_SIMPLE(2 + 3 + 4 + - IDX_LEN(MYNEWT_VAL(BLE_MESH_APP_KEY_COUNT))); + BT_MESH_MODEL_BUF(OP_APP_KEY_LIST, + 3 + IDX_LEN(CONFIG_BT_MESH_APP_KEY_COUNT)); u16_t get_idx, i, prev; u8_t status; @@ -679,8 +624,7 @@ static void beacon_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_BEACON_STATUS, 1); BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -699,8 +643,7 @@ static void beacon_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_BEACON_STATUS, 1); struct bt_mesh_cfg_srv *cfg = model->user_data; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", @@ -744,8 +687,7 @@ static void default_ttl_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_DEFAULT_TTL_STATUS, 1); BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -766,8 +708,7 @@ static void default_ttl_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_DEFAULT_TTL_STATUS, 1); struct bt_mesh_cfg_srv *cfg = model->user_data; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", @@ -803,8 +744,7 @@ done: static void send_gatt_proxy_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_GATT_PROXY_STATUS, 1); bt_mesh_model_msg_init(msg, OP_GATT_PROXY_STATUS); net_buf_simple_add_u8(msg, bt_mesh_gatt_proxy_get()); @@ -833,7 +773,6 @@ static void gatt_proxy_set(struct bt_mesh_model *model, struct os_mbuf *buf) { struct bt_mesh_cfg_srv *cfg = model->user_data; - struct bt_mesh_subnet *sub; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -866,33 +805,10 @@ static void gatt_proxy_set(struct bt_mesh_model *model, bt_mesh_store_cfg(); } - if (cfg->gatt_proxy == BT_MESH_GATT_PROXY_DISABLED) { - int i; - - /* Section 4.2.11.1: "When the GATT Proxy state is set to - * 0x00, the Node Identity state for all subnets shall be set - * to 0x00 and shall not be changed." - */ - for (i = 0; i < ARRAY_SIZE(bt_mesh.sub); i++) { - struct bt_mesh_subnet *sub = &bt_mesh.sub[i]; - - if (sub->net_idx != BT_MESH_KEY_UNUSED) { - bt_mesh_proxy_identity_stop(sub); - } - } - - /* Section 4.2.11: "Upon transition from GATT Proxy state 0x01 - * to GATT Proxy state 0x00 the GATT Bearer Server shall - * disconnect all GATT Bearer Clients. - */ - bt_mesh_proxy_gatt_disconnect(); - } - bt_mesh_adv_update(); - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_PROXY) && sub) { - hb_send(model); + if (cfg->hb_pub.feat & BT_MESH_FEAT_PROXY) { + bt_mesh_heartbeat_send(); } send_status: @@ -903,8 +819,7 @@ static void net_transmit_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NET_TRANSMIT_STATUS, 1); BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -925,8 +840,7 @@ static void net_transmit_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NET_TRANSMIT_STATUS, 1); struct bt_mesh_cfg_srv *cfg = model->user_data; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", @@ -961,8 +875,7 @@ static void relay_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 2 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_RELAY_STATUS, 2); BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -984,8 +897,7 @@ static void relay_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 2 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_RELAY_STATUS, 2); struct bt_mesh_cfg_srv *cfg = model->user_data; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", @@ -995,7 +907,6 @@ static void relay_set(struct bt_mesh_model *model, if (!cfg) { BT_WARN("No Configuration Server context available"); } else if (buf->om_data[0] == 0x00 || buf->om_data[0] == 0x01) { - struct bt_mesh_subnet *sub; bool change; if (cfg->relay == BT_MESH_RELAY_NOT_SUPPORTED) { @@ -1016,9 +927,8 @@ static void relay_set(struct bt_mesh_model *model, BT_MESH_TRANSMIT_COUNT(cfg->relay_retransmit), BT_MESH_TRANSMIT_INT(cfg->relay_retransmit)); - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_RELAY) && sub && change) { - hb_send(model); + if ((cfg->hb_pub.feat & BT_MESH_FEAT_RELAY) && change) { + bt_mesh_heartbeat_send(); } } else { BT_WARN("Invalid Relay value 0x%02x", buf->om_data[0]); @@ -1044,8 +954,7 @@ static void send_mod_pub_status(struct bt_mesh_model *cfg_mod, bool vnd, struct bt_mesh_model *mod, u8_t status, u8_t *mod_id) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 14 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_PUB_STATUS, 14); bt_mesh_model_msg_init(msg, OP_MOD_PUB_STATUS); @@ -1188,25 +1097,61 @@ send_status: status, mod_id); } -#if MYNEWT_VAL(BLE_MESH_LABEL_COUNT) > 0 -static u8_t va_add(u8_t *label_uuid, u16_t *addr) +struct label *get_label(u16_t index) { - struct label *free_slot = NULL; + if (index >= ARRAY_SIZE(labels)) { + return NULL; + } + + return &labels[index]; +} + +#if CONFIG_BT_MESH_LABEL_COUNT > 0 +static inline void va_store(struct label *store) +{ + atomic_set_bit(store->flags, BT_MESH_VA_CHANGED); + if (IS_ENABLED(CONFIG_BT_SETTINGS)) { + bt_mesh_store_label(); + } +} + +static struct label *va_find(const u8_t *label_uuid, + struct label **free_slot) +{ + struct label *match = NULL; int i; + if (free_slot != NULL) { + *free_slot = NULL; + } + for (i = 0; i < ARRAY_SIZE(labels); i++) { - if (!labels[i].ref) { - free_slot = &labels[i]; + if (labels[i].ref == 0) { + if (free_slot != NULL) { + *free_slot = &labels[i]; + } continue; } if (!memcmp(labels[i].uuid, label_uuid, 16)) { - *addr = labels[i].addr; - labels[i].ref++; - return STATUS_SUCCESS; + match = &labels[i]; } } + return match; +} + +static u8_t va_add(u8_t *label_uuid, u16_t *addr) +{ + struct label *update, *free_slot = NULL; + + update = va_find(label_uuid, &free_slot); + if (update) { + update->ref++; + va_store(update); + return 0; + } + if (!free_slot) { return STATUS_INSUFF_RESOURCES; } @@ -1218,23 +1163,24 @@ static u8_t va_add(u8_t *label_uuid, u16_t *addr) free_slot->ref = 1; free_slot->addr = *addr; memcpy(free_slot->uuid, label_uuid, 16); + va_store(free_slot); return STATUS_SUCCESS; } static u8_t va_del(u8_t *label_uuid, u16_t *addr) { - int i; + struct label *update; - for (i = 0; i < ARRAY_SIZE(labels); i++) { - if (!memcmp(labels[i].uuid, label_uuid, 16)) { - if (addr) { - *addr = labels[i].addr; - } + update = va_find(label_uuid, NULL); + if (update) { + update->ref--; - labels[i].ref--; - return STATUS_SUCCESS; + if (addr) { + *addr = update->addr; } + + va_store(update); } if (addr) { @@ -1244,28 +1190,36 @@ static u8_t va_del(u8_t *label_uuid, u16_t *addr) return STATUS_CANNOT_REMOVE; } -static void mod_sub_list_clear(struct bt_mesh_model *mod) +static size_t mod_sub_list_clear(struct bt_mesh_model *mod) { u8_t *label_uuid; + size_t clear_count; int i; /* Unref stored labels related to this model */ - for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { + for (i = 0, clear_count = 0; i < ARRAY_SIZE(mod->groups); i++) { if (!BT_MESH_ADDR_IS_VIRTUAL(mod->groups[i])) { + if (mod->groups[i] != BT_MESH_ADDR_UNASSIGNED) { + mod->groups[i] = BT_MESH_ADDR_UNASSIGNED; + clear_count++; + } + continue; } label_uuid = bt_mesh_label_uuid_get(mod->groups[i]); - if (!label_uuid) { - BT_ERR("Label UUID not found"); - continue; - } - va_del(label_uuid, NULL); + mod->groups[i] = BT_MESH_ADDR_UNASSIGNED; + clear_count++; + + if (label_uuid) { + va_del(label_uuid, NULL); + } else { + BT_ERR("Label UUID not found"); + } } - /* Clear all subscriptions (0x0000 is the unassigned address) */ - memset(mod->groups, 0, sizeof(mod->groups)); + return clear_count; } static void mod_pub_va_set(struct bt_mesh_model *model, @@ -1300,8 +1254,7 @@ static void mod_pub_va_set(struct bt_mesh_model *model, retransmit = net_buf_simple_pull_u8(buf); mod_id = buf->om_data; - BT_DBG("elem_addr 0x%04x pub_addr 0x%04x cred_flag %u", - elem_addr, pub_addr, cred_flag); + BT_DBG("elem_addr 0x%04x cred_flag %u", elem_addr, cred_flag); BT_DBG("pub_app_idx 0x%03x, pub_ttl %u pub_period 0x%02x", pub_app_idx, pub_ttl, pub_period); BT_DBG("retransmit 0x%02x (count %u interval %ums)", retransmit, @@ -1335,10 +1288,20 @@ send_status: status, mod_id); } #else -static void mod_sub_list_clear(struct bt_mesh_model *mod) +static size_t mod_sub_list_clear(struct bt_mesh_model *mod) { - /* Clear all subscriptions (0x0000 is the unassigned address) */ - memset(mod->groups, 0, sizeof(mod->groups)); + size_t clear_count; + int i; + + /* Unref stored labels related to this model */ + for (i = 0, clear_count = 0; i < ARRAY_SIZE(mod->groups); i++) { + if (mod->groups[i] != BT_MESH_ADDR_UNASSIGNED) { + mod->groups[i] = BT_MESH_ADDR_UNASSIGNED; + clear_count++; + } + } + + return clear_count; } static void mod_pub_va_set(struct bt_mesh_model *model, @@ -1395,8 +1358,7 @@ static void send_mod_sub_status(struct bt_mesh_model *model, u16_t elem_addr, u16_t sub_addr, u8_t *mod_id, bool vnd) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_SUB_STATUS, 9); BT_DBG("status 0x%02x elem_addr 0x%04x sub_addr 0x%04x", status, elem_addr, sub_addr); @@ -1429,8 +1391,8 @@ static void mod_sub_add(struct bt_mesh_model *model, struct bt_mesh_elem *elem; u8_t *mod_id; u8_t status; + u16_t *entry; bool vnd; - int i; elem_addr = net_buf_simple_pull_le16(buf); if (!BT_MESH_ADDR_IS_UNICAST(elem_addr)) { @@ -1463,33 +1425,31 @@ static void mod_sub_add(struct bt_mesh_model *model, goto send_status; } - if (bt_mesh_model_find_group(mod, sub_addr)) { + if (bt_mesh_model_find_group(&mod, sub_addr)) { /* Tried to add existing subscription */ + BT_DBG("found existing subscription"); status = STATUS_SUCCESS; goto send_status; } - for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { - if (mod->groups[i] == BT_MESH_ADDR_UNASSIGNED) { - mod->groups[i] = sub_addr; - break; - } - } - - if (i == ARRAY_SIZE(mod->groups)) { + entry = bt_mesh_model_find_group(&mod, BT_MESH_ADDR_UNASSIGNED); + if (!entry) { status = STATUS_INSUFF_RESOURCES; - } else { - status = STATUS_SUCCESS; - - if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_store_mod_sub(mod); - } - - if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER)) { - bt_mesh_lpn_group_add(sub_addr); - } + goto send_status; } + *entry = sub_addr; + status = STATUS_SUCCESS; + + if (IS_ENABLED(CONFIG_BT_SETTINGS)) { + bt_mesh_store_mod_sub(mod); + } + + if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER)) { + bt_mesh_lpn_group_add(sub_addr); + } + + send_status: send_mod_sub_status(model, ctx, status, elem_addr, sub_addr, mod_id, vnd); @@ -1547,7 +1507,7 @@ static void mod_sub_del(struct bt_mesh_model *model, bt_mesh_lpn_group_del(&sub_addr, 1); } - match = bt_mesh_model_find_group(mod, sub_addr); + match = bt_mesh_model_find_group(&mod, sub_addr); if (match) { *match = BT_MESH_ADDR_UNASSIGNED; @@ -1561,6 +1521,18 @@ send_status: mod_id, vnd); } +static enum bt_mesh_walk mod_sub_clear_visitor(struct bt_mesh_model *mod, + u32_t depth, void *user_data) +{ + if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER)) { + bt_mesh_lpn_group_del(mod->groups, ARRAY_SIZE(mod->groups)); + } + + mod_sub_list_clear(mod); + + return BT_MESH_WALK_CONTINUE; +} + static void mod_sub_overwrite(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) @@ -1603,13 +1575,10 @@ static void mod_sub_overwrite(struct bt_mesh_model *model, goto send_status; } - if ((MYNEWT_VAL(BLE_MESH_LOW_POWER))) { - bt_mesh_lpn_group_del(mod->groups, ARRAY_SIZE(mod->groups)); - } - - mod_sub_list_clear(mod); - if (ARRAY_SIZE(mod->groups) > 0) { + bt_mesh_model_tree_walk(bt_mesh_model_root(mod), + mod_sub_clear_visitor, NULL); + mod->groups[0] = sub_addr; status = STATUS_SUCCESS; @@ -1665,11 +1634,8 @@ static void mod_sub_del_all(struct bt_mesh_model *model, goto send_status; } - if ((MYNEWT_VAL(BLE_MESH_LOW_POWER))) { - bt_mesh_lpn_group_del(mod->groups, ARRAY_SIZE(mod->groups)); - } - - mod_sub_list_clear(mod); + bt_mesh_model_tree_walk(bt_mesh_model_root(mod), mod_sub_clear_visitor, + NULL); if (IS_ENABLED(CONFIG_BT_SETTINGS)) { bt_mesh_store_mod_sub(mod); @@ -1682,17 +1648,52 @@ send_status: BT_MESH_ADDR_UNASSIGNED, mod_id, vnd); } +struct mod_sub_list_ctx { + u16_t elem_idx; + struct os_mbuf *msg; +}; + +static enum bt_mesh_walk mod_sub_list_visitor(struct bt_mesh_model *mod, + u32_t depth, void *ctx) +{ + struct mod_sub_list_ctx *visit = ctx; + int count = 0; + int i; + + if (mod->elem_idx != visit->elem_idx) { + return BT_MESH_WALK_CONTINUE; + } + + for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { + if (mod->groups[i] == BT_MESH_ADDR_UNASSIGNED) { + continue; + } + + if (net_buf_simple_tailroom(visit->msg) < + 2 + BT_MESH_MIC_SHORT) { + BT_WARN("No room for all groups"); + return BT_MESH_WALK_STOP; + } + + net_buf_simple_add_le16(visit->msg, mod->groups[i]); + count++; + } + + BT_DBG("sublist: model %u:%x: %u groups", mod->elem_idx, mod->id, + count); + + return BT_MESH_WALK_CONTINUE; +} + static void mod_sub_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = - NET_BUF_SIMPLE(2 + 5 + 4 + - MYNEWT_VAL(BLE_MESH_MODEL_GROUP_COUNT) * 2); + struct os_mbuf *msg = NET_BUF_SIMPLE(BT_MESH_TX_SDU_MAX); + struct mod_sub_list_ctx visit_ctx; struct bt_mesh_model *mod; struct bt_mesh_elem *elem; u16_t addr, id; - int i; addr = net_buf_simple_pull_le16(buf); if (!BT_MESH_ADDR_IS_UNICAST(addr)) { @@ -1727,11 +1728,10 @@ static void mod_sub_get(struct bt_mesh_model *model, net_buf_simple_add_le16(msg, addr); net_buf_simple_add_le16(msg, id); - for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { - if (mod->groups[i] != BT_MESH_ADDR_UNASSIGNED) { - net_buf_simple_add_le16(msg, mod->groups[i]); - } - } + visit_ctx.msg = msg; + visit_ctx.elem_idx = mod->elem_idx; + bt_mesh_model_tree_walk(bt_mesh_model_root(mod), mod_sub_list_visitor, + &visit_ctx); send_list: if (bt_mesh_model_send(model, ctx, msg, NULL, NULL)) { @@ -1747,13 +1747,10 @@ static void mod_sub_get_vnd(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = - NET_BUF_SIMPLE(2 + 7 + 4 + - MYNEWT_VAL(BLE_MESH_MODEL_GROUP_COUNT) * 2); + struct os_mbuf *msg = NET_BUF_SIMPLE(BT_MESH_TX_SDU_MAX); struct bt_mesh_model *mod; struct bt_mesh_elem *elem; u16_t company, addr, id; - int i; addr = net_buf_simple_pull_le16(buf); if (!BT_MESH_ADDR_IS_UNICAST(addr)) { @@ -1792,11 +1789,8 @@ static void mod_sub_get_vnd(struct bt_mesh_model *model, net_buf_simple_add_le16(msg, company); net_buf_simple_add_le16(msg, id); - for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { - if (mod->groups[i] != BT_MESH_ADDR_UNASSIGNED) { - net_buf_simple_add_le16(msg, mod->groups[i]); - } - } + bt_mesh_model_tree_walk(bt_mesh_model_root(mod), mod_sub_list_visitor, + msg); send_list: if (bt_mesh_model_send(model, ctx, msg, NULL, NULL)) { @@ -1818,9 +1812,9 @@ static void mod_sub_va_add(struct bt_mesh_model *model, struct bt_mesh_elem *elem; u8_t *label_uuid; u8_t *mod_id; + u16_t *entry; u8_t status; bool vnd; - int i; elem_addr = net_buf_simple_pull_le16(buf); if (!BT_MESH_ADDR_IS_UNICAST(elem_addr)) { @@ -1854,33 +1848,31 @@ static void mod_sub_va_add(struct bt_mesh_model *model, goto send_status; } - if (bt_mesh_model_find_group(mod, sub_addr)) { + if (bt_mesh_model_find_group(&mod, sub_addr)) { /* Tried to add existing subscription */ status = STATUS_SUCCESS; goto send_status; } - for (i = 0; i < ARRAY_SIZE(mod->groups); i++) { - if (mod->groups[i] == BT_MESH_ADDR_UNASSIGNED) { - mod->groups[i] = sub_addr; - break; - } - } - if (i == ARRAY_SIZE(mod->groups)) { + entry = bt_mesh_model_find_group(&mod, BT_MESH_ADDR_UNASSIGNED); + if (!entry) { status = STATUS_INSUFF_RESOURCES; - } else { - if ((MYNEWT_VAL(BLE_MESH_LOW_POWER))) { - bt_mesh_lpn_group_add(sub_addr); + goto send_status; } - if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_store_mod_sub(mod); - } + *entry = sub_addr; - status = STATUS_SUCCESS; + if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER)) { + bt_mesh_lpn_group_add(sub_addr); } + if (IS_ENABLED(CONFIG_BT_SETTINGS)) { + bt_mesh_store_mod_sub(mod); + } + + status = STATUS_SUCCESS; + send_status: send_mod_sub_status(model, ctx, status, elem_addr, sub_addr, mod_id, vnd); @@ -1936,7 +1928,7 @@ static void mod_sub_va_del(struct bt_mesh_model *model, bt_mesh_lpn_group_del(&sub_addr, 1); } - match = bt_mesh_model_find_group(mod, sub_addr); + match = bt_mesh_model_find_group(&mod, sub_addr); if (match) { *match = BT_MESH_ADDR_UNASSIGNED; @@ -1992,13 +1984,10 @@ static void mod_sub_va_overwrite(struct bt_mesh_model *model, goto send_status; } - if ((MYNEWT_VAL(BLE_MESH_LOW_POWER))) { - bt_mesh_lpn_group_del(mod->groups, ARRAY_SIZE(mod->groups)); - } - - mod_sub_list_clear(mod); - if (ARRAY_SIZE(mod->groups) > 0) { + bt_mesh_model_tree_walk(bt_mesh_model_root(mod), + mod_sub_clear_visitor, NULL); + status = va_add(label_uuid, &sub_addr); if (status == STATUS_SUCCESS) { mod->groups[0] = sub_addr; @@ -2145,8 +2134,7 @@ static void send_net_key_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, u16_t idx, u8_t status) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 3 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NET_KEY_STATUS, 3); bt_mesh_model_msg_init(msg, OP_NET_KEY_STATUS); @@ -2361,8 +2349,8 @@ static void net_key_get(struct bt_mesh_model *model, struct os_mbuf *buf) { struct os_mbuf *msg = - NET_BUF_SIMPLE(2 + 4 + - IDX_LEN(MYNEWT_VAL(BLE_MESH_SUBNET_COUNT))); + BT_MESH_MODEL_BUF(OP_NET_KEY_LIST, + IDX_LEN(CONFIG_BT_MESH_SUBNET_COUNT)); u16_t prev, i; bt_mesh_model_msg_init(msg, OP_NET_KEY_LIST); @@ -2399,8 +2387,7 @@ static void node_identity_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NODE_IDENTITY_STATUS, 4); struct bt_mesh_subnet *sub; u8_t node_id; u16_t idx; @@ -2441,8 +2428,7 @@ static void node_identity_set(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NODE_IDENTITY_STATUS, 4); struct bt_mesh_subnet *sub; u8_t node_id; u16_t idx; @@ -2474,12 +2460,7 @@ static void node_identity_set(struct bt_mesh_model *model, net_buf_simple_add_u8(msg, STATUS_SUCCESS); net_buf_simple_add_le16(msg, idx); - /* Section 4.2.11.1: "When the GATT Proxy state is set to - * 0x00, the Node Identity state for all subnets shall be set - * to 0x00 and shall not be changed." - */ - if (MYNEWT_VAL(BLE_MESH_GATT_PROXY) && - bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED) { + if (MYNEWT_VAL(BLE_MESH_GATT_PROXY)) { if (node_id) { bt_mesh_proxy_identity_start(sub); } else { @@ -2522,7 +2503,7 @@ static void mod_app_bind(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_APP_STATUS, 9); u16_t elem_addr, key_app_idx; struct bt_mesh_model *mod; struct bt_mesh_elem *elem; @@ -2583,7 +2564,7 @@ static void mod_app_unbind(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_MOD_APP_STATUS, 9); u16_t elem_addr, key_app_idx; struct bt_mesh_model *mod; struct bt_mesh_elem *elem; @@ -2638,7 +2619,11 @@ static void mod_app_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + KEY_LIST_LEN + 4); + struct os_mbuf *msg = NET_BUF_SIMPLE(max(BT_MESH_MODEL_BUF_LEN(OP_VND_MOD_APP_LIST, + 9 + KEY_LIST_LEN), + BT_MESH_MODEL_BUF_LEN(OP_SIG_MOD_APP_LIST, + 9 + KEY_LIST_LEN))); + struct bt_mesh_model *mod; struct bt_mesh_elem *elem; u8_t *mod_id, status; @@ -2709,8 +2694,7 @@ static void node_reset(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_NODE_RESET_STATUS, 0); BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -2733,8 +2717,7 @@ static void node_reset(struct bt_mesh_model *model, static void send_friend_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_FRIEND_STATUS, 1); struct bt_mesh_cfg_srv *cfg = model->user_data; bt_mesh_model_msg_init(msg, OP_FRIEND_STATUS); @@ -2762,7 +2745,6 @@ static void friend_set(struct bt_mesh_model *model, struct os_mbuf *buf) { struct bt_mesh_cfg_srv *cfg = model->user_data; - struct bt_mesh_subnet *sub; BT_DBG("net_idx 0x%04x app_idx 0x%04x src 0x%04x len %u: %s", ctx->net_idx, ctx->app_idx, ctx->addr, buf->om_len, @@ -2796,9 +2778,8 @@ static void friend_set(struct bt_mesh_model *model, } } - sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx); - if ((cfg->hb_pub.feat & BT_MESH_FEAT_FRIEND) && sub) { - hb_send(model); + if (cfg->hb_pub.feat & BT_MESH_FEAT_FRIEND) { + bt_mesh_heartbeat_send(); } send_status: @@ -2809,8 +2790,7 @@ static void lpn_timeout_get(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 5 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_LPN_TIMEOUT_STATUS, 5); struct bt_mesh_friend *frnd; u16_t lpn_addr; s32_t timeout; @@ -2859,8 +2839,7 @@ static void send_krp_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, u16_t idx, u8_t phase, u8_t status) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 4 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_KRP_STATUS, 4); bt_mesh_model_msg_init(msg, OP_KRP_STATUS); @@ -2999,8 +2978,7 @@ static void hb_pub_send_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, u8_t status, struct hb_pub_param *orig_msg) { - /* Needed size: opcode (1 byte) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(1 + 10 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_PUB_STATUS, 10); struct bt_mesh_cfg_srv *cfg = model->user_data; BT_DBG("src 0x%04x status 0x%02x", ctx->addr, status); @@ -3125,8 +3103,7 @@ failed: static void hb_sub_send_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, u8_t status) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 9 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEARTBEAT_SUB_STATUS, 9); struct bt_mesh_cfg_srv *cfg = model->user_data; u16_t period; s64_t uptime; @@ -3306,7 +3283,6 @@ const struct bt_mesh_model_op bt_mesh_cfg_srv_op[] = { static void hb_publish(struct ble_npl_event *work) { struct bt_mesh_cfg_srv *cfg = ble_npl_event_get_arg(work); - struct bt_mesh_model *model = cfg->model; struct bt_mesh_subnet *sub; u16_t period_ms; @@ -3329,7 +3305,7 @@ static void hb_publish(struct ble_npl_event *work) k_delayed_work_submit(&cfg->hb_pub.timer, period_ms); } - hb_send(model); + bt_mesh_heartbeat_send(); if (cfg->hb_pub.count != 0xffff) { cfg->hb_pub.count--; @@ -3353,10 +3329,17 @@ static bool conf_is_valid(struct bt_mesh_cfg_srv *cfg) return true; } -int bt_mesh_cfg_srv_init(struct bt_mesh_model *model, bool primary) +static int cfg_srv_init(struct bt_mesh_model *model) { struct bt_mesh_cfg_srv *cfg = model->user_data; + BT_DBG(""); + + if (!bt_mesh_model_in_primary(model)) { + BT_ERR("Configuration Server only allowed in primary element"); + return -EINVAL; + } + if (!cfg) { BT_ERR("No Configuration Server context provided"); return -EINVAL; @@ -3367,8 +3350,11 @@ int bt_mesh_cfg_srv_init(struct bt_mesh_model *model, bool primary) return -EINVAL; } - /* Configuration Model security is device-key based */ - model->keys[0] = BT_MESH_KEY_DEV; + /* + * Configuration Model security is device-key based and only the local + * device-key is allowed to access this model. + */ + model->keys[0] = BT_MESH_KEY_DEV_LOCAL; if (!(MYNEWT_VAL(BLE_MESH_RELAY))) { cfg->relay = BT_MESH_RELAY_NOT_SUPPORTED; @@ -3394,19 +3380,33 @@ int bt_mesh_cfg_srv_init(struct bt_mesh_model *model, bool primary) return 0; } +const struct bt_mesh_model_cb bt_mesh_cfg_srv_cb = { + .init = cfg_srv_init, +}; + static void mod_reset(struct bt_mesh_model *mod, struct bt_mesh_elem *elem, bool vnd, bool primary, void *user_data) { + size_t clear_count; + /* Clear model state that isn't otherwise cleared. E.g. AppKey * binding and model publication is cleared as a consequence - * of removing all app keys, however model subscription clearing - * must be taken care of here. + * of removing all app keys, however model subscription and user data + * clearing must be taken care of here. */ - mod_sub_list_clear(mod); + clear_count = mod_sub_list_clear(mod); if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_store_mod_sub(mod); + if (clear_count) { + bt_mesh_store_mod_sub(mod); + } + + bt_mesh_model_data_store(mod, vnd, NULL, 0); + } + + if (mod->cb && mod->cb->reset) { + mod->cb->reset(mod); } } @@ -3415,6 +3415,8 @@ void bt_mesh_cfg_reset(void) struct bt_mesh_cfg_srv *cfg = conf; int i; + BT_DBG(""); + if (!cfg) { return; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.c index 79553cba4..20b110378 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.c @@ -6,6 +6,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_CRYPTO_LOG + #include #include #include @@ -26,12 +29,8 @@ #include #include #include - #endif -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_CRYPTO)) -#include "host/ble_hs_log.h" - #include "crypto.h" #define NET_MIC_LEN(pdu) (((pdu)[1] & 0x80) ? 8 : 4) @@ -315,7 +314,7 @@ static int bt_mesh_ccm_decrypt(const u8_t key[16], u8_t nonce[13], } } - for (i = 0; i < aad_len; i++, j++) { + for (; i < aad_len; i++, j++) { pmsg[i] = Xn[i] ^ aad[j]; } @@ -479,7 +478,7 @@ static int bt_mesh_ccm_encrypt(const u8_t key[16], u8_t nonce[13], } } - for (i = 0; i < aad_len; i++, j++) { + for (; i < aad_len; i++, j++) { pmsg[i] = Xn[i] ^ aad[j]; } @@ -569,7 +568,6 @@ static int bt_mesh_ccm_encrypt(const u8_t key[16], u8_t nonce[13], return 0; } -#if (MYNEWT_VAL(BLE_MESH_PROXY)) static void create_proxy_nonce(u8_t nonce[13], const u8_t *pdu, u32_t iv_index) { @@ -595,7 +593,6 @@ static void create_proxy_nonce(u8_t nonce[13], const u8_t *pdu, /* IV Index */ sys_put_be32(iv_index, &nonce[9]); } -#endif /* PROXY */ static void create_net_nonce(u8_t nonce[13], const u8_t *pdu, u32_t iv_index) @@ -661,15 +658,11 @@ int bt_mesh_net_encrypt(const u8_t key[16], struct os_mbuf *buf, bt_hex(key, 16), mic_len); BT_DBG("PDU (len %u) %s", buf->om_len, bt_hex(buf->om_data, buf->om_len)); -#if (MYNEWT_VAL(BLE_MESH_PROXY)) - if (proxy) { + if (IS_ENABLED(CONFIG_BT_MESH_PROXY) && proxy) { create_proxy_nonce(nonce, buf->om_data, iv_index); } else { create_net_nonce(nonce, buf->om_data, iv_index); } -#else - create_net_nonce(nonce, buf->om_data, iv_index); -#endif BT_DBG("Nonce %s", bt_hex(nonce, 13)); @@ -692,15 +685,11 @@ int bt_mesh_net_decrypt(const u8_t key[16], struct os_mbuf *buf, BT_DBG("iv_index %u, key %s mic_len %u", (unsigned) iv_index, bt_hex(key, 16), mic_len); -#if (MYNEWT_VAL(BLE_MESH_PROXY)) - if (proxy) { + if (IS_ENABLED(CONFIG_BT_MESH_PROXY) && proxy) { create_proxy_nonce(nonce, buf->om_data, iv_index); } else { create_net_nonce(nonce, buf->om_data, iv_index); } -#else - create_net_nonce(nonce, buf->om_data, iv_index); -#endif BT_DBG("Nonce %s", bt_hex(nonce, 13)); @@ -728,12 +717,11 @@ static void create_app_nonce(u8_t nonce[13], bool dev_key, u8_t aszmic, sys_put_be32(iv_index, &nonce[9]); } -int bt_mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, - struct os_mbuf *buf, const u8_t *ad, - u16_t src, u16_t dst, u32_t seq_num, u32_t iv_index) +static int mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, const u8_t *ad, + u16_t src, u16_t dst, u32_t seq_num, u32_t iv_index) { u8_t nonce[13]; - int err; BT_DBG("AppKey %s", bt_hex(key, 16)); BT_DBG("dev_key %u src 0x%04x dst 0x%04x", dev_key, src, dst); @@ -745,8 +733,35 @@ int bt_mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, BT_DBG("Nonce %s", bt_hex(nonce, 13)); - err = bt_mesh_ccm_encrypt(key, nonce, buf->om_data, buf->om_len, ad, - ad ? 16 : 0, buf->om_data, APP_MIC_LEN(aszmic)); + return bt_mesh_ccm_encrypt(key, nonce, buf->om_data, buf->om_len, ad, + ad ? 16 : 0, buf->om_data, + APP_MIC_LEN(aszmic)); +} + +int bt_mesh_app_encrypt_in_place(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, const u8_t *ad, u16_t src, + u16_t dst, u32_t seq_num, u32_t iv_index) +{ + int err; + + err = mesh_app_encrypt(key, dev_key, aszmic, buf, ad, src, dst, + seq_num, iv_index); + if (!err) { + BT_DBG("Encr: %s", bt_hex(buf->om_data, buf->om_len)); + } + + return err; +} + +int bt_mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, const u8_t *ad, + u16_t src, u16_t dst, u32_t seq_num, u32_t iv_index) +{ + int err; + + err = mesh_app_encrypt(key, dev_key, aszmic, buf, ad, src, dst, + seq_num, iv_index); + if (!err) { net_buf_simple_add(buf, APP_MIC_LEN(aszmic)); BT_DBG("Encr: %s", bt_hex(buf->om_data, buf->om_len)); @@ -755,23 +770,43 @@ int bt_mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, return err; } -int bt_mesh_app_decrypt(const u8_t key[16], bool dev_key, u8_t aszmic, - struct os_mbuf *buf, struct os_mbuf *out, - const u8_t *ad, u16_t src, u16_t dst, u32_t seq_num, - u32_t iv_index) +static int mesh_app_decrypt(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, struct os_mbuf *out, + const u8_t *ad, u16_t src, u16_t dst, + u32_t seq_num, u32_t iv_index) { u8_t nonce[13]; - int err; - BT_DBG("EncData (len %u) %s", buf->om_len, bt_hex(buf->om_data, buf->om_len)); + BT_DBG("EncData (len %u) %s", buf->om_len, + bt_hex(buf->om_data, buf->om_len)); create_app_nonce(nonce, dev_key, aszmic, src, dst, seq_num, iv_index); BT_DBG("AppKey %s", bt_hex(key, 16)); BT_DBG("Nonce %s", bt_hex(nonce, 13)); - err = bt_mesh_ccm_decrypt(key, nonce, buf->om_data, buf->om_len, ad, - ad ? 16 : 0, out->om_data, APP_MIC_LEN(aszmic)); + return bt_mesh_ccm_decrypt(key, nonce, buf->om_data, buf->om_len, ad, + ad ? 16 : 0, out->om_data, + APP_MIC_LEN(aszmic)); +} + +int bt_mesh_app_decrypt_in_place(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, const u8_t *ad, u16_t src, + u16_t dst, u32_t seq_num, u32_t iv_index) +{ + return mesh_app_decrypt(key, dev_key, aszmic, buf, buf, + ad, src, dst, seq_num, iv_index); +} + +int bt_mesh_app_decrypt(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, struct os_mbuf *out, + const u8_t *ad, u16_t src, u16_t dst, u32_t seq_num, + u32_t iv_index) +{ + int err; + + err = mesh_app_decrypt(key, dev_key, aszmic, buf, out, + ad, src, dst, seq_num, iv_index); if (!err) { net_buf_simple_add(out, buf->om_len); } @@ -900,6 +935,12 @@ int bt_mesh_prov_decrypt(const u8_t key[16], u8_t nonce[13], return bt_mesh_ccm_decrypt(key, nonce, data, 25, NULL, 0, out, 8); } +int bt_mesh_prov_encrypt(const u8_t key[16], u8_t nonce[13], + const u8_t data[25], u8_t out[25 + 8]) +{ + return bt_mesh_ccm_encrypt(key, nonce, data, 25, NULL, 0, out, 8); +} + int bt_mesh_beacon_auth(const u8_t beacon_key[16], u8_t flags, const u8_t net_id[8], u32_t iv_index, u8_t auth[8]) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.h index a56e6b9e8..745cf324a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/crypto.h @@ -131,10 +131,18 @@ int bt_mesh_net_encrypt(const u8_t key[16], struct os_mbuf *buf, int bt_mesh_net_decrypt(const u8_t key[16], struct os_mbuf *buf, u32_t iv_index, bool proxy); +int bt_mesh_app_encrypt_in_place(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf*buf, const u8_t *ad, u16_t src, + u16_t dst, u32_t seq_num, u32_t iv_index); + int bt_mesh_app_encrypt(const u8_t key[16], bool dev_key, u8_t aszmic, struct os_mbuf*buf, const u8_t *ad, u16_t src, u16_t dst, u32_t seq_num, u32_t iv_index); +int bt_mesh_app_decrypt_in_place(const u8_t key[16], bool dev_key, u8_t aszmic, + struct os_mbuf *buf, const u8_t *ad, u16_t src, + u16_t dst, u32_t seq_num, u32_t iv_index); + int bt_mesh_app_decrypt(const u8_t key[16], bool dev_key, u8_t aszmic, struct os_mbuf*buf, struct os_mbuf*out, const u8_t *ad, u16_t src, u16_t dst, u32_t seq_num, @@ -157,4 +165,6 @@ int bt_mesh_prov_conf(const u8_t conf_key[16], const u8_t rand[16], int bt_mesh_prov_decrypt(const u8_t key[16], u8_t nonce[13], const u8_t data[25 + 8], u8_t out[25]); +int bt_mesh_prov_encrypt(const u8_t key[16], u8_t nonce[13], + const u8_t data[25], u8_t out[25 + 8]); #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/foundation.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/foundation.h index 2c257ee38..ee615ae9e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/foundation.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/foundation.h @@ -115,11 +115,16 @@ #define STATUS_UNSPECIFIED 0x10 #define STATUS_INVALID_BINDING 0x11 -int bt_mesh_cfg_srv_init(struct bt_mesh_model *model, bool primary); -int bt_mesh_health_srv_init(struct bt_mesh_model *model, bool primary); +enum { + BT_MESH_VA_CHANGED, /* Label information changed */ +}; -int bt_mesh_cfg_cli_init(struct bt_mesh_model *model, bool primary); -int bt_mesh_health_cli_init(struct bt_mesh_model *model, bool primary); +struct label { + u16_t ref; + u16_t addr; + u8_t uuid[16]; + atomic_t flags[1]; +}; void bt_mesh_cfg_reset(void); @@ -127,6 +132,8 @@ void bt_mesh_heartbeat(u16_t src, u16_t dst, u8_t hops, u16_t feat); void bt_mesh_attention(struct bt_mesh_model *model, u8_t time); +struct label *get_label(u16_t index); + u8_t *bt_mesh_label_uuid_get(u16_t addr); struct bt_mesh_hb_pub *bt_mesh_hb_pub_get(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.c index a9f25f777..9056a8658 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.c @@ -1,4 +1,4 @@ -/* Bluetooth Mesh */ + /* Bluetooth Mesh */ /* * Copyright (c) 2017 Intel Corporation @@ -6,17 +6,15 @@ * SPDX-License-Identifier: Apache-2.0 */ - #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_CRYPTO_LOG + #if MYNEWT_VAL(BLE_MESH_FRIEND) #include #include #include -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_FRIEND)) -#include "host/ble_hs_log.h" - #include "mesh/mesh.h" #include "mesh/slist.h" #include "mesh_priv.h" @@ -40,9 +38,9 @@ static os_membuf_t friend_buf_mem[OS_MEMPOOL_SIZE( struct os_mbuf_pool friend_os_mbuf_pool; static struct os_mempool friend_buf_mempool; +#define NET_BUF_FRAGS BIT(0) -#define FRIEND_ADV(buf) CONTAINER_OF(BT_MESH_ADV(buf), \ - struct friend_adv, adv) +#define FRIEND_ADV(buf) CONTAINER_OF(BT_MESH_ADV(buf), struct friend_adv, adv) /* PDUs from Friend to the LPN should only be transmitted once with the * smallest possible interval (20ms). @@ -63,54 +61,15 @@ struct friend_pdu_info { static struct friend_adv { struct bt_mesh_adv adv; - u64_t seq_auth; + u16_t app_idx; } adv_pool[FRIEND_BUF_COUNT]; static struct bt_mesh_adv *adv_alloc(int id) { + adv_pool[id].app_idx = BT_MESH_KEY_UNUSED; return &adv_pool[id].adv; } -static void discard_buffer(void) -{ - struct bt_mesh_friend *frnd = &bt_mesh.frnd[0]; - struct os_mbuf *buf; - int i; - - /* Find the Friend context with the most queued buffers */ - for (i = 1; i < ARRAY_SIZE(bt_mesh.frnd); i++) { - if (bt_mesh.frnd[i].queue_size > frnd->queue_size) { - frnd = &bt_mesh.frnd[i]; - } - } - - buf = net_buf_slist_get(&frnd->queue); - __ASSERT_NO_MSG(buf != NULL); - BT_WARN("Discarding buffer %p for LPN 0x%04x", buf, frnd->lpn); - net_buf_unref(buf); -} - -static struct os_mbuf *friend_buf_alloc(u16_t src) -{ - struct os_mbuf *buf; - - do { - buf = bt_mesh_adv_create_from_pool(&friend_os_mbuf_pool, adv_alloc, - BT_MESH_ADV_DATA, - FRIEND_XMIT, K_NO_WAIT); - if (!buf) { - discard_buffer(); - } - } while (!buf); - - BT_MESH_ADV(buf)->addr = src; - FRIEND_ADV(buf)->seq_auth = TRANS_SEQ_AUTH_NVAL; - - BT_DBG("allocated buf %p", buf); - - return buf; -} - static bool is_lpn_unicast(struct bt_mesh_friend *frnd, u16_t addr) { if (frnd->lpn == BT_MESH_ADDR_UNASSIGNED) { @@ -150,6 +109,17 @@ struct bt_mesh_friend *bt_mesh_friend_find(u16_t net_idx, u16_t lpn_addr, return NULL; } +static void purge_buffers(struct net_buf_slist_t *list) +{ + struct os_mbuf *buf; + + while (!net_buf_slist_is_empty(list)) { + buf = (void *)net_buf_slist_get(list); + BT_MESH_ADV(buf)->flags &= ~NET_BUF_FRAGS; + net_buf_unref(buf); + } +} + /* Intentionally start a little bit late into the ReceiveWindow when * it's large enough. This may improve reliability with some platforms, * like the PTS, where the receiver might not have sufficiently compensated @@ -184,16 +154,13 @@ static void friend_clear(struct bt_mesh_friend *frnd) frnd->last = NULL; } - while (!net_buf_slist_is_empty(&frnd->queue)) { - net_buf_unref(net_buf_slist_get(&frnd->queue)); - } + purge_buffers(&frnd->queue); for (i = 0; i < ARRAY_SIZE(frnd->seg); i++) { struct bt_mesh_friend_seg *seg = &frnd->seg[i]; - while (!net_buf_slist_is_empty(&seg->queue)) { - net_buf_unref(net_buf_slist_get(&seg->queue)); - } + purge_buffers(&seg->queue); + seg->seg_count = 0U; } frnd->valid = 0; @@ -327,29 +294,16 @@ static struct os_mbuf *create_friend_pdu(struct bt_mesh_friend *frnd, struct friend_pdu_info *info, struct os_mbuf *sdu) { - struct bt_mesh_subnet *sub; - const u8_t *enc, *priv; struct os_mbuf *buf; - u8_t nid; - sub = bt_mesh_subnet_get(frnd->net_idx); - __ASSERT_NO_MSG(sub != NULL); - - buf = friend_buf_alloc(info->src); - - /* Friend Offer needs master security credentials */ - if (info->ctl && TRANS_CTL_OP(sdu->om_data) == TRANS_CTL_OP_FRIEND_OFFER) { - enc = sub->keys[sub->kr_flag].enc; - priv = sub->keys[sub->kr_flag].privacy; - nid = sub->keys[sub->kr_flag].nid; - } else { - if (friend_cred_get(sub, frnd->lpn, &nid, &enc, &priv)) { - BT_ERR("friend_cred_get failed"); - goto failed; - } + buf = bt_mesh_adv_create_from_pool(&friend_os_mbuf_pool, adv_alloc, + BT_MESH_ADV_DATA, + FRIEND_XMIT, K_NO_WAIT); + if (!buf) { + return NULL; } - net_buf_add_u8(buf, (nid | (info->iv_index & 1) << 7)); + net_buf_add_u8(buf, (info->iv_index & 1) << 7); /* Will be reset in encryption */ if (info->ctl) { net_buf_add_u8(buf, info->ttl | 0x80); @@ -364,25 +318,187 @@ static struct os_mbuf *create_friend_pdu(struct bt_mesh_friend *frnd, net_buf_add_mem(buf, sdu->om_data, sdu->om_len); - /* We re-encrypt and obfuscate using the received IVI rather than - * the normal TX IVI (which may be different) since the transport - * layer nonce includes the IVI. - */ - if (bt_mesh_net_encrypt(enc, buf, info->iv_index, false)) { - BT_ERR("Re-encrypting failed"); - goto failed; - } - - if (bt_mesh_net_obfuscate(buf->om_data, info->iv_index, priv)) { - BT_ERR("Re-obfuscating failed"); - goto failed; - } - return buf; +} -failed: - net_buf_unref(buf); - return NULL; +struct unseg_app_sdu_meta { + struct bt_mesh_net_rx net; + const u8_t *key; + struct bt_mesh_subnet *subnet; + bool is_dev_key; + u8_t aid; + u8_t *ad; +}; + +static int unseg_app_sdu_unpack(struct bt_mesh_friend *frnd, + struct os_mbuf *buf, + struct unseg_app_sdu_meta *meta) +{ + u16_t app_idx = FRIEND_ADV(buf)->app_idx; + int err; + + meta->subnet = bt_mesh_subnet_get(frnd->net_idx); + meta->is_dev_key = (app_idx == BT_MESH_KEY_DEV); + meta->is_dev_key = BT_MESH_IS_DEV_KEY(app_idx); + bt_mesh_net_header_parse(buf, &meta->net); + err = bt_mesh_app_key_get(meta->subnet, app_idx, meta->net.ctx.recv_dst, + &meta->key, &meta->aid); + if (err) { + return err; + } + + if (BT_MESH_ADDR_IS_VIRTUAL(meta->net.ctx.recv_dst)) { + meta->ad = bt_mesh_label_uuid_get(meta->net.ctx.recv_dst); + if (!meta->ad) { + return -ENOENT; + } + } else { + meta->ad = NULL; + } + + return 0; +} + +static int unseg_app_sdu_decrypt(struct bt_mesh_friend *frnd, + struct os_mbuf *buf, + const struct unseg_app_sdu_meta *meta) +{ + struct net_buf_simple_state state; + int err; + + BT_DBG(""); + + net_buf_simple_save(buf, &state); + net_buf_simple_pull_mem(buf, 10); + buf->om_len -= 4; + + err = bt_mesh_app_decrypt_in_place(meta->key, meta->is_dev_key, + 0, buf, meta->ad, meta->net.ctx.addr, + meta->net.ctx.recv_dst, meta->net.seq, + BT_MESH_NET_IVI_TX); + + net_buf_simple_restore(buf, &state); + return err; +} + +static int unseg_app_sdu_encrypt(struct bt_mesh_friend *frnd, + struct os_mbuf *buf, + const struct unseg_app_sdu_meta *meta) +{ + struct net_buf_simple_state state; + int err; + + BT_DBG(""); + + net_buf_simple_save(buf, &state); + net_buf_simple_pull_mem(buf, 10); + buf->om_len -= 4; + + err = bt_mesh_app_encrypt_in_place(meta->key, meta->is_dev_key, 0, buf, + meta->ad, meta->net.ctx.addr, + meta->net.ctx.recv_dst, bt_mesh.seq, + BT_MESH_NET_IVI_TX); + + net_buf_simple_restore(buf, &state); + return err; +} + +static int unseg_app_sdu_prepare(struct bt_mesh_friend *frnd, + struct os_mbuf *buf) +{ + struct unseg_app_sdu_meta meta; + int err; + + BT_DBG(""); + + if (FRIEND_ADV(buf)->app_idx == BT_MESH_KEY_UNUSED) { + return 0; + } + + err = unseg_app_sdu_unpack(frnd, buf, &meta); + if (err) { + return err; + } + + /* No need to reencrypt the message if the sequence number is + * unchanged. + */ + if (meta.net.seq == bt_mesh.seq) { + return 0; + } + + err = unseg_app_sdu_decrypt(frnd, buf, &meta); + if (err) { + BT_WARN("Decryption failed! %d", err); + return err; + } + + err = unseg_app_sdu_encrypt(frnd, buf, &meta); + if (err) { + BT_WARN("Re-encryption failed! %d", err); + } + + return err; +} + +static int encrypt_friend_pdu(struct bt_mesh_friend *frnd, struct os_mbuf *buf, + bool master_cred) +{ + struct bt_mesh_subnet *sub = bt_mesh_subnet_get(frnd->net_idx); + const u8_t *enc, *priv; + u32_t iv_index; + u16_t src; + u8_t nid; + int err; + + if (master_cred) { + enc = sub->keys[sub->kr_flag].enc; + priv = sub->keys[sub->kr_flag].privacy; + nid = sub->keys[sub->kr_flag].nid; + } else { + if (friend_cred_get(sub, frnd->lpn, &nid, &enc, &priv)) { + BT_ERR("friend_cred_get failed"); + return -ENOENT; + } + } + + src = sys_get_be16(&buf->om_data[5]); + + if (bt_mesh_elem_find(src)) { + u32_t seq; + + if (FRIEND_ADV(buf)->app_idx != BT_MESH_KEY_UNUSED) { + err = unseg_app_sdu_prepare(frnd, buf); + if (err) { + return err; + } + } + + seq = bt_mesh_next_seq(); + buf->om_data[2] = seq >> 16; + buf->om_data[3] = seq >> 8; + buf->om_data[4] = seq; + + iv_index = BT_MESH_NET_IVI_TX; + FRIEND_ADV(buf)->app_idx = BT_MESH_KEY_UNUSED; + } else { + u8_t ivi = (buf->om_data[0] >> 7); + iv_index = (bt_mesh.iv_index - ((bt_mesh.iv_index & 1) != ivi)); + } + + buf->om_data[0] = (nid | (iv_index & 1) << 7); + + if (bt_mesh_net_encrypt(enc, buf, iv_index, false)) { + BT_ERR("Encrypting failed"); + return -EINVAL; + } + + if (bt_mesh_net_obfuscate(buf->om_data, iv_index, priv)) { + BT_ERR("Obfuscating failed"); + return -EINVAL; + } + + return 0; } static struct os_mbuf *encode_friend_ctl(struct bt_mesh_friend *frnd, @@ -390,7 +506,6 @@ static struct os_mbuf *encode_friend_ctl(struct bt_mesh_friend *frnd, struct os_mbuf *sdu) { struct friend_pdu_info info; - u32_t seq; BT_DBG("LPN 0x%04x", frnd->lpn); @@ -402,10 +517,7 @@ static struct os_mbuf *encode_friend_ctl(struct bt_mesh_friend *frnd, info.ctl = 1; info.ttl = 0; - seq = bt_mesh_next_seq(); - info.seq[0] = seq >> 16; - info.seq[1] = seq >> 8; - info.seq[2] = seq; + memset(info.seq, 0, sizeof(info.seq)); info.iv_index = BT_MESH_NET_IVI_TX; @@ -455,6 +567,10 @@ static void enqueue_sub_cfm(struct bt_mesh_friend *frnd, u8_t xact) goto done; } + if (encrypt_friend_pdu(frnd, buf, false)) { + return; + } + if (frnd->last) { BT_DBG("Discarding last PDU"); net_buf_unref(frnd->last); @@ -693,8 +809,8 @@ static void clear_procedure_start(struct bt_mesh_friend *frnd) { BT_DBG("LPN 0x%04x (old) Friend 0x%04x", frnd->lpn, frnd->clear.frnd); - frnd->clear.start = k_uptime_get_32() + (2 * frnd->poll_to); - frnd->clear.repeat_sec = 1; + frnd->clear.start = k_uptime_get_32(); + frnd->clear.repeat_sec = 1U; send_friend_clear(frnd); } @@ -763,6 +879,10 @@ static void enqueue_offer(struct bt_mesh_friend *frnd, s8_t rssi) goto done; } + if (encrypt_friend_pdu(frnd, buf, true)) { + return; + } + frnd->counter++; if (frnd->last) { @@ -886,7 +1006,7 @@ init_friend: frnd->clear.frnd = sys_be16_to_cpu(msg->prev_addr); BT_DBG("LPN 0x%04x rssi %d recv_delay %u poll_to %ums", - frnd->lpn, rx->rssi, frnd->recv_delay, + frnd->lpn, rx->ctx.recv_rssi, frnd->recv_delay, (unsigned) frnd->poll_to); if (BT_MESH_ADDR_IS_UNICAST(frnd->clear.frnd) && @@ -895,45 +1015,70 @@ init_friend: } k_delayed_work_submit(&frnd->timer, - offer_delay(frnd, rx->rssi, msg->criteria)); + offer_delay(frnd, rx->ctx.recv_rssi, + msg->criteria)); friend_cred_create(rx->sub, frnd->lpn, frnd->lpn_counter, frnd->counter); - enqueue_offer(frnd, rx->rssi); + enqueue_offer(frnd, rx->ctx.recv_rssi); return 0; } +static bool is_seg(struct bt_mesh_friend_seg *seg, u16_t src, u16_t seq_zero) +{ + struct os_mbuf *buf = (void *)net_buf_slist_peek_head(&seg->queue); + struct net_buf_simple_state state; + u16_t buf_seq_zero; + u16_t buf_src; + + if (!buf) { + return false; + } + + net_buf_simple_save(buf, &state); + net_buf_skip(buf, 5); /* skip IVI, NID, CTL, TTL, SEQ */ + buf_src = net_buf_pull_be16(buf); + net_buf_skip(buf, 3); /* skip DST, OP/AID */ + buf_seq_zero = ((net_buf_pull_be16(buf) >> 2) & TRANS_SEQ_ZERO_MASK); + net_buf_simple_restore(buf, &state); + + return ((src == buf_src) && (seq_zero == buf_seq_zero)); +} + static struct bt_mesh_friend_seg *get_seg(struct bt_mesh_friend *frnd, - u16_t src, u64_t *seq_auth) + u16_t src, u16_t seq_zero, + u8_t seg_count) { struct bt_mesh_friend_seg *unassigned = NULL; int i; for (i = 0; i < ARRAY_SIZE(frnd->seg); i++) { struct bt_mesh_friend_seg *seg = &frnd->seg[i]; - struct os_mbuf *buf = (void *)net_buf_slist_peek_head(&seg->queue); - if (buf && BT_MESH_ADV(buf)->addr == src && - FRIEND_ADV(buf)->seq_auth == *seq_auth) { + if (is_seg(seg, src, seq_zero)) { return seg; } - if (!unassigned && !buf) { + if (!unassigned && !net_buf_slist_peek_head(&seg->queue)) { unassigned = seg; } } + if (unassigned) { + unassigned->seg_count = seg_count; + } + return unassigned; } static void enqueue_friend_pdu(struct bt_mesh_friend *frnd, enum bt_mesh_friend_pdu_type type, + u16_t src, u8_t seg_count, struct os_mbuf *buf) { struct bt_mesh_friend_seg *seg; - struct friend_adv *adv; BT_DBG("type %u", type); @@ -946,11 +1091,11 @@ static void enqueue_friend_pdu(struct bt_mesh_friend *frnd, return; } - adv = FRIEND_ADV(buf); - seg = get_seg(frnd, BT_MESH_ADV(buf)->addr, &adv->seq_auth); + u16_t seq_zero = (((buf->om_data[10] << 8 | buf->om_data[11]) >> 2) & TRANS_SEQ_ZERO_MASK); + + seg = get_seg(frnd, src, seq_zero, seg_count); if (!seg) { - BT_ERR("No free friend segment RX contexts for 0x%04x", - BT_MESH_ADV(buf)->addr); + BT_ERR("No free friend segment RX contexts for 0x%04x", src); net_buf_unref(buf); return; } @@ -962,19 +1107,13 @@ static void enqueue_friend_pdu(struct bt_mesh_friend *frnd, enqueue_update(frnd, 1); } - /* Only acks should have a valid SeqAuth in the Friend queue - * (otherwise we can't easily detect them there), so clear - * the SeqAuth information from the segments before merging. - */ - struct os_mbuf *m; - struct os_mbuf_pkthdr *pkthdr; - NET_BUF_SLIST_FOR_EACH_NODE(&seg->queue, pkthdr) { - m = OS_MBUF_PKTHDR_TO_MBUF(pkthdr); - FRIEND_ADV(m)->seq_auth = TRANS_SEQ_AUTH_NVAL; - frnd->queue_size++; - } - net_buf_slist_merge_slist(&frnd->queue, &seg->queue); + + frnd->queue_size += seg->seg_count; + seg->seg_count = 0U; + } else { + /* Mark the buffer as having more to come after it */ + BT_MESH_ADV(buf)->flags |= NET_BUF_FRAGS; } } @@ -1040,13 +1179,21 @@ static void friend_timeout(struct ble_npl_event *work) return; } - frnd->last = net_buf_slist_get(&frnd->queue); + frnd->last = (void *)net_buf_slist_get(&frnd->queue); if (!frnd->last) { - BT_WARN("Friendship not established with 0x%04x", frnd->lpn); + BT_WARN("Friendship not established with 0x%04x", + frnd->lpn); friend_clear(frnd); return; } + if (encrypt_friend_pdu(frnd, frnd->last, false)) { + return; + } + + /* Clear the flag we use for segment tracking */ + BT_MESH_ADV(frnd->last)->flags &= ~NET_BUF_FRAGS; + BT_DBG("Sending buf %p from Friend Queue of LPN 0x%04x", frnd->last, frnd->lpn); frnd->queue_size--; @@ -1093,6 +1240,42 @@ int bt_mesh_friend_init(void) return 0; } +static bool is_segack(struct os_mbuf *buf, u64_t *seqauth, u16_t src) +{ + struct net_buf_simple_state state; + bool found = false; + + if (buf->om_len != 16) { + return false; + } + + net_buf_simple_save(buf, &state); + + net_buf_skip(buf, 1); /* skip IVI, NID */ + + if (!(net_buf_pull_u8(buf) >> 7)) { + goto end; + } + + net_buf_pull(buf, 3); /* skip SEQNUM */ + + if (src != net_buf_pull_be16(buf)) { + goto end; + } + + net_buf_skip(buf, 2); /* skip dst */ + + if (TRANS_CTL_OP((u8_t *) net_buf_pull_mem(buf, 1)) != TRANS_CTL_OP_ACK) { + goto end; + } + + found = ((net_buf_pull_be16(buf) >> 2) & TRANS_SEQ_ZERO_MASK) == + (*seqauth & TRANS_SEQ_ZERO_MASK); +end: + net_buf_simple_restore(buf, &state); + return found; +} + static void friend_purge_old_ack(struct bt_mesh_friend *frnd, u64_t *seq_auth, u16_t src) { @@ -1104,8 +1287,7 @@ static void friend_purge_old_ack(struct bt_mesh_friend *frnd, u64_t *seq_auth, cur != NULL; prev = cur, cur = net_buf_slist_peek_next(cur)) { struct os_mbuf *buf = (void *)cur; - if (BT_MESH_ADV(buf)->addr == src && - FRIEND_ADV(buf)->seq_auth == *seq_auth) { + if (is_segack(buf, seq_auth, src)) { BT_DBG("Removing old ack from Friend Queue"); net_buf_slist_remove(&frnd->queue, prev, cur); @@ -1120,11 +1302,20 @@ static void friend_purge_old_ack(struct bt_mesh_friend *frnd, u64_t *seq_auth, static void friend_lpn_enqueue_rx(struct bt_mesh_friend *frnd, struct bt_mesh_net_rx *rx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf) + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf) { struct friend_pdu_info info; struct os_mbuf *buf; + /* Because of network loopback, tx packets will also be passed into + * this rx function. These packets have already been added to the + * queue, and should be ignored. + */ + if (bt_mesh_elem_find(rx->ctx.addr)) { + return; + } + BT_DBG("LPN 0x%04x queue_size %u", frnd->lpn, (unsigned) frnd->queue_size); @@ -1155,11 +1346,7 @@ static void friend_lpn_enqueue_rx(struct bt_mesh_friend *frnd, return; } - if (seq_auth) { - FRIEND_ADV(buf)->seq_auth = *seq_auth; - } - - enqueue_friend_pdu(frnd, type, buf); + enqueue_friend_pdu(frnd, type, info.src, seg_count, buf); BT_DBG("Queued message for LPN 0x%04x, queue_size %u", frnd->lpn, (unsigned) frnd->queue_size); @@ -1168,11 +1355,11 @@ static void friend_lpn_enqueue_rx(struct bt_mesh_friend *frnd, static void friend_lpn_enqueue_tx(struct bt_mesh_friend *frnd, struct bt_mesh_net_tx *tx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf) + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf) { struct friend_pdu_info info; struct os_mbuf *buf; - u32_t seq; BT_DBG("LPN 0x%04x", frnd->lpn); @@ -1186,10 +1373,9 @@ static void friend_lpn_enqueue_tx(struct bt_mesh_friend *frnd, info.ttl = tx->ctx->send_ttl; info.ctl = (tx->ctx->app_idx == BT_MESH_KEY_UNUSED); - seq = bt_mesh_next_seq(); - info.seq[0] = seq >> 16; - info.seq[1] = seq >> 8; - info.seq[2] = seq; + info.seq[0] = (bt_mesh.seq >> 16); + info.seq[1] = (bt_mesh.seq >> 8); + info.seq[2] = bt_mesh.seq; info.iv_index = BT_MESH_NET_IVI_TX; @@ -1199,11 +1385,15 @@ static void friend_lpn_enqueue_tx(struct bt_mesh_friend *frnd, return; } - if (seq_auth) { - FRIEND_ADV(buf)->seq_auth = *seq_auth; + if (type == BT_MESH_FRIEND_PDU_SINGLE && !info.ctl) { + /* Unsegmented application packets may be reencrypted later, + * as they depend on the the sequence number being the same + * when encrypting in transport and network. + */ + FRIEND_ADV(buf)->app_idx = tx->ctx->app_idx; } - enqueue_friend_pdu(frnd, type, buf); + enqueue_friend_pdu(frnd, type, info.src, seg_count, buf); BT_DBG("Queued message for LPN 0x%04x", frnd->lpn); } @@ -1253,9 +1443,112 @@ bool bt_mesh_friend_match(u16_t net_idx, u16_t addr) return false; } +static bool friend_queue_has_space(struct bt_mesh_friend *frnd, u16_t addr, + u64_t *seq_auth, u8_t seg_count) +{ + u32_t total = 0; + int i; + + if (seg_count > CONFIG_BT_MESH_FRIEND_QUEUE_SIZE) { + return false; + } + + for (i = 0; i < ARRAY_SIZE(frnd->seg); i++) { + struct bt_mesh_friend_seg *seg = &frnd->seg[i]; + + if (seq_auth && is_seg(seg, addr, *seq_auth & TRANS_SEQ_ZERO_MASK)) { + /* If there's a segment queue for this message then the + * space verification has already happened. + */ + return true; + } + + total += seg->seg_count; + } + + /* If currently pending segments combined with this segmented message + * are more than the Friend Queue Size, then there's no space. This + * is because we don't have a mechanism of aborting already pending + * segmented messages to free up buffers. + */ + return (CONFIG_BT_MESH_FRIEND_QUEUE_SIZE - total) > seg_count; +} + +bool bt_mesh_friend_queue_has_space(u16_t net_idx, u16_t src, u16_t dst, + u64_t *seq_auth, u8_t seg_count) +{ + bool someone_has_space = false, friend_match = false; + int i; + + for (i = 0; i < ARRAY_SIZE(bt_mesh.frnd); i++) { + struct bt_mesh_friend *frnd = &bt_mesh.frnd[i]; + + if (!friend_lpn_matches(frnd, net_idx, dst)) { + continue; + } + + friend_match = true; + + if (friend_queue_has_space(frnd, src, seq_auth, seg_count)) { + someone_has_space = true; + } + } + + /* If there were no matched LPNs treat this as success, so the + * transport layer can continue its work. + */ + if (!friend_match) { + return true; + } + + /* From the transport layers perspective it's good enough that at + * least one Friend Queue has space. If there were multiple Friend + * matches then the destination must be a group address, in which + * case e.g. segment acks are not sent. + */ + return someone_has_space; +} + +static bool friend_queue_prepare_space(struct bt_mesh_friend *frnd, u16_t addr, + u64_t *seq_auth, u8_t seg_count) +{ + bool pending_segments; + u8_t avail_space; + + if (!friend_queue_has_space(frnd, addr, seq_auth, seg_count)) { + return false; + } + + avail_space = CONFIG_BT_MESH_FRIEND_QUEUE_SIZE - frnd->queue_size; + pending_segments = false; + + while (pending_segments || avail_space < seg_count) { + struct os_mbuf *buf = (void *)net_buf_slist_get(&frnd->queue); + + if (!buf) { + BT_ERR("Unable to free up enough buffers"); + return false; + } + + frnd->queue_size--; + avail_space++; + + pending_segments = (BT_MESH_ADV(buf)->flags & NET_BUF_FRAGS); + BT_DBG("PENDING SEGMENTS %d", pending_segments); + + /* Make sure old slist entry state doesn't remain */ + BT_MESH_ADV(buf)->flags &= ~NET_BUF_FRAGS; + + net_buf_unref(buf); + } + + return true; +} + void bt_mesh_friend_enqueue_rx(struct bt_mesh_net_rx *rx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf) + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf) { int i; @@ -1272,16 +1565,25 @@ void bt_mesh_friend_enqueue_rx(struct bt_mesh_net_rx *rx, for (i = 0; i < ARRAY_SIZE(bt_mesh.frnd); i++) { struct bt_mesh_friend *frnd = &bt_mesh.frnd[i]; - if (friend_lpn_matches(frnd, rx->sub->net_idx, - rx->ctx.recv_dst)) { - friend_lpn_enqueue_rx(frnd, rx, type, seq_auth, sbuf); + if (!friend_lpn_matches(frnd, rx->sub->net_idx, + rx->ctx.recv_dst)) { + continue; } + + if (!friend_queue_prepare_space(frnd, rx->ctx.addr, seq_auth, + seg_count)) { + continue; + } + + friend_lpn_enqueue_rx(frnd, rx, type, seq_auth, seg_count, + sbuf); } } bool bt_mesh_friend_enqueue_tx(struct bt_mesh_net_tx *tx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf) + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf) { bool matched = false; int i; @@ -1297,10 +1599,19 @@ bool bt_mesh_friend_enqueue_tx(struct bt_mesh_net_tx *tx, for (i = 0; i < ARRAY_SIZE(bt_mesh.frnd); i++) { struct bt_mesh_friend *frnd = &bt_mesh.frnd[i]; - if (friend_lpn_matches(frnd, tx->sub->net_idx, tx->ctx->addr)) { - friend_lpn_enqueue_tx(frnd, tx, type, seq_auth, sbuf); - matched = true; + if (!friend_lpn_matches(frnd, tx->sub->net_idx, + tx->ctx->addr)) { + continue; } + + if (!friend_queue_prepare_space(frnd, tx->src, seq_auth, + seg_count)) { + continue; + } + + friend_lpn_enqueue_tx(frnd, tx, type, seq_auth, seg_count, + sbuf); + matched = true; } return matched; @@ -1323,26 +1634,16 @@ void bt_mesh_friend_clear_incomplete(struct bt_mesh_subnet *sub, u16_t src, for (j = 0; j < ARRAY_SIZE(frnd->seg); j++) { struct bt_mesh_friend_seg *seg = &frnd->seg[j]; - struct os_mbuf *buf; - buf = (void *)net_buf_slist_peek_head(&seg->queue); - if (!buf) { - continue; - } - - if (BT_MESH_ADV(buf)->addr != src) { - continue; - } - - if (FRIEND_ADV(buf)->seq_auth != *seq_auth) { + if (!is_seg(seg, src, *seq_auth & TRANS_SEQ_ZERO_MASK)) { continue; } BT_WARN("Clearing incomplete segments for 0x%04x", src); - while (!net_buf_slist_is_empty(&seg->queue)) { - net_buf_unref(net_buf_slist_get(&seg->queue)); - } + purge_buffers(&seg->queue); + seg->seg_count = 0U; + break; } } } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.h index 053de146c..10ffa8190 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/friend.h @@ -22,12 +22,17 @@ bool bt_mesh_friend_match(u16_t net_idx, u16_t addr); struct bt_mesh_friend *bt_mesh_friend_find(u16_t net_idx, u16_t lpn_addr, bool valid, bool established); +bool bt_mesh_friend_queue_has_space(u16_t net_idx, u16_t src, u16_t dst, + u64_t *seq_auth, u8_t seg_count); + void bt_mesh_friend_enqueue_rx(struct bt_mesh_net_rx *rx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf); + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf); bool bt_mesh_friend_enqueue_tx(struct bt_mesh_net_tx *tx, enum bt_mesh_friend_pdu_type type, - u64_t *seq_auth, struct os_mbuf *sbuf); + u64_t *seq_auth, u8_t seg_count, + struct os_mbuf *sbuf); void bt_mesh_friend_clear_incomplete(struct bt_mesh_subnet *sub, u16_t src, u16_t dst, u64_t *seq_auth); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/glue.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/glue.c index 3b765ee65..7da73d15b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/glue.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/glue.c @@ -17,6 +17,9 @@ * under the License. */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_LOG + #include "mesh/glue.h" #include "adv.h" #ifndef MYNEWT @@ -27,22 +30,6 @@ #include "base64/base64.h" #endif -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG)) - -#if MYNEWT_VAL(BLE_EXT_ADV) -#define BT_MESH_ADV_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES)) - -#if MYNEWT_VAL(BLE_MESH_PROXY) -/* Note that BLE_MULTI_ADV_INSTANCES contains number of additional instances. - * Instance 0 is always there - */ -#if MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) < 1 -#error "Mesh needs at least BLE_MULTI_ADV_INSTANCES set to 1" -#endif -#define BT_MESH_ADV_GATT_INST (MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES) - 1) -#endif /* BLE_MESH_PROXY */ -#endif /* BLE_EXT_ADV */ - extern u8_t g_mesh_addr_type; #if MYNEWT_VAL(BLE_EXT_ADV) @@ -133,13 +120,16 @@ bt_encrypt_be(const uint8_t *key, const uint8_t *plaintext, uint8_t *enc_data) mbedtls_aes_init(&s); if (mbedtls_aes_setkey_enc(&s, key, 128) != 0) { + mbedtls_aes_free(&s); return BLE_HS_EUNKNOWN; } if (mbedtls_aes_crypt_ecb(&s, MBEDTLS_AES_ENCRYPT, plaintext, enc_data) != 0) { + mbedtls_aes_free(&s); return BLE_HS_EUNKNOWN; } + mbedtls_aes_free(&s); return 0; } @@ -872,13 +862,11 @@ void net_buf_slist_remove(struct net_buf_slist_t *list, struct os_mbuf *prev, void net_buf_slist_merge_slist(struct net_buf_slist_t *list, struct net_buf_slist_t *list_to_append) { - struct os_mbuf_pkthdr *pkthdr; - - STAILQ_FOREACH(pkthdr, list_to_append, omp_next) { - STAILQ_INSERT_TAIL(list, pkthdr, omp_next); + if (!STAILQ_EMPTY(list_to_append)) { + *(list)->stqh_last = list_to_append->stqh_first; + (list)->stqh_last = list_to_append->stqh_last; + STAILQ_INIT(list_to_append); } - - STAILQ_INIT(list); } #if MYNEWT_VAL(BLE_MESH_SETTINGS) @@ -889,7 +877,8 @@ int settings_bytes_from_str(char *val_str, void *vp, int *len) return 0; } -char *settings_str_from_bytes(void *vp, int vp_len, char *buf, int buf_len) +char *settings_str_from_bytes(const void *vp, int vp_len, + char *buf, int buf_len) { if (BASE64_ENCODE_SIZE(vp_len) > buf_len) { return NULL; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_cli.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_cli.c index 68543415c..193279c28 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_cli.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_cli.c @@ -6,14 +6,13 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG + #include #include #include -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_MODEL)) -#include "host/ble_hs_log.h" - #include "mesh/mesh.h" #include "mesh_priv.h" #include "adv.h" @@ -206,7 +205,7 @@ static int cli_wait(void) int bt_mesh_health_attention_get(u16_t net_idx, u16_t addr, u16_t app_idx, u8_t *attention) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_ATTENTION_GET, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -241,7 +240,7 @@ done: int bt_mesh_health_attention_set(u16_t net_idx, u16_t addr, u16_t app_idx, u8_t attention, u8_t *updated_attention) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_ATTENTION_SET, 1); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -287,7 +286,7 @@ done: int bt_mesh_health_period_get(u16_t net_idx, u16_t addr, u16_t app_idx, u8_t *divisor) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 0 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_PERIOD_GET, 0); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -322,7 +321,7 @@ done: int bt_mesh_health_period_set(u16_t net_idx, u16_t addr, u16_t app_idx, u8_t divisor, u8_t *updated_divisor) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_PERIOD_SET, 1); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -369,7 +368,7 @@ int bt_mesh_health_fault_test(u16_t net_idx, u16_t addr, u16_t app_idx, u16_t cid, u8_t test_id, u8_t *faults, size_t *fault_count) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 3 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_FAULT_TEST, 3); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -420,7 +419,7 @@ int bt_mesh_health_fault_clear(u16_t net_idx, u16_t addr, u16_t app_idx, u16_t cid, u8_t *test_id, u8_t *faults, size_t *fault_count) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 2 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_FAULT_CLEAR, 2); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -470,7 +469,7 @@ int bt_mesh_health_fault_get(u16_t net_idx, u16_t addr, u16_t app_idx, u16_t cid, u8_t *test_id, u8_t *faults, size_t *fault_count) { - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 2 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_FAULT_GET, 2); struct bt_mesh_msg_ctx ctx = { .net_idx = net_idx, .app_idx = app_idx, @@ -528,11 +527,11 @@ int bt_mesh_health_cli_set(struct bt_mesh_model *model) return 0; } -int bt_mesh_health_cli_init(struct bt_mesh_model *model, bool primary) +static int health_cli_init(struct bt_mesh_model *model) { struct bt_mesh_health_cli *cli = model->user_data; - BT_DBG("primary %u", primary); + BT_DBG("primary %u", bt_mesh_model_in_primary(model)); if (!cli) { BT_ERR("No Health Client context provided"); @@ -551,3 +550,7 @@ int bt_mesh_health_cli_init(struct bt_mesh_model *model, bool primary) return 0; } + +const struct bt_mesh_model_cb bt_mesh_health_cli_cb = { + .init = health_cli_init, +}; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_srv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_srv.c index 97e3e043b..16de83a99 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_srv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/health_srv.c @@ -6,14 +6,13 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG + #include #include #include -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_MODEL)) -#include "host/ble_hs_log.h" - #include "mesh/mesh.h" #include "mesh_priv.h" #include "adv.h" @@ -218,8 +217,7 @@ done: static void send_attention_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_ATTENTION_STATUS, 1); struct bt_mesh_health_srv *srv = model->user_data; u8_t time; @@ -273,8 +271,7 @@ static void attention_set(struct bt_mesh_model *model, static void send_health_period_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - /* Needed size: opcode (2 bytes) + msg + MIC */ - struct os_mbuf *msg = NET_BUF_SIMPLE(2 + 1 + 4); + struct os_mbuf *msg = BT_MESH_MODEL_BUF(OP_HEALTH_PERIOD_STATUS, 1); bt_mesh_model_msg_init(msg, OP_HEALTH_PERIOD_STATUS); @@ -347,8 +344,10 @@ static int health_pub_update(struct bt_mesh_model *mod) BT_DBG(""); count = health_get_current(mod, pub->msg); - if (!count) { - pub->period_div = 0; + if (count) { + pub->fast_period = 1U; + } else { + pub->fast_period = 0U; } return 0; @@ -363,6 +362,15 @@ int bt_mesh_fault_update(struct bt_mesh_elem *elem) return -EINVAL; } + /* Let periodic publishing, if enabled, take care of sending the + * Health Current Status. + */ + if (bt_mesh_model_pub_period_get(mod)) { + return 0; + } + + health_pub_update(mod); + return bt_mesh_model_publish(mod); } @@ -376,12 +384,12 @@ static void attention_off(struct ble_npl_event *work) } } -int bt_mesh_health_srv_init(struct bt_mesh_model *model, bool primary) +static int health_srv_init(struct bt_mesh_model *model) { struct bt_mesh_health_srv *srv = model->user_data; if (!srv) { - if (!primary) { + if (!bt_mesh_model_in_primary(model)) { return 0; } @@ -401,13 +409,17 @@ int bt_mesh_health_srv_init(struct bt_mesh_model *model, bool primary) srv->model = model; - if (primary) { + if (bt_mesh_model_in_primary(model)) { health_srv = srv; } return 0; } +const struct bt_mesh_model_cb bt_mesh_health_srv_cb = { + .init = health_srv_init, +}; + void bt_mesh_attention(struct bt_mesh_model *model, u8_t time) { struct bt_mesh_health_srv *srv; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/lpn.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/lpn.c index 0dd00ac6c..ec012a5f0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/lpn.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/lpn.c @@ -7,14 +7,12 @@ */ #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_LOW_POWER_LOG #if MYNEWT_VAL(BLE_MESH_LOW_POWER) #include -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_LOW_POWER)) -#include "host/ble_hs_log.h" - #include "mesh/mesh.h" #include "mesh_priv.h" #include "crypto.h" @@ -66,7 +64,7 @@ static void (*lpn_cb)(u16_t friend_addr, bool established); -#if MYNEWT_VAL(BLE_MESH_DEBUG_LOW_POWER) +#if MYNEWT_VAL(BLE_MESH_LOW_POWER_LOG_LVL) == LOG_LEVEL_DEBUG static const char *state2str(int state) { switch (state) { @@ -92,11 +90,11 @@ static const char *state2str(int state) return "(unknown)"; } } -#endif /* CONFIG_BLUETOOTH_MESH_DEBUG_LPN */ +#endif static inline void lpn_set_state(int state) { -#if MYNEWT_VAL(BLE_MESH_DEBUG_LOW_POWER) +#if MYNEWT_VAL(BLE_MESH_LOW_POWER_LOG_LVL) == LOG_LEVEL_DEBUG BT_DBG("%s -> %s", state2str(bt_mesh.lpn.state), state2str(state)); #endif bt_mesh.lpn.state = state; @@ -196,6 +194,7 @@ static int send_friend_clear(void) static void clear_friendship(bool force, bool disable) { + struct bt_mesh_cfg_srv *cfg = bt_mesh_cfg_get(); struct bt_mesh_lpn *lpn = &bt_mesh.lpn; BT_DBG("force %u disable %u", force, disable); @@ -243,6 +242,10 @@ static void clear_friendship(bool force, bool disable) */ lpn->groups_changed = 1; + if (cfg->hb_pub.feat & BT_MESH_FEAT_LOW_POWER) { + bt_mesh_heartbeat_send(); + } + if (disable) { lpn_set_state(BT_MESH_LPN_DISABLED); return; @@ -311,7 +314,7 @@ static void req_sent(u16_t duration, int err, void *user_data) { struct bt_mesh_lpn *lpn = &bt_mesh.lpn; -#if BT_DBG_ENABLED +#if MYNEWT_VAL(BLE_MESH_LOW_POWER_LOG_LVL) == LOG_LEVEL_DEBUG BT_DBG("req 0x%02x duration %u err %d state %s", lpn->sent_req, duration, err, state2str(lpn->state)); #endif @@ -725,7 +728,7 @@ static void lpn_timeout(struct ble_npl_event *work) { struct bt_mesh_lpn *lpn = &bt_mesh.lpn; -#if MYNEWT_VAL(BLE_MESH_DEBUG_LOW_POWER) +#if MYNEWT_VAL(BLE_MESH_LOW_POWER_LOG_LVL) == LOG_LEVEL_DEBUG BT_DBG("state: %s", state2str(lpn->state)); #endif @@ -758,6 +761,7 @@ static void lpn_timeout(struct ble_npl_event *work) } lpn->counter++; lpn_set_state(BT_MESH_LPN_ENABLED); + lpn->sent_req = 0U; k_delayed_work_submit(&lpn->timer, FRIEND_REQ_RETRY_TIMEOUT); break; case BT_MESH_LPN_ESTABLISHED: @@ -940,6 +944,8 @@ int bt_mesh_lpn_friend_update(struct bt_mesh_net_rx *rx, } if (!lpn->established) { + struct bt_mesh_cfg_srv *cfg = bt_mesh_cfg_get(); + /* This is normally checked on the transport layer, however * in this state we're also still accepting master * credentials so we need to ensure the right ones (Friend @@ -954,6 +960,10 @@ int bt_mesh_lpn_friend_update(struct bt_mesh_net_rx *rx, BT_INFO("Friendship established with 0x%04x", lpn->frnd); + if (cfg->hb_pub.feat & BT_MESH_FEAT_LOW_POWER) { + bt_mesh_heartbeat_send(); + } + if (lpn_cb) { lpn_cb(lpn->frnd, true); } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh.c index 80b638b1f..52fbdbf66 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh.c @@ -6,15 +6,14 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_LOG + #include #include #include "os/os_mbuf.h" #include "mesh/mesh.h" - -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG)) -#include "host/ble_hs_log.h" #include "host/ble_uuid.h" #include "adv.h" @@ -50,7 +49,7 @@ int bt_mesh_provision(const u8_t net_key[16], u16_t net_idx, } if ((MYNEWT_VAL(BLE_MESH_PB_GATT))) { - if (bt_mesh_proxy_prov_disable() == 0) { + if (bt_mesh_proxy_prov_disable(false) == 0) { pb_gatt_enabled = true; } else { pb_gatt_enabled = false; @@ -88,6 +87,26 @@ int bt_mesh_provision(const u8_t net_key[16], u16_t net_idx, return 0; } +int bt_mesh_provision_adv(const u8_t uuid[16], u16_t net_idx, u16_t addr, + u8_t attention_duration) +{ + if (!atomic_test_bit(bt_mesh.flags, BT_MESH_VALID)) { + return -EINVAL; + } + + if (bt_mesh_subnet_get(net_idx) == NULL) { + return -EINVAL; + } + + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + IS_ENABLED(CONFIG_BT_MESH_PB_ADV)) { + return bt_mesh_pb_adv_open(uuid, net_idx, addr, + attention_duration); + } + + return -ENOTSUP; +} + void bt_mesh_reset(void) { if (!atomic_test_bit(bt_mesh.flags, BT_MESH_VALID)) { @@ -149,14 +168,12 @@ int bt_mesh_prov_enable(bt_mesh_prov_bearer_t bearers) return -EALREADY; } - if (MYNEWT_VAL(BLE_MESH_DEBUG)) { - char uuid_buf[BLE_UUID_STR_LEN]; - const struct bt_mesh_prov *prov = bt_mesh_prov_get(); - ble_uuid_t *uuid = BLE_UUID128_DECLARE(); + char uuid_buf[BLE_UUID_STR_LEN]; + const struct bt_mesh_prov *prov = bt_mesh_prov_get(); + ble_uuid_t *uuid = BLE_UUID128_DECLARE(); - memcpy(BLE_UUID128(uuid)->value, prov->uuid, 16); - BT_INFO("Device UUID: %s", ble_uuid_to_str(uuid, uuid_buf)); - } + memcpy(BLE_UUID128(uuid)->value, prov->uuid, 16); + BT_INFO("Device UUID: %s", ble_uuid_to_str(uuid, uuid_buf)); if (IS_ENABLED(CONFIG_BT_MESH_PB_ADV) && (bearers & BT_MESH_PROV_ADV)) { @@ -189,8 +206,7 @@ int bt_mesh_prov_disable(bt_mesh_prov_bearer_t bearers) if (IS_ENABLED(CONFIG_BT_MESH_PB_GATT) && (bearers & BT_MESH_PROV_GATT)) { - bt_mesh_proxy_prov_disable(); - bt_mesh_adv_update(); + bt_mesh_proxy_prov_disable(true); } return 0; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh_priv.h index 0a26c903b..f09bb2309 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/mesh_priv.h @@ -32,6 +32,7 @@ struct bt_mesh_net; #define OP_LIGHT_LIGHTNESS_GET BT_MESH_MODEL_OP_2(0x82, 0x4b) #define OP_LIGHT_LIGHTNESS_SET BT_MESH_MODEL_OP_2(0x82, 0x4c) #define OP_LIGHT_LIGHTNESS_SET_UNACK BT_MESH_MODEL_OP_2(0x82, 0x4d) +#define OP_LIGHT_LIGHTNESS_STATUS BT_MESH_MODEL_OP_2(0x82, 0x4e) bool bt_mesh_is_provisioned(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_cli.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_cli.c index c9e9cf622..b00cfa520 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_cli.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_cli.c @@ -4,16 +4,17 @@ * SPDX-License-Identifier: Apache-2.0 */ -#include +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_MODEL)) +#include "mesh/mesh.h" #include "mesh/model_cli.h" #include "mesh_priv.h" static s32_t msg_timeout = K_SECONDS(5); -struct bt_mesh_gen_model_cli gen_onoff_cli; -struct bt_mesh_gen_model_cli gen_level_cli; +static struct bt_mesh_gen_model_cli *gen_onoff_cli; +static struct bt_mesh_gen_model_cli *gen_level_cli; static u8_t transaction_id = 0; @@ -90,11 +91,53 @@ const struct bt_mesh_model_op gen_onoff_cli_op[] = { BT_MESH_MODEL_OP_END, }; +static int onoff_cli_init(struct bt_mesh_model *model) +{ + BT_DBG(""); + + if (!model->user_data) { + BT_ERR("No Generic OnOff Client context provided"); + return -EINVAL; + } + + gen_onoff_cli = model->user_data; + gen_onoff_cli->model = model; + + k_sem_init(&gen_onoff_cli->op_sync, 0, 1); + + return 0; +} + +const struct bt_mesh_model_cb bt_mesh_gen_onoff_cli_cb = { + .init = onoff_cli_init, +}; + const struct bt_mesh_model_op gen_level_cli_op[] = { { OP_GEN_LEVEL_STATUS, 2, gen_level_status }, BT_MESH_MODEL_OP_END, }; +static int level_cli_init(struct bt_mesh_model *model) +{ + BT_DBG(""); + + if (!model->user_data) { + BT_ERR("No Generic Level Client context provided"); + return -EINVAL; + } + + gen_level_cli = model->user_data; + gen_level_cli->model = model; + + k_sem_init(&gen_level_cli->op_sync, 0, 1); + + return 0; +} + +const struct bt_mesh_model_cb bt_mesh_gen_level_cli_cb = { + .init = level_cli_init, +}; + static int cli_wait(struct bt_mesh_gen_model_cli *cli, void *param, u32_t op) { int err; @@ -129,13 +172,13 @@ int bt_mesh_gen_onoff_get(u16_t net_idx, u16_t addr, u16_t app_idx, bt_mesh_model_msg_init(msg, OP_GEN_ONOFF_GET); - err = bt_mesh_model_send(gen_onoff_cli.model, &ctx, msg, NULL, NULL); + err = bt_mesh_model_send(gen_onoff_cli->model, &ctx, msg, NULL, NULL); if (err) { BT_ERR("model_send() failed (err %d)", err); goto done; } - err = cli_wait(&gen_onoff_cli, ¶m, OP_GEN_ONOFF_STATUS); + err = cli_wait(gen_onoff_cli, ¶m, OP_GEN_ONOFF_STATUS); done: os_mbuf_free_chain(msg); return err; @@ -165,7 +208,7 @@ int bt_mesh_gen_onoff_set(u16_t net_idx, u16_t addr, u16_t app_idx, net_buf_simple_add_u8(msg, val); net_buf_simple_add_u8(msg, transaction_id); - err = bt_mesh_model_send(gen_onoff_cli.model, &ctx, msg, NULL, NULL); + err = bt_mesh_model_send(gen_onoff_cli->model, &ctx, msg, NULL, NULL); if (err) { BT_ERR("model_send() failed (err %d)", err); goto done; @@ -175,7 +218,7 @@ int bt_mesh_gen_onoff_set(u16_t net_idx, u16_t addr, u16_t app_idx, goto done; } - err = cli_wait(&gen_onoff_cli, ¶m, OP_GEN_ONOFF_STATUS); + err = cli_wait(gen_onoff_cli, ¶m, OP_GEN_ONOFF_STATUS); done: if (err == 0) { transaction_id++; @@ -201,13 +244,13 @@ int bt_mesh_gen_level_get(u16_t net_idx, u16_t addr, u16_t app_idx, bt_mesh_model_msg_init(msg, OP_GEN_LEVEL_GET); - err = bt_mesh_model_send(gen_level_cli.model, &ctx, msg, NULL, NULL); + err = bt_mesh_model_send(gen_level_cli->model, &ctx, msg, NULL, NULL); if (err) { BT_ERR("model_send() failed (err %d)", err); goto done; } - err = cli_wait(&gen_level_cli, ¶m, OP_GEN_LEVEL_STATUS); + err = cli_wait(gen_level_cli, ¶m, OP_GEN_LEVEL_STATUS); done: os_mbuf_free_chain(msg); return err; @@ -237,7 +280,7 @@ int bt_mesh_gen_level_set(u16_t net_idx, u16_t addr, u16_t app_idx, net_buf_simple_add_le16(msg, val); net_buf_simple_add_u8(msg, transaction_id); - err = bt_mesh_model_send(gen_level_cli.model, &ctx, msg, NULL, NULL); + err = bt_mesh_model_send(gen_level_cli->model, &ctx, msg, NULL, NULL); if (err) { BT_ERR("model_send() failed (err %d)", err); goto done; @@ -247,7 +290,7 @@ int bt_mesh_gen_level_set(u16_t net_idx, u16_t addr, u16_t app_idx, goto done; } - err = cli_wait(&gen_level_cli, ¶m, OP_GEN_LEVEL_STATUS); + err = cli_wait(gen_level_cli, ¶m, OP_GEN_LEVEL_STATUS); done: if (err == 0) { transaction_id++; @@ -256,21 +299,3 @@ done: return err; } -int bt_mesh_gen_model_cli_init(struct bt_mesh_model *model, bool primary) -{ - struct bt_mesh_gen_model_cli *cli = model->user_data; - - BT_DBG("primary %u", primary); - - if (!cli) { - BT_ERR("No Generic Model Client context provided"); - return -EINVAL; - } - - cli->model = model; - - k_sem_init(&cli->op_sync, 0, 1); - - return 0; -} - diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_srv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_srv.c index 1420b1ccc..5f5a8df42 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_srv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/model_srv.c @@ -4,17 +4,21 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_MODEL_LOG + #include "mesh/mesh.h" - -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_MODEL)) - #include "mesh/model_srv.h" #include "mesh_priv.h" +static struct bt_mesh_gen_onoff_srv *gen_onoff_srv; +static struct bt_mesh_gen_level_srv *gen_level_srv; +static struct bt_mesh_light_lightness_srv *light_lightness_srv; + static void gen_onoff_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - struct bt_mesh_gen_onoff_srv_cb *cb = model->user_data; + struct bt_mesh_gen_onoff_srv *cb = model->user_data; struct os_mbuf *msg = NET_BUF_SIMPLE(3); u8_t *state; @@ -46,7 +50,7 @@ static void gen_onoff_set_unack(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct bt_mesh_gen_onoff_srv_cb *cb = model->user_data; + struct bt_mesh_gen_onoff_srv *cb = model->user_data; u8_t state; state = buf->om_data[0]; @@ -71,7 +75,7 @@ static void gen_onoff_set(struct bt_mesh_model *model, static void gen_level_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - struct bt_mesh_gen_level_srv_cb *cb = model->user_data; + struct bt_mesh_gen_level_srv *cb = model->user_data; struct os_mbuf *msg = NET_BUF_SIMPLE(4); s16_t *level; @@ -102,7 +106,7 @@ static void gen_level_get(struct bt_mesh_model *model, static void gen_level_set_unack(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct bt_mesh_gen_level_srv_cb *cb = model->user_data; + struct bt_mesh_gen_level_srv *cb = model->user_data; s16_t level; level = (s16_t) net_buf_simple_pull_le16(buf); @@ -124,11 +128,11 @@ static void gen_level_set(struct bt_mesh_model *model, static void light_lightness_status(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx) { - struct bt_mesh_light_lightness_srv_cb *cb = model->user_data; + struct bt_mesh_light_lightness_srv *cb = model->user_data; struct os_mbuf *msg = NET_BUF_SIMPLE(4); s16_t *lightness; - bt_mesh_model_msg_init(msg, OP_GEN_LEVEL_STATUS); + bt_mesh_model_msg_init(msg, OP_LIGHT_LIGHTNESS_STATUS); lightness = net_buf_simple_add(msg, 2); if (cb && cb->get) { cb->get(model, lightness); @@ -155,7 +159,7 @@ static void light_lightness_get(struct bt_mesh_model *model, static void light_lightness_set_unack(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct os_mbuf *buf) { - struct bt_mesh_light_lightness_srv_cb *cb = model->user_data; + struct bt_mesh_light_lightness_srv *cb = model->user_data; s16_t lightness; lightness = (s16_t) net_buf_simple_pull_le16(buf); @@ -194,3 +198,69 @@ const struct bt_mesh_model_op light_lightness_srv_op[] = { { OP_LIGHT_LIGHTNESS_SET_UNACK, 3, light_lightness_set_unack }, BT_MESH_MODEL_OP_END, }; + +static int onoff_srv_init(struct bt_mesh_model *model) +{ + struct bt_mesh_gen_onoff_srv *cfg = model->user_data; + + BT_DBG(""); + + if (!cfg) { + BT_ERR("No Generic OnOff Server context provided"); + return -EINVAL; + } + + cfg->model = model; + + gen_onoff_srv = cfg; + + return 0; +} + +const struct bt_mesh_model_cb gen_onoff_srv_cb = { + .init = onoff_srv_init, +}; + +static int level_srv_init(struct bt_mesh_model *model) +{ + struct bt_mesh_gen_level_srv *cfg = model->user_data; + + BT_DBG(""); + + if (!cfg) { + BT_ERR("No Generic Level Server context provided"); + return -EINVAL; + } + + cfg->model = model; + + gen_level_srv = cfg; + + return 0; +} + +const struct bt_mesh_model_cb gen_level_srv_cb = { + .init = level_srv_init, +}; + +static int lightness_srv_init(struct bt_mesh_model *model) +{ + struct bt_mesh_light_lightness_srv *cfg = model->user_data; + + BT_DBG(""); + + if (!cfg) { + BT_ERR("No Light Lightness Server context provided"); + return -EINVAL; + } + + cfg->model = model; + + light_lightness_srv = cfg; + + return 0; +} + +const struct bt_mesh_model_cb light_lightness_srv_cb = { + .init = lightness_srv_init, +}; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.c index 455893354..cf11c2d4f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.c @@ -6,6 +6,9 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_NET_LOG + #include #include #include @@ -13,10 +16,6 @@ #include "os/os_mbuf.h" #include "mesh/mesh.h" -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED MYNEWT_VAL(BLE_MESH_DEBUG_NET) -#include "host/ble_hs_log.h" - #include "crypto.h" #include "adv.h" #include "mesh_priv.h" @@ -60,9 +59,7 @@ #define FRIEND_CRED_COUNT 0 #endif -#if FRIEND_CRED_COUNT > 0 static struct friend_cred friend_cred[FRIEND_CRED_COUNT]; -#endif static u64_t msg_cache[MYNEWT_VAL(BLE_MESH_MSG_CACHE_SIZE)]; static u16_t msg_cache_next; @@ -80,6 +77,13 @@ struct bt_mesh_net bt_mesh = { .net_idx = BT_MESH_KEY_UNUSED, } }, +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) + .nodes = { + [0 ... (CONFIG_BT_MESH_NODE_COUNT - 1)] = { + .net_idx = BT_MESH_KEY_UNUSED, + } + }, +#endif }; static u32_t dup_cache[4]; @@ -131,7 +135,8 @@ static bool msg_cache_match(struct bt_mesh_net_rx *rx, } /* Add to the cache */ - msg_cache[msg_cache_next++] = hash; + rx->msg_cache_idx = msg_cache_next++; + msg_cache[rx->msg_cache_idx] = hash; msg_cache_next %= ARRAY_SIZE(msg_cache); return false; @@ -203,8 +208,6 @@ int bt_mesh_net_keys_create(struct bt_mesh_subnet_keys *keys, return 0; } -#if ((MYNEWT_VAL(BLE_MESH_LOW_POWER)) || \ - (MYNEWT_VAL(BLE_MESH_FRIEND))) int friend_cred_set(struct friend_cred *cred, u8_t idx, const u8_t net_key[16]) { u16_t lpn_addr, frnd_addr; @@ -251,7 +254,8 @@ int friend_cred_set(struct friend_cred *cred, u8_t idx, const u8_t net_key[16]) void friend_cred_refresh(u16_t net_idx) { int i; - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (i = 0; i < ARRAY_SIZE(friend_cred); i++) { struct friend_cred *cred = &friend_cred[i]; @@ -261,6 +265,7 @@ void friend_cred_refresh(u16_t net_idx) sizeof(cred->cred[0])); } } +#pragma GCC diagnostic pop } int friend_cred_update(struct bt_mesh_subnet *sub) @@ -268,7 +273,8 @@ int friend_cred_update(struct bt_mesh_subnet *sub) int err, i; BT_DBG("net_idx 0x%04x", sub->net_idx); - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (i = 0; i < ARRAY_SIZE(friend_cred); i++) { struct friend_cred *cred = &friend_cred[i]; @@ -282,7 +288,7 @@ int friend_cred_update(struct bt_mesh_subnet *sub) return err; } } - +#pragma GCC diagnostic pop return 0; } @@ -293,7 +299,8 @@ struct friend_cred *friend_cred_create(struct bt_mesh_subnet *sub, u16_t addr, int i, err; BT_DBG("net_idx 0x%04x addr 0x%04x", sub->net_idx, addr); - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (cred = NULL, i = 0; i < ARRAY_SIZE(friend_cred); i++) { if ((friend_cred[i].addr == BT_MESH_ADDR_UNASSIGNED) || (friend_cred[i].addr == addr && @@ -302,7 +309,7 @@ struct friend_cred *friend_cred_create(struct bt_mesh_subnet *sub, u16_t addr, break; } } - +#pragma GCC diagnostic pop if (!cred) { BT_WARN("No free friend credential slots"); return NULL; @@ -342,7 +349,8 @@ void friend_cred_clear(struct friend_cred *cred) int friend_cred_del(u16_t net_idx, u16_t addr) { int i; - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (i = 0; i < ARRAY_SIZE(friend_cred); i++) { struct friend_cred *cred = &friend_cred[i]; @@ -351,7 +359,7 @@ int friend_cred_del(u16_t net_idx, u16_t addr) return 0; } } - +#pragma GCC diagnostic pop return -ENOENT; } @@ -361,7 +369,8 @@ int friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid, int i; BT_DBG("net_idx 0x%04x addr 0x%04x", sub->net_idx, addr); - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (i = 0; i < ARRAY_SIZE(friend_cred); i++) { struct friend_cred *cred = &friend_cred[i]; @@ -387,16 +396,9 @@ int friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid, return 0; } - +#pragma GCC diagnostic pop return -ENOENT; } -#else -int friend_cred_get(struct bt_mesh_subnet *sub, u16_t addr, u8_t *nid, - const u8_t **enc, const u8_t **priv) -{ - return -ENOENT; -} -#endif /* FRIEND || LOW_POWER */ u8_t bt_mesh_net_flags(struct bt_mesh_subnet *sub) { @@ -719,6 +721,14 @@ u32_t bt_mesh_next_seq(void) bt_mesh_store_seq(); } + if (!atomic_test_bit(bt_mesh.flags, BT_MESH_IVU_IN_PROGRESS) && + bt_mesh.seq > IV_UPDATE_SEQ_LIMIT && + bt_mesh_subnet_get(BT_MESH_KEY_PRIMARY)) { + bt_mesh_beacon_ivu_initiator(true); + bt_mesh_net_iv_update(bt_mesh.iv_index + 1, true); + bt_mesh_net_sec_update(NULL); + } + return seq; } @@ -728,6 +738,7 @@ int bt_mesh_net_resend(struct bt_mesh_subnet *sub, struct os_mbuf *buf, { const u8_t *enc, *priv; u32_t seq; + u16_t dst; int err; BT_DBG("net_idx 0x%04x new_key %u len %u", sub->net_idx, new_key, @@ -753,6 +764,9 @@ int bt_mesh_net_resend(struct bt_mesh_subnet *sub, struct os_mbuf *buf, buf->om_data[3] = seq >> 8; buf->om_data[4] = seq; + /* Get destination, in case it's a proxy client */ + dst = DST(buf->om_data); + err = bt_mesh_net_encrypt(enc, buf, BT_MESH_NET_IVI_TX, false); if (err) { BT_ERR("encrypt failed (err %d)", err); @@ -765,13 +779,11 @@ int bt_mesh_net_resend(struct bt_mesh_subnet *sub, struct os_mbuf *buf, return err; } - bt_mesh_adv_send(buf, cb, cb_data); - - if (!atomic_test_bit(bt_mesh.flags, BT_MESH_IVU_IN_PROGRESS) && - bt_mesh.seq > IV_UPDATE_SEQ_LIMIT) { - bt_mesh_beacon_ivu_initiator(true); - bt_mesh_net_iv_update(bt_mesh.iv_index + 1, true); - bt_mesh_net_sec_update(NULL); + if (IS_ENABLED(CONFIG_BT_MESH_GATT_PROXY) && + bt_mesh_proxy_relay(buf, dst)) { + send_cb_finalize(cb, cb_data); + } else { + bt_mesh_adv_send(buf, cb, cb_data); } return 0; @@ -886,15 +898,7 @@ int bt_mesh_net_send(struct bt_mesh_net_tx *tx, struct os_mbuf *buf, /* Notify completion if this only went * through the Mesh Proxy. */ - if (cb) { - if (cb->start) { - cb->start(0, 0, cb_data); - } - - if (cb->end) { - cb->end(0, cb_data); - } - } + send_cb_finalize(cb, cb_data); err = 0; goto done; @@ -1019,8 +1023,6 @@ static int net_decrypt(struct bt_mesh_subnet *sub, const u8_t *enc, return bt_mesh_net_decrypt(enc, buf, BT_MESH_NET_IVI_RX(rx), false); } -#if (MYNEWT_VAL(BLE_MESH_LOW_POWER) || \ - MYNEWT_VAL(BLE_MESH_FRIEND)) static int friend_decrypt(struct bt_mesh_subnet *sub, const u8_t *data, size_t data_len, struct bt_mesh_net_rx *rx, struct os_mbuf *buf) @@ -1028,7 +1030,8 @@ static int friend_decrypt(struct bt_mesh_subnet *sub, const u8_t *data, int i; BT_DBG("NID 0x%02x net_idx 0x%04x", NID(data), sub->net_idx); - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" for (i = 0; i < ARRAY_SIZE(friend_cred); i++) { struct friend_cred *cred = &friend_cred[i]; @@ -1053,10 +1056,9 @@ static int friend_decrypt(struct bt_mesh_subnet *sub, const u8_t *data, return 0; } } - +#pragma GCC diagnostic pop return -ENOENT; } -#endif static bool net_find_and_decrypt(const u8_t *data, size_t data_len, struct bt_mesh_net_rx *rx, @@ -1073,15 +1075,14 @@ static bool net_find_and_decrypt(const u8_t *data, size_t data_len, continue; } -#if (MYNEWT_VAL(BLE_MESH_LOW_POWER) || \ - MYNEWT_VAL(BLE_MESH_FRIEND)) - if (!friend_decrypt(sub, data, data_len, rx, buf)) { - rx->friend_cred = 1; + if ((IS_ENABLED(CONFIG_BT_MESH_LOW_POWER) || + IS_ENABLED(CONFIG_BT_MESH_FRIEND)) && + !friend_decrypt(sub, data, data_len, rx, buf)) { + rx->friend_cred = 1U; rx->ctx.net_idx = sub->net_idx; rx->sub = sub; return true; } -#endif if (NID(data) == sub->keys[0].nid && !net_decrypt(sub, sub->keys[0].enc, sub->keys[0].privacy, @@ -1233,6 +1234,17 @@ done: net_buf_unref(buf); } +void bt_mesh_net_header_parse(struct os_mbuf *buf, + struct bt_mesh_net_rx *rx) +{ + rx->old_iv = (IVI(buf->om_data) != (bt_mesh.iv_index & 0x01)); + rx->ctl = CTL(buf->om_data); + rx->ctx.recv_ttl = TTL(buf->om_data); + rx->seq = SEQ(buf->om_data); + rx->ctx.addr = SRC(buf->om_data); + rx->ctx.recv_dst = DST(buf->om_data); +} + int bt_mesh_net_decode(struct os_mbuf *data, enum bt_mesh_net_if net_if, struct bt_mesh_net_rx *rx, struct os_mbuf *buf) { @@ -1303,7 +1315,7 @@ void bt_mesh_net_recv(struct os_mbuf *data, s8_t rssi, enum bt_mesh_net_if net_if) { struct os_mbuf *buf = NET_BUF_SIMPLE(29); - struct bt_mesh_net_rx rx = { .rssi = rssi }; + struct bt_mesh_net_rx rx = { .ctx.recv_rssi = rssi }; struct net_buf_simple_state state; BT_DBG("rssi %d net_if %u", rssi, net_if); @@ -1320,15 +1332,33 @@ void bt_mesh_net_recv(struct os_mbuf *data, s8_t rssi, /* Save the state so the buffer can later be relayed */ net_buf_simple_save(buf, &state); - if ((MYNEWT_VAL(BLE_MESH_GATT_PROXY)) && - net_if == BT_MESH_NET_IF_PROXY) { - bt_mesh_proxy_addr_add(data, rx.ctx.addr); - } - rx.local_match = (bt_mesh_fixed_group_match(rx.ctx.recv_dst) || bt_mesh_elem_find(rx.ctx.recv_dst)); - bt_mesh_trans_recv(buf, &rx); + if ((MYNEWT_VAL(BLE_MESH_GATT_PROXY)) && + net_if == BT_MESH_NET_IF_PROXY) { + bt_mesh_proxy_addr_add(data, rx.ctx.addr); + + if (bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_DISABLED && + !rx.local_match) { + BT_INFO("Proxy is disabled; ignoring message"); + goto done; + } + } + + /* The transport layer has indicated that it has rejected the message, + * but would like to see it again if it is received in the future. + * This can happen if a message is received when the device is in + * Low Power mode, but the message was not encrypted with the friend + * credentials. Remove it from the message cache so that we accept + * it again in the future. + */ + if (bt_mesh_trans_recv(buf, &rx) == -EAGAIN) { + BT_WARN("Removing rejected message from Network Message Cache"); + msg_cache[rx.msg_cache_idx] = 0ULL; + /* Rewind the next index now that we're not using this entry */ + msg_cache_next = rx.msg_cache_idx; + } /* Relay if this was a group/virtual address, or if the destination * was neither a local element nor an LPN we're Friends for. diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.h index e55102c06..976da0053 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/net.h @@ -41,6 +41,13 @@ struct bt_mesh_app_key { } keys[2]; }; +struct bt_mesh_node { + u16_t addr; + u16_t net_idx; + u8_t dev_key[16]; + u8_t num_elem; +}; + struct bt_mesh_subnet { u32_t beacon_sent; /* Timestamp of last sent beacon */ u8_t beacons_last; /* Number of beacons during last @@ -78,7 +85,7 @@ struct bt_mesh_subnet { struct bt_mesh_rpl { u16_t src; bool old_iv; -#if defined(CONFIG_BT_SETTINGS) +#if (MYNEWT_VAL(BLE_MESH_SETTINGS)) bool store; #endif u32_t seq; @@ -115,6 +122,12 @@ struct bt_mesh_friend { struct bt_mesh_friend_seg { struct net_buf_slist_t queue; + + /* The target number of segments, i.e. not necessarily + * the current number of segments, in the queue. This is + * used for Friend Queue free space calculations. + */ + u8_t seg_count; } seg[FRIEND_SEG_RX]; struct os_mbuf *last; @@ -208,7 +221,7 @@ enum { BT_MESH_IVU_TEST, /* IV Update test mode */ BT_MESH_IVU_PENDING, /* Update blocked by SDU in progress */ - /* pending storage actions */ + /* pending storage actions, must reside within first 32 flags */ BT_MESH_RPL_PENDING, BT_MESH_KEYS_PENDING, BT_MESH_NET_PENDING, @@ -217,6 +230,8 @@ enum { BT_MESH_HB_PUB_PENDING, BT_MESH_CFG_PENDING, BT_MESH_MOD_PENDING, + BT_MESH_VA_PENDING, + BT_MESH_NODES_PENDING, /* Don't touch - intentionally last */ BT_MESH_FLAG_COUNT, @@ -249,6 +264,10 @@ struct bt_mesh_net { u8_t dev_key[16]; +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) + struct bt_mesh_node nodes[MYNEWT_VAL(BLE_MESH_NODE_COUNT)]; +#endif + struct bt_mesh_app_key app_keys[MYNEWT_VAL(BLE_MESH_APP_KEY_COUNT)]; struct bt_mesh_subnet sub[MYNEWT_VAL(BLE_MESH_SUBNET_COUNT)]; @@ -276,7 +295,7 @@ struct bt_mesh_net_rx { net_if:2, /* Network interface */ local_match:1, /* Matched a local element */ friend_match:1; /* Matched an LPN we're friends for */ - s8_t rssi; + u16_t msg_cache_idx; /* Index of entry in message cache */ }; /* Encoding context for Network/Transport data */ @@ -346,6 +365,8 @@ u32_t bt_mesh_next_seq(void); void bt_mesh_net_start(void); void bt_mesh_net_init(void); +void bt_mesh_net_header_parse(struct os_mbuf *buf, + struct bt_mesh_net_rx *rx); /* Friendship Credential Management */ struct friend_cred { @@ -372,4 +393,20 @@ struct friend_cred *friend_cred_create(struct bt_mesh_subnet *sub, u16_t addr, void friend_cred_clear(struct friend_cred *cred); int friend_cred_del(u16_t net_idx, u16_t addr); +static inline void send_cb_finalize(const struct bt_mesh_send_cb *cb, + void *cb_data) +{ + if (!cb) { + return; + } + + if (cb->start) { + cb->start(0, 0, cb_data); + } + + if (cb->end) { + cb->end(0, cb_data); + } +} + #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.c new file mode 100644 index 000000000..127ef21e4 --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.c @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2019 Tobias Svehagen + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_PROV_LOG + +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) + +#include "mesh/mesh.h" + +#include "mesh_priv.h" +#include "net.h" +#include "access.h" +#include "settings.h" + +/* + * Check if an address range from addr_start for addr_start + num_elem - 1 is + * free for use. When a conflict is found, next will be set to the next address + * available after the conflicting range and -EAGAIN will be returned. + */ +static int addr_is_free(u16_t addr_start, u8_t num_elem, u16_t *next) +{ + const struct bt_mesh_comp *comp = bt_mesh_comp_get(); + u16_t addr_end = addr_start + num_elem - 1; + u16_t other_start, other_end; + int i; + + if (comp == NULL) { + return -EINVAL; + } + + if (!BT_MESH_ADDR_IS_UNICAST(addr_start) || + !BT_MESH_ADDR_IS_UNICAST(addr_end) || + num_elem == 0 || next == NULL) { + return -EINVAL; + } + + other_start = bt_mesh_primary_addr(); + other_end = other_start + comp->elem_count - 1; + + /* Compare with local element addresses */ + if (!(addr_end < other_start || addr_start > other_end)) { + *next = other_end + 1; + return -EAGAIN; + } + + for (i = 0; i < ARRAY_SIZE(bt_mesh.nodes); i++) { + struct bt_mesh_node *node = &bt_mesh.nodes[i]; + + if (node->net_idx == BT_MESH_KEY_UNUSED) { + continue; + } + + other_start = node->addr; + other_end = other_start + node->num_elem - 1; + + if (!(addr_end < other_start || addr_start > other_end)) { + *next = other_end + 1; + return -EAGAIN; + } + } + + return 0; +} + +/* + * Find the lowest possible starting address that can fit num_elem elements. If + * a free address range cannot be found, BT_MESH_ADDR_UNASSIGNED will be + * returned. Otherwise the first address in the range is returned. + * + * NOTE: This is quite an ineffective algorithm as it might need to look + * through the array of nodes N+2 times. A more effective algorithm + * could be used if the nodes were stored in a sorted list. + */ +static u16_t find_lowest_free_addr(u8_t num_elem) +{ + u16_t addr = 1, next; + int err, i; + + /* + * It takes a maximum of node count + 2 to find a free address if there + * is any. +1 for our own address and +1 for making sure that the + * address range is valid. + */ + for (i = 0; i < ARRAY_SIZE(bt_mesh.nodes) + 2; ++i) { + err = addr_is_free(addr, num_elem, &next); + if (err == 0) { + break; + } else if (err != -EAGAIN) { + addr = BT_MESH_ADDR_UNASSIGNED; + break; + } + + addr = next; + } + + return addr; +} + +struct bt_mesh_node *bt_mesh_node_find(u16_t addr) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(bt_mesh.nodes); i++) { + struct bt_mesh_node *node = &bt_mesh.nodes[i]; + + if (addr >= node->addr && + addr <= node->addr + node->num_elem - 1) { + return node; + } + } + + return NULL; +} + +struct bt_mesh_node *bt_mesh_node_alloc(u16_t addr, u8_t num_elem, + u16_t net_idx) +{ + int i; + + BT_DBG(""); + + if (addr == BT_MESH_ADDR_UNASSIGNED) { + addr = find_lowest_free_addr(num_elem); + if (addr == BT_MESH_ADDR_UNASSIGNED) { + return NULL; + } + } else if (!addr_is_free(addr, num_elem, NULL)) { + return NULL; + } + + for (i = 0; i < ARRAY_SIZE(bt_mesh.nodes); i++) { + struct bt_mesh_node *node = &bt_mesh.nodes[i]; + + if (node->addr == BT_MESH_ADDR_UNASSIGNED) { + node->addr = addr; + node->num_elem = num_elem; + node->net_idx = net_idx; + return node; + } + } + + return NULL; +} + +void bt_mesh_node_del(struct bt_mesh_node *node, bool store) +{ + BT_DBG("Node addr 0x%04x store %u", node->addr, store); + + if (IS_ENABLED(CONFIG_BT_SETTINGS) && store) { + bt_mesh_clear_node(node); + } + + node->addr = BT_MESH_ADDR_UNASSIGNED; + (void)memset(node->dev_key, 0, sizeof(node->dev_key)); +} + +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.h new file mode 100644 index 000000000..f86193d9e --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/nodes.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2019 Tobias Svehagen + * + * SPDX-License-Identifier: Apache-2.0 + */ + +struct bt_mesh_node *bt_mesh_node_find(u16_t addr); +struct bt_mesh_node *bt_mesh_node_alloc(u16_t addr, u8_t num_elem, + u16_t net_idx); +void bt_mesh_node_del(struct bt_mesh_node *node, bool store); \ No newline at end of file diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.c index 5c519e75a..fe92c0e34 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.c @@ -5,14 +5,14 @@ * * SPDX-License-Identifier: Apache-2.0 */ + #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_PROV_LOG + #if MYNEWT_VAL(BLE_MESH_PROV) #include -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_PROV)) -#include "host/ble_hs_log.h" - #include "mesh/mesh.h" #include "mesh_priv.h" @@ -25,6 +25,8 @@ #include "proxy.h" #include "prov.h" #include "testing.h" +#include "settings.h" +#include "nodes.h" /* 3 transmissions, 20ms interval */ #define PROV_XMIT BT_MESH_TRANSMIT(2, 20) @@ -69,6 +71,8 @@ #define PROV_COMPLETE 0x08 #define PROV_FAILED 0x09 +#define PROV_NO_PDU 0xff + #define PROV_ALG_P256 0x00 #define GPCF(gpc) (gpc & 0x03) @@ -98,22 +102,40 @@ #define XACT_NVAL 0xff enum { - REMOTE_PUB_KEY, /* Remote key has been received */ + WAIT_PUB_KEY, /* Waiting for local PubKey to be generated */ LINK_ACTIVE, /* Link has been opened */ - HAVE_DHKEY, /* DHKey has been calculated */ - SEND_CONFIRM, /* Waiting to send Confirm value */ + LINK_ACK_RECVD, /* Ack for link has been received */ + LINK_CLOSING, /* Link is closing down */ + SEND_PUB_KEY, /* Waiting to send PubKey */ WAIT_NUMBER, /* Waiting for number input from user */ WAIT_STRING, /* Waiting for string input from user */ + NOTIFY_INPUT_COMPLETE, /* Notify that input has been completed. */ LINK_INVALID, /* Error occurred during provisioning */ + PROVISIONER, /* The link was opened as provisioner */ NUM_FLAGS, }; +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) +#define PROVISIONER_LINK 1 +#else +#define PROVISIONER_LINK 0 +#endif + +struct provisioner_link { + struct bt_mesh_node *node; + u16_t addr; + u16_t net_idx; + u8_t attention_duration; +}; + struct prov_link { ATOMIC_DEFINE(flags, NUM_FLAGS); #if (MYNEWT_VAL(BLE_MESH_PB_GATT)) uint16_t conn_handle; /* GATT connection */ #endif + struct provisioner_link provisioner[PROVISIONER_LINK]; + u8_t dhkey[32]; /* Calculated DHKey */ u8_t expect; /* Next expected PDU */ @@ -168,6 +190,7 @@ struct prov_rx { #define RETRANSMIT_TIMEOUT K_MSEC(500) #define BUF_TIMEOUT K_MSEC(400) +#define CLOSING_TIMEOUT K_SECONDS(3) #define TRANSACTION_TIMEOUT K_SECONDS(30) #define PROTOCOL_TIMEOUT K_SECONDS(60) @@ -200,6 +223,11 @@ static int reset_state(void) bt_mesh_attention(NULL, 0); } + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + link.provisioner->node != NULL) { + bt_mesh_node_del(link.provisioner->node, false); + } + #if (MYNEWT_VAL(BLE_MESH_PB_ADV)) /* Clear everything except the retransmit and protocol timer * delayed work objects. @@ -210,6 +238,9 @@ static int reset_state(void) #if (MYNEWT_VAL(BLE_MESH_PB_GATT)) link.rx.buf = bt_mesh_proxy_get_buf(); #else + if (!rx_buf) { + rx_buf = NET_BUF_SIMPLE(65); + } net_buf_simple_init(rx_buf, 0); link.rx.buf = rx_buf; #endif /* PB_GATT */ @@ -364,7 +395,7 @@ static void send_reliable(void) } } -static int bearer_ctl_send(u8_t op, void *data, u8_t data_len) +static int bearer_ctl_send(u8_t op, const void *data, u8_t data_len) { struct os_mbuf *buf; @@ -402,11 +433,20 @@ static u8_t last_seg(u8_t len) static inline u8_t next_transaction_id(void) { - if (link.tx.id != 0 && link.tx.id != 0xFF) { - return ++link.tx.id; + if (atomic_test_bit(link.flags, PROVISIONER)) { + if (link.tx.id != 0x7F) { + link.tx.id++; + } else { + link.tx.id = 0; + } + } else { + if (link.tx.id != 0U && link.tx.id != 0xFF) { + link.tx.id++; + } else { + link.tx.id = 0x80; + } } - link.tx.id = 0x80; return link.tx.id; } @@ -576,10 +616,63 @@ done: os_mbuf_free_chain(buf); } +#if MYNEWT_VAL(BLE_MESH_PB_ADV) +static void send_invite(void) +{ + struct os_mbuf *inv = PROV_BUF(2); + + BT_DBG(""); + + prov_buf_init(inv, PROV_INVITE); + net_buf_simple_add_u8(inv, link.provisioner->attention_duration); + + link.conf_inputs[0] = link.provisioner->attention_duration; + + if (prov_send(inv)) { + BT_ERR("Failed to send invite"); + goto done; + } + + link.expect = PROV_CAPABILITIES; + +done: + os_mbuf_free_chain(inv); +} +#endif + +static void send_start(void) +{ + struct os_mbuf *start = PROV_BUF(6); + + BT_DBG(""); + + prov_buf_init(start, PROV_START); + + net_buf_simple_add_u8(start, PROV_ALG_P256); + net_buf_simple_add_u8(start, PUB_KEY_NO_OOB); + net_buf_simple_add_u8(start, AUTH_METHOD_NO_OOB); + memset(link.auth, 0, sizeof(link.auth)); + + net_buf_simple_add_u8(start, 0); /* Auth Action */ + net_buf_simple_add_u8(start, 0); /* Auth Size */ + + memcpy(&link.conf_inputs[12], &start->om_data[1], 5); + + if (prov_send(start)) { + BT_ERR("Failed to send start"); + } + + os_mbuf_free_chain(start); +} + static void prov_capabilities(const u8_t *data) { u16_t algorithms, output_action, input_action; + if (!IS_ENABLED(CONFIG_BT_MESH_PROVISIONER)) { + return; + } + BT_DBG("Elements: %u", data[0]); algorithms = sys_get_be16(&data[1]); @@ -596,6 +689,26 @@ static void prov_capabilities(const u8_t *data) input_action = sys_get_be16(&data[9]); BT_DBG("Input OOB Action: 0x%04x", input_action); + + if (data[0] == 0) { + BT_ERR("Invalid number of elements"); + prov_send_fail_msg(PROV_ERR_NVAL_FMT); + return; + } + + link.provisioner->node = bt_mesh_node_alloc(link.provisioner->addr, + data[0], + link.provisioner->net_idx); + if (link.provisioner->node == NULL) { + prov_send_fail_msg(PROV_ERR_RESOURCES); + return; + } + + memcpy(&link.conf_inputs[1], data, 11); + + atomic_set_bit(link.flags, SEND_PUB_KEY); + + send_start(); } static bt_mesh_output_action_t output_action(u8_t action) @@ -669,6 +782,8 @@ static int prov_auth(u8_t method, u8_t action, u8_t size) return -EINVAL; } + atomic_set_bit(link.flags, NOTIFY_INPUT_COMPLETE); + if (output == BT_MESH_DISPLAY_STRING) { unsigned char str[9]; u8_t i; @@ -810,7 +925,11 @@ static void send_confirm(void) goto done; } - link.expect = PROV_RANDOM; + if (atomic_test_bit(link.flags, PROVISIONER)) { + link.expect = PROV_CONFIRM; + } else { + link.expect = PROV_RANDOM; + } done: os_mbuf_free_chain(cfm); @@ -824,6 +943,7 @@ static void send_input_complete(void) if (prov_send(buf)) { BT_ERR("Failed to send Provisioning Input Complete"); } + link.expect = PROV_CONFIRM; os_mbuf_free_chain(buf); } @@ -840,14 +960,6 @@ int bt_mesh_input_number(u32_t num) send_input_complete(); - if (!atomic_test_bit(link.flags, HAVE_DHKEY)) { - return 0; - } - - if (atomic_test_and_clear_bit(link.flags, SEND_CONFIRM)) { - send_confirm(); - } - return 0; } @@ -863,43 +975,9 @@ int bt_mesh_input_string(const char *str) send_input_complete(); - if (!atomic_test_bit(link.flags, HAVE_DHKEY)) { - return 0; - } - - if (atomic_test_and_clear_bit(link.flags, SEND_CONFIRM)) { - send_confirm(); - } - return 0; } -static void prov_dh_key_cb(const u8_t key[32]) -{ - BT_DBG("%p", key); - - if (!key) { - BT_ERR("DHKey generation failed"); - prov_send_fail_msg(PROV_ERR_UNEXP_ERR); - return; - } - - sys_memcpy_swap(link.dhkey, key, 32); - - BT_DBG("DHkey: %s", bt_hex(link.dhkey, 32)); - - atomic_set_bit(link.flags, HAVE_DHKEY); - - if (atomic_test_bit(link.flags, WAIT_NUMBER) || - atomic_test_bit(link.flags, WAIT_STRING)) { - return; - } - - if (atomic_test_and_clear_bit(link.flags, SEND_CONFIRM)) { - send_confirm(); - } -} - static void send_pub_key(void) { struct os_mbuf *buf = PROV_BUF(65); @@ -914,56 +992,112 @@ static void send_pub_key(void) BT_DBG("Local Public Key: %s", bt_hex(key, 64)); - /* Copy remote key in little-endian for bt_dh_key_gen(). - * X and Y halves are swapped independently. Use response - * buffer as a temporary storage location. The bt_dh_key_gen() - * will also take care of validating the remote public key. - */ - sys_memcpy_swap(buf->om_data, &link.conf_inputs[17], 32); - sys_memcpy_swap(&buf->om_data[32], &link.conf_inputs[49], 32); - - if (bt_dh_key_gen(buf->om_data, prov_dh_key_cb)) { - BT_ERR("Failed to generate DHKey"); - prov_send_fail_msg(PROV_ERR_UNEXP_ERR); - return; - } - prov_buf_init(buf, PROV_PUB_KEY); /* Swap X and Y halves independently to big-endian */ sys_memcpy_swap(net_buf_simple_add(buf, 32), key, 32); sys_memcpy_swap(net_buf_simple_add(buf, 32), &key[32], 32); - memcpy(&link.conf_inputs[81], &buf->om_data[1], 64); + if (atomic_test_bit(link.flags, PROVISIONER)) { + /* PublicKeyProvisioner */ + memcpy(&link.conf_inputs[17], &buf->om_data[1], 64); + } else { + /* PublicKeyRemote */ + memcpy(&link.conf_inputs[81], &buf->om_data[1], 64); + } if (prov_send(buf)) { BT_ERR("Failed to send Public Key"); - return; + goto done; } - link.expect = PROV_CONFIRM; + if (atomic_test_bit(link.flags, PROVISIONER)) { + link.expect = PROV_PUB_KEY; + } else { + if (atomic_test_bit(link.flags, WAIT_NUMBER) || + atomic_test_bit(link.flags, WAIT_STRING)) { + link.expect = PROV_NO_PDU; /* Wait for input */ + } else { + link.expect = PROV_CONFIRM; + } + } done: os_mbuf_free_chain(buf); } +static void prov_dh_key_cb(const u8_t dhkey[32]) +{ + BT_DBG("%p", dhkey); + + if (!dhkey) { + BT_ERR("DHKey generation failed"); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); + return; + } + + sys_memcpy_swap(link.dhkey, dhkey, 32); + + BT_DBG("DHkey: %s", bt_hex(link.dhkey, 32)); + + if (atomic_test_bit(link.flags, PROVISIONER)) { + send_confirm(); + } else { + send_pub_key(); + } +} + +static void prov_dh_key_gen(void) +{ + u8_t remote_pk_le[64], *remote_pk; + + if (atomic_test_bit(link.flags, PROVISIONER)) { + remote_pk = &link.conf_inputs[81]; + } else { + remote_pk = &link.conf_inputs[17]; + } + + /* Copy remote key in little-endian for bt_dh_key_gen(). + * X and Y halves are swapped independently. The bt_dh_key_gen() + * will also take care of validating the remote public key. + */ + sys_memcpy_swap(remote_pk_le, remote_pk, 32); + sys_memcpy_swap(&remote_pk_le[32], &remote_pk[32], 32); + + if (bt_dh_key_gen(remote_pk_le, prov_dh_key_cb)) { + BT_ERR("Failed to generate DHKey"); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); + } +} + static void prov_pub_key(const u8_t *data) { BT_DBG("Remote Public Key: %s", bt_hex(data, 64)); - memcpy(&link.conf_inputs[17], data, 64); + if (atomic_test_bit(link.flags, PROVISIONER)) { + /* PublicKeyDevice */ + memcpy(&link.conf_inputs[81], data, 64); - if (!bt_pub_key_get()) { - /* Clear retransmit timer */ #if (MYNEWT_VAL(BLE_MESH_PB_ADV)) prov_clear_tx(); #endif - atomic_set_bit(link.flags, REMOTE_PUB_KEY); - BT_WARN("Waiting for local public key"); - return; + } else { + /* PublicKeyProvisioner */ + memcpy(&link.conf_inputs[17], data, 64); + + if (!bt_pub_key_get()) { + /* Clear retransmit timer */ +#if (MYNEWT_VAL(BLE_MESH_PB_ADV)) + prov_clear_tx(); +#endif + + atomic_set_bit(link.flags, WAIT_PUB_KEY); + BT_WARN("Waiting for local public key"); + return; + } } - send_pub_key(); + prov_dh_key_gen(); } static void pub_key_ready(const u8_t *pkey) @@ -975,53 +1109,145 @@ static void pub_key_ready(const u8_t *pkey) BT_DBG("Local public key ready"); - if (atomic_test_and_clear_bit(link.flags, REMOTE_PUB_KEY)) { - send_pub_key(); + if (atomic_test_and_clear_bit(link.flags, WAIT_PUB_KEY)) { + if (atomic_test_bit(link.flags, PROVISIONER)) { + send_pub_key(); + } else { + prov_dh_key_gen(); + } + } +} + +static void notify_input_complete(void) +{ + if (atomic_test_and_clear_bit(link.flags, NOTIFY_INPUT_COMPLETE) && + prov->input_complete) { + prov->input_complete(); } } static void prov_input_complete(const u8_t *data) { BT_DBG(""); + notify_input_complete(); } -static void prov_confirm(const u8_t *data) +static void send_prov_data(void) { - BT_DBG("Remote Confirm: %s", bt_hex(data, 16)); + struct os_mbuf *pdu = PROV_BUF(34); + struct bt_mesh_subnet *sub; + u8_t session_key[16]; + u8_t nonce[13]; + int err; - memcpy(link.conf, data, 16); - - if (!atomic_test_bit(link.flags, HAVE_DHKEY)) { -#if (MYNEWT_VAL(BLE_MESH_PB_ADV)) - prov_clear_tx(); -#endif - atomic_set_bit(link.flags, SEND_CONFIRM); - } else { - send_confirm(); - } -} - -static void prov_random(const u8_t *data) -{ - struct os_mbuf *rnd = PROV_BUF(16); - u8_t conf_verify[16]; - - BT_DBG("Remote Random: %s", bt_hex(data, 16)); - - if (bt_mesh_prov_conf(link.conf_key, data, link.auth, conf_verify)) { - BT_ERR("Unable to calculate confirmation verification"); + err = bt_mesh_session_key(link.dhkey, link.prov_salt, session_key); + if (err) { + BT_ERR("Unable to generate session key"); prov_send_fail_msg(PROV_ERR_UNEXP_ERR); goto done; } - if (memcmp(conf_verify, link.conf, 16)) { - BT_ERR("Invalid confirmation value"); - BT_DBG("Received: %s", bt_hex(link.conf, 16)); - BT_DBG("Calculated: %s", bt_hex(conf_verify, 16)); - prov_send_fail_msg(PROV_ERR_CFM_FAILED); + BT_DBG("SessionKey: %s", bt_hex(session_key, 16)); + + err = bt_mesh_prov_nonce(link.dhkey, link.prov_salt, nonce); + if (err) { + BT_ERR("Unable to generate session nonce"); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); goto done; } + BT_DBG("Nonce: %s", bt_hex(nonce, 13)); + + err = bt_mesh_dev_key(link.dhkey, link.prov_salt, + link.provisioner->node->dev_key); + if (err) { + BT_ERR("Unable to generate device key"); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); + goto done; + } + + BT_DBG("DevKey: %s", bt_hex(link.provisioner->node->dev_key, 16)); + + sub = bt_mesh_subnet_get(link.provisioner->node->net_idx); + if (sub == NULL) { + BT_ERR("No subnet with net_idx %u", + link.provisioner->node->net_idx); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); + goto done; + } + + prov_buf_init(pdu, PROV_DATA); + net_buf_simple_add_mem(pdu, sub->keys[sub->kr_flag].net, 16); + net_buf_simple_add_be16(pdu, link.provisioner->node->net_idx); + net_buf_simple_add_u8(pdu, bt_mesh_net_flags(sub)); + net_buf_simple_add_be32(pdu, bt_mesh.iv_index); + net_buf_simple_add_be16(pdu, link.provisioner->node->addr); + net_buf_simple_add(pdu, 8); /* For MIC */ + + BT_DBG("net_idx %u, iv_index 0x%08x, addr 0x%04x", + link.provisioner->node->net_idx, bt_mesh.iv_index, + link.provisioner->node->addr); + + err = bt_mesh_prov_encrypt(session_key, nonce, &pdu->om_data[1], + &pdu->om_data[1]); + if (err) { + BT_ERR("Unable to encrypt provisioning data"); + prov_send_fail_msg(PROV_ERR_DECRYPT); + goto done; + } + + if (prov_send(pdu)) { + BT_ERR("Failed to send Provisioning Data"); + goto done; + } + + link.expect = PROV_COMPLETE; + +done: + os_mbuf_free_chain(pdu); +} + +static void prov_complete(const u8_t *data) +{ + if (!IS_ENABLED(CONFIG_BT_MESH_PROVISIONER)) { + return; + } + + struct bt_mesh_node *node = link.provisioner->node; +#if MYNEWT_VAL(BLE_MESH_PB_ADV) + u8_t reason = CLOSE_REASON_SUCCESS; +#endif + + BT_DBG("key %s, net_idx %u, num_elem %u, addr 0x%04x", + bt_hex(node->dev_key, 16), node->net_idx, node->num_elem, + node->addr); + + if (IS_ENABLED(CONFIG_BT_SETTINGS)) { + bt_mesh_store_node(node); + } + + link.provisioner->node = NULL; + link.expect = PROV_NO_PDU; + atomic_set_bit(link.flags, LINK_CLOSING); + +#if MYNEWT_VAL(BLE_MESH_PB_ADV) + bearer_ctl_send(LINK_CLOSE, &reason, sizeof(reason)); +#endif + + bt_mesh_prov_node_added(node->net_idx, node->addr, node->num_elem); + + /* + * According to mesh profile spec (5.3.1.4.3), the close message should + * be restransmitted at least three times. Retransmit the LINK_CLOSE + * message until CLOSING_TIMEOUT has elapsed instead of resetting the + * link here. + */ +} + +static void send_random(void) +{ + struct os_mbuf *rnd = PROV_BUF(17); + prov_buf_init(rnd, PROV_RANDOM); net_buf_simple_add_mem(rnd, link.rand, 16); @@ -1030,19 +1256,75 @@ static void prov_random(const u8_t *data) goto done; } - if (bt_mesh_prov_salt(link.conf_salt, data, link.rand, + if (atomic_test_bit(link.flags, PROVISIONER)) { + link.expect = PROV_RANDOM; + } else { + link.expect = PROV_DATA; + } + +done: + os_mbuf_free_chain(rnd); +} + +static void prov_random(const u8_t *data) +{ + u8_t conf_verify[16]; + const u8_t *prov_rand, *dev_rand; + + BT_DBG("Remote Random: %s", bt_hex(data, 16)); + + if (bt_mesh_prov_conf(link.conf_key, data, link.auth, conf_verify)) { + BT_ERR("Unable to calculate confirmation verification"); + prov_send_fail_msg(PROV_ERR_UNEXP_ERR); + return; + } + + if (memcmp(conf_verify, link.conf, 16)) { + BT_ERR("Invalid confirmation value"); + BT_DBG("Received: %s", bt_hex(link.conf, 16)); + BT_DBG("Calculated: %s", bt_hex(conf_verify, 16)); + prov_send_fail_msg(PROV_ERR_CFM_FAILED); + return; + } + + if (atomic_test_bit(link.flags, PROVISIONER)) { + prov_rand = link.rand; + dev_rand = data; + } else { + prov_rand = data; + dev_rand = link.rand; + } + + if (bt_mesh_prov_salt(link.conf_salt, prov_rand, dev_rand, link.prov_salt)) { BT_ERR("Failed to generate provisioning salt"); prov_send_fail_msg(PROV_ERR_UNEXP_ERR); - goto done; + return; } BT_DBG("ProvisioningSalt: %s", bt_hex(link.prov_salt, 16)); - link.expect = PROV_DATA; + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + atomic_test_bit(link.flags, PROVISIONER)) { + send_prov_data(); + } else { + send_random(); + } +} -done: - os_mbuf_free_chain(rnd); +static void prov_confirm(const u8_t *data) +{ + BT_DBG("Remote Confirm: %s", bt_hex(data, 16)); + + memcpy(link.conf, data, 16); + + notify_input_complete(); + + if (atomic_test_bit(link.flags, PROVISIONER)) { + send_random(); + } else { + send_confirm(); + } } static inline bool is_pb_gatt(void) @@ -1119,7 +1401,7 @@ static void prov_data(const u8_t *data) } /* Ignore any further PDUs on this link */ - link.expect = 0; + link.expect = PROV_NO_PDU; /* Store info, since bt_mesh_provision() will end up clearing it */ if (IS_ENABLED(CONFIG_BT_MESH_GATT_PROXY)) { @@ -1145,11 +1427,6 @@ done: os_mbuf_free_chain(msg); } -static void prov_complete(const u8_t *data) -{ - BT_DBG(""); -} - static void prov_failed(const u8_t *data) { BT_WARN("Error: 0x%02x", data[0]); @@ -1174,7 +1451,7 @@ static const struct { #if (MYNEWT_VAL(BLE_MESH_PB_ADV)) static void prov_retransmit(struct ble_npl_event *work) { - int i; + int i, timeout; BT_DBG(""); @@ -1183,7 +1460,13 @@ static void prov_retransmit(struct ble_npl_event *work) return; } - if (k_uptime_get() - link.tx.start > TRANSACTION_TIMEOUT) { + if (atomic_test_bit(link.flags, LINK_CLOSING)) { + timeout = CLOSING_TIMEOUT; + } else { + timeout = TRANSACTION_TIMEOUT; + } + + if (k_uptime_get() - link.tx.start > timeout) { BT_WARN("Giving up transaction"); reset_adv_link(); return; @@ -1248,12 +1531,26 @@ static void link_open(struct prov_rx *rx, struct os_mbuf *buf) bearer_ctl_send(LINK_ACK, NULL, 0); link.expect = PROV_INVITE; - } static void link_ack(struct prov_rx *rx, struct os_mbuf *buf) { BT_DBG("Link ack: len %u", buf->om_len); + + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + atomic_test_bit(link.flags, PROVISIONER)) { + if (atomic_test_and_set_bit(link.flags, LINK_ACK_RECVD)) { + return; + } + + prov_clear_tx(); + + if (prov->link_open) { + prov->link_open(BT_MESH_PROV_ADV); + } + + send_invite(); + } } static void link_close(struct prov_rx *rx, struct os_mbuf *buf) @@ -1398,7 +1695,21 @@ static void gen_prov_ack(struct prov_rx *rx, struct os_mbuf *buf) } if (rx->xact_id == link.tx.id) { - prov_clear_tx(); + /* Don't clear resending of LINK_CLOSE messages */ + if (!atomic_test_bit(link.flags, LINK_CLOSING)) { + prov_clear_tx(); + } + + /* Send the PubKey when the the Start message is ACK'ed */ + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + atomic_test_and_clear_bit(link.flags, SEND_PUB_KEY)) { + if (!bt_pub_key_get()) { + atomic_set_bit(link.flags, WAIT_PUB_KEY); + BT_WARN("Waiting for local public key"); + } else { + send_pub_key(); + } + } } } @@ -1456,9 +1767,9 @@ static void gen_prov_start(struct prov_rx *rx, struct os_mbuf *buf) } static const struct { - void (*const func)(struct prov_rx *rx, struct os_mbuf *buf); - const u8_t require_link; - const u8_t min_len; + void (*func)(struct prov_rx *rx, struct os_mbuf *buf); + bool require_link; + u8_t min_len; } gen_prov[] = { { gen_prov_start, true, 3 }, { gen_prov_ack, true, 0 }, @@ -1510,6 +1821,31 @@ void bt_mesh_pb_adv_recv(struct os_mbuf *buf) gen_prov_recv(&rx, buf); } + +int bt_mesh_pb_adv_open(const u8_t uuid[16], u16_t net_idx, u16_t addr, + u8_t attention_duration) +{ + BT_DBG("uuid %s", bt_hex(uuid, 16)); + + if (atomic_test_and_set_bit(link.flags, LINK_ACTIVE)) { + return -EBUSY; + } + + atomic_set_bit(link.flags, PROVISIONER); + + bt_rand(&link.id, sizeof(link.id)); + link.tx.id = 0x7F; + link.provisioner->addr = addr; + link.provisioner->net_idx = net_idx; + link.provisioner->attention_duration = attention_duration; + + net_buf_simple_init(link.rx.buf, 0); + + bearer_ctl_send(LINK_OPEN, uuid, 16); + + return 0; +} + #endif /* MYNEWT_VAL(BLE_MESH_PB_ADV) */ #if (MYNEWT_VAL(BLE_MESH_PB_GATT)) @@ -1655,6 +1991,13 @@ void bt_mesh_prov_complete(u16_t net_idx, u16_t addr) } } +void bt_mesh_prov_node_added(u16_t net_idx, u16_t addr, u8_t num_elem) +{ + if (prov->node_added) { + prov->node_added(net_idx, addr, num_elem); + } +} + void bt_mesh_prov_reset(void) { if (prov->reset) { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.h index 3675b6cc7..96e5a447c 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/prov.h @@ -13,6 +13,9 @@ #include "mesh/mesh.h" #include "../src/ble_hs_conn_priv.h" +int bt_mesh_pb_adv_open(const u8_t uuid[16], u16_t net_idx, u16_t addr, + u8_t attention_duration); + void bt_mesh_pb_adv_recv(struct os_mbuf *buf); bool bt_prov_active(void); @@ -28,6 +31,7 @@ int bt_mesh_prov_init(const struct bt_mesh_prov *prov); void bt_mesh_prov_reset_link(void); void bt_mesh_prov_complete(u16_t net_idx, u16_t addr); +void bt_mesh_prov_node_added(u16_t net_idx, u16_t addr, u8_t num_elem); void bt_mesh_prov_reset(void); #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.c index 609da54d2..134a36dd6 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.c @@ -7,13 +7,11 @@ */ #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_PROXY_LOG #if MYNEWT_VAL(BLE_MESH_PROXY) #include "mesh/mesh.h" - -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_PROXY)) -#include "host/ble_hs_log.h" #include "host/ble_att.h" #include "services/gatt/ble_svc_gatt.h" #include "../../host/src/ble_hs_priv.h" @@ -654,10 +652,7 @@ static void proxy_connected(uint16_t conn_handle) static void proxy_disconnected(uint16_t conn_handle, int reason) { int i; - - BT_INFO("conn_handle %d reason %d", conn_handle, reason); - - conn_count--; + bool disconnected = false; for (i = 0; i < ARRAY_SIZE(clients); i++) { struct bt_mesh_proxy_client *client = &clients[i]; @@ -670,11 +665,16 @@ static void proxy_disconnected(uint16_t conn_handle, int reason) k_delayed_work_cancel(&client->sar_timer); client->conn_handle = BLE_HS_CONN_HANDLE_NONE; + conn_count--; + disconnected = true; break; } } - bt_mesh_adv_update(); + if (disconnected) { + BT_INFO("conn_handle %d reason %d", conn_handle, reason); + bt_mesh_adv_update(); + } } struct os_mbuf *bt_mesh_proxy_get_buf(void) @@ -740,7 +740,7 @@ int bt_mesh_proxy_prov_enable(void) return 0; } -int bt_mesh_proxy_prov_disable(void) +int bt_mesh_proxy_prov_disable(bool disconnect) { uint16_t handle; int rc; @@ -767,13 +767,23 @@ int bt_mesh_proxy_prov_disable(void) for (i = 0; i < ARRAY_SIZE(clients); i++) { struct bt_mesh_proxy_client *client = &clients[i]; - if ((client->conn_handle != BLE_HS_CONN_HANDLE_NONE) - && (client->filter_type == PROV)) { + if ((client->conn_handle == BLE_HS_CONN_HANDLE_NONE) + || (client->filter_type != PROV)) { + continue; + } + + if (disconnect) { + rc = ble_gap_terminate(client->conn_handle, + BLE_ERR_REM_USER_CONN_TERM); + assert(rc == 0); + } else { bt_mesh_pb_gatt_close(client->conn_handle); client->filter_type = NONE; } } + bt_mesh_adv_update(); + return 0; } #endif /* MYNEWT_VAL(BLE_MESH_PB_GATT) */ @@ -907,16 +917,6 @@ static bool client_filter_match(struct bt_mesh_proxy_client *client, BT_DBG("filter_type %u addr 0x%04x", client->filter_type, addr); - if (client->filter_type == WHITELIST) { - for (i = 0; i < ARRAY_SIZE(client->filter); i++) { - if (client->filter[i] == addr) { - return true; - } - } - - return false; - } - if (client->filter_type == BLACKLIST) { for (i = 0; i < ARRAY_SIZE(client->filter); i++) { if (client->filter[i] == addr) { @@ -927,6 +927,18 @@ static bool client_filter_match(struct bt_mesh_proxy_client *client, return true; } + if (addr == BT_MESH_ADDR_ALL_NODES) { + return true; + } + + if (client->filter_type == WHITELIST) { + for (i = 0; i < ARRAY_SIZE(client->filter); i++) { + if (client->filter[i] == addr) { + return true; + } + } + } + return false; } @@ -1146,7 +1158,7 @@ static bool advertise_subnet(struct bt_mesh_subnet *sub) } return (sub->node_id == BT_MESH_NODE_IDENTITY_RUNNING || - bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED); + bt_mesh_gatt_proxy_get() != BT_MESH_GATT_PROXY_NOT_SUPPORTED); } static struct bt_mesh_subnet *next_sub(void) @@ -1189,7 +1201,7 @@ static s32_t gatt_proxy_advertise(struct bt_mesh_subnet *sub) BT_DBG(""); if (conn_count == CONFIG_BT_MAX_CONN) { - BT_WARN("Connectable advertising deferred (max connections)"); + BT_DBG("Connectable advertising deferred (max connections)"); return remaining; } @@ -1213,11 +1225,7 @@ static s32_t gatt_proxy_advertise(struct bt_mesh_subnet *sub) } if (sub->node_id == BT_MESH_NODE_IDENTITY_STOPPED) { - if (bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED) { - net_id_adv(sub); - } else { - return gatt_proxy_advertise(next_sub()); - } + net_id_adv(sub); } subnet_count = sub_count(); @@ -1353,12 +1361,39 @@ void bt_mesh_proxy_adv_stop(void) } } -int -ble_mesh_proxy_gap_event(struct ble_gap_event *event, void *arg) +static void ble_mesh_handle_connect(struct ble_gap_event *event, void *arg) { +#if MYNEWT_VAL(BLE_EXT_ADV) + /* When EXT ADV is enabled then mesh proxy is connected + * when proxy advertising instance is completed. + * Therefore no need to handle BLE_GAP_EVENT_CONNECT + */ + if (event->type == BLE_GAP_EVENT_ADV_COMPLETE) { + /* Reason 0 means advertising has been completed because + * connection has been established + */ + if (event->adv_complete.reason != 0) { + return; + } + if (event->adv_complete.instance != BT_MESH_ADV_GATT_INST) { + return; + } + + proxy_connected(event->adv_complete.conn_handle); + } +#else if (event->type == BLE_GAP_EVENT_CONNECT) { proxy_connected(event->connect.conn_handle); + } +#endif +} + +int ble_mesh_proxy_gap_event(struct ble_gap_event *event, void *arg) +{ + if ((event->type == BLE_GAP_EVENT_CONNECT) || + (event->type == BLE_GAP_EVENT_ADV_COMPLETE)) { + ble_mesh_handle_connect(event, arg); } else if (event->type == BLE_GAP_EVENT_DISCONNECT) { proxy_disconnected(event->disconnect.conn.conn_handle, event->disconnect.reason); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.h index 9f19be07b..64338a0a3 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/proxy.h @@ -19,7 +19,7 @@ int bt_mesh_proxy_send(uint16_t conn_handle, u8_t type, struct os_mbuf *msg); int bt_mesh_proxy_prov_enable(void); -int bt_mesh_proxy_prov_disable(void); +int bt_mesh_proxy_prov_disable(bool disconnect); int bt_mesh_proxy_gatt_enable(void); int bt_mesh_proxy_gatt_disable(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.c index f0f4a27ea..88d9b302e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.c @@ -5,11 +5,10 @@ */ #include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_SETTINGS_LOG #if MYNEWT_VAL(BLE_MESH_SETTINGS) -#define BT_DBG_ENABLED MYNEWT_VAL(BLE_MESH_DEBUG_SETTINGS) - #include "mesh/mesh.h" #include "mesh/glue.h" #include "net.h" @@ -19,6 +18,7 @@ #include "foundation.h" #include "proxy.h" #include "settings.h" +#include "nodes.h" #include "config/config.h" @@ -105,6 +105,31 @@ struct mod_pub_val { cred:1; }; +/* Virtual Address information */ +struct va_val { + u16_t ref; + u16_t addr; + u8_t uuid[16]; +} __packed; + +/* Node storage information */ +struct node_val { + u16_t net_idx; + u8_t dev_key[16]; + u8_t num_elem; +} __packed; + +struct node_update { + u16_t addr; + bool clear; +}; + +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) +static struct node_update node_updates[CONFIG_BT_MESH_NODE_COUNT]; +#else +static struct node_update node_updates[0]; +#endif + /* We need this so we don't overwrite app-hardcoded values in case FCB * contains a history of changes but then has a NULL at the end. */ @@ -658,6 +683,14 @@ static int mod_set(bool vnd, int argc, char **argv, char *val) return mod_set_pub(mod, val); } + if (!strcmp(argv[1], "data")) { + mod->flags |= BT_MESH_MOD_DATA_PRESENT; + + if (mod->cb && mod->cb->settings_set) { + return mod->cb->settings_set(mod, val); + } + } + BT_WARN("Unknown module key %s", argv[1]); return -ENOENT; } @@ -672,6 +705,115 @@ static int vnd_mod_set(int argc, char **argv, char *val) return mod_set(true, argc, argv, val); } +#if CONFIG_BT_MESH_LABEL_COUNT > 0 +static int va_set(int argc, char **argv, char *val) +{ + struct va_val va; + struct label *lab; + u16_t index; + int len, err; + + if (argc < 1) { + BT_ERR("Insufficient number of arguments"); + return -ENOENT; + } + + index = strtol(argv[0], NULL, 16); + + if (val == NULL) { + BT_WARN("Mesh Virtual Address length = 0"); + return 0; + } + + err = settings_bytes_from_str(val, &va, &len); + if (err) { + BT_ERR("Failed to decode value %s (err %d)", val, err); + return -EINVAL; + } + + if (len != sizeof(struct va_val)) { + BT_ERR("Invalid length for virtual address"); + return -EINVAL; + } + + if (va.ref == 0) { + BT_WARN("Ignore Mesh Virtual Address ref = 0"); + return 0; + } + + lab = get_label(index); + if (lab == NULL) { + BT_WARN("Out of labels buffers"); + return -ENOBUFS; + } + + memcpy(lab->uuid, va.uuid, 16); + lab->addr = va.addr; + lab->ref = va.ref; + + BT_DBG("Restored Virtual Address, addr 0x%04x ref 0x%04x", + lab->addr, lab->ref); + + return 0; +} +#endif + +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) +static int node_set(int argc, char **argv, char *str) +{ + struct bt_mesh_node *node; + struct node_val val; + u16_t addr; + int len, err; + + if (argc < 1) { + BT_ERR("Insufficient number of arguments"); + return -ENOENT; + } + + addr = strtol(argv[0], NULL, 16); + + if (str == NULL) { + BT_DBG("val (null)"); + BT_DBG("Deleting node 0x%04x", addr); + + node = bt_mesh_node_find(addr); + if (node) { + bt_mesh_node_del(node, false); + } + + return 0; + } + + err = settings_bytes_from_str(str, &val, &len); + if (err) { + BT_ERR("Failed to decode value %s (err %d)", val, err); + return -EINVAL; + } + + if (len != sizeof(struct node_val)) { + BT_ERR("Invalid length for node_val"); + return -EINVAL; + } + + node = bt_mesh_node_find(addr); + if (!node) { + node = bt_mesh_node_alloc(addr, val.num_elem, val.net_idx); + } + + if (!node) { + BT_ERR("No space for a new node"); + return -ENOMEM; + } + + memcpy(node->dev_key, &val.dev_key, 16); + + BT_DBG("Node 0x%04x recovered from storage", addr); + + return 0; +} +#endif + const struct mesh_setting { const char *name; int (*func)(int argc, char **argv, char *val); @@ -686,6 +828,12 @@ const struct mesh_setting { { "Cfg", cfg_set }, { "s", sig_mod_set }, { "v", vnd_mod_set }, +#if CONFIG_BT_MESH_LABEL_COUNT > 0 + { "Va", va_set }, +#endif +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) + { "Node", node_set }, +#endif }; static int mesh_set(int argc, char **argv, char *val) @@ -756,6 +904,10 @@ static void commit_mod(struct bt_mesh_model *mod, struct bt_mesh_elem *elem, k_delayed_work_submit(&mod->pub->timer, ms); } } + + if (mod->cb && mod->cb->settings_commit) { + mod->cb->settings_commit(mod); + } } static int mesh_commit(void) @@ -772,7 +924,7 @@ static int mesh_commit(void) } if (IS_ENABLED(CONFIG_BT_MESH_PB_GATT)) { - bt_mesh_proxy_prov_disable(); + bt_mesh_proxy_prov_disable(true); } for (i = 0; i < ARRAY_SIZE(bt_mesh.sub); i++) { @@ -820,24 +972,41 @@ static int mesh_commit(void) return 0; } +/* Pending flags that use K_NO_WAIT as the storage timeout */ +#define NO_WAIT_PENDING_BITS (BIT(BT_MESH_NET_PENDING) | \ + BIT(BT_MESH_IV_PENDING) | \ + BIT(BT_MESH_SEQ_PENDING)) + +/* Pending flags that use CONFIG_BT_MESH_STORE_TIMEOUT */ +#define GENERIC_PENDING_BITS (BIT(BT_MESH_KEYS_PENDING) | \ + BIT(BT_MESH_HB_PUB_PENDING) | \ + BIT(BT_MESH_CFG_PENDING) | \ + BIT(BT_MESH_MOD_PENDING) | \ + BIT(BT_MESH_NODES_PENDING)) + static void schedule_store(int flag) { - s32_t timeout; + s32_t timeout, remaining; atomic_set_bit(bt_mesh.flags, flag); - if (atomic_test_bit(bt_mesh.flags, BT_MESH_NET_PENDING) || - atomic_test_bit(bt_mesh.flags, BT_MESH_IV_PENDING) || - atomic_test_bit(bt_mesh.flags, BT_MESH_SEQ_PENDING)) { + if (atomic_get(bt_mesh.flags) & NO_WAIT_PENDING_BITS) { timeout = K_NO_WAIT; } else if (atomic_test_bit(bt_mesh.flags, BT_MESH_RPL_PENDING) && - (CONFIG_BT_MESH_RPL_STORE_TIMEOUT < - CONFIG_BT_MESH_STORE_TIMEOUT)) { + (!(atomic_get(bt_mesh.flags) & GENERIC_PENDING_BITS) || + (CONFIG_BT_MESH_RPL_STORE_TIMEOUT < + CONFIG_BT_MESH_STORE_TIMEOUT))) { timeout = K_SECONDS(CONFIG_BT_MESH_RPL_STORE_TIMEOUT); } else { timeout = K_SECONDS(CONFIG_BT_MESH_STORE_TIMEOUT); } + remaining = k_delayed_work_remaining_get(&pending_store); + if (remaining && remaining < timeout) { + BT_DBG("Not rescheduling due to existing earlier deadline"); + return; + } + BT_DBG("Waiting %d seconds", (int) (timeout / MSEC_PER_SEC)); k_delayed_work_submit(&pending_store, timeout); @@ -845,14 +1014,26 @@ static void schedule_store(int flag) static void clear_iv(void) { - BT_DBG("Clearing IV"); - settings_save_one("bt_mesh/IV", NULL); + int err; + + err = settings_save_one("bt_mesh/IV", NULL); + if (err) { + BT_ERR("Failed to clear IV"); + } else { + BT_DBG("Cleared IV"); + } } static void clear_net(void) { - BT_DBG("Clearing Network"); - settings_save_one("bt_mesh/Net", NULL); + int err; + + err = settings_save_one("bt_mesh/Net", NULL); + if (err) { + BT_ERR("Failed to clear Network"); + } else { + BT_DBG("Cleared Network"); + } } static void store_pending_net(void) @@ -860,6 +1041,7 @@ static void store_pending_net(void) char buf[BT_SETTINGS_SIZE(sizeof(struct net_val))]; struct net_val net; char *str; + int err; BT_DBG("addr 0x%04x DevKey %s", bt_mesh_primary_addr(), bt_hex(bt_mesh.dev_key, 16)); @@ -874,7 +1056,12 @@ static void store_pending_net(void) } BT_DBG("Saving Network as value %s", str); - settings_save_one("bt_mesh/Net", str); + err = settings_save_one("bt_mesh/Net", str); + if (err) { + BT_ERR("Failed to store Network"); + } else { + BT_DBG("Stored Network"); + } } void bt_mesh_store_net(void) @@ -887,6 +1074,7 @@ static void store_pending_iv(void) char buf[BT_SETTINGS_SIZE(sizeof(struct iv_val))]; struct iv_val iv; char *str; + int err; iv.iv_index = bt_mesh.iv_index; iv.iv_update = atomic_test_bit(bt_mesh.flags, BT_MESH_IVU_IN_PROGRESS); @@ -899,7 +1087,12 @@ static void store_pending_iv(void) } BT_DBG("Saving IV as value %s", str); - settings_save_one("bt_mesh/IV", str); + err = settings_save_one("bt_mesh/IV", str); + if (err) { + BT_ERR("Failed to store IV"); + } else { + BT_DBG("Stored IV"); + } } void bt_mesh_store_iv(bool only_duration) @@ -917,6 +1110,7 @@ static void store_pending_seq(void) char buf[BT_SETTINGS_SIZE(sizeof(struct seq_val))]; struct seq_val seq; char *str; + int err; seq.val[0] = bt_mesh.seq; seq.val[1] = bt_mesh.seq >> 8; @@ -929,7 +1123,12 @@ static void store_pending_seq(void) } BT_DBG("Saving Seq as value %s", str); - settings_save_one("bt_mesh/Seq", str); + err = settings_save_one("bt_mesh/Seq", str); + if (err) { + BT_ERR("Failed to store Seq"); + } else { + BT_DBG("Stored Seq"); + } } void bt_mesh_store_seq(void) @@ -948,6 +1147,7 @@ static void store_rpl(struct bt_mesh_rpl *entry) struct rpl_val rpl; char path[18]; char *str; + int err; BT_DBG("src 0x%04x seq 0x%06x old_iv %u", entry->src, (unsigned) entry->seq, entry->old_iv); @@ -964,12 +1164,17 @@ static void store_rpl(struct bt_mesh_rpl *entry) snprintk(path, sizeof(path), "bt_mesh/RPL/%x", entry->src); BT_DBG("Saving RPL %s as value %s", path, str); - settings_save_one(path, str); + err = settings_save_one(path, str); + if (err) { + BT_ERR("Failed to store RPL"); + } else { + BT_DBG("Stored RPL"); + } } static void clear_rpl(void) { - int i; + int i, err; BT_DBG(""); @@ -982,7 +1187,12 @@ static void clear_rpl(void) } snprintk(path, sizeof(path), "bt_mesh/RPL/%x", rpl->src); - settings_save_one(path, NULL); + err = settings_save_one(path, NULL); + if (err) { + BT_ERR("Failed to clear RPL"); + } else { + BT_DBG("Cleared RPL"); + } memset(rpl, 0, sizeof(*rpl)); } @@ -1010,6 +1220,7 @@ static void store_pending_hb_pub(void) struct bt_mesh_hb_pub *pub = bt_mesh_hb_pub_get(); struct hb_pub_val val; char *str; + int err; if (!pub) { return; @@ -1035,7 +1246,12 @@ static void store_pending_hb_pub(void) BT_DBG("Saving Heartbeat Publication as value %s", str ? str : "(null)"); - settings_save_one("bt_mesh/HBPub", str); + err = settings_save_one("bt_mesh/HBPub", str); + if (err) { + BT_ERR("Failed to store Heartbeat Publication"); + } else { + BT_DBG("Stored Heartbeat Publication"); + } } static void store_pending_cfg(void) @@ -1044,6 +1260,7 @@ static void store_pending_cfg(void) struct bt_mesh_cfg_srv *cfg = bt_mesh_cfg_get(); struct cfg_val val; char *str; + int err; if (!cfg) { return; @@ -1064,33 +1281,56 @@ static void store_pending_cfg(void) } BT_DBG("Saving configuration as value %s", str); - settings_save_one("bt_mesh/Cfg", str); + err = settings_save_one("bt_mesh/Cfg", str); + if (err) { + BT_ERR("Failed to store configuration"); + } else { + BT_DBG("Stored configuration"); + } } static void clear_cfg(void) { - BT_DBG("Clearing configuration"); - settings_save_one("bt_mesh/Cfg", NULL); + int err; + + err = settings_save_one("bt_mesh/Cfg", NULL); + if (err) { + BT_ERR("Failed to clear configuration"); + } else { + BT_DBG("Cleared configuration"); + } } static void clear_app_key(u16_t app_idx) { char path[20]; + int err; BT_DBG("AppKeyIndex 0x%03x", app_idx); snprintk(path, sizeof(path), "bt_mesh/AppKey/%x", app_idx); - settings_save_one(path, NULL); + err = settings_save_one(path, NULL); + if (err) { + BT_ERR("Failed to clear AppKeyIndex 0x%03x", app_idx); + } else { + BT_DBG("Cleared AppKeyIndex 0x%03x", app_idx); + } } static void clear_net_key(u16_t net_idx) { char path[20]; + int err; BT_DBG("NetKeyIndex 0x%03x", net_idx); snprintk(path, sizeof(path), "bt_mesh/NetKey/%x", net_idx); - settings_save_one(path, NULL); + err = settings_save_one(path, NULL); + if (err) { + BT_ERR("Failed to clear NetKeyIndex 0x%03x", net_idx); + } else { + BT_DBG("Cleared NetKeyIndex 0x%03x", net_idx); + } } static void store_net_key(struct bt_mesh_subnet *sub) @@ -1099,6 +1339,7 @@ static void store_net_key(struct bt_mesh_subnet *sub) struct net_key_val key; char path[20]; char *str; + int err; BT_DBG("NetKeyIndex 0x%03x NetKey %s", sub->net_idx, bt_hex(sub->keys[0].net, 16)); @@ -1117,7 +1358,12 @@ static void store_net_key(struct bt_mesh_subnet *sub) snprintk(path, sizeof(path), "bt_mesh/NetKey/%x", sub->net_idx); BT_DBG("Saving NetKey %s as value %s", path, str); - settings_save_one(path, str); + err = settings_save_one(path, str); + if (err) { + BT_ERR("Failed to store NetKey"); + } else { + BT_DBG("Stored NetKey"); + } } static void store_app_key(struct bt_mesh_app_key *app) @@ -1126,6 +1372,7 @@ static void store_app_key(struct bt_mesh_app_key *app) struct app_key_val key; char path[20]; char *str; + int err; key.net_idx = app->net_idx; key.updated = app->updated; @@ -1141,7 +1388,12 @@ static void store_app_key(struct bt_mesh_app_key *app) snprintk(path, sizeof(path), "bt_mesh/AppKey/%x", app->app_idx); BT_DBG("Saving AppKey %s as value %s", path, str); - settings_save_one(path, str); + err = settings_save_one(path, str); + if (err) { + BT_ERR("Failed to store AppKey"); + } else { + BT_DBG("Stored AppKey"); + } } static void store_pending_keys(void) @@ -1190,6 +1442,104 @@ static void store_pending_keys(void) } } +static void store_node(struct bt_mesh_node *node) +{ + char buf[BT_SETTINGS_SIZE(sizeof(struct node_val))]; + struct node_val val; + char path[20]; + char *str; + int err; + + val.net_idx = node->net_idx; + val.num_elem = node->num_elem; + memcpy(val.dev_key, node->dev_key, 16); + + snprintk(path, sizeof(path), "bt_mesh/Node/%x", node->addr); + + str = settings_str_from_bytes(&val, sizeof(val), buf, sizeof(buf)); + if (!str) { + BT_ERR("Unable to encode Node as value"); + return; + } + + + err = settings_save_one(path, str); + if (err) { + BT_ERR("Failed to store Node %s value", path); + } else { + BT_DBG("Stored Node %s value", path); + } +} + +static void clear_node(u16_t addr) +{ + char path[20]; + int err; + + BT_DBG("Node 0x%04x", addr); + + snprintk(path, sizeof(path), "bt_mesh/Node/%x", addr); + err = settings_save_one(path, NULL); + if (err) { + BT_ERR("Failed to clear Node 0x%04x", addr); + } else { + BT_DBG("Cleared Node 0x%04x", addr); + } +} + +static void store_pending_nodes(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(node_updates); ++i) { + struct node_update *update = &node_updates[i]; + + if (update->addr == BT_MESH_ADDR_UNASSIGNED) { + continue; + } + + if (update->clear) { + clear_node(update->addr); + } else { + struct bt_mesh_node *node; + + node = bt_mesh_node_find(update->addr); + if (node) { + store_node(node); + } else { + BT_WARN("Node 0x%04x not found", update->addr); + } + } + + update->addr = BT_MESH_ADDR_UNASSIGNED; + } +} + +static struct node_update *node_update_find(u16_t addr, + struct node_update **free_slot) +{ + struct node_update *match; + int i; + + match = NULL; + *free_slot = NULL; + + for (i = 0; i < ARRAY_SIZE(node_updates); i++) { + struct node_update *update = &node_updates[i]; + + if (update->addr == BT_MESH_ADDR_UNASSIGNED) { + *free_slot = update; + continue; + } + + if (update->addr == addr) { + match = update; + } + } + + return match; +} + static void encode_mod_path(struct bt_mesh_model *mod, bool vnd, const char *key, char *path, size_t path_len) { @@ -1207,7 +1557,7 @@ static void store_pending_mod_bind(struct bt_mesh_model *mod, bool vnd) u16_t keys[CONFIG_BT_MESH_MODEL_KEY_COUNT]; char buf[BT_SETTINGS_SIZE(sizeof(keys))]; char path[20]; - int i, count; + int i, count, err; char *val; for (i = 0, count = 0; i < ARRAY_SIZE(mod->keys); i++) { @@ -1230,7 +1580,12 @@ static void store_pending_mod_bind(struct bt_mesh_model *mod, bool vnd) encode_mod_path(mod, vnd, "bind", path, sizeof(path)); BT_DBG("Saving %s as %s", path, val ? val : "(null)"); - settings_save_one(path, val); + err = settings_save_one(path, val); + if (err) { + BT_ERR("Failed to store bind"); + } else { + BT_DBG("Stored bind"); + } } static void store_pending_mod_sub(struct bt_mesh_model *mod, bool vnd) @@ -1238,10 +1593,10 @@ static void store_pending_mod_sub(struct bt_mesh_model *mod, bool vnd) u16_t groups[CONFIG_BT_MESH_MODEL_GROUP_COUNT]; char buf[BT_SETTINGS_SIZE(sizeof(groups))]; char path[20]; - int i, count; + int i, count, err; char *val; - for (i = 0, count = 0; i < ARRAY_SIZE(mod->groups); i++) { + for (i = 0, count = 0; i < CONFIG_BT_MESH_MODEL_GROUP_COUNT; i++) { if (mod->groups[i] != BT_MESH_ADDR_UNASSIGNED) { groups[count++] = mod->groups[i]; } @@ -1261,7 +1616,12 @@ static void store_pending_mod_sub(struct bt_mesh_model *mod, bool vnd) encode_mod_path(mod, vnd, "sub", path, sizeof(path)); BT_DBG("Saving %s as %s", path, val ? val : "(null)"); - settings_save_one(path, val); + err = settings_save_one(path, val); + if (err) { + BT_ERR("Failed to store sub"); + } else { + BT_DBG("Stored sub"); + } } static void store_pending_mod_pub(struct bt_mesh_model *mod, bool vnd) @@ -1270,6 +1630,7 @@ static void store_pending_mod_pub(struct bt_mesh_model *mod, bool vnd) struct mod_pub_val pub; char path[20]; char *val; + int err; if (!mod->pub || mod->pub->addr == BT_MESH_ADDR_UNASSIGNED) { val = NULL; @@ -1293,7 +1654,12 @@ static void store_pending_mod_pub(struct bt_mesh_model *mod, bool vnd) encode_mod_path(mod, vnd, "pub", path, sizeof(path)); BT_DBG("Saving %s as %s", path, val ? val : "(null)"); - settings_save_one(path, val); + err = settings_save_one(path, val); + if (err) { + BT_ERR("Failed to store pub"); + } else { + BT_DBG("Stored pub"); + } } static void store_pending_mod(struct bt_mesh_model *mod, @@ -1320,6 +1686,52 @@ static void store_pending_mod(struct bt_mesh_model *mod, } } +#define IS_VA_DEL(_label) ((_label)->ref == 0) +static void store_pending_va(void) +{ + char buf[BT_SETTINGS_SIZE(sizeof(struct va_val))]; + struct label *lab; + struct va_val va; + char path[18]; + char *val; + u16_t i; + int err = 0; + + for (i = 0; (lab = get_label(i)) != NULL; i++) { + if (!atomic_test_and_clear_bit(lab->flags, + BT_MESH_VA_CHANGED)) { + continue; + } + + snprintk(path, sizeof(path), "bt_mesh/Va/%x", i); + + if (IS_VA_DEL(lab)) { + val = NULL; + } else { + va.ref = lab->ref; + va.addr = lab->addr; + memcpy(va.uuid, lab->uuid, 16); + + val = settings_str_from_bytes(&va, sizeof(va), + buf, sizeof(buf)); + if (!val) { + BT_ERR("Unable to encode model publication as value"); + return; + } + + err = settings_save_one(path, val); + } + + if (err) { + BT_ERR("Failed to %s %s value (err %d)", + IS_VA_DEL(lab) ? "delete" : "store", path, err); + } else { + BT_DBG("%s %s value", + IS_VA_DEL(lab) ? "Deleted" : "Stored", path); + } + } +} + static void store_pending(struct ble_npl_event *work) { BT_DBG(""); @@ -1371,6 +1783,15 @@ static void store_pending(struct ble_npl_event *work) if (atomic_test_and_clear_bit(bt_mesh.flags, BT_MESH_MOD_PENDING)) { bt_mesh_model_foreach(store_pending_mod, NULL); } + + if (atomic_test_and_clear_bit(bt_mesh.flags, BT_MESH_VA_PENDING)) { + store_pending_va(); + } + + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER) && + atomic_test_and_clear_bit(bt_mesh.flags, BT_MESH_NODES_PENDING)) { + store_pending_nodes(); + } } void bt_mesh_store_rpl(struct bt_mesh_rpl *entry) @@ -1552,6 +1973,93 @@ void bt_mesh_store_mod_pub(struct bt_mesh_model *mod) schedule_store(BT_MESH_MOD_PENDING); } + +void bt_mesh_store_label(void) +{ + schedule_store(BT_MESH_VA_PENDING); +} + +void bt_mesh_store_node(struct bt_mesh_node *node) +{ + struct node_update *update, *free_slot; + + BT_DBG("Node 0x%04x", node->addr); + + update = node_update_find(node->addr, &free_slot); + if (update) { + update->clear = false; + schedule_store(BT_MESH_NODES_PENDING); + return; + } + + if (!free_slot) { + store_node(node); + return; + } + + free_slot->addr = node->addr; + + schedule_store(BT_MESH_NODES_PENDING); +} + +void bt_mesh_clear_node(struct bt_mesh_node *node) +{ + struct node_update *update, *free_slot; + + BT_DBG("Node 0x%04x", node->addr); + + update = node_update_find(node->addr, &free_slot); + if (update) { + update->clear = true; + schedule_store(BT_MESH_NODES_PENDING); + return; + } + + if (!free_slot) { + clear_node(node->addr); + return; + } + + free_slot->addr = node->addr; + + schedule_store(BT_MESH_NODES_PENDING); +} + +int bt_mesh_model_data_store(struct bt_mesh_model *mod, bool vnd, + const void *data, size_t data_len) +{ + char path[20]; + char buf[BT_SETTINGS_SIZE(sizeof(struct mod_pub_val))]; + char *val; + int err; + + encode_mod_path(mod, vnd, "data", path, sizeof(path)); + + if (data_len) { + mod->flags |= BT_MESH_MOD_DATA_PRESENT; + val = settings_str_from_bytes(data, data_len, + buf, sizeof(buf)); + if (!val) { + BT_ERR("Unable to encode model publication as value"); + return -EINVAL; + } + err = settings_save_one(path, val); + } else if (mod->flags & BT_MESH_MOD_DATA_PRESENT) { + mod->flags &= ~BT_MESH_MOD_DATA_PRESENT; + err = settings_save_one(path, NULL); + } else { + /* Nothing to delete */ + err = 0; + } + + if (err) { + BT_ERR("Failed to store %s value", path); + } else { + BT_DBG("Stored %s value", path); + } + return err; +} + static struct conf_handler bt_mesh_settings_conf_handler = { .ch_name = "bt_mesh", .ch_get = NULL, diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.h index 7bd028477..c630814e5 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/settings.h @@ -15,10 +15,13 @@ void bt_mesh_store_cfg(void); void bt_mesh_store_mod_bind(struct bt_mesh_model *mod); void bt_mesh_store_mod_sub(struct bt_mesh_model *mod); void bt_mesh_store_mod_pub(struct bt_mesh_model *mod); +void bt_mesh_store_label(void); +void bt_mesh_store_node(struct bt_mesh_node *node); void bt_mesh_clear_net(void); void bt_mesh_clear_subnet(struct bt_mesh_subnet *sub); void bt_mesh_clear_app_key(struct bt_mesh_app_key *key); void bt_mesh_clear_rpl(void); +void bt_mesh_clear_node(struct bt_mesh_node *node); void bt_mesh_settings_init(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/shell.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/shell.c index 94a7b58be..91fbd9785 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/shell.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/shell.c @@ -222,37 +222,46 @@ static struct bt_mesh_health_cli health_cli = { #endif /* MYNEWT_VAL(BLE_MESH_HEALTH_CLI) */ #if MYNEWT_VAL(BLE_MESH_SHELL_MODELS) -static struct bt_mesh_model_pub gen_onoff_pub; -static struct bt_mesh_model_pub gen_level_pub; +static struct bt_mesh_gen_model_cli gen_onoff_cli; +static struct bt_mesh_model_pub gen_onoff_cli_pub; +static struct bt_mesh_model_pub gen_onoff_srv_pub; +static struct bt_mesh_gen_model_cli gen_level_cli; +static struct bt_mesh_model_pub gen_level_cli_pub; +static struct bt_mesh_model_pub gen_level_srv_pub; static struct bt_mesh_model_pub light_lightness_pub; -static struct bt_mesh_gen_onoff_srv_cb gen_onoff_srv_cb = { +static struct bt_mesh_gen_onoff_srv gen_onoff_srv = { .get = light_model_gen_onoff_get, .set = light_model_gen_onoff_set, }; -static struct bt_mesh_gen_level_srv_cb gen_level_srv_cb = { +static struct bt_mesh_gen_level_srv gen_level_srv = { .get = light_model_gen_level_get, .set = light_model_gen_level_set, }; -static struct bt_mesh_light_lightness_srv_cb light_lightness_srv_cb = { +static struct bt_mesh_light_lightness_srv light_lightness_srv = { .get = light_model_light_lightness_get, .set = light_model_light_lightness_set, }; -void bt_mesh_set_gen_onoff_srv_cb(struct bt_mesh_gen_onoff_srv_cb *gen_onoff_cb) +void bt_mesh_set_gen_onoff_srv_cb(int (*get)(struct bt_mesh_model *model, u8_t *state), + int (*set)(struct bt_mesh_model *model, u8_t state)) { - gen_onoff_srv_cb = *gen_onoff_cb; + gen_onoff_srv.get = get; + gen_onoff_srv.set = set; } -void bt_mesh_set_gen_level_srv_cb(struct bt_mesh_gen_level_srv_cb *gen_level_cb) +void bt_mesh_set_gen_level_srv_cb(int (*get)(struct bt_mesh_model *model, s16_t *level), + int (*set)(struct bt_mesh_model *model, s16_t level)) { - gen_level_srv_cb = *gen_level_cb; + gen_level_srv.get = get; + gen_level_srv.set = set; } -void bt_mesh_set_light_lightness_srv_cb(struct bt_mesh_light_lightness_srv_cb *light_lightness_cb) +void bt_mesh_set_light_lightness_srv_cb(int (*get)(struct bt_mesh_model *model, s16_t *level), + int (*set)(struct bt_mesh_model *model, s16_t level)) { - light_lightness_srv_cb = *light_lightness_cb; + light_lightness_srv.get = get; + light_lightness_srv.set = set; } - #endif static struct bt_mesh_model root_models[] = { @@ -265,11 +274,11 @@ static struct bt_mesh_model root_models[] = { BT_MESH_MODEL_HEALTH_CLI(&health_cli), #endif #if MYNEWT_VAL(BLE_MESH_SHELL_MODELS) - BT_MESH_MODEL_GEN_ONOFF_SRV(&gen_onoff_srv_cb, &gen_onoff_pub), - BT_MESH_MODEL_GEN_ONOFF_CLI(), - BT_MESH_MODEL_GEN_LEVEL_SRV(&gen_level_srv_cb, &gen_level_pub), - BT_MESH_MODEL_GEN_LEVEL_CLI(), - BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV(&light_lightness_srv_cb, &light_lightness_pub), + BT_MESH_MODEL_GEN_ONOFF_SRV(&gen_onoff_srv, &gen_onoff_srv_pub), + BT_MESH_MODEL_GEN_ONOFF_CLI(&gen_onoff_cli, &gen_onoff_cli_pub), + BT_MESH_MODEL_GEN_LEVEL_SRV(&gen_level_srv, &gen_level_srv_pub), + BT_MESH_MODEL_GEN_LEVEL_CLI(&gen_level_cli, &gen_level_cli_pub), + BT_MESH_MODEL_LIGHT_LIGHTNESS_SRV(&light_lightness_srv, &light_lightness_pub), #endif }; @@ -323,11 +332,25 @@ static void prov_complete(u16_t net_idx, u16_t addr) { printk("Local node provisioned, net_idx 0x%04x address 0x%04x\n", net_idx, addr); - net.net_idx = net_idx, net.local = addr; + net.net_idx = net_idx, net.dst = addr; } +static void prov_node_added(u16_t net_idx, u16_t addr, u8_t num_elem) +{ + printk("Node provisioned, net_idx 0x%04x address " + "0x%04x elements %d", net_idx, addr, num_elem); + + net.net_idx = net_idx, + net.dst = addr; +} + +static void prov_input_complete(void) +{ + printk("Input complete"); +} + static void prov_reset(void) { printk("The local node has been reset and needs reprovisioning\n"); @@ -467,6 +490,7 @@ static struct bt_mesh_prov prov = { .link_open = link_open, .link_close = link_close, .complete = prov_complete, + .node_added = prov_node_added, .reset = prov_reset, .static_val = NULL, .static_val_len = 0, @@ -477,6 +501,7 @@ static struct bt_mesh_prov prov = { .input_size = MYNEWT_VAL(BLE_MESH_OOB_INPUT_SIZE), .input_actions = MYNEWT_VAL(BLE_MESH_OOB_INPUT_ACTIONS), .input = input, + .input_complete = prov_input_complete, }; static int cmd_static_oob(int argc, char *argv[]) @@ -794,19 +819,6 @@ struct shell_cmd_help cmd_net_send_help = { NULL, "", NULL }; -static int cmd_iv_update(int argc, char *argv[]) -{ - if (bt_mesh_iv_update()) { - printk("Transitioned to IV Update In Progress state\n"); - } else { - printk("Transitioned to IV Update Normal state\n"); - } - - printk("IV Index is 0x%08lx\n", bt_mesh.iv_index); - - return 0; -} - static int cmd_rpl_clear(int argc, char *argv[]) { bt_mesh_rpl_clear(); @@ -857,6 +869,20 @@ struct shell_cmd_help cmd_lpn_unsubscribe_help = { }; #endif +#if MYNEWT_VAL(BLE_MESH_IV_UPDATE_TEST) +static int cmd_iv_update(int argc, char *argv[]) +{ + if (bt_mesh_iv_update()) { + printk("Transitioned to IV Update In Progress state\n"); + } else { + printk("Transitioned to IV Update Normal state\n"); + } + + printk("IV Index is 0x%08lx\n", bt_mesh.iv_index); + + return 0; +} + static int cmd_iv_update_test(int argc, char *argv[]) { bool enable; @@ -880,6 +906,7 @@ static int cmd_iv_update_test(int argc, char *argv[]) struct shell_cmd_help cmd_iv_update_test_help = { NULL, "", NULL }; +#endif #if MYNEWT_VAL(BLE_MESH_CFG_CLI) @@ -1802,6 +1829,37 @@ static int cmd_pb_adv(int argc, char *argv[]) { return cmd_pb(BT_MESH_PROV_ADV, argc, argv); } + +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) +static int cmd_provision_adv(int argc, char *argv[]) +{ + u8_t uuid[16]; + u8_t attention_duration; + u16_t net_idx; + u16_t addr; + size_t len; + int err; + + len = hex2bin(argv[1], uuid, sizeof(uuid)); + (void)memset(uuid + len, 0, sizeof(uuid) - len); + + net_idx = strtoul(argv[2], NULL, 0); + addr = strtoul(argv[3], NULL, 0); + attention_duration = strtoul(argv[4], NULL, 0); + + err = bt_mesh_provision_adv(uuid, net_idx, addr, attention_duration); + if (err) { + printk("Provisioning failed (err %d)", err); + } + + return 0; +} + +struct shell_cmd_help cmd_provision_adv_help = { + NULL, " " , NULL +}; +#endif /* CONFIG_BT_MESH_PROVISIONER */ + #endif /* CONFIG_BT_MESH_PB_ADV */ #if MYNEWT_VAL(BLE_MESH_PB_GATT) @@ -2403,6 +2461,13 @@ static const struct shell_cmd mesh_commands[] = { .sc_cmd_func = cmd_pb_adv, .help = &cmd_pb_help, }, +#if MYNEWT_VAL(BLE_MESH_PROVISIONER) + { + .sc_cmd = "provision-adv", + .sc_cmd_func = cmd_provision_adv, + .help = &cmd_provision_adv_help, + }, +#endif #endif #if MYNEWT_VAL(BLE_MESH_PB_GATT) { @@ -2482,6 +2547,7 @@ static const struct shell_cmd mesh_commands[] = { .sc_cmd_func = cmd_net_send, .help = &cmd_net_send_help, }, +#if MYNEWT_VAL(BLE_MESH_IV_UPDATE_TEST) { .sc_cmd = "iv-update", .sc_cmd_func = cmd_iv_update, @@ -2492,6 +2558,7 @@ static const struct shell_cmd mesh_commands[] = { .sc_cmd_func = cmd_iv_update_test, .help = &cmd_iv_update_test_help, }, +#endif { .sc_cmd = "rpl-clear", .sc_cmd_func = cmd_rpl_clear, diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_cmd_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_cmd_priv.h index ddc952bff..70f33260a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_cmd_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_cmd_priv.h @@ -357,7 +357,6 @@ void ble_att_error_rsp_parse(const void *payload, int len, struct ble_att_error_rsp *rsp); void ble_att_error_rsp_write(void *payload, int len, const struct ble_att_error_rsp *rsp); -void ble_att_error_rsp_log(const struct ble_att_error_rsp *cmd); void ble_att_mtu_req_parse(const void *payload, int len, struct ble_att_mtu_cmd *cmd); void ble_att_mtu_req_write(void *payload, int len, @@ -366,43 +365,34 @@ void ble_att_mtu_rsp_parse(const void *payload, int len, struct ble_att_mtu_cmd *cmd); void ble_att_mtu_rsp_write(void *payload, int len, const struct ble_att_mtu_cmd *cmd); -void ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd *cmd); void ble_att_find_info_req_parse(const void *payload, int len, struct ble_att_find_info_req *req); void ble_att_find_info_req_write(void *payload, int len, const struct ble_att_find_info_req *req); -void ble_att_find_info_req_log(const struct ble_att_find_info_req *cmd); void ble_att_find_info_rsp_parse(const void *payload, int len, struct ble_att_find_info_rsp *rsp); void ble_att_find_info_rsp_write(void *payload, int len, const struct ble_att_find_info_rsp *rsp); -void ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp *cmd); void ble_att_find_type_value_req_parse( const void *payload, int len, struct ble_att_find_type_value_req *req); void ble_att_find_type_value_req_write( void *payload, int len, const struct ble_att_find_type_value_req *req); -void ble_att_find_type_value_req_log( - const struct ble_att_find_type_value_req *cmd); void ble_att_read_type_req_parse(const void *payload, int len, struct ble_att_read_type_req *req); void ble_att_read_type_req_write(void *payload, int len, const struct ble_att_read_type_req *req); -void ble_att_read_type_req_log(const struct ble_att_read_type_req *cmd); void ble_att_read_type_rsp_parse(const void *payload, int len, struct ble_att_read_type_rsp *rsp); void ble_att_read_type_rsp_write(void *payload, int len, const struct ble_att_read_type_rsp *rsp); -void ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp *cmd); void ble_att_read_req_parse(const void *payload, int len, struct ble_att_read_req *req); void ble_att_read_req_write(void *payload, int len, const struct ble_att_read_req *req); -void ble_att_read_req_log(const struct ble_att_read_req *cmd); void ble_att_read_blob_req_parse(const void *payload, int len, struct ble_att_read_blob_req *req); void ble_att_read_blob_req_write(void *payload, int len, const struct ble_att_read_blob_req *req); -void ble_att_read_blob_req_log(const struct ble_att_read_blob_req *cmd); void ble_att_read_mult_req_parse(const void *payload, int len); void ble_att_read_mult_req_write(void *payload, int len); void ble_att_read_mult_rsp_parse(const void *payload, int len); @@ -411,14 +401,10 @@ void ble_att_read_group_type_req_parse( const void *payload, int len, struct ble_att_read_group_type_req *req); void ble_att_read_group_type_req_write( void *payload, int len, const struct ble_att_read_group_type_req *req); -void ble_att_read_group_type_req_log( - const struct ble_att_read_group_type_req *cmd); void ble_att_read_group_type_rsp_parse( const void *payload, int len, struct ble_att_read_group_type_rsp *rsp); void ble_att_read_group_type_rsp_write( void *payload, int len, const struct ble_att_read_group_type_rsp *rsp); -void ble_att_read_group_type_rsp_log( - const struct ble_att_read_group_type_rsp *cmd); void ble_att_write_req_parse(const void *payload, int len, struct ble_att_write_req *req); void ble_att_write_req_write(void *payload, int len, @@ -427,20 +413,16 @@ void ble_att_write_cmd_parse(const void *payload, int len, struct ble_att_write_req *req); void ble_att_write_cmd_write(void *payload, int len, const struct ble_att_write_req *req); -void ble_att_write_cmd_log(const struct ble_att_write_cmd *cmd); -void ble_att_write_req_log(const struct ble_att_write_req *req); void ble_att_prep_write_req_parse(const void *payload, int len, struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_req_write(void *payload, int len, const struct ble_att_prep_write_cmd *cmd); -void ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_rsp_parse(const void *payload, int len, struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_rsp_write(void *payload, int len, const struct ble_att_prep_write_cmd *cmd); void ble_att_exec_write_req_parse(const void *payload, int len, struct ble_att_exec_write_req *req); -void ble_att_exec_write_req_log(const struct ble_att_exec_write_req *cmd); void ble_att_exec_write_req_write(void *payload, int len, const struct ble_att_exec_write_req *req); void ble_att_exec_write_rsp_parse(const void *payload, int len); @@ -449,14 +431,12 @@ void ble_att_notify_req_parse(const void *payload, int len, struct ble_att_notify_req *req); void ble_att_notify_req_write(void *payload, int len, const struct ble_att_notify_req *req); -void ble_att_notify_req_log(const struct ble_att_notify_req *cmd); void ble_att_indicate_req_parse(const void *payload, int len, struct ble_att_indicate_req *req); void ble_att_indicate_req_write(void *payload, int len, const struct ble_att_indicate_req *req); void ble_att_indicate_rsp_parse(const void *payload, int len); void ble_att_indicate_rsp_write(void *payload, int len); -void ble_att_indicate_req_log(const struct ble_att_indicate_req *cmd); void *ble_att_cmd_prepare(uint8_t opcode, size_t len, struct os_mbuf *txom); void *ble_att_cmd_get(uint8_t opcode, size_t len, struct os_mbuf **txom); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_priv.h index 2201d4ddb..73b6aeab0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_att_priv.h @@ -170,12 +170,6 @@ void ble_att_set_peer_mtu(struct ble_l2cap_chan *chan, uint16_t peer_mtu); uint16_t ble_att_chan_mtu(const struct ble_l2cap_chan *chan); int ble_att_init(void); -#define BLE_ATT_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ - BLE_HS_LOG_CMD((is_tx), "att", (cmd_name), (conn_handle), (log_cb), (cmd)) - -#define BLE_ATT_LOG_EMPTY_CMD(is_tx, cmd_name, conn_handle) \ - BLE_HS_LOG_EMPTY_CMD((is_tx), "att", (cmd_name), (conn_handle)) - /*** @svr */ int ble_att_svr_start(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_gap_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_gap_priv.h index 90c32e22a..2b6b40696 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_gap_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_gap_priv.h @@ -81,23 +81,40 @@ void ble_gap_rx_le_scan_timeout(void); #if MYNEWT_VAL(BLE_EXT_ADV) void ble_gap_rx_ext_adv_report(struct ble_gap_ext_disc_desc *desc); -void ble_gap_rx_adv_set_terminated(struct hci_le_adv_set_terminated *evt); +void ble_gap_rx_adv_set_terminated(const struct ble_hci_ev_le_subev_adv_set_terminated *ev); #if MYNEWT_VAL(BLE_PERIODIC_ADV) -void ble_gap_rx_peroidic_adv_sync_estab(struct hci_le_subev_periodic_adv_sync_estab *evt); -void ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt); -void ble_gap_rx_periodic_adv_sync_lost(struct hci_le_subev_periodic_adv_sync_lost *evt); +void ble_gap_rx_peroidic_adv_sync_estab(const struct ble_hci_ev_le_subev_periodic_adv_sync_estab *ev); +void ble_gap_rx_periodic_adv_rpt(const struct ble_hci_ev_le_subev_periodic_adv_rpt *ev); +void ble_gap_rx_periodic_adv_sync_lost(const struct ble_hci_ev_le_subev_periodic_adv_sync_lost *ev); +void ble_gap_rx_periodic_adv_sync_transfer(const struct ble_hci_ev_le_subev_periodic_adv_sync_transfer *ev); #endif -void ble_gap_rx_scan_req_rcvd(struct hci_le_scan_req_rcvd *evt); +void ble_gap_rx_scan_req_rcvd(const struct ble_hci_ev_le_subev_scan_req_rcvd *ev); #endif void ble_gap_rx_adv_report(struct ble_gap_disc_desc *desc); -void ble_gap_rx_rd_rem_sup_feat_complete(struct hci_le_rd_rem_supp_feat_complete *evt); -int ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt, uint8_t instance); -void ble_gap_rx_disconn_complete(struct hci_disconn_complete *evt); -void ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt); -void ble_gap_rx_param_req(struct hci_le_conn_param_req *evt); +void ble_gap_rx_rd_rem_sup_feat_complete(const struct ble_hci_ev_le_subev_rd_rem_used_feat *ev); + +struct ble_gap_conn_complete +{ + uint8_t status; + uint16_t connection_handle; + uint8_t role; + uint8_t peer_addr_type; + uint8_t peer_addr[BLE_DEV_ADDR_LEN]; + uint16_t conn_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint8_t master_clk_acc; + uint8_t local_rpa[BLE_DEV_ADDR_LEN]; + uint8_t peer_rpa[BLE_DEV_ADDR_LEN]; +}; + +int ble_gap_rx_conn_complete(struct ble_gap_conn_complete *evt, uint8_t instance); +void ble_gap_rx_disconn_complete(const struct ble_hci_ev_disconn_cmp *ev); +void ble_gap_rx_update_complete(const struct ble_hci_ev_le_subev_conn_upd_complete *ev); +void ble_gap_rx_param_req(const struct ble_hci_ev_le_subev_rem_conn_param_req *ev); int ble_gap_rx_l2cap_update_req(uint16_t conn_handle, struct ble_gap_upd_params *params); -void ble_gap_rx_phy_update_complete(struct hci_le_phy_upd_complete *evt); +void ble_gap_rx_phy_update_complete(const struct ble_hci_ev_le_subev_phy_update_complete *ev); void ble_gap_enc_event(uint16_t conn_handle, int status, int security_restored, int bonded); void ble_gap_passkey_event(uint16_t conn_handle, @@ -118,6 +135,7 @@ int ble_gap_master_in_progress(void); void ble_gap_preempt(void); void ble_gap_preempt_done(void); +int ble_gap_terminate_with_conn(struct ble_hs_conn *conn, uint8_t hci_reason); void ble_gap_conn_broken(uint16_t conn_handle, int reason); void ble_gap_reset_state(int reason); int32_t ble_gap_timer(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_conn_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_conn_priv.h index 92aacd405..0e451194d 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_conn_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_conn_priv.h @@ -38,6 +38,15 @@ typedef uint8_t ble_hs_conn_flags_t; #define BLE_HS_CONN_F_TERMINATING 0x02 #define BLE_HS_CONN_F_TX_FRAG 0x04 /* Cur ACL packet partially txed. */ +#if MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) +#define BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN_REM \ + ((MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) % (8 * sizeof(uint32_t))) ? 1 : 0) + +#define BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN \ + (MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) / (8 * sizeof(uint32_t)) + \ + BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN_REM) +#endif + struct ble_hs_conn { SLIST_ENTRY(ble_hs_conn) bhc_next; uint16_t bhc_handle; @@ -61,6 +70,9 @@ struct ble_hs_conn { struct ble_l2cap_chan_list bhc_channels; struct ble_l2cap_chan *bhc_rx_chan; /* Channel rxing current packet. */ ble_npl_time_t bhc_rx_timeout; +#if MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) + uint32_t l2cap_coc_cid_mask[BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN]; +#endif /** * Count of packets sent over this connection that the controller has not @@ -86,6 +98,10 @@ struct ble_hs_conn { ble_gap_event_fn *bhc_cb; void *bhc_cb_arg; + +#if MYNEWT_VAL(BLE_PERIODIC_ADV) + struct ble_hs_periodic_sync *psync; +#endif }; struct ble_hs_conn_addrs { @@ -110,15 +126,19 @@ struct ble_l2cap_chan *ble_hs_conn_chan_find_by_scid(struct ble_hs_conn *conn, uint16_t cid); struct ble_l2cap_chan *ble_hs_conn_chan_find_by_dcid(struct ble_hs_conn *conn, uint16_t cid); +bool ble_hs_conn_chan_exist(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); int ble_hs_conn_chan_insert(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); -void -ble_hs_conn_delete_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); +void ble_hs_conn_delete_chan(struct ble_hs_conn *conn, + struct ble_l2cap_chan *chan); void ble_hs_conn_addrs(const struct ble_hs_conn *conn, struct ble_hs_conn_addrs *addrs); int32_t ble_hs_conn_timer(void); +typedef int ble_hs_conn_foreach_fn(struct ble_hs_conn *conn, void *arg); +void ble_hs_conn_foreach(ble_hs_conn_foreach_fn *cb, void *arg); + int ble_hs_conn_init(void); #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_flow_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_flow_priv.h index b1aa8c2fc..753eaf8ff 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_flow_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_flow_priv.h @@ -26,7 +26,7 @@ extern "C" { #endif void ble_hs_flow_connection_broken(uint16_t conn_handle); -void ble_hs_flow_fill_acl_usrhdr(struct os_mbuf *om); +void ble_hs_flow_track_data_mbuf(struct os_mbuf *om); int ble_hs_flow_startup(void); #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_hci_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_hci_priv.h index ff3604727..362f12cbd 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_hci_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_hci_priv.h @@ -48,7 +48,7 @@ struct os_mbuf; struct ble_hs_hci_ack { int bha_status; /* A BLE_HS_E<...> error; NOT a naked HCI code. */ - uint8_t *bha_params; + const uint8_t *bha_params; int bha_params_len; uint16_t bha_opcode; uint8_t bha_hci_handle; @@ -81,11 +81,8 @@ struct hci_periodic_adv_params extern uint16_t ble_hs_hci_avail_pkts; -int ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, - void *evt_buf, uint8_t evt_buf_len, - uint8_t *out_evt_buf_len); -int ble_hs_hci_cmd_tx_empty_ack(uint16_t opcode, void *cmd, uint8_t cmd_len); -void ble_hs_hci_rx_ack(uint8_t *ack_ev); +int ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len, + void *rsp, uint8_t rsp_len); void ble_hs_hci_init(void); void ble_hs_hci_deinit(void); @@ -103,78 +100,11 @@ int ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_pwr); int ble_hs_hci_util_rand(void *dst, int len); int ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi); int ble_hs_hci_util_set_random_addr(const uint8_t *addr); -int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, - uint16_t tx_time); int ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om, struct hci_data_hdr *out_hdr); -int ble_hs_hci_evt_process(uint8_t *data); +int ble_hs_hci_evt_process(const struct ble_hci_ev *ev); -void ble_hs_hci_cmd_write_hdr(uint8_t ogf, uint16_t ocf, uint8_t len, - void *buf); -int ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len); -void ble_hs_hci_cmd_build_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_set_event_mask2(uint64_t event_mask, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_disconnect(uint16_t handle, uint8_t reason, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_read_rssi(uint16_t handle, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_le_set_host_chan_class(const uint8_t *chan_map, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_read_chan_map(uint16_t conn_handle, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_read_buffer_size(void); -void ble_hs_hci_cmd_build_le_set_adv_enable(uint8_t enable, uint8_t *dst, - int dst_len); -int ble_hs_hci_cmd_le_set_adv_enable(uint8_t enable); -int ble_hs_hci_cmd_build_le_set_scan_params(uint8_t scan_type, - uint16_t scan_itvl, - uint16_t scan_window, - uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint8_t *dst, uint8_t dst_len); -int ble_hs_hci_cmd_le_set_scan_enable(uint8_t enable, uint8_t filter_dups); -int ble_hs_hci_cmd_build_le_create_connection( - const struct hci_create_conn *hcc, uint8_t *cmd, int cmd_len); -int ble_hs_hci_cmd_build_le_add_to_whitelist(const uint8_t *addr, - uint8_t addr_type, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_reset(void); -int ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(uint8_t fc_enable); -int ble_hs_hci_cmd_tx_host_buf_size(const struct hci_host_buf_size *cmd); -int ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - const struct hci_host_num_comp_pkts_entry *entry, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_read_adv_pwr(void); -int ble_hs_hci_cmd_le_create_conn_cancel(void); -int ble_hs_hci_cmd_build_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_update(const struct hci_conn_update *hcu); -void ble_hs_hci_cmd_build_le_lt_key_req_reply( - const struct hci_lt_key_req_reply *hkr, uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(uint16_t conn_handle, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_conn_param_reply( - const struct hci_conn_param_reply *hcr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_reply(const struct hci_conn_param_reply *hcr); -void ble_hs_hci_cmd_build_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn); -void ble_hs_hci_cmd_build_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst, int dst_len); +int ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len); int ble_hs_hci_set_buf_sz(uint16_t pktlen, uint16_t max_pkts); void ble_hs_hci_add_avail_pkts(uint16_t delta); @@ -184,145 +114,9 @@ uint16_t ble_hs_hci_util_handle_pb_bc_join(uint16_t handle, uint8_t pb, int ble_hs_hci_acl_tx_now(struct ble_hs_conn *conn, struct os_mbuf **om); int ble_hs_hci_acl_tx(struct ble_hs_conn *conn, struct os_mbuf **om); -int ble_hs_hci_cmd_build_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, uint16_t tx_time, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_add_to_resolv_list( - const struct hci_add_dev_to_resolving_list *padd, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_remove_from_resolv_list( - uint8_t addr_type, const uint8_t *addr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_peer_resolv_addr( - uint8_t peer_identity_addr_type, const uint8_t *peer_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_lcl_resolv_addr( - uint8_t local_identity_addr_type, const uint8_t *local_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_addr_res_en( - uint8_t enable, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout( - uint16_t timeout, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr, - uint8_t *dst, int dst_len); - -#if MYNEWT_VAL(BLE_EXT_ADV) -int ble_hs_hci_cmd_build_le_set_ext_scan_params(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_ext_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint16_t duration, - uint16_t period, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(uint8_t handle, - const uint8_t *addr, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_data(uint8_t handle, uint8_t operation, - uint8_t frag_pref, struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_enable(uint8_t enable, uint8_t sets_num, - const struct hci_ext_adv_set *sets, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_params(uint8_t handle, - const struct hci_ext_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_remove(uint8_t handle, - uint8_t *cmd, int cmd_len); - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -int -ble_hs_hci_cmd_build_le_periodic_adv_params(uint8_t handle, - const struct hci_periodic_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_enable(uint8_t enable, - uint8_t handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_data(uint8_t handle, uint8_t operation, - struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_periodic_adv_create_sync(uint8_t filter_policy, - uint8_t adv_sid, - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint16_t skip, - uint16_t sync_timeout, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(uint16_t sync_handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -#endif - -#endif - -int ble_hs_hci_cmd_build_le_enh_recv_test(uint8_t rx_chan, uint8_t phy, - uint8_t mod_idx, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_enh_trans_test(uint8_t tx_chan, - uint8_t test_data_len, - uint8_t packet_payload_idx, - uint8_t phy, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst, - uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_read_phy(uint16_t conn_handle, uint8_t *dst, - int dst_len); - -int ble_hs_hci_cmd_build_le_set_default_phy(uint8_t tx_phys_mask, - uint8_t rx_phys_mask, - uint8_t *dst, int dst_len); - -int ble_hs_hci_cmd_build_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst, int dst_len); - int ble_hs_hci_frag_num_mbufs(void); int ble_hs_hci_frag_num_mbufs_free(void); -#if MYNEWT_VAL(BLE_EXT_ADV) -#endif - -int ble_hs_hci_cmd_build_le_read_remote_feat(uint16_t handle, uint8_t *dst, - int dst_len); #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_priv.h index 49269546c..538d07a97 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_priv.h @@ -26,7 +26,6 @@ #include "ble_att_priv.h" #include "ble_gap_priv.h" #include "ble_gatt_priv.h" -#include "ble_hs_dbg_priv.h" #include "ble_hs_hci_priv.h" #include "ble_hs_atomic_priv.h" #include "ble_hs_conn_priv.h" @@ -118,7 +117,8 @@ int ble_hs_misc_conn_chan_find(uint16_t conn_handle, uint16_t cid, int ble_hs_misc_conn_chan_find_reqd(uint16_t conn_handle, uint16_t cid, struct ble_hs_conn **out_conn, struct ble_l2cap_chan **out_chan); -uint8_t ble_hs_misc_addr_type_to_id(uint8_t addr_type); +uint8_t ble_hs_misc_own_addr_type_to_id(uint8_t addr_type); +uint8_t ble_hs_misc_peer_addr_type_to_id(uint8_t addr_type); int ble_hs_misc_restore_irks(void); int ble_hs_locked_by_cur_task(void); @@ -142,31 +142,6 @@ int ble_mqueue_init(struct ble_mqueue *mq, ble_npl_event_fn *ev_fn, void *ev_arg struct os_mbuf *ble_mqueue_get(struct ble_mqueue *mq); int ble_mqueue_put(struct ble_mqueue *mq, struct ble_npl_eventq *evq, struct os_mbuf *om); -#if MYNEWT_VAL(LOG_LEVEL) <= LOG_LEVEL_DEBUG && !BLE_MONITOR - -#define BLE_HS_LOG_CMD(is_tx, cmd_type, cmd_name, conn_handle, \ - log_cb, cmd) do \ -{ \ - BLE_HS_LOG(DEBUG, "%sed %s command: %s; conn=%d ", \ - (is_tx) ? "tx" : "rx", (cmd_type), (cmd_name), (conn_handle)); \ - (log_cb)(cmd); \ - BLE_HS_LOG(DEBUG, "\n"); \ -} while (0) - -#define BLE_HS_LOG_EMPTY_CMD(is_tx, cmd_type, cmd_name, conn_handle) do \ -{ \ - BLE_HS_LOG(DEBUG, "%sed %s command: %s; conn=%d ", \ - (is_tx) ? "tx" : "rx", (cmd_type), (cmd_name), (conn_handle)); \ - BLE_HS_LOG(DEBUG, "\n"); \ -} while (0) - -#else - -#define BLE_HS_LOG_CMD(is_tx, cmd_type, cmd_name, conn_handle, log_cb, cmd) -#define BLE_HS_LOG_EMPTY_CMD(is_tx, cmd_type, cmd_name, conn_handle) - -#endif - #if MYNEWT_VAL(BLE_HS_DEBUG) #define BLE_HS_DBG_ASSERT(x) assert(x) #define BLE_HS_DBG_ASSERT_EVAL(x) assert(x) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_coc_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_coc_priv.h index 0a1a97b77..5ebdaa050 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_coc_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_coc_priv.h @@ -57,25 +57,46 @@ struct ble_l2cap_coc_srv { int ble_l2cap_coc_init(void); int ble_l2cap_coc_create_server(uint16_t psm, uint16_t mtu, ble_l2cap_event_fn *cb, void *cb_arg); -int ble_l2cap_coc_create_srv_chan(uint16_t conn_handle, uint16_t psm, +int ble_l2cap_coc_create_srv_chan(struct ble_hs_conn *conn, uint16_t psm, struct ble_l2cap_chan **chan); -struct ble_l2cap_chan * ble_l2cap_coc_chan_alloc(uint16_t conn_handle, +struct ble_l2cap_chan * ble_l2cap_coc_chan_alloc(struct ble_hs_conn *conn, uint16_t psm, uint16_t mtu, struct os_mbuf *sdu_rx, ble_l2cap_event_fn *cb, void *cb_arg); -void ble_l2cap_coc_cleanup_chan(struct ble_l2cap_chan *chan); +void ble_l2cap_coc_cleanup_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); void ble_l2cap_coc_le_credits_update(uint16_t conn_handle, uint16_t dcid, uint16_t credits); int ble_l2cap_coc_recv_ready(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_rx); int ble_l2cap_coc_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx); +void ble_l2cap_coc_set_new_mtu_mps(struct ble_l2cap_chan *chan, uint16_t mtu, uint16_t mps); #else -#define ble_l2cap_coc_init() 0 -#define ble_l2cap_coc_create_server(psm, mtu, cb, cb_arg) BLE_HS_ENOTSUP -#define ble_l2cap_coc_recv_ready(chan, sdu_rx) BLE_HS_ENOTSUP -#define ble_l2cap_coc_cleanup_chan(chan) -#define ble_l2cap_coc_send(chan, sdu_tx) BLE_HS_ENOTSUP +static inline int +ble_l2cap_coc_init(void) { + return 0; +} + +static inline int +ble_l2cap_coc_create_server(uint16_t psm, uint16_t mtu, + ble_l2cap_event_fn *cb, void *cb_arg) { + return BLE_HS_ENOTSUP; +} + +static inline int +ble_l2cap_coc_recv_ready(struct ble_l2cap_chan *chan, + struct os_mbuf *sdu_rx) { + return BLE_HS_ENOTSUP; +} + +static inline void +ble_l2cap_coc_cleanup_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) { +} + +static inline int +ble_l2cap_coc_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx) { + return BLE_HS_ENOTSUP; +} #endif #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_priv.h index 640974d2a..e3409743b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_priv.h @@ -65,8 +65,20 @@ struct ble_l2cap_chan { uint16_t conn_handle; uint16_t dcid; uint16_t scid; - uint16_t my_mtu; - uint16_t peer_mtu; /* 0 if not exchanged. */ + + /* Unions just to avoid confusion on MPS/MTU. + * In CoC context, L2CAP MTU is MPS + */ + union { + uint16_t my_mtu; + uint16_t my_coc_mps; + }; + + union { + uint16_t peer_mtu; + uint16_t peer_coc_mps; + }; + ble_l2cap_chan_flags flags; struct os_mbuf *rx_buf; @@ -102,7 +114,7 @@ struct os_mbuf *ble_l2cap_prepend_hdr(struct os_mbuf *om, uint16_t cid, uint16_t len); struct ble_l2cap_chan *ble_l2cap_chan_alloc(uint16_t conn_handle); -void ble_l2cap_chan_free(struct ble_l2cap_chan *chan); +void ble_l2cap_chan_free(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); bool ble_l2cap_is_mtu_req_sent(const struct ble_l2cap_chan *chan); @@ -118,6 +130,13 @@ void ble_l2cap_remove_rx(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); int ble_l2cap_init(void); +/* Below experimental API is available when BLE_VERSION >= 52 */ +int ble_l2cap_enhanced_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg); +int ble_l2cap_reconfig(struct ble_l2cap_chan *chans[], uint8_t num, uint16_t new_mtu); + #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_sig_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_sig_priv.h index 1a6fb8293..a698cd0d8 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_sig_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_l2cap_sig_priv.h @@ -74,6 +74,32 @@ struct ble_l2cap_sig_le_con_rsp { uint16_t result; } __attribute__((packed)); +struct ble_l2cap_sig_credit_base_connect_req { + uint16_t psm; + uint16_t mtu; + uint16_t mps; + uint16_t credits; + uint16_t scids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_connect_rsp { + uint16_t mtu; + uint16_t mps; + uint16_t credits; + uint16_t result; + uint16_t dcids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_reconfig_req { + uint16_t mtu; + uint16_t mps; + uint16_t dcids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_reconfig_rsp { + uint16_t result; +} __attribute__((packed)); + struct ble_l2cap_sig_disc_req { uint16_t dcid; uint16_t scid; @@ -107,9 +133,43 @@ int ble_l2cap_sig_disconnect(struct ble_l2cap_chan *chan); int ble_l2cap_sig_le_credits(uint16_t conn_handle, uint16_t scid, uint16_t credits); #else -#define ble_l2cap_sig_coc_connect(conn_handle, psm, mtu, sdu_rx, cb, cb_arg) \ - BLE_HS_ENOTSUP -#define ble_l2cap_sig_disconnect(chan) BLE_HS_ENOTSUP +static inline int +ble_l2cap_sig_coc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, + struct os_mbuf *sdu_rx, + ble_l2cap_event_fn *cb, void *cb_arg) +{ + return BLE_HS_ENOTSUP; +} + +static inline int +ble_l2cap_sig_disconnect(struct ble_l2cap_chan *chan) +{ + return BLE_HS_ENOTSUP; +} +#endif + +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +int ble_l2cap_sig_ecoc_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg); +int ble_l2cap_sig_coc_reconfig(uint16_t conn_handle, struct ble_l2cap_chan *chans[], + uint8_t num, uint16_t new_mtu); +#else +static inline int +ble_l2cap_sig_ecoc_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg) +{ + return BLE_HS_ENOTSUP; +} +static inline int +ble_l2cap_sig_coc_reconfig(uint16_t conn_handle, struct ble_l2cap_chan *chans[], + uint8_t num, uint16_t new_mtu) +{ + return BLE_HS_ENOTSUP; +} #endif void ble_l2cap_sig_conn_broken(uint16_t conn_handle, int reason); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_sm_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_sm_priv.h index bbb4b03ae..def0a32f5 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_sm_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_sm_priv.h @@ -269,6 +269,8 @@ struct ble_sm_proc { struct ble_sm_public_key pub_key_peer; uint8_t mackey[16]; uint8_t dhkey[32]; + const struct ble_sm_sc_oob_data *oob_data_local; + const struct ble_sm_sc_oob_data *oob_data_remote; #endif }; @@ -294,44 +296,33 @@ void ble_sm_dbg_set_sc_keys(uint8_t *pubkey, uint8_t *privkey); int ble_sm_num_procs(void); -void ble_sm_pair_cmd_log(struct ble_sm_pair_cmd *cmd); -void ble_sm_pair_confirm_log(struct ble_sm_pair_confirm *cmd); -void ble_sm_pair_random_log(struct ble_sm_pair_random *cmd); -void ble_sm_pair_fail_log(struct ble_sm_pair_fail *cmd); -void ble_sm_enc_info_log(struct ble_sm_enc_info *cmd); -void ble_sm_master_id_log(struct ble_sm_master_id *cmd); -void ble_sm_id_info_log(struct ble_sm_id_info *cmd); -void ble_sm_id_addr_info_log(struct ble_sm_id_addr_info *cmd); -void ble_sm_sign_info_log(struct ble_sm_sign_info *cmd); -void ble_sm_sec_req_log(struct ble_sm_sec_req *cmd); -void ble_sm_public_key_log(struct ble_sm_public_key *cmd); -void ble_sm_dhkey_check_log(struct ble_sm_dhkey_check *cmd); - -int ble_sm_alg_s1(uint8_t *k, uint8_t *r1, uint8_t *r2, uint8_t *out); -int ble_sm_alg_c1(uint8_t *k, uint8_t *r, - uint8_t *preq, uint8_t *pres, +int ble_sm_alg_s1(const uint8_t *k, const uint8_t *r1, const uint8_t *r2, + uint8_t *out); +int ble_sm_alg_c1(const uint8_t *k, const uint8_t *r, + const uint8_t *preq, const uint8_t *pres, uint8_t iat, uint8_t rat, - uint8_t *ia, uint8_t *ra, + const uint8_t *ia, const uint8_t *ra, uint8_t *out_enc_data); -int ble_sm_alg_f4(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t z, - uint8_t *out_enc_data); -int ble_sm_alg_g2(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t *y, - uint32_t *passkey); -int ble_sm_alg_f5(uint8_t *w, uint8_t *n1, uint8_t *n2, uint8_t a1t, - uint8_t *a1, uint8_t a2t, uint8_t *a2, - uint8_t *mackey, uint8_t *ltk); +int ble_sm_alg_f4(const uint8_t *u, const uint8_t *v, const uint8_t *x, + uint8_t z, uint8_t *out_enc_data); +int ble_sm_alg_g2(const uint8_t *u, const uint8_t *v, const uint8_t *x, + const uint8_t *y, uint32_t *passkey); +int ble_sm_alg_f5(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, + uint8_t a1t, const uint8_t *a1, uint8_t a2t, + const uint8_t *a2, uint8_t *mackey, uint8_t *ltk); int ble_sm_alg_f6(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, const uint8_t *r, const uint8_t *iocap, uint8_t a1t, const uint8_t *a1, uint8_t a2t, const uint8_t *a2, uint8_t *check); -int ble_sm_alg_gen_dhkey(uint8_t *peer_pub_key_x, uint8_t *peer_pub_key_y, - uint8_t *our_priv_key, uint8_t *out_dhkey); +int ble_sm_alg_gen_dhkey(const uint8_t *peer_pub_key_x, + const uint8_t *peer_pub_key_y, + const uint8_t *our_priv_key, uint8_t *out_dhkey); int ble_sm_alg_gen_key_pair(uint8_t *pub, uint8_t *priv); void ble_sm_alg_ecc_init(void); -void ble_sm_enc_change_rx(struct hci_encrypt_change *evt); -void ble_sm_enc_key_refresh_rx(struct hci_encrypt_key_refresh *evt); -int ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt); +void ble_sm_enc_change_rx(const struct ble_hci_ev_enrypt_chg *ev); +void ble_sm_enc_key_refresh_rx(const struct ble_hci_ev_enc_key_refresh *ev); +int ble_sm_ltk_req_rx(const struct ble_hci_ev_le_subev_lt_key_req *ev); #if MYNEWT_VAL(BLE_SM_LEGACY) int ble_sm_lgcy_io_action(struct ble_sm_proc *proc, uint8_t *action); @@ -364,6 +355,10 @@ void ble_sm_sc_dhkey_check_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, void *arg); void ble_sm_sc_dhkey_check_rx(uint16_t conn_handle, struct os_mbuf **rxom, struct ble_sm_result *res); +bool ble_sm_sc_oob_data_check(struct ble_sm_proc *proc, + bool oob_data_local_present, + bool oob_data_remote_present); +void ble_sm_sc_oob_confirm(struct ble_sm_proc *proc, struct ble_sm_result *res); void ble_sm_sc_init(void); #else #define ble_sm_sc_io_action(proc, action) (BLE_HS_ENOTSUP) @@ -399,12 +394,9 @@ int ble_sm_slave_initiate(uint16_t conn_handle); int ble_sm_enc_initiate(uint16_t conn_handle, uint8_t key_size, const uint8_t *ltk, uint16_t ediv, uint64_t rand_val, int auth); -int ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data); +int ble_sm_alg_encrypt(const uint8_t *key, const uint8_t *plaintext, + uint8_t *enc_data); int ble_sm_init(void); - -#define BLE_SM_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ - BLE_HS_LOG_CMD((is_tx), "sm", (cmd_name), (conn_handle), (log_cb), (cmd)) - #else #define ble_sm_enc_change_rx(evt) ((void)(evt)) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.c index f85cbc863..caf1b4f12 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.c @@ -6,6 +6,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include "syscfg/syscfg.h" +#define MESH_LOG_MODULE BLE_MESH_TRANS_LOG #include #include @@ -13,10 +15,6 @@ #include "mesh/mesh.h" #include "mesh_priv.h" -#include "syscfg/syscfg.h" -#define BT_DBG_ENABLED (MYNEWT_VAL(BLE_MESH_DEBUG_TRANS)) -#include "host/ble_hs_log.h" - #include "crypto.h" #include "adv.h" #include "net.h" @@ -27,6 +25,7 @@ #include "settings.h" #include "transport.h" #include "testing.h" +#include "nodes.h" /* The transport layer needs at least three buffers for itself to avoid * deadlocks. Ensure that there are a sufficient number of advertising @@ -52,7 +51,7 @@ BUILD_ASSERT(CONFIG_BT_MESH_ADV_BUF_COUNT >= (CONFIG_BT_MESH_TX_SEG_MAX + 3)); #define SEQ_AUTH(iv_index, seq) (((u64_t)iv_index) << 24 | (u64_t)seq) /* Number of retransmit attempts (after the initial transmit) per segment */ -#define SEG_RETRANSMIT_ATTEMPTS 4 +#define SEG_RETRANSMIT_ATTEMPTS (MYNEWT_VAL(BLE_MESH_SEG_RETRANSMIT_ATTEMPTS)) /* "This timer shall be set to a minimum of 200 + 50 * TTL milliseconds.". * We use 400 since 300 is a common send duration for standard HCI, and we @@ -119,7 +118,7 @@ static int send_unseg(struct bt_mesh_net_tx *tx, struct os_mbuf *sdu, net_buf_reserve(buf, BT_MESH_NET_HDR_LEN); - if (tx->ctx->app_idx == BT_MESH_KEY_DEV) { + if (BT_MESH_IS_DEV_KEY(tx->ctx->app_idx)) { net_buf_add_u8(buf, UNSEG_HDR(0, 0)); } else { net_buf_add_u8(buf, UNSEG_HDR(1, tx->aid)); @@ -128,17 +127,32 @@ static int send_unseg(struct bt_mesh_net_tx *tx, struct os_mbuf *sdu, net_buf_add_mem(buf, sdu->om_data, sdu->om_len); if (IS_ENABLED(CONFIG_BT_MESH_FRIEND)) { + if (!bt_mesh_friend_queue_has_space(tx->sub->net_idx, + tx->src, tx->ctx->addr, + NULL, 1)) { + if (BT_MESH_ADDR_IS_UNICAST(tx->ctx->addr)) { + BT_ERR("Not enough space in Friend Queue"); + net_buf_unref(buf); + return -ENOBUFS; + } else { + BT_WARN("No space in Friend Queue"); + goto send; + } + } + if (bt_mesh_friend_enqueue_tx(tx, BT_MESH_FRIEND_PDU_SINGLE, - NULL, buf) && + NULL, 1, buf) && BT_MESH_ADDR_IS_UNICAST(tx->ctx->addr)) { /* PDUs for a specific Friend should only go * out through the Friend Queue. */ net_buf_unref(buf); + send_cb_finalize(cb, cb_data); return 0; } } +send: return bt_mesh_net_send(tx, buf, cb, cb_data); } @@ -318,7 +332,7 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, struct os_mbuf *sdu, return -EBUSY; } - if (net_tx->ctx->app_idx == BT_MESH_KEY_DEV) { + if (BT_MESH_IS_DEV_KEY(net_tx->ctx->app_idx)) { seg_hdr = SEG_HDR(0, 0); } else { seg_hdr = SEG_HDR(1, net_tx->aid); @@ -340,10 +354,21 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, struct os_mbuf *sdu, tx->ttl = net_tx->ctx->send_ttl; } - seq_zero = tx->seq_auth & 0x1fff; + seq_zero = tx->seq_auth & TRANS_SEQ_ZERO_MASK; BT_DBG("SeqZero 0x%04x", seq_zero); + if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && + !bt_mesh_friend_queue_has_space(tx->sub->net_idx, net_tx->src, + tx->dst, &tx->seq_auth, + tx->seg_n + 1) && + BT_MESH_ADDR_IS_UNICAST(tx->dst)) { + BT_ERR("Not enough space in Friend Queue for %u segments", + tx->seg_n + 1); + seg_tx_reset(tx); + return -ENOBUFS; + } + for (seg_o = 0; sdu->om_len; seg_o++) { struct os_mbuf *seg; u16_t len; @@ -371,8 +396,6 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, struct os_mbuf *sdu, net_buf_add_mem(seg, sdu->om_data, len); net_buf_simple_pull(sdu, len); - tx->seg[seg_o] = net_buf_ref(seg); - if (IS_ENABLED(CONFIG_BT_MESH_FRIEND)) { enum bt_mesh_friend_pdu_type type; @@ -384,16 +407,19 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, struct os_mbuf *sdu, if (bt_mesh_friend_enqueue_tx(net_tx, type, &tx->seq_auth, + tx->seg_n + 1, seg) && BT_MESH_ADDR_IS_UNICAST(net_tx->ctx->addr)) { /* PDUs for a specific Friend should only go * out through the Friend Queue. */ net_buf_unref(seg); - return 0; + continue; } } + tx->seg[seg_o] = net_buf_ref(seg); + BT_DBG("Sending %u/%u", seg_o, tx->seg_n); err = bt_mesh_net_send(net_tx, seg, @@ -406,6 +432,17 @@ static int send_seg(struct bt_mesh_net_tx *net_tx, struct os_mbuf *sdu, } } + /* This can happen if segments only went into the Friend Queue */ + if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && !tx->seg[0]) { + seg_tx_reset(tx); + + /* If there was a callback notify sending immediately since + * there's no other way to track this (at least currently) + * with the Friend Queue. + */ + send_cb_finalize(cb, cb_data); + } + if (IS_ENABLED(CONFIG_BT_MESH_LOW_POWER) && bt_mesh_lpn_established()) { bt_mesh_lpn_poll(); @@ -435,6 +472,7 @@ int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, { const u8_t *key; u8_t *ad; + u8_t aid; int err; if (net_buf_simple_tailroom(msg) < 4) { @@ -444,33 +482,21 @@ int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, if (msg->om_len > 11) { tx->ctx->send_rel = 1; + tx->ctx->send_rel = true; } BT_DBG("net_idx 0x%04x app_idx 0x%04x dst 0x%04x", tx->sub->net_idx, tx->ctx->app_idx, tx->ctx->addr); BT_DBG("len %u: %s", msg->om_len, bt_hex(msg->om_data, msg->om_len)); - if (tx->ctx->app_idx == BT_MESH_KEY_DEV) { - key = bt_mesh.dev_key; - tx->aid = 0; - } else { - struct bt_mesh_app_key *app_key; - - app_key = bt_mesh_app_key_find(tx->ctx->app_idx); - if (!app_key) { - return -EINVAL; - } - - if (tx->sub->kr_phase == BT_MESH_KR_PHASE_2 && - app_key->updated) { - key = app_key->keys[1].val; - tx->aid = app_key->keys[1].id; - } else { - key = app_key->keys[0].val; - tx->aid = app_key->keys[0].id; - } + err = bt_mesh_app_key_get(tx->sub, tx->ctx->app_idx, + tx->ctx->addr, &key, &aid); + if (err) { + return err; } + tx->aid = aid; + if (!tx->ctx->send_rel || net_buf_simple_tailroom(msg) < 8) { tx->aszmic = 0; } else { @@ -483,10 +509,9 @@ int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, ad = NULL; } - err = bt_mesh_app_encrypt(key, tx->ctx->app_idx == BT_MESH_KEY_DEV, - tx->aszmic, msg, ad, tx->src, - tx->ctx->addr, bt_mesh.seq, - BT_MESH_NET_IVI_TX); + err = bt_mesh_app_encrypt(key, BT_MESH_IS_DEV_KEY(tx->ctx->app_idx), + tx->aszmic, msg, ad, tx->src, tx->ctx->addr, + bt_mesh.seq, BT_MESH_NET_IVI_TX); if (err) { return err; } @@ -500,26 +525,23 @@ int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, return err; } -int bt_mesh_trans_resend(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, - const struct bt_mesh_send_cb *cb, void *cb_data) +static void update_rpl(struct bt_mesh_rpl *rpl, struct bt_mesh_net_rx *rx) { - struct net_buf_simple_state state; - int err; + rpl->src = rx->ctx.addr; + rpl->seq = rx->seq; + rpl->old_iv = rx->old_iv; - net_buf_simple_save(msg, &state); - - if (tx->ctx->send_rel || msg->om_len > 15) { - err = send_seg(tx, msg, cb, cb_data); - } else { - err = send_unseg(tx, msg, cb, cb_data); + if (IS_ENABLED(CONFIG_BT_SETTINGS)) { + bt_mesh_store_rpl(rpl); } - - net_buf_simple_restore(msg, &state); - - return err; } -static bool is_replay(struct bt_mesh_net_rx *rx) +/* Check the Replay Protection List for a replay attempt. If non-NULL match + * parameter is given the RPL slot is returned but it is not immediately + * updated (needed for segmented messages), whereas if a NULL match is given + * the RPL is immediately updated (used for unsegmented messages). + */ +static bool is_replay(struct bt_mesh_net_rx *rx, struct bt_mesh_rpl **match) { int i; @@ -528,17 +550,20 @@ static bool is_replay(struct bt_mesh_net_rx *rx) return false; } + /* The RPL is used only for the local node */ + if (!rx->local_match) { + return false; + } + for (i = 0; i < ARRAY_SIZE(bt_mesh.rpl); i++) { struct bt_mesh_rpl *rpl = &bt_mesh.rpl[i]; /* Empty slot */ if (!rpl->src) { - rpl->src = rx->ctx.addr; - rpl->seq = rx->seq; - rpl->old_iv = rx->old_iv; - - if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_store_rpl(rpl); + if (match) { + *match = rpl; + } else { + update_rpl(rpl, rx); } return false; @@ -552,11 +577,10 @@ static bool is_replay(struct bt_mesh_net_rx *rx) if ((!rx->old_iv && rpl->old_iv) || rpl->seq < rx->seq) { - rpl->seq = rx->seq; - rpl->old_iv = rx->old_iv; - - if (IS_ENABLED(CONFIG_BT_SETTINGS)) { - bt_mesh_store_rpl(rpl); + if (match) { + *match = rpl; + } else { + update_rpl(rpl, rx); } return false; @@ -591,7 +615,6 @@ static int sdu_recv(struct bt_mesh_net_rx *rx, u32_t seq, u8_t hdr, if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && !rx->local_match) { BT_DBG("Ignoring PDU for LPN 0x%04x of this Friend", rx->ctx.recv_dst); - err = 0; goto done; } @@ -611,14 +634,45 @@ static int sdu_recv(struct bt_mesh_net_rx *rx, u32_t seq, u8_t hdr, rx->ctx.recv_dst, seq, BT_MESH_NET_IVI_RX(rx)); if (err) { - BT_ERR("Unable to decrypt with DevKey"); - err = -EINVAL; + BT_WARN("Unable to decrypt with local DevKey"); + } else { + rx->ctx.app_idx = BT_MESH_KEY_DEV_LOCAL; + bt_mesh_model_recv(rx, sdu); goto done; } - rx->ctx.app_idx = BT_MESH_KEY_DEV; - bt_mesh_model_recv(rx, sdu); - goto done; + if (IS_ENABLED(CONFIG_BT_MESH_PROVISIONER)) { + struct bt_mesh_node *node; + + /* + * There is no way of knowing if we should use our + * local DevKey or the remote DevKey to decrypt the + * message so we must try both. + */ + + node = bt_mesh_node_find(rx->ctx.addr); + if (node == NULL) { + BT_ERR("No node found for addr 0x%04x", + rx->ctx.addr); + return -EINVAL; + } + + net_buf_simple_init(sdu, 0); + err = bt_mesh_app_decrypt(node->dev_key, true, aszmic, + buf, sdu, ad, rx->ctx.addr, + rx->ctx.recv_dst, seq, + BT_MESH_NET_IVI_RX(rx)); + if (err) { + BT_ERR("Unable to decrypt with node DevKey"); + return -EINVAL; + } + + rx->ctx.app_idx = BT_MESH_KEY_DEV_REMOTE; + bt_mesh_model_recv(rx, sdu); + return 0; + } + + return -EINVAL; } for (i = 0; i < ARRAY_SIZE(bt_mesh.app_keys); i++) { @@ -675,7 +729,7 @@ static struct seg_tx *seg_tx_lookup(u16_t seq_zero, u8_t obo, u16_t addr) for (i = 0; i < ARRAY_SIZE(seg_tx); i++) { tx = &seg_tx[i]; - if ((tx->seq_auth & 0x1fff) != seq_zero) { + if ((tx->seq_auth & TRANS_SEQ_ZERO_MASK) != seq_zero) { continue; } @@ -713,7 +767,7 @@ static int trans_ack(struct bt_mesh_net_rx *rx, u8_t hdr, seq_zero = net_buf_simple_pull_be16(buf); obo = seq_zero >> 15; - seq_zero = (seq_zero >> 2) & 0x1fff; + seq_zero = (seq_zero >> 2) & TRANS_SEQ_ZERO_MASK; if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && rx->friend_match) { BT_DBG("Ack for LPN 0x%04x of this Friend", rx->ctx.recv_dst); @@ -876,7 +930,7 @@ static int trans_unseg(struct os_mbuf *buf, struct bt_mesh_net_rx *rx, return -EINVAL; } - if (rx->local_match && is_replay(rx)) { + if (is_replay(rx, NULL)) { BT_WARN("Replay: src 0x%04x dst 0x%04x seq 0x%06x", rx->ctx.addr, rx->ctx.recv_dst, (unsigned) rx->seq); return -EINVAL; @@ -945,7 +999,7 @@ int bt_mesh_ctl_send(struct bt_mesh_net_tx *tx, u8_t ctl_op, void *data, if (IS_ENABLED(CONFIG_BT_MESH_FRIEND)) { if (bt_mesh_friend_enqueue_tx(tx, BT_MESH_FRIEND_PDU_SINGLE, - seq_auth, buf) && + seq_auth, 1, buf) && BT_MESH_ADDR_IS_UNICAST(tx->ctx->addr)) { /* PDUs for a specific Friend should only go * out through the Friend Queue. @@ -973,7 +1027,7 @@ static int send_ack(struct bt_mesh_subnet *sub, u16_t src, u16_t dst, .src = obo ? bt_mesh_primary_addr() : src, .xmit = bt_mesh_net_transmit_get(), }; - u16_t seq_zero = *seq_auth & 0x1fff; + u16_t seq_zero = *seq_auth & TRANS_SEQ_ZERO_MASK; u8_t buf[6]; BT_DBG("SeqZero 0x%04x Block 0x%08x OBO %u", seq_zero, @@ -1156,10 +1210,12 @@ static struct seg_rx *seg_rx_alloc(struct bt_mesh_net_rx *net_rx, } static int trans_seg(struct os_mbuf *buf, struct bt_mesh_net_rx *net_rx, - enum bt_mesh_friend_pdu_type *pdu_type, u64_t *seq_auth) + enum bt_mesh_friend_pdu_type *pdu_type, u64_t *seq_auth, + u8_t *seg_count) { + struct bt_mesh_rpl *rpl = NULL; struct seg_rx *rx; - u8_t *hdr = buf->om_data; + u8_t *hdr = buf->om_data; u16_t seq_zero; u8_t seg_n; u8_t seg_o; @@ -1170,13 +1226,19 @@ static int trans_seg(struct os_mbuf *buf, struct bt_mesh_net_rx *net_rx, return -EINVAL; } + if (is_replay(net_rx, &rpl)) { + BT_WARN("Replay: src 0x%04x dst 0x%04x seq 0x%06x", + net_rx->ctx.addr, net_rx->ctx.recv_dst, net_rx->seq); + return -EINVAL; + } + BT_DBG("ASZMIC %u AKF %u AID 0x%02x", ASZMIC(hdr), AKF(hdr), AID(hdr)); net_buf_simple_pull(buf, 1); seq_zero = net_buf_simple_pull_be16(buf); seg_o = (seq_zero & 0x03) << 3; - seq_zero = (seq_zero >> 2) & 0x1fff; + seq_zero = (seq_zero >> 2) & TRANS_SEQ_ZERO_MASK; seg_n = net_buf_simple_pull_u8(buf); seg_o |= seg_n >> 5; seg_n &= 0x1f; @@ -1206,6 +1268,8 @@ static int trans_seg(struct os_mbuf *buf, struct bt_mesh_net_rx *net_rx, ((((net_rx->seq & BIT_MASK(14)) - seq_zero)) & BIT_MASK(13)))); + *seg_count = seg_n + 1; + /* Look for old RX sessions */ rx = seg_rx_find(net_rx, seq_auth); if (rx) { @@ -1227,9 +1291,15 @@ static int trans_seg(struct os_mbuf *buf, struct bt_mesh_net_rx *net_rx, if (rx->block == BLOCK_COMPLETE(rx->seg_n)) { BT_WARN("Got segment for already complete SDU"); + send_ack(net_rx->sub, net_rx->ctx.recv_dst, net_rx->ctx.addr, net_rx->ctx.send_ttl, seq_auth, rx->block, rx->obo); + + if (rpl) { + update_rpl(rpl, net_rx); + } + return -EALREADY; } @@ -1250,6 +1320,22 @@ static int trans_seg(struct os_mbuf *buf, struct bt_mesh_net_rx *net_rx, return -EMSGSIZE; } + /* Verify early that there will be space in the Friend Queue(s) in + * case this message is destined to an LPN of ours. + */ + if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && + net_rx->friend_match && !net_rx->local_match && + !bt_mesh_friend_queue_has_space(net_rx->sub->net_idx, + net_rx->ctx.addr, + net_rx->ctx.recv_dst, seq_auth, + *seg_count)) { + BT_ERR("No space in Friend Queue for %u segments", *seg_count); + send_ack(net_rx->sub, net_rx->ctx.recv_dst, net_rx->ctx.addr, + net_rx->ctx.send_ttl, seq_auth, 0, + net_rx->friend_match); + return -ENOBUFS; + } + /* Look for free slot for a new RX session */ rx = seg_rx_alloc(net_rx, hdr, seq_auth, seg_n); if (!rx) { @@ -1317,13 +1403,8 @@ found_rx: BT_DBG("Complete SDU"); - if (net_rx->local_match && is_replay(net_rx)) { - BT_WARN("Replay: src 0x%04x dst 0x%04x seq 0x%06x", - net_rx->ctx.addr, net_rx->ctx.recv_dst, - (unsigned) net_rx->seq); - /* Clear the segment's bit */ - rx->block &= ~BIT(seg_o); - return -EINVAL; + if (rpl) { + update_rpl(rpl, net_rx); } *pdu_type = BT_MESH_FRIEND_PDU_COMPLETE; @@ -1349,6 +1430,7 @@ int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx) u64_t seq_auth = TRANS_SEQ_AUTH_NVAL; enum bt_mesh_friend_pdu_type pdu_type = BT_MESH_FRIEND_PDU_SINGLE; struct net_buf_simple_state state; + u8_t seg_count = 0; int err; if (IS_ENABLED(CONFIG_BT_MESH_FRIEND)) { @@ -1396,8 +1478,9 @@ int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx) return 0; } - err = trans_seg(buf, rx, &pdu_type, &seq_auth); + err = trans_seg(buf, rx, &pdu_type, &seq_auth, &seg_count); } else { + seg_count = 1; err = trans_unseg(buf, rx, &seq_auth); } @@ -1422,9 +1505,11 @@ int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx) if (IS_ENABLED(CONFIG_BT_MESH_FRIEND) && rx->friend_match && !err) { if (seq_auth == TRANS_SEQ_AUTH_NVAL) { - bt_mesh_friend_enqueue_rx(rx, pdu_type, NULL, buf); + bt_mesh_friend_enqueue_rx(rx, pdu_type, NULL, + seg_count, buf); } else { - bt_mesh_friend_enqueue_rx(rx, pdu_type, &seq_auth, buf); + bt_mesh_friend_enqueue_rx(rx, pdu_type, &seq_auth, + seg_count, buf); } } @@ -1483,3 +1568,101 @@ void bt_mesh_rpl_clear(void) BT_DBG(""); memset(bt_mesh.rpl, 0, sizeof(bt_mesh.rpl)); } + +void bt_mesh_heartbeat_send(void) +{ + struct bt_mesh_cfg_srv *cfg = bt_mesh_cfg_get(); + u16_t feat = 0U; + struct __packed { + u8_t init_ttl; + u16_t feat; + } hb; + struct bt_mesh_msg_ctx ctx = { + .net_idx = cfg->hb_pub.net_idx, + .app_idx = BT_MESH_KEY_UNUSED, + .addr = cfg->hb_pub.dst, + .send_ttl = cfg->hb_pub.ttl, + }; + struct bt_mesh_net_tx tx = { + .sub = bt_mesh_subnet_get(cfg->hb_pub.net_idx), + .ctx = &ctx, + .src = bt_mesh_model_elem(cfg->model)->addr, + .xmit = bt_mesh_net_transmit_get(), + }; + + /* Do nothing if heartbeat publication is not enabled */ + if (cfg->hb_pub.dst == BT_MESH_ADDR_UNASSIGNED) { + return; + } + + hb.init_ttl = cfg->hb_pub.ttl; + + if (bt_mesh_relay_get() == BT_MESH_RELAY_ENABLED) { + feat |= BT_MESH_FEAT_RELAY; + } + + if (bt_mesh_gatt_proxy_get() == BT_MESH_GATT_PROXY_ENABLED) { + feat |= BT_MESH_FEAT_PROXY; + } + + if (bt_mesh_friend_get() == BT_MESH_FRIEND_ENABLED) { + feat |= BT_MESH_FEAT_FRIEND; + } + + if (bt_mesh_lpn_established()) { + feat |= BT_MESH_FEAT_LOW_POWER; + } + + hb.feat = sys_cpu_to_be16(feat); + + BT_DBG("InitTTL %u feat 0x%04x", cfg->hb_pub.ttl, feat); + + bt_mesh_ctl_send(&tx, TRANS_CTL_OP_HEARTBEAT, &hb, sizeof(hb), + NULL, NULL, NULL); +} + +int bt_mesh_app_key_get(const struct bt_mesh_subnet *subnet, u16_t app_idx, + u16_t addr, const u8_t **key, u8_t *aid) +{ + struct bt_mesh_app_key *app_key; + + if (app_idx == BT_MESH_KEY_DEV_LOCAL || + (app_idx == BT_MESH_KEY_DEV_REMOTE && + bt_mesh_elem_find(addr) != NULL)) { + *aid = 0; + *key = bt_mesh.dev_key; + return 0; + } else if (app_idx == BT_MESH_KEY_DEV_REMOTE) { + if (!IS_ENABLED(CONFIG_BT_MESH_PROVISIONER)) { + return -EINVAL; + } + + struct bt_mesh_node *node = bt_mesh_node_find(addr); + if (!node) { + return -EINVAL; + } + + *key = node->dev_key; + *aid = 0; + return 0; + } + + if (!subnet) { + return -EINVAL; + } + + app_key = bt_mesh_app_key_find(app_idx); + if (!app_key) { + return -ENOENT; + } + + if (subnet->kr_phase == BT_MESH_KR_PHASE_2 && app_key->updated) { + *key = app_key->keys[1].val; + *aid = app_key->keys[1].id; + } else { + *key = app_key->keys[0].val; + *aid = app_key->keys[0].id; + } + + return 0; +} diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.h index ac6b3f8ee..eff768e9f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/transport.h @@ -13,6 +13,7 @@ #define BT_MESH_TX_SDU_MAX (CONFIG_BT_MESH_TX_SEG_MAX * 12) +#define TRANS_SEQ_ZERO_MASK ((u16_t)BIT_MASK(13)) #define TRANS_CTL_OP_MASK ((u8_t)BIT_MASK(7)) #define TRANS_CTL_OP(data) ((data)[0] & TRANS_CTL_OP_MASK) #define TRANS_CTL_HDR(op, seg) ((op & TRANS_CTL_OP_MASK) | (seg << 7)) @@ -97,3 +98,8 @@ int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx); void bt_mesh_trans_init(void); void bt_mesh_rpl_clear(void); + +void bt_mesh_heartbeat_send(void); + +int bt_mesh_app_key_get(const struct bt_mesh_subnet *subnet, u16_t app_idx, + u16_t addr, const u8_t **key, u8_t *aid); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/gap/src/ble_svc_gap.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/gap/src/ble_svc_gap.c index 7a1e76f98..e79b2b872 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/gap/src/ble_svc_gap.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/gap/src/ble_svc_gap.c @@ -161,7 +161,7 @@ ble_svc_gap_appearance_write_access(struct ble_gatt_access_ctxt *ctxt) return BLE_ATT_ERR_INVALID_ATTR_VALUE_LEN; } - rc = ble_hs_mbuf_to_flat(ctxt->om, ble_svc_gap_appearance, om_len, NULL); + rc = ble_hs_mbuf_to_flat(ctxt->om, &ble_svc_gap_appearance, om_len, NULL); if (rc != 0) { return BLE_ATT_ERR_UNLIKELY; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/tps/src/ble_hs_hci_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/tps/src/ble_hs_hci_priv.h index ff3604727..362f12cbd 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/tps/src/ble_hs_hci_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/services/tps/src/ble_hs_hci_priv.h @@ -48,7 +48,7 @@ struct os_mbuf; struct ble_hs_hci_ack { int bha_status; /* A BLE_HS_E<...> error; NOT a naked HCI code. */ - uint8_t *bha_params; + const uint8_t *bha_params; int bha_params_len; uint16_t bha_opcode; uint8_t bha_hci_handle; @@ -81,11 +81,8 @@ struct hci_periodic_adv_params extern uint16_t ble_hs_hci_avail_pkts; -int ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, - void *evt_buf, uint8_t evt_buf_len, - uint8_t *out_evt_buf_len); -int ble_hs_hci_cmd_tx_empty_ack(uint16_t opcode, void *cmd, uint8_t cmd_len); -void ble_hs_hci_rx_ack(uint8_t *ack_ev); +int ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len, + void *rsp, uint8_t rsp_len); void ble_hs_hci_init(void); void ble_hs_hci_deinit(void); @@ -103,78 +100,11 @@ int ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_pwr); int ble_hs_hci_util_rand(void *dst, int len); int ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi); int ble_hs_hci_util_set_random_addr(const uint8_t *addr); -int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, - uint16_t tx_time); int ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om, struct hci_data_hdr *out_hdr); -int ble_hs_hci_evt_process(uint8_t *data); +int ble_hs_hci_evt_process(const struct ble_hci_ev *ev); -void ble_hs_hci_cmd_write_hdr(uint8_t ogf, uint16_t ocf, uint8_t len, - void *buf); -int ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len); -void ble_hs_hci_cmd_build_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_set_event_mask2(uint64_t event_mask, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_disconnect(uint16_t handle, uint8_t reason, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_read_rssi(uint16_t handle, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_le_set_host_chan_class(const uint8_t *chan_map, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_read_chan_map(uint16_t conn_handle, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_read_buffer_size(void); -void ble_hs_hci_cmd_build_le_set_adv_enable(uint8_t enable, uint8_t *dst, - int dst_len); -int ble_hs_hci_cmd_le_set_adv_enable(uint8_t enable); -int ble_hs_hci_cmd_build_le_set_scan_params(uint8_t scan_type, - uint16_t scan_itvl, - uint16_t scan_window, - uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint8_t *dst, uint8_t dst_len); -int ble_hs_hci_cmd_le_set_scan_enable(uint8_t enable, uint8_t filter_dups); -int ble_hs_hci_cmd_build_le_create_connection( - const struct hci_create_conn *hcc, uint8_t *cmd, int cmd_len); -int ble_hs_hci_cmd_build_le_add_to_whitelist(const uint8_t *addr, - uint8_t addr_type, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_reset(void); -int ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(uint8_t fc_enable); -int ble_hs_hci_cmd_tx_host_buf_size(const struct hci_host_buf_size *cmd); -int ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - const struct hci_host_num_comp_pkts_entry *entry, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_read_adv_pwr(void); -int ble_hs_hci_cmd_le_create_conn_cancel(void); -int ble_hs_hci_cmd_build_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_update(const struct hci_conn_update *hcu); -void ble_hs_hci_cmd_build_le_lt_key_req_reply( - const struct hci_lt_key_req_reply *hkr, uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(uint16_t conn_handle, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_conn_param_reply( - const struct hci_conn_param_reply *hcr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_reply(const struct hci_conn_param_reply *hcr); -void ble_hs_hci_cmd_build_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn); -void ble_hs_hci_cmd_build_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst, int dst_len); +int ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len); int ble_hs_hci_set_buf_sz(uint16_t pktlen, uint16_t max_pkts); void ble_hs_hci_add_avail_pkts(uint16_t delta); @@ -184,145 +114,9 @@ uint16_t ble_hs_hci_util_handle_pb_bc_join(uint16_t handle, uint8_t pb, int ble_hs_hci_acl_tx_now(struct ble_hs_conn *conn, struct os_mbuf **om); int ble_hs_hci_acl_tx(struct ble_hs_conn *conn, struct os_mbuf **om); -int ble_hs_hci_cmd_build_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, uint16_t tx_time, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_add_to_resolv_list( - const struct hci_add_dev_to_resolving_list *padd, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_remove_from_resolv_list( - uint8_t addr_type, const uint8_t *addr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_peer_resolv_addr( - uint8_t peer_identity_addr_type, const uint8_t *peer_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_lcl_resolv_addr( - uint8_t local_identity_addr_type, const uint8_t *local_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_addr_res_en( - uint8_t enable, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout( - uint16_t timeout, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr, - uint8_t *dst, int dst_len); - -#if MYNEWT_VAL(BLE_EXT_ADV) -int ble_hs_hci_cmd_build_le_set_ext_scan_params(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_ext_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint16_t duration, - uint16_t period, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(uint8_t handle, - const uint8_t *addr, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_data(uint8_t handle, uint8_t operation, - uint8_t frag_pref, struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_enable(uint8_t enable, uint8_t sets_num, - const struct hci_ext_adv_set *sets, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_params(uint8_t handle, - const struct hci_ext_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_remove(uint8_t handle, - uint8_t *cmd, int cmd_len); - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -int -ble_hs_hci_cmd_build_le_periodic_adv_params(uint8_t handle, - const struct hci_periodic_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_enable(uint8_t enable, - uint8_t handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_data(uint8_t handle, uint8_t operation, - struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_periodic_adv_create_sync(uint8_t filter_policy, - uint8_t adv_sid, - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint16_t skip, - uint16_t sync_timeout, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(uint16_t sync_handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -#endif - -#endif - -int ble_hs_hci_cmd_build_le_enh_recv_test(uint8_t rx_chan, uint8_t phy, - uint8_t mod_idx, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_enh_trans_test(uint8_t tx_chan, - uint8_t test_data_len, - uint8_t packet_payload_idx, - uint8_t phy, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst, - uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_read_phy(uint16_t conn_handle, uint8_t *dst, - int dst_len); - -int ble_hs_hci_cmd_build_le_set_default_phy(uint8_t tx_phys_mask, - uint8_t rx_phys_mask, - uint8_t *dst, int dst_len); - -int ble_hs_hci_cmd_build_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst, int dst_len); - int ble_hs_hci_frag_num_mbufs(void); int ble_hs_hci_frag_num_mbufs_free(void); -#if MYNEWT_VAL(BLE_EXT_ADV) -#endif - -int ble_hs_hci_cmd_build_le_read_remote_feat(uint16_t handle, uint8_t *dst, - int dst_len); #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_clt.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_clt.c index b33f8375e..09fc9ea23 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_clt.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_clt.c @@ -43,8 +43,6 @@ ble_att_clt_rx_error(uint16_t conn_handle, struct os_mbuf **rxom) rsp = (struct ble_att_error_rsp *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "error rsp", conn_handle, ble_att_error_rsp_log, rsp); - ble_gattc_rx_err(conn_handle, le16toh(rsp->baep_handle), le16toh(rsp->baep_error_code)); @@ -96,8 +94,6 @@ ble_att_clt_tx_mtu(uint16_t conn_handle, uint16_t mtu) return rc; } - BLE_ATT_LOG_CMD(1, "mtu req", conn_handle, ble_att_mtu_cmd_log, req); - ble_hs_lock(); rc = ble_att_conn_chan_find(conn_handle, &conn, &chan); @@ -124,8 +120,6 @@ ble_att_clt_rx_mtu(uint16_t conn_handle, struct os_mbuf **rxom) if (rc == 0) { cmd = (struct ble_att_mtu_cmd *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "mtu rsp", conn_handle, ble_att_mtu_cmd_log, cmd); - ble_hs_lock(); rc = ble_att_conn_chan_find(conn_handle, NULL, &chan); @@ -172,9 +166,6 @@ ble_att_clt_tx_find_info(uint16_t conn_handle, uint16_t start_handle, req->bafq_start_handle = htole16(start_handle); req->bafq_end_handle = htole16(end_handle); - BLE_ATT_LOG_CMD(1, "find info req", conn_handle, - ble_att_find_info_req_log, req); - return ble_att_tx(conn_handle, txom); } @@ -247,9 +238,6 @@ ble_att_clt_rx_find_info(uint16_t conn_handle, struct os_mbuf **om) rsp = (struct ble_att_find_info_rsp *)(*om)->om_data; - BLE_ATT_LOG_CMD(0, "find info rsp", conn_handle, ble_att_find_info_rsp_log, - rsp); - /* Strip the response base from the front of the mbuf. */ os_mbuf_adj((*om), sizeof(*rsp)); @@ -306,9 +294,6 @@ ble_att_clt_tx_find_type_value(uint16_t conn_handle, uint16_t start_handle, req->bavq_attr_type = htole16(attribute_type); memcpy(req->bavq_value, attribute_value, value_len); - BLE_ATT_LOG_CMD(1, "find type value req", conn_handle, - ble_att_find_type_value_req_log, req); - return ble_att_tx(conn_handle, txom); } @@ -344,8 +329,6 @@ ble_att_clt_rx_find_type_value(uint16_t conn_handle, struct os_mbuf **rxom) struct ble_att_find_type_value_hinfo hinfo; int rc; - BLE_ATT_LOG_EMPTY_CMD(0, "find type value rsp", conn_handle); - /* Parse the Handles-Information-List field, passing each entry to GATT. */ rc = 0; while (OS_MBUF_PKTLEN(*rxom) > 0) { @@ -393,9 +376,6 @@ ble_att_clt_tx_read_type(uint16_t conn_handle, uint16_t start_handle, ble_uuid_flat(uuid, req->uuid); - BLE_ATT_LOG_CMD(1, "read type req", conn_handle, - ble_att_read_type_req_log, req); - return ble_att_tx(conn_handle, txom); } @@ -419,9 +399,6 @@ ble_att_clt_rx_read_type(uint16_t conn_handle, struct os_mbuf **rxom) rsp = (struct ble_att_read_type_rsp *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read type rsp", conn_handle, ble_att_read_type_rsp_log, - rsp); - data_len = rsp->batp_length; /* Strip the response base from the front of the mbuf. */ @@ -487,8 +464,6 @@ ble_att_clt_tx_read(uint16_t conn_handle, uint16_t handle) return rc; } - BLE_ATT_LOG_CMD(1, "read req", conn_handle, ble_att_read_req_log, req); - return 0; } @@ -499,8 +474,6 @@ ble_att_clt_rx_read(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "read rsp", conn_handle); - /* Pass the Attribute Value field to GATT. */ ble_gattc_rx_read_rsp(conn_handle, 0, rxom); return 0; @@ -538,9 +511,6 @@ ble_att_clt_tx_read_blob(uint16_t conn_handle, uint16_t handle, uint16_t offset) return rc; } - BLE_ATT_LOG_CMD(1, "read blob req", conn_handle, - ble_att_read_blob_req_log, req); - return 0; } @@ -551,8 +521,6 @@ ble_att_clt_rx_read_blob(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "read blob rsp", conn_handle); - /* Pass the Attribute Value field to GATT. */ ble_gattc_rx_read_blob_rsp(conn_handle, 0, rxom); return 0; @@ -573,8 +541,6 @@ ble_att_clt_tx_read_mult(uint16_t conn_handle, const uint16_t *handles, struct os_mbuf *txom; int i; - BLE_ATT_LOG_EMPTY_CMD(1, "reqd mult req", conn_handle); - if (num_handles < 1) { return BLE_HS_EINVAL; } @@ -600,8 +566,6 @@ ble_att_clt_rx_read_mult(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "read mult rsp", conn_handle); - /* Pass the Attribute Value field to GATT. */ ble_gattc_rx_read_mult_rsp(conn_handle, 0, rxom); return 0; @@ -637,9 +601,6 @@ ble_att_clt_tx_read_group_type(uint16_t conn_handle, req->bagq_end_handle = htole16(end_handle); ble_uuid_flat(uuid, req->uuid); - BLE_ATT_LOG_CMD(1, "read group type req", conn_handle, - ble_att_read_group_type_req_log, req); - return ble_att_tx(conn_handle, txom); } @@ -686,9 +647,6 @@ ble_att_clt_rx_read_group_type(uint16_t conn_handle, struct os_mbuf **rxom) rsp = (struct ble_att_read_group_type_rsp *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read group type rsp", conn_handle, - ble_att_read_group_type_rsp_log, rsp); - len = rsp->bagp_length; /* Strip the base from the front of the response. */ @@ -735,8 +693,6 @@ ble_att_clt_tx_write_req(uint16_t conn_handle, uint16_t handle, req->bawq_handle = htole16(handle); os_mbuf_concat(txom2, txom); - BLE_ATT_LOG_CMD(1, "write req", conn_handle, ble_att_write_req_log, req); - return ble_att_tx(conn_handle, txom2); } @@ -774,8 +730,6 @@ ble_att_clt_tx_write_cmd(uint16_t conn_handle, uint16_t handle, cmd->handle = htole16(handle); os_mbuf_concat(txom2, txom); - BLE_ATT_LOG_CMD(1, "write cmd", conn_handle, ble_att_write_cmd_log, cmd); - return ble_att_tx(conn_handle, txom2); } @@ -786,8 +740,6 @@ ble_att_clt_rx_write(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "write rsp", conn_handle); - /* No payload. */ ble_gattc_rx_write_rsp(conn_handle); return 0; @@ -835,9 +787,6 @@ ble_att_clt_tx_prep_write(uint16_t conn_handle, uint16_t handle, req->bapc_offset = htole16(offset); os_mbuf_concat(txom2, txom); - BLE_ATT_LOG_CMD(1, "prep write req", conn_handle, - ble_att_prep_write_cmd_log, req); - return ble_att_tx(conn_handle, txom2); err: @@ -866,8 +815,6 @@ ble_att_clt_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom) } rsp = (struct ble_att_prep_write_cmd *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "prep write rsp", conn_handle, - ble_att_prep_write_cmd_log, rsp); handle = le16toh(rsp->bapc_handle); offset = le16toh(rsp->bapc_offset); @@ -908,9 +855,6 @@ ble_att_clt_tx_exec_write(uint16_t conn_handle, uint8_t flags) return rc; } - BLE_ATT_LOG_CMD(1, "exec write req", conn_handle, - ble_att_exec_write_req_log, req); - return 0; } @@ -921,8 +865,6 @@ ble_att_clt_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "exec write rsp", conn_handle); - ble_gattc_rx_exec_write_rsp(conn_handle, 0); return 0; } @@ -957,8 +899,6 @@ ble_att_clt_tx_notify(uint16_t conn_handle, uint16_t handle, req->banq_handle = htole16(handle); os_mbuf_concat(txom2, txom); - BLE_ATT_LOG_CMD(1, "notify req", conn_handle, ble_att_notify_req_log, req); - return ble_att_tx(conn_handle, txom2); err: @@ -996,9 +936,6 @@ ble_att_clt_tx_indicate(uint16_t conn_handle, uint16_t handle, req->baiq_handle = htole16(handle); os_mbuf_concat(txom2, txom); - BLE_ATT_LOG_CMD(1, "indicate req", conn_handle, ble_att_indicate_req_log, - req); - return ble_att_tx(conn_handle, txom2); err: @@ -1013,8 +950,6 @@ ble_att_clt_rx_indicate(uint16_t conn_handle, struct os_mbuf **rxom) return BLE_HS_ENOTSUP; #endif - BLE_ATT_LOG_EMPTY_CMD(0, "indicate rsp", conn_handle); - /* No payload. */ ble_gattc_rx_indicate_rsp(conn_handle); return 0; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd.c index bad192df5..81b070f9c 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd.c @@ -135,13 +135,6 @@ ble_att_error_rsp_write(void *payload, int len, dst->baep_error_code = src->baep_error_code; } -void -ble_att_error_rsp_log(const struct ble_att_error_rsp *cmd) -{ - BLE_HS_LOG(DEBUG, "req_op=%d handle=0x%04x error_code=%d", - cmd->baep_req_op, cmd->baep_handle, cmd->baep_error_code); -} - void ble_att_mtu_req_parse(const void *payload, int len, struct ble_att_mtu_cmd *dst) @@ -189,12 +182,6 @@ ble_att_mtu_rsp_write(void *payload, int len, dst->bamc_mtu = htole16(src->bamc_mtu); } -void -ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd *cmd) -{ - BLE_HS_LOG(DEBUG, "mtu=%d", cmd->bamc_mtu); -} - void ble_att_find_info_req_parse(const void *payload, int len, struct ble_att_find_info_req *dst) @@ -221,13 +208,6 @@ ble_att_find_info_req_write(void *payload, int len, dst->bafq_end_handle = htole16(src->bafq_end_handle); } -void -ble_att_find_info_req_log(const struct ble_att_find_info_req *cmd) -{ - BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x", - cmd->bafq_start_handle, cmd->bafq_end_handle); -} - void ble_att_find_info_rsp_parse(const void *payload, int len, struct ble_att_find_info_rsp *dst) @@ -252,12 +232,6 @@ ble_att_find_info_rsp_write(void *payload, int len, dst->bafp_format = src->bafp_format; } -void -ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp *cmd) -{ - BLE_HS_LOG(DEBUG, "format=%d", cmd->bafp_format); -} - void ble_att_find_type_value_req_parse(const void *payload, int len, struct ble_att_find_type_value_req *dst) @@ -286,14 +260,6 @@ ble_att_find_type_value_req_write( dst->bavq_attr_type = htole16(src->bavq_attr_type); } -void -ble_att_find_type_value_req_log(const struct ble_att_find_type_value_req *cmd) -{ - BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x attr_type=%d", - cmd->bavq_start_handle, cmd->bavq_end_handle, - cmd->bavq_attr_type); -} - void ble_att_read_type_req_parse(const void *payload, int len, struct ble_att_read_type_req *dst) @@ -320,13 +286,6 @@ ble_att_read_type_req_write(void *payload, int len, dst->batq_end_handle = htole16(src->batq_end_handle); } -void -ble_att_read_type_req_log(const struct ble_att_read_type_req *cmd) -{ - BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x", - cmd->batq_start_handle, cmd->batq_end_handle); -} - void ble_att_read_type_rsp_parse(const void *payload, int len, struct ble_att_read_type_rsp *dst) @@ -351,12 +310,6 @@ ble_att_read_type_rsp_write(void *payload, int len, dst->batp_length = src->batp_length; } -void -ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp *cmd) -{ - BLE_HS_LOG(DEBUG, "length=%d", cmd->batp_length); -} - void ble_att_read_req_parse(const void *payload, int len, struct ble_att_read_req *dst) @@ -381,12 +334,6 @@ ble_att_read_req_write(void *payload, int len, dst->barq_handle = htole16(src->barq_handle); } -void -ble_att_read_req_log(const struct ble_att_read_req *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->barq_handle); -} - void ble_att_read_blob_req_parse(const void *payload, int len, struct ble_att_read_blob_req *dst) @@ -413,13 +360,6 @@ ble_att_read_blob_req_write(void *payload, int len, dst->babq_offset = htole16(src->babq_offset); } -void -ble_att_read_blob_req_log(const struct ble_att_read_blob_req *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x offset=%d", cmd->babq_handle, - cmd->babq_offset); -} - void ble_att_read_mult_req_parse(const void *payload, int len) { @@ -474,13 +414,6 @@ ble_att_read_group_type_req_write( dst->bagq_end_handle = htole16(src->bagq_end_handle); } -void -ble_att_read_group_type_req_log(const struct ble_att_read_group_type_req *cmd) -{ - BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x", - cmd->bagq_start_handle, cmd->bagq_end_handle); -} - void ble_att_read_group_type_rsp_parse(const void *payload, int len, struct ble_att_read_group_type_rsp *dst) @@ -505,12 +438,6 @@ ble_att_read_group_type_rsp_write( dst->bagp_length = src->bagp_length; } -void -ble_att_read_group_type_rsp_log(const struct ble_att_read_group_type_rsp *cmd) -{ - BLE_HS_LOG(DEBUG, "length=%d", cmd->bagp_length); -} - void ble_att_write_req_parse(const void *payload, int len, struct ble_att_write_req *dst) @@ -556,18 +483,6 @@ ble_att_write_cmd_write(void *payload, int len, dst->bawq_handle = htole16(src->bawq_handle); } -void -ble_att_write_cmd_log(const struct ble_att_write_cmd *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->handle); -} - -void -ble_att_write_req_log(const struct ble_att_write_req *req) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x", req->bawq_handle); -} - void ble_att_prep_write_req_parse(const void *payload, int len, struct ble_att_prep_write_cmd *dst) @@ -620,13 +535,6 @@ ble_att_prep_write_rsp_write(void *payload, int len, dst->bapc_offset = htole16(src->bapc_offset); } -void -ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x offset=%d", cmd->bapc_handle, - cmd->bapc_offset); -} - void ble_att_exec_write_req_parse(const void *payload, int len, struct ble_att_exec_write_req *dst) @@ -651,12 +559,6 @@ ble_att_exec_write_req_write(void *payload, int len, dst->baeq_flags = src->baeq_flags; } -void -ble_att_exec_write_req_log(const struct ble_att_exec_write_req *cmd) -{ - BLE_HS_LOG(DEBUG, "flags=0x%02x", cmd->baeq_flags); -} - void ble_att_exec_write_rsp_parse(const void *payload, int len) { @@ -695,12 +597,6 @@ ble_att_notify_req_write(void *payload, int len, dst->banq_handle = htole16(src->banq_handle); } -void -ble_att_notify_req_log(const struct ble_att_notify_req *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->banq_handle); -} - void ble_att_indicate_req_parse(const void *payload, int len, struct ble_att_indicate_req *dst) @@ -725,12 +621,6 @@ ble_att_indicate_req_write(void *payload, int len, dst->baiq_handle = htole16(src->baiq_handle); } -void -ble_att_indicate_req_log(const struct ble_att_indicate_req *cmd) -{ - BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->baiq_handle); -} - void ble_att_indicate_rsp_parse(const void *payload, int len) { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd_priv.h index ddc952bff..70f33260a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_cmd_priv.h @@ -357,7 +357,6 @@ void ble_att_error_rsp_parse(const void *payload, int len, struct ble_att_error_rsp *rsp); void ble_att_error_rsp_write(void *payload, int len, const struct ble_att_error_rsp *rsp); -void ble_att_error_rsp_log(const struct ble_att_error_rsp *cmd); void ble_att_mtu_req_parse(const void *payload, int len, struct ble_att_mtu_cmd *cmd); void ble_att_mtu_req_write(void *payload, int len, @@ -366,43 +365,34 @@ void ble_att_mtu_rsp_parse(const void *payload, int len, struct ble_att_mtu_cmd *cmd); void ble_att_mtu_rsp_write(void *payload, int len, const struct ble_att_mtu_cmd *cmd); -void ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd *cmd); void ble_att_find_info_req_parse(const void *payload, int len, struct ble_att_find_info_req *req); void ble_att_find_info_req_write(void *payload, int len, const struct ble_att_find_info_req *req); -void ble_att_find_info_req_log(const struct ble_att_find_info_req *cmd); void ble_att_find_info_rsp_parse(const void *payload, int len, struct ble_att_find_info_rsp *rsp); void ble_att_find_info_rsp_write(void *payload, int len, const struct ble_att_find_info_rsp *rsp); -void ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp *cmd); void ble_att_find_type_value_req_parse( const void *payload, int len, struct ble_att_find_type_value_req *req); void ble_att_find_type_value_req_write( void *payload, int len, const struct ble_att_find_type_value_req *req); -void ble_att_find_type_value_req_log( - const struct ble_att_find_type_value_req *cmd); void ble_att_read_type_req_parse(const void *payload, int len, struct ble_att_read_type_req *req); void ble_att_read_type_req_write(void *payload, int len, const struct ble_att_read_type_req *req); -void ble_att_read_type_req_log(const struct ble_att_read_type_req *cmd); void ble_att_read_type_rsp_parse(const void *payload, int len, struct ble_att_read_type_rsp *rsp); void ble_att_read_type_rsp_write(void *payload, int len, const struct ble_att_read_type_rsp *rsp); -void ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp *cmd); void ble_att_read_req_parse(const void *payload, int len, struct ble_att_read_req *req); void ble_att_read_req_write(void *payload, int len, const struct ble_att_read_req *req); -void ble_att_read_req_log(const struct ble_att_read_req *cmd); void ble_att_read_blob_req_parse(const void *payload, int len, struct ble_att_read_blob_req *req); void ble_att_read_blob_req_write(void *payload, int len, const struct ble_att_read_blob_req *req); -void ble_att_read_blob_req_log(const struct ble_att_read_blob_req *cmd); void ble_att_read_mult_req_parse(const void *payload, int len); void ble_att_read_mult_req_write(void *payload, int len); void ble_att_read_mult_rsp_parse(const void *payload, int len); @@ -411,14 +401,10 @@ void ble_att_read_group_type_req_parse( const void *payload, int len, struct ble_att_read_group_type_req *req); void ble_att_read_group_type_req_write( void *payload, int len, const struct ble_att_read_group_type_req *req); -void ble_att_read_group_type_req_log( - const struct ble_att_read_group_type_req *cmd); void ble_att_read_group_type_rsp_parse( const void *payload, int len, struct ble_att_read_group_type_rsp *rsp); void ble_att_read_group_type_rsp_write( void *payload, int len, const struct ble_att_read_group_type_rsp *rsp); -void ble_att_read_group_type_rsp_log( - const struct ble_att_read_group_type_rsp *cmd); void ble_att_write_req_parse(const void *payload, int len, struct ble_att_write_req *req); void ble_att_write_req_write(void *payload, int len, @@ -427,20 +413,16 @@ void ble_att_write_cmd_parse(const void *payload, int len, struct ble_att_write_req *req); void ble_att_write_cmd_write(void *payload, int len, const struct ble_att_write_req *req); -void ble_att_write_cmd_log(const struct ble_att_write_cmd *cmd); -void ble_att_write_req_log(const struct ble_att_write_req *req); void ble_att_prep_write_req_parse(const void *payload, int len, struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_req_write(void *payload, int len, const struct ble_att_prep_write_cmd *cmd); -void ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_rsp_parse(const void *payload, int len, struct ble_att_prep_write_cmd *cmd); void ble_att_prep_write_rsp_write(void *payload, int len, const struct ble_att_prep_write_cmd *cmd); void ble_att_exec_write_req_parse(const void *payload, int len, struct ble_att_exec_write_req *req); -void ble_att_exec_write_req_log(const struct ble_att_exec_write_req *cmd); void ble_att_exec_write_req_write(void *payload, int len, const struct ble_att_exec_write_req *req); void ble_att_exec_write_rsp_parse(const void *payload, int len); @@ -449,14 +431,12 @@ void ble_att_notify_req_parse(const void *payload, int len, struct ble_att_notify_req *req); void ble_att_notify_req_write(void *payload, int len, const struct ble_att_notify_req *req); -void ble_att_notify_req_log(const struct ble_att_notify_req *cmd); void ble_att_indicate_req_parse(const void *payload, int len, struct ble_att_indicate_req *req); void ble_att_indicate_req_write(void *payload, int len, const struct ble_att_indicate_req *req); void ble_att_indicate_rsp_parse(const void *payload, int len); void ble_att_indicate_rsp_write(void *payload, int len); -void ble_att_indicate_req_log(const struct ble_att_indicate_req *cmd); void *ble_att_cmd_prepare(uint8_t opcode, size_t len, struct os_mbuf *txom); void *ble_att_cmd_get(uint8_t opcode, size_t len, struct os_mbuf **txom); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_priv.h index 2201d4ddb..73b6aeab0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_priv.h @@ -170,12 +170,6 @@ void ble_att_set_peer_mtu(struct ble_l2cap_chan *chan, uint16_t peer_mtu); uint16_t ble_att_chan_mtu(const struct ble_l2cap_chan *chan); int ble_att_init(void); -#define BLE_ATT_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ - BLE_HS_LOG_CMD((is_tx), "att", (cmd_name), (conn_handle), (log_cb), (cmd)) - -#define BLE_ATT_LOG_EMPTY_CMD(is_tx, cmd_name, conn_handle) \ - BLE_HS_LOG_EMPTY_CMD((is_tx), "att", (cmd_name), (conn_handle)) - /*** @svr */ int ble_att_svr_start(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_svr.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_svr.c index 045c1ca06..afcf90372 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_svr.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_att_svr.c @@ -578,8 +578,6 @@ ble_att_svr_tx_error_rsp(uint16_t conn_handle, struct os_mbuf *txom, rsp->baep_handle = htole16(handle); rsp->baep_error_code = error_code; - BLE_ATT_LOG_CMD(1, "error rsp", conn_handle, ble_att_error_rsp_log, rsp); - return ble_att_tx(conn_handle, txom); } @@ -706,8 +704,6 @@ ble_att_svr_build_mtu_rsp(uint16_t conn_handle, struct os_mbuf **rxom, cmd->bamc_mtu = htole16(mtu); - BLE_ATT_LOG_CMD(1, "mtu rsp", conn_handle, ble_att_mtu_cmd_log, cmd); - rc = 0; done: @@ -735,7 +731,6 @@ ble_att_svr_rx_mtu(uint16_t conn_handle, struct os_mbuf **rxom) } cmd = (struct ble_att_mtu_cmd *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "mtu req", conn_handle, ble_att_mtu_cmd_log, cmd); mtu = le16toh(cmd->bamc_mtu); @@ -889,9 +884,6 @@ ble_att_svr_build_find_info_rsp(uint16_t conn_handle, goto done; } - BLE_ATT_LOG_CMD(1, "find info rsp", conn_handle, ble_att_find_info_rsp_log, - rsp); - rc = 0; done: @@ -927,9 +919,6 @@ ble_att_svr_rx_find_info(uint16_t conn_handle, struct os_mbuf **rxom) start_handle = le16toh(req->bafq_start_handle); end_handle = le16toh(req->bafq_end_handle); - BLE_ATT_LOG_CMD(0, "find info req", conn_handle, ble_att_find_info_req_log, - req); - /* Tx error response if start handle is greater than end handle or is equal * to 0 (Vol. 3, Part F, 3.4.3.1). */ @@ -1202,8 +1191,6 @@ ble_att_svr_build_find_type_value_rsp(uint16_t conn_handle, goto done; } - BLE_ATT_LOG_EMPTY_CMD(1, "find type value rsp", conn_handle); - rc = 0; done: @@ -1240,8 +1227,6 @@ ble_att_svr_rx_find_type_value(uint16_t conn_handle, struct os_mbuf **rxom) start_handle = le16toh(req->bavq_start_handle); end_handle = le16toh(req->bavq_end_handle); attr_type = (ble_uuid16_t) BLE_UUID16_INIT(le16toh(req->bavq_attr_type)); - BLE_ATT_LOG_CMD(0, "find type value req", conn_handle, - ble_att_find_type_value_req_log, req); /* Tx error response if start handle is greater than end handle or is equal * to 0 (Vol. 3, Part F, 3.4.3.3). @@ -1377,8 +1362,6 @@ done: /* Fill the response base. */ rsp->batp_length = htole16(sizeof(*data) + prev_attr_len); - BLE_ATT_LOG_CMD(1, "read type rsp", conn_handle, - ble_att_read_type_rsp_log, rsp); } *out_txom = txom; @@ -1421,9 +1404,6 @@ ble_att_svr_rx_read_type(uint16_t conn_handle, struct os_mbuf **rxom) req = (struct ble_att_read_type_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read type req", conn_handle, ble_att_read_type_req_log, - req); - start_handle = le16toh(req->batq_start_handle); end_handle = le16toh(req->batq_end_handle); @@ -1481,7 +1461,6 @@ ble_att_svr_rx_read(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_read_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read req", conn_handle, ble_att_read_req_log, req); err_handle = le16toh(req->barq_handle); @@ -1531,8 +1510,6 @@ ble_att_svr_rx_read_blob(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_read_blob_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read blob req", conn_handle, ble_att_read_blob_req_log, - req); err_handle = le16toh(req->babq_handle); offset = le16toh(req->babq_offset); @@ -1554,8 +1531,6 @@ ble_att_svr_rx_read_blob(uint16_t conn_handle, struct os_mbuf **rxom) goto done; } - BLE_ATT_LOG_EMPTY_CMD(1, "read blob rsp", conn_handle); - rc = 0; done: @@ -1618,7 +1593,6 @@ ble_att_svr_build_read_mult_rsp(uint16_t conn_handle, } } - BLE_ATT_LOG_EMPTY_CMD(1, "read mult rsp", conn_handle); rc = 0; done: @@ -1638,8 +1612,6 @@ ble_att_svr_rx_read_mult(uint16_t conn_handle, struct os_mbuf **rxom) uint8_t att_err; int rc; - BLE_ATT_LOG_EMPTY_CMD(0, "read mult req", conn_handle); - /* Initialize some values in case of early error. */ txom = NULL; err_handle = 0; @@ -1875,8 +1847,6 @@ done: } if (rc == 0 || rc == BLE_HS_EMSGSIZE) { - BLE_ATT_LOG_CMD(1, "read group type rsp", conn_handle, - ble_att_read_group_type_rsp_log, rsp); rc = 0; } @@ -1918,8 +1888,6 @@ ble_att_svr_rx_read_group_type(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_read_group_type_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "read group type req", conn_handle, - ble_att_read_group_type_req_log, req); start_handle = le16toh(req->bagq_start_handle); end_handle = le16toh(req->bagq_end_handle); @@ -2017,9 +1985,6 @@ ble_att_svr_rx_write(uint16_t conn_handle, struct os_mbuf **rxom) req = (struct ble_att_write_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "write req", conn_handle, - ble_att_write_req_log, req); - handle = le16toh(req->bawq_handle); /* Allocate the write response. This must be done prior to processing the @@ -2038,8 +2003,6 @@ ble_att_svr_rx_write(uint16_t conn_handle, struct os_mbuf **rxom) goto done; } - BLE_ATT_LOG_EMPTY_CMD(1, "write rsp", conn_handle); - rc = 0; done: @@ -2066,8 +2029,6 @@ ble_att_svr_rx_write_no_rsp(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_write_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "write cmd", conn_handle, - ble_att_write_req_log, req); handle = le16toh(req->bawq_handle); @@ -2362,9 +2323,6 @@ ble_att_svr_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom) req = (struct ble_att_prep_write_cmd *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "prep write req", conn_handle, - ble_att_prep_write_cmd_log, req); - err_handle = le16toh(req->bapc_handle); attr_entry = ble_att_svr_find_by_handle(le16toh(req->bapc_handle)); @@ -2412,9 +2370,6 @@ ble_att_svr_rx_prep_write(uint16_t conn_handle, struct os_mbuf **rxom) os_mbuf_prepend(txom, 1); txom->om_data[0] = BLE_ATT_OP_PREP_WRITE_RSP; - BLE_ATT_LOG_CMD(1, "prep write rsp", conn_handle, - ble_att_prep_write_cmd_log, req); - rc = 0; done: @@ -2450,8 +2405,6 @@ ble_att_svr_rx_exec_write(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_exec_write_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "exec write req", conn_handle, - ble_att_exec_write_req_log, req); flags = req->baeq_flags; @@ -2518,9 +2471,6 @@ ble_att_svr_rx_notify(uint16_t conn_handle, struct os_mbuf **rxom) req = (struct ble_att_notify_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "notify req", conn_handle, - ble_att_notify_req_log, req); - handle = le16toh(req->banq_handle); if (handle == 0) { @@ -2592,8 +2542,6 @@ ble_att_svr_rx_indicate(uint16_t conn_handle, struct os_mbuf **rxom) } req = (struct ble_att_indicate_req *)(*rxom)->om_data; - BLE_ATT_LOG_CMD(0, "indicate req", conn_handle, - ble_att_indicate_req_log, req); handle = le16toh(req->baiq_handle); @@ -2616,8 +2564,6 @@ ble_att_svr_rx_indicate(uint16_t conn_handle, struct os_mbuf **rxom) ble_gap_notify_rx_event(conn_handle, handle, *rxom, 1); *rxom = NULL; - BLE_ATT_LOG_EMPTY_CMD(1, "indicate rsp", conn_handle); - rc = 0; done: diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap.c index d77ff6a87..17ff4eae0 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap.c @@ -90,6 +90,7 @@ #define BLE_GAP_UPDATE_TIMEOUT_MS 40000 /* ms */ +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) static const struct ble_gap_conn_params ble_gap_conn_params_dflt = { .scan_itvl = 0x0010, .scan_window = 0x0010, @@ -100,6 +101,22 @@ static const struct ble_gap_conn_params ble_gap_conn_params_dflt = { .min_ce_len = BLE_GAP_INITIAL_CONN_MIN_CE_LEN, .max_ce_len = BLE_GAP_INITIAL_CONN_MAX_CE_LEN, }; +#endif + +#if NIMBLE_BLE_CONNECT && CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT +struct ble_gap_connect_reattempt_ctxt { + uint8_t own_addr_type; + ble_addr_t peer_addr; + int32_t duration_ms; + struct ble_gap_conn_params conn_params; + ble_gap_event_fn *cb; + void *cb_arg; +}; + +static struct ble_gap_connect_reattempt_ctxt ble_conn_reattempt[MYNEWT_VAL(BLE_MAX_CONNECTIONS)]; +static uint16_t reattempt_idx; +static bool conn_cookie_enabled; +#endif /** * The state of the in-progress master connection. If no master connection is @@ -165,6 +182,7 @@ struct ble_gap_slave_state { unsigned int configured:1; /** If instance is configured */ unsigned int scannable:1; unsigned int directed:1; + unsigned int high_duty_directed:1; unsigned int legacy_pdu:1; unsigned int rnd_addr_set:1; #if MYNEWT_VAL(BLE_PERIODIC_ADV) @@ -206,15 +224,23 @@ static struct os_mempool ble_gap_update_entry_pool; static struct ble_gap_update_entry_list ble_gap_update_entries; static void ble_gap_update_entry_free(struct ble_gap_update_entry *entry); + +#if NIMBLE_BLE_CONNECT static struct ble_gap_update_entry * ble_gap_update_entry_find(uint16_t conn_handle, struct ble_gap_update_entry **out_prev); -static struct ble_gap_update_entry * -ble_gap_update_entry_remove(uint16_t conn_handle); + static void ble_gap_update_l2cap_cb(uint16_t conn_handle, int status, void *arg); +#endif +static struct ble_gap_update_entry * +ble_gap_update_entry_remove(uint16_t conn_handle); + +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static int ble_gap_adv_enable_tx(int enable); +#endif + static int ble_gap_conn_cancel_tx(void); #if NIMBLE_BLE_SCAN && !MYNEWT_VAL(BLE_EXT_ADV) @@ -290,7 +316,7 @@ ble_gap_log_duration(int32_t duration_ms) } #endif -#if !MYNEWT_VAL(BLE_EXT_ADV) +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) && !MYNEWT_VAL(BLE_EXT_ADV) static void ble_gap_log_conn(uint8_t own_addr_type, const ble_addr_t *peer_addr, const struct ble_gap_conn_params *params) @@ -322,6 +348,7 @@ ble_gap_log_disc(uint8_t own_addr_type, int32_t duration_ms, } #endif +#if NIMBLE_BLE_CONNECT static void ble_gap_log_update(uint16_t conn_handle, const struct ble_gap_upd_params *params) @@ -333,7 +360,9 @@ ble_gap_log_update(uint16_t conn_handle, params->latency, params->supervision_timeout, params->min_ce_len, params->max_ce_len); } +#endif +#if MYNEWT_VAL(BLE_WHITELIST) static void ble_gap_log_wl(const ble_addr_t *addr, uint8_t white_list_count) { @@ -347,6 +376,7 @@ ble_gap_log_wl(const ble_addr_t *addr, uint8_t white_list_count) BLE_HS_LOG(INFO, "} "); } } +#endif #if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static void @@ -527,10 +557,9 @@ ble_gap_set_priv_mode(const ble_addr_t *peer_addr, uint8_t priv_mode) int ble_gap_read_le_phy(uint16_t conn_handle, uint8_t *tx_phy, uint8_t *rx_phy) { + struct ble_hci_le_rd_phy_cp cmd; + struct ble_hci_le_rd_phy_rp rsp; struct ble_hs_conn *conn; - uint8_t buf[BLE_HCI_LE_RD_PHY_LEN]; - uint8_t rspbuf[4]; - uint8_t rsplen; int rc; ble_hs_lock(); @@ -541,25 +570,21 @@ ble_gap_read_le_phy(uint16_t conn_handle, uint8_t *tx_phy, uint8_t *rx_phy) return BLE_HS_ENOTCONN; } - rc = ble_hs_hci_cmd_build_le_read_phy(conn_handle, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + cmd.conn_handle = htole16(conn_handle); rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_PHY), - buf, sizeof(buf), rspbuf, sizeof(rspbuf), &rsplen); + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (rsplen != sizeof(rspbuf)) { + /* sanity check for response */ + if (le16toh(rsp.conn_handle) != conn_handle) { return BLE_HS_ECONTROLLER; } - /* First two octets is conn_handle. We can ignore it */ - - *tx_phy = rspbuf[2]; - *rx_phy = rspbuf[3]; + *tx_phy = rsp.tx_phy; + *rx_phy = rsp.rx_phy; return 0; } @@ -567,27 +592,45 @@ ble_gap_read_le_phy(uint16_t conn_handle, uint8_t *tx_phy, uint8_t *rx_phy) int ble_gap_set_prefered_default_le_phy(uint8_t tx_phys_mask, uint8_t rx_phys_mask) { - uint8_t buf[BLE_HCI_LE_SET_DEFAULT_PHY_LEN]; - int rc; + struct ble_hci_le_set_default_phy_cp cmd; - rc = ble_hs_hci_cmd_build_le_set_default_phy(tx_phys_mask, rx_phys_mask, - buf, sizeof(buf)); - if (rc != 0) { - return rc; + if (tx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | + BLE_HCI_LE_PHY_2M_PREF_MASK | + BLE_HCI_LE_PHY_CODED_PREF_MASK)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + if (rx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | + BLE_HCI_LE_PHY_2M_PREF_MASK | + BLE_HCI_LE_PHY_CODED_PREF_MASK)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + memset(&cmd, 0, sizeof(cmd)); + + if (tx_phys_mask == 0) { + cmd.all_phys |= BLE_HCI_LE_PHY_NO_TX_PREF_MASK; + } else { + cmd.tx_phys = tx_phys_mask; + } + + if (rx_phys_mask == 0) { + cmd.all_phys |= BLE_HCI_LE_PHY_NO_RX_PREF_MASK; + } else { + cmd.rx_phys = rx_phys_mask; } return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_DEFAULT_PHY), - buf, sizeof(buf), NULL, 0, NULL); + &cmd, sizeof(cmd), NULL, 0); } int ble_gap_set_prefered_le_phy(uint16_t conn_handle, uint8_t tx_phys_mask, uint8_t rx_phys_mask, uint16_t phy_opts) { + struct ble_hci_le_set_phy_cp cmd; struct ble_hs_conn *conn; - uint8_t buf[BLE_HCI_LE_SET_PHY_LEN]; - int rc; ble_hs_lock(); conn = ble_hs_conn_find(conn_handle); @@ -597,16 +640,41 @@ ble_gap_set_prefered_le_phy(uint16_t conn_handle, uint8_t tx_phys_mask, return BLE_HS_ENOTCONN; } - rc = ble_hs_hci_cmd_build_le_set_phy(conn_handle, tx_phys_mask, - rx_phys_mask, phy_opts, buf, - sizeof(buf)); - if (rc != 0) { - return rc; + if (tx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | + BLE_HCI_LE_PHY_2M_PREF_MASK | + BLE_HCI_LE_PHY_CODED_PREF_MASK)) { + return BLE_ERR_INV_HCI_CMD_PARMS; } - return ble_hs_hci_cmd_tx( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PHY), - buf, sizeof(buf), NULL, 0, NULL); + if (rx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | + BLE_HCI_LE_PHY_2M_PREF_MASK | + BLE_HCI_LE_PHY_CODED_PREF_MASK)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + if (phy_opts > BLE_HCI_LE_PHY_CODED_S8_PREF) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + memset(&cmd, 0, sizeof(cmd)); + cmd.conn_handle = htole16(conn_handle); + + if (tx_phys_mask == 0) { + cmd.all_phys |= BLE_HCI_LE_PHY_NO_TX_PREF_MASK; + } else { + cmd.tx_phys = tx_phys_mask; + } + + if (rx_phys_mask == 0) { + cmd.all_phys |= BLE_HCI_LE_PHY_NO_RX_PREF_MASK; + } else { + cmd.rx_phys = rx_phys_mask; + } + + cmd.phy_options = htole16(phy_opts); + + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PHY), + &cmd, sizeof(cmd), NULL, 0); } /***************************************************************************** @@ -679,6 +747,7 @@ ble_gap_is_preempted(void) return false; } +#if NIMBLE_BLE_CONNECT static void ble_gap_master_reset_state(void) { @@ -688,6 +757,7 @@ ble_gap_master_reset_state(void) ble_hs_timer_resched(); } +#endif static void ble_gap_slave_reset_state(uint8_t instance) @@ -700,6 +770,7 @@ ble_gap_slave_reset_state(uint8_t instance) #endif } +#if NIMBLE_BLE_CONNECT static bool ble_gap_has_client(struct ble_gap_master_state *out_state) { @@ -725,6 +796,7 @@ ble_gap_master_extract_state(struct ble_gap_master_state *out_state, ble_hs_unlock(); } +#endif static void ble_gap_slave_extract_cb(uint8_t instance, @@ -747,41 +819,24 @@ ble_gap_adv_finished(uint8_t instance, int reason, uint16_t conn_handle, ble_gap_event_fn *cb; void *cb_arg; + memset(&event, 0, sizeof event); + event.type = BLE_GAP_EVENT_ADV_COMPLETE; + event.adv_complete.reason = reason; +#if MYNEWT_VAL(BLE_EXT_ADV) + event.adv_complete.instance = instance; + event.adv_complete.conn_handle = conn_handle; + event.adv_complete.num_ext_adv_events = num_events; +#endif + + ble_gap_event_listener_call(&event); + ble_gap_slave_extract_cb(instance, &cb, &cb_arg); if (cb != NULL) { - memset(&event, 0, sizeof event); - event.type = BLE_GAP_EVENT_ADV_COMPLETE; - event.adv_complete.reason = reason; -#if MYNEWT_VAL(BLE_EXT_ADV) - event.adv_complete.instance = instance; - event.adv_complete.conn_handle = conn_handle; - event.adv_complete.num_ext_adv_events = num_events; -#endif cb(&event, cb_arg); } } -#if MYNEWT_VAL(BLE_EXT_ADV) -static void -ble_gap_scan_req_rcvd(uint8_t instance, uint8_t scan_addr_type, - uint8_t *scan_addr) -{ - struct ble_gap_event event; - ble_gap_event_fn *cb; - void *cb_arg; - - ble_gap_slave_extract_cb(instance, &cb, &cb_arg); - if (cb != NULL) { - memset(&event, 0, sizeof event); - event.type = BLE_GAP_EVENT_SCAN_REQ_RCVD; - event.scan_req_rcvd.instance = instance; - event.scan_req_rcvd.scan_addr.type = scan_addr_type; - memcpy(event.scan_req_rcvd.scan_addr.val, scan_addr, 6); - cb(&event, cb_arg); - } -} -#endif - +#if NIMBLE_BLE_CONNECT static int ble_gap_master_connect_failure(int status) { @@ -825,6 +880,95 @@ ble_gap_master_connect_cancelled(void) } } +#if CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT +static void +ble_gap_update_notify(uint16_t conn_handle, int status); + +static int +ble_gap_find_retry_conn_param(const struct ble_gap_conn_desc *conn_desc) +{ + int i; + + for(i = 0; i < MYNEWT_VAL(BLE_MAX_CONNECTIONS); i++) { + if (memcmp(&ble_conn_reattempt[i].peer_addr, &conn_desc->peer_ota_addr, sizeof(ble_addr_t)) == 0) { + return i; + } + } + /* No matching entry found. Return invalid index */ + return MYNEWT_VAL(BLE_MAX_CONNECTIONS); +} + +int +ble_gap_master_connect_reattempt(uint16_t conn_handle) +{ + struct ble_gap_snapshot snap; + struct ble_gap_conn_desc conn; + struct ble_gap_update_entry *entry; + int idx; + int rc = BLE_HS_EUNKNOWN; + + snap.desc = &conn; + rc = ble_gap_find_snapshot(conn_handle, &snap); + if (rc != 0) { + return rc; + } + + if (conn.role == BLE_GAP_ROLE_MASTER) { + idx = ble_gap_find_retry_conn_param(&conn); + if (idx >= MYNEWT_VAL(BLE_MAX_CONNECTIONS)) { + return BLE_HS_EINVAL; + } + + /* XXX Connection state in host needs to be removed and cleaned + * up to validate the connection when re-attempting. */ + + /* If there was a connection update in progress, indicate to the + * application that it did not complete. + */ + ble_hs_lock(); + entry = ble_gap_update_entry_remove(conn_handle); + ble_hs_unlock(); + + if (entry != NULL) { + ble_gap_update_notify(conn_handle, BLE_ERR_CONN_ESTABLISHMENT); + ble_gap_update_entry_free(entry); + } + + ble_l2cap_sig_conn_broken(conn_handle, BLE_ERR_CONN_ESTABLISHMENT); + ble_sm_connection_broken(conn_handle); + ble_gatts_connection_broken(conn_handle); + ble_gattc_connection_broken(conn_handle); + ble_hs_flow_connection_broken(conn_handle);; + + rc = ble_hs_atomic_conn_delete(conn_handle); + if (rc != 0) { + return rc; + } + + /* Utilize cookie to get the index updated correctly for re-attempt */ + ble_conn_reattempt[idx].cb_arg = &conn; + conn_cookie_enabled = true; + + rc = ble_gap_connect(ble_conn_reattempt[idx].own_addr_type, + &ble_conn_reattempt[idx].peer_addr, + ble_conn_reattempt[idx].duration_ms, + &ble_conn_reattempt[idx].conn_params, + ble_conn_reattempt[idx].cb, + ble_conn_reattempt[idx].cb_arg); + if (rc != 0) { + return rc; + } + } else { + rc = BLE_HS_EUNKNOWN; + } + + return rc; +} +#endif + +#endif + +#if NIMBLE_BLE_SCAN static void ble_gap_disc_report(void *desc) { @@ -848,7 +992,6 @@ ble_gap_disc_report(void *desc) ble_gap_event_listener_call(&event); } -#if NIMBLE_BLE_SCAN static void ble_gap_disc_complete(void) { @@ -907,7 +1050,7 @@ ble_gap_master_ticks_until_exp(void) return 0; } -#if !MYNEWT_VAL(BLE_EXT_ADV) +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static uint32_t ble_gap_slave_ticks_until_exp(void) { @@ -975,6 +1118,7 @@ ble_gap_update_next_exp(int32_t *out_ticks_from_now) } +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) static void ble_gap_master_set_timer(uint32_t ticks_from_now) { @@ -983,6 +1127,7 @@ ble_gap_master_set_timer(uint32_t ticks_from_now) ble_hs_timer_resched(); } +#endif #if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static void @@ -995,6 +1140,7 @@ ble_gap_slave_set_timer(uint32_t ticks_from_now) } #endif +#if NIMBLE_BLE_CONNECT /** * Called when an error is encountered while the master-connection-fsm is * active. @@ -1017,7 +1163,7 @@ ble_gap_master_failed(int status) #endif default: - //BLE_HS_DBG_ASSERT(0); + BLE_HS_DBG_ASSERT(0); break; } } @@ -1037,6 +1183,7 @@ ble_gap_update_failed(uint16_t conn_handle, int status) ble_gap_update_notify(conn_handle, status); } +#endif void ble_gap_conn_broken(uint16_t conn_handle, int reason) @@ -1088,6 +1235,7 @@ ble_gap_conn_broken(uint16_t conn_handle, int reason) STATS_INC(ble_gap_stats, disconnect); } +#if NIMBLE_BLE_CONNECT static void ble_gap_update_to_l2cap(const struct ble_gap_upd_params *params, struct ble_l2cap_sig_update_params *l2cap_params) @@ -1097,43 +1245,40 @@ ble_gap_update_to_l2cap(const struct ble_gap_upd_params *params, l2cap_params->slave_latency = params->latency; l2cap_params->timeout_multiplier = params->supervision_timeout; } - -void -ble_gap_rx_disconn_complete(struct hci_disconn_complete *evt) -{ -#if !NIMBLE_BLE_CONNECT - return; #endif +void +ble_gap_rx_disconn_complete(const struct ble_hci_ev_disconn_cmp *ev) +{ +#if NIMBLE_BLE_CONNECT struct ble_gap_event event; + uint16_t handle = le16toh(ev->conn_handle); STATS_INC(ble_gap_stats, rx_disconnect); - if (evt->status == 0) { - ble_gap_conn_broken(evt->connection_handle, - BLE_HS_HCI_ERR(evt->reason)); + if (ev->status == 0) { + ble_gap_conn_broken(handle, BLE_HS_HCI_ERR(ev->reason)); } else { memset(&event, 0, sizeof event); event.type = BLE_GAP_EVENT_TERM_FAILURE; - event.term_failure.conn_handle = evt->connection_handle; - event.term_failure.status = BLE_HS_HCI_ERR(evt->status); + event.term_failure.conn_handle = handle; + event.term_failure.status = BLE_HS_HCI_ERR(ev->status); ble_gap_event_listener_call(&event); - ble_gap_call_conn_event_cb(&event, evt->connection_handle); + ble_gap_call_conn_event_cb(&event, handle); } +#endif } void -ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt) +ble_gap_rx_update_complete(const struct ble_hci_ev_le_subev_conn_upd_complete *ev) { -#if !NIMBLE_BLE_CONNECT - return; -#endif - +#if NIMBLE_BLE_CONNECT struct ble_gap_update_entry *entry; struct ble_l2cap_sig_update_params l2cap_params; struct ble_gap_event event; struct ble_hs_conn *conn; + uint16_t conn_handle; int cb_status; int call_cb; int rc; @@ -1145,14 +1290,16 @@ ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt) ble_hs_lock(); - conn = ble_hs_conn_find(evt->connection_handle); + conn_handle = le16toh(ev->conn_handle); + + conn = ble_hs_conn_find(conn_handle); if (conn != NULL) { - switch (evt->status) { + switch (ev->status) { case 0: /* Connection successfully updated. */ - conn->bhc_itvl = evt->conn_itvl; - conn->bhc_latency = evt->conn_latency; - conn->bhc_supervision_timeout = evt->supervision_timeout; + conn->bhc_itvl = le16toh(ev->conn_itvl); + conn->bhc_latency = le16toh(ev->conn_latency); + conn->bhc_supervision_timeout = le16toh(ev->supervision_timeout); break; case BLE_ERR_UNSUPP_REM_FEATURE: @@ -1161,7 +1308,7 @@ ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt) * Request Procedure. If we are the slave, fail over to the L2CAP * update procedure. */ - entry = ble_gap_update_entry_find(evt->connection_handle, NULL); + entry = ble_gap_update_entry_find(conn_handle, NULL); if (entry != NULL && !(conn->bhc_flags & BLE_HS_CONN_F_MASTER)) { ble_gap_update_to_l2cap(&entry->params, &l2cap_params); entry->exp_os_ticks = ble_npl_time_get() + @@ -1176,15 +1323,14 @@ ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt) /* We aren't failing over to L2CAP, the update procedure is complete. */ if (l2cap_params.itvl_min == 0) { - entry = ble_gap_update_entry_remove(evt->connection_handle); + entry = ble_gap_update_entry_remove(conn_handle); ble_gap_update_entry_free(entry); } ble_hs_unlock(); if (l2cap_params.itvl_min != 0) { - rc = ble_l2cap_sig_update(evt->connection_handle, - &l2cap_params, + rc = ble_l2cap_sig_update(conn_handle, &l2cap_params, ble_gap_update_l2cap_cb, NULL); if (rc == 0) { call_cb = 0; @@ -1194,12 +1340,13 @@ ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt) } } else { call_cb = 1; - cb_status = BLE_HS_HCI_ERR(evt->status); + cb_status = BLE_HS_HCI_ERR(ev->status); } if (call_cb) { - ble_gap_update_notify(evt->connection_handle, cb_status); + ble_gap_update_notify(conn_handle, cb_status); } +#endif } /** @@ -1211,34 +1358,6 @@ ble_gap_master_in_progress(void) return ble_gap_master.op != BLE_GAP_OP_NULL; } -static int -ble_gap_accept_master_conn(void) -{ - int rc; - - switch (ble_gap_master.op) { - case BLE_GAP_OP_NULL: - case BLE_GAP_OP_M_DISC: - rc = BLE_HS_ENOENT; - break; - - case BLE_GAP_OP_M_CONN: - rc = 0; - break; - - default: - BLE_HS_DBG_ASSERT(0); - rc = BLE_HS_ENOENT; - break; - } - - if (rc == 0) { - STATS_INC(ble_gap_stats, connect_mst); - } - - return rc; -} - static int ble_gap_adv_active_instance(uint8_t instance) { @@ -1286,6 +1405,35 @@ ble_gap_reset_state(int reason) #endif } +#if NIMBLE_BLE_CONNECT +static int +ble_gap_accept_master_conn(void) +{ + int rc; + + switch (ble_gap_master.op) { + case BLE_GAP_OP_NULL: + case BLE_GAP_OP_M_DISC: + rc = BLE_HS_ENOENT; + break; + + case BLE_GAP_OP_M_CONN: + rc = 0; + break; + + default: + BLE_HS_DBG_ASSERT(0); + rc = BLE_HS_ENOENT; + break; + } + + if (rc == 0) { + STATS_INC(ble_gap_stats, connect_mst); + } + + return rc; +} + static int ble_gap_accept_slave_conn(uint8_t instance) { @@ -1309,9 +1457,11 @@ ble_gap_accept_slave_conn(uint8_t instance) return rc; } +#endif +#if NIMBLE_BLE_SCAN static int -ble_gap_rx_adv_report_sanity_check(uint8_t *adv_data, uint8_t adv_data_len) +ble_gap_rx_adv_report_sanity_check(const uint8_t *adv_data, uint8_t adv_data_len) { const struct ble_hs_adv_field *flags; int rc; @@ -1336,30 +1486,28 @@ ble_gap_rx_adv_report_sanity_check(uint8_t *adv_data, uint8_t adv_data_len) return 0; } +#endif void ble_gap_rx_adv_report(struct ble_gap_disc_desc *desc) { -#if !NIMBLE_BLE_SCAN - return; -#endif - +#if NIMBLE_BLE_SCAN if (ble_gap_rx_adv_report_sanity_check(desc->data, desc->length_data)) { return; } ble_gap_disc_report(desc); +#endif } -#if MYNEWT_VAL(BLE_EXT_ADV) && NIMBLE_BLE_SCAN +#if MYNEWT_VAL(BLE_EXT_ADV) +#if NIMBLE_BLE_SCAN void ble_gap_rx_le_scan_timeout(void) { ble_gap_disc_complete(); } -#endif -#if MYNEWT_VAL(BLE_EXT_ADV) void ble_gap_rx_ext_adv_report(struct ble_gap_ext_disc_desc *desc) { @@ -1369,31 +1517,43 @@ ble_gap_rx_ext_adv_report(struct ble_gap_ext_disc_desc *desc) ble_gap_disc_report(desc); } +#endif void -ble_gap_rx_adv_set_terminated(struct hci_le_adv_set_terminated *evt) +ble_gap_rx_adv_set_terminated(const struct ble_hci_ev_le_subev_adv_set_terminated *ev) { uint16_t conn_handle; int reason; /* Currently spec allows only 0x3c and 0x43 when advertising was stopped * due to timeout or events limit, mp this for timeout error for now */ - if (evt->status) { + if (ev->status) { reason = BLE_HS_ETIMEOUT; conn_handle = 0; } else { reason = 0; - conn_handle = evt->conn_handle; + conn_handle = le16toh(ev->conn_handle); } - ble_gap_adv_finished(evt->adv_handle, reason, conn_handle, - evt->completed_events); + ble_gap_adv_finished(ev->adv_handle, reason, conn_handle, ev->num_events); } void -ble_gap_rx_scan_req_rcvd(struct hci_le_scan_req_rcvd *evt) +ble_gap_rx_scan_req_rcvd(const struct ble_hci_ev_le_subev_scan_req_rcvd *ev) { - ble_gap_scan_req_rcvd(evt->adv_handle, evt->scan_addr_type, evt->scan_addr); + struct ble_gap_event event; + ble_gap_event_fn *cb; + void *cb_arg; + + ble_gap_slave_extract_cb(ev->adv_handle, &cb, &cb_arg); + if (cb != NULL) { + memset(&event, 0, sizeof event); + event.type = BLE_GAP_EVENT_SCAN_REQ_RCVD; + event.scan_req_rcvd.instance = ev->adv_handle; + event.scan_req_rcvd.scan_addr.type = ev->peer_addr_type; + memcpy(event.scan_req_rcvd.scan_addr.val, ev->peer_addr, BLE_DEV_ADDR_LEN); + cb(&event, cb_arg); + } } #endif @@ -1401,8 +1561,9 @@ ble_gap_rx_scan_req_rcvd(struct hci_le_scan_req_rcvd *evt) #if MYNEWT_VAL(BLE_PERIODIC_ADV) void -ble_gap_rx_peroidic_adv_sync_estab(struct hci_le_subev_periodic_adv_sync_estab *evt) +ble_gap_rx_peroidic_adv_sync_estab(const struct ble_hci_ev_le_subev_periodic_adv_sync_estab *ev) { + uint16_t sync_handle; struct ble_gap_event event; ble_gap_event_fn *cb; void *cb_arg; @@ -1410,27 +1571,29 @@ ble_gap_rx_peroidic_adv_sync_estab(struct hci_le_subev_periodic_adv_sync_estab * memset(&event, 0, sizeof event); event.type = BLE_GAP_EVENT_PERIODIC_SYNC; - event.periodic_sync.status = evt->status; + event.periodic_sync.status = ev->status; ble_hs_lock(); BLE_HS_DBG_ASSERT(ble_gap_sync.psync); - if (!evt->status) { - ble_gap_sync.psync->sync_handle = evt->sync_handle; - ble_gap_sync.psync->adv_sid = evt->sid; - memcpy(ble_gap_sync.psync->advertiser_addr.val, evt->adv_addr, 6); - ble_gap_sync.psync->advertiser_addr.type = evt->adv_addr_type; + if (!ev->status) { + sync_handle = le16toh(ev->sync_handle); + + ble_gap_sync.psync->sync_handle = sync_handle; + ble_gap_sync.psync->adv_sid = ev->sid; + memcpy(ble_gap_sync.psync->advertiser_addr.val, ev->peer_addr, 6); + ble_gap_sync.psync->advertiser_addr.type = ev->peer_addr_type; ble_gap_sync.psync->cb = ble_gap_sync.cb; ble_gap_sync.psync->cb_arg = ble_gap_sync.cb_arg; - event.periodic_sync.sync_handle = evt->sync_handle; - event.periodic_sync.sid = evt->sid; + event.periodic_sync.sync_handle = sync_handle; + event.periodic_sync.sid = ev->sid; event.periodic_sync.adv_addr = ble_gap_sync.psync->advertiser_addr; - event.periodic_sync.adv_phy = evt->adv_phy; - event.periodic_sync.per_adv_ival = evt->per_adv_ival; - event.periodic_sync.adv_clk_accuracy = evt->adv_clk_accuracy; + event.periodic_sync.adv_phy = ev->phy; + event.periodic_sync.per_adv_ival = ev->interval; + event.periodic_sync.adv_clk_accuracy = ev->aca; ble_hs_periodic_sync_insert(ble_gap_sync.psync); } else { @@ -1454,7 +1617,7 @@ ble_gap_rx_peroidic_adv_sync_estab(struct hci_le_subev_periodic_adv_sync_estab * } void -ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt) +ble_gap_rx_periodic_adv_rpt(const struct ble_hci_ev_le_subev_periodic_adv_rpt *ev) { struct ble_hs_periodic_sync *psync; struct ble_gap_event event; @@ -1462,7 +1625,7 @@ ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt) void *cb_arg = NULL; ble_hs_lock(); - psync = ble_hs_periodic_sync_find_by_handle(evt->sync_handle); + psync = ble_hs_periodic_sync_find_by_handle(le16toh(ev->sync_handle)); if (psync) { cb = psync->cb; cb_arg = psync->cb_arg; @@ -1476,12 +1639,12 @@ ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt) memset(&event, 0, sizeof event); event.type = BLE_GAP_EVENT_PERIODIC_REPORT; - event.periodic_report.sync_handle = evt->sync_handle; - event.periodic_report.tx_power = evt->tx_power; - event.periodic_report.rssi = evt->rssi; - event.periodic_report.data_status = evt->data_status; - event.periodic_report.data_length = evt->data_length; - event.periodic_report.data = evt->data; + event.periodic_report.sync_handle = psync->sync_handle; + event.periodic_report.tx_power = ev->tx_power; + event.periodic_report.rssi = ev->rssi; + event.periodic_report.data_status = ev->data_status; + event.periodic_report.data_length = ev->data_len; + event.periodic_report.data = ev->data; /* TODO should we allow for listener too? this can be spammy and is more * like ACL data, not general event @@ -1490,22 +1653,16 @@ ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt) } void -ble_gap_rx_periodic_adv_sync_lost(struct hci_le_subev_periodic_adv_sync_lost *evt) +ble_gap_rx_periodic_adv_sync_lost(const struct ble_hci_ev_le_subev_periodic_adv_sync_lost *ev) { struct ble_hs_periodic_sync *psync; struct ble_gap_event event; ble_gap_event_fn *cb; void *cb_arg; - memset(&event, 0, sizeof event); - - event.type = BLE_GAP_EVENT_PERIODIC_SYNC_LOST; - event.periodic_sync_lost.sync_handle = evt->sync_handle; - event.periodic_sync_lost.reason = BLE_HS_ETIMEOUT; - ble_hs_lock(); /* The handle must be in the list */ - psync = ble_hs_periodic_sync_find_by_handle(evt->sync_handle); + psync = ble_hs_periodic_sync_find_by_handle(le16toh(ev->sync_handle)); BLE_HS_DBG_ASSERT(psync); cb = psync->cb; @@ -1515,6 +1672,12 @@ ble_gap_rx_periodic_adv_sync_lost(struct hci_le_subev_periodic_adv_sync_lost *ev ble_hs_periodic_sync_remove(psync); ble_hs_unlock(); + memset(&event, 0, sizeof event); + + event.type = BLE_GAP_EVENT_PERIODIC_SYNC_LOST; + event.periodic_sync_lost.sync_handle = psync->sync_handle; + event.periodic_sync_lost.reason = BLE_HS_ETIMEOUT; + /* remove any sync_lost event from queue */ ble_npl_eventq_remove(ble_hs_evq_get(), &psync->lost_ev); @@ -1528,38 +1691,132 @@ ble_gap_rx_periodic_adv_sync_lost(struct hci_le_subev_periodic_adv_sync_lost *ev } #endif +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) +static int +periodic_adv_transfer_disable(uint16_t conn_handle) +{ + struct ble_hci_le_periodic_adv_sync_transfer_params_cp cmd; + struct ble_hci_le_periodic_adv_sync_transfer_params_rp rsp; + uint16_t opcode; + int rc; + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_SYNC_TRANSFER_PARAMS); + + cmd.conn_handle = htole16(conn_handle); + cmd.sync_cte_type = 0x00; + cmd.mode = 0x00; + cmd.skip = 0x0000; + cmd.sync_timeout = 0x000a; + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), &rsp, sizeof(rsp)); + if (!rc) { + BLE_HS_DBG_ASSERT(le16toh(rsp.conn_handle) == conn_handle); + } + + return rc; +} + +void +ble_gap_rx_periodic_adv_sync_transfer(const struct ble_hci_ev_le_subev_periodic_adv_sync_transfer *ev) +{ + struct ble_hci_le_periodic_adv_term_sync_cp cmd_term; + struct ble_gap_event event; + struct ble_hs_conn *conn; + ble_gap_event_fn *cb; + uint16_t sync_handle; + uint16_t conn_handle; + uint16_t opcode; + void *cb_arg; + + conn_handle = le16toh(ev->conn_handle); + + ble_hs_lock(); + + /* Unfortunately spec sucks here as it doesn't explicitly stop + * transfer reception on first transfer... for now just disable it on + * every transfer event we get. + */ + periodic_adv_transfer_disable(conn_handle); + + conn = ble_hs_conn_find(le16toh(ev->conn_handle)); + if (!conn || !conn->psync) { + /* terminate sync if we didn't expect it */ + if (!ev->status) { + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_TERM_SYNC); + cmd_term.sync_handle = ev->sync_handle; + ble_hs_hci_cmd_tx(opcode, &cmd_term, sizeof(cmd_term), NULL, 0); + } + + ble_hs_unlock(); + return; + } + + cb = conn->psync->cb; + cb_arg = conn->psync->cb_arg; + + memset(&event, 0, sizeof event); + + event.type = BLE_GAP_EVENT_PERIODIC_TRANSFER; + event.periodic_transfer.status = ev->status; + + /* only sync handle is not valid on error */ + if (ev->status) { + sync_handle = 0; + ble_hs_periodic_sync_free(conn->psync); + } else { + sync_handle = le16toh(ev->sync_handle); + + conn->psync->sync_handle = sync_handle; + conn->psync->adv_sid = ev->sid; + memcpy(conn->psync->advertiser_addr.val, ev->peer_addr, 6); + conn->psync->advertiser_addr.type = ev->peer_addr_type; + ble_hs_periodic_sync_insert(conn->psync); + } + + conn->psync = NULL; + + event.periodic_transfer.sync_handle = sync_handle; + event.periodic_transfer.conn_handle = conn_handle; + event.periodic_transfer.service_data = le16toh(ev->service_data); + event.periodic_transfer.sid = ev->sid; + memcpy(event.periodic_transfer.adv_addr.val, ev->peer_addr, 6); + event.periodic_transfer.adv_addr.type = ev->peer_addr_type; + + event.periodic_transfer.adv_phy = ev->phy; + event.periodic_transfer.per_adv_itvl = le16toh(ev->interval); + event.periodic_transfer.adv_clk_accuracy = ev->aca; + + ble_hs_unlock(); + + ble_gap_event_listener_call(&event); + if (cb) { + cb(&event, cb_arg); + } +} +#endif + +#if NIMBLE_BLE_CONNECT static int ble_gap_rd_rem_sup_feat_tx(uint16_t handle) { - uint8_t buf[BLE_HCI_CONN_RD_REM_FEAT_LEN]; - int rc; + struct ble_hci_le_rd_rem_feat_cp cmd; - rc = ble_hs_hci_cmd_build_le_read_remote_feat(handle, buf, sizeof buf); - if (rc != 0) { - return BLE_HS_EUNKNOWN; - } + cmd.conn_handle = htole16(handle); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_RD_REM_FEAT), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_RD_REM_FEAT), + &cmd, sizeof(cmd), NULL, 0); } +#endif /** * Processes an incoming connection-complete HCI event. * instance parameter is valid only for slave connection. */ int -ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt, uint8_t instance) +ble_gap_rx_conn_complete(struct ble_gap_conn_complete *evt, uint8_t instance) { -#if !NIMBLE_BLE_CONNECT - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_CONNECT struct ble_gap_event event; struct ble_hs_conn *conn; int rc; @@ -1691,26 +1948,26 @@ ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt, uint8_t instance) ble_gap_rd_rem_sup_feat_tx(evt->connection_handle); return 0; +#else + return BLE_HS_ENOTSUP; +#endif } void -ble_gap_rx_rd_rem_sup_feat_complete( - struct hci_le_rd_rem_supp_feat_complete *evt) +ble_gap_rx_rd_rem_sup_feat_complete(const struct ble_hci_ev_le_subev_rd_rem_used_feat *ev) { -#if !NIMBLE_BLE_CONNECT - return; -#endif - +#if NIMBLE_BLE_CONNECT struct ble_hs_conn *conn; ble_hs_lock(); - conn = ble_hs_conn_find(evt->connection_handle); - if (conn != NULL && evt->status == 0) { - conn->supported_feat = get_le32(evt->features); + conn = ble_hs_conn_find(le16toh(ev->conn_handle)); + if ((conn != NULL) && (ev->status == 0)) { + conn->supported_feat = get_le32(ev->features); } ble_hs_unlock(); +#endif } int @@ -1730,19 +1987,20 @@ ble_gap_rx_l2cap_update_req(uint16_t conn_handle, } void -ble_gap_rx_phy_update_complete(struct hci_le_phy_upd_complete *evt) +ble_gap_rx_phy_update_complete(const struct ble_hci_ev_le_subev_phy_update_complete *ev) { struct ble_gap_event event; + uint16_t conn_handle = le16toh(ev->conn_handle); memset(&event, 0, sizeof event); event.type = BLE_GAP_EVENT_PHY_UPDATE_COMPLETE; - event.phy_updated.status = evt->status; - event.phy_updated.conn_handle = evt->connection_handle; - event.phy_updated.tx_phy = evt->tx_phy; - event.phy_updated.rx_phy = evt->rx_phy; + event.phy_updated.status = ev->status; + event.phy_updated.conn_handle = conn_handle; + event.phy_updated.tx_phy = ev->tx_phy; + event.phy_updated.rx_phy = ev->rx_phy; ble_gap_event_listener_call(&event); - ble_gap_call_conn_event_cb(&event, evt->connection_handle); + ble_gap_call_conn_event_cb(&event, conn_handle); } static int32_t @@ -1801,7 +2059,7 @@ ble_gap_master_timer(void) return BLE_HS_FOREVER; } -#if !MYNEWT_VAL(BLE_EXT_ADV) +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static int32_t ble_gap_slave_timer(void) { @@ -1900,7 +2158,7 @@ ble_gap_timer(void) min_ticks = min(master_ticks, update_ticks); -#if !MYNEWT_VAL(BLE_EXT_ADV) +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) min_ticks = min(min_ticks, ble_gap_slave_timer()); #endif @@ -1911,12 +2169,10 @@ ble_gap_timer(void) * $white list * *****************************************************************************/ +#if MYNEWT_VAL(BLE_WHITELIST) static int ble_gap_wl_busy(void) { -#if !MYNEWT_VAL(BLE_WHITELIST) - return BLE_HS_ENOTSUP; -#endif #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) if (ble_host_rpa_enabled()) { @@ -1933,52 +2189,56 @@ ble_gap_wl_busy(void) static int ble_gap_wl_tx_add(const ble_addr_t *addr) { - uint8_t buf[BLE_HCI_ADD_WHITE_LIST_LEN]; - int rc; + struct ble_hci_le_add_whte_list_cp cmd; - rc = ble_hs_hci_cmd_build_le_add_to_whitelist(addr->val, addr->type, - buf, sizeof buf); - if (rc != 0) { - return rc; + if (addr->type > BLE_ADDR_RANDOM) { + return BLE_HS_EINVAL; } - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_ADD_WHITE_LIST), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + memcpy(cmd.addr, addr->val, BLE_DEV_ADDR_LEN); + cmd.addr_type = addr->type; - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_ADD_WHITE_LIST), + &cmd, sizeof(cmd), NULL, 0); } static int ble_gap_wl_tx_clear(void) { - int rc; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_CLEAR_WHITE_LIST), + NULL, 0, NULL, 0 ); +} +#endif - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_CLEAR_WHITE_LIST), - NULL, 0); - if (rc != 0) { - return rc; +int +ble_gap_wl_tx_rmv(const ble_addr_t *addr) +{ + struct ble_hci_le_rmv_white_list_cp cmd; + + if (addr->type > BLE_ADDR_RANDOM) { + return BLE_HS_EINVAL; } - return 0; + memcpy(cmd.addr, addr->val, BLE_DEV_ADDR_LEN); + cmd.addr_type = addr->type; + + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_RMV_WHITE_LIST), + &cmd, sizeof(cmd), NULL, 0); } int ble_gap_wl_set(const ble_addr_t *addrs, uint8_t white_list_count) { -#if !MYNEWT_VAL(BLE_WHITELIST) - return BLE_HS_ENOTSUP; -#endif - #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) if (ble_host_rpa_enabled()) { return BLE_HS_ENOTSUP; } #endif + +#if MYNEWT_VAL(BLE_WHITELIST) int rc; int i; @@ -2030,37 +2290,30 @@ done: STATS_INC(ble_gap_stats, wl_set_fail); } return rc; +#else + return BLE_HS_ENOTSUP; +#endif } /***************************************************************************** * $stop advertise * *****************************************************************************/ - +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) static int ble_gap_adv_enable_tx(int enable) { - uint8_t buf[BLE_HCI_SET_ADV_ENABLE_LEN]; - uint16_t opcode; - int rc; + struct ble_hci_le_set_adv_enable_cp cmd; - opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_ENABLE); - ble_hs_hci_cmd_build_le_set_adv_enable(!!enable, buf, sizeof buf); + cmd.enable = !!enable; - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_ADV_ENABLE), + &cmd, sizeof(cmd), NULL, 0); } static int ble_gap_adv_stop_no_lock(void) { -#if !NIMBLE_BLE_ADVERTISE - return BLE_HS_ENOTSUP; -#endif - bool active; int rc; @@ -2092,14 +2345,12 @@ done: return rc; } +#endif int ble_gap_adv_stop(void) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) int rc; ble_hs_lock(); @@ -2107,6 +2358,9 @@ ble_gap_adv_stop(void) ble_hs_unlock(); return rc; +#else + return BLE_HS_ENOTSUP; +#endif } /***************************************************************************** @@ -2162,6 +2416,8 @@ ble_gap_adv_dflt_itvls(uint8_t conn_mode, default: BLE_HS_DBG_ASSERT(0); + *out_itvl_min = BLE_GAP_ADV_FAST_INTERVAL1_MIN; + *out_itvl_max = BLE_GAP_ADV_FAST_INTERVAL1_MAX; break; } } @@ -2172,52 +2428,43 @@ ble_gap_adv_params_tx(uint8_t own_addr_type, const ble_addr_t *peer_addr, { const ble_addr_t *peer_any = BLE_ADDR_ANY; - struct hci_adv_params hci_adv_params; - uint8_t buf[BLE_HCI_SET_ADV_PARAM_LEN]; - int rc; + struct ble_hci_le_set_adv_params_cp cmd; + uint16_t opcode; + uint16_t min; + uint16_t max; + + /* Fill optional fields if application did not specify them. */ + if ((adv_params->itvl_min == 0) && (adv_params->itvl_max == 0)) { + ble_gap_adv_dflt_itvls(adv_params->conn_mode, &min, &max); + cmd.min_interval = htole16(min); + cmd.max_interval = htole16(max); + } else { + cmd.min_interval = htole16(adv_params->itvl_min); + cmd.max_interval = htole16(adv_params->itvl_max); + } + + cmd.type = ble_gap_adv_type(adv_params); + cmd.own_addr_type = own_addr_type; if (peer_addr == NULL) { peer_addr = peer_any; } - hci_adv_params.own_addr_type = own_addr_type; - hci_adv_params.peer_addr_type = peer_addr->type; - memcpy(hci_adv_params.peer_addr, peer_addr->val, - sizeof hci_adv_params.peer_addr); + cmd.peer_addr_type = peer_addr->type; + memcpy(&cmd.peer_addr, peer_addr->val, sizeof(cmd.peer_addr)); - /* Fill optional fields if application did not specify them. */ - if (adv_params->itvl_min == 0 && adv_params->itvl_max == 0) { - ble_gap_adv_dflt_itvls(adv_params->conn_mode, - &hci_adv_params.adv_itvl_min, - &hci_adv_params.adv_itvl_max); - } else { - hci_adv_params.adv_itvl_min = adv_params->itvl_min; - hci_adv_params.adv_itvl_max = adv_params->itvl_max; - } if (adv_params->channel_map == 0) { - hci_adv_params.adv_channel_map = BLE_GAP_ADV_DFLT_CHANNEL_MAP; + cmd.chan_map = BLE_GAP_ADV_DFLT_CHANNEL_MAP; } else { - hci_adv_params.adv_channel_map = adv_params->channel_map; + cmd.chan_map = adv_params->channel_map; } /* Zero is the default value for filter policy and high duty cycle */ - hci_adv_params.adv_filter_policy = adv_params->filter_policy; + cmd.filter_policy = adv_params->filter_policy; - hci_adv_params.adv_type = ble_gap_adv_type(adv_params); - rc = ble_hs_hci_cmd_build_le_set_adv_params(&hci_adv_params, - buf, sizeof buf); - if (rc != 0) { - return BLE_HS_EINVAL; - } + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_PARAMS); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_ADV_PARAMS), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } static int @@ -2297,9 +2544,7 @@ ble_gap_adv_start(uint8_t own_addr_type, const ble_addr_t *direct_addr, const struct ble_gap_adv_params *adv_params, ble_gap_event_fn *cb, void *cb_arg) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#else +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) uint32_t duration_ticks; int rc; @@ -2376,83 +2621,66 @@ done: STATS_INC(ble_gap_stats, adv_start_fail); } return rc; +#else + return BLE_HS_ENOTSUP; #endif } int ble_gap_adv_set_data(const uint8_t *data, int data_len) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#endif - - uint8_t buf[BLE_HCI_SET_ADV_DATA_LEN]; +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) + struct ble_hci_le_set_adv_data_cp cmd; uint16_t opcode; - int rc; STATS_INC(ble_gap_stats, adv_set_data); - ble_hs_lock(); + /* Check for valid parameters */ + if (((data == NULL) && (data_len != 0)) || + (data_len > BLE_HCI_MAX_ADV_DATA_LEN)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + memcpy(cmd.adv_data, data, data_len); + cmd.adv_data_len = data_len; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_ADV_DATA); - rc = ble_hs_hci_cmd_build_le_set_adv_data(data, data_len, buf, - sizeof(buf)); - if (rc != 0) { - goto done; - } - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); - if (rc != 0) { - goto done; - } - - rc = 0; - -done: - ble_hs_unlock(); - return rc; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); +#else + return BLE_HS_ENOTSUP; +#endif } int ble_gap_adv_rsp_set_data(const uint8_t *data, int data_len) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#endif - - uint8_t buf[BLE_HCI_SET_SCAN_RSP_DATA_LEN]; +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) + struct ble_hci_le_set_scan_rsp_data_cp cmd; uint16_t opcode; - int rc; - ble_hs_lock(); + + /* Check for valid parameters */ + if (((data == NULL) && (data_len != 0)) || + (data_len > BLE_HCI_MAX_SCAN_RSP_DATA_LEN)) { + return BLE_HS_EINVAL; + } + + memcpy(cmd.scan_rsp, data, data_len); + cmd.scan_rsp_len = data_len; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_RSP_DATA); - rc = ble_hs_hci_cmd_build_le_set_scan_rsp_data(data, data_len, - buf, sizeof(buf)); - if (rc != 0) { - rc = BLE_HS_HCI_ERR(rc); - goto done; - } - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); - if (rc != 0) { - goto done; - } - - rc = 0; - -done: - ble_hs_unlock(); - return rc; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); +#else + return BLE_HS_ENOTSUP; +#endif } int ble_gap_adv_set_fields(const struct ble_hs_adv_fields *adv_fields) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) uint8_t buf[BLE_HS_ADV_MAX_SZ]; uint8_t buf_sz; int rc; @@ -2468,15 +2696,15 @@ ble_gap_adv_set_fields(const struct ble_hs_adv_fields *adv_fields) } return 0; +#else + return BLE_HS_ENOTSUP; +#endif } int ble_gap_adv_rsp_set_fields(const struct ble_hs_adv_fields *rsp_fields) { -#if !NIMBLE_BLE_ADVERTISE || MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_ADVERTISE && !MYNEWT_VAL(BLE_EXT_ADV) uint8_t buf[BLE_HS_ADV_MAX_SZ]; uint8_t buf_sz; int rc; @@ -2492,6 +2720,9 @@ ble_gap_adv_rsp_set_fields(const struct ble_hs_adv_fields *rsp_fields) } return 0; +#else + return BLE_HS_ENOTSUP; +#endif } int @@ -2507,87 +2738,81 @@ ble_gap_ext_adv_params_tx(uint8_t instance, int8_t *selected_tx_power) { - struct hci_ext_adv_params hci_adv_params; - uint8_t buf[BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN]; - uint8_t rsp; + struct ble_hci_le_set_ext_adv_params_cp cmd; + struct ble_hci_le_set_ext_adv_params_rp rsp; int rc; - memset(&hci_adv_params, 0, sizeof(hci_adv_params)); + memset(&cmd, 0, sizeof(cmd)); + + cmd.adv_handle = instance; if (params->connectable) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_CONNECTABLE; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_CONNECTABLE; } if (params->scannable) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_SCANNABLE; } if (params->directed) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED; - hci_adv_params.peer_addr_type = params->peer.type; - memcpy(hci_adv_params.peer_addr, params->peer.val, 6); + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_DIRECTED; + cmd.peer_addr_type = params->peer.type; + memcpy(cmd.peer_addr, params->peer.val, BLE_DEV_ADDR_LEN); } if (params->high_duty_directed) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_HD_DIRECTED; } if (params->legacy_pdu) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_LEGACY; } if (params->anonymous) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_ANON_ADV; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_ANON_ADV; } if (params->include_tx_power) { - hci_adv_params.properties |= BLE_HCI_LE_SET_EXT_ADV_PROP_INC_TX_PWR; + cmd.props |= BLE_HCI_LE_SET_EXT_ADV_PROP_INC_TX_PWR; } /* Fill optional fields if application did not specify them. */ if (params->itvl_min == 0 && params->itvl_max == 0) { /* TODO for now limited to legacy values*/ - hci_adv_params.min_interval = BLE_GAP_ADV_FAST_INTERVAL1_MIN; - hci_adv_params.max_interval = BLE_GAP_ADV_FAST_INTERVAL2_MAX; - + put_le24(cmd.pri_itvl_min, BLE_GAP_ADV_FAST_INTERVAL1_MIN); + put_le24(cmd.pri_itvl_max, BLE_GAP_ADV_FAST_INTERVAL2_MAX); } else { - hci_adv_params.min_interval = params->itvl_min; - hci_adv_params.max_interval = params->itvl_max; + put_le24(cmd.pri_itvl_min, params->itvl_min); + put_le24(cmd.pri_itvl_max, params->itvl_max); } if (params->channel_map == 0) { - hci_adv_params.chan_map = BLE_GAP_ADV_DFLT_CHANNEL_MAP; + cmd.pri_chan_map = BLE_GAP_ADV_DFLT_CHANNEL_MAP; } else { - hci_adv_params.chan_map = params->channel_map; + cmd.pri_chan_map = params->channel_map; } /* Zero is the default value for filter policy and high duty cycle */ - hci_adv_params.filter_policy = params->filter_policy; - hci_adv_params.tx_power = params->tx_power; + cmd.filter_policy = params->filter_policy; + cmd.tx_power = params->tx_power; if (params->legacy_pdu) { - hci_adv_params.primary_phy = BLE_HCI_LE_PHY_1M; - hci_adv_params.secondary_phy = BLE_HCI_LE_PHY_1M; + cmd.pri_phy = BLE_HCI_LE_PHY_1M; + cmd.sec_phy = BLE_HCI_LE_PHY_1M; } else { - hci_adv_params.primary_phy = params->primary_phy; - hci_adv_params.secondary_phy = params->secondary_phy; + cmd.pri_phy = params->primary_phy; + cmd.sec_phy = params->secondary_phy; } - hci_adv_params.own_addr_type = params->own_addr_type; - hci_adv_params.max_skip = 0; - hci_adv_params.sid = params->sid; - hci_adv_params.scan_req_notif = params->scan_req_notif; + cmd.own_addr_type = params->own_addr_type; + cmd.sec_max_skip = 0; + cmd.sid = params->sid; + cmd.scan_req_notif = params->scan_req_notif; - rc = ble_hs_hci_cmd_build_le_ext_adv_params(instance, &hci_adv_params, - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_EXT_ADV_PARAM), - buf, sizeof(buf), &rsp, 1, NULL); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_EXT_ADV_PARAM), + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } if (selected_tx_power) { - *selected_tx_power = rsp; + *selected_tx_power = rsp.tx_power; } return 0; @@ -2677,6 +2902,7 @@ ble_gap_ext_adv_configure(uint8_t instance, ble_gap_slave[instance].connectable = params->connectable; ble_gap_slave[instance].scannable = params->scannable; ble_gap_slave[instance].directed = params->directed; + ble_gap_slave[instance].high_duty_directed = params->high_duty_directed; ble_gap_slave[instance].legacy_pdu = params->legacy_pdu; ble_hs_unlock(); @@ -2686,18 +2912,15 @@ ble_gap_ext_adv_configure(uint8_t instance, static int ble_gap_ext_adv_set_addr_no_lock(uint8_t instance, const uint8_t *addr) { - uint8_t buf[BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN]; + struct ble_hci_le_set_adv_set_rnd_addr_cp cmd; int rc; - rc = ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(instance, addr, buf, - sizeof(buf)); - if (rc != 0) { - return rc; - } + cmd.adv_handle = instance; + memcpy(cmd.addr, addr, BLE_DEV_ADDR_LEN); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_ADV_SET_RND_ADDR), - buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_ADV_SET_RND_ADDR), + &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { return rc; } @@ -2727,9 +2950,9 @@ ble_gap_ext_adv_set_addr(uint8_t instance, const ble_addr_t *addr) int ble_gap_ext_adv_start(uint8_t instance, int duration, int max_events) { + struct ble_hci_le_set_ext_adv_enable_cp *cmd; + uint8_t buf[sizeof(*cmd) + sizeof(cmd->sets[0])]; const uint8_t *rnd_addr; - uint8_t buf[6]; - struct hci_ext_adv_set set; uint16_t opcode; int rc; @@ -2748,7 +2971,9 @@ ble_gap_ext_adv_start(uint8_t instance, int duration, int max_events) return BLE_HS_EALREADY; } - if (ble_gap_slave[instance].directed && duration > 1280) { + /* HD directed duration shall not be 0 or larger than >1.28s */ + if (ble_gap_slave[instance].high_duty_directed && + ((duration == 0) || (duration > 128)) ) { ble_hs_unlock(); return BLE_HS_EINVAL; } @@ -2800,17 +3025,16 @@ ble_gap_ext_adv_start(uint8_t instance, int duration, int max_events) opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_EXT_ADV_ENABLE); - set.handle = instance; - set.duration = duration; - set.events = max_events; + cmd = (void *) buf; - rc = ble_hs_hci_cmd_build_le_ext_adv_enable(1, 1, &set, buf, sizeof(buf)); - if (rc != 0) { - ble_hs_unlock(); - return rc; - } + cmd->enable = 0x01; + cmd->num_sets = 1; - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + cmd->sets[0].adv_handle = instance; + cmd->sets[0].duration = htole16(duration); + cmd->sets[0].max_events = max_events; + + rc = ble_hs_hci_cmd_tx(opcode, cmd, sizeof(buf), NULL, 0); if (rc != 0) { ble_hs_unlock(); return rc; @@ -2825,8 +3049,8 @@ ble_gap_ext_adv_start(uint8_t instance, int duration, int max_events) static int ble_gap_ext_adv_stop_no_lock(uint8_t instance) { - uint8_t buf[6]; - struct hci_ext_adv_set set; + struct ble_hci_le_set_ext_adv_enable_cp *cmd; + uint8_t buf[sizeof(*cmd) + sizeof(cmd->sets[0])]; uint16_t opcode; bool active; int rc; @@ -2837,18 +3061,17 @@ ble_gap_ext_adv_stop_no_lock(uint8_t instance) active = ble_gap_adv_active_instance(instance); + cmd = (void *) buf; + + cmd->enable = 0x00; + cmd->num_sets = 1; + cmd->sets[0].adv_handle = instance; + cmd->sets[0].duration = 0x0000; + cmd->sets[0].max_events = 0x00; + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_EXT_ADV_ENABLE); - set.handle = instance; - set.duration = 0; - set.events = 0; - - rc = ble_hs_hci_cmd_build_le_ext_adv_enable(0, 1, &set, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(opcode, cmd, sizeof(buf), NULL, 0); if (rc != 0) { return rc; } @@ -2925,65 +3148,63 @@ ble_gap_ext_adv_set(uint8_t instance, uint16_t opcode, struct os_mbuf **data) { /* in that case we always fit all data in single HCI command */ #if MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE) <= BLE_HCI_MAX_EXT_ADV_DATA_LEN - static uint8_t buf[BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN + \ + static uint8_t buf[sizeof(struct ble_hci_le_set_ext_adv_data_cp) + \ MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE)]; + struct ble_hci_le_set_ext_adv_data_cp *cmd = (void *)buf; uint16_t len = OS_MBUF_PKTLEN(*data); - int rc; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, opcode); + cmd->adv_handle = instance; + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_COMPLETE; + cmd->fragment_pref = 0; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); - rc = ble_hs_hci_cmd_build_le_ext_adv_data(instance, - BLE_HCI_LE_SET_DATA_OPER_COMPLETE, - 0, *data, len, buf, sizeof(buf)); - if (rc) { - return rc; - } - - os_mbuf_adj(*data, MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE)); + os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); #else - static uint8_t buf[BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN + \ + static uint8_t buf[sizeof(struct ble_hci_le_set_ext_adv_data_cp) + \ BLE_HCI_MAX_EXT_ADV_DATA_LEN]; + struct ble_hci_le_set_ext_adv_data_cp *cmd = (void *)buf; uint16_t len = OS_MBUF_PKTLEN(*data); uint8_t op; int rc; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, opcode); + cmd->adv_handle = instance; + /* complete data */ if (len <= BLE_HCI_MAX_EXT_ADV_DATA_LEN) { - rc = ble_hs_hci_cmd_build_le_ext_adv_data(instance, - BLE_HCI_LE_SET_DATA_OPER_COMPLETE, - 0, *data, len, buf,sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_COMPLETE; + cmd->fragment_pref = 0; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); } /* first fragment */ op = BLE_HCI_LE_SET_DATA_OPER_FIRST; do { - rc = ble_hs_hci_cmd_build_le_ext_adv_data(instance, op, 0, *data, - BLE_HCI_MAX_EXT_ADV_DATA_LEN, - buf, sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = op; + cmd->fragment_pref = 0; + cmd->adv_data_len = BLE_HCI_MAX_EXT_ADV_DATA_LEN; + os_mbuf_copydata(*data, 0, BLE_HCI_MAX_EXT_ADV_DATA_LEN, cmd->adv_data); os_mbuf_adj(*data, BLE_HCI_MAX_EXT_ADV_DATA_LEN); *data = os_mbuf_trim_front(*data); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); if (rc) { return rc; } @@ -2993,18 +3214,16 @@ ble_gap_ext_adv_set(uint8_t instance, uint16_t opcode, struct os_mbuf **data) } while (len > BLE_HCI_MAX_EXT_ADV_DATA_LEN); /* last fragment */ - rc = ble_hs_hci_cmd_build_le_ext_adv_data(instance, - BLE_HCI_LE_SET_DATA_OPER_LAST, - 0, *data, len, buf, sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_LAST; + cmd->fragment_pref = 0; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_EXT_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); #endif } @@ -3105,7 +3324,7 @@ done: int ble_gap_ext_adv_remove(uint8_t instance) { - uint8_t buf[BLE_HCI_LE_REMOVE_ADV_SET_LEN]; + struct ble_hci_le_remove_adv_set_cp cmd; uint16_t opcode; int rc; @@ -3124,15 +3343,10 @@ ble_gap_ext_adv_remove(uint8_t instance) return BLE_HS_EBUSY; } + cmd.adv_handle = instance; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_REMOVE_ADV_SET); - rc = ble_hs_hci_cmd_build_le_ext_adv_remove(instance, buf, sizeof(buf)); - if (rc != 0) { - ble_hs_unlock(); - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { ble_hs_unlock(); return rc; @@ -3172,7 +3386,7 @@ ble_gap_ext_adv_clear(void) opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_CLEAR_ADV_SETS); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, NULL, 0); + rc = ble_hs_hci_cmd_tx(opcode, NULL, 0, NULL, 0); if (rc != 0) { ble_hs_unlock(); return rc; @@ -3187,44 +3401,34 @@ ble_gap_ext_adv_clear(void) #if MYNEWT_VAL(BLE_PERIODIC_ADV) static int ble_gap_periodic_adv_params_tx(uint8_t instance, - const struct ble_gap_periodic_adv_params *params) + const struct ble_gap_periodic_adv_params *params) { - struct hci_periodic_adv_params hci_adv_params; - uint8_t buf[BLE_HCI_LE_SET_PERIODIC_ADV_PARAMS_LEN]; - int rc; + struct ble_hci_le_set_periodic_adv_params_cp cmd; + uint16_t opcode; - memset(&hci_adv_params, 0, sizeof(hci_adv_params)); - - if (params->include_tx_power) { - hci_adv_params.properties |= BLE_HCI_LE_SET_PERIODIC_ADV_PROP_INC_TX_PWR; - } + cmd.adv_handle = instance; /* Fill optional fields if application did not specify them. */ if (params->itvl_min == 0 && params->itvl_max == 0) { - hci_adv_params.min_interval = 30 / 1.25; //30 ms - hci_adv_params.max_interval = 60 / 1.25; //150 ms + /* TODO defines for those */ + cmd.min_itvl = htole16(30 / 1.25); //30 ms + cmd.max_itvl = htole16(60 / 1.25); //150 ms } else { - hci_adv_params.min_interval = params->itvl_min; - hci_adv_params.max_interval = params->itvl_max; + cmd.min_itvl = htole16( params->itvl_min); + cmd.max_itvl = htole16(params->itvl_max); } - rc = ble_hs_hci_cmd_build_le_periodic_adv_params(instance, &hci_adv_params, buf, - sizeof(buf)); - if (rc != 0) { - return rc; + if (params->include_tx_power) { + cmd.props = BLE_HCI_LE_SET_PERIODIC_ADV_PROP_INC_TX_PWR; + } else { + cmd.props = 0; } - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_PARAMS), buf, - sizeof(buf)); + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_PARAMS); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } static int @@ -3292,7 +3496,7 @@ ble_gap_periodic_adv_configure(uint8_t instance, int ble_gap_periodic_adv_start(uint8_t instance) { - uint8_t buf[BLE_HCI_LE_SET_PERIODIC_ADV_ENABLE_LEN]; + struct ble_hci_le_set_periodic_adv_enable_cp cmd; uint16_t opcode; int rc; @@ -3308,16 +3512,12 @@ ble_gap_periodic_adv_start(uint8_t instance) return BLE_HS_EINVAL; } - opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_PERIODIC_ADV_ENABLE); - rc = ble_hs_hci_cmd_build_le_periodic_adv_enable(1, instance, buf, - sizeof(buf)); - if (rc != 0) { - ble_hs_unlock(); - return rc; - } + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_ENABLE); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + cmd.enable = 0x01; + cmd.adv_handle = instance; + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { ble_hs_unlock(); return rc; @@ -3330,57 +3530,51 @@ ble_gap_periodic_adv_start(uint8_t instance) } static int -ble_gap_periodic_adv_set(uint8_t instance, uint16_t opcode, - struct os_mbuf **data) +ble_gap_periodic_adv_set(uint8_t instance, struct os_mbuf **data) { /* In that case we always fit all data in single HCI command */ #if MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE) <= BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN - - static uint8_t buf[BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN + + static uint8_t buf[sizeof(struct ble_hci_le_set_periodic_adv_data_cp) + MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE)]; + struct ble_hci_le_set_periodic_adv_data_cp *cmd = (void *) buf; uint16_t len = OS_MBUF_PKTLEN(*data); - int rc; + uint16_t opcode; - opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, opcode); + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_DATA); - rc = ble_hs_hci_cmd_build_le_periodic_adv_data( - instance, - BLE_HCI_LE_SET_DATA_OPER_COMPLETE, - *data, len, - buf, sizeof(buf)); + cmd->adv_handle = instance; + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_COMPLETE; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); - if (rc) { - return rc; - } - - os_mbuf_adj(*data, MYNEWT_VAL(BLE_EXT_ADV_MAX_SIZE)); + os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); #else - static uint8_t buf[BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN + + static uint8_t buf[sizeof(struct ble_hci_le_set_periodic_adv_data_cp) + BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN]; + struct ble_hci_le_set_periodic_adv_data_cp *cmd = (void *) buf; uint16_t len = OS_MBUF_PKTLEN(*data); + uint16_t opcode; uint8_t op; int rc; - opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, opcode); + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_DATA); + cmd->adv_handle = instance; /* Complete data */ if (len <= BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN) { - rc = ble_hs_hci_cmd_build_le_periodic_adv_data(instance, - BLE_HCI_LE_SET_DATA_OPER_COMPLETE, *data, len, buf, - sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_COMPLETE; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); } /* If the periodic advertising is already enabled, the periodic advertising @@ -3395,16 +3589,16 @@ ble_gap_periodic_adv_set(uint8_t instance, uint16_t opcode, op = BLE_HCI_LE_SET_DATA_OPER_FIRST; do{ - rc = ble_hs_hci_cmd_build_le_periodic_adv_data(instance, op, *data, - BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN, buf, sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = op; + cmd->adv_data_len = BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN; + os_mbuf_copydata(*data, 0, BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN, + cmd->adv_data); os_mbuf_adj(*data, BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN); *data = os_mbuf_trim_front(*data); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); if (rc) { return rc; } @@ -3414,19 +3608,15 @@ ble_gap_periodic_adv_set(uint8_t instance, uint16_t opcode, } while (len > BLE_HCI_MAX_PERIODIC_ADV_DATA_LEN); /* Last fragment */ - rc = ble_hs_hci_cmd_build_le_periodic_adv_data( - instance, - BLE_HCI_LE_SET_DATA_OPER_LAST, - *data, len, buf, sizeof(buf)); - if (rc) { - return rc; - } + cmd->operation = BLE_HCI_LE_SET_DATA_OPER_LAST; + cmd->adv_data_len = len; + os_mbuf_copydata(*data, 0, len, cmd->adv_data); os_mbuf_adj(*data, len); *data = os_mbuf_trim_front(*data); - return ble_hs_hci_cmd_tx_empty_ack(opcode, buf, - BLE_HCI_SET_PERIODIC_ADV_DATA_HDR_LEN + len); + return ble_hs_hci_cmd_tx(opcode, cmd, sizeof(*cmd) + cmd->adv_data_len, + NULL, 0); #endif } @@ -3469,8 +3659,7 @@ ble_gap_periodic_adv_set_data(uint8_t instance, struct os_mbuf *data) goto done; } - rc = ble_gap_periodic_adv_set(instance, - BLE_HCI_OCF_LE_SET_PERIODIC_ADV_DATA, &data); + rc = ble_gap_periodic_adv_set(instance, &data); ble_hs_unlock(); @@ -3482,18 +3671,16 @@ done: static int ble_gap_periodic_adv_stop_no_lock(uint8_t instance) { - uint8_t buf[BLE_HCI_LE_SET_PERIODIC_ADV_ENABLE_LEN]; + struct ble_hci_le_set_periodic_adv_enable_cp cmd; uint16_t opcode; int rc; + cmd.enable = 0x00; + cmd.adv_handle = instance; + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PERIODIC_ADV_ENABLE); - rc = ble_hs_hci_cmd_build_le_periodic_adv_enable(0, instance, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { return rc; } @@ -3548,14 +3735,25 @@ ble_gap_npl_sync_lost(struct ble_npl_event *ev) } int -ble_gap_periodic_adv_create_sync(const ble_addr_t *addr, uint8_t adv_sid, +ble_gap_periodic_adv_sync_create(const ble_addr_t *addr, uint8_t adv_sid, const struct ble_gap_periodic_sync_params *params, ble_gap_event_fn *cb, void *cb_arg) { - uint8_t buf[BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_LEN]; + struct ble_hci_le_periodic_adv_create_sync_cp cmd; struct ble_hs_periodic_sync *psync; uint16_t opcode; - int rc = 0; + int rc; + + if (addr && (addr->type > BLE_ADDR_RANDOM)) { + return BLE_HS_EINVAL; + } + if (adv_sid > 0x0f) { + return BLE_HS_EINVAL; + } + if ((params->skip > 0x1f3) || (params->sync_timeout > 0x4000) || + (params->sync_timeout < 0x0A)) { + return BLE_HS_EINVAL; + } ble_hs_lock(); @@ -3581,24 +3779,22 @@ ble_gap_periodic_adv_create_sync(const ble_addr_t *addr, uint8_t adv_sid, ble_npl_event_init(&psync->lost_ev, ble_gap_npl_sync_lost, psync); if (addr) { - rc = ble_hs_hci_cmd_build_le_periodic_adv_create_sync(0x00, adv_sid, - addr->type, addr->val, params->skip, - params->sync_timeout, buf, sizeof(buf)); + cmd.options = 0x00; + cmd.peer_addr_type = addr->type; + memcpy(cmd.peer_addr, addr->val, BLE_DEV_ADDR_LEN); } else { - rc = ble_hs_hci_cmd_build_le_periodic_adv_create_sync(0x01, adv_sid, - BLE_ADDR_ANY->type, BLE_ADDR_ANY->val, params->skip, - params->sync_timeout, buf, sizeof(buf)); + cmd.options = 0x01; + cmd.peer_addr_type = BLE_ADDR_ANY->type; + memcpy(cmd.peer_addr, BLE_ADDR_ANY->val, BLE_DEV_ADDR_LEN); } - if (rc != 0) { - ble_hs_periodic_sync_free(psync); - ble_hs_unlock(); - return rc; - } + cmd.sid = adv_sid; + cmd.skip = params->skip; + cmd.sync_timeout = htole16(params->sync_timeout); + cmd.sync_cte_type = 0x00; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_CREATE_SYNC); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); - + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); if (!rc) { /* This shall be reset upon receiving sync_established event, * or if the sync is cancelled before receiving that event. @@ -3617,7 +3813,7 @@ ble_gap_periodic_adv_create_sync(const ble_addr_t *addr, uint8_t adv_sid, } int -ble_gap_periodic_adv_create_sync_cancel(void) +ble_gap_periodic_adv_sync_create_cancel(void) { uint16_t opcode; int rc = 0; @@ -3632,15 +3828,7 @@ ble_gap_periodic_adv_create_sync_cancel(void) opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_CREATE_SYNC_CANCEL); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, NULL, 0); - - if (!rc) { - ble_gap_sync.op = BLE_GAP_OP_NULL; - ble_gap_sync.cb = NULL; - ble_gap_sync.cb_arg = NULL; - ble_hs_periodic_sync_free(ble_gap_sync.psync); - ble_gap_sync.psync = NULL; - } + rc = ble_hs_hci_cmd_tx(opcode, NULL, 0, NULL, 0); ble_hs_unlock(); @@ -3648,12 +3836,12 @@ ble_gap_periodic_adv_create_sync_cancel(void) } int -ble_gap_periodic_adv_terminate_sync(uint16_t sync_handle) +ble_gap_periodic_adv_sync_terminate(uint16_t sync_handle) { - uint8_t buf[BLE_HCI_LE_PERIODIC_ADV_TERM_SYNC_LEN]; - uint16_t opcode; + struct ble_hci_le_periodic_adv_term_sync_cp cmd; struct ble_hs_periodic_sync *psync; - int rc = 0; + uint16_t opcode; + int rc; ble_hs_lock(); @@ -3675,15 +3863,9 @@ ble_gap_periodic_adv_terminate_sync(uint16_t sync_handle) opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_TERM_SYNC); - rc = ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(sync_handle, - buf, sizeof(buf)); - if (rc != 0) { - ble_hs_unlock(); - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + cmd.sync_handle = htole16(sync_handle); + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); if (rc == 0) { /* Remove the handle from the list */ ble_hs_periodic_sync_remove(psync); @@ -3698,52 +3880,245 @@ ble_gap_periodic_adv_terminate_sync(uint16_t sync_handle) return rc; } - +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) int -ble_gap_add_dev_to_periodic_adv_list(const ble_addr_t *peer_addr, - uint8_t adv_sid) +ble_gap_periodic_adv_sync_reporting(uint16_t sync_handle, bool enable) { - uint8_t buf[BLE_HCI_LE_ADD_DEV_TO_PERIODIC_ADV_LIST_LEN]; + struct ble_hci_le_periodic_adv_receive_enable_cp cmd; + struct ble_hs_periodic_sync *psync; uint16_t opcode; - int rc = 0; + int rc; - opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_ADD_DEV_TO_PERIODIC_ADV_LIST); + ble_hs_lock(); - rc = ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list(peer_addr->type, - peer_addr->val, - adv_sid, buf, - sizeof(buf)); - if (rc != 0) { - return rc; + if (ble_gap_sync.op == BLE_GAP_OP_SYNC) { + ble_hs_unlock(); + return BLE_HS_EBUSY; } - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); + psync = ble_hs_periodic_sync_find_by_handle(sync_handle); + if (!psync) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_RECEIVE_ENABLE); + + cmd.sync_handle = htole16(sync_handle); + cmd.enable = enable ? 0x01 : 0x00; + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); + + ble_hs_unlock(); return rc; } +int +ble_gap_periodic_adv_sync_transfer(uint16_t sync_handle, uint16_t conn_handle, + uint16_t service_data) +{ + struct ble_hci_le_periodic_adv_sync_transfer_cp cmd; + struct ble_hci_le_periodic_adv_sync_transfer_rp rsp; + struct ble_hs_periodic_sync *psync; + struct ble_hs_conn *conn; + uint16_t opcode; + int rc; + + ble_hs_lock(); + + conn = ble_hs_conn_find(conn_handle); + if (!conn) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + psync = ble_hs_periodic_sync_find_by_handle(sync_handle); + if (!psync) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_SYNC_TRANSFER); + + cmd.conn_handle = htole16(conn_handle); + cmd.sync_handle = htole16(sync_handle); + cmd.service_data = htole16(service_data); + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), &rsp, sizeof(rsp)); + if (!rc) { + BLE_HS_DBG_ASSERT(le16toh(rsp.conn_handle) == conn_handle); + } + + ble_hs_unlock(); + + return rc; +} + +int +ble_gap_periodic_adv_sync_set_info(uint8_t instance, uint16_t conn_handle, + uint16_t service_data) +{ + struct ble_hci_le_periodic_adv_set_info_transfer_cp cmd; + struct ble_hci_le_periodic_adv_set_info_transfer_rp rsp; + struct ble_hs_conn *conn; + uint16_t opcode; + int rc; + + if (instance >= BLE_ADV_INSTANCES) { + return BLE_HS_EINVAL; + } + + ble_hs_lock(); + if (ble_gap_slave[instance].periodic_op != BLE_GAP_OP_S_PERIODIC_ADV) { + /* periodic adv not enabled */ + ble_hs_unlock(); + return BLE_HS_EINVAL; + } + + conn = ble_hs_conn_find(conn_handle); + if (!conn) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_SET_INFO_TRANSFER); + + cmd.conn_handle = htole16(conn_handle); + cmd.adv_handle = instance; + cmd.service_data = htole16(service_data); + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), &rsp, sizeof(rsp)); + if (!rc) { + BLE_HS_DBG_ASSERT(le16toh(rsp.conn_handle) == conn_handle); + } + + ble_hs_unlock(); + + return rc; +} + +static int +periodic_adv_transfer_enable(uint16_t conn_handle, + const struct ble_gap_periodic_sync_params *params) +{ + struct ble_hci_le_periodic_adv_sync_transfer_params_cp cmd; + struct ble_hci_le_periodic_adv_sync_transfer_params_rp rsp; + uint16_t opcode; + int rc; + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_PERIODIC_ADV_SYNC_TRANSFER_PARAMS); + + cmd.conn_handle = htole16(conn_handle); + cmd.sync_cte_type = 0x00; + cmd.mode = params->reports_disabled ? 0x01 : 0x02; + cmd.skip = htole16(params->skip); + cmd.sync_timeout = htole16(params->sync_timeout); + + rc = ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), &rsp, sizeof(rsp)); + if (!rc) { + BLE_HS_DBG_ASSERT(le16toh(rsp.conn_handle) == conn_handle); + } + + return rc; +} + +int +ble_gap_periodic_adv_sync_receive(uint16_t conn_handle, + const struct ble_gap_periodic_sync_params *params, + ble_gap_event_fn *cb, void *cb_arg) +{ + struct ble_hs_conn *conn; + int rc; + + ble_hs_lock(); + + conn = ble_hs_conn_find(conn_handle); + if (!conn) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + if (params) { + if (conn->psync) { + ble_hs_unlock(); + return BLE_HS_EALREADY; + } + + conn->psync = ble_hs_periodic_sync_alloc(); + if (!conn->psync) { + ble_hs_unlock(); + return BLE_HS_ENOMEM; + } + + rc = periodic_adv_transfer_enable(conn_handle, params); + if (rc) { + ble_hs_periodic_sync_free(conn->psync); + conn->psync = NULL; + } else { + conn->psync->cb = cb; + conn->psync->cb_arg = cb_arg; + ble_npl_event_init(&conn->psync->lost_ev, ble_gap_npl_sync_lost, + conn->psync); + } + } else { + if (!conn->psync) { + ble_hs_unlock(); + return BLE_HS_EALREADY; + } + + rc = periodic_adv_transfer_disable(conn_handle); + if (!rc) { + ble_hs_periodic_sync_free(conn->psync); + conn->psync = NULL; + } + } + + ble_hs_unlock(); + + return rc; +} +#endif + +int +ble_gap_add_dev_to_periodic_adv_list(const ble_addr_t *peer_addr, + uint8_t adv_sid) +{ + struct ble_hci_le_add_dev_to_periodic_adv_list_cp cmd; + uint16_t opcode; + + if ((peer_addr->type > BLE_ADDR_RANDOM) || (adv_sid > 0x0f)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + cmd.peer_addr_type = peer_addr->type; + memcpy(cmd.peer_addr, peer_addr->val, BLE_DEV_ADDR_LEN); + cmd.sid = adv_sid; + + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_ADD_DEV_TO_PERIODIC_ADV_LIST); + + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); +} + int ble_gap_rem_dev_from_periodic_adv_list(const ble_addr_t *peer_addr, uint8_t adv_sid) { - uint8_t buf[BLE_HCI_LE_REM_DEV_FROM_PERIODIC_ADV_LIST_LEN]; + struct ble_hci_le_rem_dev_from_periodic_adv_list_cp cmd; uint16_t opcode; - int rc = 0; + + if ((peer_addr->type > BLE_ADDR_RANDOM) || (adv_sid > 0x0f)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + cmd.peer_addr_type = peer_addr->type; + memcpy(cmd.peer_addr, peer_addr->val, BLE_DEV_ADDR_LEN); + cmd.sid = adv_sid; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_REM_DEV_FROM_PERIODIC_ADV_LIST); - rc = ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list(peer_addr->type, - peer_addr->val, - adv_sid, buf, - sizeof(buf)); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, buf, sizeof(buf)); - - return rc; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } int @@ -3754,7 +4129,7 @@ ble_gap_clear_periodic_adv_list(void) opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_CLEAR_PERIODIC_ADV_LIST); - rc = ble_hs_hci_cmd_tx_empty_ack(opcode, NULL, 0); + rc = ble_hs_hci_cmd_tx(opcode, NULL, 0, NULL, 0); return rc; } @@ -3762,23 +4137,18 @@ ble_gap_clear_periodic_adv_list(void) int ble_gap_read_periodic_adv_list_size(uint8_t *per_adv_list_size) { - uint8_t rspbuf[1]; - uint8_t rsplen; + struct ble_hci_le_rd_periodic_adv_list_size_rp rsp; uint16_t opcode; int rc = 0; opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_PERIODIC_ADV_LIST_SIZE); - rc = ble_hs_hci_cmd_tx(opcode, NULL, 0, rspbuf, sizeof(rspbuf), &rsplen); + rc = ble_hs_hci_cmd_tx(opcode, NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (rsplen != sizeof(rspbuf)) { - return BLE_HS_ECONTROLLER; - } - - *per_adv_list_size = rspbuf[0]; + *per_adv_list_size = rsp.list_size; return 0; } @@ -3794,58 +4164,73 @@ ble_gap_ext_disc_tx_params(uint8_t own_addr_type, uint8_t filter_policy, const struct ble_hs_hci_ext_scan_param *uncoded_params, const struct ble_hs_hci_ext_scan_param *coded_params) { - uint8_t buf[BLE_HCI_LE_EXT_SCAN_BASE_LEN + - 2 * BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN]; - uint8_t phy_mask = 0; - struct ble_hs_hci_ext_scan_param param[2] = {{0}}; - struct ble_hs_hci_ext_scan_param *p = param; - int phy_count = 0; - uint8_t len; - int rc; + struct ble_hci_le_set_ext_scan_params_cp *cmd; + struct scan_params *params; + uint8_t buf[sizeof(*cmd) + 2 * sizeof(*params)]; + uint8_t len = sizeof(*cmd); + + /* Check own addr type */ + if (own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + /* Check scanner filter policy */ + if (filter_policy > BLE_HCI_SCAN_FILT_MAX) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + cmd = (void *) buf; + params = cmd->scans; + + cmd->filter_policy = filter_policy; + cmd->own_addr_type = own_addr_type; + cmd->phys = 0; if (uncoded_params) { - phy_mask |= BLE_HCI_LE_PHY_1M_PREF_MASK; - memcpy(¶m[phy_count], uncoded_params, sizeof(*uncoded_params)); - phy_count++; + cmd->phys |= BLE_HCI_LE_PHY_1M_PREF_MASK; + + params->type = uncoded_params->scan_type; + params->itvl = htole16(uncoded_params->scan_itvl); + params->window = htole16(uncoded_params->scan_window); + + len += sizeof(*params); + params++; } if (coded_params) { - phy_mask |= BLE_HCI_LE_PHY_CODED_PREF_MASK; - memcpy(¶m[phy_count], coded_params, sizeof(*coded_params)); - phy_count++; + cmd->phys |= BLE_HCI_LE_PHY_CODED_PREF_MASK; + + params->type = coded_params->scan_type; + params->itvl = htole16(coded_params->scan_itvl); + params->window = htole16(coded_params->scan_window); + + len += sizeof(*params); + params++; } - rc = ble_hs_hci_cmd_build_le_set_ext_scan_params(own_addr_type, - filter_policy, - phy_mask, - phy_count, - &p, buf, sizeof(buf)); - - if (rc != 0) { - return BLE_HS_EINVAL; + if (!cmd->phys) { + return BLE_ERR_INV_HCI_CMD_PARMS; } - len = BLE_HCI_LE_EXT_SCAN_BASE_LEN + - BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN * phy_count; - - return ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_EXT_SCAN_PARAM), - buf, len); + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_EXT_SCAN_PARAM), + cmd, len, NULL, 0); } static int ble_gap_ext_disc_enable_tx(uint8_t enable, uint8_t filter_duplicates, uint16_t duration, uint16_t period) { - uint8_t buf[BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN]; + struct ble_hci_le_set_ext_scan_enable_cp cmd; - ble_hs_hci_cmd_build_le_set_ext_scan_enable(enable, filter_duplicates, - duration, period, - buf, sizeof buf); + cmd.enable = enable; + cmd.filter_dup = filter_duplicates; + cmd.duration = htole16(duration); + cmd.period = htole16(period); - return ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_EXT_SCAN_ENABLE), - buf, sizeof(buf)); + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_EXT_SCAN_ENABLE), + &cmd, sizeof(cmd), NULL, 0); } #endif #endif @@ -3854,53 +4239,38 @@ ble_gap_ext_disc_enable_tx(uint8_t enable, uint8_t filter_duplicates, static int ble_gap_disc_enable_tx(int enable, int filter_duplicates) { - uint8_t buf[BLE_HCI_SET_SCAN_ENABLE_LEN]; - int rc; + struct ble_hci_le_set_scan_enable_cp cmd; + uint16_t opcode; - ble_hs_hci_cmd_build_le_set_scan_enable(!!enable, !!filter_duplicates, - buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_ENABLE), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + cmd.enable = !!enable; + cmd.filter_duplicates = !!filter_duplicates; - return 0; + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_ENABLE); + + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } static int ble_gap_disc_tx_params(uint8_t own_addr_type, const struct ble_gap_disc_params *disc_params) { - uint8_t buf[BLE_HCI_SET_SCAN_PARAM_LEN]; - uint8_t scan_type; - int rc; + struct ble_hci_le_set_scan_params_cp cmd; + uint16_t opcode; if (disc_params->passive) { - scan_type = BLE_HCI_SCAN_TYPE_PASSIVE; + cmd.scan_type = BLE_HCI_SCAN_TYPE_PASSIVE; } else { - scan_type = BLE_HCI_SCAN_TYPE_ACTIVE; + cmd.scan_type = BLE_HCI_SCAN_TYPE_ACTIVE; } - rc = ble_hs_hci_cmd_build_le_set_scan_params(scan_type, - disc_params->itvl, - disc_params->window, - own_addr_type, - disc_params->filter_policy, - buf, sizeof buf); - if (rc != 0) { - return BLE_HS_EINVAL; - } + cmd.scan_itvl = htole16(disc_params->itvl); + cmd.scan_window = htole16(disc_params->window); + cmd.own_addr_type = own_addr_type; + cmd.filter_policy = disc_params->filter_policy; - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_PARAMS), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_SCAN_PARAMS); - return 0; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } #endif @@ -3945,10 +4315,7 @@ done: int ble_gap_disc_cancel(void) { -#if !NIMBLE_BLE_SCAN - return BLE_HS_ENOTSUP; -#else - +#if NIMBLE_BLE_SCAN int rc; ble_hs_lock(); @@ -3956,6 +4323,8 @@ ble_gap_disc_cancel(void) ble_hs_unlock(); return rc; +#else + return BLE_HS_ENOTSUP; #endif } @@ -4035,10 +4404,7 @@ ble_gap_ext_disc(uint8_t own_addr_type, uint16_t duration, uint16_t period, const struct ble_gap_ext_disc_params *coded_params, ble_gap_event_fn *cb, void *cb_arg) { -#if !NIMBLE_BLE_SCAN || !MYNEWT_VAL(BLE_EXT_ADV) - return BLE_HS_ENOTSUP; -#else - +#if NIMBLE_BLE_SCAN && MYNEWT_VAL(BLE_EXT_ADV) struct ble_hs_hci_ext_scan_param ucp; struct ble_hs_hci_ext_scan_param cp; int rc; @@ -4110,6 +4476,8 @@ done: STATS_INC(ble_gap_stats, discover_fail); } return rc; +#else + return BLE_HS_ENOTSUP; #endif } @@ -4142,6 +4510,20 @@ ble_gap_disc_validate(uint8_t own_addr_type, return BLE_HS_EINVAL; } + /* Check interval and window */ + if ((disc_params->itvl < BLE_HCI_SCAN_ITVL_MIN) || + (disc_params->itvl > BLE_HCI_SCAN_ITVL_MAX) || + (disc_params->window < BLE_HCI_SCAN_WINDOW_MIN) || + (disc_params->window > BLE_HCI_SCAN_WINDOW_MAX) || + (disc_params->itvl < disc_params->window)) { + return BLE_HS_EINVAL; + } + + /* Check scanner filter policy */ + if (disc_params->filter_policy > BLE_HCI_SCAN_FILT_MAX) { + return BLE_HS_EINVAL; + } + return ble_gap_disc_ext_validate(own_addr_type); } #endif @@ -4151,10 +4533,7 @@ ble_gap_disc(uint8_t own_addr_type, int32_t duration_ms, const struct ble_gap_disc_params *disc_params, ble_gap_event_fn *cb, void *cb_arg) { -#if !NIMBLE_BLE_SCAN - return BLE_HS_ENOTSUP; -#else - +#if NIMBLE_BLE_SCAN #if MYNEWT_VAL(BLE_EXT_ADV) struct ble_gap_ext_disc_params p = {0}; @@ -4162,6 +4541,12 @@ ble_gap_disc(uint8_t own_addr_type, int32_t duration_ms, p.passive = disc_params->passive; p.window = disc_params->window; + if (duration_ms == BLE_HS_FOREVER) { + duration_ms = 0; + } else if (duration_ms == 0) { + duration_ms = BLE_GAP_DISC_DUR_DFLT; + } + return ble_gap_ext_disc(own_addr_type, duration_ms/10, 0, disc_params->filter_duplicates, disc_params->filter_policy, disc_params->limited, @@ -4241,6 +4626,8 @@ done: } return rc; #endif +#else + return BLE_HS_ENOTSUP; #endif } @@ -4251,7 +4638,7 @@ ble_gap_disc_active(void) return ble_gap_master.op == BLE_GAP_OP_M_DISC; } -#if !MYNEWT_VAL(BLE_EXT_ADV) +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) && !MYNEWT_VAL(BLE_EXT_ADV) /***************************************************************************** * $connection establishment procedures * *****************************************************************************/ @@ -4260,64 +4647,84 @@ static int ble_gap_conn_create_tx(uint8_t own_addr_type, const ble_addr_t *peer_addr, const struct ble_gap_conn_params *params) { - uint8_t buf[BLE_HCI_CREATE_CONN_LEN]; - struct hci_create_conn hcc; - int rc; - - hcc.scan_itvl = params->scan_itvl; - hcc.scan_window = params->scan_window; + struct ble_hci_le_create_conn_cp cmd; + uint16_t opcode; + cmd.scan_itvl = htole16(params->scan_itvl); + cmd.scan_window = htole16(params->scan_window); if (peer_addr == NULL) { /* Application wants to connect to any device in the white list. The * peer address type and peer address fields are ignored by the * controller; fill them with dummy values. */ - hcc.filter_policy = BLE_HCI_CONN_FILT_USE_WL; - hcc.peer_addr_type = 0; - memset(hcc.peer_addr, 0, sizeof hcc.peer_addr); + cmd.filter_policy = BLE_HCI_CONN_FILT_USE_WL; + cmd.peer_addr_type = 0; + memset(cmd.peer_addr, 0, sizeof(cmd.peer_addr)); } else { - hcc.filter_policy = BLE_HCI_CONN_FILT_NO_WL; - hcc.peer_addr_type = peer_addr->type; - memcpy(hcc.peer_addr, peer_addr->val, sizeof hcc.peer_addr); + cmd.filter_policy = BLE_HCI_CONN_FILT_NO_WL; + cmd.peer_addr_type = peer_addr->type; + memcpy(cmd.peer_addr, peer_addr->val, sizeof(cmd.peer_addr)); } - hcc.own_addr_type = own_addr_type; - hcc.conn_itvl_min = params->itvl_min; - hcc.conn_itvl_max = params->itvl_max; - hcc.conn_latency = params->latency; - hcc.supervision_timeout = params->supervision_timeout; - hcc.min_ce_len = params->min_ce_len; - hcc.max_ce_len = params->max_ce_len; + cmd.own_addr_type = own_addr_type; + cmd.min_conn_itvl = htole16(params->itvl_min); + cmd.max_conn_itvl = htole16(params->itvl_max); + cmd.conn_latency = htole16(params->latency); + cmd.tmo = htole16(params->supervision_timeout); + cmd.min_ce = htole16(params->min_ce_len); + cmd.max_ce = htole16(params->max_ce_len); - rc = ble_hs_hci_cmd_build_le_create_connection(&hcc, buf, sizeof buf); - if (rc != 0) { - return BLE_HS_EUNKNOWN; - } + opcode = BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_CREATE_CONN); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_CREATE_CONN), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(opcode, &cmd, sizeof(cmd), NULL, 0); } #endif #if MYNEWT_VAL(BLE_EXT_ADV) -static void -ble_gap_copy_params(struct hci_ext_conn_params *hcc_params, - const struct ble_gap_conn_params *gap_params) +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) +static int +ble_gap_check_conn_params(uint8_t phy, const struct ble_gap_conn_params *params) { - hcc_params->scan_itvl = gap_params->scan_itvl; - hcc_params->scan_window = gap_params->scan_window; - hcc_params->conn_itvl_max = gap_params->itvl_max; - hcc_params->conn_itvl_min = gap_params->itvl_min; - hcc_params->max_ce_len = gap_params->max_ce_len; - hcc_params->min_ce_len = gap_params->min_ce_len; - hcc_params->conn_latency = gap_params->latency; - hcc_params->supervision_timeout = gap_params->supervision_timeout; + if (phy != BLE_HCI_LE_PHY_2M) { + /* Check scan interval and window */ + if ((params->scan_itvl < BLE_HCI_SCAN_ITVL_MIN) || + (params->scan_itvl > BLE_HCI_SCAN_ITVL_MAX) || + (params->scan_window < BLE_HCI_SCAN_WINDOW_MIN) || + (params->scan_window > BLE_HCI_SCAN_WINDOW_MAX) || + (params->scan_itvl < params->scan_window)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + } + /* Check connection interval min */ + if ((params->itvl_min < BLE_HCI_CONN_ITVL_MIN) || + (params->itvl_min > BLE_HCI_CONN_ITVL_MAX)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + /* Check connection interval max */ + if ((params->itvl_max < BLE_HCI_CONN_ITVL_MIN) || + (params->itvl_max > BLE_HCI_CONN_ITVL_MAX) || + (params->itvl_max < params->itvl_min)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + /* Check connection latency */ + if ((params->latency < BLE_HCI_CONN_LATENCY_MIN) || + (params->latency > BLE_HCI_CONN_LATENCY_MAX)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + /* Check supervision timeout */ + if ((params->supervision_timeout < BLE_HCI_CONN_SPVN_TIMEOUT_MIN) || + (params->supervision_timeout > BLE_HCI_CONN_SPVN_TIMEOUT_MAX)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + /* Check connection event length */ + if (params->min_ce_len > params->max_ce_len) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + return 0; } static int @@ -4327,57 +4734,110 @@ ble_gap_ext_conn_create_tx( const struct ble_gap_conn_params *phy_2m_conn_params, const struct ble_gap_conn_params *phy_coded_conn_params) { - uint8_t buf[sizeof(struct hci_ext_create_conn)]; - struct hci_ext_create_conn hcc = {0}; + struct ble_hci_le_ext_create_conn_cp *cmd; + struct conn_params *params; + uint8_t buf[sizeof(*cmd) + 3 * sizeof(*params)]; + uint8_t len = sizeof(*cmd); int rc; + /* Check own addr type */ + if (own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + if (phy_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | + BLE_HCI_LE_PHY_2M_PREF_MASK | + BLE_HCI_LE_PHY_CODED_PREF_MASK)) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + cmd = (void *) buf; + params = cmd->conn_params; + if (peer_addr == NULL) { /* Application wants to connect to any device in the white list. The * peer address type and peer address fields are ignored by the * controller; fill them with dummy values. */ - hcc.filter_policy = BLE_HCI_CONN_FILT_USE_WL; - hcc.peer_addr_type = 0; - memset(hcc.peer_addr, 0, sizeof hcc.peer_addr); + cmd->filter_policy = BLE_HCI_CONN_FILT_USE_WL; + cmd->peer_addr_type = 0; + memset(cmd->peer_addr, 0, sizeof(cmd->peer_addr)); } else { - hcc.filter_policy = BLE_HCI_CONN_FILT_NO_WL; - hcc.peer_addr_type = peer_addr->type;; - memcpy(hcc.peer_addr, peer_addr->val, sizeof hcc.peer_addr); + /* Check peer addr type */ + if (peer_addr->type > BLE_HCI_CONN_PEER_ADDR_MAX) { + return BLE_ERR_INV_HCI_CMD_PARMS; + } + + cmd->filter_policy = BLE_HCI_CONN_FILT_NO_WL; + cmd->peer_addr_type = peer_addr->type; + memcpy(cmd->peer_addr, peer_addr->val, sizeof(cmd->peer_addr)); } - hcc.own_addr_type = own_addr_type; - - hcc.init_phy_mask = phy_mask; + cmd->own_addr_type = own_addr_type; + cmd->init_phy_mask = phy_mask; if (phy_mask & BLE_GAP_LE_PHY_1M_MASK) { - /* XXX same structs */ - ble_gap_copy_params(&hcc.params[0], phy_1m_conn_params); + rc = ble_gap_check_conn_params(BLE_HCI_LE_PHY_1M, phy_1m_conn_params); + if (rc) { + return rc; + } + + params->scan_itvl = htole16(phy_1m_conn_params->scan_itvl); + params->scan_window = htole16(phy_1m_conn_params->scan_window); + params->conn_min_itvl = htole16(phy_1m_conn_params->itvl_min); + params->conn_max_itvl = htole16(phy_1m_conn_params->itvl_max); + params->conn_latency = htole16(phy_1m_conn_params->latency); + params->supervision_timeout = htole16(phy_1m_conn_params->supervision_timeout); + params->min_ce = htole16(phy_1m_conn_params->min_ce_len); + params->max_ce = htole16(phy_1m_conn_params->max_ce_len); + + params++; + len += sizeof(*params); } if (phy_mask & BLE_GAP_LE_PHY_2M_MASK) { - /* XXX same structs */ - ble_gap_copy_params(&hcc.params[1], phy_2m_conn_params); + rc = ble_gap_check_conn_params(BLE_HCI_LE_PHY_2M, phy_2m_conn_params); + if (rc) { + return rc; + } + + params->scan_itvl = htole16(phy_2m_conn_params->scan_itvl); + params->scan_window = htole16(phy_2m_conn_params->scan_window); + params->conn_min_itvl = htole16(phy_2m_conn_params->itvl_min); + params->conn_max_itvl = htole16(phy_2m_conn_params->itvl_max); + params->conn_latency = htole16(phy_2m_conn_params->latency); + params->supervision_timeout = htole16(phy_2m_conn_params->supervision_timeout); + params->min_ce = htole16(phy_2m_conn_params->min_ce_len); + params->max_ce = htole16(phy_2m_conn_params->max_ce_len); + + params++; + len += sizeof(*params); } if (phy_mask & BLE_GAP_LE_PHY_CODED_MASK) { - /* XXX same structs */ - ble_gap_copy_params(&hcc.params[2], phy_coded_conn_params); + rc = ble_gap_check_conn_params(BLE_HCI_LE_PHY_CODED, phy_coded_conn_params); + if (rc) { + return rc; + } + + params->scan_itvl = htole16(phy_coded_conn_params->scan_itvl); + params->scan_window = htole16(phy_coded_conn_params->scan_window); + params->conn_min_itvl = htole16(phy_coded_conn_params->itvl_min); + params->conn_max_itvl = htole16(phy_coded_conn_params->itvl_max); + params->conn_latency = htole16(phy_coded_conn_params->latency); + params->supervision_timeout = htole16(phy_coded_conn_params->supervision_timeout); + params->min_ce = htole16(phy_coded_conn_params->min_ce_len); + params->max_ce = htole16(phy_coded_conn_params->max_ce_len); + + params++; + len += sizeof(*params); } - rc = ble_hs_hci_cmd_build_le_ext_create_conn(&hcc, buf, sizeof buf); - if (rc != 0) { - return BLE_HS_EUNKNOWN; - } - - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_EXT_CREATE_CONN), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_EXT_CREATE_CONN), + cmd, len, NULL, 0); } +#endif /** * Initiates a connect procedure. @@ -4438,10 +4898,7 @@ ble_gap_ext_connect(uint8_t own_addr_type, const ble_addr_t *peer_addr, const struct ble_gap_conn_params *phy_coded_conn_params, ble_gap_event_fn *cb, void *cb_arg) { -#if !MYNEWT_VAL(BLE_ROLE_CENTRAL) - return BLE_HS_ENOTSUP; -#endif - +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) ble_npl_time_t duration_ticks; int rc; @@ -4551,6 +5008,10 @@ done: STATS_INC(ble_gap_stats, initiate_fail); } return rc; +#else + return BLE_HS_ENOTSUP; +#endif + } #endif @@ -4560,10 +5021,7 @@ ble_gap_connect(uint8_t own_addr_type, const ble_addr_t *peer_addr, const struct ble_gap_conn_params *conn_params, ble_gap_event_fn *cb, void *cb_arg) { -#if !MYNEWT_VAL(BLE_ROLE_CENTRAL) - return BLE_HS_ENOTSUP; -#endif - +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) #if MYNEWT_VAL(BLE_EXT_ADV) return ble_gap_ext_connect(own_addr_type, peer_addr, duration_ms, BLE_GAP_LE_PHY_1M_MASK, @@ -4652,6 +5110,31 @@ ble_gap_connect(uint8_t own_addr_type, const ble_addr_t *peer_addr, ble_gap_master.op = BLE_GAP_OP_M_CONN; +#if CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT + /* ble_gap_connect_reattempt save the connection parameters */ + if ((cb_arg != NULL) && conn_cookie_enabled) { + struct ble_gap_conn_desc *conn_desc = cb_arg; + /* reattempt_idx should follow conn handle corresponding to MASTER role */ + reattempt_idx = conn_desc->conn_handle; + /* Reset cookie_enabled flag, it will be set again by reattempt call */ + conn_cookie_enabled = false; + } + + ble_conn_reattempt[reattempt_idx].own_addr_type = own_addr_type; + memcpy(&ble_conn_reattempt[reattempt_idx].peer_addr, peer_addr, + sizeof(ble_addr_t)); + ble_conn_reattempt[reattempt_idx].duration_ms = duration_ms; + memcpy(&ble_conn_reattempt[reattempt_idx].conn_params, + conn_params, + sizeof(struct ble_gap_conn_params)); + ble_conn_reattempt[reattempt_idx].cb = cb; + ble_conn_reattempt[reattempt_idx].cb_arg = cb_arg; + /* reattempt_idx need to be within limits. This may end up being unnecessary + * operation. However, it is better to be sure as it can get tricky with + * multiple connections and client + server roles XXX*/ + reattempt_idx = (reattempt_idx + 1) % MYNEWT_VAL(BLE_MAX_CONNECTIONS); +#endif + rc = ble_gap_conn_create_tx(own_addr_type, peer_addr, conn_params); if (rc != 0) { @@ -4673,6 +5156,10 @@ done: } return rc; #endif +#else + return BLE_HS_ENOTSUP; +#endif + } int @@ -4685,11 +5172,38 @@ ble_gap_conn_active(void) /***************************************************************************** * $terminate connection procedure * *****************************************************************************/ +int +ble_gap_terminate_with_conn(struct ble_hs_conn *conn, uint8_t hci_reason) +{ + struct ble_hci_lc_disconnect_cp cmd; + int rc; + + BLE_HS_DBG_ASSERT(ble_hs_locked_by_cur_task()); + if (conn->bhc_flags & BLE_HS_CONN_F_TERMINATING) { + return BLE_HS_EALREADY; + } + + BLE_HS_LOG(INFO, "GAP procedure initiated: terminate connection; " + "conn_handle=%d hci_reason=%d\n", + conn->bhc_handle, hci_reason); + + cmd.conn_handle = htole16(conn->bhc_handle); + cmd.reason = hci_reason; + + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LINK_CTRL, + BLE_HCI_OCF_DISCONNECT_CMD), + &cmd, sizeof(cmd), NULL, 0); + if (rc != 0) { + return rc; + } + + conn->bhc_flags |= BLE_HS_CONN_F_TERMINATING; + return 0; +} int ble_gap_terminate(uint16_t conn_handle, uint8_t hci_reason) { - uint8_t buf[BLE_HCI_DISCONNECT_CMD_LEN]; struct ble_hs_conn *conn; int rc; @@ -4703,26 +5217,7 @@ ble_gap_terminate(uint16_t conn_handle, uint8_t hci_reason) goto done; } - if (conn->bhc_flags & BLE_HS_CONN_F_TERMINATING) { - rc = BLE_HS_EALREADY; - goto done; - } - - BLE_HS_LOG(INFO, "GAP procedure initiated: terminate connection; " - "conn_handle=%d hci_reason=%d\n", - conn_handle, hci_reason); - - ble_hs_hci_cmd_build_disconnect(conn_handle, hci_reason, - buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LINK_CTRL, - BLE_HCI_OCF_DISCONNECT_CMD), - buf, sizeof(buf)); - if (rc != 0) { - goto done; - } - - conn->bhc_flags |= BLE_HS_CONN_F_TERMINATING; - rc = 0; + rc = ble_gap_terminate_with_conn(conn, hci_reason); done: ble_hs_unlock(); @@ -4742,9 +5237,9 @@ ble_gap_conn_cancel_tx(void) { int rc; - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_CREATE_CONN_CANCEL), - NULL, 0); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_CREATE_CONN_CANCEL), + NULL, 0, NULL, 0); if (rc != 0) { return rc; } @@ -4752,13 +5247,10 @@ ble_gap_conn_cancel_tx(void) return 0; } +#if NIMBLE_BLE_CONNECT static int ble_gap_conn_cancel_no_lock(void) { -#if !MYNEWT_VAL(BLE_ROLE_CENTRAL) - return BLE_HS_ENOTSUP; -#endif - int rc; STATS_INC(ble_gap_stats, cancel); @@ -4785,14 +5277,12 @@ done: return rc; } +#endif int ble_gap_conn_cancel(void) { -#if !MYNEWT_VAL(BLE_ROLE_CENTRAL) - return BLE_HS_ENOTSUP; -#endif - +#if MYNEWT_VAL(BLE_ROLE_CENTRAL) int rc; ble_hs_lock(); @@ -4800,12 +5290,17 @@ ble_gap_conn_cancel(void) ble_hs_unlock(); return rc; +#else + return BLE_HS_ENOTSUP; +#endif + } /***************************************************************************** * $update connection parameters * *****************************************************************************/ +#if NIMBLE_BLE_CONNECT static struct ble_gap_update_entry * ble_gap_update_entry_alloc(void) { @@ -4818,6 +5313,7 @@ ble_gap_update_entry_alloc(void) return entry; } +#endif static void ble_gap_update_entry_free(struct ble_gap_update_entry *entry) @@ -4877,6 +5373,7 @@ ble_gap_update_entry_remove(uint16_t conn_handle) return entry; } +#if NIMBLE_BLE_CONNECT static void ble_gap_update_l2cap_cb(uint16_t conn_handle, int status, void *arg) { @@ -4903,71 +5400,51 @@ static int ble_gap_tx_param_pos_reply(uint16_t conn_handle, struct ble_gap_upd_params *params) { - uint8_t buf[BLE_HCI_CONN_PARAM_REPLY_LEN]; - struct hci_conn_param_reply pos_reply; - int rc; + struct ble_hci_le_rem_conn_param_rr_cp cmd; - pos_reply.handle = conn_handle; - pos_reply.conn_itvl_min = params->itvl_min; - pos_reply.conn_itvl_max = params->itvl_max; - pos_reply.conn_latency = params->latency; - pos_reply.supervision_timeout = params->supervision_timeout; - pos_reply.min_ce_len = params->min_ce_len; - pos_reply.max_ce_len = params->max_ce_len; + cmd.conn_handle = htole16(conn_handle); + cmd.conn_itvl_min = htole16(params->itvl_min); + cmd.conn_itvl_max = htole16(params->itvl_max); + cmd.conn_latency = htole16(params->latency); + cmd.supervision_timeout = htole16(params->supervision_timeout); + cmd.min_ce = htole16(params->min_ce_len); + cmd.max_ce = htole16(params->max_ce_len); - ble_hs_hci_cmd_build_le_conn_param_reply(&pos_reply, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_REM_CONN_PARAM_RR), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_REM_CONN_PARAM_RR), + &cmd, sizeof(cmd), NULL, 0); } static int ble_gap_tx_param_neg_reply(uint16_t conn_handle, uint8_t reject_reason) { - uint8_t buf[BLE_HCI_CONN_PARAM_NEG_REPLY_LEN]; - struct hci_conn_param_neg_reply neg_reply; - int rc; + struct ble_hci_le_rem_conn_params_nrr_cp cmd; - neg_reply.handle = conn_handle; - neg_reply.reason = reject_reason; + cmd.conn_handle = htole16(conn_handle); + cmd.reason = reject_reason; - ble_hs_hci_cmd_build_le_conn_param_neg_reply(&neg_reply, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR), + &cmd, sizeof(cmd), NULL, 0); } - -void -ble_gap_rx_param_req(struct hci_le_conn_param_req *evt) -{ -#if !NIMBLE_BLE_CONNECT - return; #endif +void +ble_gap_rx_param_req(const struct ble_hci_ev_le_subev_rem_conn_param_req *ev) +{ +#if NIMBLE_BLE_CONNECT struct ble_gap_upd_params peer_params; struct ble_gap_upd_params self_params; struct ble_gap_event event; - uint8_t reject_reason; + uint16_t conn_handle; int rc; - reject_reason = 0; /* Silence warning. */ - memset(&event, 0, sizeof event); - peer_params.itvl_min = evt->itvl_min; - peer_params.itvl_max = evt->itvl_max; - peer_params.latency = evt->latency; - peer_params.supervision_timeout = evt->timeout; + peer_params.itvl_min = le16toh(ev->min_interval); + peer_params.itvl_max = le16toh(ev->max_interval); + peer_params.latency = le16toh(ev->latency); + peer_params.supervision_timeout = le16toh(ev->timeout); peer_params.min_ce_len = 0; peer_params.max_ce_len = 0; @@ -4977,55 +5454,43 @@ ble_gap_rx_param_req(struct hci_le_conn_param_req *evt) */ self_params = peer_params; + conn_handle = le16toh(ev->conn_handle); + memset(&event, 0, sizeof event); event.type = BLE_GAP_EVENT_CONN_UPDATE_REQ; - event.conn_update_req.conn_handle = evt->connection_handle; + event.conn_update_req.conn_handle = conn_handle; event.conn_update_req.self_params = &self_params; event.conn_update_req.peer_params = &peer_params; - rc = ble_gap_call_conn_event_cb(&event, evt->connection_handle); - if (rc != 0) { - reject_reason = rc; - } - + rc = ble_gap_call_conn_event_cb(&event, conn_handle); if (rc == 0) { - rc = ble_gap_tx_param_pos_reply(evt->connection_handle, &self_params); + rc = ble_gap_tx_param_pos_reply(conn_handle, &self_params); if (rc != 0) { - ble_gap_update_failed(evt->connection_handle, rc); + ble_gap_update_failed(conn_handle, rc); } } else { - ble_gap_tx_param_neg_reply(evt->connection_handle, reject_reason); + ble_gap_tx_param_neg_reply(conn_handle, rc); } +#endif } +#if NIMBLE_BLE_CONNECT static int ble_gap_update_tx(uint16_t conn_handle, const struct ble_gap_upd_params *params) { - uint8_t buf[BLE_HCI_CONN_UPDATE_LEN]; - struct hci_conn_update cmd; - int rc; + struct ble_hci_le_conn_update_cp cmd; - cmd.handle = conn_handle; - cmd.conn_itvl_min = params->itvl_min; - cmd.conn_itvl_max = params->itvl_max; - cmd.conn_latency = params->latency; - cmd.supervision_timeout = params->supervision_timeout; - cmd.min_ce_len = params->min_ce_len; - cmd.max_ce_len = params->max_ce_len; + cmd.conn_handle = htole16(conn_handle); + cmd.conn_itvl_min = htole16(params->itvl_min); + cmd.conn_itvl_max = htole16(params->itvl_max); + cmd.conn_latency = htole16(params->latency); + cmd.supervision_timeout = htole16(params->supervision_timeout); + cmd.min_ce_len = htole16(params->min_ce_len); + cmd.max_ce_len = htole16(params->max_ce_len); - rc = ble_hs_hci_cmd_build_le_conn_update(&cmd, buf, sizeof buf); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_CONN_UPDATE), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_CONN_UPDATE), + &cmd, sizeof(cmd), NULL, 0); } static bool @@ -5057,15 +5522,13 @@ ble_gap_validate_conn_params(const struct ble_gap_upd_params *params) return true; } +#endif int ble_gap_update_params(uint16_t conn_handle, const struct ble_gap_upd_params *params) { -#if !NIMBLE_BLE_CONNECT - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_CONNECT struct ble_l2cap_sig_update_params l2cap_params; struct ble_gap_update_entry *entry; struct ble_gap_update_entry *dup; @@ -5149,6 +5612,9 @@ done: ble_hs_unlock(); return rc; +#else + return BLE_HS_ENOTSUP; +#endif } /***************************************************************************** @@ -5157,10 +5623,7 @@ done: int ble_gap_security_initiate(uint16_t conn_handle) { -#if !NIMBLE_BLE_SM - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_SM struct ble_store_value_sec value_sec; struct ble_store_key_sec key_sec; struct ble_hs_conn_addrs addrs; @@ -5221,6 +5684,9 @@ done: } return rc; +#else + return BLE_HS_ENOTSUP; +#endif } int @@ -5241,10 +5707,7 @@ ble_gap_encryption_initiate(uint16_t conn_handle, uint64_t rand_val, int auth) { -#if !NIMBLE_BLE_SM - return BLE_HS_ENOTSUP; -#endif - +#if NIMBLE_BLE_SM ble_hs_conn_flags_t conn_flags; int rc; @@ -5260,6 +5723,9 @@ ble_gap_encryption_initiate(uint16_t conn_handle, rc = ble_sm_enc_initiate(conn_handle, key_size, ltk, ediv, rand_val, auth); return rc; +#else + return BLE_HS_ENOTSUP; +#endif } int @@ -5275,7 +5741,7 @@ ble_gap_unpair(const ble_addr_t *peer_addr) conn = ble_hs_conn_find_by_addr(peer_addr); if (conn != NULL) { - ble_gap_terminate(conn->bhc_handle, BLE_ERR_REM_USER_CONN_TERM); + ble_gap_terminate_with_conn(conn, BLE_ERR_REM_USER_CONN_TERM); } ble_hs_unlock(); @@ -5345,10 +5811,7 @@ void ble_gap_passkey_event(uint16_t conn_handle, struct ble_gap_passkey_params *passkey_params) { -#if !NIMBLE_BLE_SM - return; -#endif - +#if NIMBLE_BLE_SM struct ble_gap_event event; BLE_HS_LOG(DEBUG, "send passkey action request %d\n", @@ -5359,16 +5822,14 @@ ble_gap_passkey_event(uint16_t conn_handle, event.passkey.conn_handle = conn_handle; event.passkey.params = *passkey_params; ble_gap_call_conn_event_cb(&event, conn_handle); +#endif } void ble_gap_enc_event(uint16_t conn_handle, int status, int security_restored, int bonded) { -#if !NIMBLE_BLE_SM - return; -#endif - +#if NIMBLE_BLE_SM struct ble_gap_event event; memset(&event, 0, sizeof event); @@ -5398,15 +5859,13 @@ ble_gap_enc_event(uint16_t conn_handle, int status, if (bonded) { ble_gatts_bonding_established(conn_handle); } +#endif } void ble_gap_identity_event(uint16_t conn_handle) { -#if !NIMBLE_BLE_SM - return; -#endif - +#if NIMBLE_BLE_SM struct ble_gap_event event; BLE_HS_LOG(DEBUG, "send identity changed"); @@ -5415,15 +5874,13 @@ ble_gap_identity_event(uint16_t conn_handle) event.type = BLE_GAP_EVENT_IDENTITY_RESOLVED; event.identity_resolved.conn_handle = conn_handle; ble_gap_call_conn_event_cb(&event, conn_handle); +#endif } int ble_gap_repeat_pairing_event(const struct ble_gap_repeat_pairing *rp) { -#if !NIMBLE_BLE_SM - return 0; -#endif - +#if NIMBLE_BLE_SM struct ble_gap_event event; int rc; @@ -5432,6 +5889,9 @@ ble_gap_repeat_pairing_event(const struct ble_gap_repeat_pairing *rp) event.repeat_pairing = *rp; rc = ble_gap_call_conn_event_cb(&event, rp->conn_handle); return rc; +#else + return 0; +#endif } /***************************************************************************** @@ -5477,10 +5937,7 @@ void ble_gap_notify_tx_event(int status, uint16_t conn_handle, uint16_t attr_handle, int is_indication) { -#if !MYNEWT_VAL(BLE_GATT_NOTIFY) && !MYNEWT_VAL(BLE_GATT_INDICATE) - return; -#endif - +#if MYNEWT_VAL(BLE_GATT_NOTIFY) || MYNEWT_VAL(BLE_GATT_INDICATE) struct ble_gap_event event; memset(&event, 0, sizeof event); @@ -5489,7 +5946,9 @@ ble_gap_notify_tx_event(int status, uint16_t conn_handle, uint16_t attr_handle, event.notify_tx.status = status; event.notify_tx.attr_handle = attr_handle; event.notify_tx.indication = is_indication; + ble_gap_event_listener_call(&event); ble_gap_call_conn_event_cb(&event, conn_handle); +#endif } /***************************************************************************** diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap_priv.h index 90c32e22a..2b6b40696 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gap_priv.h @@ -81,23 +81,40 @@ void ble_gap_rx_le_scan_timeout(void); #if MYNEWT_VAL(BLE_EXT_ADV) void ble_gap_rx_ext_adv_report(struct ble_gap_ext_disc_desc *desc); -void ble_gap_rx_adv_set_terminated(struct hci_le_adv_set_terminated *evt); +void ble_gap_rx_adv_set_terminated(const struct ble_hci_ev_le_subev_adv_set_terminated *ev); #if MYNEWT_VAL(BLE_PERIODIC_ADV) -void ble_gap_rx_peroidic_adv_sync_estab(struct hci_le_subev_periodic_adv_sync_estab *evt); -void ble_gap_rx_periodic_adv_rpt(struct hci_le_subev_periodic_adv_rpt *evt); -void ble_gap_rx_periodic_adv_sync_lost(struct hci_le_subev_periodic_adv_sync_lost *evt); +void ble_gap_rx_peroidic_adv_sync_estab(const struct ble_hci_ev_le_subev_periodic_adv_sync_estab *ev); +void ble_gap_rx_periodic_adv_rpt(const struct ble_hci_ev_le_subev_periodic_adv_rpt *ev); +void ble_gap_rx_periodic_adv_sync_lost(const struct ble_hci_ev_le_subev_periodic_adv_sync_lost *ev); +void ble_gap_rx_periodic_adv_sync_transfer(const struct ble_hci_ev_le_subev_periodic_adv_sync_transfer *ev); #endif -void ble_gap_rx_scan_req_rcvd(struct hci_le_scan_req_rcvd *evt); +void ble_gap_rx_scan_req_rcvd(const struct ble_hci_ev_le_subev_scan_req_rcvd *ev); #endif void ble_gap_rx_adv_report(struct ble_gap_disc_desc *desc); -void ble_gap_rx_rd_rem_sup_feat_complete(struct hci_le_rd_rem_supp_feat_complete *evt); -int ble_gap_rx_conn_complete(struct hci_le_conn_complete *evt, uint8_t instance); -void ble_gap_rx_disconn_complete(struct hci_disconn_complete *evt); -void ble_gap_rx_update_complete(struct hci_le_conn_upd_complete *evt); -void ble_gap_rx_param_req(struct hci_le_conn_param_req *evt); +void ble_gap_rx_rd_rem_sup_feat_complete(const struct ble_hci_ev_le_subev_rd_rem_used_feat *ev); + +struct ble_gap_conn_complete +{ + uint8_t status; + uint16_t connection_handle; + uint8_t role; + uint8_t peer_addr_type; + uint8_t peer_addr[BLE_DEV_ADDR_LEN]; + uint16_t conn_itvl; + uint16_t conn_latency; + uint16_t supervision_timeout; + uint8_t master_clk_acc; + uint8_t local_rpa[BLE_DEV_ADDR_LEN]; + uint8_t peer_rpa[BLE_DEV_ADDR_LEN]; +}; + +int ble_gap_rx_conn_complete(struct ble_gap_conn_complete *evt, uint8_t instance); +void ble_gap_rx_disconn_complete(const struct ble_hci_ev_disconn_cmp *ev); +void ble_gap_rx_update_complete(const struct ble_hci_ev_le_subev_conn_upd_complete *ev); +void ble_gap_rx_param_req(const struct ble_hci_ev_le_subev_rem_conn_param_req *ev); int ble_gap_rx_l2cap_update_req(uint16_t conn_handle, struct ble_gap_upd_params *params); -void ble_gap_rx_phy_update_complete(struct hci_le_phy_upd_complete *evt); +void ble_gap_rx_phy_update_complete(const struct ble_hci_ev_le_subev_phy_update_complete *ev); void ble_gap_enc_event(uint16_t conn_handle, int status, int security_restored, int bonded); void ble_gap_passkey_event(uint16_t conn_handle, @@ -118,6 +135,7 @@ int ble_gap_master_in_progress(void); void ble_gap_preempt(void); void ble_gap_preempt_done(void); +int ble_gap_terminate_with_conn(struct ble_hs_conn *conn, uint8_t hci_reason); void ble_gap_conn_broken(uint16_t conn_handle, int reason); void ble_gap_reset_state(int reason); int32_t ble_gap_timer(void); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gattc.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gattc.c index c3ff060b0..a6e114cc2 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gattc.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gattc.c @@ -912,7 +912,7 @@ ble_gattc_proc_matches_conn_rx_entry(struct ble_gattc_proc *proc, void *arg) criteria->matching_rx_entry = ble_gattc_rx_entry_find( proc->op, criteria->rx_entries, criteria->num_rx_entries); - return 1; + return (criteria->matching_rx_entry != NULL); } static void diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gatts.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gatts.c index fccf10274..e53cc116f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gatts.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_gatts.c @@ -719,6 +719,8 @@ ble_gatts_clt_cfg_access_locked(struct ble_hs_conn *conn, uint16_t attr_handle, /* Successful writes get persisted for bonded connections. */ if (conn->bhc_sec_state.bonded) { out_cccd->peer_addr = conn->bhc_peer_addr; + out_cccd->peer_addr.type = + ble_hs_misc_peer_addr_type_to_id(conn->bhc_peer_addr.type); out_cccd->chr_val_handle = chr_val_handle; out_cccd->flags = clt_cfg->flags; out_cccd->value_changed = 0; @@ -1464,6 +1466,8 @@ ble_gatts_rx_indicate_ack(uint16_t conn_handle, uint16_t chr_val_handle) !(clt_cfg->flags & BLE_GATTS_CLT_CFG_F_MODIFIED); if (persist) { cccd_value.peer_addr = conn->bhc_peer_addr; + cccd_value.peer_addr.type = + ble_hs_misc_peer_addr_type_to_id(conn->bhc_peer_addr.type); cccd_value.chr_val_handle = chr_val_handle; cccd_value.flags = clt_cfg->flags; cccd_value.value_changed = 0; @@ -1692,13 +1696,12 @@ ble_gatts_bonding_established(uint16_t conn_handle) BLE_HS_DBG_ASSERT(conn->bhc_sec_state.bonded); cccd_value.peer_addr = conn->bhc_peer_addr; + cccd_value.peer_addr.type = + ble_hs_misc_peer_addr_type_to_id(conn->bhc_peer_addr.type); gatt_srv = &conn->bhc_gatt_svr; for (i = 0; i < gatt_srv->num_clt_cfgs; ++i) { - clt_cfg = (gatt_srv->clt_cfgs + i); - if (clt_cfg == NULL) { - continue; - } + clt_cfg = &gatt_srv->clt_cfgs[i]; if (clt_cfg->flags != 0) { cccd_value.chr_val_handle = clt_cfg->chr_val_handle; @@ -1743,6 +1746,8 @@ ble_gatts_bonding_restored(uint16_t conn_handle) BLE_HS_DBG_ASSERT(conn->bhc_sec_state.bonded); cccd_key.peer_addr = conn->bhc_peer_addr; + cccd_key.peer_addr.type = + ble_hs_misc_peer_addr_type_to_id(conn->bhc_peer_addr.type); cccd_key.chr_val_handle = 0; cccd_key.idx = 0; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs.c index adb8046a7..d819e20df 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs.c @@ -504,20 +504,20 @@ ble_hs_sched_start(void) static void ble_hs_event_rx_hci_ev(struct ble_npl_event *ev) { - uint8_t *hci_evt; + const struct ble_hci_ev *hci_ev; int rc; - hci_evt = ble_npl_event_get_arg(ev); + hci_ev = ble_npl_event_get_arg(ev); rc = os_memblock_put(&ble_hs_hci_ev_pool, ev); BLE_HS_DBG_ASSERT_EVAL(rc == 0); #if BLE_MONITOR - ble_monitor_send(BLE_MONITOR_OPCODE_EVENT_PKT, hci_evt, - hci_evt[1] + BLE_HCI_EVENT_HDR_LEN); + ble_monitor_send(BLE_MONITOR_OPCODE_EVENT_PKT, hci_ev, + hci_ev->length + sizeof(*hci_ev)); #endif - ble_hs_hci_evt_process(hci_evt); + ble_hs_hci_evt_process(hci_ev); } static void @@ -684,7 +684,7 @@ ble_hs_rx_data(struct os_mbuf *om, void *arg) /* If flow control is enabled, mark this packet with its corresponding * connection handle. */ - ble_hs_flow_fill_acl_usrhdr(om); + ble_hs_flow_track_data_mbuf(om); rc = ble_mqueue_put(&ble_hs_rx_q, ble_hs_evq, om); if (rc != 0) { @@ -747,8 +747,10 @@ ble_hs_init(void) rc = ble_hs_conn_init(); SYSINIT_PANIC_ASSERT(rc == 0); +#if MYNEWT_VAL(BLE_PERIODIC_ADV) rc = ble_hs_periodic_sync_init(); SYSINIT_PANIC_ASSERT(rc == 0); +#endif rc = ble_l2cap_init(); SYSINIT_PANIC_ASSERT(rc == 0); @@ -784,15 +786,15 @@ ble_hs_init(void) ble_hs_dbg_mutex_locked = 0; #endif - /* Configure the HCI transport to communicate with a host. */ - ble_hci_trans_cfg_hs(ble_hs_hci_rx_evt, NULL, ble_hs_rx_data, NULL); - #ifdef MYNEWT ble_hs_evq_set((struct ble_npl_eventq *)os_eventq_dflt_get()); #else ble_hs_evq_set(nimble_port_get_dflt_eventq()); #endif + /* Configure the HCI transport to communicate with a host. */ + ble_hci_trans_cfg_hs(ble_hs_hci_rx_evt, NULL, ble_hs_rx_data, NULL); + #if BLE_MONITOR rc = ble_monitor_init(); SYSINIT_PANIC_ASSERT(rc == 0); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_adv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_adv.c index 1066182d0..1d938b958 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_adv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_adv.c @@ -63,8 +63,8 @@ ble_hs_adv_set_hdr(uint8_t type, uint8_t data_len, uint8_t max_len, static int ble_hs_adv_set_flat_mbuf(uint8_t type, int data_len, const void *data, - uint8_t *dst, uint8_t *dst_len, uint8_t max_len, - struct os_mbuf *om) + uint8_t *dst, uint8_t *dst_len, uint8_t max_len, + struct os_mbuf *om) { int rc; @@ -235,11 +235,10 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, uint8_t type; int8_t tx_pwr_lvl; + uint8_t dst_len_local; int rc; - if (dst_len) { - *dst_len = 0; - } + dst_len_local = 0; /*** 0x01 - Flags. */ /* The application has two options concerning the flags field: @@ -251,7 +250,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, */ if (adv_fields->flags != 0) { rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_FLAGS, 1, - &adv_fields->flags, dst, dst_len, + &adv_fields->flags, dst, &dst_len_local, max_len, om); if (rc != 0) { @@ -268,7 +267,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, } rc = ble_hs_adv_set_array_uuid16(type, adv_fields->num_uuids16, - adv_fields->uuids16, dst, dst_len, + adv_fields->uuids16, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -284,7 +283,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, } rc = ble_hs_adv_set_array_uuid32(type, adv_fields->num_uuids32, - adv_fields->uuids32, dst, dst_len, + adv_fields->uuids32, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -300,7 +299,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, } rc = ble_hs_adv_set_array_uuid128(type, adv_fields->num_uuids128, - adv_fields->uuids128, dst, dst_len, + adv_fields->uuids128, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -316,7 +315,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, } rc = ble_hs_adv_set_flat_mbuf(type, adv_fields->name_len, - adv_fields->name, dst, dst_len, max_len, + adv_fields->name, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -338,7 +337,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, } rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_TX_PWR_LVL, 1, - &tx_pwr_lvl, dst, dst_len, max_len, om); + &tx_pwr_lvl, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; } @@ -349,7 +348,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SLAVE_ITVL_RANGE, BLE_HS_ADV_SLAVE_ITVL_RANGE_LEN, adv_fields->slave_itvl_range, dst, - dst_len, max_len, om); + &dst_len_local, max_len, om); if (rc != 0) { return rc; } @@ -359,7 +358,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, if (adv_fields->svc_data_uuid16 != NULL && adv_fields->svc_data_uuid16_len) { rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID16, adv_fields->svc_data_uuid16_len, - adv_fields->svc_data_uuid16, dst, dst_len, + adv_fields->svc_data_uuid16, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -373,7 +372,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_PUBLIC_TGT_ADDR, BLE_HS_ADV_PUBLIC_TGT_ADDR_ENTRY_LEN * adv_fields->num_public_tgt_addrs, - adv_fields->public_tgt_addr, dst, dst_len, + adv_fields->public_tgt_addr, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -384,7 +383,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, if (adv_fields->appearance_is_present) { rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_APPEARANCE, BLE_HS_ADV_APPEARANCE_LEN, - &adv_fields->appearance, dst, dst_len, + &adv_fields->appearance, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -394,7 +393,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, /*** 0x1a - Advertising interval. */ if (adv_fields->adv_itvl_is_present) { rc = ble_hs_adv_set_array16(BLE_HS_ADV_TYPE_ADV_ITVL, 1, - &adv_fields->adv_itvl, dst, dst_len, + &adv_fields->adv_itvl, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -405,7 +404,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, if (adv_fields->svc_data_uuid32 != NULL && adv_fields->svc_data_uuid32_len) { rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID32, adv_fields->svc_data_uuid32_len, - adv_fields->svc_data_uuid32, dst, dst_len, + adv_fields->svc_data_uuid32, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -417,7 +416,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_SVC_DATA_UUID128, adv_fields->svc_data_uuid128_len, adv_fields->svc_data_uuid128, dst, - dst_len, max_len, om); + &dst_len_local, max_len, om); if (rc != 0) { return rc; } @@ -426,7 +425,7 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, /*** 0x24 - URI. */ if (adv_fields->uri != NULL && adv_fields->uri_len) { rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_URI, adv_fields->uri_len, - adv_fields->uri, dst, dst_len, max_len, + adv_fields->uri, dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; @@ -438,12 +437,16 @@ adv_set_fields(const struct ble_hs_adv_fields *adv_fields, rc = ble_hs_adv_set_flat_mbuf(BLE_HS_ADV_TYPE_MFG_DATA, adv_fields->mfg_data_len, adv_fields->mfg_data, - dst, dst_len, max_len, om); + dst, &dst_len_local, max_len, om); if (rc != 0) { return rc; } } + if (dst_len) { + *dst_len = dst_len_local; + } + return 0; } @@ -489,7 +492,7 @@ ble_hs_adv_parse_uuids16(struct ble_hs_adv_fields *adv_fields, for (i = 0; i < adv_fields->num_uuids16; i++) { ble_uuid_init_from_buf(&uuid, data + i * 2, 2); - adv_fields->uuids16[i] = uuid.u16; + ble_hs_adv_uuids16[i] = uuid.u16; } return 0; @@ -511,7 +514,7 @@ ble_hs_adv_parse_uuids32(struct ble_hs_adv_fields *adv_fields, for (i = 0; i < adv_fields->num_uuids32; i++) { ble_uuid_init_from_buf(&uuid, data + i * 4, 4); - adv_fields->uuids32[i] = uuid.u32; + ble_hs_adv_uuids32[i] = uuid.u32; } return 0; @@ -533,7 +536,7 @@ ble_hs_adv_parse_uuids128(struct ble_hs_adv_fields *adv_fields, for (i = 0; i < adv_fields->num_uuids128; i++) { ble_uuid_init_from_buf(&uuid, data + i * 16, 16); - adv_fields->uuids128[i] = uuid.u128; + ble_hs_adv_uuids128[i] = uuid.u128; } return 0; @@ -541,11 +544,12 @@ ble_hs_adv_parse_uuids128(struct ble_hs_adv_fields *adv_fields, static int ble_hs_adv_parse_one_field(struct ble_hs_adv_fields *adv_fields, - uint8_t *total_len, uint8_t *src, uint8_t src_len) + uint8_t *total_len, const uint8_t *src, + uint8_t src_len) { uint8_t data_len; uint8_t type; - uint8_t *data; + const uint8_t *data; int rc; if (src_len < 1) { @@ -715,8 +719,8 @@ ble_hs_adv_parse_one_field(struct ble_hs_adv_fields *adv_fields, } int -ble_hs_adv_parse_fields(struct ble_hs_adv_fields *adv_fields, uint8_t *src, - uint8_t src_len) +ble_hs_adv_parse_fields(struct ble_hs_adv_fields *adv_fields, + const uint8_t *src, uint8_t src_len) { uint8_t field_len; int rc; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_atomic.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_atomic.c index 5d51fbe1a..f26ba7acc 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_atomic.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_atomic.c @@ -28,6 +28,11 @@ ble_hs_atomic_conn_delete(uint16_t conn_handle) conn = ble_hs_conn_find(conn_handle); if (conn != NULL) { ble_hs_conn_remove(conn); +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) + if (conn->psync) { + ble_hs_periodic_sync_free(conn->psync); + } +#endif ble_hs_conn_free(conn); } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn.c index b45128e23..31830c98a 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn.c @@ -84,14 +84,29 @@ ble_hs_conn_chan_find_by_dcid(struct ble_hs_conn *conn, uint16_t cid) if (chan->dcid == cid) { return chan; } - if (chan->dcid > cid) { - return NULL; - } } return NULL; } +bool +ble_hs_conn_chan_exist(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) +{ +#if !NIMBLE_BLE_CONNECT + return NULL; +#endif + + struct ble_l2cap_chan *tmp; + + SLIST_FOREACH(tmp, &conn->bhc_channels, next) { + if (chan == tmp) { + return true; + } + } + + return false; +} + int ble_hs_conn_chan_insert(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) { @@ -197,7 +212,21 @@ ble_hs_conn_delete_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) } SLIST_REMOVE(&conn->bhc_channels, chan, ble_l2cap_chan, next); - ble_l2cap_chan_free(chan); + ble_l2cap_chan_free(conn, chan); +} + +void +ble_hs_conn_foreach(ble_hs_conn_foreach_fn *cb, void *arg) +{ + struct ble_hs_conn *conn; + + BLE_HS_DBG_ASSERT(ble_hs_locked_by_cur_task()); + + SLIST_FOREACH(conn, &ble_hs_conns, bhc_next) { + if (cb(conn, arg) != 0) { + return; + } + } } void @@ -377,7 +406,7 @@ ble_hs_conn_addrs(const struct ble_hs_conn *conn, /* Determine our address information. */ addrs->our_id_addr.type = - ble_hs_misc_addr_type_to_id(conn->bhc_our_addr_type); + ble_hs_misc_own_addr_type_to_id(conn->bhc_our_addr_type); #if MYNEWT_VAL(BLE_EXT_ADV) /* With EA enabled random address for slave connection is per advertising diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn_priv.h index 92aacd405..0e451194d 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_conn_priv.h @@ -38,6 +38,15 @@ typedef uint8_t ble_hs_conn_flags_t; #define BLE_HS_CONN_F_TERMINATING 0x02 #define BLE_HS_CONN_F_TX_FRAG 0x04 /* Cur ACL packet partially txed. */ +#if MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) +#define BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN_REM \ + ((MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) % (8 * sizeof(uint32_t))) ? 1 : 0) + +#define BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN \ + (MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) / (8 * sizeof(uint32_t)) + \ + BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN_REM) +#endif + struct ble_hs_conn { SLIST_ENTRY(ble_hs_conn) bhc_next; uint16_t bhc_handle; @@ -61,6 +70,9 @@ struct ble_hs_conn { struct ble_l2cap_chan_list bhc_channels; struct ble_l2cap_chan *bhc_rx_chan; /* Channel rxing current packet. */ ble_npl_time_t bhc_rx_timeout; +#if MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) + uint32_t l2cap_coc_cid_mask[BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN]; +#endif /** * Count of packets sent over this connection that the controller has not @@ -86,6 +98,10 @@ struct ble_hs_conn { ble_gap_event_fn *bhc_cb; void *bhc_cb_arg; + +#if MYNEWT_VAL(BLE_PERIODIC_ADV) + struct ble_hs_periodic_sync *psync; +#endif }; struct ble_hs_conn_addrs { @@ -110,15 +126,19 @@ struct ble_l2cap_chan *ble_hs_conn_chan_find_by_scid(struct ble_hs_conn *conn, uint16_t cid); struct ble_l2cap_chan *ble_hs_conn_chan_find_by_dcid(struct ble_hs_conn *conn, uint16_t cid); +bool ble_hs_conn_chan_exist(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); int ble_hs_conn_chan_insert(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); -void -ble_hs_conn_delete_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); +void ble_hs_conn_delete_chan(struct ble_hs_conn *conn, + struct ble_l2cap_chan *chan); void ble_hs_conn_addrs(const struct ble_hs_conn *conn, struct ble_hs_conn_addrs *addrs); int32_t ble_hs_conn_timer(void); +typedef int ble_hs_conn_foreach_fn(struct ble_hs_conn *conn, void *arg); +void ble_hs_conn_foreach(ble_hs_conn_foreach_fn *cb, void *arg); + int ble_hs_conn_init(void); #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg.c deleted file mode 100644 index 6659c00df..000000000 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_dbg.c +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -#include -#include -#include -#include -#include "os/os.h" -#include "nimble/hci_common.h" -#include "nimble/ble_hci_trans.h" -#include "host/ble_monitor.h" -#include "ble_hs_priv.h" - -static void -ble_hs_dbg_le_event_disp(uint8_t subev, uint8_t len, uint8_t *evdata) -{ - int8_t rssi; - uint8_t advlen; - uint8_t status; - int i; - int imax; - uint8_t *dptr; - char *adv_ptr; - char adv_data_buf[32]; - - switch (subev) { - case BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE: - case BLE_HCI_LE_SUBEV_CONN_COMPLETE: - status = evdata[0]; - if (status == BLE_ERR_SUCCESS) { - BLE_HS_LOG(DEBUG, "LE connection complete. handle=%u role=%u " - "paddrtype=%u addr=%x.%x.%x.%x.%x.%x ", - get_le16(evdata + 1), evdata[3], evdata[4], - evdata[10], evdata[9], evdata[8], evdata[7], - evdata[6], evdata[5]); - - evdata += 11; - if (subev == BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE) { - BLE_HS_LOG(DEBUG, "local_rpa=%x.%x.%x.%x.%x.%x " - "peer_rpa=%x.%x.%x.%x.%x.%x ", - evdata[5], evdata[4], evdata[3], evdata[2], - evdata[1], evdata[0], - evdata[11], evdata[10], evdata[9], evdata[8], - evdata[7], evdata[6]); - - evdata += 12; - } - BLE_HS_LOG(DEBUG, "itvl=%u latency=%u spvn_tmo=%u mca=%u\n", - get_le16(evdata), get_le16(evdata + 2), - get_le16(evdata + 4), evdata[6]); - } else { - BLE_HS_LOG(DEBUG, "LE connection complete. FAIL (status=%u)\n", - status); - } - break; - case BLE_HCI_LE_SUBEV_ADV_RPT: - advlen = evdata[9]; - rssi = evdata[10 + advlen]; - BLE_HS_LOG(DEBUG, "LE advertising report. len=%u num=%u evtype=%u " - "addrtype=%u addr=%x.%x.%x.%x.%x.%x advlen=%u " - "rssi=%d\n", len, evdata[0], evdata[1], evdata[2], - evdata[8], evdata[7], evdata[6], evdata[5], - evdata[4], evdata[3], advlen, rssi); - if (advlen) { - dptr = &evdata[10]; - while (advlen > 0) { - memset(adv_data_buf, 0, 32); - imax = advlen; - if (imax > 8) { - imax = 8; - } - adv_ptr = &adv_data_buf[0]; - for (i = 0; i < imax; ++i) { - snprintf(adv_ptr, 4, "%02x ", *dptr); - adv_ptr += 3; - ++dptr; - } - advlen -= imax; - BLE_HS_LOG(DEBUG, "%s\n", adv_data_buf); - } - } - break; - case BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE: - status = evdata[0]; - if (status == BLE_ERR_SUCCESS) { - BLE_HS_LOG(DEBUG, "LE Connection Update Complete. handle=%u " - "itvl=%u latency=%u timeout=%u\n", - get_le16(evdata + 1), get_le16(evdata + 3), - get_le16(evdata + 5), get_le16(evdata + 7)); - } else { - BLE_HS_LOG(DEBUG, "LE Connection Update Complete. FAIL " - "(status=%u)\n", status); - } - break; - - case BLE_HCI_LE_SUBEV_DATA_LEN_CHG: - BLE_HS_LOG(DEBUG, "LE Data Length Change. handle=%u max_tx_bytes=%u " - "max_tx_time=%u max_rx_bytes=%u max_rx_time=%u\n", - get_le16(evdata), get_le16(evdata + 2), - get_le16(evdata + 4), get_le16(evdata + 6), - get_le16(evdata + 8)); - break; - case BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ: - BLE_HS_LOG(DEBUG, "LE Remote Connection Parameter Request. handle=%u " - "min_itvl=%u max_itvl=%u latency=%u timeout=%u\n", - get_le16(evdata), get_le16(evdata + 2), - get_le16(evdata + 4), get_le16(evdata + 6), - get_le16(evdata + 8)); - break; - - case BLE_HCI_LE_SUBEV_RD_REM_USED_FEAT: - status = evdata[0]; - if (status == BLE_ERR_SUCCESS) { - BLE_HS_LOG(DEBUG, "LE Remote Used Features. handle=%u feat=", - get_le16(evdata + 1)); - for (i = 0; i < BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN; ++i) { - BLE_HS_LOG(DEBUG, "%02x ", evdata[3 + i]); - } - BLE_HS_LOG(DEBUG, "\n"); - } else { - BLE_HS_LOG(DEBUG, "LE Remote Used Features. FAIL (status=%u)\n", - status); - } - break; - - case BLE_HCI_LE_SUBEV_LT_KEY_REQ: - BLE_HS_LOG(DEBUG, "LE LTK Req. handle=%u rand=%x%x encdiv=%u\n", - get_le16(evdata), get_le32(evdata + 6), - get_le32(evdata + 2), get_le16(evdata + 10)); - break; - - case BLE_HCI_LE_SUBEV_PHY_UPDATE_COMPLETE: - BLE_HS_LOG(DEBUG, "PHY update. handle=%u tx=%u rx=%u\n", - get_le16(evdata + 1), evdata[3], evdata[4]); - break; - - case BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT: - { - struct hci_le_subev_direct_adv_rpt *data = (void *) evdata; - struct hci_le_subev_direct_adv_rpt_param *params = data->params; - - if (len < sizeof(*data) || - len < sizeof(*data) + data->num_reports * sizeof(*params)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Directed Advertising Report " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Directed Advertising Report len=%u " - "num=0x%02x ", len, data->num_reports); - - for (i = 0; i < data->num_reports; i++) { - BLE_HS_LOG(DEBUG, "[%d]={evttype=0x%02x}\n", i, params->evt_type); - params += 1; - } - break; - } - - case BLE_HCI_LE_SUBEV_RD_LOC_P256_PUBKEY: - { - struct hci_le_subev_rd_loc_p256_pubkey *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Read Local P-256 Public Key " - "Complete Event len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Read Local P-256 Public Key Complete " - "len=%u status=0x%02x\n", len, data->status); - break; - } - - case BLE_HCI_LE_SUBEV_GEN_DHKEY_COMPLETE: - { - struct hci_le_subev_gen_dhkey_complete *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Generate DHKey Complete " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Generate DHKey Complete Event len=%u " - "status=0x%02x\n", len, data->status); - break; - } - -#if MYNEWT_VAL(BLE_EXT_ADV) - case BLE_HCI_LE_SUBEV_EXT_ADV_RPT: - { - struct hci_le_subev_ext_adv_rpt *data = (void *) evdata; - struct hci_ext_adv_report_param *params; - - if (len < sizeof(*data) + sizeof(*params)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Extended Advertising Report " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Extended Advertising Report len=%u num=0x%02x ", - len, data->num_reports); - - for (i = 0, dptr = &evdata[1]; i < data->num_reports; i++) { - params = (void *) dptr; - BLE_HS_LOG(DEBUG, "[%d]={evttype=0x%04x advlen=%u}\n", - i, le16toh(params->evt_type), params->adv_data_len); - dptr += sizeof(*params) + params->adv_data_len; - } - break; - } -#if MYNEWT_VAL(BLE_PERIODIC_ADV) - case BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_ESTAB: - { - struct hci_le_subev_periodic_adv_sync_estab *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Sync " - "Established len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Periodic Advertising Sync Established " - "len=%u status=0x%02x handle=0x%04x", len, data->status, - le16toh(data->sync_handle)); - break; - } - - case BLE_HCI_LE_SUBEV_PERIODIC_ADV_RPT: - { - struct hci_le_subev_periodic_adv_rpt *data = (void *) evdata; - - if (len < sizeof(*data) || len != sizeof(*data) + data->data_length) { - BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Report " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Periodic Advertising Report " - "len=%u handle=0x%04x data_status=0x%02x data_len=0x%02x", - len, le16toh(data->sync_handle), data->data_status, - data->data_length); - break; - } - - case BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_LOST: - { - struct hci_le_subev_periodic_adv_sync_lost *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Periodic Advertising Sync Lost " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Periodic Advertising Sync Lost " - "len=%u handle=0x%04x", len, le16toh(data->sync_handle)); - break; - } -#endif - - case BLE_HCI_LE_SUBEV_SCAN_TIMEOUT: - if (len) { - BLE_HS_LOG(DEBUG, "Corrupted LE Scan Timeout len=%u", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Scan Timeout Event len=%u", len); - break; - - case BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED: - { - struct hci_le_subev_adv_set_terminated *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Advertising Set Terminated " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Advertising Set Terminated len=%u " - "status=0x%02x adv_handle=0x%02x conn_handle=0x%04x " - "num_compl_ext_adv_ev=0x%02x", len, data->status, - data->adv_handle, le16toh(data->conn_handle), - data->num_compl_ext_adv_ev); - break; - } - - case BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD: - { - struct hci_le_subev_scan_req_rcvd *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Scan Request Received " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Scan Request Received len=%u " - "adv_handle=0x%02x", len, data->adv_handle); - break; - } -#endif /* MYNEWT_VAL(BLE_EXT_ADV) */ - - case BLE_HCI_LE_SUBEV_CHAN_SEL_ALG: - { - struct hci_le_subev_chan_sel_alg *data = (void *) evdata; - - if (len != sizeof(*data)) { - BLE_HS_LOG(DEBUG, "Corrupted LE Channel Selection Algorithm " - "len=%u\n", len); - break; - } - - BLE_HS_LOG(DEBUG, "LE Channel Selection Algorithm len=%u " - "conn_handle=0x%04x chan_sel_alg=0x%02x\n", len, - le16toh(data->conn_handle), data->chan_sel_alg); - break; - } - - default: - BLE_HS_LOG(DEBUG, "LE Meta SubEvent op=0x%02x\n", subev); - break; - } -} - -/** - * Display a disconnection complete command. - * - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_disconn_comp_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t status; - uint8_t reason; - uint16_t handle; - - status = evdata[0]; - handle = get_le16(evdata + 1); - /* Ignore reason if status is not success */ - if (status != BLE_ERR_SUCCESS) { - reason = 0; - } else { - reason = evdata[3]; - } - BLE_HS_LOG(DEBUG, "Disconnection Complete: status=%u handle=%u " - "reason=%u\n", status, handle, reason); -} - -/** - * Display an encryption change event or encryption key refresh event - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_encrypt_chg_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t status; - uint8_t enabled; - uint16_t handle; - - status = evdata[0]; - handle = get_le16(evdata + 1); - - /* Ignore reason if status is not success */ - if (status != BLE_ERR_SUCCESS) { - enabled = 0; - } else { - enabled = evdata[3]; - } - BLE_HS_LOG(DEBUG, "Encrypt change: status=%u handle=%u state=%u\n", - status, handle, enabled); -} - -/** - * Display an encryption encryption key refresh event - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_encrypt_refresh_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t status; - uint16_t handle; - - status = evdata[0]; - handle = get_le16(evdata + 1); - - BLE_HS_LOG(DEBUG, "Encrypt key refresh: status=%u handle=%u\n", - status, handle); -} - -/** - * Display a version information event - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_rd_rem_ver_disp(uint8_t *evdata, uint8_t len) -{ - BLE_HS_LOG(DEBUG, "Remote Version Info: status=%u handle=%u vers_nr=%u " - "compid=%u subver=%u\n", - evdata[0], get_le16(evdata + 1), evdata[3], - get_le16(evdata + 4), get_le16(evdata + 6)); -} - -/** - * Display the number of completed packets event - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_num_comp_pkts_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t handles; - uint8_t *handle_ptr; - uint16_t handle; - uint16_t pkts; - - handles = evdata[0]; - if (len != ((handles * 4) + 1)) { - BLE_HS_LOG(DEBUG, "ERR: Number of Completed Packets bad length: " - "num_handles=%u len=%u\n", handles, len); - return; - - } - - BLE_HS_LOG(DEBUG, "Number of Completed Packets: num_handles=%u\n", - handles); - if (handles) { - handle_ptr = evdata + 1; - while (handles) { - handle = get_le16(handle_ptr); - pkts = get_le16(handle_ptr + 2); - handle_ptr += 4; - BLE_HS_LOG(DEBUG, "handle:%u pkts:%u\n", handle, pkts); - --handles; - } - } -} - -/** - * Display the authenticated payload timeout event - * - * @param evdata - * @param len - */ -static void -ble_hs_dbg_auth_pyld_tmo_disp(uint8_t *evdata, uint8_t len) -{ - uint16_t handle; - - if (len != sizeof(uint16_t)) { - BLE_HS_LOG(DEBUG, "ERR: AuthPyldTmoEvent bad length %u\n", len); - return; - - } - - handle = get_le16(evdata); - BLE_HS_LOG(DEBUG, "AuthPyldTmo: handle=%u\n", handle); -} - - -static void -ble_hs_dbg_cmd_comp_info_params(uint8_t status, uint8_t ocf, uint8_t *evdata) -{ - int i; - uint8_t *dptr; - - if (status != BLE_ERR_SUCCESS) { - return; - } - - switch (ocf) { - case BLE_HCI_OCF_IP_RD_LOCAL_VER: - BLE_HS_LOG(DEBUG, "hci_ver=%u hci_rev=%u lmp_ver=%u mfrg=%u " - "lmp_subver=%u", - evdata[0], get_le16(evdata + 1), evdata[3], - get_le16(evdata + 4), get_le16(evdata + 6)); - break; - case BLE_HCI_OCF_IP_RD_LOC_SUPP_CMD: - BLE_HS_LOG(DEBUG, "supp_cmds="); - dptr = evdata; - for (i = 0; i < 8; ++i) { - BLE_HS_LOG(DEBUG, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:", - dptr[0], dptr[1], dptr[2], dptr[3], - dptr[4], dptr[5], dptr[6], dptr[7]); - dptr += 8; - } - break; - case BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT: - BLE_HS_LOG(DEBUG, "supp_feat=0x%x%08x", - get_le32(evdata + 4), get_le32(evdata)); - break; - case BLE_HCI_OCF_IP_RD_BD_ADDR: - BLE_HS_LOG(DEBUG, "bd_addr=%x:%x:%x:%x:%x:%x", - evdata[5], evdata[4], evdata[3], - evdata[2], evdata[1], evdata[0]); - break; - default: - break; - } -} - -static void -ble_hs_dbg_cmd_complete_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t cmd_pkts; - uint8_t ogf; - uint8_t ocf; - uint8_t status; - uint16_t opcode; - - if (len < 3) { - BLE_HS_LOG(DEBUG, "Invalid command complete: len=%d " - "(expected >= 3)", len); - goto done; - } - - cmd_pkts = evdata[0]; - opcode = get_le16(evdata + 1); - ogf = BLE_HCI_OGF(opcode); - ocf = BLE_HCI_OCF(opcode); - - BLE_HS_LOG(DEBUG, "Command complete: cmd_pkts=%u ogf=0x%x ocf=0x%x", - cmd_pkts, ogf, ocf); - - if (len == 3) { - goto done; - } - - status = evdata[3]; - BLE_HS_LOG(DEBUG, " status=%u ", status); - - /* Move past header and status */ - evdata += 4; - - /* Display parameters based on command. */ - switch (ogf) { - case BLE_HCI_OGF_INFO_PARAMS: - ble_hs_dbg_cmd_comp_info_params(status, ocf, evdata); - break; - case BLE_HCI_OGF_STATUS_PARAMS: - switch (ocf) { - case BLE_HCI_OCF_RD_RSSI: - BLE_HS_LOG(DEBUG, "handle=%u rssi=%d", get_le16(evdata), - (int8_t)evdata[2]); - break; - default: - break; - } - break; - case BLE_HCI_OGF_LE: - switch (ocf) { - case BLE_HCI_OCF_LE_RD_CHAN_MAP: - BLE_HS_LOG(DEBUG, "handle=%u chanmap=%x.%x.%x.%x.%x", - get_le16(evdata), evdata[2], evdata[3], evdata[4], - evdata[5], evdata[6]); - break; - case BLE_HCI_OCF_LE_RD_MAX_DATA_LEN: - BLE_HS_LOG(DEBUG, "txoct=%u txtime=%u rxoct=%u rxtime=%u", - get_le16(evdata), get_le16(evdata + 2), - get_le16(evdata + 4), get_le16(evdata + 6)); - break; - case BLE_HCI_OCF_LE_RD_SUPP_STATES: - BLE_HS_LOG(DEBUG, "states=0x%x%08x", get_le32(evdata + 4), - get_le32(evdata)); - break; - case BLE_HCI_OCF_LE_ENCRYPT: - BLE_HS_LOG(DEBUG, "encdata=0x%02x%02x%02x%02x%02x%02x%02x%02x", - evdata[15], evdata[14], evdata[13], evdata[12], - evdata[11], evdata[10], evdata[9], evdata[8]); - BLE_HS_LOG(DEBUG, "%02x%02x%02x%02x%02x%02x%02x%02x", - evdata[7], evdata[6], evdata[5], evdata[4], - evdata[3], evdata[2], evdata[1], evdata[0]); - - break; - case BLE_HCI_OCF_LE_RAND: - BLE_HS_LOG(DEBUG, "rand=0x%02x%02x%02x%02x%02x%02x%02x%02x", - evdata[0], evdata[1], evdata[2], evdata[3], - evdata[4], evdata[5], evdata[6], evdata[7]); - break; - case BLE_HCI_OCF_LE_RD_SUGG_DEF_DATA_LEN: - BLE_HS_LOG(DEBUG, "txoct=%u txtime=%u", get_le16(evdata), - get_le16(evdata + 2)); - break; - case BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY: - case BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY: - case BLE_HCI_OCF_LE_SET_DATA_LEN: - BLE_HS_LOG(DEBUG, "handle=%u", get_le16(evdata)); - break; - default: - break; - } - break; - default: - break; - } - -done: - BLE_HS_LOG(DEBUG, "\n"); -} - -static void -ble_hs_dbg_cmd_status_disp(uint8_t *evdata, uint8_t len) -{ - uint8_t ogf; - uint8_t ocf; - uint16_t opcode; - - opcode = get_le16(evdata + 2); - ogf = BLE_HCI_OGF(opcode); - ocf = BLE_HCI_OCF(opcode); - - BLE_HS_LOG(DEBUG, "Command Status: status=%u cmd_pkts=%u ocf=0x%x " - "ogf=0x%x\n", evdata[0], evdata[1], ocf, ogf); -} - -void -ble_hs_dbg_event_disp(uint8_t *evbuf) -{ -#if MYNEWT_VAL(LOG_LEVEL) > LOG_LEVEL_DEBUG || BLE_MONITOR - return; -#endif - - uint8_t *evdata; - uint8_t evcode; - uint8_t len; - - /* Extract event code and length; move pointer to event parameter data */ - evcode = evbuf[0]; - len = evbuf[1]; - evdata = evbuf + BLE_HCI_EVENT_HDR_LEN; - - switch (evcode) { - case BLE_HCI_EVCODE_DISCONN_CMP: - ble_hs_dbg_disconn_comp_disp(evdata, len); - break; - case BLE_HCI_EVCODE_ENC_KEY_REFRESH: - ble_hs_dbg_encrypt_refresh_disp(evdata, len); - break; - case BLE_HCI_EVCODE_ENCRYPT_CHG: - ble_hs_dbg_encrypt_chg_disp(evdata, len); - break; - case BLE_HCI_EVCODE_RD_REM_VER_INFO_CMP: - ble_hs_dbg_rd_rem_ver_disp(evdata, len); - break; - case BLE_HCI_EVCODE_COMMAND_COMPLETE: - ble_hs_dbg_cmd_complete_disp(evdata, len); - break; - case BLE_HCI_EVCODE_COMMAND_STATUS: - ble_hs_dbg_cmd_status_disp(evdata, len); - break; - case BLE_HCI_EVCODE_NUM_COMP_PKTS: - ble_hs_dbg_num_comp_pkts_disp(evdata, len); - break; - case BLE_HCI_EVCODE_LE_META: - ble_hs_dbg_le_event_disp(evdata[0], len-1, evdata + 1); - break; - case BLE_HCI_EVCODE_AUTH_PYLD_TMO: - ble_hs_dbg_auth_pyld_tmo_disp(evdata, len); - break; - default: - BLE_HS_LOG(DEBUG, "Unknown event 0x%x len=%u\n", evcode, len); - break; - } -} - -void -ble_hs_dbg_set_sync_state(uint8_t sync_state) -{ - ble_hs_sync_state = sync_state; -} diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow.c index 35e3cd9ab..2520c8541 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow.c @@ -40,14 +40,31 @@ static ble_npl_event_fn ble_hs_flow_event_cb; static struct ble_npl_event ble_hs_flow_ev; +/* Connection handle associated with each mbuf in ACL pool */ +static uint16_t ble_hs_flow_mbuf_conn_handle[ MYNEWT_VAL(BLE_ACL_BUF_COUNT) ]; + +static inline int +ble_hs_flow_mbuf_index(const struct os_mbuf *om) +{ + const struct os_mempool *mp = om->om_omp->omp_pool; + uintptr_t addr = (uintptr_t)om; + int idx; + + idx = (addr - mp->mp_membuf_addr) / mp->mp_block_size; + + BLE_HS_DBG_ASSERT(mp->mp_membuf_addr + idx * mp->mp_block_size == addr); + + return idx; +} + static int ble_hs_flow_tx_num_comp_pkts(void) { uint8_t buf[ - BLE_HCI_HOST_NUM_COMP_PKTS_HDR_LEN + - BLE_HCI_HOST_NUM_COMP_PKTS_ENT_LEN + sizeof(struct ble_hci_cb_host_num_comp_pkts_cp) + + sizeof(struct ble_hci_cb_host_num_comp_pkts_entry) ]; - struct hci_host_num_comp_pkts_entry entry; + struct ble_hci_cb_host_num_comp_pkts_cp *cmd = (void *) buf; struct ble_hs_conn *conn; int rc; @@ -62,16 +79,12 @@ ble_hs_flow_tx_num_comp_pkts(void) if (conn->bhc_completed_pkts > 0) { /* Only specify one connection per command. */ - buf[0] = 1; + /* TODO could combine this in single HCI command */ + cmd->handles = 1; /* Append entry for this connection. */ - entry.conn_handle = conn->bhc_handle; - entry.num_pkts = conn->bhc_completed_pkts; - rc = ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - &entry, - buf + BLE_HCI_HOST_NUM_COMP_PKTS_HDR_LEN, - sizeof buf - BLE_HCI_HOST_NUM_COMP_PKTS_HDR_LEN); - BLE_HS_DBG_ASSERT(rc == 0); + cmd->h[0].handle = htole16(conn->bhc_handle); + cmd->h[0].count = htole16(conn->bhc_completed_pkts); conn->bhc_completed_pkts = 0; @@ -147,18 +160,13 @@ ble_hs_flow_acl_free(struct os_mempool_ext *mpe, void *data, void *arg) struct ble_hs_conn *conn; const struct os_mbuf *om; uint16_t conn_handle; + int idx; int rc; om = data; - /* An ACL data packet must be a single mbuf, and it must contain the - * corresponding connection handle in its user header. - */ - assert(OS_MBUF_IS_PKTHDR(om)); - assert(OS_MBUF_USRHDR_LEN(om) >= sizeof conn_handle); - - /* Copy the connection handle out of the mbuf. */ - memcpy(&conn_handle, OS_MBUF_USRHDR(om), sizeof conn_handle); + idx = ble_hs_flow_mbuf_index(om); + conn_handle = ble_hs_flow_mbuf_conn_handle[idx]; /* Free the mbuf back to its pool. */ rc = os_memblock_put_from_cb(&mpe->mpe_mp, data); @@ -194,23 +202,19 @@ ble_hs_flow_connection_broken(uint16_t conn_handle) } /** - * Fills the user header of an incoming data packet. On function return, the - * header contains the connection handle associated with the sender. + * Associates incoming data packet with a connection handle of the sender. * * If flow control is disabled, this function is a no-op. */ void -ble_hs_flow_fill_acl_usrhdr(struct os_mbuf *om) +ble_hs_flow_track_data_mbuf(struct os_mbuf *om) { #if MYNEWT_VAL(BLE_HS_FLOW_CTRL) const struct hci_data_hdr *hdr; - uint16_t *conn_handle; - - BLE_HS_DBG_ASSERT(OS_MBUF_USRHDR_LEN(om) >= sizeof *conn_handle); - conn_handle = OS_MBUF_USRHDR(om); + int idx = ble_hs_flow_mbuf_index(om); hdr = (void *)om->om_data; - *conn_handle = BLE_HCI_DATA_HANDLE(hdr->hdh_handle_pb_bc); + ble_hs_flow_mbuf_conn_handle[idx] = BLE_HCI_DATA_HANDLE(hdr->hdh_handle_pb_bc); #endif } @@ -224,29 +228,39 @@ int ble_hs_flow_startup(void) { #if MYNEWT_VAL(BLE_HS_FLOW_CTRL) - struct hci_host_buf_size buf_size_cmd; + struct ble_hci_cb_ctlr_to_host_fc_cp enable_cmd; + struct ble_hci_cb_host_buf_size_cp buf_size_cmd = { + .acl_data_len = htole16(MYNEWT_VAL(BLE_ACL_BUF_SIZE)), + .acl_num = htole16(MYNEWT_VAL(BLE_ACL_BUF_COUNT)), + }; int rc; ble_npl_event_init(&ble_hs_flow_ev, ble_hs_flow_event_cb, NULL); /* Assume failure. */ ble_hci_trans_set_acl_free_cb(NULL, NULL); + #if MYNEWT_VAL(SELFTEST) ble_npl_callout_stop(&ble_hs_flow_timer); #endif - rc = ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(BLE_HCI_CTLR_TO_HOST_FC_ACL); + enable_cmd.enable = BLE_HCI_CTLR_TO_HOST_FC_ACL; + + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_SET_CTLR_TO_HOST_FC), + &enable_cmd, sizeof(enable_cmd), NULL, 0); if (rc != 0) { return rc; } - buf_size_cmd = (struct hci_host_buf_size) { - .acl_pkt_len = MYNEWT_VAL(BLE_ACL_BUF_SIZE), - .num_acl_pkts = MYNEWT_VAL(BLE_ACL_BUF_COUNT), - }; - rc = ble_hs_hci_cmd_tx_host_buf_size(&buf_size_cmd); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_HOST_BUF_SIZE), + &buf_size_cmd, sizeof(buf_size_cmd), NULL, 0); if (rc != 0) { - ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(BLE_HCI_CTLR_TO_HOST_FC_OFF); + enable_cmd.enable = BLE_HCI_CTLR_TO_HOST_FC_OFF; + ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_SET_CTLR_TO_HOST_FC), + &enable_cmd, sizeof(enable_cmd), NULL, 0); return rc; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow_priv.h index b1aa8c2fc..753eaf8ff 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_flow_priv.h @@ -26,7 +26,7 @@ extern "C" { #endif void ble_hs_flow_connection_broken(uint16_t conn_handle); -void ble_hs_flow_fill_acl_usrhdr(struct os_mbuf *om); +void ble_hs_flow_track_data_mbuf(struct os_mbuf *om); int ble_hs_flow_startup(void); #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci.c index 92ffde8fd..3cfed27e2 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci.c @@ -25,7 +25,6 @@ #include "nimble/ble_hci_trans.h" #include "host/ble_monitor.h" #include "ble_hs_priv.h" -#include "ble_hs_dbg_priv.h" #include "ble_monitor_priv.h" #define BLE_HCI_CMD_TIMEOUT_MS 2000 @@ -33,10 +32,13 @@ static struct ble_npl_mutex ble_hs_hci_mutex; static struct ble_npl_sem ble_hs_hci_sem; -static uint8_t *ble_hs_hci_ack; +static struct ble_hci_ev *ble_hs_hci_ack; static uint16_t ble_hs_hci_buf_sz; static uint8_t ble_hs_hci_max_pkts; + +/* For now 32-bits of features is enough */ static uint32_t ble_hs_hci_sup_feat; + static uint8_t ble_hs_hci_version; #define BLE_HS_HCI_FRAG_DATABUF_SIZE \ @@ -128,71 +130,66 @@ ble_hs_hci_add_avail_pkts(uint16_t delta) } static int -ble_hs_hci_rx_cmd_complete(uint8_t event_code, uint8_t *data, int len, +ble_hs_hci_rx_cmd_complete(const void *data, int len, struct ble_hs_hci_ack *out_ack) { + const struct ble_hci_ev_command_complete *ev = data; + const struct ble_hci_ev_command_complete_nop *nop = data; uint16_t opcode; - uint8_t *params; - uint8_t params_len; - uint8_t num_pkts; - if (len < BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN) { - return BLE_HS_ECONTROLLER; + if (len < sizeof(*ev)) { + if (len < sizeof(*nop)) { + return BLE_HS_ECONTROLLER; + } + + /* nop is special as it doesn't have status and response */ + + opcode = le16toh(nop->opcode); + if (opcode != BLE_HCI_OPCODE_NOP) { + return BLE_HS_ECONTROLLER; + } + + /* TODO Process num_pkts field. */ + + out_ack->bha_status = 0; + out_ack->bha_params = NULL; + out_ack->bha_params_len = 0; + return 0; } - num_pkts = data[2]; - opcode = get_le16(data + 3); - params = data + 5; + opcode = le16toh(ev->opcode); - /* XXX: Process num_pkts field. */ - (void)num_pkts; + /* TODO Process num_pkts field. */ out_ack->bha_opcode = opcode; - params_len = len - BLE_HCI_EVENT_CMD_COMPLETE_HDR_LEN; - if (params_len > 0) { - out_ack->bha_status = BLE_HS_HCI_ERR(params[0]); - } else if (opcode == BLE_HCI_OPCODE_NOP) { - out_ack->bha_status = 0; - } else { - out_ack->bha_status = BLE_HS_ECONTROLLER; - } - - /* Don't include the status byte in the parameters blob. */ - if (params_len > 1) { - out_ack->bha_params = params + 1; - out_ack->bha_params_len = params_len - 1; + out_ack->bha_status = BLE_HS_HCI_ERR(ev->status); + out_ack->bha_params_len = len - sizeof(*ev); + if (out_ack->bha_params_len) { + out_ack->bha_params = ev->return_params; } else { out_ack->bha_params = NULL; - out_ack->bha_params_len = 0; } return 0; } static int -ble_hs_hci_rx_cmd_status(uint8_t event_code, uint8_t *data, int len, +ble_hs_hci_rx_cmd_status(const void *data, int len, struct ble_hs_hci_ack *out_ack) { - uint16_t opcode; - uint8_t num_pkts; - uint8_t status; + const struct ble_hci_ev_command_status *ev = data; - if (len < BLE_HCI_EVENT_CMD_STATUS_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - status = data[2]; - num_pkts = data[3]; - opcode = get_le16(data + 4); - /* XXX: Process num_pkts field. */ - (void)num_pkts; - out_ack->bha_opcode = opcode; + out_ack->bha_opcode = le16toh(ev->opcode); out_ack->bha_params = NULL; out_ack->bha_params_len = 0; - out_ack->bha_status = BLE_HS_HCI_ERR(status); + out_ack->bha_status = BLE_HS_HCI_ERR(ev->status); return 0; } @@ -202,9 +199,6 @@ ble_hs_hci_process_ack(uint16_t expected_opcode, uint8_t *params_buf, uint8_t params_buf_len, struct ble_hs_hci_ack *out_ack) { - uint8_t event_code; - uint8_t param_len; - uint8_t event_len; int rc; BLE_HS_DBG_ASSERT(ble_hs_hci_ack != NULL); @@ -212,25 +206,19 @@ ble_hs_hci_process_ack(uint16_t expected_opcode, /* Count events received */ STATS_INC(ble_hs_stats, hci_event); - /* Display to console */ - ble_hs_dbg_event_disp(ble_hs_hci_ack); - - event_code = ble_hs_hci_ack[0]; - param_len = ble_hs_hci_ack[1]; - event_len = param_len + 2; /* Clear ack fields up front to silence spurious gcc warnings. */ memset(out_ack, 0, sizeof *out_ack); - switch (event_code) { + switch (ble_hs_hci_ack->opcode) { case BLE_HCI_EVCODE_COMMAND_COMPLETE: - rc = ble_hs_hci_rx_cmd_complete(event_code, ble_hs_hci_ack, - event_len, out_ack); + rc = ble_hs_hci_rx_cmd_complete(ble_hs_hci_ack->data, + ble_hs_hci_ack->length, out_ack); break; case BLE_HCI_EVCODE_COMMAND_STATUS: - rc = ble_hs_hci_rx_cmd_status(event_code, ble_hs_hci_ack, - event_len, out_ack); + rc = ble_hs_hci_rx_cmd_status(ble_hs_hci_ack->data, + ble_hs_hci_ack->length, out_ack); break; default: @@ -273,20 +261,20 @@ ble_hs_hci_wait_for_ack(void) rc = BLE_HS_ETIMEOUT_HCI; } else { ble_hs_hci_ack = - ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD); + (void *) ble_hci_trans_buf_alloc(BLE_HCI_TRANS_BUF_CMD); BLE_HS_DBG_ASSERT(ble_hs_hci_ack != NULL); - rc = ble_hs_hci_phony_ack_cb(ble_hs_hci_ack, 260); + rc = ble_hs_hci_phony_ack_cb((void *)ble_hs_hci_ack, 260); } #else rc = ble_npl_sem_pend(&ble_hs_hci_sem, - ble_npl_time_ms_to_ticks32(BLE_HCI_CMD_TIMEOUT_MS)); + ble_npl_time_ms_to_ticks32(BLE_HCI_CMD_TIMEOUT_MS)); switch (rc) { case 0: BLE_HS_DBG_ASSERT(ble_hs_hci_ack != NULL); #if BLE_MONITOR - ble_monitor_send(BLE_MONITOR_OPCODE_EVENT_PKT, ble_hs_hci_ack, - ble_hs_hci_ack[1] + BLE_HCI_EVENT_HDR_LEN); + ble_monitor_send(BLE_MONITOR_OPCODE_EVENT_PKT, (void *) ble_hs_hci_ack, + sizeof(*ble_hs_hci_ack) + ble_hs_hci_ack->length); #endif break; @@ -304,9 +292,8 @@ ble_hs_hci_wait_for_ack(void) } int -ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, - void *evt_buf, uint8_t evt_buf_len, - uint8_t *out_evt_buf_len) +ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len, + void *rsp, uint8_t rsp_len) { struct ble_hs_hci_ack ack; int rc; @@ -325,21 +312,23 @@ ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, goto done; } - rc = ble_hs_hci_process_ack(opcode, evt_buf, evt_buf_len, &ack); + rc = ble_hs_hci_process_ack(opcode, rsp, rsp_len, &ack); if (rc != 0) { ble_hs_sched_reset(rc); goto done; } - if (out_evt_buf_len != NULL) { - *out_evt_buf_len = ack.bha_params_len; - } - rc = ack.bha_status; + /* on success we should always get full response */ + if (!rc && (ack.bha_params_len != rsp_len)) { + ble_hs_sched_reset(rc); + goto done; + } + done: if (ble_hs_hci_ack != NULL) { - ble_hci_trans_buf_free(ble_hs_hci_ack); + ble_hci_trans_buf_free((uint8_t *) ble_hs_hci_ack); ble_hs_hci_ack = NULL; } @@ -347,20 +336,7 @@ done: return rc; } -int -ble_hs_hci_cmd_tx_empty_ack(uint16_t opcode, void *cmd, uint8_t cmd_len) -{ - int rc; - - rc = ble_hs_hci_cmd_tx(opcode, cmd, cmd_len, NULL, 0, NULL); - if (rc != 0) { - return rc; - } - - return 0; -} - -void +static void ble_hs_hci_rx_ack(uint8_t *ack_ev) { if (ble_npl_sem_get_count(&ble_hs_hci_sem) > 0) { @@ -373,30 +349,27 @@ ble_hs_hci_rx_ack(uint8_t *ack_ev) /* Unblock the application now that the HCI command buffer is populated * with the acknowledgement. */ - ble_hs_hci_ack = ack_ev; + ble_hs_hci_ack = (struct ble_hci_ev *) ack_ev; ble_npl_sem_release(&ble_hs_hci_sem); } int ble_hs_hci_rx_evt(uint8_t *hci_ev, void *arg) { - int enqueue = 0; + struct ble_hci_ev *ev = (void *) hci_ev; + struct ble_hci_ev_command_complete *cmd_complete = (void *) ev->data; + struct ble_hci_ev_command_status *cmd_status = (void *) ev->data; + int enqueue; BLE_HS_DBG_ASSERT(hci_ev != NULL); - switch (hci_ev[0]) { + switch (ev->opcode) { case BLE_HCI_EVCODE_COMMAND_COMPLETE: - if (hci_ev[3] == 0 && hci_ev[4] == 0) { - enqueue = 1; - } + enqueue = (cmd_complete->opcode == BLE_HCI_OPCODE_NOP); break; - case BLE_HCI_EVCODE_COMMAND_STATUS: - if (hci_ev[4] == 0 && hci_ev[5] == 0) { - enqueue = 1; - } + enqueue = (cmd_status->opcode == BLE_HCI_OPCODE_NOP); break; - default: enqueue = 1; break; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_cmd.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_cmd.c index 38acdaa34..7aa9e4e74 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_cmd.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_cmd.c @@ -25,21 +25,31 @@ #include "nimble/hci_common.h" #include "nimble/ble_hci_trans.h" #include "host/ble_monitor.h" -#include "ble_hs_dbg_priv.h" #include "ble_hs_priv.h" #include "ble_monitor_priv.h" +/* + * HCI Command Header + * + * Comprises the following fields + * -> Opcode group field & Opcode command field (2) + * -> Parameter Length (1) + * Length of all the parameters (does not include any part of the hci + * command header + */ +#define BLE_HCI_CMD_HDR_LEN (3) + static int -ble_hs_hci_cmd_transport(uint8_t *cmdbuf) +ble_hs_hci_cmd_transport(struct ble_hci_cmd *cmd) { int rc; #if BLE_MONITOR - ble_monitor_send(BLE_MONITOR_OPCODE_COMMAND_PKT, cmdbuf, - cmdbuf[2] + BLE_HCI_CMD_HDR_LEN); + ble_monitor_send(BLE_MONITOR_OPCODE_COMMAND_PKT, cmd, + cmd->length + sizeof(*cmd)); #endif - rc = ble_hci_trans_hs_cmd_tx(cmdbuf); + rc = ble_hci_trans_hs_cmd_tx((uint8_t *) cmd); switch (rc) { case 0: return 0; @@ -52,19 +62,6 @@ ble_hs_hci_cmd_transport(uint8_t *cmdbuf) } } -void -ble_hs_hci_cmd_write_hdr(uint8_t ogf, uint16_t ocf, uint8_t len, void *buf) -{ - uint16_t opcode; - uint8_t *u8ptr; - - u8ptr = buf; - - opcode = (ogf << 10) | ocf; - put_le16(u8ptr, opcode); - u8ptr[2] = len; -} - static int ble_hs_hci_cmd_send(uint16_t opcode, uint8_t len, const void *cmddata) { @@ -90,7 +87,7 @@ ble_hs_hci_cmd_send(uint16_t opcode, uint8_t len, const void *cmddata) #endif buf--; - rc = ble_hs_hci_cmd_transport(buf); + rc = ble_hs_hci_cmd_transport((void *) buf); if (rc == 0) { STATS_INC(ble_hs_stats, hci_cmd); @@ -102,7 +99,7 @@ ble_hs_hci_cmd_send(uint16_t opcode, uint8_t len, const void *cmddata) } int -ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len) +ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len) { switch (ble_hs_sync_state) { case BLE_HS_SYNC_STATE_BAD: @@ -124,1726 +121,3 @@ ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len) return ble_hs_hci_cmd_send(opcode, buf_len, buf); } - - -/** - * Send a LE command from the host to the controller. - * - * @param ocf - * @param len - * @param cmddata - * - * @return int - */ -static int -ble_hs_hci_cmd_le_send(uint16_t ocf, uint8_t len, void *cmddata) -{ - return ble_hs_hci_cmd_send(BLE_HCI_OP(BLE_HCI_OGF_LE, ocf), len, cmddata); -} - -static int -ble_hs_hci_cmd_body_le_whitelist_chg(const uint8_t *addr, uint8_t addr_type, - uint8_t *dst) -{ - if (addr_type > BLE_ADDR_RANDOM) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = addr_type; - memcpy(dst + 1, addr, BLE_DEV_ADDR_LEN); - - return 0; -} - -static int -ble_hs_hci_cmd_body_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst) -{ - uint16_t itvl; - - BLE_HS_DBG_ASSERT(adv != NULL); - - /* Make sure parameters are valid */ - if ((adv->adv_itvl_min > adv->adv_itvl_max) || - (adv->own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) || - (adv->peer_addr_type > BLE_HCI_ADV_PEER_ADDR_MAX) || - (adv->adv_filter_policy > BLE_HCI_ADV_FILT_MAX) || - (adv->adv_type > BLE_HCI_ADV_TYPE_MAX) || - (adv->adv_channel_map == 0) || - ((adv->adv_channel_map & 0xF8) != 0)) { - /* These parameters are not valid */ - return -1; - } - -/* When build with nimBLE controller we know it is BT5 compliant so no need - * to limit non-connectable advertising interval - */ -#if MYNEWT_VAL(BLE_CONTROLLER) - itvl = BLE_HCI_ADV_ITVL_MIN; -#else -#if MYNEWT_VAL(ESP_BLE_MESH) - itvl = BLE_HCI_ADV_ITVL_MIN; -#else - /* Make sure interval is valid for advertising type. */ - if (((adv->adv_type == BLE_HCI_ADV_TYPE_ADV_NONCONN_IND) || - (adv->adv_type == BLE_HCI_ADV_TYPE_ADV_SCAN_IND)) && - ble_hs_hci_get_hci_version() < BLE_HCI_VER_BCS_5_0) { - itvl = BLE_HCI_ADV_ITVL_NONCONN_MIN; - } else { - itvl = BLE_HCI_ADV_ITVL_MIN; - } -#endif -#endif - - /* Do not check if high duty-cycle directed */ - if (adv->adv_type != BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) { - if ((adv->adv_itvl_min < itvl) || - (adv->adv_itvl_min > BLE_HCI_ADV_ITVL_MAX)) { - return -1; - } - } - - put_le16(dst, adv->adv_itvl_min); - put_le16(dst + 2, adv->adv_itvl_max); - dst[4] = adv->adv_type; - dst[5] = adv->own_addr_type; - dst[6] = adv->peer_addr_type; - memcpy(dst + 7, adv->peer_addr, BLE_DEV_ADDR_LEN); - dst[13] = adv->adv_channel_map; - dst[14] = adv->adv_filter_policy; - - return 0; -} - -int -ble_hs_hci_cmd_build_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_ADV_PARAM_LEN); - - return ble_hs_hci_cmd_body_le_set_adv_params(adv, dst); -} - -/** - * Set advertising data - * - * OGF = 0x08 (LE) - * OCF = 0x0008 - * - * @param data - * @param len - * @param dst - * - * @return int - */ -static int -ble_hs_hci_cmd_body_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst) -{ - /* Check for valid parameters */ - if (((data == NULL) && (len != 0)) || (len > BLE_HCI_MAX_ADV_DATA_LEN)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - memset(dst, 0, BLE_HCI_SET_ADV_DATA_LEN); - dst[0] = len; - memcpy(dst + 1, data, len); - - return 0; -} - -/** - * Set advertising data - * - * OGF = 0x08 (LE) - * OCF = 0x0008 - * - * @param data - * @param len - * @param dst - * - * @return int - */ -int -ble_hs_hci_cmd_build_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_ADV_DATA_LEN); - - return ble_hs_hci_cmd_body_le_set_adv_data(data, len, dst); -} - -static int -ble_hs_hci_cmd_body_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst) -{ - /* Check for valid parameters */ - if (((data == NULL) && (len != 0)) || - (len > BLE_HCI_MAX_SCAN_RSP_DATA_LEN)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - memset(dst, 0, BLE_HCI_SET_SCAN_RSP_DATA_LEN); - dst[0] = len; - memcpy(dst + 1, data, len); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_SCAN_RSP_DATA_LEN); - - return ble_hs_hci_cmd_body_le_set_scan_rsp_data(data, len, dst); -} - -static void -ble_hs_hci_cmd_body_set_event_mask(uint64_t event_mask, uint8_t *dst) -{ - put_le64(dst, event_mask); -} - -void -ble_hs_hci_cmd_build_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_EVENT_MASK_LEN); - - ble_hs_hci_cmd_body_set_event_mask(event_mask, dst); -} - -void -ble_hs_hci_cmd_build_set_event_mask2(uint64_t event_mask, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_EVENT_MASK_LEN); - - ble_hs_hci_cmd_body_set_event_mask(event_mask, dst); -} - -static void -ble_hs_hci_cmd_body_disconnect(uint16_t handle, uint8_t reason, uint8_t *dst) -{ - put_le16(dst + 0, handle); - dst[2] = reason; -} - -void -ble_hs_hci_cmd_build_disconnect(uint16_t handle, uint8_t reason, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_DISCONNECT_CMD_LEN); - - ble_hs_hci_cmd_body_disconnect(handle, reason, dst); -} - -static void -ble_hs_hci_cmd_body_le_set_event_mask(uint64_t event_mask, uint8_t *dst) -{ - put_le64(dst, event_mask); -} - -void -ble_hs_hci_cmd_build_le_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_LE_EVENT_MASK_LEN); - - ble_hs_hci_cmd_body_le_set_event_mask(event_mask, dst); -} - -static void -ble_hs_hci_cmd_body_le_set_adv_enable(uint8_t enable, uint8_t *dst) -{ - dst[0] = enable; -} - -void -ble_hs_hci_cmd_build_le_set_adv_enable(uint8_t enable, uint8_t *dst, - int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_ADV_ENABLE_LEN); - - ble_hs_hci_cmd_body_le_set_adv_enable(enable, dst); -} - -static int -ble_hs_hci_cmd_body_le_set_scan_params( - uint8_t scan_type, uint16_t scan_itvl, uint16_t scan_window, - uint8_t own_addr_type, uint8_t filter_policy, uint8_t *dst) { - - /* Make sure parameters are valid */ - if ((scan_type != BLE_HCI_SCAN_TYPE_PASSIVE) && - (scan_type != BLE_HCI_SCAN_TYPE_ACTIVE)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check interval and window */ - if ((scan_itvl < BLE_HCI_SCAN_ITVL_MIN) || - (scan_itvl > BLE_HCI_SCAN_ITVL_MAX) || - (scan_window < BLE_HCI_SCAN_WINDOW_MIN) || - (scan_window > BLE_HCI_SCAN_WINDOW_MAX) || - (scan_itvl < scan_window)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check own addr type */ - if (own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check scanner filter policy */ - if (filter_policy > BLE_HCI_SCAN_FILT_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = scan_type; - put_le16(dst + 1, scan_itvl); - put_le16(dst + 3, scan_window); - dst[5] = own_addr_type; - dst[6] = filter_policy; - - return 0; -} - -int -ble_hs_hci_cmd_build_le_set_scan_params(uint8_t scan_type, - uint16_t scan_itvl, - uint16_t scan_window, - uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_SCAN_PARAM_LEN); - - return ble_hs_hci_cmd_body_le_set_scan_params(scan_type, scan_itvl, - scan_window, own_addr_type, - filter_policy, dst); -} - -static void -ble_hs_hci_cmd_body_le_set_scan_enable(uint8_t enable, uint8_t filter_dups, - uint8_t *dst) -{ - dst[0] = enable; - dst[1] = filter_dups; -} - -void -ble_hs_hci_cmd_build_le_set_scan_enable(uint8_t enable, uint8_t filter_dups, - uint8_t *dst, uint8_t dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_SCAN_ENABLE_LEN); - - ble_hs_hci_cmd_body_le_set_scan_enable(enable, filter_dups, dst); -} - -static int -ble_hs_hci_cmd_body_le_create_connection(const struct hci_create_conn *hcc, - uint8_t *cmd) -{ - /* Check scan interval and scan window */ - if ((hcc->scan_itvl < BLE_HCI_SCAN_ITVL_MIN) || - (hcc->scan_itvl > BLE_HCI_SCAN_ITVL_MAX) || - (hcc->scan_window < BLE_HCI_SCAN_WINDOW_MIN) || - (hcc->scan_window > BLE_HCI_SCAN_WINDOW_MAX) || - (hcc->scan_itvl < hcc->scan_window)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check initiator filter policy */ - if (hcc->filter_policy > BLE_HCI_CONN_FILT_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check peer addr type */ - if (hcc->peer_addr_type > BLE_HCI_CONN_PEER_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check own addr type */ - if (hcc->own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection interval min */ - if ((hcc->conn_itvl_min < BLE_HCI_CONN_ITVL_MIN) || - (hcc->conn_itvl_min > BLE_HCI_CONN_ITVL_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection interval max */ - if ((hcc->conn_itvl_max < BLE_HCI_CONN_ITVL_MIN) || - (hcc->conn_itvl_max > BLE_HCI_CONN_ITVL_MAX) || - (hcc->conn_itvl_max < hcc->conn_itvl_min)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection latency */ - if ( -#if BLE_HCI_CONN_LATENCY_MIN - (hcc->conn_latency < BLE_HCI_CONN_LATENCY_MIN) || -#endif - (hcc->conn_latency > BLE_HCI_CONN_LATENCY_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check supervision timeout */ - if ((hcc->supervision_timeout < BLE_HCI_CONN_SPVN_TIMEOUT_MIN) || - (hcc->supervision_timeout > BLE_HCI_CONN_SPVN_TIMEOUT_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection event length */ - if (hcc->min_ce_len > hcc->max_ce_len) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - put_le16(cmd + 0, hcc->scan_itvl); - put_le16(cmd + 2, hcc->scan_window); - cmd[4] = hcc->filter_policy; - cmd[5] = hcc->peer_addr_type; - memcpy(cmd + 6, hcc->peer_addr, BLE_DEV_ADDR_LEN); - cmd[12] = hcc->own_addr_type; - put_le16(cmd + 13, hcc->conn_itvl_min); - put_le16(cmd + 15, hcc->conn_itvl_max); - put_le16(cmd + 17, hcc->conn_latency); - put_le16(cmd + 19, hcc->supervision_timeout); - put_le16(cmd + 21, hcc->min_ce_len); - put_le16(cmd + 23, hcc->max_ce_len); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_create_connection(const struct hci_create_conn *hcc, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_CREATE_CONN_LEN); - - return ble_hs_hci_cmd_body_le_create_connection(hcc, cmd); -} - -int -ble_hs_hci_cmd_build_le_add_to_whitelist(const uint8_t *addr, - uint8_t addr_type, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_ADD_WHITE_LIST_LEN); - - return ble_hs_hci_cmd_body_le_whitelist_chg(addr, addr_type, dst); -} - -/** - * Reset the controller and link manager. - * - * @return int - */ -int -ble_hs_hci_cmd_reset(void) -{ - return ble_hs_hci_cmd_send(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, - BLE_HCI_OCF_CB_RESET), - 0, NULL); -} - -/** Set controller to host flow control (OGF 0x03, OCF 0x0031). */ -int -ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(uint8_t fc_enable) -{ - if (fc_enable > BLE_HCI_CTLR_TO_HOST_FC_BOTH) { - return BLE_HS_EINVAL; - } - - return ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, - BLE_HCI_OCF_CB_SET_CTLR_TO_HOST_FC), - &fc_enable, 1); -} - -/* Host buffer size (OGF 0x03, OCF 0x0033). */ -int -ble_hs_hci_cmd_tx_host_buf_size(const struct hci_host_buf_size *cmd) -{ - uint8_t buf[BLE_HCI_HOST_BUF_SIZE_LEN]; - - put_le16(buf + 0, cmd->acl_pkt_len); - buf[2] = cmd->sync_pkt_len; - put_le16(buf + 3, cmd->num_acl_pkts); - put_le16(buf + 5, cmd->num_sync_pkts); - - return ble_hs_hci_cmd_tx_empty_ack( - BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, BLE_HCI_OCF_CB_HOST_BUF_SIZE), - buf, sizeof buf); -} - -/* Host number of completed packets (OGF 0x03, OCF 0x0035). */ -int -ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - const struct hci_host_num_comp_pkts_entry *entry, - uint8_t *dst, int dst_len) -{ - if (dst_len < BLE_HCI_HOST_NUM_COMP_PKTS_ENT_LEN) { - return BLE_HS_EMSGSIZE; - } - - put_le16(dst + 0, entry->conn_handle); - put_le16(dst + 2, entry->num_pkts); - - return 0; -} - -/** - * Read the transmit power level used for LE advertising channel packets. - * - * @return int - */ -int -ble_hs_hci_cmd_read_adv_pwr(void) -{ - return ble_hs_hci_cmd_send(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR), - 0, NULL); -} - -int -ble_hs_hci_cmd_le_create_conn_cancel(void) -{ - return ble_hs_hci_cmd_send(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_CREATE_CONN_CANCEL), - 0, NULL); -} - -static int -ble_hs_hci_cmd_body_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst) -{ - /* XXX: add parameter checking later */ - put_le16(dst + 0, hcu->handle); - put_le16(dst + 2, hcu->conn_itvl_min); - put_le16(dst + 4, hcu->conn_itvl_max); - put_le16(dst + 6, hcu->conn_latency); - put_le16(dst + 8, hcu->supervision_timeout); - put_le16(dst + 10, hcu->min_ce_len); - put_le16(dst + 12, hcu->max_ce_len); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_CONN_UPDATE_LEN); - - return ble_hs_hci_cmd_body_le_conn_update(hcu, dst); -} - -int -ble_hs_hci_cmd_le_conn_update(const struct hci_conn_update *hcu) -{ - uint8_t cmd[BLE_HCI_CONN_UPDATE_LEN]; - int rc; - - rc = ble_hs_hci_cmd_body_le_conn_update(hcu, cmd); - if (rc != 0) { - return rc; - } - - return ble_hs_hci_cmd_le_send(BLE_HCI_OCF_LE_CONN_UPDATE, - BLE_HCI_CONN_UPDATE_LEN, cmd); -} - -static void -ble_hs_hci_cmd_body_le_lt_key_req_reply(const struct hci_lt_key_req_reply *hkr, - uint8_t *dst) -{ - put_le16(dst + 0, hkr->conn_handle); - memcpy(dst + 2, hkr->long_term_key, sizeof hkr->long_term_key); -} - -/** - * Sends the long-term key (LTK) to the controller. - * - * Note: This function expects the 128-bit key to be in little-endian byte - * order. - * - * OGF = 0x08 (LE) - * OCF = 0x001a - * - * @param key - * @param pt - * - * @return int - */ -void -ble_hs_hci_cmd_build_le_lt_key_req_reply( - const struct hci_lt_key_req_reply *hkr, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LT_KEY_REQ_REPLY_LEN); - - ble_hs_hci_cmd_body_le_lt_key_req_reply(hkr, dst); -} - -void -ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(uint16_t conn_handle, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LT_KEY_REQ_NEG_REPLY_LEN); - - put_le16(dst, conn_handle); -} - -static void -ble_hs_hci_cmd_body_le_conn_param_reply(const struct hci_conn_param_reply *hcr, - uint8_t *dst) -{ - put_le16(dst + 0, hcr->handle); - put_le16(dst + 2, hcr->conn_itvl_min); - put_le16(dst + 4, hcr->conn_itvl_max); - put_le16(dst + 6, hcr->conn_latency); - put_le16(dst + 8, hcr->supervision_timeout); - put_le16(dst + 10, hcr->min_ce_len); - put_le16(dst + 12, hcr->max_ce_len); -} - -void -ble_hs_hci_cmd_build_le_conn_param_reply( - const struct hci_conn_param_reply *hcr, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_CONN_PARAM_REPLY_LEN); - - ble_hs_hci_cmd_body_le_conn_param_reply(hcr, dst); -} - -int -ble_hs_hci_cmd_le_conn_param_reply(const struct hci_conn_param_reply *hcr) -{ - uint8_t cmd[BLE_HCI_CONN_PARAM_REPLY_LEN]; - - put_le16(cmd + 0, hcr->handle); - put_le16(cmd + 2, hcr->conn_itvl_min); - put_le16(cmd + 4, hcr->conn_itvl_max); - put_le16(cmd + 6, hcr->conn_latency); - put_le16(cmd + 8, hcr->supervision_timeout); - put_le16(cmd + 10, hcr->min_ce_len); - put_le16(cmd + 12, hcr->max_ce_len); - - return ble_hs_hci_cmd_le_send(BLE_HCI_OCF_LE_REM_CONN_PARAM_RR, - BLE_HCI_CONN_PARAM_REPLY_LEN, cmd); -} - -static void -ble_hs_hci_cmd_body_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst) -{ - put_le16(dst + 0, hcn->handle); - dst[2] = hcn->reason; -} - - -void -ble_hs_hci_cmd_build_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_CONN_PARAM_NEG_REPLY_LEN); - - ble_hs_hci_cmd_body_le_conn_param_neg_reply(hcn, dst); -} - -int -ble_hs_hci_cmd_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn) -{ - uint8_t cmd[BLE_HCI_CONN_PARAM_NEG_REPLY_LEN]; - - ble_hs_hci_cmd_body_le_conn_param_neg_reply(hcn, cmd); - - return ble_hs_hci_cmd_le_send(BLE_HCI_OCF_LE_REM_CONN_PARAM_NRR, - BLE_HCI_CONN_PARAM_NEG_REPLY_LEN, cmd); -} - -static void -ble_hs_hci_cmd_body_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst) -{ - put_le16(dst + 0, cmd->connection_handle); - put_le64(dst + 2, cmd->random_number); - put_le16(dst + 10, cmd->encrypted_diversifier); - memcpy(dst + 12, cmd->long_term_key, sizeof cmd->long_term_key); -} - -/* - * OGF=0x08 OCF=0x0019 - */ -void -ble_hs_hci_cmd_build_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_START_ENCRYPT_LEN); - - ble_hs_hci_cmd_body_le_start_encrypt(cmd, dst); -} - -/** - * Read the RSSI for a given connection handle - * - * NOTE: OGF=0x05 OCF=0x0005 - * - * @param handle - * - * @return int - */ -static void -ble_hs_hci_cmd_body_read_rssi(uint16_t handle, uint8_t *dst) -{ - put_le16(dst, handle); -} - -void -ble_hs_hci_cmd_build_read_rssi(uint16_t handle, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_READ_RSSI_LEN); - - ble_hs_hci_cmd_body_read_rssi(handle, dst); -} - -/** - * LE Set Host Channel Classification - * - * OGF = 0x08 (LE) - * OCF = 0x0014 - */ -void -ble_hs_hci_cmd_build_le_set_host_chan_class(const uint8_t *chan_map, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_HOST_CHAN_CLASS_LEN); - - memcpy(dst, chan_map, BLE_HCI_SET_HOST_CHAN_CLASS_LEN); -} - -/** - * LE Read Channel Map - * - * OGF = 0x08 (LE) - * OCF = 0x0015 - */ -void -ble_hs_hci_cmd_build_le_read_chan_map(uint16_t conn_handle, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_RD_CHANMAP_LEN); - - put_le16(dst + 0, conn_handle); -} - -static int -ble_hs_hci_cmd_body_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, - uint16_t tx_time, uint8_t *dst) -{ - - if (tx_octets < BLE_HCI_SET_DATALEN_TX_OCTETS_MIN || - tx_octets > BLE_HCI_SET_DATALEN_TX_OCTETS_MAX) { - - return BLE_HS_EINVAL; - } - - if (tx_time < BLE_HCI_SET_DATALEN_TX_TIME_MIN || - tx_time > BLE_HCI_SET_DATALEN_TX_TIME_MAX) { - - return BLE_HS_EINVAL; - } - - put_le16(dst + 0, connection_handle); - put_le16(dst + 2, tx_octets); - put_le16(dst + 4, tx_time); - - return 0; -} - -/* - * OGF=0x08 OCF=0x0022 - */ -int -ble_hs_hci_cmd_build_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, uint16_t tx_time, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_DATALEN_LEN); - - return ble_hs_hci_cmd_body_set_data_len(connection_handle, tx_octets, - tx_time, dst); -} - -/** - * IRKs are in little endian. - */ -static int -ble_hs_hci_cmd_body_add_to_resolv_list(uint8_t addr_type, const uint8_t *addr, - const uint8_t *peer_irk, - const uint8_t *local_irk, - uint8_t *dst) -{ - if (addr_type > BLE_ADDR_RANDOM) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = addr_type; - memcpy(dst + 1, addr, BLE_DEV_ADDR_LEN); - memcpy(dst + 1 + 6, peer_irk , 16); - memcpy(dst + 1 + 6 + 16, local_irk , 16); - /* 16 + 16 + 6 + 1 == 39 */ - return 0; -} - -/** - * OGF=0x08 OCF=0x0027 - * - * IRKs are in little endian. - */ -int -ble_hs_hci_cmd_build_add_to_resolv_list( - const struct hci_add_dev_to_resolving_list *padd, - uint8_t *dst, - int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_ADD_TO_RESOLV_LIST_LEN); - - return ble_hs_hci_cmd_body_add_to_resolv_list( - padd->addr_type, padd->addr, padd->peer_irk, padd->local_irk, dst); -} - -static int -ble_hs_hci_cmd_body_remove_from_resolv_list(uint8_t addr_type, - const uint8_t *addr, - uint8_t *dst) -{ - if (addr_type > BLE_ADDR_RANDOM) { - addr_type = addr_type % 2; - } - - dst[0] = addr_type; - memcpy(dst + 1, addr, BLE_DEV_ADDR_LEN); - return 0; -} - - -int -ble_hs_hci_cmd_build_remove_from_resolv_list(uint8_t addr_type, - const uint8_t *addr, - uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_RMV_FROM_RESOLV_LIST_LEN); - - return ble_hs_hci_cmd_body_remove_from_resolv_list(addr_type, addr, dst); -} - -static int -ble_hs_hci_cmd_body_read_peer_resolv_addr(uint8_t peer_identity_addr_type, - const uint8_t *peer_identity_addr, - uint8_t *dst) -{ - if (peer_identity_addr_type > BLE_ADDR_RANDOM) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = peer_identity_addr_type; - memcpy(dst + 1, peer_identity_addr, BLE_DEV_ADDR_LEN); - return 0; -} - -int -ble_hs_hci_cmd_build_read_peer_resolv_addr(uint8_t peer_identity_addr_type, - const uint8_t *peer_identity_addr, - uint8_t *dst, - int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_RD_PEER_RESOLV_ADDR_LEN); - - return ble_hs_hci_cmd_body_read_peer_resolv_addr(peer_identity_addr_type, - peer_identity_addr, dst); -} - -static int -ble_hs_hci_cmd_body_read_lcl_resolv_addr( - uint8_t local_identity_addr_type, - const uint8_t *local_identity_addr, - uint8_t *dst) -{ - if (local_identity_addr_type > BLE_ADDR_RANDOM) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = local_identity_addr_type; - memcpy(dst + 1, local_identity_addr, BLE_DEV_ADDR_LEN); - return 0; -} - -/* - * OGF=0x08 OCF=0x002c - */ -int -ble_hs_hci_cmd_build_read_lcl_resolv_addr(uint8_t local_identity_addr_type, - const uint8_t *local_identity_addr, - uint8_t *dst, - int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_RD_LOC_RESOLV_ADDR_LEN); - - return ble_hs_hci_cmd_body_read_lcl_resolv_addr(local_identity_addr_type, - local_identity_addr, dst); -} - -static int -ble_hs_hci_cmd_body_set_addr_res_en(uint8_t enable, uint8_t *dst) -{ - if (enable > 1) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = enable; - return 0; -} - -/* - * OGF=0x08 OCF=0x002d - */ -int -ble_hs_hci_cmd_build_set_addr_res_en(uint8_t enable, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_ADDR_RESOL_ENA_LEN); - - return ble_hs_hci_cmd_body_set_addr_res_en(enable, dst); -} - -static int -ble_hs_hci_cmd_body_set_resolv_priv_addr_timeout(uint16_t timeout, - uint8_t *dst) -{ - if (timeout == 0 || timeout > 0xA1B8) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - put_le16(dst, timeout); - return 0; -} - -/* - * OGF=0x08 OCF=0x002e - */ -int -ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout( - uint16_t timeout, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_RESOLV_PRIV_ADDR_TO_LEN); - - return ble_hs_hci_cmd_body_set_resolv_priv_addr_timeout(timeout, dst); -} - -/* - * OGF=0x08 OCF=0x0030 - */ -int -ble_hs_hci_cmd_build_le_read_phy(uint16_t conn_handle, uint8_t *dst, int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_RD_PHY_LEN); - - put_le16(dst, conn_handle); - - return 0; -} - -static int -ble_hs_hci_verify_le_phy_params(uint8_t tx_phys_mask, uint8_t rx_phys_mask, - uint16_t phy_opts) -{ - if (tx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | - BLE_HCI_LE_PHY_2M_PREF_MASK | - BLE_HCI_LE_PHY_CODED_PREF_MASK)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - if (rx_phys_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | - BLE_HCI_LE_PHY_2M_PREF_MASK | - BLE_HCI_LE_PHY_CODED_PREF_MASK)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - if (phy_opts > BLE_HCI_LE_PHY_CODED_S8_PREF) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - return 0; -} - -static int -ble_hs_hci_cmd_body_le_set_default_phy(uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint8_t *dst) -{ - int rc; - - rc = ble_hs_hci_verify_le_phy_params(tx_phys_mask, rx_phys_mask, 0); - if (rc !=0 ) { - return rc; - } - - if (tx_phys_mask == 0) { - dst[0] |= BLE_HCI_LE_PHY_NO_TX_PREF_MASK; - } else { - dst[1] = tx_phys_mask; - } - - if (rx_phys_mask == 0){ - dst[0] |= BLE_HCI_LE_PHY_NO_RX_PREF_MASK; - } else { - dst[2] = rx_phys_mask; - } - - return 0; -} - -/* - * OGF=0x08 OCF=0x0031 - */ -int -ble_hs_hci_cmd_build_le_set_default_phy(uint8_t tx_phys_mask, uint8_t rx_phys_mask, - uint8_t *dst, int dst_len) -{ - - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_SET_DEFAULT_PHY_LEN); - - memset(dst, 0, dst_len); - - return ble_hs_hci_cmd_body_le_set_default_phy(tx_phys_mask, rx_phys_mask, - dst); -} - -static int -ble_hs_hci_cmd_body_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst) -{ - int rc; - - rc = ble_hs_hci_verify_le_phy_params(tx_phys_mask, rx_phys_mask, phy_opts); - if (rc != 0) { - return rc; - } - - put_le16(dst, conn_handle); - - if (tx_phys_mask == 0) { - dst[2] |= BLE_HCI_LE_PHY_NO_TX_PREF_MASK; - } else { - dst[3] = tx_phys_mask; - } - - if (rx_phys_mask == 0){ - dst[2] |= BLE_HCI_LE_PHY_NO_RX_PREF_MASK; - } else { - dst[4] = rx_phys_mask; - } - - put_le16(dst + 5, phy_opts); - - return 0; -} - -/* - * OGF=0x08 OCF=0x0032 - */ -int -ble_hs_hci_cmd_build_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst, int dst_len) -{ - - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_SET_PHY_LEN); - - memset(dst, 0, dst_len); - - return ble_hs_hci_cmd_body_le_set_phy(conn_handle, tx_phys_mask, - rx_phys_mask, phy_opts, dst); -} - -static int -ble_hs_hci_cmd_body_le_enhanced_recv_test(uint8_t chan, uint8_t phy, - uint8_t mod_idx, uint8_t *dst) -{ - /* Parameters check according to Bluetooth 5.0 Vol 2, Part E - * 7.8.50 LE Enhanced Receiver Test Command - */ - if (phy > BLE_HCI_LE_PHY_CODED || chan > 0x27 || mod_idx > 1) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = chan; - dst[1] = phy; - dst[2] = mod_idx; - - return 0; -} - -/* - * OGF=0x08 OCF=0x0033 - */ -int -ble_hs_hci_cmd_build_le_enh_recv_test(uint8_t rx_chan, uint8_t phy, - uint8_t mod_idx, - uint8_t *dst, uint16_t dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_ENH_RX_TEST_LEN); - - return ble_hs_hci_cmd_body_le_enhanced_recv_test(rx_chan, phy, mod_idx, dst); -} - -static int -ble_hs_hci_cmd_body_le_enhanced_trans_test(uint8_t chan, uint8_t test_data_len, - uint8_t packet_payload_idx, - uint8_t phy, - uint8_t *dst) -{ - /* Parameters check according to Bluetooth 5.0 Vol 2, Part E - * 7.8.51 LE Enhanced Transmitter Test Command - */ - if (phy > BLE_HCI_LE_PHY_CODED_S2 || chan > 0x27 || - packet_payload_idx > 0x07) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = chan; - dst[1] = test_data_len; - dst[2] = packet_payload_idx; - dst[3] = phy; - - return 0; -} - -/* - * OGF=0x08 OCF=0x0034 - */ -int -ble_hs_hci_cmd_build_le_enh_trans_test(uint8_t tx_chan, uint8_t test_data_len, - uint8_t packet_payload_idx, uint8_t phy, - uint8_t *dst, uint16_t dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_ENH_TX_TEST_LEN); - - return ble_hs_hci_cmd_body_le_enhanced_trans_test(tx_chan, test_data_len, - packet_payload_idx, - phy, dst); -} - -#if MYNEWT_VAL(BLE_EXT_ADV) -static int -ble_hs_hci_check_scan_params(uint16_t scan_itvl, uint16_t scan_window) -{ - /* Check interval and window */ - if ((scan_itvl < BLE_HCI_SCAN_ITVL_MIN) || - (scan_itvl > BLE_HCI_SCAN_ITVL_MAX) || - (scan_window < BLE_HCI_SCAN_WINDOW_MIN) || - (scan_window > BLE_HCI_SCAN_WINDOW_MAX) || - (scan_itvl < scan_window)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - return 0; -} - -static int -ble_hs_hci_cmd_body_le_set_ext_scan_param(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst) -{ - int i; - int rc; - uint8_t *dst_params; - struct ble_hs_hci_ext_scan_param *p; - - if (phy_mask > - (BLE_HCI_LE_PHY_1M_PREF_MASK | BLE_HCI_LE_PHY_CODED_PREF_MASK)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check own addr type */ - if (own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check scanner filter policy */ - if (filter_policy > BLE_HCI_SCAN_FILT_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = own_addr_type; - dst[1] = filter_policy; - dst[2] = phy_mask; - dst_params = &dst[3]; - - for (i = 0; i < phy_count; i++) { - p = (*params) + i; - rc = ble_hs_hci_check_scan_params(p->scan_itvl, p->scan_window); - if (rc) { - return rc; - } - - dst_params[0] = p->scan_type; - put_le16(dst_params + 1, p->scan_itvl); - put_le16(dst_params + 3, p->scan_window); - - dst_params += BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN; - } - - return 0; -} - -/* - * OGF=0x08 OCF=0x0041 - */ -int -ble_hs_hci_cmd_build_le_set_ext_scan_params(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst, uint16_t dst_len) -{ - if (phy_count == 0) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_EXT_SCAN_BASE_LEN + - BLE_HCI_LE_EXT_SCAN_SINGLE_PARAM_LEN * phy_count); - - return ble_hs_hci_cmd_body_le_set_ext_scan_param(own_addr_type, - filter_policy, - phy_mask, - phy_count, - params, - dst); -} - -static int -ble_hs_hci_cmd_body_le_set_ext_scan_enable(uint8_t enable, uint8_t filter_dups, - uint16_t duration, uint16_t period, - uint8_t *dst) -{ - if (enable > 0x01 || filter_dups > 0x03) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = enable; - dst[1] = filter_dups; - put_le16(dst + 2, duration); - put_le16(dst + 4, period); - - return 0; -} - -/* - * OGF=0x08 OCF=0x0042 - */ -int -ble_hs_hci_cmd_build_le_set_ext_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint16_t duration, - uint16_t period, - uint8_t *dst, uint16_t dst_len) -{ - - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_SET_EXT_SCAN_ENABLE_LEN); - - return ble_hs_hci_cmd_body_le_set_ext_scan_enable(enable, filter_dups, - duration, period, dst); -} - -static int -ble_hs_hci_check_conn_params(uint8_t phy, - const struct hci_ext_conn_params *params) -{ - if (phy != BLE_HCI_LE_PHY_2M) { - if (ble_hs_hci_check_scan_params(params->scan_itvl, params->scan_window)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - } - /* Check connection interval min */ - if ((params->conn_itvl_min < BLE_HCI_CONN_ITVL_MIN) || - (params->conn_itvl_min > BLE_HCI_CONN_ITVL_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - /* Check connection interval max */ - if ((params->conn_itvl_max < BLE_HCI_CONN_ITVL_MIN) || - (params->conn_itvl_max > BLE_HCI_CONN_ITVL_MAX) || - (params->conn_itvl_max < params->conn_itvl_min)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection latency */ - if ( -#if BLE_HCI_CONN_LATENCY_MIN - (params->conn_latency < BLE_HCI_CONN_LATENCY_MIN) || -#endif - (params->conn_latency > BLE_HCI_CONN_LATENCY_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check supervision timeout */ - if ((params->supervision_timeout < BLE_HCI_CONN_SPVN_TIMEOUT_MIN) || - (params->supervision_timeout > BLE_HCI_CONN_SPVN_TIMEOUT_MAX)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - /* Check connection event length */ - if (params->min_ce_len > params->max_ce_len) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - return 0; -} - -static int -ble_hs_hci_cmd_body_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd) -{ - int iter = 0; - const struct hci_ext_conn_params *params; - - /* Check initiator filter policy */ - if (hcc->filter_policy > BLE_HCI_CONN_FILT_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - cmd[iter] = hcc->filter_policy; - iter++; - /* Check own addr type */ - if (hcc->own_addr_type > BLE_HCI_ADV_OWN_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - cmd[iter] = hcc->own_addr_type; - iter++; - - /* Check peer addr type */ - if (hcc->peer_addr_type > BLE_HCI_CONN_PEER_ADDR_MAX) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - cmd[iter] = hcc->peer_addr_type; - iter++; - - memcpy(cmd + iter, hcc->peer_addr, BLE_DEV_ADDR_LEN); - iter += BLE_DEV_ADDR_LEN; - - if (hcc->init_phy_mask > (BLE_HCI_LE_PHY_1M_PREF_MASK | - BLE_HCI_LE_PHY_2M_PREF_MASK | - BLE_HCI_LE_PHY_CODED_PREF_MASK)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - cmd[iter] = hcc->init_phy_mask; - iter++; - - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_1M_PREF_MASK) { - params = &hcc->params[0]; - if (ble_hs_hci_check_conn_params(BLE_HCI_LE_PHY_1M, params)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - put_le16(cmd + iter, params->scan_itvl); - put_le16(cmd + iter + 2, params->scan_window); - put_le16(cmd + iter + 4, params->conn_itvl_min); - put_le16(cmd + iter + 6, params->conn_itvl_max); - put_le16(cmd + iter + 8, params->conn_latency); - put_le16(cmd + iter + 10, params->supervision_timeout); - put_le16(cmd + iter + 12, params->min_ce_len); - put_le16(cmd + iter + 14, params->max_ce_len); - iter += 16; - } - - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_2M_PREF_MASK) { - params = &hcc->params[1]; - if (ble_hs_hci_check_conn_params(BLE_HCI_LE_PHY_2M, params)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - put_le16(cmd + iter, 0); - put_le16(cmd + iter + 2, 0); - put_le16(cmd + iter + 4, params->conn_itvl_min); - put_le16(cmd + iter + 6, params->conn_itvl_max); - put_le16(cmd + iter + 8, params->conn_latency); - put_le16(cmd + iter + 10, params->supervision_timeout); - put_le16(cmd + iter + 12, params->min_ce_len); - put_le16(cmd + iter + 14, params->max_ce_len); - iter += 16; - } - - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_CODED_PREF_MASK) { - params = &hcc->params[2]; - if (ble_hs_hci_check_conn_params(BLE_HCI_LE_PHY_CODED, params)) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - put_le16(cmd + iter, params->scan_itvl); - put_le16(cmd + iter + 2, params->scan_window); - put_le16(cmd + iter + 4, params->conn_itvl_min); - put_le16(cmd + iter + 6, params->conn_itvl_max); - put_le16(cmd + iter + 8, params->conn_latency); - put_le16(cmd + iter + 10, params->supervision_timeout); - put_le16(cmd + iter + 12, params->min_ce_len); - put_le16(cmd + iter + 14, params->max_ce_len); - iter += 16; - } - - return 0; -} - -int -ble_hs_hci_cmd_build_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd, int cmd_len) -{ - uint8_t size; - - size = BLE_HCI_LE_EXT_CREATE_CONN_BASE_LEN; - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_1M_PREF_MASK) { - size += sizeof(struct hci_ext_conn_params); - } - - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_2M_PREF_MASK) { - size += sizeof(struct hci_ext_conn_params); - } - - if (hcc->init_phy_mask & BLE_HCI_LE_PHY_CODED_PREF_MASK) { - size += sizeof(struct hci_ext_conn_params); - } - - BLE_HS_DBG_ASSERT(cmd_len >= size); - - return ble_hs_hci_cmd_body_le_ext_create_conn(hcc, cmd); -} - -int -ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(uint8_t handle, - const uint8_t *addr, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_SET_ADV_SET_RND_ADDR_LEN); - - cmd[0] = handle; - memcpy(cmd + 1, addr, BLE_DEV_ADDR_LEN); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_ext_adv_data(uint8_t handle, uint8_t operation, - uint8_t frag_pref, struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= 4 + data_len); - - cmd[0] = handle; - cmd[1] = operation; - cmd[2] = frag_pref; - cmd[3] = data_len; - os_mbuf_copydata(data, 0, data_len, cmd + 4); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_ext_adv_enable(uint8_t enable, uint8_t sets_num, - const struct hci_ext_adv_set *sets, - uint8_t *cmd, int cmd_len) -{ - int i; - - BLE_HS_DBG_ASSERT(cmd_len >= 2 + (sets_num * 4)); - - cmd[0] = enable; - cmd[1] = sets_num; - - cmd += 2; - - for (i = 0; i < sets_num; i++) { - cmd[0] = sets[i].handle; - put_le16(&cmd[1], sets[i].duration); - cmd[3] = sets[i].events; - - cmd += 4; - } - - return 0; -} - -int -ble_hs_hci_cmd_build_le_ext_adv_params(uint8_t handle, - const struct hci_ext_adv_params *params, - uint8_t *cmd, int cmd_len) -{ - uint32_t tmp; - - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_SET_EXT_ADV_PARAM_LEN); - - cmd[0] = handle; - put_le16(&cmd[1], params->properties); - - tmp = htole32(params->min_interval); - memcpy(&cmd[3], &tmp, 3); - - tmp = htole32(params->max_interval); - memcpy(&cmd[6], &tmp, 3); - - cmd[9] = params->chan_map; - cmd[10] = params->own_addr_type; - cmd[11] = params->peer_addr_type; - memcpy(&cmd[12], params->peer_addr, BLE_DEV_ADDR_LEN); - cmd[18] = params->filter_policy; - cmd[19] = params->tx_power; - cmd[20] = params->primary_phy; - cmd[21] = params->max_skip; - cmd[22] = params->secondary_phy; - cmd[23] = params->sid; - cmd[24] = params->scan_req_notif; - - return 0; -} -int -ble_hs_hci_cmd_build_le_ext_adv_remove(uint8_t handle, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_REMOVE_ADV_SET_LEN); - - cmd[0] = handle; - - return 0; -} - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -int -ble_hs_hci_cmd_build_le_periodic_adv_params(uint8_t handle, - const struct hci_periodic_adv_params *params, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_SET_PERIODIC_ADV_PARAMS_LEN); - - if (handle > 0xEF){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (params->max_interval > 0xFFFF || params->max_interval < 6){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (params->min_interval > 0xFFFF || params->min_interval < 6){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = handle; - - put_le16(&cmd[1], params->min_interval); - put_le16(&cmd[3], params->max_interval); - put_le16(&cmd[5], params->properties); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_periodic_adv_enable(uint8_t enable, - uint8_t handle, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_SET_PERIODIC_ADV_ENABLE_LEN); - - if (enable > 1){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = enable; - cmd[1] = handle; - - return 0; -} - -int -ble_hs_hci_cmd_build_le_periodic_adv_data(uint8_t handle, - uint8_t operation, - struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= 3 + data_len); - - if (!data){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (!data->om_data){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (handle > 0xEF){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = handle; - cmd[1] = operation; - cmd[2] = data_len; - os_mbuf_copydata(data, 0, data_len, cmd + 3); - - return 0; -} - -int -ble_hs_hci_cmd_build_le_periodic_adv_create_sync(uint8_t filter_policy, - uint8_t adv_sid, - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint16_t skip, - uint16_t sync_timeout, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_PERIODIC_ADV_CREATE_SYNC_LEN); - - if (filter_policy > 1 || adv_add_type > 1){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (adv_sid > 0x0f){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - if (skip > 0x1f3 || sync_timeout > 0x4000 || sync_timeout < 0x0A){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - cmd[0] = filter_policy; - cmd[1] = adv_sid; - cmd[2] = adv_add_type; - memcpy(&cmd[3], adv_addr, 6); - put_le16(&cmd[9], skip); - put_le16(&cmd[11], sync_timeout); - cmd[13] = 0x00; - return 0; -} - -int -ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(uint16_t sync_handle, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_PERIODIC_ADV_TERM_SYNC_LEN); - - if (sync_handle > 0xEF){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = sync_handle; - - return 0; -} - -int -ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list( - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_ADD_DEV_TO_PERIODIC_ADV_LIST_LEN); - - if (adv_add_type > 1 || adv_sid > 0x0f){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = adv_add_type; - memcpy(&cmd[1], adv_addr, 6); - cmd[7] = adv_sid; - - return 0; -} - -int -ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list( - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len) -{ - BLE_HS_DBG_ASSERT(cmd_len >= BLE_HCI_LE_REM_DEV_FROM_PERIODIC_ADV_LIST_LEN); - - if (adv_add_type > 1 || adv_sid > 0x0f){ - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - cmd[0] = adv_add_type; - memcpy(&cmd[1], adv_addr, 6); - cmd[7] = adv_sid; - - return 0; -} -#endif - -#endif - -static int -ble_hs_hci_cmd_body_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst) -{ - /* In this command addr type can be either: - * - public identity (0x00) - * - random (static) identity (0x01) - */ - if (addr_type > BLE_ADDR_RANDOM) { - return BLE_ERR_INV_HCI_CMD_PARMS; - } - - dst[0] = addr_type; - memcpy(dst + 1, addr, BLE_DEV_ADDR_LEN); - dst[7] = priv_mode; - - return 0; -} - -/* - * OGF=0x08 OCF=0x004e - */ -int -ble_hs_hci_cmd_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst, - uint16_t dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_LE_SET_PRIVACY_MODE_LEN); - - return ble_hs_hci_cmd_body_le_set_priv_mode(addr, addr_type, priv_mode, dst); -} - -static int -ble_hs_hci_cmd_body_set_random_addr(const struct hci_rand_addr *paddr, - uint8_t *dst) -{ - memcpy(dst, paddr->addr, BLE_DEV_ADDR_LEN); - return 0; -} - -int -ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr, - uint8_t *dst, int dst_len) -{ - struct hci_rand_addr r_addr; - - memcpy(r_addr.addr, addr, sizeof(r_addr.addr)); - - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_SET_RAND_ADDR_LEN); - - return ble_hs_hci_cmd_body_set_random_addr(&r_addr, dst); -} - -static void -ble_hs_hci_cmd_body_le_read_remote_feat(uint16_t handle, uint8_t *dst) -{ - put_le16(dst, handle); -} - -int -ble_hs_hci_cmd_build_le_read_remote_feat(uint16_t handle, uint8_t *dst, - int dst_len) -{ - BLE_HS_DBG_ASSERT(dst_len >= BLE_HCI_CONN_RD_REM_FEAT_LEN); - - ble_hs_hci_cmd_body_le_read_remote_feat(handle, dst); - - return 0; -} diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_evt.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_evt.c index 30dc92f28..4a6b0716e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_evt.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_evt.c @@ -26,13 +26,24 @@ #include "host/ble_gap.h" #include "host/ble_monitor.h" #include "ble_hs_priv.h" -#include "ble_hs_dbg_priv.h" #include "ble_hs_resolv_priv.h" +#if CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT +static uint16_t reattempt_conn[MYNEWT_VAL(BLE_MAX_CONNECTIONS)]; +extern int ble_gap_master_connect_reattempt(uint16_t conn_handle); + +#ifdef CONFIG_BT_NIMBLE_MAX_CONN_REATTEMPT +#define MAX_REATTEMPT_ALLOWED CONFIG_BT_NIMBLE_MAX_CONN_REATTEMPT +#else +#define MAX_REATTEMPT_ALLOWED 0 +#endif +#endif + _Static_assert(sizeof (struct hci_data_hdr) == BLE_HCI_DATA_HDR_SZ, "struct hci_data_hdr must be 4 bytes"); -typedef int ble_hs_hci_evt_fn(uint8_t event_code, uint8_t *data, int len); +typedef int ble_hs_hci_evt_fn(uint8_t event_code, const void *data, + unsigned int len); static ble_hs_hci_evt_fn ble_hs_hci_evt_disconn_complete; static ble_hs_hci_evt_fn ble_hs_hci_evt_encrypt_change; static ble_hs_hci_evt_fn ble_hs_hci_evt_hw_error; @@ -40,7 +51,8 @@ static ble_hs_hci_evt_fn ble_hs_hci_evt_num_completed_pkts; static ble_hs_hci_evt_fn ble_hs_hci_evt_enc_key_refresh; static ble_hs_hci_evt_fn ble_hs_hci_evt_le_meta; -typedef int ble_hs_hci_evt_le_fn(uint8_t subevent, uint8_t *data, int len); +typedef int ble_hs_hci_evt_le_fn(uint8_t subevent, const void *data, + unsigned int len); static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_conn_complete; static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_adv_rpt; static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_conn_upd_complete; @@ -56,6 +68,9 @@ static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_periodic_adv_sync_estab; static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_periodic_adv_rpt; static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_periodic_adv_sync_lost; static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_scan_req_rcvd; +static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_enh_conn_complete; +static ble_hs_hci_evt_le_fn ble_hs_hci_evt_le_periodic_adv_sync_transfer; + /* Statistics */ struct host_hci_stats { @@ -91,7 +106,7 @@ static ble_hs_hci_evt_le_fn * const ble_hs_hci_evt_le_dispatch[] = { [BLE_HCI_LE_SUBEV_CONN_UPD_COMPLETE] = ble_hs_hci_evt_le_conn_upd_complete, [BLE_HCI_LE_SUBEV_LT_KEY_REQ] = ble_hs_hci_evt_le_lt_key_req, [BLE_HCI_LE_SUBEV_REM_CONN_PARM_REQ] = ble_hs_hci_evt_le_conn_parm_req, - [BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE] = ble_hs_hci_evt_le_conn_complete, + [BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE] = ble_hs_hci_evt_le_enh_conn_complete, [BLE_HCI_LE_SUBEV_DIRECT_ADV_RPT] = ble_hs_hci_evt_le_dir_adv_rpt, [BLE_HCI_LE_SUBEV_PHY_UPDATE_COMPLETE] = ble_hs_hci_evt_le_phy_update_complete, [BLE_HCI_LE_SUBEV_EXT_ADV_RPT] = ble_hs_hci_evt_le_ext_adv_rpt, @@ -102,6 +117,7 @@ static ble_hs_hci_evt_le_fn * const ble_hs_hci_evt_le_dispatch[] = { [BLE_HCI_LE_SUBEV_SCAN_TIMEOUT] = ble_hs_hci_evt_le_scan_timeout, [BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED] = ble_hs_hci_evt_le_adv_set_terminated, [BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD] = ble_hs_hci_evt_le_scan_req_rcvd, + [BLE_HCI_LE_SUBEV_PERIODIC_ADV_SYNC_TRANSFER] = ble_hs_hci_evt_le_periodic_adv_sync_transfer, }; #define BLE_HS_HCI_EVT_LE_DISPATCH_SZ \ @@ -134,27 +150,50 @@ ble_hs_hci_evt_le_dispatch_find(uint8_t event_code) } static int -ble_hs_hci_evt_disconn_complete(uint8_t event_code, uint8_t *data, int len) +ble_hs_hci_evt_disconn_complete(uint8_t event_code, const void *data, + unsigned int len) { - struct hci_disconn_complete evt; + const struct ble_hci_ev_disconn_cmp *ev = data; const struct ble_hs_conn *conn; - if (len < BLE_HCI_EVENT_DISCONN_COMPLETE_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.status = data[2]; - evt.connection_handle = get_le16(data + 3); - evt.reason = data[5]; - ble_hs_lock(); - conn = ble_hs_conn_find(evt.connection_handle); + conn = ble_hs_conn_find(le16toh(ev->conn_handle)); if (conn != NULL) { ble_hs_hci_add_avail_pkts(conn->bhc_outstanding_pkts); } ble_hs_unlock(); - ble_gap_rx_disconn_complete(&evt); +#if CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT + int rc; + + if (ev->reason == BLE_ERR_CONN_ESTABLISHMENT && (conn != NULL)) { + BLE_HS_LOG(DEBUG, "Reattempt connection; reason = 0x%x, status = %d," + " reattempt count = %d ", ev->reason, ev->status, + reattempt_conn[ev->conn_handle]); + if (conn->bhc_flags & BLE_HS_CONN_F_MASTER) { + if (reattempt_conn[ev->conn_handle] < MAX_REATTEMPT_ALLOWED) { + reattempt_conn[ev->conn_handle] += 1; + rc = ble_gap_master_connect_reattempt(ev->conn_handle); + if (rc != 0) { + BLE_HS_LOG(DEBUG, "Master reconnect attempt failed; rc = %d", rc); + } + } else { + reattempt_conn[ev->conn_handle] = 0; + } + } + } else { + /* Disconnect completed with some other reason than + * BLE_ERR_CONN_ESTABLISHMENT, reset the corresponding reattempt count + * */ + reattempt_conn[ev->conn_handle] = 0; + } +#endif + + ble_gap_rx_disconn_complete(ev); /* The connection termination may have freed up some capacity in the * controller for additional ACL data packets. Wake up any stalled @@ -166,86 +205,68 @@ ble_hs_hci_evt_disconn_complete(uint8_t event_code, uint8_t *data, int len) } static int -ble_hs_hci_evt_encrypt_change(uint8_t event_code, uint8_t *data, int len) +ble_hs_hci_evt_encrypt_change(uint8_t event_code, const void *data, + unsigned int len) { - struct hci_encrypt_change evt; + const struct ble_hci_ev_enrypt_chg *ev = data; - if (len < BLE_HCI_EVENT_ENCRYPT_CHG_LEN) { + if (len != sizeof (*ev)) { return BLE_HS_ECONTROLLER; } - evt.status = data[2]; - evt.connection_handle = get_le16(data + 3); - evt.encryption_enabled = data[5]; - - ble_sm_enc_change_rx(&evt); + ble_sm_enc_change_rx(ev); return 0; } static int -ble_hs_hci_evt_hw_error(uint8_t event_code, uint8_t *data, int len) +ble_hs_hci_evt_hw_error(uint8_t event_code, const void *data, unsigned int len) { - uint8_t hw_code; + const struct ble_hci_ev_hw_error *ev = data; - if (len < BLE_HCI_EVENT_HW_ERROR_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - hw_code = data[0]; - ble_hs_hw_error(hw_code); + ble_hs_hw_error(ev->hw_code); return 0; } static int -ble_hs_hci_evt_enc_key_refresh(uint8_t event_code, uint8_t *data, int len) +ble_hs_hci_evt_enc_key_refresh(uint8_t event_code, const void *data, + unsigned int len) { - struct hci_encrypt_key_refresh evt; + const struct ble_hci_ev_enc_key_refresh *ev = data; - if (len < BLE_HCI_EVENT_ENC_KEY_REFRESH_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.status = data[2]; - evt.connection_handle = get_le16(data + 3); - - ble_sm_enc_key_refresh_rx(&evt); + ble_sm_enc_key_refresh_rx(ev); return 0; } static int -ble_hs_hci_evt_num_completed_pkts(uint8_t event_code, uint8_t *data, - int len) +ble_hs_hci_evt_num_completed_pkts(uint8_t event_code, const void *data, + unsigned int len) { + const struct ble_hci_ev_num_comp_pkts *ev = data; struct ble_hs_conn *conn; uint16_t num_pkts; - uint16_t handle; - uint8_t num_handles; - int off; int i; - if (len < BLE_HCI_EVENT_HDR_LEN + BLE_HCI_EVENT_NUM_COMP_PKTS_HDR_LEN) { + if (len != sizeof(*ev) + (ev->count * sizeof(ev->completed[0]))) { return BLE_HS_ECONTROLLER; } - off = BLE_HCI_EVENT_HDR_LEN; - num_handles = data[off]; - if (len < BLE_HCI_EVENT_NUM_COMP_PKTS_HDR_LEN + - num_handles * BLE_HCI_EVENT_NUM_COMP_PKTS_ENT_LEN) { - return BLE_HS_ECONTROLLER; - } - off++; - - for (i = 0; i < num_handles; i++) { - handle = get_le16(data + off); - num_pkts = get_le16(data + off + 2); - off += (2 * sizeof(uint16_t)); + for (i = 0; i < ev->count; i++) { + num_pkts = le16toh(ev->completed[i].packets); if (num_pkts > 0) { ble_hs_lock(); - conn = ble_hs_conn_find(handle); + conn = ble_hs_conn_find(le16toh(ev->completed[i].handle)); if (conn != NULL) { if (conn->bhc_outstanding_pkts < num_pkts) { ble_hs_sched_reset(BLE_HS_ECONTROLLER); @@ -266,87 +287,121 @@ ble_hs_hci_evt_num_completed_pkts(uint8_t event_code, uint8_t *data, } static int -ble_hs_hci_evt_le_meta(uint8_t event_code, uint8_t *data, int len) +ble_hs_hci_evt_le_meta(uint8_t event_code, const void *data, unsigned int len) { + const struct ble_hci_ev_le_meta *ev = data; ble_hs_hci_evt_le_fn *fn; - uint8_t subevent; - int rc; - if (len < BLE_HCI_EVENT_HDR_LEN + BLE_HCI_LE_MIN_LEN) { + if (len < sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - subevent = data[2]; - fn = ble_hs_hci_evt_le_dispatch_find(subevent); + fn = ble_hs_hci_evt_le_dispatch_find(ev->subevent); if (fn) { - rc = fn(subevent, data + BLE_HCI_EVENT_HDR_LEN, - len - BLE_HCI_EVENT_HDR_LEN); - if (rc != 0) { - return rc; - } + return fn(ev->subevent, data, len); } return 0; } #if MYNEWT_VAL(BLE_EXT_ADV) -static struct hci_le_conn_complete pend_conn_complete; +static struct ble_gap_conn_complete pend_conn_complete; #endif static int -ble_hs_hci_evt_le_conn_complete(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_enh_conn_complete(uint8_t subevent, const void *data, + unsigned int len) { - struct hci_le_conn_complete evt; - int extended_offset = 0; + const struct ble_hci_ev_le_subev_enh_conn_complete *ev = data; + struct ble_gap_conn_complete evt; - if (len < BLE_HCI_LE_CONN_COMPLETE_LEN) { - return BLE_HS_ECONTROLLER; - } - - /* this code processes two different events that are really similar */ - if ((subevent == BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE) && - ( len < BLE_HCI_LE_ENH_CONN_COMPLETE_LEN)) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } memset(&evt, 0, sizeof(evt)); - evt.subevent_code = data[0]; - evt.status = data[1]; + evt.status = ev->status; if (evt.status == BLE_ERR_SUCCESS) { - evt.connection_handle = get_le16(data + 2); - evt.role = data[4]; - evt.peer_addr_type = data[5]; - memcpy(evt.peer_addr, data + 6, BLE_DEV_ADDR_LEN); + evt.connection_handle = le16toh(ev->conn_handle); + evt.role = ev->role; + evt.peer_addr_type = ev->peer_addr_type; + memcpy(evt.peer_addr, ev->peer_addr, BLE_DEV_ADDR_LEN); + memcpy(evt.local_rpa, ev->local_rpa, BLE_DEV_ADDR_LEN); + memcpy(evt.peer_rpa,ev->peer_rpa, BLE_DEV_ADDR_LEN); - /* enhanced connection event has the same information with these - * extra fields stuffed into the middle */ - if (subevent == BLE_HCI_LE_SUBEV_ENH_CONN_COMPLETE) { - memcpy(evt.local_rpa, data + 12, BLE_DEV_ADDR_LEN); - memcpy(evt.peer_rpa, data + 18, BLE_DEV_ADDR_LEN); - extended_offset = 12; #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) - /* RPA needs to be resolved here, as controller is not aware of the - * address is RPA in Host based RPA */ - if (ble_host_rpa_enabled()) { - uint8_t *local_id_rpa = ble_hs_get_rpa_local(); - memcpy(evt.local_rpa, local_id_rpa, 6); - } - - struct ble_hs_resolv_entry *rl = NULL; - ble_rpa_replace_peer_params_with_rl(evt.peer_addr, - &evt.peer_addr_type, &rl); -#endif - } else { - memset(evt.local_rpa, 0, BLE_DEV_ADDR_LEN); - memset(evt.peer_rpa, 0, BLE_DEV_ADDR_LEN); + /* RPA needs to be resolved here, as controller is not aware of the + * address is RPA in Host based RPA */ + if (ble_host_rpa_enabled()) { + uint8_t *local_id_rpa = ble_hs_get_rpa_local(); + memcpy(evt.local_rpa, local_id_rpa, BLE_DEV_ADDR_LEN); } - evt.conn_itvl = get_le16(data + 12 + extended_offset); - evt.conn_latency = get_le16(data + 14 + extended_offset); - evt.supervision_timeout = get_le16(data + 16 + extended_offset); - evt.master_clk_acc = data[18 + extended_offset]; + struct ble_hs_resolv_entry *rl = NULL; + ble_rpa_replace_peer_params_with_rl(evt.peer_addr, + &evt.peer_addr_type, &rl); +#endif + evt.conn_itvl = le16toh(ev->conn_itvl); + evt.conn_latency = le16toh(ev->conn_latency); + evt.supervision_timeout = le16toh(ev->supervision_timeout); + evt.master_clk_acc = ev->mca; + } else { +#if MYNEWT_VAL(BLE_HS_DEBUG) + evt.connection_handle = BLE_HS_CONN_HANDLE_NONE; +#endif + } + +#if MYNEWT_VAL(BLE_EXT_ADV) + if (evt.status == BLE_ERR_DIR_ADV_TMO || + evt.role == BLE_HCI_LE_CONN_COMPLETE_ROLE_SLAVE) { + /* store this until we get set terminated event with adv handle */ + memcpy(&pend_conn_complete, &evt, sizeof(evt)); + return 0; + } +#endif + return ble_gap_rx_conn_complete(&evt, 0); + +} + +static int +ble_hs_hci_evt_le_conn_complete(uint8_t subevent, const void *data, + unsigned int len) +{ + const struct ble_hci_ev_le_subev_conn_complete *ev = data; + struct ble_gap_conn_complete evt; + + if (len != sizeof(*ev)) { + return BLE_HS_ECONTROLLER; + } + + memset(&evt, 0, sizeof(evt)); + + evt.status = ev->status; + + if (evt.status == BLE_ERR_SUCCESS) { + evt.connection_handle = le16toh(ev->conn_handle); + evt.role = ev->role; + evt.peer_addr_type = ev->peer_addr_type; + memcpy(evt.peer_addr, ev->peer_addr, BLE_DEV_ADDR_LEN); + +#if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) + /* RPA needs to be resolved here, as controller is not aware of the + * address is RPA in Host based RPA */ + if (ble_host_rpa_enabled()) { + uint8_t *local_id_rpa = ble_hs_get_rpa_local(); + memcpy(evt.local_rpa, local_id_rpa, BLE_DEV_ADDR_LEN); + } + + struct ble_hs_resolv_entry *rl = NULL; + ble_rpa_replace_peer_params_with_rl(evt.peer_addr, + &evt.peer_addr_type, &rl); +#endif + evt.conn_itvl = le16toh(ev->conn_itvl); + evt.conn_latency = le16toh(ev->conn_latency); + evt.supervision_timeout = le16toh(ev->supervision_timeout); + evt.master_clk_acc = ev->mca; } else { #if MYNEWT_VAL(BLE_HS_DEBUG) evt.connection_handle = BLE_HS_CONN_HANDLE_NONE; @@ -365,51 +420,58 @@ ble_hs_hci_evt_le_conn_complete(uint8_t subevent, uint8_t *data, int len) } static int -ble_hs_hci_evt_le_adv_rpt_first_pass(uint8_t *data, int len) +ble_hs_hci_evt_le_adv_rpt_first_pass(const void *data, unsigned int len) { - uint8_t num_reports; - int off; + const struct ble_hci_ev_le_subev_adv_rpt *ev = data; + const struct adv_report *rpt; int i; - if (len < BLE_HCI_LE_ADV_RPT_MIN_LEN) { + if (len < sizeof(*ev)) { return BLE_HS_ECONTROLLER; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpointer-arith" + len -= sizeof(*ev); + data += sizeof(*ev); - num_reports = data[1]; - if (num_reports < BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN || - num_reports > BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX) { + if (ev->num_reports < BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN || + ev->num_reports > BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX) { return BLE_HS_EBADDATA; } - off = 2; /* Subevent code and num reports. */ - for (i = 0; i < num_reports; i++) { - /* Move past event type (1), address type (1) and address (6) */ - off += 8; - - /* Add advertising data length (N), length (1) and rssi (1) */ - off += data[off]; - off += 2; - - /* Make sure we are not past length */ - if (off > len) { + for (i = 0; i < ev->num_reports; i++) { + /* extra byte for RSSI after adv data */ + if (len < sizeof(*rpt) + 1) { return BLE_HS_ECONTROLLER; } + + rpt = data; + + len -= sizeof(*rpt) + 1; + data += sizeof(rpt) + 1; + + if (rpt->data_len > len) { + return BLE_HS_ECONTROLLER; + } + + len -= rpt->data_len; + data += rpt->data_len; } /* Make sure length was correct */ - if (off != len) { + if (len) { return BLE_HS_ECONTROLLER; } - +#pragma GCC diagnostic pop return 0; } static int -ble_hs_hci_evt_le_adv_rpt(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_adv_rpt(uint8_t subevent, const void *data, unsigned int len) { + const struct ble_hci_ev_le_subev_adv_rpt *ev = data; struct ble_gap_disc_desc desc = {0}; - uint8_t num_reports; - int off; + const struct adv_report *rpt; int rc; int i; @@ -418,51 +480,38 @@ ble_hs_hci_evt_le_adv_rpt(uint8_t subevent, uint8_t *data, int len) if (rc != 0) { return rc; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpointer-arith" + data += sizeof(*ev); desc.direct_addr = *BLE_ADDR_ANY; - off = 2; /* skip sub-event and num reports */ - num_reports = data[1]; - for (i = 0; i < num_reports; i++) { - desc.event_type = data[off]; - ++off; + for (i = 0; i < ev->num_reports; i++) { + rpt = data; - desc.addr.type = data[off]; - ++off; + data += sizeof(rpt) + rpt->data_len + 1; - memcpy(desc.addr.val, data + off, 6); - off += 6; - - desc.length_data = data[off]; - ++off; - - desc.data = data + off; - off += desc.length_data; - - desc.rssi = data[off]; - ++off; + desc.event_type = rpt->type; + desc.addr.type = rpt->addr_type; + memcpy(desc.addr.val, rpt->addr, BLE_DEV_ADDR_LEN); + desc.length_data = rpt->data_len; + desc.data = rpt->data; + desc.rssi = rpt->data[rpt->data_len]; ble_gap_rx_adv_report(&desc); } - +#pragma GCC diagnostic pop return 0; } static int -ble_hs_hci_evt_le_dir_adv_rpt(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_dir_adv_rpt(uint8_t subevent, const void *data, unsigned int len) { + const struct ble_hci_ev_le_subev_direct_adv_rpt *ev = data; struct ble_gap_disc_desc desc = {0}; - uint8_t num_reports; - int suboff; - int off; int i; - if (len < BLE_HCI_LE_ADV_DIRECT_RPT_LEN) { - return BLE_HS_ECONTROLLER; - } - - num_reports = data[1]; - if (len != 2 + num_reports * BLE_HCI_LE_ADV_DIRECT_RPT_SUB_LEN) { + if (len < sizeof(*ev) || len != ev->num_reports * sizeof(ev->reports[0])) { return BLE_HS_ECONTROLLER; } @@ -470,32 +519,13 @@ ble_hs_hci_evt_le_dir_adv_rpt(uint8_t subevent, uint8_t *data, int len) desc.data = NULL; desc.length_data = 0; - for (i = 0; i < num_reports; i++) { - suboff = 0; - - off = 2 + suboff * num_reports + i; - desc.event_type = data[off]; - suboff++; - - off = 2 + suboff * num_reports + i; - desc.addr.type = data[off]; - suboff++; - - off = 2 + suboff * num_reports + i * 6; - memcpy(desc.addr.val, data + off, 6); - suboff += 6; - - off = 2 + suboff * num_reports + i; - desc.direct_addr.type = data[off]; - suboff++; - - off = 2 + suboff * num_reports + i * 6; - memcpy(desc.direct_addr.val, data + off, 6); - suboff += 6; - - off = 2 + suboff * num_reports + i; - desc.rssi = data[off]; - suboff++; + for (i = 0; i < ev->num_reports; i++) { + desc.event_type = ev->reports[i].type; + desc.addr.type = ev->reports[i].addr_type; + memcpy(desc.addr.val, ev->reports[i].addr, BLE_DEV_ADDR_LEN); + desc.direct_addr.type = ev->reports[i].dir_addr_type; + memcpy(desc.direct_addr.val, ev->reports[i].dir_addr, BLE_DEV_ADDR_LEN); + desc.rssi = ev->reports[i].rssi; ble_gap_rx_adv_report(&desc); } @@ -504,27 +534,21 @@ ble_hs_hci_evt_le_dir_adv_rpt(uint8_t subevent, uint8_t *data, int len) } static int -ble_hs_hci_evt_le_rd_rem_used_feat_complete(uint8_t subevent, - uint8_t *data, - int len) +ble_hs_hci_evt_le_rd_rem_used_feat_complete(uint8_t subevent, const void *data, + unsigned int len) { - struct hci_le_rd_rem_supp_feat_complete evt; + const struct ble_hci_ev_le_subev_rd_rem_used_feat *ev = data; - if (len < BLE_HCI_LE_RD_REM_USED_FEAT_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.status = data[1]; - evt.connection_handle = get_le16(data + 2); - memcpy(evt.features, data + 4, 8); - - ble_gap_rx_rd_rem_sup_feat_complete(&evt); + ble_gap_rx_rd_rem_sup_feat_complete(ev); return 0; } -#if MYNEWT_VAL(BLE_EXT_ADV) +#if MYNEWT_VAL(BLE_EXT_ADV) && NIMBLE_BLE_SCAN static int ble_hs_hci_decode_legacy_type(uint16_t evt_type) { @@ -546,47 +570,42 @@ ble_hs_hci_decode_legacy_type(uint16_t evt_type) #endif static int -ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, const void *data, + unsigned int len) { -#if MYNEWT_VAL(BLE_EXT_ADV) +#if MYNEWT_VAL(BLE_EXT_ADV) && NIMBLE_BLE_SCAN + const struct ble_hci_ev_le_subev_ext_adv_rpt *ev = data; + const struct ext_adv_report *report; struct ble_gap_ext_disc_desc desc; - struct hci_ext_adv_report *ext_adv; - struct hci_ext_adv_report_param *params; - int num_reports; int i; int legacy_event_type; - if (len < sizeof(*ext_adv)) { + if (len < sizeof(*ev)) { return BLE_HS_EBADDATA; } - ext_adv = (struct hci_ext_adv_report *) data; - num_reports = ext_adv->num_reports; - if (num_reports < BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN || - num_reports > BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX) { - + if (ev->num_reports < BLE_HCI_LE_ADV_RPT_NUM_RPTS_MIN || + ev->num_reports > BLE_HCI_LE_ADV_RPT_NUM_RPTS_MAX) { return BLE_HS_EBADDATA; } - if (len < (sizeof(*ext_adv) + ext_adv->num_reports * sizeof(*params))) { - return BLE_HS_ECONTROLLER; - } + /* TODO properly validate len of the event */ - params = &ext_adv->params[0]; - for (i = 0; i < num_reports; i++) { + report = &ev->reports[0]; + for (i = 0; i < ev->num_reports; i++) { memset(&desc, 0, sizeof(desc)); - desc.props = (params->evt_type) & 0x1F; + desc.props = (report->evt_type) & 0x1F; if (desc.props & BLE_HCI_ADV_LEGACY_MASK) { - legacy_event_type = ble_hs_hci_decode_legacy_type(params->evt_type); + legacy_event_type = ble_hs_hci_decode_legacy_type(report->evt_type); if (legacy_event_type < 0) { - params += 1; + report = (const void *) &report->data[report->data_len]; continue; } desc.legacy_event_type = legacy_event_type; desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE; } else { - switch(params->evt_type & BLE_HCI_ADV_DATA_STATUS_MASK) { + switch(report->evt_type & BLE_HCI_ADV_DATA_STATUS_MASK) { case BLE_HCI_ADV_DATA_STATUS_COMPLETE: desc.data_status = BLE_GAP_EXT_ADV_DATA_STATUS_COMPLETE; break; @@ -600,296 +619,247 @@ ble_hs_hci_evt_le_ext_adv_rpt(uint8_t subevent, uint8_t *data, int len) assert(false); } } - desc.addr.type = params->addr_type; - memcpy(desc.addr.val, params->addr, 6); - desc.length_data = params->adv_data_len; - desc.data = params->adv_data; - desc.rssi = params->rssi; - desc.tx_power = params->tx_power; - memcpy(desc.direct_addr.val, params->dir_addr, 6); - desc.direct_addr.type = params->dir_addr_type; - desc.sid = params->sid; - desc.prim_phy = params->prim_phy; - desc.sec_phy = params->sec_phy; - desc.periodic_adv_itvl = params->per_adv_itvl; + desc.addr.type = report->addr_type; + memcpy(desc.addr.val, report->addr, 6); + desc.length_data = report->data_len; + desc.data = report->data; + desc.rssi = report->rssi; + desc.tx_power = report->tx_power; + memcpy(desc.direct_addr.val, report->dir_addr, 6); + desc.direct_addr.type = report->dir_addr_type; + desc.sid = report->sid; + desc.prim_phy = report->pri_phy; + desc.sec_phy = report->sec_phy; + desc.periodic_adv_itvl = report->periodic_itvl; + ble_gap_rx_ext_adv_report(&desc); - params += 1; + + report = (const void *) &report->data[report->data_len]; } #endif return 0; } static int -ble_hs_hci_evt_le_periodic_adv_sync_estab(uint8_t subevent, uint8_t *data, - int len) +ble_hs_hci_evt_le_periodic_adv_sync_estab(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_PERIODIC_ADV) - struct hci_le_subev_periodic_adv_sync_estab evt; + const struct ble_hci_ev_le_subev_periodic_adv_sync_estab *ev = data; - if (len < BLE_HCI_LE_PERIODIC_ADV_SYNC_ESTAB_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.status = data[1]; - evt.sync_handle = get_le16(data + 2); - evt.sid = data[4]; - evt.adv_addr_type = data[5]; - memcpy(evt.adv_addr, &data[6], 6); - evt.adv_phy = data[12]; - evt.per_adv_ival = get_le16(data + 13); - evt.adv_clk_accuracy = data[15]; - - ble_gap_rx_peroidic_adv_sync_estab(&evt); + ble_gap_rx_peroidic_adv_sync_estab(ev); #endif return 0; } static int -ble_hs_hci_evt_le_periodic_adv_rpt(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_periodic_adv_rpt(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_PERIODIC_ADV) - struct hci_le_subev_periodic_adv_rpt* evt; + const struct ble_hci_ev_le_subev_periodic_adv_rpt *ev = data; - if (len < BLE_HCI_LE_PERIODIC_ADV_RPT_LEN) { + if (len < sizeof(*ev) || len != (sizeof(*ev) + ev->data_len)) { return BLE_HS_EBADDATA; } - evt = (struct hci_le_subev_periodic_adv_rpt *)(data + 1); - ble_gap_rx_periodic_adv_rpt(evt); + ble_gap_rx_periodic_adv_rpt(ev); #endif return 0; } static int -ble_hs_hci_evt_le_periodic_adv_sync_lost(uint8_t subevent, uint8_t *data, - int len) +ble_hs_hci_evt_le_periodic_adv_sync_lost(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_PERIODIC_ADV) - struct hci_le_subev_periodic_adv_sync_lost evt; + const struct ble_hci_ev_le_subev_periodic_adv_sync_lost *ev = data; - if (len < BLE_HCI_LE_PERIODIC_ADV_SYNC_LOST_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_EBADDATA; } - evt.sync_handle = get_le16(data + 1); - - ble_gap_rx_periodic_adv_sync_lost(&evt); + ble_gap_rx_periodic_adv_sync_lost(ev); #endif return 0; } +static int +ble_hs_hci_evt_le_periodic_adv_sync_transfer(uint8_t subevent, const void *data, + unsigned int len) +{ +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) + const struct ble_hci_ev_le_subev_periodic_adv_sync_transfer *ev = data; + + if (len != sizeof(*ev)) { + return BLE_HS_EBADDATA; + } + + ble_gap_rx_periodic_adv_sync_transfer(ev); + +#endif + return 0; +} static int -ble_hs_hci_evt_le_scan_timeout(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_scan_timeout(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_EXT_ADV) && NIMBLE_BLE_SCAN - ble_gap_rx_le_scan_timeout(); + const struct ble_hci_ev_le_subev_scan_timeout *ev = data; + + if (len != sizeof(*ev)) { + return BLE_HS_EBADDATA; + } + + ble_gap_rx_le_scan_timeout(); #endif - return 0; + return 0; } static int -ble_hs_hci_evt_le_adv_set_terminated(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_adv_set_terminated(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_EXT_ADV) - struct hci_le_adv_set_terminated evt; + const struct ble_hci_ev_le_subev_adv_set_terminated *ev = data; - if (len < BLE_HCI_LE_SUBEV_ADV_SET_TERMINATED_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.status = data[1]; - evt.adv_handle = data[2]; - evt.conn_handle = get_le16(data + 3); - evt.completed_events = data[5]; - - if (evt.status == 0) { + if (ev->status == 0) { /* ignore return code as we need to terminate advertising set anyway */ - ble_gap_rx_conn_complete(&pend_conn_complete, evt.adv_handle); + ble_gap_rx_conn_complete(&pend_conn_complete, ev->adv_handle); } - ble_gap_rx_adv_set_terminated(&evt); + ble_gap_rx_adv_set_terminated(ev); #endif return 0; } static int -ble_hs_hci_evt_le_scan_req_rcvd(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_scan_req_rcvd(uint8_t subevent, const void *data, + unsigned int len) { #if MYNEWT_VAL(BLE_EXT_ADV) - struct hci_le_scan_req_rcvd evt; + const struct ble_hci_ev_le_subev_scan_req_rcvd *ev = data; - if (len != BLE_HCI_LE_SUBEV_SCAN_REQ_RCVD_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.adv_handle = data[1]; - evt.scan_addr_type = data[2]; - memcpy(evt.scan_addr, data + 3, 6); - - ble_gap_rx_scan_req_rcvd(&evt); + ble_gap_rx_scan_req_rcvd(ev); #endif return 0; } static int -ble_hs_hci_evt_le_conn_upd_complete(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_conn_upd_complete(uint8_t subevent, const void *data, + unsigned int len) { - struct hci_le_conn_upd_complete evt; + const struct ble_hci_ev_le_subev_conn_upd_complete *ev = data; - if (len < BLE_HCI_LE_CONN_UPD_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.status = data[1]; - evt.connection_handle = get_le16(data + 2); - evt.conn_itvl = get_le16(data + 4); - evt.conn_latency = get_le16(data + 6); - evt.supervision_timeout = get_le16(data + 8); + if (ev->status == 0) { + BLE_HS_DBG_ASSERT(le16toh(ev->conn_itvl) >= BLE_HCI_CONN_ITVL_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->conn_itvl) <= BLE_HCI_CONN_ITVL_MAX); - if (evt.status == 0) { - if (evt.conn_itvl < BLE_HCI_CONN_ITVL_MIN || - evt.conn_itvl > BLE_HCI_CONN_ITVL_MAX) { + BLE_HS_DBG_ASSERT(le16toh(ev->conn_latency) >= BLE_HCI_CONN_LATENCY_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->conn_latency) <= BLE_HCI_CONN_LATENCY_MAX); - return BLE_HS_EBADDATA; - } - if ( -#if BLE_HCI_CONN_LATENCY_MIN - (evt.conn_latency < BLE_HCI_CONN_LATENCY_MIN) || -#endif - evt.conn_latency > BLE_HCI_CONN_LATENCY_MAX) { - - return BLE_HS_EBADDATA; - } - if (evt.supervision_timeout < BLE_HCI_CONN_SPVN_TIMEOUT_MIN || - evt.supervision_timeout > BLE_HCI_CONN_SPVN_TIMEOUT_MAX) { - - return BLE_HS_EBADDATA; - } + BLE_HS_DBG_ASSERT(le16toh(ev->supervision_timeout) >= BLE_HCI_CONN_SPVN_TIMEOUT_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->supervision_timeout) <= BLE_HCI_CONN_SPVN_TIMEOUT_MAX); } - ble_gap_rx_update_complete(&evt); + ble_gap_rx_update_complete(ev); return 0; } static int -ble_hs_hci_evt_le_lt_key_req(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_lt_key_req(uint8_t subevent, const void *data, unsigned int len) { - struct hci_le_lt_key_req evt; + const struct ble_hci_ev_le_subev_lt_key_req *ev = data; - if (len < BLE_HCI_LE_LT_KEY_REQ_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.connection_handle = get_le16(data + 1); - evt.random_number = get_le64(data + 3); - evt.encrypted_diversifier = get_le16(data + 11); - - ble_sm_ltk_req_rx(&evt); + ble_sm_ltk_req_rx(ev); return 0; } static int -ble_hs_hci_evt_le_conn_parm_req(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_conn_parm_req(uint8_t subevent, const void *data, unsigned int len) { - struct hci_le_conn_param_req evt; + const struct ble_hci_ev_le_subev_rem_conn_param_req *ev = data; - if (len < BLE_HCI_LE_REM_CONN_PARM_REQ_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.connection_handle = get_le16(data + 1); - evt.itvl_min = get_le16(data + 3); - evt.itvl_max = get_le16(data + 5); - evt.latency = get_le16(data + 7); - evt.timeout = get_le16(data + 9); + BLE_HS_DBG_ASSERT(le16toh(ev->min_interval) >= BLE_HCI_CONN_ITVL_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->max_interval) <= BLE_HCI_CONN_ITVL_MAX); + BLE_HS_DBG_ASSERT(le16toh(ev->max_interval) >= le16toh(ev->min_interval)); - if (evt.itvl_min < BLE_HCI_CONN_ITVL_MIN || - evt.itvl_max > BLE_HCI_CONN_ITVL_MAX || - evt.itvl_min > evt.itvl_max) { + BLE_HS_DBG_ASSERT(le16toh(ev->latency) >= BLE_HCI_CONN_LATENCY_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->latency) <= BLE_HCI_CONN_LATENCY_MAX); - return BLE_HS_EBADDATA; - } - if ( -#if BLE_HCI_CONN_LATENCY_MIN - (evt.latency < BLE_HCI_CONN_LATENCY_MIN) || -#endif - evt.latency > BLE_HCI_CONN_LATENCY_MAX) { + BLE_HS_DBG_ASSERT(le16toh(ev->timeout) >= BLE_HCI_CONN_SPVN_TIMEOUT_MIN); + BLE_HS_DBG_ASSERT(le16toh(ev->timeout) <= BLE_HCI_CONN_SPVN_TIMEOUT_MAX); - return BLE_HS_EBADDATA; - } - if (evt.timeout < BLE_HCI_CONN_SPVN_TIMEOUT_MIN || - evt.timeout > BLE_HCI_CONN_SPVN_TIMEOUT_MAX) { - - return BLE_HS_EBADDATA; - } - - ble_gap_rx_param_req(&evt); + ble_gap_rx_param_req(ev); return 0; } static int -ble_hs_hci_evt_le_phy_update_complete(uint8_t subevent, uint8_t *data, int len) +ble_hs_hci_evt_le_phy_update_complete(uint8_t subevent, const void *data, + unsigned int len) { - struct hci_le_phy_upd_complete evt; + const struct ble_hci_ev_le_subev_phy_update_complete *ev = data; - if (len < BLE_HCI_LE_PHY_UPD_LEN) { + if (len != sizeof(*ev)) { return BLE_HS_ECONTROLLER; } - evt.subevent_code = data[0]; - evt.status = data[1]; - evt.connection_handle = get_le16(data + 2); - evt.tx_phy = data[4]; - evt.rx_phy = data[5]; - - ble_gap_rx_phy_update_complete(&evt); + ble_gap_rx_phy_update_complete(ev); return 0; } int -ble_hs_hci_evt_process(uint8_t *data) +ble_hs_hci_evt_process(const struct ble_hci_ev *ev) { const struct ble_hs_hci_evt_dispatch_entry *entry; - uint8_t event_code; - uint8_t param_len; - int event_len; int rc; /* Count events received */ STATS_INC(ble_hs_stats, hci_event); - /* Display to console */ - ble_hs_dbg_event_disp(data); - /* Process the event */ - event_code = data[0]; - param_len = data[1]; - - event_len = param_len + 2; - - entry = ble_hs_hci_evt_dispatch_find(event_code); + entry = ble_hs_hci_evt_dispatch_find(ev->opcode); if (entry == NULL) { STATS_INC(ble_hs_stats, hci_unknown_event); rc = BLE_HS_ENOTSUP; } else { - rc = entry->cb(event_code, data, event_len); + rc = entry->cb(ev->opcode, ev->data, ev->length); } - ble_hci_trans_buf_free(data); + ble_hci_trans_buf_free((uint8_t *) ev); return rc; } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_priv.h index ff3604727..362f12cbd 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_priv.h @@ -48,7 +48,7 @@ struct os_mbuf; struct ble_hs_hci_ack { int bha_status; /* A BLE_HS_E<...> error; NOT a naked HCI code. */ - uint8_t *bha_params; + const uint8_t *bha_params; int bha_params_len; uint16_t bha_opcode; uint8_t bha_hci_handle; @@ -81,11 +81,8 @@ struct hci_periodic_adv_params extern uint16_t ble_hs_hci_avail_pkts; -int ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, - void *evt_buf, uint8_t evt_buf_len, - uint8_t *out_evt_buf_len); -int ble_hs_hci_cmd_tx_empty_ack(uint16_t opcode, void *cmd, uint8_t cmd_len); -void ble_hs_hci_rx_ack(uint8_t *ack_ev); +int ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len, + void *rsp, uint8_t rsp_len); void ble_hs_hci_init(void); void ble_hs_hci_deinit(void); @@ -103,78 +100,11 @@ int ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_pwr); int ble_hs_hci_util_rand(void *dst, int len); int ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi); int ble_hs_hci_util_set_random_addr(const uint8_t *addr); -int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, - uint16_t tx_time); int ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om, struct hci_data_hdr *out_hdr); -int ble_hs_hci_evt_process(uint8_t *data); +int ble_hs_hci_evt_process(const struct ble_hci_ev *ev); -void ble_hs_hci_cmd_write_hdr(uint8_t ogf, uint16_t ocf, uint8_t len, - void *buf); -int ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len); -void ble_hs_hci_cmd_build_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_set_event_mask2(uint64_t event_mask, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_disconnect(uint16_t handle, uint8_t reason, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_read_rssi(uint16_t handle, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_le_set_host_chan_class(const uint8_t *chan_map, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_read_chan_map(uint16_t conn_handle, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_read_buffer_size(void); -void ble_hs_hci_cmd_build_le_set_adv_enable(uint8_t enable, uint8_t *dst, - int dst_len); -int ble_hs_hci_cmd_le_set_adv_enable(uint8_t enable); -int ble_hs_hci_cmd_build_le_set_scan_params(uint8_t scan_type, - uint16_t scan_itvl, - uint16_t scan_window, - uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint8_t *dst, uint8_t dst_len); -int ble_hs_hci_cmd_le_set_scan_enable(uint8_t enable, uint8_t filter_dups); -int ble_hs_hci_cmd_build_le_create_connection( - const struct hci_create_conn *hcc, uint8_t *cmd, int cmd_len); -int ble_hs_hci_cmd_build_le_add_to_whitelist(const uint8_t *addr, - uint8_t addr_type, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_reset(void); -int ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(uint8_t fc_enable); -int ble_hs_hci_cmd_tx_host_buf_size(const struct hci_host_buf_size *cmd); -int ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - const struct hci_host_num_comp_pkts_entry *entry, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_read_adv_pwr(void); -int ble_hs_hci_cmd_le_create_conn_cancel(void); -int ble_hs_hci_cmd_build_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_update(const struct hci_conn_update *hcu); -void ble_hs_hci_cmd_build_le_lt_key_req_reply( - const struct hci_lt_key_req_reply *hkr, uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(uint16_t conn_handle, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_conn_param_reply( - const struct hci_conn_param_reply *hcr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_reply(const struct hci_conn_param_reply *hcr); -void ble_hs_hci_cmd_build_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn); -void ble_hs_hci_cmd_build_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst, int dst_len); +int ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len); int ble_hs_hci_set_buf_sz(uint16_t pktlen, uint16_t max_pkts); void ble_hs_hci_add_avail_pkts(uint16_t delta); @@ -184,145 +114,9 @@ uint16_t ble_hs_hci_util_handle_pb_bc_join(uint16_t handle, uint8_t pb, int ble_hs_hci_acl_tx_now(struct ble_hs_conn *conn, struct os_mbuf **om); int ble_hs_hci_acl_tx(struct ble_hs_conn *conn, struct os_mbuf **om); -int ble_hs_hci_cmd_build_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, uint16_t tx_time, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_add_to_resolv_list( - const struct hci_add_dev_to_resolving_list *padd, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_remove_from_resolv_list( - uint8_t addr_type, const uint8_t *addr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_peer_resolv_addr( - uint8_t peer_identity_addr_type, const uint8_t *peer_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_lcl_resolv_addr( - uint8_t local_identity_addr_type, const uint8_t *local_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_addr_res_en( - uint8_t enable, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout( - uint16_t timeout, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr, - uint8_t *dst, int dst_len); - -#if MYNEWT_VAL(BLE_EXT_ADV) -int ble_hs_hci_cmd_build_le_set_ext_scan_params(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_ext_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint16_t duration, - uint16_t period, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(uint8_t handle, - const uint8_t *addr, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_data(uint8_t handle, uint8_t operation, - uint8_t frag_pref, struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_enable(uint8_t enable, uint8_t sets_num, - const struct hci_ext_adv_set *sets, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_params(uint8_t handle, - const struct hci_ext_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_remove(uint8_t handle, - uint8_t *cmd, int cmd_len); - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -int -ble_hs_hci_cmd_build_le_periodic_adv_params(uint8_t handle, - const struct hci_periodic_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_enable(uint8_t enable, - uint8_t handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_data(uint8_t handle, uint8_t operation, - struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_periodic_adv_create_sync(uint8_t filter_policy, - uint8_t adv_sid, - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint16_t skip, - uint16_t sync_timeout, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(uint16_t sync_handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -#endif - -#endif - -int ble_hs_hci_cmd_build_le_enh_recv_test(uint8_t rx_chan, uint8_t phy, - uint8_t mod_idx, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_enh_trans_test(uint8_t tx_chan, - uint8_t test_data_len, - uint8_t packet_payload_idx, - uint8_t phy, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst, - uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_read_phy(uint16_t conn_handle, uint8_t *dst, - int dst_len); - -int ble_hs_hci_cmd_build_le_set_default_phy(uint8_t tx_phys_mask, - uint8_t rx_phys_mask, - uint8_t *dst, int dst_len); - -int ble_hs_hci_cmd_build_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst, int dst_len); - int ble_hs_hci_frag_num_mbufs(void); int ble_hs_hci_frag_num_mbufs_free(void); -#if MYNEWT_VAL(BLE_EXT_ADV) -#endif - -int ble_hs_hci_cmd_build_le_read_remote_feat(uint16_t handle, uint8_t *dst, - int dst_len); #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_util.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_util.c index e99dcbdff..996e0fc10 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_util.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_hci_util.c @@ -37,18 +37,19 @@ ble_hs_hci_util_handle_pb_bc_join(uint16_t handle, uint8_t pb, uint8_t bc) int ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_tx_pwr) { - uint8_t params_len; + struct ble_hci_le_rd_adv_chan_txpwr_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_ADV_CHAN_TXPWR), - NULL, 0,out_tx_pwr, 1, ¶ms_len); + NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (params_len != 1 || - *out_tx_pwr < BLE_HCI_ADV_CHAN_TXPWR_MIN || + *out_tx_pwr = rsp.power_level; + + if (*out_tx_pwr < BLE_HCI_ADV_CHAN_TXPWR_MIN || *out_tx_pwr > BLE_HCI_ADV_CHAN_TXPWR_MAX) { BLE_HS_LOG(WARN, "advertiser txpwr out of range\n"); } @@ -59,8 +60,7 @@ ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_tx_pwr) int ble_hs_hci_util_rand(void *dst, int len) { - uint8_t rsp_buf[BLE_HCI_LE_RAND_LEN]; - uint8_t params_len; + struct ble_hci_le_rand_rp rsp; uint8_t *u8ptr; int chunk_sz; int rc; @@ -68,16 +68,13 @@ ble_hs_hci_util_rand(void *dst, int len) u8ptr = dst; while (len > 0) { rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RAND), - NULL, 0, rsp_buf, sizeof rsp_buf, ¶ms_len); + NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (params_len != sizeof rsp_buf) { - return BLE_HS_ECONTROLLER; - } - chunk_sz = min(len, sizeof rsp_buf); - memcpy(u8ptr, rsp_buf, chunk_sz); + chunk_sz = min(len, sizeof(rsp)); + memcpy(u8ptr, &rsp.random_number, chunk_sz); len -= chunk_sz; u8ptr += chunk_sz; @@ -89,30 +86,25 @@ ble_hs_hci_util_rand(void *dst, int len) int ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi) { - uint8_t buf[BLE_HCI_READ_RSSI_LEN]; - uint8_t params[BLE_HCI_READ_RSSI_ACK_PARAM_LEN]; - uint16_t params_conn_handle; - uint8_t params_len; + struct ble_hci_rd_rssi_cp cmd; + struct ble_hci_rd_rssi_rp rsp; + int rc; - ble_hs_hci_cmd_build_read_rssi(conn_handle, buf, sizeof buf); + cmd.handle = htole16(conn_handle); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_STATUS_PARAMS, - BLE_HCI_OCF_RD_RSSI), buf, sizeof(buf), - params, sizeof(params), ¶ms_len); + BLE_HCI_OCF_RD_RSSI), &cmd, sizeof(cmd), + &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (params_len != BLE_HCI_READ_RSSI_ACK_PARAM_LEN) { + if (le16toh(rsp.handle) != conn_handle) { return BLE_HS_ECONTROLLER; } - params_conn_handle = get_le16(params + 0); - if (params_conn_handle != conn_handle) { - return BLE_HS_ECONTROLLER; - } - - *out_rssi = params[2]; + *out_rssi = rsp.rssi; return 0; } @@ -120,57 +112,45 @@ ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi) int ble_hs_hci_util_set_random_addr(const uint8_t *addr) { - uint8_t buf[BLE_HCI_SET_RAND_ADDR_LEN]; - int rc; + struct ble_hci_le_set_rand_addr_cp cmd; - /* set the address in the controller */ + memcpy(cmd.addr, addr, BLE_DEV_ADDR_LEN); - rc = ble_hs_hci_cmd_build_set_random_addr(addr, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } - - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_RAND_ADDR), - buf, BLE_HCI_SET_RAND_ADDR_LEN); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_RAND_ADDR), + &cmd, sizeof(cmd), NULL, 0); } int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, uint16_t tx_time) { - - uint8_t buf[BLE_HCI_SET_DATALEN_LEN]; - uint8_t params[BLE_HCI_SET_DATALEN_ACK_PARAM_LEN]; - uint16_t params_conn_handle; - uint8_t params_len; + struct ble_hci_le_set_data_len_cp cmd; + struct ble_hci_le_set_data_len_rp rsp; int rc; - rc = ble_hs_hci_cmd_build_set_data_len(conn_handle, tx_octets, tx_time, - buf, sizeof buf); - if (rc != 0) { - return BLE_HS_HCI_ERR(rc); + if (tx_octets < BLE_HCI_SET_DATALEN_TX_OCTETS_MIN || + tx_octets > BLE_HCI_SET_DATALEN_TX_OCTETS_MAX) { + return BLE_HS_EINVAL; } + if (tx_time < BLE_HCI_SET_DATALEN_TX_TIME_MIN || + tx_time > BLE_HCI_SET_DATALEN_TX_TIME_MAX) { + return BLE_HS_EINVAL; + } + + cmd.conn_handle = htole16(conn_handle); + cmd.tx_octets = htole16(tx_octets); + cmd.tx_time = htole16(tx_time); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_DATA_LEN), - buf, sizeof(buf), params, - BLE_HCI_SET_DATALEN_ACK_PARAM_LEN, ¶ms_len); + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (params_len != BLE_HCI_SET_DATALEN_ACK_PARAM_LEN) { - return BLE_HS_ECONTROLLER; - } - - params_conn_handle = get_le16(params + 0); - if (params_conn_handle != conn_handle) { + if (le16toh(rsp.conn_handle) != conn_handle) { return BLE_HS_ECONTROLLER; } @@ -200,31 +180,24 @@ ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om, int ble_hs_hci_read_chan_map(uint16_t conn_handle, uint8_t *out_chan_map) { - uint8_t buf[BLE_HCI_RD_CHANMAP_LEN]; - uint8_t params[BLE_HCI_RD_CHANMAP_RSP_LEN]; - uint16_t params_conn_handle; - uint8_t params_len; + struct ble_hci_le_rd_chan_map_cp cmd; + struct ble_hci_le_rd_chan_map_rp rsp; int rc; - ble_hs_hci_cmd_build_le_read_chan_map(conn_handle, buf, sizeof buf); + cmd.conn_handle = htole16(conn_handle); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_CHAN_MAP), - buf, sizeof(buf), params, BLE_HCI_RD_CHANMAP_RSP_LEN, - ¶ms_len); + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (params_len != BLE_HCI_RD_CHANMAP_RSP_LEN) { + if (le16toh(rsp.conn_handle) != conn_handle) { return BLE_HS_ECONTROLLER; } - params_conn_handle = get_le16(params + 0); - if (params_conn_handle != conn_handle) { - return BLE_HS_ECONTROLLER; - } - - memcpy(out_chan_map, params + 2, 5); + memcpy(out_chan_map, rsp.chan_map, 5); return 0; } @@ -232,16 +205,11 @@ ble_hs_hci_read_chan_map(uint16_t conn_handle, uint8_t *out_chan_map) int ble_hs_hci_set_chan_class(const uint8_t *chan_map) { - uint8_t buf[BLE_HCI_SET_HOST_CHAN_CLASS_LEN]; - int rc; + struct ble_hci_le_set_host_chan_class_cp cmd; - ble_hs_hci_cmd_build_le_set_host_chan_class(chan_map, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + memcpy(cmd.chan_map, chan_map, sizeof(cmd.chan_map)); - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_HOST_CHAN_CLASS), + &cmd, sizeof(cmd), NULL, 0); } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_id.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_id.c index db32f90df..e30a3a1bc 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_id.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_id.c @@ -153,20 +153,24 @@ ble_hs_id_set_rnd(const uint8_t *rnd_addr) { uint8_t addr_type_byte; int rc; - int i, rnd_part_sum = 0; + int ones; ble_hs_lock(); - /* Make sure random part of rnd_addr is not all ones or zeros */ + /* Make sure random part of rnd_addr is not all ones or zeros. Reference: + * Core v5.0, Vol 6, Part B, section 1.3.2.1 */ addr_type_byte = rnd_addr[5] & 0xc0; - for (i = 0; i < BLE_DEV_ADDR_LEN; i++) { - rnd_part_sum += *(rnd_addr + i); - } - rnd_part_sum -= addr_type_byte; - /* All ones in random part: 5*(0xFF) + 0x3F = 0x53A */ + /* count bits set to 1 in random part of address */ + ones = __builtin_popcount(rnd_addr[0]); + ones += __builtin_popcount(rnd_addr[1]); + ones += __builtin_popcount(rnd_addr[2]); + ones += __builtin_popcount(rnd_addr[3]); + ones += __builtin_popcount(rnd_addr[4]); + ones += __builtin_popcount(rnd_addr[5] & 0x3f); + if ((addr_type_byte != 0x00 && addr_type_byte != 0xc0) || - (rnd_part_sum == 0) || (rnd_part_sum == 0x53A)) { + (ones == 0 || ones == 46)) { rc = BLE_HS_EINVAL; goto done; } @@ -178,8 +182,6 @@ ble_hs_id_set_rnd(const uint8_t *rnd_addr) memcpy(ble_hs_id_rnd, rnd_addr, 6); - rc = 0; - done: ble_hs_unlock(); return rc; @@ -286,7 +288,7 @@ ble_hs_id_addr_type_usable(uint8_t own_addr_type) case BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT: case BLE_OWN_ADDR_RPA_RANDOM_DEFAULT: - id_addr_type = ble_hs_misc_addr_type_to_id(own_addr_type); + id_addr_type = ble_hs_misc_own_addr_type_to_id(own_addr_type); rc = ble_hs_id_addr(id_addr_type, NULL, &nrpa); if (rc != 0) { return rc; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_misc.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_misc.c index 00200d316..dfb46b741 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_misc.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_misc.c @@ -81,7 +81,7 @@ ble_hs_misc_conn_chan_find_reqd(uint16_t conn_handle, uint16_t cid, } uint8_t -ble_hs_misc_addr_type_to_id(uint8_t own_addr_type) +ble_hs_misc_own_addr_type_to_id(uint8_t own_addr_type) { switch (own_addr_type) { case BLE_OWN_ADDR_PUBLIC: @@ -98,6 +98,24 @@ ble_hs_misc_addr_type_to_id(uint8_t own_addr_type) } } +uint8_t +ble_hs_misc_peer_addr_type_to_id(uint8_t peer_addr_type) +{ + switch (peer_addr_type) { + case BLE_ADDR_PUBLIC: + case BLE_ADDR_PUBLIC_ID: + return BLE_ADDR_PUBLIC; + + case BLE_ADDR_RANDOM: + case BLE_ADDR_RANDOM_ID: + return BLE_ADDR_RANDOM; + + default: + BLE_HS_DBG_ASSERT(0); + return BLE_ADDR_PUBLIC; + } +} + static int ble_hs_misc_restore_one_irk(int obj_type, union ble_store_value *val, void *cookie) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_periodic_sync.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_periodic_sync.c index c594ce53a..dad535138 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_periodic_sync.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_periodic_sync.c @@ -24,6 +24,7 @@ #include "host/ble_hs_id.h" #include "ble_hs_priv.h" +#if MYNEWT_VAL(BLE_PERIODIC_ADV) static SLIST_HEAD(, ble_hs_periodic_sync) g_ble_hs_periodic_sync_handles; static struct os_mempool ble_hs_periodic_sync_pool; @@ -150,3 +151,4 @@ ble_hs_periodic_sync_init(void) return 0; } +#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_priv.h index 49269546c..538d07a97 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_priv.h @@ -26,7 +26,6 @@ #include "ble_att_priv.h" #include "ble_gap_priv.h" #include "ble_gatt_priv.h" -#include "ble_hs_dbg_priv.h" #include "ble_hs_hci_priv.h" #include "ble_hs_atomic_priv.h" #include "ble_hs_conn_priv.h" @@ -118,7 +117,8 @@ int ble_hs_misc_conn_chan_find(uint16_t conn_handle, uint16_t cid, int ble_hs_misc_conn_chan_find_reqd(uint16_t conn_handle, uint16_t cid, struct ble_hs_conn **out_conn, struct ble_l2cap_chan **out_chan); -uint8_t ble_hs_misc_addr_type_to_id(uint8_t addr_type); +uint8_t ble_hs_misc_own_addr_type_to_id(uint8_t addr_type); +uint8_t ble_hs_misc_peer_addr_type_to_id(uint8_t addr_type); int ble_hs_misc_restore_irks(void); int ble_hs_locked_by_cur_task(void); @@ -142,31 +142,6 @@ int ble_mqueue_init(struct ble_mqueue *mq, ble_npl_event_fn *ev_fn, void *ev_arg struct os_mbuf *ble_mqueue_get(struct ble_mqueue *mq); int ble_mqueue_put(struct ble_mqueue *mq, struct ble_npl_eventq *evq, struct os_mbuf *om); -#if MYNEWT_VAL(LOG_LEVEL) <= LOG_LEVEL_DEBUG && !BLE_MONITOR - -#define BLE_HS_LOG_CMD(is_tx, cmd_type, cmd_name, conn_handle, \ - log_cb, cmd) do \ -{ \ - BLE_HS_LOG(DEBUG, "%sed %s command: %s; conn=%d ", \ - (is_tx) ? "tx" : "rx", (cmd_type), (cmd_name), (conn_handle)); \ - (log_cb)(cmd); \ - BLE_HS_LOG(DEBUG, "\n"); \ -} while (0) - -#define BLE_HS_LOG_EMPTY_CMD(is_tx, cmd_type, cmd_name, conn_handle) do \ -{ \ - BLE_HS_LOG(DEBUG, "%sed %s command: %s; conn=%d ", \ - (is_tx) ? "tx" : "rx", (cmd_type), (cmd_name), (conn_handle)); \ - BLE_HS_LOG(DEBUG, "\n"); \ -} while (0) - -#else - -#define BLE_HS_LOG_CMD(is_tx, cmd_type, cmd_name, conn_handle, log_cb, cmd) -#define BLE_HS_LOG_EMPTY_CMD(is_tx, cmd_type, cmd_name, conn_handle) - -#endif - #if MYNEWT_VAL(BLE_HS_DEBUG) #define BLE_HS_DBG_ASSERT(x) assert(x) #define BLE_HS_DBG_ASSERT_EVAL(x) assert(x) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_pvcy.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_pvcy.c index 69f3da543..9e92c660f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_pvcy.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_pvcy.c @@ -36,87 +36,66 @@ const uint8_t ble_hs_pvcy_default_irk[16] = { static int ble_hs_pvcy_set_addr_timeout(uint16_t timeout) { + struct ble_hci_le_set_rpa_tmo_cp cmd; + #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) return ble_hs_resolv_set_rpa_tmo(timeout); #endif - uint8_t buf[BLE_HCI_SET_RESOLV_PRIV_ADDR_TO_LEN]; - int rc; - - rc = ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout(timeout, buf, - sizeof(buf)); - if (rc != 0) { - return rc; + if (timeout == 0 || timeout > 0xA1B8) { + return BLE_ERR_INV_HCI_CMD_PARMS; } + cmd.rpa_timeout = htole16(timeout); + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_RPA_TMO), - buf, sizeof(buf), NULL, 0, NULL); + &cmd, sizeof(cmd), NULL, 0); } #if (!MYNEWT_VAL(BLE_HOST_BASED_PRIVACY)) static int ble_hs_pvcy_set_resolve_enabled(int enable) { - uint8_t buf[BLE_HCI_SET_ADDR_RESOL_ENA_LEN]; - int rc; + struct ble_hci_le_set_addr_res_en_cp cmd; - rc = ble_hs_hci_cmd_build_set_addr_res_en(enable, buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + cmd.enable = enable; - rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_ADDR_RES_EN), - buf, sizeof(buf), NULL, 0, NULL); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_ADDR_RES_EN), + &cmd, sizeof(cmd), NULL, 0); } #endif int ble_hs_pvcy_remove_entry(uint8_t addr_type, const uint8_t *addr) { - uint8_t buf[BLE_HCI_RMV_FROM_RESOLV_LIST_LEN]; + struct ble_hci_le_rmv_resolve_list_cp cmd; int rc; - rc = ble_hs_hci_cmd_build_remove_from_resolv_list(addr_type, addr, - buf, sizeof(buf)); - if (rc != 0) { - return rc; + if (addr_type > BLE_ADDR_RANDOM) { + addr_type = addr_type % 2; } + cmd.peer_addr_type = addr_type; + memcpy(cmd.peer_id_addr, addr, BLE_DEV_ADDR_LEN); #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) - rc = ble_hs_resolv_list_rmv(buf[0], &buf[1]); + rc = ble_hs_resolv_list_rmv(addr_type, &cmd.peer_id_addr[0]); #else rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RMV_RESOLV_LIST), - buf, sizeof(buf), NULL, 0, NULL); + &cmd, sizeof(cmd), NULL, 0); #endif - if (rc != 0) { - return rc; - } - - return 0; + return rc; } #if (!MYNEWT_VAL(BLE_HOST_BASED_PRIVACY)) static int ble_hs_pvcy_clear_entries(void) { - int rc; - - rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_CLR_RESOLV_LIST), - NULL, 0, NULL, 0, NULL); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_CLR_RESOLV_LIST), + NULL, 0, NULL, 0); } #endif @@ -124,21 +103,20 @@ static int ble_hs_pvcy_add_entry_hci(const uint8_t *addr, uint8_t addr_type, const uint8_t *irk) { - struct hci_add_dev_to_resolving_list add; - uint8_t buf[BLE_HCI_ADD_TO_RESOLV_LIST_LEN]; + struct ble_hci_le_add_resolv_list_cp cmd; int rc; - add.addr_type = addr_type; - memcpy(add.addr, addr, 6); - memcpy(add.local_irk, ble_hs_pvcy_irk, 16); - memcpy(add.peer_irk, irk, 16); - - rc = ble_hs_hci_cmd_build_add_to_resolv_list(&add, buf, sizeof(buf)); - if (rc != 0) { - return rc; + if (addr_type > BLE_ADDR_RANDOM) { + return BLE_ERR_INV_HCI_CMD_PARMS; } + + cmd.peer_addr_type = addr_type; + memcpy(cmd.peer_id_addr, addr, 6); + memcpy(cmd.local_irk, ble_hs_pvcy_irk, 16); + memcpy(cmd.peer_irk, irk, 16); + #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) - rc = ble_hs_resolv_list_add(buf); + rc = ble_hs_resolv_list_add((uint8_t *) &cmd); if (rc != 0) { return rc; } @@ -148,12 +126,11 @@ ble_hs_pvcy_add_entry_hci(const uint8_t *addr, uint8_t addr_type, rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_ADD_RESOLV_LIST), - buf, sizeof(buf), NULL, 0, NULL); + &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { return rc; } - /* FIXME Controller is BT5.0 and default privacy mode is network which * can cause problems for apps which are not aware of it. We need to * sort it out somehow. For now we set device mode for all of the peer @@ -304,18 +281,19 @@ ble_hs_pvcy_our_irk(const uint8_t **out_irk) int ble_hs_pvcy_set_mode(const ble_addr_t *addr, uint8_t priv_mode) { - uint8_t buf[BLE_HCI_LE_SET_PRIVACY_MODE_LEN]; - int rc; + struct ble_hci_le_set_privacy_mode_cp cmd; - rc = ble_hs_hci_cmd_build_le_set_priv_mode(addr->val, addr->type, priv_mode, - buf, sizeof(buf)); - if (rc != 0) { - return rc; + if (addr->type > BLE_ADDR_RANDOM) { + return BLE_ERR_INV_HCI_CMD_PARMS; } + cmd.mode = priv_mode; + cmd.peer_id_addr_type = addr->type; + memcpy(cmd.peer_id_addr, addr->val, BLE_DEV_ADDR_LEN); + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_SET_PRIVACY_MODE), - buf, sizeof(buf), NULL, 0, NULL); + &cmd, sizeof(cmd), NULL, 0); } bool diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_resolv.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_resolv.c index 46e5577f6..6add1018b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_resolv.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_resolv.c @@ -96,7 +96,7 @@ ble_rpa_remove_peer_dev_rec(struct ble_hs_dev_records *p_dev_rec) ble_store_num_peer_dev_rec--; if ((i != ble_store_num_peer_dev_rec) && (ble_store_num_peer_dev_rec != 0)) { memmove(&peer_dev_rec[i], &peer_dev_rec[i + 1], - (ble_store_num_peer_dev_rec - i + 1) * sizeof(struct ble_hs_dev_records )); + (ble_store_num_peer_dev_rec - i) * sizeof(struct ble_hs_dev_records )); } BLE_HS_LOG(DEBUG, " RPA: removed device at index = %d, no. of peer records" @@ -567,9 +567,25 @@ ble_hs_resolv_list_add(uint8_t *cmdbuf) addr_type = cmdbuf[0]; ident_addr = cmdbuf + 1; +/*--------------------------------------------------------------------------------*/ + /* Temporary workaround to resolve an issue when deinitializing the stack + * and reinitializing. If the a peer deletes the bonding info after deiniting + * it will not be able to re-bond without this. Awaiting upstream fix. + */ +/* if (ble_hs_is_on_resolv_list(ident_addr, addr_type)) { return BLE_HS_EINVAL; } +*/ + int position = ble_hs_is_on_resolv_list(ident_addr, addr_type); + if (position) { + memmove(&g_ble_hs_resolv_list[position], + &g_ble_hs_resolv_list[position + 1], + (g_ble_hs_resolv_data.rl_cnt - position) * sizeof (struct + ble_hs_resolv_entry)); + --g_ble_hs_resolv_data.rl_cnt; + } +/*--------------------------------------------------------------------------------*/ rl = &g_ble_hs_resolv_list[g_ble_hs_resolv_data.rl_cnt]; memset(rl, 0, sizeof(*rl)); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_startup.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_startup.c index b21db7513..83026ac18 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_startup.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_startup.c @@ -27,26 +27,20 @@ static int ble_hs_startup_read_sup_f_tx(void) { - uint8_t ack_params[BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN]; - uint8_t ack_params_len; + struct ble_hci_ip_rd_loc_supp_feat_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOC_SUPP_FEAT), - NULL,0, ack_params, sizeof ack_params, - &ack_params_len); + NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_RD_LOC_SUPP_FEAT_RSPLEN) { - return BLE_HS_ECONTROLLER; - } - /* for now we don't use it outside of init sequence so check this here * LE Supported (Controller) byte 4, bit 6 */ - if (!(ack_params[4] & 0x60)) { + if (!(rsp.features & 0x0000006000000000)) { BLE_HS_LOG(ERROR, "Controller doesn't support LE\n"); return BLE_HS_ECONTROLLER; } @@ -58,26 +52,18 @@ ble_hs_startup_read_sup_f_tx(void) static int ble_hs_startup_read_local_ver_tx(void) { - uint8_t ack_params[BLE_HCI_RD_LOC_VER_INFO_RSPLEN]; - uint8_t ack_params_len; - uint8_t hci_version; + struct ble_hci_ip_rd_local_ver_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_LOCAL_VER), - NULL,0, ack_params, sizeof ack_params, - &ack_params_len); + NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_RD_LOC_VER_INFO_RSPLEN) { - return BLE_HS_ECONTROLLER; - } - /* For now we are interested only in HCI Version */ - hci_version = ack_params[0]; - ble_hs_hci_set_hci_version(hci_version); + ble_hs_hci_set_hci_version(rsp.hci_ver); return 0; } @@ -85,26 +71,17 @@ ble_hs_startup_read_local_ver_tx(void) static int ble_hs_startup_le_read_sup_f_tx(void) { - uint8_t ack_params[BLE_HCI_RD_LE_LOC_SUPP_FEAT_RSPLEN]; - uint8_t ack_params_len; - uint32_t feat; + struct ble_hci_le_rd_loc_supp_feat_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_LOC_SUPP_FEAT), - NULL,0, ack_params, sizeof ack_params, - &ack_params_len); + NULL,0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_RD_LE_LOC_SUPP_FEAT_RSPLEN) { - return BLE_HS_ECONTROLLER; - } - - /* For now 32-bits of features is enough */ - feat = get_le32(ack_params); - ble_hs_hci_set_le_supported_feat(feat); + ble_hs_hci_set_le_supported_feat(le64toh(rsp.features)); return 0; } @@ -112,23 +89,18 @@ ble_hs_startup_le_read_sup_f_tx(void) static int ble_hs_startup_le_read_buf_sz_tx(uint16_t *out_pktlen, uint8_t *out_max_pkts) { - uint8_t ack_params[BLE_HCI_RD_BUF_SIZE_RSPLEN]; - uint8_t ack_params_len; + struct ble_hci_le_rd_buf_size_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_RD_BUF_SIZE), NULL, 0, - ack_params, sizeof ack_params, &ack_params_len); + &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_RD_BUF_SIZE_RSPLEN) { - return BLE_HS_ECONTROLLER; - } - - *out_pktlen = get_le16(ack_params + 0); - *out_max_pkts = ack_params[2]; + *out_pktlen = le16toh(rsp.data_len); + *out_max_pkts = rsp.data_packets; return 0; } @@ -136,23 +108,18 @@ ble_hs_startup_le_read_buf_sz_tx(uint16_t *out_pktlen, uint8_t *out_max_pkts) static int ble_hs_startup_read_buf_sz_tx(uint16_t *out_pktlen, uint16_t *out_max_pkts) { - uint8_t ack_params[BLE_HCI_IP_RD_BUF_SIZE_RSPLEN]; - uint8_t ack_params_len; + struct ble_hci_ip_rd_buf_size_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_BUF_SIZE), NULL, 0, - ack_params, sizeof ack_params, &ack_params_len); + &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_IP_RD_BUF_SIZE_RSPLEN) { - return BLE_HS_ECONTROLLER; - } - - *out_pktlen = get_le16(ack_params + 0); - *out_max_pkts = get_le16(ack_params + 3); + *out_pktlen = le16toh(rsp.acl_data_len); + *out_max_pkts = le16toh(rsp.acl_num); return 0; } @@ -192,30 +159,24 @@ ble_hs_startup_read_buf_sz(void) static int ble_hs_startup_read_bd_addr(void) { - uint8_t ack_params[BLE_HCI_IP_RD_BD_ADDR_ACK_PARAM_LEN]; - uint8_t ack_params_len; + struct ble_hci_ip_rd_bd_addr_rp rsp; int rc; rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_INFO_PARAMS, BLE_HCI_OCF_IP_RD_BD_ADDR), - NULL, 0, ack_params, sizeof ack_params, - &ack_params_len); + NULL, 0, &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != sizeof ack_params) { - return BLE_HS_ECONTROLLER; - } - - ble_hs_id_set_pub(ack_params); + ble_hs_id_set_pub(rsp.addr); return 0; } static int ble_hs_startup_le_set_evmask_tx(void) { - uint8_t buf[BLE_HCI_SET_LE_EVENT_MASK_LEN]; + struct ble_hci_le_set_event_mask_cp cmd; uint8_t version; uint64_t mask; int rc; @@ -267,10 +228,21 @@ ble_hs_startup_le_set_evmask_tx(void) mask |= 0x00000000000ff800; } - ble_hs_hci_cmd_build_le_set_event_mask(mask, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_SET_EVENT_MASK), - buf, sizeof(buf)); +#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) + if (version >= BLE_HCI_VER_BCS_5_1) { + /** + * Enable the following LE events: + * 0x0000000000800000 LE Periodic Advertising Sync Transfer Received event + */ + mask |= 0x0000000000800000; + } +#endif + + cmd.event_mask = htole64(mask); + + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_SET_EVENT_MASK), + &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { return rc; } @@ -281,7 +253,8 @@ ble_hs_startup_le_set_evmask_tx(void) static int ble_hs_startup_set_evmask_tx(void) { - uint8_t buf[BLE_HCI_SET_EVENT_MASK_LEN]; + struct ble_hci_cb_set_event_mask_cp cmd; + struct ble_hci_cb_set_event_mask2_cp cmd2; uint8_t version; int rc; @@ -296,10 +269,11 @@ ble_hs_startup_set_evmask_tx(void) * 0x0000800000000000 Encryption Key Refresh Complete Event * 0x2000000000000000 LE Meta-Event */ - ble_hs_hci_cmd_build_set_event_mask(0x2000800002008090, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, - BLE_HCI_OCF_CB_SET_EVENT_MASK), - buf, sizeof(buf)); + cmd.event_mask = htole64(0x2000800002008090); + + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_SET_EVENT_MASK), + &cmd, sizeof(cmd), NULL, 0); if (rc != 0) { return rc; } @@ -309,10 +283,10 @@ ble_hs_startup_set_evmask_tx(void) * Enable the following events: * 0x0000000000800000 Authenticated Payload Timeout Event */ - ble_hs_hci_cmd_build_set_event_mask2(0x0000000000800000, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, - BLE_HCI_OCF_CB_SET_EVENT_MASK2), - buf, sizeof(buf)); + cmd2.event_mask2 = htole64(0x0000000000800000); + rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_SET_EVENT_MASK2), + &cmd2, sizeof(cmd2), NULL, 0); if (rc != 0) { return rc; } @@ -324,16 +298,9 @@ ble_hs_startup_set_evmask_tx(void) static int ble_hs_startup_reset_tx(void) { - int rc; - - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, - BLE_HCI_OCF_CB_RESET), - NULL, 0); - if (rc != 0) { - return rc; - } - - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_CTLR_BASEBAND, + BLE_HCI_OCF_CB_RESET), + NULL, 0, NULL, 0); } int diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_stop.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_stop.c index ff540b931..b90d3ec6f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_stop.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_hs_stop.c @@ -21,9 +21,12 @@ #include "sysinit/sysinit.h" #include "syscfg/syscfg.h" #include "ble_hs_priv.h" +#include "nimble/nimble_npl.h" +#ifndef MYNEWT +#include "nimble/nimble_port.h" +#endif -static ble_npl_event_fn ble_hs_stop_term_event_cb; -static struct ble_npl_event ble_hs_stop_term_ev; +#define BLE_HOST_STOP_TIMEOUT_MS MYNEWT_VAL(BLE_HS_STOP_ON_SHUTDOWN_TIMEOUT) static struct ble_gap_event_listener ble_hs_stop_gap_listener; @@ -33,6 +36,11 @@ static struct ble_gap_event_listener ble_hs_stop_gap_listener; SLIST_HEAD(ble_hs_stop_listener_slist, ble_hs_stop_listener); static struct ble_hs_stop_listener_slist ble_hs_stop_listeners; +/* Track number of connections */ +static uint8_t ble_hs_stop_conn_cnt; + +static struct ble_npl_callout ble_hs_stop_terminate_tmo; + /** * Called when a stop procedure has completed. */ @@ -42,6 +50,8 @@ ble_hs_stop_done(int status) struct ble_hs_stop_listener_slist slist; struct ble_hs_stop_listener *listener; + ble_npl_callout_stop(&ble_hs_stop_terminate_tmo); + ble_hs_lock(); ble_gap_event_listener_unregister(&ble_hs_stop_gap_listener); @@ -82,7 +92,7 @@ ble_hs_stop_terminate_all_periodic_sync(void) * ble_hs_periodic_sync_first yields the next psync handle */ sync_handle = psync->sync_handle; - rc = ble_gap_periodic_adv_terminate_sync(sync_handle); + rc = ble_gap_periodic_adv_sync_terminate(sync_handle); if (rc != 0 && rc != BLE_HS_ENOTCONN) { BLE_HS_LOG(ERROR, "failed to terminate periodic sync=0x%04x, rc=%d\n", sync_handle, rc); @@ -95,47 +105,41 @@ ble_hs_stop_terminate_all_periodic_sync(void) #endif /** - * Terminates the first open connection. - * - * If there are no open connections, Check for any active periodic sync - * handles. + * Terminates connection. */ -static void -ble_hs_stop_terminate_next_conn(void) +static int +ble_hs_stop_terminate_conn(struct ble_hs_conn *conn, void *arg) { - uint16_t handle; int rc; - handle = ble_hs_atomic_first_conn_handle(); - if (handle == BLE_HS_CONN_HANDLE_NONE) { - /* No open connections. Signal completion of the stop procedure. */ - ble_hs_stop_done(0); - return; - } - - rc = ble_gap_terminate(handle, BLE_ERR_REM_USER_CONN_TERM); + rc = ble_gap_terminate_with_conn(conn, BLE_ERR_REM_USER_CONN_TERM); if (rc == 0) { /* Terminate procedure successfully initiated. Let the GAP event * handler deal with the result. */ + ble_hs_stop_conn_cnt++; } else { - BLE_HS_LOG(ERROR, - "ble_hs_stop: failed to terminate connection; rc=%d\n", rc); - ble_hs_stop_done(rc); + /* If failed, just make sure we are not going to wait for connection complete event, + * just count it as already disconnected + */ + BLE_HS_LOG(ERROR, "ble_hs_stop: failed to terminate connection; rc=%d\n", rc); } + + return 0; } /** - * Event handler. Attempts to terminate the first open connection if there is - * one. All additional connections are terminated elsewhere in the GAP event - * handler. - * - * If there are no connections, signals completion of the stop procedure. + * This is called when host graceful disconnect timeout fires. That means some devices + * are out of range and disconnection completed did no happen yet. */ static void -ble_hs_stop_term_event_cb(struct ble_npl_event *ev) +ble_hs_stop_terminate_timeout_cb(struct ble_npl_event *ev) { - ble_hs_stop_terminate_next_conn(); + BLE_HS_LOG(ERROR, "ble_hs_stop_terminate_timeout_cb," + "%d connection(s) still up \n", ble_hs_stop_conn_cnt); + + /* TODO: Shall we send error here? */ + ble_hs_stop_done(0); } /** @@ -151,7 +155,11 @@ ble_hs_stop_gap_event(struct ble_gap_event *event, void *arg) if (event->type == BLE_GAP_EVENT_DISCONNECT || event->type == BLE_GAP_EVENT_TERM_FAILURE) { - ble_hs_stop_terminate_next_conn(); + ble_hs_stop_conn_cnt--; + + if (ble_hs_stop_conn_cnt == 0) { + ble_hs_stop_done(0); + } } return 0; @@ -233,12 +241,6 @@ ble_hs_stop(struct ble_hs_stop_listener *listener, ble_gap_preempt(); ble_gap_preempt_done(); - rc = ble_gap_event_listener_register(&ble_hs_stop_gap_listener, - ble_hs_stop_gap_event, NULL); - if (rc != 0) { - return rc; - } - #if MYNEWT_VAL(BLE_PERIODIC_ADV) /* Check for active periodic sync first and terminate it all */ rc = ble_hs_stop_terminate_all_periodic_sync(); @@ -247,11 +249,23 @@ ble_hs_stop(struct ble_hs_stop_listener *listener, } #endif - /* Schedule termination of all open connections in the host task. This is - * done even if there are no open connections so that the result of the - * stop procedure is signaled in a consistent manner (asynchronously). - */ - ble_npl_eventq_put(ble_hs_evq_get(), &ble_hs_stop_term_ev); + rc = ble_gap_event_listener_register(&ble_hs_stop_gap_listener, + ble_hs_stop_gap_event, NULL); + if (rc != 0) { + return rc; + } + + ble_hs_lock(); + ble_hs_conn_foreach(ble_hs_stop_terminate_conn, NULL); + ble_hs_unlock(); + + if (ble_hs_stop_conn_cnt > 0) { + ble_npl_callout_reset(&ble_hs_stop_terminate_tmo, + ble_npl_time_ms_to_ticks32(BLE_HOST_STOP_TIMEOUT_MS)); + } else { + /* No connections, stop is completed */ + ble_hs_stop_done(0); + } return 0; } @@ -259,5 +273,11 @@ ble_hs_stop(struct ble_hs_stop_listener *listener, void ble_hs_stop_init(void) { - ble_npl_event_init(&ble_hs_stop_term_ev, ble_hs_stop_term_event_cb, NULL); +#ifdef MYNEWT + ble_npl_callout_init(&ble_hs_stop_terminate_tmo, ble_npl_eventq_dflt_get(), + ble_hs_stop_terminate_timeout_cb, NULL); +#else + ble_npl_callout_init(&ble_hs_stop_terminate_tmo, nimble_port_get_dflt_eventq(), + ble_hs_stop_terminate_timeout_cb, NULL); +#endif } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap.c index a9252b8e0..0d9f082d4 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap.c @@ -70,7 +70,7 @@ ble_l2cap_chan_alloc(uint16_t conn_handle) } void -ble_l2cap_chan_free(struct ble_l2cap_chan *chan) +ble_l2cap_chan_free(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) { int rc; @@ -79,7 +79,7 @@ ble_l2cap_chan_free(struct ble_l2cap_chan *chan) } os_mbuf_free_chain(chan->rx_buf); - ble_l2cap_coc_cleanup_chan(chan); + ble_l2cap_coc_cleanup_chan(conn, chan); #if MYNEWT_VAL(BLE_HS_DEBUG) memset(chan, 0xff, sizeof *chan); @@ -155,7 +155,62 @@ ble_l2cap_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, return ble_l2cap_sig_coc_connect(conn_handle, psm, mtu, sdu_rx, cb, cb_arg); } -int ble_l2cap_disconnect(struct ble_l2cap_chan *chan) +int +ble_l2cap_get_chan_info(struct ble_l2cap_chan *chan, struct ble_l2cap_chan_info *chan_info) +{ + if (!chan || !chan_info) { + return BLE_HS_EINVAL; + } + + memset(chan_info, 0, sizeof(*chan_info)); + chan_info->dcid = chan->dcid; + chan_info->scid = chan->scid; + chan_info->our_l2cap_mtu = chan->my_mtu; + chan_info->peer_l2cap_mtu = chan->peer_mtu; + +#if MYNEWT_VAL(BLE_L2CAP_COC_MAX_NUM) + chan_info->psm = chan->psm; + chan_info->our_coc_mtu = chan->coc_rx.mtu; + chan_info->peer_coc_mtu = chan->coc_tx.mtu; +#endif + + return 0; +} + +int +ble_l2cap_enhanced_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg) +{ + return ble_l2cap_sig_ecoc_connect(conn_handle, psm, mtu, + num, sdu_rx, cb, cb_arg); +} + +int +ble_l2cap_reconfig(struct ble_l2cap_chan *chans[], uint8_t num, uint16_t new_mtu) +{ + int i; + uint16_t conn_handle; + + if (num == 0 || !chans) { + return BLE_HS_EINVAL; + } + + conn_handle = chans[0]->conn_handle; + + for (i = 1; i < num; i++) { + if (conn_handle != chans[i]->conn_handle) { + BLE_HS_LOG(ERROR, "All channels should have same conn handle\n"); + return BLE_HS_EINVAL; + } + } + + return ble_l2cap_sig_coc_reconfig(conn_handle, chans, num, new_mtu); +} + +int +ble_l2cap_disconnect(struct ble_l2cap_chan *chan) { return ble_l2cap_sig_disconnect(chan); } @@ -188,23 +243,18 @@ ble_l2cap_remove_rx(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) static void ble_l2cap_append_rx(struct ble_l2cap_chan *chan, struct os_mbuf *frag) { - int rc; - - (void)rc; - #if MYNEWT_VAL(BLE_L2CAP_JOIN_RX_FRAGS) - /* Copy the data from the incoming fragment into the packet in progress. */ - rc = os_mbuf_appendfrom(chan->rx_buf, frag, 0, OS_MBUF_PKTLEN(frag)); - if (rc == 0) { - os_mbuf_free_chain(frag); - return; - } -#endif + struct os_mbuf *m; + /* Copy the data from the incoming fragment into the packet in progress. */ + m = os_mbuf_pack_chains(chan->rx_buf, frag); + assert(m); +#else /* Join disabled or append failed due to mbuf shortage. Just attach the * mbuf to the end of the packet. */ os_mbuf_concat(chan->rx_buf, frag); +#endif } static int diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc.c index bc597f936..41a831565 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc.c @@ -88,17 +88,56 @@ ble_l2cap_coc_create_server(uint16_t psm, uint16_t mtu, return 0; } -static uint16_t -ble_l2cap_coc_get_cid(void) +static inline void +ble_l2cap_set_used_cid(uint32_t *cid_mask, int bit) { - static uint16_t next_cid = BLE_L2CAP_COC_CID_START; + cid_mask[bit / 32] |= (1 << (bit % 32)); +} - if (next_cid > BLE_L2CAP_COC_CID_END) { - next_cid = BLE_L2CAP_COC_CID_START; +static inline void +ble_l2cap_clear_used_cid(uint32_t *cid_mask, int bit) +{ + cid_mask[bit / 32] &= ~(1 << (bit % 32)); +} + +static inline int +ble_l2cap_get_first_available_bit(uint32_t *cid_mask) +{ + int i; + int bit = 0; + + for (i = 0; i < BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN; i++) { + /* Find first available index by finding first available bit + * in the mask. + * Note: + * a) If bit == 0 means all the bits are used + * b) this function returns 1 + index + */ + bit = __builtin_ffs(~(unsigned int)(cid_mask[i])); + if (bit != 0) { + break; + } } - /*TODO: Make it smarter*/ - return next_cid++; + if (i == BLE_HS_CONN_L2CAP_COC_CID_MASK_LEN) { + return -1; + } + + return (i * 32 + bit - 1); +} + +static int +ble_l2cap_coc_get_cid(uint32_t *cid_mask) +{ + int bit; + + bit = ble_l2cap_get_first_available_bit(cid_mask); + if (bit < 0) { + return -1; + } + + ble_l2cap_set_used_cid(cid_mask, bit); + return BLE_L2CAP_COC_CID_START + bit; } static struct ble_l2cap_coc_srv * @@ -145,22 +184,26 @@ ble_l2cap_coc_rx_fn(struct ble_l2cap_chan *chan) /* Create a shortcut to rx endpoint */ rx = &chan->coc_rx; + BLE_HS_DBG_ASSERT(rx != NULL); om_total = OS_MBUF_PKTLEN(*om); - rc = ble_hs_mbuf_pullup_base(om, BLE_L2CAP_SDU_SIZE); - if (rc != 0) { - return rc; - } /* First LE frame */ if (OS_MBUF_PKTLEN(rx->sdu) == 0) { uint16_t sdu_len; + rc = ble_hs_mbuf_pullup_base(om, BLE_L2CAP_SDU_SIZE); + if (rc != 0) { + return rc; + } + sdu_len = get_le16((*om)->om_data); if (sdu_len > rx->mtu) { - /* TODO Disconnect?*/ BLE_HS_LOG(INFO, "error: sdu_len > rx->mtu (%d>%d)\n", sdu_len, rx->mtu); + + /* Disconnect peer with invalid behaviour */ + ble_l2cap_disconnect(chan); return BLE_HS_EBADDATA; } @@ -231,14 +274,25 @@ ble_l2cap_coc_rx_fn(struct ble_l2cap_chan *chan) return 0; } +void +ble_l2cap_coc_set_new_mtu_mps(struct ble_l2cap_chan *chan, uint16_t mtu, uint16_t mps) +{ + chan->my_coc_mps = mps; + chan->coc_rx.mtu = mtu; + chan->initial_credits = mtu / chan->my_coc_mps; + if (mtu % chan->my_coc_mps) { + chan->initial_credits++; + } +} + struct ble_l2cap_chan * -ble_l2cap_coc_chan_alloc(uint16_t conn_handle, uint16_t psm, uint16_t mtu, +ble_l2cap_coc_chan_alloc(struct ble_hs_conn *conn, uint16_t psm, uint16_t mtu, struct os_mbuf *sdu_rx, ble_l2cap_event_fn *cb, void *cb_arg) { struct ble_l2cap_chan *chan; - chan = ble_l2cap_chan_alloc(conn_handle); + chan = ble_l2cap_chan_alloc(conn->bhc_handle); if (!chan) { return NULL; } @@ -246,8 +300,8 @@ ble_l2cap_coc_chan_alloc(uint16_t conn_handle, uint16_t psm, uint16_t mtu, chan->psm = psm; chan->cb = cb; chan->cb_arg = cb_arg; - chan->scid = ble_l2cap_coc_get_cid(); - chan->my_mtu = MYNEWT_VAL(BLE_L2CAP_COC_MPS); + chan->scid = ble_l2cap_coc_get_cid(conn->l2cap_coc_cid_mask); + chan->my_coc_mps = MYNEWT_VAL(BLE_L2CAP_COC_MPS); chan->rx_fn = ble_l2cap_coc_rx_fn; chan->coc_rx.mtu = mtu; chan->coc_rx.sdu = sdu_rx; @@ -255,8 +309,8 @@ ble_l2cap_coc_chan_alloc(uint16_t conn_handle, uint16_t psm, uint16_t mtu, /* Number of credits should allow to send full SDU with on given * L2CAP MTU */ - chan->coc_rx.credits = mtu / chan->my_mtu; - if (mtu % chan->my_mtu) { + chan->coc_rx.credits = mtu / chan->my_coc_mps; + if (mtu % chan->my_coc_mps) { chan->coc_rx.credits++; } @@ -265,7 +319,7 @@ ble_l2cap_coc_chan_alloc(uint16_t conn_handle, uint16_t psm, uint16_t mtu, } int -ble_l2cap_coc_create_srv_chan(uint16_t conn_handle, uint16_t psm, +ble_l2cap_coc_create_srv_chan(struct ble_hs_conn *conn, uint16_t psm, struct ble_l2cap_chan **chan) { struct ble_l2cap_coc_srv *srv; @@ -276,7 +330,7 @@ ble_l2cap_coc_create_srv_chan(uint16_t conn_handle, uint16_t psm, return BLE_HS_ENOTSUP; } - *chan = ble_l2cap_coc_chan_alloc(conn_handle, psm, srv->mtu, NULL, srv->cb, + *chan = ble_l2cap_coc_chan_alloc(conn, psm, srv->mtu, NULL, srv->cb, srv->cb_arg); if (!*chan) { return BLE_HS_ENOMEM; @@ -303,7 +357,7 @@ ble_l2cap_event_coc_disconnected(struct ble_l2cap_chan *chan) } void -ble_l2cap_coc_cleanup_chan(struct ble_l2cap_chan *chan) +ble_l2cap_coc_cleanup_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) { /* PSM 0 is used for fixed channels. */ if (chan->psm == 0) { @@ -312,6 +366,11 @@ ble_l2cap_coc_cleanup_chan(struct ble_l2cap_chan *chan) ble_l2cap_event_coc_disconnected(chan); + if (conn && chan->scid) { + ble_l2cap_clear_used_cid(conn->l2cap_coc_cid_mask, + chan->scid - BLE_L2CAP_COC_CID_START); + } + os_mbuf_free_chain(chan->coc_rx.sdu); os_mbuf_free_chain(chan->coc_tx.sdu); } @@ -364,7 +423,7 @@ ble_l2cap_coc_continue_tx(struct ble_l2cap_chan *chan) } /* Take into account peer MTU */ - len = min(left_to_send, chan->peer_mtu); + len = min(left_to_send, chan->peer_coc_mps); /* Prepare packet */ txom = ble_hs_mbuf_l2cap_pkt(); @@ -540,46 +599,6 @@ ble_l2cap_coc_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx) return ble_l2cap_coc_continue_tx(chan); } -int -ble_l2cap_get_scid(struct ble_l2cap_chan *chan) -{ - if (!chan) { - return 0; - } - - return chan->scid; -} - -int -ble_l2cap_get_dcid(struct ble_l2cap_chan *chan) -{ - if (!chan) { - return 0; - } - - return chan->dcid; -} - -int -ble_l2cap_get_our_mtu(struct ble_l2cap_chan *chan) -{ - if (!chan) { - return 0; - } - - return chan->my_mtu; -} - -int -ble_l2cap_get_peer_mtu(struct ble_l2cap_chan *chan) -{ - if (!chan) { - return 0; - } - - return chan->peer_mtu; -} - int ble_l2cap_coc_init(void) { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc_priv.h index 0a1a97b77..5ebdaa050 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_coc_priv.h @@ -57,25 +57,46 @@ struct ble_l2cap_coc_srv { int ble_l2cap_coc_init(void); int ble_l2cap_coc_create_server(uint16_t psm, uint16_t mtu, ble_l2cap_event_fn *cb, void *cb_arg); -int ble_l2cap_coc_create_srv_chan(uint16_t conn_handle, uint16_t psm, +int ble_l2cap_coc_create_srv_chan(struct ble_hs_conn *conn, uint16_t psm, struct ble_l2cap_chan **chan); -struct ble_l2cap_chan * ble_l2cap_coc_chan_alloc(uint16_t conn_handle, +struct ble_l2cap_chan * ble_l2cap_coc_chan_alloc(struct ble_hs_conn *conn, uint16_t psm, uint16_t mtu, struct os_mbuf *sdu_rx, ble_l2cap_event_fn *cb, void *cb_arg); -void ble_l2cap_coc_cleanup_chan(struct ble_l2cap_chan *chan); +void ble_l2cap_coc_cleanup_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); void ble_l2cap_coc_le_credits_update(uint16_t conn_handle, uint16_t dcid, uint16_t credits); int ble_l2cap_coc_recv_ready(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_rx); int ble_l2cap_coc_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx); +void ble_l2cap_coc_set_new_mtu_mps(struct ble_l2cap_chan *chan, uint16_t mtu, uint16_t mps); #else -#define ble_l2cap_coc_init() 0 -#define ble_l2cap_coc_create_server(psm, mtu, cb, cb_arg) BLE_HS_ENOTSUP -#define ble_l2cap_coc_recv_ready(chan, sdu_rx) BLE_HS_ENOTSUP -#define ble_l2cap_coc_cleanup_chan(chan) -#define ble_l2cap_coc_send(chan, sdu_tx) BLE_HS_ENOTSUP +static inline int +ble_l2cap_coc_init(void) { + return 0; +} + +static inline int +ble_l2cap_coc_create_server(uint16_t psm, uint16_t mtu, + ble_l2cap_event_fn *cb, void *cb_arg) { + return BLE_HS_ENOTSUP; +} + +static inline int +ble_l2cap_coc_recv_ready(struct ble_l2cap_chan *chan, + struct os_mbuf *sdu_rx) { + return BLE_HS_ENOTSUP; +} + +static inline void +ble_l2cap_coc_cleanup_chan(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan) { +} + +static inline int +ble_l2cap_coc_send(struct ble_l2cap_chan *chan, struct os_mbuf *sdu_tx) { + return BLE_HS_ENOTSUP; +} #endif #ifdef __cplusplus diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_priv.h index 640974d2a..e3409743b 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_priv.h @@ -65,8 +65,20 @@ struct ble_l2cap_chan { uint16_t conn_handle; uint16_t dcid; uint16_t scid; - uint16_t my_mtu; - uint16_t peer_mtu; /* 0 if not exchanged. */ + + /* Unions just to avoid confusion on MPS/MTU. + * In CoC context, L2CAP MTU is MPS + */ + union { + uint16_t my_mtu; + uint16_t my_coc_mps; + }; + + union { + uint16_t peer_mtu; + uint16_t peer_coc_mps; + }; + ble_l2cap_chan_flags flags; struct os_mbuf *rx_buf; @@ -102,7 +114,7 @@ struct os_mbuf *ble_l2cap_prepend_hdr(struct os_mbuf *om, uint16_t cid, uint16_t len); struct ble_l2cap_chan *ble_l2cap_chan_alloc(uint16_t conn_handle); -void ble_l2cap_chan_free(struct ble_l2cap_chan *chan); +void ble_l2cap_chan_free(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); bool ble_l2cap_is_mtu_req_sent(const struct ble_l2cap_chan *chan); @@ -118,6 +130,13 @@ void ble_l2cap_remove_rx(struct ble_hs_conn *conn, struct ble_l2cap_chan *chan); int ble_l2cap_init(void); +/* Below experimental API is available when BLE_VERSION >= 52 */ +int ble_l2cap_enhanced_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg); +int ble_l2cap_reconfig(struct ble_l2cap_chan *chans[], uint8_t num, uint16_t new_mtu); + #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig.c index bc73d954a..58f96b0f3 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig.c @@ -56,8 +56,17 @@ #define BLE_L2CAP_SIG_PROC_OP_UPDATE 0 #define BLE_L2CAP_SIG_PROC_OP_CONNECT 1 -#define BLE_L2CAP_SIG_PROC_OP_DISCONNECT 2 -#define BLE_L2CAP_SIG_PROC_OP_MAX 3 +#define BLE_L2CAP_SIG_PROC_OP_RECONFIG 2 +#define BLE_L2CAP_SIG_PROC_OP_DISCONNECT 3 +#define BLE_L2CAP_SIG_PROC_OP_MAX 4 + +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +#define BLE_L2CAP_ECOC_MIN_MTU (64) + +#define BLE_L2CAP_MAX_COC_CONN_REQ (5) +#else +#define BLE_L2CAP_MAX_COC_CONN_REQ (1) +#endif struct ble_l2cap_sig_proc { STAILQ_ENTRY(ble_l2cap_sig_proc) next; @@ -73,11 +82,20 @@ struct ble_l2cap_sig_proc { void *cb_arg; } update; struct { - struct ble_l2cap_chan *chan; + uint8_t chan_cnt; + struct ble_l2cap_chan *chan[BLE_L2CAP_MAX_COC_CONN_REQ]; } connect; struct { struct ble_l2cap_chan *chan; } disconnect; +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) + struct { + uint8_t cid_cnt; + uint16_t cids[BLE_L2CAP_MAX_COC_CONN_REQ]; + uint16_t new_mps; + uint16_t new_mtu; + } reconfig; +#endif }; }; @@ -105,7 +123,19 @@ static ble_l2cap_sig_rx_fn ble_l2cap_sig_le_credits_rx; #define ble_l2cap_sig_coc_rsp_rx ble_l2cap_sig_rx_noop #define ble_l2cap_sig_disc_rsp_rx ble_l2cap_sig_rx_noop #define ble_l2cap_sig_disc_req_rx ble_l2cap_sig_rx_noop -#define ble_l2cap_sig_le_credits_rx ble_l2cap_sig_rx_noop +#define ble_l2cap_sig_le_credits_rx ble_l2cap_sig_rx_noop +#endif + +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +static ble_l2cap_sig_rx_fn ble_l2cap_sig_credit_base_con_req_rx; +static ble_l2cap_sig_rx_fn ble_l2cap_sig_credit_base_con_rsp_rx; +static ble_l2cap_sig_rx_fn ble_l2cap_sig_credit_base_reconfig_req_rx; +static ble_l2cap_sig_rx_fn ble_l2cap_sig_credit_base_reconfig_rsp_rx; +#else +#define ble_l2cap_sig_credit_base_con_req_rx ble_l2cap_sig_rx_noop +#define ble_l2cap_sig_credit_base_con_rsp_rx ble_l2cap_sig_rx_noop +#define ble_l2cap_sig_credit_base_reconfig_req_rx ble_l2cap_sig_rx_noop +#define ble_l2cap_sig_credit_base_reconfig_rsp_rx ble_l2cap_sig_rx_noop #endif static ble_l2cap_sig_rx_fn * const ble_l2cap_sig_dispatch[] = { @@ -121,9 +151,13 @@ static ble_l2cap_sig_rx_fn * const ble_l2cap_sig_dispatch[] = { [BLE_L2CAP_SIG_OP_MOVE_CHAN_CONF_RSP] = ble_l2cap_sig_rx_noop, [BLE_L2CAP_SIG_OP_UPDATE_REQ] = ble_l2cap_sig_update_req_rx, [BLE_L2CAP_SIG_OP_UPDATE_RSP] = ble_l2cap_sig_update_rsp_rx, - [BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ] = ble_l2cap_sig_coc_req_rx, - [BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP] = ble_l2cap_sig_coc_rsp_rx, + [BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_REQ] = ble_l2cap_sig_coc_req_rx, + [BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_RSP] = ble_l2cap_sig_coc_rsp_rx, [BLE_L2CAP_SIG_OP_FLOW_CTRL_CREDIT] = ble_l2cap_sig_le_credits_rx, + [BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ] = ble_l2cap_sig_credit_base_con_req_rx, + [BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP] = ble_l2cap_sig_credit_base_con_rsp_rx, + [BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_REQ] = ble_l2cap_sig_credit_base_reconfig_req_rx, + [BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_RSP] = ble_l2cap_sig_credit_base_reconfig_rsp_rx, }; static uint8_t ble_l2cap_sig_cur_id; @@ -286,6 +320,7 @@ ble_l2cap_sig_proc_extract(uint16_t conn_handle, uint8_t op, } break; } + prev = proc; } ble_hs_unlock(); @@ -611,29 +646,461 @@ ble_l2cap_event_coc_accept(struct ble_l2cap_chan *chan, uint16_t peer_sdu_size) static void ble_l2cap_sig_coc_connect_cb(struct ble_l2cap_sig_proc *proc, int status) { + struct ble_hs_conn *conn; struct ble_l2cap_chan *chan; + int i; + bool some_not_connected = false; if (!proc) { return; } - chan = proc->connect.chan; - if (!chan || !chan->cb) { + for (i = 0; i < proc->connect.chan_cnt; i++) { + chan = proc->connect.chan[i]; + if (!chan || !chan->cb) { + continue; + } + + if ((status == 0) && (chan->dcid != 0)) { + ble_l2cap_event_coc_connected(chan, status); + /* Let's forget about connected channel now. + * Not connected will be freed later on. + */ + proc->connect.chan[i] = NULL; + continue; + } + some_not_connected = true; + ble_l2cap_event_coc_connected(chan, status ? status : BLE_HS_EREJECT); + } + + if (!some_not_connected) { return; } - ble_l2cap_event_coc_connected(chan, status); + /* Free not connected channels*/ - if (status) { - /* Normally in channel free we send disconnected event to application. - * However in case on error during creation connection we send connected - * event with error status. To avoid additional disconnected event lets - * clear callbacks since we don't needed it anymore.*/ - chan->cb = NULL; - ble_l2cap_chan_free(chan); + ble_hs_lock(); + conn = ble_hs_conn_find(chan->conn_handle); + for (i = 0; i < proc->connect.chan_cnt; i++) { + chan = proc->connect.chan[i]; + if (chan) { + /* Normally in channel free we send disconnected event to application. + * However in case on error during creation connection we send connected + * event with error status. To avoid additional disconnected event lets + * clear callbacks since we don't needed it anymore. + */ + chan->cb = NULL; + ble_l2cap_chan_free(conn, chan); + } + } + ble_hs_unlock(); +} + +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +static void +ble_l2cap_event_coc_reconfigured(uint16_t conn_handle, uint16_t status, + struct ble_l2cap_chan *chan, bool peer) +{ + struct ble_l2cap_event event = { }; + + if (peer) { + event.type = BLE_L2CAP_EVENT_COC_PEER_RECONFIGURED; + } else { + event.type = BLE_L2CAP_EVENT_COC_RECONFIG_COMPLETED; + } + event.reconfigured.conn_handle = conn_handle; + event.reconfigured.chan = chan; + event.reconfigured.status = status; + + chan->cb(&event, chan->cb_arg); +} + +static int +ble_l2cap_sig_credit_base_reconfig_req_rx(uint16_t conn_handle, + struct ble_l2cap_sig_hdr *hdr, + struct os_mbuf **om) +{ + struct ble_l2cap_chan *chan[BLE_L2CAP_MAX_COC_CONN_REQ] = {0}; + struct ble_l2cap_sig_credit_base_reconfig_req *req; + struct ble_l2cap_sig_credit_base_reconfig_rsp *rsp; + struct ble_hs_conn *conn; + struct os_mbuf *txom; + int i; + int rc; + uint8_t cid_cnt; + uint8_t reduction_mps = 0; + + rc = ble_hs_mbuf_pullup_base(om, hdr->length); + if (rc != 0) { + return rc; + } + + ble_hs_lock(); + conn = ble_hs_conn_find(conn_handle); + if (!conn) { + ble_hs_unlock(); + return 0; + } + + rsp = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_RSP, + hdr->identifier, sizeof(*rsp) , &txom); + if (!rsp) { + /* TODO: Reuse request buffer for the response. For now in such a case + * remote will timeout. + */ + BLE_HS_LOG(ERROR, "No memory for the response\n"); + ble_hs_unlock(); + return 0; + } + + if (hdr->length <= sizeof(*req)) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM); + goto failed; + } + + req = (struct ble_l2cap_sig_credit_base_reconfig_req *)(*om)->om_data; + + if ((req->mps < BLE_L2CAP_ECOC_MIN_MTU) || (req->mtu < BLE_L2CAP_ECOC_MIN_MTU)) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM); + goto failed; + } + + /* Assume request will succeed. If not, result will be updated */ + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_SUCCEED); + + cid_cnt = (hdr->length - sizeof(*req)) / sizeof(uint16_t); + if (cid_cnt > BLE_L2CAP_MAX_COC_CONN_REQ) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_UNACCAPTED_PARAM); + goto failed; + } + + for (i = 0; i < cid_cnt; i++) { + chan[i] = ble_hs_conn_chan_find_by_dcid(conn, req->dcids[i]); + if (!chan[i]) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_INVALID_DCID); + goto failed; + } + + if (chan[i]->peer_coc_mps > req->mps) { + reduction_mps++; + if (reduction_mps > 1) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_REDUCTION_MPS_NOT_ALLOWED); + goto failed; + } + } + + if (chan[i]->coc_tx.mtu > req->mtu) { + rsp->result = htole16(BLE_L2CAP_ERR_RECONFIG_REDUCTION_MTU_NOT_ALLOWED); + goto failed; + } + } + + ble_hs_unlock(); + + for (i = 0; i < cid_cnt; i++) { + chan[i]->coc_tx.mtu = req->mtu; + chan[i]->peer_coc_mps = req->mps; + ble_l2cap_event_coc_reconfigured(conn_handle, 0, chan[i], true); + } + + ble_l2cap_sig_tx(conn_handle, txom); + return 0; + +failed: + ble_hs_unlock(); + ble_l2cap_sig_tx(conn_handle, txom); + return 0; +} + +static void +ble_l2cap_sig_coc_reconfig_cb(struct ble_l2cap_sig_proc *proc, int status) +{ + int i; + struct ble_l2cap_chan *chan[BLE_L2CAP_MAX_COC_CONN_REQ] = {0}; + struct ble_hs_conn *conn; + + ble_hs_lock(); + + conn = ble_hs_conn_find(proc->conn_handle); + if (!conn) { + ble_hs_unlock(); + return; + } + + for (i = 0; i< proc->reconfig.cid_cnt; i++) { + chan[i] = ble_hs_conn_chan_find_by_scid(conn, proc->reconfig.cids[i]); + if (status == 0) { + ble_l2cap_coc_set_new_mtu_mps(chan[i], proc->reconfig.new_mtu, proc->reconfig.new_mps); + } + } + + ble_hs_unlock(); + + for (i = 0; i < proc->reconfig.cid_cnt; i++) { + ble_l2cap_event_coc_reconfigured(proc->conn_handle, status, chan[i], false); } } +static int +ble_l2cap_sig_credit_base_reconfig_rsp_rx(uint16_t conn_handle, + struct ble_l2cap_sig_hdr *hdr, + struct os_mbuf **om) +{ + struct ble_l2cap_sig_proc *proc; + struct ble_l2cap_sig_credit_base_reconfig_rsp *rsp; + int rc; + + proc = ble_l2cap_sig_proc_extract(conn_handle, + BLE_L2CAP_SIG_PROC_OP_RECONFIG, + hdr->identifier); + if (!proc) { + return 0; + } + + rc = ble_hs_mbuf_pullup_base(om, hdr->length); + if (rc != 0) { + return rc; + } + + rsp = (struct ble_l2cap_sig_credit_base_reconfig_rsp *)(*om)->om_data; + ble_l2cap_sig_coc_reconfig_cb(proc, (rsp->result > 0) ? BLE_HS_EREJECT : 0); + + return 0; +} + +static int +ble_l2cap_sig_credit_base_con_req_rx(uint16_t conn_handle, + struct ble_l2cap_sig_hdr *hdr, + struct os_mbuf **om) +{ + int rc; + struct ble_l2cap_sig_credit_base_connect_req *req; + struct os_mbuf *txom; + struct ble_l2cap_sig_credit_base_connect_rsp *rsp; + struct ble_l2cap_chan *chans[5] = { 0 }; + struct ble_hs_conn *conn; + uint16_t scid; + uint8_t num_of_scids; + uint8_t chan_created = 0; + int i; + uint8_t len; + + rc = ble_hs_mbuf_pullup_base(om, hdr->length); + if (rc != 0) { + return rc; + } + + len = (hdr->length > sizeof(*req)) ? hdr->length : sizeof(*req); + + rsp = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP, + hdr->identifier, len , &txom); + if (!rsp) { + /* Well, nothing smart we can do if there is no memory for response. + * Remote will timeout. + */ + return 0; + } + + ble_hs_lock(); + + memset(rsp, 0, len); + + /* Initial dummy values in case of error, just to satisfy PTS */ + rsp->credits = htole16(1); + rsp->mps = htole16(BLE_L2CAP_ECOC_MIN_MTU); + rsp->mtu = htole16(BLE_L2CAP_ECOC_MIN_MTU); + + if (hdr->length <= sizeof(*req)) { + rsp->result = htole16(BLE_L2CAP_COC_ERR_INVALID_PARAMETERS); + goto failed; + } + + req = (struct ble_l2cap_sig_credit_base_connect_req *)(*om)->om_data; + + num_of_scids = (hdr->length - sizeof(*req)) / sizeof(uint16_t); + if (num_of_scids > 5) { + rsp->result = htole16(BLE_L2CAP_COC_ERR_INVALID_PARAMETERS); + goto failed; + } + + if ((req->mtu < BLE_L2CAP_ECOC_MIN_MTU) || (req->mps < BLE_L2CAP_ECOC_MIN_MTU)) { + rsp->result = htole16(BLE_L2CAP_COC_ERR_INVALID_PARAMETERS); + goto failed; + } + + conn = ble_hs_conn_find_assert(conn_handle); + + /* First verify that provided SCIDs are good */ + for (i = 0; i < num_of_scids; i++) { + scid = le16toh(req->scids[i]); + if (scid < BLE_L2CAP_COC_CID_START || scid > BLE_L2CAP_COC_CID_END) { + rsp->result = htole16(BLE_L2CAP_COC_ERR_INVALID_SOURCE_CID); + goto failed; + } + } + + /* Let us try to connect channels */ + for (i = 0; i < num_of_scids; i++) { + /* Verify CID. Note, scid in the request is dcid for out local channel */ + scid = le16toh(req->scids[i]); + chans[i] = ble_hs_conn_chan_find_by_dcid(conn, scid); + if (chans[i]) { + rsp->result = htole16(BLE_L2CAP_COC_ERR_SOURCE_CID_ALREADY_USED); + rsp->dcids[i] = htole16(chans[i]->scid); + continue; + } + + rc = ble_l2cap_coc_create_srv_chan(conn, le16toh(req->psm), &chans[i]); + if (rc != 0) { + if (i == 0) { + /* In case it is very first channel we cannot create it means PSM is incorrect + * or we are out of resources. Just send a response now. + */ + rsp->result = htole16(ble_l2cap_sig_ble_hs_err2coc_err(rc)); + goto failed; + } else { + /* We cannot create number of channels req by peer due to limited resources. */ + rsp->result = htole16(BLE_L2CAP_COC_ERR_NO_RESOURCES); + goto done; + } + } + + /* Fill up remote configuration. Note MPS is the L2CAP MTU*/ + chans[i]->dcid = scid; + chans[i]->peer_coc_mps = le16toh(req->mps); + chans[i]->coc_tx.credits = le16toh(req->credits); + chans[i]->coc_tx.mtu = le16toh(req->mtu); + + ble_hs_conn_chan_insert(conn, chans[i]); + /* Sending event to the app. Unlock hs */ + ble_hs_unlock(); + + rc = ble_l2cap_event_coc_accept(chans[i], le16toh(req->mtu)); + if (rc == 0) { + rsp->dcids[i] = htole16(chans[i]->scid); + chan_created++; + if (chan_created == 1) { + /* We need to set it once as there are same initial parameters + * for all the channels + */ + rsp->credits = htole16(chans[i]->coc_rx.credits); + rsp->mps = htole16(chans[i]->my_mtu); + rsp->mtu = htole16(chans[i]->coc_rx.mtu); + } + } else { + /* Make sure we do not send disconnect event when removing channel */ + chans[i]->cb = NULL; + + ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); + ble_hs_conn_delete_chan(conn, chans[i]); + chans[i] = NULL; + rsp->result = htole16(ble_l2cap_sig_ble_hs_err2coc_err(rc)); + rc = 0; + ble_hs_unlock(); + } + + ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); + } + +done: + ble_hs_unlock(); + rc = ble_l2cap_sig_tx(conn_handle, txom); + if (rc != 0) { + ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); + for (i = 0; i < num_of_scids; i++) { + if (chans[i]) { + ble_hs_conn_delete_chan(conn, chans[i]); + } + } + ble_hs_unlock(); + return 0; + } + + /* Notify user about connection status */ + for (i = 0; i < num_of_scids; i++) { + if (chans[i]) { + ble_l2cap_event_coc_connected(chans[i], rc); + } + } + + return 0; + +failed: + ble_hs_unlock(); + ble_l2cap_sig_tx(conn_handle, txom); + return 0; +} + +static int +ble_l2cap_sig_credit_base_con_rsp_rx(uint16_t conn_handle, + struct ble_l2cap_sig_hdr *hdr, + struct os_mbuf **om) +{ + struct ble_l2cap_sig_proc *proc; + struct ble_l2cap_sig_credit_base_connect_rsp *rsp; + struct ble_l2cap_chan *chan; + struct ble_hs_conn *conn; + int rc; + int i; + +#if !BLE_MONITOR + BLE_HS_LOG(DEBUG, "L2CAP LE COC connection response received\n"); +#endif + + proc = ble_l2cap_sig_proc_extract(conn_handle, + BLE_L2CAP_SIG_PROC_OP_CONNECT, + hdr->identifier); + if (!proc) { + return 0; + } + + rc = ble_hs_mbuf_pullup_base(om, hdr->length); + if (rc != 0) { + goto done; + } + + rsp = (struct ble_l2cap_sig_credit_base_connect_rsp *)(*om)->om_data; + + if (rsp->result) { + rc = ble_l2cap_sig_coc_err2ble_hs_err(le16toh(rsp->result)); + goto done; + } + + ble_hs_lock(); + conn = ble_hs_conn_find(conn_handle); + assert(conn != NULL); + + for (i = 0; i < proc->connect.chan_cnt; i++) { + chan = proc->connect.chan[i]; + if (rsp->dcids[i] == 0) { + /* Channel rejected, dont put it on the list. + * User will get notified later in that function + */ + chan->dcid = 0; + continue; + } + chan->peer_coc_mps = le16toh(rsp->mps); + chan->dcid = le16toh(rsp->dcids[i]); + chan->coc_tx.mtu = le16toh(rsp->mtu); + chan->coc_tx.credits = le16toh(rsp->credits); + + ble_hs_conn_chan_insert(conn, chan); + } + + ble_hs_unlock(); + +done: + ble_l2cap_sig_coc_connect_cb(proc, rc); + ble_l2cap_sig_proc_free(proc); + + /* Silently ignore errors as this is response signal */ + return 0; +} +#endif + static int ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, struct os_mbuf **om) @@ -651,7 +1118,7 @@ ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, return rc; } - rsp = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_CONNECT_RSP, + rsp = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_RSP, hdr->identifier, sizeof(*rsp), &txom); if (!rsp) { /* Well, nothing smart we can do if there is no memory for response. @@ -682,7 +1149,7 @@ ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, goto failed; } - rc = ble_l2cap_coc_create_srv_chan(conn_handle, le16toh(req->psm), &chan); + rc = ble_l2cap_coc_create_srv_chan(conn, le16toh(req->psm), &chan); if (rc != 0) { uint16_t coc_err = ble_l2cap_sig_ble_hs_err2coc_err(rc); rsp->result = htole16(coc_err); @@ -692,7 +1159,7 @@ ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, /* Fill up remote configuration. Note MPS is the L2CAP MTU*/ chan->dcid = scid; - chan->peer_mtu = le16toh(req->mps); + chan->peer_coc_mps = le16toh(req->mps); chan->coc_tx.credits = le16toh(req->credits); chan->coc_tx.mtu = le16toh(req->mtu); @@ -707,6 +1174,7 @@ ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, chan->cb = NULL; ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); ble_hs_conn_delete_chan(conn, chan); ble_hs_unlock(); rsp->result = htole16(coc_err); @@ -715,13 +1183,14 @@ ble_l2cap_sig_coc_req_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, rsp->dcid = htole16(chan->scid); rsp->credits = htole16(chan->coc_rx.credits); - rsp->mps = htole16(chan->my_mtu); + rsp->mps = htole16(chan->my_coc_mps); rsp->mtu = htole16(chan->coc_rx.mtu); rsp->result = htole16(BLE_L2CAP_COC_ERR_CONNECTION_SUCCESS); rc = ble_l2cap_sig_tx(conn_handle, txom); if (rc != 0) { ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); ble_hs_conn_delete_chan(conn, chan); ble_hs_unlock(); return 0; @@ -765,7 +1234,7 @@ ble_l2cap_sig_coc_rsp_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, rsp = (struct ble_l2cap_sig_le_con_rsp *)(*om)->om_data; - chan = proc->connect.chan; + chan = proc->connect.chan[0]; if (rsp->result) { rc = ble_l2cap_sig_coc_err2ble_hs_err(le16toh(rsp->result)); @@ -775,7 +1244,7 @@ ble_l2cap_sig_coc_rsp_rx(uint16_t conn_handle, struct ble_l2cap_sig_hdr *hdr, /* Fill up remote configuration * Note MPS is the L2CAP MTU */ - chan->peer_mtu = le16toh(rsp->mps); + chan->peer_coc_mps = le16toh(rsp->mps); chan->dcid = le16toh(rsp->dcid); chan->coc_tx.mtu = le16toh(rsp->mtu); chan->coc_tx.credits = le16toh(rsp->credits); @@ -820,7 +1289,7 @@ ble_l2cap_sig_coc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, return BLE_HS_ENOTCONN; } - chan = ble_l2cap_coc_chan_alloc(conn_handle, psm, mtu, sdu_rx, cb, cb_arg); + chan = ble_l2cap_coc_chan_alloc(conn, psm, mtu, sdu_rx, cb, cb_arg); if (!chan) { ble_hs_unlock(); return BLE_HS_ENOMEM; @@ -828,7 +1297,7 @@ ble_l2cap_sig_coc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, proc = ble_l2cap_sig_proc_alloc(); if (!proc) { - ble_l2cap_chan_free(chan); + ble_l2cap_chan_free(conn, chan); ble_hs_unlock(); return BLE_HS_ENOMEM; } @@ -836,34 +1305,193 @@ ble_l2cap_sig_coc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, proc->op = BLE_L2CAP_SIG_PROC_OP_CONNECT; proc->id = ble_l2cap_sig_next_id(); proc->conn_handle = conn_handle; - proc->connect.chan = chan; + proc->connect.chan[0] = chan; + proc->connect.chan_cnt = 1; - req = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ, proc->id, + req = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_LE_CREDIT_CONNECT_REQ, proc->id, sizeof(*req), &txom); if (!req) { - ble_l2cap_chan_free(chan); + ble_l2cap_chan_free(conn, chan); ble_hs_unlock(); - return BLE_HS_ENOMEM; + rc = BLE_HS_ENOMEM; + /* Goto done to clear proc */ + goto done; } req->psm = htole16(psm); req->scid = htole16(chan->scid); req->mtu = htole16(chan->coc_rx.mtu); - req->mps = htole16(chan->my_mtu); + req->mps = htole16(chan->my_coc_mps); req->credits = htole16(chan->coc_rx.credits); ble_hs_unlock(); rc = ble_l2cap_sig_tx(proc->conn_handle, txom); if (rc != 0) { - ble_l2cap_chan_free(chan); + ble_hs_lock(); + conn = ble_hs_conn_find_assert(conn_handle); + ble_l2cap_chan_free(conn, chan); + ble_hs_unlock(); } +done: ble_l2cap_sig_process_status(proc, rc); return rc; } +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +int +ble_l2cap_sig_ecoc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg) +{ + struct ble_hs_conn *conn; + struct ble_l2cap_sig_proc *proc; + struct ble_l2cap_chan *chan = NULL; + struct os_mbuf *txom; + struct ble_l2cap_sig_credit_base_connect_req *req; + int rc; + int i; + int j; + + if (!sdu_rx || !cb) { + return BLE_HS_EINVAL; + } + + ble_hs_lock(); + conn = ble_hs_conn_find(conn_handle); + + if (!conn) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + proc = ble_l2cap_sig_proc_alloc(); + if (!proc) { + ble_hs_unlock(); + return BLE_HS_ENOMEM; + } + + proc->op = BLE_L2CAP_SIG_PROC_OP_CONNECT; + proc->id = ble_l2cap_sig_next_id(); + proc->conn_handle = conn_handle; + + req = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_CONNECT_REQ, proc->id, + sizeof(*req) + num * sizeof(uint16_t), &txom); + if (!req) { + ble_hs_unlock(); + rc = BLE_HS_ENOMEM; + /* Goto done to clear proc */ + goto done; + } + + for (i = 0; i < num; i++) { + chan = ble_l2cap_coc_chan_alloc(conn, psm, mtu, sdu_rx[i], cb, cb_arg); + if (!chan) { + /* Clear request buffer */ + os_mbuf_free_chain(txom); + + for (j = 0; j < i; j++) { + /* Clear callback to make sure "Disconnected event" to the user */ + chan[j].cb = NULL; + ble_l2cap_chan_free(conn, proc->connect.chan[j]); + } + ble_hs_unlock(); + rc = BLE_HS_ENOMEM; + goto done; + } + proc->connect.chan[i] = chan; + } + proc->connect.chan_cnt = num; + + req->psm = htole16(psm); + req->mtu = htole16(chan->coc_rx.mtu); + req->mps = htole16(chan->my_mtu); + req->credits = htole16(chan->coc_rx.credits); + for (i = 0; i < num; i++) { + req->scids[i] = htole16(proc->connect.chan[i]->scid); + } + + ble_hs_unlock(); + + rc = ble_l2cap_sig_tx(proc->conn_handle, txom); + +done: + ble_l2cap_sig_process_status(proc, rc); + + return rc; +} + +int +ble_l2cap_sig_coc_reconfig(uint16_t conn_handle, struct ble_l2cap_chan *chans[], + uint8_t num, uint16_t new_mtu) +{ + struct ble_hs_conn *conn; + struct ble_l2cap_sig_proc *proc; + struct os_mbuf *txom; + struct ble_l2cap_sig_credit_base_reconfig_req *req; + int rc; + int i; + + ble_hs_lock(); + conn = ble_hs_conn_find(conn_handle); + + if (!conn) { + ble_hs_unlock(); + return BLE_HS_ENOTCONN; + } + + proc = ble_l2cap_sig_proc_alloc(); + if (!proc) { + ble_hs_unlock(); + return BLE_HS_ENOMEM; + } + + for (i = 0; i < num; i++) { + if (ble_hs_conn_chan_exist(conn, chans[i])) { + proc->reconfig.cids[i] = chans[i]->scid; + } else { + ble_hs_unlock(); + rc = BLE_HS_ENOMEM; + goto done; + } + } + + proc->op = BLE_L2CAP_SIG_PROC_OP_RECONFIG; + proc->reconfig.cid_cnt = num; + proc->reconfig.new_mtu = new_mtu; + proc->reconfig.new_mps = MYNEWT_VAL(BLE_L2CAP_COC_MPS); + proc->id = ble_l2cap_sig_next_id(); + proc->conn_handle = conn_handle; + + req = ble_l2cap_sig_cmd_get(BLE_L2CAP_SIG_OP_CREDIT_RECONFIG_REQ, proc->id, + sizeof(*req) + num * sizeof(uint16_t), &txom); + if (!req) { + ble_hs_unlock(); + rc = BLE_HS_ENOMEM; + goto done; + } + + /* For now we allow to change CoC MTU only.*/ + req->mtu = htole16(proc->reconfig.new_mtu); + req->mps = htole16(proc->reconfig.new_mps); + + for (i = 0; i < num; i++) { + req->dcids[i] = htole16(proc->reconfig.cids[i]); + } + + ble_hs_unlock(); + + rc = ble_l2cap_sig_tx(proc->conn_handle, txom); + +done: + ble_l2cap_sig_process_status(proc, rc); + + return rc; +} +#endif + /***************************************************************************** * $disconnect * *****************************************************************************/ @@ -945,11 +1573,11 @@ ble_l2cap_sig_coc_disconnect_cb(struct ble_l2cap_sig_proc *proc, int status) done: ble_hs_lock(); - conn = ble_hs_conn_find(chan->conn_handle); + conn = ble_hs_conn_find_assert(chan->conn_handle); if (conn) { ble_hs_conn_delete_chan(conn, chan); } else { - ble_l2cap_chan_free(chan); + ble_l2cap_chan_free(NULL, chan); } ble_hs_unlock(); } @@ -1241,6 +1869,11 @@ ble_l2cap_sig_conn_broken(uint16_t conn_handle, int reason) case BLE_L2CAP_SIG_PROC_OP_DISCONNECT: ble_l2cap_sig_coc_disconnect_cb(proc, reason); break; +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) + case BLE_L2CAP_SIG_PROC_OP_RECONFIG: + ble_l2cap_sig_coc_reconfig_cb(proc, reason); + break; +#endif #endif } diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig_priv.h index 1a6fb8293..a698cd0d8 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_l2cap_sig_priv.h @@ -74,6 +74,32 @@ struct ble_l2cap_sig_le_con_rsp { uint16_t result; } __attribute__((packed)); +struct ble_l2cap_sig_credit_base_connect_req { + uint16_t psm; + uint16_t mtu; + uint16_t mps; + uint16_t credits; + uint16_t scids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_connect_rsp { + uint16_t mtu; + uint16_t mps; + uint16_t credits; + uint16_t result; + uint16_t dcids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_reconfig_req { + uint16_t mtu; + uint16_t mps; + uint16_t dcids[0]; +} __attribute__((packed)); + +struct ble_l2cap_sig_credit_base_reconfig_rsp { + uint16_t result; +} __attribute__((packed)); + struct ble_l2cap_sig_disc_req { uint16_t dcid; uint16_t scid; @@ -107,9 +133,43 @@ int ble_l2cap_sig_disconnect(struct ble_l2cap_chan *chan); int ble_l2cap_sig_le_credits(uint16_t conn_handle, uint16_t scid, uint16_t credits); #else -#define ble_l2cap_sig_coc_connect(conn_handle, psm, mtu, sdu_rx, cb, cb_arg) \ - BLE_HS_ENOTSUP -#define ble_l2cap_sig_disconnect(chan) BLE_HS_ENOTSUP +static inline int +ble_l2cap_sig_coc_connect(uint16_t conn_handle, uint16_t psm, uint16_t mtu, + struct os_mbuf *sdu_rx, + ble_l2cap_event_fn *cb, void *cb_arg) +{ + return BLE_HS_ENOTSUP; +} + +static inline int +ble_l2cap_sig_disconnect(struct ble_l2cap_chan *chan) +{ + return BLE_HS_ENOTSUP; +} +#endif + +#if MYNEWT_VAL(BLE_L2CAP_ENHANCED_COC) +int ble_l2cap_sig_ecoc_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg); +int ble_l2cap_sig_coc_reconfig(uint16_t conn_handle, struct ble_l2cap_chan *chans[], + uint8_t num, uint16_t new_mtu); +#else +static inline int +ble_l2cap_sig_ecoc_connect(uint16_t conn_handle, + uint16_t psm, uint16_t mtu, + uint8_t num, struct os_mbuf *sdu_rx[], + ble_l2cap_event_fn *cb, void *cb_arg) +{ + return BLE_HS_ENOTSUP; +} +static inline int +ble_l2cap_sig_coc_reconfig(uint16_t conn_handle, struct ble_l2cap_chan *chans[], + uint8_t num, uint16_t new_mtu) +{ + return BLE_HS_ENOTSUP; +} #endif void ble_l2cap_sig_conn_broken(uint16_t conn_handle, int reason); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm.c index 6fa6f00c4..8422c044f 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm.c @@ -95,6 +95,14 @@ static ble_sm_rx_fn * const ble_sm_dispatch[] = { #endif }; +struct hci_start_encrypt +{ + uint16_t connection_handle; + uint16_t encrypted_diversifier; + uint64_t random_number; + uint8_t long_term_key[16]; +}; + typedef void ble_sm_state_fn(struct ble_sm_proc *proc, struct ble_sm_result *res, void *arg); @@ -575,7 +583,8 @@ ble_sm_persist_keys(struct ble_sm_proc *proc) } } else { peer_addr = conn->bhc_peer_addr; - peer_addr.type = ble_hs_misc_addr_type_to_id(conn->bhc_peer_addr.type); + peer_addr.type = + ble_hs_misc_peer_addr_type_to_id(conn->bhc_peer_addr.type); } ble_hs_unlock(); @@ -758,6 +767,9 @@ ble_sm_ioact_state(uint8_t action) case BLE_SM_IOACT_NUMCMP: return BLE_SM_PROC_STATE_DHKEY_CHECK; + case BLE_SM_IOACT_OOB_SC: + return BLE_SM_PROC_STATE_RANDOM; + case BLE_SM_IOACT_OOB: case BLE_SM_IOACT_INPUT: case BLE_SM_IOACT_DISP: @@ -815,13 +827,17 @@ ble_sm_pair_fail_tx(uint16_t conn_handle, uint8_t reason) { struct ble_sm_pair_fail *cmd; struct os_mbuf *txom; + int rc; BLE_HS_DBG_ASSERT(reason > 0 && reason < BLE_SM_ERR_MAX_PLUS_1); cmd = ble_sm_cmd_get(BLE_SM_OP_PAIR_FAIL, sizeof(*cmd), &txom); if (cmd) { cmd->reason = reason; - ble_sm_tx(conn_handle, txom); + rc = ble_sm_tx(conn_handle, txom); + if (rc) { + BLE_HS_LOG(ERROR, "ble_sm_pair_fail_tx failed, rc = %d\n", rc); + } } } @@ -1059,20 +1075,18 @@ ble_sm_chk_store_overflow(uint16_t conn_handle) *****************************************************************************/ static int -ble_sm_start_encrypt_tx(struct hci_start_encrypt *cmd) +ble_sm_start_encrypt_tx(struct hci_start_encrypt *params) { - uint8_t buf[BLE_HCI_LE_START_ENCRYPT_LEN]; - int rc; + struct ble_hci_le_start_encrypt_cp cmd; - ble_hs_hci_cmd_build_le_start_encrypt(cmd, buf, sizeof buf); - rc = ble_hs_hci_cmd_tx_empty_ack(BLE_HCI_OP(BLE_HCI_OGF_LE, - BLE_HCI_OCF_LE_START_ENCRYPT), - buf, sizeof(buf)); - if (rc != 0) { - return rc; - } + cmd.conn_handle = htole16(params->connection_handle); + cmd.div = htole16(params->encrypted_diversifier); + cmd.rand = htole64(params->random_number); + memcpy(cmd.ltk, params->long_term_key, sizeof(cmd.ltk)); - return 0; + return ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, + BLE_HCI_OCF_LE_START_ENCRYPT), + &cmd, sizeof(cmd), NULL, 0); } static void @@ -1208,19 +1222,19 @@ ble_sm_enc_event_rx(uint16_t conn_handle, uint8_t evt_status, int encrypted) } void -ble_sm_enc_change_rx(struct hci_encrypt_change *evt) +ble_sm_enc_change_rx(const struct ble_hci_ev_enrypt_chg *ev) { /* For encrypted state: read LE-encryption bit; ignore BR/EDR and reserved * bits. */ - ble_sm_enc_event_rx(evt->connection_handle, evt->status, - evt->encryption_enabled & 0x01); + ble_sm_enc_event_rx(le16toh(ev->connection_handle), ev->status, + ev->enabled & 0x01); } void -ble_sm_enc_key_refresh_rx(struct hci_encrypt_key_refresh *evt) +ble_sm_enc_key_refresh_rx(const struct ble_hci_ev_enc_key_refresh *ev) { - ble_sm_enc_event_rx(evt->connection_handle, evt->status, 1); + ble_sm_enc_event_rx(le16toh(ev->conn_handle), ev->status, 1); } /***************************************************************************** @@ -1228,7 +1242,7 @@ ble_sm_enc_key_refresh_rx(struct hci_encrypt_key_refresh *evt) *****************************************************************************/ static int -ble_sm_retrieve_ltk(struct hci_le_lt_key_req *evt, uint8_t peer_addr_type, +ble_sm_retrieve_ltk(uint16_t ediv, uint64_t rand, uint8_t peer_addr_type, uint8_t *peer_addr, struct ble_store_value_sec *value_sec) { struct ble_store_key_sec key_sec; @@ -1238,8 +1252,8 @@ ble_sm_retrieve_ltk(struct hci_le_lt_key_req *evt, uint8_t peer_addr_type, memset(&key_sec, 0, sizeof key_sec); key_sec.peer_addr.type = peer_addr_type; memcpy(key_sec.peer_addr.val, peer_addr, 6); - key_sec.ediv = evt->encrypted_diversifier; - key_sec.rand_num = evt->random_number; + key_sec.ediv = ediv; + key_sec.rand_num = rand; key_sec.ediv_rand_present = 1; rc = ble_store_read_our_sec(&key_sec, value_sec); @@ -1247,30 +1261,23 @@ ble_sm_retrieve_ltk(struct hci_le_lt_key_req *evt, uint8_t peer_addr_type, } static int -ble_sm_ltk_req_reply_tx(uint16_t conn_handle, uint8_t *ltk) +ble_sm_ltk_req_reply_tx(uint16_t conn_handle, const uint8_t *ltk) { - struct hci_lt_key_req_reply cmd; - uint16_t ack_conn_handle; - uint8_t buf[BLE_HCI_LT_KEY_REQ_REPLY_LEN]; - uint8_t ack_params_len; + struct ble_hci_le_lt_key_req_reply_cp cmd; + struct ble_hci_le_lt_key_req_reply_rp rsp; int rc; - cmd.conn_handle = conn_handle; - memcpy(cmd.long_term_key, ltk, 16); + cmd.conn_handle = htole16(conn_handle); + memcpy(cmd.ltk, ltk, 16); - ble_hs_hci_cmd_build_le_lt_key_req_reply(&cmd, buf, sizeof buf); rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_LT_KEY_REQ_REPLY), - buf, sizeof(buf), &ack_conn_handle, - sizeof(ack_conn_handle), &ack_params_len); + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_LT_KEY_REQ_REPLY_ACK_PARAM_LEN) { - return BLE_HS_ECONTROLLER; - } - if (le16toh(ack_conn_handle) != conn_handle) { + if (le16toh(rsp.conn_handle) != conn_handle) { return BLE_HS_ECONTROLLER; } @@ -1280,24 +1287,19 @@ ble_sm_ltk_req_reply_tx(uint16_t conn_handle, uint8_t *ltk) static int ble_sm_ltk_req_neg_reply_tx(uint16_t conn_handle) { - uint16_t ack_conn_handle; - uint8_t buf[BLE_HCI_LT_KEY_REQ_NEG_REPLY_LEN]; - uint8_t ack_params_len; + struct ble_hci_le_lt_key_req_neg_reply_cp cmd; + struct ble_hci_le_lt_key_req_neg_reply_cp rsp; int rc; - ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(conn_handle, buf, sizeof buf); + cmd.conn_handle = htole16(conn_handle); rc = ble_hs_hci_cmd_tx(BLE_HCI_OP(BLE_HCI_OGF_LE, BLE_HCI_OCF_LE_LT_KEY_REQ_NEG_REPLY), - buf, sizeof(buf), &ack_conn_handle, - sizeof(ack_conn_handle), &ack_params_len); + &cmd, sizeof(cmd), &rsp, sizeof(rsp)); if (rc != 0) { return rc; } - if (ack_params_len != BLE_HCI_LT_KEY_REQ_NEG_REPLY_ACK_PARAM_LEN) { - return BLE_HS_ECONTROLLER; - } - if (le16toh(ack_conn_handle) != conn_handle) { + if (le16toh(rsp.conn_handle) != conn_handle) { return BLE_HS_ECONTROLLER; } @@ -1356,7 +1358,7 @@ ble_sm_ltk_restore_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, } int -ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) +ble_sm_ltk_req_rx(const struct ble_hci_ev_le_subev_lt_key_req *ev) { struct ble_store_value_sec value_sec; struct ble_hs_conn_addrs addrs; @@ -1367,11 +1369,12 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) int store_rc; int restore; + uint16_t conn_handle = le16toh(ev->conn_handle); + memset(&res, 0, sizeof res); ble_hs_lock(); - proc = ble_sm_proc_find(evt->connection_handle, BLE_SM_PROC_STATE_NONE, - 0, NULL); + proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_NONE, 0, NULL); if (proc == NULL) { /* The peer is attempting to restore a encrypted connection via the * encryption procedure. Create a proc entry to indicate that security @@ -1383,7 +1386,7 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) if (proc == NULL) { res.app_status = BLE_HS_ENOMEM; } else { - proc->conn_handle = evt->connection_handle; + proc->conn_handle = conn_handle; proc->state = BLE_SM_PROC_STATE_LTK_RESTORE; ble_sm_insert(proc); @@ -1405,12 +1408,12 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) } else { /* The request is unexpected; nack and forget. */ restore = 0; - ble_sm_ltk_req_neg_reply_tx(evt->connection_handle); + ble_sm_ltk_req_neg_reply_tx(conn_handle); proc = NULL; } if (restore) { - conn = ble_hs_conn_find_assert(evt->connection_handle); + conn = ble_hs_conn_find_assert(conn_handle); ble_hs_conn_addrs(conn, &addrs); memcpy(peer_id_addr, addrs.peer_id_addr.val, 6); } @@ -1423,7 +1426,8 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) if (res.app_status == 0) { if (restore) { - store_rc = ble_sm_retrieve_ltk(evt, addrs.peer_id_addr.type, + store_rc = ble_sm_retrieve_ltk(le16toh(ev->div), le64toh(ev->rand), + addrs.peer_id_addr.type, peer_id_addr, &value_sec); if (store_rc == 0) { /* Send the key to the controller. */ @@ -1435,7 +1439,7 @@ ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt) } } - ble_sm_process_result(evt->connection_handle, &res); + ble_sm_process_result(conn_handle, &res); return 0; } @@ -1491,8 +1495,6 @@ ble_sm_random_rx(uint16_t conn_handle, struct os_mbuf **om, cmd = (struct ble_sm_pair_random *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "random", conn_handle, ble_sm_pair_random_log, cmd); - ble_hs_lock(); proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_RANDOM, -1, NULL); if (proc == NULL) { @@ -1541,8 +1543,6 @@ ble_sm_confirm_rx(uint16_t conn_handle, struct os_mbuf **om, cmd = (struct ble_sm_pair_confirm *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "confirm", conn_handle, ble_sm_pair_confirm_log, cmd); - ble_hs_lock(); proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_CONFIRM, -1, NULL); if (proc == NULL) { @@ -1789,8 +1789,6 @@ ble_sm_pair_req_rx(uint16_t conn_handle, struct os_mbuf **om, req = (struct ble_sm_pair_cmd *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "pair req", conn_handle, ble_sm_pair_cmd_log, req); - ble_hs_lock(); /* XXX: Check connection state; reject if not appropriate. */ @@ -1902,8 +1900,6 @@ ble_sm_pair_rsp_rx(uint16_t conn_handle, struct os_mbuf **om, rsp = (struct ble_sm_pair_cmd *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "pair rsp", conn_handle, ble_sm_pair_cmd_log, rsp); - ble_hs_lock(); proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_PAIR, 1, NULL); if (proc != NULL) { @@ -1982,7 +1978,6 @@ ble_sm_sec_req_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_sec_req *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "sec req", conn_handle, ble_sm_sec_req_log, cmd); /* XXX: Reject if: * o authreq-reserved flags set? @@ -2266,7 +2261,6 @@ ble_sm_enc_info_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_enc_info *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "enc info", conn_handle, ble_sm_enc_info_log, cmd); ble_hs_lock(); @@ -2301,7 +2295,6 @@ ble_sm_master_id_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_master_id *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "master id", conn_handle, ble_sm_master_id_log, cmd); ble_hs_lock(); @@ -2337,7 +2330,6 @@ ble_sm_id_info_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_id_info *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "id info", conn_handle, ble_sm_id_info_log, cmd); ble_hs_lock(); @@ -2372,8 +2364,6 @@ ble_sm_id_addr_info_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_id_addr_info *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "id addr info", conn_handle, ble_sm_id_addr_info_log, - cmd); ble_hs_lock(); @@ -2408,7 +2398,6 @@ ble_sm_sign_info_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_sign_info *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "sign info", conn_handle, ble_sm_sign_info_log, cmd); ble_hs_lock(); @@ -2443,7 +2432,6 @@ ble_sm_fail_rx(uint16_t conn_handle, struct os_mbuf **om, res->app_status = ble_hs_mbuf_pullup_base(om, sizeof(*cmd)); if (res->app_status == 0) { cmd = (struct ble_sm_pair_fail *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "fail", conn_handle, ble_sm_pair_fail_log, cmd); res->app_status = BLE_HS_SM_PEER_ERR(cmd->reason); } @@ -2744,6 +2732,24 @@ ble_sm_inject_io(uint16_t conn_handle, struct ble_sm_io *pkey) } break; +#if MYNEWT_VAL(BLE_SM_SC) + case BLE_SM_IOACT_OOB_SC: + if (!ble_sm_sc_oob_data_check(proc, + (pkey->oob_sc_data.local != NULL), + (pkey->oob_sc_data.remote != NULL))) { + res.app_status = BLE_HS_SM_US_ERR(BLE_SM_ERR_OOB); + res.sm_err = BLE_SM_ERR_OOB; + } else { + proc->flags |= BLE_SM_PROC_F_IO_INJECTED; + proc->oob_data_local = pkey->oob_sc_data.local; + proc->oob_data_remote = pkey->oob_sc_data.remote; + + /* Execute Confirm step */ + ble_sm_sc_oob_confirm(proc, &res); + } + break; +#endif + default: BLE_HS_DBG_ASSERT(0); rc = BLE_HS_EINVAL; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_alg.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_alg.c index 93453c603..ee8b937c5 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_alg.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_alg.c @@ -66,7 +66,7 @@ static struct trng_dev *g_trng; #endif static void -ble_sm_alg_xor_128(uint8_t *p, uint8_t *q, uint8_t *r) +ble_sm_alg_xor_128(const uint8_t *p, const uint8_t *q, uint8_t *r) { int i; @@ -76,7 +76,8 @@ ble_sm_alg_xor_128(uint8_t *p, uint8_t *q, uint8_t *r) } int -ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data) +ble_sm_alg_encrypt(const uint8_t *key, const uint8_t *plaintext, + uint8_t *enc_data) { uint8_t tmp[16]; @@ -87,14 +88,18 @@ ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data) mbedtls_aes_init(&s); if (mbedtls_aes_setkey_enc(&s, tmp, 128) != 0) { + mbedtls_aes_free(&s); return BLE_HS_EUNKNOWN; } swap_buf(tmp, plaintext, 16); if (mbedtls_aes_crypt_ecb(&s, MBEDTLS_AES_ENCRYPT, tmp, enc_data) != 0) { + mbedtls_aes_free(&s); return BLE_HS_EUNKNOWN; } + + mbedtls_aes_free(&s); #else struct tc_aes_key_sched_struct s; @@ -115,7 +120,8 @@ ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data) } int -ble_sm_alg_s1(uint8_t *k, uint8_t *r1, uint8_t *r2, uint8_t *out) +ble_sm_alg_s1(const uint8_t *k, const uint8_t *r1, const uint8_t *r2, + uint8_t *out) { int rc; @@ -150,10 +156,10 @@ ble_sm_alg_s1(uint8_t *k, uint8_t *r1, uint8_t *r2, uint8_t *out) } int -ble_sm_alg_c1(uint8_t *k, uint8_t *r, - uint8_t *preq, uint8_t *pres, +ble_sm_alg_c1(const uint8_t *k, const uint8_t *r, + const uint8_t *preq, const uint8_t *pres, uint8_t iat, uint8_t rat, - uint8_t *ia, uint8_t *ra, + const uint8_t *ia, const uint8_t *ra, uint8_t *out_enc_data) { uint8_t p1[16], p2[16]; @@ -301,8 +307,8 @@ ble_sm_alg_aes_cmac(const uint8_t *key, const uint8_t *in, size_t len, #endif int -ble_sm_alg_f4(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t z, - uint8_t *out_enc_data) +ble_sm_alg_f4(const uint8_t *u, const uint8_t *v, const uint8_t *x, + uint8_t z, uint8_t *out_enc_data) { uint8_t xs[16]; uint8_t m[65]; @@ -346,9 +352,9 @@ ble_sm_alg_f4(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t z, } int -ble_sm_alg_f5(uint8_t *w, uint8_t *n1, uint8_t *n2, uint8_t a1t, - uint8_t *a1, uint8_t a2t, uint8_t *a2, uint8_t *mackey, - uint8_t *ltk) +ble_sm_alg_f5(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, + uint8_t a1t, const uint8_t *a1, uint8_t a2t, const uint8_t *a2, + uint8_t *mackey, uint8_t *ltk) { static const uint8_t salt[16] = { 0x6c, 0x88, 0x83, 0x91, 0xaa, 0xf5, 0xa5, 0x38, 0x60, 0x37, 0x0b, 0xdb, @@ -462,8 +468,8 @@ ble_sm_alg_f6(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, } int -ble_sm_alg_g2(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t *y, - uint32_t *passkey) +ble_sm_alg_g2(const uint8_t *u, const uint8_t *v, const uint8_t *x, + const uint8_t *y, uint32_t *passkey) { uint8_t m[80], xs[16]; int rc; @@ -495,8 +501,8 @@ ble_sm_alg_g2(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t *y, } int -ble_sm_alg_gen_dhkey(uint8_t *peer_pub_key_x, uint8_t *peer_pub_key_y, - uint8_t *our_priv_key, uint8_t *out_dhkey) +ble_sm_alg_gen_dhkey(const uint8_t *peer_pub_key_x, const uint8_t *peer_pub_key_y, + const uint8_t *our_priv_key, uint8_t *out_dhkey) { uint8_t dh[32]; uint8_t pk[64]; diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_cmd.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_cmd.c index e12e109d5..01651f1df 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_cmd.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_cmd.c @@ -66,97 +66,3 @@ ble_sm_tx(uint16_t conn_handle, struct os_mbuf *txom) return rc; } - -#if NIMBLE_BLE_SM -void -ble_sm_pair_cmd_log(struct ble_sm_pair_cmd *cmd) -{ - BLE_HS_LOG(DEBUG, "io_cap=%d oob_data_flag=%d authreq=0x%02x " - "mac_enc_key_size=%d init_key_dist=%d " - "resp_key_dist=%d", - cmd->io_cap, cmd->oob_data_flag, cmd->authreq, - cmd->max_enc_key_size, cmd->init_key_dist, - cmd->resp_key_dist); -} - -void -ble_sm_pair_confirm_log(struct ble_sm_pair_confirm *cmd) -{ - BLE_HS_LOG(DEBUG, "value="); - ble_hs_log_flat_buf(cmd->value, sizeof cmd->value); -} - -void -ble_sm_pair_random_log(struct ble_sm_pair_random *cmd) -{ - BLE_HS_LOG(DEBUG, "value="); - ble_hs_log_flat_buf(cmd->value, sizeof cmd->value); -} - -void -ble_sm_pair_fail_log(struct ble_sm_pair_fail *cmd) -{ - BLE_HS_LOG(DEBUG, "reason=%d", cmd->reason); -} - -void -ble_sm_enc_info_log(struct ble_sm_enc_info *cmd) -{ - BLE_HS_LOG(DEBUG, "ltk="); - ble_hs_log_flat_buf(cmd->ltk, sizeof cmd->ltk); -} - -void -ble_sm_master_id_log(struct ble_sm_master_id *cmd) -{ - /* These get logged separately to accommodate a bug in the va_args - * implementation related to 64-bit integers. - */ - BLE_HS_LOG(DEBUG, "ediv=0x%04x ", cmd->ediv); - BLE_HS_LOG(DEBUG, "rand=0x%016llx", cmd->rand_val); -} - -void -ble_sm_id_info_log(struct ble_sm_id_info *cmd) -{ - BLE_HS_LOG(DEBUG, "irk="); - ble_hs_log_flat_buf(cmd->irk, sizeof cmd->irk); -} - -void -ble_sm_id_addr_info_log(struct ble_sm_id_addr_info *cmd) -{ - BLE_HS_LOG(DEBUG, "addr_type=%d addr=", cmd->addr_type); - BLE_HS_LOG_ADDR(DEBUG, cmd->bd_addr); -} - -void -ble_sm_sign_info_log(struct ble_sm_sign_info *cmd) -{ - BLE_HS_LOG(DEBUG, "sig_key="); - ble_hs_log_flat_buf(cmd->sig_key, sizeof cmd->sig_key); -} - -void -ble_sm_sec_req_log(struct ble_sm_sec_req *cmd) -{ - BLE_HS_LOG(DEBUG, "authreq=0x%02x", cmd->authreq); -} - -void -ble_sm_public_key_log(struct ble_sm_public_key *cmd) -{ - BLE_HS_LOG(DEBUG, "x="); - ble_hs_log_flat_buf(cmd->x, sizeof cmd->x); - BLE_HS_LOG(DEBUG, "y="); - ble_hs_log_flat_buf(cmd->y, sizeof cmd->y); -} - -void -ble_sm_dhkey_check_log(struct ble_sm_dhkey_check *cmd) -{ - BLE_HS_LOG(DEBUG, "value="); - ble_hs_log_flat_buf(cmd->value, sizeof cmd->value); -} - -#endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_priv.h index bbb4b03ae..def0a32f5 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_priv.h @@ -269,6 +269,8 @@ struct ble_sm_proc { struct ble_sm_public_key pub_key_peer; uint8_t mackey[16]; uint8_t dhkey[32]; + const struct ble_sm_sc_oob_data *oob_data_local; + const struct ble_sm_sc_oob_data *oob_data_remote; #endif }; @@ -294,44 +296,33 @@ void ble_sm_dbg_set_sc_keys(uint8_t *pubkey, uint8_t *privkey); int ble_sm_num_procs(void); -void ble_sm_pair_cmd_log(struct ble_sm_pair_cmd *cmd); -void ble_sm_pair_confirm_log(struct ble_sm_pair_confirm *cmd); -void ble_sm_pair_random_log(struct ble_sm_pair_random *cmd); -void ble_sm_pair_fail_log(struct ble_sm_pair_fail *cmd); -void ble_sm_enc_info_log(struct ble_sm_enc_info *cmd); -void ble_sm_master_id_log(struct ble_sm_master_id *cmd); -void ble_sm_id_info_log(struct ble_sm_id_info *cmd); -void ble_sm_id_addr_info_log(struct ble_sm_id_addr_info *cmd); -void ble_sm_sign_info_log(struct ble_sm_sign_info *cmd); -void ble_sm_sec_req_log(struct ble_sm_sec_req *cmd); -void ble_sm_public_key_log(struct ble_sm_public_key *cmd); -void ble_sm_dhkey_check_log(struct ble_sm_dhkey_check *cmd); - -int ble_sm_alg_s1(uint8_t *k, uint8_t *r1, uint8_t *r2, uint8_t *out); -int ble_sm_alg_c1(uint8_t *k, uint8_t *r, - uint8_t *preq, uint8_t *pres, +int ble_sm_alg_s1(const uint8_t *k, const uint8_t *r1, const uint8_t *r2, + uint8_t *out); +int ble_sm_alg_c1(const uint8_t *k, const uint8_t *r, + const uint8_t *preq, const uint8_t *pres, uint8_t iat, uint8_t rat, - uint8_t *ia, uint8_t *ra, + const uint8_t *ia, const uint8_t *ra, uint8_t *out_enc_data); -int ble_sm_alg_f4(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t z, - uint8_t *out_enc_data); -int ble_sm_alg_g2(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t *y, - uint32_t *passkey); -int ble_sm_alg_f5(uint8_t *w, uint8_t *n1, uint8_t *n2, uint8_t a1t, - uint8_t *a1, uint8_t a2t, uint8_t *a2, - uint8_t *mackey, uint8_t *ltk); +int ble_sm_alg_f4(const uint8_t *u, const uint8_t *v, const uint8_t *x, + uint8_t z, uint8_t *out_enc_data); +int ble_sm_alg_g2(const uint8_t *u, const uint8_t *v, const uint8_t *x, + const uint8_t *y, uint32_t *passkey); +int ble_sm_alg_f5(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, + uint8_t a1t, const uint8_t *a1, uint8_t a2t, + const uint8_t *a2, uint8_t *mackey, uint8_t *ltk); int ble_sm_alg_f6(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, const uint8_t *r, const uint8_t *iocap, uint8_t a1t, const uint8_t *a1, uint8_t a2t, const uint8_t *a2, uint8_t *check); -int ble_sm_alg_gen_dhkey(uint8_t *peer_pub_key_x, uint8_t *peer_pub_key_y, - uint8_t *our_priv_key, uint8_t *out_dhkey); +int ble_sm_alg_gen_dhkey(const uint8_t *peer_pub_key_x, + const uint8_t *peer_pub_key_y, + const uint8_t *our_priv_key, uint8_t *out_dhkey); int ble_sm_alg_gen_key_pair(uint8_t *pub, uint8_t *priv); void ble_sm_alg_ecc_init(void); -void ble_sm_enc_change_rx(struct hci_encrypt_change *evt); -void ble_sm_enc_key_refresh_rx(struct hci_encrypt_key_refresh *evt); -int ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt); +void ble_sm_enc_change_rx(const struct ble_hci_ev_enrypt_chg *ev); +void ble_sm_enc_key_refresh_rx(const struct ble_hci_ev_enc_key_refresh *ev); +int ble_sm_ltk_req_rx(const struct ble_hci_ev_le_subev_lt_key_req *ev); #if MYNEWT_VAL(BLE_SM_LEGACY) int ble_sm_lgcy_io_action(struct ble_sm_proc *proc, uint8_t *action); @@ -364,6 +355,10 @@ void ble_sm_sc_dhkey_check_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, void *arg); void ble_sm_sc_dhkey_check_rx(uint16_t conn_handle, struct os_mbuf **rxom, struct ble_sm_result *res); +bool ble_sm_sc_oob_data_check(struct ble_sm_proc *proc, + bool oob_data_local_present, + bool oob_data_remote_present); +void ble_sm_sc_oob_confirm(struct ble_sm_proc *proc, struct ble_sm_result *res); void ble_sm_sc_init(void); #else #define ble_sm_sc_io_action(proc, action) (BLE_HS_ENOTSUP) @@ -399,12 +394,9 @@ int ble_sm_slave_initiate(uint16_t conn_handle); int ble_sm_enc_initiate(uint16_t conn_handle, uint8_t key_size, const uint8_t *ltk, uint16_t ediv, uint64_t rand_val, int auth); -int ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data); +int ble_sm_alg_encrypt(const uint8_t *key, const uint8_t *plaintext, + uint8_t *enc_data); int ble_sm_init(void); - -#define BLE_SM_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ - BLE_HS_LOG_CMD((is_tx), "sm", (cmd_name), (conn_handle), (log_cb), (cmd)) - #else #define ble_sm_enc_change_rx(evt) ((void)(evt)) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_sc.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_sc.c index 1293de3a4..333310702 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_sc.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/src/ble_sm_sc.c @@ -106,7 +106,7 @@ ble_sm_sc_io_action(struct ble_sm_proc *proc, uint8_t *action) if (pair_req->oob_data_flag == BLE_SM_PAIR_OOB_YES || pair_rsp->oob_data_flag == BLE_SM_PAIR_OOB_YES) { - *action = BLE_SM_IOACT_OOB; + *action = BLE_SM_IOACT_OOB_SC; } else if (!(pair_req->authreq & BLE_SM_PAIR_AUTHREQ_MITM) && !(pair_rsp->authreq & BLE_SM_PAIR_AUTHREQ_MITM)) { @@ -125,7 +125,7 @@ ble_sm_sc_io_action(struct ble_sm_proc *proc, uint8_t *action) proc->pair_alg = BLE_SM_PAIR_ALG_JW; break; - case BLE_SM_IOACT_OOB: + case BLE_SM_IOACT_OOB_SC: proc->pair_alg = BLE_SM_PAIR_ALG_OOB; proc->flags |= BLE_SM_PROC_F_AUTHENTICATED; break; @@ -233,11 +233,11 @@ ble_sm_sc_gen_ri(struct ble_sm_proc *proc) { int byte; int bit; - int rc; switch (proc->pair_alg) { case BLE_SM_PAIR_ALG_JW: case BLE_SM_PAIR_ALG_NUMCMP: + case BLE_SM_PAIR_ALG_OOB: proc->ri = 0; return 0; @@ -253,16 +253,49 @@ ble_sm_sc_gen_ri(struct ble_sm_proc *proc) return 0; - case BLE_SM_PAIR_ALG_OOB: - rc = ble_hs_hci_util_rand(&proc->ri, 1); - return rc; - default: BLE_HS_DBG_ASSERT(0); return BLE_HS_EUNKNOWN; } } +void +ble_sm_sc_oob_confirm(struct ble_sm_proc *proc, struct ble_sm_result *res) +{ + int err; + bool match; + uint8_t c[16]; + + /* Authentication stage 1: Step 5 */ + if (proc->oob_data_remote) { + err = ble_sm_alg_f4(proc->pub_key_peer.x, proc->pub_key_peer.x, + proc->oob_data_remote->r, 0, c); + if (err) { + res->sm_err = BLE_SM_ERR_UNSPECIFIED; + res->app_status = BLE_HS_SM_US_ERR(BLE_SM_ERR_UNSPECIFIED); + res->enc_cb = 1; + return; + } + + match = (memcmp(c, proc->oob_data_remote->c, sizeof(c)) == 0); + if (!match) { + /* Random number mismatch. */ + res->sm_err = BLE_SM_ERR_CONFIRM_MISMATCH; + res->app_status = BLE_HS_SM_US_ERR(BLE_SM_ERR_CONFIRM_MISMATCH); + res->enc_cb = 1; + return; + } + } + + if ((proc->flags & BLE_SM_PROC_F_INITIATOR) || + (proc->flags & BLE_SM_PROC_F_ADVANCE_ON_IO)) { + /* If is initiator or was waiting on + * IO then execute step 6: send Random + */ + res->execute = 1; + } +} + void ble_sm_sc_confirm_exec(struct ble_sm_proc *proc, struct ble_sm_result *res) { @@ -414,8 +447,9 @@ ble_sm_sc_random_rx(struct ble_sm_proc *proc, struct ble_sm_result *res) uint8_t rat; int rc; - if (proc->flags & BLE_SM_PROC_F_INITIATOR || - ble_sm_sc_responder_verifies_random(proc)) { + if (proc->pair_alg != BLE_SM_PAIR_ALG_OOB && ( + proc->flags & BLE_SM_PROC_F_INITIATOR || + ble_sm_sc_responder_verifies_random(proc))) { BLE_HS_LOG(DEBUG, "tk="); ble_hs_log_flat_buf(proc->tk, 16); @@ -487,7 +521,12 @@ ble_sm_sc_random_rx(struct ble_sm_proc *proc, struct ble_sm_result *res) res->execute = 1; } } else { - res->execute = 1; + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB && + !(proc->flags & BLE_SM_PROC_F_IO_INJECTED)) { + proc->flags |= BLE_SM_PROC_F_ADVANCE_ON_IO; + } else { + res->execute = 1; + } } } @@ -526,7 +565,11 @@ ble_sm_sc_public_key_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, } if (!(proc->flags & BLE_SM_PROC_F_INITIATOR)) { - proc->state = BLE_SM_PROC_STATE_CONFIRM; + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB) { + proc->state = BLE_SM_PROC_STATE_RANDOM; + } else { + proc->state = BLE_SM_PROC_STATE_CONFIRM; + } rc = ble_sm_sc_io_action(proc, &ioact); if (rc != 0) { @@ -568,7 +611,13 @@ ble_sm_sc_public_key_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_public_key *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "public key", conn_handle, ble_sm_public_key_log, cmd); + /* Check if the peer public key is same as our generated public key. + * Return fail if the public keys match. */ + if (memcmp(cmd, ble_sm_sc_pub_key, 64) == 0) { + res->enc_cb = 1; + res->sm_err = BLE_SM_ERR_AUTHREQ; + return; + } ble_hs_lock(); proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_PUBLIC_KEY, -1, @@ -588,8 +637,11 @@ ble_sm_sc_public_key_rx(uint16_t conn_handle, struct os_mbuf **om, res->enc_cb = 1; } else { if (proc->flags & BLE_SM_PROC_F_INITIATOR) { - - proc->state = BLE_SM_PROC_STATE_CONFIRM; + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB) { + proc->state = BLE_SM_PROC_STATE_RANDOM; + } else { + proc->state = BLE_SM_PROC_STATE_CONFIRM; + } rc = ble_sm_sc_io_action(proc, &ioact); if (rc != 0) { @@ -651,6 +703,14 @@ ble_sm_sc_dhkey_check_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, iocap = &pair_rsp->io_cap; } + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB) { + if (proc->oob_data_remote) { + memcpy(proc->tk, proc->oob_data_remote->r, 16); + } else { + memset(proc->tk, 0, 16); + } + } + ble_sm_sc_dhkey_addrs(proc, &our_addr, &peer_addr); cmd = ble_sm_cmd_get(BLE_SM_OP_PAIR_DHKEY_CHECK, sizeof(*cmd), &txom); @@ -702,11 +762,27 @@ ble_sm_dhkey_check_process(struct ble_sm_proc *proc, pair_rsp = (struct ble_sm_pair_cmd *) &proc->pair_rsp[1]; iocap = &pair_rsp->io_cap; + + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB) { + if (pair_rsp->oob_data_flag) { + memcpy(proc->tk, proc->oob_data_local->r, 16); + } else { + memset(proc->tk, 0, 16); + } + } } else { struct ble_sm_pair_cmd *pair_req; pair_req = (struct ble_sm_pair_cmd *) &proc->pair_req[1]; iocap = &pair_req->io_cap; + + if (proc->pair_alg == BLE_SM_PAIR_ALG_OOB) { + if (pair_req->oob_data_flag) { + memcpy(proc->tk, proc->oob_data_local->r, 16); + } else { + memset(proc->tk, 0, 16); + } + } } ble_sm_sc_dhkey_addrs(proc, &our_addr, &peer_addr); @@ -768,7 +844,6 @@ ble_sm_sc_dhkey_check_rx(uint16_t conn_handle, struct os_mbuf **om, } cmd = (struct ble_sm_dhkey_check *)(*om)->om_data; - BLE_SM_LOG_CMD(0, "dhkey check", conn_handle, ble_sm_dhkey_check_log, cmd); ble_hs_lock(); proc = ble_sm_proc_find(conn_handle, BLE_SM_PROC_STATE_DHKEY_CHECK, -1, @@ -781,6 +856,56 @@ ble_sm_sc_dhkey_check_rx(uint16_t conn_handle, struct os_mbuf **om, ble_hs_unlock(); } +bool +ble_sm_sc_oob_data_check(struct ble_sm_proc *proc, + bool oob_data_local_present, + bool oob_data_remote_present) +{ + struct ble_sm_pair_cmd *pair_req; + struct ble_sm_pair_cmd *pair_rsp; + bool req_oob_present; + bool rsp_oob_present; + + pair_req = (struct ble_sm_pair_cmd *) &proc->pair_req[1]; + pair_rsp = (struct ble_sm_pair_cmd *) &proc->pair_rsp[1]; + req_oob_present = pair_req->oob_data_flag == BLE_SM_PAIR_OOB_YES; + rsp_oob_present = pair_rsp->oob_data_flag == BLE_SM_PAIR_OOB_YES; + + if (proc->flags & BLE_SM_PROC_F_INITIATOR) { + return req_oob_present == oob_data_remote_present; + } else { + return rsp_oob_present == oob_data_remote_present; + } +} + +int +ble_sm_sc_oob_generate_data(struct ble_sm_sc_oob_data *oob_data) +{ + int rc; + +#if !MYNEWT_VAL(BLE_SM_SC) + return BLE_HS_ENOTSUP; +#endif + + rc = ble_sm_sc_ensure_keys_generated(); + if (rc) { + return rc; + } + + rc = ble_hs_hci_util_rand(oob_data->r, 16); + if (rc) { + return rc; + } + + rc = ble_sm_alg_f4(ble_sm_sc_pub_key, ble_sm_sc_pub_key, oob_data->r, 0, + oob_data->c); + if (rc) { + return rc; + } + + return 0; +} + void ble_sm_sc_init(void) { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/store/config/src/ble_store_nvs.c b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/store/config/src/ble_store_nvs.c index 13dae8d2b..49ca6ed73 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/store/config/src/ble_store_nvs.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/store/config/src/ble_store_nvs.c @@ -214,8 +214,10 @@ get_nvs_db_attribute(int obj_type, bool empty, void *value, int num_value) if (value) { #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) if (obj_type == BLE_STORE_OBJ_TYPE_PEER_DEV_REC) { - err = get_nvs_matching_index(&p_dev_rec, value, num_value, - sizeof(struct ble_hs_dev_records)); + err = get_nvs_matching_index(&p_dev_rec.peer_sec, + &((struct ble_hs_dev_records *)value)->peer_sec, + num_value, + sizeof(struct ble_hs_peer_sec)); } else #endif { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimconfig.h b/lib/libesp32_div/NimBLE-Arduino/src/nimconfig.h index 5ad95ddb9..cf7711c08 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimconfig.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimconfig.h @@ -186,6 +186,8 @@ #define CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH 2 #define CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT 1 +#define CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS 2000 + #ifndef CONFIG_BT_ENABLED #define CONFIG_BT_ENABLED #endif @@ -194,6 +196,11 @@ #define CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY #endif + +#if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#define CONFIG_IDF_TARGET_ESP32 1 +#endif + /* Cannot use client without scan */ #if defined(CONFIG_BT_NIMBLE_ROLE_CENTRAL) && !defined(CONFIG_BT_NIMBLE_ROLE_OBSERVER) #define CONFIG_BT_NIMBLE_ROLE_OBSERVER diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimconfig_rename.h b/lib/libesp32_div/NimBLE-Arduino/src/nimconfig_rename.h index 3b96c1fec..c45aa8bf6 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimconfig_rename.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/nimconfig_rename.h @@ -41,13 +41,21 @@ #endif #if defined(CONFIG_SCAN_DUPLICATE_TYPE) && !defined(CONFIG_BTDM_SCAN_DUPL_TYPE) -#define CONFIG_BTDM_SCAN_DUPL_TYPE CONFIG_SCAN_DUPLICATE_TYPE +#define CONFIG_BTDM_SCAN_DUPL_TYPE CONFIG_SCAN_DUPLICATE_TYPE +#endif + +#if defined(CONFIG_BT_CTRL_SCAN_DUPL_TYPE) && !defined(CONFIG_BTDM_SCAN_DUPL_TYPE) +#define CONFIG_BTDM_SCAN_DUPL_TYPE CONFIG_BT_CTRL_SCAN_DUPL_TYPE #endif #if defined(CONFIG_DUPLICATE_SCAN_CACHE_SIZE) && !defined(CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE) -#define CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE CONFIG_DUPLICATE_SCAN_CACHE_SIZE +#define CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE CONFIG_DUPLICATE_SCAN_CACHE_SIZE +#endif + +#if defined(CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE) && !defined(CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE) +#define CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE #endif #if defined(CONFIG_NIMBLE_MAX_CONNECTIONS ) && !defined(CONFIG_BT_NIMBLE_MAX_CONNECTIONS) -#define CONFIG_BT_NIMBLE_MAX_CONNECTIONS CONFIG_NIMBLE_MAX_CONNECTIONS +#define CONFIG_BT_NIMBLE_MAX_CONNECTIONS CONFIG_NIMBLE_MAX_CONNECTIONS #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/os/endian.h b/lib/libesp32_div/NimBLE-Arduino/src/os/endian.h index e80ca8697..152727225 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/os/endian.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/os/endian.h @@ -207,15 +207,19 @@ extern "C" { #endif void put_le16(void *buf, uint16_t x); +void put_le24(void *buf, uint32_t x); void put_le32(void *buf, uint32_t x); void put_le64(void *buf, uint64_t x); uint16_t get_le16(const void *buf); +uint32_t get_le24(const void *buf); uint32_t get_le32(const void *buf); uint64_t get_le64(const void *buf); void put_be16(void *buf, uint16_t x); +void put_be24(void *buf, uint32_t x); void put_be32(void *buf, uint32_t x); void put_be64(void *buf, uint64_t x); uint16_t get_be16(const void *buf); +uint32_t get_be24(const void *buf); uint32_t get_be32(const void *buf); uint64_t get_be64(const void *buf); void swap_in_place(void *buf, int len); diff --git a/lib/libesp32_div/NimBLE-Arduino/src/os/os_mbuf.h b/lib/libesp32_div/NimBLE-Arduino/src/os/os_mbuf.h index b1e234039..f3857fe46 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/os/os_mbuf.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/os/os_mbuf.h @@ -614,6 +614,25 @@ struct os_mbuf *os_mbuf_pullup(struct os_mbuf *om, uint16_t len); */ struct os_mbuf *os_mbuf_trim_front(struct os_mbuf *om); +/** + * Creates a single chained mbuf from m1 and m2 utilizing all + * the available buffer space in all mbufs in the resulting + * chain. In other words, ensures there is no leading space in + * any mbuf in the resulting chain and trailing space only in + * the last mbuf in the chain. Mbufs from either chain may be + * freed if not needed. No mbufs are allocated. Note that mbufs + * from m2 are added to the end of m1. If m1 has a packet + * header, it is retained and length updated. If m2 has a packet + * header it is discarded. If m1 is NULL, NULL is returned and + * m2 is left untouched. + * + * @param m1 Pointer to first mbuf chain to pack + * @param m2 Pointer to second mbuf chain to pack + * + * @return struct os_mbuf* Pointer to resulting mbuf chain + */ +struct os_mbuf *os_mbuf_pack_chains(struct os_mbuf *m1, struct os_mbuf *m2); + #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_dbg_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/os/util.h similarity index 56% rename from lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_dbg_priv.h rename to lib/libesp32_div/NimBLE-Arduino/src/os/util.h index 4d4390f92..3e59670c4 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/nimble/host/mesh/src/src/ble_hs_dbg_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/os/util.h @@ -17,18 +17,22 @@ * under the License. */ -#ifndef H_BLE_HS_DBG_PRIV_ -#define H_BLE_HS_DBG_PRIV_ +#ifndef H_OS_UTIL_ +#define H_OS_UTIL_ -#ifdef __cplusplus -extern "C" { +/* Helpers to pass integers as pointers and vice-versa */ +#define POINTER_TO_UINT(p) ((unsigned int) ((uintptr_t) (p))) +#define UINT_TO_POINTER(u) ((void *) ((uintptr_t) (u))) +#define POINTER_TO_INT(p) ((int) ((intptr_t) (p))) +#define INT_TO_POINTER(u) ((void *) ((intptr_t) (u))) + +/* Helper to retrieve pointer to "parent" object in structure */ +#define CONTAINER_OF(ptr, type, field) \ + ((type *)(((char *)(ptr)) - offsetof(type, field))) + +/* Helper to calculate number of elements in array */ +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(array) \ + (sizeof(array) / sizeof((array)[0])) #endif - -void ble_hs_dbg_event_disp(uint8_t *evbuf); -void ble_hs_dbg_set_sync_state(uint8_t sync_state); - -#ifdef __cplusplus -} #endif - -#endif /* H_HOST_DBG_ */ diff --git a/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/endian.c b/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/endian.c index 1311f43ef..2afd6a22e 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/endian.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/endian.c @@ -29,6 +29,17 @@ put_le16(void *buf, uint16_t x) u8ptr[1] = (uint8_t)(x >> 8); } +void +put_le24(void *buf, uint32_t x) +{ + uint8_t *u8ptr; + + u8ptr = buf; + u8ptr[0] = (uint8_t)x; + u8ptr[1] = (uint8_t)(x >> 8); + u8ptr[2] = (uint8_t)(x >> 16); +} + void put_le32(void *buf, uint32_t x) { @@ -70,6 +81,20 @@ get_le16(const void *buf) return x; } +uint32_t +get_le24(const void *buf) +{ + const uint8_t *u8ptr; + uint32_t x; + + u8ptr = buf; + x = u8ptr[0]; + x |= (uint32_t)u8ptr[1] << 8; + x |= (uint32_t)u8ptr[2] << 16; + + return x; +} + uint32_t get_le32(const void *buf) { @@ -114,6 +139,17 @@ put_be16(void *buf, uint16_t x) u8ptr[1] = (uint8_t)x; } +void +put_be24(void *buf, uint32_t x) +{ + uint8_t *u8ptr; + + u8ptr = buf; + u8ptr[0] = (uint8_t)(x >> 24); + u8ptr[1] = (uint8_t)(x >> 16); + u8ptr[2] = (uint8_t)(x >> 8); +} + void put_be32(void *buf, uint32_t x) { @@ -155,6 +191,20 @@ get_be16(const void *buf) return x; } +uint32_t +get_be24(const void *buf) +{ + const uint8_t *u8ptr; + uint32_t x; + + u8ptr = buf; + x = (uint32_t)u8ptr[0] << 24; + x |= (uint32_t)u8ptr[1] << 16; + x |= (uint32_t)u8ptr[2] << 8; + + return x; +} + uint32_t get_be32(const void *buf) { diff --git a/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/os_mbuf.c b/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/os_mbuf.c index 4da8b9625..ed18405b8 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/os_mbuf.c +++ b/lib/libesp32_div/NimBLE-Arduino/src/porting/nimble/src/os_mbuf.c @@ -660,10 +660,10 @@ os_mbuf_cmpf(const struct os_mbuf *om, int off, const void *data, int len) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpointer-arith" rc = memcmp(om->om_data + om_off, data + data_off, chunk_sz); -#pragma GCC diagnostic pop if (rc != 0) { return rc; } +#pragma GCC diagnostic pop } data_off += chunk_sz; @@ -1046,3 +1046,89 @@ os_mbuf_trim_front(struct os_mbuf *om) return om; } +struct os_mbuf * +os_mbuf_pack_chains(struct os_mbuf *m1, struct os_mbuf *m2) +{ + uint16_t rem_len; + uint16_t copylen; + uint8_t *dptr; + struct os_mbuf *cur; + struct os_mbuf *next; + + /* If m1 is NULL, return NULL */ + if (m1 == NULL) { + return NULL; + } + + /* + * Concatenate the two chains to start. This will discard packet header in + * m2 and adjust packet length in m1 if m1 has a packet header. + */ + if (m2 != NULL) { + os_mbuf_concat(m1, m2); + } + + cur = m1; + while (1) { + /* If there is leading space in the mbuf, move data up */ + if (OS_MBUF_LEADINGSPACE(cur)) { + dptr = &cur->om_databuf[0]; + if (OS_MBUF_IS_PKTHDR(cur)) { + dptr += cur->om_pkthdr_len; + } + memmove(dptr, cur->om_data, cur->om_len); + cur->om_data = dptr; + } + + /* Set pointer to where we will begin copying data in current mbuf */ + dptr = cur->om_data + cur->om_len; + + /* Get a pointer to the next buf we want to absorb */ + next = SLIST_NEXT(cur, om_next); + + /* + * Is there trailing space in the mbuf? If so, copy data from + * following mbufs into the current mbuf + */ + rem_len = OS_MBUF_TRAILINGSPACE(cur); + while (rem_len && next) { + copylen = min(rem_len, next->om_len); + memcpy(dptr, next->om_data, copylen); + cur->om_len += copylen; + dptr += copylen; + rem_len -= copylen; + + /* + * We copied bytes from the next mbuf. Move the data pointer + * and subtract from its length + */ + next->om_data += copylen; + next->om_len -= copylen; + + /* + * Keep removing and freeing consecutive zero length mbufs, + * stopping when we find one with data in it or we have + * reached the end. This will prevent any zero length mbufs + * from remaining in the chain. + */ + while (next->om_len == 0) { + SLIST_NEXT(cur, om_next) = SLIST_NEXT(next, om_next); + os_mbuf_free(next); + next = SLIST_NEXT(cur, om_next); + if (next == NULL) { + break; + } + } + } + + /* If no mbufs are left, we are done */ + if (next == NULL) { + break; + } + + /* Move cur to next as we filled up current */ + cur = next; + } + + return m1; +} diff --git a/lib/libesp32_div/NimBLE-Arduino/src/src/ble_hs_hci_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/src/ble_hs_hci_priv.h index ff3604727..362f12cbd 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/src/ble_hs_hci_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/src/ble_hs_hci_priv.h @@ -48,7 +48,7 @@ struct os_mbuf; struct ble_hs_hci_ack { int bha_status; /* A BLE_HS_E<...> error; NOT a naked HCI code. */ - uint8_t *bha_params; + const uint8_t *bha_params; int bha_params_len; uint16_t bha_opcode; uint8_t bha_hci_handle; @@ -81,11 +81,8 @@ struct hci_periodic_adv_params extern uint16_t ble_hs_hci_avail_pkts; -int ble_hs_hci_cmd_tx(uint16_t opcode, void *cmd, uint8_t cmd_len, - void *evt_buf, uint8_t evt_buf_len, - uint8_t *out_evt_buf_len); -int ble_hs_hci_cmd_tx_empty_ack(uint16_t opcode, void *cmd, uint8_t cmd_len); -void ble_hs_hci_rx_ack(uint8_t *ack_ev); +int ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len, + void *rsp, uint8_t rsp_len); void ble_hs_hci_init(void); void ble_hs_hci_deinit(void); @@ -103,78 +100,11 @@ int ble_hs_hci_util_read_adv_tx_pwr(int8_t *out_pwr); int ble_hs_hci_util_rand(void *dst, int len); int ble_hs_hci_util_read_rssi(uint16_t conn_handle, int8_t *out_rssi); int ble_hs_hci_util_set_random_addr(const uint8_t *addr); -int ble_hs_hci_util_set_data_len(uint16_t conn_handle, uint16_t tx_octets, - uint16_t tx_time); int ble_hs_hci_util_data_hdr_strip(struct os_mbuf *om, struct hci_data_hdr *out_hdr); -int ble_hs_hci_evt_process(uint8_t *data); +int ble_hs_hci_evt_process(const struct ble_hci_ev *ev); -void ble_hs_hci_cmd_write_hdr(uint8_t ogf, uint16_t ocf, uint8_t len, - void *buf); -int ble_hs_hci_cmd_send_buf(uint16_t opcode, void *buf, uint8_t buf_len); -void ble_hs_hci_cmd_build_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_set_event_mask2(uint64_t event_mask, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_disconnect(uint16_t handle, uint8_t reason, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_read_rssi(uint16_t handle, uint8_t *dst, - int dst_len); -void ble_hs_hci_cmd_build_le_set_host_chan_class(const uint8_t *chan_map, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_read_chan_map(uint16_t conn_handle, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_scan_rsp_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_data(const uint8_t *data, uint8_t len, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_le_set_adv_params(const struct hci_adv_params *adv, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_event_mask(uint64_t event_mask, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_read_buffer_size(void); -void ble_hs_hci_cmd_build_le_set_adv_enable(uint8_t enable, uint8_t *dst, - int dst_len); -int ble_hs_hci_cmd_le_set_adv_enable(uint8_t enable); -int ble_hs_hci_cmd_build_le_set_scan_params(uint8_t scan_type, - uint16_t scan_itvl, - uint16_t scan_window, - uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_set_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint8_t *dst, uint8_t dst_len); -int ble_hs_hci_cmd_le_set_scan_enable(uint8_t enable, uint8_t filter_dups); -int ble_hs_hci_cmd_build_le_create_connection( - const struct hci_create_conn *hcc, uint8_t *cmd, int cmd_len); -int ble_hs_hci_cmd_build_le_add_to_whitelist(const uint8_t *addr, - uint8_t addr_type, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_reset(void); -int ble_hs_hci_cmd_tx_set_ctlr_to_host_fc(uint8_t fc_enable); -int ble_hs_hci_cmd_tx_host_buf_size(const struct hci_host_buf_size *cmd); -int ble_hs_hci_cmd_build_host_num_comp_pkts_entry( - const struct hci_host_num_comp_pkts_entry *entry, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_read_adv_pwr(void); -int ble_hs_hci_cmd_le_create_conn_cancel(void); -int ble_hs_hci_cmd_build_le_conn_update(const struct hci_conn_update *hcu, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_update(const struct hci_conn_update *hcu); -void ble_hs_hci_cmd_build_le_lt_key_req_reply( - const struct hci_lt_key_req_reply *hkr, uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_lt_key_req_neg_reply(uint16_t conn_handle, - uint8_t *dst, int dst_len); -void ble_hs_hci_cmd_build_le_conn_param_reply( - const struct hci_conn_param_reply *hcr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_reply(const struct hci_conn_param_reply *hcr); -void ble_hs_hci_cmd_build_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_le_conn_param_neg_reply( - const struct hci_conn_param_neg_reply *hcn); -void ble_hs_hci_cmd_build_le_start_encrypt(const struct hci_start_encrypt *cmd, - uint8_t *dst, int dst_len); +int ble_hs_hci_cmd_send_buf(uint16_t opcode, const void *buf, uint8_t buf_len); int ble_hs_hci_set_buf_sz(uint16_t pktlen, uint16_t max_pkts); void ble_hs_hci_add_avail_pkts(uint16_t delta); @@ -184,145 +114,9 @@ uint16_t ble_hs_hci_util_handle_pb_bc_join(uint16_t handle, uint8_t pb, int ble_hs_hci_acl_tx_now(struct ble_hs_conn *conn, struct os_mbuf **om); int ble_hs_hci_acl_tx(struct ble_hs_conn *conn, struct os_mbuf **om); -int ble_hs_hci_cmd_build_set_data_len(uint16_t connection_handle, - uint16_t tx_octets, uint16_t tx_time, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_add_to_resolv_list( - const struct hci_add_dev_to_resolving_list *padd, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_remove_from_resolv_list( - uint8_t addr_type, const uint8_t *addr, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_peer_resolv_addr( - uint8_t peer_identity_addr_type, const uint8_t *peer_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_read_lcl_resolv_addr( - uint8_t local_identity_addr_type, const uint8_t *local_identity_addr, - uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_addr_res_en( - uint8_t enable, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_resolv_priv_addr_timeout( - uint16_t timeout, uint8_t *dst, int dst_len); -int ble_hs_hci_cmd_build_set_random_addr(const uint8_t *addr, - uint8_t *dst, int dst_len); - -#if MYNEWT_VAL(BLE_EXT_ADV) -int ble_hs_hci_cmd_build_le_set_ext_scan_params(uint8_t own_addr_type, - uint8_t filter_policy, - uint8_t phy_mask, - uint8_t phy_count, - struct ble_hs_hci_ext_scan_param *params[], - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_ext_scan_enable(uint8_t enable, - uint8_t filter_dups, - uint16_t duration, - uint16_t period, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_ext_create_conn(const struct hci_ext_create_conn *hcc, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_set_random_addr(uint8_t handle, - const uint8_t *addr, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_data(uint8_t handle, uint8_t operation, - uint8_t frag_pref, struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_enable(uint8_t enable, uint8_t sets_num, - const struct hci_ext_adv_set *sets, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_params(uint8_t handle, - const struct hci_ext_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_ext_adv_remove(uint8_t handle, - uint8_t *cmd, int cmd_len); - -#if MYNEWT_VAL(BLE_PERIODIC_ADV) -int -ble_hs_hci_cmd_build_le_periodic_adv_params(uint8_t handle, - const struct hci_periodic_adv_params *params, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_enable(uint8_t enable, - uint8_t handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_data(uint8_t handle, uint8_t operation, - struct os_mbuf *data, - uint8_t data_len, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_periodic_adv_create_sync(uint8_t filter_policy, - uint8_t adv_sid, - uint8_t adv_add_type, - const uint8_t *adv_addr, - uint16_t skip, - uint16_t sync_timeout, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_periodic_adv_terminate_sync(uint16_t sync_handle, - uint8_t *cmd, int cmd_len); - -int -ble_hs_hci_cmd_build_le_add_dev_to_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -int -ble_hs_hci_cmd_build_le_rem_dev_from_periodic_adv_list(uint8_t adv_add_type, - const uint8_t *adv_addr, - uint8_t adv_sid, - uint8_t *cmd, int cmd_len); -#endif - -#endif - -int ble_hs_hci_cmd_build_le_enh_recv_test(uint8_t rx_chan, uint8_t phy, - uint8_t mod_idx, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_enh_trans_test(uint8_t tx_chan, - uint8_t test_data_len, - uint8_t packet_payload_idx, - uint8_t phy, - uint8_t *dst, uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_set_priv_mode(const uint8_t *addr, uint8_t addr_type, - uint8_t priv_mode, uint8_t *dst, - uint16_t dst_len); - -int ble_hs_hci_cmd_build_le_read_phy(uint16_t conn_handle, uint8_t *dst, - int dst_len); - -int ble_hs_hci_cmd_build_le_set_default_phy(uint8_t tx_phys_mask, - uint8_t rx_phys_mask, - uint8_t *dst, int dst_len); - -int ble_hs_hci_cmd_build_le_set_phy(uint16_t conn_handle, uint8_t tx_phys_mask, - uint8_t rx_phys_mask, uint16_t phy_opts, - uint8_t *dst, int dst_len); - int ble_hs_hci_frag_num_mbufs(void); int ble_hs_hci_frag_num_mbufs_free(void); -#if MYNEWT_VAL(BLE_EXT_ADV) -#endif - -int ble_hs_hci_cmd_build_le_read_remote_feat(uint16_t handle, uint8_t *dst, - int dst_len); #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/src/ble_sm_priv.h b/lib/libesp32_div/NimBLE-Arduino/src/src/ble_sm_priv.h index bbb4b03ae..def0a32f5 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/src/ble_sm_priv.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/src/ble_sm_priv.h @@ -269,6 +269,8 @@ struct ble_sm_proc { struct ble_sm_public_key pub_key_peer; uint8_t mackey[16]; uint8_t dhkey[32]; + const struct ble_sm_sc_oob_data *oob_data_local; + const struct ble_sm_sc_oob_data *oob_data_remote; #endif }; @@ -294,44 +296,33 @@ void ble_sm_dbg_set_sc_keys(uint8_t *pubkey, uint8_t *privkey); int ble_sm_num_procs(void); -void ble_sm_pair_cmd_log(struct ble_sm_pair_cmd *cmd); -void ble_sm_pair_confirm_log(struct ble_sm_pair_confirm *cmd); -void ble_sm_pair_random_log(struct ble_sm_pair_random *cmd); -void ble_sm_pair_fail_log(struct ble_sm_pair_fail *cmd); -void ble_sm_enc_info_log(struct ble_sm_enc_info *cmd); -void ble_sm_master_id_log(struct ble_sm_master_id *cmd); -void ble_sm_id_info_log(struct ble_sm_id_info *cmd); -void ble_sm_id_addr_info_log(struct ble_sm_id_addr_info *cmd); -void ble_sm_sign_info_log(struct ble_sm_sign_info *cmd); -void ble_sm_sec_req_log(struct ble_sm_sec_req *cmd); -void ble_sm_public_key_log(struct ble_sm_public_key *cmd); -void ble_sm_dhkey_check_log(struct ble_sm_dhkey_check *cmd); - -int ble_sm_alg_s1(uint8_t *k, uint8_t *r1, uint8_t *r2, uint8_t *out); -int ble_sm_alg_c1(uint8_t *k, uint8_t *r, - uint8_t *preq, uint8_t *pres, +int ble_sm_alg_s1(const uint8_t *k, const uint8_t *r1, const uint8_t *r2, + uint8_t *out); +int ble_sm_alg_c1(const uint8_t *k, const uint8_t *r, + const uint8_t *preq, const uint8_t *pres, uint8_t iat, uint8_t rat, - uint8_t *ia, uint8_t *ra, + const uint8_t *ia, const uint8_t *ra, uint8_t *out_enc_data); -int ble_sm_alg_f4(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t z, - uint8_t *out_enc_data); -int ble_sm_alg_g2(uint8_t *u, uint8_t *v, uint8_t *x, uint8_t *y, - uint32_t *passkey); -int ble_sm_alg_f5(uint8_t *w, uint8_t *n1, uint8_t *n2, uint8_t a1t, - uint8_t *a1, uint8_t a2t, uint8_t *a2, - uint8_t *mackey, uint8_t *ltk); +int ble_sm_alg_f4(const uint8_t *u, const uint8_t *v, const uint8_t *x, + uint8_t z, uint8_t *out_enc_data); +int ble_sm_alg_g2(const uint8_t *u, const uint8_t *v, const uint8_t *x, + const uint8_t *y, uint32_t *passkey); +int ble_sm_alg_f5(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, + uint8_t a1t, const uint8_t *a1, uint8_t a2t, + const uint8_t *a2, uint8_t *mackey, uint8_t *ltk); int ble_sm_alg_f6(const uint8_t *w, const uint8_t *n1, const uint8_t *n2, const uint8_t *r, const uint8_t *iocap, uint8_t a1t, const uint8_t *a1, uint8_t a2t, const uint8_t *a2, uint8_t *check); -int ble_sm_alg_gen_dhkey(uint8_t *peer_pub_key_x, uint8_t *peer_pub_key_y, - uint8_t *our_priv_key, uint8_t *out_dhkey); +int ble_sm_alg_gen_dhkey(const uint8_t *peer_pub_key_x, + const uint8_t *peer_pub_key_y, + const uint8_t *our_priv_key, uint8_t *out_dhkey); int ble_sm_alg_gen_key_pair(uint8_t *pub, uint8_t *priv); void ble_sm_alg_ecc_init(void); -void ble_sm_enc_change_rx(struct hci_encrypt_change *evt); -void ble_sm_enc_key_refresh_rx(struct hci_encrypt_key_refresh *evt); -int ble_sm_ltk_req_rx(struct hci_le_lt_key_req *evt); +void ble_sm_enc_change_rx(const struct ble_hci_ev_enrypt_chg *ev); +void ble_sm_enc_key_refresh_rx(const struct ble_hci_ev_enc_key_refresh *ev); +int ble_sm_ltk_req_rx(const struct ble_hci_ev_le_subev_lt_key_req *ev); #if MYNEWT_VAL(BLE_SM_LEGACY) int ble_sm_lgcy_io_action(struct ble_sm_proc *proc, uint8_t *action); @@ -364,6 +355,10 @@ void ble_sm_sc_dhkey_check_exec(struct ble_sm_proc *proc, struct ble_sm_result *res, void *arg); void ble_sm_sc_dhkey_check_rx(uint16_t conn_handle, struct os_mbuf **rxom, struct ble_sm_result *res); +bool ble_sm_sc_oob_data_check(struct ble_sm_proc *proc, + bool oob_data_local_present, + bool oob_data_remote_present); +void ble_sm_sc_oob_confirm(struct ble_sm_proc *proc, struct ble_sm_result *res); void ble_sm_sc_init(void); #else #define ble_sm_sc_io_action(proc, action) (BLE_HS_ENOTSUP) @@ -399,12 +394,9 @@ int ble_sm_slave_initiate(uint16_t conn_handle); int ble_sm_enc_initiate(uint16_t conn_handle, uint8_t key_size, const uint8_t *ltk, uint16_t ediv, uint64_t rand_val, int auth); -int ble_sm_alg_encrypt(uint8_t *key, uint8_t *plaintext, uint8_t *enc_data); +int ble_sm_alg_encrypt(const uint8_t *key, const uint8_t *plaintext, + uint8_t *enc_data); int ble_sm_init(void); - -#define BLE_SM_LOG_CMD(is_tx, cmd_name, conn_handle, log_cb, cmd) \ - BLE_HS_LOG_CMD((is_tx), "sm", (cmd_name), (conn_handle), (log_cb), (cmd)) - #else #define ble_sm_enc_change_rx(evt) ((void)(evt)) diff --git a/lib/libesp32_div/NimBLE-Arduino/src/store/config/ble_store_config.h b/lib/libesp32_div/NimBLE-Arduino/src/store/config/ble_store_config.h index 2cc411c30..1b3f8e6ce 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/store/config/ble_store_config.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/store/config/ble_store_config.h @@ -32,8 +32,6 @@ int ble_store_config_read(int obj_type, const union ble_store_key *key, int ble_store_config_write(int obj_type, const union ble_store_value *val); int ble_store_config_delete(int obj_type, const union ble_store_key *key); -void ble_store_config_init(void); - #ifdef __cplusplus } #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/syscfg/syscfg.h b/lib/libesp32_div/NimBLE-Arduino/src/syscfg/syscfg.h index ce2832876..8dccca5eb 100644 --- a/lib/libesp32_div/NimBLE-Arduino/src/syscfg/syscfg.h +++ b/lib/libesp32_div/NimBLE-Arduino/src/syscfg/syscfg.h @@ -1,5 +1,5 @@ /** - * This file was generated by Apache Newt version: 1.4.1 + * This file was generated by Apache newt version: 1.8.0-dev */ #ifndef H_MYNEWT_SYSCFG_ @@ -16,285 +16,46 @@ * attempt to use these macros without including this header will result in a * compiler error. */ -#define MYNEWT_VAL(x) MYNEWT_VAL_ ## x +#define MYNEWT_VAL(_name) MYNEWT_VAL_ ## _name +#define MYNEWT_VAL_CHOICE(_name, _val) MYNEWT_VAL_ ## _name ## __ ## _val -/*** compiler/arm-none-eabi-m4 */ -#ifndef MYNEWT_VAL_HARDFLOAT -#define MYNEWT_VAL_HARDFLOAT (0) +/*** @apache-mynewt-core/crypto/tinycrypt */ +#ifndef MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE +#define MYNEWT_VAL_TINYCRYPT_SYSINIT_STAGE (200) #endif -/*** hw/bsp/nrf52840pdk */ -#ifndef MYNEWT_VAL_BSP_NRF52840 -#define MYNEWT_VAL_BSP_NRF52840 (1) +#ifndef MYNEWT_VAL_TINYCRYPT_UECC_RNG_TRNG_DEV_NAME +#define MYNEWT_VAL_TINYCRYPT_UECC_RNG_TRNG_DEV_NAME ("trng") #endif -#ifndef MYNEWT_VAL_I2C_0_FREQ_KHZ -#define MYNEWT_VAL_I2C_0_FREQ_KHZ (100) +#ifndef MYNEWT_VAL_TINYCRYPT_UECC_RNG_USE_TRNG +#define MYNEWT_VAL_TINYCRYPT_UECC_RNG_USE_TRNG (0) #endif -#ifndef MYNEWT_VAL_I2C_0_PIN_SCL -#define MYNEWT_VAL_I2C_0_PIN_SCL (27) +/*** @apache-mynewt-core/hw/hal */ +#ifndef MYNEWT_VAL_HAL_ENABLE_SOFTWARE_BREAKPOINTS +#define MYNEWT_VAL_HAL_ENABLE_SOFTWARE_BREAKPOINTS (1) #endif -#ifndef MYNEWT_VAL_I2C_0_PIN_SDA -#define MYNEWT_VAL_I2C_0_PIN_SDA (26) +#ifndef MYNEWT_VAL_HAL_FLASH_VERIFY_BUF_SZ +#define MYNEWT_VAL_HAL_FLASH_VERIFY_BUF_SZ (16) #endif -#ifndef MYNEWT_VAL_PWM_3 -#define MYNEWT_VAL_PWM_3 (0) +#ifndef MYNEWT_VAL_HAL_FLASH_VERIFY_ERASES +#define MYNEWT_VAL_HAL_FLASH_VERIFY_ERASES (0) #endif -#ifndef MYNEWT_VAL_SPI_0_MASTER_PIN_MISO -#define MYNEWT_VAL_SPI_0_MASTER_PIN_MISO (47) +#ifndef MYNEWT_VAL_HAL_FLASH_VERIFY_WRITES +#define MYNEWT_VAL_HAL_FLASH_VERIFY_WRITES (0) #endif -#ifndef MYNEWT_VAL_SPI_0_MASTER_PIN_MOSI -#define MYNEWT_VAL_SPI_0_MASTER_PIN_MOSI (46) +#ifndef MYNEWT_VAL_HAL_SYSTEM_RESET_CB +#define MYNEWT_VAL_HAL_SYSTEM_RESET_CB (0) #endif -#ifndef MYNEWT_VAL_SPI_0_MASTER_PIN_SCK -#define MYNEWT_VAL_SPI_0_MASTER_PIN_SCK (45) -#endif - -#ifndef MYNEWT_VAL_SPI_0_SLAVE_PIN_MISO -#define MYNEWT_VAL_SPI_0_SLAVE_PIN_MISO (47) -#endif - -#ifndef MYNEWT_VAL_SPI_0_SLAVE_PIN_MOSI -#define MYNEWT_VAL_SPI_0_SLAVE_PIN_MOSI (46) -#endif - -#ifndef MYNEWT_VAL_SPI_0_SLAVE_PIN_SCK -#define MYNEWT_VAL_SPI_0_SLAVE_PIN_SCK (45) -#endif - -#ifndef MYNEWT_VAL_SPI_0_SLAVE_PIN_SS -#define MYNEWT_VAL_SPI_0_SLAVE_PIN_SS (44) -#endif - -#ifndef MYNEWT_VAL_TIMER_0 -#define MYNEWT_VAL_TIMER_0 (1) -#endif - -#ifndef MYNEWT_VAL_TIMER_1 -#define MYNEWT_VAL_TIMER_1 (0) -#endif - -#ifndef MYNEWT_VAL_TIMER_2 -#define MYNEWT_VAL_TIMER_2 (0) -#endif - -#ifndef MYNEWT_VAL_TIMER_3 -#define MYNEWT_VAL_TIMER_3 (0) -#endif - -#ifndef MYNEWT_VAL_TIMER_4 -#define MYNEWT_VAL_TIMER_4 (0) -#endif - -#ifndef MYNEWT_VAL_TIMER_5 -#define MYNEWT_VAL_TIMER_5 (0) -#endif - -#ifndef MYNEWT_VAL_UART_0 -#define MYNEWT_VAL_UART_0 (1) -#endif - -#ifndef MYNEWT_VAL_UART_0_PIN_CTS -#define MYNEWT_VAL_UART_0_PIN_CTS (7) -#endif - -#ifndef MYNEWT_VAL_UART_0_PIN_RTS -#define MYNEWT_VAL_UART_0_PIN_RTS (5) -#endif - -#ifndef MYNEWT_VAL_UART_0_PIN_RX -#define MYNEWT_VAL_UART_0_PIN_RX (8) -#endif - -#ifndef MYNEWT_VAL_UART_0_PIN_TX -#define MYNEWT_VAL_UART_0_PIN_TX (6) -#endif - -#ifndef MYNEWT_VAL_UART_1 -#define MYNEWT_VAL_UART_1 (0) -#endif - -#ifndef MYNEWT_VAL_UART_1_PIN_CTS -#define MYNEWT_VAL_UART_1_PIN_CTS (-1) -#endif - -#ifndef MYNEWT_VAL_UART_1_PIN_RTS -#define MYNEWT_VAL_UART_1_PIN_RTS (-1) -#endif - -#ifndef MYNEWT_VAL_UART_1_PIN_RX -#define MYNEWT_VAL_UART_1_PIN_RX (-1) -#endif - -#ifndef MYNEWT_VAL_UART_1_PIN_TX -#define MYNEWT_VAL_UART_1_PIN_TX (-1) -#endif - -/*** hw/mcu/nordic/nrf52xxx */ -#ifndef MYNEWT_VAL_ADC_0 -#define MYNEWT_VAL_ADC_0 (0) -#endif - -#ifndef MYNEWT_VAL_ADC_0_REFMV_0 -#define MYNEWT_VAL_ADC_0_REFMV_0 (0) -#endif - -#ifndef MYNEWT_VAL_I2C_0 -#define MYNEWT_VAL_I2C_0 (0) -#endif - -#ifndef MYNEWT_VAL_I2C_1 -#define MYNEWT_VAL_I2C_1 (0) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_MCU_DCDC_ENABLED -#define MYNEWT_VAL_MCU_DCDC_ENABLED (1) -#endif - -#ifndef MYNEWT_VAL_MCU_FLASH_MIN_WRITE_SIZE -#define MYNEWT_VAL_MCU_FLASH_MIN_WRITE_SIZE (1) -#endif - -#ifndef MYNEWT_VAL_PWM_0 -#define MYNEWT_VAL_PWM_0 (0) -#endif - -#ifndef MYNEWT_VAL_PWM_1 -#define MYNEWT_VAL_PWM_1 (0) -#endif - -#ifndef MYNEWT_VAL_PWM_2 -#define MYNEWT_VAL_PWM_2 (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_ADDRMODE -#define MYNEWT_VAL_QSPI_ADDRMODE (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_DPMCONFIG -#define MYNEWT_VAL_QSPI_DPMCONFIG (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_ENABLE -#define MYNEWT_VAL_QSPI_ENABLE (0) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_FLASH_PAGE_SIZE -#define MYNEWT_VAL_QSPI_FLASH_PAGE_SIZE (256) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_FLASH_SECTOR_COUNT -#define MYNEWT_VAL_QSPI_FLASH_SECTOR_COUNT (4096) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_FLASH_SECTOR_SIZE -#define MYNEWT_VAL_QSPI_FLASH_SECTOR_SIZE (4096) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_CS -#define MYNEWT_VAL_QSPI_PIN_CS (17) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_DIO0 -#define MYNEWT_VAL_QSPI_PIN_DIO0 (20) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_DIO1 -#define MYNEWT_VAL_QSPI_PIN_DIO1 (21) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_DIO2 -#define MYNEWT_VAL_QSPI_PIN_DIO2 (22) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_DIO3 -#define MYNEWT_VAL_QSPI_PIN_DIO3 (23) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_QSPI_PIN_SCK -#define MYNEWT_VAL_QSPI_PIN_SCK (19) -#endif - -#ifndef MYNEWT_VAL_QSPI_READOC -#define MYNEWT_VAL_QSPI_READOC (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_SCK_DELAY -#define MYNEWT_VAL_QSPI_SCK_DELAY (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_SCK_FREQ -#define MYNEWT_VAL_QSPI_SCK_FREQ (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_SPI_MODE -#define MYNEWT_VAL_QSPI_SPI_MODE (0) -#endif - -#ifndef MYNEWT_VAL_QSPI_WRITEOC -#define MYNEWT_VAL_QSPI_WRITEOC (0) -#endif - -#ifndef MYNEWT_VAL_SOFT_PWM -#define MYNEWT_VAL_SOFT_PWM (0) -#endif - -#ifndef MYNEWT_VAL_SPI_0_MASTER -#define MYNEWT_VAL_SPI_0_MASTER (0) -#endif - -#ifndef MYNEWT_VAL_SPI_0_SLAVE -#define MYNEWT_VAL_SPI_0_SLAVE (0) -#endif - -#ifndef MYNEWT_VAL_SPI_1_MASTER -#define MYNEWT_VAL_SPI_1_MASTER (0) -#endif - -#ifndef MYNEWT_VAL_SPI_1_SLAVE -#define MYNEWT_VAL_SPI_1_SLAVE (0) -#endif - -#ifndef MYNEWT_VAL_SPI_2_MASTER -#define MYNEWT_VAL_SPI_2_MASTER (0) -#endif - -#ifndef MYNEWT_VAL_SPI_2_SLAVE -#define MYNEWT_VAL_SPI_2_SLAVE (0) -#endif - -/* Overridden by hw/bsp/nrf52840pdk (defined by hw/mcu/nordic/nrf52xxx) */ -#ifndef MYNEWT_VAL_XTAL_32768 -#define MYNEWT_VAL_XTAL_32768 (1) -#endif - -#ifndef MYNEWT_VAL_XTAL_32768_SYNTH -#define MYNEWT_VAL_XTAL_32768_SYNTH (0) -#endif - -#ifndef MYNEWT_VAL_XTAL_RC -#define MYNEWT_VAL_XTAL_RC (0) -#endif - -/*** kernel/os */ +/*** @apache-mynewt-core/kernel/os */ #ifndef MYNEWT_VAL_FLOAT_USER #define MYNEWT_VAL_FLOAT_USER (0) #endif @@ -307,6 +68,10 @@ #define MYNEWT_VAL_MSYS_1_BLOCK_SIZE (292) #endif +#ifndef MYNEWT_VAL_MSYS_1_SANITY_MIN_COUNT +#define MYNEWT_VAL_MSYS_1_SANITY_MIN_COUNT (0) +#endif + #ifndef MYNEWT_VAL_MSYS_2_BLOCK_COUNT #define MYNEWT_VAL_MSYS_2_BLOCK_COUNT (0) #endif @@ -315,6 +80,18 @@ #define MYNEWT_VAL_MSYS_2_BLOCK_SIZE (0) #endif +#ifndef MYNEWT_VAL_MSYS_2_SANITY_MIN_COUNT +#define MYNEWT_VAL_MSYS_2_SANITY_MIN_COUNT (0) +#endif + +#ifndef MYNEWT_VAL_MSYS_SANITY_TIMEOUT +#define MYNEWT_VAL_MSYS_SANITY_TIMEOUT (60000) +#endif + +#ifndef MYNEWT_VAL_OS_ASSERT_CB +#define MYNEWT_VAL_OS_ASSERT_CB (0) +#endif + #ifndef MYNEWT_VAL_OS_CLI #define MYNEWT_VAL_OS_CLI (0) #endif @@ -331,6 +108,22 @@ #define MYNEWT_VAL_OS_CPUTIME_TIMER_NUM (0) #endif +#ifndef MYNEWT_VAL_OS_CRASH_FILE_LINE +#define MYNEWT_VAL_OS_CRASH_FILE_LINE (0) +#endif + +#ifndef MYNEWT_VAL_OS_CRASH_LOG +#define MYNEWT_VAL_OS_CRASH_LOG (0) +#endif + +#ifndef MYNEWT_VAL_OS_CRASH_RESTORE_REGS +#define MYNEWT_VAL_OS_CRASH_RESTORE_REGS (0) +#endif + +#ifndef MYNEWT_VAL_OS_CRASH_STACKTRACE +#define MYNEWT_VAL_OS_CRASH_STACKTRACE (0) +#endif + #ifndef MYNEWT_VAL_OS_CTX_SW_STACK_CHECK #define MYNEWT_VAL_OS_CTX_SW_STACK_CHECK (0) #endif @@ -339,6 +132,26 @@ #define MYNEWT_VAL_OS_CTX_SW_STACK_GUARD (4) #endif +#ifndef MYNEWT_VAL_OS_DEBUG_MODE +#define MYNEWT_VAL_OS_DEBUG_MODE (0) +#endif + +#ifndef MYNEWT_VAL_OS_EVENTQ_DEBUG +#define MYNEWT_VAL_OS_EVENTQ_DEBUG (0) +#endif + +#ifndef MYNEWT_VAL_OS_EVENTQ_MONITOR +#define MYNEWT_VAL_OS_EVENTQ_MONITOR (0) +#endif + +#ifndef MYNEWT_VAL_OS_IDLE_TICKLESS_MS_MAX +#define MYNEWT_VAL_OS_IDLE_TICKLESS_MS_MAX (600000) +#endif + +#ifndef MYNEWT_VAL_OS_IDLE_TICKLESS_MS_MIN +#define MYNEWT_VAL_OS_IDLE_TICKLESS_MS_MIN (100) +#endif + #ifndef MYNEWT_VAL_OS_MAIN_STACK_SIZE #define MYNEWT_VAL_OS_MAIN_STACK_SIZE (1024) #endif @@ -347,10 +160,18 @@ #define MYNEWT_VAL_OS_MAIN_TASK_PRIO (127) #endif +#ifndef MYNEWT_VAL_OS_MAIN_TASK_SANITY_ITVL_MS +#define MYNEWT_VAL_OS_MAIN_TASK_SANITY_ITVL_MS (0) +#endif + #ifndef MYNEWT_VAL_OS_MEMPOOL_CHECK #define MYNEWT_VAL_OS_MEMPOOL_CHECK (0) #endif +#ifndef MYNEWT_VAL_OS_MEMPOOL_GUARD +#define MYNEWT_VAL_OS_MEMPOOL_GUARD (0) +#endif + #ifndef MYNEWT_VAL_OS_MEMPOOL_POISON #define MYNEWT_VAL_OS_MEMPOOL_POISON (0) #endif @@ -359,10 +180,50 @@ #define MYNEWT_VAL_OS_SCHEDULING (1) #endif +#ifndef MYNEWT_VAL_OS_SYSINIT_STAGE +#define MYNEWT_VAL_OS_SYSINIT_STAGE (0) +#endif + #ifndef MYNEWT_VAL_OS_SYSVIEW #define MYNEWT_VAL_OS_SYSVIEW (0) #endif +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_CALLOUT +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_CALLOUT (1) +#endif + +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_EVENTQ +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_EVENTQ (1) +#endif + +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_MBUF +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_MBUF (0) +#endif + +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_MEMPOOL +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_MEMPOOL (0) +#endif + +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_MUTEX +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_MUTEX (1) +#endif + +#ifndef MYNEWT_VAL_OS_SYSVIEW_TRACE_SEM +#define MYNEWT_VAL_OS_SYSVIEW_TRACE_SEM (1) +#endif + +#ifndef MYNEWT_VAL_OS_TASK_RUN_TIME_CPUTIME +#define MYNEWT_VAL_OS_TASK_RUN_TIME_CPUTIME (0) +#endif + +#ifndef MYNEWT_VAL_OS_TIME_DEBUG +#define MYNEWT_VAL_OS_TIME_DEBUG (0) +#endif + +#ifndef MYNEWT_VAL_OS_WATCHDOG_MONITOR +#define MYNEWT_VAL_OS_WATCHDOG_MONITOR (0) +#endif + #ifndef MYNEWT_VAL_SANITY_INTERVAL #define MYNEWT_VAL_SANITY_INTERVAL (15000) #endif @@ -371,16 +232,137 @@ #define MYNEWT_VAL_WATCHDOG_INTERVAL (30000) #endif -/*** libc/baselibc */ -#ifndef MYNEWT_VAL_BASELIBC_ASSERT_FILE_LINE -#define MYNEWT_VAL_BASELIBC_ASSERT_FILE_LINE (0) +/*** @apache-mynewt-core/sys/console/stub */ +#ifndef MYNEWT_VAL_CONSOLE_UART_BAUD +#define MYNEWT_VAL_CONSOLE_UART_BAUD (115200) #endif -#ifndef MYNEWT_VAL_BASELIBC_PRESENT -#define MYNEWT_VAL_BASELIBC_PRESENT (1) +#ifndef MYNEWT_VAL_CONSOLE_UART_DEV +#define MYNEWT_VAL_CONSOLE_UART_DEV ("uart0") #endif -/*** nimble */ +#ifndef MYNEWT_VAL_CONSOLE_UART_FLOW_CONTROL +#define MYNEWT_VAL_CONSOLE_UART_FLOW_CONTROL (UART_FLOW_CTL_NONE) +#endif + +/*** @apache-mynewt-core/sys/flash_map */ +#ifndef MYNEWT_VAL_FLASH_MAP_MAX_AREAS +#define MYNEWT_VAL_FLASH_MAP_MAX_AREAS (10) +#endif + +#ifndef MYNEWT_VAL_FLASH_MAP_SYSINIT_STAGE +#define MYNEWT_VAL_FLASH_MAP_SYSINIT_STAGE (2) +#endif + +/*** @apache-mynewt-core/sys/log/common */ +#ifndef MYNEWT_VAL_DFLT_LOG_LVL +#define MYNEWT_VAL_DFLT_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_DFLT_LOG_MOD +#define MYNEWT_VAL_DFLT_LOG_MOD (0) +#endif + +#ifndef MYNEWT_VAL_LOG_GLOBAL_IDX +#define MYNEWT_VAL_LOG_GLOBAL_IDX (1) +#endif + +/*** @apache-mynewt-core/sys/log/modlog */ +#ifndef MYNEWT_VAL_MODLOG_CONSOLE_DFLT +#define MYNEWT_VAL_MODLOG_CONSOLE_DFLT (1) +#endif + +#ifndef MYNEWT_VAL_MODLOG_LOG_MACROS +#define MYNEWT_VAL_MODLOG_LOG_MACROS (0) +#endif + +#ifndef MYNEWT_VAL_MODLOG_MAX_MAPPINGS +#define MYNEWT_VAL_MODLOG_MAX_MAPPINGS (16) +#endif + +#ifndef MYNEWT_VAL_MODLOG_MAX_PRINTF_LEN +#define MYNEWT_VAL_MODLOG_MAX_PRINTF_LEN (128) +#endif + +#ifndef MYNEWT_VAL_MODLOG_SYSINIT_STAGE +#define MYNEWT_VAL_MODLOG_SYSINIT_STAGE (100) +#endif + +/*** @apache-mynewt-core/sys/log/stub */ +#ifndef MYNEWT_VAL_LOG_CONSOLE +#define MYNEWT_VAL_LOG_CONSOLE (1) +#endif + +#ifndef MYNEWT_VAL_LOG_FCB +#define MYNEWT_VAL_LOG_FCB (0) +#endif + +#ifndef MYNEWT_VAL_LOG_FCB_SLOT1 +#define MYNEWT_VAL_LOG_FCB_SLOT1 (0) +#endif + +#ifndef MYNEWT_VAL_LOG_LEVEL +#define MYNEWT_VAL_LOG_LEVEL (255) +#endif + +/*** @apache-mynewt-core/sys/mfg */ +#ifndef MYNEWT_VAL_MFG_LOG_LVL +#define MYNEWT_VAL_MFG_LOG_LVL (15) +#endif + +#ifndef MYNEWT_VAL_MFG_LOG_MODULE +#define MYNEWT_VAL_MFG_LOG_MODULE (128) +#endif + +#ifndef MYNEWT_VAL_MFG_MAX_MMRS +#define MYNEWT_VAL_MFG_MAX_MMRS (2) +#endif + +#ifndef MYNEWT_VAL_MFG_SYSINIT_STAGE +#define MYNEWT_VAL_MFG_SYSINIT_STAGE (100) +#endif + +/*** @apache-mynewt-core/sys/sys */ +#ifndef MYNEWT_VAL_DEBUG_PANIC_ENABLED +#define MYNEWT_VAL_DEBUG_PANIC_ENABLED (1) +#endif + +/*** @apache-mynewt-core/sys/sysdown */ +#ifndef MYNEWT_VAL_SYSDOWN_CONSTRAIN_DOWN +#define MYNEWT_VAL_SYSDOWN_CONSTRAIN_DOWN (1) +#endif + +#ifndef MYNEWT_VAL_SYSDOWN_PANIC_FILE_LINE +#define MYNEWT_VAL_SYSDOWN_PANIC_FILE_LINE (0) +#endif + +#ifndef MYNEWT_VAL_SYSDOWN_PANIC_MESSAGE +#define MYNEWT_VAL_SYSDOWN_PANIC_MESSAGE (0) +#endif + +#ifndef MYNEWT_VAL_SYSDOWN_TIMEOUT_MS +#define MYNEWT_VAL_SYSDOWN_TIMEOUT_MS (10000) +#endif + +/*** @apache-mynewt-core/sys/sysinit */ +#ifndef MYNEWT_VAL_SYSINIT_CONSTRAIN_INIT +#define MYNEWT_VAL_SYSINIT_CONSTRAIN_INIT (1) +#endif + +#ifndef MYNEWT_VAL_SYSINIT_PANIC_FILE_LINE +#define MYNEWT_VAL_SYSINIT_PANIC_FILE_LINE (0) +#endif + +#ifndef MYNEWT_VAL_SYSINIT_PANIC_MESSAGE +#define MYNEWT_VAL_SYSINIT_PANIC_MESSAGE (0) +#endif + +/*** @apache-mynewt-core/util/rwlock */ +#ifndef MYNEWT_VAL_RWLOCK_DEBUG +#define MYNEWT_VAL_RWLOCK_DEBUG (0) +#endif + +/*** @apache-mynewt-nimble/nimble */ #ifndef MYNEWT_VAL_BLE_EXT_ADV #define MYNEWT_VAL_BLE_EXT_ADV (0) #endif @@ -394,13 +376,21 @@ #endif #ifndef MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS -#define MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS (0) +#define MYNEWT_VAL_BLE_MAX_PERIODIC_SYNCS (1) #endif #ifndef MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES #define MYNEWT_VAL_BLE_MULTI_ADV_INSTANCES (0) #endif +#ifndef MYNEWT_VAL_BLE_PERIODIC_ADV +#define MYNEWT_VAL_BLE_PERIODIC_ADV (0) +#endif + +#ifndef MYNEWT_VAL_BLE_PERIODIC_ADV_SYNC_TRANSFER +#define MYNEWT_VAL_BLE_PERIODIC_ADV_SYNC_TRANSFER (0) +#endif + #ifndef MYNEWT_VAL_BLE_ROLE_BROADCASTER #define MYNEWT_VAL_BLE_ROLE_BROADCASTER (1) #endif @@ -417,6 +407,10 @@ #define MYNEWT_VAL_BLE_ROLE_PERIPHERAL (1) #endif +#ifndef MYNEWT_VAL_BLE_VERSION +#define MYNEWT_VAL_BLE_VERSION (50) +#endif + #ifndef MYNEWT_VAL_BLE_WHITELIST #define MYNEWT_VAL_BLE_WHITELIST (1) #endif @@ -590,11 +584,6 @@ #define MYNEWT_VAL_BLE_ATT_PREFERRED_MTU (256) #endif - -#ifndef MYNEWT_VAL_BLE_PERIODIC_ADV -#define MYNEWT_VAL_BLE_PERIODIC_ADV (0) -#endif - #ifndef MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO #define MYNEWT_VAL_BLE_ATT_SVR_FIND_INFO (1) #endif @@ -771,6 +760,14 @@ #define MYNEWT_VAL_BLE_HS_FLOW_CTRL_TX_ON_DISCONNECT (0) #endif +#ifndef MYNEWT_VAL_BLE_HS_LOG_LVL +#define MYNEWT_VAL_BLE_HS_LOG_LVL (1) +#endif + +#ifndef MYNEWT_VAL_BLE_HS_LOG_MOD +#define MYNEWT_VAL_BLE_HS_LOG_MOD (4) +#endif + #ifndef MYNEWT_VAL_BLE_HS_PHONY_HCI_ACKS #define MYNEWT_VAL_BLE_HS_PHONY_HCI_ACKS (0) #endif @@ -779,10 +776,30 @@ #define MYNEWT_VAL_BLE_HS_REQUIRE_OS (1) #endif +#ifndef MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN +#define MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN (1) +#endif + +#ifndef MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN_TIMEOUT +#define MYNEWT_VAL_BLE_HS_STOP_ON_SHUTDOWN_TIMEOUT (2000) +#endif + +#ifndef MYNEWT_VAL_BLE_HS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_HS_SYSINIT_STAGE (200) +#endif + #ifndef MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM #define MYNEWT_VAL_BLE_L2CAP_COC_MAX_NUM (0) #endif +#ifndef MYNEWT_VAL_BLE_L2CAP_COC_MPS +#define MYNEWT_VAL_BLE_L2CAP_COC_MPS (MYNEWT_VAL_MSYS_1_BLOCK_SIZE-8) +#endif + +#ifndef MYNEWT_VAL_BLE_L2CAP_ENHANCED_COC +#define MYNEWT_VAL_BLE_L2CAP_ENHANCED_COC (0) +#endif + #ifndef MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS #define MYNEWT_VAL_BLE_L2CAP_JOIN_RX_FRAGS (1) #endif @@ -816,7 +833,7 @@ #endif #ifndef MYNEWT_VAL_BLE_MONITOR_RTT_BUFFER_NAME -#define MYNEWT_VAL_BLE_MONITOR_RTT_BUFFER_NAME ("monitor") +#define MYNEWT_VAL_BLE_MONITOR_RTT_BUFFER_NAME ("btmonitor") #endif #ifndef MYNEWT_VAL_BLE_MONITOR_RTT_BUFFER_SIZE @@ -879,6 +896,10 @@ #define MYNEWT_VAL_BLE_SM_SC (1) #endif +#ifndef MYNEWT_VAL_BLE_SM_SC_DEBUG_KEYS +#define MYNEWT_VAL_BLE_SM_SC_DEBUG_KEYS (0) +#endif + #ifndef MYNEWT_VAL_BLE_SM_THEIR_KEY_DIST #define MYNEWT_VAL_BLE_SM_THEIR_KEY_DIST (0) #endif @@ -891,17 +912,20 @@ #define MYNEWT_VAL_BLE_STORE_MAX_CCCDS (8) #endif -/*** nimble/host/services/ans */ +/*** @apache-mynewt-nimble/nimble/host/services/ans */ #ifndef MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT #define MYNEWT_VAL_BLE_SVC_ANS_NEW_ALERT_CAT (0) #endif +#ifndef MYNEWT_VAL_BLE_SVC_ANS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_ANS_SYSINIT_STAGE (303) +#endif #ifndef MYNEWT_VAL_BLE_SVC_ANS_UNR_ALERT_CAT #define MYNEWT_VAL_BLE_SVC_ANS_UNR_ALERT_CAT (0) #endif -/*** nimble/host/services/bas */ +/*** @apache-mynewt-nimble/nimble/host/services/bas */ #ifndef MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE #define MYNEWT_VAL_BLE_SVC_BAS_BATTERY_LEVEL_NOTIFY_ENABLE (1) #endif @@ -1222,6 +1246,81 @@ #define MYNEWT_VAL_BLE_MESH_TX_SEG_MSG_COUNT (4) #endif +#ifndef MYNEWT_VAL_BLE_SVC_BAS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_BAS_SYSINIT_STAGE (303) +#endif + +/*** @apache-mynewt-nimble/nimble/host/services/dis */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_DEFAULT_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_FIRMWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_HARDWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_MANUFACTURER_NAME_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_DEFAULT ("Apache Mynewt NimBLE") +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_MODEL_NUMBER_READ_PERM (0) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SERIAL_NUMBER_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SOFTWARE_REVISION_READ_PERM (-1) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_DIS_SYSINIT_STAGE (303) +#endif + +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_DEFAULT +#define MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_DEFAULT (NULL) +#endif + +/* Value copied from BLE_SVC_DIS_DEFAULT_READ_PERM */ +#ifndef MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_READ_PERM +#define MYNEWT_VAL_BLE_SVC_DIS_SYSTEM_ID_READ_PERM (-1) +#endif + /*** @apache-mynewt-nimble/nimble/host/services/gap */ #ifndef MYNEWT_VAL_BLE_SVC_GAP_APPEARANCE #define MYNEWT_VAL_BLE_SVC_GAP_APPEARANCE (0) @@ -1263,32 +1362,38 @@ #define MYNEWT_VAL_BLE_SVC_GAP_PPCP_SUPERVISION_TMO (0) #endif -/*** nimble/transport */ -#ifndef MYNEWT_VAL_BLE_HCI_TRANSPORT_EMSPI -#define MYNEWT_VAL_BLE_HCI_TRANSPORT_EMSPI (0) +#ifndef MYNEWT_VAL_BLE_SVC_GAP_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_GAP_SYSINIT_STAGE (301) #endif -/* Overridden by targets/porting-nimble (defined by nimble/transport) */ -#ifndef MYNEWT_VAL_BLE_HCI_TRANSPORT_NIMBLE_BUILTIN -#define MYNEWT_VAL_BLE_HCI_TRANSPORT_NIMBLE_BUILTIN (0) +/*** @apache-mynewt-nimble/nimble/host/services/gatt */ +#ifndef MYNEWT_VAL_BLE_SVC_GATT_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_GATT_SYSINIT_STAGE (302) #endif -#ifndef MYNEWT_VAL_BLE_HCI_TRANSPORT_RAM -#define MYNEWT_VAL_BLE_HCI_TRANSPORT_RAM (0) +/*** @apache-mynewt-nimble/nimble/host/services/ias */ +#ifndef MYNEWT_VAL_BLE_SVC_IAS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_IAS_SYSINIT_STAGE (303) #endif -#ifndef MYNEWT_VAL_BLE_HCI_TRANSPORT_SOCKET -#define MYNEWT_VAL_BLE_HCI_TRANSPORT_SOCKET (0) +/*** @apache-mynewt-nimble/nimble/host/services/ipss */ +#ifndef MYNEWT_VAL_BLE_SVC_IPSS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_IPSS_SYSINIT_STAGE (303) #endif -/* Overridden by targets/porting-nimble (defined by nimble/transport) */ -#ifndef MYNEWT_VAL_BLE_HCI_TRANSPORT_UART -#define MYNEWT_VAL_BLE_HCI_TRANSPORT_UART (1) +/*** @apache-mynewt-nimble/nimble/host/services/lls */ +#ifndef MYNEWT_VAL_BLE_SVC_LLS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_LLS_SYSINIT_STAGE (303) #endif -/*** nimble/transport/uart */ +/*** @apache-mynewt-nimble/nimble/host/services/tps */ +#ifndef MYNEWT_VAL_BLE_SVC_TPS_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SVC_TPS_SYSINIT_STAGE (303) +#endif + +/*** @apache-mynewt-nimble/nimble/transport/socket */ #ifndef MYNEWT_VAL_BLE_ACL_BUF_COUNT -#define MYNEWT_VAL_BLE_ACL_BUF_COUNT (12) +#define MYNEWT_VAL_BLE_ACL_BUF_COUNT (24) #endif #ifndef MYNEWT_VAL_BLE_ACL_BUF_SIZE @@ -1311,74 +1416,73 @@ #define MYNEWT_VAL_BLE_HCI_EVT_LO_BUF_COUNT (8) #endif -/* Overridden by targets/porting-nimble (defined by nimble/transport/uart) */ -#ifndef MYNEWT_VAL_BLE_HCI_UART_BAUD -#define MYNEWT_VAL_BLE_HCI_UART_BAUD (115200) +#ifndef MYNEWT_VAL_BLE_SOCK_CLI_SYSINIT_STAGE +#define MYNEWT_VAL_BLE_SOCK_CLI_SYSINIT_STAGE (500) #endif -#ifndef MYNEWT_VAL_BLE_HCI_UART_DATA_BITS -#define MYNEWT_VAL_BLE_HCI_UART_DATA_BITS (8) +#ifndef MYNEWT_VAL_BLE_SOCK_LINUX_DEV +#define MYNEWT_VAL_BLE_SOCK_LINUX_DEV (0) #endif -/* Overridden by targets/porting-nimble (defined by nimble/transport/uart) */ -#ifndef MYNEWT_VAL_BLE_HCI_UART_FLOW_CTRL -#define MYNEWT_VAL_BLE_HCI_UART_FLOW_CTRL (0) +#ifndef MYNEWT_VAL_BLE_SOCK_STACK_SIZE +#define MYNEWT_VAL_BLE_SOCK_STACK_SIZE (80) #endif -#ifndef MYNEWT_VAL_BLE_HCI_UART_PARITY -#define MYNEWT_VAL_BLE_HCI_UART_PARITY (HAL_UART_PARITY_NONE) +#ifndef MYNEWT_VAL_BLE_SOCK_TASK_PRIO +#define MYNEWT_VAL_BLE_SOCK_TASK_PRIO (9) #endif -#ifndef MYNEWT_VAL_BLE_HCI_UART_PORT -#define MYNEWT_VAL_BLE_HCI_UART_PORT (0) +#ifndef MYNEWT_VAL_BLE_SOCK_TCP_PORT +#define MYNEWT_VAL_BLE_SOCK_TCP_PORT (14433) #endif -#ifndef MYNEWT_VAL_BLE_HCI_UART_STOP_BITS -#define MYNEWT_VAL_BLE_HCI_UART_STOP_BITS (1) +#ifndef MYNEWT_VAL_BLE_SOCK_USE_LINUX_BLUE +#define MYNEWT_VAL_BLE_SOCK_USE_LINUX_BLUE (0) #endif -/*** sys/console/stub */ -#ifndef MYNEWT_VAL_CONSOLE_UART_BAUD -#define MYNEWT_VAL_CONSOLE_UART_BAUD (115200) +#ifndef MYNEWT_VAL_BLE_SOCK_USE_TCP +#define MYNEWT_VAL_BLE_SOCK_USE_TCP (1) #endif -#ifndef MYNEWT_VAL_CONSOLE_UART_DEV -#define MYNEWT_VAL_CONSOLE_UART_DEV ("uart0") +/*** newt */ +#ifndef MYNEWT_VAL_APP_NAME +#define MYNEWT_VAL_APP_NAME ("dummy_app") #endif -#ifndef MYNEWT_VAL_CONSOLE_UART_FLOW_CONTROL -#define MYNEWT_VAL_CONSOLE_UART_FLOW_CONTROL (UART_FLOW_CTL_NONE) +#ifndef MYNEWT_VAL_APP_dummy_app +#define MYNEWT_VAL_APP_dummy_app (1) #endif -/*** sys/flash_map */ -#ifndef MYNEWT_VAL_FLASH_MAP_MAX_AREAS -#define MYNEWT_VAL_FLASH_MAP_MAX_AREAS (10) +#ifndef MYNEWT_VAL_ARCH_NAME +#define MYNEWT_VAL_ARCH_NAME ("dummy") #endif -/*** sys/log/stub */ -#ifndef MYNEWT_VAL_LOG_CONSOLE -#define MYNEWT_VAL_LOG_CONSOLE (1) +#ifndef MYNEWT_VAL_ARCH_dummy +#define MYNEWT_VAL_ARCH_dummy (1) #endif -#ifndef MYNEWT_VAL_LOG_FCB -#define MYNEWT_VAL_LOG_FCB (0) +#ifndef MYNEWT_VAL_BSP_NAME +#define MYNEWT_VAL_BSP_NAME ("dummy_bsp") #endif -#ifndef MYNEWT_VAL_LOG_LEVEL -#define MYNEWT_VAL_LOG_LEVEL (255) +#ifndef MYNEWT_VAL_BSP_dummy_bsp +#define MYNEWT_VAL_BSP_dummy_bsp (1) #endif -/*** sys/sysinit */ -#ifndef MYNEWT_VAL_SYSINIT_CONSTRAIN_INIT -#define MYNEWT_VAL_SYSINIT_CONSTRAIN_INIT (1) +#ifndef MYNEWT_VAL_NEWT_FEATURE_LOGCFG +#define MYNEWT_VAL_NEWT_FEATURE_LOGCFG (1) #endif -#ifndef MYNEWT_VAL_SYSINIT_PANIC_FILE_LINE -#define MYNEWT_VAL_SYSINIT_PANIC_FILE_LINE (0) +#ifndef MYNEWT_VAL_NEWT_FEATURE_SYSDOWN +#define MYNEWT_VAL_NEWT_FEATURE_SYSDOWN (1) #endif -#ifndef MYNEWT_VAL_SYSINIT_PANIC_MESSAGE -#define MYNEWT_VAL_SYSINIT_PANIC_MESSAGE (0) +#ifndef MYNEWT_VAL_TARGET_NAME +#define MYNEWT_VAL_TARGET_NAME ("porting_default") +#endif + +#ifndef MYNEWT_VAL_TARGET_porting_default +#define MYNEWT_VAL_TARGET_porting_default (1) #endif #endif #endif diff --git a/lib/libesp32_div/NimBLE-Arduino/src/sysflash/sysflash.h b/lib/libesp32_div/NimBLE-Arduino/src/sysflash/sysflash.h new file mode 100644 index 000000000..413cb2679 --- /dev/null +++ b/lib/libesp32_div/NimBLE-Arduino/src/sysflash/sysflash.h @@ -0,0 +1,24 @@ +/** + * This file was generated by Apache newt version: 1.8.0-dev + */ + +#ifndef H_MYNEWT_SYSFLASH_ +#define H_MYNEWT_SYSFLASH_ + +#include "flash_map/flash_map.h" + +/** + * This flash map definition is used for two purposes: + * 1. To locate the meta area, which contains the true flash map definition. + * 2. As a fallback in case the meta area cannot be read from flash. + */ +extern const struct flash_area sysflash_map_dflt[6]; + +#define FLASH_AREA_BOOTLOADER 0 +#define FLASH_AREA_IMAGE_0 1 +#define FLASH_AREA_IMAGE_1 2 +#define FLASH_AREA_IMAGE_SCRATCH 3 +#define FLASH_AREA_REBOOT_LOG 16 +#define FLASH_AREA_NFFS 17 + +#endif diff --git a/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.cpp b/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.cpp index 9d7414f6e..cc64444a0 100755 --- a/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.cpp +++ b/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.cpp @@ -28,13 +28,13 @@ static void lv_tick_handler(void) { lv_tick_inc(lv_tick_interval_ms); } uint32_t Touch_Status(uint32_t sel); -static bool touchscreen_read(struct _lv_indev_drv_t *indev_drv, lv_indev_data_t *data) { +static void touchscreen_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) { //lv_coord_t last_x = 0, last_y = 0; //static uint8_t release_count = 0; data->point.x = Touch_Status(1); // Last-pressed coordinates data->point.y = Touch_Status(2); - data->state = Touch_Status(0); - return false; /*No buffering now so no more data read*/ + data->state = Touch_Status(0) ? LV_INDEV_STATE_PRESSED : LV_INDEV_STATE_RELEASED; + data->continue_reading = false; /*No buffering now so no more data read*/ } // OTHER LITTLEVGL VITALS -------------------------------------------------- @@ -231,7 +231,7 @@ LvGLStatus Adafruit_LvGL_Glue::begin(Renderer *tft, void *touch, bool debug) { // LV_HOR_RES_MAX * LV_BUFFER_ROWS); // Initialize LvGL display buffers - lv_disp_buf_init( + lv_disp_draw_buf_init( &lv_disp_buf, lv_pixel_buf, // 1st half buf lv_pixel_buf2, // 2nd half buf lvgl_buffer_size); @@ -241,16 +241,16 @@ LvGLStatus Adafruit_LvGL_Glue::begin(Renderer *tft, void *touch, bool debug) { lv_disp_drv.hor_res = tft->width(); lv_disp_drv.ver_res = tft->height(); lv_disp_drv.flush_cb = lv_flush_callback; - lv_disp_drv.buffer = &lv_disp_buf; - lv_disp_drv.user_data = (lv_disp_drv_user_data_t)this; + lv_disp_drv.draw_buf = &lv_disp_buf; + lv_disp_drv.user_data = (void*)this; lv_disp_drv_register(&lv_disp_drv); // Initialize LvGL input device (touchscreen already started) - if ((touch)) { // Can also pass NULL if passive widget display + if (touch) { // Can also pass NULL if passive widget display lv_indev_drv_init(&lv_indev_drv); // Basic init lv_indev_drv.type = LV_INDEV_TYPE_POINTER; // Is pointer dev lv_indev_drv.read_cb = touchscreen_read; // Read callback - lv_indev_drv.user_data = (lv_indev_drv_user_data_t)this; + lv_indev_drv.user_data = (void*)this; lv_input_dev_ptr = lv_indev_drv_register(&lv_indev_drv); } diff --git a/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.h b/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.h index 7969bb890..2074e0c7a 100755 --- a/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.h +++ b/lib/libesp32_lvgl/Adafruit_LvGL_Glue-shadinger/Adafruit_LvGL_Glue.h @@ -42,7 +42,7 @@ public: private: lv_disp_drv_t lv_disp_drv; - lv_disp_buf_t lv_disp_buf; + lv_disp_draw_buf_t lv_disp_buf; lv_color_t *lv_pixel_buf; lv_color_t *lv_pixel_buf2; lv_indev_drv_t lv_indev_drv; diff --git a/lib/libesp32_lvgl/LVGL/CHANGELOG.md b/lib/libesp32_lvgl/LVGL/CHANGELOG.md deleted file mode 100644 index 04a973b94..000000000 --- a/lib/libesp32_lvgl/LVGL/CHANGELOG.md +++ /dev/null @@ -1,417 +0,0 @@ -# Changelog - -## v7.11.0 (Planned for 19.02.2021) - -### New features -- Add better screen orientation management with software rotation support -- Decide text animation's direction based on base_dir (when using LV_USE_BIDI) - -### Bugfixes -- fix(gauge) fix needle invalidation -- fix(bar) correct symmetric handling for vertical sliders - -## v7.10.1 (Planned for 16.02.2021) - -### Bugfixes -- fix(draw) overlap outline with background to prevent aliasing artifacts -- fix(indev) clear the indev's `act_obj` in `lv_indev_reset` -- fix(text) fix out of bounds read in `_lv_txt_get_width` -- fix(list) scroll list when button is focused using LV_KEY_NEXT/PREV -- fix(text) improve Arabic contextual analysis by adding hyphen processing and proper handling of lam-alef sequence -- fix(delete) delete animation after the children are deleted -- fix(gauge) consider paddigns for needle images - -## v7.10.0 - -### New features -- feat(indev) allow input events to be passed to disabled objects -- feat(spinbox) add inline get_step function for MicroPython support - -### Bugfixes -- fix(btnmatrix) fix lv_btnmatrix_get_active_btn_text() when used in a group - -## v7.9.1 - -### Bugfixes -- fix(cpicker) fix division by zero -- fix(dropdown) fix selecting options after the last one -- fix(msgbox) use the animation time provided -- fix(gpu_nxp_pxp) fix incorrect define name -- fix(indev) don't leave edit mode if there is only one object in the group -- fix(draw_rect) fix draw pattern stack-use-after-scope error - - -## v7.9.0 - -### New features -- feat(chart) add lv_chart_remove_series and lv_chart_hide_series -- feat(img_cahce) allow disabling image caching -- calendar: make get_day_of_week() public -- Added support for Zephyr integration - -### Bugfixes -- fix(draw_rect) free buffer used for arabic processing -- fix(win) arabic process the title of the window -- fix(dropdown) arabic process the option in lv_dropdown_add_option -- fix(textarea) buffer overflow in password mode with UTF-8 characters -- fix(textarea) cursor position after hiding character in password mode -- fix(linemeter) draw critical lines with correct color -- fix(kconfig) handle disable sprintf float correctly. -- fix(layout) stop layout after recursion threshold is reached -- fix(gauge) fix redraw with image needle - -## v7.8.1 - -### Bugfixes -- fix(lv_scr_load_anim) fix when multiple screen are loaded at tsame time with delay -- fix(page) fix LV_SCOLLBAR_MODE_DRAG - -## v7.8.0 (01.12.2020) - -### New features -- make DMA2D non blocking -- add unscii-16 built-in font -- add KConfig -- add lv_refr_get_fps_avg() - -### Bugfixes -- fix(btnmatrix) handle arabic texts in button matrices -- fix(indev) disabled object shouldn't absorb clicks but let the parent to be clicked -- fix(arabic) support processing again already processed texts with _lv_txt_ap_proc -- fix(textarea) support Arabic letter connections -- fix(dropdown) support Arabic letter connections -- fix(value_str) support Arabic letter connections in value string property -- fix(indev) in LV_INDEV_TYPE_BUTTON recognize 1 cycle long presses too -- fix(arc) make arc work with encoder -- fix(slider) adjusting the left knob too with encoder -- fix reference to LV_DRAW_BUF_MAX_NUM in lv_mem.c -- fix(polygon draw) join adjacent points if they are on the same coordinate -- fix(linemeter) fix invalidation when setting new value -- fix(table) add missing invalidation when changing cell type -- refactor(roller) rename LV_ROLLER_MODE_INIFINITE -> LV_ROLLER_MODE_INFINITE - -## v7.7.2 (17.11.2020) -### Bugfixes -- fix(draw_triangle): fix polygon/triangle drawing when the order of points is counter-clockwise -- fix(btnmatrix): fix setting the same map with modified pointers -- fix(arc) fix and improve arc dragging -- label: Repair calculate back `dot` character logical error which cause infinite loop. -- fix(theme_material): remove the bottom border from tabview header -- fix(imgbtn) guess a the closest available state with valid src -- fix(spinbox) update cursor position in lv_spinbox_set_step - -## v7.7.1 (03.11.2020) -### Bugfixes -- Respect btnmatrix's `one_check` in `lv_btnmatrix_set_btn_ctrl` -- Gauge: make the needle images to use the styles from `LV_GAUGE_PART_PART` -- Group: fix in `lv_group_remove_obj` to handle deleting hidden obejcts correctly - -## v7.7.0 (20.10.2020) - -### New features -- Add PXP GPU support (for NXP MCUs) -- Add VG-Lite GPU support (for NXP MCUs) -- Allow max. 16 cell types for table -- Add `lv_table_set_text_fmt()` -- Use margin on calendar header to set distances and padding to the size of the header -- Add `text_sel_bg` style property - -### Bugfixes -- Theme update to support text selection background -- Fix imgbtn state change -- Support RTL in table (draw columns right to left) -- Support RTL in pretty layout (draw columns right to left) -- Skip objects in groups if they are in disabled state -- Fix dropdown selection with RTL basedirection -- Fix rectangle border drawing with large width -- Fix `lv_win_clean()` - -## v7.6.1 (06.10.2020) - -### Bugfixes -- Fix BIDI support in dropdown list -- Fix copying base dir in `lv_obj_create` -- Handle sub pixel rendering in font loader -- Fix transitions with style caching -- Fix click focus -- Fix imgbtn image switching with empty style -- Material theme: do not set the text font to allow easy global font change - -## v7.6.0 (22.09.2020) - -### New features -- Check whether any style property has changed on a state change to decide if any redraw is required - -### Bugfixes -- Fix selection of options with non-ASCII letters in dropdown list -- Fix font loader to support LV_FONT_FMT_TXT_LARGE - -## v7.5.0 (15.09.2020) - -### New features -- Add `clean_dcache_cb` and `lv_disp_clean_dcache` to enable users to use their own cache management function -- Add `gpu_wait_cb` to wait until the GPU is working. It allows to run CPU a wait only when the rendered data is needed. -- Add 10px and 8ox built in fonts - -### Bugfixes -- Fix unexpected DEFOCUS on lv_page when clicking to bg after the scrollable -- Fix `lv_obj_del` and `lv_obj_clean` if the children list changed during deletion. -- Adjust button matrix button width to include padding when spanning multiple units. -- Add rounding to btnmatrix line height calculation -- Add `decmopr_buf` to GC roots -- Fix divisioin by zero in draw_pattern (lv_draw_rect.c) if the image or letter is not found -- Fix drawing images with 1 px height or width - -## v7.4.0 (01.09.2020) - -The main new features of v7.4 are run-time font loading, style caching and arc knob with value setting by click. - -### New features -- Add `lv_font_load()` function - Loads a `lv_font_t` object from a binary font file -- Add `lv_font_free()` function - Frees the memory allocated by the `lv_font_load()` function -- Add style caching to reduce access time of properties with default value -- arc: add set value by click feature -- arc: add `LV_ARC_PART_KNOB` similarly to slider -- send gestures event if the object was dragged. User can check dragging with `lv_indev_is_dragging(lv_indev_act())` in the event function. - -### Bugfixes -- Fix color bleeding on border drawing -- Fix using 'LV_SCROLLBAR_UNHIDE' after 'LV_SCROLLBAR_ON' -- Fix croping of last column/row if an image is zoomed -- Fix zooming and rotateing mosaic images -- Fix deleting tabview with LEFT/RIGHT tab position -- Fix btnmatrix to not send event when CLICK_TRIG = true and the cursor slid from a pressed button -- Fix roller width if selected text is larger than the normal - -## v7.3.1 (18.08.2020) - -### Bugfixes -- Fix drawing value string twice -- Rename `lv_chart_clear_serie` to `lv_chart_clear_series` and `lv_obj_align_origo` to `lv_obj_align_mid` -- Add linemeter's mirror feature again -- Fix text decor (udnerline strikethrough) with older versions of font converter -- Fix setting local style property multiple times -- Add missing background drawing and radius handling to image button -- Allow adding extra label to list buttons -- Fix crash if `lv_table_set_col_cnt` is called before `lv_table_set_row_cnt` for the first time -- Fix overflow in large image transformations -- Limit extra button click area of button matrix's buttons. With large paddings it was counter intuitive. (Gaps are mapped to button when clicked). -- Fix `lv_btnmatrix_set_one_check` not forcing exactly one button to be checked -- Fix color picker invalidation in rectangle mode -- Init disabled days to gray color in calendar - -## v7.3.0 (04.08.2020) - -### New features -- Add `lv_task_get_next` -- Add `lv_event_send_refresh`, `lv_event_send_refresh_recursive` to easily send `LV_EVENT_REFRESH` to object -- Add `lv_tabview_set_tab_name()` function - used to change a tab's name -- Add `LV_THEME_MATERIAL_FLAG_NO_TRANSITION` and `LV_THEME_MATERIAL_FLAG_NO_FOCUS` flags -- Reduce code size by adding: `LV_USE_FONT_COMPRESSED` and `LV_FONT_USE_SUBPX` and applying some optimization -- Add `LV_MEMCPY_MEMSET_STD` to use standard `memcpy` and `memset` - -### Bugfixes -- Do not print warning for missing glyph if its height OR width is zero. -- Prevent duplicated sending of `LV_EVENT_INSERT` from text area -- Tidy outer edges of cpicker widget. -- Remove duplicated lines from `lv_tabview_add_tab` -- btnmatrix: hadle combined states of buttons (e.g. chacked + disabled) -- textarea: fix typo in lv_textarea_set_sscrollbar_mode -- gauge: fix image needle drawing -- fix using freed memory in _lv_style_list_remove_style - -## v7.2.0 (21.07.2020) - -### New features -- Add screen transitions with `lv_scr_load_anim()` -- Add display background color, wallpaper and opacity. Shown when the screen is transparent. Can be used with `lv_disp_set_bg_opa/color/image()`. -- Add `LV_CALENDAR_WEEK_STARTS_MONDAY` -- Add `lv_chart_set_x_start_point()` function - Set the index of the x-axis start point in the data array -- Add `lv_chart_set_ext_array()` function - Set an external array of data points to use for the chart -- Add `lv_chart_set_point_id()` function - Set an individual point value in the chart series directly based on index -- Add `lv_chart_get_x_start_point()` function - Get the current index of the x-axis start point in the data array -- Add `lv_chart_get_point_id()` function - Get an individual point value in the chart series directly based on index -- Add `ext_buf_assigned` bit field to `lv_chart_series_t` structure - it's true if external buffer is assigned to series -- Add `lv_chart_set_series_axis()` to assign series to primary or secondary axis -- Add `lv_chart_set_y_range()` to allow setting range of secondary y axis (based on `lv_chart_set_range` but extended with an axis parameter) -- Allow setting different font for the selected text in `lv_roller` -- Add `theme->apply_cb` to replace `theme->apply_xcb` to make it compatible with the MicroPython binding -- Add `lv_theme_set_base()` to allow easy extension of built-in (or any) themes -- Add `lv_obj_align_x()` and `lv_obj_align_y()` functions -- Add `lv_obj_align_origo_x()` and `lv_obj_align_origo_y()` functions - -### Bugfixes -- `tileview` fix navigation when not screen sized -- Use 14px font by default to for better compatibility with smaller displays -- `linemeter` fix conversation of current value to "level" -- Fix drawing on right border -- Set the cursor image non clickable by default -- Improve mono theme when used with keyboard or encoder - -## v7.1.0 (07.07.2020) - -### New features -- Add `focus_parent` attribute to `lv_obj` -- Allow using buttons in encoder input device -- Add lv_btnmatrix_set/get_align capability -- DMA2D: Remove dependency on ST CubeMX HAL -- Added `max_used` propriety to `lv_mem_monitor_t` struct -- In `lv_init` test if the strings are UTF-8 encoded. -- Add `user_data` to themes -- Add LV_BIG_ENDIAN_SYSTEM flag to lv_conf.h in order to fix displaying images on big endian systems. -- Add inline function lv_checkbox_get_state(const lv_obj_t * cb) to extend the checkbox functionality. -- Add inline function lv_checkbox_set_state(const lv_obj_t * cb, lv_btn_state_t state ) to extend the checkbox functionality. - -### Bugfixes -- `lv_img` fix invalidation area when angle or zoom changes -- Update the style handling to support Big endian MCUs -- Change some methods to support big endian hardware. -- remove use of c++ keyword 'new' in parameter of function lv_theme_set_base(). -- Add LV_BIG_ENDIAN_SYSTEM flag to lv_conf.h in order to fix displaying images on big endian systems. -- Fix inserting chars in text area in big endian hardware. - -## v7.0.2 (16.06.2020) - -### Bugfixes -- `lv_textarea` fix wrong cursor position when clicked after the last character -- Change all text related indices from 16-bit to 32-bit integers throughout whole library. #1545 -- Fix gestures -- Do not call `set_px_cb` for transparent pixel -- Fix list button focus in material theme -- Fix crash when the a text area is cleared with the backspace of a keyboard -- Add version number to `lv_conf_template.h` -- Add log in true double buffering mode with `set_px_cb` -- `lv_dropdown`: fix missing `LV_EVENT_VALUE_CHANGED` event when used with encoder -- `lv_tileview`: fix if not the {0;0} tile is created first -- `lv_debug`: restructure to allow asserting in from `lv_misc` too -- add assert if `_lv_mem_buf_get()` fails -- `lv_textarea`: fix character delete in password mode -- Update `LV_OPA_MIN` and `LV_OPA_MAX` to widen the opacity processed range -- `lv_btnm` fix sending events for hidden buttons -- `lv_gaguge` make `lv_gauge_set_angle_offset` offset the labels and needles too -- Fix typo in the API `scrllable` -> `scrollable` -- `tabview` by default allow auto expanding the page only to right and bottom (#1573) -- fix crash when drawing gradient to the same color -- chart: fix memory leak -- `img`: improve hit test for transformed images - -## v7.0.1 (01.06.2020) - -### Bugfixes -- Make the Microptyhon working by adding the required variables as GC_ROOT -- Prefix some internal API functions with `_` to reduce the API of LVGL -- Fix built-in SimSun CJK font -- Fix UTF-8 encoding when `LV_USE_ARABIC_PERSIAN_CHARS` is enabled -- Fix DMA2D usage when 32 bit images directly blended -- Fix lv_roller in infinite mode when used with encoder -- Add `lv_theme_get_color_secondary()` -- Add `LV_COLOR_MIX_ROUND_OFS` to adjust color mixing to make it compatible with the GPU -- Improve DMA2D blending -- Remove memcpy from `lv_ll` (caused issues with some optimization settings) -- `lv_chart` fix X tick drawing -- Fix vertical dashed line drawing -- Some additional minor fixes and formattings - -## v7.0.0 (18.05.2020) - -### Documentation -The docs for v7 is available at https://docs.littlevgl.com/v7/en/html/index.html - -### Legal changes - -The name of the project is changed to LVGL and the new website is on https://lvgl.io - -LVGL remains free under the same conditions (MIT license) and a company is created to manage LVGL and offer services. - -### New drawing system -Complete rework of LVGL's draw engine to use "masks" for more advanced and higher quality graphical effects. -A possible use-case of this system is to remove the overflowing content from the rounded edges. -It also allows drawing perfectly anti-aliased circles, lines, and arcs. -Internally, the drawings happen by defining masks (such as rounded rectangle, line, angle). -When something is drawn the currently active masks can make some pixels transparent. -For example, rectangle borders are drawn by using 2 rectangle masks: one mask removes the inner part and another the outer part. - -The API in this regard remained the same but some new functions were added: -- `lv_img_set_zoom`: set image object's zoom factor -- `lv_img_set_angle`: set image object's angle without using canvas -- `lv_img_set_pivot`: set the pivot point of rotation - -The new drawing engine brought new drawing features too. They are highlighted in the "style" section. - -### New style system -The old style system is replaced with a new more flexible and lightweighted one. -It uses an approach similar to CSS: support cascading styles, inheriting properties and local style properties per object. -As part of these updates, a lot of objects were reworked and the APIs have been changed. - -- more shadows options: *offset* and *spread* -- gradient stop position to shift the gradient area and horizontal gradient -- `LV_BLEND_MODE_NORMAL/ADDITIVE/SUBTRACTIVE` blending modes -- *clip corner*: crop the content on the rounded corners -- *text underline* and *strikethrough* -- dashed vertical and horizontal lines (*dash gap*, *dash_width*) -- *outline*: a border-like part drawn out of the background. Can have spacing to the background. -- *pattern*: display and image in the middle of the background or repeat it -- *value* display a text which is stored in the style. It can be used e.g. as a lighweighted text on buttons too. -- *margin*: similar to *padding* but used to keep space outside of the object - -Read the [Style](https://docs.littlevgl.com/v7/en/html/overview/style.html) section of the documentation to learn how the new styles system works. - -### GPU integration -To better utilize GPUs, from this version GPU usage can be integrated into LVGL. In `lv_conf.h` any supported GPUs can be enabled with a single configuration option. - -Right now, only ST's DMA2D (Chrom-ART) is integrated. More will in the upcoming releases. - -### Renames -The following object types are renamed: -- sw -> switch -- ta -> textarea -- cb -> checkbox -- lmeter -> linemeter -- mbox -> msgbox -- ddlist -> dropdown -- btnm -> btnmatrix -- kb -> keyboard -- preload -> spinner -- lv_objx folder -> lv_widgets -- LV_FIT_FILL -> LV_FIT_PARENT -- LV_FIT_FLOOD -> LV_FLOOD_MAX -- LV_LAYOUT_COL_L/M/R -> LV_LAYOUT_COLUMN_LEFT/MID/RIGHT -- LV_LAYOUT_ROW_T/M/B -> LV_LAYOUT_ROW_TOP/MID/BOTTOM - -### Reworked and improved object -- `dropdown`: Completely reworked. Now creates a separate list when opened and can be dropped to down/up/left/right. -- `label`: `body_draw` is removed, instead, if its style has a visible background/border/shadow etc it will be drawn. Padding really makes the object larger (not just virtually as before) -- `arc`: can draw bacground too. -- `btn`: doesn't store styles for each state because it's done naturally in the new style system. -- `calendar`: highlight the pressed datum. The used styles are changed: use `LV_CALENDAR_PART_DATE` normal for normal dates, checked for highlighted, focused for today, pressed for the being pressed. (checked+pressed, focused+pressed also work) -- `chart`: only has `LINE` and `COLUMN` types because with new styles all the others can be described. LV_CHART_PART_SERIES sets the style of the series. bg_opa > 0 draws an area in LINE mode. `LV_CHART_PART_SERIES_BG` also added to set a different style for the series area. Padding in `LV_CHART_PART_BG` makes the series area smaller, and it ensures space for axis labels/numbers. -- `linemeter`, `gauge`: can have background if the related style properties are set. Padding makes the scale/lines smaller. scale_border_width and scale_end_border_width allow to draw an arc on the outer part of the scale lines. -- `gauge`: `lv_gauge_set_needle_img` allows use image as needle -- `canvas`: allow drawing to true color alpha and alpha only canvas, add `lv_canvas_blur_hor/ver` and rename `lv_canvas_rotate` to `lv_canvas_transform` -- `textarea`: If available in the font use bullet (`U+2022`) character in text area password - -### New object types -- `lv_objmask`: masks can be added to it. The children will be masked accordingly. - -### Others -- Change the built-in fonts to [Montserrat](https://fonts.google.com/specimen/Montserrat) and add built-in fonts from 12 px to 48 px for every 2nd size. -- Add example CJK and Arabic/Persian/Hebrew built-in font -- Add ° and "bullet" to the built-in fonts -- Add Arabic/Persian script support: change the character according to its position in the text. -- Add `playback_time` to animations. -- Add `repeat_count` to animations instead of the current "repeat forever". -- Replace `LV_LAYOUT_PRETTY` with `LV_LAYOUT_PRETTY_TOP/MID/BOTTOM` - -### Demos -- [lv_examples](https://github.com/littlevgl/lv_examples) was reworked and new examples and demos were added - -### New release policy -- Maintain this Changelog for every release -- Save old major version in new branches. E.g. `release/v6` -- Merge new features and fixes directly into `master` and release a patch or minor releases every 2 weeks. - -### Migrating from v6 to v7 -- First and foremost, create a new `lv_conf.h` based on `lv_conf_template.h`. -- To try the new version it suggested using a simulator project and see the examples. -- If you have a running project, the most difficult part of the migration is updating to the new style system. Unfortunately, there is no better way than manually updating to the new format. -- The other parts are mainly minor renames and refactoring as described above. diff --git a/lib/libesp32_lvgl/LVGL/CMakeLists.txt b/lib/libesp32_lvgl/LVGL/CMakeLists.txt deleted file mode 100644 index 0a65216f6..000000000 --- a/lib/libesp32_lvgl/LVGL/CMakeLists.txt +++ /dev/null @@ -1,67 +0,0 @@ -if(ESP_PLATFORM) - -file(GLOB_RECURSE SOURCES src/*.c) - -idf_component_register(SRCS ${SOURCES} - INCLUDE_DIRS . src - REQUIRES main) - -target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_CONF_INCLUDE_SIMPLE") - -if (CONFIG_LV_MEM_CUSTOM) - if (CONFIG_LV_MEM_CUSTOM_ALLOC) - target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_MEM_CUSTOM_ALLOC=${CONFIG_LV_MEM_CUSTOM_ALLOC}") - endif() - - if (CONFIG_LV_MEM_CUSTOM_FREE) - target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_MEM_CUSTOM_FREE=${CONFIG_LV_MEM_CUSTOM_FREE}") - endif() -endif() - -if (CONFIG_LV_TICK_CUSTOM) - if (CONFIG_LV_TICK_CUSTOM_SYS_TIME_EXPR) - target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_TICK_CUSTOM_SYS_TIME_EXPR=${CONFIG_LV_TICK_CUSTOM_SYS_TIME_EXPR}") - endif() -endif() - -if (CONFIG_LV_USER_DATA_FREE) - target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_USER_DATA_FREE=${CONFIG_LV_USER_DATA_FREE}") -endif() - -if (CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM) - target_compile_definitions(${COMPONENT_LIB} PUBLIC "-DLV_ATTRIBUTE_FAST_MEM=IRAM_ATTR") -endif() - -elseif(ZEPHYR_BASE) - -if(CONFIG_LVGL) - -zephyr_include_directories(${ZEPHYR_BASE}/lib/gui/lvgl) - -target_include_directories(lvgl INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) - -zephyr_compile_definitions(LV_CONF_KCONFIG_EXTERNAL_INCLUDE=) - -zephyr_compile_definitions_ifdef(CONFIG_LV_MEM_CUSTOM - LV_MEM_CUSTOM_ALLOC=${CONFIG_LV_MEM_CUSTOM_ALLOC} - ) -zephyr_compile_definitions_ifdef(CONFIG_LV_MEM_CUSTOM - LV_MEM_CUSTOM_FREE=${CONFIG_LV_MEM_CUSTOM_FREE} - ) -zephyr_compile_definitions_ifdef(CONFIG_LV_TICK_CUSTOM - LV_TICK_CUSTOM_SYS_TIME_EXPR=${CONFIG_LV_TICK_CUSTOM_SYS_TIME_EXPR} - ) - -zephyr_library() - -file(GLOB_RECURSE SOURCES src/*.c) -zephyr_library_sources(${SOURCES}) - -endif() # CONFIG_LVGL - -else() - -file(GLOB_RECURSE SOURCES src/*.c) -add_library(lvgl STATIC ${SOURCES}) - -endif() diff --git a/lib/libesp32_lvgl/LVGL/Kconfig b/lib/libesp32_lvgl/LVGL/Kconfig deleted file mode 100644 index 0e48abbb9..000000000 --- a/lib/libesp32_lvgl/LVGL/Kconfig +++ /dev/null @@ -1,1222 +0,0 @@ -# Kconfig file for LVGL v7.11.0 - -menu "LVGL configuration" - - config LV_ATTRIBUTE_FAST_MEM_USE_IRAM - bool "Set IRAM as LV_ATTRIBUTE_FAST_MEM" - help - Set this option to configure IRAM as LV_ATTRIBUTE_FAST_MEM - - config LV_CONF_MINIMAL - bool "LVGL minimal configuration." - - # Define CONFIG_LV_CONF_SKIP so we can use LVGL - # without lv_conf.h file, the lv_conf_internal.h and - # lv_conf_kconfig.h files are used instead. - config LV_CONF_SKIP - bool - default y - - config LV_HOR_RES_MAX - int "Maximal horizontal resolution to support by the library." - default 480 - - config LV_VER_RES_MAX - int "Maximal vertical resolution to support by the library." - default 320 - - choice - prompt "Color depth." - default LV_COLOR_DEPTH_16 - help - Color depth to be used. - - config LV_COLOR_DEPTH_32 - bool "32: ARGB8888" - config LV_COLOR_DEPTH_16 - bool "16: RGB565" - config LV_COLOR_DEPTH_8 - bool "8: RGB232" - config LV_COLOR_DEPTH_1 - bool "1: 1 byte per pixel" - endchoice - - config LV_COLOR_DEPTH - int - default 1 if LV_COLOR_DEPTH_1 - default 8 if LV_COLOR_DEPTH_8 - default 16 if LV_COLOR_DEPTH_16 - default 32 if LV_COLOR_DEPTH_32 - - config LV_COLOR_16_SWAP - bool "Swap the 2 bytes of RGB565 color. Useful if the display has a 8 bit interface (e.g. SPI)." - depends on LV_COLOR_DEPTH_16 - - config LV_COLOR_SCREEN_TRANSP - bool "Enable screen transparency." - depends on LV_COLOR_DEPTH_32 - help - Useful for OSD or other overlapping GUIs. - Requires `LV_COLOR_DEPTH = 32` colors and the screen's style - should be modified: `style.body.opa = ...`. - - config LV_COLOR_TRANSP_HEX - hex "Images pixels with this color will not be drawn (with chroma keying)." - depends on LV_COLOR_SCREEN_TRANSP - range 0x000000 0xFFFFFF - default 0x00FF00 - help - See lv_misc/lv_color.h for some color values examples. - - config LV_ANTIALIAS - bool "Enable anti-aliasing (lines, and radiuses will be smoothed)." - default y if !LV_CONF_MINIMAL - - config LV_DISP_DEF_REFR_PERIOD - int "Default display refresh period (ms)." - default 30 - help - Can be changed in the display driver (`lv_disp_drv_t`). - - config LV_DPI - int "DPI (Dots per inch in px)." - default 130 - - config LV_DISP_SMALL_LIMIT - int "Small display limit" - default 30 - help - According to the width of the display (hor. res. / dpi) the - displays fall in 4 categories. This is the upper limit for small - displays. - - config LV_DISP_MEDIUM_LIMIT - int "Medium display limit" - default 50 - help - According to the width of the display (hor. res. / dpi) the - displays fall in 4 categories. This is the upper limit for medium - displays. - - config LV_DISP_LARGE_LIMIT - int "Large display limit" - default 70 - help - According to the width of the display (hor. res. / dpi) the - displays fall in 4 categories. This is the upper limit for large - displays. - - menu "Memory manager settings" - config LV_MEM_CUSTOM - bool - prompt "If true use custom malloc/free, otherwise use the built-in `lv_mem_alloc` and `lv_mem_free`" - - config LV_MEM_CUSTOM_INCLUDE - string - prompt "Header to include for the custom memory function" - default "stdlib.h" - depends on LV_MEM_CUSTOM - - config LV_MEM_CUSTOM_ALLOC - string - prompt "Wrapper to malloc" - default "malloc" - depends on LV_MEM_CUSTOM - - config LV_MEM_CUSTOM_FREE - string - prompt "Wrapper to free" - default "free" - depends on LV_MEM_CUSTOM - - config LV_MEM_SIZE_KILOBYTES - int - prompt "Size of the memory used by `lv_mem_alloc` in kilobytes (>= 2kB)" - range 2 128 - default 32 - depends on !LV_MEM_CUSTOM - - config LV_MEMCPY_MEMSET_STD - bool - prompt "Use the standard memcpy and memset instead of LVGL's own functions" - endmenu - - menu "Indev device settings" - config LV_INDEV_DEF_READ_PERIOD - int "Input device read period [ms]." - default 30 - config LV_INDEV_DEF_DRAG_LIMIT - int "Drag threshold in pixels." - default 10 - config LV_INDEV_DEF_DRAG_THROW - int "Drag throw slow-down in [%]. Greater value -> faster slow down." - default 10 - config LV_INDEV_DEF_LONG_PRESS_TIME - int "Long press time [ms]. Time to send 'LV_EVENT_LONG_PRESSED'." - default 400 - config LV_INDEV_DEF_LONG_PRESS_REP_TIME - int "Repeated trigger period in long press [ms]. Time between 'LV_EVENT_LONG_PRESSED_REPEAT'." - default 100 - config LV_INDEV_DEF_GESTURE_LIMIT - int "Gesture threshold in pixels." - default 50 - config LV_INDEV_DEF_GESTURE_MIN_VELOCITY - int "Gesture min velocity at release before swipe (pixels)." - default 3 - - endmenu - - menu "Feature usage" - config LV_USE_ANIMATION - bool "Enable the Animations." - default y if !LV_CONF_MINIMAL - config LV_USE_SHADOW - bool "Enable shadow drawing." - default y if !LV_CONF_MINIMAL - config LV_SHADOW_CACHE_SIZE - int "Shadow cache size" - depends on LV_USE_SHADOW - default 0 - help - Allow buffering some shadow calculation - LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, - where shadow size is `shadow_width + radius` - Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost. - config LV_USE_OUTLINE - bool "Enable outline drawing on rectangles." - default y if !LV_CONF_MINIMAL - config LV_USE_PATTERN - bool "Enable pattern drawing on rectangles." - default y if !LV_CONF_MINIMAL - config LV_USE_VALUE_STR - bool "Enable value string drawing on rectangles." - default y if !LV_CONF_MINIMAL - config LV_USE_BLEND_MODES - bool "Use other blend modes then normal (LV_BLEND_MODE_...)." - default y if !LV_CONF_MINIMAL - config LV_USE_OPA_SCALE - bool "Use the 'opa_scale' style property to set the opacity of an object and it's children at once." - default y if !LV_CONF_MINIMAL - config LV_USE_IMG_TRANSFORM - bool "Use image zoom and rotation." - default y if !LV_CONF_MINIMAL - config LV_USE_GROUP - bool "Enable object groups (for keyboard/encoder navigation)." - default y if !LV_CONF_MINIMAL - config LV_USE_GPU - bool "Enable GPU interface (only enabled 'gpu_fill_cb' and 'gpu_blend_cb' in the disp. drv." - default y if !LV_CONF_MINIMAL - config LV_USE_GPU_STM32_DMA2D - bool "Enable STM32 DMA2D." - config LV_GPU_DMA2D_CMSIS_INCLUDE - string "include path of CMSIS header of target processor" - depends on LV_USE_GPU_STM32_DMA2D - default "" - help - e.g. "stm32f769xx.h" or "stm32f429xx.h" - config LV_USE_GPU_NXP_PXP - bool "Use PXP for CPU off-load on NXP RTxxx platforms." - config LV_USE_GPU_NXP_PXP_AUTO_INIT - bool "Call lv_gpu_nxp_pxp_init() automatically or manually." - depends on LV_USE_GPU_NXP_PXP - help - 1: Add default bare metal and FreeRTOS interrupt handling - routines for PXP (lv_gpu_nxp_pxp_osa.c) and call - lv_gpu_nxp_pxp_init() automatically during lv_init(). - Note that symbol FSL_RTOS_FREE_RTOS has to be defined in order - to use FreeRTOS OSA, otherwise bare-metal implementation is - selected. - 0: lv_gpu_nxp_pxp_init() has to be called manually before - lv_init(). - config LV_USE_GPU_NXP_VG_LITE - bool "Use VG-Lite for CPU off-load on NXP RTxxx platforms." - config LV_USE_FILESYSTEM - bool "Enable file system (might be required for images." - default y if !LV_CONF_MINIMAL - config LV_USE_USER_DATA - bool "Add a 'user_data' to drivers and objects." - config LV_USE_USER_DATA_FREE - bool "Free the user data field upon object deletion" - depends on LV_USE_USER_DATA - config LV_USER_DATA_FREE_INCLUDE - string "Header for user data free function" - default "something.h" - depends on LV_USE_USER_DATA_FREE - config LV_USER_DATA_FREE - string "Invoking for user data free function. It has the lv_obj_t pointer as single parameter." - default "(user_data_free)" - depends on LV_USE_USER_DATA_FREE - config LV_USE_PERF_MONITOR - bool "Show CPU usage and FPS count in the right bottom corner." - config LV_USE_API_EXTENSION_V6 - bool "Use the functions and types from the older (v6) API if possible." - default y if !LV_CONF_MINIMAL - config LV_USE_API_EXTENSION_V7 - bool "Use the functions and types from the older (v7) API if possible." - default y if !LV_CONF_MINIMAL - endmenu - - menu "Image decoder and cache" - config LV_IMG_CF_INDEXED - bool "Enable indexed (palette) images." - default y if !LV_CONF_MINIMAL - config LV_IMG_CF_ALPHA - bool "Enable alpha indexed images." - default y if !LV_CONF_MINIMAL - config LV_IMG_CACHE_DEF_SIZE - int "Default image cache size." - default 1 - help - Image caching keeps the images opened. If only the built-in - image formats are used there is no real advantage of caching. - (I.e. no new image decoder is added) - - With complex image decoders (e.g. PNG or JPG) caching can - save the continuous open/decode of images. - However the opened images might consume additional RAM. - LV_IMG_CACHE_DEF_SIZE must be >= 1 - endmenu - - menu "Compiler Settings" - config LV_BIG_ENDIAN_SYSTEM - bool "For big endian systems set to 1" - endmenu - - menu "HAL Settings" - config LV_TICK_CUSTOM - bool - prompt "Use a custom tick source" - - config LV_TICK_CUSTOM_INCLUDE - string - prompt "Header for the system time function" - default "Arduino.h" - depends on LV_TICK_CUSTOM - - config LV_TICK_CUSTOM_SYS_TIME_EXPR - string - prompt "Expression evaluating to current system time in ms" - default "millis()" - depends on LV_TICK_CUSTOM - endmenu - - menu "Log Settings" - config LV_USE_LOG - bool "Enable the log module" - - choice - bool "Default log verbosity" if LV_USE_LOG - default LV_LOG_LEVEL_INFO - help - Specify how important log should be added. - - config LV_LOG_LEVEL_TRACE - bool "Trace - Detailed information" - config LV_LOG_LEVEL_INFO - bool "Info - Log important events" - config LV_LOG_LEVEL_WARN - bool "Warn - Log if something unwanted happened" - config LV_LOG_LEVEL_ERROR - bool "Error - Only critical issues" - config LV_LOG_LEVEL_NONE - bool "None - Do not log anything" - endchoice - - config LV_LOG_LEVEL - int - default 0 if LV_LOG_LEVEL_TRACE - default 1 if LV_LOG_LEVEL_INFO - default 2 if LV_LOG_LEVEL_WARN - default 3 if LV_LOG_LEVEL_ERROR - default 4 if LV_LOG_LEVEL_USER - default 5 if LV_LOG_LEVEL_NONE - - config LV_LOG_PRINTF - bool "Print the log with 'printf'" if LV_USE_LOG - help - Use printf for log output. - If not set the user needs to register a callback with `lv_log_register_print_cb`. - - endmenu - - menu "Debug Settings" - config LV_USE_DEBUG - bool "Enable Debug" - - config LV_USE_ASSERT_NULL - bool "Check if the parameter is NULL. (Quite fast)" - default y if !LV_CONF_MINIMAL - - config LV_USE_ASSERT_MEM - bool "Checks is the memory is successfully allocated or no. (Quite fast)" - default y if !LV_CONF_MINIMAL - - config LV_USE_ASSERT_MEM_INTEGRITY - bool "Check the integrity of `lv_mem` after critical operations. (Slow)" - - config LV_USE_ASSERT_STR - bool "Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow)" - help - If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled). - - config LV_USE_ASSERT_OBJ - bool "Check NULL, the object's type and existence (e.g. not deleted). (Quite slow)." - help - If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) - - config LV_USE_ASSERT_STYLE - bool "Check if the styles are properly initialized. (Fast)" - endmenu - - menu "Font usage" - config LV_FONT_FMT_TXT_LARGE - bool "Enable it if you have fonts with a lot of characters." - help - The limit depends on the font size, font face and bpp - but with > 10,000 characters if you see issues probably you - need to enable it. - - config LV_USE_FONT_SUBPX - bool "Enable subpixel rendering." - - config LV_FONT_SUBPX_BGR - bool "Use BGR instead RGB for sub-pixel rendering." - depends on LV_USE_FONT_SUBPX - help - Set the pixel order of the display. - Important only if "subpx fonts" are used. - With "normal" font it doesn't matter. - - menu "Enable built-in fonts" - config LV_FONT_MONTSERRAT_8 - bool "Enable Montserrat 8" - config LV_FONT_MONTSERRAT_10 - bool "Enable Montserrat 10" - config LV_FONT_MONTSERRAT_12 - bool "Enable Montserrat 12" - config LV_FONT_MONTSERRAT_14 - bool "Enable Montserrat 14" - default y if !LV_CONF_MINIMAL - config LV_FONT_MONTSERRAT_16 - bool "Enable Montserrat 16" - config LV_FONT_MONTSERRAT_18 - bool "Enable Montserrat 18" - config LV_FONT_MONTSERRAT_20 - bool "Enable Montserrat 20" - config LV_FONT_MONTSERRAT_22 - bool "Enable Montserrat 22" - config LV_FONT_MONTSERRAT_24 - bool "Enable Montserrat 24" - config LV_FONT_MONTSERRAT_26 - bool "Enable Montserrat 26" - config LV_FONT_MONTSERRAT_28 - bool "Enable Montserrat 28" - config LV_FONT_MONTSERRAT_30 - bool "Enable Montserrat 30" - config LV_FONT_MONTSERRAT_32 - bool "Enable Montserrat 32" - config LV_FONT_MONTSERRAT_34 - bool "Enable Montserrat 34" - config LV_FONT_MONTSERRAT_36 - bool "Enable Montserrat 36" - config LV_FONT_MONTSERRAT_38 - bool "Enable Montserrat 38" - config LV_FONT_MONTSERRAT_40 - bool "Enable Montserrat 40" - config LV_FONT_MONTSERRAT_42 - bool "Enable Montserrat 42" - config LV_FONT_MONTSERRAT_44 - bool "Enable Montserrat 44" - config LV_FONT_MONTSERRAT_46 - bool "Enable Montserrat 46" - config LV_FONT_MONTSERRAT_48 - bool "Enable Montserrat 48" - config LV_FONT_UNSCII_8 - bool "Enable UNSCII 8 (Perfect monospace font)" - default y if LV_CONF_MINIMAL - config LV_FONT_UNSCII_16 - bool "Enable UNSCII 16 (Perfect monospace font)" - config LV_FONT_MONTSERRAT12SUBPX - bool "Enable Montserrat 12 sub-pixel" - config LV_FONT_MONTSERRAT28COMPRESSED - bool "Enable Montserrat 28 compressed" - config LV_FONT_DEJAVU_16_PERSIAN_HEBREW - bool "Enable Dejavu 16 Persian, Hebrew, Arabic letters" - config LV_FONT_SIMSUN_16_CJK - bool "Enable Simsun 16 CJK" - endmenu - - choice LV_FONT_DEFAULT_SMALL - prompt "Select theme default small font" - default LV_FONT_DEFAULT_SMALL_MONTSERRAT_16 if !LV_CONF_MINIMAL - default LV_FONT_DEFAULT_SMALL_UNSCII_8 if LV_CONF_MINIMAL - help - Select theme default small font - - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_8 - bool "Montserrat 8" - select LV_FONT_MONTSERRAT_8 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_10 - bool "Montserrat 10" - select LV_FONT_MONTSERRAT_10 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_12 - bool "Montserrat 12" - select LV_FONT_MONTSERRAT_12 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_14 - bool "Montserrat 14" - select LV_FONT_MONTSERRAT_14 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_16 - bool "Montserrat 16" - select LV_FONT_MONTSERRAT_16 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_18 - bool "Montserrat 18" - select LV_FONT_MONTSERRAT_18 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_20 - bool "Montserrat 20" - select LV_FONT_MONTSERRAT_20 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_22 - bool "Montserrat 22" - select LV_FONT_MONTSERRAT_22 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_24 - bool "Montserrat 24" - select LV_FONT_MONTSERRAT_24 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_26 - bool "Montserrat 26" - select LV_FONT_MONTSERRAT_26 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_28 - bool "Montserrat 28" - select LV_FONT_MONTSERRAT_28 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_30 - bool "Montserrat 30" - select LV_FONT_MONTSERRAT_30 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_32 - bool "Montserrat 32" - select LV_FONT_MONTSERRAT_32 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_34 - bool "Montserrat 34" - select LV_FONT_MONTSERRAT_34 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_36 - bool "Montserrat 36" - select LV_FONT_MONTSERRAT_36 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_38 - bool "Montserrat 38" - select LV_FONT_MONTSERRAT_38 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_40 - bool "Montserrat 40" - select LV_FONT_MONTSERRAT_40 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_42 - bool "Montserrat 42" - select LV_FONT_MONTSERRAT_42 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_44 - bool "Montserrat 44" - select LV_FONT_MONTSERRAT_44 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_46 - bool "Montserrat 46" - select LV_FONT_MONTSERRAT_46 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT_48 - bool "Montserrat 48" - select LV_FONT_MONTSERRAT_48 - config LV_FONT_DEFAULT_SMALL_UNSCII_8 - bool "UNSCII 8 (Perfect monospace font)" - select LV_FONT_UNSCII_8 - config LV_FONT_DEFAULT_SMALL_UNSCII_16 - bool "UNSCII 16 (Perfect monospace font)" - select LV_FONT_UNSCII_16 - config LV_FONT_DEFAULT_SMALL_MONTSERRAT12SUBPX - bool "Montserrat 12 sub-pixel" - select LV_FONT_MONTSERRAT12SUBPX - config LV_FONT_DEFAULT_SMALL_MONTSERRAT28COMPRESSED - bool "Montserrat 28 compressed" - select LV_FONT_MONTSERRAT28COMPRESSED - config LV_FONT_DEFAULT_SMALL_DEJAVU_16_PERSIAN_HEBREW - bool "Dejavu 16 Persian, Hebrew, Arabic letters" - select LV_FONT_DEJAVU_16_PERSIAN_HEBREW - config LV_FONT_DEFAULT_SMALL_SIMSUN_16_CJK - bool "Simsun 16 CJK" - select LV_FONT_SIMSUN_16_CJK - endchoice - - choice LV_FONT_DEFAULT_NORMAL - prompt "Select theme default normal font" - default LV_FONT_DEFAULT_NORMAL_MONTSERRAT_16 if !LV_CONF_MINIMAL - default LV_FONT_DEFAULT_NORMAL_UNSCII_8 if LV_CONF_MINIMAL - help - Select theme default normal font - - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_8 - bool "Montserrat 8" - select LV_FONT_MONTSERRAT_8 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_10 - bool "Montserrat 10" - select LV_FONT_MONTSERRAT_10 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_12 - bool "Montserrat 12" - select LV_FONT_MONTSERRAT_12 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_14 - bool "Montserrat 14" - select LV_FONT_MONTSERRAT_14 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_16 - bool "Montserrat 16" - select LV_FONT_MONTSERRAT_16 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_18 - bool "Montserrat 18" - select LV_FONT_MONTSERRAT_18 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_20 - bool "Montserrat 20" - select LV_FONT_MONTSERRAT_20 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_22 - bool "Montserrat 22" - select LV_FONT_MONTSERRAT_22 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_24 - bool "Montserrat 24" - select LV_FONT_MONTSERRAT_24 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_26 - bool "Montserrat 26" - select LV_FONT_MONTSERRAT_26 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_28 - bool "Montserrat 28" - select LV_FONT_MONTSERRAT_28 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_30 - bool "Montserrat 30" - select LV_FONT_MONTSERRAT_30 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_32 - bool "Montserrat 32" - select LV_FONT_MONTSERRAT_32 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_34 - bool "Montserrat 34" - select LV_FONT_MONTSERRAT_34 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_36 - bool "Montserrat 36" - select LV_FONT_MONTSERRAT_36 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_38 - bool "Montserrat 38" - select LV_FONT_MONTSERRAT_38 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_40 - bool "Montserrat 40" - select LV_FONT_MONTSERRAT_40 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_42 - bool "Montserrat 42" - select LV_FONT_MONTSERRAT_42 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_44 - bool "Montserrat 44" - select LV_FONT_MONTSERRAT_44 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_46 - bool "Montserrat 46" - select LV_FONT_MONTSERRAT_46 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT_48 - bool "Montserrat 48" - select LV_FONT_MONTSERRAT_48 - config LV_FONT_DEFAULT_NORMAL_UNSCII_8 - bool "UNSCII 8 (Perfect monospace font)" - select LV_FONT_UNSCII_8 - config LV_FONT_DEFAULT_NORMAL_UNSCII_16 - bool "UNSCII 16 (Perfect monospace font)" - select LV_FONT_UNSCII_16 - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT12SUBPX - bool "Montserrat 12 sub-pixel" - select LV_FONT_MONTSERRAT12SUBPX - config LV_FONT_DEFAULT_NORMAL_MONTSERRAT28COMPRESSED - bool "Montserrat 28 compressed" - select LV_FONT_MONTSERRAT28COMPRESSED - config LV_FONT_DEFAULT_NORMAL_DEJAVU_16_PERSIAN_HEBREW - bool "Dejavu 16 Persian, Hebrew, Arabic letters" - select LV_FONT_DEJAVU_16_PERSIAN_HEBREW - config LV_FONT_DEFAULT_NORMAL_SIMSUN_16_CJK - bool "Simsun 16 CJK" - select LV_FONT_SIMSUN_16_CJK - endchoice - - choice LV_FONT_DEFAULT_SUBTITLE - prompt "Select theme default subtitle font" - default LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_16 if !LV_CONF_MINIMAL - default LV_FONT_DEFAULT_SUBTITLE_UNSCII_8 if LV_CONF_MINIMAL - help - Select theme default subtitle font - - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_8 - bool "Montserrat 8" - select LV_FONT_MONTSERRAT_8 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_10 - bool "Montserrat 10" - select LV_FONT_MONTSERRAT_10 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_12 - bool "Montserrat 12" - select LV_FONT_MONTSERRAT_12 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_14 - bool "Montserrat 14" - select LV_FONT_MONTSERRAT_14 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_16 - bool "Montserrat 16" - select LV_FONT_MONTSERRAT_16 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_18 - bool "Montserrat 18" - select LV_FONT_MONTSERRAT_18 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_20 - bool "Montserrat 20" - select LV_FONT_MONTSERRAT_20 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_22 - bool "Montserrat 22" - select LV_FONT_MONTSERRAT_22 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_24 - bool "Montserrat 24" - select LV_FONT_MONTSERRAT_24 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_26 - bool "Montserrat 26" - select LV_FONT_MONTSERRAT_26 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_28 - bool "Montserrat 28" - select LV_FONT_MONTSERRAT_28 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_30 - bool "Montserrat 30" - select LV_FONT_MONTSERRAT_30 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_32 - bool "Montserrat 32" - select LV_FONT_MONTSERRAT_32 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_34 - bool "Montserrat 34" - select LV_FONT_MONTSERRAT_34 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_36 - bool "Montserrat 36" - select LV_FONT_MONTSERRAT_36 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_38 - bool "Montserrat 38" - select LV_FONT_MONTSERRAT_38 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_40 - bool "Montserrat 40" - select LV_FONT_MONTSERRAT_40 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_42 - bool "Montserrat 42" - select LV_FONT_MONTSERRAT_42 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_44 - bool "Montserrat 44" - select LV_FONT_MONTSERRAT_44 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_46 - bool "Montserrat 46" - select LV_FONT_MONTSERRAT_46 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT_48 - bool "Montserrat 48" - select LV_FONT_MONTSERRAT_48 - config LV_FONT_DEFAULT_SUBTITLE_UNSCII_8 - bool "UNSCII 8 (Perfect monospace font)" - select LV_FONT_UNSCII_8 - config LV_FONT_DEFAULT_SUBTITLE_UNSCII_16 - bool "UNSCII 16 (Perfect monospace font)" - select LV_FONT_UNSCII_16 - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT12SUBPX - bool "Montserrat 12 sub-pixel" - select LV_FONT_MONTSERRAT12SUBPX - config LV_FONT_DEFAULT_SUBTITLE_MONTSERRAT28COMPRESSED - bool "Montserrat 28 compressed" - select LV_FONT_MONTSERRAT28COMPRESSED - config LV_FONT_DEFAULT_SUBTITLE_DEJAVU_16_PERSIAN_HEBREW - bool "Dejavu 16 Persian, Hebrew, Arabic letters" - select LV_FONT_DEJAVU_16_PERSIAN_HEBREW - config LV_FONT_DEFAULT_SUBTITLE_SIMSUN_16_CJK - bool "Simsun 16 CJK" - select LV_FONT_SIMSUN_16_CJK - endchoice - - choice LV_FONT_DEFAULT_TITLE - prompt "Select theme default title font" - default LV_FONT_DEFAULT_TITLE_MONTSERRAT_16 if !LV_CONF_MINIMAL - default LV_FONT_DEFAULT_TITLE_UNSCII_8 if LV_CONF_MINIMAL - help - Select theme default title font - - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_8 - bool "Montserrat 8" - select LV_FONT_MONTSERRAT_8 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_12 - bool "Montserrat 12" - select LV_FONT_MONTSERRAT_12 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_14 - bool "Montserrat 14" - select LV_FONT_MONTSERRAT_14 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_16 - bool "Montserrat 16" - select LV_FONT_MONTSERRAT_16 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_18 - bool "Montserrat 18" - select LV_FONT_MONTSERRAT_18 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_20 - bool "Montserrat 20" - select LV_FONT_MONTSERRAT_20 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_22 - bool "Montserrat 22" - select LV_FONT_MONTSERRAT_22 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_24 - bool "Montserrat 24" - select LV_FONT_MONTSERRAT_24 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_26 - bool "Montserrat 26" - select LV_FONT_MONTSERRAT_26 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_28 - bool "Montserrat 28" - select LV_FONT_MONTSERRAT_28 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_30 - bool "Montserrat 30" - select LV_FONT_MONTSERRAT_30 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_32 - bool "Montserrat 32" - select LV_FONT_MONTSERRAT_32 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_34 - bool "Montserrat 34" - select LV_FONT_MONTSERRAT_34 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_36 - bool "Montserrat 36" - select LV_FONT_MONTSERRAT_36 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_38 - bool "Montserrat 38" - select LV_FONT_MONTSERRAT_38 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_40 - bool "Montserrat 40" - select LV_FONT_MONTSERRAT_40 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_42 - bool "Montserrat 42" - select LV_FONT_MONTSERRAT_42 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_44 - bool "Montserrat 44" - select LV_FONT_MONTSERRAT_44 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_46 - bool "Montserrat 46" - select LV_FONT_MONTSERRAT_46 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT_48 - bool "Montserrat 48" - select LV_FONT_MONTSERRAT_48 - config LV_FONT_DEFAULT_TITLE_UNSCII_8 - bool "UNSCII 8 (Perfect monospace font)" - select LV_FONT_UNSCII_8 - config LV_FONT_DEFAULT_TITLE_UNSCII_16 - bool "UNSCII 16 (Perfect monospace font)" - select LV_FONT_UNSCII_16 - config LV_FONT_DEFAULT_TITLE_MONTSERRAT12SUBPX - bool "Montserrat 12 sub-pixel" - select LV_FONT_MONTSERRAT12SUBPX - config LV_FONT_DEFAULT_TITLE_MONTSERRAT28COMPRESSED - bool "Montserrat 28 compressed" - select LV_FONT_MONTSERRAT28COMPRESSED - config LV_FONT_DEFAULT_TITLE_DEJAVU_16_PERSIAN_HEBREW - bool "Dejavu 16 Persian, Hebrew, Arabic letters" - select LV_FONT_DEJAVU_16_PERSIAN_HEBREW - config LV_FONT_DEFAULT_TITLE_SIMSUN_16_CJK - bool "Simsun 16 CJK" - select LV_FONT_SIMSUN_16_CJK - endchoice - endmenu - - menu "Theme usage" - menu "Enable theme usage, always enable at least one theme" - config LV_THEME_EMPTY - bool "Empty: No theme, you can apply your styles as you need." - default y if LV_CONF_MINIMAL - config LV_THEME_TEMPLATE - bool "Template: Simple to create your theme based on it." - config LV_THEME_MATERIAL - bool "Material: A fast and impressive theme." - default y if !LV_CONF_MINIMAL - config LV_THEME_MONO - bool "Mono: Mono-color theme for monochrome displays" - endmenu - - choice LV_THEME_DEFAULT_INIT - prompt "Select theme default init" - default LV_THEME_DEFAULT_INIT_MATERIAL if !LV_CONF_MINIMAL - default LV_THEME_DEFAULT_INIT_EMPTY if LV_CONF_MINIMAL - help - Select theme default init - - config LV_THEME_DEFAULT_INIT_EMPTY - bool "Default init for empty theme" - select LV_THEME_EMPTY - config LV_THEME_DEFAULT_INIT_TEMPLATE - bool "Default init for template theme" - select LV_THEME_TEMPLATE - config LV_THEME_DEFAULT_INIT_MATERIAL - bool "Default init for material theme" - select LV_THEME_MATERIAL - config LV_THEME_DEFAULT_INIT_MONO - bool "Default init for mono theme" - select LV_THEME_MONO - endchoice - - config LV_THEME_DEFAULT_COLOR_PRIMARY - hex "Select theme default primary color" - range 0x000000 0xFFFFFF - default 0xFF0000 if !LV_THEME_DEFAULT_INIT_MONO - default 0x000000 if LV_THEME_DEFAULT_INIT_MONO - help - See lv_misc/lv_color.h for some color values examples. - When using LV_THEME_MONO the suggested values to use are - 0x000000 (LV_COLOR_BLACK) or 0xFFFFFF (LV_COLOR_WHITE). - If LV_THEME_DEFAULT_COLOR_PRIMARY is 0x000000 (LV_COLOR_BLACK) - the texts and borders will be black and the background will be - white, otherwise the colors are inverted. - - config LV_THEME_DEFAULT_COLOR_SECONDARY - hex "Select theme default secondary color" - range 0x000000 0xFFFFFF - default 0x0000FF if !LV_THEME_DEFAULT_INIT_MONO - default 0xFFFFFF if LV_THEME_DEFAULT_INIT_MONO - help - See lv_misc/lv_color.h for some color values examples. - When using LV_THEME_MONO the suggested values to use are - 0x000000 (LV_COLOR_BLACK) or 0xFFFFFF (LV_COLOR_WHITE). - If LV_THEME_DEFAULT_COLOR_PRIMARY is 0x000000 (LV_COLOR_BLACK) - the texts and borders will be black and the background will be - white, otherwise the colors are inverted. - - choice LV_THEME_DEFAULT_FLAG - depends on LV_THEME_MATERIAL - - prompt "Select theme default flag" - default LV_THEME_DEFAULT_FLAG_LIGHT - help - Select theme default flag - - config LV_THEME_DEFAULT_FLAG_LIGHT - bool "Light theme" - config LV_THEME_DEFAULT_FLAG_DARK - bool "Dark theme" - endchoice - - endmenu - - menu "Text Settings" - choice LV_TXT_ENC - prompt "Select a character encoding for strings" - help - Select a character encoding for strings. Your IDE or editor should have the same character encoding. - default LV_TXT_ENC_UTF8 if !LV_CONF_MINIMAL - default LV_TXT_ENC_ASCII if LV_CONF_MINIMAL - - config LV_TXT_ENC_UTF8 - bool "UTF8" - config LV_TXT_ENC_ASCII - bool "ASCII" - endchoice - - config LV_TXT_BREAK_CHARS - string "Can break (wrap) texts on these chars" - default " ,.;:-_" - - config LV_TXT_LINE_BREAK_LONG_LEN - int "Line break long length" - default 0 - help - If a word is at least this long, will break wherever 'prettiest'. - To disable, set to a value <= 0. - - config LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN - int "Min num chars before break" - default 3 - depends on LV_TXT_LINE_BREAK_LONG_LEN > 0 - help - Minimum number of characters in a long word to put on a line before a break. - - config LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN - int "Min num chars after break" - default 3 - depends on LV_TXT_LINE_BREAK_LONG_LEN > 0 - help - Minimum number of characters in a long word to put on a line after a break. - - config LV_TXT_COLOR_CMD - string "The control character to use for signalling text recoloring" - default "#" - - config LV_USE_BIDI - bool "Support bidirectional texts" - help - Allows mixing Left-to-Right and Right-to-Left texts. - The direction will be processed according to the Unicode Bidirectional Algorithm: - https://www.w3.org/International/articles/inline-bidi-markup/uba-basics - - choice - prompt "Set the default BIDI direction" - default LV_BIDI_DIR_AUTO - depends on LV_USE_BIDI - - config LV_BIDI_DIR_LTR - bool "Left-to-Right" - config LV_BIDI_DIR_RTL - bool "Right-to-Left" - config LV_BIDI_DIR_AUTO - bool "Detect texts base direction" - endchoice - - config LV_USE_ARABIC_PERSIAN_CHARS - bool "Enable Arabic/Persian processing" - help - In these languages characters should be replaced with - an other form based on their position in the text. - - config LV_SPRINTF_CUSTOM - bool "Change the built-in (v)snprintf functions" - - config LV_SPRINTF_DISABLE_FLOAT - bool "Disable float in built-in (v)snprintf functions" if !LV_SPRINTF_CUSTOM - endmenu - - menu "Widgets" - config LV_USE_OBJ_REALIGN - bool "Enable `lv_obj_realign()` based on `lv_obj_align()` parameters." - default y if !LV_CONF_MINIMAL - - choice - prompt "Enable to make the object clickable on a larger area." - default LV_USE_EXT_CLICK_AREA_TINY - - config LV_USE_EXT_CLICK_AREA_OFF - bool "Disable this feature." - config LV_USE_EXT_CLICK_AREA_TINY - bool "The extra area can be adjusted horizontally and vertically (0..255px)." - config LV_USE_EXT_CLICK_AREA_FULL - bool "The extra area can be adjusted in all 4 directions (-32k..+32k px)." - endchoice - - config LV_USE_ARC - bool "Arc." - default y if !LV_CONF_MINIMAL - config LV_USE_BAR - bool "Bar." - default y if !LV_CONF_MINIMAL - config LV_USE_BTN - bool "Button. Dependencies: lv_cont." - select LV_USE_CONT - default y if !LV_CONF_MINIMAL - config LV_USE_BTNMATRIX - bool "Button matrix." - default y if !LV_CONF_MINIMAL - config LV_USE_CALENDAR - bool "Calendar." - default y if !LV_CONF_MINIMAL - config LV_CALENDAR_WEEK_STARTS_MONDAY - bool "Calendar week starts monday." - depends on LV_USE_CALENDAR - config LV_USE_CANVAS - bool "Canvas. Dependencies: lv_img." - select LV_USE_IMG - default y if !LV_CONF_MINIMAL - config LV_USE_CHECKBOX - bool "Check Box. Dependencies: lv_btn, lv_label." - select LV_USE_BTN - select LV_USE_LABEL - default y if !LV_CONF_MINIMAL - config LV_USE_CHART - bool "Chart." - default y if !LV_CONF_MINIMAL - config LV_CHART_AXIS_TICK_MAX_LEN - int "Chart axis tick label max len." - depends on LV_USE_CHART - default 256 - config LV_USE_CONT - bool "Container." - default y if !LV_CONF_MINIMAL - config LV_USE_CPICKER - bool "Color picker." - default y if !LV_CONF_MINIMAL - config LV_USE_DROPDOWN - bool "Drop down list. Dependencies: lv_page, lv_label, lv_symbol_def.h." - select LV_USE_PAGE - select LV_USE_LABEL - default y if !LV_CONF_MINIMAL - config LV_DROPDOWN_DEF_ANIM_TIME - int "Drop down animation time. 0: no animation." - depends on LV_USE_DROPDOWN - default 200 - config LV_USE_GAUGE - bool "Gauge. Dependencies: lv_bar, lv_linemeter." - select LV_USE_BAR - select LV_USE_LINEMETER - default y if !LV_CONF_MINIMAL - config LV_USE_IMG - bool "Image. Dependencies: lv_label." - select LV_USE_LABEL - default y if !LV_CONF_MINIMAL - config LV_USE_IMGBTN - bool "Image button. Dependencies: lv_btn." - select LV_USE_BTN - default y if !LV_CONF_MINIMAL - config LV_IMGBTN_TILED - bool "Use imgbtn tiled." - depends on LV_USE_IMGBTN - config LV_USE_KEYBOARD - bool "Keyboard. Dependencies: lv_btnm." - select LV_USE_BTNM - default y if !LV_CONF_MINIMAL - config LV_USE_LABEL - bool "Label." - default y if !LV_CONF_MINIMAL - config LV_LABEL_DEF_SCROLL_SPEED - int "Hor. or ver. scroll speed [px/sec] in LV_LABEL_LONG_ROLL/ROLL_CIRC mode." - default 25 - depends on LV_USE_LABEL - config LV_LABEL_WAIT_CHAR_COUNT - int "Waiting period at beginning/end of animation cycle." - default 3 - depends on LV_USE_LABEL - config LV_LABEL_TEXT_SEL - bool "Enable selecting text of the label." - depends on LV_USE_LABEL - config LV_LABEL_LONG_TXT_HINT - bool "Store extra some info in labels (12 bytes) to speed up drawing of very long texts." - depends on LV_USE_LABEL - config LV_USE_LED - bool "LED." - default y if !LV_CONF_MINIMAL - config LV_LED_BRIGHT_MIN - int "LED minimal brightness." - range 0 255 - default 120 - depends on LV_USE_LED - config LV_LED_BRIGHT_MAX - int "LED maximal brightness." - range 0 255 - default 255 - depends on LV_USE_LED - config LV_USE_LINE - bool "Line." - default y if !LV_CONF_MINIMAL - config LV_USE_LIST - bool "List. Dependencies: lv_page, lv_btn, lv_label, lv_img." - select LV_USE_PAGE - select LV_USE_BTN - select LV_USE_LABEL - select LV_USE_IMG - default y if !LV_CONF_MINIMAL - config LV_LIST_DEF_ANIM_TIME - int "List default animation time of focusing to a list element [ms]. 0: no animation." - default 100 - depends on LV_USE_LIST - config LV_USE_LINEMETER - bool "Line meter." - default y if !LV_CONF_MINIMAL - choice - prompt "Draw line more precisely at cost of performance." - default LV_LINEMETER_PRECISE_NO_EXTRA_PRECISION - depends on LV_USE_LINEMETER - config LV_LINEMETER_PRECISE_NO_EXTRA_PRECISION - bool "0: No extra precision." - config LV_LINEMETER_PRECISE_SOME_EXTRA_PRECISION - bool "1: Some extra precision." - config LV_LINEMETER_PRECISE_BEST_PRECISION - bool "2: Best precision." - endchoice - config LV_USE_OBJMASK - bool "Mask." - default y if !LV_CONF_MINIMAL - config LV_USE_MSGBOX - bool "Message box. Dependencies: lv_rect, lv_btnm, lv_label." - select LV_USE_RECT - select LV_USE_BTNM - select LV_USE_LABEL - default y if !LV_CONF_MINIMAL - config LV_USE_PAGE - bool "Page. Dependencies: lv_cont." - select LV_USE_CONT - default y if !LV_CONF_MINIMAL - config LV_PAGE_DEF_ANIM_TIME - int "Focus default animation time [ms]. 0: No animation." - default 100 - depends on LV_USE_PAGE - config LV_USE_SPINNER - bool "Spinner. Dependencies: lv_arc, lv_anim." - select LV_USE_ARC - select LV_USE_ANIM - default y if !LV_CONF_MINIMAL - config LV_SPINNER_DEF_ARC_LENGTH - int "Spinner def. arc length [deg]." - default 60 - depends on LV_USE_SPINNER - config LV_SPINNER_DEF_SPIN_TIME - int "Spinner def. spin time [ms]." - default 1000 - depends on LV_USE_SPINNER - choice - prompt "Type of spinner (animation type)." - default LV_SPINNER_TYPE_SPINNING_ARC - depends on LV_USE_SPINNER - config LV_SPINNER_TYPE_SPINNING_ARC - bool "0: Spinner type spinning arc." - config LV_SPINNER_TYPE_FILLSPIN_ARC - bool "0: Spinner type fillspin arc." - config LV_SPINNER_TYPE_CONSTANT_ARC - bool "0: Spinner type constant arc." - endchoice - config LV_USE_ROLLER - bool "Roller. Dependencies: lv_page." - select LV_USE_PAGE - default y if !LV_CONF_MINIMAL - config LV_ROLLER_DEF_ANIM_TIME - int "Focus animation time [ms]. 0: no animation." - default 200 - depends on LV_USE_ROLLER - config LV_ROLLER_INF_PAGES - int "Number of extra 'pages' when the controller is infinite." - default 7 - depends on LV_USE_ROLLER - config LV_USE_SLIDER - bool "Slider. Dependencies: lv_bar." - select LV_USE_BAR - default y if !LV_CONF_MINIMAL - config LV_USE_SPINBOX - bool "Spinbox. Dependencies: lv_ta." - select LV_USE_TEXTAREA - default y if !LV_CONF_MINIMAL - config LV_USE_SWITCH - bool "Switch. Dependencies: lv_slider." - select LV_USE_SLIDER - default y if !LV_CONF_MINIMAL - config LV_USE_TEXTAREA - bool "Text area. Dependencies: lv_label, lv_page." - select LV_USE_LABEL - select LV_USE_PAGE - default y if !LV_CONF_MINIMAL - config LV_TEXTAREA_DEF_CURSOR_BLINK_TIME - int "Text area def. cursor blink time [ms]." - default 400 - depends on LV_USE_TEXTAREA - config LV_TEXTAREA_DEF_PWN_SHOW_TIME - int "Text area def. pwn show time [ms]." - default 1500 - depends on LV_USE_TEXTAREA - config LV_USE_TABLE - bool "Table. Dependencies: lv_label." - select LV_USE_LABEL - default y if !LV_CONF_MINIMAL - config LV_TABLE_COL_MAX - int "Table col max." - default 12 - depends on LV_USE_TABLE - config LV_TABLE_CELL_STYLE_CNT - int "Table cell style count." - default 4 - depends on LV_USE_TABLE - config LV_USE_TABVIEW - bool "Tab. Dependencies: lv_page, lv_btnm." - select LV_USE_PAGE - select LV_USE_BTNM - default y if !LV_CONF_MINIMAL - config LV_TABVIEW_DEF_ANIM_TIME - int "Time of slide animation [ms]. 0: No animation." - default 300 - depends on LV_USE_TABVIEW - config LV_USE_TILEVIEW - bool "Tileview. Dependencies: lv_page." - select LV_USE_PAGE - default y if !LV_CONF_MINIMAL - config LV_TILEVIEW_DEF_ANIM_TIME - int "Time of slide animation [ms]. 0: No animation." - default 300 - depends on LV_USE_TILEVIEW - config LV_USE_WIN - bool "Window. Dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page." - select LV_USE_CONT - select LV_USE_BTN - select LV_USE_LABEL - select LV_USE_IMG - select LV_USE_PAGE - default y if !LV_CONF_MINIMAL - endmenu - -endmenu diff --git a/lib/libesp32_lvgl/LVGL/component.mk b/lib/libesp32_lvgl/LVGL/component.mk deleted file mode 100644 index 5d07eb7ef..000000000 --- a/lib/libesp32_lvgl/LVGL/component.mk +++ /dev/null @@ -1,23 +0,0 @@ -# ESP-IDF component file for make based commands - -COMPONENT_SRCDIRS := . -COMPONENT_SRCDIRS += src -COMPONENT_SRCDIRS += src/lv_core -COMPONENT_SRCDIRS += src/lv_draw -COMPONENT_SRCDIRS += src/lv_font -COMPONENT_SRCDIRS += src/lv_gpu -COMPONENT_SRCDIRS += src/lv_hal -COMPONENT_SRCDIRS += src/lv_misc -COMPONENT_SRCDIRS += src/lv_themes -COMPONENT_SRCDIRS += src/lv_widgets - -COMPONENT_ADD_INCLUDEDIRS := . -COMPONENT_ADD_INCLUDEDIRS += src -COMPONENT_ADD_INCLUDEDIRS += src/lv_core -COMPONENT_ADD_INCLUDEDIRS += src/lv_draw -COMPONENT_ADD_INCLUDEDIRS += src/lv_font -COMPONENT_ADD_INCLUDEDIRS += src/lv_gpu -COMPONENT_ADD_INCLUDEDIRS += src/lv_hal -COMPONENT_ADD_INCLUDEDIRS += src/lv_misc -COMPONENT_ADD_INCLUDEDIRS += src/lv_themes -COMPONENT_ADD_INCLUDEDIRS += src/lv_widgets diff --git a/lib/libesp32_lvgl/LVGL/docs/CODE_OF_CONDUCT.md b/lib/libesp32_lvgl/LVGL/docs/CODE_OF_CONDUCT.md deleted file mode 100644 index c7d7eeb14..000000000 --- a/lib/libesp32_lvgl/LVGL/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [atom@github.com](mailto:atom@github.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/lib/libesp32_lvgl/LVGL/docs/CODING_STYLE.md b/lib/libesp32_lvgl/LVGL/docs/CODING_STYLE.md deleted file mode 100644 index 46bc63757..000000000 --- a/lib/libesp32_lvgl/LVGL/docs/CODING_STYLE.md +++ /dev/null @@ -1,89 +0,0 @@ -# Coding style - -## File format -Use [lv_misc/lv_templ.c](https://github.com/lvgl/lvgl/blob/master/src/lv_misc/lv_templ.c) and [lv_misc/lv_templ.h](https://github.com/lvgl/lvgl/blob/master/src/lv_misc/lv_templ.h) - -## Naming conventions -* Words are separated by '_' -* In variable and function names use only lower case letters (e.g. *height_tmp*) -* In enums and defines use only upper case letters (e.g. *e.g. MAX_LINE_NUM*) -* Global names (API): - * starts with *lv* - * followed by module name: *btn*, *label*, *style* etc. - * followed by the action (for functions): *set*, *get*, *refr* etc. - * closed with the subject: *name*, *size*, *state* etc. -* Typedefs - * prefer `typedef struct` and `typedef enum` instead of `struct name` and `enum name` - * always end `typedef struct` and `typedef enum` type names with `_t` -* Abbreviations: - * Only words longer or equal than 6 characters can be abbreviated. - * Abbreviate only if it makes the word at least half as long - * Use only very straightforward and well-known abbreviations (e.g. pos: position, def: default, btn: button) - -## Coding guide -* Functions: - * Try to write function shorter than is 50 lines - * Always shorter than 200 lines (except very straightforwards) -* Variables: - * One line, one declaration (BAD: char x, y;) - * Use `` (*uint8_t*, *int32_t* etc) - * Declare variables where needed (not all at function start) - * Use the smallest required scope - * Variables in a file (outside functions) are always *static* - * Do not use global variables (use functions to set/get static variables) - -## Comments -Before every function have a comment like this: - -```c -/** - * Return with the screen of an object - * @param obj pointer to an object - * @return pointer to a screen - */ -lv_obj_t * lv_obj_get_scr(lv_obj_t * obj); -``` - -Always use `/* Something */` format and NOT `//Something` - -Write readable code to avoid descriptive comments like: -`x++; /* Add 1 to x */`. -The code should show clearly what you are doing. - -You should write **why** have you done this: -`x++; /*Because of closing '\0' of the string */` - -Short "code summaries" of a few lines are accepted. E.g. `/*Calculate the new coordinates*/` - -In comments use \` \` when referring to a variable. E.g. ``/*Update the value of `x_act`*/`` - -### Formatting -Here is example to show bracket placing and using of white spaces: -```c -/** - * Set a new text for a label. Memory will be allocated to store the text by the label. - * @param label pointer to a label object - * @param text '\0' terminated character string. NULL to refresh with the current text. - */ -void lv_label_set_text(lv_obj_t * label, const char * text) -{ /* Main brackets of functions in new line*/ - - if(label == NULL) return; /*No bracket only if the command is inline with the if statement*/ - - lv_obj_inv(label); - - lv_label_ext_t * ext = lv_obj_get_ext(label); - - /*Comment before a section */ - if(text == ext->txt || text == NULL) { /*Bracket of statements start inline*/ - lv_label_refr_text(label); - return; - } - - ... -} -``` - -Use 4 spaces indentation instead of tab. - -You can use **astyle** to format the code. Run `code-formatter.sh` from the `scrips` folder. diff --git a/lib/libesp32_lvgl/LVGL/docs/CONTRIBUTING.md b/lib/libesp32_lvgl/LVGL/docs/CONTRIBUTING.md deleted file mode 100644 index 553cfa51f..000000000 --- a/lib/libesp32_lvgl/LVGL/docs/CONTRIBUTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Contributing to LVGL - -Thank you for considering contributing to LVGL. - -For a detailed description of contribution opportunities, please visit the [Contributing](https://docs.lvgl.io/latest/en/html/contributing/index.html) section of the documentation. diff --git a/lib/libesp32_lvgl/LVGL/docs/ROADMAP.md b/lib/libesp32_lvgl/LVGL/docs/ROADMAP.md deleted file mode 100644 index a606894f9..000000000 --- a/lib/libesp32_lvgl/LVGL/docs/ROADMAP.md +++ /dev/null @@ -1,63 +0,0 @@ -# Roadmap - -This is a summary for thenew fatures of the major releases and a collection of ideas. - -This list indicates only the current intention and can be changed. - -## v8 -Planned to November/December 2020 -- Create an `lv_components` repository for compley widgets - - It makes the core LVGL leaner - - In `lv_components` we can have a lot and specific widgets - - Good place for contribution -- New scrolling: - - See [feat/new-scroll](https://github.com/lvgl/lvgl/tree/feat/new-scroll) branch and [#1614](https://github.com/lvgl/lvgl/issues/1614)) issue. - - Remove `lv_page` and support scrolling on `lv_obj` - - Support "elastic" scrolling when scrolled in - - Support scroll chaining among any objects types (not only `lv_pages`s) - - Remove `lv_drag`. Similar effect can be achieved by setting the position in `LV_EVENT_PRESSING` - - Add snapping - - Add snap stop to scroll max 1 snap point - - Already working -- New layouts: - - See [#1615](https://github.com/lvgl/lvgl/issues/1615) issue - - [CSS Grid](https://css-tricks.com/snippets/css/a-guide-to-grid/)-like layout support - - [CSS Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)-like layout support - - Remove `lv_cont` and support layouts on `lv_obj` -- Simplified File system interface ([feat/new_fs_api](https://github.com/lvgl/lvgl/tree/feat/new-fs-api) branch) to make porting easier - - Work in progress -- Remove the align parameter from `lv_canvas_draw_text` -- Make the copy parameter obsolate in create functions -- Optimize and simplifie styles [#1832](https://github.com/lvgl/lvgl/issues/1832) -- Use a more generic inheritenace [#1919](https://github.com/lvgl/lvgl/issues/1919) - -## v8.x -- Add radio button widget -- Unit testing (gtest?). See [#1658](https://github.com/lvgl/lvgl/issues/1658) -- Benchmarking (gem5?). See [#1660](https://github.com/lvgl/lvgl/issues/1660) -- chart: pre-delete `X` pint after the lastly set -- chart: autoscroll to the right - -## v9 -- Simplify `group`s. Discussion is [here](https://forum.lvgl.io/t/lv-group-tabindex/2927/3). -- Consider direct binary font format support -- Optimize line and circle drawing and masking -- Reconsider color format management for run time color format setting, and custom color format usage. (Also [RGB888](https://github.com/lvgl/lvgl/issues/1722)) -- 9-patch support for `lv_imgbtn`. -- Handle stride. See [#1858](https://github.com/lvgl/lvgl/issues/1858) -- Make gradients more versatile -- Make image transformations more versatile -- Allow snapshoting object to tranfrom them to images - -## Ideas -- Use [generate-changelog](https://github.com/lob/generate-changelog) to automatically generate changelog -- lv_mem_alloc_aligned(size, align) -- Text node. See [#1701](https://github.com/lvgl/lvgl/issues/1701#issuecomment-699479408) -- CPP binding. See [Forum](https://forum.lvgl.io/t/is-it-possible-to-officially-support-optional-cpp-api/2736) -- Optimize font decompression -- Switch to RGBA colors in styles -- Need coverage report for tests -- Need static analyze (via coverity.io or somehing else) -- Support dot_begin and dot_middle long modes for labels -- Add new label alignment modes. [#1656](https://github.com/lvgl/lvgl/issues/1656) -- Support larger images: [#1892](https://github.com/lvgl/lvgl/issues/1892) diff --git a/lib/libesp32_lvgl/LVGL/examples/LVGL_Arduino.ino b/lib/libesp32_lvgl/LVGL/examples/LVGL_Arduino.ino deleted file mode 100644 index 6e76e15dc..000000000 --- a/lib/libesp32_lvgl/LVGL/examples/LVGL_Arduino.ino +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include - -TFT_eSPI tft = TFT_eSPI(); /* TFT instance */ -static lv_disp_buf_t disp_buf; -static lv_color_t buf[LV_HOR_RES_MAX * 10]; - -#if USE_LV_LOG != 0 -/* Serial debugging */ -void my_print(lv_log_level_t level, const char * file, uint32_t line, const char * dsc) -{ - - Serial.printf("%s@%d->%s\r\n", file, line, dsc); - Serial.flush(); -} -#endif - -/* Display flushing */ -void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) -{ - uint32_t w = (area->x2 - area->x1 + 1); - uint32_t h = (area->y2 - area->y1 + 1); - - tft.startWrite(); - tft.setAddrWindow(area->x1, area->y1, w, h); - tft.pushColors(&color_p->full, w * h, true); - tft.endWrite(); - - lv_disp_flush_ready(disp); -} - -/*Read the touchpad*/ -bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) -{ - uint16_t touchX, touchY; - - bool touched = tft.getTouch(&touchX, &touchY, 600); - - if(!touched) { - data->state = LV_INDEV_STATE_REL; - } else { - data->state = LV_INDEV_STATE_PR; - - /*Set the coordinates*/ - data->point.x = touchX; - data->point.y = touchY; - - Serial.print("Data x"); - Serial.println(touchX); - - Serial.print("Data y"); - Serial.println(touchY); - } - - return false; /*Return `false` because we are not buffering and no more data to read*/ -} - -void setup() -{ - Serial.begin(115200); /* prepare for possible serial debug */ - - lv_init(); - -#if USE_LV_LOG != 0 - lv_log_register_print_cb(my_print); /* register print function for debugging */ -#endif - - tft.begin(); /* TFT init */ - tft.setRotation(1); /* Landscape orientation */ - - uint16_t calData[5] = { 275, 3620, 264, 3532, 1 }; - tft.setTouch(calData); - - lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10); - - /*Initialize the display*/ - lv_disp_drv_t disp_drv; - lv_disp_drv_init(&disp_drv); - disp_drv.hor_res = 320; - disp_drv.ver_res = 240; - disp_drv.flush_cb = my_disp_flush; - disp_drv.buffer = &disp_buf; - lv_disp_drv_register(&disp_drv); - - /*Initialize the (dummy) input device driver*/ - lv_indev_drv_t indev_drv; - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_POINTER; - indev_drv.read_cb = my_touchpad_read; - lv_indev_drv_register(&indev_drv); - - /* Try an example from the lv_examples repository - * https://github.com/lvgl/lv_examples*/ - lv_ex_btn_1(); -} - -void loop() -{ - - lv_task_handler(); /* let the GUI do its work */ - delay(5); -} diff --git a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.c b/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.c deleted file mode 100644 index 20ce22ae8..000000000 --- a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.c +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @file lv_port_disp_templ.c - * - */ - - /*Copy this file as "lv_port_disp.c" and set this value to "1" to enable content*/ -#if 0 - -/********************* - * INCLUDES - *********************/ -#include "lv_port_disp_template.h" - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/********************** - * STATIC PROTOTYPES - **********************/ -static void disp_init(void); - -static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p); -#if LV_USE_GPU -static void gpu_blend(lv_disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa); -static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width, - const lv_area_t * fill_area, lv_color_t color); -#endif - -/********************** - * STATIC VARIABLES - **********************/ - -/********************** - * MACROS - **********************/ - -/********************** - * GLOBAL FUNCTIONS - **********************/ - -void lv_port_disp_init(void) -{ - /*------------------------- - * Initialize your display - * -----------------------*/ - disp_init(); - - /*----------------------------- - * Create a buffer for drawing - *----------------------------*/ - - /* LVGL requires a buffer where it internally draws the widgets. - * Later this buffer will passed your display drivers `flush_cb` to copy its content to your display. - * The buffer has to be greater than 1 display row - * - * There are three buffering configurations: - * 1. Create ONE buffer with some rows: - * LVGL will draw the display's content here and writes it to your display - * - * 2. Create TWO buffer with some rows: - * LVGL will draw the display's content to a buffer and writes it your display. - * You should use DMA to write the buffer's content to the display. - * It will enable LVGL to draw the next part of the screen to the other buffer while - * the data is being sent form the first buffer. It makes rendering and flushing parallel. - * - * 3. Create TWO screen-sized buffer: - * Similar to 2) but the buffer have to be screen sized. When LVGL is ready it will give the - * whole frame to display. This way you only need to change the frame buffer's address instead of - * copying the pixels. - * */ - - /* Example for 1) */ - static lv_disp_buf_t draw_buf_dsc_1; - static lv_color_t draw_buf_1[LV_HOR_RES_MAX * 10]; /*A buffer for 10 rows*/ - lv_disp_buf_init(&draw_buf_dsc_1, draw_buf_1, NULL, LV_HOR_RES_MAX * 10); /*Initialize the display buffer*/ - - /* Example for 2) */ - static lv_disp_buf_t draw_buf_dsc_2; - static lv_color_t draw_buf_2_1[LV_HOR_RES_MAX * 10]; /*A buffer for 10 rows*/ - static lv_color_t draw_buf_2_2[LV_HOR_RES_MAX * 10]; /*An other buffer for 10 rows*/ - lv_disp_buf_init(&draw_buf_dsc_2, draw_buf_2_1, draw_buf_2_2, LV_HOR_RES_MAX * 10); /*Initialize the display buffer*/ - - /* Example for 3) */ - static lv_disp_buf_t draw_buf_dsc_3; - static lv_color_t draw_buf_3_1[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*A screen sized buffer*/ - static lv_color_t draw_buf_3_2[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*An other screen sized buffer*/ - lv_disp_buf_init(&draw_buf_dsc_3, draw_buf_3_1, draw_buf_3_2, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/ - - /*----------------------------------- - * Register the display in LVGL - *----------------------------------*/ - - lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ - lv_disp_drv_init(&disp_drv); /*Basic initialization*/ - - /*Set up the functions to access to your display*/ - - /*Set the resolution of the display*/ - disp_drv.hor_res = 480; - disp_drv.ver_res = 320; - - /*Used to copy the buffer's content to the display*/ - disp_drv.flush_cb = disp_flush; - - /*Set a display buffer*/ - disp_drv.buffer = &draw_buf_dsc_1; - -#if LV_USE_GPU - /*Optionally add functions to access the GPU. (Only in buffered mode, LV_VDB_SIZE != 0)*/ - - /*Blend two color array using opacity*/ - disp_drv.gpu_blend_cb = gpu_blend; - - /*Fill a memory array with a color*/ - disp_drv.gpu_fill_cb = gpu_fill; -#endif - - /*Finally register the driver*/ - lv_disp_drv_register(&disp_drv); -} - -/********************** - * STATIC FUNCTIONS - **********************/ - -/* Initialize your display and the required peripherals. */ -static void disp_init(void) -{ - /*You code here*/ -} - -/* Flush the content of the internal buffer the specific area on the display - * You can use DMA or any hardware acceleration to do this operation in the background but - * 'lv_disp_flush_ready()' has to be called when finished. */ -static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) -{ - /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/ - - int32_t x; - int32_t y; - for(y = area->y1; y <= area->y2; y++) { - for(x = area->x1; x <= area->x2; x++) { - /* Put a pixel to the display. For example: */ - /* put_px(x, y, *color_p)*/ - color_p++; - } - } - - /* IMPORTANT!!! - * Inform the graphics library that you are ready with the flushing*/ - lv_disp_flush_ready(disp_drv); -} - -/*OPTIONAL: GPU INTERFACE*/ -#if LV_USE_GPU - -/* If your MCU has hardware accelerator (GPU) then you can use it to blend to memories using opacity - * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/ -static void gpu_blend(lv_disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa) -{ - /*It's an example code which should be done by your GPU*/ - uint32_t i; - for(i = 0; i < length; i++) { - dest[i] = lv_color_mix(dest[i], src[i], opa); - } -} - -/* If your MCU has hardware accelerator (GPU) then you can use it to fill a memory with a color - * It can be used only in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/ -static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t dest_width, - const lv_area_t * fill_area, lv_color_t color) -{ - /*It's an example code which should be done by your GPU*/ - int32_t x, y; - dest_buf += dest_width * fill_area->y1; /*Go to the first line*/ - - for(y = fill_area->y1; y <= fill_area->y2; y++) { - for(x = fill_area->x1; x <= fill_area->x2; x++) { - dest_buf[x] = color; - } - dest_buf+=dest_width; /*Go to the next line*/ - } -} - -#endif /*LV_USE_GPU*/ - -#else /* Enable this file at the top */ - -/* This dummy typedef exists purely to silence -Wpedantic. */ -typedef int keep_pedantic_happy; -#endif diff --git a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.h b/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.h deleted file mode 100644 index 93e51cc26..000000000 --- a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_disp_template.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @file lv_port_disp_templ.h - * - */ - - /*Copy this file as "lv_port_disp.h" and set this value to "1" to enable content*/ -#if 0 - -#ifndef LV_PORT_DISP_TEMPL_H -#define LV_PORT_DISP_TEMPL_H - -#ifdef __cplusplus -extern "C" { -#endif - -/********************* - * INCLUDES - *********************/ -#include "lvgl/lvgl.h" - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/********************** - * GLOBAL PROTOTYPES - **********************/ - -/********************** - * MACROS - **********************/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /*LV_PORT_DISP_TEMPL_H*/ - -#endif /*Disable/Enable content*/ diff --git a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_fs_template.c b/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_fs_template.c deleted file mode 100644 index c8f5fe21b..000000000 --- a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_fs_template.c +++ /dev/null @@ -1,377 +0,0 @@ -/** - * @file lv_port_fs_templ.c - * - */ - - /*Copy this file as "lv_port_fs.c" and set this value to "1" to enable content*/ -#if 0 - -/********************* - * INCLUDES - *********************/ -#include "lv_port_fs_template.h" - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/* Create a type to store the required data about your file. - * If you are using a File System library - * it already should have a File type. - * For example FatFS has `FIL`. In this case use `typedef FIL file_t`*/ -typedef struct { - /*Add the data you need to store about a file*/ - uint32_t dummy1; - uint32_t dummy2; -}file_t; - -/*Similarly to `file_t` create a type for directory reading too */ -typedef struct { - /*Add the data you need to store about directory reading*/ - uint32_t dummy1; - uint32_t dummy2; -}dir_t; - -/********************** - * STATIC PROTOTYPES - **********************/ -static void fs_init(void); - -static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode); -static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p); -static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br); -static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw); -static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos); -static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * size_p); -static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p); -static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path); -static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p); -static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const char * newname); -static lv_fs_res_t fs_free (lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p); -static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char *path); -static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn); -static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p); - -/********************** - * STATIC VARIABLES - **********************/ - -/********************** - * GLOBAL PROTOTYPES - **********************/ - -/********************** - * MACROS - **********************/ - -/********************** - * GLOBAL FUNCTIONS - **********************/ - -void lv_port_fs_init(void) -{ - /*---------------------------------------------------- - * Initialize your storage device and File System - * -------------------------------------------------*/ - fs_init(); - - /*--------------------------------------------------- - * Register the file system interface in LVGL - *--------------------------------------------------*/ - - /* Add a simple drive to open images */ - lv_fs_drv_t fs_drv; - lv_fs_drv_init(&fs_drv); - - /*Set up fields...*/ - fs_drv.file_size = sizeof(file_t); - fs_drv.letter = 'P'; - fs_drv.open_cb = fs_open; - fs_drv.close_cb = fs_close; - fs_drv.read_cb = fs_read; - fs_drv.write_cb = fs_write; - fs_drv.seek_cb = fs_seek; - fs_drv.tell_cb = fs_tell; - fs_drv.free_space_cb = fs_free; - fs_drv.size_cb = fs_size; - fs_drv.remove_cb = fs_remove; - fs_drv.rename_cb = fs_rename; - fs_drv.trunc_cb = fs_trunc; - - fs_drv.rddir_size = sizeof(dir_t); - fs_drv.dir_close_cb = fs_dir_close; - fs_drv.dir_open_cb = fs_dir_open; - fs_drv.dir_read_cb = fs_dir_read; - - lv_fs_drv_register(&fs_drv); -} - -/********************** - * STATIC FUNCTIONS - **********************/ - -/* Initialize your Storage device and File system. */ -static void fs_init(void) -{ - /*E.g. for FatFS initialize the SD card and FatFS itself*/ - - /*You code here*/ -} - -/** - * Open a file - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable - * @param path path to the file beginning with the driver letter (e.g. S:/folder/file.txt) - * @param mode read: FS_MODE_RD, write: FS_MODE_WR, both: FS_MODE_RD | FS_MODE_WR - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_open (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - if(mode == LV_FS_MODE_WR) - { - /*Open a file for write*/ - - /* Add your code here*/ - } - else if(mode == LV_FS_MODE_RD) - { - /*Open a file for read*/ - - /* Add your code here*/ - } - else if(mode == (LV_FS_MODE_WR | LV_FS_MODE_RD)) - { - /*Open a file for read and write*/ - - /* Add your code here*/ - } - - return res; -} - -/** - * Close an opened file - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable. (opened with lv_ufs_open) - * @return LV_FS_RES_OK: no error, the file is read - * any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_close (lv_fs_drv_t * drv, void * file_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Read data from an opened file - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable. - * @param buf pointer to a memory block where to store the read data - * @param btr number of Bytes To Read - * @param br the real number of read bytes (Byte Read) - * @return LV_FS_RES_OK: no error, the file is read - * any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_read (lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Write into a file - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable - * @param buf pointer to a buffer with the bytes to write - * @param btr Bytes To Write - * @param br the number of real written bytes (Bytes Written). NULL if unused. - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf, uint32_t btw, uint32_t * bw) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Set the read write pointer. Also expand the file size if necessary. - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable. (opened with lv_ufs_open ) - * @param pos the new position of read write pointer - * @return LV_FS_RES_OK: no error, the file is read - * any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_seek (lv_fs_drv_t * drv, void * file_p, uint32_t pos) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Give the size of a file bytes - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable - * @param size pointer to a variable to store the size - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_size (lv_fs_drv_t * drv, void * file_p, uint32_t * size_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} -/** - * Give the position of the read write pointer - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to a file_t variable. - * @param pos_p pointer to to store the result - * @return LV_FS_RES_OK: no error, the file is read - * any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_tell (lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Delete a file - * @param drv pointer to a driver where this function belongs - * @param path path of the file to delete - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_remove (lv_fs_drv_t * drv, const char *path) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Truncate the file size to the current position of the read write pointer - * @param drv pointer to a driver where this function belongs - * @param file_p pointer to an 'ufs_file_t' variable. (opened with lv_fs_open ) - * @return LV_FS_RES_OK: no error, the file is read - * any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_trunc (lv_fs_drv_t * drv, void * file_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Rename a file - * @param drv pointer to a driver where this function belongs - * @param oldname path to the file - * @param newname path with the new name - * @return LV_FS_RES_OK or any error from 'fs_res_t' - */ -static lv_fs_res_t fs_rename (lv_fs_drv_t * drv, const char * oldname, const char * newname) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Get the free and total size of a driver in kB - * @param drv pointer to a driver where this function belongs - * @param letter the driver letter - * @param total_p pointer to store the total size [kB] - * @param free_p pointer to store the free size [kB] - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_free (lv_fs_drv_t * drv, uint32_t * total_p, uint32_t * free_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Initialize a 'lv_fs_dir_t' variable for directory reading - * @param drv pointer to a driver where this function belongs - * @param rddir_p pointer to a 'lv_fs_dir_t' variable - * @param path path to a directory - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_dir_open (lv_fs_drv_t * drv, void * rddir_p, const char *path) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Read the next filename form a directory. - * The name of the directories will begin with '/' - * @param drv pointer to a driver where this function belongs - * @param rddir_p pointer to an initialized 'lv_fs_dir_t' variable - * @param fn pointer to a buffer to store the filename - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_dir_read (lv_fs_drv_t * drv, void * rddir_p, char *fn) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -/** - * Close the directory reading - * @param drv pointer to a driver where this function belongs - * @param rddir_p pointer to an initialized 'lv_fs_dir_t' variable - * @return LV_FS_RES_OK or any error from lv_fs_res_t enum - */ -static lv_fs_res_t fs_dir_close (lv_fs_drv_t * drv, void * rddir_p) -{ - lv_fs_res_t res = LV_FS_RES_NOT_IMP; - - /* Add your code here*/ - - return res; -} - -#else /* Enable this file at the top */ - -/* This dummy typedef exists purely to silence -Wpedantic. */ -typedef int keep_pedantic_happy; -#endif diff --git a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_indev_template.c b/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_indev_template.c deleted file mode 100644 index 98788da43..000000000 --- a/lib/libesp32_lvgl/LVGL/examples/porting/lv_port_indev_template.c +++ /dev/null @@ -1,423 +0,0 @@ -/** - * @file lv_port_indev_templ.c - * - */ - - /*Copy this file as "lv_port_indev.c" and set this value to "1" to enable content*/ -#if 0 - -/********************* - * INCLUDES - *********************/ -#include "lv_port_indev_template.h" - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/********************** - * STATIC PROTOTYPES - **********************/ - -static void touchpad_init(void); -static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); -static bool touchpad_is_pressed(void); -static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y); - -static void mouse_init(void); -static bool mouse_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); -static bool mouse_is_pressed(void); -static void mouse_get_xy(lv_coord_t * x, lv_coord_t * y); - -static void keypad_init(void); -static bool keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); -static uint32_t keypad_get_key(void); - -static void encoder_init(void); -static bool encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); -static void encoder_handler(void); - -static void button_init(void); -static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); -static int8_t button_get_pressed_id(void); -static bool button_is_pressed(uint8_t id); - -/********************** - * STATIC VARIABLES - **********************/ -lv_indev_t * indev_touchpad; -lv_indev_t * indev_mouse; -lv_indev_t * indev_keypad; -lv_indev_t * indev_encoder; -lv_indev_t * indev_button; - -static int32_t encoder_diff; -static lv_indev_state_t encoder_state; - -/********************** - * MACROS - **********************/ - -/********************** - * GLOBAL FUNCTIONS - **********************/ - -void lv_port_indev_init(void) -{ - /* Here you will find example implementation of input devices supported by LittelvGL: - * - Touchpad - * - Mouse (with cursor support) - * - Keypad (supports GUI usage only with key) - * - Encoder (supports GUI usage only with: left, right, push) - * - Button (external buttons to press points on the screen) - * - * The `..._read()` function are only examples. - * You should shape them according to your hardware - */ - - lv_indev_drv_t indev_drv; - - /*------------------ - * Touchpad - * -----------------*/ - - /*Initialize your touchpad if you have*/ - touchpad_init(); - - /*Register a touchpad input device*/ - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_POINTER; - indev_drv.read_cb = touchpad_read; - indev_touchpad = lv_indev_drv_register(&indev_drv); - - /*------------------ - * Mouse - * -----------------*/ - - /*Initialize your touchpad if you have*/ - mouse_init(); - - /*Register a mouse input device*/ - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_POINTER; - indev_drv.read_cb = mouse_read; - indev_mouse = lv_indev_drv_register(&indev_drv); - - /*Set cursor. For simplicity set a HOME symbol now.*/ - lv_obj_t * mouse_cursor = lv_img_create(lv_disp_get_scr_act(NULL), NULL); - lv_img_set_src(mouse_cursor, LV_SYMBOL_HOME); - lv_indev_set_cursor(indev_mouse, mouse_cursor); - - /*------------------ - * Keypad - * -----------------*/ - - /*Initialize your keypad or keyboard if you have*/ - keypad_init(); - - /*Register a keypad input device*/ - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_KEYPAD; - indev_drv.read_cb = keypad_read; - indev_keypad = lv_indev_drv_register(&indev_drv); - - /* Later you should create group(s) with `lv_group_t * group = lv_group_create()`, - * add objects to the group with `lv_group_add_obj(group, obj)` - * and assign this input device to group to navigate in it: - * `lv_indev_set_group(indev_keypad, group);` */ - - /*------------------ - * Encoder - * -----------------*/ - - /*Initialize your encoder if you have*/ - encoder_init(); - - /*Register a encoder input device*/ - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_ENCODER; - indev_drv.read_cb = encoder_read; - indev_encoder = lv_indev_drv_register(&indev_drv); - - /* Later you should create group(s) with `lv_group_t * group = lv_group_create()`, - * add objects to the group with `lv_group_add_obj(group, obj)` - * and assign this input device to group to navigate in it: - * `lv_indev_set_group(indev_encoder, group);` */ - - /*------------------ - * Button - * -----------------*/ - - /*Initialize your button if you have*/ - button_init(); - - /*Register a button input device*/ - lv_indev_drv_init(&indev_drv); - indev_drv.type = LV_INDEV_TYPE_BUTTON; - indev_drv.read_cb = button_read; - indev_button = lv_indev_drv_register(&indev_drv); - - /*Assign buttons to points on the screen*/ - static const lv_point_t btn_points[2] = { - {10, 10}, /*Button 0 -> x:10; y:10*/ - {40, 100}, /*Button 1 -> x:40; y:100*/ - }; - lv_indev_set_button_points(indev_button, btn_points); -} - -/********************** - * STATIC FUNCTIONS - **********************/ - -/*------------------ - * Touchpad - * -----------------*/ - -/*Initialize your touchpad*/ -static void touchpad_init(void) -{ - /*Your code comes here*/ -} - -/* Will be called by the library to read the touchpad */ -static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) -{ - static lv_coord_t last_x = 0; - static lv_coord_t last_y = 0; - - /*Save the pressed coordinates and the state*/ - if(touchpad_is_pressed()) { - touchpad_get_xy(&last_x, &last_y); - data->state = LV_INDEV_STATE_PR; - } else { - data->state = LV_INDEV_STATE_REL; - } - - /*Set the last pressed coordinates*/ - data->point.x = last_x; - data->point.y = last_y; - - /*Return `false` because we are not buffering and no more data to read*/ - return false; -} - -/*Return true is the touchpad is pressed*/ -static bool touchpad_is_pressed(void) -{ - /*Your code comes here*/ - - return false; -} - -/*Get the x and y coordinates if the touchpad is pressed*/ -static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y) -{ - /*Your code comes here*/ - - (*x) = 0; - (*y) = 0; -} - -/*------------------ - * Mouse - * -----------------*/ - -/* Initialize your mouse */ -static void mouse_init(void) -{ - /*Your code comes here*/ -} - -/* Will be called by the library to read the mouse */ -static bool mouse_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) -{ - /*Get the current x and y coordinates*/ - mouse_get_xy(&data->point.x, &data->point.y); - - /*Get whether the mouse button is pressed or released*/ - if(mouse_is_pressed()) { - data->state = LV_INDEV_STATE_PR; - } else { - data->state = LV_INDEV_STATE_REL; - } - - /*Return `false` because we are not buffering and no more data to read*/ - return false; -} - -/*Return true is the mouse button is pressed*/ -static bool mouse_is_pressed(void) -{ - /*Your code comes here*/ - - return false; -} - -/*Get the x and y coordinates if the mouse is pressed*/ -static void mouse_get_xy(lv_coord_t * x, lv_coord_t * y) -{ - /*Your code comes here*/ - - (*x) = 0; - (*y) = 0; -} - -/*------------------ - * Keypad - * -----------------*/ - -/* Initialize your keypad */ -static void keypad_init(void) -{ - /*Your code comes here*/ -} - -/* Will be called by the library to read the mouse */ -static bool keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) -{ - static uint32_t last_key = 0; - - /*Get the current x and y coordinates*/ - mouse_get_xy(&data->point.x, &data->point.y); - - /*Get whether the a key is pressed and save the pressed key*/ - uint32_t act_key = keypad_get_key(); - if(act_key != 0) { - data->state = LV_INDEV_STATE_PR; - - /*Translate the keys to LVGL control characters according to your key definitions*/ - switch(act_key) { - case 1: - act_key = LV_KEY_NEXT; - break; - case 2: - act_key = LV_KEY_PREV; - break; - case 3: - act_key = LV_KEY_LEFT; - break; - case 4: - act_key = LV_KEY_RIGHT; - break; - case 5: - act_key = LV_KEY_ENTER; - break; - } - - last_key = act_key; - } else { - data->state = LV_INDEV_STATE_REL; - } - - data->key = last_key; - - /*Return `false` because we are not buffering and no more data to read*/ - return false; -} - -/*Get the currently being pressed key. 0 if no key is pressed*/ -static uint32_t keypad_get_key(void) -{ - /*Your code comes here*/ - - return 0; -} - -/*------------------ - * Encoder - * -----------------*/ - -/* Initialize your keypad */ -static void encoder_init(void) -{ - /*Your code comes here*/ -} - -/* Will be called by the library to read the encoder */ -static bool encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) -{ - - data->enc_diff = encoder_diff; - data->state = encoder_state; - - /*Return `false` because we are not buffering and no more data to read*/ - return false; -} - -/*Call this function in an interrupt to process encoder events (turn, press)*/ -static void encoder_handler(void) -{ - /*Your code comes here*/ - - encoder_diff += 0; - encoder_state = LV_INDEV_STATE_REL; -} - -/*------------------ - * Button - * -----------------*/ - -/* Initialize your buttons */ -static void button_init(void) -{ - /*Your code comes here*/ -} - -/* Will be called by the library to read the button */ -static bool button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) -{ - - static uint8_t last_btn = 0; - - /*Get the pressed button's ID*/ - int8_t btn_act = button_get_pressed_id(); - - if(btn_act >= 0) { - data->state = LV_INDEV_STATE_PR; - last_btn = btn_act; - } else { - data->state = LV_INDEV_STATE_REL; - } - - /*Save the last pressed button's ID*/ - data->btn_id = last_btn; - - /*Return `false` because we are not buffering and no more data to read*/ - return false; -} - -/*Get ID (0, 1, 2 ..) of the pressed button*/ -static int8_t button_get_pressed_id(void) -{ - uint8_t i; - - /*Check to buttons see which is being pressed (assume there are 2 buttons)*/ - for(i = 0; i < 2; i++) { - /*Return the pressed button's ID*/ - if(button_is_pressed(i)) { - return i; - } - } - - /*No button pressed*/ - return -1; -} - -/*Test if `id` button is pressed or not*/ -static bool button_is_pressed(uint8_t id) -{ - - /*Your code comes here*/ - - return false; -} - -#else /* Enable this file at the top */ - -/* This dummy typedef exists purely to silence -Wpedantic. */ -typedef int keep_pedantic_happy; -#endif diff --git a/lib/libesp32_lvgl/LVGL/library.json b/lib/libesp32_lvgl/LVGL/library.json deleted file mode 100644 index a36029d34..000000000 --- a/lib/libesp32_lvgl/LVGL/library.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "lvgl", - "version": "7.11.0", - "keywords": "graphics, gui, embedded, tft, lvgl", - "description": "Graphics library to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint. It offers anti-aliasing, opacity, and animations using only one frame buffer.", - "repository": { - "type": "git", - "url": "https://github.com/lvgl/lvgl.git" - }, - "license": "MIT", - "homepage": "https://lvgl.io", - "frameworks": "*", - "platforms": "*", - "build": { - "flags": [ "-I$PROJECT_DIR/tasmota/lvgl_berry" ] - } -} \ No newline at end of file diff --git a/lib/libesp32_lvgl/LVGL/lvgl.h b/lib/libesp32_lvgl/LVGL/lvgl.h deleted file mode 100644 index 4aa1d7e2b..000000000 --- a/lib/libesp32_lvgl/LVGL/lvgl.h +++ /dev/null @@ -1,151 +0,0 @@ -/** - * @file lvgl.h - * Include all LittleV GL related headers - */ - -#ifndef LVGL_H -#define LVGL_H - -#ifdef __cplusplus -extern "C" { -#endif - -/*************************** - * CURRENT VERSION OF LVGL - ***************************/ -#define LVGL_VERSION_MAJOR 7 -#define LVGL_VERSION_MINOR 11 -#define LVGL_VERSION_PATCH 0 -#define LVGL_VERSION_INFO "" - -/********************* - * INCLUDES - *********************/ - -#include "src/lv_misc/lv_log.h" -#include "src/lv_misc/lv_task.h" -#include "src/lv_misc/lv_math.h" -#include "src/lv_misc/lv_async.h" - -#include "src/lv_hal/lv_hal.h" - -#include "src/lv_core/lv_obj.h" -#include "src/lv_core/lv_group.h" -#include "src/lv_core/lv_indev.h" - -#include "src/lv_core/lv_refr.h" -#include "src/lv_core/lv_disp.h" - -#include "src/lv_themes/lv_theme.h" - -#include "src/lv_font/lv_font.h" -#include "src/lv_font/lv_font_loader.h" -#include "src/lv_font/lv_font_fmt_txt.h" -#include "src/lv_misc/lv_printf.h" - -#include "src/lv_widgets/lv_btn.h" -#include "src/lv_widgets/lv_imgbtn.h" -#include "src/lv_widgets/lv_img.h" -#include "src/lv_widgets/lv_label.h" -#include "src/lv_widgets/lv_line.h" -#include "src/lv_widgets/lv_page.h" -#include "src/lv_widgets/lv_cont.h" -#include "src/lv_widgets/lv_list.h" -#include "src/lv_widgets/lv_chart.h" -#include "src/lv_widgets/lv_table.h" -#include "src/lv_widgets/lv_checkbox.h" -#include "src/lv_widgets/lv_cpicker.h" -#include "src/lv_widgets/lv_bar.h" -#include "src/lv_widgets/lv_slider.h" -#include "src/lv_widgets/lv_led.h" -#include "src/lv_widgets/lv_btnmatrix.h" -#include "src/lv_widgets/lv_keyboard.h" -#include "src/lv_widgets/lv_dropdown.h" -#include "src/lv_widgets/lv_roller.h" -#include "src/lv_widgets/lv_textarea.h" -#include "src/lv_widgets/lv_canvas.h" -#include "src/lv_widgets/lv_win.h" -#include "src/lv_widgets/lv_tabview.h" -#include "src/lv_widgets/lv_tileview.h" -#include "src/lv_widgets/lv_msgbox.h" -#include "src/lv_widgets/lv_objmask.h" -#include "src/lv_widgets/lv_gauge.h" -#include "src/lv_widgets/lv_linemeter.h" -#include "src/lv_widgets/lv_switch.h" -#include "src/lv_widgets/lv_arc.h" -#include "src/lv_widgets/lv_spinner.h" -#include "src/lv_widgets/lv_calendar.h" -#include "src/lv_widgets/lv_spinbox.h" - -#include "src/lv_draw/lv_img_cache.h" - -#include "src/lv_api_map.h" - -/********************* - * DEFINES - *********************/ - -/********************** - * TYPEDEFS - **********************/ - -/********************** - * GLOBAL PROTOTYPES - **********************/ - -/********************** - * MACROS - **********************/ - -/** Gives 1 if the x.y.z version is supported in the current version - * Usage: - * - * - Require v6 - * #if LV_VERSION_CHECK(6,0,0) - * new_func_in_v6(); - * #endif - * - * - * - Require at least v5.3 - * #if LV_VERSION_CHECK(5,3,0) - * new_feature_from_v5_3(); - * #endif - * - * - * - Require v5.3.2 bugfixes - * #if LV_VERSION_CHECK(5,3,2) - * bugfix_in_v5_3_2(); - * #endif - * - * */ -#define LV_VERSION_CHECK(x,y,z) (x == LVGL_VERSION_MAJOR && (y < LVGL_VERSION_MINOR || (y == LVGL_VERSION_MINOR && z <= LVGL_VERSION_PATCH))) - -/** - * Wrapper functions for VERSION macros - */ - -static inline int lv_version_major(void) -{ - return LVGL_VERSION_MAJOR; -} - -static inline int lv_version_minor(void) -{ - return LVGL_VERSION_MINOR; -} - -static inline int lv_version_patch(void) -{ - return LVGL_VERSION_PATCH; -} - -static inline const char *lv_version_info(void) -{ - return LVGL_VERSION_INFO; -} - -#ifdef __cplusplus -} -#endif - -#endif /*LVGL_H*/ diff --git a/lib/libesp32_lvgl/LVGL/scripts/Doxyfile b/lib/libesp32_lvgl/LVGL/scripts/Doxyfile deleted file mode 100644 index 7120f5d27..000000000 --- a/lib/libesp32_lvgl/LVGL/scripts/Doxyfile +++ /dev/null @@ -1,2455 +0,0 @@ -# Doxyfile 1.8.13 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "LittlevGL" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../docs/api_doc - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = NO - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = NO - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = NO - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "WARNING: $file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = ../src - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /
    ")); } -void WSContentSendStyle(void) -{ +void WSContentSendStyle(void) { WSContentSendStyle_P(nullptr); } @@ -837,8 +892,7 @@ void WSContentTextCenterStart(uint32_t color) { WSContentSend_P(PSTR("
    "), color); } -void WSContentButton(uint32_t title_index, bool show=true) -{ +void WSContentButton(uint32_t title_index, bool show=true) { char action[4]; char title[100]; // Large to accomodate UTF-16 as used by Russian @@ -858,8 +912,7 @@ void WSContentButton(uint32_t title_index, bool show=true) } } -void WSContentSpaceButton(uint32_t title_index, bool show=true) -{ +void WSContentSpaceButton(uint32_t title_index, bool show=true) { WSContentSend_P(PSTR("
    "),title_index, show ? "block":"none"); // 5px padding WSContentButton(title_index, show); } @@ -876,8 +929,7 @@ void WSContentSend_CurrentMA(const char *types, float f_current) { WSContentSend_PD(HTTP_SNS_F_CURRENT_MA, types, Settings->flag2.current_resolution, &f_current); } -void WSContentSend_THD(const char *types, float f_temperature, float f_humidity) -{ +void WSContentSend_THD(const char *types, float f_temperature, float f_humidity) { WSContentSend_Temp(types, f_temperature); char parameter[FLOATSZ]; @@ -887,14 +939,13 @@ void WSContentSend_THD(const char *types, float f_temperature, float f_humidity) WSContentSend_PD(HTTP_SNS_DEW, types, parameter, TempUnit()); } -void WSContentEnd(void) -{ - WSContentSend("", 0); // Signal end of chunked content +void WSContentEnd(void) { + WSContentFlush(); // Flush chunk buffer + _WSContentSend(""); // Signal end of chunked content Webserver->client().stop(); } -void WSContentStop(void) -{ +void WSContentStop(void) { if ( WifiIsInManagerMode() && (!Web.initial_config) ) { if (WifiConfigCounter()) { WSContentSend_P(HTTP_COUNTER); @@ -1549,6 +1600,10 @@ void HandleTemplateConfiguration(void) { #if defined(ESP32) && CONFIG_IDF_TARGET_ESP32C3 // ESP32C3 we always send all GPIOs, Flash are just hidden WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", template_gp.io[i]); +#elif defined(CONFIG_IDF_TARGET_ESP32S2) + if (!FlashPin(i)) { + WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", template_gp.io[i]); + } #else if (!FlashPin(i)) { WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", template_gp.io[i]); @@ -1601,7 +1656,7 @@ void HandleTemplateConfiguration(void) { hidden ? PSTR(" hidden") : "", RedPin(i) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? PSTR(" style='width:146px'") : "", i, i); WSContentSend_P(PSTR(""), i); -#else +#else // also works for ESP32S2 if (!FlashPin(i)) { WSContentSend_P(PSTR("" D_GPIO "%d"), RedPin(i) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? PSTR(" style='width:146px'") : "", i, i); @@ -1647,7 +1702,13 @@ void TemplateSaveSettings(void) { for (uint32_t i = 0; i < nitems(Settings->user_template.gp.io); i++) { #if defined(ESP32) && CONFIG_IDF_TARGET_ESP32C3 snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(i)); -#else +#elif defined(CONFIG_IDF_TARGET_ESP32S2) + if (22 == i) { j = 33; } // skip 22-32 + snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(j)); + j++; +#elif defined(CONFIG_IDF_TARGET_ESP32) + snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(Esp32TemplateToPhy[i])); +#else // ESP8266 if (6 == i) { j = 9; } if (8 == i) { j = 12; } snprintf_P(command, sizeof(command), PSTR("%s%s%d"), command, (i>0)?",":"", WebGetGpioArg(j)); @@ -1792,16 +1853,17 @@ void HandleWifiConfiguration(void) { if ( WifiIsInManagerMode() ) { // Test WIFI Connection to Router // As Tasmota is in this case in AP mode, a STA connection can be established too at the same time + + if (WIFI_NOT_TESTING == Web.wifiTest) { + if (MAX_WIFI_OPTION == Web.old_wificonfig) { Web.old_wificonfig = Settings->sta_config; } + TasmotaGlobal.wifi_state_flag = Settings->sta_config = WIFI_MANAGER; + Web.save_data_counter = TasmotaGlobal.save_data_counter; + } + Web.wifi_test_counter = 9; // seconds to test user's proposed AP Web.wifiTest = WIFI_TESTING; - - Web.save_data_counter = TasmotaGlobal.save_data_counter; TasmotaGlobal.save_data_counter = 0; // Stop auto saving data - Updating Settings Settings->save_data = 0; - - if (MAX_WIFI_OPTION == Web.old_wificonfig) { Web.old_wificonfig = Settings->sta_config; } - TasmotaGlobal.wifi_state_flag = Settings->sta_config = WIFI_MANAGER; - TasmotaGlobal.sleep = 0; // Disable sleep TasmotaGlobal.restart_flag = 0; // No restart TasmotaGlobal.ota_state_flag = 0; // No OTA @@ -1827,13 +1889,17 @@ void HandleWifiConfiguration(void) { return; } - if ( WIFI_TEST_FINISHED_SUCCESSFUL == Web.wifiTest ) { + if ( WIFI_TEST_FINISHED == Web.wifiTest ) { Web.wifiTest = WIFI_NOT_TESTING; + if (Web.wifi_test_AP_TIMEOUT) { + WebRestart(1); // Save credentials and Force Restart in STA only mode (11n-only routers) + } else { #if (RESTART_AFTER_INITIAL_WIFI_CONFIG) - WebRestart(3); + WebRestart(3); #else - HandleRoot(); + HandleRoot(); #endif + } } WSContentStart_P(PSTR(D_CONFIGURE_WIFI), !WifiIsInManagerMode()); @@ -1987,7 +2053,11 @@ void HandleWifiConfiguration(void) { // As WIFI_HOSTNAME may contain %s-%04d it cannot be part of HTTP_FORM_WIFI where it will exception WSContentSend_P(PSTR(">

    ")); } else { +#ifdef USE_CORS WSContentSend_P(HTTP_FORM_WIFI_PART2, SettingsText(SET_STASSID2), WIFI_HOSTNAME, WIFI_HOSTNAME, SettingsText(SET_HOSTNAME), SettingsText(SET_CORS)); +#else + WSContentSend_P(HTTP_FORM_WIFI_PART2, SettingsText(SET_STASSID2), WIFI_HOSTNAME, WIFI_HOSTNAME, SettingsText(SET_HOSTNAME)); +#endif } WSContentSend_P(HTTP_FORM_END); @@ -2020,7 +2090,9 @@ void HandleWifiConfiguration(void) { void WifiSaveSettings(void) { String cmnd = F(D_CMND_BACKLOG "0 "); cmnd += AddWebCommand(PSTR(D_CMND_HOSTNAME), PSTR("h"), PSTR("1")); +#ifdef USE_CORS cmnd += AddWebCommand(PSTR(D_CMND_CORS), PSTR("c"), PSTR("1")); +#endif cmnd += AddWebCommand(PSTR(D_CMND_SSID "1"), PSTR("s1"), PSTR("1")); cmnd += AddWebCommand(PSTR(D_CMND_SSID "2"), PSTR("s2"), PSTR("1")); cmnd += AddWebCommand(PSTR(D_CMND_PASSWORD "3"), PSTR("p1"), PSTR("\"")); @@ -2096,11 +2168,8 @@ void HandleOtherConfiguration(void) { WSContentSendStyle(); TemplateJson(); -#ifdef MQTT_DATA_STRING - WSContentSend_P(HTTP_FORM_OTHER, TasmotaGlobal.mqtt_data.c_str(), (USER_MODULE == Settings->module) ? PSTR(" checked disabled") : "", -#else - WSContentSend_P(HTTP_FORM_OTHER, TasmotaGlobal.mqtt_data, (USER_MODULE == Settings->module) ? PSTR(" checked disabled") : "", -#endif + WSContentSend_P(HTTP_FORM_OTHER, ResponseData(), (USER_MODULE == Settings->module) ? PSTR(" checked disabled") : "", + (Settings->flag5.disable_referer_chk) ? PSTR(" checked") : "", // SetOption128 - Enable HTTP API (Settings->flag.mqtt_enabled) ? PSTR(" checked") : "", // SetOption3 - Enable MQTT SettingsText(SET_FRIENDLYNAME1), SettingsText(SET_DEVICENAME)); @@ -2151,6 +2220,8 @@ void OtherSaveSettings(void) { cmnd += AddWebCommand(PSTR(D_CMND_WEBPASSWORD "2"), PSTR("wp"), PSTR("\"")); cmnd += F(";" D_CMND_SO "3 "); cmnd += Webserver->hasArg(F("b1")); + cmnd += F(";" D_CMND_SO "128 "); + cmnd += Webserver->hasArg(F("b3")); cmnd += AddWebCommand(PSTR(D_CMND_DEVICENAME), PSTR("dn"), PSTR("\"")); char webindex[5]; char cmnd2[24]; // ";Module 0;Template " @@ -2304,7 +2375,8 @@ void HandleInformation(void) if (!TasmotaGlobal.global_state.network_down) { WSContentSend_P(PSTR("}1" D_GATEWAY "}2%_I"), Settings->ipv4_address[1]); WSContentSend_P(PSTR("}1" D_SUBNET_MASK "}2%_I"), Settings->ipv4_address[2]); - WSContentSend_P(PSTR("}1" D_DNS_SERVER "}2%_I"), Settings->ipv4_address[3]); + WSContentSend_P(PSTR("}1" D_DNS_SERVER "1}2%_I"), Settings->ipv4_address[3]); + WSContentSend_P(PSTR("}1" D_DNS_SERVER "2}2%_I"), Settings->ipv4_address[4]); } if ((WiFi.getMode() >= WIFI_AP) && (static_cast(WiFi.softAPIP()) != 0)) { WSContentSend_P(PSTR("}1
    }2
    ")); @@ -2313,6 +2385,8 @@ void HandleInformation(void) WSContentSend_P(PSTR("}1" D_GATEWAY "}2%_I"), (uint32_t)WiFi.softAPIP()); } WSContentSend_P(PSTR("}1}2 ")); // Empty line + WSContentSend_P(PSTR("}1" D_HTTP_API "}2%s"), Settings->flag5.disable_referer_chk ? PSTR(D_ENABLED) : PSTR(D_DISABLED)); // SetOption 128 + WSContentSend_P(PSTR("}1}2 ")); // Empty line if (Settings->flag.mqtt_enabled) { // SetOption3 - Enable MQTT WSContentSend_P(PSTR("}1" D_MQTT_HOST "}2%s"), SettingsText(SET_MQTT_HOST)); WSContentSend_P(PSTR("}1" D_MQTT_PORT "}2%d"), Settings->mqtt_port); @@ -2359,13 +2433,14 @@ void HandleInformation(void) WSContentSend_P(PSTR("}1" D_FLASH_CHIP_ID "}20x%06X"), ESP.getFlashChipId()); #endif WSContentSend_P(PSTR("}1" D_FLASH_CHIP_SIZE "}2%d kB"), ESP.getFlashChipRealSize() / 1024); +#ifdef ESP8266 WSContentSend_P(PSTR("}1" D_PROGRAM_FLASH_SIZE "}2%d kB"), ESP.getFlashChipSize() / 1024); +#endif WSContentSend_P(PSTR("}1" D_PROGRAM_SIZE "}2%d kB"), ESP_getSketchSize() / 1024); WSContentSend_P(PSTR("}1" D_FREE_PROGRAM_SPACE "}2%d kB"), ESP.getFreeSketchSpace() / 1024); #ifdef ESP32 - int32_t freeMaxMem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap()); - WSContentSend_PD(PSTR("}1" D_FREE_MEMORY "}2%1_f kB (" D_FRAGMENTATION " %d%%)"), &freemem, freeMaxMem); - if (psramFound()) { + WSContentSend_PD(PSTR("}1" D_FREE_MEMORY "}2%1_f kB (" D_FRAGMENTATION " %d%%)"), &freemem, ESP_getHeapFragmentation()); + if (UsePSRAM()) { WSContentSend_P(PSTR("}1" D_PSR_MAX_MEMORY "}2%d kB"), ESP.getPsramSize() / 1024); WSContentSend_P(PSTR("}1" D_PSR_FREE_MEMORY "}2%d kB"), ESP.getFreePsram() / 1024); } @@ -2715,7 +2790,8 @@ void HandleUploadLoop(void) { } #endif // USE_WEB_FW_UPGRADE else if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { - Web.upload_error = 5; // Upload buffer miscompare +// Web.upload_error = 5; // Upload buffer miscompare + Web.upload_error = 2; // Not enough space return; } if (upload.totalSize && !(upload.totalSize % 102400)) { @@ -2806,7 +2882,9 @@ void HandleUploadLoop(void) { void HandlePreflightRequest(void) { +#ifdef USE_CORS HttpHeaderCors(); +#endif Webserver->sendHeader(F("Access-Control-Allow-Methods"), F("GET, POST")); Webserver->sendHeader(F("Access-Control-Allow-Headers"), F("authorization")); WSSend(200, CT_HTML, ""); @@ -2995,7 +3073,7 @@ int WebSend(char *buffer) char *user; char *password; char *command; - int status = 1; // Wrong parameters + int status = WEBCMND_WRONG_PARAMETERS; // buffer = | [ 192.168.178.86 : 80 , admin : joker ] POWER1 ON | host = strtok_r(buffer, "]", &command); // host = | [ 192.168.178.86 : 80 , admin : joker |, command = | POWER1 ON | @@ -3019,14 +3097,67 @@ int WebSend(char *buffer) } url += F("cmnd="); // url = |http://192.168.178.86/cm?cmnd=| or |http://192.168.178.86/cm?user=admin&password=joker&cmnd=| } - url += command; // url = |http://192.168.178.86/cm?cmnd=POWER1 ON| + url += UrlEncode(command); // url = |http://192.168.178.86/cm?cmnd=POWER1%20ON| + url += F(" GET"); // url = |http://192.168.178.86/cm?cmnd=POWER1%20ON GET| - DEBUG_CORE_LOG(PSTR("WEB: Uri |%s|"), url.c_str()); + DEBUG_CORE_LOG(PSTR("WEB: Uri '%s'"), url.c_str()); + status = WebQuery(const_cast(url.c_str())); + } + return status; +} + +int WebQuery(char *buffer) +{ + // http://192.168.1.1/path GET -> Sends HTTP GET http://192.168.1.1/path + // http://192.168.1.1/path POST {"some":"message"} -> Sends HTTP POST to http://192.168.1.1/path with body {"some":"message"} + // http://192.168.1.1/path PUT [Autorization: Bearer abcdxyz] potato -> Sends HTTP PUT to http://192.168.1.1/path with authorization header and body "potato" + // http://192.168.1.1/path PATCH patchInfo -> Sends HTTP PATCH to http://192.168.1.1/path with body "potato" + + // Valid HTTP Commands: GET, POST, PUT, and PATCH + // An unlimited number of headers can be sent per request, and a body can be sent for all command types + // The body will be ignored if sending a GET command + + WiFiClient http_client; + HTTPClient http; + + int status = WEBCMND_WRONG_PARAMETERS; + + char *temp; + char *url = strtok_r(buffer, " ", &temp); + char *method = strtok_r(temp, " ", &temp); + + if (url && method) { + if (http.begin(http_client, UrlEncode(url))) { + char empty_body[1] = { 0 }; + char *body = empty_body; + if (temp) { // There is a body and/or header + if (temp[0] == '[') { // Header information was sent; decode it + temp += 1; + temp = strtok_r(temp, "]", &body); + bool headerFound = true; + while (headerFound) { + char *header = strtok_r(temp, ":", &temp); + if (header) { + char *headerBody = strtok_r(temp, "|", &temp); + if (headerBody) { + http.addHeader(header, headerBody); + } + else headerFound = false; + } + else headerFound = false; + } + } else { // No header information was sent, but there was a body + body = temp; + } + } + + int http_code; + if (0 == strcasecmp_P(method, PSTR("GET"))) { http_code = http.GET(); } + else if (0 == strcasecmp_P(method, PSTR("POST"))) { http_code = http.POST(body); } + else if (0 == strcasecmp_P(method, PSTR("PUT"))) { http_code = http.PUT(body); } + else if (0 == strcasecmp_P(method, PSTR("PATCH"))) { http_code = http.PATCH(body); } + else return status; - WiFiClient http_client; - HTTPClient http; - if (http.begin(http_client, UrlEncode(url))) { // UrlEncode(url) = |http://192.168.178.86/cm?cmnd=POWER1%20ON| - int http_code = http.GET(); // Start connection and send HTTP header if (http_code > 0) { // http_code will be negative on error if (http_code == HTTP_CODE_OK || http_code == HTTP_CODE_MOVED_PERMANENTLY) { #ifdef USE_WEBSEND_RESPONSE @@ -3046,21 +3177,84 @@ int WebSend(char *buffer) // recursive call must be possible in this case tasm_cmd_activ = 0; #endif // USE_SCRIPT - MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_CMND_WEBSEND)); + MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR(D_CMND_WEBQUERY)); #endif // USE_WEBSEND_RESPONSE } - status = 0; // No error - Done + status = WEBCMND_DONE; } else { - status = 2; // Connection failed + status = WEBCMND_CONNECT_FAILED; } http.end(); // Clean up connection data } else { - status = 3; // Host not found or connection error + status = WEBCMND_HOST_NOT_FOUND; } } return status; } +#ifdef USE_WEBGETCONFIG +int WebGetConfig(char *buffer) +{ + // http://user:password@server:port/path/%id%.dmp : %id% will be expanded to MAC address + + int status = WEBCMND_WRONG_PARAMETERS; + + RemoveSpace(buffer); // host = |[192.168.178.86:80,admin:joker| + String url = ResolveToken(buffer); + + DEBUG_CORE_LOG(PSTR("WEB: Config Uri '%s'"), url.c_str()); + + WiFiClient http_client; + HTTPClient http; + if (http.begin(http_client, UrlEncode(url))) { // UrlEncode(url) = |http://192.168.178.86/cm?cmnd=POWER1%20ON| + int http_code = http.GET(); // Start connection and send HTTP header + if (http_code > 0) { // http_code will be negative on error + status = WEBCMND_DONE; + if (http_code == HTTP_CODE_OK || http_code == HTTP_CODE_MOVED_PERMANENTLY) { + WiFiClient *stream = http.getStreamPtr(); + int len = http.getSize(); + if ((len <= sizeof(TSettings)) && SettingsBufferAlloc()) { + uint8_t *buff = settings_buffer; + if (len == -1) { len = sizeof(TSettings); } + while (http.connected() && (len > 0)) { + size_t size = stream->available(); + if (size) { + int read = stream->readBytes(buff, len); + len -= read; + } + delayMicroseconds(1); + } + if (len) { + DEBUG_CORE_LOG(PSTR("WEB: Connection lost")); + status = WEBCMND_CONNECTION_LOST; + } else if (SettingsConfigRestore()) { + AddLog(LOG_LEVEL_INFO, PSTR("WEB: Settings applied, restarting")); + TasmotaGlobal.restart_flag = 2; // Always restart to re-enable disabled features during update + } else { + DEBUG_CORE_LOG(PSTR("WEB: Settings file invalid")); + status = WEBCMND_INVALID_FILE; + } + } else { + DEBUG_CORE_LOG(PSTR("WEB: Memory error (%d) or invalid file length (%d)"), settings_buffer, len); + status = WEBCMND_MEMORY_ERROR; + } + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR("WEB: HTTP error %d"), http_code); + status = (http_code == HTTP_CODE_NOT_FOUND) ? WEBCMND_FILE_NOT_FOUND : WEBCMND_OTHER_HTTP_ERROR; + } + } else { + DEBUG_CORE_LOG(PSTR("WEB: Connection failed")); + status = 2; // Connection failed + } + http.end(); // Clean up connection data + } else { + status = 3; // Host not found or connection error + } + + return status; +} +#endif // USE_WEBGETCONFIG + bool JsonWebColor(const char* dataBuf) { // Default (Dark theme) @@ -3085,7 +3279,11 @@ bool JsonWebColor(const char* dataBuf) return true; } -const char kWebSendStatus[] PROGMEM = D_JSON_DONE "|" D_JSON_WRONG_PARAMETERS "|" D_JSON_CONNECT_FAILED "|" D_JSON_HOST_NOT_FOUND "|" D_JSON_MEMORY_ERROR; +const char kWebCmndStatus[] PROGMEM = D_JSON_DONE "|" D_JSON_WRONG_PARAMETERS "|" D_JSON_CONNECT_FAILED "|" D_JSON_HOST_NOT_FOUND "|" D_JSON_MEMORY_ERROR +#ifdef USE_WEBGETCONFIG + "|" D_JSON_FILE_NOT_FOUND "|" D_JSON_OTHER_HTTP_ERROR "|" D_JSON_CONNECTION_LOST "|" D_JSON_INVALID_FILE_TYPE +#endif // USE_WEBGETCONFIG +; const char kWebCommands[] PROGMEM = "|" // No prefix #ifdef USE_EMULATION @@ -3094,8 +3292,15 @@ const char kWebCommands[] PROGMEM = "|" // No prefix #if defined(USE_SENDMAIL) || defined(USE_ESP32MAIL) D_CMND_SENDMAIL "|" #endif - D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBLOG "|" D_CMND_WEBREFRESH "|" D_CMND_WEBSEND "|" D_CMND_WEBCOLOR "|" - D_CMND_WEBSENSOR "|" D_CMND_WEBBUTTON "|" D_CMND_CORS; + D_CMND_WEBSERVER "|" D_CMND_WEBPASSWORD "|" D_CMND_WEBLOG "|" D_CMND_WEBREFRESH "|" D_CMND_WEBSEND "|" D_CMND_WEBQUERY "|" + D_CMND_WEBCOLOR "|" D_CMND_WEBSENSOR "|" D_CMND_WEBBUTTON +#ifdef USE_WEBGETCONFIG + "|" D_CMND_WEBGETCONFIG +#endif +#ifdef USE_CORS + "|" D_CMND_CORS +#endif +; void (* const WebCommand[])(void) PROGMEM = { #ifdef USE_EMULATION @@ -3104,8 +3309,15 @@ void (* const WebCommand[])(void) PROGMEM = { #if defined(USE_SENDMAIL) || defined(USE_ESP32MAIL) &CmndSendmail, #endif - &CmndWebServer, &CmndWebPassword, &CmndWeblog, &CmndWebRefresh, &CmndWebSend, &CmndWebColor, - &CmndWebSensor, &CmndWebButton, &CmndCors }; + &CmndWebServer, &CmndWebPassword, &CmndWeblog, &CmndWebRefresh, &CmndWebSend, &CmndWebQuery, + &CmndWebColor, &CmndWebSensor, &CmndWebButton +#ifdef USE_WEBGETCONFIG + , &CmndWebGetConfig +#endif +#ifdef USE_CORS + , &CmndCors +#endif + }; /*********************************************************************************************\ * Commands @@ -3139,7 +3351,7 @@ void CmndSendmail(void) if (XdrvMailbox.data_len > 0) { uint8_t result = SendMail(XdrvMailbox.data); char stemp1[20]; - ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebSendStatus)); + ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebCmndStatus)); } } #endif // USE_SENDMAIL @@ -3195,10 +3407,32 @@ void CmndWebSend(void) if (XdrvMailbox.data_len > 0) { uint32_t result = WebSend(XdrvMailbox.data); char stemp1[20]; - ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebSendStatus)); + ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebCmndStatus)); } } +void CmndWebQuery(void) +{ + if (XdrvMailbox.data_len > 0) { + uint32_t result = WebQuery(XdrvMailbox.data); + char stemp1[20]; + ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebCmndStatus)); + } +} + +#ifdef USE_WEBGETCONFIG +void CmndWebGetConfig(void) +{ + // WebGetConfig http://myserver:8000/tasmota/conf/%id%.dmp where %id% is expanded to device mac address + // WebGetConfig http://myserver:8000/tasmota/conf/Config_demo_9.5.0.8.dmp + if (XdrvMailbox.data_len > 0) { + uint32_t result = WebGetConfig(XdrvMailbox.data); + char stemp1[20]; + ResponseCmndChar(GetTextIndexed(stemp1, sizeof(stemp1), result, kWebCmndStatus)); + } +} +#endif // USE_WEBGETCONFIG + void CmndWebColor(void) { if (XdrvMailbox.data_len > 0) { @@ -3228,11 +3462,11 @@ void CmndWebSensor(void) { if (XdrvMailbox.index < MAX_XSNS_DRIVERS) { if (XdrvMailbox.payload >= 0) { - bitWrite(Settings->sensors[XdrvMailbox.index / 32], XdrvMailbox.index % 32, XdrvMailbox.payload &1); + bitWrite(Settings->sensors[1][XdrvMailbox.index / 32], XdrvMailbox.index % 32, XdrvMailbox.payload &1); } } Response_P(PSTR("{\"" D_CMND_WEBSENSOR "\":")); - XsnsSensorState(); + XsnsSensorState(1); ResponseJsonEnd(); } @@ -3250,6 +3484,7 @@ void CmndWebButton(void) } } +#ifdef USE_CORS void CmndCors(void) { if (XdrvMailbox.data_len > 0) { @@ -3257,6 +3492,7 @@ void CmndCors(void) } ResponseCmndChar(SettingsText(SET_CORS)); } +#endif /*********************************************************************************************\ * Interface @@ -3281,8 +3517,9 @@ bool Xdrv01(uint8_t function) Web.wifi_test_counter--; AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_WIFI D_TRYING_TO_CONNECT " %s"), SettingsText(SET_STASSID1)); if ( WifiCheck_hasIP(WiFi.localIP()) ) { // Got IP - Connection Established + Web.wifi_test_AP_TIMEOUT = false; Web.wifi_test_counter = 0; - Web.wifiTest = WIFI_TEST_FINISHED_SUCCESSFUL; + Web.wifiTest = WIFI_TEST_FINISHED; AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CMND_SSID "1 %s: " D_CONNECTED " - " D_IP_ADDRESS " %_I"), SettingsText(SET_STASSID1), (uint32_t)WiFi.localIP()); // TasmotaGlobal.blinks = 255; // Signal wifi connection with blinks if (MAX_WIFI_OPTION != Web.old_wificonfig) { @@ -3301,15 +3538,37 @@ bool Xdrv01(uint8_t function) switch (WiFi.status()) { case WL_CONNECTED: AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CONNECT_FAILED_NO_IP_ADDRESS)); + Web.wifi_test_AP_TIMEOUT = false; break; case WL_NO_SSID_AVAIL: AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CONNECT_FAILED_AP_NOT_REACHED)); + Web.wifi_test_AP_TIMEOUT = false; break; case WL_CONNECT_FAILED: AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CONNECT_FAILED_WRONG_PASSWORD)); + Web.wifi_test_AP_TIMEOUT = false; break; - default: // WL_IDLE_STATUS and WL_DISCONNECTED + default: // WL_IDLE_STATUS and WL_DISCONNECTED - SSId in range but no answer from the router AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CONNECT_FAILED_AP_TIMEOUT)); + // If this error occurs twice, Tasmota will connect directly to the router without testing crendentials. + // ESP8266 in AP+STA mode can manage only 11b and 11g, so routers that are 11n-ONLY won't respond. + // For this case, the user will see in the UI a message to check credentials. After that, if the user hits + // save and connect again, and the CONNECT_FAILED_AP_TIMEOUT is shown again, Credentials will be saved and + // Tasmota will restart and try to connect in STA mode only (11b/g/n). + // + // If it fails again, depending on the WIFICONFIG settings, the user will need to wait or will need to + // push 6 times the button to enable Tasmota AP mode again. + if (Web.wifi_test_AP_TIMEOUT) { + Web.wifiTest = WIFI_TEST_FINISHED; + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_WIFI D_CMND_SSID "1 %s: " D_ATTEMPTING_CONNECTION), SettingsText(SET_STASSID1) ); + if (MAX_WIFI_OPTION != Web.old_wificonfig) { + TasmotaGlobal.wifi_state_flag = Settings->sta_config = Web.old_wificonfig; + } + TasmotaGlobal.save_data_counter = Web.save_data_counter; + Settings->save_data = Web.save_data_counter; + SettingsSaveAll(); + } + Web.wifi_test_AP_TIMEOUT = true; } int n = WiFi.scanNetworks(); // restart scan } @@ -3321,4 +3580,4 @@ bool Xdrv01(uint8_t function) } return result; } -#endif // USE_WEBSERVER +#endif // USE_WEBSERVER \ No newline at end of file diff --git a/tasmota/xdrv_02_1_mqtt_file.ino b/tasmota/xdrv_02_1_mqtt_file.ino index 4d9da0f47..7c6ddc63c 100644 --- a/tasmota/xdrv_02_1_mqtt_file.ino +++ b/tasmota/xdrv_02_1_mqtt_file.ino @@ -37,6 +37,7 @@ struct FMQTT { uint32_t file_pos = 0; // MQTT file position during upload/download uint32_t file_size = 0; // MQTT total file size uint32_t file_type = 0; // MQTT File type (See UploadTypes) + uint32_t chunk_size; uint8_t* file_buffer = nullptr; // MQTT file buffer const char* file_password = nullptr; // MQTT password MD5Builder md5; // MQTT md5 @@ -48,6 +49,41 @@ struct FMQTT { const uint32_t FileTransferHeaderSize = 21; // {"Id":116,"Data":""} +void MqttFileValidate(uint32_t error) { + if (error) { + FMqtt.file_buffer = nullptr; + + MqttDisableLogging(false); + + if (4 == error) { + ResponseCmndChar(PSTR(D_JSON_ABORTED)); + } else { + char error_txt[20]; + snprintf_P(error_txt, sizeof(error_txt), PSTR(D_JSON_ERROR " %d"), error); + ResponseCmndChar(error_txt); + } + } +} + +void MqttFilePublish(void) { + if (!FMqtt.file_buffer) { + MqttDisableLogging(false); + + FMqtt.file_id = 0; + FMqtt.file_size = 0; + FMqtt.file_type = 0; + FMqtt.file_binary = false; + FMqtt.file_md5 = (const char*) nullptr; // Force deallocation of the String internal memory + FMqtt.file_password = nullptr; + } + MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); + ResponseClear(); +} + +/*********************************************************************************************\ + * MQTT Upload to device +\*********************************************************************************************/ + uint32_t MqttFileUploadValidate(uint32_t rcv_id) { if (XdrvMailbox.grpflg) { return 5; } // No grouptopic supported @@ -105,6 +141,25 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { ResponseCmndChar(PSTR(D_JSON_STARTED)); MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); // Enforce stat/wemos10/FILEUPLOAD + + /* + The upload chunk size is the data size of the payload. + The PubSubClient upload buffer with length MQTT_MAX_PACKET_SIZE contains + - Header of 5 bytes (MQTT_MAX_HEADER_SIZE) + - Topic string terminated with a zero (stat/demo/FILEUPLOAD) + - Payload ({"Id":116,"Data":""}) or () + */ + const uint32_t PubSubClientHeaderSize = 5; // MQTT_MAX_HEADER_SIZE + FMqtt.chunk_size = MqttClient.getBufferSize() - PubSubClientHeaderSize - FMqtt.topic_size -1; +#ifdef USE_TASMESH + if (MESHroleNode()) { + // TasMesh default payload size (topic+payload) is 160 + if (MESHmaxPayloadSize() < FMqtt.chunk_size) { + FMqtt.chunk_size = MESHmaxPayloadSize(); + } + } +#endif // USE_TASMESH + } else if (((FMqtt.file_id > 0) && (FMqtt.file_id != rcv_id)) || (0 == XdrvMailbox.payload)) { // Error receiving data @@ -130,37 +185,6 @@ uint32_t MqttFileUploadValidate(uint32_t rcv_id) { return 0; // No error } -void MqttFileValidate(uint32_t error) { - if (error) { - FMqtt.file_buffer = nullptr; - - MqttDisableLogging(false); - - if (4 == error) { - ResponseCmndChar(PSTR(D_JSON_ABORTED)); - } else { - char error_txt[20]; - snprintf_P(error_txt, sizeof(error_txt), PSTR(D_JSON_ERROR " %d"), error); - ResponseCmndChar(error_txt); - } - } -} - -void MqttFilePublish(void) { - if (!FMqtt.file_buffer) { - MqttDisableLogging(false); - - FMqtt.file_id = 0; - FMqtt.file_size = 0; - FMqtt.file_type = 0; - FMqtt.file_binary = false; - FMqtt.file_md5 = (const char*) nullptr; // Force deallocation of the String internal memory - FMqtt.file_password = nullptr; - } - MqttPublishPrefixTopic_P(STAT, XdrvMailbox.command); - ResponseClear(); -} - void CmndFileUpload(void) { /* Upload bytes chunks of data either base64 encoded or binary with MD5 hash @@ -257,20 +281,11 @@ void CmndFileUpload(void) { if ((FMqtt.file_pos < FMqtt.file_size) || (FMqtt.file_md5.length() != 32)) { MqttDisableLogging(true); - /* - The upload chunk size is the data size of the payload. - The PubSubClient upload buffer with length MQTT_MAX_PACKET_SIZE contains - - Header of 5 bytes (MQTT_MAX_HEADER_SIZE) - - Topic string terminated with a zero (stat/demo/FILEUPLOAD) - - Payload ({"Id":116,"Data":""}) or () - */ - const uint32_t PubSubClientHeaderSize = 5; // MQTT_MAX_HEADER_SIZE - uint32_t chunk_size = MqttClient.getBufferSize() - PubSubClientHeaderSize - FMqtt.topic_size -1; - if (!binary_data) { - chunk_size = (((chunk_size - FileTransferHeaderSize) / 4) * 3) -2; // Calculate base64 chunk size + if (!binary_data && !FMqtt.file_pos) { + FMqtt.chunk_size = (((FMqtt.chunk_size - FileTransferHeaderSize) / 4) * 3) -2; // Calculate base64 chunk size } // {"Id":116,"MaxSize":"765"} - Response_P(PSTR("{\"Id\":%d,\"MaxSize\":%d}"), FMqtt.file_id, chunk_size); + Response_P(PSTR("{\"Id\":%d,\"MaxSize\":%d}"), FMqtt.file_id, FMqtt.chunk_size); } else { FMqtt.md5.calculate(); if (strcasecmp(FMqtt.file_md5.c_str(), FMqtt.md5.toString().c_str())) { @@ -310,6 +325,10 @@ void CmndFileUpload(void) { MqttFilePublish(); } +/*********************************************************************************************\ + * MQTT Download from device +\*********************************************************************************************/ + uint32_t MqttFileDownloadValidate(void) { if (XdrvMailbox.grpflg) { return 5; } // No grouptopic supported @@ -386,6 +405,12 @@ void CmndFileDownload(void) { */ chunk_size = (((ResponseSize() - FileTransferHeaderSize) / 4) * 3) -2; } +#ifdef USE_TASMESH + if (MESHroleNode() && (chunk_size > 2048)) { + chunk_size = 2048; + } +#endif // USE_TASMESH + uint32_t bytes_left = FMqtt.file_size - FMqtt.file_pos; uint32_t write_bytes = (bytes_left < chunk_size) ? bytes_left : chunk_size; uint8_t* buffer = FMqtt.file_buffer + FMqtt.file_pos; @@ -400,6 +425,9 @@ void CmndFileDownload(void) { char* base64_data = (char*)malloc(encode_base64_length(write_bytes) +2); if (base64_data) { Response_P(PSTR("{\"Id\":%d,\"Data\":\""), FMqtt.file_id); // FileTransferHeaderSize + + SHOW_FREE_MEM(PSTR("CmndFileDownload")); + encode_base64((unsigned char*)buffer, write_bytes, (unsigned char*)base64_data); ResponseAppend_P(base64_data); ResponseAppend_P("\"}"); diff --git a/tasmota/xdrv_02_9_mqtt.ino b/tasmota/xdrv_02_9_mqtt.ino index 30789fa2f..78ac582ae 100644 --- a/tasmota/xdrv_02_9_mqtt.ino +++ b/tasmota/xdrv_02_9_mqtt.ino @@ -197,8 +197,8 @@ void MqttInit(void) { Settings->mqtt_port = 8883; #endif //USE_MQTT_AZURE_IOT #ifdef USE_MQTT_TLS - if ((8883 == Settings->mqtt_port) || (8884 == Settings->mqtt_port)) { - // Turn on TLS for port 8883 (TLS) and 8884 (TLS, client certificate) + if ((8883 == Settings->mqtt_port) || (8884 == Settings->mqtt_port) || (443 == Settings->mqtt_port)) { + // Turn on TLS for port 8883 (TLS), 8884 (TLS, client certificate), 443 (TLS, user/password) Settings->flag4.mqtt_tls = true; } Mqtt.mqtt_tls = Settings->flag4.mqtt_tls; // this flag should not change even if we change the SetOption (until reboot) @@ -476,6 +476,13 @@ bool MqttPublishLib(const char* topic, const uint8_t* payload, unsigned int plen } } +#ifdef USE_TASMESH + if (MESHrouteMQTTtoMESH(topic, (char*)payload, retained)) { // If we are a node, send this via ESP-Now + yield(); + return true; + } +#endif // USE_TASMESH + #ifdef USE_MQTT_AZURE_IOT String sourceTopicString = urlEncodeBase64(String(topic)); String topicString = "devices/" + String(SettingsText(SET_MQTT_CLIENT)); @@ -506,9 +513,7 @@ bool MqttPublishLib(const char* topic, const uint8_t* payload, unsigned int plen } void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len) { -#ifdef USE_DEBUG_DRIVER - ShowFreeMem(PSTR("MqttDataHandler")); -#endif + SHOW_FREE_MEM(PSTR("MqttDataHandler")); // Do not allow more data than would be feasable within stack space if (data_len >= MQTT_MAX_PACKET_SIZE) { return; } @@ -555,6 +560,14 @@ void MqttDataHandler(char* mqtt_topic, uint8_t* mqtt_data, unsigned int data_len TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide logging } +#ifdef USE_TASMESH +#ifdef ESP32 + if (MESHinterceptMQTTonBroker(topic, (uint8_t*)mqtt_data, data_len +1)) { + return; // Check if this is a message for a node + } +#endif // ESP32 +#endif // USE_TASMESH + // MQTT pre-processing XdrvMailbox.index = strlen(topic); XdrvMailbox.data_len = data_len; @@ -605,9 +618,7 @@ void MqttPublishLoggingAsync(bool refresh) { void MqttPublishPayload(const char* topic, const char* payload, uint32_t binary_length, bool retained) { // Publish payload string or binary when binary_length set with optional retained -#ifdef USE_DEBUG_DRIVER - ShowFreeMem(PSTR("MqttPublish")); -#endif + SHOW_FREE_MEM(PSTR("MqttPublish")); bool binary_data = (binary_length > 0); if (!binary_data) { @@ -621,11 +632,16 @@ void MqttPublishPayload(const char* topic, const char* payload, uint32_t binary_ // To lower heap usage the payload is not copied to the heap but used directly String log_data_topic; // 20210420 Moved to heap to solve tight stack resulting in exception 2 if (Settings->flag.mqtt_enabled && MqttPublishLib(topic, (const uint8_t*)payload, binary_length, retained)) { // SetOption3 - Enable MQTT +#ifdef USE_TASMESH + log_data_topic = (MESHroleNode()) ? F("MSH: ") : F(D_LOG_MQTT); // MSH: or MQT: +#else log_data_topic = F(D_LOG_MQTT); // MQT: +#endif // USE_TASMESH log_data_topic += topic; // stat/tasmota/STATUS2 } else { log_data_topic = F(D_LOG_RESULT); // RSL: - log_data_topic += strrchr(topic,'/')+1; // STATUS2 + char *command = strrchr(topic, '/'); // If last part of topic it is always the command + log_data_topic += (command == nullptr) ? topic : command +1; // STATUS2 retained = false; // Without MQTT enabled there is no retained message } log_data_topic += F(" = "); // = @@ -654,16 +670,12 @@ void MqttPublishPayload(const char* topic, const char* payload) { } void MqttPublish(const char* topic, bool retained) { - // Publish default TasmotaGlobal.mqtt_data string with optional retained -#ifdef MQTT_DATA_STRING - MqttPublishPayload(topic, TasmotaGlobal.mqtt_data.c_str(), 0, retained); -#else - MqttPublishPayload(topic, TasmotaGlobal.mqtt_data, 0, retained); -#endif + // Publish default ResponseData string with optional retained + MqttPublishPayload(topic, ResponseData(), 0, retained); } void MqttPublish(const char* topic) { - // Publish default TasmotaGlobal.mqtt_data string no retained + // Publish default ResponseData string no retained MqttPublish(topic, false); } @@ -734,40 +746,36 @@ void MqttPublishPayloadPrefixTopicRulesProcess_P(uint32_t prefix, const char* su } void MqttPublishPayloadPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic, const char* payload) { - // Publish //> default TasmotaGlobal.mqtt_data string no retained + // Publish //> default ResponseData string no retained // then process rules MqttPublishPayloadPrefixTopicRulesProcess_P(prefix, subtopic, payload, false); } void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic, bool retained) { - // Publish //> default TasmotaGlobal.mqtt_data string with optional retained -#ifdef MQTT_DATA_STRING - MqttPublishPayloadPrefixTopic_P(prefix, subtopic, TasmotaGlobal.mqtt_data.c_str(), 0, retained); -#else - MqttPublishPayloadPrefixTopic_P(prefix, subtopic, TasmotaGlobal.mqtt_data, 0, retained); -#endif + // Publish //> default ResponseData string with optional retained + MqttPublishPayloadPrefixTopic_P(prefix, subtopic, ResponseData(), 0, retained); } void MqttPublishPrefixTopic_P(uint32_t prefix, const char* subtopic) { - // Publish //> default TasmotaGlobal.mqtt_data string no retained + // Publish //> default ResponseData string no retained MqttPublishPrefixTopic_P(prefix, subtopic, false); } void MqttPublishPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic, bool retained) { - // Publish //> default TasmotaGlobal.mqtt_data string with optional retained + // Publish //> default ResponseData string with optional retained // then process rules MqttPublishPrefixTopic_P(prefix, subtopic, retained); XdrvRulesProcess(0); } void MqttPublishPrefixTopicRulesProcess_P(uint32_t prefix, const char* subtopic) { - // Publish //> default TasmotaGlobal.mqtt_data string no retained + // Publish //> default ResponseData string no retained // then process rules MqttPublishPrefixTopicRulesProcess_P(prefix, subtopic, false); } void MqttPublishTeleSensor(void) { - // Publish tele//SENSOR default TasmotaGlobal.mqtt_data string with optional retained + // Publish tele//SENSOR default ResponseData string with optional retained // then process rules MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR), Settings->flag.mqtt_sensor_retain); // CMND_SENSORRETAIN } @@ -801,6 +809,11 @@ void MqttPublishPowerState(uint32_t device) { Response_P(GetStateText(bitRead(TasmotaGlobal.power, device -1))); MqttPublish(stopic, Settings->flag.mqtt_power_retain); // CMND_POWERRETAIN } + +#ifdef USE_INFLUXDB + InfluxDbPublishPowerState(device); +#endif + #ifdef USE_SONOFF_IFAN } #endif // USE_SONOFF_IFAN @@ -842,8 +855,11 @@ void MqttDisconnected(int state) { } MqttClient.disconnect(); + // Check if this solves intermittent MQTT re-connection failures when broker is restarted + EspClient.stop(); - AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), SettingsText(SET_MQTT_HOST), Settings->mqtt_port, state, Mqtt.retry_counter); + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT D_CONNECT_FAILED_TO " %s:%d, rc %d. " D_RETRY_IN " %d " D_UNIT_SECOND), + SettingsText(SET_MQTT_HOST), Settings->mqtt_port, state, Mqtt.retry_counter); TasmotaGlobal.rules_flag.mqtt_disconnected = 1; } @@ -1056,17 +1072,9 @@ void MqttReconnect(void) { } String azureMqtt_userString = String(SettingsText(SET_MQTT_HOST)) + "/" + String(SettingsText(SET_MQTT_CLIENT)); + "/?api-version=2018-06-30"; -#ifdef MQTT_DATA_STRING - if (MqttClient.connect(TasmotaGlobal.mqtt_client, azureMqtt_userString.c_str(), azureMqtt_password.c_str(), stopic, 1, lwt_retain, TasmotaGlobal.mqtt_data.c_str(), MQTT_CLEAN_SESSION)) { + if (MqttClient.connect(TasmotaGlobal.mqtt_client, azureMqtt_userString.c_str(), azureMqtt_password.c_str(), stopic, 1, lwt_retain, ResponseData(), MQTT_CLEAN_SESSION)) { #else - if (MqttClient.connect(TasmotaGlobal.mqtt_client, azureMqtt_userString.c_str(), azureMqtt_password.c_str(), stopic, 1, lwt_retain, TasmotaGlobal.mqtt_data, MQTT_CLEAN_SESSION)) { -#endif -#else -#ifdef MQTT_DATA_STRING - if (MqttClient.connect(TasmotaGlobal.mqtt_client, mqtt_user, mqtt_pwd, stopic, 1, lwt_retain, TasmotaGlobal.mqtt_data.c_str(), MQTT_CLEAN_SESSION)) { -#else - if (MqttClient.connect(TasmotaGlobal.mqtt_client, mqtt_user, mqtt_pwd, stopic, 1, lwt_retain, TasmotaGlobal.mqtt_data, MQTT_CLEAN_SESSION)) { -#endif + if (MqttClient.connect(TasmotaGlobal.mqtt_client, mqtt_user, mqtt_pwd, stopic, 1, lwt_retain, ResponseData(), MQTT_CLEAN_SESSION)) { #endif // USE_MQTT_AZURE_IOT #ifdef USE_MQTT_TLS if (Mqtt.mqtt_tls) { @@ -1115,10 +1123,116 @@ void MqttReconnect(void) { } else { #ifdef USE_MQTT_TLS if (Mqtt.mqtt_tls) { +/* + getLastError codes as documented in lib\lib_ssl\bearssl-esp8266\src\t_bearssl_ssl.h + SSL-level error codes + | Receive Fatal Alert + | | Send Fatal Alert + | | | + 0 : 256 : 512 : BR_ERR_OK + 1 : 257 : 513 : BR_ERR_BAD_PARAM - caller-provided parameter is incorrect + 2 : 258 : 514 : BR_ERR_BAD_STATE - operation requested by the caller cannot be applied with the current context state (e.g. reading data while outgoing data is waiting to be sent) + 3 : 259 : 515 : BR_ERR_UNSUPPORTED_VERSION - incoming protocol or record version is unsupported + 4 : 260 : 516 : BR_ERR_BAD_VERSION - incoming record version does not match the expected version + 5 : 261 : 517 : BR_ERR_BAD_LENGTH - incoming record length is invalid + 6 : 262 : 518 : BR_ERR_TOO_LARGE - incoming record is too large to be processed, or buffer is too small for the handshake message to send + 7 : 263 : 519 : BR_ERR_BAD_MAC - decryption found an invalid padding, or the record MAC is not correct + 8 : 264 : 520 : BR_ERR_NO_RANDOM - no initial entropy was provided, and none can be obtained from the OS + 9 : 265 : 521 : BR_ERR_UNKNOWN_TYPE - incoming record type is unknown + 10 : 266 : 522 : BR_ERR_UNEXPECTED - incoming record or message has wrong type with regards to the current engine state + 12 : 268 : 524 : BR_ERR_BAD_CCS - ChangeCipherSpec message from the peer has invalid contents + 13 : 269 : 525 : BR_ERR_BAD_ALERT - alert message from the peer has invalid contents (odd length) + 14 : 270 : 526 : BR_ERR_BAD_HANDSHAKE - incoming handshake message decoding failed + 15 : 271 : 527 : BR_ERR_OVERSIZED_ID - ServerHello contains a session ID which is larger than 32 bytes + 16 : 272 : 528 : BR_ERR_BAD_CIPHER_SUITE - server wants to use a cipher suite that we did not claim to support. This is also reported if we tried to advertise a cipher suite that we do not support + 17 : 273 : 529 : BR_ERR_BAD_COMPRESSION - server wants to use a compression that we did not claim to support + 18 : 274 : 530 : BR_ERR_BAD_FRAGLEN - server's max fragment length does not match client's + 19 : 275 : 531 : BR_ERR_BAD_SECRENEG - secure renegotiation failed + 20 : 276 : 532 : BR_ERR_EXTRA_EXTENSION - server sent an extension type that we did not announce, or used the same extension type several times in a single ServerHello + 21 : 277 : 533 : BR_ERR_BAD_SNI - invalid Server Name Indication contents (when used by the server, this extension shall be empty) + 22 : 278 : 534 : BR_ERR_BAD_HELLO_DONE - invalid ServerHelloDone from the server (length is not 0) + 23 : 279 : 535 : BR_ERR_LIMIT_EXCEEDED - internal limit exceeded (e.g. server's public key is too large) + 24 : 280 : 536 : BR_ERR_BAD_FINISHED - Finished message from peer does not match the expected value + 25 : 281 : 537 : BR_ERR_RESUME_MISMATCH - session resumption attempt with distinct version or cipher suite + 26 : 282 : 538 : BR_ERR_INVALID_ALGORITHM - unsupported or invalid algorithm (ECDHE curve, signature algorithm, hash function) + 27 : 283 : 539 : BR_ERR_BAD_SIGNATURE - invalid signature (on ServerKeyExchange from server, or in CertificateVerify from client) + 28 : 284 : 540 : BR_ERR_WRONG_KEY_USAGE - peer's public key does not have the proper type or is not allowed for requested operation + 29 : 285 : 541 : BR_ERR_NO_CLIENT_AUTH - client did not send a certificate upon request, or the client certificate could not be validated + 31 : 287 : 543 : BR_ERR_IO - I/O error or premature close on underlying transport stream. This error code is set only by the simplified I/O API ("br_sslio_*") + + getLastError codes as documented in lib\lib_ssl\bearssl-esp8266\src\t_bearssl_x509.h + 32 : BR_ERR_X509_OK - validation was successful; this is not actually an error + 33 : BR_ERR_X509_INVALID_VALUE - invalid value in an ASN.1 structure + 34 : BR_ERR_X509_TRUNCATED - truncated certificate + 35 : BR_ERR_X509_EMPTY_CHAIN - empty certificate chain (no certificate at all) + 36 : BR_ERR_X509_INNER_TRUNC - decoding error: inner element extends beyond outer element size + 37 : BR_ERR_X509_BAD_TAG_CLASS - decoding error: unsupported tag class (application or private) + 38 : BR_ERR_X509_BAD_TAG_VALUE - decoding error: unsupported tag value + 39 : BR_ERR_X509_INDEFINITE_LENGTH - decoding error: indefinite length + 40 : BR_ERR_X509_EXTRA_ELEMENT - decoding error: extraneous element + 41 : BR_ERR_X509_UNEXPECTED - decoding error: unexpected element + 42 : BR_ERR_X509_NOT_CONSTRUCTED - decoding error: expected constructed element, but is primitive + 43 : BR_ERR_X509_NOT_PRIMITIVE - decoding error: expected primitive element, but is constructed + 44 : BR_ERR_X509_PARTIAL_BYTE - decoding error: BIT STRING length is not multiple of 8 + 45 : BR_ERR_X509_BAD_BOOLEAN - decoding error: BOOLEAN value has invalid length + 46 : BR_ERR_X509_OVERFLOW - decoding error: value is off-limits + 47 : BR_ERR_X509_BAD_DN - invalid distinguished name + 48 : BR_ERR_X509_BAD_TIME - invalid date/time representation + 49 : BR_ERR_X509_UNSUPPORTED - certificate contains unsupported features that cannot be ignored + 50 : BR_ERR_X509_LIMIT_EXCEEDED - key or signature size exceeds internal limits + 51 : BR_ERR_X509_WRONG_KEY_TYPE - key type does not match that which was expected + 52 : BR_ERR_X509_BAD_SIGNATURE - signature is invalid + 53 : BR_ERR_X509_TIME_UNKNOWN - validation time is unknown + 54 : BR_ERR_X509_EXPIRED - certificate is expired or not yet valid + 55 : BR_ERR_X509_DN_MISMATCH - issuer/subject DN mismatch in the chain + 56 : BR_ERR_X509_BAD_SERVER_NAME - expected server name was not found in the chain + 57 : BR_ERR_X509_CRITICAL_EXTENSION - unknown critical extension in certificate + 58 : BR_ERR_X509_NOT_CA - not a CA, or path length constraint violation + 59 : BR_ERR_X509_FORBIDDEN_KEY_USAGE - Key Usage extension prohibits intended usage + 60 : BR_ERR_X509_WEAK_PUBLIC_KEY - public key found in certificate is too small + 62 : BR_ERR_X509_NOT_TRUSTED - chain could not be linked to a trust anchor + + getLastError codes as documented in lib\lib_ssl\bearssl-esp8266\src\t_bearssl_ssl.h + 10 : 266 : BR_ALERT_UNEXPECTED_MESSAGE + 20 : 276 : BR_ALERT_BAD_RECORD_MAC + 22 : 278 : BR_ALERT_RECORD_OVERFLOW + 30 : 286 : BR_ALERT_DECOMPRESSION_FAILURE + 40 : 296 : BR_ALERT_HANDSHAKE_FAILURE + 42 : 298 : BR_ALERT_BAD_CERTIFICATE + 43 : 299 : BR_ALERT_UNSUPPORTED_CERTIFICATE + 44 : 300 : BR_ALERT_CERTIFICATE_REVOKED + 45 : 301 : BR_ALERT_CERTIFICATE_EXPIRED + 46 : 302 : BR_ALERT_CERTIFICATE_UNKNOWN + 47 : 303 : BR_ALERT_ILLEGAL_PARAMETER + 48 : 304 : BR_ALERT_UNKNOWN_CA + 49 : 305 : BR_ALERT_ACCESS_DENIED + 50 : 306 : BR_ALERT_DECODE_ERROR + 51 : 307 : BR_ALERT_DECRYPT_ERROR + 70 : 326 : BR_ALERT_PROTOCOL_VERSION + 71 : 327 : BR_ALERT_INSUFFICIENT_SECURITY + 80 : 336 : BR_ALERT_INTERNAL_ERROR + 90 : 346 : BR_ALERT_USER_CANCELED + 100 : 356 : BR_ALERT_NO_RENEGOTIATION + 110 : 366 : BR_ALERT_UNSUPPORTED_EXTENSION + 120 : 376 : BR_ALERT_NO_APPLICATION_PROTOCOL +*/ AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_MQTT "TLS connection error: %d"), tlsClient->getLastError()); } #endif - MqttDisconnected(MqttClient.state()); // status codes are documented here http://pubsubclient.knolleary.net/api.html#state +/* + State codes as documented here http://pubsubclient.knolleary.net/api.html#state + -4 : MQTT_CONNECTION_TIMEOUT - the server didn't respond within the keepalive time + -3 : MQTT_CONNECTION_LOST - the network connection was broken + -2 : MQTT_CONNECT_FAILED - the network connection failed + -1 : MQTT_DISCONNECTED - the client is disconnected cleanly + 0 : MQTT_CONNECTED - the client is connected + 1 : MQTT_CONNECT_BAD_PROTOCOL - the server doesn't support the requested version of MQTT + 2 : MQTT_CONNECT_BAD_CLIENT_ID - the server rejected the client identifier + 3 : MQTT_CONNECT_UNAVAILABLE - the server was unable to accept the connection + 4 : MQTT_CONNECT_BAD_CREDENTIALS - the username/password were rejected + 5 : MQTT_CONNECT_UNAUTHORIZED - the client was not authorized to connect +*/ + MqttDisconnected(MqttClient.state()); } } @@ -1745,7 +1859,7 @@ const char HTTP_FORM_MQTT1[] PROGMEM = "

    " D_CLIENT " (%s)

    "; const char HTTP_FORM_MQTT2[] PROGMEM = "

    " D_USER " (" MQTT_USER ")

    " - "


    " + "


    " "

    " D_TOPIC " = %%topic%% (%s)

    " "

    " D_FULL_TOPIC " (%s)

    "; diff --git a/tasmota/xdrv_03_energy.ino b/tasmota/xdrv_03_energy.ino index 2e679a497..dbd1118aa 100644 --- a/tasmota/xdrv_03_energy.ino +++ b/tasmota/xdrv_03_energy.ino @@ -56,7 +56,7 @@ const char kEnergyCommands[] PROGMEM = "|" // No prefix D_CMND_SAFEPOWER "|" D_CMND_SAFEPOWERHOLD "|" D_CMND_SAFEPOWERWINDOW "|" #endif // USE_ENERGY_POWER_LIMIT #endif // USE_ENERGY_MARGIN_DETECTION - D_CMND_ENERGYRESET "|" D_CMND_TARIFF; + D_CMND_ENERGYTODAY "|" D_CMND_ENERGYYESTERDAY "|" D_CMND_ENERGYTOTAL "|" D_CMND_ENERGYUSAGE "|" D_CMND_ENERGYEXPORT "|" D_CMND_TARIFF; void (* const EnergyCommand[])(void) PROGMEM = { &CmndPowerCal, &CmndVoltageCal, &CmndCurrentCal, &CmndFrequencyCal, @@ -69,9 +69,9 @@ void (* const EnergyCommand[])(void) PROGMEM = { &CmndSafePower, &CmndSafePowerHold, &CmndSafePowerWindow, #endif // USE_ENERGY_POWER_LIMIT #endif // USE_ENERGY_MARGIN_DETECTION - &CmndEnergyReset, &CmndTariff}; + &CmndEnergyToday, &CmndEnergyYesterday, &CmndEnergyTotal, &CmndEnergyUsage, &CmndEnergyExport, &CmndTariff}; -const char kEnergyPhases[] PROGMEM = "|%s / %s|%s / %s / %s||[%s,%s]|[%s,%s,%s]"; +const char kEnergyPhases[] PROGMEM = "|%*_f / %*_f|%*_f / %*_f / %*_f||[%*_f,%*_f]|[%*_f,%*_f,%*_f]"; struct ENERGY { float voltage[ENERGY_MAX_PHASES]; // 123.1 V @@ -81,19 +81,19 @@ struct ENERGY { float reactive_power[ENERGY_MAX_PHASES]; // 123.1 VAr float power_factor[ENERGY_MAX_PHASES]; // 0.12 float frequency[ENERGY_MAX_PHASES]; // 123.1 Hz -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) float import_active[ENERGY_MAX_PHASES]; // 123.123 kWh -#endif // SDM630_IMPORT || SDM72_IMPEXP float export_active[ENERGY_MAX_PHASES]; // 123.123 kWh + float start_energy[ENERGY_MAX_PHASES]; // 12345.12345 kWh total previous + float daily[ENERGY_MAX_PHASES]; // 123.123 kWh + float total[ENERGY_MAX_PHASES]; // 12345.12345 kWh total energy + float daily_sum; // 123.123 kWh + float total_sum; // 12345.12345 kWh total energy + float yesterday_sum; // 123.123 kWh - float start_energy; // 12345.12345 kWh total previous - float daily; // 123.123 kWh - float total; // 12345.12345 kWh total energy - - unsigned long kWhtoday_delta; // 1212312345 Wh 10^-5 (deca micro Watt hours) - Overflows to Energy.kWhtoday (HLW and CSE only) - unsigned long kWhtoday_offset; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily - unsigned long kWhtoday; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily - unsigned long period; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily + uint32_t kWhtoday_delta[ENERGY_MAX_PHASES]; // 1212312345 Wh 10^-5 (deca micro Watt hours) - Overflows to Energy.kWhtoday (HLW and CSE only) + uint32_t kWhtoday_offset[ENERGY_MAX_PHASES]; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily + uint32_t kWhtoday[ENERGY_MAX_PHASES]; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily + uint32_t period[ENERGY_MAX_PHASES]; // 12312312 Wh * 10^-2 (deca milli Watt hours) - 5764 = 0.05764 kWh = 0.058 kWh = Energy.daily uint8_t fifth_second; uint8_t command_code; @@ -134,27 +134,38 @@ Ticker ticker_energy; /********************************************************************************************/ -char* EnergyFormatIndex(char* result, char* input, bool json, uint32_t index, bool single = false) -{ - char layout[16]; +char* EnergyFormatIndex(char* result, float* input, uint32_t resolution, bool json, uint32_t index, bool single = false) { + char layout[20]; GetTextIndexed(layout, sizeof(layout), (index -1) + (ENERGY_MAX_PHASES * json), kEnergyPhases); switch (index) { case 2: - snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, layout, input, input + FLOATSZ); // Dirty + ext_snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, layout, resolution, &input[0], resolution, &input[1]); break; case 3: - snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, layout, input, input + FLOATSZ, input + FLOATSZ + FLOATSZ); // Even dirtier + ext_snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, layout, resolution, &input[0], resolution, &input[1], resolution, &input[2]); break; default: - snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, input); + ext_snprintf_P(result, FLOATSZ * ENERGY_MAX_PHASES, PSTR("%*_f"), resolution, &input[0]); } return result; } -char* EnergyFormat(char* result, char* input, bool json, bool single = false) -{ +char* EnergyFormat(char* result, float* input, uint32_t resolution, bool json, bool single = false) { uint8_t index = (single) ? 1 : Energy.phase_count; // 1,2,3 - return EnergyFormatIndex(result, input, json, index, single); + return EnergyFormatIndex(result, input, resolution, json, index, single); +} + +char* EnergyFormatSum(char* result, float* input, uint32_t resolution, bool json, bool single = false) { + uint8_t index = (single) ? 1 : Energy.phase_count; // 1,2,3 + float input_sum = 0.0; + if (!Settings->flag5.energy_phase) { + for (uint32_t i = 0; i < index; i++) { + input_sum += input[i]; + } + input = &input_sum; + index = 1; + } + return EnergyFormatIndex(result, input, resolution, json, index, single); } /********************************************************************************************/ @@ -183,22 +194,31 @@ bool EnergyTariff1Active() // Off-Peak hours } } -void EnergyUpdateToday(void) -{ - if (Energy.kWhtoday_delta > 1000) { - unsigned long delta = Energy.kWhtoday_delta / 1000; - Energy.kWhtoday_delta -= (delta * 1000); - Energy.kWhtoday += delta; - } +void EnergyUpdateToday(void) { + Energy.total_sum = 0.0; + Energy.yesterday_sum = 0.0; + Energy.daily_sum = 0.0; - RtcSettings.energy_kWhtoday = Energy.kWhtoday_offset + Energy.kWhtoday; - Energy.daily = (float)(RtcSettings.energy_kWhtoday) / 100000; - Energy.total = (float)(RtcSettings.energy_kWhtotal + RtcSettings.energy_kWhtoday) / 100000; + for (uint32_t i = 0; i < Energy.phase_count; i++) { + if (Energy.kWhtoday_delta[i] > 1000) { + uint32_t delta = Energy.kWhtoday_delta[i] / 1000; + Energy.kWhtoday_delta[i] -= (delta * 1000); + Energy.kWhtoday[i] += delta; + } + + RtcSettings.energy_kWhtoday_ph[i] = Energy.kWhtoday_offset[i] + Energy.kWhtoday[i]; + Energy.daily[i] = (float)(RtcSettings.energy_kWhtoday_ph[i]) / 100000; + Energy.total[i] = (float)(RtcSettings.energy_kWhtotal_ph[i] + RtcSettings.energy_kWhtoday_ph[i]) / 100000; + + Energy.total_sum += Energy.total[i]; + Energy.yesterday_sum += (float)Settings->energy_kWhyesterday_ph[i] / 100000; + Energy.daily_sum += Energy.daily[i]; + } if (RtcTime.valid){ // We calc the difference only if we have a valid RTC time. - uint32_t energy_diff = (uint32_t)(Energy.total * 100000) - RtcSettings.energy_usage.last_usage_kWhtotal; - RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total * 100000); + uint32_t energy_diff = (uint32_t)(Energy.total_sum * 100000) - RtcSettings.energy_usage.last_usage_kWhtotal; + RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total_sum * 100000); uint32_t return_diff = 0; if (!isnan(Energy.export_active[0])) { @@ -225,27 +245,29 @@ void EnergyUpdateToday(void) } } -void EnergyUpdateTotal(float value, bool kwh) -{ -// AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Energy Total %4_f %sWh"), &value, (kwh) ? "k" : ""); +void EnergyUpdateTotal(void) { + // Provide total import active energy as float Energy.import_active[phase] in kWh: 98Wh = 0.098kWh - uint32_t multiplier = (kwh) ? 100000 : 100; // kWh or Wh to deca milli Wh + for (uint32_t i = 0; i < Energy.phase_count; i++) { + AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: EnergyTotal[%d] %4_f kWh"), i, &Energy.import_active[i]); - if (0 == Energy.start_energy || (value < Energy.start_energy)) { - Energy.start_energy = value; // Init after restart and handle roll-over if any - } - else if (value != Energy.start_energy) { - Energy.kWhtoday = (unsigned long)((value - Energy.start_energy) * multiplier); + if (0 == Energy.start_energy[i] || (Energy.import_active[i] < Energy.start_energy[i])) { + Energy.start_energy[i] = Energy.import_active[i]; // Init after restart and handle roll-over if any + } + else if (Energy.import_active[i] != Energy.start_energy[i]) { + Energy.kWhtoday[i] = (uint32_t)((Energy.import_active[i] - Energy.start_energy[i]) * 100000); + } + + if ((Energy.total[i] < (Energy.import_active[i] - 0.01)) && // We subtract a little offset to avoid continuous updates + Settings->flag3.hardware_energy_total) { // SetOption72 - Enable hardware energy total counter as reference (#6561) + RtcSettings.energy_kWhtotal_ph[i] = (unsigned long)((Energy.import_active[i] * 100000) - Energy.kWhtoday_offset[i] - Energy.kWhtoday[i]); + Settings->energy_kWhtotal_ph[i] = RtcSettings.energy_kWhtotal_ph[i]; + Energy.total[i] = (float)(RtcSettings.energy_kWhtotal_ph[i] + Energy.kWhtoday_offset[i] + Energy.kWhtoday[i]) / 100000; + Settings->energy_kWhtotal_time = (!Energy.kWhtoday_offset[i]) ? LocalTime() : Midnight(); + // AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Energy Total updated with hardware value")); + } } - if ((Energy.total < (value - 0.01)) && // We subtract a little offset to avoid continuous updates - Settings->flag3.hardware_energy_total) { // SetOption72 - Enable hardware energy total counter as reference (#6561) - RtcSettings.energy_kWhtotal = (unsigned long)((value * multiplier) - Energy.kWhtoday_offset - Energy.kWhtoday); - Settings->energy_kWhtotal = RtcSettings.energy_kWhtotal; - Energy.total = (float)(RtcSettings.energy_kWhtotal + Energy.kWhtoday_offset + Energy.kWhtoday) / 100000; - Settings->energy_kWhtotal_time = (!Energy.kWhtoday_offset) ? LocalTime() : Midnight(); -// AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Energy Total updated with hardware value")); - } EnergyUpdateToday(); } @@ -264,23 +286,26 @@ void Energy200ms(void) if (RtcTime.valid) { if (!Energy.kWhtoday_offset_init && (RtcTime.day_of_year == Settings->energy_kWhdoy)) { - Energy.kWhtoday_offset = Settings->energy_kWhtoday; + for (uint32_t i = 0; i < 3; i++) { + Energy.kWhtoday_offset[i] = Settings->energy_kWhtoday_ph[i]; + } Energy.kWhtoday_offset_init = true; } if (LocalTime() == Midnight()) { - Settings->energy_kWhyesterday = RtcSettings.energy_kWhtoday; + for (uint32_t i = 0; i < 3; i++) { + Settings->energy_kWhyesterday_ph[i] = RtcSettings.energy_kWhtoday_ph[i]; - RtcSettings.energy_kWhtotal += RtcSettings.energy_kWhtoday; - Settings->energy_kWhtotal = RtcSettings.energy_kWhtotal; + RtcSettings.energy_kWhtotal_ph[i] += RtcSettings.energy_kWhtoday_ph[i]; + Settings->energy_kWhtotal_ph[i] = RtcSettings.energy_kWhtotal_ph[i]; - Energy.period -= RtcSettings.energy_kWhtoday; // this becomes a large unsigned, effectively a negative for EnergyShow calculation - Energy.kWhtoday = 0; - Energy.kWhtoday_offset = 0; - RtcSettings.energy_kWhtoday = 0; - Energy.start_energy = 0; + Energy.period[i] -= RtcSettings.energy_kWhtoday_ph[i]; // this becomes a large unsigned, effectively a negative for EnergyShow calculation + Energy.kWhtoday[i] = 0; + Energy.kWhtoday_offset[i] = 0; + RtcSettings.energy_kWhtoday_ph[i] = 0; + Energy.start_energy[i] = 0; // Energy.kWhtoday_delta = 0; // dont zero this, we need to carry the remainder over to tomorrow - + } EnergyUpdateToday(); #if defined(USE_ENERGY_MARGIN_DETECTION) && defined(USE_ENERGY_POWER_LIMIT) Energy.max_energy_state = 3; @@ -302,8 +327,10 @@ void EnergySaveState(void) { Settings->energy_kWhdoy = (RtcTime.valid) ? RtcTime.day_of_year : 0; - Settings->energy_kWhtoday = RtcSettings.energy_kWhtoday; - Settings->energy_kWhtotal = RtcSettings.energy_kWhtotal; + for (uint32_t i = 0; i < 3; i++) { + Settings->energy_kWhtoday_ph[i] = RtcSettings.energy_kWhtoday_ph[i]; + Settings->energy_kWhtotal_ph[i] = RtcSettings.energy_kWhtotal_ph[i]; + } Settings->energy_usage = RtcSettings.energy_usage; } @@ -371,12 +398,20 @@ void EnergyMarginCheck(void) Energy.power_history[phase][2] = active_power; } if (jsonflg) { +/* char power_diff_chr[Energy.phase_count][FLOATSZ]; for (uint32_t phase = 0; phase < Energy.phase_count; phase++) { dtostrfd(power_diff[phase], 0, power_diff_chr[phase]); } char value_chr[FLOATSZ * ENERGY_MAX_PHASES]; ResponseAppend_P(PSTR("\"" D_CMND_POWERDELTA "\":%s"), EnergyFormat(value_chr, power_diff_chr[0], 1)); +*/ + float power_diff_f[Energy.phase_count]; + for (uint32_t phase = 0; phase < Energy.phase_count; phase++) { + power_diff_f[phase] = power_diff[phase]; + } + char value_chr[FLOATSZ * ENERGY_MAX_PHASES]; + ResponseAppend_P(PSTR("\"" D_CMND_POWERDELTA "\":%s"), EnergyFormat(value_chr, power_diff_f, 0, 1)); } uint16_t energy_power_u = (uint16_t)(Energy.active_power[0]); @@ -467,7 +502,7 @@ void EnergyMarginCheck(void) // Max Energy if (Settings->energy_max_energy) { - uint16_t energy_daily_u = (uint16_t)(Energy.daily * 1000); + uint16_t energy_daily_u = (uint16_t)(Energy.daily_sum * 1000); if (!Energy.max_energy_state && (RtcTime.hour == Settings->energy_max_energy_start)) { Energy.max_energy_state = 1; ResponseTime_P(PSTR(",\"" D_JSON_ENERGYMONITOR "\":\"%s\"}"), GetStateText(1)); @@ -476,7 +511,7 @@ void EnergyMarginCheck(void) } else if ((1 == Energy.max_energy_state ) && (energy_daily_u >= Settings->energy_max_energy)) { Energy.max_energy_state = 2; - ResponseTime_P(PSTR(",\"" D_JSON_MAXENERGYREACHED "\":%3_f}"), &Energy.daily); + ResponseTime_P(PSTR(",\"" D_JSON_MAXENERGYREACHED "\":%3_f}"), &Energy.daily_sum); MqttPublishPrefixTopicRulesProcess_P(STAT, S_RSLT_WARNING); EnergyMqttShow(); SetAllPower(POWER_ALL_OFF, SRC_MAXENERGY); @@ -554,93 +589,126 @@ void EnergyCommandCalResponse(uint32_t nvalue) { ResponseCmndNumber(nvalue); } -void CmndEnergyReset(void) { - uint32_t values[2] = { 0 }; - uint32_t params = ParseParameters(2, values); - values[0] *= 100; +void ResponseCmndEnergyTotalYesterdayToday(void) { + char value_chr[FLOATSZ * ENERGY_MAX_PHASES]; // Used by EnergyFormatIndex + char value2_chr[FLOATSZ * ENERGY_MAX_PHASES]; + char value3_chr[FLOATSZ * ENERGY_MAX_PHASES]; - if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= 5)) { - if (params > 0) { - switch (XdrvMailbox.index) { - case 1: - // Reset Energy Today - Energy.kWhtoday_offset = values[0]; - Energy.kWhtoday = 0; - Energy.kWhtoday_delta = 0; - Energy.start_energy = 0; - Energy.period = Energy.kWhtoday_offset; - Settings->energy_kWhtoday = Energy.kWhtoday_offset; - RtcSettings.energy_kWhtoday = Energy.kWhtoday_offset; - Energy.daily = (float)Energy.kWhtoday_offset / 100000; - if( params > 1) { - Settings->energy_kWhtotal_time = values[1]; - } - else { - if (!RtcSettings.energy_kWhtotal && !Energy.kWhtoday_offset) { - Settings->energy_kWhtotal_time = LocalTime(); - } - } - break; - case 2: - // Reset Energy Yesterday - Settings->energy_kWhyesterday = values[0]; - if( params > 1) { - Settings->energy_kWhtotal_time = values[1]; - } - break; - case 3: - // Reset Energy Total - RtcSettings.energy_kWhtotal = values[0]; - Settings->energy_kWhtotal = RtcSettings.energy_kWhtotal; -// Energy.total = (float)(RtcSettings.energy_kWhtotal + Energy.kWhtoday_offset + Energy.kWhtoday) / 100000; - if( params > 1) { - Settings->energy_kWhtotal_time = values[1]; - } - else { - Settings->energy_kWhtotal_time = (!Energy.kWhtoday_offset) ? LocalTime() : Midnight(); - } - RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total * 1000); - break; - case 4: - // Reset energy_usage.usage totals - RtcSettings.energy_usage.usage1_kWhtotal = values[0]; - if (params > 1) { - RtcSettings.energy_usage.usage2_kWhtotal = values[1] * 100; - } - Settings->energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal; - Settings->energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal; - break; - case 5: - // Reset energy_usage.return totals - RtcSettings.energy_usage.return1_kWhtotal = values[0]; - if (params > 1) { - RtcSettings.energy_usage.return2_kWhtotal = values[1] * 100; - } - Settings->energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal; - Settings->energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal; - break; - } - } + float energy_yesterday_ph[3]; + for (uint32_t i = 0; i < Energy.phase_count; i++) { + energy_yesterday_ph[i] = (float)Settings->energy_kWhyesterday_ph[i] / 100000; + Energy.total[i] = (float)(RtcSettings.energy_kWhtotal_ph[i] + Energy.kWhtoday_offset[i] + Energy.kWhtoday[i]) / 100000; } - Energy.total = (float)(RtcSettings.energy_kWhtotal + Energy.kWhtoday_offset + Energy.kWhtoday) / 100000; - float energy_kWhyesterday = (float)Settings->energy_kWhyesterday / 100000; + Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%s,\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s}"), + XdrvMailbox.command, + EnergyFormat(value_chr, Energy.total, Settings->flag2.energy_resolution, true), + EnergyFormat(value2_chr, energy_yesterday_ph, Settings->flag2.energy_resolution, true), + EnergyFormat(value3_chr, Energy.daily, Settings->flag2.energy_resolution, true)); +} + +void CmndEnergyTotal(void) { + uint32_t values[2] = { 0 }; + uint32_t params = ParseParameters(2, values); + + if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy.phase_count) && (params > 0)) { + uint32_t phase = XdrvMailbox.index -1; + // Reset Energy Total + RtcSettings.energy_kWhtotal_ph[phase] = values[0] * 100; + Settings->energy_kWhtotal_ph[phase] = RtcSettings.energy_kWhtotal_ph[phase]; + if (params > 1) { + Settings->energy_kWhtotal_time = values[1]; + } else { + Settings->energy_kWhtotal_time = (!Energy.kWhtoday_offset[phase]) ? LocalTime() : Midnight(); + } + RtcSettings.energy_usage.last_usage_kWhtotal = (uint32_t)(Energy.total[phase] * 1000); + } + ResponseCmndEnergyTotalYesterdayToday(); +} + +void CmndEnergyYesterday(void) { + uint32_t values[2] = { 0 }; + uint32_t params = ParseParameters(2, values); + + if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy.phase_count) && (params > 0)) { + uint32_t phase = XdrvMailbox.index -1; + // Reset Energy Yesterday + Settings->energy_kWhyesterday_ph[phase] = values[0] * 100; + if (params > 1) { + Settings->energy_kWhtotal_time = values[1]; + } + } + ResponseCmndEnergyTotalYesterdayToday(); +} +void CmndEnergyToday(void) { + uint32_t values[2] = { 0 }; + uint32_t params = ParseParameters(2, values); + + if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= Energy.phase_count) && (params > 0)) { + uint32_t phase = XdrvMailbox.index -1; + // Reset Energy Today + Energy.kWhtoday_offset[phase] = values[0] * 100; + Energy.kWhtoday[phase] = 0; + Energy.kWhtoday_delta[phase] = 0; + Energy.start_energy[phase] = 0; + Energy.period[phase] = Energy.kWhtoday_offset[phase]; + Settings->energy_kWhtoday_ph[phase] = Energy.kWhtoday_offset[phase]; + RtcSettings.energy_kWhtoday_ph[phase] = Energy.kWhtoday_offset[phase]; + Energy.daily[phase] = (float)Energy.kWhtoday_offset[phase] / 100000; + if (params > 1) { + Settings->energy_kWhtotal_time = values[1]; + } + else if (!RtcSettings.energy_kWhtotal_ph[phase] && !Energy.kWhtoday_offset[phase]) { + Settings->energy_kWhtotal_time = LocalTime(); + } + } + ResponseCmndEnergyTotalYesterdayToday(); +} + +void ResponseCmndEnergyUsageExport(void) { float usage1_kWhtotal = (float)Settings->energy_usage.usage1_kWhtotal / 100000; float usage2_kWhtotal = (float)Settings->energy_usage.usage2_kWhtotal / 100000; float return1_kWhtotal = (float)Settings->energy_usage.return1_kWhtotal / 100000; float return2_kWhtotal = (float)Settings->energy_usage.return2_kWhtotal / 100000; - Response_P(PSTR("{\"%s\":{\"" D_JSON_TOTAL "\":%*_f,\"" D_JSON_YESTERDAY "\":%*_f,\"" D_JSON_TODAY "\":%*_f,\"" D_JSON_USAGE "\":[%*_f,%*_f],\"" D_JSON_EXPORT "\":[%*_f,%*_f]}}"), + Response_P(PSTR("{\"%s\":{\"" D_JSON_USAGE "\":[%*_f,%*_f],\"" D_JSON_EXPORT "\":[%*_f,%*_f]}}"), XdrvMailbox.command, - Settings->flag2.energy_resolution, &Energy.total, - Settings->flag2.energy_resolution, &energy_kWhyesterday, - Settings->flag2.energy_resolution, &Energy.daily, Settings->flag2.energy_resolution, &usage1_kWhtotal, Settings->flag2.energy_resolution, &usage2_kWhtotal, Settings->flag2.energy_resolution, &return1_kWhtotal, Settings->flag2.energy_resolution, &return2_kWhtotal); } +void CmndEnergyUsage(void) { + uint32_t values[2] = { 0 }; + uint32_t params = ParseParameters(2, values); + if (params > 0) { + // Reset energy_usage.usage totals + RtcSettings.energy_usage.usage1_kWhtotal = values[0] * 100; + if (params > 1) { + RtcSettings.energy_usage.usage2_kWhtotal = values[1] * 100; + } + Settings->energy_usage.usage1_kWhtotal = RtcSettings.energy_usage.usage1_kWhtotal; + Settings->energy_usage.usage2_kWhtotal = RtcSettings.energy_usage.usage2_kWhtotal; + } + ResponseCmndEnergyUsageExport(); +} + +void CmndEnergyExport(void) { + uint32_t values[2] = { 0 }; + uint32_t params = ParseParameters(2, values); + if (params > 0) { + // Reset energy_usage.return totals + RtcSettings.energy_usage.return1_kWhtotal = values[0] * 100; + if (params > 1) { + RtcSettings.energy_usage.return2_kWhtotal = values[1] * 100; + } + Settings->energy_usage.return1_kWhtotal = RtcSettings.energy_usage.return1_kWhtotal; + Settings->energy_usage.return2_kWhtotal = RtcSettings.energy_usage.return2_kWhtotal; + } + ResponseCmndEnergyUsageExport(); +} + void CmndTariff(void) { // Tariff1 22:00,23:00 - Tariff1 start hour for Standard Time and Daylight Savings Time // Tariff2 6:00,7:00 - Tariff2 start hour for Standard Time and Daylight Savings Time @@ -888,9 +956,6 @@ void EnergyDrvInit(void) { Energy.reactive_power[phase] = NAN; Energy.power_factor[phase] = NAN; Energy.frequency[phase] = NAN; -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) - Energy.import_active[phase] = NAN; -#endif // SDM630_IMPORT || SDM72_IMPEXP Energy.export_active[phase] = NAN; } Energy.phase_count = 1; // Number of phases active @@ -910,15 +975,30 @@ void EnergySnsInit(void) XnrgCall(FUNC_INIT); if (TasmotaGlobal.energy_driver) { + + // Update for split phase totals (v9.5.0.9) + if ((Settings->energy_kWhtotal > 0) && (0 == Settings->energy_kWhtotal_ph[0])) { + Settings->energy_kWhtotal_ph[0] = Settings->energy_kWhtotal; + Settings->energy_kWhtoday_ph[0] = Settings->energy_kWhtoday; + Settings->energy_kWhyesterday_ph[0] = Settings->energy_kWhyesterday; + RtcSettings.energy_kWhtoday_ph[0] = RtcSettings.energy_kWhtoday; + RtcSettings.energy_kWhtotal_ph[0] = RtcSettings.energy_kWhtotal; + Settings->energy_kWhtotal = 0; + } + // Energy.kWhtoday_offset = 0; // Do not use at Power On as Rtc was invalid (but has been restored from Settings already) if ((ResetReason() != REASON_DEFAULT_RST) && RtcSettingsValid()) { - Energy.kWhtoday_offset = RtcSettings.energy_kWhtoday; + for (uint32_t i = 0; i < 3; i++) { + Energy.kWhtoday_offset[i] = RtcSettings.energy_kWhtoday_ph[i]; + } Energy.kWhtoday_offset_init = true; } -// Energy.kWhtoday = 0; -// Energy.kWhtoday_delta = 0; - Energy.period = Energy.kWhtoday_offset; + for (uint32_t i = 0; i < 3; i++) { +// Energy.kWhtoday_ph[i] = 0; +// Energy.kWhtoday_delta[i] = 0; + Energy.period[i] = Energy.kWhtoday_offset[i]; + } EnergyUpdateToday(); ticker_energy.attach_ms(200, Energy200ms); } @@ -937,110 +1017,73 @@ const char HTTP_ENERGY_SNS2[] PROGMEM = const char HTTP_ENERGY_SNS3[] PROGMEM = "{s}" D_EXPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}"; - -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) -const char HTTP_ENERGY_SNS4[] PROGMEM = - "{s}" D_IMPORT_ACTIVE "{m}%s " D_UNIT_KILOWATTHOUR "{e}"; -#endif // SDM630_IMPORT || SDM72_IMPEXP #endif // USE_WEBSERVER -void EnergyShow(bool json) -{ - for (uint32_t i = 0; i < Energy.phase_count; i++) { - if (Energy.voltage_common) { +void EnergyShow(bool json) { + if (Energy.voltage_common) { + for (uint32_t i = 0; i < Energy.phase_count; i++) { Energy.voltage[i] = Energy.voltage[0]; } } - float power_factor_knx = Energy.power_factor[0]; - - char apparent_power_chr[Energy.phase_count][FLOATSZ]; - char reactive_power_chr[Energy.phase_count][FLOATSZ]; - char power_factor_chr[Energy.phase_count][FLOATSZ]; - char frequency_chr[Energy.phase_count][FLOATSZ]; + float apparent_power[Energy.phase_count]; + float reactive_power[Energy.phase_count]; + float power_factor[Energy.phase_count]; if (!Energy.type_dc) { if (Energy.current_available && Energy.voltage_available) { for (uint32_t i = 0; i < Energy.phase_count; i++) { - float apparent_power = Energy.apparent_power[i]; - if (isnan(apparent_power)) { - apparent_power = Energy.voltage[i] * Energy.current[i]; + apparent_power[i] = Energy.apparent_power[i]; + if (isnan(apparent_power[i])) { + apparent_power[i] = Energy.voltage[i] * Energy.current[i]; } - if (apparent_power < Energy.active_power[i]) { // Should be impossible - Energy.active_power[i] = apparent_power; + if (apparent_power[i] < Energy.active_power[i]) { // Should be impossible + Energy.active_power[i] = apparent_power[i]; } - float power_factor = Energy.power_factor[i]; - if (isnan(power_factor)) { - power_factor = (Energy.active_power[i] && apparent_power) ? Energy.active_power[i] / apparent_power : 0; - if (power_factor > 1) { - power_factor = 1; + power_factor[i] = Energy.power_factor[i]; + if (isnan(power_factor[i])) { + power_factor[i] = (Energy.active_power[i] && apparent_power[i]) ? Energy.active_power[i] / apparent_power[i] : 0; + if (power_factor[i] > 1) { + power_factor[i] = 1; } } - if (0 == i) { power_factor_knx = power_factor; } - float reactive_power = Energy.reactive_power[i]; - if (isnan(reactive_power)) { - reactive_power = 0; - uint32_t difference = ((uint32_t)(apparent_power * 100) - (uint32_t)(Energy.active_power[i] * 100)) / 10; - if ((Energy.current[i] > 0.005) && ((difference > 15) || (difference > (uint32_t)(apparent_power * 100 / 1000)))) { + reactive_power[i] = Energy.reactive_power[i]; + if (isnan(reactive_power[i])) { + reactive_power[i] = 0; + uint32_t difference = ((uint32_t)(apparent_power[i] * 100) - (uint32_t)(Energy.active_power[i] * 100)) / 10; + if ((Energy.current[i] > 0.005) && ((difference > 15) || (difference > (uint32_t)(apparent_power[i] * 100 / 1000)))) { // calculating reactive power only if current is greater than 0.005A and // difference between active and apparent power is greater than 1.5W or 1% - //reactive_power = (float)(RoundSqrtInt((uint64_t)(apparent_power * apparent_power * 100) - (uint64_t)(Energy.active_power[i] * Energy.active_power[i] * 100))) / 10; - float power_diff = apparent_power * apparent_power - Energy.active_power[i] * Energy.active_power[i]; + //reactive_power[i] = (float)(RoundSqrtInt((uint64_t)(apparent_power[i] * apparent_power[i] * 100) - (uint64_t)(Energy.active_power[i] * Energy.active_power[i] * 100))) / 10; + float power_diff = apparent_power[i] * apparent_power[i] - Energy.active_power[i] * Energy.active_power[i]; if (power_diff < 10737418) // 2^30 / 100 (RoundSqrtInt is limited to 2^30-1) - reactive_power = (float)(RoundSqrtInt((uint32_t)(power_diff * 100.0))) / 10.0; + reactive_power[i] = (float)(RoundSqrtInt((uint32_t)(power_diff * 100.0))) / 10.0; else - reactive_power = (float)(SqrtInt((uint32_t)(power_diff))); + reactive_power[i] = (float)(SqrtInt((uint32_t)(power_diff))); } } - dtostrfd(apparent_power, Settings->flag2.wattage_resolution, apparent_power_chr[i]); - dtostrfd(reactive_power, Settings->flag2.wattage_resolution, reactive_power_chr[i]); - dtostrfd(power_factor, 2, power_factor_chr[i]); } } - for (uint32_t i = 0; i < Energy.phase_count; i++) { - float frequency = Energy.frequency[i]; - if (isnan(Energy.frequency[i])) { - frequency = 0; - } - dtostrfd(frequency, Settings->flag2.frequency_resolution, frequency_chr[i]); - } } - char voltage_chr[Energy.phase_count][FLOATSZ]; - char current_chr[Energy.phase_count][FLOATSZ]; - char active_power_chr[Energy.phase_count][FLOATSZ]; -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) - char import_active_chr[Energy.phase_count][FLOATSZ]; -#endif // SDM630_IMPORT || SDM72_IMPEXP - char export_active_chr[Energy.phase_count][FLOATSZ]; + float active_power_sum = 0.0; + float energy_yesterday_ph[Energy.phase_count]; for (uint32_t i = 0; i < Energy.phase_count; i++) { - dtostrfd(Energy.voltage[i], Settings->flag2.voltage_resolution, voltage_chr[i]); - dtostrfd(Energy.current[i], Settings->flag2.current_resolution, current_chr[i]); - dtostrfd(Energy.active_power[i], Settings->flag2.wattage_resolution, active_power_chr[i]); -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) - dtostrfd(Energy.import_active[i], Settings->flag2.energy_resolution, import_active_chr[i]); -#endif // SDM630_IMPORT || SDM72_IMPEXP - dtostrfd(Energy.export_active[i], Settings->flag2.energy_resolution, export_active_chr[i]); + energy_yesterday_ph[i] = (float)Settings->energy_kWhyesterday_ph[i] / 100000; + + active_power_sum += Energy.active_power[i]; } - char energy_total_chr[FLOATSZ]; - dtostrfd(Energy.total, Settings->flag2.energy_resolution, energy_total_chr); - char energy_daily_chr[FLOATSZ]; - dtostrfd(Energy.daily, Settings->flag2.energy_resolution, energy_daily_chr); - char energy_yesterday_chr[FLOATSZ]; - dtostrfd((float)Settings->energy_kWhyesterday / 100000, Settings->flag2.energy_resolution, energy_yesterday_chr); - - bool energy_tariff = false; - char energy_usage_chr[2][FLOATSZ]; - char energy_return_chr[2][FLOATSZ]; + float energy_usage[2]; + float energy_return[2]; if (Settings->tariff[0][0] != Settings->tariff[1][0]) { - dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100000, Settings->flag2.energy_resolution, energy_usage_chr[0]); // Tariff1 - dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100000, Settings->flag2.energy_resolution, energy_usage_chr[1]); // Tariff2 - dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100000, Settings->flag2.energy_resolution, energy_return_chr[0]); // Tariff1 - dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 100000, Settings->flag2.energy_resolution, energy_return_chr[1]); // Tariff2 + energy_usage[0] = (float)RtcSettings.energy_usage.usage1_kWhtotal / 100000; // Tariff1 + energy_usage[1] = (float)RtcSettings.energy_usage.usage2_kWhtotal / 100000; // Tariff2 + energy_return[0] = (float)RtcSettings.energy_usage.return1_kWhtotal / 100000; // Tariff1 + energy_return[1] = (float)RtcSettings.energy_usage.return2_kWhtotal / 100000; // Tariff2 energy_tariff = true; } @@ -1053,86 +1096,96 @@ void EnergyShow(bool json) ResponseAppend_P(PSTR(",\"" D_RSLT_ENERGY "\":{\"" D_JSON_TOTAL_START_TIME "\":\"%s\",\"" D_JSON_TOTAL "\":%s"), GetDateAndTime(DT_ENERGY).c_str(), - energy_total_chr); + EnergyFormatSum(value_chr, Energy.total, Settings->flag2.energy_resolution, json)); if (energy_tariff) { ResponseAppend_P(PSTR(",\"" D_JSON_TOTAL D_CMND_TARIFF "\":%s"), - EnergyFormatIndex(value_chr, energy_usage_chr[0], json, 2)); + EnergyFormatIndex(value_chr, energy_usage, Settings->flag2.energy_resolution, json, 2)); } ResponseAppend_P(PSTR(",\"" D_JSON_YESTERDAY "\":%s,\"" D_JSON_TODAY "\":%s"), - energy_yesterday_chr, - energy_daily_chr); + EnergyFormatSum(value_chr, energy_yesterday_ph, Settings->flag2.energy_resolution, json), + EnergyFormatSum(value2_chr, Energy.daily, Settings->flag2.energy_resolution, json)); +/* #if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) if (!isnan(Energy.import_active[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT_ACTIVE "\":%s"), - EnergyFormat(value_chr, import_active_chr[0], json)); + EnergyFormat(value_chr, Energy.import_active, Settings->flag2.energy_resolution, json)); if (energy_tariff) { ResponseAppend_P(PSTR(",\"" D_JSON_IMPORT D_CMND_TARIFF "\":%s"), - EnergyFormatIndex(value_chr, energy_return_chr[0], json, 2)); + EnergyFormatIndex(value_chr, energy_return, Settings->flag2.energy_resolution, json, 2)); } } #endif // SDM630_IMPORT || SDM72_IMPEXP +*/ if (!isnan(Energy.export_active[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_EXPORT_ACTIVE "\":%s"), - EnergyFormat(value_chr, export_active_chr[0], json)); + EnergyFormat(value_chr, Energy.export_active, Settings->flag2.energy_resolution, json)); if (energy_tariff) { ResponseAppend_P(PSTR(",\"" D_JSON_EXPORT D_CMND_TARIFF "\":%s"), - EnergyFormatIndex(value_chr, energy_return_chr[0], json, 2)); + EnergyFormatIndex(value_chr, energy_return, Settings->flag2.energy_resolution, json, 2)); } } if (show_energy_period) { - float energy = (float)(RtcSettings.energy_kWhtoday - Energy.period) / 100; - Energy.period = RtcSettings.energy_kWhtoday; - char energy_period_chr[FLOATSZ]; - dtostrfd(energy, Settings->flag2.wattage_resolution, energy_period_chr); - ResponseAppend_P(PSTR(",\"" D_JSON_PERIOD "\":%s"), energy_period_chr); + float energy_period[Energy.phase_count]; + for (uint32_t i = 0; i < Energy.phase_count; i++) { + energy_period[i] = (float)(RtcSettings.energy_kWhtoday_ph[i] - Energy.period[i]) / 100; + Energy.period[i] = RtcSettings.energy_kWhtoday_ph[i]; + } + ResponseAppend_P(PSTR(",\"" D_JSON_PERIOD "\":%s"), + EnergyFormat(value_chr, energy_period, Settings->flag2.wattage_resolution, json)); } + ResponseAppend_P(PSTR(",\"" D_JSON_POWERUSAGE "\":%s"), - EnergyFormat(value_chr, active_power_chr[0], json)); + EnergyFormat(value_chr, Energy.active_power, Settings->flag2.wattage_resolution, json)); if (!Energy.type_dc) { if (Energy.current_available && Energy.voltage_available) { ResponseAppend_P(PSTR(",\"" D_JSON_APPARENT_POWERUSAGE "\":%s,\"" D_JSON_REACTIVE_POWERUSAGE "\":%s,\"" D_JSON_POWERFACTOR "\":%s"), - EnergyFormat(value_chr, apparent_power_chr[0], json), - EnergyFormat(value2_chr, reactive_power_chr[0], json), - EnergyFormat(value3_chr, power_factor_chr[0], json)); + EnergyFormat(value_chr, apparent_power, Settings->flag2.wattage_resolution, json), + EnergyFormat(value2_chr, reactive_power, Settings->flag2.wattage_resolution, json), + EnergyFormat(value3_chr, power_factor, 2, json)); } if (!isnan(Energy.frequency[0])) { ResponseAppend_P(PSTR(",\"" D_JSON_FREQUENCY "\":%s"), - EnergyFormat(value_chr, frequency_chr[0], json, Energy.frequency_common)); + EnergyFormat(value_chr, Energy.frequency, Settings->flag2.frequency_resolution, json, Energy.frequency_common)); } } if (Energy.voltage_available) { ResponseAppend_P(PSTR(",\"" D_JSON_VOLTAGE "\":%s"), - EnergyFormat(value_chr, voltage_chr[0], json, Energy.voltage_common)); + EnergyFormat(value_chr, Energy.voltage, Settings->flag2.voltage_resolution, json, Energy.voltage_common)); } if (Energy.current_available) { ResponseAppend_P(PSTR(",\"" D_JSON_CURRENT "\":%s"), - EnergyFormat(value_chr, current_chr[0], json)); + EnergyFormat(value_chr, Energy.current, Settings->flag2.current_resolution, json)); } XnrgCall(FUNC_JSON_APPEND); ResponseJsonEnd(); #ifdef USE_DOMOTICZ if (show_energy_period) { // Only send if telemetry - dtostrfd(Energy.total * 1000, 1, energy_total_chr); - DomoticzSensorPowerEnergy((int)Energy.active_power[0], energy_total_chr); // PowerUsage, EnergyToday + char temp_chr[FLOATSZ]; + if (Energy.voltage_available) { + dtostrfd(Energy.voltage[0], Settings->flag2.voltage_resolution, temp_chr); + DomoticzSensor(DZ_VOLTAGE, temp_chr); // Voltage + } + if (Energy.current_available) { + dtostrfd(Energy.current[0], Settings->flag2.current_resolution, temp_chr); + DomoticzSensor(DZ_CURRENT, temp_chr); // Current + } + dtostrfd(Energy.total_sum * 1000, 1, temp_chr); + DomoticzSensorPowerEnergy((int)active_power_sum, temp_chr); // PowerUsage, EnergyToday + char energy_usage_chr[2][FLOATSZ]; + char energy_return_chr[2][FLOATSZ]; dtostrfd((float)RtcSettings.energy_usage.usage1_kWhtotal / 100, 1, energy_usage_chr[0]); // Tariff1 dtostrfd((float)RtcSettings.energy_usage.usage2_kWhtotal / 100, 1, energy_usage_chr[1]); // Tariff2 dtostrfd((float)RtcSettings.energy_usage.return1_kWhtotal / 100, 1, energy_return_chr[0]); dtostrfd((float)RtcSettings.energy_usage.return2_kWhtotal / 100, 1, energy_return_chr[1]); - DomoticzSensorP1SmartMeter(energy_usage_chr[0], energy_usage_chr[1], energy_return_chr[0], energy_return_chr[1], (int)Energy.active_power[0]); + DomoticzSensorP1SmartMeter(energy_usage_chr[0], energy_usage_chr[1], energy_return_chr[0], energy_return_chr[1], (int)active_power_sum); - if (Energy.voltage_available) { - DomoticzSensor(DZ_VOLTAGE, voltage_chr[0]); // Voltage - } - if (Energy.current_available) { - DomoticzSensor(DZ_CURRENT, current_chr[0]); // Current - } } #endif // USE_DOMOTICZ #ifdef USE_KNX @@ -1143,45 +1196,43 @@ void EnergyShow(bool json) if (Energy.current_available) { KnxSensor(KNX_ENERGY_CURRENT, Energy.current[0]); } - KnxSensor(KNX_ENERGY_POWER, Energy.active_power[0]); + KnxSensor(KNX_ENERGY_POWER, active_power_sum); if (!Energy.type_dc) { - KnxSensor(KNX_ENERGY_POWERFACTOR, power_factor_knx); + KnxSensor(KNX_ENERGY_POWERFACTOR, power_factor[0]); } - KnxSensor(KNX_ENERGY_DAILY, Energy.daily); - KnxSensor(KNX_ENERGY_TOTAL, Energy.total); - KnxSensor(KNX_ENERGY_YESTERDAY, (float)Settings->energy_kWhyesterday / 100000); + KnxSensor(KNX_ENERGY_DAILY, Energy.daily_sum); + KnxSensor(KNX_ENERGY_TOTAL, Energy.total_sum); + KnxSensor(KNX_ENERGY_YESTERDAY, Energy.yesterday_sum); } #endif // USE_KNX #ifdef USE_WEBSERVER } else { if (Energy.voltage_available) { - WSContentSend_PD(HTTP_SNS_VOLTAGE, EnergyFormat(value_chr, voltage_chr[0], json, Energy.voltage_common)); + WSContentSend_PD(HTTP_SNS_VOLTAGE, EnergyFormat(value_chr, Energy.voltage, Settings->flag2.voltage_resolution, json, Energy.voltage_common)); } - if (Energy.current_available) { - WSContentSend_PD(HTTP_SNS_CURRENT, EnergyFormat(value_chr, current_chr[0], json)); - } - WSContentSend_PD(HTTP_SNS_POWER, EnergyFormat(value_chr, active_power_chr[0], json)); if (!Energy.type_dc) { - if (Energy.current_available && Energy.voltage_available) { - WSContentSend_PD(HTTP_ENERGY_SNS1, EnergyFormat(value_chr, apparent_power_chr[0], json), - EnergyFormat(value2_chr, reactive_power_chr[0], json), - EnergyFormat(value3_chr, power_factor_chr[0], json)); - } if (!isnan(Energy.frequency[0])) { WSContentSend_PD(PSTR("{s}" D_FREQUENCY "{m}%s " D_UNIT_HERTZ "{e}"), - EnergyFormat(value_chr, frequency_chr[0], json, Energy.frequency_common)); + EnergyFormat(value_chr, Energy.frequency, Settings->flag2.frequency_resolution, json, Energy.frequency_common)); } } - WSContentSend_PD(HTTP_ENERGY_SNS2, energy_daily_chr, energy_yesterday_chr, energy_total_chr); + if (Energy.current_available) { + WSContentSend_PD(HTTP_SNS_CURRENT, EnergyFormat(value_chr, Energy.current, Settings->flag2.current_resolution, json)); + } + WSContentSend_PD(HTTP_SNS_POWER, EnergyFormat(value_chr, Energy.active_power, Settings->flag2.wattage_resolution, json)); + if (!Energy.type_dc) { + if (Energy.current_available && Energy.voltage_available) { + WSContentSend_PD(HTTP_ENERGY_SNS1, EnergyFormat(value_chr, apparent_power, Settings->flag2.wattage_resolution, json), + EnergyFormat(value2_chr, reactive_power, Settings->flag2.wattage_resolution, json), + EnergyFormat(value3_chr, power_factor, 2, json)); + } + } + WSContentSend_PD(HTTP_ENERGY_SNS2, EnergyFormatSum(value_chr, Energy.daily, Settings->flag2.energy_resolution, json), + EnergyFormatSum(value2_chr, energy_yesterday_ph, Settings->flag2.energy_resolution, json), + EnergyFormatSum(value3_chr, Energy.total, Settings->flag2.energy_resolution, json)); if (!isnan(Energy.export_active[0])) { - WSContentSend_PD(HTTP_ENERGY_SNS3, EnergyFormat(value_chr, export_active_chr[0], json)); + WSContentSend_PD(HTTP_ENERGY_SNS3, EnergyFormat(value_chr, Energy.export_active, Settings->flag2.energy_resolution, json)); } -#if defined(SDM630_IMPORT) || defined(SDM72_IMPEXP) - if (!isnan(Energy.import_active[0])) { - WSContentSend_PD(HTTP_ENERGY_SNS4, EnergyFormat(value_chr, import_active_chr[0], json)); - } -#endif // SDM630_IMPORT || SDM72_IMPEXP - XnrgCall(FUNC_WEB_SENSOR); #endif // USE_WEBSERVER } diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index d453efbaf..342e4fafa 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -1656,6 +1656,13 @@ uint8_t LightGetSpeedSetting(void) { return Settings->light_speed; } +// Force to reapply color, for example when PWM Frequency changed +void LightReapplyColor(void) { + for (uint32_t i = 0; i < LST_MAX; i++) { + Light.last_color[i] = 0; + } +} + // On entry Light.new_color[5] contains the color to be displayed // and Light.last_color[5] the color currently displayed // Light.power tells which lights or channels (SetOption68) are on/off @@ -2000,7 +2007,14 @@ void LightApplyPower(uint8_t new_color[LST_MAX], power_t power) { void LightSetOutputs(const uint16_t *cur_col_10) { // now apply the actual PWM values, adjusted and remapped 10-bits range if (TasmotaGlobal.light_type < LT_PWM6) { // only for direct PWM lights, not for Tuya, Armtronix... +#ifdef USE_PWM_DIMMER + uint16_t max_col = 0; +#endif // USE_PWM_DIMMER for (uint32_t i = 0; i < (Light.subtype - Light.pwm_offset); i++) { + uint16_t cur_col = cur_col_10[i + Light.pwm_offset]; +#ifdef USE_PWM_DIMMER + if (cur_col > max_col) max_col = cur_col; +#endif // USE_PWM_DIMMER if (PinUsed(GPIO_PWM1, i)) { //AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "Cur_Col%d 10 bits %d"), i, cur_col_10[i]); uint16_t cur_col = cur_col_10[i + Light.pwm_offset]; @@ -2010,12 +2024,12 @@ void LightSetOutputs(const uint16_t *cur_col_10) { if (!Settings->flag4.zerocross_dimmer) { analogWrite(Pin(GPIO_PWM1, i), bitRead(TasmotaGlobal.pwm_inverted, i) ? Settings->pwm_range - cur_col : cur_col); } -#ifdef USE_PWM_DIMMER - // Animate brightness LEDs to follow PWM dimmer brightness - if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(change10to8(cur_col)); -#endif // USE_PWM_DIMMER } } +#ifdef USE_PWM_DIMMER + // Animate brightness LEDs to follow PWM dimmer brightness + if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(change10to8(max_col)); +#endif // USE_PWM_DIMMER } // char msg[24]; // AddLog(LOG_LEVEL_DEBUG, PSTR("LGT: Channels %s"), ToHex_P((const unsigned char *)cur_col_10, 10, msg, sizeof(msg))); diff --git a/tasmota/xdrv_07_domoticz.ino b/tasmota/xdrv_07_domoticz.ino index 1f1dea37b..0342e6d89 100644 --- a/tasmota/xdrv_07_domoticz.ino +++ b/tasmota/xdrv_07_domoticz.ino @@ -526,6 +526,7 @@ void CmndDomoticzSend(void) { else if (3 == XdrvMailbox.index) { type = DZ_AIRQUALITY; } DomoticzSendData(type, index, data); } + ResponseCmndDone(); } } } diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index b7e4b9238..32c31cb77 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -510,9 +510,11 @@ bool RulesRuleMatch(uint8_t rule_set, String &event, String &rule, bool stop_all String buf = event; // Copy the string into a new buffer that will be modified +// Do not do below replace as it will replace escaped quote too. +// buf.replace("\\"," "); // "Disable" any escaped control character + //AddLog(LOG_LEVEL_DEBUG, PSTR("RUL-RM2: RulesRuleMatch |%s|"), buf.c_str()); - buf.replace("\\"," "); // "Disable" any escaped control character JsonParser parser((char*)buf.c_str()); JsonParserObject obj = parser.getRootObject(); if (!obj) { @@ -694,7 +696,9 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) delay(0); // Prohibit possible loop software watchdog -//AddLog(LOG_LEVEL_DEBUG, PSTR("RUL-RP1: Event = %s, Rule = %s"), event_saved.c_str(), Settings->rules[rule_set]); +#ifdef DEBUG_RULES + AddLog(LOG_LEVEL_DEBUG, PSTR("RUL-RP1: Event = %s, Rule = %s"), event_saved.c_str(), Settings->rules[rule_set]); +#endif String rules = GetRule(rule_set); @@ -714,6 +718,7 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) int pevt = rule.indexOf(F(" DO ")); if (pevt == -1) { return serviced; } // Bad syntax - Nothing to do String event_trigger = rule.substring(3, pevt); // "INA219#CURRENT>0.100" + event_trigger.trim(); plen = rule.indexOf(F(" ENDON")); plen2 = rule.indexOf(F(" BREAK")); @@ -728,7 +733,7 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) String event = event_saved; #ifdef DEBUG_RULES -// AddLog(LOG_LEVEL_DEBUG, PSTR("RUL-RP2: Event |%s|, Rule |%s|, Command(s) |%s|"), event.c_str(), event_trigger.c_str(), commands.c_str()); + AddLog(LOG_LEVEL_DEBUG, PSTR("RUL-RP2: Event |%s|, Rule |%s|, Command(s) |%s|"), event.c_str(), event_trigger.c_str(), commands.c_str()); #endif if (RulesRuleMatch(rule_set, event, event_trigger, stop_all_rules)) { @@ -799,16 +804,21 @@ bool RuleSetProcess(uint8_t rule_set, String &event_saved) bool RulesProcessEvent(const char *json_event) { +#ifdef USE_BERRY + // events are passed to Berry before Rules engine + callBerryRule(json_event); +#endif + if (Rules.busy) { return false; } Rules.busy = true; bool serviced = false; -#ifdef USE_DEBUG_DRIVER - ShowFreeMem(PSTR("RulesProcessEvent")); -#endif + SHOW_FREE_MEM(PSTR("RulesProcessEvent")); -//AddLog(LOG_LEVEL_DEBUG, PSTR("RUL: ProcessEvent |%s|"), json_event); +#ifdef DEBUG_RULES + AddLog(LOG_LEVEL_DEBUG, PSTR("RUL: ProcessEvent |%s|"), json_event); +#endif String event_saved = json_event; // json_event = {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}} @@ -822,7 +832,9 @@ bool RulesProcessEvent(const char *json_event) } event_saved.toUpperCase(); -//AddLog(LOG_LEVEL_DEBUG, PSTR("RUL: Event |%s|"), event_saved.c_str()); +#ifdef DEBUG_RULES + AddLog(LOG_LEVEL_DEBUG, PSTR("RUL: Event |%s|"), event_saved.c_str()); +#endif for (uint32_t i = 0; i < MAX_RULE_SETS; i++) { if (GetRuleLen(i) && bitRead(Settings->rule_enabled, i)) { @@ -858,7 +870,11 @@ void RulesInit(void) void RulesEvery50ms(void) { +#ifdef USE_BERRY + if (!Rules.busy) { // Emitting Rules events is always enabled with Berry +#else if (Settings->rule_enabled && !Rules.busy) { // Any rule enabled +#endif char json_event[120]; if (-1 == Rules.new_power) { Rules.new_power = TasmotaGlobal.power; } @@ -913,7 +929,8 @@ void RulesEvery50ms(void) } else { parameter = event + strlen(event); // '\0' } - snprintf_P(json_event, sizeof(json_event), PSTR("{\"Event\":{\"%s\":\"%s\"}}"), event, parameter); + bool quotes = (parameter[0] != '{'); + snprintf_P(json_event, sizeof(json_event), PSTR("{\"Event\":{\"%s\":%s%s%s}}"), event, (quotes)?"\"":"", parameter, (quotes)?"\"":""); Rules.event_data[0] ='\0'; RulesProcessEvent(json_event); } else { @@ -986,11 +1003,7 @@ void RulesEvery100ms(void) { if (ResponseLength()) { ResponseJsonStart(); // {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089} ResponseJsonEnd(); -#ifdef MQTT_DATA_STRING - RulesProcessEvent(TasmotaGlobal.mqtt_data.c_str()); -#else - RulesProcessEvent(TasmotaGlobal.mqtt_data); -#endif + RulesProcessEvent(ResponseData()); } } } @@ -1165,7 +1178,11 @@ void CmndSubscribe(void) subscription_item.Key = key; subscriptions.add(subscription_item); + if (2 == XdrvMailbox.index) { + topic = subscription_item.Topic; // Do not append "/#"" + } MqttSubscribe(topic.c_str()); + events.concat(event_name + "," + topic + (key.length()>0 ? "," : "") + key); @@ -2139,8 +2156,8 @@ void CmndRule(void) } // we need to split the rule in chunks - rule = rule.substring(0, MAX_RULE_SIZE); - rule += F("..."); +// rule = rule.substring(0, MAX_RULE_SIZE); +// rule += F("..."); } Response_P(PSTR("{\"%s%d\":{\"State\":\"%s\",\"Once\":\"%s\",\"StopOnError\":\"%s\",\"Length\":%d,\"Free\":%d,\"Rules\":\"%s\"}}"), XdrvMailbox.command, index, GetStateText(bitRead(Settings->rule_enabled, index -1)), GetStateText(bitRead(Settings->rule_once, index -1)), diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 645aa039c..ad9ea51c0 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -69,9 +69,6 @@ keywords if then else endif, or, and are better readable for beginners (others m #define MAX_SARRAY_NUM 32 #endif -#include -extern Renderer *renderer; - uint32_t EncodeLightId(uint8_t relay_id); uint32_t DecodeLightId(uint32_t hue_id); @@ -81,7 +78,7 @@ uint32_t DecodeLightId(uint32_t hue_id); #undef USE_SCRIPT_FATFS #define USE_SCRIPT_FATFS -1 -#pragma message "universal file system used" +// #pragma message "universal file system used" #else // USE_UFILESYS @@ -164,7 +161,10 @@ void Script_ticker4_end(void) { #endif #endif +#if defined(USE_SML_M) && defined (USE_SML_SCRIPT_CMD) extern uint8_t sml_json_enable; +extern uint8_t dvalid[SML_MAX_VARS]; +#endif #if defined(EEP_SCRIPT_SIZE) && !defined(ESP32) @@ -207,6 +207,10 @@ void alt_eeprom_readBytes(uint32_t adr, uint32_t len, uint8_t *buf) { #endif // LITTLEFS_SCRIPT_SIZE +#ifdef TESLA_POWERWALL +#include "powerwall.h" +#endif + // offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution #ifndef EPOCH_OFFSET #define EPOCH_OFFSET 1546300800 @@ -784,6 +788,9 @@ char *script; if (imemptr) free(imemptr); return -4; } + + memset(script_mem, 0, script_mem_size); + glob_script_mem.script_mem = script_mem; glob_script_mem.script_mem_size = script_mem_size; @@ -865,7 +872,7 @@ char *script; } // variables usage info - AddLog(LOG_LEVEL_INFO, PSTR("Script: nv=%d, tv=%d, vns=%d, ram=%d"), nvars, svars, index, glob_script_mem.script_mem_size); + AddLog(LOG_LEVEL_INFO, PSTR("Script: nv=%d, tv=%d, vns=%d, vmem=%d, smem=%d"), nvars, svars, index, glob_script_mem.script_mem_size, glob_script_mem.script_size); // copy string variables char *cp1 = glob_script_mem.glob_snp; @@ -1076,11 +1083,23 @@ void script_udp_sendvar(char *vname,float *fp,char *sp) { void ws2812_set_array(float *array ,uint32_t len, uint32_t offset) { Ws2812ForceSuspend(); - for (uint32_t cnt = 0; cntSettings->light_pixels) break; - uint32_t col = array[cnt]; - Ws2812SetColor(index + 1, col>>16, col>>8, col, 0); + for (uint32_t cnt = 0; cnt < len; cnt++) { + uint32_t index; + if (! (offset & 0x1000)) { + index = cnt + (offset & 0x7ff); + } else { + index = cnt/2 + (offset & 0x7ff); + } + if (index > Settings->light_pixels) break; + if (! (offset & 0x1000)) { + uint32_t col = array[cnt]; + Ws2812SetColor(index + 1, col>>16, col>>8, col, 0); + } else { + uint32_t hcol = array[cnt]; + cnt++; + uint32_t lcol = array[cnt]; + Ws2812SetColor(index + 1, hcol>>8, hcol, lcol>>8, lcol); + } } Ws2812ForceUpdate(); } @@ -1635,6 +1654,16 @@ char *isvar(char *lp, uint8_t *vtype, struct T_INDEX *tind, float *fp, char *sp, if (gv && gv->jo) { // look for json input + +#if 0 + char sbuf[SCRIPT_MAXSSIZE]; + sbuf[0]=0; + char tmp[128]; + Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp)); + uint32_t res = JsonParsePath(gv->jo, tmp, '#', NULL, sbuf, sizeof(sbuf)); // software_version + AddLog(LOG_LEVEL_INFO, PSTR("json string: %s %s"),tmp, sbuf); +#endif + JsonParserObject *jpo = gv->jo; char jvname[64]; strcpy(jvname, vname); @@ -1749,6 +1778,7 @@ chknext: len = 0; goto exit; } +#endif if (!strncmp(vname, "abs(", 4)) { lp=GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv); fvar = fabs(fvar); @@ -1756,7 +1786,7 @@ chknext: len = 0; goto exit; } -#endif + if (!strncmp(vname, "asc(", 4)) { char str[SCRIPT_MAXSSIZE]; lp = GetStringArgument(lp + 4, OPER_EQU, str, gv); @@ -1916,7 +1946,7 @@ chknext: while (*lp==' ') lp++; switch ((uint32_t)fvar) { case 0: - fvar = Energy.total; + fvar = Energy.total_sum; break; case 1: fvar = Energy.voltage[0]; @@ -1946,13 +1976,13 @@ chknext: fvar = Energy.active_power[2]; break; case 10: - fvar = Energy.start_energy; + fvar = Energy.start_energy[0]; break; case 11: - fvar = Energy.daily; + fvar = Energy.daily_sum; break; case 12: - fvar = (float)Settings->energy_kWhyesterday/100000.0; + fvar = Energy.yesterday_sum; break; default: @@ -2217,12 +2247,7 @@ chknext: if (!strncmp(vname, "fmt(", 4)) { lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv); if (!fvar) { -#ifdef ESP8266 LittleFS.format(); -#endif -#ifdef ESP32 - LITTLEFS.format(); -#endif } else { //SD.format(); } @@ -2401,11 +2426,8 @@ chknext: char rstring[SCRIPT_MAXSSIZE]; rstring[0] = 0; int8_t index = fvar; -#ifdef MQTT_DATA_STRING - char *wd = TasmotaGlobal.mqtt_data; -#else - char *wd = TasmotaGlobal.mqtt_data.c_str(); -#endif + char *wd = ResponseData(); + strlcpy(rstring, wd, glob_script_mem.max_ssize); if (index) { if (strlen(wd) && index) { @@ -2430,11 +2452,7 @@ chknext: // preserve mqtt_data char *mqd = (char*)malloc(ResponseSize()+2); if (mqd) { -#ifdef MQTT_DATA_STRING - strlcpy(mqd, TasmotaGlobal.mqtt_data.c_str(), ResponseSize()); -#else - strlcpy(mqd, TasmotaGlobal.mqtt_data, ResponseSize()); -#endif + strlcpy(mqd, ResponseData(), ResponseSize()); wd = mqd; char *lwd = wd; while (index) { @@ -2556,12 +2574,11 @@ chknext: if (!TasmotaGlobal.global_state.wifi_down) { // erase nvs lp = GetNumericArgument(lp + 4, OPER_EQU, &fvar, gv); - - homekit_main(0, fvar); - if (fvar >= 98) { + int32_t sel = fvar; + fvar = homekit_main(0, sel); + if (sel >= 98) { glob_script_mem.homekit_running == false; } - } lp++; len = 0; @@ -3152,6 +3169,21 @@ chknext: len = 0; goto exit; } + if (!strncmp(vname, "smlv[", 5)) { + lp = GetNumericArgument(lp + 5, OPER_EQU, &fvar, gv); + if (!fvar) { + for (uint8_t cnt = 0; cnt < SML_MAX_VARS; cnt++) { + dvalid[cnt] = 0; + } + fvar = 0; + } else { + if (fvar < 1) fvar = 1; + fvar = dvalid[(uint32_t)fvar - 1]; + } + lp++; + len = 0; + goto exit; + } #endif //USE_SML_M break; case 't': @@ -4990,11 +5022,7 @@ void ScripterEvery100ms(void) { if (ResponseLength()) { ResponseJsonStart(); ResponseJsonEnd(); -#ifdef MQTT_DATA_STRING - Run_Scripter(">T", 2, TasmotaGlobal.mqtt_data.c_str()); -#else - Run_Scripter(">T", 2, TasmotaGlobal.mqtt_data); -#endif + Run_Scripter(">T", 2, ResponseData()); } } if (bitRead(Settings->rule_enabled, 0)) { @@ -6510,6 +6538,10 @@ char buff[512]; if (sflg) { #ifdef USE_DISPLAY_DUMP + +#include +extern Renderer *renderer; + // screen copy #define fileHeaderSize 14 #define infoHeaderSize 40 @@ -7686,8 +7718,8 @@ uint32_t scripter_create_task(uint32_t num, uint32_t time, uint32_t core, uint32 #endif // USE_SCRIPT_TASK #endif // ESP32 - int32_t http_req(char *host, char *request) { + WiFiClient http_client; HTTPClient http; int32_t httpCode = 0; uint8_t mode = 0; @@ -7700,34 +7732,48 @@ int32_t http_req(char *host, char *request) { request++; } +#ifdef HTTP_DEBUG + AddLog(LOG_LEVEL_INFO, PSTR("HTTP heap %d"), ESP_getFreeHeap()); +#endif + if (!mode) { // GET strcat(hbuff, request); //AddLog(LOG_LEVEL_INFO, PSTR("HTTP GET %s"),hbuff); - http.begin(hbuff); + http.begin(http_client, hbuff); httpCode = http.GET(); } else { // POST //AddLog(LOG_LEVEL_INFO, PSTR("HTTP POST %s - %s"),hbuff, request); - http.begin(hbuff); + http.begin(http_client, hbuff); http.addHeader("Content-Type", "text/plain"); httpCode = http.POST(request); } +#ifdef HTTP_DEBUG + AddLog(LOG_LEVEL_INFO, PSTR("HTTP RESULT %s"), http.getString().c_str()); +#endif + #ifdef USE_WEBSEND_RESPONSE #ifdef MQTT_DATA_STRING TasmotaGlobal.mqtt_data = http.getString(); - //AddLog(LOG_LEVEL_INFO, PSTR("HTTP RESULT %s"), TasmotaGlobal.mqtt_data.c_str()); - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data.c_str()); #else strlcpy(TasmotaGlobal.mqtt_data, http.getString().c_str(), ResponseSize()); - //AddLog(LOG_LEVEL_INFO, PSTR("HTTP RESULT %s"), TasmotaGlobal.mqtt_data); - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data); #endif + +#ifdef HTTP_DEBUG + AddLog(LOG_LEVEL_INFO, PSTR("HTTP MQTT BUFFER %s"), ResponseData()); +#endif + +// AddLog(LOG_LEVEL_INFO, PSTR("JSON %s"), wd_jstr); +// TasmotaGlobal.mqtt_data = wd_jstr; + Run_Scripter(">E", 2, ResponseData()); + glob_script_mem.glob_error = 0; #endif http.end(); + http_client.stop(); return httpCode; } @@ -7740,10 +7786,21 @@ int32_t http_req(char *host, char *request) { #include #endif //ESP8266 +#ifdef TESLA_POWERWALL +Powerwall powerwall = Powerwall(); +String authCookie = ""; +#endif + // get tesla powerwall info page json string uint32_t call2https(const char *host, const char *path) { if (TasmotaGlobal.global_state.wifi_down) return 1; uint32_t status = 0; + +#ifdef TESLA_POWERWALL + authCookie = powerwall.getAuthCookie(); + return 0; +#endif + #ifdef ESP32 WiFiClientSecure *httpsClient; httpsClient = new WiFiClientSecure; @@ -7915,14 +7972,14 @@ uint8_t lvgl_numobjs; lv_obj_t *lvgl_buttons[MAX_LVGL_OBJS]; void start_lvgl(const char * uconfig); -lv_event_t lvgl_last_event; +lv_event_code_t lvgl_last_event; uint8_t lvgl_last_object; uint8_t lvgl_last_slider; static lv_obj_t * kb; static lv_obj_t * ta; -void lvgl_set_last(lv_obj_t * obj, lv_event_t event); -void lvgl_set_last(lv_obj_t * obj, lv_event_t event) { +void lvgl_set_last(lv_obj_t * obj, lv_event_code_t event); +void lvgl_set_last(lv_obj_t * obj, lv_event_code_t event) { lvgl_last_event = event; lvgl_last_object = 0; for (uint8_t cnt = 0; cnt < MAX_LVGL_OBJS; cnt++) { @@ -7934,30 +7991,30 @@ void lvgl_set_last(lv_obj_t * obj, lv_event_t event) { } -void btn_event_cb(lv_obj_t * btn, lv_event_t event); -void btn_event_cb(lv_obj_t * btn, lv_event_t event) { - lvgl_set_last(btn, event); - if (event == LV_EVENT_CLICKED) { +void btn_event_cb(lv_event_t * e); +void btn_event_cb(lv_event_t * e) { + lvgl_set_last(e->target, e->code); + if (e->code == LV_EVENT_CLICKED) { Run_Scripter(">lvb", 4, 0); } } -void slider_event_cb(lv_obj_t * sld, lv_event_t event); -void slider_event_cb(lv_obj_t * sld, lv_event_t event) { - lvgl_set_last(sld, event); - lvgl_last_slider = lv_slider_get_value(sld); - if (event == LV_EVENT_VALUE_CHANGED) { +void slider_event_cb(lv_event_t * e); +void slider_event_cb(lv_event_t * e) { + lvgl_set_last(e->target, e->code); + lvgl_last_slider = lv_slider_get_value(e->target); + if (e->code == LV_EVENT_VALUE_CHANGED) { Run_Scripter(">lvs", 4, 0); } } static void kb_create(void); -static void ta_event_cb(lv_obj_t * ta_local, lv_event_t e); -static void kb_event_cb(lv_obj_t * keyboard, lv_event_t e); +static void ta_event_cb(lv_event_t * e); +static void kb_event_cb(lv_event_t * e); -static void kb_event_cb(lv_obj_t * keyboard, lv_event_t e) { - lv_keyboard_def_event_cb(kb, e); - if(e == LV_EVENT_CANCEL) { +static void kb_event_cb(lv_event_t * e) { + lv_keyboard_def_event_cb(e); + if(e->code == LV_EVENT_CANCEL) { lv_keyboard_set_textarea(kb, NULL); lv_obj_del(kb); kb = NULL; @@ -7965,14 +8022,13 @@ static void kb_event_cb(lv_obj_t * keyboard, lv_event_t e) { } static void kb_create(void) { - kb = lv_keyboard_create(lv_scr_act(), NULL); - lv_keyboard_set_cursor_manage(kb, true); - lv_obj_set_event_cb(kb, kb_event_cb); + kb = lv_keyboard_create(lv_scr_act()); + lv_obj_add_event_cb(kb, kb_event_cb, LV_EVENT_ALL, nullptr); lv_keyboard_set_textarea(kb, ta); } -static void ta_event_cb(lv_obj_t * ta_local, lv_event_t e) { - if(e == LV_EVENT_CLICKED && kb == NULL) { +static void ta_event_cb(lv_event_t * e) { + if(e->code == LV_EVENT_CLICKED && kb == NULL) { kb_create(); } } @@ -8020,11 +8076,11 @@ int32_t lvgl_test(char **lpp, int32_t p) { lp = GetStringArgument(lp, OPER_EQU, str, 0); SCRIPT_SKIP_SPACES - obj = lv_btn_create(lv_scr_act(), NULL); + obj = lv_btn_create(lv_scr_act()); lv_obj_set_pos(obj, xp, yp); lv_obj_set_size(obj, xs, ys); - lv_obj_set_event_cb(obj, btn_event_cb); - label = lv_label_create(obj, NULL); + lv_obj_add_event_cb(obj, btn_event_cb, LV_EVENT_ALL, nullptr); + label = lv_label_create(obj); lv_label_set_text(label, str); lvgl_StoreObj(obj); break; @@ -8039,10 +8095,10 @@ int32_t lvgl_test(char **lpp, int32_t p) { lp = GetNumericArgument(lp, OPER_EQU, &ys, 0); SCRIPT_SKIP_SPACES - obj = lv_slider_create(lv_scr_act(), NULL); + obj = lv_slider_create(lv_scr_act()); lv_obj_set_pos(obj, xp, yp); lv_obj_set_size(obj, xs, ys); - lv_obj_set_event_cb(obj, slider_event_cb); + lv_obj_add_event_cb(obj, slider_event_cb, LV_EVENT_ALL, nullptr); lvgl_StoreObj(obj); break; @@ -8060,10 +8116,10 @@ int32_t lvgl_test(char **lpp, int32_t p) { lp = GetNumericArgument(lp, OPER_EQU, &max, 0); SCRIPT_SKIP_SPACES - obj = lv_gauge_create(lv_scr_act(), NULL); + obj = lv_meter_create(lv_scr_act()); lv_obj_set_pos(obj, xp, yp); lv_obj_set_size(obj, xs, ys); - lv_gauge_set_range(obj, min, max); + // lv_gauge_set_range(obj, min, max); // TODO LVGL8 lvgl_StoreObj(obj); break; @@ -8073,7 +8129,7 @@ int32_t lvgl_test(char **lpp, int32_t p) { lp = GetNumericArgument(lp, OPER_EQU, &max, 0); SCRIPT_SKIP_SPACES if (lvgl_buttons[(uint8_t)min - 1]) { - lv_gauge_set_value(lvgl_buttons[(uint8_t)min - 1], 0, max); + // lv_gauge_set_value(lvgl_buttons[(uint8_t)min - 1], 0, max); // TODO LVGL8 } break; @@ -8090,7 +8146,7 @@ int32_t lvgl_test(char **lpp, int32_t p) { lp = GetStringArgument(lp, OPER_EQU, str, 0); SCRIPT_SKIP_SPACES - obj = lv_label_create(lv_scr_act(), NULL); + obj = lv_label_create(lv_scr_act()); lv_obj_set_pos(obj, xp, yp); lv_obj_set_size(obj, xs, ys); lv_label_set_text(obj, str); @@ -8109,11 +8165,11 @@ int32_t lvgl_test(char **lpp, int32_t p) { case 8: { - ta = lv_textarea_create(lv_scr_act(), NULL); - lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_DPI / 16); - lv_obj_set_event_cb(ta, ta_event_cb); + ta = lv_textarea_create(lv_scr_act()); + lv_obj_align(ta, LV_ALIGN_TOP_MID, 0, LV_DPI_DEF / 16); + lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, nullptr); lv_textarea_set_text(ta, ""); - lv_coord_t max_h = LV_VER_RES / 2 - LV_DPI / 8; + lv_coord_t max_h = LV_VER_RES / 2 - LV_DPI_DEF / 8; if (lv_obj_get_height(ta) > max_h) lv_obj_set_height(ta, max_h); kb_create(); } @@ -8155,10 +8211,10 @@ lv_draw_line_dsc_t draw_dsc; // Drawing style (for canvas) is similarly global void lvgl_setup(void) { // Create a tabview object, by default this covers the full display. - tabview = lv_tabview_create(lv_disp_get_scr_act(NULL), NULL); + tabview = lv_tabview_create(lv_disp_get_scr_act(NULL), LV_DIR_TOP, 50); // The CLUE display has a lot of pixels and can't refresh very fast. // To show off the tabview animation, let's slow it down to 1 second. - lv_tabview_set_anim_time(tabview, 1000); + // lv_tabview_set_anim_time(tabview, 1000); // LVGL8 TODO // Because they're referenced any time an object is drawn, styles need // to be permanent in scope; either declared globally (outside all @@ -8170,33 +8226,33 @@ void lvgl_setup(void) { // through for "off" (inactive) tabs -- a vertical green gradient, // minimal padding around edges (zero at bottom). lv_style_init(&tab_background_style); - lv_style_set_bg_color(&tab_background_style, LV_STATE_DEFAULT, lv_color_hex(0x408040)); - lv_style_set_bg_grad_color(&tab_background_style, LV_STATE_DEFAULT, lv_color_hex(0x304030)); - lv_style_set_bg_grad_dir(&tab_background_style, LV_STATE_DEFAULT, LV_GRAD_DIR_VER); - lv_style_set_pad_top(&tab_background_style, LV_STATE_DEFAULT, 2); - lv_style_set_pad_left(&tab_background_style, LV_STATE_DEFAULT, 2); - lv_style_set_pad_right(&tab_background_style, LV_STATE_DEFAULT, 2); - lv_style_set_pad_bottom(&tab_background_style, LV_STATE_DEFAULT, 0); - lv_obj_add_style(tabview, LV_TABVIEW_PART_TAB_BG, &tab_background_style); + lv_style_set_bg_color(&tab_background_style, lv_color_hex(0x408040)); + lv_style_set_bg_grad_color(&tab_background_style, lv_color_hex(0x304030)); + lv_style_set_bg_grad_dir(&tab_background_style, LV_GRAD_DIR_VER); + lv_style_set_pad_top(&tab_background_style, 2); + lv_style_set_pad_left(&tab_background_style, 2); + lv_style_set_pad_right(&tab_background_style, 2); + lv_style_set_pad_bottom(&tab_background_style, 0); + // lv_obj_add_style(tabview, LV_TABVIEW_PART_TAB_BG, &tab_background_style); // LVGL8 TODO // Style for tabs. Active tab is white with opaque background, inactive // tabs are transparent so the background shows through (only the white // text is seen). A little top & bottom padding reduces scrunchyness. lv_style_init(&tab_style); - lv_style_set_pad_top(&tab_style, LV_STATE_DEFAULT, 3); - lv_style_set_pad_bottom(&tab_style, LV_STATE_DEFAULT, 10); - lv_style_set_bg_color(&tab_style, LV_STATE_CHECKED, LV_COLOR_WHITE); - lv_style_set_bg_opa(&tab_style, LV_STATE_CHECKED, LV_OPA_100); - lv_style_set_text_color(&tab_style, LV_STATE_CHECKED, LV_COLOR_GRAY); - lv_style_set_bg_opa(&tab_style, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_style_set_text_color(&tab_style, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_add_style(tabview, LV_TABVIEW_PART_TAB_BTN, &tab_style); + lv_style_set_pad_top(&tab_style, 3); + lv_style_set_pad_bottom(&tab_style, 10); + lv_style_set_bg_color(&tab_style, lv_color_white()); + lv_style_set_bg_opa(&tab_style, LV_OPA_100); + lv_style_set_text_color(&tab_style, lv_color_make(0xff, 0xff, 0xff)); + lv_style_set_bg_opa(&tab_style, LV_OPA_TRANSP); + lv_style_set_text_color(&tab_style, lv_color_white()); + // lv_obj_add_style(tabview, LV_TABVIEW_PART_TAB_BTN, &tab_style); // LVGL8 TODO // Style for the small indicator bar that appears below the active tab. lv_style_init(&indicator_style); - lv_style_set_bg_color(&indicator_style, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_style_set_size(&indicator_style, LV_STATE_DEFAULT, 5); - lv_obj_add_style(tabview, LV_TABVIEW_PART_INDIC, &indicator_style); + lv_style_set_bg_color(&indicator_style, lv_color_make(0xff, 0x00, 0x00)); + lv_style_set_size(&indicator_style, 5); + // lv_obj_add_style(tabview, LV_TABVIEW_PART_INDIC, &indicator_style); // LVGL8 TODO // Back to creating widgets... @@ -8209,28 +8265,28 @@ void lvgl_setup(void) { // The first tab holds a gauge. To keep the demo simple, let's just use // the default style and range (0-100). See LittlevGL docs for options. - gauge = lv_gauge_create(tab1, NULL); + gauge = lv_meter_create(tab1); lv_obj_set_size(gauge, 186, 186); - lv_obj_align(gauge, NULL, LV_ALIGN_CENTER, 0, 0); + lv_obj_align(gauge,LV_ALIGN_CENTER, 0, 0); // Second tab, make a chart... - chart = lv_chart_create(tab2, NULL); + chart = lv_chart_create(tab2); lv_obj_set_size(chart, 200, 180); - lv_obj_align(chart, NULL, LV_ALIGN_CENTER, 0, 0); - lv_chart_set_type(chart, LV_CHART_TYPE_COLUMN); + lv_obj_align(chart, LV_ALIGN_CENTER, 0, 0); + lv_chart_set_type(chart, LV_CHART_TYPE_BAR); // For simplicity, we'll stick with the chart's default 10 data points: - series = lv_chart_add_series(chart, LV_COLOR_RED); - lv_chart_init_points(chart, series, 0); + // series = lv_chart_add_series(chart, lv_color_make(0xff, 0x00, 0x00)); // LVGL8 TODO + // lv_chart_init_points(chart, series, 0); // LVGL8 TODO // Make each column shift left as new values enter on right: lv_chart_set_update_mode(chart, LV_CHART_UPDATE_MODE_SHIFT); // Third tab is a canvas, which we'll fill with random colored lines. // LittlevGL draw functions only work on TRUE_COLOR canvas. -/* canvas = lv_canvas_create(tab3, NULL); +/* canvas = lv_canvas_create(tab3); lv_canvas_set_buffer(canvas, canvas_buffer, CANVAS_WIDTH, CANVAS_HEIGHT, LV_IMG_CF_TRUE_COLOR); - lv_obj_align(canvas, NULL, LV_ALIGN_CENTER, 0, 0); - lv_canvas_fill_bg(canvas, LV_COLOR_WHITE, LV_OPA_100); + lv_obj_align(canvas, LV_ALIGN_CENTER, 0, 0); + lv_canvas_fill_bg(canvas, lv_color_white(), LV_OPA_100); // Set up canvas line-drawing style based on defaults. // Later we'll change color settings when drawing each line. @@ -8377,8 +8433,16 @@ bool Xdrv10(uint8_t function) if (glob_script_mem.script_ram[0]!='>' && glob_script_mem.script_ram[1]!='D') { // clr all memset(glob_script_mem.script_ram, 0 ,glob_script_mem.script_size); +#ifdef PRECONFIGURED_SCRIPT + strcpy_P(glob_script_mem.script_ram, PSTR(PRECONFIGURED_SCRIPT)); +#else strcpy_P(glob_script_mem.script_ram, PSTR(">D\nscript error must start with >D")); +#endif +#ifdef START_SCRIPT_FROM_BOOT + bitWrite(Settings->rule_enabled, 0, 1); +#else bitWrite(Settings->rule_enabled, 0, 0); +#endif } // assure permanent memory is 4 byte aligned @@ -8423,41 +8487,24 @@ bool Xdrv10(uint8_t function) break; case FUNC_RULES_PROCESS: if (bitRead(Settings->rule_enabled, 0)) { -#ifdef MQTT_DATA_STRING #ifdef USE_SCRIPT_STATUS - if (!strncmp_P(TasmotaGlobal.mqtt_data.c_str(), PSTR("{\"Status"), 8)) { - Run_Scripter(">U", 2, TasmotaGlobal.mqtt_data.c_str()); + if (!strncmp_P(ResponseData(), PSTR("{\"Status"), 8)) { + Run_Scripter(">U", 2, ResponseData()); } else { - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data.c_str()); + Run_Scripter(">E", 2, ResponseData()); } #else - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data.c_str()); + Run_Scripter(">E", 2, ResponseData()); #endif -#else // MQTT_DATA_STRING -#ifdef USE_SCRIPT_STATUS - if (!strncmp_P(TasmotaGlobal.mqtt_data, PSTR("{\"Status"), 8)) { - Run_Scripter(">U", 2, TasmotaGlobal.mqtt_data); - } else { - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data); - } -#else - Run_Scripter(">E", 2, TasmotaGlobal.mqtt_data); -#endif -#endif // MQTT_DATA_STRING + result = glob_script_mem.event_handeled; } break; case FUNC_TELEPERIOD_RULES_PROCESS: if (bitRead(Settings->rule_enabled, 0)) { -#ifdef MQTT_DATA_STRING - if (TasmotaGlobal.mqtt_data.length()) { - Run_Scripter(">T", 2, TasmotaGlobal.mqtt_data.c_str()); + if (ResponseLength()) { + Run_Scripter(">T", 2, ResponseData()); } -#else - if (TasmotaGlobal.mqtt_data[0]) { - Run_Scripter(">T", 2, TasmotaGlobal.mqtt_data); - } -#endif } break; #ifdef USE_WEBSERVER diff --git a/tasmota/xdrv_11_knx.ino b/tasmota/xdrv_11_knx.ino index 12d663d9d..c71a323e5 100644 --- a/tasmota/xdrv_11_knx.ino +++ b/tasmota/xdrv_11_knx.ino @@ -644,8 +644,9 @@ void KNX_CB_Action(message_t const &msg, void *arg) knx.answer_4byte_float(msg.received_on, last_hum); } } +#if defined(USE_ENERGY_SENSOR) else if (chan->type == KNX_ENERGY_VOLTAGE) // Reply KNX_ENERGY_VOLTAGE - { + { knx.answer_4byte_float(msg.received_on, Energy.voltage[0]); if (Settings->flag.knx_enable_enhancement) { knx.answer_4byte_float(msg.received_on, Energy.voltage[0]); @@ -678,29 +679,29 @@ void KNX_CB_Action(message_t const &msg, void *arg) } else if (chan->type == KNX_ENERGY_YESTERDAY) // Reply KNX_ENERGY_YESTERDAY { - float energy_kWhyesterday = (float)Settings->energy_kWhyesterday / 100000; - knx.answer_4byte_float(msg.received_on, energy_kWhyesterday); + knx.answer_4byte_float(msg.received_on, Energy.yesterday_sum); if (Settings->flag.knx_enable_enhancement) { - knx.answer_4byte_float(msg.received_on, energy_kWhyesterday); - knx.answer_4byte_float(msg.received_on, energy_kWhyesterday); + knx.answer_4byte_float(msg.received_on, Energy.yesterday_sum); + knx.answer_4byte_float(msg.received_on, Energy.yesterday_sum); } } else if (chan->type == KNX_ENERGY_DAILY) // Reply KNX_ENERGY_DAILY { - knx.answer_4byte_float(msg.received_on, Energy.daily); + knx.answer_4byte_float(msg.received_on, Energy.daily_sum); if (Settings->flag.knx_enable_enhancement) { - knx.answer_4byte_float(msg.received_on, Energy.daily); - knx.answer_4byte_float(msg.received_on, Energy.daily); + knx.answer_4byte_float(msg.received_on, Energy.daily_sum); + knx.answer_4byte_float(msg.received_on, Energy.daily_sum); } } else if (chan->type == KNX_ENERGY_TOTAL) // Reply KNX_ENERGY_TOTAL { - knx.answer_4byte_float(msg.received_on, Energy.total); + knx.answer_4byte_float(msg.received_on, Energy.total_sum); if (Settings->flag.knx_enable_enhancement) { - knx.answer_4byte_float(msg.received_on, Energy.total); - knx.answer_4byte_float(msg.received_on, Energy.total); + knx.answer_4byte_float(msg.received_on, Energy.total_sum); + knx.answer_4byte_float(msg.received_on, Energy.total_sum); } } +#endif #ifdef USE_RULES else if ((chan->type >= KNX_SLOT1) && (chan->type <= KNX_SLOT5)) // KNX RX SLOTs (read command) { diff --git a/tasmota/xdrv_12_discovery.ino b/tasmota/xdrv_12_discovery.ino index f4ad21752..1f07488a8 100644 --- a/tasmota/xdrv_12_discovery.ino +++ b/tasmota/xdrv_12_discovery.ino @@ -75,22 +75,28 @@ void TasDiscoverMessage(void) { TasmotaGlobal.version, TasmotaGlobal.mqtt_topic, SettingsText(SET_MQTT_FULLTOPIC), - PSTR(SUB_PREFIX), - PSTR(PUB_PREFIX), - PSTR(PUB_PREFIX2)); + SettingsText(SET_MQTTPREFIX1), + SettingsText(SET_MQTTPREFIX2), + SettingsText(SET_MQTTPREFIX3)); - uint8_t lightidx = MAX_RELAYS + 1; // Will store the starting position of the lights - if (Light.subtype > LST_NONE) { - if (!light_controller.isCTRGBLinked()) { // One or two lights present - lightidx = TasmotaGlobal.devices_present - 2; + uint8_t light_idx = MAX_RELAYS + 1; // Will store the starting position of the lights + uint8_t light_subtype = 0; + bool light_controller_isCTRGBLinked = false; +#ifdef USE_LIGHT + light_subtype = Light.subtype; + if (light_subtype > LST_NONE) { + light_controller_isCTRGBLinked = light_controller.isCTRGBLinked(); + if (!light_controller_isCTRGBLinked) { // One or two lights present + light_idx = TasmotaGlobal.devices_present - 2; } else { - lightidx = TasmotaGlobal.devices_present - 1; + light_idx = TasmotaGlobal.devices_present - 1; } } if ((Light.device > 0) && Settings->flag3.pwm_multi_channels) { // How many relays are light devices? - lightidx = TasmotaGlobal.devices_present - Light.subtype; + light_idx = TasmotaGlobal.devices_present - light_subtype; } +#endif // USE_LIGHT uint16_t Relay[MAX_RELAYS] = { 0 }; // Base array to store the relay type uint16_t Shutter[MAX_RELAYS] = { 0 }; // Array to store a temp list for shutters @@ -114,7 +120,7 @@ void TasDiscoverMessage(void) { if (Shutter[i] != 0) { // Check if there are shutters present Relay[i] = 3; // Relay is a shutter } else { - if (i >= lightidx || (iFanMod && (0 == i))) { // First relay on Ifan controls the light + if (i >= light_idx || (iFanMod && (0 == i))) { // First relay on Ifan controls the light Relay[i] = 2; // Relay is a light } else { if (!iFanMod) { // Relays 2-4 for ifan are controlled by FANSPEED and don't need to be present if TasmotaGlobal.module_type = SONOFF_IFAN02 or SONOFF_IFAN03 @@ -182,8 +188,8 @@ void TasDiscoverMessage(void) { Settings->flag4.alexa_ct_range, Settings->flag5.mqtt_switches, Settings->flag5.fade_fixed_duration, - light_controller.isCTRGBLinked(), - Light.subtype); + light_controller_isCTRGBLinked, + light_subtype); for (uint32_t i = 0; i < MAX_SHUTTERS; i++) { #ifdef USE_SHUTTER diff --git a/tasmota/xdrv_12_home_assistant.ino b/tasmota/xdrv_12_home_assistant.ino index 550bb658a..ddfb29923 100644 --- a/tasmota/xdrv_12_home_assistant.ino +++ b/tasmota/xdrv_12_home_assistant.ino @@ -93,21 +93,23 @@ const char HASS_DISCOVER_BASE_LIGHT[] PROGMEM = "\"on_cmd_type\":\"%s\"," // power on (first), power on (last), no power on (brightness) "\"bri_val_tpl\":\"{{value_json.%s}}\""; -const char HASS_DISCOVER_LIGHT_COLOR[] PROGMEM = - ",\"rgb_cmd_t\":\"%s2\"," // cmnd/led2/Color2 - "\"rgb_stat_t\":\"%s\"," // stat/led2/RESULT - "\"rgb_val_tpl\":\"{{value_json." D_CMND_COLOR ".split(',')[0:3]|join(',')}}\""; +const char HASS_DISCOVER_LIGHT_HS_COLOR[] PROGMEM = + ",\"hs_cmd_t\":\"%s\"," // cmnd/led2/HSBColor + "\"hs_stat_t\":\"%s\"," // stat/led2/RESULT + "\"hs_val_tpl\":\"{{value_json." D_CMND_HSBCOLOR ".split(',')[0:2]|join(',')}}\""; const char HASS_DISCOVER_LIGHT_WHITE[] PROGMEM = - ",\"whit_val_cmd_t\":\"%s\"," // cmnd/led2/White - "\"whit_val_stat_t\":\"%s\"," // stat/led2/RESULT - "\"whit_val_scl\":100," - "\"whit_val_tpl\":\"{{value_json." D_CMND_WHITE "}}\""; + ",\"whit_cmd_t\":\"%s\"," // cmnd/led2/White + "\"clrm_stat_t\":\"%s\"," // stat/led2/RESULT + "\"whit_scl\":100," + "\"clrm_val_tpl\":\"{%%if value_json.White%%}white{%%else%%}hs{%%endif %%}\""; const char HASS_DISCOVER_LIGHT_CT[] PROGMEM = ",\"clr_temp_cmd_t\":\"%s\"," // cmnd/led2/CT "\"clr_temp_stat_t\":\"%s\"," // stat/led2/RESULT - "\"clr_temp_val_tpl\":\"{{value_json." D_CMND_COLORTEMPERATURE "}}\""; + "\"clr_temp_val_tpl\":\"{{value_json." D_CMND_COLORTEMPERATURE "}}\"," + "\"clrm_stat_t\":\"%s\"," // stat/led2/RESULT + "\"clrm_val_tpl\":\"{%%if value_json.White%%}color_temp{%%else%%}hs{%%endif %%}\""; const char HASS_DISCOVER_LIGHT_SCHEME[] PROGMEM = ",\"fx_cmd_t\":\"%s\"," // cmnd/led2/Scheme @@ -184,60 +186,74 @@ uint8_t hass_mode = 0; int hass_tele_period = 0; // NEW DISCOVERY +void HassDiscoverMessage(void) { + Response_P(PSTR("{\"ip\":\"%_I\"," // IP Address + "\"dn\":\"%s\"," // Device Name + "\"fn\":["), // Friendly Names (start) + (uint32_t)WiFi.localIP(), + SettingsText(SET_DEVICENAME)); -const char HASS_DISCOVER_DEVICE[] PROGMEM = // Basic parameters for Discovery - "{\"ip\":\"%_I\"," // IP Address - "\"dn\":\"%s\"," // Device Name - "\"fn\":[%s]," // Friendly Names - "\"hn\":\"%s\"," // Host Name - "\"mac\":\"%s\"," // Full MAC as Device id - "\"md\":\"%s\"," // Module or Template Name - "\"ty\":%d,\"if\":%d," // Flag for TuyaMCU and Ifan devices - "\"ofln\":\"" MQTT_LWT_OFFLINE "\"," // Payload Offline - "\"onln\":\"" MQTT_LWT_ONLINE "\"," // Payload Online - "\"state\":[\"%s\",\"%s\",\"%s\",\"%s\"]," // State text for "OFF","ON","TOGGLE","HOLD" - "\"sw\":\"%s\"," // Software Version - "\"t\":\"%s\"," // Topic - "\"ft\":\"%s\"," // Full Topic - "\"tp\":[\"%s\",\"%s\",\"%s\"]," // Topics for command, stat and tele - "\"rl\":[%s],\"swc\":[%s],\"swn\":[%s],\"btn\":[%s]," // Inputs / Outputs - "\"so\":{\"4\":%d,\"11\":%d,\"13\":%d,\"17\":%d,\"20\":%d," // SetOptions - "\"30\":%d,\"68\":%d,\"73\":%d,\"82\":%d,\"114\":%d,\"117\":%d}," - "\"lk\":%d,\"lt_st\":%d,\"sho\":[%s],\"ver\":1}"; // Light SubType, Shutter Options and Discovery version - -typedef struct HASS { - uint16_t Relay[MAX_RELAYS]; // Base array to store the relay type - char RelLst[MAX_RELAYS*2]; // Relay as a char list, "0,0,0,0,0,0,0,0" - bool RelPst; // Needed for Switches. If Power devices are not present entities will be created even when switchtopic in not set. -} HASS; - -void HassDiscoveryRelays(struct HASS &Hass) -{ - Hass = {.Relay={0,0,0,0,0,0,0,0}, .RelLst={'\0'}}; - uint16_t Shutter[MAX_RELAYS] = { 0 }; // Array to store a temp list for shutters - uint8_t lightidx = MAX_RELAYS + 1; // Will store the starting position of the lights - bool iFan = false; - - Hass.RelPst = TasmotaGlobal.devices_present > 0; + uint32_t maxfn = (TasmotaGlobal.devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!TasmotaGlobal.devices_present) ? 1 : TasmotaGlobal.devices_present; + for (uint32_t i = 0; i < MAX_FRIENDLYNAMES; i++) { + char fname[TOPSZ]; + snprintf_P(fname, sizeof(fname), PSTR("\"%s\""), EscapeJSONString(SettingsText(SET_FRIENDLYNAME1 +i)).c_str()); + ResponseAppend_P(PSTR("%s%s"), (i > 0 ? "," : ""), (i < maxfn) ? fname : PSTR("null")); + } + bool TuyaMod = false; + bool iFanMod = false; #ifdef ESP8266 - if (SONOFF_IFAN02 == TasmotaGlobal.module_type || SONOFF_IFAN03 == TasmotaGlobal.module_type) { iFan = true;} -#endif // ESP8266 + if ((TUYA_DIMMER == TasmotaGlobal.module_type) || (SK03_TUYA == TasmotaGlobal.module_type)) { TuyaMod = true; }; + if ((SONOFF_IFAN02 == TasmotaGlobal.module_type) || (SONOFF_IFAN03 == TasmotaGlobal.module_type)) { iFanMod = true; }; +#endif // ESP8266 - if (Light.subtype > LST_NONE) { - if (!light_controller.isCTRGBLinked()) { // One or two lights present - lightidx = TasmotaGlobal.devices_present - 2; + ResponseAppend_P(PSTR("]," // Friendly Names (end) + "\"hn\":\"%s\"," // Host Name + "\"mac\":\"%s\"," // Full MAC as Device id + "\"md\":\"%s\"," // Module or Template Name + "\"ty\":%d,\"if\":%d," // Flag for TuyaMCU and Ifan devices + "\"ofln\":\"" MQTT_LWT_OFFLINE "\"," // Payload Offline + "\"onln\":\"" MQTT_LWT_ONLINE "\"," // Payload Online + "\"state\":[\"%s\",\"%s\",\"%s\",\"%s\"]," // State text for "OFF","ON","TOGGLE","HOLD" + "\"sw\":\"%s\"," // Software Version + "\"t\":\"%s\"," // Topic + "\"ft\":\"%s\"," // Full Topic + "\"tp\":[\"%s\",\"%s\",\"%s\"]," // Topics for command, stat and tele + "\"rl\":["), // Relays (start) + TasmotaGlobal.hostname, + NetworkUniqueId().c_str(), + ModuleName().c_str(), + TuyaMod, iFanMod, + GetStateText(0), GetStateText(1), GetStateText(2), GetStateText(3), + TasmotaGlobal.version, + TasmotaGlobal.mqtt_topic, + SettingsText(SET_MQTT_FULLTOPIC), + SettingsText(SET_MQTTPREFIX1), + SettingsText(SET_MQTTPREFIX2), + SettingsText(SET_MQTTPREFIX3)); + + uint8_t light_idx = MAX_RELAYS + 1; // Will store the starting position of the lights + uint8_t light_subtype = 0; + bool light_controller_isCTRGBLinked = false; +#ifdef USE_LIGHT + light_subtype = Light.subtype; + if (light_subtype > LST_NONE) { + light_controller_isCTRGBLinked = light_controller.isCTRGBLinked(); + if (!light_controller_isCTRGBLinked) { // One or two lights present + light_idx = TasmotaGlobal.devices_present - 2; } else { - lightidx = TasmotaGlobal.devices_present - 1; + light_idx = TasmotaGlobal.devices_present - 1; } } - if (Light.device > 0 && Settings->flag3.pwm_multi_channels) { // How many relays are light devices? - lightidx = TasmotaGlobal.devices_present - Light.subtype; + if ((Light.device > 0) && Settings->flag3.pwm_multi_channels) { // How many relays are light devices? + light_idx = TasmotaGlobal.devices_present - light_subtype; } +#endif // USE_LIGHT + uint16_t Relay[MAX_RELAYS] = { 0 }; // Base array to store the relay type + uint16_t Shutter[MAX_RELAYS] = { 0 }; // Array to store a temp list for shutters for (uint32_t i = 0; i < MAX_RELAYS; i++) { - if (i < TasmotaGlobal.devices_present) { #ifdef USE_SHUTTER @@ -252,112 +268,115 @@ void HassDiscoveryRelays(struct HASS &Hass) } } } -#endif // USE_SHUTTER +#endif // USE_SHUTTER - if (Shutter[i] != 0) { // Check if there are shutters present - Hass.Relay[i] = 3; // Relay is a shutter + if (Shutter[i] != 0) { // Check if there are shutters present + Relay[i] = 3; // Relay is a shutter } else { - if (i >= lightidx || (iFan && i == 0)) { // First relay on Ifan controls the light - Hass.Relay[i] = 2; // Relay is a light + if (i >= light_idx || (iFanMod && (0 == i))) { // First relay on Ifan controls the light + Relay[i] = 2; // Relay is a light } else { - if (!iFan) { // Relays 2-4 for ifan are controlled by FANSPEED and don't need to be present if TasmotaGlobal.module_type = SONOFF_IFAN02 or SONOFF_IFAN03 - Hass.Relay[i] = 1; // Simple Relay + if (!iFanMod) { // Relays 2-4 for ifan are controlled by FANSPEED and don't need to be present if TasmotaGlobal.module_type = SONOFF_IFAN02 or SONOFF_IFAN03 + Relay[i] = 1; // Simple Relay } } } } - snprintf_P(Hass.RelLst, sizeof(Hass.RelLst), PSTR("%s%s%d"), Hass.RelLst, (i > 0 ? "," : ""), Hass.Relay[i]); // Vector for the Official Integration - } -} - -void NewHAssDiscovery(void) -{ - char stopic[TOPSZ]; - char stemp1[TOPSZ]; - char stemp2[200]; - char switch_mode[90]; - char switch_name[300]; - char stemp5[90]; - char stemp6[90]; - char unique_id[30]; - char relays[TOPSZ]; - char *state_topic = stemp1; - bool SerialButton = false; - bool TuyaMod = false; - bool iFanMod = false; - - stemp2[0] = '\0'; - struct HASS Hass; - HassDiscoveryRelays(Hass); - -#ifdef ESP8266 - if (TUYA_DIMMER == TasmotaGlobal.module_type || SK03_TUYA == TasmotaGlobal.module_type) { TuyaMod = true; } - if (SONOFF_IFAN02 == TasmotaGlobal.module_type || SONOFF_IFAN03 == TasmotaGlobal.module_type) { iFanMod = true; } -#endif // ESP8266 - - uint32_t maxfn = (TasmotaGlobal.devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!TasmotaGlobal.devices_present) ? 1 : TasmotaGlobal.devices_present; - for (uint32_t i = 0; i < MAX_FRIENDLYNAMES; i++) { - char fname[TOPSZ]; - snprintf_P(fname, sizeof(fname), PSTR("\"%s\""), EscapeJSONString(SettingsText(SET_FRIENDLYNAME1 +i)).c_str()); - snprintf_P(stemp2, sizeof(stemp2), PSTR("%s%s%s"), stemp2, (i > 0 ? "," : ""), (i < maxfn) ? fname : PSTR("null")); + ResponseAppend_P(PSTR("%s%d"), (i > 0 ? "," : ""), Relay[i]); // Vector for the Official Integration } - switch_mode[0] = '\0'; - switch_name[0] = '\0'; + ResponseAppend_P(PSTR("]," // Relays (end) + "\"swc\":[")); // Switch modes (start) + + // Enable Discovery for Switches only if SetOption114 is enabled + for (uint32_t i = 0; i < MAX_SWITCHES; i++) { + ResponseAppend_P(PSTR("%s%d"), (i > 0 ? "," : ""), (PinUsed(GPIO_SWT1, i) && Settings->flag5.mqtt_switches) ? Settings->switchmode[i] : -1); + } + + ResponseAppend_P(PSTR("]," // Switch modes (end) + "\"swn\":[")); // Switch names (start) + // Enable Discovery for Switches only if SetOption114 is enabled for (uint32_t i = 0; i < MAX_SWITCHES; i++) { char sname[TOPSZ]; snprintf_P(sname, sizeof(sname), PSTR("\"%s\""), GetSwitchText(i).c_str()); - snprintf_P(switch_mode, sizeof(switch_mode), PSTR("%s%s%d"), switch_mode, (i > 0 ? "," : ""), (PinUsed(GPIO_SWT1, i) & Settings->flag5.mqtt_switches) ? Settings->switchmode[i] : -1); - snprintf_P(switch_name, sizeof(switch_name), PSTR("%s%s%s"), switch_name, (i > 0 ? "," : ""), (PinUsed(GPIO_SWT1, i) & Settings->flag5.mqtt_switches) ? sname : PSTR("null")); + ResponseAppend_P(PSTR("%s%s"), (i > 0 ? "," : ""), (PinUsed(GPIO_SWT1, i) && Settings->flag5.mqtt_switches) ? sname : PSTR("null")); } - stemp5[0] = '\0'; + ResponseAppend_P(PSTR("]," // Switch names (end) + "\"btn\":[")); // Button flag (start) + + bool SerialButton = false; // Enable Discovery for Buttons only if SetOption73 is enabled for (uint32_t i = 0; i < MAX_KEYS; i++) { #ifdef ESP8266 - if (i == 0 && (SONOFF_DUAL == TasmotaGlobal.module_type )) { SerialButton = true; } -#endif // ESP8266 - snprintf_P(stemp5, sizeof(stemp5), PSTR("%s%s%d"), stemp5, (i > 0 ? "," : ""), (SerialButton ? 1 : (PinUsed(GPIO_KEY1, i)) & Settings->flag3.mqtt_buttons)); - SerialButton = false; + SerialButton = ((0 == i) && (SONOFF_DUAL == TasmotaGlobal.module_type )); +#endif // ESP8266 + ResponseAppend_P(PSTR("%s%d"), (i > 0 ? "," : ""), (SerialButton ? 1 : (PinUsed(GPIO_KEY1, i)) && Settings->flag3.mqtt_buttons)); } - stemp6[0] = '\0'; -#ifdef USE_SHUTTER + + ResponseAppend_P(PSTR("]," // Button flag (end) + "\"so\":{\"4\":%d," // SetOptions + "\"11\":%d," + "\"13\":%d," + "\"17\":%d," + "\"20\":%d," + "\"30\":%d," + "\"68\":%d," + "\"73\":%d," + "\"82\":%d," + "\"114\":%d," + "\"117\":%d}," + "\"lk\":%d," // Light CTRGB linked + "\"lt_st\":%d," // Light SubType + "\"sho\":["), // Shutter Options (start) + Settings->flag.mqtt_response, + Settings->flag.button_swap, + Settings->flag.button_single, + Settings->flag.decimal_text, + Settings->flag.not_power_linked, + Settings->flag.hass_light, + Settings->flag3.pwm_multi_channels, + Settings->flag3.mqtt_buttons, + Settings->flag4.alexa_ct_range, + Settings->flag5.mqtt_switches, + Settings->flag5.fade_fixed_duration, + light_controller_isCTRGBLinked, + light_subtype); + for (uint32_t i = 0; i < MAX_SHUTTERS; i++) { - snprintf_P(stemp6, sizeof(stemp6), PSTR("%s%s%d"), stemp6, (i > 0 ? "," : ""), Settings->shutter_options[i]); - } +#ifdef USE_SHUTTER + ResponseAppend_P(PSTR("%s%d"), (i > 0 ? "," : ""), Settings->shutter_options[i]); #else - snprintf_P(stemp6, sizeof(stemp6), PSTR("0,0,0,0")); -#endif // USE_SHUTTER - - ResponseClear(); // Clear retained message - - // Full 12 chars MAC address as ID - snprintf_P(unique_id, sizeof(unique_id), PSTR("%s"), NetworkUniqueId().c_str()); - snprintf_P(stopic, sizeof(stopic), PSTR("tasmota/discovery/%s/config"), unique_id); - - // Send empty message if new discovery is disabled - TasmotaGlobal.masterlog_level = 4; // Hide topic on clean and remove use weblog 4 to show it - if (!Settings->flag.hass_discovery) { // HassDiscoveryRelays(relays) - Response_P(HASS_DISCOVER_DEVICE, (uint32_t)WiFi.localIP(), SettingsText(SET_DEVICENAME), - stemp2, TasmotaGlobal.hostname, unique_id, ModuleName().c_str(), TuyaMod, iFanMod, GetStateText(0), GetStateText(1), GetStateText(2), GetStateText(3), - TasmotaGlobal.version, TasmotaGlobal.mqtt_topic, SettingsText(SET_MQTT_FULLTOPIC), PSTR(SUB_PREFIX), PSTR(PUB_PREFIX), PSTR(PUB_PREFIX2), Hass.RelLst, switch_mode, switch_name, - stemp5, Settings->flag.mqtt_response, Settings->flag.button_swap, Settings->flag.button_single, Settings->flag.decimal_text, Settings->flag.not_power_linked, - Settings->flag.hass_light, Settings->flag3.pwm_multi_channels, Settings->flag3.mqtt_buttons, Settings->flag4.alexa_ct_range, Settings->flag5.mqtt_switches, - Settings->flag5.fade_fixed_duration, light_controller.isCTRGBLinked(), Light.subtype, stemp6); + ResponseAppend_P(PSTR("%s0"), (i > 0 ? "," : "")); +#endif // USE_SHUTTER } + + ResponseAppend_P(PSTR("]," // Shutter Options (end) + "\"ver\":1}")); // Discovery version +} + +void NewHAssDiscovery(void) { + TasmotaGlobal.masterlog_level = LOG_LEVEL_DEBUG_MORE; // Hide topic on clean and remove use weblog 4 to show it + + ResponseClear(); // Clear retained message + if (!Settings->flag.hass_discovery) { // SetOption19 - Clear retained message + HassDiscoverMessage(); // Build discovery message + } + char stopic[TOPSZ]; + snprintf_P(stopic, sizeof(stopic), PSTR("tasmota/discovery/%s/config"), NetworkUniqueId().c_str()); MqttPublish(stopic, true); - if (!Settings->flag.hass_discovery) { - snprintf_P(stopic, sizeof(stopic), PSTR("tasmota/discovery/%s/sensors"), unique_id); + if (!Settings->flag.hass_discovery) { // SetOption19 - Clear retained message Response_P(PSTR("{\"sn\":")); MqttShowSensor(); ResponseAppend_P(PSTR(",\"ver\":1}")); - MqttPublish(stopic, true); } - TasmotaGlobal.masterlog_level = 0; // Restore WebLog state -} + snprintf_P(stopic, sizeof(stopic), PSTR("tasmota/discovery/%s/sensors"), NetworkUniqueId().c_str()); + MqttPublish(stopic, true); + TasmotaGlobal.masterlog_level = LOG_LEVEL_NONE; // Restore WebLog state +} // NEW DISCOVERY void TryResponseAppend_P(const char *format, ...) { @@ -403,12 +422,13 @@ void HAssAnnounceRelayLight(void) char stemp3[TOPSZ]; char unique_id[30]; +#ifdef USE_LIGHT bool LightControl = light_controller.isCTRGBLinked(); // SetOption37 - Color remapping for led channels, also provides an option for allowing independent handling of RGB and white channels +#endif //USE_LIGHT bool PwmMulti = Settings->flag3.pwm_multi_channels; // SetOption68 - Multi-channel PWM instead of a single light bool is_topic_light = false; // Switch HAss domain between Lights and Relays bool ind_light = false; // Controls Separated Lights when SetOption37 is >= 128 bool ct_light = false; // Controls a CT Light when SetOption37 is >= 128 - bool wt_light = false; // Controls a White Light when SetOption37 is >= 128 bool err_flag = false; // When true it blocks the creation of entities if the order of the Relays is not correct to avoid issue with Lights bool TuyaMod = false; // Controls Tuya MCU modules bool PwmMod = false; // Controls PWM_DIMMER module @@ -430,14 +450,15 @@ void HAssAnnounceRelayLight(void) if (TUYA_DIMMER == TasmotaGlobal.module_type || SK03_TUYA == TasmotaGlobal.module_type) { TuyaMod = true; } #endif //ESP8266 +#ifdef USE_LIGHT // If there is a special Light to be enabled and managed with SetOption68 or SetOption37 >= 128, Discovery calculates the maximum number of entities to be generated in advance - if (PwmMulti) { max_lights = Light.subtype; } if (!LightControl) { ind_light = true; if (!PwmMulti) { max_lights = 2;} } +#endif //USE_LIGHT #ifdef USE_SHUTTER if (Settings->flag3.shutter_mode) { @@ -482,11 +503,16 @@ void HAssAnnounceRelayLight(void) if (bitRead(shutter_mask, i-1)) { // suppress shutter relays +#ifdef USE_LIGHT } else if ((i < Light.device) && !RelayX) { err_flag = true; AddLog(LOG_LEVEL_ERROR, PSTR("%s"), kHAssError2); } else { if (Settings->flag.hass_discovery && (RelayX || (Light.device > 0) && (max_lights > 0)) && !err_flag ) +#else + } else { + if (Settings->flag.hass_discovery && RelayX ) +#endif //USE_LIGHT { // SetOption19 - Control Home Assistant automatic discovery (See SetOption59) char name[TOPSZ]; // friendlyname(33) + " " + index char value_template[33]; @@ -539,16 +565,15 @@ void HAssAnnounceRelayLight(void) if ((ind_light && !PwmMulti) || LightControl) { if (Light.subtype >= LST_RGB) { - char *rgb_command_topic = stemp1; + char *clr_command_topic = stemp1; - GetTopic_P(rgb_command_topic, CMND, TasmotaGlobal.mqtt_topic, D_CMND_COLOR); - TryResponseAppend_P(HASS_DISCOVER_LIGHT_COLOR, rgb_command_topic, state_topic); + GetTopic_P(clr_command_topic, CMND, TasmotaGlobal.mqtt_topic, D_CMND_HSBCOLOR); + TryResponseAppend_P(HASS_DISCOVER_LIGHT_HS_COLOR, clr_command_topic, state_topic); char *effect_command_topic = stemp1; GetTopic_P(effect_command_topic, CMND, TasmotaGlobal.mqtt_topic, D_CMND_SCHEME); TryResponseAppend_P(HASS_DISCOVER_LIGHT_SCHEME, effect_command_topic, state_topic); } - if (LST_RGBW <= Light.subtype) { wt_light = true; } if (LST_RGBCW == Light.subtype) { ct_light = true; } } @@ -557,16 +582,14 @@ void HAssAnnounceRelayLight(void) char *color_temp_command_topic = stemp1; GetTopic_P(color_temp_command_topic, CMND, TasmotaGlobal.mqtt_topic, D_CMND_COLORTEMPERATURE); - TryResponseAppend_P(HASS_DISCOVER_LIGHT_CT, color_temp_command_topic, state_topic); + TryResponseAppend_P(HASS_DISCOVER_LIGHT_CT, color_temp_command_topic, state_topic, state_topic); ct_light = false; } - if ((!ind_light && wt_light) || (LST_RGBW <= Light.subtype && - !PwmMulti && LightControl)) { + if (LST_RGBW == Light.subtype && !PwmMulti && LightControl) { char *white_temp_command_topic = stemp1; GetTopic_P(white_temp_command_topic, CMND, TasmotaGlobal.mqtt_topic, D_CMND_WHITE); TryResponseAppend_P(HASS_DISCOVER_LIGHT_WHITE, white_temp_command_topic, state_topic); - wt_light = false; } ind_light = false; max_lights--; @@ -898,11 +921,7 @@ void HAssAnnounceSensors(void) TasmotaGlobal.tele_period = tele_period_save; size_t sensordata_len = ResponseLength(); char sensordata[sensordata_len+2]; // dynamically adjust the size -#ifdef MQTT_DATA_STRING - strcpy(sensordata, TasmotaGlobal.mqtt_data.c_str()); // we can use strcpy since the buffer has the right size -#else - strcpy(sensordata, TasmotaGlobal.mqtt_data); // we can use strcpy since the buffer has the right size -#endif + strcpy(sensordata, ResponseData()); // we can use strcpy since the buffer has the right size // ******************* JSON TEST ******************* // char sensordata[512]; diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 9ed0a2390..123d40276 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -50,6 +50,11 @@ int16_t disp_xpos = 0; int16_t disp_ypos = 0; #ifdef USE_MULTI_DISPLAY + +#ifndef MAX_MULTI_DISPLAYS +#define MAX_MULTI_DISPLAYS 3 +#endif + struct MULTI_DISP { Renderer *display; uint16_t fg_color; @@ -58,7 +63,9 @@ struct MULTI_DISP { int16_t disp_ypos; uint8_t color_type; uint8_t auto_draw; -} displays[3]; + uint8_t model; + uint8_t used; +} displays[MAX_MULTI_DISPLAYS]; uint8_t cur_display; Renderer *Init_uDisplay(const char *desc, int8_t cs); @@ -70,6 +77,8 @@ void Set_display(uint8_t index) { displays[index].auto_draw = auto_draw; displays[index].disp_xpos = disp_xpos; displays[index].disp_ypos = disp_ypos; + displays[index].model = Settings->display_model; + displays[index].used = 1; cur_display = index; } @@ -82,6 +91,7 @@ void Get_display(uint8_t index) { disp_xpos = displays[index].disp_xpos; disp_ypos = displays[index].disp_ypos; if (renderer) renderer->setDrawMode(auto_draw >> 1); + //Settings->display_model = displays[index].model; cur_display = index; } #endif // USE_MULTI_DISPLAY @@ -204,6 +214,8 @@ struct GRAPH { uint8_t yticks; uint8_t last_val; uint8_t color_index; + uint16_t bg_color; + uint16_t fg_color; GFLAGS flags; }; @@ -395,6 +407,30 @@ uint32_t decode_te(char *line) { return skip; } +/*-------------------------------------------------------------------------------------------*/ +// Getter and Setter for DisplayDimer +// Original encoding is range 0..15 +// New encoding is range 0..100 using negative numbers, i.e. 0..-100 +uint8_t GetDisplayDimmer(void) { + if (Settings->display_dimmer_protected > 0) { + return changeUIntScale(Settings->display_dimmer_protected, 0, 15, 0, 100); + } else { + if (Settings->display_dimmer_protected < -100) { Settings->display_dimmer_protected = -100; } + return - Settings->display_dimmer_protected; + } +} + +// retro-compatible call to get range 0..15 +uint8_t GetDisplayDimmer16(void) { + return changeUIntScale(GetDisplayDimmer(), 0, 100, 0, 15); +} + +// In: 0..100 +void SetDisplayDimmer(uint8_t dimmer) { + if (dimmer > 100) { dimmer = 100; } + Settings->display_dimmer_protected = - dimmer; +} + /*-------------------------------------------------------------------------------------------*/ #define DISPLAY_BUFFER_COLS 128 // Max number of characters in linebuf @@ -556,16 +592,21 @@ void DisplayText(void) break; #ifdef USE_MULTI_DISPLAY case 'S': - { + { int16_t rot = -1, srot, model; var = atoiv(cp, &temp); cp += var; - if (temp < 1 || temp > 3) { + if (temp < 1 || temp > MAX_MULTI_DISPLAYS) { temp = 1; } temp--; + if (*cp == 'r') { + cp++; + var = atoiv(cp, &rot); + cp += var; + } if (*cp == ':') { cp++; - if (displays[temp].display) { + if (displays[temp].used) { Set_display(cur_display); Get_display(temp); } @@ -582,12 +623,22 @@ void DisplayText(void) uint32_t size = fp.size(); char *fdesc = (char *)calloc(size + 4, 1); if (fdesc) { + model = Settings->display_model; fp.read((uint8_t*)fdesc, size); fp.close(); Get_display(temp); + if (rot >= 0) { + srot = Settings->display_rotate; + Settings->display_rotate = rot; + } renderer = Init_uDisplay(fdesc, -1); + if (rot >= 0) { + Settings->display_rotate = srot; + } Set_display(temp); AddLog(LOG_LEVEL_INFO, PSTR("DSP: File descriptor loaded %x"),renderer); + free(fdesc); + Settings->display_model = model; } } } @@ -1301,11 +1352,7 @@ void DisplayDTVarsTeleperiod(void) { if (jlen < DTV_JSON_SIZE) { char *json = (char*)malloc(jlen + 2); if (json) { -#ifdef MQTT_DATA_STRING - strlcpy(json, TasmotaGlobal.mqtt_data.c_str(), jlen + 1); -#else - strlcpy(json, TasmotaGlobal.mqtt_data, jlen + 1); -#endif + strlcpy(json, ResponseData(), jlen + 1); get_dt_vars(json); free(json); } @@ -1324,11 +1371,7 @@ void get_dt_mqtt(void) { ResponseJsonStart(); ResponseJsonEnd(); } -#ifdef MQTT_DATA_STRING - get_dt_vars(TasmotaGlobal.mqtt_data.c_str()); -#else - get_dt_vars(TasmotaGlobal.mqtt_data); -#endif + get_dt_vars(ResponseData()); } void get_dt_vars(char *json) { @@ -1576,9 +1619,7 @@ void DisplayJsonValue(const char* topic, const char* device, const char* mkey, c char source[Settings->display_cols[0] - Settings->display_cols[1]]; char svalue[Settings->display_cols[1] +1]; -#ifdef USE_DEBUG_DRIVER - ShowFreeMem(PSTR("DisplayJsonValue")); -#endif + SHOW_FREE_MEM(PSTR("DisplayJsonValue")); memset(spaces, 0x20, sizeof(spaces)); spaces[sizeof(spaces) -1] = '\0'; @@ -1745,13 +1786,8 @@ void DisplayLocalSensor(void) { if ((Settings->display_mode &0x02) && (0 == TasmotaGlobal.tele_period)) { char no_topic[1] = { 0 }; -#ifdef MQTT_DATA_STRING -// DisplayAnalyzeJson(TasmotaGlobal.mqtt_topic, TasmotaGlobal.mqtt_data.c_str()); // Add local topic - DisplayAnalyzeJson(no_topic, TasmotaGlobal.mqtt_data.c_str()); // Discard any topic -#else -// DisplayAnalyzeJson(TasmotaGlobal.mqtt_topic, TasmotaGlobal.mqtt_data); // Add local topic - DisplayAnalyzeJson(no_topic, TasmotaGlobal.mqtt_data); // Discard any topic -#endif +// DisplayAnalyzeJson(TasmotaGlobal.mqtt_topic, ResponseData()); // Add local topic + DisplayAnalyzeJson(no_topic, ResponseData()); // Discard any topic } } @@ -1766,36 +1802,38 @@ void DisplayInitDriver(void) { XdspCall(FUNC_DISPLAY_INIT_DRIVER); -#ifdef USE_MULTI_DISPLAY - Set_display(0); -#endif // USE_MULTI_DISPLAY - - if (renderer) { - renderer->setTextFont(Settings->display_font); - renderer->setTextSize(Settings->display_size); - // force opaque mode - renderer->setDrawMode(0); - - for (uint32_t cnt = 0; cnt < (MAX_INDEXCOLORS - PREDEF_INDEXCOLORS); cnt++) { - index_colors[cnt] = 0; - } - } - -#ifdef USE_DT_VARS - free_dt_vars(); -#endif - -#ifdef USE_UFILESYS - Display_Text_From_File(DISP_BATCH_FILE); -#endif - -#ifdef USE_GRAPH - for (uint8_t count = 0; count < NUM_GRAPHS; count++) { graph[count] = 0; } -#endif - // AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "Display model %d"), Settings->display_model); if (Settings->display_model) { +// ApplyDisplayDimmer(); // Not allowed here. Way too early in initi sequence. IE power state has not even been set at this point in time + +#ifdef USE_MULTI_DISPLAY + Set_display(0); +#endif // USE_MULTI_DISPLAY + + if (renderer) { + renderer->setTextFont(Settings->display_font); + renderer->setTextSize(Settings->display_size); + // force opaque mode + renderer->setDrawMode(0); + + for (uint32_t cnt = 0; cnt < (MAX_INDEXCOLORS - PREDEF_INDEXCOLORS); cnt++) { + index_colors[cnt] = 0; + } + } + +#ifdef USE_DT_VARS + free_dt_vars(); +#endif + +#ifdef USE_UFILESYS + Display_Text_From_File(DISP_BATCH_FILE); +#endif + +#ifdef USE_GRAPH + for (uint8_t count = 0; count < NUM_GRAPHS; count++) { graph[count] = 0; } +#endif + TasmotaGlobal.devices_present++; if (!PinUsed(GPIO_BACKLIGHT)) { if (TasmotaGlobal.light_type && (4 == Settings->display_model)) { @@ -1836,7 +1874,7 @@ void CmndDisplay(void) { D_CMND_DISP_MODE "\":%d,\"" D_CMND_DISP_DIMMER "\":%d,\"" D_CMND_DISP_SIZE "\":%d,\"" D_CMND_DISP_FONT "\":%d,\"" D_CMND_DISP_ROTATE "\":%d,\"" D_CMND_DISP_INVERT "\":%d,\"" D_CMND_DISP_REFRESH "\":%d,\"" D_CMND_DISP_COLS "\":[%d,%d],\"" D_CMND_DISP_ROWS "\":%d}}"), Settings->display_model, Settings->display_options.type, Settings->display_width, Settings->display_height, - Settings->display_mode, changeUIntScale(Settings->display_dimmer, 0, 15, 0, 100), Settings->display_size, Settings->display_font, + Settings->display_mode, GetDisplayDimmer(), Settings->display_size, Settings->display_font, Settings->display_rotate, Settings->display_options.invert, Settings->display_refresh, Settings->display_cols[0], Settings->display_cols[1], Settings->display_rows); } @@ -1911,22 +1949,30 @@ void CmndDisplayMode(void) { ResponseCmndNumber(Settings->display_mode); } +// Apply the current display dimmer +void ApplyDisplayDimmer(void) { + uint8_t dimmer8 = changeUIntScale(GetDisplayDimmer(), 0, 100, 0, 255); + uint8_t dimmer8_gamma = ledGamma(dimmer8); + if (dimmer8 && !(disp_power)) { + ExecuteCommandPower(disp_device, POWER_ON, SRC_DISPLAY); + } + else if (!dimmer8 && disp_power) { + ExecuteCommandPower(disp_device, POWER_OFF, SRC_DISPLAY); + } + if (renderer) { + renderer->dim8(dimmer8, dimmer8_gamma); // provide 8 bits and gamma corrected dimmer in 8 bits + } else { + XdspCall(FUNC_DISPLAY_DIM); + } +} + void CmndDisplayDimmer(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 100)) { - Settings->display_dimmer = changeUIntScale(XdrvMailbox.payload, 0, 100, 0, 15); // Correction for Domoticz (0 - 15) - if (Settings->display_dimmer && !(disp_power)) { - ExecuteCommandPower(disp_device, POWER_ON, SRC_DISPLAY); - } - else if (!Settings->display_dimmer && disp_power) { - ExecuteCommandPower(disp_device, POWER_OFF, SRC_DISPLAY); - } - if (renderer) { - renderer->dim(Settings->display_dimmer); - } else { - XdspCall(FUNC_DISPLAY_DIM); - } + uint8_t dimmer = XdrvMailbox.payload; + SetDisplayDimmer(dimmer); + ApplyDisplayDimmer(); } - ResponseCmndNumber(changeUIntScale(Settings->display_dimmer, 0, 15, 0, 100)); + ResponseCmndNumber(GetDisplayDimmer()); } void CmndDisplaySize(void) { @@ -2360,12 +2406,12 @@ void ClrGraph(uint16_t num) { // clr inside, but only 1.graph if overlapped if (gp->flags.overlay) return; - renderer->fillRect(gp->xp+1,gp->yp+1,gp->xs-2,gp->ys-2,bg_color); + renderer->fillRect(gp->xp+1,gp->yp+1,gp->xs-2,gp->ys-2,gp->bg_color); if (xticks) { float cxp=gp->xp,xd=(float)gp->xs/(float)xticks; for (count=0; countwriteFastVLine(cxp,gp->yp+gp->ys-TICKLEN,TICKLEN,fg_color); + renderer->writeFastVLine(cxp,gp->yp+gp->ys-TICKLEN,TICKLEN,gp->fg_color); cxp+=xd; } } @@ -2375,27 +2421,27 @@ void ClrGraph(uint16_t num) { float cxp=0; float czp=gp->yp+(gp->ymax/gp->range); while (cxpxs) { - renderer->writeFastHLine(gp->xp+cxp,czp,2,fg_color); + renderer->writeFastHLine(gp->xp+cxp,czp,2,gp->fg_color); cxp+=6.0; } // align ticks to zero line float cyp=0,yd=gp->ys/yticks; for (count=0; countgp->yp) { - renderer->writeFastHLine(gp->xp,czp-cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp-cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp,czp-cyp,TICKLEN,gp->fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp-cyp,TICKLEN,gp->fg_color); } if ((czp+cyp)<(gp->yp+gp->ys)) { renderer->writeFastHLine(gp->xp,czp+cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp+cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,czp+cyp,TICKLEN,gp->fg_color); } cyp+=yd; } } else { float cyp=gp->yp,yd=gp->ys/yticks; for (count=0; countwriteFastHLine(gp->xp,cyp,TICKLEN,fg_color); - renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,cyp,TICKLEN,fg_color); + renderer->writeFastHLine(gp->xp,cyp,TICKLEN,gp->fg_color); + renderer->writeFastHLine(gp->xp+gp->xs-TICKLEN,cyp,TICKLEN,gp->fg_color); cyp+=yd; } } @@ -2425,6 +2471,9 @@ void DefineGraph(uint16_t num,uint16_t xp,uint16_t yp,int16_t xs,uint16_t ys,int } } + gp->bg_color=bg_color; + gp->fg_color=fg_color; + // 6 bits per axis gp->xticks=(num>>4)&0x3f; gp->yticks=(num>>10)&0x3f; @@ -2478,7 +2527,7 @@ void DefineGraph(uint16_t num,uint16_t xp,uint16_t yp,int16_t xs,uint16_t ys,int } // draw rectangle - renderer->drawRect(xp,yp,xs,ys,fg_color); + renderer->drawRect(xp,yp,xs,ys,gp->fg_color); // clr inside ClrGraph(index); @@ -2593,7 +2642,7 @@ void RedrawGraph(uint8_t num, uint8_t flags) { if (!renderer) return; gp->flags.draw=1; - uint16_t linecol=fg_color; + uint16_t linecol=gp->fg_color; if (color_type==COLOR_COLOR) { linecol = GetColorFromIndex(gp->color_index); @@ -2601,7 +2650,7 @@ void RedrawGraph(uint8_t num, uint8_t flags) { if (!gp->flags.overlay) { // draw rectangle - renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,fg_color); + renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,gp->fg_color); // clr inside ClrGraph(index); } @@ -2616,7 +2665,7 @@ void AddGraph(uint8_t num,uint8_t val) { struct GRAPH *gp=graph[num]; if (!renderer) return; - uint16_t linecol=fg_color; + uint16_t linecol=gp->fg_color; if (color_type==COLOR_COLOR) { linecol = GetColorFromIndex(gp->color_index); } @@ -2638,7 +2687,7 @@ void AddGraph(uint8_t num,uint8_t val) { // clr area and redraw graph if (!gp->flags.overlay) { // draw rectangle - renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,fg_color); + renderer->drawRect(gp->xp,gp->yp,gp->xs,gp->ys,gp->fg_color); // clr inner and draw ticks ClrGraph(num); } diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 1f1a5043f..c00765f0e 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -753,7 +753,7 @@ void TuyaProcessStatePacket(void) { if (RtcTime.valid) { if (Tuya.lastPowerCheckTime != 0 && Energy.active_power[0] > 0) { - Energy.kWhtoday += Energy.active_power[0] * (float)(Rtc.utc_time - Tuya.lastPowerCheckTime) / 36.0; + Energy.kWhtoday[0] += Energy.active_power[0] * (float)(Rtc.utc_time - Tuya.lastPowerCheckTime) / 36.0; EnergyUpdateToday(); } Tuya.lastPowerCheckTime = Rtc.utc_time; @@ -885,14 +885,15 @@ void TuyaProcessStatePacket(void) { if (RtcTime.valid) { if (Tuya.lastPowerCheckTime != 0 && Energy.active_power[0] > 0) { - Energy.kWhtoday += Energy.active_power[0] * (float)(Rtc.utc_time - Tuya.lastPowerCheckTime) / 36.0; + Energy.kWhtoday[0] += Energy.active_power[0] * (float)(Rtc.utc_time - Tuya.lastPowerCheckTime) / 36.0; EnergyUpdateToday(); } Tuya.lastPowerCheckTime = Rtc.utc_time; } } else if (tuya_energy_enabled && fnId == TUYA_MCU_FUNC_POWER_TOTAL) { - EnergyUpdateTotal((float)packetValue / 100,true); + Energy.import_active[0] = (float)packetValue / 100; AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d Total_Power=%d"), Tuya.buffer[dpidStart], packetValue); + EnergyUpdateTotal(); } #endif // USE_ENERGY_SENSOR } @@ -1227,11 +1228,7 @@ void TuyaSerialInput(void) if (Settings->flag3.tuya_serial_mqtt_publish) { // SetOption66 - Enable TuyaMcuReceived messages over Mqtt MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_TUYA_MCU_RECEIVED)); } else { -#ifdef MQTT_DATA_STRING - AddLog(LOG_LEVEL_DEBUG, TasmotaGlobal.mqtt_data.c_str()); -#else - AddLog(LOG_LEVEL_DEBUG, TasmotaGlobal.mqtt_data); -#endif + AddLog(LOG_LEVEL_DEBUG, ResponseData()); } XdrvRulesProcess(0); diff --git a/tasmota/xdrv_23_zigbee_3_hue.ino b/tasmota/xdrv_23_zigbee_3_hue.ino index f8bf00e68..a90966ab9 100644 --- a/tasmota/xdrv_23_zigbee_3_hue.ino +++ b/tasmota/xdrv_23_zigbee_3_hue.ino @@ -212,7 +212,7 @@ void ZigbeeHueHS(uint16_t shortaddr, uint16_t hue, uint8_t sat) { uint8_t hue8 = changeUIntScale(hue, 0, 360, 0, 254); if (sat > 0xFE) { sat = 0xFE; } SBuffer s(4); - s.add8(hue); + s.add8(hue8); s.add8(sat); s.add16(0); ZigbeeSendHue(shortaddr, 0x0300, 0x06, s); diff --git a/tasmota/xdrv_23_zigbee_5__constants.ino b/tasmota/xdrv_23_zigbee_5__constants.ino index 0b5f025c5..eaec0d99d 100644 --- a/tasmota/xdrv_23_zigbee_5__constants.ino +++ b/tasmota/xdrv_23_zigbee_5__constants.ino @@ -444,6 +444,8 @@ const char Z_strings[] PROGMEM = "TuyaAwayTemp" "\x00" "TuyaBattery" "\x00" "TuyaBoostTime" "\x00" + "TuyaCalibration" "\x00" + "TuyaCalibrationTime" "\x00" "TuyaChildLock" "\x00" "TuyaComfortTemp" "\x00" "TuyaEcoTemp" "\x00" @@ -451,6 +453,8 @@ const char Z_strings[] PROGMEM = "TuyaForceMode" "\x00" "TuyaMaxTemp" "\x00" "TuyaMinTemp" "\x00" + "TuyaMotorReversal" "\x00" + "TuyaMovingState" "\x00" "TuyaPreset" "\x00" "TuyaScheduleHolidays" "\x00" "TuyaScheduleWorkdays" "\x00" @@ -873,63 +877,67 @@ enum Z_offsets { Zo_TuyaAwayTemp = 5754, Zo_TuyaBattery = 5767, Zo_TuyaBoostTime = 5779, - Zo_TuyaChildLock = 5793, - Zo_TuyaComfortTemp = 5807, - Zo_TuyaEcoTemp = 5823, - Zo_TuyaFanMode = 5835, - Zo_TuyaForceMode = 5847, - Zo_TuyaMaxTemp = 5861, - Zo_TuyaMinTemp = 5873, - Zo_TuyaPreset = 5885, - Zo_TuyaScheduleHolidays = 5896, - Zo_TuyaScheduleWorkdays = 5917, - Zo_TuyaTempTarget = 5938, - Zo_TuyaValveDetection = 5953, - Zo_TuyaValvePosition = 5972, - Zo_TuyaWeekSelect = 5990, - Zo_TuyaWindowDetection = 6005, - Zo_UnoccupiedCoolingSetpoint = 6025, - Zo_UnoccupiedHeatingSetpoint = 6051, - Zo_UtilityName = 6077, - Zo_ValidUntilTime = 6089, - Zo_ValvePosition = 6104, - Zo_VelocityLift = 6118, - Zo_ViewGroup = 6131, - Zo_ViewScene = 6141, - Zo_Water = 6151, - Zo_WhitePointX = 6157, - Zo_WhitePointY = 6169, - Zo_WindowCoveringType = 6181, - Zo_X = 6200, - Zo_Y = 6202, - Zo_ZCLVersion = 6204, - Zo_ZoneState = 6215, - Zo_ZoneStatus = 6225, - Zo_ZoneStatusChange = 6236, - Zo_ZoneType = 6253, - Zo__ = 6262, - Zo_xx = 6264, - Zo_xx000A00 = 6267, - Zo_xx0A = 6276, - Zo_xx0A00 = 6281, - Zo_xx19 = 6288, - Zo_xx190A = 6293, - Zo_xx190A00 = 6300, - Zo_xxxx = 6309, - Zo_xxxx00 = 6314, - Zo_xxxx0A00 = 6321, - Zo_xxxxyy = 6330, - Zo_xxxxyyyy = 6337, - Zo_xxxxyyyy0A00 = 6346, - Zo_xxxxyyzz = 6359, - Zo_xxyy = 6368, - Zo_xxyy0A00 = 6373, - Zo_xxyyyy = 6382, - Zo_xxyyyy000000000000 = 6389, - Zo_xxyyyy0A0000000000 = 6408, - Zo_xxyyyyzz = 6427, - Zo_xxyyyyzzzz = 6436, - Zo_xxyyzzzz = 6447, + Zo_TuyaCalibration = 5793, + Zo_TuyaCalibrationTime = 5809, + Zo_TuyaChildLock = 5829, + Zo_TuyaComfortTemp = 5843, + Zo_TuyaEcoTemp = 5859, + Zo_TuyaFanMode = 5871, + Zo_TuyaForceMode = 5883, + Zo_TuyaMaxTemp = 5897, + Zo_TuyaMinTemp = 5909, + Zo_TuyaMotorReversal = 5921, + Zo_TuyaMovingState = 5939, + Zo_TuyaPreset = 5955, + Zo_TuyaScheduleHolidays = 5966, + Zo_TuyaScheduleWorkdays = 5987, + Zo_TuyaTempTarget = 6008, + Zo_TuyaValveDetection = 6023, + Zo_TuyaValvePosition = 6042, + Zo_TuyaWeekSelect = 6060, + Zo_TuyaWindowDetection = 6075, + Zo_UnoccupiedCoolingSetpoint = 6095, + Zo_UnoccupiedHeatingSetpoint = 6121, + Zo_UtilityName = 6147, + Zo_ValidUntilTime = 6159, + Zo_ValvePosition = 6174, + Zo_VelocityLift = 6188, + Zo_ViewGroup = 6201, + Zo_ViewScene = 6211, + Zo_Water = 6221, + Zo_WhitePointX = 6227, + Zo_WhitePointY = 6239, + Zo_WindowCoveringType = 6251, + Zo_X = 6270, + Zo_Y = 6272, + Zo_ZCLVersion = 6274, + Zo_ZoneState = 6285, + Zo_ZoneStatus = 6295, + Zo_ZoneStatusChange = 6306, + Zo_ZoneType = 6323, + Zo__ = 6332, + Zo_xx = 6334, + Zo_xx000A00 = 6337, + Zo_xx0A = 6346, + Zo_xx0A00 = 6351, + Zo_xx19 = 6358, + Zo_xx190A = 6363, + Zo_xx190A00 = 6370, + Zo_xxxx = 6379, + Zo_xxxx00 = 6384, + Zo_xxxx0A00 = 6391, + Zo_xxxxyy = 6400, + Zo_xxxxyyyy = 6407, + Zo_xxxxyyyy0A00 = 6416, + Zo_xxxxyyzz = 6429, + Zo_xxyy = 6438, + Zo_xxyy0A00 = 6443, + Zo_xxyyyy = 6452, + Zo_xxyyyy000000000000 = 6459, + Zo_xxyyyy0A0000000000 = 6478, + Zo_xxyyyyzz = 6497, + Zo_xxyyyyzzzz = 6506, + Zo_xxyyzzzz = 6517, }; diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino index cde68b16d..494d26fb8 100644 --- a/tasmota/xdrv_23_zigbee_5_converters.ino +++ b/tasmota/xdrv_23_zigbee_5_converters.ino @@ -448,6 +448,11 @@ const Z_AttributeConverter Z_PostProcess[] PROGMEM = { { Zmap8, Cx0102, 0x0017, Z_(Mode), Cm1, 0 }, { Zoctstr, Cx0102, 0x0018, Z_(IntermediateSetpointsLift),Cm1, 0 }, { Zoctstr, Cx0102, 0x0019, Z_(IntermediateSetpointsTilt),Cm1, 0 }, + // Tuya specific, from Zigbee2MQTT https://github.com/Koenkk/zigbee-herdsman/blob/4fed7310d1e1e9d81e5148cf5b4d8ec98d03c687/src/zcl/definition/cluster.ts#L1772 + { Zenum8, Cx0102, 0xF000, Z_(TuyaMovingState),Cm1, 0 }, + { Zenum8, Cx0102, 0xF001, Z_(TuyaCalibration),Cm1, 0 }, + { Zenum8, Cx0102, 0xF002, Z_(TuyaMotorReversal),Cm1, 0 }, + { Zuint16, Cx0102, 0xF003, Z_(TuyaCalibrationTime),Cm1, 0 }, // Thermostat { Zint16, Cx0201, 0x0000, Z_(LocalTemperature), Cm_100, Z_MAPPING(Z_Data_Thermo, temperature) }, @@ -751,11 +756,7 @@ public: if (Settings->flag3.tuya_serial_mqtt_publish) { MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR)); } else { -#ifdef MQTT_DATA_STRING - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data.c_str()); -#else - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data); -#endif + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), ResponseData()); } } diff --git a/tasmota/xdrv_23_zigbee_8_parsers.ino b/tasmota/xdrv_23_zigbee_8_parsers.ino index c0a313aef..2f3b9688f 100644 --- a/tasmota/xdrv_23_zigbee_8_parsers.ino +++ b/tasmota/xdrv_23_zigbee_8_parsers.ino @@ -638,7 +638,7 @@ int32_t Z_ReceiveActiveEp(int32_t res, const SBuffer &buf) { for (uint32_t i = 0; i < activeEpCount; i++) { uint8_t ep = activeEpList[i]; zigbee_devices.getShortAddr(nwkAddr).addEndpoint(ep); - if ((i < 4) && (ep < 0x10)) { + if ((i < USE_ZIGBEE_AUTOBIND_MAX_ENDPOINTS) && (ep < USE_ZIGBEE_AUTOBIND_MAX_CLUSTER)) { zigbee_devices.queueTimer(nwkAddr, 0 /* groupaddr */, 1500, ep /* fake cluster as ep */, ep, Z_CAT_EP_DESC, 0 /* value */, &Z_SendSimpleDescReq); } } @@ -1577,11 +1577,7 @@ void Z_AutoConfigReportingForCluster(uint16_t shortaddr, uint16_t groupaddr, uin ResponseAppend_P(PSTR("}}")); if (buf.len() > 0) { -#ifdef MQTT_DATA_STRING - AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "auto-bind `%s`"), TasmotaGlobal.mqtt_data.c_str()); -#else - AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "auto-bind `%s`"), TasmotaGlobal.mqtt_data); -#endif + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "auto-bind `%s`"), ResponseData()); ZCLMessage zcl(buf.len()); // message is 4 bytes zcl.shortaddr = shortaddr; zcl.cluster = cluster; diff --git a/tasmota/xdrv_23_zigbee_9_serial.ino b/tasmota/xdrv_23_zigbee_9_serial.ino index fe606ccae..649f377a4 100644 --- a/tasmota/xdrv_23_zigbee_9_serial.ino +++ b/tasmota/xdrv_23_zigbee_9_serial.ino @@ -152,11 +152,7 @@ void ZigbeeInputLoop(void) { if (Settings->flag3.tuya_serial_mqtt_publish) { MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR)); } else { -#ifdef MQTT_DATA_STRING - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data.c_str()); -#else - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data); -#endif + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "%s"), ResponseData()); } // now process the message ZigbeeProcessInput(znp_buffer); @@ -601,11 +597,7 @@ void ZigbeeProcessInputEZSP(SBuffer &buf) { log_level = LOG_LEVEL_DEBUG; break; } -#ifdef MQTT_DATA_STRING - AddLog(log_level, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data.c_str()); // TODO move to LOG_LEVEL_DEBUG when stable -#else - AddLog(log_level, PSTR(D_LOG_ZIGBEE "%s"), TasmotaGlobal.mqtt_data); // TODO move to LOG_LEVEL_DEBUG when stable -#endif + AddLog(log_level, PSTR(D_LOG_ZIGBEE "%s"), ResponseData()); // TODO move to LOG_LEVEL_DEBUG when stable } // Pass message to state machine diff --git a/tasmota/xdrv_23_zigbee_A_impl.ino b/tasmota/xdrv_23_zigbee_A_impl.ino index ebc71e9cc..bb241d5e4 100644 --- a/tasmota/xdrv_23_zigbee_A_impl.ino +++ b/tasmota/xdrv_23_zigbee_A_impl.ino @@ -1491,6 +1491,7 @@ void CmndZbEZSPListen(void) { } void ZigbeeGlowPermitJoinLight(void) { +#ifdef ESP8266 // quick fix since this causes a crash on ESP32 static const uint16_t cycle_time = 1000; // cycle up and down in 1000 ms static const uint16_t half_cycle_time = cycle_time / 2; // cycle up and down in 1000 ms @@ -1511,6 +1512,7 @@ void ZigbeeGlowPermitJoinLight(void) { if (led_pin >= 0) { analogWrite(led_pin, TasmotaGlobal.ledlnk_inverted ? 1023 - led_power : led_power); } +#endif } #endif // USE_ZIGBEE_EZSP diff --git a/tasmota/xdrv_24_buzzer.ino b/tasmota/xdrv_24_buzzer.ino index 3921589f3..377c2fee6 100644 --- a/tasmota/xdrv_24_buzzer.ino +++ b/tasmota/xdrv_24_buzzer.ino @@ -50,6 +50,9 @@ void BuzzerSet(uint32_t state) { if (Settings->flag4.buzzer_freq_mode) { // SetOption111 - Enable frequency output mode for buzzer static uint8_t last_state = 0; if (last_state != state) { +#ifdef ESP32 + analogAttach(Pin(GPIO_BUZZER), 7); +#endif // ESP32 // Set 50% duty cycle for frequency output // Set 0% (or 100% for inverted PWM) duty cycle which turns off frequency output either way analogWrite(Pin(GPIO_BUZZER), (state) ? Settings->pwm_range / 2 : 0); // set duty cycle for frequency output diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino index b886c58f4..9e57438a8 100644 --- a/tasmota/xdrv_27_shutter.ino +++ b/tasmota/xdrv_27_shutter.ino @@ -34,8 +34,8 @@ const uint16_t MOTOR_STOP_TIME = 500; // in mS const uint16_t RESOLUTION = 1000; // incresed to 1000 in 8.5 to ramp servos const uint8_t STEPS_PER_SECOND = 20; // FUNC_EVERY_50_MSECOND -const uint16_t pwm_max = 500; -const uint16_t pwm_min = 90; +const uint16_t pwm_servo_max = 500; +const uint16_t pwm_servo_min = 90; uint8_t calibrate_pos[6] = {0,30,50,70,90,100}; uint16_t messwerte[5] = {30,50,70,90,100}; @@ -88,7 +88,7 @@ struct SHUTTER { int8_t direction; // 1 == UP , 0 == stop; -1 == down int8_t lastdirection; // last direction (1 == UP , -1 == down) uint8_t switch_mode; // how to switch relays: SHT_SWITCH, SHT_PULSE - int16_t motordelay; // initial motorstarttime in 0.05sec. Also uses for ramp at steppers and servos + int8_t motordelay; // initial motorstarttime in 0.05sec. Also uses for ramp at steppers and servos, negative if motor stops late int16_t pwm_velocity; // frequency of PWN for stepper motors or PWM duty cycle change for PWM servo uint16_t pwm_value; // dutyload of PWM 0..1023 on ESP8266 uint16_t close_velocity_max; // maximum of PWM change during closeing. Defines velocity on opening. Steppers and Servos only @@ -128,9 +128,9 @@ void ShutterUpdateVelocity(uint8_t i) // do not allow accellerator to stop movement Shutter[i].pwm_velocity = tmax(velocity_change_per_step_max, Shutter[i].pwm_velocity+Shutter[i].accelerator); Shutter[i].pwm_velocity = tmin(Shutter[i].direction==1 ? ShutterGlobal.open_velocity_max : Shutter[i].close_velocity_max,Shutter[i].pwm_velocity); - // respect hard coded SDK limit of 100Hz on PWM frequency. + // respect hard coded SDK limit of PWM_MIN on PWM frequency. if (ShutterGlobal.position_mode == SHT_COUNTER) { - Shutter[i].pwm_velocity = tmax(100,Shutter[i].pwm_velocity); + Shutter[i].pwm_velocity = tmax(PWM_MIN,Shutter[i].pwm_velocity); } } @@ -316,8 +316,8 @@ void ShutterInit(void) case SHT_PWM_VALUE: ShutterGlobal.open_velocity_max = RESOLUTION; // Initiate pwm range with defaults if not already set. - Settings->shutter_pwmrange[0][i] = Settings->shutter_pwmrange[0][i] > 0 ? Settings->shutter_pwmrange[0][i] : pwm_min; - Settings->shutter_pwmrange[1][i] = Settings->shutter_pwmrange[1][i] > 0 ? Settings->shutter_pwmrange[1][i] : pwm_max; + Settings->shutter_pwmrange[0][i] = Settings->shutter_pwmrange[0][i] > 0 ? Settings->shutter_pwmrange[0][i] : pwm_servo_min; + Settings->shutter_pwmrange[1][i] = Settings->shutter_pwmrange[1][i] > 0 ? Settings->shutter_pwmrange[1][i] : pwm_servo_max; break; } Shutter[i].close_velocity_max = ShutterGlobal.open_velocity_max*Shutter[i].open_time / Shutter[i].close_time; @@ -420,7 +420,7 @@ void ShutterDecellerateForStop(uint8_t i) int16_t missing_steps; Shutter[i].accelerator = -(ShutterGlobal.open_velocity_max / (Shutter[i].motordelay>4 ? (Shutter[i].motordelay*11)/10 : 4) ); - while (Shutter[i].pwm_velocity > -2*Shutter[i].accelerator && Shutter[i].pwm_velocity != 100) { + while (Shutter[i].pwm_velocity > -2*Shutter[i].accelerator && Shutter[i].pwm_velocity != PWM_MIN) { delay(50); AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("SHT: Velocity %ld, Delta %d"), Shutter[i].pwm_velocity, Shutter[i].accelerator ); // Control will be done in RTC Ticker. @@ -431,7 +431,7 @@ void ShutterDecellerateForStop(uint8_t i) //prepare for stop PWM Shutter[i].accelerator = 0; Shutter[i].pwm_velocity = 0; - while (RtcSettings.pulse_counter[i] < (uint32_t)(Shutter[i].target_position-Shutter[i].start_position)*Shutter[i].direction*ShutterGlobal.open_velocity_max/RESOLUTION/STEPS_PER_SECOND) { + while (RtcSettings.pulse_counter[i] < (uint32_t)(Shutter[i].target_position-Shutter[i].start_position)*Shutter[i].direction*ShutterGlobal.open_velocity_max/RESOLUTION/STEPS_PER_SECOND && missing_steps > 0) { } analogWrite(Pin(GPIO_PWM1, i), 0); // removed with 8.3 because of reset caused by watchog Shutter[i].real_position = ShutterCalculatePosition(i); @@ -505,7 +505,7 @@ void ShutterUpdatePosition(void) Shutter[i].time, current_stop_way, current_pwm_velocity, velocity_max, Shutter[i].accelerator, min_runtime_ms, current_real_position, next_possible_stop_position, Shutter[i].target_position, velocity_change_per_step_max, Shutter[i].direction); - if ( Shutter[i].real_position * Shutter[i].direction >= Shutter[i].target_position * Shutter[i].direction || (ShutterGlobal.position_mode == SHT_COUNTER && Shutter[i].accelerator <0 && Shutter[i].pwm_velocity+Shutter[i].accelerator<100)) { + if ( Shutter[i].real_position * Shutter[i].direction >= Shutter[i].target_position * Shutter[i].direction || (ShutterGlobal.position_mode == SHT_COUNTER && Shutter[i].accelerator <0 && Shutter[i].pwm_velocity+Shutter[i].accelerator 0) && (XdrvMailbox.index <= TasmotaGlobal.shutters_present)) { if (XdrvMailbox.data_len > 0) { - Settings->shutter_motordelay[XdrvMailbox.index -1] = (uint16_t)(STEPS_PER_SECOND * CharToFloat(XdrvMailbox.data)); + Settings->shutter_motordelay[XdrvMailbox.index -1] = (uint8_t)(STEPS_PER_SECOND * CharToFloat(XdrvMailbox.data)); ShutterInit(); } char time_chr[10]; - dtostrfd((float)(Settings->shutter_motordelay[XdrvMailbox.index -1]) / STEPS_PER_SECOND, 2, time_chr); + dtostrfd((float)(Shutter[XdrvMailbox.index -1].motordelay) / STEPS_PER_SECOND, 2, time_chr); ResponseCmndIdxChar(time_chr); } } diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index 6bcc3a28b..83f030c71 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -18,6 +18,7 @@ */ #ifdef USE_PWM_DIMMER +#ifdef USE_LIGHT /*********************************************************************************************\ * Support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM dimmer switches. The brightness of @@ -886,4 +887,5 @@ bool Xdrv35(uint8_t function) return result; } +#endif // USE_LIGHT #endif // USE_PWM_DIMMER diff --git a/tasmota/xdrv_38_ping.ino b/tasmota/xdrv_38_ping.ino index 38e21485f..5a0ab9097 100644 --- a/tasmota/xdrv_38_ping.ino +++ b/tasmota/xdrv_38_ping.ino @@ -99,7 +99,7 @@ extern "C" { // ================================================================================ // Prepare a echo ICMP request // - void ICACHE_FLASH_ATTR t_ping_prepare_echo(struct icmp_echo_hdr *iecho, uint16_t len, Ping_t *ping) { + void t_ping_prepare_echo(struct icmp_echo_hdr *iecho, uint16_t len, Ping_t *ping) { size_t data_len = len - sizeof(struct icmp_echo_hdr); ICMPH_TYPE_SET(iecho, ICMP_ECHO); @@ -125,7 +125,7 @@ extern "C" { struct pbuf *p; uint16_t ping_size = sizeof(struct icmp_echo_hdr) + Ping_data_size; - ping->ping_time_sent = system_get_time(); + ping->ping_time_sent = millis(); p = pbuf_alloc(PBUF_IP, ping_size, PBUF_RAM); if (!p) { return; } if ((p->len == p->tot_len) && (p->next == nullptr)) { @@ -135,7 +135,7 @@ extern "C" { ping_target.addr = ping->ip; #endif // ESP8266 #ifdef ESP32 - ping_target.u_addr.ip4.addr = ping->ip; + ip_addr_set_ip4_u32(&ping_target, ping->ip); #endif // ESP32 iecho = (struct icmp_echo_hdr *) p->payload; @@ -191,8 +191,7 @@ extern "C" { if (iecho->seqno != ping->seqno){ // debounce already received packet /* do some ping result processing */ sys_untimeout(t_ping_timeout, ping); // remove time-out handler - uint32_t delay = system_relative_time(ping->ping_time_sent); - delay /= 1000; + uint32_t delay = millis() - ping->ping_time_sent; ping->sum_time += delay; if (delay < ping->min_time) { ping->min_time = delay; } diff --git a/tasmota/xdrv_39_thermostat.ino b/tasmota/xdrv_39_thermostat.ino index 2078fd829..e45ef93f9 100644 --- a/tasmota/xdrv_39_thermostat.ino +++ b/tasmota/xdrv_39_thermostat.ino @@ -1328,7 +1328,7 @@ void ThermostatDebug(uint8_t ctr_output) #endif // DEBUG_THERMOSTAT void ThermostatGetLocalSensor(uint8_t ctr_output) { - String buf = TasmotaGlobal.mqtt_data; // copy the string into a new buffer that will be modified + String buf = ResponseData(); // copy the string into a new buffer that will be modified JsonParser parser((char*)buf.c_str()); JsonParserObject root = parser.getRootObject(); if (root) { diff --git a/tasmota/xdrv_40_telegram.ino b/tasmota/xdrv_40_telegram.ino index 1069e82b2..f50d14a88 100644 --- a/tasmota/xdrv_40_telegram.ino +++ b/tasmota/xdrv_40_telegram.ino @@ -103,34 +103,54 @@ bool TelegramInit(void) { return init_done; } -String TelegramConnectToTelegram(String command) { -// AddLog(LOG_LEVEL_DEBUG, PSTR("TGM: Cmnd %s"), command.c_str()); +String TelegramConnectToTelegram(const String &command) { +// AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("TGM: Cmnd '%s'"), command.c_str()); if (!TelegramInit()) { return ""; } + String host = F("api.telegram.org"); String response = ""; uint32_t tls_connect_time = millis(); - if (telegramClient->connect("api.telegram.org", 443)) { + if (telegramClient->connect(host.c_str(), 443)) { // AddLog(LOG_LEVEL_DEBUG, PSTR("TGM: Connected in %d ms, max ThunkStack used %d"), millis() - tls_connect_time, telegramClient->getMaxThunkStackUse()); - telegramClient->println("GET /"+command); +// telegramClient->println("GET /"+command); // Fails after 20210621 + String request = "GET /" + command + " HTTP/1.1\r\nHost: " + host + "\r\nConnection: close\r\n\r\n"; + telegramClient->print(request); +/* + Response before 20210621: + {"ok":true,"result":[]} + Response after 20210621: + HTTP/1.1 200 OK + Server: nginx/1.18.0 + Date: Thu, 24 Jun 2021 15:26:20 GMT + Content-Type: application/json + Content-Length: 23 + Connection: close + Strict-Transport-Security: max-age=31536000; includeSubDomains; preload + Access-Control-Allow-Origin: * + Access-Control-Allow-Methods: GET, POST, OPTIONS + Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection + + {"ok":true,"result":[]} +*/ char c; - int ch_count=0; + bool available = false; uint32_t now = millis(); - bool avail = false; - while (millis() -now < 1500) { + while (!available && (millis() -now < 1500)) { while (telegramClient->available()) { - char c = telegramClient->read(); - if (ch_count < 700) { // Allow up to two messages - response = response + c; - ch_count++; + c = telegramClient->read(); + if (c == '{') { + available = true; // Skip headers (+-400 bytes) and start response at first JSON + } + if (available) { + response += c; + if (response.length() > 800) { // Allow up to two messages + break; + } } - avail = true; - } - if (avail) { - break; } } @@ -201,7 +221,7 @@ void TelegramGetUpdates(uint32_t offset) { // } // ]} - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("TGM: Response %s"), response.c_str()); + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("TGM: Response '%s'"), response.c_str()); JsonParser parser((char*)response.c_str()); JsonParserObject root = parser.getRootObject(); @@ -245,7 +265,7 @@ void TelegramGetUpdates(uint32_t offset) { } } -bool TelegramSendMessage(String chat_id, String text) { +bool TelegramSendMessage(const String &chat_id, const String &text) { AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("TGM: sendMessage")); if (!TelegramInit()) { return false; } diff --git a/tasmota/xdrv_41_tcp_bridge.ino b/tasmota/xdrv_41_tcp_bridge.ino index d250101d8..3d4d3bec5 100644 --- a/tasmota/xdrv_41_tcp_bridge.ino +++ b/tasmota/xdrv_41_tcp_bridge.ino @@ -35,6 +35,7 @@ WiFiServer *server_tcp = nullptr; WiFiClient client_tcp[TCP_BRIDGE_CONNECTIONS]; uint8_t client_next = 0; uint8_t *tcp_buf = nullptr; // data transfer buffer +IPAddress ip_filter; #include TasmotaSerial *TCPSerial = nullptr; @@ -60,12 +61,25 @@ void TCPLoop(void) // check for a new client connection if ((server_tcp) && (server_tcp->hasClient())) { + WiFiClient new_client = server_tcp->available(); + + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Got connection from %s"), new_client.remoteIP().toString().c_str()); + // Check for IP filtering if it's enabled. + if (ip_filter) { + if (ip_filter != new_client.remoteIP()) { + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Rejected due to filtering")); + new_client.stop(); + } else { + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Allowed through filter")); + } + } + // find an empty slot uint32_t i; for (i=0; iavailable(); + client = new_client; break; } } @@ -73,7 +87,7 @@ void TCPLoop(void) i = client_next++ % nitems(client_tcp); WiFiClient &client = client_tcp[i]; client.stop(); - client = server_tcp->available(); + client = new_client; } } @@ -139,12 +153,21 @@ void TCPInit(void) { \*********************************************************************************************/ // -// Command `ZbConfig` +// Command `TCPStart` +// Params: port, // void CmndTCPStart(void) { if (!TCPSerial) { return; } + int32_t tcp_port = XdrvMailbox.payload; + if (ArgC() == 2) { + char sub_string[XdrvMailbox.data_len]; + ip_filter.fromString(ArgV(sub_string, 2)); + } else { + // Disable whitelist if previously set + ip_filter = (uint32_t)0; + } if (server_tcp) { AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Stopping TCP server")); @@ -159,6 +182,9 @@ void CmndTCPStart(void) { } if (tcp_port > 0) { AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Starting TCP server on port %d"), tcp_port); + if (ip_filter) { + AddLog(LOG_LEVEL_INFO, PSTR(D_LOG_TCP "Filtering %s"), ip_filter.toString().c_str()); + } server_tcp = new WiFiServer(tcp_port); server_tcp->begin(); // start TCP server server_tcp->setNoDelay(true); diff --git a/tasmota/xdrv_42_i2s_audio.ino b/tasmota/xdrv_42_i2s_audio.ino index 1ab15e4ee..c7b0c460b 100644 --- a/tasmota/xdrv_42_i2s_audio.ino +++ b/tasmota/xdrv_42_i2s_audio.ino @@ -280,12 +280,12 @@ void I2S_Init(void) { mp3ram = nullptr; #ifdef ESP32 - if (psramFound()) { + if (UsePSRAM()) { mp3ram = heap_caps_malloc(preallocateCodecSize, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); } #ifdef USE_I2S_WEBRADIO - if (psramFound()) { + if (UsePSRAM()) { preallocateBuffer = heap_caps_malloc(preallocateBufferSize, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); preallocateCodec = heap_caps_malloc(preallocateCodecSize, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); } else { diff --git a/tasmota/xdrv_45_shelly_dimmer.ino b/tasmota/xdrv_45_shelly_dimmer.ino index ea9de57e3..d1f317bfc 100644 --- a/tasmota/xdrv_45_shelly_dimmer.ino +++ b/tasmota/xdrv_45_shelly_dimmer.ino @@ -85,22 +85,22 @@ typedef struct struct SHD { + SHD_DIMMER dimmer; uint8_t *buffer = nullptr; // Serial receive buffer int byte_counter = 0; // Index in serial receive buffer - uint16_t req_brightness = 0; - bool req_on = false; - SHD_DIMMER dimmer; +#ifdef USE_ENERGY_SENSOR + uint32_t last_power_check = 0; // Time when last power was checked +#endif // USE_ENERGY_SENSOR uint32_t start_time = 0; - uint8_t counter = 1; // Packet counter + uint16_t req_brightness = 0; uint16_t req_fade_rate = 0; uint16_t leading_edge = 2; // Leading edge = 2 Trailing edge = 1 uint16_t warmup_brightness = 100; // 10% uint16_t warmup_time = 20; // 20ms -#ifdef USE_ENERGY_SENSOR - uint32_t last_power_check = 0; // Time when last power was checked -#endif // USE_ENERGY_SENSOR - bool present = false; + uint8_t counter = 1; // Packet counter uint8_t hw_version = 0; // Dimmer 1 = 1 Dimmer 2 = 2 + bool present = false; + bool req_on = false; } Shd; /*********************************************************************************************\ @@ -534,28 +534,16 @@ bool ShdPacketProcess(void) Energy.active_power[0] = wattage; Energy.voltage[0] = voltage; Energy.current[0] = current; - Energy.apparent_power[0] = voltage * current; - if ((voltage * current) > wattage) - Energy.reactive_power[0] = sqrt((voltage * current) * (voltage * current) - wattage * wattage); - else - Energy.reactive_power[0] = 0; - if (wattage > (voltage * current)) - Energy.power_factor[0] = 1; - else if ((voltage * current) == 0) - Energy.power_factor[0] = 0; - else - Energy.power_factor[0] = wattage / (voltage * current); - - if (Shd.last_power_check > 10 && Energy.active_power[0] > 0) - { - float kWhused = (float)Energy.active_power[0] * (Rtc.utc_time - Shd.last_power_check) / 36; + if (Shd.last_power_check > 10 && Energy.active_power[0] > 0) { + uint32_t time_passed = abs(TimePassedSince(Shd.last_power_check)); // Time passed in milliseconds + uint32_t deca_microWh = (uint32_t)(Energy.active_power[0] * time_passed) / 36; #ifdef SHELLY_DIMMER_DEBUG - AddLog(LOG_LEVEL_DEBUG, PSTR(SHD_LOGNAME "Adding %i mWh to todays usage from %lu to %lu"), (int)(kWhused * 10), Shd.last_power_check, Rtc.utc_time); + AddLog(LOG_LEVEL_DEBUG, PSTR(SHD_LOGNAME "%4_f W is %u dmWh during %u ms"), &Energy.active_power[0], deca_microWh, time_passed); #endif // SHELLY_DIMMER_DEBUG - Energy.kWhtoday += kWhused; + Energy.kWhtoday_delta[0] += deca_microWh; EnergyUpdateToday(); } - Shd.last_power_check = Rtc.utc_time; + Shd.last_power_check = millis(); #endif // USE_ENERGY_SENSOR #ifdef SHELLY_DIMMER_DEBUG diff --git a/tasmota/xdrv_48_timeprop.ino b/tasmota/xdrv_48_timeprop.ino index 68b1696e0..934501079 100644 --- a/tasmota/xdrv_48_timeprop.ino +++ b/tasmota/xdrv_48_timeprop.ino @@ -93,11 +93,6 @@ enum TimepropCommands { CMND_TIMEPROP_SETPOWER }; const char kTimepropCommands[] PROGMEM = D_CMND_TIMEPROP_SETPOWER; -static Timeprop timeprops[TIMEPROP_NUM_OUTPUTS]; -static int relayNos[TIMEPROP_NUM_OUTPUTS] = {TIMEPROP_RELAYS}; -static long currentRelayStates = 0; // current actual relay states. Bit 0 first relay - - #ifndef TIMEPROP_NUM_OUTPUTS #define TIMEPROP_NUM_OUTPUTS 1 // how many outputs to control (with separate alogorithm for each) #endif @@ -120,6 +115,10 @@ static long currentRelayStates = 0; // current actual relay states. Bit 0 first #define TIMEPROP_RELAYS 1 // which relay to control 1:8 #endif +static Timeprop timeprops[TIMEPROP_NUM_OUTPUTS]; +static int relayNos[TIMEPROP_NUM_OUTPUTS] = {TIMEPROP_RELAYS}; +static long currentRelayStates = 0; // current actual relay states. Bit 0 first relay + struct { Timeprop timeprops[TIMEPROP_NUM_OUTPUTS]; int relay_nos[TIMEPROP_NUM_OUTPUTS] = {TIMEPROP_RELAYS}; diff --git a/tasmota/xdrv_49_pid.ino b/tasmota/xdrv_49_pid.ino index f54003bac..581016470 100644 --- a/tasmota/xdrv_49_pid.ino +++ b/tasmota/xdrv_49_pid.ino @@ -103,20 +103,21 @@ #define PID_USE_TIMPROP 1 // To use an internal relay for a time proportioned output to drive the // process, set this to indicate which timeprop output to use. For a device // with just one relay then this will be 1. - // It is then also necessary to define USE_TIMEPROP and set the output up as - // explained in xdrv_49_timeprop.ino - // To disable this feature leave this undefined (undefined, not defined to nothing). + // USE_TIMEPROP will be automativally included. You must set the output as + // explained in xdrv_48_timeprop.ino + // To disable, override to false in user_config_override.h. If USE_TIMEPROP is + // not explicitly defined, then it will not be added by default. #define PID_USE_LOCAL_SENSOR // If defined then the local sensor will be used for pv. Leave undefined if // this is not required. The rate that the sensor is read is defined by TELE_PERIOD // If not using the sensor then you can supply process values via MQTT using // cmnd PidPv - #define PID_SHUTTER 1 // if using the PID to control a 3-way valve, create Tasmota Shutter and define the + #define PID_SHUTTER 1 // if using the PID to control a 3-way valve, create Tasmota Shutter and define the // number of the shutter here. Otherwise leave this commented out - #define PID_REPORT_MORE_SETTINGS // If defined, the SENSOR output will provide more extensive json - // output in the PID section + #define PID_REPORT_MORE_SETTINGS true // If defined to true, the SENSOR output will provide more extensive json + // output in the PID section. Override to false to reduce json output * Help with using the PID algorithm and with loop tuning can be found at * http://blog.clanlaw.org.uk/2018/01/09/PID-tuning-with-node-red-contrib-pid.html @@ -155,10 +156,14 @@ #define PID_UPDATE_SECS 0 // [PidUpdateSecs] How often to run the pid algorithm #endif -#define PID_USE_TIMPROP 1 // To disable this feature leave this undefined +#ifndef PID_USE_TIMPROP +#define PID_USE_TIMPROP 1 // To disable this feature define as false in user_config_override +#endif //#define PID_USE_LOCAL_SENSOR // [PidPv] If defined then the local sensor will be used for pv. //#define PID_SHUTTER 1 // Number of the shutter here. Otherwise leave this commented out -#define PID_REPORT_MORE_SETTINGS // If defined, the SENSOR output will provide more extensive json +#ifndef PID_REPORT_MORE_SETTINGS +#define PID_REPORT_MORE_SETTINGS true // Override to false if less details are required in SENSOR JSON +#endif #include "PID.h" @@ -342,7 +347,7 @@ void PIDShowValues(void) { dtostrfd(d_buf, 2, str_buf); ResponseAppend_P(PSTR("\"PidSp\":%s,"), str_buf); -#ifdef PID_REPORT_MORE_SETTINGS +#if PID_REPORT_MORE_SETTINGS // #define D_CMND_PID_SETPROPBAND "Pb" d_buf = Pid.pid.getPb(); dtostrfd(d_buf, 2, str_buf); @@ -403,7 +408,7 @@ void PIDRun(void) { ShutterSetPosition(PID_SHUTTER, pos); #endif //PID_SHUTTER -#if defined PID_USE_TIMPROP +#if defined(PID_USE_TIMPROP) && (PID_USE_TIMPROP > 0) // send power to appropriate timeprop output TimepropSetPower( PID_USE_TIMPROP-1, power ); #endif // PID_USE_TIMPROP diff --git a/tasmota/xdrv_50_filesystem.ino b/tasmota/xdrv_50_filesystem.ino index bb3eb2c1b..7d9f6b5b5 100644 --- a/tasmota/xdrv_50_filesystem.ino +++ b/tasmota/xdrv_50_filesystem.ino @@ -109,8 +109,8 @@ void UfsInitOnce(void) { #ifdef ESP32 // try lfs first - ffsp = &LITTLEFS; - if (!LITTLEFS.begin(true)) { + ffsp = &LittleFS; + if (!LittleFS.begin(true)) { // ffat is second ffsp = &FFat; if (!FFat.begin(true)) { @@ -223,9 +223,9 @@ uint32_t UfsInfo(uint32_t sel, uint32_t type) { #endif // ESP8266 #ifdef ESP32 if (sel == 0) { - result = LITTLEFS.totalBytes(); + result = LittleFS.totalBytes(); } else { - result = LITTLEFS.totalBytes() - LITTLEFS.usedBytes(); + result = LittleFS.totalBytes() - LittleFS.usedBytes(); } #endif // ESP32 break; @@ -259,7 +259,6 @@ uint8_t UfsReject(char *name) { } while (*name=='/') { name++; } - if (*name=='_') { return 1; } if (*name=='.') { return 1; } if (!strncasecmp(name, "SPOTLI~1", REJCMPL)) { return 1; } @@ -564,20 +563,25 @@ const char UFS_FORM_FILE_UPGb[] PROGMEM = "
    " "
    " #endif + "" D_SHOW_HIDDEN_FILES "" "" "
    " ""; +const char UFS_FORM_SDC_DIR_NORMAL[] PROGMEM = + ""; +const char UFS_FORM_SDC_DIR_HIDDABLE[] PROGMEM = + " class='hf'"; const char UFS_FORM_SDC_DIRd[] PROGMEM = "
    %s
    "; const char UFS_FORM_SDC_DIRb[] PROGMEM = - "
    %s %s %8d %s %s
    "; + "%s %s %8d %s %s"; const char UFS_FORM_SDC_HREF[] PROGMEM = "ufsd?download=%s/%s"; #ifdef GUI_TRASH_FILE const char UFS_FORM_SDC_HREFdel[] PROGMEM = //"🗑"; // 🗑️ - "🔥"; // 🔥 + "🔥"; // 🔥 #endif // GUI_TRASH_FILE #ifdef GUI_EDIT_FILE @@ -585,7 +589,7 @@ const char UFS_FORM_SDC_HREFdel[] PROGMEM = #define FILE_BUFFER_SIZE 1024 const char UFS_FORM_SDC_HREFedit[] PROGMEM = - "📝"; // 📝 + "📝"; // 📝 const char HTTP_EDITOR_FORM_START[] PROGMEM = "
     " D_EDIT_FILE " " @@ -711,41 +715,40 @@ void UfsListDir(char *path, uint8_t depth) { if (!*(pp + 1)) { pp++; } char *cp = name; // osx formatted disks contain a lot of stuff we dont want - if (!UfsReject((char*)ep)) { + bool hiddable = UfsReject((char*)ep); - for (uint8_t cnt = 0; cnt 1) { + strcat(path, "/"); } - - sprintf(cp, format, ep); - if (entry.isDirectory()) { - ext_snprintf_P(npath, sizeof(npath), UFS_FORM_SDC_HREF, pp, ep); - WSContentSend_P(UFS_FORM_SDC_DIRd, npath, ep, name); - uint8_t plen = strlen(path); - if (plen > 1) { - strcat(path, "/"); - } - strcat(path, ep); - UfsListDir(path, depth + 4); - path[plen] = 0; - } else { + strcat(path, ep); + UfsListDir(path, depth + 4); + path[plen] = 0; + } else { #ifdef GUI_TRASH_FILE - char delpath[128]; - ext_snprintf_P(delpath, sizeof(delpath), UFS_FORM_SDC_HREFdel, pp, ep); + char delpath[128]; + ext_snprintf_P(delpath, sizeof(delpath), UFS_FORM_SDC_HREFdel, pp, ep); #else - char delpath[2]; - delpath[0]=0; + char delpath[2]; + delpath[0]=0; #endif // GUI_TRASH_FILE #ifdef GUI_EDIT_FILE - char editpath[128]; - ext_snprintf_P(editpath, sizeof(editpath), UFS_FORM_SDC_HREFedit, pp, ep); + char editpath[128]; + ext_snprintf_P(editpath, sizeof(editpath), UFS_FORM_SDC_HREFedit, pp, ep); #else - char editpath[2]; - editpath[0]=0; + char editpath[2]; + editpath[0]=0; #endif // GUI_TRASH_FILE - ext_snprintf_P(npath, sizeof(npath), UFS_FORM_SDC_HREF, pp, ep); - WSContentSend_P(UFS_FORM_SDC_DIRb, npath, ep, name, tstr.c_str(), entry.size(), delpath, editpath); - } + ext_snprintf_P(npath, sizeof(npath), UFS_FORM_SDC_HREF, pp, ep); + WSContentSend_P(UFS_FORM_SDC_DIRb, hiddable ? UFS_FORM_SDC_DIR_HIDDABLE : UFS_FORM_SDC_DIR_NORMAL, npath, ep, name, tstr.c_str(), entry.size(), delpath, editpath); } entry.close(); } diff --git a/tasmota/xdrv_52_2_berry_native.ino b/tasmota/xdrv_52_2_berry_native.ino index dec5b1414..b1c37d9e9 100644 --- a/tasmota/xdrv_52_2_berry_native.ino +++ b/tasmota/xdrv_52_2_berry_native.ino @@ -65,6 +65,20 @@ extern "C" { if (v > 0xFF) { return 0xFF; } return v; } + + // variant of be_raise with string format + [[ noreturn ]] void be_raisef(bvm *vm, const char *except, const char *msg, ...) { + // To save stack space support logging for max text length of 128 characters + char log_data[128]; + + va_list arg; + va_start(arg, msg); + uint32_t len = ext_vsnprintf_P(log_data, sizeof(log_data)-3, msg, arg); + va_end(arg); + if (len+3 > sizeof(log_data)) { strcat(log_data, "..."); } // Actual data is more + be_raise(vm, except, log_data); + } + static void map_insert_int(bvm *vm, const char *key, int value) { be_pushstring(vm, key); @@ -176,6 +190,7 @@ extern "C" { // the first 4 bytes are a pointer to a string // returns 0..total_elements-1 or -1 if not found extern "C" { + int32_t bin_search(const char * needle, const void * table, size_t elt_size, size_t total_elements); int32_t bin_search(const char * needle, const void * table, size_t elt_size, size_t total_elements) { int32_t low = 0; int32_t high = total_elements - 1; @@ -208,6 +223,7 @@ extern "C" { extern "C" { typedef int32_t (*berry_callback_t)(int32_t v0, int32_t v1, int32_t v2, int32_t v3); + extern void BerryDumpErrorAndClear(bvm *vm, bool berry_console); int32_t call_berry_cb(int32_t num, int32_t v0, int32_t v1, int32_t v2, int32_t v3) { // call berry cb dispatcher @@ -226,7 +242,11 @@ extern "C" { be_pushint(berry.vm, v2); be_pushint(berry.vm, v3); - be_pcall(berry.vm, 6); // 5 arguments + ret = be_pcall(berry.vm, 6); // 5 arguments + if (ret != 0) { + BerryDumpErrorAndClear(berry.vm, false); // log in Tasmota console only + return 0; + } be_pop(berry.vm, 6); if (be_isint(berry.vm, -1) || be_isnil(berry.vm, -1)) { // sanity check @@ -304,7 +324,7 @@ extern "C" { * - be_int -> int32_t * - be_bool -> int32_t with value 0/1 * - be_string -> const char * - * - be_instance -> gets the member ".p" and pushes as void* + * - be_instance -> gets the member "_p" and pushes as void* * * This works because C silently ignores any unwanted arguments. * There is a strong requirements that all ints and pointers are 32 bits. @@ -313,11 +333,10 @@ extern "C" { * Optional argument: * - return_type: the C function return value is int32_t and is converted to the * relevant Berry object depending on this char: - * '0' (default): nil, no value + * '' (default): nil, no value * 'i' be_int - * 'b' be_boot + * 'b' be_bool * 's' be_str - * 'o' instance of `lv_obj` (needs to be improved) * * - arg_type: optionally check the types of input arguments, or throw an error * string of argument types, '+' marks optional arguments @@ -325,123 +344,46 @@ extern "C" { * 'i' be_int * 'b' be_bool * 's' be_string + * 'c' C callback * 'lv_obj' be_instance of type or subtype - * '0'..'5' callback + * '^lv_event_cb' callback of a named class - will call `_lvgl.gen_cb(arg_type, closure, self, lv native pointer)` and expects a callback address in return * * Ex: "oii+s" takes 3 mandatory arguments (obj_instance, int, int) and an optional fourth one [,string] \*********************************************************************************************/ // general form of lv_obj_t* function, up to 4 parameters // We can only send 32 bits arguments (no 64 bits nor double) and we expect pointers to be 32 bits -#define LVBE_MAX_CALLBACK 6 // max 6 callbackss -#define LVBE_LVGL_CB "_lvgl_cb" -#define LVBE_LVGL_CB_OBJ "_lvgl_cb_obj" // remember which object it was linked to -#define LVBE_LVGL_CB_DISPATCH "_lvgl_cb_dispatch" - -// General form of callback -typedef int32_t (*lvbe_callback)(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4); -int32_t lvbe_callback_x(uint32_t n, struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4); - -// We define 6 callback vectors, this may need to be raised -int32_t lvbe_callback_0(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(0, obj, v1, v2, v3, v4); -} -int32_t lvbe_callback_1(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(1, obj, v1, v2, v3, v4); -} -int32_t lvbe_callback_2(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(2, obj, v1, v2, v3, v4); -} -int32_t lvbe_callback_3(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(3, obj, v1, v2, v3, v4); -} -int32_t lvbe_callback_4(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(4, obj, v1, v2, v3, v4); -} -int32_t lvbe_callback_5(struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - return lvbe_callback_x(5, obj, v1, v2, v3, v4); -} - -const lvbe_callback lvbe_callbacks[LVBE_MAX_CALLBACK] = { - lvbe_callback_0, - lvbe_callback_1, - lvbe_callback_2, - lvbe_callback_3, - lvbe_callback_4, - lvbe_callback_5, -}; - -int32_t lvbe_callback_x(uint32_t n, struct _lv_obj_t * obj, int32_t v1, int32_t v2, int32_t v3, int32_t v4) { - // berry_log_P(">>>: Callback called n=%i obj=0x%08X v1=%i v2=%i", n, obj, v1, v2); - be_getglobal(berry.vm, LVBE_LVGL_CB_DISPATCH); // stack: List - be_pushint(berry.vm, n); - be_pushint(berry.vm, (int32_t) obj); - be_pushint(berry.vm, v1); - be_pushint(berry.vm, v2); - be_pushint(berry.vm, v3); - be_pushint(berry.vm, v4); - be_pcall(berry.vm, 6); - int32_t ret = be_toint(berry.vm, -7); - be_pop(berry.vm, 7); - // berry_log_P(">>>: Callback called out %d ret=%i", n, ret); - return ret; -} +#define LVBE_LVGL_GLOB "_lvgl" +#define LVBE_LVGL_CB_GEN "gen_cb" // read a single value at stack position idx, convert to int. -// if object instance, get `.p` member and convert it recursively +// if object instance, get `_p` member and convert it recursively int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = nullptr, int32_t lv_obj_cb = 0) { int32_t ret = 0; char provided_type = 0; idx = be_absindex(vm, idx); // make sure we have an absolute index + + // berry_log_C(">> 0 idx=%i arg_type=%s", idx, arg_type ? arg_type : "NULL"); if (arg_type == nullptr) { arg_type = "."; } // if no type provided, replace with wildchar size_t arg_type_len = strlen(arg_type); // handle callbacks first, since a wrong parameter will always yield to a crash - if (arg_type_len == 1 && arg_type[0] >= '0' && arg_type[0] < '0' + LVBE_MAX_CALLBACK) { + if (arg_type_len > 1 && arg_type[0] == '^') { // it is a callback + arg_type++; // skip first character if (be_isclosure(vm, idx)) { - // we're good - // berry_log_P(">> closure found idx %d", idx); - uint32_t cb_index = arg_type[0] - '0'; - lvbe_callback func = lvbe_callbacks[cb_index]; - // register the object - - // record the closure - be_getglobal(vm, LVBE_LVGL_CB); - be_getmember(vm, -1, ".p"); - be_pushint(vm, cb_index); - be_getindex(vm, -2); - // be_dumpstack(vm); - // stack: _lvgl_cb, list.p, index, map - be_moveto(vm, -1, -4); - be_pop(vm, 3); - // be_dumpstack(vm); - // stack: map - be_getmember(vm, -1, ".p"); - be_pushint(vm, lv_obj_cb); // key - lv_obj - be_pushvalue(vm, idx); // value - closure - // stack map, map.p, key, value - be_setindex(vm, -3); - // be_dumpstack(vm); - // stack map, map.p, key, value - be_pop(vm, 4); // clean - // be_dumpstack(vm); - - // record the object, it is always index #1 - be_getglobal(vm, LVBE_LVGL_CB_OBJ); - be_getmember(vm, -1, ".p"); - be_pushint(vm, cb_index); - be_getindex(vm, -2); - be_moveto(vm, -1, -4); - be_pop(vm, 3); - // stack: map - be_getmember(vm, -1, ".p"); - be_pushint(vm, lv_obj_cb); // key - lv_obj as int - be_pushvalue(vm, 1); // value - lv_obj - // stack map, map.p, key, value - be_setindex(vm, -3); - be_pop(vm, 4); // clean - + be_getglobal(vm, LVBE_LVGL_GLOB); + be_getmethod(vm, -1, LVBE_LVGL_CB_GEN); + be_pushvalue(vm, -2); + be_remove(vm, -3); // stack contains method + instance + be_pushstring(vm, arg_type); + be_pushvalue(vm, idx); + be_pushvalue(vm, 1); + be_pushint(vm, lv_obj_cb); + be_call(vm, 5); + const void * func = be_tocomptr(vm, -6); + be_pop(vm, 6); + // berry_log_P("func=%p", func); return (int32_t) func; } else { be_raise(vm, kTypeError, "Closure expected for callback type"); @@ -452,7 +394,7 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null if (be_isint(vm, idx)) { ret = be_toint(vm, idx); provided_type = 'i'; } else if (be_isbool(vm, idx)) { ret = be_tobool(vm, idx); provided_type = 'b'; } else if (be_isstring(vm, idx)) { ret = (int32_t) be_tostring(vm, idx); provided_type = 's'; } - else if (be_iscomptr(vm, idx)) { ret = (int32_t) be_tocomptr(vm, idx); provided_type = 'i'; } + else if (be_iscomptr(vm, idx)) { ret = (int32_t) be_tocomptr(vm, idx); provided_type = 'c'; } // check if simple type was a match if (provided_type) { @@ -469,34 +411,45 @@ int32_t be_convert_single_elt(bvm *vm, int32_t idx, const char * arg_type = null // non-simple type if (be_isinstance(vm, idx)) { - be_getmember(vm, idx, ".p"); - int32_t ret = be_convert_single_elt(vm, -1, nullptr); // recurse - be_pop(vm, 1); - - if (arg_type_len > 1) { - // Check type - be_classof(vm, idx); - bool class_found = be_getglobal(vm, arg_type); - // Stack: class_of_idx, class_of_target (or nil) - if (class_found) { - if (!be_isderived(vm, -2)) { - berry_log_P("Unexpected class type '%s', expected '%s'", be_classname(vm, idx), arg_type); - } - } else { - berry_log_P("Unable to find class '%s' (%d)", arg_type, arg_type_len); - } + // check if the instance is a subclass of `bytes()`` + be_getbuiltin(vm, "bytes"); // add "list" class + if (be_isderived(vm, idx)) { + be_pop(vm, 1); + be_getmember(vm, idx, "_buffer"); + be_pushvalue(vm, idx); + be_call(vm, 1); + int32_t ret = (int32_t) be_tocomptr(vm, -2); be_pop(vm, 2); - } else if (arg_type[0] != '.') { - berry_log_P("Unexpected instance type '%s', expected '%s'", be_classname(vm, idx), arg_type); - } + return ret; + } else { + be_pop(vm, 1); + be_getmember(vm, idx, "_p"); + int32_t ret = be_convert_single_elt(vm, -1, nullptr); // recurse + be_pop(vm, 1); - return ret; + if (arg_type_len > 1) { + // Check type + be_classof(vm, idx); + bool class_found = be_getglobal(vm, arg_type); + // Stack: class_of_idx, class_of_target (or nil) + if (class_found) { + if (!be_isderived(vm, -2)) { + berry_log_P("Unexpected class type '%s', expected '%s'", be_classname(vm, idx), arg_type); + } + } else { + berry_log_P("Unable to find class '%s' (%d)", arg_type, arg_type_len); + } + be_pop(vm, 2); + } else if (arg_type[0] != '.') { + berry_log_P("Unexpected instance type '%s', expected '%s'", be_classname(vm, idx), arg_type); + } + + return ret; + } } else { be_raise(vm, kTypeError, nullptr); } - // - return ret; } diff --git a/tasmota/xdrv_52_3_berry_audio.ino b/tasmota/xdrv_52_3_berry_audio.ino new file mode 100644 index 000000000..06957bced --- /dev/null +++ b/tasmota/xdrv_52_3_berry_audio.ino @@ -0,0 +1,265 @@ +/* + xdrv_52_3_berry_audio.ino - Berry scripting language, support for I2S audio + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifdef USE_BERRY + +#ifdef USE_I2S_AUDIO_BERRY + +// #include "AudioFileSourceSPIFFS.h" +// #include "AudioFileSourceID3.h" +#include "AudioOutputI2S.h" +#include "AudioGeneratorWAV.h" +#include "AudioGeneratorMP3.h" +#include "AudioFileSourceFS.h" + +#include + + +/*********************************************************************************************\ + * AudioOutput class + * +\*********************************************************************************************/ +extern "C" { + + // + // AudioOutputI2S(bclkPin: int, wclkPin: int, doutPin: int[, port:int, dmabuf:int, mode: int]) + // + int i2s_output_i2s_init(bvm *vm) { + int argc = be_top(vm); + if (argc > 3) { + int bclkPin = be_toint(vm, 2); + int wclkPin = be_toint(vm, 3); + int doutPin = be_toint(vm, 4); + int port = 0; + if (argc > 4) { + port = be_toint(vm, 5); + } + int dma_buf_count = 8; // number of dma buffers of 64 bytes + if (argc > 5) { + dma_buf_count = be_toint(vm, 6); + } + int mode = 0; // EXTERNAL_I2S + if (argc > 6) { + mode = be_toint(vm, 7); + } + // AudioOutputI2S(int port=0, int output_mode=EXTERNAL_I2S, int dma_buf_count = 8, int use_apll=APLL_DISABLE); + AudioOutputI2S * audio = new AudioOutputI2S(port, mode, dma_buf_count); + if (0 == mode) { + audio->SetPinout(bclkPin, wclkPin, doutPin); // return value has no useful information for us + } + be_pushcomptr(vm, (void*) audio); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + + be_raise(vm, kTypeError, nullptr); + } + + int i2s_output_i2s_deinit(bvm *vm) { + int argc = be_top(vm); + be_getmember(vm, 1, ".p"); + AudioOutputI2S * audio = (AudioOutputI2S *) be_tocomptr(vm, -1); + if (audio) { + delete audio; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + + be_return_nil(vm); + } + + int i2s_output_i2s_stop(bvm *vm) { + int argc = be_top(vm); + be_getmember(vm, 1, ".p"); + AudioOutputI2S * audio = (AudioOutputI2S *) be_tocomptr(vm, -1); + if (audio) { + audio->stop(); + } + be_return_nil(vm); + } + + // + // AudioGeneratorWAV() + // + int i2s_generator_wav_init(bvm *vm) { + AudioGeneratorWAV * wav = new AudioGeneratorWAV(); + be_pushcomptr(vm, (void*) wav); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + + AudioGeneratorWAV * i2s_generator_wav_get(bvm *vm) { + be_getmember(vm, 1, ".p"); + AudioGeneratorWAV * wav = (AudioGeneratorWAV *) be_tocomptr(vm, -1); + return wav; + } + + int i2s_generator_wav_deinit(bvm *vm) { + int argc = be_top(vm); + AudioGeneratorWAV * wav = i2s_generator_wav_get(vm); + if (wav) { + delete wav; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + + be_return_nil(vm); + } + + int i2s_generator_wav_begin(bvm *vm) { + int argc = be_top(vm); + if (argc > 2) { + AudioGeneratorWAV * wav = i2s_generator_wav_get(vm); + be_getmember(vm, 2, ".p"); + AudioFileSource * source = (AudioFileSource*) be_tocomptr(vm, -1); + be_getmember(vm, 3, ".p"); + AudioOutput * output = (AudioOutput*) be_tocomptr(vm, -1); + be_pop(vm, 2); + + bool ret = wav->begin(source, output); + be_pushbool(vm, ret); + be_return(vm); + } + be_return_nil(vm); + } + + int i2s_generator_wav_loop(bvm *vm) { + AudioGeneratorWAV * wav = i2s_generator_wav_get(vm); + bool ret = wav->loop(); + be_pushbool(vm, ret); + be_return(vm); + } + + int i2s_generator_wav_stop(bvm *vm) { + AudioGeneratorWAV * wav = i2s_generator_wav_get(vm); + bool ret = wav->stop(); + be_pushbool(vm, ret); + be_return(vm); + } + + int i2s_generator_wav_isrunning(bvm *vm) { + AudioGeneratorWAV * wav = i2s_generator_wav_get(vm); + bool ret = wav->isRunning(); + be_pushbool(vm, ret); + be_return(vm); + } + + // + // AudioGeneratorMP3() + // + int i2s_generator_mp3_init(bvm *vm) { + AudioGeneratorMP3 * mp3 = new AudioGeneratorMP3(); + be_pushcomptr(vm, (void*) mp3); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + + AudioGeneratorMP3 * i2s_generator_mp3_get(bvm *vm) { + be_getmember(vm, 1, ".p"); + AudioGeneratorMP3 * mp3 = (AudioGeneratorMP3 *) be_tocomptr(vm, -1); + return mp3; + } + + int i2s_generator_mp3_deinit(bvm *vm) { + int argc = be_top(vm); + AudioGeneratorMP3 * mp3 = i2s_generator_mp3_get(vm); + if (mp3) { + delete mp3; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + + be_return_nil(vm); + } + + int i2s_generator_mp3_begin(bvm *vm) { + int argc = be_top(vm); + if (argc > 2) { + AudioGeneratorMP3 * mp3 = i2s_generator_mp3_get(vm); + be_getmember(vm, 2, ".p"); + AudioFileSource * source = (AudioFileSource*) be_tocomptr(vm, -1); + be_getmember(vm, 3, ".p"); + AudioOutput * output = (AudioOutput*) be_tocomptr(vm, -1); + be_pop(vm, 2); + + bool ret = mp3->begin(source, output); + be_pushbool(vm, ret); + be_return(vm); + } + be_return_nil(vm); + } + + int i2s_generator_mp3_loop(bvm *vm) { + AudioGeneratorMP3 * mp3 = i2s_generator_mp3_get(vm); + bool ret = mp3->loop(); + be_pushbool(vm, ret); + be_return(vm); + } + + int i2s_generator_mp3_stop(bvm *vm) { + AudioGeneratorMP3 * mp3 = i2s_generator_mp3_get(vm); + bool ret = mp3->stop(); + be_pushbool(vm, ret); + be_return(vm); + } + + int i2s_generator_mp3_isrunning(bvm *vm) { + AudioGeneratorMP3 * mp3 = i2s_generator_mp3_get(vm); + bool ret = mp3->isRunning(); + be_pushbool(vm, ret); + be_return(vm); + } + + // File Source FS + // +#ifdef USE_UFILESYS + int i2s_file_source_fs_init(bvm *vm) { + int argc = be_top(vm); + if (argc > 1 && be_isstring(vm, 2)) { + const char * file_name = be_tostring(vm, 2); + AudioFileSourceFS * file_source = new AudioFileSourceFS(*ufsp, file_name); + be_pushcomptr(vm, (void*) file_source); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + int i2s_file_source_fs_deinit(bvm *vm) { + int argc = be_top(vm); + be_getmember(vm, 1, ".p"); + AudioFileSourceFS * file_source = (AudioFileSourceFS *) be_tocomptr(vm, -1); + if (file_source) { + delete file_source; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + + be_return_nil(vm); + } +#endif // USE_UFILESYS +} + +#endif // USE_I2S_AUDIO_BERRY +#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_crypto.ino b/tasmota/xdrv_52_3_berry_crypto.ino new file mode 100644 index 000000000..e80f585ce --- /dev/null +++ b/tasmota/xdrv_52_3_berry_crypto.ino @@ -0,0 +1,219 @@ +/* + xdrv_52_3_berry_md5.ino - Berry scripting language, Md5 class + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifdef USE_BERRY +#ifdef USE_ALEXA_AVS + +#include +#include "be_mem.h" + +/*********************************************************************************************\ + * AES class + * +\*********************************************************************************************/ +extern "C" { + + int free_br_obj(bvm* vm) { + int argc = be_top(vm); + if (argc > 0) { + void * obj = be_tocomptr(vm, 1); + if (obj != NULL) { be_os_free(obj); } + } + be_return_nil(vm); + } + + // `AES_GCM.init(secret_key:bytes(32), iv:bytes(12)) -> instance` + int32_t m_aes_gcm_init(struct bvm *vm); + int32_t m_aes_gcm_init(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 3 && be_isinstance(vm, 2) && be_isinstance(vm, 3)) { + do { + be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ + if (!be_isderived(vm, 2)) break; + size_t length = 0; + const void * bytes = be_tobytes(vm, 2, &length); + if (!bytes) break; + if (length != 32) { + be_raise(vm, "value_error", "Key size must be 32 bytes"); + } + + be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ + if (!be_isderived(vm, 3)) break; + size_t iv_length = 0; + const void * iv_bytes = be_tobytes(vm, 3, &iv_length); + if (!iv_bytes) break; + + // Initialize an AES CTR structure with the secret key + br_aes_small_ctr_keys * ctr_ctx = (br_aes_small_ctr_keys *) be_os_malloc(sizeof(br_aes_small_ctr_keys)); + if (!ctr_ctx) { be_throw(vm, BE_MALLOC_FAIL); } + br_aes_small_ctr_init(ctr_ctx, bytes, length); + be_newcomobj(vm, ctr_ctx, &free_br_obj); + be_setmember(vm, 1, ".p1"); + + // Initialize an AES GCM structure based on this CTR engine + br_gcm_context * gcm_ctx = (br_gcm_context *) be_os_malloc(sizeof(br_gcm_context)); + if (!gcm_ctx) { be_throw(vm, BE_MALLOC_FAIL); } + br_gcm_init(gcm_ctx, &ctr_ctx->vtable, &br_ghash_ctmul32); + be_newcomobj(vm, gcm_ctx, &free_br_obj); + be_setmember(vm, 1, ".p2"); + + // Reset GCM context with provided IV + br_gcm_reset(gcm_ctx, iv_bytes, iv_length); + + // We don't have any additional authenticated data so we flip instantly + br_gcm_flip(gcm_ctx); + + be_return_nil(vm); + // success + } while (0); + } + be_raise(vm, kTypeError, nullptr); + } + + int32_t m_aes_gcm_encryt(bvm *vm); + int32_t m_aes_gcm_decryt(bvm *vm); + int32_t m_aes_gcm_encrypt_or_decryt(bvm *vm, int encrypt) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 2 && be_isinstance(vm, 2)) { + do { + be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ + if (!be_isderived(vm, 2)) break; + + // get GCM context + be_getmember(vm, 1, ".p2"); + br_gcm_context * gcm_ctx = (br_gcm_context *) be_tocomptr(vm, -1); + be_pop(vm, 1); + + // copy the input buffer + be_getmember(vm, 2, "copy"); // stack: bytes.copy() + be_pushvalue(vm, 2); // stack: bytes.copy(), bytes instance + be_call(vm, 1); // call copy with self parameter + be_pop(vm, 1); // stack: clone of input bytes + + size_t length = 0; + // we are changing bytes in place + void * bytes = (void*) be_tobytes(vm, -1, &length); + if (!bytes) break; + + br_gcm_run(gcm_ctx, encrypt, bytes, length); + + be_return(vm); + // success + } while (0); + } + be_raise(vm, kTypeError, nullptr); + } + int32_t m_aes_gcm_encryt(bvm *vm) { + return m_aes_gcm_encrypt_or_decryt(vm, 1); + } + int32_t m_aes_gcm_decryt(bvm *vm) { + return m_aes_gcm_encrypt_or_decryt(vm, 0); + } + + int32_t m_aes_gcm_tag(bvm *vm) { + do { + be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ + + // get GCM context + be_getmember(vm, 1, ".p2"); + br_gcm_context * gcm_ctx = (br_gcm_context *) be_tocomptr(vm, -1); + be_pop(vm, 1); + + // create a bytes buffer of 16 bytes + uint8_t tag[16] = {0}; + br_gcm_get_tag(gcm_ctx, tag); + be_pushbytes(vm, tag, sizeof(tag)); + + be_return(vm); + // success + } while (0); + be_raise(vm, kTypeError, nullptr); + } +} + +/*********************************************************************************************\ + * EC C25519 class + * +\*********************************************************************************************/ +#define BR_EC25519_IMPL br_ec_c25519_m15 // BearSSL implementation for Curve 25519 + +extern "C" { + // crypto.EC_C25519().public_key(private_key:bytes(32)) -> bytes(32) + // Computes the public key from a completely random private key of 32 bytes + int32_t m_ec_c25519_pubkey(bvm *vm); + int32_t m_ec_c25519_pubkey(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 2 && be_isbytes(vm, 2)) { + size_t buf_len = 0; + const uint8_t * buf = (const uint8_t*) be_tobytes(vm, 2, &buf_len); + if (buf_len == 32) { + /* create the private key structure */ + uint8_t sk[32]; + for (int32_t i=0; i<32; i++) { + sk[i] = buf[31-i]; + } + br_ec_private_key br_sk = { BR_EC_curve25519, sk, 32 }; + + uint8_t pk_buf[32]; /* EC 25519 is 32 bytes */ + size_t ret = br_ec_compute_pub(&BR_EC25519_IMPL, nullptr, pk_buf, &br_sk); + if (ret == 32) { + be_pushbytes(vm, pk_buf, ret); + be_return(vm); + } + } + be_raise(vm, "value_error", "invalid input"); + } + be_raise(vm, kTypeError, nullptr); + } + + // crypto.EC_C25519().shared_key(my_private_key:bytes(32), their_public_key:bytes(32)) -> bytes(32) + // Computes the shared pre-key. Normally this shared pre-key is hashed with another algorithm. + int32_t m_ec_c25519_sharedkey(bvm *vm); + int32_t m_ec_c25519_sharedkey(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 3 && be_isbytes(vm, 2) && be_isbytes(vm, 3)) { + size_t sk_len = 0; + const uint8_t * sk_buf = (const uint8_t*) be_tobytes(vm, 2, &sk_len); + uint8_t sk[32]; + for (int32_t i=0; i<32; i++) { + sk[i] = sk_buf[31-i]; + } + size_t pk_len = 0; + const uint8_t * pk_const = (const uint8_t*) be_tobytes(vm, 3, &pk_len); + uint8_t pk[32]; + memmove(pk, pk_const, sizeof(pk)); /* copy to a non-const variable to receive the result */ + + if (sk_len == 32 && pk_len == 32) { + if (BR_EC25519_IMPL.mul(pk, pk_len, sk, sk_len, BR_EC_curve25519)) { + /* return value (xoff is zero so no offset) */ + be_pushbytes(vm, pk, pk_len); + be_return(vm); + } else { + be_raise(vm, "internal_error", "internal bearssl error in 519_m15.mul()"); + } + } + be_raise(vm, "value_error", "invalid input"); + } + be_raise(vm, kTypeError, nullptr); + } +} + +#endif // USE_ALEXA_AVS +#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_energy.ino b/tasmota/xdrv_52_3_berry_energy.ino deleted file mode 100644 index 35676f484..000000000 --- a/tasmota/xdrv_52_3_berry_energy.ino +++ /dev/null @@ -1,69 +0,0 @@ -/* - xdrv_52_3_berry_native.ino - Berry scripting language, native fucnctions - - Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - - -#ifdef USE_BERRY - -#ifdef USE_ENERGY_SENSOR - -#include - - -/*********************************************************************************************\ - * Native functions mapped to Berry functions - * - * import power - * - * power.read() -> map - * -\*********************************************************************************************/ -extern "C" { - // Berry: `begintransmission(address:int) -> nil` - int32_t b_nrg_read(struct bvm *vm); - int32_t b_nrg_read(struct bvm *vm) { - be_newobject(vm, "map"); - map_insert_float(vm, "total", Energy.total); - // Energy.phase_count - map_insert_float(vm, "power", Energy.active_power[0]); - map_insert_float(vm, "yesterday", (float)Settings->energy_kWhyesterday / 100000); - map_insert_float(vm, "today", Energy.daily); - map_insert_float(vm, "activepower", Energy.active_power[0]); - map_insert_float(vm, "apparentpower", Energy.active_power[0]); - map_insert_float(vm, "reactivepower", Energy.reactive_power[0]); - // map_insert_float(vm, "powerfactor", ); - map_insert_float(vm, "frequency", Energy.frequency[0]); - map_insert_float(vm, "voltage", Energy.voltage[0]); - map_insert_float(vm, "current", Energy.current[0]); - - be_pop(vm, 1); - be_return(vm); // Return - } -} - -extern "C" { - // - int32_t b_wire_energymissing(struct bvm *vm); - int32_t b_wire_energymissing(struct bvm *vm) { - be_raise(vm, "feature_error", "Energy sensor is not enabled, use '#define USE_ENERGY_SENSOR'"); - } - -} - -#endif // USE_ENERGY_SENSOR -#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_gpio.ino b/tasmota/xdrv_52_3_berry_gpio.ino index 778bacc74..9672724dc 100644 --- a/tasmota/xdrv_52_3_berry_gpio.ino +++ b/tasmota/xdrv_52_3_berry_gpio.ino @@ -22,7 +22,9 @@ #include - +#if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) +#include +#endif /*********************************************************************************************\ * Native functions mapped to Berry functions * @@ -39,7 +41,40 @@ extern "C" { int32_t pin = be_toint(vm, 1); int32_t mode = be_toint(vm, 2); if (pin >= 0) { - pinMode(pin, mode); + if (mode > 0) { + // standard ESP mode + pinMode(pin, mode); + } else { + // synthetic mode + if (-1 == mode) { + // DAC +#if defined(CONFIG_IDF_TARGET_ESP32) + if (25 == pin || 26 == pin) { + uint32_t channel = pin - 25 + 1; // 1 or 2 + esp_err_t err = dac_output_enable((dac_channel_t) channel); + if (err) { + be_raisef(vm, "value_error", "Error: dac_output_enable(%i) -> %i", channel, err); + } + } else { + be_raise(vm, "value_error", "DAC only supported on GPIO25-26"); + } +#elif defined(CONFIG_IDF_TARGET_ESP32S2) + if (17 == pin || 18 == pin) { + uint32_t channel = pin - 17 + 1; // 1 or 2 + esp_err_t err = dac_output_enable((dac_channel_t) channel); + if (err) { + be_raisef(vm, "value_error", "Error: dac_output_enable(%i) -> %i", channel, err); + } + } else { + be_raise(vm, "value_error", "DAC only supported on GPIO17-18"); + } +#elif defined(CONFIG_IDF_TARGET_ESP32C3) + be_raise(vm, "value_error", "DAC unsupported in this chip"); +#else + be_raise(vm, "value_error", "DAC unsupported in this chip"); +#endif + } + } } be_return_nil(vm); } @@ -76,6 +111,45 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + int gp_dac_voltage(bvm *vm); + int gp_dac_voltage(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc == 2 && be_isint(vm, 1) && be_isint(vm, 2)) { + int32_t pin = be_toint(vm, 1); + int32_t mV = be_toint(vm, 2); + if (mV < 0) { mV = 0; } + uint32_t dac_value = changeUIntScale(mV, 0, 3300, 0, 255); // convert from 0..3300 ms to 0..255 +#if defined(CONFIG_IDF_TARGET_ESP32) + if (25 == pin || 26 == pin) { + uint32_t channel = pin - 25 + 1; // 1 or 2 + esp_err_t err = dac_output_voltage((dac_channel_t) channel, dac_value); + if (err) { + be_raisef(vm, "internal_error", "Error: esp_err_tdac_output_voltage(%i, %i) -> %i", channel, dac_value, err); + } + } else { + be_raise(vm, "value_error", "DAC only supported on GPIO25-26"); + } +#elif defined(CONFIG_IDF_TARGET_ESP32S2) + if (17 == pin || 18 == pin) { + uint32_t channel = pin - 17 + 1; // 1 or 2 + esp_err_t err = dac_output_voltage((dac_channel_t) channel, dac_value); + if (err) { + be_raisef(vm, "internal_error", "Error: esp_err_tdac_output_voltage(%i, %i) -> %i", channel, dac_value, err); + } + } else { + be_raise(vm, "value_error", "DAC only supported on GPIO17-18"); + } +#elif defined(CONFIG_IDF_TARGET_ESP32C3) + be_raise(vm, "value_error", "DAC unsupported in this chip"); +#else + be_raise(vm, "value_error", "DAC unsupported in this chip"); +#endif + be_pushint(vm, changeUIntScale(dac_value, 0, 255, 0, 3300)); + be_return(vm); + } + be_raise(vm, kTypeError, nullptr); + } + // Tasmota specific int gp_pin_used(bvm *vm); diff --git a/tasmota/xdrv_52_3_berry_light.ino b/tasmota/xdrv_52_3_berry_light.ino index 44c383866..19aa3cfb6 100644 --- a/tasmota/xdrv_52_3_berry_light.ino +++ b/tasmota/xdrv_52_3_berry_light.ino @@ -216,6 +216,7 @@ extern "C" { uint8_t channels[LST_MAX] = {}; // initialized with all zeroes if (list_size > LST_MAX) { list_size = LST_MAX; } // no more than 5 channels, no need to test for positive, any negative will be discarded by loop + bool on = false; // if all are zero, then only set power off for (uint32_t i = 0; i < list_size; i++) { // be_dumpstack(vm); get_list_item(vm, i); @@ -223,16 +224,12 @@ extern "C" { int32_t val = be_toint(vm, -1); be_pop(vm, 1); // remove result from stack channels[i] = to_u8(val); - - bool on = false; // if all are zero, then only set power off - for (uint32_t i = 0; i < LST_MAX; i++) { - if (channels[i] != 0) { on = true; } - } - if (on) { - light_controller.changeChannels(channels); - } else { - ExecuteCommandPower(idx + 1, POWER_OFF, SRC_BERRY); - } + if (channels[i]) { on = true; } + } + if (on) { + light_controller.changeChannels(channels); + } else { + ExecuteCommandPower(idx + 1, POWER_OFF, SRC_BERRY); } } else { be_pop(vm, 1); // remove "list" class from top diff --git a/tasmota/xdrv_52_3_berry_lvgl.ino b/tasmota/xdrv_52_3_berry_lvgl.ino index 7e2ce71c4..76747fcb0 100644 --- a/tasmota/xdrv_52_3_berry_lvgl.ino +++ b/tasmota/xdrv_52_3_berry_lvgl.ino @@ -95,114 +95,6 @@ public: }; LVBE_globals lvbe; -/******************************************************************** - * Generated code, don't edit - *******************************************************************/ - // Configuration -#ifndef BE_LV_WIDGET_ARC -#define BE_LV_WIDGET_ARC 1 -#endif -#ifndef BE_LV_WIDGET_BAR -#define BE_LV_WIDGET_BAR 1 -#endif -#ifndef BE_LV_WIDGET_BTN -#define BE_LV_WIDGET_BTN 1 -#endif -#ifndef BE_LV_WIDGET_BTNMATRIX -#define BE_LV_WIDGET_BTNMATRIX 1 -#endif -#ifndef BE_LV_WIDGET_CALENDAR -#define BE_LV_WIDGET_CALENDAR 1 -#endif -#ifndef BE_LV_WIDGET_CANVAS -#define BE_LV_WIDGET_CANVAS 1 -#endif -#ifndef BE_LV_WIDGET_CHART -#define BE_LV_WIDGET_CHART 1 -#endif -#ifndef BE_LV_WIDGET_CHECKBOX -#define BE_LV_WIDGET_CHECKBOX 1 -#endif -#ifndef BE_LV_WIDGET_CONT -#define BE_LV_WIDGET_CONT 1 -#endif -#ifndef BE_LV_WIDGET_CPICKER -#define BE_LV_WIDGET_CPICKER 1 -#endif -#ifndef BE_LV_WIDGET_DROPDOWN -#define BE_LV_WIDGET_DROPDOWN 1 -#endif -#ifndef BE_LV_WIDGET_GAUGE -#define BE_LV_WIDGET_GAUGE 1 -#endif -#ifndef BE_LV_WIDGET_IMG -#define BE_LV_WIDGET_IMG 1 -#endif -#ifndef BE_LV_WIDGET_IMGBTN -#define BE_LV_WIDGET_IMGBTN 1 -#endif -#ifndef BE_LV_WIDGET_KEYBOARD -#define BE_LV_WIDGET_KEYBOARD 1 -#endif -#ifndef BE_LV_WIDGET_LABEL -#define BE_LV_WIDGET_LABEL 1 -#endif -#ifndef BE_LV_WIDGET_LED -#define BE_LV_WIDGET_LED 1 -#endif -#ifndef BE_LV_WIDGET_LINE -#define BE_LV_WIDGET_LINE 1 -#endif -#ifndef BE_LV_WIDGET_LINEMETER -#define BE_LV_WIDGET_LINEMETER 1 -#endif -#ifndef BE_LV_WIDGET_LIST -#define BE_LV_WIDGET_LIST 1 -#endif -#ifndef BE_LV_WIDGET_MSGBOX -#define BE_LV_WIDGET_MSGBOX 1 -#endif -#ifndef BE_LV_WIDGET_OBJMASK -#define BE_LV_WIDGET_OBJMASK 1 -#endif -#ifndef BE_LV_WIDGET_TEMPL -#define BE_LV_WIDGET_TEMPL 1 -#endif -#ifndef BE_LV_WIDGET_PAGE -#define BE_LV_WIDGET_PAGE 1 -#endif -#ifndef BE_LV_WIDGET_ROLLER -#define BE_LV_WIDGET_ROLLER 1 -#endif -#ifndef BE_LV_WIDGET_SLIDER -#define BE_LV_WIDGET_SLIDER 1 -#endif -#ifndef BE_LV_WIDGET_SPINBOX -#define BE_LV_WIDGET_SPINBOX 1 -#endif -#ifndef BE_LV_WIDGET_SPINNER -#define BE_LV_WIDGET_SPINNER 1 -#endif -#ifndef BE_LV_WIDGET_SWITCH -#define BE_LV_WIDGET_SWITCH 1 -#endif -#ifndef BE_LV_WIDGET_TABLE -#define BE_LV_WIDGET_TABLE 1 -#endif -#ifndef BE_LV_WIDGET_TABVIEW -#define BE_LV_WIDGET_TABVIEW 1 -#endif -#ifndef BE_LV_WIDGET_TEXTAREA -#define BE_LV_WIDGET_TEXTAREA 1 -#endif -#ifndef BE_LV_WIDGET_TILEVIEW -#define BE_LV_WIDGET_TILEVIEW 1 -#endif -#ifndef BE_LV_WIDGET_WIN -#define BE_LV_WIDGET_WIN 1 -#endif -/********************************************************************/ - extern void start_lvgl(const char * uconfig); extern void lv_ex_get_started_1(void); @@ -222,15 +114,13 @@ extern void lv_ex_get_started_1(void); // // - a class name surroungded by parenthesis // - '(lv_button)' -> lv_button class or derived +// - '[lv_event_cb]' -> callback type, still prefixed with '^' to mark that it is cb // -// - a callback, only 6 callbacks supported 0..5 -// - '&1' callback 1 -// -void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5]); -void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5]) { +void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[8]); +void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[8]) { bool arg_type_check = (arg_type != nullptr); // is type checking activated int32_t arg_idx = 0; // position in arg_type string - char type_short_name[16]; + char type_short_name[32]; for (uint32_t i = 0; i < argc; i++) { type_short_name[0] = 0; // clear string @@ -243,22 +133,24 @@ void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5 type_short_name[1] = 0; arg_idx++; break; - case '&': - type_short_name[0] = arg_type[arg_idx+1]; - type_short_name[1] = 0; - arg_idx += 2; - break; case '(': + case '^': { - arg_idx++; + uint32_t prefix = 0; + if (arg_type[arg_idx] == '^') { + type_short_name[0] = '^'; + type_short_name[1] = 0; + prefix = 1; + } uint32_t offset = 0; - while (arg_type[arg_idx + offset] != ')' && arg_type[arg_idx + offset] != 0) { - type_short_name[offset] = arg_type[arg_idx + offset]; - type_short_name[offset+1] = 0; + arg_idx++; + while (arg_type[arg_idx + offset] != ')' && arg_type[arg_idx + offset] != '^' && arg_type[arg_idx + offset] != 0 && offset+prefix+1 < sizeof(type_short_name)) { + type_short_name[offset+prefix] = arg_type[arg_idx + offset]; + type_short_name[offset+prefix+1] = 0; offset++; } if (arg_type[arg_idx + offset] == 0) { - arg_type = nullptr; // stop iterations + arg_type = nullptr; // no more parameters, stop iterations } arg_idx += offset + 1; } @@ -278,32 +170,33 @@ void be_check_arg_type(bvm *vm, int32_t argc, const char * arg_type, int32_t p[5 } } -typedef int32_t (*fn_any_callable)(int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4); +typedef int32_t (*fn_any_callable)(int32_t p0, int32_t p1, int32_t p2, int32_t p3, + int32_t p4, int32_t p5, int32_t p6, int32_t p7); extern "C" { void lv_init_set_member(bvm *vm, int index, void * ptr); - // called programmatically - int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type = nullptr); - int lvx_init_2(bvm *vm, void * func, const char * return_type, const char * arg_type) { + // called programmatically, when an object is construced + // LVGL8: constructor now has only 1 parameter (parent) + // If arg1 is comptr, then just encapsulate + int lvx_init_ctor(bvm *vm, void * func); + int lvx_init_ctor(bvm *vm, void * func) { int argc = be_top(vm); - lv_obj_t * obj1 = nullptr; - lv_obj_t * obj2 = nullptr; + lv_obj_t * obj = nullptr; - if (argc > 1) { - obj1 = (lv_obj_t*) be_convert_single_elt(vm, 2); - } - if (argc > 2) { - obj2 = (lv_obj_t*) be_convert_single_elt(vm, 3); - } - // AddLog(LOG_LEVEL_INFO, "argc %d obj1 %p obj2 %p", argc, obj1, obj2); - fn_any_callable f = (fn_any_callable) func; - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p", f, p[0], p[1], p[2], p[3], p[4]); - lv_obj_t * obj; - if ((int32_t)obj1 == -1) { // special semantics of first ptr is -1, then just encapsulate - obj = obj2; - } else { // otherwise call the LVGL creator - obj = (lv_obj_t*) (*f)((int32_t)obj1, (int32_t)obj2, 0, 0, 0); + if ((argc > 1) && be_iscomptr(vm, 2)) { + obj = (lv_obj_t*) be_tocomptr(vm, 2); + } else { + lv_obj_t * obj1 = nullptr; + if (argc > 1) { + obj1 = (lv_obj_t*) be_convert_single_elt(vm, 2); + } + // AddLog(LOG_LEVEL_INFO, "argc %d obj1 %p obj2 %p", argc, obj1, obj2); + fn_any_callable f = (fn_any_callable) func; + // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p", f, p[0], p[1], p[2], p[3], p[4]); + if (f) { // if f is null, just store 0x00000000 + obj = (lv_obj_t*) (*f)((int32_t)obj1, 0, 0, 0, 0, 0, 0, 0); + } } lv_init_set_member(vm, 1, obj); be_return_nil(vm); @@ -338,36 +231,33 @@ extern "C" { // look for class descriptor int32_t class_idx = bin_search(class_name, &lv_classes[0].name, sizeof(lv_classes[0]), lv_classes_size); - if (class_idx < 0) { - // class not found, abort - // berry_log_C("lvx_member class not found"); - be_return_nil(vm); - } - const lvbe_call_c_t * methods_calls = lv_classes[class_idx].func_table; - size_t methods_size = lv_classes[class_idx].size; + if (class_idx >= 0) { + const lvbe_call_c_t * methods_calls = lv_classes[class_idx].func_table; + size_t methods_size = lv_classes[class_idx].size; - int32_t method_idx = bin_search(method_name, methods_calls, sizeof(lvbe_call_c_t), methods_size); - if (method_idx >= 0) { - // method found - const lvbe_call_c_t * method = &methods_calls[method_idx]; - // berry_log_C("lvx_member method found func=%p return_type=%s arg_type=%s", method->func, method->return_type, method->arg_type); - // push native closure - be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals + int32_t method_idx = bin_search(method_name, methods_calls, sizeof(lvbe_call_c_t), methods_size); + if (method_idx >= 0) { + // method found + const lvbe_call_c_t * method = &methods_calls[method_idx]; + // berry_log_C("lvx_member method found func=%p return_type=%s arg_type=%s", method->func, method->return_type, method->arg_type); + // push native closure + be_pushntvclosure(vm, &lvx_call_c, 3); // 3 upvals - be_pushcomptr(vm, method->func); - be_setupval(vm, -2, 0); - be_pop(vm, 1); + be_pushcomptr(vm, method->func); + be_setupval(vm, -2, 0); + be_pop(vm, 1); - be_pushstring(vm, method->return_type); - be_setupval(vm, -2, 1); - be_pop(vm, 1); + be_pushstring(vm, method->return_type); + be_setupval(vm, -2, 1); + be_pop(vm, 1); - be_pushstring(vm, method->arg_type); - be_setupval(vm, -2, 2); - be_pop(vm, 1); + be_pushstring(vm, method->arg_type); + be_setupval(vm, -2, 2); + be_pop(vm, 1); - // all good - be_return(vm); + // all good + be_return(vm); + } } // get super if any, or nil if none @@ -382,19 +272,19 @@ extern "C" { } int be_call_c_func(bvm *vm, void * func, const char * return_type, const char * arg_type) { - int32_t p[5] = {0,0,0,0,0}; + int32_t p[8] = {0,0,0,0,0,0,0,0}; int32_t argc = be_top(vm); // Get the number of arguments - // check if we call a constructor + // check if we call a constructor, in this case we store the return type into the new object if (return_type && return_type[0] == '+') { return_type++; // skip the leading '+' - return lvx_init_2(vm, func, return_type); + return lvx_init_ctor(vm, func); } fn_any_callable f = (fn_any_callable) func; be_check_arg_type(vm, argc, arg_type, p); - // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type); - int32_t ret = (*f)(p[0], p[1], p[2], p[3], p[4]); + // berry_log_C(">> be_call_c_func(%p) - %p,%p,%p,%p,%p - %s", f, p[0], p[1], p[2], p[3], p[4], return_type ? return_type : "NULL"); + int32_t ret = (*f)(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]); // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, ret = %p", ret); if ((return_type == nullptr) || (strlen(return_type) == 0)) { be_return_nil(vm); } // does not return else if (strlen(return_type) == 1) { @@ -403,14 +293,15 @@ extern "C" { case 'i': be_pushint(vm, ret); break; case 'b': be_pushbool(vm, ret); break; case 's': be_pushstring(vm, (const char*) ret); break; + case 'c': be_pushint(vm, ret); break; // TODO missing 'c' general callback type default: be_raise(vm, "internal_error", "Unsupported return type"); break; } be_return(vm); } else { // class name // AddLog(LOG_LEVEL_INFO, ">> be_call_c_func, create_obj", ret); be_getglobal(vm, return_type); // stack = class - be_pushcomptr(vm, (void*) -1); // stack = class, -1 - be_pushcomptr(vm, (void*) ret); // stack = class, -1, ptr + be_pushcomptr(vm, (void*) ret); // stack = class, ptr + be_pushcomptr(vm, (void*) -1); // stack = class, ptr, -1 be_call(vm, 2); // instanciate with 2 arguments, stack = instance, -1, ptr be_pop(vm, 2); // stack = instance be_return(vm); @@ -440,29 +331,35 @@ extern "C" { return *col; } inline uint32_t lv_color_to_uint32(lv_color_t col) { - uint32_t *p = (uint32_t*) &col; + uint16_t *p = (uint16_t*) &col; return *p; } // lv_color + // First arg is a 24 bits RGB color + // If first arg is `nil` second arg is the native value of color int lco_init(bvm *vm) { int argc = be_top(vm); - uint32_t color = 0x0000; // default to black - if (argc > 1 && be_isint(vm, 2)) { - color = be_toint(vm, 2); + uint32_t color32 = 0x000000; // default to black + + if (argc > 1) { + color32 = be_toint(vm, 2); + } + lv_color_t lv_color = lv_color_hex(color32); + if (argc > 2 && be_toint(vm, 3) == -1) { + lv_color.full = be_toint(vm, 2); } - lv_color_t lv_color = lv_color_hex(color); be_pushint(vm, lv_color_to_uint32(lv_color)); - be_setmember(vm, 1, ".p"); + be_setmember(vm, 1, "_p"); be_return_nil(vm); } int lco_tostring(bvm *vm) { lv_color_t lv_color = {}; - be_getmember(vm, 1, ".p"); + be_getmember(vm, 1, "_p"); uint32_t ntv_color = be_toint(vm, -1); lv_color = lv_color_from_uint32(ntv_color); - uint32_t color = lv_color_to32(lv_color); + uint32_t color = lv_color_to32(lv_color) & 0xFFFFFF; be_pop(vm, 1); // remove attribute char s[48]; snprintf(s, sizeof(s), "lv_color(0x%06x - native:0x%04x)", color, ntv_color); @@ -470,28 +367,33 @@ extern "C" { be_return(vm); } + int lco_toint(bvm *vm) { + lv_color_t lv_color = {}; + be_getmember(vm, 1, "_p"); + uint32_t ntv_color = be_toint(vm, -1); + be_pushint(vm, ntv_color); + be_return(vm); + } + /*********************************************************************************************\ * Support for lv \*********************************************************************************************/ - // Get the `.p` member of instance at `index` + // Get the `_p` member of instance at `index` void * lv_get_arg(bvm *vm, int index) { void * ret = nullptr; if (be_isinstance(vm, index)) { - be_getmember(vm, index, ".p"); + be_getmember(vm, index, "_p"); ret = be_tocomptr(vm, -1); - be_pop(vm, 1); // remove .p attribute + be_pop(vm, 1); // remove _p attribute } return ret; } - // called during init, set the `.p` member with the pointer + // called during init, set the `_p` member with the pointer void lv_init_set_member(bvm *vm, int index, void * ptr) { - if (ptr == nullptr) { - be_throw(vm, BE_MALLOC_FAIL); - } be_pushcomptr(vm, ptr); - be_setmember(vm, index, ".p"); + be_setmember(vm, index, "_p"); be_pop(vm, 1); } @@ -554,7 +456,7 @@ extern "C" { int lv0_load_montserrat_font(bvm *vm) { int argc = be_top(vm); if (argc == 1 && be_isint(vm, 1)) { - lv_font_t * font = nullptr; + const lv_font_t * font = nullptr; int32_t font_size = be_toindex(vm, 1); switch (font_size) { @@ -697,7 +599,7 @@ extern "C" { if (font != nullptr) { be_getglobal(vm, "lv_font"); - be_pushcomptr(vm, font); + be_pushcomptr(vm, (void*)font); be_call(vm, 1); be_pop(vm, 1); be_return(vm); @@ -711,7 +613,7 @@ extern "C" { int lv0_load_seg7_font(bvm *vm) { int argc = be_top(vm); if (argc == 1 && be_isint(vm, 1)) { - lv_font_t * font = nullptr; + const lv_font_t * font = nullptr; int32_t font_size = be_toindex(vm, 1); switch (font_size) { @@ -731,7 +633,7 @@ extern "C" { if (font != nullptr) { be_getglobal(vm, "lv_font"); - be_pushcomptr(vm, font); + be_pushcomptr(vm, (void*)font); be_call(vm, 1); be_pop(vm, 1); be_return(vm); @@ -796,12 +698,10 @@ extern "C" { // all good be_return(vm); - } else { - be_return_nil(vm); } } } - be_raise(vm, "attribute_error", "module 'lvgl' has no such attribute"); + be_return_nil(vm); } /*********************************************************************************************\ @@ -816,7 +716,7 @@ extern "C" { if (argc == 0 || (argc == 1 && be_isstring(vm, 1))) { const char * uconfig = nullptr; if (argc == 1) { - be_tostring(vm, 1); + uconfig = be_tostring(vm, 1); } start_lvgl(uconfig); be_return_nil(vm); @@ -831,7 +731,7 @@ extern "C" { * * lv.register_button_encoder([inv: bool]) -> nil \*********************************************************************************************/ - bool lvbe_encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t*data); + void lvbe_encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t*data); int lv0_register_button_encoder(bvm *vm); // add buttons with encoder logic int lv0_register_button_encoder(bvm *vm) { @@ -884,7 +784,7 @@ extern "C" { // lv_indev_state_t state; /**< LV_INDEV_STATE_REL or LV_INDEV_STATE_PR*/ // } lv_indev_data_t; - bool lvbe_encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t*data){ + void lvbe_encoder_with_keys_read(lv_indev_drv_t * drv, lv_indev_data_t *data){ // scan through buttons if we need to report something uint32_t i; for (i = 0; i < 3; i++) { @@ -903,13 +803,12 @@ extern "C" { } // do we have more to report? - bool more_to_report = false; + data->continue_reading = false; for (/* continue where we left */; i < 3; i++) { if (lvbe.btn[i].state_changed()) { - more_to_report = true; + data->continue_reading = true; } } - return more_to_report; } /*********************************************************************************************\ @@ -927,29 +826,12 @@ extern "C" { } /*********************************************************************************************\ - * Support for lv_obj + * Generalized tostring method, shows class and _p value \*********************************************************************************************/ - int lvx_init(bvm *vm); - int lvx_init(bvm *vm) { - int argc = be_top(vm); - lv_obj_t * obj = nullptr; - - if (argc > 1) { - obj = (lv_obj_t*) be_convert_single_elt(vm, 2); - } - // AddLog(LOG_LEVEL_INFO, "argc %d lv_obj %p", argc, obj); - if (obj == nullptr) { - obj = lv_obj_create(nullptr, nullptr); - } - // AddLog(LOG_LEVEL_INFO, "lv_obj final %p", obj); - lv_init_set_member(vm, 1, obj); - be_return_nil(vm); - } - int lvx_tostring(bvm *vm) { lv_obj_t * obj = (lv_obj_t*) lv_get_arg(vm, 1); const char * classname = be_classname(vm, 1); - char s[32]; + char s[48]; snprintf(s, sizeof(s), "", classname, obj); be_pushnstring(vm, s, strlen(s)); /* make escape string from buffer */ be_return(vm); @@ -967,6 +849,9 @@ extern "C" { } if (style == nullptr) { style = (lv_style_t*) be_malloc(vm, sizeof(lv_style_t)); + if (style == nullptr) { + be_throw(vm, BE_MALLOC_FAIL); + } if (style != nullptr) { lv_style_init(style); } diff --git a/tasmota/xdrv_52_3_berry_md5.ino b/tasmota/xdrv_52_3_berry_md5.ino index 4ae85d4b3..a4adee029 100644 --- a/tasmota/xdrv_52_3_berry_md5.ino +++ b/tasmota/xdrv_52_3_berry_md5.ino @@ -33,7 +33,8 @@ extern "C" { int free_ctx(bvm* vm) { int argc = be_top(vm); if (argc > 0) { - struct MD5Context * ctx = (struct MD5Context *) be_tocomptr(vm, 1); + be_getmember(vm, 1, ".p"); + struct MD5Context * ctx = (struct MD5Context *) be_tocomptr(vm, -1); if (ctx != NULL) { be_os_free(ctx); } diff --git a/tasmota/xdrv_52_3_berry_onewire.ino b/tasmota/xdrv_52_3_berry_onewire.ino new file mode 100644 index 000000000..a173b4b8e --- /dev/null +++ b/tasmota/xdrv_52_3_berry_onewire.ino @@ -0,0 +1,232 @@ +/* + xdrv_52_3_berry_native.ino - Berry scripting language, native fucnctions + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifdef USE_BERRY + +#if defined(USE_ONEWIRE) || defined(USE_DS18x20) + +#include +#include + +// // read the `bus` attribute and return `Wire` or `Wire1` +// TwoWire & getWire(bvm *vm); +// TwoWire & getWire(bvm *vm) { +// be_getmember(vm, 1, "bus"); +// int32_t bus = be_toint(vm, -1); // bus is 1 or 2 +// be_pop(vm, 1); +// if (2 != bus) { +// return Wire; +// } else { +// return Wire1; +// } +// } +// int32_t getBus(bvm *vm); // 1 or 2 +// int32_t getBus(bvm *vm) { +// be_getmember(vm, 1, "bus"); +// int32_t bus = be_toint(vm, -1); +// be_pop(vm, 1); +// return bus; +// } + +/*********************************************************************************************\ + * Native functions mapped to Berry functions + * + * import wire + * + * wire.get_free_heap() -> int + * +\*********************************************************************************************/ +extern "C" { + OneWire * b_onewire_get(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + OneWire * ow = (OneWire *) be_tocomptr(vm, -1); + be_pop(vm, 1); + return ow; + } + + // Berry: `init(gpio:int)` + int32_t b_onewire_init(struct bvm *vm); + int32_t b_onewire_init(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc > 1 && be_isint(vm, 2)) { + int gpio = be_toint(vm, 2); + OneWire * ow = new OneWire(gpio); + be_pushcomptr(vm, (void*) ow); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + be_raise(vm, kTypeError, "gpio number expected"); + } + + // Berry: `deinit(void)` + int32_t b_onewire_deinit(struct bvm *vm); + int32_t b_onewire_deinit(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + OneWire * ow = (OneWire *) be_tocomptr(vm, -1); + if (ow) { + delete ow; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + be_return_nil(vm); + } + + // Berry: `reset(void) -> bool` + // returns true if a device is present + int32_t b_onewire_reset(struct bvm *vm); + int32_t b_onewire_reset(struct bvm *vm) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + uint8_t resp = ow->reset(); + be_pushbool(vm, resp != 0); + be_return(vm); + } + be_return_nil(vm); + } + + // Berry: `skip(void) -> nil` + int32_t b_onewire_skip(struct bvm *vm); + int32_t b_onewire_skip(struct bvm *vm) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + ow->skip(); + } + be_return_nil(vm); + } + + // Berry: `depower(void) -> nil` + int32_t b_onewire_depower(struct bvm *vm); + int32_t b_onewire_depower(struct bvm *vm) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + ow->depower(); + } + be_return_nil(vm); + } + + // Berry: `select(bytes) -> nil` + // returns true if a device is present + int32_t b_onewire_select(struct bvm *vm); + int32_t b_onewire_select(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc > 1 && be_isbytes(vm, 2)) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + uint8_t rom[8] = {0}; + size_t len; + const void * buf = be_tobytes(vm, 2, &len); + if (len > 8) { len = 8; } /* 8 bytes max */ + memmove(rom, buf, len); + ow->select(rom); + } + be_return_nil(vm); + } + be_raise(vm, kTypeError, NULL); + } + + // Berry: `write(byte:int | bytes [, power:bool = false]) -> nil` + int32_t b_onewire_write(struct bvm *vm); + int32_t b_onewire_write(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + bool power = false; + if (argc > 1 && (be_isint(vm, 2) || be_isbytes(vm, 2))) { + if (argc > 2 && (be_isbool(vm, 3) || be_isint(vm,3))) { + power = be_tobool(vm, 3); + } + uint8_t val = 0; + if (be_isint(vm, 2)) { + val = be_toint(vm, 2); + } else { /* bytes */ + size_t len = 0; + const uint8_t * buf = (const uint8_t *) be_tobytes(vm, 2, &len); + if (len > 0) { + val = buf[0]; + } else { + be_return_nil(vm); /* abort */ + } + } + OneWire * ow = b_onewire_get(vm); + if (ow) { + ow->write(val, power); + } + be_return_nil(vm); + } + be_raise(vm, kTypeError, NULL); + } + + // Berry: `read(void) -> bytes()` + int32_t b_onewire_read(struct bvm *vm); + int32_t b_onewire_read(struct bvm *vm) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + uint8_t val = ow->read(); + be_pushbytes(vm, &val, 1); + be_return(vm); + } + be_return_nil(vm); + } + + // Berry: `reset_search(void) -> nil` + int32_t b_onewire_reset_search(struct bvm *vm); + int32_t b_onewire_reset_search(struct bvm *vm) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + ow->reset_search(); + } + be_return_nil(vm); + } + + // Berry: `target_search(family_code:int) -> nil` + int32_t b_onewire_target_search(struct bvm *vm); + int32_t b_onewire_target_search(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc > 1 && be_isint(vm, 2)) { + OneWire * ow = b_onewire_get(vm); + if (ow) { + ow->target_search(be_toint(vm, 2)); + } + be_return_nil(vm); + } + be_raise(vm, kTypeError, NULL); + } + + // Berry: `search(void) -> bytes() or nil` + int32_t b_onewire_search(struct bvm *vm); + int32_t b_onewire_search(struct bvm *vm) { + uint8_t rom[8] = {0}; + OneWire * ow = b_onewire_get(vm); + if (ow) { + uint8_t res = ow->search(rom); + if (res) { + be_pushbytes(vm, rom, sizeof(rom)); + be_return(vm); + } else { + be_return_nil(vm); + } + } + be_return_nil(vm); + } + +} + +#endif // USE_I2C + +#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_serial.ino b/tasmota/xdrv_52_3_berry_serial.ino new file mode 100644 index 000000000..5f20c8a8a --- /dev/null +++ b/tasmota/xdrv_52_3_berry_serial.ino @@ -0,0 +1,155 @@ +/* + xdrv_52_3_berry_serial.ino - Berry scripting language, native fucnctions + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifdef USE_BERRY + +#include +#include + +/*********************************************************************************************\ + * Native functions mapped to Berry functions + * + * import wire + * + * wire.get_free_heap() -> int + * +\*********************************************************************************************/ +extern "C" { + TasmotaSerial * b_serial_get(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ow = (TasmotaSerial *) be_tocomptr(vm, -1); + be_pop(vm, 1); + return ow; + } + + // Berry: `init(rx_gpio:int, tx_gpio:int, speed:int [, config:int])` + int32_t b_serial_init(struct bvm *vm); + int32_t b_serial_init(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 4 && be_isint(vm, 2) && be_isint(vm, 3) && be_isint(vm, 4)) { + int32_t rx = be_toint(vm, 2); + int32_t tx = be_toint(vm, 3); + int32_t speed = be_toint(vm, 4); + int32_t mode = SERIAL_8N1; + if (argc >= 5 && be_isint(vm, 5)) { + mode = be_toint(vm, 5); + } + TasmotaSerial * ser = new TasmotaSerial(rx, tx); + bool ok = ser->begin(speed, mode); + if (!ok) { + delete ser; + be_raise(vm, "internal_error", "Unable to start serial"); + } + be_pushcomptr(vm, (void*) ser); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + // Berry: `deinit(void)` + int32_t b_serial_deinit(struct bvm *vm); + int32_t b_serial_deinit(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ser = (TasmotaSerial *) be_tocomptr(vm, -1); + if (ser) { + delete ser; + // clear + be_pushcomptr(vm, (void*) NULL); + be_setmember(vm, 1, ".p"); + } + be_return_nil(vm); + } + + // Berry: `available(void) -> int` (how many bytes are waiting in RX buffer) + int32_t b_serial_available(struct bvm *vm); + int32_t b_serial_available(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ser = (TasmotaSerial *) be_tocomptr(vm, -1); + if (ser) { + be_pushint(vm, ser->available()); + be_return(vm); + } + be_return_nil(vm); + } + + // Berry: `flush(void) -> nil` (wait for all bytes to be sent, and clear rx buffer) + int32_t b_serial_flush(struct bvm *vm); + int32_t b_serial_flush(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ser = (TasmotaSerial *) be_tocomptr(vm, -1); + if (ser) { + ser->flush(); + } + be_return_nil(vm); + } + + // Berry: `read(void) -> bytes()` (read all bytes in RX buffer) + int32_t b_serial_read(struct bvm *vm); + int32_t b_serial_read(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ser = (TasmotaSerial *) be_tocomptr(vm, -1); + if (ser) { + int32_t len = ser->available(); + if (len < 0) { len = 0; } + if (len > 0) { + // read bytes on stack + char * rx_buf = new char[len]; + len = ser->read(rx_buf, len); + be_pushbytes(vm, rx_buf, len); + delete[] rx_buf; + be_return(vm); + } else { + be_pushbytes(vm, nullptr, 0); + be_return(vm); + } + } + be_return_nil(vm); + } + + // Berry: `write(int || bytes) -> nil` (write bytes, blocking until all sent) + int32_t b_serial_write(struct bvm *vm); + int32_t b_serial_write(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 2 && (be_isint(vm, 2) || be_isbytes(vm, 2))) { + be_getmember(vm, 1, ".p"); + TasmotaSerial * ser = (TasmotaSerial *) be_tocomptr(vm, -1); + if (ser) { + if (be_isint(vm, 2)) { + int32_t val = be_toint(vm, 2); + ser->write(val); + be_pushint(vm, 1); + } else { + size_t len; + const uint8_t * buf = (const uint8_t *) be_tobytes(vm, 2, &len); + for (uint32_t i=0; iwrite(buf[i]); + } + be_pushint(vm, len); + } + be_return(vm); + } + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } +} + +#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_tasmota.ino b/tasmota/xdrv_52_3_berry_tasmota.ino index 7f8a04c2d..6d556ffe4 100644 --- a/tasmota/xdrv_52_3_berry_tasmota.ino +++ b/tasmota/xdrv_52_3_berry_tasmota.ino @@ -27,7 +27,7 @@ const uint32_t BERRY_MAX_LOGS = 16; // max number of print output recorded whe /*********************************************************************************************\ * Return C callback from index - * + * \*********************************************************************************************/ extern "C" { int32_t l_get_cb(struct bvm *vm); @@ -47,11 +47,11 @@ extern "C" { /*********************************************************************************************\ * Native functions mapped to Berry functions - * + * * log(msg:string [,log_level:int]) ->nil - * + * * import tasmota - * + * * tasmota.get_free_heap() -> int * tasmota.publish(topic:string, payload:string[, retain:bool]) -> nil * tasmota.cmd(command:string) -> string @@ -59,12 +59,12 @@ extern "C" { * tasmota.millis([delay:int]) -> int * tasmota.time_reached(timer:int) -> bool * tasmota.yield() -> nil - * + * * tasmota.get_light([index:int = 0]) -> map * tasmota.get_power([index:int = 0]) -> bool * tasmota.set_power(idx:int, power:bool) -> bool or nil * tasmota.set_light(idx:int, values:map) -> map - * + * \*********************************************************************************************/ extern "C" { // Berry: `tasmota.publish(topic, payload [,retain]) -> nil`` @@ -72,22 +72,48 @@ extern "C" { int32_t l_publish(struct bvm *vm); int32_t l_publish(struct bvm *vm) { int32_t top = be_top(vm); // Get the number of arguments - if (top >= 3 && be_isstring(vm, 2) && be_isstring(vm, 3)) { // 2 mandatory string arguments + if (top >= 3 && be_isstring(vm, 2) && (be_isstring(vm, 3) || be_isinstance(vm, 3))) { // 2 mandatory string arguments if (top == 3 || (top == 4 && be_isbool(vm, 4))) { // 3rd optional argument must be bool const char * topic = be_tostring(vm, 2); - const char * payload = be_tostring(vm, 3); + const char * payload = nullptr; + size_t payload_len = 0; + if (be_isstring(vm, 3)) { + payload = be_tostring(vm, 3); + payload_len = strlen(payload); + } else { + be_getglobal(vm, "bytes"); /* get the bytes class */ /* TODO eventually replace with be_getbuiltin */ + if (be_isderived(vm, 3)) { + payload = (const char *) be_tobytes(vm, 3, &payload_len); + } + } bool retain = false; if (top == 4) { retain = be_tobool(vm, 4); } - Response_P(payload); - MqttPublish(topic, retain); - be_return(vm); // Return + if (!payload) { be_raise(vm, "value_error", "Empty payload"); } + MqttPublishPayload(topic, payload, payload_len, retain); + be_return_nil(vm); // Return } } be_raise(vm, kTypeError, nullptr); } + // Berry: `tasmota.publish_result(payload:string, subtopic:string) -> nil`` + // + int32_t l_publish_result(struct bvm *vm); + int32_t l_publish_result(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top >= 3 && be_isstring(vm, 2) && be_isstring(vm, 3)) { // 2 mandatory string arguments + const char * payload = be_tostring(vm, 2); + const char * subtopic = be_tostring(vm, 3); + Response_P(PSTR("%s"), payload); + be_pop(vm, top); + MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, subtopic); + be_return_nil(vm); // Return + } + be_raise(vm, kTypeError, nullptr); + } + // Berry: `tasmota.cmd(command:string) -> string` // int32_t l_cmd(struct bvm *vm); @@ -97,11 +123,7 @@ extern "C" { const char * command = be_tostring(vm, 2); be_pop(vm, 2); // clear the stack before calling, because of re-entrant call to Berry in a Rule ExecuteCommand(command, SRC_BERRY); -#ifdef MQTT_DATA_STRING - be_pushstring(vm, TasmotaGlobal.mqtt_data.c_str()); -#else - be_pushstring(vm, TasmotaGlobal.mqtt_data); -#endif + be_pushstring(vm, ResponseData()); be_return(vm); // Return } be_raise(vm, kTypeError, nullptr); @@ -168,7 +190,7 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } - // Berry: tasmota.memory(timer:int) -> bool + // Berry: tasmota.memory() -> map // int32_t l_memory(struct bvm *vm); int32_t l_memory(struct bvm *vm) { @@ -179,9 +201,8 @@ extern "C" { map_insert_int(vm, "program", ESP_getSketchSize() / 1024); map_insert_int(vm, "program_free", ESP.getFreeSketchSpace() / 1024); map_insert_int(vm, "heap_free", ESP_getFreeHeap() / 1024); - int32_t freeMaxMem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap()); - map_insert_int(vm, "frag", freeMaxMem); - if (psramFound()) { + map_insert_int(vm, "frag", ESP_getHeapFragmentation()); + if (UsePSRAM()) { map_insert_int(vm, "psram", ESP.getPsramSize() / 1024); map_insert_int(vm, "psram_free", ESP.getFreePsram() / 1024); } @@ -191,6 +212,53 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + // Berry: tasmota.wifi() -> map + // + int32_t l_wifi(struct bvm *vm); + int32_t l_wifi(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 1) { // no argument (instance only) + be_newobject(vm, "map"); + if (Settings->flag4.network_wifi) { + int32_t rssi = WiFi.RSSI(); + map_insert_int(vm, "rssi", rssi); + map_insert_int(vm, "quality", WifiGetRssiAsQuality(rssi)); +#if LWIP_IPV6 + String ipv6_addr = WifiGetIPv6(); + if (ipv6_addr != "") { + map_insert_str(vm, "ip6", ipv6_addr.c_str()); + } +#endif + if (static_cast(WiFi.localIP()) != 0) { + map_insert_str(vm, "mac", WiFi.macAddress().c_str()); + map_insert_str(vm, "ip", WiFi.localIP().toString().c_str()); + } + } + be_pop(vm, 1); + be_return(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + // Berry: tasmota.eth() -> map + // + int32_t l_eth(struct bvm *vm); + int32_t l_eth(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 1) { // no argument (instance only) + be_newobject(vm, "map"); +#ifdef USE_ETHERNET + if (static_cast(EthernetLocalIP()) != 0) { + map_insert_str(vm, "mac", EthernetMacAddress().c_str()); + map_insert_str(vm, "ip", EthernetLocalIP().toString().c_str()); + } +#endif + be_pop(vm, 1); + be_return(vm); + } + be_raise(vm, kTypeError, nullptr); + } + int32_t l_time_dump(bvm *vm) { int32_t top = be_top(vm); // Get the number of arguments if (top == 2 && be_isint(vm, 2)) { @@ -210,6 +278,20 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + int32_t l_strftime(bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc == 3 && be_isstring(vm, 2) && be_isint(vm, 3)) { + const char * format = be_tostring(vm, 2); + time_t ts = be_toint(vm, 3); + struct tm *t = gmtime(&ts); + char s[64] = {0}; + strftime(s, sizeof(s), format, t); + be_pushstring(vm, s); + be_return(vm); + } + be_raise(vm, kTypeError, nullptr); + } + // Berry: tasmota.delay(timer:int) -> nil // int32_t l_delay(struct bvm *vm); @@ -277,7 +359,7 @@ extern "C" { ResponseCmndDone(); be_return_nil(vm); } - + int32_t l_respCmndError(bvm *vm); int32_t l_respCmndError(bvm *vm) { ResponseCmndError(); @@ -368,6 +450,21 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + // get power + int32_t l_getswitch(bvm *vm); + int32_t l_getswitch(bvm *vm) { + be_newobject(vm, "list"); + for (uint32_t i = 0; i < MAX_SWITCHES; i++) { + if (PinUsed(GPIO_SWT1, i)) { + be_pushbool(vm, Switch.virtual_state[i] == PRESSED); + be_data_push(vm, -2); + be_pop(vm, 1); + } + } + be_pop(vm, 1); + be_return(vm); // Return + } + #ifdef USE_I2C // I2C specific // Berry: `i2c_enabled(index:int) -> bool` is I2C device enabled @@ -390,9 +487,9 @@ extern "C" { /*********************************************************************************************\ * Native functions mapped to Berry functions - * + * * log(msg:string [,log_level:int]) ->nil - * + * \*********************************************************************************************/ extern "C" { // Berry: `log(msg:string [,log_level:int]) ->nil` @@ -484,22 +581,4 @@ void berry_log_P(const char * berry_buf, ...) { berry_log(log_data); } - -/*********************************************************************************************\ - * Helper function for `Driver` class - * - * get_tasmota() -> tasmota instance from globals - * allows to use solidified methods refering to the global object `tasmota` - * -\*********************************************************************************************/ -extern "C" { - - int32_t d_getTasmotaGlob(struct bvm *vm); - int32_t d_getTasmotaGlob(struct bvm *vm) { - be_getglobal(berry.vm, PSTR("tasmota")); - be_return(vm); // Return - } - -} - #endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_tasmota_global.ino b/tasmota/xdrv_52_3_berry_tasmota_global.ino new file mode 100644 index 000000000..33ba0bf32 --- /dev/null +++ b/tasmota/xdrv_52_3_berry_tasmota_global.ino @@ -0,0 +1,45 @@ +/* + xdrv_52_3_berry_tasmota_global.ino - Berry scripting language, mapping to TasmotaGlobal + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/******************************************************************** + * Tasmota LVGL ctypes mapping + *******************************************************************/ + +#ifdef USE_BERRY + +#include +#include "be_ctypes.h" + +/******************************************************************** + * Generated code, don't edit + *******************************************************************/ + +extern "C" { + + extern const be_ctypes_structure_t be_tasmota_global_struct = { + sizeof(TasmotaGlobal), /* size in bytes */ + 2, /* number of elements */ + nullptr, + (const be_ctypes_structure_item_t[2]) { + { "energy_driver", offsetof(TasmotaGlobal_t, energy_driver), 0, 0, ctypes_u8, 0 }, + { "uptime", offsetof(TasmotaGlobal_t, uptime), 0, 0, ctypes_u32, 0 }, + }}; + +} + +#endif // USE_BERRY \ No newline at end of file diff --git a/tasmota/xdrv_52_3_berry_webclient.ino b/tasmota/xdrv_52_3_berry_webclient.ino new file mode 100644 index 000000000..5c98043a2 --- /dev/null +++ b/tasmota/xdrv_52_3_berry_webclient.ino @@ -0,0 +1,306 @@ +/* + xdrv_52_3_berry_webserver.ino - Berry scripting language, webserver module + + Copyright (C) 2021 Stephan Hadinger, Berry language by Guan Wenliang https://github.com/Skiars/berry + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + + +#ifdef USE_BERRY + +#ifdef USE_WEBCLIENT + +#include +#include "HttpClientLight.h" + +String wc_UrlEncode(const String& text) { + const char hex[] = "0123456789ABCDEF"; + + String encoded = ""; + int len = text.length(); + int i = 0; + while (i < len) { + char decodedChar = text.charAt(i++); + + if (('a' <= decodedChar && decodedChar <= 'z') || + ('A' <= decodedChar && decodedChar <= 'Z') || + ('0' <= decodedChar && decodedChar <= '9') || + ('=' == decodedChar)) { + encoded += decodedChar; + } else { + encoded += '%'; + encoded += hex[decodedChar >> 4]; + encoded += hex[decodedChar & 0xF]; + } + + } + return encoded; +} + +/*********************************************************************************************\ + * Int constants + *********************************************************************************************/ +// const be_constint_t webserver_constants[] = { +// { "BUTTON_CONFIGURATION", BUTTON_CONFIGURATION }, +// { "BUTTON_INFORMATION", BUTTON_INFORMATION }, +// { "BUTTON_MAIN", BUTTON_MAIN }, +// { "BUTTON_MANAGEMENT", BUTTON_MANAGEMENT }, +// { "BUTTON_MODULE", BUTTON_MODULE }, +// { "HTTP_ADMIN", HTTP_ADMIN }, +// { "HTTP_ANY", HTTP_ANY }, +// { "HTTP_GET", HTTP_GET }, +// { "HTTP_MANAGER", HTTP_MANAGER }, +// { "HTTP_MANAGER_RESET_ONLY", HTTP_MANAGER_RESET_ONLY }, +// { "HTTP_OFF", HTTP_OFF }, +// { "HTTP_OPTIONS", HTTP_OPTIONS }, +// { "HTTP_POST", HTTP_POST }, +// { "HTTP_USER", HTTP_USER }, +// }; + +/*********************************************************************************************\ + * Native functions mapped to Berry functions + * + * import webclient + * +\*********************************************************************************************/ +extern "C" { + // Berry: `` + // + int32_t wc_init(struct bvm *vm); + int32_t wc_init(struct bvm *vm) { + // int32_t argc = be_top(vm); // Get the number of arguments + WiFiClient * wcl = new WiFiClient(); + be_pushcomptr(vm, (void*) wcl); + be_setmember(vm, 1, ".w"); + HTTPClientLight * cl = new HTTPClientLight(); + cl->setUserAgent(USE_BERRY_WEBCLIENT_USERAGENT); + cl->setConnectTimeout(USE_BERRY_WEBCLIENT_TIMEOUT); // set default timeout + be_pushcomptr(vm, (void*) cl); + be_setmember(vm, 1, ".p"); + be_return_nil(vm); + } + + HTTPClientLight * wc_getclient(struct bvm *vm) { + be_getmember(vm, 1, ".p"); + void *p = be_tocomptr(vm, -1); + be_pop(vm, 1); + return (HTTPClientLight*) p; + } + + WiFiClient * wc_getwificlient(struct bvm *vm) { + be_getmember(vm, 1, ".w"); + void *p = be_tocomptr(vm, -1); + be_pop(vm, 1); + return (WiFiClient*) p; + } + + int32_t wc_deinit(struct bvm *vm); + int32_t wc_deinit(struct bvm *vm) { + // int32_t argc = be_top(vm); // Get the number of arguments + HTTPClientLight * cl = wc_getclient(vm); + if (cl != nullptr) { delete cl; } + be_pushnil(vm); + be_setmember(vm, 1, ".p"); + WiFiClient * wcl = wc_getwificlient(vm); + if (wcl != nullptr) { delete wcl; } + be_setmember(vm, 1, ".w"); + be_return_nil(vm); + } + + // wc.url_encode(string) -> string + int32_t wc_urlencode(struct bvm *vm); + int32_t wc_urlencode(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + const char * s = be_tostring(vm, 2); + String url = wc_UrlEncode(String(s)); + be_pushstring(vm, url.c_str()); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.begin(url:string) -> self + int32_t wc_begin(struct bvm *vm); + int32_t wc_begin(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc == 1 || !be_tostring(vm, 2)) { be_raise(vm, "attribute_error", "missing URL as string"); } + const char * url = be_tostring(vm, 2); + HTTPClientLight * cl = wc_getclient(vm); + // open connection + if (!cl->begin(url)) { + be_raise(vm, "value_error", "unsupported protocol"); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + + // wc.close(void) -> nil + int32_t wc_close(struct bvm *vm); + int32_t wc_close(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + cl->end(); + be_return_nil(vm); + } + + // wc.wc_set_timeouts([http_timeout_ms:int, tcp_timeout_ms:int]) -> self + int32_t wc_set_timeouts(struct bvm *vm); + int32_t wc_set_timeouts(struct bvm *vm) { + int32_t argc = be_top(vm); + HTTPClientLight * cl = wc_getclient(vm); + if (argc >= 2) { + cl->setTimeout(be_toint(vm, 2)); + } + if (argc >= 3) { + cl->setConnectTimeout(be_toint(vm, 3)); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + + // wc.set_useragent(user_agent:string) -> self + int32_t wc_set_useragent(struct bvm *vm); + int32_t wc_set_useragent(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2)) { + HTTPClientLight * cl = wc_getclient(vm); + const char * useragent = be_tostring(vm, 2); + cl->setUserAgent(String(useragent)); + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.wc_set_auth(auth:string | (user:string, password:string)) -> self + int32_t wc_set_auth(struct bvm *vm); + int32_t wc_set_auth(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && be_isstring(vm, 2) && (argc < 3 || be_isstring(vm, 3))) { + HTTPClientLight * cl = wc_getclient(vm); + const char * user = be_tostring(vm, 2); + if (argc == 2) { + cl->setAuthorization(user); + } else { + const char * password = be_tostring(vm, 3); + cl->setAuthorization(user, password); + } + be_pushvalue(vm, 1); + be_return(vm); /* return self */ + } + be_raise(vm, kTypeError, nullptr); + } + + // wc.addheader(name:string, value:string [, first:bool=false [, replace:bool=true]]) -> nil + int32_t wc_addheader(struct bvm *vm); + int32_t wc_addheader(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 3 && (be_isstring(vm, 2) || be_isstring(vm, 2))) { + HTTPClientLight * cl = wc_getclient(vm); + + const char * name = be_tostring(vm, 2); + const char * value = be_tostring(vm, 3); + bool first = false; + bool replace = true; + if (argc >= 4) { + first = be_tobool(vm, 4); + } + if (argc >= 5) { + replace = be_tobool(vm, 5); + } + // do the call + cl->addHeader(String(name), String(value), first, replace); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + + // cw.connected(void) -> bool + int32_t wc_connected(struct bvm *vm); + int32_t wc_connected(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + be_pushbool(vm, cl->connected()); + be_return(vm); /* return code */ + } + + // cw.GET(void) -> httpCode:int + int32_t wc_GET(struct bvm *vm); + int32_t wc_GET(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + uint32_t http_connect_time = millis(); + int32_t httpCode = cl->GET(); + if (httpCode <= -1000) { + AddLog(LOG_LEVEL_INFO, D_LOG_HTTP "TLS connection error: %d", -httpCode - 1000); + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "TLS connected in %d ms, stack low mark %d"), + millis() - http_connect_time, uxTaskGetStackHighWaterMark(nullptr)); + } + be_pushint(vm, httpCode); + be_return(vm); /* return code */ + } + + // wc.POST(string | bytes) -> httpCode:int + int32_t wc_POST(struct bvm *vm); + int32_t wc_POST(struct bvm *vm) { + int32_t argc = be_top(vm); + if (argc >= 2 && (be_isstring(vm, 2) || be_isbytes(vm, 2))) { + HTTPClientLight * cl = wc_getclient(vm); + const char * buf = nullptr; + size_t buf_len = 0; + if (be_isstring(vm, 2)) { // string + buf = be_tostring(vm, 2); + buf_len = strlen(buf); + } else { // bytes + buf = (const char*) be_tobytes(vm, 2, &buf_len); + } + uint32_t http_connect_time = millis(); + int32_t httpCode = cl->POST((uint8_t*)buf, buf_len); + if (httpCode <= -1000) { + AddLog(LOG_LEVEL_INFO, D_LOG_HTTP "TLS connection error: %d", -httpCode - 1000); + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_HTTP "TLS connected in %d ms, stack low mark %d"), + millis() - http_connect_time, uxTaskGetStackHighWaterMark(nullptr)); + } + be_pushint(vm, httpCode); + be_return(vm); /* return code */ + } + be_raise(vm, kTypeError, nullptr); + } + + int32_t wc_getstring(struct bvm *vm); + int32_t wc_getstring(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + int32_t sz = cl->getSize(); + // abort if we exceed 32KB size, things will not go well otherwise + if (sz >= 32767) { + be_raise(vm, "value_error", "response size too big (>32KB)"); + } + String payload = cl->getString(); + be_pushstring(vm, payload.c_str()); + cl->end(); // free allocated memory ~16KB + be_return(vm); /* return code */ + } + + int32_t wc_getsize(struct bvm *vm); + int32_t wc_getsize(struct bvm *vm) { + HTTPClientLight * cl = wc_getclient(vm); + be_pushint(vm, cl->getSize()); + be_return(vm); /* return code */ + } + +} + +#endif // USE_WEBCLIENT +#endif // USE_BERRY diff --git a/tasmota/xdrv_52_3_berry_webserver.ino b/tasmota/xdrv_52_3_berry_webserver.ino index 01775941b..2faa223ba 100644 --- a/tasmota/xdrv_52_3_berry_webserver.ino +++ b/tasmota/xdrv_52_3_berry_webserver.ino @@ -57,9 +57,12 @@ extern "C" { // we did have a match, low == high be_pushint(vm, webserver_constants[constant_idx].value); be_return(vm); + } else if (strcmp(needle, "init")) { + /* don't throw an exception if the 'init' function is requested */ + be_raise(vm, "attribute_error", be_pushfstring(vm, "module 'webserver' has no such attribute '%s'", needle)); } } - be_raise(vm, "attribute_error", "module 'webserver' has no such attribute"); + be_return_nil(vm); } } @@ -128,6 +131,21 @@ extern "C" { be_return(vm); } + // Berry: `webserver.redirect(string) -> nil` + // + int32_t w_webserver_redirect(struct bvm *vm); + int32_t w_webserver_redirect(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 1 && be_isstring(vm, 1)) { + const char * uri = be_tostring(vm, 1); + Webserver->sendHeader("Location", uri, true); + Webserver->send(302, "text/plain", ""); + // Webserver->sendHeader(F("Location"), String(F("http://")) + Webserver->client().localIP().toString(), true); + be_return_nil(vm); + } + be_raise(vm, kTypeError, nullptr); + } + // Berry: `webserver.content_start() -> nil` // int32_t w_webserver_content_start(struct bvm *vm); @@ -141,7 +159,7 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } - // Berry: `webserver.content_send() -> nil` + // Berry: `webserver.content_send(string) -> nil` // int32_t w_webserver_content_send(struct bvm *vm); int32_t w_webserver_content_send(struct bvm *vm) { @@ -223,6 +241,20 @@ extern "C" { be_raise(vm, kTypeError, nullptr); } + // Berry: `webserver.arg_name(int) -> string` + // + // takes an int (index 0..args-1) + int32_t w_webserver_arg_name(struct bvm *vm); + int32_t w_webserver_arg_name(struct bvm *vm) { + int32_t argc = be_top(vm); // Get the number of arguments + if (argc >= 1 && be_isint(vm, 1)) { + int32_t idx = be_toint(vm, 1); + be_pushstring(vm, Webserver->argName(idx).c_str()); + be_return(vm); + } + be_raise(vm, kTypeError, nullptr); + } + // Berry: `webserver.has_arg(name:string) -> bool` // int32_t w_webserver_has_arg(struct bvm *vm); diff --git a/tasmota/xdrv_52_7_berry_embedded.ino b/tasmota/xdrv_52_7_berry_embedded.ino index 37995bce2..89ca8e98a 100644 --- a/tasmota/xdrv_52_7_berry_embedded.ino +++ b/tasmota/xdrv_52_7_berry_embedded.ino @@ -26,7 +26,7 @@ \*********************************************************************************************/ const char berry_prog[] = - "" + "import persist " // create a 'ntv' module to allow functions to be registered in a safe namespace // "ntv = module('ntv') " @@ -91,23 +91,9 @@ const char berry_prog[] = "def load(f) return tasmota.load(f) end " #ifdef USE_LVGL - // instanciate singleton - // "class lvgl : lvgl_ntv " - // "end " - // "lv = lvgl() " "import lvgl as lv " - "_lvgl_cb = [ {}, {}, {}, {}, {}, {} ] " - "_lvgl_cb_obj = [ {}, {}, {}, {}, {}, {} ] " - "def _lvgl_cb_dispatch(idx, obj, v1, v2, v3, v4) " - // "import string print(string.format('>>> idx=%i obj=0x%08X v1=%i', idx, obj, v1)) " - "var func = _lvgl_cb[idx].find(obj) " - "var inst = _lvgl_cb_obj[idx].find(obj) " - "if func != nil " - "return func(inst, v1, v2, v3, v4) " - "end " - "return nil " - "end " - // array of 6 callback types, each with key (lv_obj pointer converted to int, closure) + // create the '_lvgl' global singleton + "_lvgl = LVGL_glob() " #endif // USE_LVGL diff --git a/tasmota/xdrv_52_9_berry.ino b/tasmota/xdrv_52_9_berry.ino index 4840f7a54..8940b807e 100644 --- a/tasmota/xdrv_52_9_berry.ino +++ b/tasmota/xdrv_52_9_berry.ino @@ -23,9 +23,11 @@ #define XDRV_52 52 #include +#include "be_vm.h" extern "C" { extern void be_load_custom_libs(bvm *vm); + extern void be_tracestack(bvm *vm); } const char kBrCommands[] PROGMEM = D_PRFX_BR "|" // prefix @@ -36,6 +38,8 @@ void (* const BerryCommand[])(void) PROGMEM = { CmndBrRun, }; +int32_t callBerryEventDispatcher(const char *type, const char *cmd, int32_t idx, const char *payload, uint32_t data_len = 0); + // // Sanity Check for be_top() // @@ -90,12 +94,13 @@ extern "C" { \*********************************************************************************************/ // // call a function (if exists) of type void -> void -bool callBerryRule(void) { +// If event == nullptr, then take XdrvMailbox.data +bool callBerryRule(const char *event) { if (berry.rules_busy) { return false; } berry.rules_busy = true; char * json_event = XdrvMailbox.data; bool serviced = false; - serviced = callBerryEventDispatcher(PSTR("rule"), nullptr, 0, XdrvMailbox.data); + serviced = callBerryEventDispatcher(PSTR("rule"), nullptr, 0, event ? event : XdrvMailbox.data); berry.rules_busy = false; return serviced; // TODO event not handled } @@ -111,6 +116,8 @@ void BerryDumpErrorAndClear(bvm *vm, bool berry_console) { if (top >= 2 && be_isstring(vm, -1) && be_isstring(vm, -2)) { if (berry_console) { berry_log_C(PSTR(D_LOG_BERRY "Exception> '%s' - %s"), be_tostring(berry.vm, -2), be_tostring(berry.vm, -1)); + be_tracestack(vm); + top = be_top(vm); // update top after dump } else { AddLog(LOG_LEVEL_ERROR, PSTR(D_LOG_BERRY "Exception> '%s' - %s"), be_tostring(berry.vm, -2), be_tostring(berry.vm, -1)); } @@ -190,7 +197,8 @@ bool callMethodObjectWithArgs(const char * objname, const char * method, size_t // call the event dispatcher from Tasmota object -int32_t callBerryEventDispatcher(const char *type, const char *cmd, int32_t idx, const char *payload) { +// if data_len is non-zero, the event is also sent as raw `bytes()` object because the string may lose data +int32_t callBerryEventDispatcher(const char *type, const char *cmd, int32_t idx, const char *payload, uint32_t data_len) { int32_t ret = 0; bvm *vm = berry.vm; @@ -205,7 +213,13 @@ int32_t callBerryEventDispatcher(const char *type, const char *cmd, int32_t idx, be_pushstring(vm, cmd != nullptr ? cmd : ""); be_pushint(vm, idx); be_pushstring(vm, payload != nullptr ? payload : "{}"); // empty json - ret = be_pcall(vm, 5); // 5 arguments + if (data_len > 0) { + be_pushbytes(vm, payload, data_len); // if data_len is set, we also push raw bytes + ret = be_pcall(vm, 6); // 6 arguments + be_pop(vm, 1); + } else { + ret = be_pcall(vm, 5); // 5 arguments + } if (ret != 0) { BerryDumpErrorAndClear(vm, false); // log in Tasmota console only return ret; @@ -245,6 +259,10 @@ void BerryObservability(bvm *vm, int event...) { int32_t vm_usage2 = va_arg(param, int32_t); uint32_t gc_elapsed = millis() - gc_time; AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_BERRY "GC from %i to %i bytes (in %d ms)"), vm_usage, vm_usage2, gc_elapsed); + // make new threshold tighter when we reach high memory usage + if (!UsePSRAM() && vm->gc.threshold > 20*1024) { + vm->gc.threshold = vm->gc.usage + 10*1024; // increase by only 10 KB + } } break; default: break; @@ -267,6 +285,8 @@ void BerryInit(void) { do { berry.vm = be_vm_new(); /* create a virtual machine instance */ be_set_obs_hook(berry.vm, &BerryObservability); + comp_set_named_gbl(berry.vm); /* Enable named globals in Berry compiler */ + comp_set_strict(berry.vm); /* Enable strict mode in Berry compiler */ be_load_custom_libs(berry.vm); // Register functions @@ -334,7 +354,7 @@ void BrLoad(const char * script_name) { bool loaded = be_tobool(berry.vm, -2); // did it succeed? be_pop(berry.vm, 2); if (loaded) { - AddLog(LOG_LEVEL_INFO, D_LOG_BERRY "sucessfully loaded '%s'", script_name); + AddLog(LOG_LEVEL_INFO, D_LOG_BERRY "successfully loaded '%s'", script_name); } else { AddLog(LOG_LEVEL_INFO, D_LOG_BERRY "no '%s'", script_name); } @@ -720,10 +740,10 @@ bool Xdrv52(uint8_t function) // Berry wide commands and events case FUNC_RULES_PROCESS: - result = callBerryRule(); + result = callBerryRule(nullptr); break; case FUNC_MQTT_DATA: - result = callBerryEventDispatcher(PSTR("mqtt_data"), XdrvMailbox.topic, 0, XdrvMailbox.data); + result = callBerryEventDispatcher(PSTR("mqtt_data"), XdrvMailbox.topic, 0, XdrvMailbox.data, XdrvMailbox.data_len); break; case FUNC_EVERY_50_MSECOND: callBerryEventDispatcher(PSTR("every_50ms"), nullptr, 0, nullptr); @@ -751,11 +771,18 @@ bool Xdrv52(uint8_t function) } else { WSContentSend_P(HTTP_BTN_BERRY_CONSOLE); callBerryEventDispatcher(PSTR("web_add_button"), nullptr, 0, nullptr); + callBerryEventDispatcher(PSTR("web_add_console_button"), nullptr, 0, nullptr); } break; case FUNC_WEB_ADD_MAIN_BUTTON: callBerryEventDispatcher(PSTR("web_add_main_button"), nullptr, 0, nullptr); break; + case FUNC_WEB_ADD_MANAGEMENT_BUTTON: + callBerryEventDispatcher(PSTR("web_add_management_button"), nullptr, 0, nullptr); + break; + case FUNC_WEB_ADD_BUTTON: + callBerryEventDispatcher(PSTR("web_add_config_button"), nullptr, 0, nullptr); + break; case FUNC_WEB_ADD_HANDLER: callBerryEventDispatcher(PSTR("web_add_handler"), nullptr, 0, nullptr); WebServer_on(PSTR("/bc"), HandleBerryConsole); diff --git a/tasmota/xdrv_54_lvgl.ino b/tasmota/xdrv_54_lvgl.ino index b95318e4d..becec3551 100644 --- a/tasmota/xdrv_54_lvgl.ino +++ b/tasmota/xdrv_54_lvgl.ino @@ -36,21 +36,25 @@ #include "lv_png.h" #endif // USE_LVGL_PNG_DECODER +#ifdef USE_LVGL_FREETYPE + #include "lv_freetype.h" +#endif // USE_LVGL_FREETYPE + Adafruit_LvGL_Glue * glue; // ************************************************** // Logging // ************************************************** #if LV_USE_LOG -static void lvbe_debug(lv_log_level_t level, const char *file, uint32_t line, const char *fname, const char *msg); -static void lvbe_debug(lv_log_level_t level, const char *file, uint32_t line, const char *fname, const char *msg) { +#ifdef USE_BERRY +static void lvbe_debug(const char *msg); +static void lvbe_debug(const char *msg) { be_writebuffer("LVG: ", sizeof("LVG: ")); - be_writebuffer(fname, strlen(fname)); - be_writebuffer(" -> ", sizeof(" -> ")); be_writebuffer(msg, strlen(msg)); be_writebuffer("\n", sizeof("\n")); } #endif +#endif /************************************************************ * Main screen refresh function @@ -193,8 +197,8 @@ extern "C" { ************************************************************/ #ifdef USE_UFILESYS -static lv_fs_res_t lvbe_fs_open(lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode); -static lv_fs_res_t lvbe_fs_open(lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) { +static void * lvbe_fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode); +static void * lvbe_fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode) { // AddLog(LOG_LEVEL_INFO, "LVG: lvbe_fs_open(%p, %p, %s, %i) %i", drv, file_p, path, mode, sizeof(File)); const char * modes = nullptr; switch (mode) { @@ -211,7 +215,7 @@ static lv_fs_res_t lvbe_fs_open(lv_fs_drv_t * drv, void * file_p, const char * p if (modes == nullptr) { AddLog(LOG_LEVEL_INFO, "LVG: fs_open, unsupported mode %d", mode); - return LV_FS_RES_INV_PARAM; + return nullptr; } // Add "/" prefix @@ -223,10 +227,9 @@ static lv_fs_res_t lvbe_fs_open(lv_fs_drv_t * drv, void * file_p, const char * p // AddLog(LOG_LEVEL_INFO, "LVG: F=%*_H", sizeof(f), &f); if (f) { File * f_ptr = new File(f); // copy to dynamic object - *((File**)file_p) = f_ptr; - return LV_FS_RES_OK; + return f_ptr; } else { - return LV_FS_RES_NOT_EX; + return nullptr; } } @@ -275,11 +278,19 @@ static lv_fs_res_t lvbe_fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos return LV_FS_RES_OK; } -static lv_fs_res_t lvbe_fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos); -static lv_fs_res_t lvbe_fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos) { +static lv_fs_res_t lvbe_fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence); +static lv_fs_res_t lvbe_fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence) { // AddLog(LOG_LEVEL_INFO, "LVG: lvbe_fs_seek(%p, %p, %i)", drv, file_p, pos); File * f_ptr = (File*) file_p; - if (f_ptr->seek(pos)) { + SeekMode seek; + switch (whence) { + case LV_FS_SEEK_SET: seek = SeekSet; break; + case LV_FS_SEEK_CUR: seek = SeekCur; break; + case LV_FS_SEEK_END: seek = SeekEnd; break; + default: return LV_FS_RES_UNKNOWN; + } + + if (f_ptr->seek(pos, seek)) { return LV_FS_RES_OK; } else { return LV_FS_RES_UNKNOWN; @@ -293,13 +304,6 @@ static lv_fs_res_t lvbe_fs_size(lv_fs_drv_t * drv, void * file_p, uint32_t * siz *size_p = f_ptr->size(); return LV_FS_RES_OK; } - -static lv_fs_res_t lvbe_fs_remove(lv_fs_drv_t * drv, const char *path); -static lv_fs_res_t lvbe_fs_remove(lv_fs_drv_t * drv, const char *path) { - // AddLog(LOG_LEVEL_INFO, "LVG: lvbe_fs_remove(%p, %s)", drv, path); - dfsp->remove(path); - return LV_FS_RES_OK; -} #endif // USE_UFILESYS /*********************************************************************************************\ @@ -397,13 +401,13 @@ void start_lvgl(const char * uconfig) { // Set the default background color of the display // This is normally overriden by an opaque screen on top #ifdef USE_BERRY - lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, lv_color_from_uint32(USE_LVGL_BG_DEFAULT)); - lv_obj_set_style_local_bg_opa(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); -#endif + lv_obj_set_style_bg_color(lv_scr_act(), lv_color_from_uint32(USE_LVGL_BG_DEFAULT), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_opa(lv_scr_act(), LV_OPA_COVER, LV_PART_MAIN | LV_STATE_DEFAULT); #if LV_USE_LOG lv_log_register_print_cb(lvbe_debug); #endif // LV_USE_LOG +#endif #ifdef USE_UFILESYS // Add file system mapping @@ -411,8 +415,6 @@ void start_lvgl(const char * uconfig) { lv_fs_drv_init(&drv); /*Basic initialization*/ drv.letter = 'A'; /*An uppercase letter to identify the drive */ - drv.file_size = 0; /*Size required to store a file object*/ - drv.rddir_size = 0; /*Size required to store a directory object (used by dir_open/close/read)*/ drv.ready_cb = nullptr; /*Callback to tell if the drive is ready to use */ drv.open_cb = &lvbe_fs_open; /*Callback to open a file */ drv.close_cb = &lvbe_fs_close; /*Callback to close a file */ @@ -420,16 +422,10 @@ void start_lvgl(const char * uconfig) { drv.write_cb = &lvbe_fs_write; /*Callback to write a file */ drv.seek_cb = &lvbe_fs_seek; /*Callback to seek in a file (Move cursor) */ drv.tell_cb = &lvbe_fs_tell; /*Callback to tell the cursor position */ - drv.trunc_cb = nullptr; /*Callback to delete a file */ - drv.size_cb = &lvbe_fs_size; /*Callback to tell a file's size */ - drv.rename_cb = nullptr; /*Callback to rename a file */ - drv.remove_cb = &lvbe_fs_remove; /*Callback to remove a file */ drv.dir_open_cb = nullptr; /*Callback to open directory to read its content */ drv.dir_read_cb = nullptr; /*Callback to read a directory's content */ drv.dir_close_cb = nullptr; /*Callback to close a directory */ - - drv.free_space_cb = nullptr; /*Callback to tell free space on the drive */ // drv.user_data = nullptr; /*Any custom data if required*/ lv_fs_drv_register(&drv); /*Finally register the drive*/ @@ -440,13 +436,13 @@ void start_lvgl(const char * uconfig) { // initialize the FreeType renderer lv_freetype_init(USE_LVGL_FREETYPE_MAX_FACES, USE_LVGL_FREETYPE_MAX_SIZES, - psramFound() ? USE_LVGL_FREETYPE_MAX_BYTES_PSRAM : USE_LVGL_FREETYPE_MAX_BYTES); + UsePSRAM() ? USE_LVGL_FREETYPE_MAX_BYTES_PSRAM : USE_LVGL_FREETYPE_MAX_BYTES); #endif #ifdef USE_LVGL_PNG_DECODER lv_png_init(); #endif // USE_LVGL_PNG_DECODER - if (psramFound()) { + if (UsePSRAM()) { lv_img_cache_set_size(LV_IMG_CACHE_DEF_SIZE_PSRAM); } diff --git a/tasmota/xdrv_57_1_tasmesh_support.ino b/tasmota/xdrv_57_1_tasmesh_support.ino new file mode 100644 index 000000000..81949af0f --- /dev/null +++ b/tasmota/xdrv_57_1_tasmesh_support.ino @@ -0,0 +1,391 @@ +/* + xdrv_57_1_tasmesh_support.ino - Mesh via ESP-Now support for Tasmota + + Copyright (C) 2021 Christian Baars and Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_TASMESH + +#include +#include + +#ifdef ESP32 +#include +#include +#else +#include +#endif //ESP32 + +/*********************************************************************************************\ + * constants +\*********************************************************************************************/ + +#define D_CMND_MESH "MESH" + +#define MESH_PAYLOAD_SIZE 160 // Default 160 - with header of 20 bytes and 16 bytes tag, stays below 200 bytes, which is reported to work with ESP8266 +#define MESH_TOPICSZ 64 // Max supported topic size +#define MESH_BUFFERS 26 // (6) Max buffers number for splitted messages +#define MESH_MAX_PACKETS 3 // (3) Max number of packets +#define MESH_REFRESH 50 // Number of ms + +// ------------------------------------------------------------------------------------------------------------ +// | MAC Header | Category Code | Organization Identifier | Random Values | Vendor Specific Content | FCS | +// ------------------------------------------------------------------------------------------------------------ +// 24 bytes 1 byte 3 bytes 4 bytes 7~255 bytes 4 bytes +// ------------------------------------------------------------------------------- +// | Element ID | Length | Organization Identifier | Type | Version | Body | +// ------------------------------------------------------------------------------- +// 1 byte 1 byte 3 bytes 1 byte 1 byte 0~250 bytes + +struct mesh_packet_t { + uint8_t sender[6]; // MAC + uint8_t receiver[6]; // MAC + uint32_t counter:4; // Rolling counter to identify a packet + uint32_t type:6; // Command, Mqtt, ... + uint32_t chunks:6; // Number of chunks + uint32_t chunk:6; // Chunk number + uint32_t chunkSize:8; // Chunk size + uint32_t TTL:2; // Time to live, counting down + union { + uint32_t senderTime; // UTC-timestamp from every sender in the MESH + uint32_t peerIndex; // Only for resending in the MESH + }; + uint8_t tag[16]; // Tag for de/encryption + uint8_t payload[MESH_PAYLOAD_SIZE]; +} __attribute__((packed)); + +struct mesh_packet_header_t { // ToDo: Maybe, we do not need this + uint8_t sender[6]; // MAC + uint8_t receiver[6]; // MAC + uint32_t counter:4; // Rolling counter to identify a packet + uint32_t type:6; // Command, Mqtt, ... + uint32_t chunks:6; // Number of chunks + uint32_t chunk:6; // Chunk number + uint32_t chunkSize:8; // Chunk size + uint32_t TTL:2; // Time to live, counting down + union { + uint32_t senderTime; // UTC-timestamp from every sender in the MESH + uint32_t peerIndex; // Only for resending in the MESH + }; + uint8_t tag[16]; // Tag for de/encryption +} __attribute__((packed)); + +struct mesh_peer_t { + uint8_t MAC[6]; + uint32_t lastMessageFromPeer; // Time of last message from peer +#ifdef ESP32 + char topic[MESH_TOPICSZ]; +#endif //ESP32 +}; + +struct mesh_flags_t { + uint8_t brokerNeedsTopic:1; + uint8_t nodeGotTime:1; + uint8_t nodeWantsTime:1; + uint8_t nodeWantsTimeASAP:1; +}; + +struct mesh_packet_combined_t { + mesh_packet_header_t header; + uint32_t receivedChunks; // Bitmask for up to 32 chunks + char raw[MESH_PAYLOAD_SIZE * MESH_BUFFERS]; +}; + +struct mesh_first_header_bytes { // TODO: evaluate random 4-byte-value of pre-packet + uint8_t raw[15]; +} __attribute__((packed));; + +struct { + uint32_t lastMessageFromBroker; // Time of last message from broker + uint32_t lmfap; // Yime of last message from any peer + uint8_t broker[6] = { 0 }; + uint8_t key[32]; + uint8_t role; + uint8_t channel; // Wifi channel + uint8_t interval; + uint8_t currentTopicSize; + mesh_flags_t flags; + mesh_packet_t sendPacket; + std::vector peers; + std::queue packetToResend; + std::queue packetToConsume; + std::vector packetsAlreadySended; + std::vector packetsAlreadyReceived; + std::vector multiPackets; +#ifdef ESP32 + std::vector lastTeleMsgs; +#endif //ESP32 +} MESH; + +/*********************************************************************************************\ + * Declarations for functions with custom types +\*********************************************************************************************/ + +void MESHsendPacket(mesh_packet_t *_packet); +bool MESHencryptPayload(mesh_packet_t *_packet, int _encrypt); // 1 encryption, 0 decryption + +/*********************************************************************************************\ + * enumerations +\*********************************************************************************************/ + +enum MESH_Commands { // commands useable in console or rules + CMND_MESH_BROKER, // start broker on ESP32 + CMND_MESH_NODE, // start node and connect to broker based on MAC address + CMND_MESH_PEER, // add node to peer list of a broker or node + CMND_MESH_CHANNEL}; // set wifi channel on node (the broker gets it automatically from the AP) + +enum MESH_Role { + ROLE_NONE = 0, // not initialized + ROLE_BROKER, // ESP32 will connect mesh to WLAN + ROLE_NODE_FULL, // Node will listen and resend every message for MESH functionality + ROLE_NODE_SMALL // Node will only talk to the broker +}; + +enum MESH_Packet_Type { // Type of packet + PACKET_TYPE_TIME = 0, // + PACKET_TYPE_PEERLIST, // send all kown peers, broker is always 0 + PACKET_TYPE_COMMAND, // not used yet + PACKET_TYPE_REGISTER_NODE, // register a node with encrypted broker-MAC, announce mqtt topic to ESP32-proxy - broker will send time ASAP + PACKET_TYPE_REFRESH_NODE, // refresh node infos with encrypted broker-MAC, announce mqtt topic to ESP32-proxy - broker will send time slightly delayed + PACKET_TYPE_MQTT, // send regular mqtt messages, single or multipackets + PACKET_TYPE_WANTTOPIC // the broker has no topic for this peer/node +}; + +/*********************************************************************************************\ + * +\*********************************************************************************************/ + +#ifdef ESP32 + +void MESHsendTime(void) { // Only from broker to nodes + MESH.sendPacket.counter++; + MESH.sendPacket.type = PACKET_TYPE_TIME; + MESH.sendPacket.TTL = 1; + // memcpy(MESH.sendPacket.receiver,MESH.peers[_peerNumber].MAC,6); + MESH.sendPacket.senderTime = Rtc.utc_time; + MESH.sendPacket.payload[0] = 0; + // mesh_flags_t *_flags = (mesh_flags_t *)MESH.sendPacket.payload; + // if(MESH.peers[_peerNumber].topic[0]==0){ + // AddLog(LOG_LEVEL_INFO, PSTR("MSH: Broker wants topic from peer: %u"), _peerNumber); + // _flags->brokerNeedsTopic = 1; + // } + MESH.sendPacket.chunkSize = 0; + MESH.sendPacket.chunks = 0; + MESHsendPacket(&MESH.sendPacket); +} + +void MESHdemandTopic(uint32_t _peerNumber) { + MESH.sendPacket.counter++; + MESH.sendPacket.type = PACKET_TYPE_WANTTOPIC; + MESH.sendPacket.TTL = 2; + MESH.sendPacket.payload[0] = 0; + MESH.sendPacket.chunkSize = 0; + MESH.sendPacket.chunks = 0; + memcpy(MESH.sendPacket.receiver,MESH.peers[_peerNumber].MAC,6); + MESHsendPacket(&MESH.sendPacket); +} + +#endif //ESP32 + +void MESHsendPeerList(void) { // We send this list only to the peers, that can directly receive it + MESH.sendPacket.counter++; + MESH.sendPacket.type = PACKET_TYPE_PEERLIST; + MESH.sendPacket.senderTime = Rtc.utc_time; + uint32_t _idx = 0; + for (auto &_peer : MESH.peers) { + memcpy(MESH.sendPacket.payload + _idx, _peer.MAC, 6); + _idx += 6; + } + if (0 == _idx) { return; } + + MESH.sendPacket.chunk = 0; + MESH.sendPacket.chunks = 1; + MESH.sendPacket.chunkSize = _idx; + MESH.sendPacket.TTL = 1; +// AddLogBuffer(LOG_LEVEL_INFO, MESH.sendPacket.payload, MESH.sendPacket.chunkSize); + MESHsendPacket(&MESH.sendPacket); +} + +bool MESHcheckPeerList(const uint8_t *MAC) { + bool success = false; + for (auto &_peer : MESH.peers) { + if (memcmp(_peer.MAC, MAC, 6) == 0) { + _peer.lastMessageFromPeer = millis(); + return true; + } + } + return false; +} + +uint8_t MESHcountPeers(void) { +#ifdef ESP32 + esp_now_peer_num_t _peernum; + esp_now_get_peer_num(&_peernum); + uint8_t _num = _peernum.total_num; +#else + uint8_t _num; + uint8_t _numEnc; // wo don't care + esp_now_get_cnt_info(&_num, &_numEnc); +#endif +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Peers %u"), _num); + return _num; +} + +int MESHaddPeer(uint8_t *_MAC ) { + mesh_peer_t _newPeer; + memcpy(_newPeer.MAC, _MAC, 6); + _newPeer.lastMessageFromPeer = millis(); +#ifdef ESP32 + _newPeer.topic[0] = 0; +#endif + MESH.peers.push_back(_newPeer); +#ifdef ESP32 + std::string _msg = "{\"Init\":1}"; // Init with a simple JSON only while developing + MESH.lastTeleMsgs.push_back(_msg); // We must keep this vector in sync with the peers-struct on the broker regarding the indices +#endif //ESP32 + int err; +#ifdef ESP32 + esp_now_peer_info_t _peer; + _peer.channel = MESH.channel; + _peer.encrypt = false; + _peer.ifidx = (wifi_interface_t)ESP_IF_WIFI_AP; + memcpy(_peer.peer_addr, _MAC, 6); + err = esp_now_add_peer(&_peer); +#else + err = esp_now_add_peer(_MAC, ESP_NOW_ROLE_COMBO, MESH.channel, NULL, 0); +#endif + if (0 == err) { + char _peerMAC[18]; + ToHex_P(_MAC, 6, _peerMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Peer %s added successful"), _peerMAC); + #ifdef ESP32 + if (ROLE_BROKER == MESH.role) { MESHsendTime(); } + #endif //ESP32 + Response_P(PSTR("{\"%s\":{\"Peers\":%u}}"), D_CMND_MESH, MESH.peers.size()); + XdrvRulesProcess(0); + return err; + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Failed to add peer %d"), err); + } + return err; +} + +//helper functions +void MESHstripColon(char* _string) { + uint32_t _length = strlen(_string); + uint32_t _index = 0; + while (_index < _length) { + char c = _string[_index]; + if (c == ':') { + memmove(_string + _index, _string + _index +1, _length - _index); + } + _index++; + } + _string[_index] = 0; +} + +void MESHHexStringToBytes(char* _string, uint8_t _MAC[]) { //uppercase + MESHstripColon(_string); + UpperCase(_string, _string); + uint32_t index = 0; + uint32_t _end = strlen(_string); + memset(_MAC, 0, _end / 2); + while (index < _end) { + char c = _string[index]; + uint8_t value = 0; + if ((c >= '0') && (c <= '9')) { + value = (c - '0'); + } + else if ((c >= 'A') && (c <= 'F')) { + value = (10 + (c - 'A')); + } + _MAC[(index / 2)] += value << (((index + 1) % 2) * 4); + index++; + } +} + +void MESHsendPacket(mesh_packet_t *_packet) { + MESHencryptPayload(_packet, 1); +// esp_now_send(_packet->receiver, (uint8_t *)_packet, sizeof(MESH.sendPacket) - MESH_PAYLOAD_SIZE + _packet->chunkSize); + esp_now_send(NULL, (uint8_t *)_packet, sizeof(MESH.sendPacket) - MESH_PAYLOAD_SIZE + _packet->chunkSize); //NULL -> broadcast +} + +void MESHsetKey(uint8_t* _key) { // Must be 32 bytes!!! + char* _pw = SettingsText(SET_STAPWD1 + Settings->sta_active); + size_t _length = strlen(_pw); + memset(_key, 0, 32); + if (_length > 32) { _length = 32; } + memcpy(_key, _pw, _length); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: set crypto key to PASSWORD1")); +} + +bool MESHencryptPayload(mesh_packet_t *_packet, int _encrypt) { + +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: will encrypt: %u"), _encrypt); + + size_t _size = _packet->chunkSize; + char _tag[16]; + +// AddLog(LOG_LEVEL_DEBUG, PSTR("cc: %u, _size: %u"), _counter,_size); +// AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t*)_tag,16); + + br_chacha20_run bc = br_chacha20_ct_run; + + br_poly1305_ctmul32_run((void*)MESH.key, (const void *)_packet, + (void *)_packet->payload, _size, _packet->receiver+6, 2, + _tag, bc, _encrypt); + +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: encryption done ")); + + if (_encrypt==1) { + memcpy(_packet->tag, _tag, 16); +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: payload encrypted")); + return true; + } + if (memcmp(_packet->tag, _tag, 16) == 0) { +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: payload decrypted")); + return true; + } + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: payload decryption error")); + return false; +} + +void MESHsetSleep(void) { + if (MESH.role && (Settings->sleep > MESH.interval)) { + Settings->sleep = MESH.interval; + TasmotaGlobal.sleep = MESH.interval; + } +} + +void MESHsetWifi(bool state) { +#ifdef ESP8266 // Only ESP8266 as ESP32 is a broker and needs Wifi + if (state) { // Wifi On + Settings->flag4.network_wifi = 1; // (Re-)enable wifi as long as Mesh is not enabled +// TasmotaGlobal.global_state.wifi_down = 0; + Settings->flag.global_state = 0; // (Wifi, MQTT) Control link led blinking (1) + } else { // Wifi Off and use ESP-NOW + Settings->flag4.network_wifi = 0; // The "old" wifi off command + TasmotaGlobal.global_state.wifi_down = 1; + Settings->flag.global_state = 1; // (Wifi, MQTT) Control link led blinking (1) + } +#endif // ESP8266 +} + +uint32_t MESHmaxPayloadSize(void) { + return MESH_PAYLOAD_SIZE - MESH.currentTopicSize -1; +} + +#endif //USE_TASMESH diff --git a/tasmota/xdrv_57_9_tasmesh.ino b/tasmota/xdrv_57_9_tasmesh.ino new file mode 100644 index 000000000..d576ccfaf --- /dev/null +++ b/tasmota/xdrv_57_9_tasmesh.ino @@ -0,0 +1,846 @@ +/* + xdrv_57_tasmesh.ino - Mesh support for Tasmota using ESP-Now + + Copyright (C) 2021 Christian Baars, Federico Leoni and Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* + -------------------------------------------------------------------------------------------- + Version yyyymmdd Action Description + -------------------------------------------------------------------------------------------- + 0.9.5.1 20210622 integrate Expand number of chunks to satisfy larger MQTT messages + Refactor to latest Tasmota standards + --- + 0.9.4.1 20210503 integrate Add some minor tweak for channel management by Federico Leoni + --- + 0.9.0.0 20200927 started From scratch by Christian Baars +*/ + +#ifdef USE_TASMESH + +/*********************************************************************************************\ +* Build a mesh of nodes using ESP-Now +* Connect it through an ESP32-broker to WLAN +\*********************************************************************************************/ + +#define XDRV_57 57 + +/*********************************************************************************************\ + * Callbacks +\*********************************************************************************************/ + +#ifdef ESP32 + +void CB_MESHDataSent(const uint8_t *MAC, esp_now_send_status_t sendStatus); +void CB_MESHDataSent(const uint8_t *MAC, esp_now_send_status_t sendStatus) { + char _destMAC[18]; + ToHex_P(MAC, 6, _destMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Sent to %s status %d"), _destMAC, sendStatus); +} + +void CB_MESHDataReceived(const uint8_t *MAC, const uint8_t *packet, int len) { + static bool _locked = false; + if (_locked) { return; } + + _locked = true; + char _srcMAC[18]; + ToHex_P(MAC, 6, _srcMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Rcvd from %s"), _srcMAC); + mesh_packet_t *_recvPacket = (mesh_packet_t*)packet; + if ((_recvPacket->type == PACKET_TYPE_REGISTER_NODE) || (_recvPacket->type == PACKET_TYPE_REFRESH_NODE)) { + if (MESHcheckPeerList((const uint8_t *)MAC) == false) { + MESHencryptPayload(_recvPacket, 0); //decrypt it and check + if (memcmp(_recvPacket->payload, MESH.broker, 6) == 0) { + MESHaddPeer((uint8_t*)MAC); +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Rcvd topic %s"), (char*)_recvPacket->payload + 6); +// AddLogBuffer(LOG_LEVEL_INFO,(uint8_t *)&MESH.packetToConsume.front().payload,MESH.packetToConsume.front().chunkSize+5); + for (auto &_peer : MESH.peers) { + if (memcmp(_peer.MAC, _recvPacket->sender, 6) == 0) { + strcpy(_peer.topic, (char*)_recvPacket->payload + 6); + MESHsubscribe((char*)&_peer.topic); + _locked = false; + return; + } + } + } else { + char _cryptMAC[18]; + ToHex_P(_recvPacket->payload, 6, _cryptMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Peer %s denied, wrong MAC %s"), _srcMAC, _cryptMAC); + _locked = false; + return; + } + } else { + if (_recvPacket->type == PACKET_TYPE_REGISTER_NODE) { + MESH.flags.nodeWantsTimeASAP = 1; //this could happen after wake from deepsleep on battery powered device + } else { + MESH.flags.nodeWantsTime = 1; + } + } + } + MESH.lmfap = millis(); + if (MESHcheckPeerList(MAC) == true){ + MESH.packetToConsume.push(*_recvPacket); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Packet %d from %s to queue"), MESH.packetToConsume.size(), _srcMAC); + } + _locked = false; +} + +#else // ESP8266 + +void CB_MESHDataSent(uint8_t *MAC, uint8_t sendStatus) { + char _destMAC[18]; + ToHex_P(MAC, 6, _destMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Sent to %s status %d"), _destMAC, sendStatus); +} + +void CB_MESHDataReceived(uint8_t *MAC, uint8_t *packet, uint8_t len) { + MESH.lmfap = millis(); //any peer + if (memcmp(MAC, MESH.broker, 6) == 0) { + MESH.lastMessageFromBroker = millis(); //directly from the broker + } + mesh_packet_t *_recvPacket = (mesh_packet_t*)packet; + switch (_recvPacket->type) { + case PACKET_TYPE_TIME: + Rtc.utc_time = _recvPacket->senderTime; + Rtc.user_time_entry = true; + MESH.lastMessageFromBroker = millis(); + if (MESH.flags.nodeGotTime == 0) { + RtcSync(); + TasmotaGlobal.rules_flag.system_boot = 1; // for now we consider the node booted and let trigger system#boot on RULES + } + MESH.flags.nodeGotTime = 1; + //Wifi.retry = 0; + // Response_P(PSTR("{\"%s\":{\"Time\":1}}"), D_CMND_MESH); //got the time, now we can publish some sensor data + // XdrvRulesProcess(); + break; + case PACKET_TYPE_PEERLIST: + MESH.packetToConsume.push(*_recvPacket); + return; + break; + default: + // nothing for now; + break; + } + if (memcmp(_recvPacket->receiver, MESH.sendPacket.sender, 6) != 0) { //MESH.sendPacket.sender simply stores the MAC of the node + if (ROLE_NODE_SMALL == MESH.role) { + return; // a 'small node' does not perform mesh functions + } + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Packet to resend ...")); + MESH.packetToResend.push(*_recvPacket); + return; + } else { + if (_recvPacket->type == PACKET_TYPE_WANTTOPIC) { + MESH.flags.brokerNeedsTopic = 1; + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Broker needs topic ...")); + return; //nothing left to be done + } + // for(auto &_message : MESH.packetsAlreadyReceived){ + // if(memcmp(_recvPacket,_message,15==0)){ + // AddLog(LOG_LEVEL_INFO, PSTR("MSH: Packet already received")); + // return; + // } + // } + // MESH.packetsAlreadyReceived.push_back((mesh_packet_header_t*) _recvPacket); + // AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Packet to consume ...")); + MESH.packetToConsume.push(*_recvPacket); + } +} + +#endif // ESP32 + +/*********************************************************************************************\ + * init driver +\*********************************************************************************************/ + +void MESHInit(void) { + MESH.interval = MESH_REFRESH; + MESH.role = ROLE_NONE; + MESH.packetsAlreadyReceived.reserve(5); + MESH.peers.reserve(10); + MESH.multiPackets.reserve(2); + + MESH.sendPacket.counter = 0; + MESH.sendPacket.chunks = 1; + MESH.sendPacket.chunk = 0; + MESH.sendPacket.type = PACKET_TYPE_TIME; + MESH.sendPacket.TTL = 2; + + MESHsetWifi(1); // (Re-)enable wifi as long as Mesh is not enabled + + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Initialized")); +} + +void MESHdeInit(void) { +#ifdef ESP8266 // only ESP8266, ESP32 as a broker should not use deepsleep + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Stopping")); + // TODO: degister from the broker, so he can stop MQTT-proxy + esp_now_deinit(); +#endif // ESP8266 +} + +/*********************************************************************************************\ + * MQTT proxy functions +\*********************************************************************************************/ + +#ifdef ESP32 + +/** + * @brief Subscribes as a proxy + * + * @param topic - received from the referring node + */ +void MESHsubscribe(char *topic) { + char stopic[TOPSZ]; + GetTopic_P(stopic, CMND, topic, PSTR("#")); + MqttSubscribe(stopic); +} + +void MESHunsubscribe(char *topic) { + char stopic[TOPSZ]; + GetTopic_P(stopic, CMND, topic, PSTR("#")); + MqttUnsubscribe(stopic); +} + +void MESHconnectMQTT(void){ + for (auto &_peer : MESH.peers) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Reconnect topic %s"), _peer.topic); + if (_peer.topic[0] != 0) { + MESHsubscribe(_peer.topic); + } + } +} + +/** + * @brief Intercepts mqtt message, that the broker (ESP32) subscribes to as a proxy for a node. + * Is called from xdrv_02_mqtt.ino. Will send the message in the payload via ESP-NOW. + * + * @param _topic + * @param _data + * @param data_len + * @return true + * @return false + */ +bool MESHinterceptMQTTonBroker(char* _topic, uint8_t* _data, unsigned int data_len) { + if (MESH.role != ROLE_BROKER) { return false; } + + char stopic[TOPSZ]; +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Intercept topic %s"), _topic); + for (auto &_peer : MESH.peers) { + GetTopic_P(stopic, CMND, _peer.topic, PSTR("")); //cmnd/topic/ + if (strlen(_topic) != strlen(_topic)) { + return false; // prevent false result when _topic is the leading substring of stopic + } + if (memcmp(_topic, stopic, strlen(stopic)) == 0) { + MESH.sendPacket.chunkSize = strlen(_topic) +1; + + if (MESH.sendPacket.chunkSize + data_len > MESH_PAYLOAD_SIZE) { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Intercept payload oversized %d"), data_len); + return false; + } + + memcpy(MESH.sendPacket.receiver, _peer.MAC, 6); + memcpy(MESH.sendPacket.payload, _topic, MESH.sendPacket.chunkSize); + memcpy(MESH.sendPacket.payload + MESH.sendPacket.chunkSize, _data, data_len); + MESH.sendPacket.chunkSize += data_len; + MESH.sendPacket.chunks = 1; + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Intercept payload '%s'"), MESH.sendPacket.payload); + MESH.sendPacket.type = PACKET_TYPE_MQTT; + MESH.sendPacket.senderTime = Rtc.utc_time; + MESHsendPacket(&MESH.sendPacket); + // int result = esp_now_send(MESH.sendPacket.receiver, (uint8_t *)&MESH.sendPacket, (sizeof(MESH.sendPacket))-(MESH_PAYLOAD_SIZE-MESH.sendPacket.chunkSize)); + //send to Node + return true; + } + } + return false; +} + +#else // ESP8266 + +void MESHreceiveMQTT(mesh_packet_t *_packet); +void MESHreceiveMQTT(mesh_packet_t *_packet){ + uint32_t _slength = strlen((char*)_packet->payload); + if (_packet->chunks == 1) { //single chunk message + MqttDataHandler((char*)_packet->payload, (uint8_t*)(_packet->payload)+_slength+1, (_packet->chunkSize)-_slength); + } else { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Multiple chunks %u not supported yet"), _packet->chunks); + // TODO: reconstruct message in buffer or only handle short messages + } +} + +#endif // ESP32 + +bool MESHroleNode(void) { + return (MESH.role > ROLE_BROKER); +} + +/** + * @brief Redirects the mqtt message on the node just before it would have been sended to + * the broker via ESP-NOW + * + * @param _topic + * @param _data + * @param _retained - currently unused + * @return true + * @return false + */ +bool MESHrouteMQTTtoMESH(const char* _topic, char* _data, bool _retained) { + if (!MESHroleNode()) { return false; } + + size_t _bytesLeft = strlen(_topic) + strlen(_data) +2; + MESH.sendPacket.counter++; + MESH.sendPacket.chunk = 0; + MESH.sendPacket.chunks = (_bytesLeft / MESH_PAYLOAD_SIZE) +1; + memcpy(MESH.sendPacket.receiver, MESH.broker, 6); + MESH.sendPacket.type = PACKET_TYPE_MQTT; + MESH.sendPacket.chunkSize = MESH_PAYLOAD_SIZE; + MESH.sendPacket.peerIndex = 0; +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Chunks %u, Counter %u"), MESH.sendPacket.chunks, MESH.sendPacket.counter); + size_t _topicSize = strlen(_topic) +1; + size_t _offsetData = 0; + while (_bytesLeft > 0) { + size_t _byteLeftInChunk = MESH_PAYLOAD_SIZE; + // MESH.sendPacket.chunkSize = MESH_PAYLOAD_SIZE; + if (MESH.sendPacket.chunk == 0) { + memcpy(MESH.sendPacket.payload, _topic, _topicSize); + MESH.sendPacket.chunkSize = _topicSize; + + MESH.currentTopicSize = MESH.sendPacket.chunkSize; + + _bytesLeft -= _topicSize; + _byteLeftInChunk -= _topicSize; + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Topic in payload '%s'"), (char*)MESH.sendPacket.payload); +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: After topic -> chunk:%u, pre-size: %u"),MESH.sendPacket.chunk,MESH.sendPacket.chunkSize); + } + if (_byteLeftInChunk > 0) { + if (_byteLeftInChunk > _bytesLeft) { +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: only last chunk bL:%u bLiC:%u oSD:%u"),_bytesLeft,_byteLeftInChunk,_offsetData); + _byteLeftInChunk = _bytesLeft; +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: only last chunk after correction -> chunk:%u, pre-size: %u"),MESH.sendPacket.chunk,MESH.sendPacket.chunkSize); + } + if (MESH.sendPacket.chunk > 0) { _topicSize = 0; } +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: %u"),_topicSize); + memcpy(MESH.sendPacket.payload + _topicSize, _data + _offsetData, _byteLeftInChunk); + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Data in payload '%s'"), (char*)MESH.sendPacket.payload + _topicSize); + _offsetData += _byteLeftInChunk; + _bytesLeft -= _byteLeftInChunk; + } + MESH.sendPacket.chunkSize += _byteLeftInChunk; + MESH.packetToResend.push(MESH.sendPacket); +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: chunk:%u, size: %u"),MESH.sendPacket.chunk,MESH.sendPacket.chunkSize); +// AddLogBuffer(LOG_LEVEL_INFO, (uint8_t*)MESH.sendPacket.payload, MESH.sendPacket.chunkSize); + if (MESH.sendPacket.chunk == MESH.sendPacket.chunks) { +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Too many chunks %u"), MESH.sendPacket.chunk +1); + } + + SHOW_FREE_MEM(PSTR("MESHrouteMQTTtoMESH")); + + MESH.sendPacket.chunk++; + MESH.sendPacket.chunkSize = 0; + } + return true; +} + +/** + * @brief The node sends its mqtt topic to the broker + * + */ +void MESHregisterNode(uint8_t mode){ + memcpy(MESH.sendPacket.receiver, MESH.broker, 6); // First 6 bytes -> MAC of broker + strcpy((char*)MESH.sendPacket.payload +6, TasmotaGlobal.mqtt_topic); // Remaining bytes -> topic of node + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Register node with topic '%s'"), (char*)MESH.sendPacket.payload +6); + MESH.sendPacket.TTL = 2; + MESH.sendPacket.chunks = 1; + MESH.sendPacket.chunk = 0; + MESH.sendPacket.chunkSize = strlen(TasmotaGlobal.mqtt_topic) + 1 + 6; + memcpy(MESH.sendPacket.payload, MESH.broker, 6); + MESH.sendPacket.type = (mode == 0) ? PACKET_TYPE_REGISTER_NODE : PACKET_TYPE_REFRESH_NODE; + MESHsendPacket(&MESH.sendPacket); +} + +/*********************************************************************************************\ + * Generic functions +\*********************************************************************************************/ + +void MESHstartNode(int32_t _channel, uint8_t _role){ //we need a running broker with a known channel at that moment +#ifdef ESP8266 // for now only ESP8266, might be added for the ESP32 later + MESH.channel = _channel; + WiFi.mode(WIFI_STA); + WiFi.begin("", "", MESH.channel, nullptr, false); //fake connection attempt to set channel + wifi_promiscuous_enable(1); + wifi_set_channel(MESH.channel); + wifi_promiscuous_enable(0); + WiFi.disconnect(); + MESHsetWifi(0); + if (esp_now_init() != 0) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Node init failed")); + return; + } + +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Node initialized, channel: %u"),wifi_get_channel()); //check if we succesfully set the + Response_P(PSTR("{\"%s\":{\"Node\":1,\"Channel\":%u,\"Role\":%u}}"), D_CMND_MESH, wifi_get_channel(), _role); + XdrvRulesProcess(0); + + esp_now_set_self_role(ESP_NOW_ROLE_COMBO); + esp_now_register_send_cb(CB_MESHDataSent); + esp_now_register_recv_cb(CB_MESHDataReceived); + + MESHsetKey(MESH.key); + memcpy(MESH.sendPacket.receiver, MESH.broker, 6); + WiFi.macAddress(MESH.sendPacket.sender); + MESHaddPeer(MESH.broker); //must always be peer 0!! -return code -7 for peer list full + MESHcountPeers(); + MESH.lastMessageFromBroker = millis(); // Init + MESH.role = (0 == _role) ? ROLE_NODE_SMALL : ROLE_NODE_FULL; + MESHsetSleep(); + MESHregisterNode(0); +#endif // ESP8266 +} + +void MESHstartBroker(void) { // Must be called after WiFi is initialized!! Rule - on system#boot do meshbroker endon +#ifdef ESP32 + WiFi.mode(WIFI_AP_STA); + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Broker MAC %s"), WiFi.softAPmacAddress().c_str()); + WiFi.softAPmacAddress(MESH.broker); //set MESH.broker to the needed MAC + uint32_t _channel = WiFi.channel(); + + if (esp_now_init() != 0) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Broker init failed")); + return; + } + + Response_P(PSTR("{\"%s\":{\"Broker\":1,\"Channel\":%u}}"), D_CMND_MESH, _channel); + XdrvRulesProcess(0); +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Broker initialized on channel %u"), _channel); + esp_now_register_send_cb(CB_MESHDataSent); + esp_now_register_recv_cb(CB_MESHDataReceived); + MESHsetKey(MESH.key); + MESHcountPeers(); + memcpy(MESH.sendPacket.sender, MESH.broker, 6); + MESH.role = ROLE_BROKER; + MESHsetSleep(); +#endif // ESP32 +} + +/*********************************************************************************************\ + * Main loops +\*********************************************************************************************/ + +#ifdef ESP32 + +void MESHevery50MSecond(void) { + // if (MESH.packetToResend.size() > 0) { + // // pass the packets + // } + if (MESH.packetToConsume.size() > 0) { +// AddLog(LOG_LEVEL_DEBUG, PSTR("_")); +// AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t *)&MESH.packetToConsume.front(), 15); + for (auto &_headerBytes : MESH.packetsAlreadyReceived) { +// AddLog(LOG_LEVEL_DEBUG, PSTR(".")); +// AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t *)_headerBytes.raw, 15); + if (memcmp(MESH.packetToConsume.front().sender, _headerBytes.raw, 15) == 0) { + MESH.packetToConsume.pop(); + return; + } + } + mesh_first_header_bytes _bytes; + memcpy(_bytes.raw, &MESH.packetToConsume.front(), 15); + MESH.packetsAlreadyReceived.push_back(_bytes); +// AddLog(LOG_LEVEL_DEBUG, PSTR("...")); +// AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t *)_bytes.raw, 15); + if (MESH.packetsAlreadyReceived.size() > MESH_MAX_PACKETS) { + MESH.packetsAlreadyReceived.erase(MESH.packetsAlreadyReceived.begin()); +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Erase received data")); + } + + // do something on the node + // AddLogBuffer(LOG_LEVEL_DEBUG,(uint8_t *)&MESH.packetToConsume.front(), 30); + + MESHencryptPayload(&MESH.packetToConsume.front(), 0); + switch (MESH.packetToConsume.front().type) { + // case PACKET_TYPE_REGISTER_NODE: + // AddLog(LOG_LEVEL_INFO, PSTR("MSH: received topic: %s"), (char*)MESH.packetToConsume.front().payload + 6); + // // AddLogBuffer(LOG_LEVEL_INFO,(uint8_t *)&MESH.packetToConsume.front().payload,MESH.packetToConsume.front().chunkSize+5); + // for(auto &_peer : MESH.peers){ + // if(memcmp(_peer.MAC,MESH.packetToConsume.front().sender,6)==0){ + // strcpy(_peer.topic,(char*)MESH.packetToConsume.front().payload+6); + // MESHsubscribe((char*)&_peer.topic); + // } + // } + // break; + case PACKET_TYPE_PEERLIST: + for (uint32_t i = 0; i < MESH.packetToConsume.front().chunkSize; i += 6) { + if (memcmp(MESH.packetToConsume.front().payload +i, MESH.sendPacket.sender, 6) == 0) { + continue; // Do not add myself + } + if (MESHcheckPeerList(MESH.packetToConsume.front().payload +i) == false) { + MESHaddPeer(MESH.packetToConsume.front().payload +i); + } + } + break; + case PACKET_TYPE_MQTT: // Redirected MQTT from node in packet [char* _space_ char*] +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Received node output '%s'"), (char*)MESH.packetToConsume.front().payload); + if (MESH.packetToConsume.front().chunks > 1) { + bool _foundMultiPacket = false; + for (auto &_packet_combined : MESH.multiPackets) { +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Append to multipacket")); + if (memcmp(_packet_combined.header.sender, MESH.packetToConsume.front().sender, 12) == 0) { + if (_packet_combined.header.counter == MESH.packetToConsume.front().counter) { + memcpy(_packet_combined.raw + (MESH.packetToConsume.front().chunk * MESH_PAYLOAD_SIZE), MESH.packetToConsume.front().payload, MESH.packetToConsume.front().chunkSize); + bitSet(_packet_combined.receivedChunks, MESH.packetToConsume.front().chunk); + _foundMultiPacket = true; +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: Multipacket rcvd chunk mask 0x%08X"), _packet_combined.receivedChunks); + } + } + uint32_t _temp = (1 << (uint8_t)MESH.packetToConsume.front().chunks) -1; //example: 1+2+4 == (2^3)-1 +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: _temp: %u = %u"),_temp,_packet_combined.receivedChunks); + if (_packet_combined.receivedChunks == _temp) { + char * _data = (char*)_packet_combined.raw + strlen((char*)_packet_combined.raw) + 1; +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Publish multipacket")); + MqttPublishPayload((char*)_packet_combined.raw, _data); + MESH.multiPackets.erase(MESH.multiPackets.begin()); + break; + } + } + if (!_foundMultiPacket) { + mesh_packet_combined_t _packet; + memcpy(_packet.header.sender, MESH.packetToConsume.front().sender, sizeof(_packet.header)); + memcpy(_packet.raw + (MESH.packetToConsume.front().chunk * MESH_PAYLOAD_SIZE), MESH.packetToConsume.front().payload, MESH.packetToConsume.front().chunkSize); + _packet.receivedChunks = 0; + bitSet(_packet.receivedChunks, MESH.packetToConsume.front().chunk); + MESH.multiPackets.push_back(_packet); +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: New multipacket with chunks %u"), _packet.header.chunks); + } + } else { +// AddLog(LOG_LEVEL_INFO, PSTR("MSH: chunk: %u size: %u"), MESH.packetToConsume.front().chunk, MESH.packetToConsume.front().chunkSize); +// if (MESH.packetToConsume.front().chunk==0) AddLogBuffer(LOG_LEVEL_INFO,(uint8_t *)&MESH.packetToConsume.front().payload,MESH.packetToConsume.front().chunkSize); + char * _data = (char*)MESH.packetToConsume.front().payload + strlen((char*)MESH.packetToConsume.front().payload) +1; +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Publish packet")); + MqttPublishPayload((char*)MESH.packetToConsume.front().payload, _data); + + uint32_t idx = 0; + for (auto &_peer : MESH.peers){ + if (memcmp(_peer.MAC, MESH.packetToConsume.front().sender, 6) == 0) { + _peer.lastMessageFromPeer = millis(); + MESH.lastTeleMsgs[idx] = std::string(_data); + break; + } + idx++; + } +// AddLogBuffer(LOG_LEVEL_INFO,(uint8_t *)&MESH.packetToConsume.front().payload,MESH.packetToConsume.front().chunkSize); + } + break; + default: + AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&MESH.packetToConsume.front(), MESH.packetToConsume.front().chunkSize +5); + break; + } + MESH.packetToConsume.pop(); +// AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Consumed one packet %u"), (char*)MESH.packetToConsume.size()); + } +} + +void MESHEverySecond(void) { + static uint32_t _second = 0; + _second++; + // send a time packet every x seconds + if (MESH.flags.nodeWantsTimeASAP) { + MESHsendTime(); + MESH.flags.nodeWantsTimeASAP = 0; + return; + } + if (_second % 5 == 0) { + if ((MESH.flags.nodeWantsTime == 1) || (_second % 30 == 0)) { //every 5 seconds on demand or every 30 seconds anyway + MESHsendTime(); + MESH.flags.nodeWantsTime = 0; + return; + } + } + uint32_t _peerNumber = _second%45; + if (_peerNumber < MESH.peers.size()) { + if (MESH.peers[_peerNumber].topic[0] == 0) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Broker wants topic from peer %u"), _peerNumber); + MESHdemandTopic(_peerNumber); + } + } + if (MESH.multiPackets.size() > 3) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Multi packets in buffer %u"), MESH.multiPackets.size()); + MESH.multiPackets.erase(MESH.multiPackets.begin()); + } +} + +#else // ESP8266 + +void MESHevery50MSecond(void) { + if (ROLE_NONE == MESH.role) { return; } + + if (MESH.packetToResend.size() > 0) { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Next packet %d to resend of type %u, TTL %u"), + MESH.packetToResend.size(), MESH.packetToResend.front().type, MESH.packetToResend.front().TTL); + if (MESH.packetToResend.front().TTL > 0) { + MESH.packetToResend.front().TTL--; + if (memcmp(MESH.packetToResend.front().sender, MESH.broker, 6) != 0) { //do not send back the packet to the broker + MESHsendPacket(&MESH.packetToResend.front()); + } + } else { + MESH.packetToResend.pop(); + } + // pass the packets + } + + if (MESH.packetToConsume.size() > 0) { + MESHencryptPayload(&MESH.packetToConsume.front(), 0); + switch (MESH.packetToConsume.front().type) { + case PACKET_TYPE_MQTT: + if (memcmp(MESH.packetToConsume.front().sender, MESH.sendPacket.sender, 6) == 0) { + //discard echo + break; + } + // AddLog(LOG_LEVEL_INFO, PSTR("MSH: node received topic: %s"), (char*)MESH.packetToConsume.front().payload); + MESHreceiveMQTT(&MESH.packetToConsume.front()); + break; + case PACKET_TYPE_PEERLIST: + for (uint32_t i = 0; i < MESH.packetToConsume.front().chunkSize; i += 6) { + if (memcmp(MESH.packetToConsume.front().payload +i, MESH.sendPacket.sender, 6) == 0) { + continue; //do not add myself + } + if (MESHcheckPeerList(MESH.packetToConsume.front().payload +i) == false) { + MESHaddPeer(MESH.packetToConsume.front().payload +i); + } + } + break; + default: + break; + } + MESH.packetToConsume.pop(); + } +} + +void MESHEverySecond(void) { + if (MESH.role > ROLE_BROKER) { + if (MESH.flags.brokerNeedsTopic == 1) { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Broker wants topic")); + MESHregisterNode(1); //refresh info + MESH.flags.brokerNeedsTopic = 0; + } + if (millis() - MESH.lastMessageFromBroker > 31000) { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Broker not seen for >30 secs")); + MESHregisterNode(1); //refresh info + } + if (millis() - MESH.lastMessageFromBroker > 70000) { + AddLog(LOG_LEVEL_DEBUG, PSTR("MSH: Broker not seen for 70 secs, try to re-launch wifi")); + MESH.role = ROLE_NONE; + MESHsetWifi(1); + WifiBegin(3, MESH.channel); + } + } +} + +#endif // ESP8266 + +/*********************************************************************************************\ + * Presentation +\*********************************************************************************************/ + +void MESHshow(bool json) { + if (json) { + if (ROLE_BROKER == MESH.role) { + ResponseAppend_P(PSTR(",\"MESH\":{\"channel\":%u"), MESH.channel); + ResponseAppend_P(PSTR(",\"nodes\":%u"),MESH.peers.size()); + if (MESH.peers.size() > 0) { + ResponseAppend_P(PSTR(",\"MAC\":[")); + bool comma = false; + for (auto &_peer : MESH.peers) { + char _MAC[18]; + ToHex_P(_peer.MAC, 6, _MAC,18, ':'); + ResponseAppend_P(PSTR("%s\"%s\""), (comma)?",":"", _MAC); + comma = true; + } + ResponseAppend_P(PSTR("]")); + } + ResponseJsonEnd(); + } + } else { +#ifdef ESP32 //web UI only on the the broker = ESP32 + if (ROLE_BROKER == MESH.role) { +// WSContentSend_PD(PSTR("TAS-MESH:
    ")); + WSContentSend_PD(PSTR("Broker MAC %s
    "), WiFi.softAPmacAddress().c_str()); + WSContentSend_PD(PSTR("Broker Channel %u
    "), WiFi.channel()); + uint32_t idx = 0; + for (auto &_peer : MESH.peers) { + char _MAC[18]; + ToHex_P(_peer.MAC, 6, _MAC, 18, ':'); + WSContentSend_PD(PSTR("Node MAC %s
    "), _MAC); + WSContentSend_PD(PSTR("Node last message %u ms
    "), millis() - _peer.lastMessageFromPeer); + WSContentSend_PD(PSTR("Node MQTT topic %s"), _peer.topic); +/* + WSContentSend_PD(PSTR("Node MQTT topic: %s
    "), _peer.topic); + if (MESH.lastTeleMsgs.size() > idx) { + char json_buffer[MESH.lastTeleMsgs[idx].length() +1]; + strcpy(json_buffer, (char*)MESH.lastTeleMsgs[idx].c_str()); + JsonParser parser(json_buffer); + JsonParserObject root = parser.getRootObject(); + for (auto key : root) { + JsonParserObject subObj = key.getValue().getObject(); + if (subObj) { + WSContentSend_PD(PSTR("
      %s:"), key.getStr()); + for (auto subkey : subObj) { + WSContentSend_PD(PSTR("
        %s: %s
      "), subkey.getStr(), subkey.getValue().getStr()); + } + WSContentSend_PD(PSTR("
    ")); + } else { + WSContentSend_PD(PSTR("
      %s: %s
    "), key.getStr(), key.getValue().getStr()); + } + } +// AddLog(LOG_LEVEL_INFO,PSTR("MSH: teleJSON %s"), (char*)MESH.lastTeleMsgs[idx].c_str()); +// AddLog(LOG_LEVEL_INFO,PSTR("MSH: stringsize: %u"),MESH.lastTeleMsgs[idx].length()); + } else { +// AddLog(LOG_LEVEL_INFO,PSTR("MSH: telemsgSize: %u"),MESH.lastTeleMsgs.size()); + } +*/ + WSContentSend_PD(PSTR("
    ")); + idx++; + } + } +#endif // ESP32 + } +} + +/*********************************************************************************************\ + * Commands +\*********************************************************************************************/ + +const char kMeshCommands[] PROGMEM = "Mesh|" // Prefix + "Broker|Node|Peer|Channel|Interval"; + +void (* const MeshCommand[])(void) PROGMEM = { + &CmndMeshBroker, &CmndMeshNode, &CmndMeshPeer, &CmndMeshChannel, &CmndMeshInterval }; + +void CmndMeshBroker(void) { + MESH.channel = WiFi.channel(); // The Broker gets the channel from the router, no need to declare it with MESHCHANNEL (will be mandatory set it when ETH will be implemented) + MESHstartBroker(); + ResponseCmndNumber(MESH.channel); +} + +void CmndMeshNode(void) { + if (XdrvMailbox.data_len > 0) { + MESHHexStringToBytes(XdrvMailbox.data, MESH.broker); + if (XdrvMailbox.index != 0) { XdrvMailbox.index = 1; } // Everything not 0 is a full node + // meshnode FA:KE:AD:DR:ES:S1 + bool broker = false; + char EspSsid[11]; + String mac_address = XdrvMailbox.data; + snprintf_P(EspSsid, sizeof(EspSsid), PSTR("ESP_%s"), mac_address.substring(6).c_str()); + int32_t getWiFiChannel(const char *EspSsid); + if (int32_t ch = WiFi.scanNetworks()) { + for (uint8_t i = 0; i < ch; i++) { + if (!strcmp(EspSsid, WiFi.SSID(i).c_str())) { + MESH.channel = WiFi.channel(i); + broker = true; + AddLog(LOG_LEVEL_INFO, PSTR("MSH: Successfully connected to Mesh Broker using MAC %s as %s on channel %d"), + XdrvMailbox.data, EspSsid, MESH.channel); + MESHstartNode(MESH.channel, XdrvMailbox.index); + ResponseCmndNumber(MESH.channel); + } + } + } + if (!broker) { + AddLog(LOG_LEVEL_INFO, PSTR("MSH: No Mesh Broker found using MAC %s"), XdrvMailbox.data); + } + } +} + +void CmndMeshPeer(void) { + if (XdrvMailbox.data_len > 0) { + uint8_t _MAC[6]; + MESHHexStringToBytes(XdrvMailbox.data, _MAC); + char _peerMAC[18]; + ToHex_P(_MAC, 6, _peerMAC, 18, ':'); + AddLog(LOG_LEVEL_DEBUG,PSTR("MSH: MAC-string %s (%s)"), XdrvMailbox.data, _peerMAC); + MESHaddPeer(_MAC); + MESHcountPeers(); + ResponseCmndChar(_peerMAC); + } +} + +void CmndMeshChannel(void) { + if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload < 14)) { + MESH.channel = XdrvMailbox.payload; + } + ResponseCmndNumber(MESH.channel); +} + +void CmndMeshInterval(void) { + if ((XdrvMailbox.payload > 1) && (XdrvMailbox.payload < 201)) { + MESH.interval = XdrvMailbox.payload; // 2 to 200 ms + MESHsetSleep(); + } + ResponseCmndNumber(MESH.interval); +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv57(uint8_t function) { + bool result = false; + + switch (function) { + case FUNC_COMMAND: + result = DecodeCommand(kMeshCommands, MeshCommand); + break; + case FUNC_PRE_INIT: + MESHInit(); // TODO: save state + break; + } + if (MESH.role) { + switch (function) { + case FUNC_LOOP: + static uint32_t mesh_transceive_msecond = 0; // State 50msecond timer + if (TimeReached(mesh_transceive_msecond)) { + SetNextTimeInterval(mesh_transceive_msecond, MESH.interval); + MESHevery50MSecond(); + } + break; + case FUNC_EVERY_SECOND: + MESHEverySecond(); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + MESHshow(0); + break; +#endif + case FUNC_JSON_APPEND: + MESHshow(1); + break; +#ifdef ESP32 + case FUNC_MQTT_SUBSCRIBE: + MESHconnectMQTT(); + break; +#endif // ESP32 + case FUNC_SHOW_SENSOR: + MESHsendPeerList(); // Sync this to the Teleperiod with a delay + break; +#ifdef USE_DEEPSLEEP + case FUNC_SAVE_BEFORE_RESTART: + MESHdeInit(); + break; +#endif // USE_DEEPSLEEP + } + } + return result; +} + +#endif // USE_TASMESH diff --git a/tasmota/xdrv_58_range_extender.ino b/tasmota/xdrv_58_range_extender.ino new file mode 100644 index 000000000..7fb999063 --- /dev/null +++ b/tasmota/xdrv_58_range_extender.ino @@ -0,0 +1,406 @@ +/* + xdrv_58_range_extender.ino - WiFi Range Extender for Tasmota + + Copyright (C) 2021 sillyfrog and Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_WIFI_RANGE_EXTENDER +/********************************************************************************************* +To use this, add the following to your user_config_override.h +#define USE_WIFI_RANGE_EXTENDER + +Additionally, for the ESP8266, PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH must be +set in your build options. +For example, in your platfromio_tasmota_cenv.ini, you will need an entry such as: +[env:tasmota-rangeextender] +build_flags = ${common.build_flags} + -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH + +For the ESP32, the arduino-esp32 library must be at least version 2, with +CONFIG_LWIP_IP_FORWARD option set, and optionally CONFIG_LWIP_IPV4_NAPT. + +If you want to support NAPT (removing the need for routes on a core router): +#define USE_WIFI_RANGE_EXTENDER_NAPT + + +An example full static configuration: +#define USE_WIFI_RANGE_EXTENDER +#define USE_WIFI_RANGE_EXTENDER_NAPT +#define WIFI_RGX_STATE 1 +#define WIFI_RGX_NAPT 1 +#define WIFI_RGX_SSID "rangeextender" +#define WIFI_RGX_PASSWORD "securepassword" +#define WIFI_RGX_IP_ADDRESS "10.99.1.1" +#define WIFI_RGX_SUBNETMASK "255.255.255.0" + + +A full command to enable the Range Extender, including with NAPT could be: +Backlog RgxSSID rangeextender ; RgxPassword securepassword ; RgxAddress 192.168.123.1 ; RgxSubnet 255.255.255.0; RgxState 1 ; RgxNAPT 1 + +\*********************************************************************************************/ + +#define XDRV_58 58 + +// Memory usage at 512: Heap from 30136 to 17632: 12504 +// Memory usage at 128: Heap from 30136 to 26848: 3288 +#define NAPT 128 // IP_NAPT_MAX: 512 +#define NAPT_PORT 10 // IP_PORTMAP_MAX: 32 + +#warning **** USE_WIFI_RANGE_EXTENDER is enabled **** + +#ifdef ESP8266 +#if LWIP_FEATURES +// All good +#else +#error LWIP_FEATURES required, add "-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH" to build_flags +#endif // LWIP_FEATURES +#endif // ESP8266 + +#ifdef ESP32 +#ifdef CONFIG_LWIP_IP_FORWARD +// All good +#else +#error CONFIG_LWIP_IP_FORWARD not set, arduino-esp32 v2 or later required with CONFIG_LWIP_IP_FORWARD support +#endif // CONFIG_LWIP_IP_FORWARD +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT +#ifdef CONFIG_LWIP_IPV4_NAPT +// All good +#else +#error CONFIG_LWIP_IPV4_NAPT not set, arduino-esp32 v2 or later required with CONFIG_LWIP_IPV4_NAPT support +#endif // IP_NAPT +#endif // CONFIG_LWIP_IPV4_NAPT +#endif // ESP32 + +const char kDrvRgxCommands[] PROGMEM = "Rgx|" // Prefix + "State" + "|" D_CMND_SSID + "|" D_CMND_PASSWORD +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT + "|" + "NAPT" +#endif // USE_WIFI_RANGE_EXTENDER_NAPT + "|" + "Address" + "|" + "Subnet"; + +void (*const DrvRgxCommand[])(void) PROGMEM = { + &CmndRgxState, + &CmndRgxSSID, + &CmndRgxPassword, +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT + &CmndRgxNAPT, +#endif // USE_WIFI_RANGE_EXTENDER_NAPT + &CmndRgxAddresses, + &CmndRgxAddresses, +}; + +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT +#ifdef ESP8266 +#include +#endif // ESP8266 +#endif // USE_WIFI_RANGE_EXTENDER_NAPT + +#include +#include +#ifdef ESP8266 +#include +#endif // ESP8266 +#ifdef ESP32 +#include "lwip/lwip_napt.h" +#include +#endif // ESP32 + +#define RGX_NOT_CONFIGURED 0 +#define RGX_FORCE_CONFIGURE 1 +#define RGX_CONFIGURED 2 +#define RGX_CONFIG_INCOMPLETE 3 +#define RGX_SETUP_NAPT 4 + +typedef struct +{ + uint8_t status = RGX_NOT_CONFIGURED; + uint16_t lastlinkcount = 0; +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT + bool napt_enabled = false; +#endif // USE_WIFI_RANGE_EXTENDER_NAPT +} TRgxSettings; + +TRgxSettings RgxSettings; + +// Check the current configuration is complete, updating RgxSettings.status +void RgxCheckConfig(void) +{ + if ( + strlen(SettingsText(SET_RGX_SSID)) > 0 && + strlen(SettingsText(SET_RGX_PASSWORD)) >= 8 && + Settings->ipv4_rgx_address && + Settings->ipv4_rgx_subnetmask) + { + if (RgxSettings.status != RGX_FORCE_CONFIGURE) + { + RgxSettings.status = RGX_NOT_CONFIGURED; + } + } + else + { + RgxSettings.status = RGX_CONFIG_INCOMPLETE; + } +} + +void CmndRgxState(void) +{ + if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) + { + if (Settings->sbflag1.range_extender != XdrvMailbox.payload) + { + Settings->sbflag1.range_extender = XdrvMailbox.payload; + if (0 == XdrvMailbox.payload) + { // Turn off + TasmotaGlobal.restart_flag = 2; + } + } + } + ResponseCmndStateText(Settings->sbflag1.range_extender); +} + +void CmndRgxAddresses(void) +{ + char network_address[22]; + ext_snprintf_P(network_address, sizeof(network_address), PSTR(" (%_I)"), (uint32_t)NetworkAddress()); + uint32_t ipv4_address; + if (ParseIPv4(&ipv4_address, XdrvMailbox.data)) + { + if (XdrvMailbox.command[3] == 'S') // Subnet + { + Settings->ipv4_rgx_subnetmask = ipv4_address; + } + else + { + Settings->ipv4_rgx_address = ipv4_address; + } + RgxSettings.status = RGX_FORCE_CONFIGURE; + } + ResponseRgxConfig(); +} + +void CmndRgxSSID(void) +{ + if (XdrvMailbox.data_len > 0) + { + SettingsUpdateText(SET_RGX_SSID, (SC_CLEAR == Shortcut()) ? "" : XdrvMailbox.data); + RgxSettings.status = RGX_FORCE_CONFIGURE; + } + ResponseRgxConfig(); +} + +void CmndRgxPassword(void) +{ + if (XdrvMailbox.data_len > 0) + { + SettingsUpdateText(SET_RGX_PASSWORD, (SC_CLEAR == Shortcut()) ? "" : XdrvMailbox.data); + RgxSettings.status = RGX_FORCE_CONFIGURE; + } + ResponseRgxConfig(); +} + +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT +void CmndRgxNAPT(void) +{ + if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) + { + if (Settings->sbflag1.range_extender_napt != XdrvMailbox.payload) + { + Settings->sbflag1.range_extender_napt = XdrvMailbox.payload; + if (0 == XdrvMailbox.payload) + { // Turn off + // ESP32 does not disable reliably, reboot to ensure a complete disable of NAPT + // rebooting also completely frees up the used RAM + TasmotaGlobal.restart_flag = 2; + } + else + { + RgxSettings.status = RGX_FORCE_CONFIGURE; + } + } + } + ResponseCmndStateText(Settings->sbflag1.range_extender_napt); +}; +#endif // USE_WIFI_RANGE_EXTENDER_NAPT + +void ResponseRgxConfig(void) +{ + RgxCheckConfig(); + Response_P(PSTR("{\"Rgx\":{\"Valid\":\"%s\",\"" D_CMND_SSID "\":\"%s\",\"" D_CMND_PASSWORD "\":\"%s\",\"" D_CMND_IPADDRESS "\":\"%_I\",\"" D_JSON_SUBNETMASK "\":\"%_I\"}"), + (RgxSettings.status == RGX_CONFIG_INCOMPLETE) ? "false" : "true", + EscapeJSONString(SettingsText(SET_RGX_SSID)).c_str(), + EscapeJSONString(SettingsText(SET_RGX_PASSWORD)).c_str(), + Settings->ipv4_rgx_address, + Settings->ipv4_rgx_subnetmask); +} + +void rngxSetup() +{ + // Check we have a complete config first + RgxCheckConfig(); + if (RgxSettings.status == RGX_CONFIG_INCOMPLETE) + { + AddLog(LOG_LEVEL_DEBUG, PSTR("RGX: Range Extender config incomplete")); + return; + } +#ifdef ESP8266 + dhcps_set_dns(0, WiFi.dnsIP(0)); + dhcps_set_dns(1, WiFi.dnsIP(1)); +#endif // ESP8266 +#ifdef ESP32 + esp_err_t err; + tcpip_adapter_dns_info_t ip_dns; + + err = tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); + err = tcpip_adapter_get_dns_info(TCPIP_ADAPTER_IF_STA, ESP_NETIF_DNS_MAIN, &ip_dns); + err = tcpip_adapter_set_dns_info(TCPIP_ADAPTER_IF_AP, ESP_NETIF_DNS_MAIN, &ip_dns); + dhcps_offer_t opt_val = OFFER_DNS; // supply a dns server via dhcps + tcpip_adapter_dhcps_option(ESP_NETIF_OP_SET, ESP_NETIF_DOMAIN_NAME_SERVER, &opt_val, 1); + err = tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); +#endif // ESP32 + // WiFi.softAPConfig(EXTENDER_LOCAL_IP, EXTENDER_GATEWAY_IP, EXTENDER_SUBNET); + WiFi.softAPConfig(Settings->ipv4_rgx_address, Settings->ipv4_rgx_address, Settings->ipv4_rgx_subnetmask); + WiFi.softAP(SettingsText(SET_RGX_SSID), SettingsText(SET_RGX_PASSWORD)); + AddLog(LOG_LEVEL_INFO, PSTR("RGX: WiFi Extender AP Enabled with SSID: %s"), WiFi.softAPSSID().c_str()); + RgxSettings.status = RGX_SETUP_NAPT; + RgxSettings.lastlinkcount = Wifi.link_count; +} + +void rngxSetupNAPT(void) +{ + // A short delay is required for enabling NAPT to work on the ESP32, hence a dedicated + // function called a second later +#ifdef USE_WIFI_RANGE_EXTENDER_NAPT + if (Settings->sbflag1.range_extender_napt && !RgxSettings.napt_enabled) + { +#ifdef ESP8266 + // ip_napt_init can only be called once, however device will reboot when disabled + // so no need to limit calls to init separately. + err_t ret = ip_napt_init(NAPT, NAPT_PORT); + if (ret == ERR_OK) + { + AddLog(LOG_LEVEL_INFO, PSTR("RGX: NAPT initialization complete")); + err_t ret = ip_napt_enable_no(SOFTAP_IF, 1); + if (ret == ERR_OK) + { + AddLog(LOG_LEVEL_INFO, PSTR("RGX: NAPT Enabled")); + RgxSettings.napt_enabled = true; + } + } + else + { + AddLog(LOG_LEVEL_ERROR, PSTR("RGX: NAPT initialization failed! (%d)"), ret); + } + +#endif // ESP8266 +#ifdef ESP32 + ip_napt_enable(WiFi.softAPIP(), 1); + AddLog(LOG_LEVEL_INFO, PSTR("RGX: NAPT Enabled")); + RgxSettings.napt_enabled = true; +#endif // ESP32 + } + // This code path is no longer used as device will reboot to disable NAPT, maybe + // restored when working correctly on ESP32 + /* + else if (!Settings->sbflag1.range_extender_napt && RgxSettings.napt_enabled) + { +#ifdef ESP8266 + err_t ret = ip_napt_enable_no(SOFTAP_IF, 0); + if (ret == ERR_OK) + { + AddLog(LOG_LEVEL_INFO, "RGX: NAPT Disabled"); + RgxSettings.napt_enabled = false; + } +#endif // ESP8266 +#ifdef ESP32 + ip_napt_enable(WiFi.softAPIP(), 0); + AddLog(LOG_LEVEL_INFO, "RGX: NAPT Disabled, reboot maybe required"); +#endif // ESP32 + } + */ +#endif // USE_WIFI_RANGE_EXTENDER_NAPT + RgxSettings.status = RGX_CONFIGURED; +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv58(uint8_t function) +{ + bool result = false; + + if (FUNC_COMMAND == function) + { + result = DecodeCommand(kDrvRgxCommands, DrvRgxCommand); + } + else if (Settings->sbflag1.range_extender && !TasmotaGlobal.restart_flag) + { + switch (function) + { + case FUNC_PRE_INIT: + break; + case FUNC_EVERY_SECOND: + // AddLog(LOG_LEVEL_INFO, PSTR("RGX: XXX DEBUG: Wifi.status: %d, WiFi.getMode(): %d, RgxSettings.status: %d, link_count: %d"), Wifi.status, WiFi.getMode(), RgxSettings.status, Wifi.link_count); + if (RgxSettings.status == RGX_NOT_CONFIGURED && Wifi.status == WL_CONNECTED) + { + // Setup only if WiFi in STA only mode + if (WiFi.getMode() == WIFI_STA) + { + // Connecting for the first time, setup WiFi + rngxSetup(); + } + else + { + RgxSettings.status = RGX_CONFIGURED; + } + } + else if (RgxSettings.status == RGX_FORCE_CONFIGURE && Wifi.status == WL_CONNECTED) + { + rngxSetup(); + } + else if (RgxSettings.status == RGX_SETUP_NAPT) + { + // Call NAPT a second later as ESP32 requires short delay + rngxSetupNAPT(); + } + else if (RgxSettings.status == RGX_CONFIGURED) + { + if (Wifi.status != WL_CONNECTED) + { + // No longer connected, need to setup again + AddLog(LOG_LEVEL_INFO, PSTR("RGX: No longer connected, prepare to reconnect WiFi AP...")); + RgxSettings.status = RGX_NOT_CONFIGURED; + } + else if (RgxSettings.lastlinkcount != Wifi.link_count && WiFi.getMode() != WIFI_AP_STA) + { + // Assume WiFi has reconnected and been reconfigured, prepare to reconnect + AddLog(LOG_LEVEL_INFO, PSTR("RGX: Link count now: %d, WiFi.getMode(): %d, unconfigure..."), Wifi.link_count, WiFi.getMode()); + RgxSettings.status = RGX_NOT_CONFIGURED; + } + } + break; + } + } + return result; +} + +#endif // USE_WIFI_RANGE_EXTENDER \ No newline at end of file diff --git a/tasmota/xdrv_59_influxdb.ino b/tasmota/xdrv_59_influxdb.ino new file mode 100644 index 000000000..ecafe8003 --- /dev/null +++ b/tasmota/xdrv_59_influxdb.ino @@ -0,0 +1,538 @@ +/* + xdrv_59_influxdb.ino - Influxdb support for Tasmota + + Copyright (C) 2021 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_INFLUXDB +/*********************************************************************************************\ + * Influxdb support + * + * To save over 80k not supporting https this driver uses a subset of library + * https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino + * + * The text format for metrics, labels and values is documented at + * https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_reference/ + * + * Supported commands: + * Ifx - Set Influxdb state off (0) or on (1) and show current state + * IfxHost - Set Influxdb host name or IP address + * IfxPort - Set Influxdb port + * IfxDatabase - Set Influxdb v1 and database name + * IfxUser - Set Influxdb v1 and userid + * IfxPassword - Set Influxdb v1 and password + * IfxBucket - Set Influxdb v2 and bucket name + * IfxOrg - Set Influxdb v2 and organization + * IfxToken - Set Influxdb v2 and token + * + * Set influxdb update interval with command teleperiod + * + * The following triggers result in automatic influxdb numeric feeds without appended time: + * - this driver initiated state message + * - this driver initiated teleperiod data + * - power commands +\*********************************************************************************************/ + +#define XDRV_59 59 + +#define INFLUXDB_INITIAL 7 // Initial number of seconds after wifi connect keeping in mind sensor initialization + +#ifndef INFLUXDB_STATE +#define INFLUXDB_STATE 0 // [Ifx] Influxdb initially Off (0) or On (1) +#endif +#ifndef INFLUXDB_VERSION +#define INFLUXDB_VERSION 1 // Version of Influxdb 1 or 2 +#endif +#ifndef INFLUXDB_HOST +#define INFLUXDB_HOST "influxdb" // [IfxHost] Influxdb hostname or IP address +#endif +#ifndef INFLUXDB_PORT +#define INFLUXDB_PORT 8086 // [IfxPort] Influxdb port number +#endif +#ifndef INFLUXDB_ORG +#define INFLUXDB_ORG "" // [IfxUser, IfxOrg] Influxdb v1 username or v2 organisation +#endif +#ifndef INFLUXDB_TOKEN +#define INFLUXDB_TOKEN "" // [IfxPassword, IfxToken] Influxdb v1 password or v2 token +#endif +#ifndef INFLUXDB_BUCKET +#define INFLUXDB_BUCKET "db" // [IfxDatabase, IfxBucket] Influxdb v1 database or v2 bucket +#endif + +static const char UninitializedMessage[] PROGMEM = "Unconfigured instance"; +// This cannot be put to PROGMEM due to the way how it is used +static const char RetryAfter[] = "Retry-After"; +static const char TransferEncoding[] = "Transfer-Encoding"; + +WiFiClient *IFDBwifiClient = nullptr; +HTTPClient *IFDBhttpClient = nullptr; + +struct { + String _serverUrl; // Connection info + String _writeUrl; // Cached full write url + String _lastErrorResponse; // Server reponse or library error message for last failed request + uint32_t _lastRequestTime = 0; // Last time in ms we made a request to server + int interval = 0; + int _lastStatusCode = 0; // HTTP status code of last request to server + int _lastRetryAfter = 0; // Store retry timeout suggested by server after last request + uint8_t log_level = LOG_LEVEL_DEBUG_MORE; + bool _connectionReuse; // true if HTTP connection should be kept open. Usable for frequent writes. Default false + bool init = false; +} IFDB; + +/*********************************************************************************************\ + * Influxdb library function +\*********************************************************************************************/ + +String InfluxDbAuth(void) { + String auth = ""; + if (strlen(SettingsText(SET_INFLUXDB_ORG)) > 0 && strlen(SettingsText(SET_INFLUXDB_TOKEN)) > 0) { + auth = "&u="; + auth += UrlEncode(SettingsText(SET_INFLUXDB_ORG)); + auth += "&p="; + auth += UrlEncode(SettingsText(SET_INFLUXDB_TOKEN)); + } + return auth; +} + +bool InfluxDbParameterInit(void) { + if (strlen(SettingsText(SET_INFLUXDB_BUCKET)) == 0 || + (2 == Settings->influxdb_version && (strlen(SettingsText(SET_INFLUXDB_ORG)) == 0 || + strlen(SettingsText(SET_INFLUXDB_TOKEN)) == 0))) { + AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Invalid parameters")); + return false; + } + IFDB._serverUrl = "http://"; + IFDB._serverUrl += SettingsText(SET_INFLUXDB_HOST); + IFDB._serverUrl += ":"; + IFDB._serverUrl += Settings->influxdb_port; + + IFDB._writeUrl = IFDB._serverUrl; + if (2 == Settings->influxdb_version) { + IFDB._writeUrl += "/api/v2/write?org="; + IFDB._writeUrl += UrlEncode(SettingsText(SET_INFLUXDB_ORG)); + IFDB._writeUrl += "&bucket="; + IFDB._writeUrl += UrlEncode(SettingsText(SET_INFLUXDB_BUCKET)); + } else { + IFDB._writeUrl += "/write?db="; + IFDB._writeUrl += UrlEncode(SettingsText(SET_INFLUXDB_BUCKET)); + IFDB._writeUrl += InfluxDbAuth(); + } + AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Url %s"), IFDB._writeUrl.c_str()); + + return true; +} + +bool InfluxDbInit(void) { + IFDBwifiClient = new WiFiClient; + if (!IFDBhttpClient) { + IFDBhttpClient = new HTTPClient; + } + IFDBhttpClient->setReuse(IFDB._connectionReuse); + char server[32]; + snprintf_P(server, sizeof(server), PSTR("Tasmota/%s (%s)"), TasmotaGlobal.version, GetDeviceHardware().c_str()); + IFDBhttpClient->setUserAgent(server); + return true; +} + +void InfluxDbBeforeRequest() { + if (strlen(SettingsText(SET_INFLUXDB_TOKEN)) > 0) { + String auth_token = SettingsText(SET_INFLUXDB_TOKEN); + IFDBhttpClient->addHeader(F("Authorization"), "Token " + auth_token); + } + const char *headerKeys[] = { RetryAfter, TransferEncoding }; + IFDBhttpClient->collectHeaders(headerKeys, 2); +} + +void InfluxDbAfterRequest(int expectedStatusCode, bool modifyLastConnStatus) { + if (modifyLastConnStatus) { + IFDB._lastRequestTime = millis(); +// AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: HTTP status code %d"), IFDB._lastStatusCode); + IFDB._lastRetryAfter = 0; + if (IFDB._lastStatusCode >= 429) { // Retryable server errors + if (IFDBhttpClient->hasHeader(RetryAfter)) { + IFDB._lastRetryAfter = IFDBhttpClient->header(RetryAfter).toInt(); + AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Reply after %d"), IFDB._lastRetryAfter); + } + } + } + IFDB._lastErrorResponse = ""; + if (IFDB._lastStatusCode != expectedStatusCode) { + if (IFDB._lastStatusCode > 0) { + IFDB._lastErrorResponse = IFDBhttpClient->getString(); // {"error":"database not found: \"db\""}\n + } else { + IFDB._lastErrorResponse = IFDBhttpClient->errorToString(IFDB._lastStatusCode); + } + IFDB._lastErrorResponse.trim(); // Remove trailing \n + AddLog(LOG_LEVEL_INFO, PSTR("IFX: Error %s"), IFDB._lastErrorResponse.c_str()); + } +} + +bool InfluxDbValidateConnection(void) { + if (!IFDBwifiClient && !InfluxDbInit()) { + IFDB._lastStatusCode = 0; + IFDB._lastErrorResponse = FPSTR(UninitializedMessage); + return false; + } + // on version 1.x /ping will by default return status code 204, without verbose + String url = IFDB._serverUrl + (2 == Settings->influxdb_version ? "/health" : "/ping?verbose=true"); + if (1 == Settings->influxdb_version) { + url += InfluxDbAuth(); + } + AddLog(LOG_LEVEL_INFO, PSTR("IFX: Validating connection to %s"), url.c_str()); + + if (!IFDBhttpClient->begin(*IFDBwifiClient, url)) { + AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Begin failed")); + return false; + } + IFDBhttpClient->addHeader(F("Accept"), F("application/json")); + + IFDB._lastStatusCode = IFDBhttpClient->GET(); + IFDB._lastErrorResponse = ""; + InfluxDbAfterRequest(200, false); + IFDBhttpClient->end(); + + return IFDB._lastStatusCode == 200; +} + +int InfluxDbPostData(const char *data) { + if (!IFDBwifiClient && !InfluxDbInit()) { + IFDB._lastStatusCode = 0; + IFDB._lastErrorResponse = FPSTR(UninitializedMessage); + return 0; + } + if (data) { + if (!IFDBhttpClient->begin(*IFDBwifiClient, IFDB._writeUrl)) { + AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Begin failed")); + return false; + } + + Trim((char*)data); // Remove trailing \n + AddLog(IFDB.log_level, PSTR("IFX: Sending\n%s"), data); + IFDBhttpClient->addHeader(F("Content-Type"), F("text/plain")); + InfluxDbBeforeRequest(); + IFDB._lastStatusCode = IFDBhttpClient->POST((uint8_t*)data, strlen(data)); + InfluxDbAfterRequest(204, true); + IFDBhttpClient->end(); + } + return IFDB._lastStatusCode; +} + +/*********************************************************************************************\ + * Data preparation +\*********************************************************************************************/ + +char* InfluxDbNumber(char* alternative, JsonParserToken value) { + if (value.isValid()) { + char* source = (char*)value.getStr(); + // Test for valid numeric data ('-.0123456789') or ON, OFF etc. as defined in kOptions + if (source != nullptr) { + char* out = source; + // Convert special text as found in kOptions to a number + // Like "OFF" -> 0, "ON" -> 1, "TOGGLE" -> 2 + int number = GetStateNumber(source); + if (number >= 0) { + itoa(number, alternative, 10); + out = alternative; + } + if (IsNumeric(out)) { + return out; + } + } + } + return nullptr; +} + +void InfluxDbProcessJson(void) { + if (!IFDB.init) { return; } + + AddLog(IFDB.log_level, PSTR("IFX: Process %s"), ResponseData()); + +// String jsonStr = ResponseData(); // Make a copy before use +// JsonParser parser((char *)jsonStr.c_str()); + JsonParser parser((char *)ResponseData()); // Destroys ResponseData but saves heap space + + JsonParserObject root = parser.getRootObject(); + if (root) { + char number[12]; // '1' to '255' + char linebuf[128]; // 'temperature,device=demo,sensor=ds18b20,id=01144A0CB2AA value=26.44\n' + char sensor[64]; // 'ds18b20' + char type[64]; // 'temperature' + char sensor_id[32]; // ',id=01144A0CB2AA' + sensor_id[0] = '\0'; + + String data = ""; // Multiple linebufs + + for (auto key1 : root) { + JsonParserToken value1 = key1.getValue(); + if (value1.isObject()) { + JsonParserObject Object2 = value1.getObject(); + for (auto key2 : Object2) { + JsonParserToken value2 = key2.getValue(); + if (value2.isObject()) { + JsonParserObject Object3 = value2.getObject(); + for (auto key3 : Object3) { + char* value = InfluxDbNumber(number, key3.getValue()); + if ((value != nullptr) && key2.isValid() && key3.isValid()) { + // Level 3 + LowerCase(sensor, key2.getStr()); + LowerCase(type, key3.getStr()); + // temperature,device=tasmota1,sensor=DS18B20 value=24.44 + snprintf_P(linebuf, sizeof(linebuf), PSTR("%s,device=%s,sensor=%s value=%s\n"), + type, TasmotaGlobal.mqtt_topic, sensor, value); + data += linebuf; + } + } + } else { + // Level 2 + // { ... "ANALOG":{"Temperature":184.72},"DS18B20":{"Id":"01144A0CB2AA","Temperature":24.88},"HTU21":{"Temperature":25.32,"Humidity":49.2,"DewPoint":13.88},"Global":{"Temperature":24.88,"Humidity":49.2,"DewPoint":13.47}, ... } + if (!key1.isValid() || !value2.isValid()) { continue; } + LowerCase(type, key2.getStr()); + bool is_id = (!strcmp_P(type, PSTR("id"))); // Index for DS18B20 + bool is_array = value2.isArray(); + char* value = nullptr; + if (is_id && !is_array) { + snprintf_P(sensor_id, sizeof(sensor_id), PSTR(",id=%s"), value2.getStr()); + } else { + value = InfluxDbNumber(number, (is_array) ? (value2.getArray())[0] : value2); + } + if ((value != nullptr) && key2.isValid()) { + LowerCase(sensor, key1.getStr()); + +// AddLog(LOG_LEVEL_DEBUG, PSTR("IFX2: sensor %s (%s), type %s (%s)"), key1.getStr(), sensor, key2.getStr(), type); + + if (is_array) { + JsonParserArray arr = value2.getArray(); + uint32_t i = 0; + for (auto val : arr) { + i++; + // power1,device=shelly25,sensor=energy value=0.00 + // power2,device=shelly25,sensor=energy value=4.12 + snprintf_P(linebuf, sizeof(linebuf), PSTR("%s%d,device=%s,sensor=%s%s value=%s\n"), + type, i, TasmotaGlobal.mqtt_topic, sensor, sensor_id, val.getStr()); + data += linebuf; + } + } else { + // temperature,device=demo,sensor=ds18b20,id=01144A0CB2AA value=22.63 + snprintf_P(linebuf, sizeof(linebuf), PSTR("%s,device=%s,sensor=%s%s value=%s\n"), + type, TasmotaGlobal.mqtt_topic, sensor, sensor_id, value); + data += linebuf; + } + sensor_id[0] = '\0'; + } + } + } + } else { + // Level 1 + // {"Time":"2021-08-13T14:15:56","Switch1":"ON","Switch2":"OFF", ... "TempUnit":"C"} + char* value = InfluxDbNumber(number, value1); + if ((value != nullptr) && key1.isValid()) { + LowerCase(type, key1.getStr()); + // switch1,device=demo,sensor=device value=0 + // power1,device=demo,sensor=device value=1 + snprintf_P(linebuf, sizeof(linebuf), PSTR("%s,device=%s,sensor=device value=%s\n"), + type, TasmotaGlobal.mqtt_topic, value); + data += linebuf; + } + } + } + if (data.length() > 0 ) { +// AddLog(LOG_LEVEL_DEBUG, PSTR("IFX: Sensor data:\n%s"), data.c_str()); + InfluxDbPostData(data.c_str()); + } + } +} + +void InfluxDbPublishPowerState(uint32_t device) { + Response_P(PSTR("{\"power%d\":\"%d\"}"), device, bitRead(TasmotaGlobal.power, device -1)); + InfluxDbProcessJson(); +} + +void InfluxDbLoop(void) { + if (!TasmotaGlobal.global_state.network_down) { + IFDB.interval--; + if (IFDB.interval <= 0 || IFDB.interval > Settings->tele_period) { + IFDB.interval = Settings->tele_period; + if (!IFDB.init) { + if (InfluxDbParameterInit()) { + IFDB.init = InfluxDbValidateConnection(); + if (IFDB.init) { + IFDB.interval = INFLUXDB_INITIAL; + } + } + } else { + + // {"Time":"2021-08-14T17:19:33","Uptime":"0T00:24:09","UptimeSec":1449,"Heap":29,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"ON","Wifi":{"AP":1,"SSId":"indebuurt_IoT","BSSId":"98:38:C9:CA:17:C1","Channel":11,"Mode":"11n","RSSI":100,"Signal":-44,"LinkCount":1,"Downtime":"0T00:00:03"}} + uint32_t backup = Settings->flag.device_index_enable; + Settings->flag.device_index_enable = 1; // Force indexes to power + ResponseClear(); + MqttShowState(); // Pull state data + Settings->flag.device_index_enable = backup; + InfluxDbProcessJson(); + + // {"Time":"2021-08-14T17:19:33","Switch1":"ON","Switch2":"OFF","ANALOG":{"Temperature":184.72},"DS18B20":{"Id":"01144A0CB2AA","Temperature":27.50},"HTU21":{"Temperature":28.23,"Humidity":39.7,"DewPoint":13.20},"Global":{"Temperature":27.50,"Humidity":39.7,"DewPoint":12.55},"TempUnit":"C"} + ResponseClear(); + if (MqttShowSensor()) { // Pull sensor data + InfluxDbProcessJson(); + }; + + } + } + } +} + +/*********************************************************************************************\ + * Commands +\*********************************************************************************************/ + +#define D_PRFX_INFLUXDB "Ifx" +#define D_CMND_INFLUXDBLOG "Log" +#define D_CMND_INFLUXDBHOST "Host" +#define D_CMND_INFLUXDBPORT "Port" +#define D_CMND_INFLUXDBUSER "User" +#define D_CMND_INFLUXDBORG "Org" +#define D_CMND_INFLUXDBPASSWORD "Password" +#define D_CMND_INFLUXDBTOKEN "Token" +#define D_CMND_INFLUXDBDATABASE "Database" +#define D_CMND_INFLUXDBBUCKET "Bucket" + +const char kInfluxDbCommands[] PROGMEM = D_PRFX_INFLUXDB "|" // Prefix + "|" D_CMND_INFLUXDBLOG "|" + D_CMND_INFLUXDBHOST "|" D_CMND_INFLUXDBPORT "|" + D_CMND_INFLUXDBUSER "|" D_CMND_INFLUXDBORG "|" + D_CMND_INFLUXDBPASSWORD "|" D_CMND_INFLUXDBTOKEN "|" + D_CMND_INFLUXDBDATABASE "|" D_CMND_INFLUXDBBUCKET; + +void (* const InfluxCommand[])(void) PROGMEM = { + &CmndInfluxDbState, &CmndInfluxDbLog, + &CmndInfluxDbHost, &CmndInfluxDbPort, + &CmndInfluxDbUser, &CmndInfluxDbUser, + &CmndInfluxDbPassword, &CmndInfluxDbPassword, + &CmndInfluxDbDatabase, &CmndInfluxDbDatabase }; + +void InfluxDbReinit(void) { + IFDB.init = false; + IFDB.interval = 2; +} + +void CmndInfluxDbState(void) { + if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1)) { + if (Settings->sbflag1.influxdb_state != XdrvMailbox.payload) { + Settings->sbflag1.influxdb_state = XdrvMailbox.payload; + InfluxDbReinit(); + } + } + Response_P(PSTR("{\"" D_PRFX_INFLUXDB "\":{\"State\":\"%s\",\"" D_CMND_INFLUXDBHOST "\":\"%s\",\"" D_CMND_INFLUXDBPORT "\":%d,\"Version\":%d"), + GetStateText(Settings->sbflag1.influxdb_state), SettingsText(SET_INFLUXDB_HOST), Settings->influxdb_port, Settings->influxdb_version); + if (1 == Settings->influxdb_version) { + ResponseAppend_P(PSTR(",\"" D_CMND_INFLUXDBDATABASE "\":\"%s\",\"" D_CMND_INFLUXDBUSER "\":\"%s\"}}"), + SettingsText(SET_INFLUXDB_BUCKET), SettingsText(SET_INFLUXDB_ORG)); + } else { + ResponseAppend_P(PSTR(",\"" D_CMND_INFLUXDBBUCKET "\":\"%s\",\"" D_CMND_INFLUXDBORG "\":\"%s\"}}"), + SettingsText(SET_INFLUXDB_BUCKET), SettingsText(SET_INFLUXDB_ORG)); + } +} + +void CmndInfluxDbLog(void) { + if ((XdrvMailbox.payload >= LOG_LEVEL_NONE) && (XdrvMailbox.payload <= LOG_LEVEL_DEBUG_MORE)) { + IFDB.log_level = XdrvMailbox.payload; + } + ResponseCmndNumber(IFDB.log_level); +} + +void CmndInfluxDbHost(void) { + if (XdrvMailbox.data_len > 0) { + SettingsUpdateText(SET_INFLUXDB_HOST, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? PSTR(INFLUXDB_HOST) : XdrvMailbox.data); + InfluxDbReinit(); + } + ResponseCmndChar(SettingsText(SET_INFLUXDB_HOST)); +} + +void CmndInfluxDbPort(void) { + if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload < 65536)) { + Settings->influxdb_port = (1 == XdrvMailbox.payload) ? INFLUXDB_PORT : XdrvMailbox.payload; + InfluxDbReinit(); + } + ResponseCmndNumber(Settings->influxdb_port); +} + +void CmndInfluxDbUser(void) { + if (XdrvMailbox.data_len > 0) { + Settings->influxdb_version = (XdrvMailbox.command[3] == 'U') ? 1 : 2; // User or Org + SettingsUpdateText(SET_INFLUXDB_ORG, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? PSTR(INFLUXDB_ORG) : XdrvMailbox.data); + InfluxDbReinit(); + } + ResponseCmndChar(SettingsText(SET_INFLUXDB_ORG)); +} + +void CmndInfluxDbPassword(void) { + bool show_asterisk = (2 == XdrvMailbox.index); + if (XdrvMailbox.data_len > 0) { + Settings->influxdb_version = (XdrvMailbox.command[3] == 'P') ? 1 : 2; // Password or Token + SettingsUpdateText(SET_INFLUXDB_TOKEN, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? PSTR(INFLUXDB_TOKEN) : XdrvMailbox.data); + if (!show_asterisk) { + ResponseCmndChar(SettingsText(SET_INFLUXDB_TOKEN)); + } + InfluxDbReinit(); + } else { + show_asterisk = true; + } + if (show_asterisk) { + Response_P(S_JSON_COMMAND_ASTERISK, XdrvMailbox.command); + } +} + +void CmndInfluxDbDatabase(void) { + if (XdrvMailbox.data_len > 0) { + Settings->influxdb_version = (XdrvMailbox.command[3] == 'D') ? 1 : 2; // Database or Bucket + SettingsUpdateText(SET_INFLUXDB_BUCKET, (SC_CLEAR == Shortcut()) ? "" : (SC_DEFAULT == Shortcut()) ? PSTR(INFLUXDB_BUCKET) : XdrvMailbox.data); + InfluxDbReinit(); + } + ResponseCmndChar(SettingsText(SET_INFLUXDB_BUCKET)); +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv59(uint8_t function) { + bool result = false; + + if (FUNC_PRE_INIT == function) { + // Initial persistent settings executed only once + if (!Settings->sbflag1.influxdb_default) { + Settings->sbflag1.influxdb_state = INFLUXDB_STATE; + Settings->influxdb_version = INFLUXDB_VERSION; + Settings->influxdb_port = INFLUXDB_PORT; + SettingsUpdateText(SET_INFLUXDB_HOST, PSTR(INFLUXDB_HOST)); + SettingsUpdateText(SET_INFLUXDB_ORG, PSTR(INFLUXDB_ORG)); + SettingsUpdateText(SET_INFLUXDB_TOKEN, PSTR(INFLUXDB_TOKEN)); + SettingsUpdateText(SET_INFLUXDB_BUCKET, PSTR(INFLUXDB_BUCKET)); + Settings->sbflag1.influxdb_default = 1; + } + } else if (FUNC_COMMAND == function) { + result = DecodeCommand(kInfluxDbCommands, InfluxCommand); + } else if (Settings->sbflag1.influxdb_state) { + switch (function) { + case FUNC_EVERY_SECOND: + InfluxDbLoop(); + break; + } + } + return result; +} + +#endif // USE_INFLUXDB diff --git a/tasmota/xdrv_79_esp32_ble.ino b/tasmota/xdrv_79_esp32_ble.ino index b96338f75..94589f4c4 100644 --- a/tasmota/xdrv_79_esp32_ble.ino +++ b/tasmota/xdrv_79_esp32_ble.ino @@ -31,8 +31,8 @@ #define USE_BLE_ESP32 #endif -#ifdef ESP32 // ESP32 only. Use define USE_HM10 for ESP8266 support -#if CONFIG_IDF_TARGET_ESP32 +#ifdef ESP32 // ESP32 family only. Use define USE_HM10 for ESP8266 support +#if defined CONFIG_IDF_TARGET_ESP32 || defined CONFIG_IDF_TARGET_ESP32C3 #ifdef USE_BLE_ESP32 /* @@ -3121,22 +3121,18 @@ void CmndBLEOperation(void){ \*********************************************************************************************/ static void BLEPostMQTTSeenDevices(int type) { int remains = 0; -#ifdef MQTT_DATA_STRING - ResponseTime_P(PSTR("")); - String response_time = TasmotaGlobal.mqtt_data; + nextSeenDev = 0; +#ifdef MQTT_DATA_STRING int maxlen = 1024; char dest[maxlen]; do { - Response_P(response_time.c_str()); // Keep using same time stamp remains = getSeenDevicesToJson(dest, maxlen); - ResponseAppend_P(dest); + ResponseTime_P(dest); // no retain - this is present devices, not historic - MqttPublishPrefixTopicRulesProcess_P((1== type) ? TELE : STAT, PSTR("BLE")); + MqttPublishPrefixTopicRulesProcess_P((1 == type) ? TELE : STAT, PSTR("BLE")); } while (remains); #else - nextSeenDev = 0; - memset(TasmotaGlobal.mqtt_data, 0, sizeof(TasmotaGlobal.mqtt_data)); int timelen = ResponseTime_P(PSTR("")); char *dest = TasmotaGlobal.mqtt_data + timelen; @@ -3338,8 +3334,7 @@ static void mainThreadOpCallbacks() { static void BLEShowStats(){ uint32_t totalCount = BLEAdvertisment.totalCount; uint32_t deviceCount = seenDevices.size(); - ResponseTime_P(PSTR("")); - ResponseAppend_P(PSTR(",\"BLE\":{\"scans\":%u,\"adverts\":%u,\"devices\":%u,\"resets\":%u}}"), BLEScanCount, totalCount, deviceCount, BLEResets); + ResponseTime_P(PSTR(",\"BLE\":{\"scans\":%u,\"adverts\":%u,\"devices\":%u,\"resets\":%u}}"), BLEScanCount, totalCount, deviceCount, BLEResets); MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR("BLE"), 0); } @@ -3723,7 +3718,7 @@ void sendExample(){ #endif -#endif // CONFIG_IDF_TARGET_ESP32 +#endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3 #endif // ESP32 diff --git a/tasmota/xdrv_81_esp32_webcam.ino b/tasmota/xdrv_81_esp32_webcam.ino index 41df7d111..617af46fb 100644 --- a/tasmota/xdrv_81_esp32_webcam.ino +++ b/tasmota/xdrv_81_esp32_webcam.ino @@ -252,7 +252,7 @@ uint32_t WcSetup(int32_t fsiz) { // if PSRAM IC present, init with UXGA resolution and higher JPEG quality // for larger pre-allocated frame buffer. - bool psram = psramFound(); + bool psram = UsePSRAM(); if (psram) { config.frame_size = FRAMESIZE_UXGA; config.jpeg_quality = 10; @@ -791,6 +791,7 @@ void HandleWebcamMjpegTask(void) { _jpg_buf = wc_fb->buf; } + Wc.client.print("--" BOUNDARY "\r\n"); Wc.client.printf("Content-Type: image/jpeg\r\n" "Content-Length: %d\r\n" "\r\n", static_cast(_jpg_buf_len)); @@ -801,7 +802,8 @@ void HandleWebcamMjpegTask(void) { Wc.stream_active=0; AddLog(LOG_LEVEL_DEBUG, PSTR("CAM: Send fail")); }*/ - Wc.client.print("\r\n--" BOUNDARY "\r\n"); +// Wc.client.print("\r\n--" BOUNDARY "\r\n"); + Wc.client.print("\r\n"); #ifdef COPYFRAME if (tmp_picstore.buff) { free(tmp_picstore.buff); } diff --git a/tasmota/xdrv_82_esp32_ethernet.ino b/tasmota/xdrv_82_esp32_ethernet.ino index 96e9b3060..d276ad7fd 100644 --- a/tasmota/xdrv_82_esp32_ethernet.ino +++ b/tasmota/xdrv_82_esp32_ethernet.ino @@ -67,15 +67,16 @@ //******************************************************************************************** #ifndef ETH_ADDRESS -#define ETH_ADDRESS 0 // esp_eth.h eth_phy_base_t: 0 = PHY0 .. 31 = PHY31 +#define ETH_ADDRESS 0 // ETH.h uint8_t: 0 = PHY0 .. 31 = PHY31 #endif #ifndef ETH_TYPE -#define ETH_TYPE ETH_PHY_LAN8720 // ETH.h eth_phy_type_t: 0 = ETH_PHY_LAN8720, 1 = ETH_PHY_TLK110, 2 = ETH_PHY_IP101 +#define ETH_TYPE ETH_PHY_LAN8720 // ETH.h eth_phy_type_t: 0 = ETH_PHY_LAN8720, 1 = ETH_PHY_TLK110/ETH_PHY_IP101, 2 = ETH_PHY_RTL8201, 3 = ETH_PHY_DP83848, 4 = ETH_PHY_DM9051, 5 = ETH_PHY_KSZ8081 + #endif #ifndef ETH_CLKMODE -#define ETH_CLKMODE ETH_CLOCK_GPIO0_IN // esp_eth.h eth_clock_mode_t: 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT +#define ETH_CLKMODE ETH_CLOCK_GPIO0_IN // ETH.h eth_clock_mode_t: 0 = ETH_CLOCK_GPIO0_IN, 1 = ETH_CLOCK_GPIO0_OUT, 2 = ETH_CLOCK_GPIO16_OUT, 3 = ETH_CLOCK_GPIO17_OUT #endif */ @@ -99,6 +100,7 @@ void EthernetEvent(WiFiEvent_t event) { Settings->ipv4_address[1] = (uint32_t)ETH.gatewayIP(); Settings->ipv4_address[2] = (uint32_t)ETH.subnetMask(); Settings->ipv4_address[3] = (uint32_t)ETH.dnsIP(); + Settings->ipv4_address[4] = (uint32_t)ETH.dnsIP(1); TasmotaGlobal.global_state.eth_down = 0; break; case SYSTEM_EVENT_ETH_DISCONNECTED: diff --git a/tasmota/xdrv_85_BLE_EQ3_TRV.ino b/tasmota/xdrv_85_BLE_EQ3_TRV.ino new file mode 100644 index 000000000..3427869ac --- /dev/null +++ b/tasmota/xdrv_85_BLE_EQ3_TRV.ino @@ -0,0 +1,1767 @@ +/* + xdrv_85_BLE_EQ3_TRV.ino - EQ3 radiator valve sense and control via BLE_ESP32 support for Tasmota + + Copyright (C) 2020 Simon Hailes + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + -------------------------------------------------------------------------------------------- + Version yyyymmdd Action Description + -------------------------------------------------------------------------------------------- + 1.0.0.0 20210910 publish - renamed to xdrv_85, and checked with TAS latest dev branch + 0.0.0.0 20201213 created - initial version +*/ + + +/* + +Commands: +e.g. +trv 001A22092EE0 settemp 22.5 + +trvperiod n - set polling period in seconds (default teleperiod at boot) +trvonlyaliased *0/1 - only hear devices with BLEAlias set +trvMatchPrefix 0/*1 - if set, then it will add trvs to the seen list which have mac starting with : + macs in macprefixes, currently only 001a22 +Note: anything with BLEAlias starting "EQ3" will be added to the seen list. +trvHideFailedPoll 0/*1 - if set, then failed polls will not be sent to EQ3 +trvMinRSSI -n - the minimum RSSI value at which to attempt to poll + + +trv reset - clear device list +trv devlist - report seen devices. Active scanning required, not passive, as it looks for names +trv scan - same as devlist +trv state - report general state (see below for MQTT) +trv raw - send a raw command +trv on - set temp to 30 -> display ON on EQ3 +trv off - set temp to 4.5 -> display OFF on EQ3 +trv boost - set boost +trv unboost - turn off boost +trv lock - manual lock of physical buttons +trv unlock - manual unlock of physical buttons +trv auto - set EQ3 to auto mode +trv manual - set EQ3 to manual mode +trv mode auto|manual - set EQ3 to mode auto|manual? +trv day - set EQ3 to day temp +trv night - set EQ3 to night temp +trv settemp 20.5 - set EQ3 to temp +trv settime - set time to Tasmota time (untested) +trv settime - set time +trv offset 1.5 - set offset temp +trv setdaynight 22 17.5 - set day and night mode temps +trv setwindowtempdur 12.5 30 - set window open temp and duration in mins + +trv reqprofile <0-6> - request a profile for a day fo the week. +trv setprofile <0-6> 20.5-07:30,17-17:00,22.5-22:00,17-24:00 (up to 7 temp-HH:MM) - set a profile for a day fo the week. + +Responses: +normal: +stat/EQ3/001A22092C9A = { + "cmd":"state", + "result":"ok", + "RSSI":-83, + "stattime":1613814193, + "temp":21.0, + "posn":0, + "mode":"auto", + "boost":"inactive", + "dst":"set", + "window":"closed", + "state":"unlocked", + "battery":"GOOD" +} + +holiday: +as above, but adds ,"holidayend":"YY-MM-DD HH:MM" + +when trv reqprofile is used, adds: + "profiledayN":"20.5-07:30,17.0-17:00,22.5-22:00,17.0-24:00" +where N is the day (0-6) (0 = saturday?). + +when trv setprofile is used, adds: +"profiledayset":N +where N is the day (0-6) (0 = saturday?). + +on error: + "result":"fail", + +The driver will try a command three times before reporting + + +4 digit pin calculation: (just for info) +serialno = "REQ0123456" +pin = [] + +x = str((ord(serialno[3]) ^ ord(serialno[7])) % 10) +pin.append(x) +x = str((ord(serialno[4]) ^ ord(serialno[8])) % 10) +pin.append(x) +x = str((ord(serialno[5]) ^ ord(serialno[9])) % 10) +pin.append(x) +x = str((ord(serialno[0]) - ord('A') ^ ord(serialno[6]) - ord('0')) % 10) +pin.append(x) +print("".join(pin)) + +*/ + + + + +//#define VSCODE_DEV + +#ifdef VSCODE_DEV +#define ESP32 +#define USE_BLE_ESP32 +#define USE_EQ3_ESP32 +#endif + +// for testing of BLE_ESP32, we remove xsns_62_MI_ESP32.ino completely, and instead add this modified xsns_52_ibeacon_BLE_ESP32.ino +#if CONFIG_IDF_TARGET_ESP32 +#ifdef USE_EQ3_ESP32 +#ifdef ESP32 // ESP32 only. Use define USE_HM10 for ESP8266 support +#ifdef USE_BLE_ESP32 + +#define XDRV_85 85 +#define D_CMND_EQ3 "trv" + +// uncomment for more debug messages +//#define EQ3_DEBUG + +namespace EQ3_ESP32 { + +void CmndTrv(void); +void CmndTrvPeriod(void); +void CmndTrvOnlyAliased(void); +void CmndTrvMatchPrefix(void); +void CmndTrvMinRSSI(void); +void CmndTrvHideFailedPoll(void); + +const char kEQ3_Commands[] PROGMEM = D_CMND_EQ3"|" + "|" + "period|" + "onlyaliased|" + "MatchPrefix|" + "MinRSSI|" + "HideFailedPoll"; + +void (*const EQ3_Commands[])(void) PROGMEM = { + &CmndTrv, + &CmndTrvPeriod, + &CmndTrvOnlyAliased, + &CmndTrvMatchPrefix, + &CmndTrvMinRSSI, + &CmndTrvHideFailedPoll +}; + + +const char *cmdnames[] = { + "poll", + "raw", + "state", + "settime", + "settemp", + "offset", + "setdaynight", + "setwindowtempdur", + "setholiday", + "boost", + "unboost", + "unlock", + "auto", + "manual", + "eco", + "on", + "off", + "valve", + "mode", + "day", + "night", + "reqprofile", + "setprofile" +}; + +const uint8_t *macprefixes[1] = { + (uint8_t *)"\x00\x1a\x22" +}; + +int EQ3GenericOpCompleteFn(BLE_ESP32::generic_sensor_t *pStruct); + +const char EQ3_Svc[] PROGMEM = "3e135142-654f-9090-134a-a6ff5bb77046"; +const char EQ3_rw_Char[] PROGMEM = "3fa4585a-ce4a-3bad-db4b-b8df8179ea09"; +const char EQ3_notify_Char[] PROGMEM = "d0e8434d-cd29-0996-af41-6c90f4e0eb2a"; + +struct eq3_device_tag{ + uint8_t addr[7]; + int8_t RSSI; + uint64_t timeoutTime; + uint8_t pairing; + uint8_t lastStatus[10]; // last received 02 stat + uint8_t lastStatusLen; + uint32_t lastStatusTime; // in utc + uint8_t nextDiscoveryData; +} eq3_device_t; + +/*********************************************************************************************\ + * variables to control operation +\*********************************************************************************************/ +int retries = 0; +// allow 240s before timeout of sa device - based on that we restart BLE if we don't see adverts for 120s +#define EQ3_TIMEOUT 240L + +uint8_t pairingaddr[7] = {0,0,0,0,0,0}; +char pairingserial[20]; +uint8_t pairing = 0; + +#define EQ3_NUM_DEVICESLOTS 16 +eq3_device_tag EQ3Devices[EQ3_NUM_DEVICESLOTS]; +void *EQ3mutex = nullptr; + +int EQ3Period = 300; +uint8_t EQ3OnlyAliased = 0; +uint8_t EQ3MatchPrefix = 1; +uint8_t opInProgress = 0; +int seconds = 20; +int EQ3CurrentSingleSlot = 0; + +uint8_t EQ3TopicStyle = 1; +uint8_t EQ3HideFailedPoll = 1; +int8_t trvMinRSSI = -99; + +// control of timing of sending polling. +// we leave an interval between polls to allow scans to take place +int intervalSeconds = 10; // min seconds between operations +int intervalSecondsCounter = 0; // set when an operation is over to intervalSeconds +int nextEQ3Poll = EQ3_NUM_DEVICESLOTS; // set to zero to start a poll cycle + +#pragma pack( push, 1 ) // aligned structures for size +struct op_t { + uint8_t addr[7]; + uint8_t towrite[16]; + uint8_t writelen; + uint8_t cmdtype; +}; +#pragma pack(pop) + +std::deque opQueue; + + +/*********************************************************************************************\ + * Functions +\*********************************************************************************************/ + +const char *addrStr(const uint8_t *addr, int useAlias = 0){ + static char addrstr[32]; + + const char *id = nullptr; + if (useAlias){ + id = BLE_ESP32::getAlias(addr); + } + if (!id || !(*id)){ + id = addrstr; + BLE_ESP32::dump(addrstr, 13, addr, 6); + } else { + } + + return id; +} + +char *topicPrefix(int prefix, const uint8_t *addr, int useAlias){ + static char stopic[TOPSZ]; + const char *id = addrStr(addr, useAlias); + if (!EQ3TopicStyle){ + GetTopic_P(stopic, prefix, TasmotaGlobal.mqtt_topic, PSTR("")); + strcat(stopic, PSTR("EQ3/")); + strcat(stopic, id); + } else { + char p[] = "EQ3"; + GetTopic_P(stopic, prefix, p, id); + } + return stopic; +} + + + +// return 0+ if we find the addr has one of our listed prefixes +// return -1 if we don't recognise the mac +int matchPrefix(const uint8_t *addr){ + for (int i = 0; i < sizeof(macprefixes)/sizeof(*macprefixes); i++){ + if (!memcmp(addr, macprefixes[i], 3)){ + return i; + } + } + return -1; +} + + +bool EQ3Operation(const uint8_t *MAC, const uint8_t *data, int datalen, int cmdtype, int retries_in = 0) { + BLE_ESP32::generic_sensor_t *op = nullptr; + + // ALWAYS use this function to create a new one. + int res = BLE_ESP32::newOperation(&op); + if (!res){ + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 %s:Can't get a newOperation from BLE"), addrStr(MAC, cmdtype & 0x80)); + retries = 0; + return 0; + } else { +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 %s:got a newOperation from BLE"), addrStr(MAC, cmdtype & 0x80)); +#endif + } + + NimBLEAddress addr((uint8_t *)MAC); + op->addr = addr; + + bool havechar = false; + op->serviceUUID = NimBLEUUID(EQ3_Svc); + op->characteristicUUID = NimBLEUUID(EQ3_rw_Char); + op->notificationCharacteristicUUID = NimBLEUUID(EQ3_notify_Char); + + if (data && datalen) { + op->writelen = datalen; + memcpy(op->dataToWrite, data, datalen); + } else { + op->writelen = 1; + op->dataToWrite[0] = 0x03; // just request status + } + + // this op will call us back on complete or failure. + op->completecallback = (void *)EQ3GenericOpCompleteFn; + // store this away for later + op->context = (void *)cmdtype; + + res = BLE_ESP32::extQueueOperation(&op); + if (!res){ + // if it fails to add to the queue, do please delete it + BLE_ESP32::freeOperation(&op); + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 %s:Failed to queue new operation - deleted"), addrStr(MAC, cmdtype & 0x80)); + retries = 0; + } else { + if (retries_in){ + retries = retries_in; + } + } + + return res; +} + +int EQ3DoOp(){ + if (!opInProgress){ + if (opQueue.size()){ + op_t* op = opQueue[0]; + if (EQ3Operation(op->addr, op->towrite, op->writelen, op->cmdtype, 4)){ + opQueue.pop_front(); + opInProgress = 1; + AddLog(LOG_LEVEL_DEBUG, PSTR("EQ3 %s:Op dequeued len now %d"), addrStr(op->addr, (op->cmdtype & 0x80)), opQueue.size()); + delete op; + return 1; + } else { + AddLog(LOG_LEVEL_ERROR, PSTR("EQ3 %s:Op BLE could not start op queue len %d"), addrStr(op->addr, (op->cmdtype & 0x80)), opQueue.size()); + } + } + } + return 0; +} + +int EQ3QueueOp(const uint8_t *MAC, const uint8_t *data, int datalen, int cmdtype, int useAlias) { + op_t* newop = new op_t; + memcpy(newop->addr, MAC, 6); + memcpy(newop->towrite, data, datalen); + newop->writelen = datalen; + newop->cmdtype = cmdtype | (useAlias?0x80:0); + opQueue.push_back(newop); + int qlen = opQueue.size(); + AddLog(LOG_LEVEL_DEBUG, PSTR("EQ3 %s: Op queued len now %d"), addrStr(newop->addr, (newop->cmdtype & 0x80)), qlen); + EQ3DoOp(); + return qlen; +} + +int EQ3ParseOp(BLE_ESP32::generic_sensor_t *op, bool success, int retries){ + int res = 0; + opInProgress = 0; + ResponseClear(); + + uint8_t addrev[7]; + const uint8_t *native = op->addr.getNative(); + memcpy(addrev, native, 6); + BLE_ESP32::ReverseMAC(addrev); + + eq3_device_tag *eq3 = nullptr; + + int free = -1; + for (int i = 0; i < EQ3_NUM_DEVICESLOTS; i++){ + if (!memcmp(EQ3Devices[i].addr, addrev, 6)){ + eq3 = &EQ3Devices[i]; + break; + } + } + + int cmdtype = (((uint32_t)op->context) & 0xff); + const char *cmdType = PSTR("invalid"); + int useAlias = cmdtype & 0x80; + cmdtype &= 0x7f; + if ((cmdtype >= 0) && (cmdtype < sizeof(cmdnames)/sizeof(*cmdnames))){ + cmdType = cmdnames[cmdtype]; + } + + ResponseAppend_P(PSTR("{")); + ResponseAppend_P(PSTR("\"cmd\":\"%s\""), cmdType); + ResponseAppend_P(PSTR(",\"result\":\"%s\""), success? "ok":"fail"); + ResponseAppend_P(PSTR(",\"MAC\":\"%s\""), addrStr(addrev)); + const char *host = NetworkHostname(); + ResponseAppend_P(PSTR(",\"tas\":\"%s\""), host); + if (cmdtype == 1){ + char raw[40]; + BLE_ESP32::dump(raw, 40, op->dataNotify, op->notifylen); + ResponseAppend_P(PSTR(",\"raw\":\"%s\""), raw); + } + + uint8_t *status = {0}; + uint8_t statlen = 0; + uint32_t stattime = 0; + + if (success){ + if ((op->notifylen >= 6) && (op->dataNotify[0] == 2) && (op->dataNotify[1] == 1)){ + if (eq3){ + memcpy(eq3->lastStatus, op->dataNotify, (op->notifylen <= 10)?op->notifylen:10); + eq3->lastStatusLen = (op->notifylen <= 10)?op->notifylen:10; + eq3->lastStatusTime = UtcTime(); + } + } + + status = op->dataNotify; + statlen = op->notifylen; + stattime = UtcTime(); + } + + if (eq3){ + status = eq3->lastStatus; + statlen = eq3->lastStatusLen; + stattime = eq3->lastStatusTime; + ResponseAppend_P(PSTR(",\"RSSI\":%d"), eq3->RSSI); + } + + if ((statlen >= 6) && (status[0] == 2) && (status[1] == 1)){ + ResponseAppend_P(PSTR(",\"stattime\":%u"), stattime); + ResponseAppend_P(PSTR(",\"temp\":%2.1f"), ((float)status[5])/2); + ResponseAppend_P(PSTR(",\"posn\":%d"), status[3]); + int stat = status[2]; + ResponseAppend_P(PSTR(",\"mode\":")); + switch (stat & 3){ + case 0: + ResponseAppend_P(PSTR("\"auto\"")); + break; + case 1: + ResponseAppend_P(PSTR("\"manual\"")); + break; + case 2: + ResponseAppend_P(PSTR("\"holiday\"")); + break; + case 3: + ResponseAppend_P(PSTR("\"manualholiday\"")); + break; + } + + ResponseAppend_P(PSTR(",\"hassmode\":")); + do { + //0201283B042A + // its in auto + if ((stat & 3) == 0) { ResponseAppend_P(PSTR("\"auto\"")); break; } + // it's set to 'OFF' + if (((stat & 3) == 1) && (status[5] == 9)) { ResponseAppend_P(PSTR("\"off\"")); break; } + // it's actively heating (valve open) + if (((stat & 3) == 1) && (status[5] > 9) && (status[3] > 0)) { ResponseAppend_P(PSTR("\"heat\"")); break; } + // it's achieved temp (valve closed) + if (((stat & 3) == 1) && (status[5] > 9)) { ResponseAppend_P(PSTR("\"idle\"")); break; } + ResponseAppend_P(PSTR("\"idle\"")); + break; + } while (0); + + ResponseAppend_P(PSTR(",\"boost\":\"%s\""), (stat & 4)?"active":"inactive"); + ResponseAppend_P(PSTR(",\"dst\":\"%s\""), (stat & 8)?"set":"unset"); + ResponseAppend_P(PSTR(",\"window\":\"%s\""), (stat & 16)?"open":"closed"); + ResponseAppend_P(PSTR(",\"state\":\"%s\""), (stat & 32)?"locked":"unlocked"); + ResponseAppend_P(PSTR(",\"battery\":\"%s\""), (stat & 128)?"LOW":"GOOD"); + } + + if ((statlen >= 10) && (status[0] == 2) && (status[1] == 1)){ + int mm = status[8] * 30; + int hh = mm/60; + mm = mm % 60; + ResponseAppend_P(PSTR(",\"holidayend\":\"%02d-%02d-%02d %02d:%02d\""), + status[7], + status[9], + status[6], + hh, mm + ); + } + + if (success) { + // now to parse other data - this may not have been a stat message + if ((op->notifylen >= 3) && (op->dataNotify[0] == 2) && (op->dataNotify[1] == 2)){ + ResponseAppend_P(PSTR(",\"profiledayset\":%d"), op->dataNotify[2]); + } + + if ((op->notifylen >= 16) && (op->dataNotify[0] == 0x21)){ +//YY is the time, coded as (minutes/10), up to which to maintain the temperature declared in XX +//XX represents the temperature to be maintained until then, codified as (temperature*2) +// byte 0: 21 (default value) +// byte 1: 02 (Monday = 0x02) +// byte (2,3): 22 24 (17°C up to 06:00) +// byte (4,5): 2A 36 (21°C up to 09:00) +// byte (6,7): 22 66 (17°C up to 17:00) +// byte (8,9): 2A 8A (21°C up to 23:00) +// byte (10,11): 22 90 (17°C up to 24:00) +// byte (12,13): 22 90 (unused) +// byte (14,15): 22 90 (unused) + ResponseAppend_P(PSTR(",\"profileday%d\":\""), op->dataNotify[1]); + uint8_t *data = op->dataNotify + 2; + for (int i = 0; i < 7; i++){ + float t = *(data++); + t /= 2; + int mm = *(data++); + mm *= 10; + int hh = mm / 60; + mm = mm % 60; + ResponseAppend_P(PSTR("%2.1f-%02d:%02d"), t, hh, mm); + // stop if the last one is 24. + if (hh == 24){ + break; + } + + if (i < 6){ + ResponseAppend_P(PSTR(",")); + } + } + ResponseAppend_P(PSTR("\"")); + } + + res = 1; + } + + ResponseAppend_P(PSTR("}")); + + int type = STAT; + if (cmdtype){ + type = STAT; + } else { + // it IS a poll command + if (EQ3HideFailedPoll){ + if (!success){ + AddLog(LOG_LEVEL_DEBUG, PSTR("EQ3 %s poll fail not sent because EQ3HideFailedPoll"), addrStr(addrev)); + return res; + } + } + } + + char *topic = topicPrefix(type, addrev, useAlias); + MqttPublish(topic, false); + return res; +} + +int EQ3GenericOpCompleteFn(BLE_ESP32::generic_sensor_t *op){ + uint32_t context = (uint32_t) op->context; + opInProgress = 0; + + if (op->state <= GEN_STATE_FAILED){ + uint8_t addrev[7]; + const uint8_t *native = op->addr.getNative(); + memcpy(addrev, native, 6); + BLE_ESP32::ReverseMAC(addrev); + + if (retries > 1){ + retries--; + + if (EQ3Operation(addrev, op->dataToWrite, op->writelen, (int)op->context)){ + //EQ3ParseOp(op, false, retries); + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 %s: trv operation failed - retrying %d"), addrStr(addrev), op->state); + opInProgress = 1; + } else { + retries = 0; + EQ3ParseOp(op, false, 0); + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 %s: trv operation failed to send op %d"), addrStr(addrev), op->state); + } + } else { + retries = 0; + EQ3ParseOp(op, false, 0); + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 %s: trv operation failed - no more retries %d"), addrStr(addrev), op->state); + } + return 0; + } + + retries = 0; + + EQ3ParseOp(op, true, 0); + return 0; +} + + + +/*********************************************************************************************\ + * Functons actualy called from within the BLE task +\*********************************************************************************************/ + +int ispairing2(const uint8_t *payload, int len, char *name, int namelen, char *serial, int seriallen ){ + while (len){ + int l = *payload; + //BLE_ESP32::dump(temp, 40, payload, l+1); + //AddLog(LOG_LEVEL_ERROR,PSTR("EQ3: %s"), temp); + + payload++; + len--; + if (len < l){ + //AddLog(LOG_LEVEL_ERROR,PSTR("EQ3: part len er %d<%d"),len, l); + return 0; + } + switch (*payload){ + case 0xff: {// parse the EQ3 advert payload looking for nnFF01ssssssss + payload++; + len--; + l--; + if (*payload == 1){ + payload++; + len--; + l--; + //char serialstr[20]; + //strncpy(serialstr, (const char *)payload, l); + //AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3: adv part FF01 detected %s"), serialstr); + // we don;t use these, but that's what they seem to be.... + uint8_t copylen = (l > seriallen)?seriallen:l; + strncpy(serial, (const char *)payload, copylen); + serial[seriallen-1] = 0; + payload += l; + len -= l; + return 1; + } else { + payload += l; + len -= l; + } + } break; + case 0x09: { + payload++; + len--; + l--; + if (*payload == 1){ + payload++; + len--; + l--; + //char serialstr[20]; + //strncpy(serialstr, (const char *)payload, l); + //AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3: adv part FF01 detected %s"), serialstr); + // we don;t use these, but that's what they seem to be.... + uint8_t copylen = (l > namelen)?namelen:l; + strncpy(name, (const char *)payload, copylen); + name[namelen-1] = 0; + payload += l; + len -= l; + //return 1; + } else { + payload += l; + len -= l; + } + } break; + default:{ + payload += l; + len -= l; + } break; + } + } + return 0; +} + +int ispairing(const uint8_t *payload, int len){ + //char temp[40]; + //BLE_ESP32::dump(temp, 40, payload, len); + //AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3: pair%d %s"), len, temp); + while (len){ + int l = *payload; + //BLE_ESP32::dump(temp, 40, payload, l+1); + //AddLog(LOG_LEVEL_ERROR,PSTR("EQ3: %s"), temp); + + payload++; + len--; + if (len < l){ + //AddLog(LOG_LEVEL_ERROR,PSTR("EQ3: part len er %d<%d"),len, l); + return 0; + } + if (*payload == 0xff){ + payload++; + len--; + l--; + if (*payload == 1){ + payload++; + len--; + l--; + //char serialstr[20]; + //strncpy(serialstr, (const char *)payload, l); + //AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3: adv part FF01 detected %s"), serialstr); + // we don;t use these, but that's what they seem to be.... + const uint8_t *serial = payload; + uint8_t seriallen = l; + payload += l; + len -= l; + return 1; + } else { + payload += l; + len -= l; + } + } else { + payload += l; + len -= l; + } + } + return 0; +} + +int TaskEQ3AddDevice(int8_t RSSI, const uint8_t* addr, char *serial){ + int free = -1; + int i = 0; + uint64_t now = esp_timer_get_time(); + + if (serial && serial[0] && !pairing){ + memcpy(pairingaddr, addr, 6); + strncpy(pairingserial, serial, sizeof(pairingserial)); + pairingserial[sizeof(pairingserial)-1] = 0; + pairing = 1; + } + + for(i = 0; i < EQ3_NUM_DEVICESLOTS; i++){ + if(memcmp(addr,EQ3Devices[i].addr,6)==0){ + break; + } + if (EQ3Devices[i].timeoutTime && (EQ3Devices[i].timeoutTime < now)) { +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 %s timeout at %d"), addrStr(EQ3Devices[i].addr), i); +#endif + EQ3Devices[i].timeoutTime = 0L; + } + if (!EQ3Devices[i].timeoutTime){ + if (free == -1){ + free = i; + } + } + } + + if (i == EQ3_NUM_DEVICESLOTS){ + if (free >= 0){ + i = free; + } else { + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 lost %s: > %d devices"), addrStr(addr), EQ3_NUM_DEVICESLOTS); + return 0; + } + } + +#ifdef EQ3_DEBUG + if (!EQ3Devices[i].timeoutTime) + AddLog(LOG_LEVEL_INFO,PSTR("EQ3 %s: added at %d"), addrStr(addr), i); +#endif + + EQ3Devices[i].timeoutTime = now + (1000L*1000L)*EQ3_TIMEOUT; + memcpy(EQ3Devices[i].addr, addr, 6); + EQ3Devices[i].RSSI = RSSI; + + EQ3Devices[i].pairing = (serial && serial[0])?1:0; + + return 1; +} + + +const char *EQ3Names[] = { + "CC-RT-BLE", + "CC-RT-BLE-EQ", + "CC-RT-M-BLE" +}; + +int TaskEQ3advertismentCallback(BLE_ESP32::ble_advertisment_t *pStruct) +{ + // we will try not to use this... + BLEAdvertisedDevice *advertisedDevice = pStruct->advertisedDevice; + + std::string sname = advertisedDevice->getName(); + + bool found = false; + const char *nameStr = sname.c_str(); + int8_t RSSI = pStruct->RSSI; + const uint8_t *addr = pStruct->addr; + + + const char *alias = BLE_ESP32::getAlias(addr); + if (EQ3OnlyAliased){ + // ignore unless we have an alias. + if (!alias || !(*alias)){ + return 0; + } + } + if (!alias) alias = ""; + + for (int i = 0; i < sizeof(EQ3Names)/sizeof(*EQ3Names); i++){ + if (!strcmp(nameStr, EQ3Names[i])){ + found = true; + break; + } + } + + if (!found && !strncmp(alias, "EQ3", 3)){ + found = true; + } + + // if the addr matches the EQ2 mfg prefix, add it? + if (!found && EQ3MatchPrefix && (matchPrefix(addr) >= 0)){ + found = true; + } + + if (!found) return 0; + +#ifdef EQ3_DEBUG + if (BLE_ESP32::BLEDebugMode > 0) AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3Device: saw %s"),advertisedDevice->getAddress().toString().c_str()); +#endif + + uint8_t* payload = advertisedDevice->getPayload(); + size_t payloadlen = advertisedDevice->getPayloadLength(); + + char name[20] = {0}; + char serial[20] = {0}; + int pairing = 0; + ispairing2(payload, payloadlen, name, 20, serial, 20); + + // this will take and keep the mutex until the function is over + TasAutoMutex localmutex(&EQ3mutex); + TaskEQ3AddDevice(RSSI, addr, serial); + return 0; +} + + + + +/*********************************************************************************************\ + * Helper functions +\*********************************************************************************************/ + + + +/*********************************************************************************************\ + * init +\*********************************************************************************************/ +void EQ3Init(void) { + memset(&EQ3Devices, 0, sizeof(EQ3Devices)); + BLE_ESP32::registerForAdvertismentCallbacks((const char *)"EQ3", TaskEQ3advertismentCallback); +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_INFO,PSTR("EQ3: init: request callbacks")); +#endif + + EQ3Period = Settings->tele_period; + + return; +} + +/***********************************************************************\ + * Regular +\***********************************************************************/ + +void EQ3Every50mSecond(){ + +} + +/** + * @brief Main loop of the driver, "high level"-loop + * + */ +int EQ3Send(const uint8_t* addr, const char *cmd, char* param, char* param2, int useAlias); + +void EQ3EverySecond(bool restart){ + if (pairing){ + char p[40]; // used in dump + BLE_ESP32::dump(p, 20, pairingaddr, 6); + Response_P(PSTR("{\"pairing\":\"%s\",\"serial\":\"%s\"}"), p, pairingserial); + char addrstr[4+8*2+2] = "EQ3/"; + BLE_ESP32::dump(&addrstr[4], 8*2+2, pairingaddr, 6); + char *topic = topicPrefix(STAT, pairingaddr, 1); + MqttPublish(topic, false); + pairing = 0; + } + + seconds --; + if (seconds <= 0){ + if (EQ3Period){ + if (nextEQ3Poll >= EQ3_NUM_DEVICESLOTS){ + AddLog(LOG_LEVEL_DEBUG, PSTR("EQ3 poll cycle starting")); + nextEQ3Poll = 0; + } else { + AddLog(LOG_LEVEL_ERROR, PSTR("EQ3 poll overrun, deferred - last loop only got to %d, not %d"), nextEQ3Poll, EQ3_NUM_DEVICESLOTS); + } + } + seconds = EQ3Period; + } + + if (EQ3Period){ + int qlen = opQueue.size(); + if ((nextEQ3Poll < EQ3_NUM_DEVICESLOTS) && (qlen == 0) && (!opInProgress)){ + if (intervalSecondsCounter){ + intervalSecondsCounter--; + } else { + // queue a EQ3Status op against each known EQ3. + // mark it as a regular stat rather than a use cmd. + for(int i = nextEQ3Poll; i < EQ3_NUM_DEVICESLOTS; i++){ + if (!EQ3Devices[i].timeoutTime){ + nextEQ3Poll = i+1; + continue; + } + + // trvMinRSSI + // find the device in BLE to get RSSI + if (EQ3Devices[i].RSSI < trvMinRSSI){ + AddLog(LOG_LEVEL_DEBUG, PSTR("EQ3 %s RSSI %d < min %d, poll suppressed"), addrStr(EQ3Devices[i].addr), EQ3Devices[i].RSSI, trvMinRSSI); + nextEQ3Poll = i+1; + continue; + } + + EQ3Send(EQ3Devices[i].addr, PSTR("poll"), nullptr, nullptr, 1); + nextEQ3Poll = i+1; + intervalSecondsCounter = intervalSeconds; + break; + } + } + } + } + + // start next op now, if we have any queued + EQ3DoOp(); + +} + + +/*********************************************************************************************\ + * Presentation +\*********************************************************************************************/ +int EQ3SendCurrentDevices(){ + // send the active devices + ResponseClear(); + ResponseAppend_P(PSTR("{\"devices\":{")); + int added = 0; + for(int i = 0; i < EQ3_NUM_DEVICESLOTS; i++){ + char p[40]; + if (!EQ3Devices[i].timeoutTime) + continue; + if (added){ + ResponseAppend_P(PSTR(",")); + } + BLE_ESP32::dump(p, 20, EQ3Devices[i].addr, 6); + ResponseAppend_P(PSTR("\"%s\":%d"), p, EQ3Devices[i].RSSI); + added = 1; + } + ResponseAppend_P(PSTR("}}")); + MqttPublishPrefixTopic_P(STAT, PSTR("EQ3"), false); + return 0; +} + +int EQ3SendResult(char *requested, const char *result){ + // send the result + Response_P(PSTR("{\"result\":\"%s\"}"), result); + static char stopic[TOPSZ]; + GetTopic_P(stopic, STAT, TasmotaGlobal.mqtt_topic, PSTR("")); + strcat(stopic, PSTR("EQ3/")); + strcat(stopic, requested); + MqttPublish(stopic, false); + return 0; +} + + +/*********************************************************************************************\ + * Commands +\*********************************************************************************************/ + +void simpletolower(char *p){ + if (!p) return; + while (*p){ + *p = *p | 0x20; + p++; + } +} + +// +// great description here: +// https://reverse-engineering-ble-devices.readthedocs.io/en/latest/protocol_description/00_protocol_description.html +// not all implemented yet. +// +int EQ3Send(const uint8_t* addr, const char *cmd, char* param, char* param2, int useAlias){ + + char p[] = ""; + if (!param) param = p; + if (!param2) param2 = p; + uint8_t d[20]; + memset(d, 0, sizeof(d)); + int dlen = 0; +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_INFO,PSTR("EQ3 %s: cmd: [%s] [%s] [%s]"), addrStr(addr), cmd, param, param2); +#endif + +/* done on whole string before here. + simpletolower(cmd); + simpletolower(param); + simpletolower(param2); +*/ + + int cmdtype = 0; + + do { + if (!strcmp(cmd, "raw")){ + cmdtype = 1; + if (!param || param[0] == 0){ + return -1; + } + int len = strlen(param) / 2; + if (len > 20){ + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 raw len of %s = %d > 20"), param, len); + return -1; + } + BLE_ESP32::fromHex(d, param, len); + dlen = len; + break; + } + +/* if (!strcmp(cmd, "state")){ + d[0] = 0x03; + dlen = 1; + break; + } +*/ + if (!strcmp(cmd, "settime") || !strcmp(cmd, "state") || !strcmp(cmd, "poll")){ + if (!strcmp(cmd, "poll")){ + cmdtype = 0; + } + if (!strcmp(cmd, "state")){ + cmdtype = 2; + } + if (!strcmp(cmd, "settime")){ + cmdtype = 3; + } + if (!param || param[0] == 0){ + + if (RtcTime.valid) { + d[0] = 0x03; + d[1] = (RtcTime.year % 100); + d[2] = RtcTime.month; + d[3] = RtcTime.day_of_month; + d[4] = RtcTime.hour; + d[5] = RtcTime.minute; + d[6] = RtcTime.second; + } else { + return -1; + } + + // time_t now = 0; + // struct tm timeinfo = { 0 }; + // time(&now); + // localtime_r(&now, &timeinfo); + // d[0] = 0x03; + // d[1] = timeinfo.tm_year % 100; + // d[2] = timeinfo.tm_mon + 1; + // d[3] = timeinfo.tm_mday; + // d[4] = timeinfo.tm_hour; + // d[5] = timeinfo.tm_min; + // d[6] = timeinfo.tm_sec; + + } else { + d[0] = 0x03; + BLE_ESP32::fromHex(d+1, param, 6); + } + dlen = 7; + break; + } + + if (!strcmp(cmd, "settemp")){ + cmdtype = 4; + if (!param || param[0] == 0){ + return -1; + } + float ftemp = 20; + sscanf(param, "%f", &ftemp); + if (ftemp < 4.5) ftemp = 4.5; + if (ftemp > 30) ftemp = 30; + ftemp *= 2; + uint8_t ctemp = (uint8_t) ftemp; + d[0] = 0x41; d[1] = ctemp; dlen = 2; + break; + } + + if (!strcmp(cmd, "offset")){ + cmdtype = 5; + if (!param || param[0] == 0){ + return 0; + } + float ftemp = 20; + sscanf(param, "%f", &ftemp); + ftemp *= 2; + int8_t ctemp = (int8_t) ftemp; + ctemp += 7; + d[0] = 0x13; d[1] = ctemp; dlen = 2; + break; + } + + if (!strcmp(cmd, "setdaynight")){ + cmdtype = 6; + if (!param || param[0] == 0){ + return -1; + } + if (!param2 || param2[0] == 0){ + return -1; + } + float ftemp = 15; + sscanf(param, "%f", &ftemp); + if (ftemp < 5) ftemp = 5; + ftemp *= 2; + uint8_t dtemp = (uint8_t) ftemp; + + ftemp = 20; + sscanf(param2, "%f", &ftemp); + if (ftemp < 5) ftemp = 5; + ftemp *= 2; + uint8_t ntemp = (uint8_t) ftemp; + + d[0] = 0x11; d[1] = dtemp; d[2] = ntemp; dlen = 3; + break; + } + + if (!strcmp(cmd, "setwindowtempdur")){ + cmdtype = 7; + if (!param || param[0] == 0){ + return -1; + } + if (!param2 || param2[0] == 0){ + return -1; + } + float ftemp = 15; + sscanf(param, "%f", &ftemp); + if (ftemp < 5) ftemp = 5; + ftemp *= 2; + uint8_t temp = (uint8_t) ftemp; + + int dur = 0; + sscanf(param2, "%d", &dur); + d[0] = 0x14; d[1] = temp; d[2] = (dur/5); dlen = 3; + break; + } + + if (!strcmp(cmd, "setholiday")){ + cmdtype = 8; + //40941C152402 + // 40 94 + if (!param || param[0] == 0){ + return -1; + } + if (!param2 || param2[0] == 0){ + return -1; + } + + int yy = 0; + int mm = 0; + int dd = 0; + int hour = 0; + int min = 0; + char *p = param; + p = strtok(p, "-"); + if (!p || p[0] == 0) return -1; + sscanf(p, "%d", &yy); + p = strtok(nullptr, "-"); + if (!p || p[0] == 0) return -1; + sscanf(p, "%d", &mm); + p = strtok(nullptr, ","); + if (!p || p[0] == 0) return -1; + sscanf(p, "%d", &dd); + p = strtok(nullptr, ":"); + if (!p || p[0] == 0) return -1; + sscanf(p, "%d", &hour); + p = strtok(nullptr, ""); + if (!p || p[0] == 0) return -1; + sscanf(p, "%d", &min); + + min += hour*60; + int tt = min / 30; + + float ftemp = 15; + sscanf(param2, "%f", &ftemp); + if (ftemp < 5) ftemp = 5; + ftemp *= 2; + uint8_t temp = (uint8_t) ftemp + 128; + + d[0] = 0x40; + d[1] = temp; + d[2] = dd; + d[3] = yy; + d[4] = tt; + d[5] = mm; + dlen = 6; + break; + } + + + if (!strcmp(cmd, "boost")) { + cmdtype = 9; + d[0] = 0x45; d[1] = 0x01; + if (param && (!strcmp(param, "off") || param[0] == '0')){ + d[1] = 0x00; + } + dlen = 2; break; + } + if (!strcmp(cmd, "unboost")) { + cmdtype = 10; + d[0] = 0x45; d[1] = 0x00; dlen = 2; break; } + if (!strcmp(cmd, "lock")) { d[0] = 0x80; d[1] = 0x01; + if (param && (!strcmp(param, "off") || param[0] == '0')){ + d[1] = 0x00; + } + dlen = 2; break; + } + if (!strcmp(cmd, "unlock")) { cmdtype = 11; d[0] = 0x80; d[1] = 0x00; dlen = 2; break; } + if (!strcmp(cmd, "auto")) { cmdtype = 12; d[0] = 0x40; d[1] = 0x00; dlen = 2; break; } + if (!strcmp(cmd, "manual")) { cmdtype = 13; d[0] = 0x40; d[1] = 0x40; dlen = 2; break; } + // this is basically 'cancel holiday' - mode auto does that. + //if (!strcmp(cmd, "eco")) { cmdtype = 14; d[0] = 0x40; d[1] = 0x80; dlen = 2; break; } + if (!strcmp(cmd, "on")) { + int res = EQ3Send(addr, "manual", nullptr, nullptr, useAlias); + char tmp[] = "30"; + int res2 = EQ3Send(addr, "settemp", tmp, nullptr, useAlias); + return res2; + } + if (!strcmp(cmd, "off")) { + int res = EQ3Send(addr, "manual", nullptr, nullptr, useAlias); + char tmp[] = "4.5"; + int res2 = EQ3Send(addr, "settemp", tmp, nullptr, useAlias); + return res2; + } + if (!strcmp(cmd, "valve")) { cmdtype = 17; d[0] = 0x41; d[1] = 0x3c; + if (!param || param[0] == 0){ + return -1; + } + if ((!strcmp(param, "off") || param[0] == '0')){ + d[1] = 0x09; + } + dlen = 2; break; + } + if (!strcmp(cmd, "mode")) { cmdtype = 18; d[0] = 0x40; d[1] = 0xff;// invlaid + + if (!param || param[0] == 0){ + return -1; + } + if (!strcmp(param, "auto")){ + d[1] = 0x00; + } + if (!strcmp(param, "manual")){ + d[1] = 0x40; + } + if (!strcmp(param, "on") || !strcmp(param, "heat")) { + int res = EQ3Send(addr, "manual", nullptr, nullptr, useAlias); + char tmp[] = "30"; + int res2 = EQ3Send(addr, "settemp", tmp, nullptr, useAlias); + return res2; + } + if (!strcmp(param, "off") || !strcmp(param, "cool")) { + int res = EQ3Send(addr, "manual", nullptr, nullptr, useAlias); + char tmp[] = "4.5"; + int res2 = EQ3Send(addr, "settemp", tmp, nullptr, useAlias); + return res2; + } + + if (d[1] == 0xff){ // no valid mode selection found + return -1; + } + // this is basically 'cancel holiday' - mode auto does that. + //if (!strcmp(param, "eco")){ + // d[1] = 0x80; + //} + dlen = 2; break; + } + if (!strcmp(cmd, "day")) { cmdtype = 19; d[0] = 0x43; dlen = 1; break; } + if (!strcmp(cmd, "night")) { cmdtype = 20; d[0] = 0x44; dlen = 1; break; } + + if (!strcmp(cmd, "reqprofile")) { cmdtype = 21; + if (!param || param[0] == 0){ + return -1; + } + d[0] = 0x20; d[1] = atoi(param); dlen = 2; + break; + } + + if (!strcmp(cmd, "setprofile")) { cmdtype = 22; + if (!param || param[0] == 0){ + return -1; + } + if (!param2 || param2[0] == 0){ + return -1; + } + d[0] = 0x10; d[1] = atoi(param); + + // default + uint8_t temps[7] = {0x22,0x22,0x22,0x22,0x22,0x22,0x22}; + uint8_t times[7] = {0x90,0x90,0x90,0x90,0x90,0x90,0x90}; + + // 20.5-17:30, + const char *p = strtok(param2, ","); + int i = 0; + while (p){ + float t = 17; + int mm = 0; + int hh = 24; + sscanf(p, "%f-%d:%d", &t, &hh, &mm); + t *= 2; + temps[i] = (uint8_t) t; + int time = hh*60+mm; + time = time / 10; + times[i] = time; + p = strtok(nullptr, ","); + i++; + if (i >= 7) break; + } + + // remaining left at 00 00 + for (int j = 0; j < 7; j++){ + d[2+j*2] = temps[j]; + d[2+j*2+1] = times[j]; + } + + dlen = 2+14; + break; + } + + break; + } while(0); + + if (dlen){ + dlen = 16; + return EQ3QueueOp(addr, d, dlen, cmdtype, useAlias); + + //return EQ3Operation(addr, d, dlen, 4); + } + + return -1; +} + + +const char *responses[] = { + PSTR("Done"), + PSTR("queued"), + PSTR("ignoredbusy"), + PSTR("invcmd"), + PSTR("cmdfail"), + PSTR("invidx"), + PSTR("invaddr") +}; + + +int CmndTrvNext(int index, char *data){ + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 cmd index: %d"), index); + //simpletolower(data); + + switch(index){ + case 0: + case 1: { + + char *p = strtok(data, " "); + bool trigger = false; + if (!strcmp(p, "reset")){ + retries = 0; + for (int i = 0; i < EQ3_NUM_DEVICESLOTS; i++){ + EQ3Devices[i].timeoutTime = 0L; + } + return 0; + } + + if (!strcmp(p, "scan")){ +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 cmd: %s"), p); +#endif + EQ3SendCurrentDevices(); + return 0; + } + if (!strcmp(p, "devlist")){ +#ifdef EQ3_DEBUG + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 cmd: %s"), p); +#endif + EQ3SendCurrentDevices(); + return 0; + } + + // only allow one command in progress + if (retries){ + //return 2; + } + + + int useAlias = 0; + uint8_t addrbin[7]; + int addrres = BLE_ESP32::getAddr(addrbin, p); + if (addrres){ + if (addrres == 2){ + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 addr used alias: %s"), p); + useAlias = 1; + } + NimBLEAddress addr(addrbin, addrbin[6]); + +#ifdef EQ3_DEBUG + //AddLog(LOG_LEVEL_INFO,PSTR("EQ3 cmd addr: %s -> %s"), p, addr.toString().c_str()); +#endif + } else { + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 addr invalid: %s"), p); + return 3; + } + + // get next part of cmd + char *cmd = strtok(nullptr, " "); + if (!cmd){ + return 3; + } + + char *param = strtok(nullptr, " "); + char *param2 = nullptr; + if (param){ + param2 = strtok(nullptr, " "); + } + int res = EQ3Send(addrbin, cmd, param, param2, useAlias); + if (res > 0) { + // succeeded to queue + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 queued")); + return 1; + } + + if (res < 0) { // invalid in some way + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 invalid")); + return 3; + } + + AddLog(LOG_LEVEL_ERROR,PSTR("EQ3 failed to queue")); + // failed to queue + return 4; + } break; + + case 2: + retries = 0; + return 0; + break; + } + + return 4; +} + +void CmndTrv(void) { + int res = CmndTrvNext(XdrvMailbox.index, XdrvMailbox.data); + ResponseCmndChar(responses[res]); +} + +void CmndTrvPeriod(void) { + if (XdrvMailbox.data_len > 0) { + if (1 == XdrvMailbox.payload){ + seconds = 0; + } else { + EQ3Period = XdrvMailbox.payload; + if (seconds > EQ3Period){ + seconds = EQ3Period; + } + } + } + ResponseCmndNumber(EQ3Period); +} + +void CmndTrvOnlyAliased(void){ + if (XdrvMailbox.data_len > 0) { + EQ3OnlyAliased = XdrvMailbox.payload; + } + ResponseCmndNumber(EQ3OnlyAliased); +} + +void CmndTrvMatchPrefix(void){ + if (XdrvMailbox.data_len > 0) { + EQ3MatchPrefix = XdrvMailbox.payload; + } + ResponseCmndNumber(EQ3MatchPrefix); +} + +void CmndTrvMinRSSI(void){ + if (XdrvMailbox.data_len > 0) { + trvMinRSSI = atoi(XdrvMailbox.data); + } + // signed number + Response_P(PSTR("{\"%s\":%d}"), XdrvMailbox.command, trvMinRSSI); +} + +void CmndTrvHideFailedPoll(void){ + if (XdrvMailbox.data_len > 0) { + EQ3HideFailedPoll = XdrvMailbox.payload; + } + ResponseCmndNumber(EQ3HideFailedPoll); +} + + +#define EQ3_TOPIC "EQ3" +static char tmp[120]; + +bool mqtt_direct(){ + char stopic[TOPSZ]; + strncpy(stopic, XdrvMailbox.topic, TOPSZ); + XdrvMailbox.topic[TOPSZ-1] = 0; + + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3 mqtt: %s:%s"), stopic, XdrvMailbox.data); + + char *items[10]; + char *p = stopic; + int cnt = 0; + do { + items[cnt] = strtok(p, "/"); + cnt++; + p = nullptr; + } while (items[cnt-1]); + cnt--; // repreents the number of items + + if (cnt < 4){ // not for us? + //AddLog(LOG_LEVEL_INFO,PSTR("cnt: %d < 4"), cnt); + return false; + } + + for (int i = 0; i < cnt; i++){ + //AddLog(LOG_LEVEL_INFO,PSTR("cnt %d:%s"), i, items[i]); + } + + + int EQ3index = 0; + int MACindex = 0; + int CMDindex = 0; + if (strcasecmp_P(items[cnt-3], PSTR(EQ3_TOPIC)) != 0) { + //AddLog(LOG_LEVEL_INFO,PSTR("cnt-3 not %s"), PSTR(EQ3_TOPIC)); + if (strcasecmp_P(items[cnt-2], PSTR(EQ3_TOPIC)) != 0) { + //AddLog(LOG_LEVEL_INFO,PSTR("cnt-2 not %s"), PSTR(EQ3_TOPIC)); + return false; // not for us + } else { + EQ3index = cnt-2; + MACindex = cnt-1; + } + } else { + EQ3index = cnt-3; + MACindex = cnt-2; + CMDindex = cnt-1; + } + + int remains = 120; + memset(tmp, 0, sizeof(tmp)); + p = tmp; + uint8_t addr[7]; + int useAlias = BLE_ESP32::getAddr(addr, items[MACindex]); + int res = 6; // invalid address/alias + + // if address or alias valid + if (useAlias){ + strncpy(p, items[MACindex], remains-6); + p += strlen(p); + *(p++) = 0x20; + remains = 120 - (p-tmp); + + if (CMDindex){ + strncpy(p, items[CMDindex], remains-6); + p += strlen(p); + *(p++) = 0x20; + remains = 120 - (p-tmp); + } + + strncpy(p, XdrvMailbox.data, remains-6); + p += strlen(p); + *(p++) = 0x20; + remains = 120 - (p-tmp); + *(p++) = 0; + + AddLog(LOG_LEVEL_DEBUG,PSTR("EQ3:mqtt->cmdstr %s"), tmp); + res = CmndTrvNext(1, tmp); + } + + // post result to stat/tas/EQ3/ {"result":""} + EQ3SendResult(items[MACindex], responses[res]); + + return true; +} + + +/////////////////////////////////////////////// +// starts a completely fresh MQTT message. +// sends ONE sensor's worth of HA discovery msg +const char EQ3_HA_DISCOVERY_TEMPLATE[] PROGMEM = + "{\"availability\":[],\"device\":" + "{\"identifiers\":[\"BLE%s\"]," + "\"name\":\"%s\"," + "\"manufacturer\":\"tas\"," + "\"model\":\"%s\"," + "\"via_device\":\"%s\"" + "}," + "\"dev_cla\":\"%s\"," + "\"expire_after\":600," + "\"json_attr_t\":\"%s\"," + "\"name\":\"%s_%s\"," + "\"state_topic\":\"%s\"," + "\"uniq_id\":\"%s_%s\"," + "\"unit_of_meas\":\"%s\"," + "\"val_tpl\":\"{{ value_json.%s }}\"}"; + +///////////TODO - unfinished..... +void EQ3DiscoveryOneEQ3(){ + // don't detect half-added ones here + if (EQ3CurrentSingleSlot >= EQ3_NUM_DEVICESLOTS){ + // if we got to the end of the sensors, then don't send more + return; + } + +#ifdef USE_HOME_ASSISTANT + if(Settings->flag.hass_discovery){ + eq3_device_tag *p; + do { + p = &EQ3Devices[EQ3CurrentSingleSlot]; + if (0 == p->timeoutTime){ + EQ3CurrentSingleSlot++; + } + } while ((0 == p->timeoutTime) && (EQ3CurrentSingleSlot <= EQ3_NUM_DEVICESLOTS)); + + if (EQ3CurrentSingleSlot >= EQ3_NUM_DEVICESLOTS){ + return; + } + + // careful - a missing comma causes a crash!!!! + // because of the way we loop? + const char *classes[] = { + "temperature", + "temp", + "°C", + "signal_strength", + "RSSI", + "dB" + }; + + int datacount = (sizeof(classes)/sizeof(*classes))/3; + + if (p->nextDiscoveryData >= datacount){ + p->nextDiscoveryData = 0; + } + + char DiscoveryTopic[80]; + const char *host = NetworkHostname(); + const char *devtype = PSTR("EQ3"); + char idstr[32]; + const char *alias = BLE_ESP32::getAlias(p->addr); + const char *id = idstr; + if (alias && *alias){ + id = alias; + } else { + sprintf(idstr, PSTR("%s%02x%02x%02x"), + devtype, + p->addr[3], p->addr[4], p->addr[5]); + } + + char SensorTopic[60]; + sprintf(SensorTopic, "stat/%s/EQ3/%s", + host, id); + + //int i = p->nextDiscoveryData*3; + for (int i = 0; i < datacount*3; i += 3){ + if (!classes[i] || !classes[i+1] || !classes[i+2]){ + return; + } + + ResponseClear(); + + /* + {"availability":[],"device":{"identifiers":["TasmotaBLEa4c1387fc1e1"],"manufacturer":"simon","model":"someBLEsensor","name":"TASBLEa4c1387fc1e1","sw_version":"0.0.0"},"dev_cla":"temperature","json_attr_t":"stat/tasmota_esp32/SENSOR","name":"TASLYWSD037fc1e1Temp","state_topic":"tele/tasmota_esp32/SENSOR","uniq_id":"Tasmotaa4c1387fc1e1temp","unit_of_meas":"°C","val_tpl":"{{ value_json.LYWSD037fc1e1.Temperature }}"} + {"availability":[],"device":{"identifiers":["TasmotaBLEa4c1387fc1e1"], + "name":"TASBLEa4c1387fc1e1"},"dev_cla":"temperature", + "json_attr_t":"tele/tasmota_esp32/SENSOR", + "name":"TASLYWSD037fc1e1Temp","state_topic": "tele/tasmota_esp32/SENSOR", + "uniq_id":"Tasmotaa4c1387fc1e1temp","unit_of_meas":"°C", + "val_tpl":"{{ value_json.LYWSD037fc1e1.Temperature }}"} + */ + + ResponseAppend_P(EQ3_HA_DISCOVERY_TEMPLATE, + //"{\"identifiers\":[\"BLE%s\"]," + id, + //"\"name\":\"%s\"}," + id, + //\"model\":\"%s\", + devtype, + //\"via_device\":\"%s\" + host, + //"\"dev_cla\":\"%s\"," + classes[i], + //"\"json_attr_t\":\"%s\"," - the topic the sensor publishes on + SensorTopic, + //"\"name\":\"%s_%s\"," - the name of this DATA + id, classes[i+1], + //"\"state_topic\":\"%s\"," - the topic the sensor publishes on? + SensorTopic, + //"\"uniq_id\":\"%s_%s\"," - unique for this data, + id, classes[i+1], + //"\"unit_of_meas\":\"%s\"," - the measure of this type of data + classes[i+2], + //"\"val_tpl\":\"{{ value_json.%s }}") // e.g. Temperature + classes[i+1] + // + ); + + sprintf(DiscoveryTopic, "homeassistant/sensor/%s/%s/config", + id, classes[i+1]); + + MqttPublish(DiscoveryTopic); + p->nextDiscoveryData++; + //vTaskDelay(100/ portTICK_PERIOD_MS); + } + } // end if hass discovery + //AddLog_P(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data); +#endif //USE_HOME_ASSISTANT + +} + + + + +} // end namespace EQ3_ESP32 + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xdrv85(uint8_t function) +{ + bool result = false; + + switch (function) { + case FUNC_INIT: + EQ3_ESP32::EQ3Init(); + break; + case FUNC_EVERY_50_MSECOND: + EQ3_ESP32::EQ3Every50mSecond(); + break; + case FUNC_EVERY_SECOND: + EQ3_ESP32::EQ3EverySecond(false); + break; + case FUNC_COMMAND: + result = DecodeCommand(EQ3_ESP32::kEQ3_Commands, EQ3_ESP32::EQ3_Commands); + break; + case FUNC_MQTT_DATA: + //AddLog(LOG_LEVEL_INFO,PSTR("topic %s"), XdrvMailbox.topic); + result = EQ3_ESP32::mqtt_direct(); + break; + case FUNC_JSON_APPEND: + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + break; +#endif // USE_WEBSERVER + } + return result; +} +#endif // +#endif // ESP32 + +#endif +#endif // CONFIG_IDF_TARGET_ESP32 diff --git a/tasmota/xdrv_98_file_settings_demo.ino b/tasmota/xdrv_98_file_settings_demo.ino index 306ff648e..e4459aeb7 100644 --- a/tasmota/xdrv_98_file_settings_demo.ino +++ b/tasmota/xdrv_98_file_settings_demo.ino @@ -27,7 +27,6 @@ * To test this file: * - Have hardware with at least 2M flash * - Enable a board with at least 256k filesystem in platform_override.ini - * - Enable define USE_UFILESYS in user_config_override.h \*********************************************************************************************/ #warning **** USE_DRV_FILE_DEMO is enabled **** diff --git a/tasmota/xdrv_99_debug.ino b/tasmota/xdrv_99_debug.ino index 36345e5e4..6e33431a0 100644 --- a/tasmota/xdrv_99_debug.ino +++ b/tasmota/xdrv_99_debug.ino @@ -53,7 +53,6 @@ #define D_CMND_FREEMEM "FreeMem" #define D_CMND_HELP "Help" #define D_CMND_RTCDUMP "RtcDump" -#define D_CMND_SETSENSOR "SetSensor" #define D_CMND_I2CWRITE "I2CWrite" #define D_CMND_I2CREAD "I2CRead" #define D_CMND_I2CSTRETCH "I2CStretch" @@ -69,7 +68,7 @@ const char kDebugCommands[] PROGMEM = "|" // No prefix #ifdef DEBUG_THEO D_CMND_EXCEPTION "|" #endif - D_CMND_FLASHDUMP "|" D_CMND_FLASHMODE "|" D_CMND_FREEMEM"|" D_CMND_HELP "|" D_CMND_RTCDUMP "|" D_CMND_SETSENSOR "|" + D_CMND_FLASHDUMP "|" D_CMND_FLASHMODE "|" D_CMND_FREEMEM"|" D_CMND_HELP "|" D_CMND_RTCDUMP "|" #ifdef USE_I2C D_CMND_I2CWRITE "|" D_CMND_I2CREAD "|" D_CMND_I2CSTRETCH "|" D_CMND_I2CCLOCK #endif @@ -84,7 +83,7 @@ void (* const DebugCommand[])(void) PROGMEM = { #ifdef DEBUG_THEO &CmndException, #endif - &CmndFlashDump, &CmndFlashMode, &CmndFreemem, &CmndHelp, &CmndRtcDump, &CmndSetSensor, + &CmndFlashDump, &CmndFlashMode, &CmndFreemem, &CmndHelp, &CmndRtcDump, #ifdef USE_I2C &CmndI2cWrite, &CmndI2cRead, &CmndI2cStretch, &CmndI2cClock #endif @@ -558,21 +557,6 @@ void CmndFreemem(void) ResponseCmndNumber(CPU_show_freemem); } -void CmndSetSensor(void) -{ - if (XdrvMailbox.index < MAX_XSNS_DRIVERS) { - if (XdrvMailbox.payload >= 0) { - bitWrite(Settings->sensors[XdrvMailbox.index / 32], XdrvMailbox.index % 32, XdrvMailbox.payload &1); - if (1 == XdrvMailbox.payload) { - TasmotaGlobal.restart_flag = 2; // To safely re-enable a sensor currently most sensor need to follow complete restart init cycle - } - } - Response_P(PSTR("{\"" D_CMND_SETSENSOR "\":")); - XsnsSensorState(); - ResponseJsonEnd(); - } -} - void CmndFlashMode(void) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 3)) { diff --git a/tasmota/xdrv_interface.ino b/tasmota/xdrv_interface.ino index f3825e0c7..0444ad11d 100644 --- a/tasmota/xdrv_interface.ino +++ b/tasmota/xdrv_interface.ino @@ -945,119 +945,119 @@ const uint8_t kXdrvList[] = { #endif #ifdef XDRV_100 - Xdrv100, + XDRV_100, #endif #ifdef XDRV_101 - Xdrv101, + XDRV_101, #endif #ifdef XDRV_102 - Xdrv102, + XDRV_102, #endif #ifdef XDRV_103 - Xdrv103, + XDRV_103, #endif #ifdef XDRV_104 - Xdrv104, + XDRV_104, #endif #ifdef XDRV_105 - Xdrv105, + XDRV_105, #endif #ifdef XDRV_106 - Xdrv106, + XDRV_106, #endif #ifdef XDRV_107 - Xdrv107, + XDRV_107, #endif #ifdef XDRV_108 - Xdrv108, + XDRV_108, #endif #ifdef XDRV_109 - Xdrv109, + XDRV_109, #endif #ifdef XDRV_110 - Xdrv110, + XDRV_110, #endif #ifdef XDRV_111 - Xdrv111, + XDRV_111, #endif #ifdef XDRV_112 - Xdrv112, + XDRV_112, #endif #ifdef XDRV_113 - Xdrv113, + XDRV_113, #endif #ifdef XDRV_114 - Xdrv114, + XDRV_114, #endif #ifdef XDRV_115 - Xdrv115, + XDRV_115, #endif #ifdef XDRV_116 - Xdrv116, + XDRV_116, #endif #ifdef XDRV_117 - Xdrv117, + XDRV_117, #endif #ifdef XDRV_118 - Xdrv118, + XDRV_118, #endif #ifdef XDRV_119 - Xdrv119, + XDRV_119, #endif #ifdef XDRV_120 - Xdrv120, + XDRV_120, #endif #ifdef XDRV_121 - Xdrv121, + XDRV_121, #endif #ifdef XDRV_122 - Xdrv122, + XDRV_122, #endif #ifdef XDRV_123 - Xdrv123, + XDRV_123, #endif #ifdef XDRV_124 - Xdrv124, + XDRV_124, #endif #ifdef XDRV_125 - Xdrv125, + XDRV_125, #endif #ifdef XDRV_126 - Xdrv126, + XDRV_126, #endif #ifdef XDRV_127 - Xdrv127, + XDRV_127, #endif #ifdef XDRV_128 - Xdrv128 + XDRV_128 #endif }; @@ -1083,8 +1083,8 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) { char* data_save = XdrvMailbox.data; XdrvMailbox.data = (char*)event; bool rule_handled = XdrvCallDriver(10, (teleperiod) ? FUNC_TELEPERIOD_RULES_PROCESS : FUNC_RULES_PROCESS); -#ifdef USE_BERRY - // events are passed to both Rules engine AND Berry engine +#if defined(USE_BERRY) && !defined(USE_RULES) + // events are sent to Berry in Rules driver, or here if USE_RULES is not defined (only on a subset) bool berry_handled = XdrvCallDriver(52, FUNC_RULES_PROCESS); rule_handled |= berry_handled; #endif @@ -1093,13 +1093,9 @@ bool XdrvRulesProcess(bool teleperiod, const char* event) { } bool XdrvRulesProcess(bool teleperiod) { -#ifdef MQTT_DATA_STRING - bool result = XdrvRulesProcess(teleperiod, TasmotaGlobal.mqtt_data.c_str()); - ResponseClear(); + bool result = XdrvRulesProcess(teleperiod, ResponseData()); + ResponseClear(); // Free heap space return result; -#else - return XdrvRulesProcess(teleperiod, TasmotaGlobal.mqtt_data); -#endif } #ifdef USE_DEBUG_DRIVER diff --git a/tasmota/xdsp_03_matrix.ino b/tasmota/xdsp_03_matrix.ino index 5a133debc..09d8b8587 100644 --- a/tasmota/xdsp_03_matrix.ino +++ b/tasmota/xdsp_03_matrix.ino @@ -67,7 +67,7 @@ void MatrixFixed(char* txt) matrix[i]->clear(); matrix[i]->setCursor(-i *8, 0); matrix[i]->print(txt); - matrix[i]->setBrightness(Settings->display_dimmer); + matrix[i]->setBrightness(GetDisplayDimmer16()); } MatrixWrite(); } @@ -82,7 +82,7 @@ void MatrixCenter(char* txt) matrix[i]->clear(); matrix[i]->setCursor(-(i *8)+offset, 0); matrix[i]->print(txt); - matrix[i]->setBrightness(Settings->display_dimmer); + matrix[i]->setBrightness(GetDisplayDimmer16()); } MatrixWrite(); } @@ -106,7 +106,7 @@ void MatrixScrollLeft(char* txt, int loop) matrix[i]->clear(); matrix[i]->setCursor(mtx_x - i *8, 0); matrix[i]->print(txt); - matrix[i]->setBrightness(Settings->display_dimmer); + matrix[i]->setBrightness(GetDisplayDimmer16()); } MatrixWrite(); // Move text position left by 1 pixel. @@ -151,7 +151,7 @@ void MatrixScrollUp(char* txt, int loop) matrix[i]->setCursor(-i *8, mtx_y + (j *8)); matrix[i]->println(words[j]); } - matrix[i]->setBrightness(Settings->display_dimmer); + matrix[i]->setBrightness(GetDisplayDimmer16()); } MatrixWrite(); if (((mtx_y %8) == 0) && mtx_counter) { @@ -172,7 +172,7 @@ void MatrixInitMode(void) { for (uint32_t i = 0; i < mtx_matrices; i++) { matrix[i]->setRotation(Settings->display_rotate); // 1 - matrix[i]->setBrightness(Settings->display_dimmer); + matrix[i]->setBrightness(GetDisplayDimmer16()); matrix[i]->blinkRate(0); // 0 - 3 matrix[i]->setTextWrap(false); // Allow text to run off edges // matrix[i]->setTextSize(Settings->display_size); diff --git a/tasmota/xdsp_04_ili9341.ino b/tasmota/xdsp_04_ili9341.ino index 7e638cf5a..e4142b6c0 100755 --- a/tasmota/xdsp_04_ili9341.ino +++ b/tasmota/xdsp_04_ili9341.ino @@ -97,7 +97,7 @@ void ILI9341_InitDriver() #endif renderer->DisplayInit(DISPLAY_INIT_MODE, Settings->display_size, Settings->display_rotate, Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH // Welcome text diff --git a/tasmota/xdsp_08_ILI9488.ino b/tasmota/xdsp_08_ILI9488.ino index 4fdf6c178..5c3cd2f5d 100644 --- a/tasmota/xdsp_08_ILI9488.ino +++ b/tasmota/xdsp_08_ILI9488.ino @@ -72,7 +72,7 @@ void ILI9488_InitDriver(void) { ili9488->begin(); renderer = ili9488; renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH // Welcome text diff --git a/tasmota/xdsp_09_SSD1351.ino b/tasmota/xdsp_09_SSD1351.ino index 9a5eed7e1..7d6d28d31 100644 --- a/tasmota/xdsp_09_SSD1351.ino +++ b/tasmota/xdsp_09_SSD1351.ino @@ -68,7 +68,7 @@ void SSD1351_InitDriver() { ssd1351->begin(); renderer = ssd1351; renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH // Welcome text diff --git a/tasmota/xdsp_10_RA8876.ino b/tasmota/xdsp_10_RA8876.ino index 8524f48f5..305f26c7f 100644 --- a/tasmota/xdsp_10_RA8876.ino +++ b/tasmota/xdsp_10_RA8876.ino @@ -61,7 +61,7 @@ void RA8876_InitDriver(void) { ra8876->begin(); renderer = ra8876; renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); //testall(); #ifdef SHOW_SPLASH diff --git a/tasmota/xdsp_11_sevenseg.ino b/tasmota/xdsp_11_sevenseg.ino index d3de996e1..f2c48adb9 100644 --- a/tasmota/xdsp_11_sevenseg.ino +++ b/tasmota/xdsp_11_sevenseg.ino @@ -76,7 +76,7 @@ void SevensegLog(void) int16_t valueDecimal = 0; double valueFloat = 0; uint8 fDigits = 0; - String jsonStr = TasmotaGlobal.mqtt_data; // Move from stack to heap to fix watchdogs (20180626) + String jsonStr = ResponseData(); // Move from stack to heap to fix watchdogs (20180626) JsonParser parser((char*)jsonStr.c_str()); JsonParserObject object_root = parser.getRootObject(); if (object_root) { @@ -106,7 +106,7 @@ void SevensegLog(void) void SevensegDim(void) { for (uint32_t i = 0; i < sevensegs; i++) { - sevenseg[i]->setBrightness(Settings->display_dimmer); + sevenseg[i]->setBrightness(GetDisplayDimmer16()); } } @@ -130,7 +130,7 @@ void SevensegClear(void) void SevensegInitMode(void) { for (uint32_t i = 0; i < sevensegs; i++) { - sevenseg[i]->setBrightness(Settings->display_dimmer); + sevenseg[i]->setBrightness(GetDisplayDimmer16()); sevenseg[i]->blinkRate(0); } SevensegClear(); diff --git a/tasmota/xdsp_12_ST7789.ino b/tasmota/xdsp_12_ST7789.ino index 9b982090b..fb55f6d91 100644 --- a/tasmota/xdsp_12_ST7789.ino +++ b/tasmota/xdsp_12_ST7789.ino @@ -93,7 +93,7 @@ void ST7789_InitDriver(void) { st7789->init(Settings->display_width,Settings->display_height); renderer = st7789; renderer->DisplayInit(DISPLAY_INIT_MODE,Settings->display_size,Settings->display_rotate,Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH // Welcome text diff --git a/tasmota/xdsp_14_SSD1331.ino b/tasmota/xdsp_14_SSD1331.ino index b939bedeb..aaefeedd4 100644 --- a/tasmota/xdsp_14_SSD1331.ino +++ b/tasmota/xdsp_14_SSD1331.ino @@ -73,7 +73,7 @@ void SSD1331_InitDriver() { renderer = ssd1331; // Rotation is currently broken, https://github.com/adafruit/Adafruit-SSD1331-OLED-Driver-Library-for-Arduino/issues/26 renderer->DisplayInit(DISPLAY_INIT_MODE, Settings->display_size, Settings->display_rotate, Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->dim(GetDisplayDimmer16()); #ifdef SHOW_SPLASH // Welcome text diff --git a/tasmota/xdsp_15_tm1637.ino b/tasmota/xdsp_15_tm1637.ino index 038698f3c..05b269e9e 100644 --- a/tasmota/xdsp_15_tm1637.ino +++ b/tasmota/xdsp_15_tm1637.ino @@ -120,9 +120,10 @@ - DisplayScrollText text + DisplayScrollText text [, num_loops] - Displays scrolling text. + Displays scrolling text indefinitely, until another Display- command (other than DisplayScrollText + or DisplayScrollDelay is issued). Optionally, stop scrolling after num_loops iterations. @@ -189,6 +190,8 @@ struct uint8_t scroll_delay = 4; uint8_t scroll_index = 0; uint8_t iteration = 0; + uint8_t scroll_counter = 0; + uint8_t scroll_counter_max = 3; uint8_t display_type = TM1637; uint8_t digit_order[6] = { 0, 1, 2, 3, 4, 5 }; @@ -233,7 +236,8 @@ void TM1637Init(void) Settings->display_cols[0] = Settings->display_width; Settings->display_height = 1; Settings->display_rows = Settings->display_height; - if(!Settings->display_dimmer || Settings->display_dimmer < 2 || Settings->display_dimmer > 15) Settings->display_dimmer = 8; + uint8_t dimmer16 = GetDisplayDimmer16(); + if(!dimmer16 || dimmer16 < 2 || dimmer16 > 15) SetDisplayDimmer(50); if (TM1637 == TM1637Data.display_type) { @@ -560,9 +564,27 @@ void TM1637ClearDisplay(void) bool CmndTM1637ScrollText(void) { - AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Text %s"), XdrvMailbox.data); + char sString[SCROLL_MAX_LEN + 1]; + char sMaxLoopCount[CMD_MAX_LEN]; + uint8_t maxLoopCount = 0; - if (XdrvMailbox.data_len > SCROLL_MAX_LEN) + switch (ArgC()) + { + case 2: + subStr(sMaxLoopCount, XdrvMailbox.data, ",", 2); + maxLoopCount = atoi(sMaxLoopCount); + case 1: + subStr(sString, XdrvMailbox.data, ",", 1); + } + + if (maxLoopCount < 0) + maxLoopCount = 0; + + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: sString %s, maxLoopCount %d"), sString, maxLoopCount); + + TM1637Data.scroll_counter_max = maxLoopCount; + + if (strlen(sString) > SCROLL_MAX_LEN) { snprintf(TM1637Data.msg, sizeof(TM1637Data.msg), PSTR("Text too long. Length should be less than %d"), SCROLL_MAX_LEN); XdrvMailbox.data = TM1637Data.msg; @@ -570,11 +592,12 @@ bool CmndTM1637ScrollText(void) } else { - snprintf(TM1637Data.scroll_text, sizeof(TM1637Data.scroll_text), PSTR(" ")); - snprintf(TM1637Data.scroll_text, sizeof(TM1637Data.scroll_text), PSTR("%s"), XdrvMailbox.data); - TM1637Data.scroll_text[XdrvMailbox.data_len] = 0; + snprintf(TM1637Data.scroll_text, sizeof(TM1637Data.scroll_text), PSTR(" ")); + snprintf(TM1637Data.scroll_text, Settings->display_width + sizeof(TM1637Data.scroll_text), PSTR(" %s"), &sString); + TM1637Data.scroll_text[strlen(sString) + Settings->display_width] = 0; TM1637Data.scroll_index = 0; TM1637Data.scroll = true; + TM1637Data.scroll_counter = 0; return true; } } @@ -601,6 +624,7 @@ bool CmndTM1637ScrollDelay(void) \*********************************************************************************************/ void TM1637ScrollText(void) { + if(!TM1637Data.scroll) return; TM1637Data.iteration++; if (TM1637Data.scroll_delay) TM1637Data.iteration = TM1637Data.iteration % TM1637Data.scroll_delay; @@ -611,9 +635,12 @@ void TM1637ScrollText(void) if (TM1637Data.scroll_index > strlen(TM1637Data.scroll_text)) { - TM1637Data.scroll = false; TM1637Data.scroll_index = 0; - return; + TM1637Data.scroll_counter++; + if(TM1637Data.scroll_counter_max != 0 && (TM1637Data.scroll_counter >= TM1637Data.scroll_counter_max)) { + TM1637Data.scroll = false; + return; + } } uint8_t rawBytes[1]; for (uint32_t i = 0, j = TM1637Data.scroll_index; i < 1 + strlen(TM1637Data.scroll_text); i++, j++) @@ -1022,7 +1049,7 @@ void TM1637ShowTime() bool TM1637MainFunc(uint8_t fn) { bool result = false; - + if(fn != FUNC_DISPLAY_SCROLLDELAY) TM1637Data.scroll = false; if (XdrvMailbox.data_len > CMD_MAX_LEN) { Response_P(PSTR("{\"Error\":\"Command text too long. Please limit it to %d characters\"}"), CMD_MAX_LEN); @@ -1074,8 +1101,8 @@ bool TM1637MainFunc(uint8_t fn) void TM1637Dim(void) { - // Settings->display_dimmer = 0 - 15 - uint8_t brightness = Settings->display_dimmer >> 1; // 0 - 7 + // GetDisplayDimmer16() = 0 - 15 + uint8_t brightness = GetDisplayDimmer16() >> 1; // 0 - 7 if (TM1637 == TM1637Data.display_type) { diff --git a/tasmota/xdsp_17_universal.ino b/tasmota/xdsp_17_universal.ino index 6151e2c95..ed8e52e60 100644 --- a/tasmota/xdsp_17_universal.ino +++ b/tasmota/xdsp_17_universal.ino @@ -294,14 +294,20 @@ uDisplay *udisp; } #endif + uint8_t inirot = Settings->display_rotate; + + cp = strstr(ddesc, ":r,"); + if (cp) { + cp+=3; + inirot = strtol(cp, &cp, 10); + } + // release desc buffer if (fbuff) free(fbuff); renderer = udisp->Init(); if (!renderer) return 0; - Settings->display_width = renderer->width(); - Settings->display_height = renderer->height(); fg_color = renderer->fgcol(); bg_color = renderer->bgcol(); color_type = renderer->color_type(); @@ -311,8 +317,12 @@ uDisplay *udisp; renderer->SetDimCB(Core2DisplayDim); #endif - renderer->DisplayInit(DISPLAY_INIT_MODE, Settings->display_size, Settings->display_rotate, Settings->display_font); - renderer->dim(Settings->display_dimmer); + renderer->DisplayInit(DISPLAY_INIT_MODE, Settings->display_size, inirot, Settings->display_font); + + Settings->display_width = renderer->width(); + Settings->display_height = renderer->height(); + + ApplyDisplayDimmer(); #ifdef SHOW_SPLASH renderer->Splash(); diff --git a/tasmota/xlgt_05_sonoff_l1.ino b/tasmota/xlgt_05_sonoff_l1.ino index 2cd8cb779..080bc9c7a 100644 --- a/tasmota/xlgt_05_sonoff_l1.ino +++ b/tasmota/xlgt_05_sonoff_l1.ino @@ -26,9 +26,11 @@ #define XLGT_05 5 #define SONOFF_L1_START_DELAY // Sync Nuvotron power state with Tasmota on power up -//#define SONOFF_L1_ALLOW_REMOTE_INTERRUPT // During schemes 2..4 +//#define SONOFF_L1_ALLOW_REMOTE_INTERRUPT // During schemes 2..4 or if fade is active #define SONOFF_L1_DEBUG1 // Add send and receive logging +#define SONOFF_L1_BUSY 200 // Time in milliseconds to handle a serial request + #define SONOFF_L1_BUFFER_SIZE 170 #define SONOFF_L1_MODE_COLORFUL 1 // [Color key] Colorful (static color) @@ -46,15 +48,14 @@ struct SNFL1 { char *buffer; -#ifdef SONOFF_L1_ALLOW_REMOTE_INTERRUPT + uint32_t process_time = 0; uint32_t unlock = 0; - bool receive_ready = true; -#endif + uint32_t busy = SONOFF_L1_BUSY; + uint16_t sequence; uint8_t color[3]; uint8_t dimmer; uint8_t power; uint8_t old_music_sync = 0; - uint8_t music_sync = 0; uint8_t sensitive; uint8_t speed; } Snfl1; @@ -76,18 +77,29 @@ void SnfL1SendDelayed(void) { } #endif // SONOFF_L1_START_DELAY +#include +Ticker SnfL1Backlog; + +void SnfL1SendBacklog(void) { +// AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: ++Exec backlog")); + + SnfL1SetChannels(true); +} + void SnfL1Send(void) { #ifdef SONOFF_L1_DEBUG1 - AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: Send %s"), Snfl1.buffer); + AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: Send '%s'"), Snfl1.buffer); #endif Serial.print(Snfl1.buffer); Serial.write(0x1B); Serial.flush(); + + Snfl1.process_time = millis(); + Snfl1.unlock = Snfl1.process_time + Snfl1.busy; // Wait for 'AT+RESULT="sequence":"1630250830439"' } -void SnfL1SerialSendOk(void) { +void SnfL1SendOk(void) { snprintf_P(Snfl1.buffer, SONOFF_L1_BUFFER_SIZE, PSTR("AT+SEND=ok")); - SnfL1Send(); } @@ -102,16 +114,47 @@ bool SnfL1SerialInput(void) { } else { TasmotaGlobal.serial_in_buffer[TasmotaGlobal.serial_in_byte_counter++] = 0x00; - // AT+RESULT="sequence":"1554682835320" - // AT+UPDATE="sequence":"34906","switch":"on","light_type":1,"colorR":0,"colorG":16,"colorB":0,"bright":6,"mode":1 + // AT+RESULT="sequence":"0458" = L1 + // AT+RESULT="sequence":"0458","switch" = L1 lite - just returns part of receive buffer + // AT+RESULT="sequence":"1554682835320" = L1 both + // AT+UPDATE="sequence":"1554682835320","switch":"on","light_type":1,"colorR":0,"colorG":16,"colorB":0,"bright":6,"mode":1 // AT+UPDATE="switch":"on","light_type":1,"colorR":255,"colorG":0,"colorB":0,"bright":6,"mode":1,"speed":100,"sensitive":10 #ifdef SONOFF_L1_DEBUG1 - AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: Rcvd %s"), TasmotaGlobal.serial_in_buffer); + AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: Rcvd '%s'"), TasmotaGlobal.serial_in_buffer); #endif if (!strncmp(TasmotaGlobal.serial_in_buffer +3, "RESULT", 6)) { #ifdef SONOFF_L1_ALLOW_REMOTE_INTERRUPT - Snfl1.receive_ready = true; -#endif + Snfl1.busy = 500; +#else +/* + // Read sequence number and calculate time it took from send of same sequence + // this indicates Nuvoton processing speed (50-60 for L1, 30-40 for L1 lite) + // Important for constant color change schemes and fade + char *end_str; + char *string = TasmotaGlobal.serial_in_buffer +10; + char *token = strtok_r(string, ",", &end_str); + if (token) { + char* end_token; + char* token2 = strtok_r(token, ":", &end_token); + char* token3 = strtok_r(nullptr, ":", &end_token); + if (!strncmp(token2, "\"sequence\"", 10) && (strlen(token3) > 3)) { + token3 = token3 + strlen(token3) - 4; // Last three digits + if (Snfl1.sequence == atoi(token3)) { + Snfl1.busy = (millis() - Snfl1.process_time) + 30; // Add some scatter time + if (Snfl1.busy > SONOFF_L1_BUSY) { + Snfl1.busy = SONOFF_L1_BUSY; + } + } + } + } +*/ + Snfl1.busy = 80; +#endif // SONOFF_L1_ALLOW_REMOTE_INTERRUPT +// AddLog(LOG_LEVEL_DEBUG, PSTR("Sl1: ++Busy %d"), Snfl1.busy); + + SnfL1SendOk(); + return true; + } else if (!strncmp(TasmotaGlobal.serial_in_buffer +3, "UPDATE", 6)) { char cmnd_dimmer[20]; @@ -183,9 +226,16 @@ bool SnfL1SerialInput(void) { snprintf_P(cmnd_dimmer, sizeof(cmnd_dimmer), PSTR(D_CMND_DIMMER " %d"), dimmer); } + else if (!strncmp(token2, "\"mode\"", 6)) { + uint8_t received_mode = atoi(token3); + Settings->sbflag1.sonoff_l1_music_sync = (SONOFF_L1_MODE_SYNC_TO_MUSIC == received_mode); + } + token = strtok_r(nullptr, ",", &end_str); } + SnfL1SendOk(); + if (is_power_change) { if (Settings->light_scheme > 0) { if (!switch_state) { // If power off RC button pressed stop schemes @@ -193,9 +243,10 @@ bool SnfL1SerialInput(void) { snprintf_P(cmnd_scheme, sizeof(cmnd_scheme), PSTR(D_CMND_SCHEME " 0")); ExecuteCommand(cmnd_scheme, SRC_REMOTE); } - } else { - ExecuteCommandPower(1, switch_state, SRC_REMOTE); } +// else { + ExecuteCommandPower(1, switch_state, SRC_REMOTE); +// } } else if (is_brightness_change) { ExecuteCommand(cmnd_dimmer, SRC_REMOTE); @@ -217,8 +268,6 @@ bool SnfL1SerialInput(void) { } } - SnfL1SerialSendOk(); - return true; } TasmotaGlobal.serial_in_byte = 0; @@ -227,10 +276,10 @@ bool SnfL1SerialInput(void) { /********************************************************************************************/ -bool SnfL1SetChannels(void) { -#ifdef SONOFF_L1_ALLOW_REMOTE_INTERRUPT - if (Snfl1.receive_ready || TimeReached(Snfl1.unlock)) { -#endif +void SnfL1SetChannels(bool backlog) { + // Takes about 100ms at 9600 bps + + if (!backlog) { uint8_t power = Light.power; bool power_changed = (Snfl1.power != power); Snfl1.power = power; @@ -243,27 +292,33 @@ bool SnfL1SetChannels(void) { bool color_changed = false; if (!power_changed) { for (uint32_t i = 0; i < 3; i++) { - if ((Snfl1.color[i] < scale_col[i] -5) || (Snfl1.color[i] > scale_col[i] +5)) { - color_changed = true; // Allow scale-up margins of +/-5 + if (Snfl1.color[i] != scale_col[i]) { + color_changed = true; } Snfl1.color[i] = scale_col[i]; } } - if (!power_changed && !dimmer_changed && !color_changed && (Snfl1.old_music_sync == Snfl1.music_sync)) { return true; } + if (!power_changed && !dimmer_changed && !color_changed && (Snfl1.old_music_sync == Settings->sbflag1.sonoff_l1_music_sync)) { return; } + } - uint32_t mode = SONOFF_L1_MODE_COLORFUL; - if (Snfl1.music_sync) { - mode = SONOFF_L1_MODE_SYNC_TO_MUSIC; - } + if (TimeReached(Snfl1.unlock)) { - snprintf_P(Snfl1.buffer, SONOFF_L1_BUFFER_SIZE, PSTR("AT+UPDATE=\"sequence\":\"%d%03d\",\"switch\":\"%s\",\"light_type\":1,\"colorR\":%d,\"colorG\":%d,\"colorB\":%d,\"bright\":%d,\"mode\":%d,\"sensitive\":%d,\"speed\":%d"), - LocalTime(), millis()%1000, +// AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: ++SC snd")); + + uint32_t mode = (Settings->sbflag1.sonoff_l1_music_sync) ? SONOFF_L1_MODE_SYNC_TO_MUSIC : SONOFF_L1_MODE_COLORFUL; + Snfl1.sequence = millis()%1000; + snprintf_P(Snfl1.buffer, SONOFF_L1_BUFFER_SIZE, PSTR("AT+UPDATE=\"sequence\":\"%d%03d\",\"switch\":\"%s\",\"light_type\":1,\"colorR\":%d,\"colorG\":%d,\"colorB\":%d,\"bright\":%d,\"mode\":%d"), + LocalTime(), Snfl1.sequence, Snfl1.power ? "on" : "off", Snfl1.color[0], Snfl1.color[1], Snfl1.color[2], Snfl1.dimmer, - mode, - Snfl1.sensitive, - Snfl1.speed); + mode); + if (SONOFF_L1_MODE_SYNC_TO_MUSIC == mode) { + snprintf_P(Snfl1.buffer, SONOFF_L1_BUFFER_SIZE, PSTR("%s,\"sensitive\":%d,\"speed\":%d"), + Snfl1.buffer, + Snfl1.sensitive, + Snfl1.speed); + } #ifdef SONOFF_L1_START_DELAY static bool first_call = true; @@ -273,12 +328,24 @@ bool SnfL1SetChannels(void) { } else #endif // SONOFF_L1_START_DELAY SnfL1Send(); + } else { + if (Settings->light_scheme == 0) { + // Fix last fade state +// AddLog(LOG_LEVEL_DEBUG, PSTR("SL1: ++SC bck")); -#ifdef SONOFF_L1_ALLOW_REMOTE_INTERRUPT - Snfl1.unlock = millis() + 500; // Allow time for the RC - Snfl1.receive_ready = false; + SnfL1Backlog.once_ms(SONOFF_L1_BUSY, SnfL1SendBacklog); // Set backlog + } } -#endif +} + +bool SnfL1SetChannelsFromFunc(void) { + static bool first_call = true; + if (first_call) { + first_call = false; // Allow MusicSync at init time + } else { + Settings->sbflag1.sonoff_l1_music_sync = 0; // Disable MusicSync on user color change + } + SnfL1SetChannels(false); return true; } @@ -291,7 +358,6 @@ bool SnfL1ModuleSelected(void) { Snfl1.power = !Light.power; Snfl1.dimmer = !light_state.getDimmer(); - Snfl1.music_sync = 0; Snfl1.sensitive = 5; // 1..10 Snfl1.speed = 50; // 1..100 @@ -309,13 +375,13 @@ void CmndMusicSync(void) { // Format is L1MusicSync on/off/toggle, sensitivity, speed // sensitivity 1..10, speed 1..100 if (XdrvMailbox.data_len > 0) { - Snfl1.old_music_sync = Snfl1.music_sync; + Snfl1.old_music_sync = Settings->sbflag1.sonoff_l1_music_sync; uint32_t parm[3] = { 0 }; ParseParameters(3, parm); if (2 == parm[0]) { - Snfl1.music_sync ^= 1; // Toggle + Settings->sbflag1.sonoff_l1_music_sync ^= 1; // Toggle } else { - Snfl1.music_sync = parm[0] & 1; // On or Off + Settings->sbflag1.sonoff_l1_music_sync = parm[0] & 1; // On or Off } if ((parm[1] > 0) && (parm[1] < 11)) { Snfl1.sensitive = parm[1]; // 1..10 @@ -323,10 +389,10 @@ void CmndMusicSync(void) { if ((parm[2] > 0) && (parm[2] < 101)) { Snfl1.speed = parm[2]; // 1..100 } - SnfL1SetChannels(); + SnfL1SetChannels(false); } Response_P(PSTR("{\"%s\":{\"Mode\":\"%s\",\"Sensitive\":%d,\"Speed\":%d}}"), - XdrvMailbox.command, GetStateText(Snfl1.music_sync), Snfl1.sensitive, Snfl1.speed); + XdrvMailbox.command, GetStateText(Settings->sbflag1.sonoff_l1_music_sync), Snfl1.sensitive, Snfl1.speed); } /*********************************************************************************************\ @@ -342,7 +408,7 @@ bool Xlgt05(uint8_t function) result = SnfL1SerialInput(); break; case FUNC_SET_CHANNELS: - result = SnfL1SetChannels(); + result = SnfL1SetChannelsFromFunc(); break; case FUNC_MODULE_INIT: result = SnfL1ModuleSelected(); diff --git a/tasmota/xnrg_01_hlw8012.ino b/tasmota/xnrg_01_hlw8012.ino index c494a0b46..310e64360 100644 --- a/tasmota/xnrg_01_hlw8012.ino +++ b/tasmota/xnrg_01_hlw8012.ino @@ -214,7 +214,7 @@ void HlwEverySecond(void) { hlw_len = 10000 * 100 / Hlw.energy_period_counter; // Add *100 to fix rounding on loads at 3.6kW (#9160) Hlw.energy_period_counter = 0; if (hlw_len) { - Energy.kWhtoday_delta += (((Hlw.power_ratio * Settings->energy_power_calibration) / 36) * 100) / hlw_len; + Energy.kWhtoday_delta[0] += (((Hlw.power_ratio * Settings->energy_power_calibration) / 36) * 100) / hlw_len; EnergyUpdateToday(); } } diff --git a/tasmota/xnrg_02_cse7766.ino b/tasmota/xnrg_02_cse7766.ino index 9fc73549a..445781b37 100644 --- a/tasmota/xnrg_02_cse7766.ino +++ b/tasmota/xnrg_02_cse7766.ino @@ -205,7 +205,7 @@ void CseEverySecond(void) { // prevent invalid load delta steps even checksum is valid but allow up to 4kW (issue #7155): if (delta <= (4000 * 1000 / 36)) { // max load for S31/Pow R2: 4.00kW Cse.cf_pulses_last_time = Cse.cf_pulses; - Energy.kWhtoday_delta += delta; + Energy.kWhtoday_delta[0] += delta; } else { AddLog(LOG_LEVEL_DEBUG, PSTR("CSE: Overload")); diff --git a/tasmota/xnrg_03_pzem004t.ino b/tasmota/xnrg_03_pzem004t.ino index 1abd8d95a..1d07b1626 100644 --- a/tasmota/xnrg_03_pzem004t.ino +++ b/tasmota/xnrg_03_pzem004t.ino @@ -60,8 +60,8 @@ TasmotaSerial *PzemSerial = nullptr; /*********************************************************************************************/ struct PZEM { - float energy = 0; - float last_energy = 0; +// float energy = 0; +// float last_energy = 0; uint8_t send_retry = 0; uint8_t read_state = 0; // Set address uint8_t phase = 0; @@ -192,15 +192,11 @@ void PzemEvery250ms(void) Energy.active_power[Pzem.phase] = value; break; case 4: // Total energy as 99999Wh - Pzem.energy += value; + Energy.import_active[Pzem.phase] = value / 1000.0; // 99.999kWh if (Pzem.phase == Energy.phase_count -1) { - if (Pzem.energy > Pzem.last_energy) { // Handle missed phase - if (TasmotaGlobal.uptime > PZEM_STABILIZE) { - EnergyUpdateTotal(Pzem.energy, false); - } - Pzem.last_energy = Pzem.energy; + if (TasmotaGlobal.uptime > PZEM_STABILIZE) { + EnergyUpdateTotal(); } - Pzem.energy = 0; } break; } diff --git a/tasmota/xnrg_04_mcp39f501.ino b/tasmota/xnrg_04_mcp39f501.ino index 9f9ea562e..7601731a4 100644 --- a/tasmota/xnrg_04_mcp39f501.ino +++ b/tasmota/xnrg_04_mcp39f501.ino @@ -534,7 +534,7 @@ void McpEverySecond(void) } if (mcp_active_power) { - Energy.kWhtoday_delta += ((mcp_active_power * 10) / 36); + Energy.kWhtoday_delta[0] += ((mcp_active_power * 10) / 36); EnergyUpdateToday(); } diff --git a/tasmota/xnrg_05_pzem_ac.ino b/tasmota/xnrg_05_pzem_ac.ino index acf826c69..67ef47dee 100644 --- a/tasmota/xnrg_05_pzem_ac.ino +++ b/tasmota/xnrg_05_pzem_ac.ino @@ -77,18 +77,12 @@ void PzemAcEverySecond(void) Energy.active_power[PzemAc.phase] = (float)((buffer[11] << 24) + (buffer[12] << 16) + (buffer[9] << 8) + buffer[10]) / 10.0; // 429496729.0 W Energy.frequency[PzemAc.phase] = (float)((buffer[17] << 8) + buffer[18]) / 10.0; // 50.0 Hz Energy.power_factor[PzemAc.phase] = (float)((buffer[19] << 8) + buffer[20]) / 100.0; // 1.00 - - PzemAc.energy += (float)((buffer[15] << 24) + (buffer[16] << 16) + (buffer[13] << 8) + buffer[14]); // 4294967295 Wh + Energy.import_active[PzemAc.phase] = (float)((buffer[15] << 24) + (buffer[16] << 16) + (buffer[13] << 8) + buffer[14]) / 1000.0; // 4294967.295 kWh if (PzemAc.phase == Energy.phase_count -1) { - if (PzemAc.energy > PzemAc.last_energy) { // Handle missed phase - if (TasmotaGlobal.uptime > PZEM_AC_STABILIZE) { - EnergyUpdateTotal(PzemAc.energy, false); - } - PzemAc.last_energy = PzemAc.energy; + if (TasmotaGlobal.uptime > PZEM_AC_STABILIZE) { + EnergyUpdateTotal(); } - PzemAc.energy = 0; } - } } } diff --git a/tasmota/xnrg_06_pzem_dc.ino b/tasmota/xnrg_06_pzem_dc.ino index df17d2c82..074152684 100644 --- a/tasmota/xnrg_06_pzem_dc.ino +++ b/tasmota/xnrg_06_pzem_dc.ino @@ -74,16 +74,11 @@ void PzemDcEverySecond(void) Energy.voltage[PzemDc.channel] = (float)((buffer[3] << 8) + buffer[4]) / 100.0; // 655.00 V Energy.current[PzemDc.channel] = (float)((buffer[5] << 8) + buffer[6]) / 100.0; // 655.00 A Energy.active_power[PzemDc.channel] = (float)((buffer[9] << 24) + (buffer[10] << 16) + (buffer[7] << 8) + buffer[8]) / 10.0; // 429496729.0 W - - PzemDc.energy += (float)((buffer[13] << 24) + (buffer[14] << 16) + (buffer[11] << 8) + buffer[12]); // 4294967295 Wh + Energy.import_active[PzemDc.channel] = (float)((buffer[13] << 24) + (buffer[14] << 16) + (buffer[11] << 8) + buffer[12]) / 1000.0; // 4294967.295 kWh if (PzemDc.channel == Energy.phase_count -1) { - if (PzemDc.energy > PzemDc.last_energy) { // Handle missed channel - if (TasmotaGlobal.uptime > PZEM_DC_STABILIZE) { - EnergyUpdateTotal(PzemDc.energy, false); - } - PzemDc.last_energy = PzemDc.energy; + if (TasmotaGlobal.uptime > PZEM_DC_STABILIZE) { + EnergyUpdateTotal(); } - PzemDc.energy = 0; } } } diff --git a/tasmota/xnrg_07_ade7953.ino b/tasmota/xnrg_07_ade7953.ino index e52b248af..a09e4f257 100644 --- a/tasmota/xnrg_07_ade7953.ino +++ b/tasmota/xnrg_07_ade7953.ino @@ -21,7 +21,10 @@ #ifdef USE_ENERGY_SENSOR #ifdef USE_ADE7953 /*********************************************************************************************\ - * ADE7953 - Energy (Shelly 2.5) + * ADE7953 - Energy used in Shelly 2.5 (model 0) and Shelly EM (model 1) + * + * {"NAME":"Shelly 2.5","GPIO":[320,0,32,0,224,193,0,0,640,192,608,225,3456,4736],"FLAG":0,"BASE":18} + * {"NAME":"Shelly EM","GPIO":[0,0,0,0,0,0,0,0,640,3457,608,224,0,1],"FLAG":0,"BASE":18} * * Based on datasheet from https://www.analog.com/en/products/ade7953.html * @@ -37,17 +40,30 @@ #define ADE7953_ADDR 0x38 +// 24-bit data registers const uint16_t Ade7953Registers[] { - 0x31B, // RMS current channel B (Relay 1) - 0x313, // Active power channel B - 0x311, // Apparent power channel B - 0x315, // Reactive power channel B - 0x31A, // RMS current channel A (Relay 2) - 0x312, // Active power channel A - 0x310, // Apparent power channel A - 0x314, // Reactive power channel A - 0x31C, // RMS voltage (Both relays) - 0x10E // 16-bit unsigned period register + 0x31B, // IRMSB - RMS current channel B (Relay 1) + 0x313, // BWATT - Active power channel B + 0x311, // BVA - Apparent power channel B + 0x315, // BVAR - Reactive power channel B + 0x31A, // IRMSA - RMS current channel A (Relay 2) + 0x312, // AWATT - Active power channel A + 0x310, // AVA - Apparent power channel A + 0x314, // AVAR - Reactive power channel A + 0x31C, // VRMS - RMS voltage (Both relays) + 0x10E, // Period - 16-bit unsigned period register + 0x301 // ACCMODE - Accumulation mode +}; + +// Active power +const uint16_t APSIGN[] { + 0x800, //Bit 10 (21 bits) in ACCMODE Register for channel A (0 - positive, 1 - negative) + 0x400 //Bit 11 (21 bits) in ACCMODE Register for channel B (0 - positive, 1 - negative) +}; +// Reactive power +const uint16_t VARSIGN[] { + 0x200, //Bit 12 (21 bits) in ACCMODE Register for channel A (0 - positive, 1 - negative) + 0x100 //Bit 13 (21 bits) in ACCMODE Register for channel B (0 - positive, 1 - negative) }; struct Ade7953 { @@ -56,6 +72,7 @@ struct Ade7953 { uint32_t current_rms[2] = { 0, 0 }; uint32_t active_power[2] = { 0, 0 }; uint8_t init_step = 0; + uint8_t model = 0; // 0 = Shelly 2.5, 1 = Shelly EM } Ade7953; int Ade7953RegSize(uint16_t reg) @@ -120,13 +137,24 @@ void Ade7953Init(void) void Ade7953GetData(void) { + uint32_t acc_mode; int32_t reg[2][4]; for (uint32_t i = 0; i < sizeof(Ade7953Registers)/sizeof(uint16_t); i++) { int32_t value = Ade7953Read(Ade7953Registers[i]); if (8 == i) { Ade7953.voltage_rms = value; // RMS voltage (Both relays) } else if (9 == i) { - Ade7953.period = value; // period + Ade7953.period = value; // Period + } else if (10 == i) { + acc_mode = value; // Accumulation mode +/* + if (0 == Ade7953.model) { // Shelly 2.5 - Swap channel B values due to hardware connection +// if (acc_mode & APSIGN[0]) { acc_mode &= ~APSIGN[0]; } else { acc_mode |= APSIGN[0]; } +// if (acc_mode & VARSIGN[0]) { acc_mode &= ~VARSIGN[0]; } else { acc_mode |= VARSIGN[0]; } + acc_mode ^= (APSIGN[0] | VARSIGN[0]); +// acc_mode ^= 0xA00; + } +*/ } else { reg[i >> 2][i &3] = value; } @@ -152,12 +180,11 @@ void Ade7953GetData(void) } uint32_t current_rms_sum = Ade7953.current_rms[0] + Ade7953.current_rms[1]; - uint32_t active_power_sum = Ade7953.active_power[0] + Ade7953.active_power[1]; - AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("ADE: U %d, C %d, I %d + %d = %d, P %d + %d = %d"), + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("ADE: U %d, C %d, I %d + %d = %d, P %d + %d"), Ade7953.voltage_rms, Ade7953.period, Ade7953.current_rms[0], Ade7953.current_rms[1], current_rms_sum, - Ade7953.active_power[0], Ade7953.active_power[1], active_power_sum); + Ade7953.active_power[0], Ade7953.active_power[1]); if (Energy.power_on) { // Powered on Energy.voltage[0] = (float)Ade7953.voltage_rms / Settings->energy_voltage_calibration; @@ -167,24 +194,29 @@ void Ade7953GetData(void) Energy.data_valid[channel] = 0; Energy.active_power[channel] = (float)Ade7953.active_power[channel] / (Settings->energy_power_calibration / 10); Energy.reactive_power[channel] = (float)reactive_power[channel] / (Settings->energy_power_calibration / 10); + if (1 == Ade7953.model) { // Shelly EM + if ((acc_mode & APSIGN[channel]) != 0) { + Energy.active_power[channel] = Energy.active_power[channel] * -1; + } + if ((acc_mode & VARSIGN[channel]) != 0) { + Energy.reactive_power[channel] = Energy.reactive_power[channel] * -1; + } + } Energy.apparent_power[channel] = (float)apparent_power[channel] / (Settings->energy_power_calibration / 10); if (0 == Energy.active_power[channel]) { Energy.current[channel] = 0; } else { Energy.current[channel] = (float)Ade7953.current_rms[channel] / (Settings->energy_current_calibration * 10); + Energy.kWhtoday_delta[channel] += Energy.active_power[channel] * 1000 / 36; } } + EnergyUpdateToday(); /* } else { // Powered off Energy.data_valid[0] = ENERGY_WATCHDOG; Energy.data_valid[1] = ENERGY_WATCHDOG; */ } - - if (active_power_sum) { - Energy.kWhtoday_delta += ((active_power_sum * (100000 / (Settings->energy_power_calibration / 10))) / 3600); - EnergyUpdateToday(); - } } void Ade7953EnergyEverySecond(void) @@ -201,8 +233,10 @@ void Ade7953EnergyEverySecond(void) void Ade7953DrvInit(void) { - if (PinUsed(GPIO_ADE7953_IRQ)) { // Irq on GPIO16 is not supported... - pinMode(Pin(GPIO_ADE7953_IRQ), INPUT); // Related to resetPins() - Must be set to input + if (PinUsed(GPIO_ADE7953_IRQ, GPIO_ANY)) { // Irq on GPIO16 is not supported... + uint32_t pin_irq = Pin(GPIO_ADE7953_IRQ, GPIO_ANY); + pinMode(pin_irq, INPUT); // Related to resetPins() - Must be set to input + Ade7953.model = GetPin(pin_irq) - AGPIO(GPIO_ADE7953_IRQ); // 0 .. 1 ; delay(100); // Need 100mS to init ADE7953 if (I2cSetDevice(ADE7953_ADDR)) { if (HLW_PREF_PULSE == Settings->energy_power_calibration) { diff --git a/tasmota/xnrg_08_sdm120.ino b/tasmota/xnrg_08_sdm120.ino index 5179eae1a..85eb252db 100644 --- a/tasmota/xnrg_08_sdm120.ino +++ b/tasmota/xnrg_08_sdm120.ino @@ -161,7 +161,8 @@ void SDM120Every250ms(void) Sdm120.start_address_count = sdm120_table; // No extended registers available } } - EnergyUpdateTotal(Sdm120.total_active, true); // 484.708 kWh + Energy.import_active[0] = Sdm120.total_active; // 484.708 kWh + EnergyUpdateTotal(); // 484.708 kWh } } } // end data ready diff --git a/tasmota/xnrg_09_dds2382.ino b/tasmota/xnrg_09_dds2382.ino index 3a9e81e6d..d960183dd 100644 --- a/tasmota/xnrg_09_dds2382.ino +++ b/tasmota/xnrg_09_dds2382.ino @@ -67,7 +67,7 @@ void Dds2382EverySecond(void) Energy.voltage[0] = (float)((buffer[27] << 8) + buffer[28]) / 10.0; Energy.current[0] = (float)((buffer[29] << 8) + buffer[30]) / 100.0; Energy.active_power[0] = (float)((buffer[31] << 8) + buffer[32]); - Energy.reactive_power[0] = (float)((buffer[33] << 8) + buffer[34]); + Energy.reactive_power[0] = (float)(int16_t)((buffer[33] << 8) + buffer[34]); Energy.power_factor[0] = (float)((buffer[35] << 8) + buffer[36]) / 1000.0; // 1.00 Energy.frequency[0] = (float)((buffer[37] << 8) + buffer[38]) / 100.0; // 50.0 Hz uint8_t offset = 11; @@ -75,9 +75,8 @@ void Dds2382EverySecond(void) offset = 19; } Energy.export_active[0] = (float)((buffer[offset] << 24) + (buffer[offset +1] << 16) + (buffer[offset +2] << 8) + buffer[offset +3]) / 100.0; // 429496.729 kW - float import_active = (float)((buffer[offset +4] << 24) + (buffer[offset +5] << 16) + (buffer[offset +6] << 8) + buffer[offset +7]) / 100.0; // 429496.729 kW - - EnergyUpdateTotal(import_active, true); // 484.708 kWh + Energy.import_active[0] = (float)((buffer[offset +4] << 24) + (buffer[offset +5] << 16) + (buffer[offset +6] << 8) + buffer[offset +7]) / 100.0; // 429496.729 kW + EnergyUpdateTotal(); // 484.708 kWh } } // end data ready diff --git a/tasmota/xnrg_10_sdm630.ino b/tasmota/xnrg_10_sdm630.ino index 46c14ffc4..717ded0e8 100644 --- a/tasmota/xnrg_10_sdm630.ino +++ b/tasmota/xnrg_10_sdm630.ino @@ -60,11 +60,11 @@ const uint16_t sdm630_start_addresses[] { 0x0160, // + + + kWh Phase 1 export active energy 0x0162, // + + + kWh Phase 2 export active energy 0x0164, // + + + kWh Phase 3 export active energy -#ifdef SDM630_IMPORT +//#ifdef SDM630_IMPORT 0x015A, // + + + kWh Phase 1 import active energy 0x015C, // + + + kWh Phase 2 import active energy 0x015E, // + + + kWh Phase 3 import active energy -#endif // SDM630_IMPORT +//#endif // SDM630_IMPORT 0x0156 // + + + kWh Total active energy }; @@ -179,7 +179,6 @@ void SDM630Every250ms(void) break; case 19: -#ifdef SDM630_IMPORT Energy.import_active[0] = value; break; @@ -192,8 +191,8 @@ void SDM630Every250ms(void) break; case 22: -#endif // SDM630_IMPORT - EnergyUpdateTotal(value, true); +// Energy.import_active[0] = value; + EnergyUpdateTotal(); break; } diff --git a/tasmota/xnrg_11_ddsu666.ino b/tasmota/xnrg_11_ddsu666.ino index 6b2d8dfb9..cad411916 100644 --- a/tasmota/xnrg_11_ddsu666.ino +++ b/tasmota/xnrg_11_ddsu666.ino @@ -49,7 +49,6 @@ const uint16_t Ddsu666_start_addresses[] { }; struct DDSU666 { - float import_active = NAN; uint8_t read_state = 0; uint8_t send_retry = 0; } Ddsu666; @@ -106,7 +105,7 @@ void DDSU666Every250ms(void) break; case 6: - Ddsu666.import_active = value; // 478.492 kWh + Energy.import_active[0] = value; // 478.492 kWh break; case 7: @@ -118,7 +117,7 @@ void DDSU666Every250ms(void) if (Ddsu666.read_state == 8) { Ddsu666.read_state = 0; - EnergyUpdateTotal(Ddsu666.import_active, true); // 484.708 kWh + EnergyUpdateTotal(); // 484.708 kWh } } } // end data ready diff --git a/tasmota/xnrg_12_solaxX1.ino b/tasmota/xnrg_12_solaxX1.ino index efa788399..352757b6e 100644 --- a/tasmota/xnrg_12_solaxX1.ino +++ b/tasmota/xnrg_12_solaxX1.ino @@ -100,7 +100,6 @@ struct SOLAXX1 { float dc2_voltage = 0; float dc1_current = 0; float dc2_current = 0; - uint32_t energy_total = 0; uint32_t runtime_total = 0; float dc1_power = 0; float dc2_power = 0; @@ -272,7 +271,7 @@ void solaxX1250MSecond(void) // Every 250 milliseconds Energy.frequency[0] = (float)((value[25] << 8) | value[26]) * 0.01f; // AC Frequency Energy.active_power[0] = (float)((value[27] << 8) | value[28]); // AC Power //temporal = (float)((value[29] << 8) | value[30]) * 0.1f; // Not Used - solaxX1.energy_total = ((value[31] << 24) | (value[32] << 16) | (value[33] << 8) | value[34]); // Energy Total + Energy.import_active[0] = (float)((value[31] << 24) | (value[32] << 16) | (value[33] << 8) | value[34]) * 0.1f; // Energy Total solaxX1.runtime_total = ((value[35] << 24) | (value[36] << 16) | (value[37] << 8) | value[38]); // Work Time Total solaxX1.status = (uint8_t)((value[39] << 8) | value[40]); // Work mode //temporal = (float)((value[41] << 8) | value[42]); // Grid voltage fault value 0.1V @@ -287,7 +286,7 @@ void solaxX1250MSecond(void) // Every 250 milliseconds solaxX1.dc1_power = solaxX1.dc1_voltage * solaxX1.dc1_current; solaxX1.dc2_power = solaxX1.dc2_voltage * solaxX1.dc2_current; - EnergyUpdateTotal((float)solaxX1.energy_total * 0.1f, true); // 484.708 kWh + EnergyUpdateTotal(); // 484.708 kWh } } else { // end hasAddress // check address confirmation from inverter @@ -365,7 +364,7 @@ void solaxX1250MSecond(void) // Every 250 milliseconds solaxX1.temperature = solaxX1.dc1_voltage = solaxX1.dc2_voltage = solaxX1.dc1_current = solaxX1.dc2_current = solaxX1.dc1_power = 0; solaxX1.dc2_power = solaxX1.status = Energy.current[0] = Energy.voltage[0] = Energy.frequency[0] = Energy.active_power[0] = 0; - //solaxX1.energy_today = solaxX1.energy_total = solaxX1.runtime_total = 0; + //solaxX1.energy_today = solaxX1.runtime_total = 0; } else { if (protocolStatus.queryOfflineSend) { protocolStatus.status = 0b00001000; // queryOffline diff --git a/tasmota/xnrg_13_fif_le01mr.ino b/tasmota/xnrg_13_fif_le01mr.ino index acce3076d..3bc2ebc8a 100644 --- a/tasmota/xnrg_13_fif_le01mr.ino +++ b/tasmota/xnrg_13_fif_le01mr.ino @@ -181,7 +181,8 @@ void FifLEEvery250ms(void) break; case 7: - Le01mr.total_active = value_buff * 0.01f; // [kWh] + Energy.import_active[0] = value_buff * 0.01f; // [kWh] + Le01mr.total_active = Energy.import_active[0]; // Useless break; case 8: @@ -193,7 +194,7 @@ void FifLEEvery250ms(void) if (Le01mr.read_state == Le01mr.start_address_count) { Le01mr.read_state = 0; - EnergyUpdateTotal(Le01mr.total_active, true); + EnergyUpdateTotal(); } } } // end data ready diff --git a/tasmota/xnrg_14_bl0940.ino b/tasmota/xnrg_14_bl0940.ino deleted file mode 100644 index ecd30c543..000000000 --- a/tasmota/xnrg_14_bl0940.ino +++ /dev/null @@ -1,326 +0,0 @@ -/* - xnrg_14_bl0940.ino - BL0940 energy sensor support for Tasmota - - Copyright (C) 2021 Theo Arends - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifdef USE_ENERGY_SENSOR -#ifdef USE_BL0940 -/*********************************************************************************************\ - * BL0940 - Energy (Blitzwolf SHP10) - * - * Template {"NAME":"BW-SHP10","GPIO":[0,148,0,207,158,21,0,0,0,17,0,0,0],"FLAG":0,"BASE":18} - * - * Based on datasheet from http://www.belling.com.cn/media/file_object/bel_product/BL0940/datasheet/BL0940_V1.1_en.pdf -\*********************************************************************************************/ - -#define XNRG_14 14 - -#define BL0940_PREF 1430 -#define BL0940_UREF 33000 -#define BL0940_IREF 2750 - -#define BL0940_PULSES_NOT_INITIALIZED -1 - -#define BL0940_BUFFER_SIZE 36 - -#define BL0940_WRITE_COMMAND 0xA0 // 0xA8 according to documentation -#define BL0940_REG_I_FAST_RMS_CTRL 0x10 -#define BL0940_REG_MODE 0x18 -#define BL0940_REG_SOFT_RESET 0x19 -#define BL0940_REG_USR_WRPROT 0x1A -#define BL0940_REG_TPS_CTRL 0x1B - -#define BL0940_READ_COMMAND 0x50 // 0x58 according to documentation -#define BL0940_FULL_PACKET 0xAA - -#define BL0940_PACKET_HEADER 0x55 // 0x58 according to documentation - -#include - -TasmotaSerial *Bl0940Serial = nullptr; - -struct BL0940 { - long voltage = 0; - long current = 0; - long power = 0; - long power_cycle_first = 0; - long cf_pulses = 0; - long cf_pulses_last_time = BL0940_PULSES_NOT_INITIALIZED; - float temperature; - - int byte_counter = 0; - uint16_t tps1 = 0; - uint8_t *rx_buffer = nullptr; - bool received = false; -} Bl0940; - -const uint8_t bl0940_init[5][6] = { - { BL0940_WRITE_COMMAND, BL0940_REG_SOFT_RESET, 0x5A, 0x5A, 0x5A, 0x38 }, // Reset to default - { BL0940_WRITE_COMMAND, BL0940_REG_USR_WRPROT, 0x55, 0x00, 0x00, 0xF0 }, // Enable User Operation Write - { BL0940_WRITE_COMMAND, BL0940_REG_MODE, 0x00, 0x10, 0x00, 0x37 }, // 0x0100 = CF_UNABLE energy pulse, AC_FREQ_SEL 50Hz, RMS_UPDATE_SEL 800mS - { BL0940_WRITE_COMMAND, BL0940_REG_TPS_CTRL, 0xFF, 0x47, 0x00, 0xFE }, // 0x47FF = Over-current and leakage alarm on, Automatic temperature measurement, Interval 100mS - { BL0940_WRITE_COMMAND, BL0940_REG_I_FAST_RMS_CTRL, 0x1C, 0x18, 0x00, 0x1B }}; // 0x181C = Half cycle, Fast RMS threshold 6172 - -void Bl0940Received(void) { - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 - // 55 F2 03 00 00 00 00 7E 02 00 D4 B0 72 AC 01 00 00 00 00 02 01 00 00 00 00 00 00 00 BA 01 00 FE 03 00 83 - // 55 88 02 00 49 00 00 FE 02 00 AF EF 71 D2 01 00 EB FF FF 49 01 00 00 00 00 02 00 00 CF 01 00 FE 03 00 9F - // 55 B9 33 00 DE 45 00 94 02 00 CF E4 70 63 02 00 6C 4C 00 13 01 00 09 00 00 00 00 00 E4 01 00 FE 03 00 72 - // Hd IFRms--- Current- Reserved Voltage- Reserved Power--- Reserved CF------ Reserved TPS1---- TPS2---- Ck - - uint16_t tps1 = Bl0940.rx_buffer[29] << 8 | Bl0940.rx_buffer[28]; // TPS1 unsigned - if ((Bl0940.rx_buffer[0] != BL0940_PACKET_HEADER) || // Bad header - (Bl0940.tps1 && ((tps1 < (Bl0940.tps1 -10)) || (tps1 > (Bl0940.tps1 +10)))) // Invalid temperature change - ) { - AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: Invalid data")); - return; - } - - Bl0940.tps1 = tps1; - float t = ((170.0f/448.0f)*(((float)Bl0940.tps1/2.0f)-32.0f))-45.0f; - Bl0940.temperature = ConvertTemp(t); - - Bl0940.voltage = Bl0940.rx_buffer[12] << 16 | Bl0940.rx_buffer[11] << 8 | Bl0940.rx_buffer[10]; // V_RMS unsigned - Bl0940.current = Bl0940.rx_buffer[6] << 16 | Bl0940.rx_buffer[5] << 8 | Bl0940.rx_buffer[4]; // I_RMS unsigned - int32_t power = Bl0940.rx_buffer[18] << 24 | Bl0940.rx_buffer[17] << 16 | Bl0940.rx_buffer[16] << 8; // WATT signed - Bl0940.power = abs(power) >> 8; // WATT unsigned - int32_t cf_cnt = Bl0940.rx_buffer[24] << 24 | Bl0940.rx_buffer[23] << 16 | Bl0940.rx_buffer[22] << 8; // CF_CNT signed - Bl0940.cf_pulses = abs(cf_cnt) >> 8; - - AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: U %d, I %d, P %d, C %d, T %d"), - Bl0940.voltage, Bl0940.current, Bl0940.power, Bl0940.cf_pulses, Bl0940.tps1); - - if (Energy.power_on) { // Powered on - Energy.voltage[0] = (float)Bl0940.voltage / Settings->energy_voltage_calibration; - if (power && (Bl0940.power > Settings->energy_power_calibration)) { // We need at least 1W - Energy.active_power[0] = (float)Bl0940.power / Settings->energy_power_calibration; - Energy.current[0] = (float)Bl0940.current / (Settings->energy_current_calibration * 100); - } else { - Energy.active_power[0] = 0; - Energy.current[0] = 0; - } - } else { // Powered off -// Bl0940.power_cycle_first = 0; - Energy.voltage[0] = 0; - Energy.active_power[0] = 0; - Energy.current[0] = 0; - } -} - -void Bl0940SerialInput(void) { - while (Bl0940Serial->available()) { - yield(); - uint8_t serial_in_byte = Bl0940Serial->read(); - if (!Bl0940.received && (BL0940_PACKET_HEADER == serial_in_byte)) { - Bl0940.received = true; - Bl0940.byte_counter = 0; - } - if (Bl0940.received) { - Bl0940.rx_buffer[Bl0940.byte_counter++] = serial_in_byte; - if (BL0940_BUFFER_SIZE == Bl0940.byte_counter) { - - AddLogBuffer(LOG_LEVEL_DEBUG_MORE, Bl0940.rx_buffer, BL0940_BUFFER_SIZE -1); - - uint8_t checksum = BL0940_READ_COMMAND; - for (uint32_t i = 0; i < BL0940_BUFFER_SIZE -2; i++) { checksum += Bl0940.rx_buffer[i]; } - checksum ^= 0xFF; - if (checksum == Bl0940.rx_buffer[34]) { - Energy.data_valid[0] = 0; - Bl0940Received(); - Bl0940.received = false; - return; - } else { - do { // Sync buffer with data (issue #1907 and #3425) - memmove(Bl0940.rx_buffer, Bl0940.rx_buffer +1, BL0940_BUFFER_SIZE -1); - Bl0940.byte_counter--; - } while ((Bl0940.byte_counter > 1) && (BL0940_PACKET_HEADER != Bl0940.rx_buffer[0])); - if (BL0940_PACKET_HEADER != Bl0940.rx_buffer[0]) { - AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: " D_CHECKSUM_FAILURE)); - Bl0940.received = false; - Bl0940.byte_counter = 0; - } - } - } - } - } -} - -/********************************************************************************************/ - -void Bl0940EverySecond(void) { - if (Energy.data_valid[0] > ENERGY_WATCHDOG) { - Bl0940.voltage = 0; - Bl0940.current = 0; - Bl0940.power = 0; - } else { -/* - // Calculate energy by using active power - if (Energy.active_power[0]) { - Energy.kWhtoday_delta += (Energy.active_power[0] * 1000) / 36; - EnergyUpdateToday(); - } -*/ - // Calculate energy by using active energy pulse count - if (BL0940_PULSES_NOT_INITIALIZED == Bl0940.cf_pulses_last_time) { - Bl0940.cf_pulses_last_time = Bl0940.cf_pulses; // Init after restart - } else { - uint32_t cf_pulses = 0; - if (Bl0940.cf_pulses < Bl0940.cf_pulses_last_time) { // Rolled over after 0xFFFFFF (16777215) pulses - cf_pulses = (0x1000000 - Bl0940.cf_pulses_last_time) + Bl0940.cf_pulses; - } else { - cf_pulses = Bl0940.cf_pulses - Bl0940.cf_pulses_last_time; - } - if (cf_pulses && Energy.active_power[0]) { - uint32_t watt256 = (1638400 * 256) / Settings->energy_power_calibration; - uint32_t delta = (cf_pulses * watt256) / 36; - if (delta <= (4000 * 1000 / 36)) { // max load for SHP10: 4.00kW (3.68kW) - Bl0940.cf_pulses_last_time = Bl0940.cf_pulses; - Energy.kWhtoday_delta += delta; - } else { - AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: Overload")); - Bl0940.cf_pulses_last_time = BL0940_PULSES_NOT_INITIALIZED; - } - EnergyUpdateToday(); - } - } - - } - -// AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: Poll")); - - Bl0940Serial->flush(); - Bl0940Serial->write(BL0940_READ_COMMAND); - Bl0940Serial->write(BL0940_FULL_PACKET); -} - -void Bl0940SnsInit(void) { - // Software serial init needs to be done here as earlier (serial) interrupts may lead to Exceptions - Bl0940Serial = new TasmotaSerial(Pin(GPIO_BL0940_RX), Pin(GPIO_TXD), 1); - if (Bl0940Serial->begin(4800, 1)) { - if (Bl0940Serial->hardwareSerial()) { - ClaimSerial(); - } - if (HLW_UREF_PULSE == Settings->energy_voltage_calibration) { - Settings->energy_voltage_calibration = BL0940_UREF; - Settings->energy_current_calibration = BL0940_IREF; - Settings->energy_power_calibration = BL0940_PREF; - } - Energy.use_overtemp = true; // Use global temperature for overtemp detection - - for (uint32_t i = 0; i < 5; i++) { - for (uint32_t j = 0; j < 6; j++) { - Bl0940Serial->write(bl0940_init[i][j]); -// Bl0940Serial->write(pgm_read_byte(bl0940_init + (6 * i) + j)); // Wrong byte order! - } - delay(1); - } - - } else { - TasmotaGlobal.energy_driver = ENERGY_NONE; - } -} - -void Bl0940DrvInit(void) { - if (PinUsed(GPIO_BL0940_RX) && PinUsed(GPIO_TXD)) { - Bl0940.rx_buffer = (uint8_t*)(malloc(BL0940_BUFFER_SIZE)); - if (Bl0940.rx_buffer != nullptr) { - TasmotaGlobal.energy_driver = XNRG_14; - } - } -} - -bool Bl0940Command(void) { - bool serviced = true; - - uint32_t value = (uint32_t)(CharToFloat(XdrvMailbox.data) * 100); // 1.23 = 123 - - if (CMND_POWERSET == Energy.command_code) { - if (XdrvMailbox.data_len && Bl0940.power) { - Settings->energy_power_calibration = (Bl0940.power * 100) / value; - } - } - else if (CMND_VOLTAGESET == Energy.command_code) { - if (XdrvMailbox.data_len && Bl0940.voltage) { - Settings->energy_voltage_calibration = (Bl0940.voltage * 100) / value; - } - } - else if (CMND_CURRENTSET == Energy.command_code) { - if (XdrvMailbox.data_len && Bl0940.current) { - Settings->energy_current_calibration = Bl0940.current / value; - } - } - else serviced = false; // Unknown command - - return serviced; -} - -void Bl0940Show(bool json) { - if (json) { - ResponseAppend_P(JSON_SNS_F_TEMP, "BL0940", Settings->flag2.temperature_resolution, &Bl0940.temperature); - if (0 == TasmotaGlobal.tele_period) { -#ifdef USE_DOMOTICZ - DomoticzFloatSensor(DZ_TEMP, Bl0940.temperature); -#endif // USE_DOMOTICZ -#ifdef USE_KNX - KnxSensor(KNX_TEMPERATURE, Bl0940.temperature); -#endif // USE_KNX - } -#ifdef USE_WEBSERVER - } else { - WSContentSend_Temp("", Bl0940.temperature); -#endif // USE_WEBSERVER - - } -} - -/*********************************************************************************************\ - * Interface -\*********************************************************************************************/ - -bool Xnrg14(uint8_t function) { - bool result = false; - - switch (function) { - case FUNC_LOOP: - if (Bl0940Serial) { Bl0940SerialInput(); } - break; - case FUNC_EVERY_SECOND: - Bl0940EverySecond(); - break; - case FUNC_JSON_APPEND: - Bl0940Show(1); - break; -#ifdef USE_WEBSERVER - case FUNC_WEB_SENSOR: - Bl0940Show(0); - break; -#endif // USE_WEBSERVER - case FUNC_COMMAND: - result = Bl0940Command(); - break; - case FUNC_INIT: - Bl0940SnsInit(); - break; - case FUNC_PRE_INIT: - Bl0940DrvInit(); - break; - } - return result; -} - -#endif // USE_BL0940 -#endif // USE_ENERGY_SENSOR diff --git a/tasmota/xnrg_14_bl09xx.ino b/tasmota/xnrg_14_bl09xx.ino new file mode 100644 index 000000000..bca55c513 --- /dev/null +++ b/tasmota/xnrg_14_bl09xx.ino @@ -0,0 +1,432 @@ +/* + xnrg_14_bl09xx.ino - BL09XX energy sensor support for Tasmota + + Copyright (C) 2021 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef USE_ENERGY_SENSOR +#if defined(USE_BL0940) || defined(USE_BL09XX) +#ifdef USE_BL0940 +#warning **** USE_BL0940 is obsolete. Please replace with USE_BLE09XX **** +#endif +/*********************************************************************************************\ + * Support the following Shangai Belling energy sensors: + * + * BL0940 - Energy (as in Blitzwolf SHP10) + * Template {"NAME":"BW-SHP10","GPIO":[0,148,0,207,158,21,0,0,0,17,0,0,0],"FLAG":0,"BASE":18} + * Based on datasheet from http://www.belling.com.cn/media/file_object/bel_product/BL09XX/datasheet/BL09XX_V1.1_en.pdf + * + * BL0939 - Energy (as in Sonoff Dual R3 v2) + * {"NAME":"Sonoff Dual R3 v2","GPIO":[32,0,0,0,0,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,3200,8128,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} + * Based on datasheet from https://www.belling.com.cn/product_info.html?id=368 + * See https://github.com/arendst/Tasmota/discussions/10793 + \*********************************************************************************************/ + +#define XNRG_14 14 + +//#define DEBUG_BL09XX + +#define BL0939_PREF 713 // =(4046*1*0,51*1000)/(1,218*1,218*(390*5+0,51)) = 713,105 +#define BL0939_UREF 17159 // =(79931*0,51*1000)/(1,218*(390*5+0,51)) = 17158,92 +#define BL0939_IREF 266013 // =(324004*1)/1,218 = 266013,14 + +#define BL0940_PREF 1430 +#define BL0940_UREF 33000 +#define BL0940_IREF 275000 + +#define BL0942_PREF 596 +#define BL0942_UREF 15187 +#define BL0942_IREF 251213 + +#define BL09XX_WRITE_COMMAND 0xA0 // 0xA8 according to documentation +#define BL09XX_REG_I_FAST_RMS_CTRL 0x10 +#define BL09XX_REG_MODE 0x18 +#define BL09XX_REG_SOFT_RESET 0x19 +#define BL09XX_REG_USR_WRPROT 0x1A +#define BL09XX_REG_TPS_CTRL 0x1B + +#define BL09XX_READ_COMMAND 0x50 // 0x58 according to documentation +#define BL09XX_FULL_PACKET 0xAA + +#define BL09XX_PACKET_HEADER 0x55 // 0x58 according to documentation + +#include + +TasmotaSerial *Bl09XXSerial = nullptr; + +enum Bl09xxModel { BL0939_MODEL, BL0940_MODEL, BL0942_MODEL, BL09XX_MODEL }; // Model index number starting from 0 +const uint32_t bl09xx_pref[] = { BL0939_PREF, BL0940_PREF, BL0942_PREF }; // Power reference constant +const uint32_t bl09xx_uref[] = { BL0939_UREF, BL0940_UREF, BL0942_UREF }; // Voltage reference constant +const uint32_t bl09xx_iref[] = { BL0939_IREF, BL0940_IREF, BL0942_IREF }; // Current reference constant +const uint8_t bl09xx_type[] = { 39, 40, 42 }; // Device name BL09xx +const uint8_t bl09xx_phase_count[] = { 2, 1, 1 }; // Supported phase/channel count +const uint8_t bl09xx_address[] = { 0x05, 0x00, 0x08 }; // Device address +const uint8_t bl09xx_buffer_size[] = { 35, 35, 23 }; // Serial receive buffer size +const uint8_t bl09xx_init[5][4] = { + { BL09XX_REG_SOFT_RESET, 0x5A, 0x5A, 0x5A }, // Reset to default + { BL09XX_REG_USR_WRPROT, 0x55, 0x00, 0x00 }, // Enable User Operation Write + { BL09XX_REG_MODE, 0x00, 0x10, 0x00 }, // 0x0100 = CF_UNABLE energy pulse, AC_FREQ_SEL 50Hz, RMS_UPDATE_SEL 800mS + { BL09XX_REG_TPS_CTRL, 0xFF, 0x47, 0x00 }, // 0x47FF = Over-current and leakage alarm on, Automatic temperature measurement, Interval 100mS + { BL09XX_REG_I_FAST_RMS_CTRL, 0x1C, 0x18, 0x00 } // 0x181C = Half cycle, Fast RMS threshold 6172 +}; + +struct BL09XX { + uint32_t voltage = 0; + uint32_t current[2] = { 0, }; + uint32_t power[2] = { 0, }; + float temperature; + uint16_t tps1 = 0; + uint8_t *rx_buffer = nullptr; + uint8_t buffer_size = 0; + uint8_t byte_counter = 0; + uint8_t address = 0; + uint8_t model = 0; + uint8_t rx_pin; + bool received = false; +} Bl09XX; + +bool Bl09XXDecode3940(void) { + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 + // Sample from BL0940 (single channel) + // 55 F2 03 00 00 00 00 7E 02 00 D4 B0 72 AC 01 00 00 00 00 02 01 00 00 00 00 00 00 00 BA 01 00 FE 03 00 83 + // 55 88 02 00 49 00 00 FE 02 00 AF EF 71 D2 01 00 EB FF FF 49 01 00 00 00 00 02 00 00 CF 01 00 FE 03 00 9F + // 55 B9 33 00 DE 45 00 94 02 00 CF E4 70 63 02 00 6C 4C 00 13 01 00 09 00 00 00 00 00 E4 01 00 FE 03 00 72 + // 55 B8 55 00 2F 73 00 D2 02 00 00 C6 74 F9 01 00 97 89 00 37 01 00 AB 00 00 2D 00 00 02 02 00 FE 03 00 6E = U 7652864, I 29487/0, P 35223/0, C 171/0, T 514 + // Hd IFRms--- Current- Reserved Voltage- Reserved Power--- Reserved CF------ Reserved TPS1---- TPS2---- Ck + // + // Sample from BL0939 (dual channel) + // 55 82 03 00 00 00 00 1E 15 01 65 80 3E E5 C6 00 00 00 00 50 B1 00 00 00 00 00 00 00 F9 01 00 FE 03 00 D2 = U 4096101, I 0/70942, P 0/45392, C 0/0, T 505 + // 55 E6 02 00 00 00 00 37 15 01 0F 83 3E F4 C7 00 00 00 00 69 B1 00 00 00 00 01 00 00 FA 01 00 FE 03 00 7E = U 4096783, I 0/70967, P 0/45417, C 0/1, T 506 + // 55 29 03 00 00 00 00 27 15 01 3A 86 3E AF C8 00 00 00 00 67 B1 00 00 00 00 01 00 00 FA 01 00 FE 03 00 62 = U 4097594, I 0/70951, P 0/45415, C 0/1, T 506 + // 55 04 03 00 00 00 00 D6 14 01 7D 8E 3E 25 C7 00 00 00 00 53 B1 00 00 00 00 01 00 00 F9 01 00 FE 03 00 2E = U 4099709, I 0/70870, P 0/45395, C 0/1, T 505 + // Hd IFRms-A- CurrentA CurrentB Voltage- IFRms-B- PowerA-- PowerB-- CF-A---- CF-B---- TPS1---- TPS2---- Ck + + uint16_t tps1 = Bl09XX.rx_buffer[29] << 8 | Bl09XX.rx_buffer[28]; // TPS1 unsigned + if ((Bl09XX.rx_buffer[0] != BL09XX_PACKET_HEADER) || // Bad header + (Bl09XX.tps1 && ((tps1 < (Bl09XX.tps1 -10)) || (tps1 > (Bl09XX.tps1 +10)))) // Invalid temperature change + ) { + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: Invalid data hd=%02X, tps1:%d"), Bl09XX.rx_buffer[0], tps1); + return false; + } + + Bl09XX.tps1 = tps1; + float t = ((170.0f/448.0f)*(((float)Bl09XX.tps1/2.0f)-32.0f))-45.0f; + Bl09XX.temperature = ConvertTemp(t); + + Bl09XX.voltage = Bl09XX.rx_buffer[12] << 16 | Bl09XX.rx_buffer[11] << 8 | Bl09XX.rx_buffer[10]; // V_RMS unsigned + Bl09XX.current[0] = Bl09XX.rx_buffer[6] << 16 | Bl09XX.rx_buffer[5] << 8 | Bl09XX.rx_buffer[4]; // IA_RMS unsigned + int32_t tmp = Bl09XX.rx_buffer[18] << 24 | Bl09XX.rx_buffer[17] << 16 | Bl09XX.rx_buffer[16] << 8; // WATT_A signed + Bl09XX.power[0] = abs(tmp >> 8); // WATT_A unsigned + + if (Energy.phase_count > 1) { + Bl09XX.current[1] = Bl09XX.rx_buffer[9] << 16 | Bl09XX.rx_buffer[8] << 8 | Bl09XX.rx_buffer[7]; // IB_RMS unsigned + tmp = Bl09XX.rx_buffer[21] << 24 | Bl09XX.rx_buffer[20] << 16 | Bl09XX.rx_buffer[19] << 8; // WATT_B signed + Bl09XX.power[1] = abs(tmp >> 8); // WATT_B unsigned + } + +#ifdef DEBUG_BL09XX + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: U %d, I %d/%d, P %d/%d, T %d"), + Bl09XX.voltage, Bl09XX.current[0], Bl09XX.current[1], Bl09XX.power[0], Bl09XX.power[1], Bl09XX.tps1); +#endif + + return true; +} + +bool Bl09XXDecode42(void) { + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 + // Hd Current- Voltage- IFRms--- Power--- CF------ Freq- 00 St 00 00 Ck + // 55 A3 B9 00 9E 4C 36 93 43 00 F4 98 FF 99 00 00 16 4E 00 01 01 00 + // U 3558558, I 47523, P 26380, C 153 + // 55 AC B9 00 79 4D 36 C4 43 00 EF 98 FF 99 00 00 16 4E 00 01 01 00 + // U 3558777, I 47532, P 26385, C 153 + // 55 40 BA 00 2D 50 36 FE 43 00 96 98 FF 99 00 00 16 4E 00 01 01 00 + // U 3559469, I 47680, P 26474, C 153 + // 55 91 B9 00 33 4C 36 FB 43 00 FC 98 FF 99 00 00 1E 4E 00 21 01 00 + // U 3558451, I 47505, P 26372, C 153 + // 55 AF B9 00 05 51 36 D1 43 00 E4 98 FF 99 00 00 1E 4E 00 21 01 00 + // U 3559685, I 47535, P 26396, C 153 + // 55 21 BA 00 3A 5E 36 10 44 00 8B 98 FF 99 00 00 16 4E 00 01 01 00 + // U 3563066, I 47649, P 26485, C 153 + // 55 BE B9 00 B2 55 36 9D 42 00 D7 98 FF 99 00 00 1E 4E 00 21 01 00 + // U 3560882, I 47550, P 26409, C 153 + // All above from a single test with a 40W buld on 230V + + if (Bl09XX.rx_buffer[0] != BL09XX_PACKET_HEADER) { + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: Invalid data hd=%02X"), Bl09XX.rx_buffer[0]); + return false; + } + + Bl09XX.voltage = Bl09XX.rx_buffer[6] << 16 | Bl09XX.rx_buffer[5] << 8 | Bl09XX.rx_buffer[4]; // V_RMS unsigned + Bl09XX.current[0] = Bl09XX.rx_buffer[3] << 16 | Bl09XX.rx_buffer[2] << 8 | Bl09XX.rx_buffer[1]; // IA_RMS unsigned + int32_t tmp = Bl09XX.rx_buffer[12] << 24 | Bl09XX.rx_buffer[11] << 16 | Bl09XX.rx_buffer[10] << 8; // WATT_A signed + Bl09XX.power[0] = abs(tmp >> 8); // WATT_A unsigned + +#ifdef DEBUG_BL09XX + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: U %d, I %d, P %d"), + Bl09XX.voltage, Bl09XX.current[0], Bl09XX.power[0]); +#endif + + return true; +} + +void Bl09XXUpdateEnergy() { + if (Energy.power_on) { // Powered on + Energy.voltage[0] = (float)Bl09XX.voltage / Settings->energy_voltage_calibration; + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: Voltage %f, Temp %f"), Energy.voltage[0], Bl09XX.temperature); + for (uint32_t chan = 0; chan < Energy.phase_count; chan++) { + if (Bl09XX.power[chan] > Settings->energy_power_calibration) { // We need at least 1W + Energy.active_power[chan] = (float)Bl09XX.power[chan] / Settings->energy_power_calibration; + Energy.current[chan] = (float)Bl09XX.current[chan] / Settings->energy_current_calibration; +#ifdef DEBUG_BL09XX + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: Chan[%d] I %f, P %f"), chan, Energy.current[chan], Energy.active_power[chan]); +#endif + } else { + Energy.active_power[chan] = 0; + Energy.current[chan] = 0; +#ifdef DEBUG_BL09XX + AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("BL9: Chan[%d] I zero, P zero"), chan); +#endif + } + } + } else { // Powered off + Energy.voltage[0] = 0; + Energy.active_power[0] = Energy.active_power[1] = 0; + Energy.current[0] = Energy.current[1] = 0; + } +} + +void Bl09XXSerialInput(void) { + while (Bl09XXSerial->available()) { + yield(); + uint8_t serial_in_byte = Bl09XXSerial->read(); + if (!Bl09XX.received && (BL09XX_PACKET_HEADER == serial_in_byte)) { + Bl09XX.received = true; + Bl09XX.byte_counter = 0; + } + if (Bl09XX.received) { + Bl09XX.rx_buffer[Bl09XX.byte_counter++] = serial_in_byte; + if (Bl09XX.buffer_size == Bl09XX.byte_counter -1) { + +#ifdef DEBUG_BL09XX + AddLogBuffer(LOG_LEVEL_DEBUG_MORE, Bl09XX.rx_buffer, Bl09XX.buffer_size); +#endif + uint8_t checksum = BL09XX_READ_COMMAND | Bl09XX.address; + for (uint32_t i = 0; i < Bl09XX.buffer_size -1; i++) { checksum += Bl09XX.rx_buffer[i]; } + checksum ^= 0xFF; + if (checksum == Bl09XX.rx_buffer[Bl09XX.buffer_size -1]) { + Energy.data_valid[0] = 0; + bool ok; + if (BL0942_MODEL == Bl09XX.model) { + ok = Bl09XXDecode42(); + } else { + ok = Bl09XXDecode3940(); + } + if (ok) { Bl09XXUpdateEnergy(); } + Bl09XX.received = false; + return; + } else { + AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: " D_CHECKSUM_FAILURE " received 0x%02X instead of 0x%02X"), Bl09XX.rx_buffer[Bl09XX.buffer_size -1], checksum); + do { // Sync buffer with data (issue #1907 and #3425) + memmove(Bl09XX.rx_buffer, Bl09XX.rx_buffer +1, Bl09XX.buffer_size -1); + Bl09XX.byte_counter--; + } while ((Bl09XX.byte_counter > 1) && (BL09XX_PACKET_HEADER != Bl09XX.rx_buffer[0])); + if (BL09XX_PACKET_HEADER != Bl09XX.rx_buffer[0]) { + //AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: " D_CHECKSUM_FAILURE)); + Bl09XX.received = false; + Bl09XX.byte_counter = 0; + } + } + } + } + } +} + +/********************************************************************************************/ + +void Bl09XXEverySecond(void) { + if (Energy.data_valid[0] > ENERGY_WATCHDOG) { + Bl09XX.voltage = 0; + memset(Bl09XX.current, 0, sizeof(Bl09XX.current)); + memset(Bl09XX.power, 0, sizeof(Bl09XX.power)); + } else { + // Calculate energy by using active power + for (uint32_t channel = 0; channel < Energy.phase_count; channel++) { + Energy.kWhtoday_delta[channel] += Energy.active_power[channel] * 1000 / 36; + } + EnergyUpdateToday(); + } + +// AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: Poll")); + + Bl09XXSerial->flush(); + Bl09XXSerial->write(BL09XX_READ_COMMAND | Bl09XX.address); + Bl09XXSerial->write(BL09XX_FULL_PACKET); +} + +void Bl09XXInit(void) { + // Software serial init needs to be done here as earlier (serial) interrupts may lead to Exceptions + Bl09XXSerial = new TasmotaSerial(Bl09XX.rx_pin, Pin(GPIO_TXD), 1); + if (Bl09XXSerial->begin(4800, 1)) { + if (Bl09XXSerial->hardwareSerial()) { + ClaimSerial(); + } + if (HLW_UREF_PULSE == Settings->energy_voltage_calibration) { + Settings->energy_voltage_calibration = bl09xx_uref[Bl09XX.model]; + Settings->energy_current_calibration = bl09xx_iref[Bl09XX.model]; + Settings->energy_power_calibration = bl09xx_pref[Bl09XX.model]; + } + if ((BL0940_MODEL == Bl09XX.model) && (Settings->energy_current_calibration < (BL0940_IREF / 20))) { + Settings->energy_current_calibration *= 100; + } + + if (BL0942_MODEL != Bl09XX.model) { +#ifdef DEBUG_BL09XX + AddLog(LOG_LEVEL_DEBUG, PSTR("BL9: Send Init string")); +#endif + Energy.use_overtemp = true; // Use global temperature for overtemp detection + for (uint32_t i = 0; i < 5; i++) { + uint8_t crc, byte; + crc = byte = BL09XX_WRITE_COMMAND | Bl09XX.address; + Bl09XXSerial->write(byte); + for (uint32_t j = 0; j < 4; j++) { + crc += byte = bl09xx_init[i][j]; + Bl09XXSerial->write(byte); + } + Bl09XXSerial->write(0xFF ^ crc); + delay(1); + } + } else { + Energy.use_overtemp = false; // Use global temperature for overtemp detection + } + } else { + TasmotaGlobal.energy_driver = ENERGY_NONE; + } +} + +void Bl09XXPreInit(void) { + if (PinUsed(GPIO_TXD)) { + Bl09XX.model = BL09XX_MODEL; + if (PinUsed(GPIO_BL0939_RX)) { + Bl09XX.model = BL0939_MODEL; + Bl09XX.rx_pin = Pin(GPIO_BL0939_RX); + } + else if (PinUsed(GPIO_BL0940_RX)) { + Bl09XX.model = BL0940_MODEL; + Bl09XX.rx_pin = Pin(GPIO_BL0940_RX); + } + else if (PinUsed(GPIO_BL0942_RX)) { + Bl09XX.model = BL0942_MODEL; + Bl09XX.rx_pin = Pin(GPIO_BL0942_RX); + } + if (Bl09XX.model != BL09XX_MODEL) { + Bl09XX.address = bl09xx_address[Bl09XX.model]; + Bl09XX.buffer_size = bl09xx_buffer_size[Bl09XX.model]; + Bl09XX.rx_buffer = (uint8_t*)(malloc(Bl09XX.buffer_size)); + if (Bl09XX.rx_buffer != nullptr) { + Energy.voltage_common = true; // Use common voltage + Energy.frequency_common = true; // Use common frequency + Energy.use_overtemp = true; // Use global temperature for overtemp detection + Energy.phase_count = bl09xx_phase_count[Bl09XX.model]; // Handle two channels as two phases + TasmotaGlobal.energy_driver = XNRG_14; + AddLog(LOG_LEVEL_DEBUG,PSTR("BL9: Enabling BL09%02d"), bl09xx_type[Bl09XX.model]); + } + } + } +} + +bool Bl09XXCommand(void) { + bool serviced = true; + + uint32_t channel = (2 == XdrvMailbox.index) && (Energy.phase_count > 1) ? 1 : 0; + uint32_t value = (uint32_t)(CharToFloat(XdrvMailbox.data) * 100); // 1.23 = 123 + + if (CMND_POWERSET == Energy.command_code) { + if (XdrvMailbox.data_len && Bl09XX.power[channel]) { + Settings->energy_power_calibration = (Bl09XX.power[channel] * 100) / value; + } + } + else if (CMND_VOLTAGESET == Energy.command_code) { + if (XdrvMailbox.data_len && Bl09XX.voltage) { + Settings->energy_voltage_calibration = (Bl09XX.voltage * 100) / value; + } + } + else if (CMND_CURRENTSET == Energy.command_code) { + if (XdrvMailbox.data_len && Bl09XX.current[channel]) { + Settings->energy_current_calibration = (Bl09XX.current[channel] * 100) / value; + } + } + else serviced = false; // Unknown command + + return serviced; +} + +void Bl09XXShow(bool json) { + if (BL0942_MODEL != Bl09XX.model) { + if (json) { + ResponseAppend_P(JSON_SNS_F_TEMP, "BL09XX", Settings->flag2.temperature_resolution, &Bl09XX.temperature); + if (0 == TasmotaGlobal.tele_period) { +#ifdef USE_DOMOTICZ + DomoticzFloatSensor(DZ_TEMP, Bl09XX.temperature); +#endif // USE_DOMOTICZ +#ifdef USE_KNX + KnxSensor(KNX_TEMPERATURE, Bl09XX.temperature); +#endif // USE_KNX + } +#ifdef USE_WEBSERVER + } else { + WSContentSend_Temp("", Bl09XX.temperature); +#endif // USE_WEBSERVER + } + } +} + +/*********************************************************************************************\ + * Interface +\*********************************************************************************************/ + +bool Xnrg14(uint8_t function) { + bool result = false; + + switch (function) { + case FUNC_LOOP: + if (Bl09XXSerial) { Bl09XXSerialInput(); } + break; + case FUNC_EVERY_SECOND: + Bl09XXEverySecond(); + break; + case FUNC_JSON_APPEND: + Bl09XXShow(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + Bl09XXShow(0); + break; +#endif // USE_WEBSERVER + case FUNC_COMMAND: + result = Bl09XXCommand(); + break; + case FUNC_INIT: + Bl09XXInit(); + break; + case FUNC_PRE_INIT: + Bl09XXPreInit(); + break; + } + return result; +} + +#endif // USE_BL09XX +#endif // USE_ENERGY_SENSOR \ No newline at end of file diff --git a/tasmota/xnrg_15_teleinfo.ino b/tasmota/xnrg_15_teleinfo.ino index 87cf793b4..d532bfd51 100755 --- a/tasmota/xnrg_15_teleinfo.ino +++ b/tasmota/xnrg_15_teleinfo.ino @@ -113,7 +113,7 @@ const char kTarifName[] PROGMEM = // tariff values for standard mode #define TELEINFO_STD_TARIFF_BASE PSTR("BASE") #define TELEINFO_STD_TARIFF_HC PSTR("HEURE CREUSE") -#define TELEINFO_STD_TARIFF_HP PSTR("HEURE PLEINE") +#define TELEINFO_STD_TARIFF_HP PSTR("HEURE PLEINE") // Label used to do some post processing and/or calculation @@ -122,7 +122,7 @@ enum TInfoLabel{ LABEL_ADCO, LABEL_ADSC, LABEL_HCHC, LABEL_HCHP, LABEL_EAST, LABEL_EASF01, LABEL_EASF02, LABEL_OPTARIF, LABEL_NGTF, LABEL_ISOUSC, LABEL_PREF, LABEL_PTEC, LABEL_LTARF, LABEL_NTARF, - LABEL_PAPP, LABEL_SINSTS, LABEL_IINST, LABEL_IINST1, LABEL_IINST2, LABEL_IINST3, LABEL_IRMS1, LABEL_IRMS2, LABEL_IRMS3, + LABEL_PAPP, LABEL_SINSTS, LABEL_IINST, LABEL_IINST1, LABEL_IINST2, LABEL_IINST3, LABEL_IRMS1, LABEL_IRMS2, LABEL_IRMS3, LABEL_TENSION, LABEL_URMS1, LABEL_URMS2, LABEL_URMS3, LABEL_IMAX, LABEL_IMAX1, LABEL_IMAX2, LABEL_IMAX3, LABEL_PMAX, LABEL_SMAXSN, LABEL_DEMAIN, @@ -139,12 +139,12 @@ const char kLabel[] PROGMEM = "|DEMAIN" ; -// Blacklisted label from telemetry +// Blacklisted label from telemetry // Each label shoud be enclosed by pipe -const char kLabelBlacklist[] +const char kLabelBlacklist[] // declared as progmem for ESP8266 just crash and reset on strstr() #ifndef ESP8266 -PROGMEM +PROGMEM #endif = "|PJOURF+1" @@ -246,7 +246,7 @@ void DataCallback(struct _ValueList * me, uint8_t flags) float volt = (float) atoi(me->value); AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Voltage %s=%s, now %d"), me->name, me->value, (int) volt); - if ( ilabel == LABEL_URMS2) { + if ( ilabel == LABEL_URMS2) { Energy.voltage[1] = volt; } else if ( ilabel == LABEL_URMS3) { Energy.voltage[2] = volt; @@ -256,7 +256,7 @@ void DataCallback(struct _ValueList * me, uint8_t flags) } // Current I phase 1 to 3 - else if (ilabel == LABEL_IINST + else if (ilabel == LABEL_IINST || ilabel == LABEL_IINST1 || ilabel == LABEL_IRMS1 || ilabel == LABEL_IINST2 || ilabel == LABEL_IRMS2 || ilabel == LABEL_IINST3 || ilabel == LABEL_IRMS3 ) @@ -355,7 +355,8 @@ void DataCallback(struct _ValueList * me, uint8_t flags) AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: HC:%u HP:%u Total:%u"), hc, hp, total); } - EnergyUpdateTotal(total/1000.0f, true); + Energy.import_active[0] = total/1000.0f; + EnergyUpdateTotal(); } // Wh total index (standard) @@ -363,7 +364,8 @@ void DataCallback(struct _ValueList * me, uint8_t flags) { uint32_t total = atoi(me->value); if (contrat != CONTRAT_BAS) { - EnergyUpdateTotal(total/1000.0f, true); + Energy.import_active[0] = total/1000.0f; + EnergyUpdateTotal(); AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Total:%uWh"), total); } } @@ -372,7 +374,8 @@ void DataCallback(struct _ValueList * me, uint8_t flags) else if ( ilabel == LABEL_EASF01) { if (contrat == CONTRAT_BAS) { - EnergyUpdateTotal(atoi(me->value)/1000.0f, true); + Energy.import_active[0] = atoi(me->value)/1000.0f; + EnergyUpdateTotal(); } AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: HC:%u"), atoi(me->value)); } @@ -534,7 +537,7 @@ void NewFrameCallback(struct _ValueList * me) // send teleinfo full frame or only changed data bool hasData = ResponseAppendTInfo(' ', Settings->teleinfo.raw_report_changed ? false : true ); ResponseJsonEndEnd(); - + // Publish adding ADCO serial number into the topic // Need setOption4 to be enabled // No need to send empty payload @@ -562,21 +565,9 @@ void TInfoDrvInit(void) { // If one TInfo RX pin declared use it if (PinUsed(GPIO_TELEINFO_RX)) { tic_rx_pin = Pin(GPIO_TELEINFO_RX); - } else { - // Case we are on denky V4 board without any TInfo RX pin selected - #ifdef ARDUINO_DENKY_PICOV3 - tic_rx_pin = 8; - AddLog(LOG_LEVEL_INFO, PSTR("TIC: Denky D4 board, RX on GPIO%d"), tic_rx_pin); - #endif - } - - // Enable teleinfo - if (tic_rx_pin != NOT_A_PIN) { TasmotaGlobal.energy_driver = XNRG_15; Energy.voltage_available = false; Energy.phase_count = 1; - } else { - AddLog(LOG_LEVEL_ERROR, PSTR("TIC: Device has no RX pin")); } } @@ -589,6 +580,7 @@ Comments: - ====================================================================== */ void TInfoInit(void) { + if (!PinUsed(GPIO_TELEINFO_RX)) { return; } // ignore if pin not set int baudrate; // Deprecated SetOption102 - Set Baud rate for Teleinfo serial communication (0 = 1200 or 1 = 9600) @@ -611,8 +603,6 @@ void TInfoInit(void) pinMode(en_pin, OUTPUT); digitalWrite(en_pin, HIGH); AddLog(LOG_LEVEL_INFO, PSTR("TIC: Enable with GPIO%d"), en_pin); - } else { - AddLog(LOG_LEVEL_INFO, PSTR("TIC: always enabled")); } #ifdef ESP8266 @@ -626,11 +616,7 @@ void TInfoInit(void) TInfoSerial = new TasmotaSerial(tic_rx_pin, -1, 1, 0, serial_buffer_size); #endif // ESP32 - // Trick here even using SERIAL_7E1 or TS_SERIAL_7E1 - // this is not working, need to call SetSerialConfig after - if (TInfoSerial->begin(baudrate)) { - - + if (TInfoSerial->begin(baudrate, SERIAL_7E1)) { #ifdef ESP8266 if (TInfoSerial->hardwareSerial() ) { ClaimSerial(); @@ -647,10 +633,6 @@ void TInfoInit(void) AddLog(LOG_LEVEL_INFO, PSTR("TIC: using software serial")); } #endif // ESP8266 -#ifdef ESP32 - SetSerialConfig(TS_SERIAL_7E1); - AddLog(LOG_LEVEL_INFO, PSTR("TIC: using ESP32 hardware serial")); -#endif // ESP32 // Init teleinfo tinfo.init(tinfo_mode); // Attach needed callbacks @@ -664,9 +646,8 @@ void TInfoInit(void) AddLog(LOG_LEVEL_INFO, PSTR("TIC: Raw mode enabled")); if (raw_skip) { AddLog(LOG_LEVEL_INFO, PSTR("TIC: Sending only one frame over %d "), raw_skip+1); - } + } } - AddLog(LOG_LEVEL_INFO, PSTR("TIC: Ready")); } } @@ -689,7 +670,7 @@ bool TInfoCmd(void) { AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: len %d, data '%s'"), XdrvMailbox.data_len, XdrvMailbox.data ? XdrvMailbox.data : "null" ); // Just "EnergyConfig" no more parameter - // Show Teleinfo configuration + // Show Teleinfo configuration if (XdrvMailbox.data_len == 0) { char mode_name[MAX_TINFO_COMMAND_NAME]; @@ -698,7 +679,7 @@ bool TInfoCmd(void) { int index_raw = Settings->teleinfo.raw_send ? CMND_TELEINFO_RAW_FULL : CMND_TELEINFO_RAW_DISABLE; if (Settings->teleinfo.raw_send && Settings->teleinfo.raw_report_changed) { index_raw = CMND_TELEINFO_RAW_CHANGE; - } + } // Get the mode and raw name GetTextIndexed(mode_name, MAX_TINFO_COMMAND_NAME, index_mode, kTInfo_Commands); GetTextIndexed(raw_name, MAX_TINFO_COMMAND_NAME, index_raw, kTInfo_Commands); @@ -707,7 +688,7 @@ bool TInfoCmd(void) { serviced = true; - // At least "EnergyConfig xyz" plus one space and one (or more) char + // At least "EnergyConfig xyz" plus one space and one (or more) char // so "EnergyConfig 0" or "EnergyConfig Teleinfo Standard" } else if (XdrvMailbox.data_len) { // Now point on parameter @@ -744,7 +725,7 @@ bool TInfoCmd(void) { if ( (tinfo_mode==TINFO_MODE_STANDARD && command_code==CMND_TELEINFO_HISTORIQUE) || (tinfo_mode==TINFO_MODE_HISTORIQUE && command_code==CMND_TELEINFO_STANDARD) ) { - // Cleanup Serial not sure it will works since + // Cleanup Serial not sure it will works since // there is no end() or close() on tasmotaserial class if (TInfoSerial) { TInfoSerial->flush(); @@ -752,7 +733,7 @@ bool TInfoCmd(void) { free(TInfoSerial); } - // Change mode + // Change mode Settings->teleinfo.mode_standard = command_code == CMND_TELEINFO_STANDARD ? 1 : 0; AddLog(LOG_LEVEL_INFO, PSTR("TIC: '%s' mode"), mode_name); @@ -768,10 +749,10 @@ bool TInfoCmd(void) { } break; - case CMND_TELEINFO_RAW_DISABLE: - case CMND_TELEINFO_RAW_FULL: + case CMND_TELEINFO_RAW_DISABLE: + case CMND_TELEINFO_RAW_FULL: case CMND_TELEINFO_RAW_CHANGE: { - + // Enable all RAW frame send char raw_name[MAX_TINFO_COMMAND_NAME]; @@ -921,7 +902,7 @@ void TInfoShow(bool json) else { char name[33]; - char value[33]; + char value[33]; int percent; if (isousc) { @@ -938,7 +919,7 @@ void TInfoShow(bool json) // Hue from 128 (green) to 0 (red) so reversed from percent hue = changeUIntScale(100-percent, 0, 100, 0, 128); HsToRgb(hue, 128, &red, &green, &blue); - snprintf_P(phase_color, sizeof(phase_color), PSTR("#%02X%02X%02X"), red, green, blue); + snprintf_P(phase_color, sizeof(phase_color), PSTR("#%02X%02X%02X"), red, green, blue); WSContentSend_P(HTTP_ENERGY_LOAD_BAR, phase_color, percent, percent); } } @@ -1029,27 +1010,27 @@ bool Xnrg15(uint8_t function) bool result = false; switch (function) { - case FUNC_EVERY_250_MSECOND: - TInfoProcess(); - break; - case FUNC_COMMAND: - result = TInfoCmd(); - break; - - case FUNC_JSON_APPEND: - TInfoShow(1); - break; - #ifdef USE_WEBSERVER - case FUNC_WEB_SENSOR: - TInfoShow(0); - break; - #endif // USE_WEBSERVER case FUNC_INIT: TInfoInit(); break; case FUNC_PRE_INIT: TInfoDrvInit(); break; + case FUNC_EVERY_250_MSECOND: + if (tinfo_found) { TInfoProcess(); } + break; + case FUNC_COMMAND: + if (tinfo_found) { result = TInfoCmd(); } + break; + + case FUNC_JSON_APPEND: + if (tinfo_found) { TInfoShow(1); } + break; + #ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + if (tinfo_found) { TInfoShow(0); } + break; + #endif // USE_WEBSERVER } return result; } diff --git a/tasmota/xnrg_16_iem3000.ino b/tasmota/xnrg_16_iem3000.ino index 459b45a08..3ee7f47da 100644 --- a/tasmota/xnrg_16_iem3000.ino +++ b/tasmota/xnrg_16_iem3000.ino @@ -51,9 +51,19 @@ const uint16_t Iem3000_start_addresses[] { 0x0bef, // 7 . IEM3000_P2_POWER (2/Float32) [KW] Active Power Phase 2 0x0bf1, // 8 . IEM3000_P3_POWER (2/Float32) [KW] Active Power Phase 3 0x0c25, // 9 . IEM3000_FREQUENCY (2/Float32) [Hz] Frequency +#ifdef IEM3000_IEM3155 + 0xb02b, // 10 . IEM3000_TOTAL_ACTIVE (2/Float32) [Wh] Total Active Energy Import +#else 0xb02b, // 10 . IEM3000_TOTAL_ACTIVE (4/Int64) [Wh] Total Active Energy Import +#endif }; +#ifdef IEM3000_IEM3155 + #define FLOAT_ParamLimit 11 +#else + #define FLOAT_ParamLimit 10 +#endif + struct IEM3000 { uint8_t read_state = 0; uint8_t send_retry = 0; @@ -65,12 +75,12 @@ void IEM3000Every250ms(void) { bool data_ready = Iem3000Modbus->ReceiveReady(); uint8_t reg_count = 4; - if (Iem3000.read_state < 10) { + if (Iem3000.read_state < FLOAT_ParamLimit) { reg_count = 2; } if (data_ready) { - uint8_t buffer[14]; // At least 5 + sizeof(int64_t) = 13 + uint8_t buffer[16]; // At least 5 + sizeof(int64_t) = 13 uint32_t error = Iem3000Modbus->ReceiveBuffer(buffer, reg_count); AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, Iem3000Modbus->ReceiveCount()); @@ -85,7 +95,7 @@ void IEM3000Every250ms(void) // 01 04 04 43 66 33 34 1B 38 = 230.2 Volt float value; int64_t value64; - if(Iem3000.read_state >= 0 && Iem3000.read_state < 10) { + if(Iem3000.read_state >= 0 && Iem3000.read_state < FLOAT_ParamLimit) { ((uint8_t*)&value)[3] = buffer[3]; // Get float values ((uint8_t*)&value)[2] = buffer[4]; ((uint8_t*)&value)[1] = buffer[5]; @@ -127,15 +137,27 @@ void IEM3000Every250ms(void) break; case 6: +#ifdef IEM3000_IEM3155 + Energy.active_power[0] = value*1000; +#else Energy.active_power[0] = value; +#endif break; case 7: +#ifdef IEM3000_IEM3155 + Energy.active_power[1] = value*1000; +#else Energy.active_power[1] = value; +#endif break; case 8: +#ifdef IEM3000_IEM3155 + Energy.active_power[2] = value*1000; +#else Energy.active_power[2] = value; +#endif break; case 9: @@ -143,7 +165,12 @@ void IEM3000Every250ms(void) break; case 10: - EnergyUpdateTotal(value64 * 0.001f, true); // 1125 => 1.125 +#ifdef IEM3000_IEM3155 + Energy.import_active[0] = value; +#else + Energy.import_active[0] = value64 * 0.001f; // 1125 => 1.125 +#endif + EnergyUpdateTotal(); break; } diff --git a/tasmota/xnrg_17_ornowe517.ino b/tasmota/xnrg_17_ornowe517.ino index 9dccd8b94..2254fc37a 100644 --- a/tasmota/xnrg_17_ornowe517.ino +++ b/tasmota/xnrg_17_ornowe517.ino @@ -163,7 +163,8 @@ void WE517Every250ms(void) break; case 16: - EnergyUpdateTotal(value, true); + Energy.import_active[0] = value; + EnergyUpdateTotal(); break; } diff --git a/tasmota/xnrg_18_sdm72.ino b/tasmota/xnrg_18_sdm72.ino index e33d0f30e..e13b60a85 100644 --- a/tasmota/xnrg_18_sdm72.ino +++ b/tasmota/xnrg_18_sdm72.ino @@ -112,7 +112,8 @@ void Sdm72Every250ms(void) ++Sdm72.read_state %= nitems(sdm72_register); if (0 == Sdm72.read_state && !isnan(Sdm72.total_active)) { - EnergyUpdateTotal(Sdm72.total_active, true); + Energy.import_active[0] = Sdm72.total_active; + EnergyUpdateTotal(); } } } // end data ready diff --git a/tasmota/xnrg_19_cse7761.ino b/tasmota/xnrg_19_cse7761.ino index 2bf593a03..c61322d30 100644 --- a/tasmota/xnrg_19_cse7761.ino +++ b/tasmota/xnrg_19_cse7761.ino @@ -95,7 +95,7 @@ struct { uint32_t energy[2] = { 0 }; uint32_t active_power[2] = { 0 }; uint16_t coefficient[8] = { 0 }; - uint8_t energy_update = 0; + uint8_t energy_update[2] = { 0 }; uint8_t init = 4; uint8_t ready = 0; } CSE7761Data; @@ -476,7 +476,7 @@ void Cse7761GetData(void) { // Energy.current[channel] = (float)(((uint64_t)CSE7761Data.current_rms[channel] * CSE7761Data.coefficient[RmsIAC + channel]) >> 23) / 1000; // A Energy.current[channel] = (float)CSE7761Data.current_rms[channel] / Settings->energy_current_calibration; // A CSE7761Data.energy[channel] += Energy.active_power[channel]; - CSE7761Data.energy_update++; + CSE7761Data.energy_update[channel]++; } } } @@ -557,16 +557,14 @@ void Cse7761EverySecond(void) { } else { if (2 == CSE7761Data.ready) { - if (CSE7761Data.energy_update) { - uint32_t energy_sum = ((CSE7761Data.energy[0] + CSE7761Data.energy[1]) * 1000) / CSE7761Data.energy_update; - if (energy_sum) { - Energy.kWhtoday_delta += energy_sum / 36; - EnergyUpdateToday(); + for (uint32_t channel = 0; channel < 2; channel++) { + if (CSE7761Data.energy_update[channel]) { + Energy.kWhtoday_delta[channel] += ((CSE7761Data.energy[channel] * 1000) / CSE7761Data.energy_update[channel]) / 36; + CSE7761Data.energy[channel] = 0; + CSE7761Data.energy_update[channel] = 0; } + EnergyUpdateToday(); } - CSE7761Data.energy[0] = 0; - CSE7761Data.energy[1] = 0; - CSE7761Data.energy_update = 0; } } } diff --git a/tasmota/xnrg_20_dummy.ino b/tasmota/xnrg_30_dummy.ino similarity index 94% rename from tasmota/xnrg_20_dummy.ino rename to tasmota/xnrg_30_dummy.ino index 893a05bf8..4aa308fdb 100644 --- a/tasmota/xnrg_20_dummy.ino +++ b/tasmota/xnrg_30_dummy.ino @@ -1,5 +1,5 @@ /* - xnrg_20_dummy.ino - Dummy energy sensor support for Tasmota + xnrg_30_dummy.ino - Dummy energy sensor support for Tasmota Copyright (C) 2021 Theo Arends @@ -28,7 +28,7 @@ * Enable by selecting any GPIO as Option A2 \*********************************************************************************************/ -#define XNRG_20 20 +#define XNRG_30 30 #define NRG_DUMMY_U_COMMON true // Phase voltage = false, Common voltage = true #define NRG_DUMMY_F_COMMON true // Phase frequency = false, Common frequency = true @@ -44,7 +44,6 @@ void NrgDummyEverySecond(void) { if (Energy.power_on) { // Powered on - float energy = 0; for (uint32_t channel = 0; channel < Energy.phase_count; channel++) { Energy.voltage[channel] = ((float)Settings->energy_voltage_calibration / 100); // V Energy.frequency[channel] = ((float)Settings->energy_frequency_calibration / 100); // Hz @@ -54,16 +53,12 @@ void NrgDummyEverySecond(void) { Energy.current[channel] = 0; } else { Energy.current[channel] = ((float)Settings->energy_current_calibration / 100000); // A - energy += Energy.active_power[channel]; + Energy.kWhtoday_delta[channel] += Energy.active_power[channel] * 1000 / 36; } Energy.data_valid[channel] = 0; } } - - if (energy > 0) { - Energy.kWhtoday_delta += energy * 1000 / 36; - EnergyUpdateToday(); - } + EnergyUpdateToday(); } } @@ -124,7 +119,7 @@ void NrgDummyDrvInit(void) { Energy.type_dc = NRG_DUMMY_DC; // AC = false, DC = true; Energy.use_overtemp = NRG_DUMMY_OVERTEMP; // Use global temperature for overtemp detection - TasmotaGlobal.energy_driver = XNRG_20; + TasmotaGlobal.energy_driver = XNRG_30; } } @@ -132,7 +127,7 @@ void NrgDummyDrvInit(void) { * Interface \*********************************************************************************************/ -bool Xnrg20(uint8_t function) { +bool Xnrg30(uint8_t function) { bool result = false; switch (function) { diff --git a/tasmota/xsns_01_counter.ino b/tasmota/xsns_01_counter.ino index ba0758290..7bac7f9d3 100644 --- a/tasmota/xsns_01_counter.ino +++ b/tasmota/xsns_01_counter.ino @@ -24,8 +24,6 @@ #define XSNS_01 1 -#define USE_AC_ZERO_CROSS_DIMMER 1 - #define D_PRFX_COUNTER "Counter" #define D_CMND_COUNTERTYPE "Type" #define D_CMND_COUNTERDEBOUNCE "Debounce" @@ -59,7 +57,7 @@ struct AC_ZERO_CROSS_DIMMER { uint32_t lastCycleCount = 0; uint32_t currentSteps = 100; } ac_zero_cross_dimmer; -#endif +#endif //USE_AC_ZERO_CROSS_DIMMER void IRAM_ATTR CounterIsrArg(void *arg) { uint32_t index = *static_cast(arg); @@ -101,7 +99,7 @@ void IRAM_ATTR CounterIsrArg(void *arg) { } ac_zero_cross_dimmer.lastCycleCount = ac_zero_cross_dimmer.currentCycleCount; } -#endif +#endif //USE_AC_ZERO_CROSS_DIMMER return; } } @@ -152,7 +150,7 @@ void CounterInit(void) if (PinUsed(GPIO_CNTR1, i)) { #ifdef USE_AC_ZERO_CROSS_DIMMER ac_zero_cross_dimmer.tobe_cycle_timeClockCycles = microsecondsToClockCycles(1000000 / Settings->pwm_frequency); -#endif +#endif //USE_AC_ZERO_CROSS_DIMMER Counter.any_counter = true; pinMode(Pin(GPIO_CNTR1, i), bitRead(Counter.no_pullup, i) ? INPUT : INPUT_PULLUP); if ((0 == Settings->pulse_counter_debounce_low) && (0 == Settings->pulse_counter_debounce_high) && !Settings->flag4.zerocross_dimmer) { @@ -269,7 +267,7 @@ void SyncACDimmer(void) } } } -#endif +#endif //USE_AC_ZERO_CROSS_DIMMER /*********************************************************************************************\ * Commands @@ -349,7 +347,7 @@ bool Xsns01(uint8_t function) case FUNC_LOOP: SyncACDimmer(); break; -#endif +#endif //USE_AC_ZERO_CROSS_DIMMER #ifdef USE_WEBSERVER case FUNC_WEB_SENSOR: CounterShow(0); diff --git a/tasmota/xsns_05_ds18x20_esp32.ino b/tasmota/xsns_05_ds18x20_esp32.ino index 0109304ed..d07267db2 100644 --- a/tasmota/xsns_05_ds18x20_esp32.ino +++ b/tasmota/xsns_05_ds18x20_esp32.ino @@ -37,7 +37,9 @@ #define W1_CONVERT_TEMP 0x44 #define W1_READ_SCRATCHPAD 0xBE +#ifndef DS18X20_MAX_SENSORS // DS18X20_MAX_SENSORS fallback to 8 if not defined in user_config_override.h #define DS18X20_MAX_SENSORS 8 +#endif const char kDs18x20Types[] PROGMEM = "DS18x20|DS18S20|DS1822|DS18B20|MAX31850"; diff --git a/tasmota/xsns_06_dht.ino b/tasmota/xsns_06_dht.ino index a022eb410..ffd6c4b44 100644 --- a/tasmota/xsns_06_dht.ino +++ b/tasmota/xsns_06_dht.ino @@ -24,7 +24,10 @@ * Reading temperature or humidity takes about 250 milliseconds! * Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) * - * This version is based on ESPEasy _P005_DHT.ino 20191201 + * Changelog + * 20210524 - https://github.com/arendst/Tasmota/issues/12180 + * 20200621 - https://github.com/arendst/Tasmota/pull/7468#issuecomment-647067015 + * 20200313 - https://github.com/arendst/Tasmota/issues/7717#issuecomment-585833243 \*********************************************************************************************/ #define XSNS_06 6 @@ -47,8 +50,7 @@ struct DHTSTRUCT { float h = NAN; } Dht[DHT_MAX_SENSORS]; -bool DhtWaitState(uint32_t sensor, uint32_t level) -{ +bool DhtWaitState(uint32_t sensor, uint32_t level) { unsigned long timeout = micros() + 100; while (digitalRead(Dht[sensor].pin) != level) { if (TimeReachedUsec(timeout)) { @@ -61,8 +63,7 @@ bool DhtWaitState(uint32_t sensor, uint32_t level) return true; } -bool DhtRead(uint32_t sensor) -{ +bool DhtRead(uint32_t sensor) { dht_data[0] = dht_data[1] = dht_data[2] = dht_data[3] = dht_data[4] = 0; if (!dht_dual_mode) { @@ -78,7 +79,7 @@ bool DhtRead(uint32_t sensor) break; case GPIO_DHT22: // DHT21, DHT22, AM2301, AM2302, AM2321 // delay(2); // minimum 1ms - delayMicroseconds(2000); // See https://github.com/arendst/Tasmota/pull/7468#issuecomment-647067015 + delayMicroseconds(2000); // 20200621: See https://github.com/arendst/Tasmota/pull/7468#issuecomment-647067015 break; case GPIO_SI7021: // iTead SI7021 delayMicroseconds(500); @@ -97,46 +98,16 @@ bool DhtRead(uint32_t sensor) delayMicroseconds(50); break; case GPIO_SI7021: // iTead SI7021 - delayMicroseconds(30); // See: https://github.com/letscontrolit/ESPEasy/issues/1798 and https://github.com/arendst/Tasmota/issues/12180 + delayMicroseconds(30); // See: https://github.com/letscontrolit/ESPEasy/issues/1798 and 20210524: https://github.com/arendst/Tasmota/issues/12180 break; } -/* - bool error = false; - noInterrupts(); - if (DhtWaitState(sensor, 0) && DhtWaitState(sensor, 1) && DhtWaitState(sensor, 0)) { - for (uint32_t i = 0; i < 5; i++) { - int data = 0; - for (uint32_t j = 0; j < 8; j++) { - if (!DhtWaitState(sensor, 1)) { - error = true; - break; - } - delayMicroseconds(35); // Was 30 - if (digitalRead(Dht[sensor].pin)) { - data |= (1 << (7 - j)); - } - if (!DhtWaitState(sensor, 0)) { - error = true; - break; - } - } - if (error) { break; } - dht_data[i] = data; - } - } else { - error = true; - } - interrupts(); - if (error) { return false; } -*/ - uint32_t i = 0; noInterrupts(); if (DhtWaitState(sensor, 0) && DhtWaitState(sensor, 1) && DhtWaitState(sensor, 0)) { for (i = 0; i < 40; i++) { if (!DhtWaitState(sensor, 1)) { break; } - delayMicroseconds(32); // Was 30 + delayMicroseconds(32); // Was 30 if (digitalRead(Dht[sensor].pin)) { dht_data[i / 8] |= (1 << (7 - i % 8)); } @@ -159,11 +130,7 @@ bool DhtRead(uint32_t sensor) switch (Dht[sensor].type) { case GPIO_DHT11: // DHT11 humidity = dht_data[0]; -/* - // DHT11 no negative temp: - temperature = dht_data[2] + ((float)dht_data[3] * 0.1f); // Issue #3164 -*/ - // DHT11 (Adafruit): + // 20200313: DHT11 (Adafruit): temperature = dht_data[2]; if (dht_data[3] & 0x80) { temperature = -1 - temperature; @@ -205,8 +172,7 @@ bool DhtRead(uint32_t sensor) /********************************************************************************************/ -bool DhtPinState() -{ +bool DhtPinState() { if ((XdrvMailbox.index >= AGPIO(GPIO_DHT11)) && (XdrvMailbox.index <= AGPIO(GPIO_SI7021))) { if (dht_sensors < DHT_MAX_SENSORS) { Dht[dht_sensors].pin = XdrvMailbox.payload; @@ -221,8 +187,7 @@ bool DhtPinState() return false; } -void DhtInit(void) -{ +void DhtInit(void) { if (dht_sensors) { if (PinUsed(GPIO_DHT11_OUT)) { dht_pin_out = Pin(GPIO_DHT11_OUT); @@ -245,8 +210,7 @@ void DhtInit(void) } } -void DhtEverySecond(void) -{ +void DhtEverySecond(void) { if (TasmotaGlobal.uptime &1) { // Every 2 seconds for (uint32_t sensor = 0; sensor < dht_sensors; sensor++) { // DHT11 and AM2301 25mS per sensor, SI7021 5mS per sensor @@ -261,8 +225,7 @@ void DhtEverySecond(void) } } -void DhtShow(bool json) -{ +void DhtShow(bool json) { for (uint32_t i = 0; i < dht_sensors; i++) { TempHumDewShow(json, ((0 == TasmotaGlobal.tele_period) && (0 == i)), Dht[i].stype, Dht[i].t, Dht[i].h); } @@ -272,8 +235,7 @@ void DhtShow(bool json) * Interface \*********************************************************************************************/ -bool Xsns06(uint8_t function) -{ +bool Xsns06(uint8_t function) { bool result = false; if (dht_active) { diff --git a/tasmota/xsns_87_esp32_sensors.ino b/tasmota/xsns_127_esp32_sensors.ino similarity index 85% rename from tasmota/xsns_87_esp32_sensors.ino rename to tasmota/xsns_127_esp32_sensors.ino index 2cadd0cd9..779e24e95 100644 --- a/tasmota/xsns_87_esp32_sensors.ino +++ b/tasmota/xsns_127_esp32_sensors.ino @@ -1,5 +1,5 @@ /* - xsns_87_esp32_sensors.ino - ESP32 Temperature and Hall Effect sensor for Tasmota + xsns_127_esp32_sensors.ino - ESP32 Temperature and Hall Effect sensor for Tasmota Copyright (C) 2021 Theo Arends @@ -18,18 +18,19 @@ */ #ifdef ESP32 -// Below test to solve ESP32-C3 compilations (20210420) -#if CONFIG_IDF_TARGET_ESP32 /*********************************************************************************************\ * ESP32 CPU Temperature and optional Hall Effect sensor * + * To allow for not updating the global temperature by the ESP32 temperature sensor this + * driver needs to be the highest numbered driver (currently 127) + * * ESP32 internal Hall Effect sensor connected to both GPIO36 and GPIO39 * To enable set * GPIO36 as HallEffect 1 * GPIO39 as HallEffect 2 \*********************************************************************************************/ -#define XSNS_87 87 +#define XSNS_127 127 #if CONFIG_IDF_TARGET_ESP32 @@ -52,7 +53,16 @@ void Esp32SensorInit(void) { #endif // CONFIG_IDF_TARGET_ESP32 void Esp32SensorShow(bool json) { - float t = CpuTemperature(); + static bool add_global_temp = false; + + if (json) { + add_global_temp = !ResponseContains_P(PSTR(D_JSON_TEMPERATURE)); + } + float c = CpuTemperature(); // in Celsius + if (add_global_temp) { + UpdateGlobalTemperature(c); + } + float t = ConvertTempToFahrenheit(c); #if CONFIG_IDF_TARGET_ESP32 int value = 0; @@ -107,7 +117,7 @@ void Esp32SensorShow(bool json) { * Interface \*********************************************************************************************/ -bool Xsns87(uint8_t function) { +bool Xsns127(uint8_t function) { bool result = false; switch (function) { @@ -119,12 +129,13 @@ bool Xsns87(uint8_t function) { Esp32SensorShow(0); break; #endif // USE_WEBSERVER +#if CONFIG_IDF_TARGET_ESP32 case FUNC_INIT: Esp32SensorInit(); break; +#endif // CONFIG_IDF_TARGET_ESP32 } return result; } -#endif // CONFIG_IDF_TARGET_ESP32 #endif // ESP32 diff --git a/tasmota/xsns_18_pms5003.ino b/tasmota/xsns_18_pms5003.ino index 604583067..b1cac1a81 100644 --- a/tasmota/xsns_18_pms5003.ino +++ b/tasmota/xsns_18_pms5003.ino @@ -48,6 +48,7 @@ struct PMS5003 { uint8_t valid = 0; uint8_t wake_mode = 1; uint8_t ready = 1; + bool discovery_triggered = false; } Pms; enum PmsCommands @@ -156,6 +157,11 @@ bool PmsReadData(void) #endif // PMS_MODEL_PMS3003 Pms.valid = 10; + if (!Pms.discovery_triggered) { + TasmotaGlobal.discovery_counter = 1; // Force discovery + Pms.discovery_triggered = true; + } + return true; } diff --git a/tasmota/xsns_33_ds3231.ino b/tasmota/xsns_33_ds3231.ino index 7c933f855..34e952ab4 100644 --- a/tasmota/xsns_33_ds3231.ino +++ b/tasmota/xsns_33_ds3231.ino @@ -150,7 +150,7 @@ void DS3231EverySecond(void) TasmotaGlobal.rules_flag.time_set = 1; } } - else if (!ds3231WriteStatus && Rtc.utc_time > START_VALID_TIME && abs(Rtc.utc_time - ReadFromDS3231()) > 60) {//if time is valid and is drift from RTC in more that 60 second + else if (!ds3231WriteStatus && Rtc.utc_time > START_VALID_TIME && abs((int32_t)(Rtc.utc_time - ReadFromDS3231())) > 60) { // If time is valid and is drift from RTC in more that 60 second AddLog(LOG_LEVEL_INFO, PSTR("Write Time TO DS3231 from NTP (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str()); SetDS3231Time (Rtc.utc_time); //update the DS3231 time diff --git a/tasmota/xsns_35_tx20.ino b/tasmota/xsns_35_tx20.ino index f1594c4c3..3e1cfd25b 100644 --- a/tasmota/xsns_35_tx20.ino +++ b/tasmota/xsns_35_tx20.ino @@ -17,7 +17,7 @@ along with this program. If not, see . */ -#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) +#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) || defined(USE_WS2300_WIND_SENSOR) /*********************************************************************************************\ * La Crosse TX20/TX23 Anemometer @@ -55,6 +55,16 @@ #warning **** use USE_TX20_WIND_SENSOR or USE_TX23_WIND_SENSOR but not both together, TX20 disabled **** #endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR +#if defined(USE_WS2300_WIND_SENSOR) && defined(USE_TX23_WIND_SENSOR) +#undef USE_WS2300_WIND_SENSOR +#warning **** use USE_WS2300_WIND_SENSOR or USE_TX23_WIND_SENSOR but not both together, WS2300 disabled **** +#endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR + +#if defined(USE_WS2300_WIND_SENSOR) && defined(USE_TX20_WIND_SENSOR) +#undef USE_WS2300_WIND_SENSOR +#warning **** use USE_WS2300_WIND_SENSOR or USE_TX20_WIND_SENSOR but not both together, WS2300 disabled **** +#endif // USE_TX20_WIND_SENSOR && USE_TX23_WIND_SENSOR + // #define USE_TX2X_WIND_SENSOR_NOSTATISTICS // suppress statistics (speed/dir avg/min/max/range) #define TX2X_BIT_TIME 1220 // microseconds #define TX2X_WEIGHT_AVG_SAMPLE 150 // seconds @@ -70,9 +80,14 @@ extern "C" { #ifdef USE_TX20_WIND_SENSOR #undef D_TX2x_NAME #define D_TX2x_NAME "TX20" -#else // USE_TX20_WIND_SENSOR +#endif +#ifdef USE_TX23_WIND_SENSOR // USE_TX23_WIND_SENSOR #undef D_TX2x_NAME #define D_TX2x_NAME "TX23" +#endif +#ifdef USE_WS2300_WIND_SENSOR // USE_WS2300_WIND_SENSOR +#undef D_TX2x_NAME +#define D_TX2x_NAME "WS2300-15" #endif // USE_TX20_WIND_SENSOR #ifdef USE_WEBSERVER @@ -236,7 +251,14 @@ void IRAM_ATTR TX2xStartRead(void) #ifdef USE_TX23_WIND_SENSOR if ((chk == tx2x_sd) && (0x1b==tx2x_sa) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) { #else - if ((chk == tx2x_sd) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) { + if + #ifdef USE_TX20_WIND_SENSOR + ((chk == tx2x_sd) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) + #endif + #ifdef USE_WS2300_WIND_SENSOR + ((chk == tx2x_sd) && (tx2x_sc < 511)) + #endif + { #endif tx2x_last_available = TasmotaGlobal.uptime; // Wind speed spec: 0 to 180 km/h (0 to 50 m/s) @@ -590,4 +612,4 @@ bool Xsns35(uint8_t function) return result; } -#endif // USE_TX20_WIND_SENSOR || USE_TX23_WIND_SENSOR \ No newline at end of file +#endif // USE_TX20_WIND_SENSOR || USE_TX23_WIND_SENSOR diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino index cb7fa9497..771b0bd0c 100755 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -456,7 +456,7 @@ const uint8_t meter[]= //0x77,0x07,0x01,0x00,0x01,0x08,0x01,0xff "1,77070101010801ff@1000," D_TPWRIN1 ",kWh," DJ_TPWRIN1 ",2|" // Verbrauch T1 //0x77,0x07,0x01,0x00,0x01,0x07,0x00,0xff -"1,77070100010700ff@1," D_TPWRCURR ",W," DJ_TPWRCURR ",0|" // Strom Gesamt +"1,77070100010700ff@1," D_TPWRCURR ",W," DJ_TPWRCURR ",0|" // Strom Gesamt //0x77,0x07,0x01,0x00,0x01,0x07,0x00,0xff "1,77070100150700ff@1," D_TPWRCURR1 ",W," DJ_TPWRCURR1 ",0|" // Strom L1 //0x77,0x07,0x01,0x00,0x01,0x07,0x00,0xff @@ -1198,7 +1198,7 @@ double CharToDouble(const char *str) strlcpy(strbuf, str, sizeof(strbuf)); char *pt = strbuf; - while ((*pt != '\0') && isblank(*pt)) { pt++; } // Trim leading spaces + while ((*pt != '\0') && isspace(*pt)) { pt++; } // Trim leading spaces signed char sign = 1; if (*pt == '-') { sign = -1; } @@ -1287,7 +1287,11 @@ void sml_empty_receiver(uint32_t meters) { void sml_shift_in(uint32_t meters,uint32_t shard) { uint32_t count; +#ifndef SML_OBIS_LINE if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p' && meter_desc_p[meters].type!='R' && meter_desc_p[meters].type!='v') { +#else + if (meter_desc_p[meters].type!='o' && meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p' && meter_desc_p[meters].type!='R' && meter_desc_p[meters].type!='v') { +#endif // shift in for (count=0; countread(); - if (meter_desc_p[meters].type=='o') { - smltbuf[meters][SML_BSIZ-1]=iob&0x7f; + if (meter_desc_p[meters].type == 'o') { +#ifndef SML_OBIS_LINE + smltbuf[meters][SML_BSIZ-1] = iob & 0x7f; +#else + iob &= 0x7f; + smltbuf[meters][meter_spos[meters]] = iob; + meter_spos[meters]++; + if (meter_spos[meters] >= SML_BSIZ) { + meter_spos[meters] = 0; + } + if (iob == 0x0a) { + SML_Decode(meters); + meter_spos[meters] = 0; + } +#endif } else if (meter_desc_p[meters].type=='s') { smltbuf[meters][SML_BSIZ-1]=iob; } else if (meter_desc_p[meters].type=='r') { @@ -1369,7 +1386,11 @@ void sml_shift_in(uint32_t meters,uint32_t shard) { } } sb_counter++; +#ifndef SML_OBIS_LINE if (meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p' && meter_desc_p[meters].type!='R' && meter_desc_p[meters].type!='v') SML_Decode(meters); +#else + if (meter_desc_p[meters].type!='o' && meter_desc_p[meters].type!='e' && meter_desc_p[meters].type!='m' && meter_desc_p[meters].type!='M' && meter_desc_p[meters].type!='p' && meter_desc_p[meters].type!='R' && meter_desc_p[meters].type!='v') SML_Decode(meters); +#endif } @@ -1438,6 +1459,13 @@ void SML_Decode(uint8_t index) { continue; } + // =d must handle dindex + if (*mp == '=' && *(mp + 1) == 'd') { + if (index != mindex) { + dindex++; + } + } + if (index!=mindex) goto nextsect; // start of serial source buffer diff --git a/tasmota/xsns_62_esp32_mi.ino b/tasmota/xsns_62_esp32_mi.ino index ce9ac10ca..ecc9d228c 100644 --- a/tasmota/xsns_62_esp32_mi.ino +++ b/tasmota/xsns_62_esp32_mi.ino @@ -49,7 +49,7 @@ */ #ifndef USE_BLE_ESP32 #ifdef ESP32 // ESP32 only. Use define USE_HM10 for ESP8266 support -#if CONFIG_IDF_TARGET_ESP32 +#if defined CONFIG_IDF_TARGET_ESP32 || defined CONFIG_IDF_TARGET_ESP32C3 #ifdef USE_MI_ESP32 @@ -2334,6 +2334,6 @@ bool Xsns62(uint8_t function) return result; } #endif // USE_MI_ESP32 -#endif // CONFIG_IDF_TARGET_ESP32 +#endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3 #endif // ESP32 #endif // USE_BLE_ESP32 diff --git a/tasmota/xsns_62_esp32_mi_ble.ino b/tasmota/xsns_62_esp32_mi_ble.ino index 114ca8f70..cb9548e6e 100644 --- a/tasmota/xsns_62_esp32_mi_ble.ino +++ b/tasmota/xsns_62_esp32_mi_ble.ino @@ -70,8 +70,8 @@ // for testing of BLE_ESP32, we remove xsns_62_MI_ESP32.ino completely, and instead add this modified xsns_52_ibeacon_BLE_ESP32.ino #ifdef USE_BLE_ESP32 -#ifdef ESP32 // ESP32 only. Use define USE_HM10 for ESP8266 support -#if CONFIG_IDF_TARGET_ESP32 +#ifdef ESP32 // ESP32 family only. Use define USE_HM10 for ESP8266 support +#if defined CONFIG_IDF_TARGET_ESP32 || defined CONFIG_IDF_TARGET_ESP32C3 #ifdef USE_MI_ESP32 @@ -343,7 +343,7 @@ std::vector MIBLEsensors; std::vector MIBLEbindKeys; std::vector MIBLEBlockList; -void *slotmutex = nullptr; +SemaphoreHandle_t slotmutex = (SemaphoreHandle_t) nullptr; /*********************************************************************************************\ * constants @@ -2389,7 +2389,7 @@ const char HTTP_MI32_LIGHT[] PROGMEM = "{s}%s" " Light" "{m}%d{e}"; // "http://127.0.0.1:8887/keys/TelinkFlasher.html?mac=%s&cb=http%%3A%%2F%%2F%s%%2Fmikey" // "\">%s{m} {e}"; const char HTTP_NEEDKEY[] PROGMEM = "{s}%s %s{m} {e}"; @@ -2689,11 +2689,7 @@ void MI32ShowSomeSensors(){ } ResponseAppend_P(PSTR("}")); MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_RSLT_SENSOR), Settings->flag.mqtt_sensor_retain); -#ifdef MQTT_DATA_STRING - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data.c_str()); -#else - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data); -#endif + //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, ResponseData()); #ifdef USE_HOME_ASSISTANT if(hass_mode==2){ @@ -2746,11 +2742,7 @@ void MI32ShowOneMISensor(){ id); MqttPublish(SensorTopic); -#ifdef MQTT_DATA_STRING - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data.c_str()); -#else - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data); -#endif + //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, ResponseData()); } MI32.mqttCurrentSingleSlot++; } @@ -3006,11 +2998,7 @@ void MI32DiscoveryOneMISensor(){ //vTaskDelay(100/ portTICK_PERIOD_MS); } } // end if hass discovery -#ifdef MQTT_DATA_STRING - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data.c_str()); -#else - //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, TasmotaGlobal.mqtt_data); -#endif + //AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: show some %d %s"),D_CMND_MI32, MI32.mqttCurrentSlot, ResponseData()); #endif //USE_HOME_ASSISTANT } @@ -3078,22 +3066,17 @@ void MI32ShowTriggeredSensors(){ if (alias && *alias){ id = alias; } else { - sprintf(idstr, PSTR("%s%02x%02x%02x"), + snprintf_P(idstr, sizeof(idstr), PSTR("%s%02x%02x%02x"), kMI32DeviceType[p->type-1], p->MAC[3], p->MAC[4], p->MAC[5]); } - sprintf(SensorTopic, "tele/tasmota_ble/%s", - id); - MqttPublish(SensorTopic); + snprintf_P(SensorTopic, sizeof(SensorTopic), PSTR("tele/tasmota_ble/%s"), id); + MqttPublish(SensorTopic, Settings->flag.mqtt_sensor_retain); + AddLog(LOG_LEVEL_DEBUG, PSTR("M32: triggered %d %s"), sensor, ResponseData()); + XdrvRulesProcess(0); } else { - MqttPublishPrefixTopic_P(STAT, PSTR(D_RSLT_SENSOR), Settings->flag.mqtt_sensor_retain); + MqttPublishPrefixTopicRulesProcess_P(STAT, PSTR(D_RSLT_SENSOR), Settings->flag.mqtt_sensor_retain); } -#ifdef MQTT_DATA_STRING - AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: triggered %d %s"),D_CMND_MI32, sensor, TasmotaGlobal.mqtt_data.c_str()); -#else - AddLog(LOG_LEVEL_DEBUG,PSTR("M32: %s: triggered %d %s"),D_CMND_MI32, sensor, TasmotaGlobal.mqtt_data); -#endif - XdrvRulesProcess(0); } else { // else don't and clear ResponseClear(); @@ -3285,7 +3268,7 @@ bool Xsns62(uint8_t function) return result; } #endif // USE_MI_ESP32 -#endif // CONFIG_IDF_TARGET_ESP32 +#endif // CONFIG_IDF_TARGET_ESP32 or CONFIG_IDF_TARGET_ESP32C3 #endif // ESP32 #endif \ No newline at end of file diff --git a/tasmota/xsns_63_aht1x.ino b/tasmota/xsns_63_aht1x.ino index bb47873eb..315930c0b 100644 --- a/tasmota/xsns_63_aht1x.ino +++ b/tasmota/xsns_63_aht1x.ino @@ -19,7 +19,7 @@ */ #ifdef USE_I2C -#ifdef USE_AHT1x +#if defined(USE_AHT1x) || defined(USE_AHT2x) /*********************************************************************************************\ * AHT10/15/20 - Temperature and Humidity @@ -38,6 +38,7 @@ * * 27.08.2020 support for AHT20 added. Now, the AHT20 should support standard I2C Protokoll * and allows other I2C Devices on the bus but have only one I2C Address (0x38) + * 14.09.2021 support AHT20 without enabling AHT1x * * AHT20 I2C Address: 0x38 \*********************************************************************************************/ diff --git a/tasmota/xsns_69_opentherm.ino b/tasmota/xsns_69_opentherm.ino index 4dee38c01..cfcc0384d 100644 --- a/tasmota/xsns_69_opentherm.ino +++ b/tasmota/xsns_69_opentherm.ino @@ -179,7 +179,7 @@ void sns_opentherm_processResponseCallback(unsigned long response, int st) switch (status) { - case OpenThermResponseStatus::SUCCESS: + case OpenThermResponseStatus::OPTH_SUCCESS: if (sns_ot_master->isValidResponse(response)) { sns_opentherm_process_success_response(&sns_ot_boiler_status, response); @@ -188,7 +188,7 @@ void sns_opentherm_processResponseCallback(unsigned long response, int st) sns_ot_timeout_before_disconnect = SNS_OT_MAX_TIMEOUTS_BEFORE_DISCONNECT; break; - case OpenThermResponseStatus::INVALID: + case OpenThermResponseStatus::OPTH_INVALID: sns_opentherm_check_retry_request(); sns_ot_connection_status = OpenThermConnectionStatus::OTC_READY; sns_ot_timeout_before_disconnect = SNS_OT_MAX_TIMEOUTS_BEFORE_DISCONNECT; @@ -198,7 +198,7 @@ void sns_opentherm_processResponseCallback(unsigned long response, int st) // In this case we do reconnect. // If this command will timeout multiple times, it will be excluded from the rotation later on // after couple of failed attempts. See sns_opentherm_check_retry_request logic - case OpenThermResponseStatus::TIMEOUT: + case OpenThermResponseStatus::OPTH_TIMEOUT: sns_opentherm_check_retry_request(); if (--sns_ot_timeout_before_disconnect == 0) { @@ -235,9 +235,7 @@ void sns_opentherm_stat(bool json) if (json) { - ResponseAppend_P(PSTR(",\"OPENTHERM\":{")); - ResponseAppend_P(PSTR("\"conn\":\"%s\","), statusStr); - ResponseAppend_P(PSTR("\"settings\":%d,"), Settings->ot_flags); + ResponseAppend_P(PSTR(",\"OPENTHERM\":{\"conn\":\"%s\",\"settings\":%d"), statusStr, Settings->ot_flags); sns_opentherm_dump_telemetry(); ResponseJsonEnd(); #ifdef USE_WEBSERVER @@ -317,7 +315,7 @@ void sns_ot_start_handshake() sns_opentherm_protocol_reset(); sns_ot_master->sendRequestAync( - OpenTherm::buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::SConfigSMemberIDcode, 0)); + OpenTherm::buildRequest(OpenThermMessageType::OPTH_READ_DATA, OpenThermMessageID::SConfigSMemberIDcode, 0)); sns_ot_connection_status = OpenThermConnectionStatus::OTC_HANDSHAKE; } @@ -326,7 +324,7 @@ void sns_ot_process_handshake(unsigned long response, int st) { OpenThermResponseStatus status = (OpenThermResponseStatus)st; - if (status != OpenThermResponseStatus::SUCCESS || !sns_ot_master->isValidResponse(response)) + if (status != OpenThermResponseStatus::OPTH_SUCCESS || !sns_ot_master->isValidResponse(response)) { AddLog(LOG_LEVEL_ERROR, PSTR("[OTH]: getSlaveConfiguration failed. Status=%s"), diff --git a/tasmota/xsns_69_opentherm_protocol.ino b/tasmota/xsns_69_opentherm_protocol.ino index 0047252af..bc821640a 100644 --- a/tasmota/xsns_69_opentherm_protocol.ino +++ b/tasmota/xsns_69_opentherm_protocol.ino @@ -274,7 +274,7 @@ unsigned long sns_opentherm_set_slave_flags(struct OpenThermCommandT *self, stru data <<= 8; - return OpenTherm::buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Status, data); + return OpenTherm::buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::Status, data); } void sns_opentherm_parse_slave_flags(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) @@ -320,7 +320,7 @@ unsigned long sns_opentherm_set_boiler_temperature(struct OpenThermCommandT *sel self->m_results[0].m_float = status->m_boilerSetpoint; unsigned int data = OpenTherm::temperatureToData(status->m_boilerSetpoint); - return OpenTherm::buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TSet, data); + return OpenTherm::buildRequest(OpenThermMessageType::OPTH_WRITE_DATA, OpenThermMessageID::TSet, data); } void sns_opentherm_parse_set_boiler_temperature(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) { @@ -360,7 +360,7 @@ unsigned long sns_opentherm_set_boiler_dhw_temperature(struct OpenThermCommandT self->m_results[0].m_float = status->m_hotWaterSetpoint; unsigned int data = OpenTherm::temperatureToData(status->m_hotWaterSetpoint); - return OpenTherm::buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TdhwSet, data); + return OpenTherm::buildRequest(OpenThermMessageType::OPTH_WRITE_DATA, OpenThermMessageID::TdhwSet, data); } void sns_opentherm_parse_boiler_dhw_temperature(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) { @@ -381,7 +381,7 @@ void sns_opentherm_tele_boiler_dhw_temperature(struct OpenThermCommandT *self) /////////////////////////////////// App Specific Fault Flags ////////////////////////////////////////////////// unsigned long sns_opentherm_get_flags(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *) { - return OpenTherm::buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0); + return OpenTherm::buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::ASFflags, 0); } void sns_opentherm_parse_flags(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) @@ -416,7 +416,7 @@ void sns_opentherm_tele_u16(struct OpenThermCommandT *self) /////////////////////////////////// OEM Diag Code ////////////////////////////////////////////////// unsigned long sns_opentherm_get_oem_diag(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *) { - return OpenTherm::buildRequest(OpenThermRequestType::READ, OpenThermMessageID::OEMDiagnosticCode, 0); + return OpenTherm::buildRequest(OpenThermRequestType::OPTH_READ, OpenThermMessageID::OEMDiagnosticCode, 0); } void sns_opentherm_parse_oem_diag(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) @@ -434,7 +434,7 @@ void sns_opentherm_tele_oem_diag(struct OpenThermCommandT *self) /////////////////////////////////// Generic Single Float ///////////////////////////////////////////////// unsigned long sns_opentherm_get_generic_float(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *) { - return OpenTherm::buildRequest(OpenThermRequestType::READ, (OpenThermMessageID)self->m_command_code, 0); + return OpenTherm::buildRequest(OpenThermRequestType::OPTH_READ, (OpenThermMessageID)self->m_command_code, 0); } void sns_opentherm_parse_generic_float(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) @@ -452,7 +452,7 @@ void sns_opentherm_tele_generic_float(struct OpenThermCommandT *self) /////////////////////////////////// Generic U16 ///////////////////////////////////////////////// unsigned long sns_opentherm_get_generic_u16(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *) { - return OpenTherm::buildRequest(OpenThermRequestType::READ, (OpenThermMessageID)self->m_command_code, 0); + return OpenTherm::buildRequest(OpenThermRequestType::OPTH_READ, (OpenThermMessageID)self->m_command_code, 0); } void sns_opentherm_parse_generic_u16(struct OpenThermCommandT *self, struct OT_BOILER_STATUS_T *boilerStatus, unsigned long response) @@ -549,7 +549,6 @@ void sns_opentherm_process_success_response(struct OT_BOILER_STATUS_T *boilerSta void sns_opentherm_dump_telemetry() { - bool add_coma = false; for (int i = 0; i < SNS_OT_COMMANDS_COUNT; ++i) { struct OpenThermCommandT *cmd = &sns_opentherm_commands[i]; @@ -558,11 +557,8 @@ void sns_opentherm_dump_telemetry() continue; } - ResponseAppend_P(PSTR("%s\"%s\":"), add_coma ? "," : "", cmd->m_command_name); - + ResponseAppend_P(PSTR(",\"%s\":"), cmd->m_command_name); cmd->m_ot_appent_telemetry(cmd); - - add_coma = true; } } diff --git a/tasmota/xsns_75_prometheus.ino b/tasmota/xsns_75_prometheus.ino index 196cbbae9..caa2330fa 100644 --- a/tasmota/xsns_75_prometheus.ino +++ b/tasmota/xsns_75_prometheus.ino @@ -20,11 +20,22 @@ #ifdef USE_PROMETHEUS /*********************************************************************************************\ * Prometheus support + * + * The text format for metrics, labels and values is documented at [1]. Only + * the UTF-8 text encoding is supported. [2] describes how metrics and labels + * should be named. + * + * [1] + * https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md + * [2] + * https://github.com/prometheus/docs/blob/master/content/docs/practices/naming.md + * \*********************************************************************************************/ #define XSNS_75 75 -const char *UnitfromType(const char *type) // find unit for measurment type +// Find appropriate unit for measurement type. +const char *UnitfromType(const char *type) { if (strcmp(type, "time") == 0) { return "seconds"; @@ -56,7 +67,9 @@ const char *UnitfromType(const char *type) // find unit for measurment type return ""; } -String FormatMetricName(const char *metric) { // cleanup spaces and uppercases for Prmetheus metrics conventions +// Replace spaces and periods in metric name to match Prometheus metrics +// convention. +String FormatMetricName(const char *metric) { String formatted = metric; formatted.toLowerCase(); formatted.replace(" ", "_"); @@ -64,6 +77,114 @@ String FormatMetricName(const char *metric) { // cleanup spaces and uppercases return formatted; } +const uint8_t + kPromMetricGauge = _BV(0), + kPromMetricCounter = _BV(1), + kPromMetricTypeMask = kPromMetricGauge | kPromMetricCounter; + +// Format and send a Prometheus metric to the client. Use flags to configure +// the type. Labels must be supplied in tuples of two character array pointers +// and terminated by nullptr. +void WritePromMetric(const char *name, uint8_t flags, const char *value, va_list labels) { + PGM_P const prefix = PSTR("tasmota_"); + PGM_P tmp; + String lval; + + switch (flags & kPromMetricTypeMask) { + case kPromMetricGauge: + tmp = PSTR("gauge"); + break; + case kPromMetricCounter: + tmp = PSTR("counter"); + break; + default: + tmp = nullptr; + break; + } + + if (tmp != nullptr) { + WSContentSend_P(PSTR("# TYPE %s%s %s\n"), prefix, name, tmp); + } + + WSContentSend_P(PSTR("%s%s{"), prefix, name); + + for (const char *sep = PSTR(""); ; sep = PSTR(",")) { + if ((tmp = va_arg(labels, PGM_P)) == nullptr) { + break; + } + + // A few label values are stored in PROGMEM. The _P functions, e.g. + // snprintf_P, support both program and heap/stack memory with the "%s" + // format on ESP8266/ESP32. Casting the pointer to __FlashStringHelper has + // the same effect with String::operator=. + if (!(lval = va_arg(labels, const __FlashStringHelper *))) { + break; + } + + // Labels can be any sequence of UTF-8 characters, but backslash, + // double-quote and line feed must be escaped. + lval.replace("\\", "\\\\"); + lval.replace("\"", "\\\""); + lval.replace("\n", "\\n"); + + WSContentSend_P(PSTR("%s%s=\"%s\""), sep, tmp, lval.c_str()); + } + + WSContentSend_P(PSTR("} %s\n"), value); +} + +void WritePromMetricInt32(const char *name, uint8_t flags, const int32_t value, ...) { + char str[16]; + + snprintf_P(str, sizeof(str), PSTR("%d"), value); + + va_list labels; + va_start(labels, value); + WritePromMetric(name, flags, str, labels); + va_end(labels); +} + +void WritePromMetricDec(const char *name, uint8_t flags, double number, unsigned char prec, ...) { + char value[FLOATSZ]; + + // Prometheus always requires "." as the decimal separator. + dtostrfd(number, prec, value); + + va_list labels; + va_start(labels, prec); + WritePromMetric(name, flags, value, labels); + va_end(labels); +} + +void WritePromMetricStr(const char *name, uint8_t flags, const char *value, ...) { + va_list labels; + va_start(labels, value); + WritePromMetric(name, flags, value, labels); + va_end(labels); +} + +// Sentinel value for unknown memory metrics, chosen to unlikely match actual +// values. +const uint32_t kPromMemoryUnknown = 0xFFFFFFFF - 1; + +// Write metrics providing information about used and available memory. +void WritePromMemoryMetrics(const char *type, uint32_t size, uint32_t avail, uint32_t max_alloc) { + if (size != kPromMemoryUnknown) { + WritePromMetricInt32(PSTR("memory_size_bytes"), kPromMetricGauge, size, + PSTR("memory"), type, nullptr); + } + + WritePromMetricInt32(PSTR("memory_free_bytes"), kPromMetricGauge, avail, + PSTR("memory"), type, nullptr); + + if (max_alloc != kPromMemoryUnknown) { + // The largest contiguous free memory block, useful for checking + // fragmentation. + WritePromMetricInt32(PSTR("memory_max_alloc_bytes"), kPromMetricGauge, max_alloc, + PSTR("memory"), type, nullptr); + } +} + void HandleMetrics(void) { if (!HttpCheckPriviledgedAccess()) { return; } @@ -71,71 +192,101 @@ void HandleMetrics(void) { WSContentBegin(200, CT_PLAIN); - char parameter[FLOATSZ]; + char namebuf[64]; // Pseudo-metric providing metadata about the running firmware version. - WSContentSend_P(PSTR("# TYPE tasmota_info gauge\ntasmota_info{version=\"%s\",image=\"%s\",build_timestamp=\"%s\"} 1\n"), - TasmotaGlobal.version, TasmotaGlobal.image_name, GetBuildDateAndTime().c_str()); - WSContentSend_P(PSTR("# TYPE tasmota_uptime_seconds gauge\ntasmota_uptime_seconds %d\n"), TasmotaGlobal.uptime); - WSContentSend_P(PSTR("# TYPE tasmota_boot_count counter\ntasmota_boot_count %d\n"), Settings->bootcount); - WSContentSend_P(PSTR("# TYPE tasmota_flash_writes_total counter\ntasmota_flash_writes_total %d\n"), Settings->save_flag); + WritePromMetricInt32(PSTR("info"), kPromMetricGauge, 1, + PSTR("version"), TasmotaGlobal.version, + PSTR("image"), TasmotaGlobal.image_name, + PSTR("build_timestamp"), GetBuildDateAndTime().c_str(), + PSTR("devicename"), SettingsText(SET_DEVICENAME), + nullptr); + WritePromMetricInt32(PSTR("uptime_seconds"), kPromMetricGauge, TasmotaGlobal.uptime, nullptr); + WritePromMetricInt32(PSTR("boot_count"), kPromMetricCounter, Settings->bootcount, nullptr); + WritePromMetricInt32(PSTR("flash_writes_total"), kPromMetricCounter, Settings->save_flag, nullptr); // Pseudo-metric providing metadata about the WiFi station. - WSContentSend_P(PSTR("# TYPE tasmota_wifi_station_info gauge\ntasmota_wifi_station_info{bssid=\"%s\",ssid=\"%s\"} 1\n"), WiFi.BSSIDstr().c_str(), WiFi.SSID().c_str()); + WritePromMetricInt32(PSTR("wifi_station_info"), kPromMetricGauge, 1, + PSTR("bssid"), WiFi.BSSIDstr().c_str(), + PSTR("ssid"), WiFi.SSID().c_str(), + nullptr); // Wi-Fi Signal strength - WSContentSend_P(PSTR("# TYPE tasmota_wifi_station_signal_dbm gauge\ntasmota_wifi_station_signal_dbm{mac_address=\"%s\"} %d\n"), WiFi.BSSIDstr().c_str(), WiFi.RSSI()); + WritePromMetricInt32(PSTR("wifi_station_signal_dbm"), kPromMetricGauge, WiFi.RSSI(), + PSTR("mac_address"), WiFi.BSSIDstr().c_str(), + nullptr); if (!isnan(TasmotaGlobal.temperature_celsius)) { - dtostrfd(TasmotaGlobal.temperature_celsius, Settings->flag2.temperature_resolution, parameter); - WSContentSend_P(PSTR("# TYPE tasmota_global_temperature_celsius gauge\ntasmota_global_temperature_celsius %s\n"), parameter); - } - if (TasmotaGlobal.humidity != 0) { - dtostrfd(TasmotaGlobal.humidity, Settings->flag2.humidity_resolution, parameter); - WSContentSend_P(PSTR("# TYPE tasmota_global_humidity gauge\ntasmota_global_humidity_percentage %s\n"), parameter); - } - if (TasmotaGlobal.pressure_hpa != 0) { - dtostrfd(TasmotaGlobal.pressure_hpa, Settings->flag2.pressure_resolution, parameter); - WSContentSend_P(PSTR("# TYPE tasmota_global_pressure_hpa gauge\ntasmota_global_pressure_hpa %s\n"), parameter); + WritePromMetricDec(PSTR("global_temperature_celsius"), kPromMetricGauge, + TasmotaGlobal.temperature_celsius, Settings->flag2.temperature_resolution, + nullptr); } - // Pseudo-metric providing metadata about the free memory. - #ifdef ESP32 - int32_t freeMaxMem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap()); - WSContentSend_PD(PSTR("# TYPE tasmota_memory_bytes gauge\ntasmota_memory_bytes{memory=\"Ram\"} %d\n"), ESP_getFreeHeap()); - WSContentSend_PD(PSTR("# TYPE tasmota_memory_ratio gauge\ntasmota_memory_ratio{memory=\"Fragmentation\"} %d)"), freeMaxMem / 100); - if (psramFound()) { - WSContentSend_P(PSTR("# TYPE tasmota_memory_bytes gauge\ntasmota_memory_bytes{memory=\"Psram\"} %d\n"), ESP.getFreePsram() ); - } - #else // ESP32 - WSContentSend_PD(PSTR("# TYPE tasmota_memory_bytes gauge\ntasmota_memory_bytes{memory=\"ram\"} %d\n"), ESP_getFreeHeap()); - #endif // ESP32 + if (TasmotaGlobal.humidity != 0) { + WritePromMetricDec(PSTR("global_humidity_percentage"), kPromMetricGauge, + TasmotaGlobal.humidity, Settings->flag2.humidity_resolution, + nullptr); + } + + if (TasmotaGlobal.pressure_hpa != 0) { + WritePromMetricDec(PSTR("global_pressure_hpa"), kPromMetricGauge, + TasmotaGlobal.pressure_hpa, Settings->flag2.pressure_resolution, + nullptr); + } + + WritePromMemoryMetrics(PSTR("heap"), +#ifdef ESP32 + ESP.getHeapSize(), +#else + kPromMemoryUnknown, +#endif + ESP_getFreeHeap(), +#ifdef ESP32 + ESP_getMaxAllocHeap() +#else + kPromMemoryUnknown +#endif + ); + +#ifdef ESP32 + if (UsePSRAM()) { + WritePromMemoryMetrics(PSTR("psram"), ESP.getPsramSize(), + ESP.getFreePsram(), ESP.getMaxAllocPsram()); + } +#endif #ifdef USE_ENERGY_SENSOR - dtostrfd(Energy.voltage[0], Settings->flag2.voltage_resolution, parameter); - WSContentSend_P(PSTR("# TYPE energy_voltage_volts gauge\nenergy_voltage_volts %s\n"), parameter); - dtostrfd(Energy.current[0], Settings->flag2.current_resolution, parameter); - WSContentSend_P(PSTR("# TYPE energy_current_amperes gauge\nenergy_current_amperes %s\n"), parameter); - dtostrfd(Energy.active_power[0], Settings->flag2.wattage_resolution, parameter); - WSContentSend_P(PSTR("# TYPE energy_power_active_watts gauge\nenergy_power_active_watts %s\n"), parameter); - dtostrfd(Energy.daily, Settings->flag2.energy_resolution, parameter); - WSContentSend_P(PSTR("# TYPE energy_power_kilowatts_daily counter\nenergy_power_kilowatts_daily %s\n"), parameter); - dtostrfd(Energy.total, Settings->flag2.energy_resolution, parameter); - WSContentSend_P(PSTR("# TYPE energy_power_kilowatts_total counter\nenergy_power_kilowatts_total %s\n"), parameter); + WritePromMetricDec(PSTR("energy_voltage_volts"), + kPromMetricGauge, + Energy.voltage[0], Settings->flag2.voltage_resolution, nullptr); + WritePromMetricDec(PSTR("energy_current_amperes"), + kPromMetricGauge, + Energy.current[0], Settings->flag2.current_resolution, nullptr); + WritePromMetricDec(PSTR("energy_power_active_watts"), + kPromMetricGauge, + Energy.active_power[0], Settings->flag2.wattage_resolution, nullptr); + WritePromMetricDec(PSTR("energy_power_kilowatts_daily"), + kPromMetricCounter, + Energy.daily_sum, Settings->flag2.energy_resolution, nullptr); + WritePromMetricDec(PSTR("energy_power_kilowatts_total"), + kPromMetricCounter, + Energy.total_sum, Settings->flag2.energy_resolution, nullptr); #endif for (uint32_t device = 0; device < TasmotaGlobal.devices_present; device++) { power_t mask = 1 << device; - WSContentSend_P(PSTR("# TYPE relay%d_state gauge\nrelay%d_state %d\n"), device+1, device+1, (TasmotaGlobal.power & mask)); + snprintf_P(namebuf, sizeof(namebuf), PSTR("relay%d_state"), device + 1); + WritePromMetricInt32(namebuf, kPromMetricGauge, + (TasmotaGlobal.power & mask), nullptr); } ResponseClear(); MqttShowSensor(); //Pull sensor data - String jsonStr = TasmotaGlobal.mqtt_data; + String jsonStr = ResponseData(); JsonParser parser((char *)jsonStr.c_str()); JsonParserObject root = parser.getRootObject(); - if (root) { // did JSON parsing went ok? + if (root) { // did JSON parsing succeed? for (auto key1 : root) { JsonParserToken value1 = key1.getValue(); if (value1.isObject()) { @@ -149,9 +300,12 @@ void HandleMetrics(void) { if (value != nullptr && isdigit(value[0])) { String sensor = FormatMetricName(key2.getStr()); String type = FormatMetricName(key3.getStr()); - const char *unit = UnitfromType(type.c_str()); //grab base unit corresponding to type - WSContentSend_P(PSTR("# TYPE tasmota_sensors_%s_%s gauge\ntasmota_sensors_%s_%s{sensor=\"%s\"} %s\n"), - type.c_str(), unit, type.c_str(), unit, sensor.c_str(), value); //build metric as "# TYPE tasmota_sensors_%type%_%unit% gauge\ntasmotasensors_%type%_%unit%{sensor=%sensor%"} %value%"" + + snprintf_P(namebuf, sizeof(namebuf), PSTR("sensors_%s_%s"), + type.c_str(), UnitfromType(type.c_str())); + WritePromMetricStr(namebuf, kPromMetricGauge, value, + PSTR("sensor"), sensor.c_str(), + nullptr); } } } else { @@ -159,14 +313,19 @@ void HandleMetrics(void) { if (value != nullptr && isdigit(value[0])) { String sensor = FormatMetricName(key1.getStr()); String type = FormatMetricName(key2.getStr()); - const char *unit = UnitfromType(type.c_str()); - if (strcmp(type.c_str(), "totalstarttime") != 0) { // this metric causes prometheus of fail + if (strcmp(type.c_str(), "totalstarttime") != 0) { // this metric causes Prometheus of fail + snprintf_P(namebuf, sizeof(namebuf), PSTR("sensors_%s_%s"), + type.c_str(), UnitfromType(type.c_str())); + if (strcmp(type.c_str(), "id") == 0) { // this metric is NaN, so convert it to a label, see Wi-Fi metrics above - WSContentSend_P(PSTR("# TYPE tasmota_sensors_%s_%s gauge\ntasmota_sensors_%s_%s{sensor=\"%s\",id=\"%s\"} 1\n"), - type.c_str(), unit, type.c_str(), unit, sensor.c_str(), value); + WritePromMetricInt32(namebuf, kPromMetricGauge, 1, + PSTR("sensor"), sensor.c_str(), + PSTR("id"), value, + nullptr); } else { - WSContentSend_P(PSTR("# TYPE tasmota_sensors_%s_%s gauge\ntasmota_sensors_%s_%s{sensor=\"%s\"} %s\n"), - type.c_str(), unit, type.c_str(), unit, sensor.c_str(), value); + WritePromMetricStr(namebuf, kPromMetricGauge, value, + PSTR("sensor"), sensor.c_str(), + nullptr); } } } @@ -175,8 +334,11 @@ void HandleMetrics(void) { } else { const char *value = value1.getStr(nullptr); String sensor = FormatMetricName(key1.getStr()); + if (value != nullptr && isdigit(value[0] && strcmp(sensor.c_str(), "time") != 0)) { //remove false 'time' metric - WSContentSend_P(PSTR("# TYPE tasmota_sensors_%s gauge\ntasmota_sensors{sensor=\"%s\"} %s\n"), sensor.c_str(), sensor.c_str(), value); + WritePromMetricStr(PSTR("sensors"), kPromMetricGauge, value, + PSTR("sensor"), sensor.c_str(), + nullptr); } } } diff --git a/tasmota/xsns_82_wiegand.ino b/tasmota/xsns_82_wiegand.ino index 59b47f375..2a340b869 100644 --- a/tasmota/xsns_82_wiegand.ino +++ b/tasmota/xsns_82_wiegand.ino @@ -396,7 +396,7 @@ void Wiegand::ScanForTag() { for (int i= 0; i < WIEGAND_RFID_ARRAY_SIZE; i++) { - if (rfid_found[i].RFID != 0) { + if (rfid_found[i].RFID != 0 || (rfid_found[i].RFID == 0 && i == 0)) { uint64_t oldTag = rfid; bool validKey = WiegandConversion(rfid_found[i].RFID, rfid_found[i].bitCount); #if (DEV_WIEGAND_TEST_MODE)>0 diff --git a/tasmota/xsns_83_neopool.ino b/tasmota/xsns_83_neopool.ino index 90a765dbc..f2956e284 100644 --- a/tasmota/xsns_83_neopool.ino +++ b/tasmota/xsns_83_neopool.ino @@ -599,6 +599,18 @@ enum NeoPoolModbusCode { NEOPOOL_MODBUS_ERROR_DEADLOCK }; +// NeoPool value resolutions +typedef struct { + uint16_t ph : 2; + uint16_t cl : 2; + uint16_t ion : 2; +} NeoPoolResMBitfield; +NeoPoolResMBitfield neopool_resolution { + .ph = 1, + .cl = 1, + .ion = 1 +}; + #define D_NEOPOOL_NAME "NeoPool" @@ -651,11 +663,11 @@ const char kNeoPoolpHAlarms[] PROGMEM = #define D_STR_BIT "Bit" #endif // D_STR_BIT -#define NEOPOOL_FMT_PH "%1_f" -#define NEOPOOL_FMT_RX "%0_f" -#define NEOPOOL_FMT_CL "%1_f" +#define NEOPOOL_FMT_PH "%*_f" +#define NEOPOOL_FMT_RX "%d" +#define NEOPOOL_FMT_CL "%*_f" #define NEOPOOL_FMT_CD "%d" -#define NEOPOOL_FMT_ION "%1_f" +#define NEOPOOL_FMT_ION "%*_f" #define NEOPOOL_FMT_HIDRO "%*_f" #define D_NEOPOOL_UNIT_GPERH "g/h" @@ -697,7 +709,7 @@ const char HTTP_SNS_NEOPOOL_STATUS_ACTIVE[] PROGMEM = "filter:invert(1)"; * any other value of