pax_global_header00006660000000000000000000000064145313612530014515gustar00rootroot0000000000000052 comment=59133f44a297eb2288e803e2e56587da4e586ffc rtl_433-23.11/000077500000000000000000000000001453136125300127155ustar00rootroot00000000000000rtl_433-23.11/.ci/000077500000000000000000000000001453136125300133665ustar00rootroot00000000000000rtl_433-23.11/.ci/scripts/000077500000000000000000000000001453136125300150555ustar00rootroot00000000000000rtl_433-23.11/.ci/scripts/do_build.sh000077500000000000000000000017551453136125300172050ustar00rootroot00000000000000#!/bin/sh set -e # performs a standard out-of-tree build and transform environment vars to cmake options # set RTLSDR=ON/OFF/AUTO (default: ON) # set SOAPYSDR=ON/OFF/AUTO (default: AUTO) # set OPENSSL=ON/OFF/AUTO (default: AUTO) # set CMAKE_TOOLCHAIN_FILE=file (default: unset) # set RUN_RTL_433_TESTS=1 (default: unset) RTLSDR="${RTLSDR:-ON}" SOAPYSDR="${SOAPYSDR:-AUTO}" OPENSSL="${OPENSSL:-AUTO}" set -- -DENABLE_RTLSDR=$RTLSDR -DENABLE_SOAPYSDR=$SOAPYSDR -DENABLE_OPENSSL=$OPENSSL mkdir -p build cd build if [ -n "$CMAKE_TOOLCHAIN_FILE" ] ; then cmake $@ -DCMAKE_TOOLCHAIN_FILE=../$CMAKE_TOOLCHAIN_FILE .. else cmake $@ .. fi make # make install if [ -n "$RUN_RTL_433_TESTS" ] ; then cd .. set -x git clone --depth 1 https://github.com/merbanan/rtl_433_tests.git cd rtl_433_tests export PATH=../build/src:$PATH test -f ../build/src/rtl_433 # virtualenv --system-site-packages .venv # source .venv/bin/activate # pip install deepdiff make test fi rtl_433-23.11/.ci/scripts/do_sysroot.sh000077500000000000000000000140241453136125300176210ustar00rootroot00000000000000#!/bin/bash set -e libusb_ver=1.0.25 rtlsdr_ver=0.6.0 pothos_ver=2021.07.25-vc16 [ "$(uname)" = "Darwin" ] && export tools=/opt/local # prefer GNU commands realpath=$(command -v grealpath || :) realpath="${realpath:-realpath}" sed=$(command -v gsed || :) sed="${sed:-sed}" # from https://libusb.info/ if [ ! -e libusb/include/libusb-1.0/libusb.h ] then [ -e libusb-${libusb_ver}.7z ] || curl -L -O https://github.com/libusb/libusb/releases/download/v${libusb_ver}/libusb-${libusb_ver}.7z mkdir -p libusb 7z x -olibusb -y libusb-${libusb_ver}.7z fi # remove this script name and two dir levels to get the source root source_dir=$(dirname $(dirname $(dirname $($realpath -s $0)))) sysroot32=$(pwd)/sysroot32 sysroot64=$(pwd)/sysroot64 sysroot32static=$(pwd)/sysroot32static sysroot64static=$(pwd)/sysroot64static mkdir -p sysroot{32,64}{,static}/usr/{include,lib,bin} cp libusb/include/libusb-1.0/libusb.h $sysroot32/usr/include cp libusb/include/libusb-1.0/libusb.h $sysroot64/usr/include cp libusb/include/libusb-1.0/libusb.h $sysroot32static/usr/include cp libusb/include/libusb-1.0/libusb.h $sysroot64static/usr/include cp libusb/MinGW32/static/libusb-1.0.a $sysroot32static/usr/lib cp libusb/MinGW64/static/libusb-1.0.a $sysroot64static/usr/lib cp libusb/MinGW32/dll/libusb-1.0.dll $sysroot32/usr/bin cp libusb/MinGW32/dll/libusb-1.0.dll.a $sysroot32/usr/lib cp libusb/MinGW64/dll/libusb-1.0.dll $sysroot64/usr/bin cp libusb/MinGW64/dll/libusb-1.0.dll.a $sysroot64/usr/lib if [ ! -d rtl-sdr-${rtlsdr_ver} ] then # or git clone https://github.com/osmocom/rtl-sdr.git [ -e rtl-sdr-${rtlsdr_ver}.tar.gz ] || curl -L -o rtl-sdr-${rtlsdr_ver}.tar.gz https://github.com/osmocom/rtl-sdr/archive/${rtlsdr_ver}.tar.gz tar xzf rtl-sdr-${rtlsdr_ver}.tar.gz fi cd rtl-sdr-${rtlsdr_ver} if [ ! -e $sysroot32/usr/lib/librtlsdr.a ] then export CMAKE_SYSROOT=$sysroot32 ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-i686.cmake .. && make && make install ; cd .. rm -rf build-tmp mv $sysroot32/usr/lib/librtlsdr_static.a $sysroot32/usr/lib/librtlsdr.a fi if [ ! -e $sysroot32static/usr/lib/librtlsdr.a ] then export CMAKE_SYSROOT=$sysroot32static ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-i686.cmake -DBUILD_SHARED_LIBS:BOOL=OFF .. && make && make install ; cd .. rm -rf build-tmp mv $sysroot32static/usr/lib/librtlsdr_static.a $sysroot32static/usr/lib/librtlsdr.a rm $sysroot32static/usr/lib/librtlsdr.dll.a rm $sysroot32static/usr/bin/librtlsdr.dll fi if [ ! -e $sysroot64/usr/lib/librtlsdr.a ] then export CMAKE_SYSROOT=$sysroot64 ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-x86-64.cmake .. && make && make install ; cd .. rm -rf build-tmp mv $sysroot64/usr/lib/librtlsdr_static.a $sysroot64/usr/lib/librtlsdr.a fi if [ ! -e $sysroot64static/usr/lib/librtlsdr.a ] then export CMAKE_SYSROOT=$sysroot64static ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-x86-64.cmake -DBUILD_SHARED_LIBS:BOOL=OFF .. && make && make install ; cd .. rm -rf build-tmp mv $sysroot64static/usr/lib/librtlsdr_static.a $sysroot64static/usr/lib/librtlsdr.a rm $sysroot64static/usr/lib/librtlsdr.dll.a rm $sysroot64static/usr/bin/librtlsdr.dll fi cd .. if [ ! -e $sysroot64/usr/bin/SoapySDR.dll -o ! -e $sysroot64/usr/lib/SoapySDR.lib ] then # from https://downloads.myriadrf.org/builds/PothosSDR/ [ -e PothosSDR-${pothos_ver}-x64.exe ] || curl -L -O https://downloads.myriadrf.org/builds/PothosSDR/PothosSDR-${pothos_ver}-x64.exe mkdir -p pothos 7z x -opothos -y PothosSDR-${pothos_ver}-x64.exe # workaround: 7-Zip 9.20 creates strange root directories [ -e pothos/bin ] || mv pothos/*/* pothos/ || : cp pothos/bin/SoapySDR.dll $sysroot64/usr/bin cp -R pothos/include/SoapySDR $sysroot64/usr/include cp pothos/lib/SoapySDR.lib $sysroot64/usr/lib cp -R pothos/cmake $sysroot64/usr $sed -i 's/.*INTERFACE_COMPILE_OPTIONS.*//g' $sysroot64/usr/cmake/SoapySDRExport.cmake fi # build rtl_433 export CMAKE_SYSROOT=$sysroot32 ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-i686.cmake $source_dir && make && make install ; cd .. rm -rf build-tmp # Non-static 32-bit binary from w64 compiler is broken with # missing libgcc_s_sjlj-1.dll, libwinpthread-1.dll # neither CMAKE_EXE_LINKER_FLAGS="-static-libgcc" # nor target_link_libraries(rtl_433 -static-libgcc) # fix this. Ideas welcome. mv $sysroot32/usr/bin/rtl_433.exe $sysroot32/usr/bin/rtl_433_32bit_nonstatic_broken.exe export CMAKE_SYSROOT=$sysroot32static ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-i686.cmake $source_dir && make && make install ; cd .. rm -rf build-tmp mv $sysroot32static/usr/bin/rtl_433.exe $sysroot32static/usr/bin/rtl_433_32bit_static.exe export CMAKE_SYSROOT=$sysroot64 ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DENABLE_SOAPYSDR=ON -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-x86-64.cmake $source_dir && make && make install ; cd .. rm -rf build-tmp export CMAKE_SYSROOT=$sysroot64static ; echo $CMAKE_SYSROOT mkdir build-tmp ; cd build-tmp ; cmake -DCMAKE_TOOLCHAIN_FILE=$source_dir/cmake/Toolchain-gcc-mingw-w64-x86-64.cmake $source_dir && make && make install ; cd .. rm -rf build-tmp mv $sysroot64static/usr/bin/rtl_433.exe $sysroot64static/usr/bin/rtl_433_64bit_static.exe # collect package cp $source_dir/.deploy/WINDOWS-MINGWW64.txt README.txt echo Packing rtl_433-win-x32.zip zip --junk-paths rtl_433-win-x32.zip sysroot32*/usr/bin/*.dll sysroot32*/usr/bin/rtl_433*.exe README.txt echo Packing rtl_433-win-x64.zip zip --junk-paths rtl_433-win-x64.zip sysroot64*/usr/bin/*.dll sysroot64*/usr/bin/rtl_433*.exe README.txt rtl_433-23.11/.clang-format000066400000000000000000000005601453136125300152710ustar00rootroot00000000000000UseTab: Never IndentWidth: 4 ContinuationIndentWidth: 8 BreakBeforeBraces: Stroustrup AlignAfterOpenBracket: DontAlign AlignEscapedNewlines: DontAlign AlignConsecutiveAssignments: true AlignConsecutiveMacros: AcrossEmptyLines AllowShortIfStatementsOnASingleLine: false AllowShortCaseLabelsOnASingleLine: true IndentCaseLabels: false ColumnLimit: 0 SortIncludes: false rtl_433-23.11/.deploy/000077500000000000000000000000001453136125300142675ustar00rootroot00000000000000rtl_433-23.11/.deploy/WINDOWS-MINGWW64.txt000066400000000000000000000026111453136125300173420ustar00rootroot00000000000000# rtl_433 Windows MinGW-W64 build The "static" builds are self-contained but do not include SoapySDR support. The regular builds depend on LibUSB, RTL-SDR, and SoapySDR libraries. There are no TLS builds (mqtts and influxs) currently. For the SoapySDR builds you need PothosSDR installed https://downloads.myriadrf.org/builds/PothosSDR/ Any recent version should work, currently built with 2021.07.25-vc16: https://downloads.myriadrf.org/builds/PothosSDR/PothosSDR-2021.07.25-vc16-x64.exe When installing choose "Add PothosSDR to the system PATH for the current user" Remove the SoapySDR.dll in this directory, it's for testing only and won't load any driver modules. An alternative to installing SoapySDR from PothosSDR is to extract the installer and copy the builds (.exe) from this release to the `bin` directory in PothosSDR. ## Quick start To run rtl_433 you have to open Windows Command Prompt (cmd.exe) or Windows Terminal, then type "cd (rtl_433 folder directory, not rtl_433.exe)" Example: "cd C:\Users\(name)\Downloads\(rtl_433 folder)" If typed correctly, the command prompt should change to your rtl_433 folder directory, then type "rtl_433 (option(s))" and enter, rtl_433 will then start running with the options given. Running the "-F http" option would look like this: (directory)> rtl_433 -F http Press enter and rtl_433 should successfully launch. When it does, go to http://127.0.0.1:8433/ rtl_433-23.11/.deploy/WINDOWS-MSVC.txt000066400000000000000000000027321453136125300167340ustar00rootroot00000000000000# rtl_433 Windows MSVC build For the SoapySDR builds you need PothosSDR installed https://downloads.myriadrf.org/builds/PothosSDR/ Any recent version should work, currently built with 2021.07.25-vc16: https://downloads.myriadrf.org/builds/PothosSDR/PothosSDR-2021.07.25-vc16-x64.exe When installing choose "Add PothosSDR to the system PATH for the current user" For the TLS builds (mqtts and influxs) you need OpenSSL installed. E.g. install Chocolatey https://chocolatey.org/install then run `choco install openssl.light` An alternative to installing SoapySDR from PothosSDR is to extract the installer and copy the builds (.exe) from this release to the `bin` directory in PothosSDR. This release includes the Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019. S.a. https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0 ## Quick start To run rtl_433 you have to open Windows Command Prompt (cmd.exe) or Windows Terminal, then type "cd (rtl_433 folder directory, not rtl_433.exe)" Example: "cd C:\Users\(name)\Downloads\(rtl_433 folder)" If typed correctly, the command prompt should change to your rtl_433 folder directory, then type "rtl_433 (option(s))" and enter, rtl_433 will then start running with the options given. Running the "-F http" option would look like this: (directory)> rtl_433 -F http Press enter and rtl_433 should successfully launch. When it does, go to http://127.0.0.1:8433/ rtl_433-23.11/.deploy/gen_nightly_info.sh000077500000000000000000000002221453136125300201440ustar00rootroot00000000000000#!/bin/bash git log $(git describe --tags --abbrev=0 HEAD^)..HEAD --oneline |egrep -v 'minor:|build:|docs:' |sed -e 's/[^ ]*/-/' >RELEASEINFO.md rtl_433-23.11/.deploy/gen_release_info.py000077500000000000000000000006151453136125300201320ustar00rootroot00000000000000#!/usr/bin/env python with open('CHANGELOG.md') as r, open('RELEASEINFO.md', 'w') as w: # skip over possible 'Unreleased' for line in r: if line.startswith('## Release'): # w.write(line[1:]) break for line in r: if line.startswith('## '): break # if line.startswith('#'): # line = line[1:] w.write(line) rtl_433-23.11/.github/000077500000000000000000000000001453136125300142555ustar00rootroot00000000000000rtl_433-23.11/.github/actions/000077500000000000000000000000001453136125300157155ustar00rootroot00000000000000rtl_433-23.11/.github/actions/style-check/000077500000000000000000000000001453136125300201305ustar00rootroot00000000000000rtl_433-23.11/.github/actions/style-check/action.yml000066400000000000000000000001631453136125300221300ustar00rootroot00000000000000name: 'Style Check' description: 'Check for common code style warnings' runs: using: 'node16' main: 'index.js' rtl_433-23.11/.github/actions/style-check/index.js000077500000000000000000000117231453136125300216040ustar00rootroot00000000000000#!/usr/bin/env node /** @file Source code style checks. Copyright (C) 2020 by Christian Zuckschwerdt 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. */ const path = require('path') const fs = require('fs') const log = console.error const MAX_LEN = 300 // this should likely be around 160 const replacement_character = '\uFFFD' // console.log(process.cwd()) // /home/runner/work/rtl_433/rtl_433 // console.log(__dirname) // /home/runner/work/rtl_433/rtl_433/.github/actions/style-check process.exitCode = [ 'include', 'src', 'src/devices', ].flatMap(glob_dir).concat([ 'CMakeLists.txt', 'conf/CMakeLists.txt', 'tests/CMakeLists.txt', ]) .filter(discard_vendor) .reduce((e, f) => e + style_check(f), 0) > 0 function discard_vendor(filename) { return filename.indexOf('/jsmn.') < 0 && filename.indexOf('/mongoose.') < 0 } function glob_dir(dir) { return fs.readdirSync(dir) .filter(filename => filename.endsWith('.h') || filename.endsWith('.c') || filename.endsWith('.txt') ) .map(filename => path.join(dir, filename) ) } function style_check(filename) { const strict = filename.indexOf('/devices/') >= 0 const txt = filename.endsWith('.txt') let errors = 0 let leading_tabs = 0 let leading_spcs = 0 let mixed_ws = 0 let need_cond = 0 let in_comment = false let line_number = 0 fs.readFileSync(filename, 'utf8') .split('\n') .map(line => { line_number++ const len = line.length if (len < 0) { log(`::error file=${filename},line=${line_number}::READ error`) errors++ } if (len >= MAX_LEN - 1) { log(`::error file=${filename},line=${line_number},col=${MAX_LEN}::LONG line error`) errors++ } if (line[len - 1] == '\r' || (len > 1 && line[len - 2] == '\r')) { log(`::error file=${filename},line=${line_number},col=${len - 1}::CRLF error`) errors++ } if (line.indexOf('/*')) { in_comment = true } if (line[0] == '\t') { log(`::error file=${filename},line=${line_number},col=0::TAB indented line`) leading_tabs++ } if (len >= 4 && line[0] == ' ' && line[1] == ' ' && line[2] == ' ' && line[3] == ' ') { leading_spcs++ } if (line[len - 1] == ' ' || line[len - 1] == '\t') { log(`::error file=${filename},line=${line_number},col=${len - 1}::TRAILING whitespace error`) errors++ } const invchr = line.indexOf(replacement_character) if (invchr >= 0) { log(`::error file=${filename},line=${line_number},col=${invchr + 1}::INVALID-UTF8 character error`) errors++ } const nonasc = line.search(/[^ -~]/) if (!in_comment && nonasc >= 0) { log(`::error file=${filename},line=${line_number},col=${nonasc + 1}::NON-ASCII character error`) errors++ } else if (nonasc >= 0) { //log(`::warning file=${filename},line=${line_number},col=${nonasc + 1}::NON-ASCII character`) } if (line.indexOf('(r_device *decoder') >= 0 && line[len - 1] == '{') { log(`::error file=${filename},line=${line_number},col=${len - 1}::BRACE function on newline error`) errors++ } if (line.indexOf('){') >= 0 && line.indexOf('}') < 0) { log(`::error file=${filename},line=${line_number},col=${len - 1}::STICKY-BRACE error`) errors++ } if (!txt && (line.indexOf('if(') >= 0 || line.indexOf('for(') >= 0 || line.indexOf('while(') >= 0)) { log(`::error file=${filename},line=${line_number},col=${len - 1}::STICKY-PAREN error`) errors++ } if (strict && line.indexOf('stdout') >= 0) { log(`::error file=${filename},line=${line_number},col=${len - 1}::STDOUT line`) errors++ } const p = line.indexOf('printf') if (strict && p >= 0) { if (p == 0 || line[p - 1] < '_' || line[p - 1] > 'z') { log(`::error file=${filename},line=${line_number},col=${len - 1}::PRINTF line`) errors++ } } if (need_cond && line.indexOf('if (!') < 0) { // we had an alloc but no check on the following line log(`::error file=${filename},line=${line_number},col=${len - 1}::ALLOC check error`) errors++ } need_cond = 0 if (line.indexOf('alloc(') >= 0 && line.indexOf('alloc()') < 0) { need_cond++ } if (line.indexOf('strdup(') >= 0 && line.indexOf('strdup()') < 0) { need_cond++ } if (line.indexOf('*/')) { in_comment = false } }) if (leading_tabs && leading_spcs) { mixed_ws = leading_tabs > leading_spcs ? leading_spcs : leading_tabs log(`::error file=${filename}::${mixed_ws} MIXED tab/spaces errors.`) } return errors + mixed_ws + leading_tabs } rtl_433-23.11/.github/workflows/000077500000000000000000000000001453136125300163125ustar00rootroot00000000000000rtl_433-23.11/.github/workflows/check.yml000066400000000000000000000053331453136125300201160ustar00rootroot00000000000000name: Build Analyze Check on: [push, pull_request] jobs: build_check_job: runs-on: ubuntu-latest name: Build with CMake steps: - name: Checkout uses: actions/checkout@v3 - name: Get latest CMake and Ninja uses: lukka/get-cmake@latest - name: Run CMake+Ninja uses: lukka/run-cmake@v10 with: configurePreset: dummy configurePresetCmdString: "[`-B`, `${{ runner.workspace }}/b/ninja`, `-GNinja`, `-DENABLE_RTLSDR=OFF`, `-DENABLE_SOAPYSDR=OFF`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `${{ runner.workspace }}/b/ninja`]" - name: Run CMake+UnixMakefiles uses: lukka/run-cmake@v10 with: configurePreset: dummy configurePresetCmdString: "[`-B`, `${{ runner.workspace }}/b/unixmakefiles`, `-G`, `Unix Makefiles`, `-DENABLE_RTLSDR=OFF`, `-DENABLE_SOAPYSDR=OFF`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `${{ runner.workspace }}/b/unixmakefiles`]" style_check_job: runs-on: ubuntu-latest name: Check code style steps: - uses: actions/checkout@v3 - name: Style Check uses: ./.github/actions/style-check maintainer_update_check_job: runs-on: ubuntu-latest name: Needs maintainer_update steps: - uses: actions/checkout@v3 - name: Working directory clean excluding untracked files run: | ./maintainer_update.py [ -z "$(git status --untracked-files=no --porcelain)" ] symbolizer_check_job: runs-on: ubuntu-latest name: Check symbol errors steps: - uses: actions/checkout@v3 - name: Symbolizer report run: | ./tests/symbolizer.py check analyzer_check_job: # https://github.com/actions/virtual-environments # - Ubuntu 22.04 ubuntu-22.04 # - Ubuntu 20.04 ubuntu-20.04 # https://apt.llvm.org/ # - Jammy (22.04) # - Focal (20.04) # - Bionic (18.04) runs-on: ubuntu-22.04 name: Analyze with Clang steps: - uses: actions/checkout@v3 - name: Install Clang run: | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key 2>/dev/null | sudo apt-key add - sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-14 main' -y sudo apt-get update -q sudo apt-get install -y clang-14 lld-14 libc++-14-dev libc++abi-14-dev clang-tools-14 - name: Clang Analyzer # excludes include/mongoose.h src/mongoose.c include/jsmn.h src/jsmn.c # exit code 1 if there is output run: | clang -Iinclude -DTHREADS --analyze -Xanalyzer -analyzer-output=text -Xanalyzer -analyzer-disable-checker=deadcode.DeadStores include/[a-ikln-z]*.h src/[a-ikln-z]*.c src/devices/*.c 2>&1 | tee analyzer.out [ ! -s analyzer.out ] rtl_433-23.11/.github/workflows/release.yml000066400000000000000000000347661453136125300204750ustar00rootroot00000000000000name: Release on: workflow_dispatch: push: tags: - '*' env: # from https://downloads.myriadrf.org/builds/PothosSDR/ pothos-ver: 2021.07.25-vc16 pothos-exe: PothosSDR-2021.07.25-vc16-x64.exe jobs: downloads_job: name: Downloads #runs-on: ubuntu-latest runs-on: windows-latest steps: - uses: actions/cache@v3 id: downloads with: path: ${{ runner.workspace }}/${{ env.pothos-exe }} key: download-${{ env.pothos-ver }} - name: Run Downloads if: steps.downloads.outputs.cache-hit != 'true' shell: bash working-directory: ${{ runner.workspace }} run: curl -L -O https://downloads.myriadrf.org/builds/PothosSDR/${{ env.pothos-exe }} release_job: name: Create release runs-on: ubuntu-latest outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} release_version: ${{ env.RELEASE_VERSION }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Create Release info # e.g. refs/tags/23.01 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/2') run: | echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV echo "RELEASE_NAME=Release ${GITHUB_REF#refs/*/}" >> $GITHUB_ENV echo "PRERELEASE=false" >> $GITHUB_ENV ./.deploy/gen_release_info.py - name: Create Pre-Release info # e.g. refs/tags/nightly or refs/heads/master if: github.event_name != 'push' || !startsWith(github.ref, 'refs/tags/2') run: | echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV echo "RELEASE_NAME=Pre-Release ${GITHUB_REF#refs/*/}" >> $GITHUB_ENV echo "PRERELEASE=true" >> $GITHUB_ENV ./.deploy/gen_nightly_info.sh - uses: softprops/action-gh-release@v1 id: create_release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ env.RELEASE_VERSION }} name: ${{ env.RELEASE_NAME }} body_path: RELEASEINFO.md #draft: true prerelease: ${{ env.PRERELEASE }} build_mingw_job: needs: release_job if: ${{ needs.release_job.result != 'failure' }} strategy: fail-fast: false matrix: arch: [i686, x86-64] runs-on: ubuntu-latest name: Build with Mingw-w64 on ${{ matrix.arch }} steps: - uses: actions/checkout@v3 - name: "Install Mingw-w64" run: | sudo apt-get update -q -y sudo apt-get install -q -y gcc-mingw-w64-base binutils-mingw-w64-${{ matrix.arch }} gcc-mingw-w64-${{ matrix.arch }} mingw-w64-${{ matrix.arch }}-dev gcc-mingw-w64 gcc-multilib p7zip-full - name: "Build with Mingw-w64" env: RTLSDR: OFF CMAKE_TOOLCHAIN_FILE: cmake/Toolchain-gcc-mingw-w64-${{ matrix.arch }}.cmake run: ./.ci/scripts/do_build.sh - name: "Sysroot Build with Mingw-w64" run: ./.ci/scripts/do_sysroot.sh - name: "Upload Release Asset" if: matrix.arch == 'x86-64' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | mv rtl_433-win-x64.zip rtl_433-win-x64-${{ needs.release_job.outputs.release_version }}.zip gh release upload ${{ needs.release_job.outputs.release_version }} rtl_433-win-x64-${{ needs.release_job.outputs.release_version }}.zip - name: "Upload Release Asset" if: matrix.arch == 'x86-64' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | mv rtl_433-win-x32.zip rtl_433-win-x32-${{ needs.release_job.outputs.release_version }}.zip gh release upload ${{ needs.release_job.outputs.release_version }} rtl_433-win-x32-${{ needs.release_job.outputs.release_version }}.zip build_msvc_job: needs: [downloads_job, release_job] if: ${{ needs.downloads_job.result != 'failure' && needs.release_job.result != 'failure' }} strategy: fail-fast: false matrix: os: [windows-2019, windows-2022] platform: [x64, Win32] # from https://downloads.myriadrf.org/builds/PothosSDR/ #pothos-ver: [2021.07.25-vc16] include: - os: windows-2019 generator: Visual Studio 16 2019 - os: windows-2022 generator: Visual Studio 17 2022 runs-on: ${{ matrix.os }} name: ${{ matrix.generator }} ${{ matrix.platform }} CMake (MSBuild) on ${{ matrix.os }} steps: - run: choco install openssl if: matrix.platform == 'x64' - uses: actions/checkout@v3 - uses: actions/cache@v3 id: downloads if: matrix.platform == 'x64' with: path: ${{ runner.workspace }}/${{ env.pothos-exe }} key: download-${{ env.pothos-ver }} - name: Run Downloads if: matrix.platform == 'x64' && steps.downloads.outputs.cache-hit != 'true' shell: bash working-directory: ${{ runner.workspace }} run: curl -L -O https://downloads.myriadrf.org/builds/PothosSDR/${{ env.pothos-exe }} - name: Install Deps if: matrix.platform == 'x64' shell: bash working-directory: ${{ runner.workspace }} run: | mkdir -p pothos 7z x -opothos -y ${{ env.pothos-exe }} echo "POTHOS_PATH=$(pwd)/pothos" >> $GITHUB_ENV - name: Get latest CMake and Ninja uses: lukka/get-cmake@latest # Note: this assumes ${{ runner.workspace }} == ${{ github.workspace }}/.. - name: CMake+None uses: lukka/run-cmake@v10 with: configurePreset: dummy configurePresetCmdString: "[`-B`, `../b/rtl_433`, `-G${{ matrix.generator }}`, `-A${{ matrix.platform }}`, `-DENABLE_RTLSDR=OFF`, `-DENABLE_SOAPYSDR=OFF`, `-DENABLE_OPENSSL=OFF`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `../b/rtl_433`, `--config`, `Release`]" - name: CMake+RTLSDR+SOAPYSDR+TLS uses: lukka/run-cmake@v10 env: CMAKE_PREFIX_PATH: ${{ runner.workspace }}\pothos if: matrix.platform == 'x64' with: configurePreset: dummy configurePresetCmdString: "[`-B`, `../b/rtl_433-rtlsdr-soapysdr-tls`, `-G${{ matrix.generator }}`, `-A${{ matrix.platform }}`, `-DCMAKE_PREFIX_PATH=${{ env.POTHOS_PATH }}`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=ON`, `-DENABLE_OPENSSL=ON`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `../b/rtl_433-rtlsdr-soapysdr-tls`, `--config`, `Release`]" - name: CMake+RTLSDR+SOAPYSDR uses: lukka/run-cmake@v10 env: CMAKE_PREFIX_PATH: ${{ runner.workspace }}\pothos if: matrix.platform == 'x64' with: configurePreset: dummy configurePresetCmdString: "[`-B`, `../b/rtl_433-rtlsdr-soapysdr`, `-G${{ matrix.generator }}`, `-A${{ matrix.platform }}`, `-DCMAKE_PREFIX_PATH=${{ env.POTHOS_PATH }}`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=ON`, `-DENABLE_OPENSSL=OFF`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `../b/rtl_433-rtlsdr-soapysdr`, `--config`, `Release`]" - name: CMake+RTLSDR+TLS uses: lukka/run-cmake@v10 env: CMAKE_PREFIX_PATH: ${{ runner.workspace }}\pothos if: matrix.platform == 'x64' with: configurePreset: dummy configurePresetCmdString: "[`-B`, `../b/rtl_433-rtlsdr-tls`, `-G${{ matrix.generator }}`, `-A${{ matrix.platform }}`, `-DCMAKE_PREFIX_PATH=${{ env.POTHOS_PATH }}`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=OFF`, `-DENABLE_OPENSSL=ON`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `../b/rtl_433-rtlsdr-tls`, `--config`, `Release`]" - name: CMake+RTLSDR uses: lukka/run-cmake@v10 env: CMAKE_PREFIX_PATH: ${{ runner.workspace }}\pothos if: matrix.platform == 'x64' with: configurePreset: dummy configurePresetCmdString: "[`-B`, `../b/rtl_433-rtlsdr`, `-G${{ matrix.generator }}`, `-A${{ matrix.platform }}`, `-DCMAKE_PREFIX_PATH=${{ env.POTHOS_PATH }}`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=OFF`, `-DENABLE_OPENSSL=OFF`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `../b/rtl_433-rtlsdr`, `--config`, `Release`]" - name: Package dist if: matrix.platform == 'x64' shell: bash working-directory: ${{ runner.workspace }} run: | mkdir -p dist cp pothos/bin/{SoapySDR.dll,libusb-1.0.dll,rtlsdr.dll,vcruntime140.dll,vcruntime140_1.dll,pthreadVC2.dll} dist cp b/rtl_433-rtlsdr-soapysdr-tls/src/Release/rtl_433.exe dist/rtl_433-rtlsdr-soapysdr-tls.exe cp b/rtl_433-rtlsdr-soapysdr/src/Release/rtl_433.exe dist/rtl_433-rtlsdr-soapysdr.exe cp b/rtl_433-rtlsdr-tls/src/Release/rtl_433.exe dist/rtl_433-rtlsdr-tls.exe cp b/rtl_433-rtlsdr/src/Release/rtl_433.exe dist/rtl_433-rtlsdr.exe cp b/rtl_433/src/Release/rtl_433.exe dist/rtl_433.exe cp rtl_433/.deploy/WINDOWS-MSVC.txt dist/README.txt ls -al dist 7z a rtl_433-win-msvc-x64.zip ./dist/* - name: "Upload Release Asset" if: matrix.os == 'windows-2019' && matrix.platform == 'x64' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ github.token }} GH_REPO: ${{ github.repository }} shell: bash working-directory: ${{ runner.workspace }} run: | mv rtl_433-win-msvc-x64.zip rtl_433-win-msvc-x64-${{ needs.release_job.outputs.release_version }}.zip gh release upload ${{ needs.release_job.outputs.release_version }} rtl_433-win-msvc-x64-${{ needs.release_job.outputs.release_version }}.zip build_linux_job: strategy: fail-fast: false matrix: os: [ubuntu-20.04, ubuntu-22.04] runs-on: ${{ matrix.os }} name: Build with CMake on ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Install SDR run: | sudo apt-get update -q sudo apt-get install -y librtlsdr-dev libsoapysdr-dev libssl-dev - name: Get latest CMake and Ninja uses: lukka/get-cmake@latest - name: Run CMake+Ninja uses: lukka/run-cmake@v10 with: configurePreset: dummy configurePresetCmdString: "[`-B`, `${{ runner.workspace }}/b/ninja`, `-GNinja`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=ON`, `-DENABLE_OPENSSL=ON`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `${{ runner.workspace }}/b/ninja`, `--config`, `Release`]" - name: Run CMake+UnixMakefiles uses: lukka/run-cmake@v10 with: configurePreset: dummy configurePresetCmdString: "[`-B`, `${{ runner.workspace }}/b/unixmakefiles`, `-GUnix Makefiles`, `-DENABLE_RTLSDR=ON`, `-DENABLE_SOAPYSDR=ON`, `-DENABLE_OPENSSL=ON`]" buildPreset: dummy buildPresetCmdString: "[`--build`, `${{ runner.workspace }}/b/unixmakefiles`, `--config`, `Release`]" build_arch_job: if: ${{ false }} # disable for now needs: release_job # The host should always be Linux runs-on: ubuntu-latest strategy: fail-fast: false # jessie, ubuntu16.04 has no SoapySDR # jessie has trouble linking libusb-1.0 # stretch has SoapySDR 0.5 which we don't support # buster has broken librtlsdr pkg-config # fedora_latest packages need to be verified # alpine_latest packages need to be verified matrix: # arch: [armv6, armv7, aarch64, s390x, ppc64le] arch: [armv7, aarch64, ppc64le] # distro: [jessie, stretch, buster, ubuntu16.04, ubuntu18.04, ubuntu20.04, fedora_latest, alpine_latest] distro: [stretch, buster, ubuntu16.04, ubuntu18.04, ubuntu20.04, fedora_latest] include: - arch: armv6 distro: stretch - arch: armv6 distro: buster name: Build on ${{ matrix.distro }} ${{ matrix.arch }} steps: - uses: actions/checkout@v3 - uses: uraimo/run-on-arch-action@v2.0.8 id: runcmd with: arch: ${{ matrix.arch }} distro: ${{ matrix.distro }} # Not required, speed up builds by storing container images in # GitHub package registry. #githubToken: ${{ github.token }} # Install dependencies in the cached container. install: | case "${{ matrix.distro }}" in jessie|stretch|ubuntu16.04) apt-get update -q -y apt-get install -q -y lsb-release build-essential libtool pkg-config cmake librtlsdr-dev libssl-dev ;; buster|ubuntu*) apt-get update -q -y apt-get install -q -y lsb-release build-essential libtool pkg-config cmake librtlsdr-dev libsoapysdr-dev libssl-dev ;; fedora*) dnf -y update dnf -y install redhat-lsb make gcc libtool pkg-config cmake rtl-sdr-devel SoapySDR-devel openssl-devel ;; alpine*) apk update apk add lsb-release build-essential libtool pkg-config cmake librtlsdr-dev libsoapysdr-dev libssl-dev ;; esac run: | uname -a lsb_release -sc || echo NO lsb_release echo Release ${{ needs.release_job.outputs.release_version }} mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=../dist .. cmake --build . cmake --build . --target install - name: Install FPM run: | sudo apt-get update -q -y sudo apt-get install -q -y ruby ruby-dev rubygems sudo gem install --no-document fpm - name: Package with FPM run: | ls -al "${PWD}/dist" case "${{ matrix.distro }}" in stretch) libsoapy=libsoapysdr0.5-2 ;; buster) libsoapy=libsoapysdr0.6 ;; fedora*) libsoapy=SoapySDR ;; *) libsoapy=libsoapysdr0.7 ;; esac fpm -s dir -t deb -n rtl433 -v ${{ needs.release_job.outputs.release_version }}-1${{ matrix.distro }} -C "${PWD}/dist" \ -d libusb-1.0-0 -d libssl1.1 -d librtlsdr0 -d $libsoapy \ --deb-suggests soapysdr-module-all \ --deb-suggests soapysdr-tools \ --architecture ${{ matrix.arch }} \ --maintainer zany@triq.net \ --description "Program to decode radio transmissions" \ --url https://triq.org/ ls -al ls -al "${PWD}/dist" - name: "Upload Release Asset" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh release upload ${{ needs.release_job.outputs.release_version }} rtl433_${{ needs.release_job.outputs.release_version }}-1${{ matrix.distro }}_${{ matrix.arch }}.deb rtl_433-23.11/.gitignore000066400000000000000000000007711453136125300147120ustar00rootroot00000000000000Makefile Makefile.in .deps .libs *.o *.lo *.la *.pc aclocal.m4 acinclude.m4 aminclude.am m4/*.m4 autom4te.cache config.h* config.sub config.log config.status config.guess configure compile depcomp missing ltmain.sh install-sh stamp-h1 libtool Doxyfile .dirstamp tags .tarball-version .version .*.swp doc/ src/rtl_433 CMakeCache.txt build*/ .cproject .settings .project *.orig *~ *.tlog *.ipdb *.iobj *.idb *.lastbuildstate *.db *.opendb _*/ rtl_433_tests .vs .idea cmake-build-debug/ .DS_Store rtl_433-23.11/AUTHORS000066400000000000000000000016511453136125300137700ustar00rootroot00000000000000Benjamin Larsson Christian W. Zuckschwerdt Sven Killig rct johan Thomas Kerpe Jens Jensen Sven Martin Hauke magellannh jules69350 arantius andreaaizza Trueffelwurm Tomasz Brzezina Paul F-Y Corné van Strien Baruch Even Andrea Helge Weissig Robert Fraczkiewicz Nicola Quiriti Petr Konecny Tom Felker Pasquale 'sid' Fiorillo Tommy Vestermark Aaron Spangler rtl_433-23.11/CHANGELOG.md000066400000000000000000001245671453136125300145450ustar00rootroot00000000000000# Changelog ## Release 23.11 (2023-11-28) ### Breaking Changes - Changed conf dir defaults to just SYSCONFDIR (#2660) - Changed verbosity of Protocols Registered output (#1700) - Changed example conf file to use defaults (#2670) - Changed help texts to print to stdout (#2542) - Fixed Oregon Scientific channel renumbering, BREAKING change to THN132N channel 3 (#2033) - Changed MQTT client ID to contain all params (#1129) - Fixed GEO-minim matching, BREAKING change to id field (#2363) - Changed Inkbird-ITH20R temperature2_C to temperature_2_C BREAKING change (#2220) ### Highlights - Added support for Schou 72543 rain sensor (#2686) - Added support for Bresser Lightning and Bresser Air Quality (#2698) - Added support for Tekelek oil gauge (#2306) - Added support for Nissan Leaf TPMS (#2536) - Added support for Carchet TPMS (#2677) - Added support for Bresser water leakage sensor PN: 7009975 (#2590) - Added support for discovering Govee water sensors to rtl_433_mqtt_hass (#2605) - Added support for newer Chuango DWC-102 close command (#2630) - Added support for TFA Stratos 30.3151 and improve Fineoffset WH1050 (#2549) - Added support for IROX ETS69 to Ewig Emos-TTX201 (#2547) - Added support for ThermoPro TX-2C (#2466) - Added support for Fineoffset WS90 (#2448) - Added support for Acurite 592TX (#2457) - Added support for Oregon Scientific AWR129 BBQ thermometer (#2439) - Added support for Celsia CZC1 (#2391) - Added support for Baldr/Rainpoint rain gauge (#2394) - Added support for EezTire-E618 TPMS10ATC (#2387) - Added support for LaCrosse TX31U-IT (#2386) - Added support for Revolt Energy Monitor NC-5462 (#2361) - Added support for Emax EM3551H with Gust without UV/Lux to Emax-W6 (#2376) - Added support for Wireless M-Bus Mode T Downlink (#2366) - Added support for Gasmate-BA1008 (#2359) - Added support for Oil-SonicSmart (#2279) - Added support for Watchman Sonic Advanced / Plus decoder (#2323) - Added support for CED7000 timer (#2319) - Added support for Emax Weather Sensor, improves Altronics X7064 sensor (#2300) - Added support for TFA Dostmann 14.1504 Radio-controlled grill and meat thermometer (#2296) - Added support for new revision of Govee H5054 water leak detector (#2273) - Added support for Vauno EN8822C (#2231) - Added support for WEC-2103 temperature/humidity sensor (#2185) - Added support for Neptune R900 flow meters (#2180) - Added support for SRSmith SRS-2C-TX Pool Remote Control (#2147) - Added support for Kia Rio III (UB) and Hyundai TPMS sensors (#2083) - Added support for TyreGuard 400 TPMS (#1976) - Added support for GEO minim+ energy monitor (#1970) - Added support for longer EFTH800 messages (#2278) - Added decoder conf for PHOX garage gate opener (#2560) - Added decoder conf for Driveway alarm motion sensor I8-W1901 (#2493) - Added decoder conf for Reolink doorbell (#2277) - Added decoder conf for SWETUP garage door remote (#2403) - Added decoder conf for ELRO AB440 remote (#2066) - Added decoder conf for xmas tree remote 2APJZ-CW002 (#2250) - Added decoder conf for GE Smartremote Plus (#2249) - Added standardized detect key for Govee-Water (#2625) - Added restartable SDR device (#2411) - Changed to async SDR acquire thread (#1978) - Changed to second Ctrl-C is a hard abort - Added log output, log redirect, colored KV log (#2254) ### Changed - Changed rtl_433_mqtt_hass.py to use moisture class (#2726) - Changed rtl_433_mqtt_hass.py to add battery_mV (#2725) - Changed Fineoffset-WS90 packet size check (#2702) - Fixed logging message in HA script (#2696) - Added Pool/Spa Thermometer PN 7009973 note to Bresser-6in1 (#2689) - Added php example stream script (#2687) - Added checksum and battery_ok to WEC-2103 (#2662) - Changed version number to exclude nightly tag - Changed EezTire-E618 checksum, include flags (#2664) - Changed startup help text to the actual help page (#2659) - Improved some strcpy strncpy to snprintf - Improved all plain sprintf to snprintf - Fixed Somfy-IOHC length check (#2655) - Added warning if firewall blocks loopback (#2621) - Improved HA script with precipitation and wind speed class (#2643) - Fixed Honeywell-CM921 temperature msg (#2637) - Added Lidl Auriol 4-LD6313 and 4-LD5972 temperature/rain sensor (#2633) - Improved HA script with current class (#2626) - Improved handling of units within HA UI (#2624) - Improved HA script with detailed units (#2607) - Fixed HA script allow list id typo (#2602) - Fixed Fineoffset-WH1050 return value (#2600) - Fixed Inkbird-ITH20R battery_ok key and range (#2596) - Fixed HA script remove device name from entities (#2594) - Fixed HA script topics (#2593) - Fixed malformed json on empty row print (#2588) - Fixed Ecowitt-WS90 extra data output (#2585) - Added description of startup bit to Bresser-5in1 (#2583) - Fixed various spelling (#2579) - Added lower temp bounds to Acurite-5n1, Acurite-Atlas (#2571) - Added humidity_1, humidity_2 to rtl_433_mqtt_hass (#2567) - Added timestamp to logs in rtl_433_mqtt_hass (#2566) - Fixed HASS script rain_rate_mm_h typo (#2565) - Fixed Eurochron-EFTH800 radio_clock hour decoding (#2526) - Changed Fineoffset-WS90 to add firmware version (#2517) - Changed ThermoPro TX-2C to enable humidity (#2514) - Added radio clock to Fineoffset-WH1050 (#2463) - Added battery voltage to EcoWitt-WH40 (#2488) - Changed EMOS-E6016 wind speed and battery (#2484) - Improved Holman ws5029, Add support for AOK-5056 and correction for Emax (#2419) - Fixed current frequency and sample rate info (#2468) - Changed rtl_433_mqtt_hass to enable passing custom topics (PR #2289) - Added extra digit to Oregon Scientific for AWR129 (#2446) - Changed Acurite 896 rain gauge to default enabled (#2430) - Changed CM160 output to double (#2428) - Fixed CM160 energy calculation factor (#2427) - Changed r_device.fields to constant pointer (#2421) - Added total energy kWh to CM160 readings (#2418) - Fixed Fitipower FC0012 gain quirk (#2417) - Added unlockable rtl_tcp control (#2412) - Fixed rtl_tcp for slow send buffers - Fixed LibreSSL PSK error (#1569) - Fixed Oil-SonicAdv missing messages - Fixed LaCrosse-R1/LaCrosse-R3 rain value (#2313) - Added char const check to symbolizer (#2390) - Fixed flowis protocol decoding, alarm and back flow parameters. - Changed literals to string const for strict discarded-qualifiers warnings (#2379) - Added Schrader 3039 TPMS for Infiniti Nissan Renault note to Schrader-SMD3MA4 - Fixed Emax units (#2374) - Added TLS debug info for influxs and mqtts - Fixed Emax LUX decoding (#2346) - Fixed Vauno-EN8822C false positives (#2364) - Added Flowis protocol decoder (#2357) - Added Wireless M-Bus, Mode T Downlink (#2366) - Fixed out-of-bounds in Klimalogg-Pro (#2362) - Fixed Somfy-RTS for wrong bitrate (#2356) - Changed all r_device declarations to const (#2352) - Fixed pointer restrict for C++ compilers (#2351) - Fixed TFA-141504v2 decoder length check (#2339) - Added radio clock decode to Eurochron-EFTH800 (#2331) - Changed Somfy-IOHC to recognize more messages (#2258) - Fixed Oregon Scientific negative temp, add BCD sanity checks (#2086) - Added ESIC/SCMplus fields to rtl_433_mqtt_hass (#2114) - Changed LaCrosse TX invalid humidity handling (#2335) - Fixed json keys for wmbus to be unique (#2316) - Fixed Bresser-ProRainGauge rain digits (#2312) - Fixed light reading on Cotech-367959 when no sensor installed (#2305) - Fixed HCS200 serial ID decoding (#2308) - Added TLS options to InfluxDB output - Added output log level options (#2282) - Added ANSI colors for Windows 10 (#2280) - Fixed to use pthread compat on WIN32 always - Fixed battery flag in AmbientWeather-WH31E/WH31B (#2272) - Changed more fprintf to log prints - Changed fprintf to log prints (#2266) - Changed verbosity to match log level (#2264) - Added basic logger (#2263) - Fixed JSON output string escaping - Fixed Win32 thread calling convention - Added decode_dm flex option (#2241) ## Release 22.11 (2022-11-19) ### Breaking Changes - Fixed irregular model names (#1883) - "Inkbird ITH-20R" -> "Inkbird-ITH20R" - "LaCrosse-WS7000-27/28" -> "LaCrosse-WS700027" - "LaCrosse-WS7000-22/25" -> "LaCrosse-WS700022" - "LaCrosse-WS7000-16" -> "LaCrosse-WS700016" - "LaCrosse-WS7000-15" -> "LaCrosse-WS700015" - "LaCrosse-WS7000-20" -> "LaCrosse-WS700020" - "LaCrosse-WS2500-19" -> "LaCrosse-WS250019" - "Abarth 124 Spider" -> "Abarth-124Spider" - "Jansite Solar" -> "Jansite-Solar" - "Klimalogg Pro" -> "Klimalogg-Pro" - "Secplus_v1" -> "Secplus-v1" - "SCM+" -> "SCMplus" - Changed light_klx to light_lux in Bresser-7in1 (#2061) - Removed VS15 project files ### Highlights - Added rtl_tcp pass-through output (#1915) - Added realtime replay option for file inputs - Added support for Badger ORION water meter (#2089) - Added support for Rubicson pool thermometer 48942 (#2137) - Added support for Fine Offset WN34 temperature sensor (#2122) - Added support for KS200/KS300 to ELV WS2000 (#2103) - Added support for Maverick XR-30 (#2090) - Added support for Fine Offset WH45 air quality sensor - Added support for HCS200/HCS300 based remotes with FSK transmitters (#2052) - Added support for Emos E6016 Rain Gauge (#2032) - Added support for ANT and ANT+ devices (#2004) - Added support for Altronics X7064 sensor (#2000) - Added support for EMOS 6016 (#1983) - Added support for FineOffset WS80 weather station (#1965) - Added support for Renault-0435R TPMS (#1924) - Added support for AcuRite 01190 Leak Detector (#1953) - Added support for Regency ceiling fans (#1948) - Added support for Microchip HCS300 KeeLoq remotes BREAKING CHANGE (#1752) - Added support for Yale HSA (#1929) - Added support for SimpliSafe-Gen3 (#1257) - Added support for AVE TPMS (#1909) - Added decoder conf for sgooway door detector (#1707) - Added decoder conf for ContinentalRemote (#2125) - Added decoder conf for Mondeo remote (#1282) - Added decoder conf for LeakDetector - Added decoder conf for Heatilator-Gas-Log (#1963) - Added decoder conf for Honeywell-Fan (#1962) - Added decoder conf for DrivewayAlert (#1928) - Added decoder conf for GhostControls (#1922) - Added Threads if available ### Changed - Added note regarding WH51 915MHz decoding (#2236) - Added publish secret knocks as device automations - Added time, channel, and button device automation triggers - Improved false positives for acurite_01185m (#2214) - Changed rtl_433_mqtt_hass rain value template round to two digits (#2210) - Changed rtl_433_mqtt_hass value templates round to one digit (#2209) - Fixed Chuango devices with some zeroes in their ID (#2205) - Changed Proove/Nexa/Kaku to support Smartwares SH4-90152 (#2174) - Changed Acurite TXR decoder to improve validation (#2162) - Fixed Efergy-e2CT current above 53 Amp (#2166) - Added sanity check to Ambient Weather F007th (#2155) - Added decode symbol helper and flex option (#2161) - Added InFactory PT-310 support to Rubicson (#2123) - Added HTTP API example scripts - Changed rain gauge multiplier for Auriol-4LD5661 (#2129) - Added CSV names for flex getters with unique mode - Added php example script (#2087) - Improved Ford TPMS decoder (#2071) - Fixed crash when reading a conf file (#2068) - Changed SDR data buffers to persist valid - Added ERT-SCM consumption data to mqtt hass mappings (#2023) - Added id filter to mqtt hass (#1988) - Fixed overflow in Acurite-00275rm (#2012) - Changed the PCM/NRZ/RZ naming - Added cmake option to select IPv6 support - Fixed EMOS-6016 checksum, add DCF77 - Added bitbuffer_find_repeated_prefix function - Fixed pulse reset on spurious pulses (#1982) - Removed confusing -G register all option - Changed hass script duplicate dict key 'light_lux' back to 'lux' for legacy reasons (#1989) - Added Honeywell-cm921 Ticker and Heat Demand commands (#1985) - Changed most decoder-verbose to log level - Changed fprintf in decoders to decoder_log - Added decoder log to replace bitbuffer bitrow print - Added decoder log to replace fprintf - Fixed Digitech-XC0324 humidity readings (FT-005TH Sensor) (#1971) - Changed wt0124 to use additional checksum (#1959) - Added diagnostic entity category to mqtt hass example (#1952) - Removed invalid "weather" device class in HASS script (#1584) - Added trigger stream output (#1910) - Changed Hideki to accept short sync (#1908) ## Release 21.12 (2021-12-14) ### Highlights - Added noise stats, autolevel, and squelch (#1763) - Added automatic file format detection from filename - Added support for SmartFire Proflame 2 remote control (#1905) - Added support for Lacrosse TX34 rain gauge (#1890) - Added support for Telldus-FT0385R (#1841) - Added support for GE Choice Alert wireless alarm sensors (#1768) - Added support for Porsche Boxter/Cayman TPMS - Added support for Funkbus/Instafunk (#1896) - Added support for Truck TPMS (#1893) - Added support for LaCrosse LTV-W1 wind sensor (#1855) - Added support for Auriol 4-LD5661 temperature/rain sensor (#1843) - Added support for Linear Megacode Remote (#1834) - Added support for EnOcean ERP1 decoder (#1829) - Added support for Acurite-01185M (#1824) - Added support for ATech-WS308 temperature sensor (#1605) - Added support for RainPoint sensor (#1781) - Added support for Inkbird ITH-20R - Added support for Clipsal CMR112 cent-a-meter power meter (#1814) - Added support for Govee Water Leak Detector H5054 and Govee Contact Sensor B5023 (#1653) - Added support for Markisol curtain remote (#1775) - Added support for Oregon Scientific BTHR918 (#1767) - Added UV index add decimals to Bresser-7in1 (#1789) - Changed InfluxDB output of 'mic' from field to tag (#1773) - Added biastee, digital_agc, direct_samp, offset_tune option for rtlsdr and rtl_tcp (#1788) - Added QoS to MQTT options (#1769) ### Changed - Changed PCM slicer to measure bit length in more cases (#1897) - Added CS8 as file input format - Added decoder priority stages (#1895) - Fixed fprintf to use an unsigned marker when an unsigned value is given (#1872) - Added RTL_433_REDUCE_STACK_USE to reduce size of bitbuffers (#1863) - Fixed rainpoint msg buffer must be initialized (#1862) - Fixed Reduce stack use in slicers (#1860) - Fixed Windows CreateTimerQueueTimer alarm handle is not valid for CloseHandle (#1859) - Changed HASS script to logging (#1851) - Added SwitchDocLabs SM23 note - Added SwitchDocLabs F016TH note - Added SwitchDocLabs FT020T note - Fixed Inovalley-kw9015b rain bits (#1660) - Added battery_ok to Bresser-7in1 (#1795) - Added HASS long term statistics (#1835) - Added bitbuffer row spill - Updated Govee Leak Sensor with new parity check (#1810) - Fixed Springfield-Soil/AlectoV1 false positives - Fixed LaCrosse-TH3 checksum (#1398) - Added cmake found lib versions output ## Release 21.05 (2021-05-09) ### Highlights - Last release to support Autotools (autoconf, automake) builds (#1644) - Last release to offer "oldmodel" keys (deprecated since 2020) - Added Github Release builds for Windows - Added GPSd tags option (#1636) - Added optional TLS support to MQTT (#1633) - Added OpenSSL support for influxs TLS (#1569) - Added support for ELK-319DWM, Alula RE101 to Interlogix (#1711) - Added conf for Tesla charge port opener (#1704) - Added support for Hyundai-VDO TPMS (#1643) - Added support for TX25U dual channel temp sensor - Added support for Honeywell CM921/BDR91/Evohome (#1336) - Added support for Auriol AFT 77 B2 - Added support for Auriol AHFL (#1683) - Added support for Bresser Professional Rain Gauge (#1676) - Added support for TFA Marbella pool thermometer (#1675) - Added support for Amazon Basics Meat Thermometer (#1671) - Added support for Owl 180i support - Added support for Jansite TPMS Model Solar (#1663) - Added support for Cavius alarms (#1648) - Added support for Security plus v1 (#1483) - Added conf for Skylink HA-434TL motion sensor (s.a. #814) - Added support for Burnhard BBQ thermometer (#1624) - Added support for wmbus water meter Maddalena (#1610) - Added conf for ATC Technology LMT-430 (#1600) - Added support for Blueline PowerCost Monitor - Added conf for FAN-53T (#1588) - Added support for Acurite 515 fridge/freezer sensors (#1579) - Added support for TelFix-RadioLoop (#1571) - Added conf for Salus RT300RF thermostat, Heatmiser PRT-W thermostat (#1573) ### Changed - Added Release build workflow - Added pressure_kPa key for HA (#1712) - Added support for ELK-319DWM, Alula RE101 to Interlogix (#1711) - Fixed and style Honeywell CM921 - Added option to set force_update for all sensors (#1695) - Added Tesla charge port opener decoder conf (#1704) - Added battery flags to Bresser 7in1 (#1703) - Fixed Hyundai-VDO TPMS - Added Hyundai-VDO TPMS (#1643) - Added X10 Dim, Bright, All Lights ON, and All Off commands (#1687) - Added support for TX25U dual channel temp sensor - Fixed code warnings - Fixed code style - Added forgotten id - Added Honeywell CM921/BDR91/Evohome decoder (#1336) - Added Auriol AFT 77 B2 protocol decoder - Fixed Holman-WS5029 rain count (#1686) - Fixed explanation of supposed PM10 (estimated) value (#1678) - Added support for Auriol AHFL protocol (#1683) - Fixed PSI calculation for Ford TPMS - Added support for higher pressure range in Ford TPMS - Fixed secplus_v1 endless loop (#1662) - Fixed secplus_v1 overflow - Added support for some Ecowitt WH41 sensor signals - Added comment regarding PM10 readings in the FineOffset WH0290 decoder - Added support for Bresser Professional Rain Gauge (#1676) - Added TFA Marbella pool thermometer protocol decoder (#1675) - Added Amazon Basics Meat Thermometer decoder (#1671) - Fixed exit if http server can't start - Fixed missing sdr_stop for WIN32 - Added Owl 180i support - Added website and sensor specifications for Jansite TPMS Model Solar (#1666) - Added decoder for jansite solar tpms (#1663) - Added Ford TPMS pressure and temperature (#1654) - Fixed http redirect to index for Chrome - Added support for Cavius alarms (#1648) - Added mqtt token slash accepts any character - Added variable fm low pass filter option - Added support for Security plus v1 (#1483) - Added GPSd tags option (#1636) - Added FineOffset WH0290 extra fields (#1639) - Fixed Hideki Gust speed by Udo Kirsten - Added option for multiple data tags - Added optional TLS support to MQTT (#1633) - Added OpenSSL support for influxs TLS (#1569) - Added LaCrosse TX141TH-Bv2 checksum - Changed rain field format for WS2032 - Added m_bus decoded values + HCA (#1630) - Changed battery_ok, rain field for WS2032 - Fixed m_bus Show invalid dates as invalid (#1628) - Fixed mqtt retain on hass script (#1602) - Added Skylink HA-434TL motion sensor conf (s.a. #814) - Added support for Burnhard BBQ thermometer (#1624) - Added TFA 30.3208.02 note (#1622) - Added raw pulse printing mode - Added support for parsing timedate in wbus (#1616) - Added Battery Level for Fineoffset WH0290 Wireless Air Quality Monitor (#1617) - Fixed Blueline tweaks and improvements (#1590) - Added support for wmbus water meter Maddalena (#1610) - Changed soil moisture to percent display (#1595) - Added ATC Technology LMT-430 conf (#1600) - Fixed buffer length in honeywell (#1598) - Fixed buffer size error (#1596) - Fixed FineOffset WH1050 field widths (#1592) - Added support for Blueline PowerCost Monitor - Added FAN-53T decoder conf (#1588) - Added support for Acurite 515 fridge/freezer sensors (#1579) - Fixed invalid HASS "weather" device_class (#1548) - Fixed rtlsdr_read_async() abort on read stall (#1581) - Fixed rtlsdr_set_freq_correction non-error code - Added support for UV index and light intensity readings in Cotech (#1575) - Fixed false positive bug in Nexus (#1576) - Added support for TelFix-RadioLoop to Somfy (#1571) - Added Thermostat example conf files with mqtt outputs (#1573) - Added lacrosse decoder sanity checks ## Release 20.11 (2020-11-13) ### Highlights - HTTP server, JSON-RPC - Added RfRaw analyzer output and format input support - Added support for LaCrosse Technology View LTV-R1 Rainfall Gauge - Added support for ECODHOME smart socket - Added support for LaCrosse Technology View TH2 Thermo/Hygro sensor - Added support for Bresser 6-in-1, 7-in-1 weather station - Added support for LaCrosse Technology View TH3 Thermo/Hygro Sensor - Added support for LaCrosse LTV-WR1 Multi Sensor - Added support for Nice Flor-s remote - Added support for Schrader TPMS SMD3MA4 (Subaru) - Added support for MightyMule Driveway Alarm FM231 - Added support for Somfy RTS - Added support for LaCrosse LTV-WSDTH01 - Added support for TFA 30.3221.02 Temperature/Humidity sensor - Added support for Security plus v2 keyfob - Added support for Acurite Atlas and Atlas Lightning Detector - Added support for Acurite 590TX - Added support for ThermoPro TX2 - Added support for IDM and NetIDM decoders - Added support for Insteon decoder - Added support for LaCrosse TX141B - Added support for Sharp SPC775 - Added support for Missil ML0757 - Added support for Fineoffset WH32 - Added support for Abarth124 TPMS sensor - Added support for Fine Offset WH1080 FSK version - Added support for SCM+ decoder - Added support for Kerui WD51 Water leak sensor - Added support for Cotech 36-7959 - Added support for Eurochron EFTH-800 - Added support for Visonic Powercode devices - Added support for Klimalogg decoder and needed nrzs demodulator ### Changed - Added support for LaCrosse Technology View R1 Rainfall Gauge (#1553) - Added http server (#871) - Added jsmn json lib - Added support for ECODHOME smart socket (#1544) - Fixed Lacrosse-THx hardcoded strings to support data extractor scripts - Added support for LaCrosse Technology View TH2 Thermo/Hygro sensor (#1552) - Added stats start time reporting - Fixed Analyzer FSK/OOK hint (#1557) - Improved unit tests for bitbuffer with extra assertions - Fixed UNUSED in term_ctl - Removed "http" as "influx" alias - Added arguments and docs to Home Assistant MQTT auto discovery script (#1546) - Changed LaCrosse LTV-WR1 to wind_avg_km_h key (#1549) - Fixed rfraw builder overflow (#1539) - Added Dooya Curtain Remote conf (#1545) - Added SDR loop api - Changed to sig_atomic_t for sighandler - Fixed wmbus csv output parameters - Fixed flags field for TPMS Jansite (#1538) - Added note for TFA Dostmann 30.3159.IT (#1537) - Added SDR runtime settings api - Changed exit async naming - Added SDR device info - Added support for Bresser 6-in-1, 7-in-1 weather station (#1225) - Added support for LaCrosse Technology View TH3 Thermo/Hygro Sensor (#1536) - Added support for LaCrosse LTV-WR1 Multi Sensor (#1533) - Added support for Nice Flor-s remote (#1526) - Changed remove DSC subtype key (#1522) - Changed Acurite subtype key to message_type (#1520) - Added support for WH31E RCC packet type (#1528) - Fixed wmbus mode S buffer length issue for Lansen meters - Added SoapySDR to MinGW-w64 build - Added output format option to flex getters (#1532) - Added TFA 30.3209 note to Nexus (#1516) - Added TFA-Dostmann 30.3161 rain scale (#1531) - Fixed Insteon string overflow - Fixed missing CSV fields, add a debug check - Added named output tag option (#1517) - Added support for Schrader TPMS SMD3MA4 (Subaru) (#1511) - Removed unneeded update_protocol - Changed width calc from r_device to slicers (#1513) - Added support for mightymule driveway alarm FM231 (#1407) (#1515) - Changed rfraw parse to accept multiple codes - Fixed include for memcmp in rfraw (#1507) - Added id key to scmplus (#1503) - Removed list of supported device protocols from man page (#1345) - Added RfRaw analyzer output support - Added RfRaw format input support - Removed FSK_PULSE_MANCHESTER_ZEROBIT from ook_demods - Fixed Inovalley kw9015b temp/rain fields proper - Fixed Inovalley kw9015b temp/rain fields (#1501) - Added support for Somfy RTS (#1496) - Added 7-bit clean strings check to actions - Added maintainer_update check - Fixed Security+ 2.0 decoder for new gap_limit rows (#1498) - Added clang-analyzer action - Added build action - Added style check action - Improved PCM NRZ 0-bit slicing precision - Fixed output keys for FineOffset WH51 (#1495) - Fixed index bug in TFA 30.3221 - Fixed simplisafe non-printable character output - Added support for LaCrosse LTV-WSDTH01 (#1485) - Added gap_limit to PCM demod - Fixed invalid dumpers on ook input (#1463) - Added support for TFA 30.3221.02 Temperature/Humidity sensor (#1426) - Fixed Acurite 6045 temperature 2.0F too low (#1482 #1401) - Added support for Security plus v2 keyfob (#1480) - Fixed opus_xt300 added sanity check to data values (#1470) - Fixed runtime error 'left shift of 229 by 24 places cannot be represented in type int (#1479) - Fixed bad conf for Fan-11t (#1477) - Added came top432 flex decoder config (#1474) - Fixed wmbus raw telegram output, mainly for wmbusmeters use - Fixed efergy_e2_classic False Trigger (#1475) - FIXed check manchester_decode check decoded bit length in a consistent method, removed superfluous comment - FIXed check manchester_decode result length - Fixed current_cost 8 bytes required - Fixed TPMS Abarth124 false positive (#1466) - Fixed alectov1 csv fields (#1457) - Added Atlas Lightning Detector support (#1418) - Added Acurite Atlas support (#1124) - Added Nexus-TE82s compatibility note (#1455) - Updated idm scmplus Meter type list (#1445) - Added Acurite 590TX support (#1411) - Added ThermoPro TX2 support (#1450) - Improved program exit code in case of error (#1451) - Improved Home Assistant MQTT auto discovery (#1390) - Fixed Many False Positives (#1444) - Fixed Globaltronics QUIGG GT-TMBBQ-05 false positives (#1443) - Fixed Oregon Scientific SL109H false positives (#1442) - Added IDM and NetIDM decoders (#1421) - Changed Fineoffset WH32 to exclude pressure - Added Insteon decoder (#1285) - Added Friedland EVO door bell conf - Added support for LaCrosse TX141B (#1434) - Added missing parts for Sharp SPC775 decoder - Added Sharp SPC775 support (#1433) - Added support for Missil ML0757 - Fixed use of return code in Abarth Spider decoder - Added conditional to data_make (#1432) - Added support for Fineoffset WH32 (#1431) - Added bit reversed output for HCS200 decoder to match official tools - Added reverse32 function - Improved x10sec add sensors, tamper, crc (#1413) - Improved inFactory e.g. MIC (#1325) - Changed Kerui to break out additional fields from state (#1018) - Updated rtl_433.example.conf - Improved validations checks for smoke_gs558 protocol - Added Equation/Siemens ADLM FPRF remote conf - Added Abarth124 tpms sensor support - Added missing protocol to readme - Added attenuation histogram output (#1387) - Added Fine Offset WH1080 FSK version support - Improved FSK demodulation of distorted signals better - Added SCM+ decoder (#1410) - Added support for Kerui WD51 Water leak sensor (#1406) - Fixed cancel watchdog when reading from file input - Fixed ERT Endpoint Type extraction (#1379) - Added custom data processor example - Improved Honeywell sensor support (#1384) - Added delay and low battery codes for DS10A door sensor (#1397) - Fixed free results from SoapySDR API - Fixed handle empty filenames - Added support for Cotech 36-7959 (#1382) - Removed deprecated positional flex syntax - Changed div 10 to mul 0.1 in all decoders - Changed value scaling for double to float in all decoders - Changed checks on Rubicson/Nexus/Solight - Fixed Bresser 5in1 Wind calculation (#1353) - Improved MQTT Home Assistant example (#1357) - Added decode_uart util (#1376) - Fixed Eurochron EFTH-800 missing mic - Added Eurochron EFTH-800 support (#1375) - Fixed MQTTT mgr free - Fixed Soapy string leaks - Added Prometheus/OpenMetrics relay example (#1371) - Fixed missing levels with minmax demod (fixes #1363) - Fixed socket portability - Fixed visonic device battery reporting - Improved visonic_powercode - Fixed rtl_tcp gain/rate/freq status output - Fixed missing WSAStartup in rtl_tcp - Added support for Visonic Powercode devices (#1349) - Added message length check for ESIC EMT7110. - Updated Acurite 6045 to capture all 8 bits of strike counter (#1348) - Added configuration file for SMC5326 (#1346) - Updated template guideline for verbosity (#1344) - Fixed failing style-check test by adding allocation check to write-sigrok - Added support for sigrok convert on windows (#1341) - Fixed flex map parse - Changed -l n to -Y level=n - Changed detector level limits to dB - Fixed Fineoffset-WHx080 temperature (#1327) - Fixed Ecowitt-WH53, Maverick-ET73 timings - Fixed Klimalogg device settings, tolerance was set to low - Added Klimalogg decoder and needed nrzs demodulator - Fixed negative temperatures in wmbus decoder - Added pulse-eval example ## Release 20.02 (2020-02-17) ### Highlights - Added InfluxDB output (#1192) - Added native Sigrok writer (#1297) - Changed to newmodel keys default - Fixed SoapySDR for 0.8 API - Added new minmax FSK pulse detector - Changed default to use new minmax detector and sample rate of 1MS/s for frequency above 800MHz - Changed -a and -G option to discourage usage - Improvements and support for many more sensors ### Changed - Changed CurrentCost and EfergyOptical keys to have units (#1313) - Added command line information when new defaults are active - Added mic to csv output in the ert decoder - Added subtype to DSC (#1318) - Added meta to OOK output - Fixed json escaping (#1299) - Added ERT SCM protocol decoder - Added return codes for most devices - Changed remaining wind dir keys (see #1019) - Fixed optparse strtod with rounding (#1308) - Fixed for wmbus records parser - Added integrity check for Thermopro TP11 and TP12 - Fixed conf eol comments (#1307) - Added config for unknown car key. - Fixed sync word for Honeywell CMI alarm systems - Fixed Wno-format-security for nixos gcc9 (#1306) - Fixed negative length in data_array (#1305) - Added native Sigrok writer (#1297) - Added checksum check for Rubicson 48659 meat thermometer - Changed Updated Fan 11t conf (#1287) - Fixed failure on low sample rates (#1290) - Improved format conversions - Fixed radiohead-ask buffer overflow (#1289) - Changed Enable IKEA Sparsnäs by default - Changed cmake build to static lib - Changed to newmodel keys default - Changed model TFA-Drop-30.3233.01 to TFA-Drop - Added config for Fan-11T fan remote (#1284) - Added preliminary EcoWitt WS68 Anemometer support (#1283) - Added EcoWitt WH40 support (#1275) - Improved PCM RZ bit width detection - Fixed for #1114 DSC Security Contact WS4945 (#1188) - Fixed LaCrosse TX145wsdth repeat requirement - Added preliminary LaCrosse TX141TH-BV3 support - Fixed SoapySDR for 0.8 API - Fixed Auriol AFW2A1 missing check - Changed flex decode to count as successful output - Added Nexus compatible sensor descriptions - Improved LaCrosse TX29-IT support (#1279) - Added LaCrosse TX145wsdth support (#1272) - Changed KNX-RF output - Added support for Lansen wmbus door/window sensor - Improved PCM bit period detection - Fixed OS PCR800 and RGR968 displayed unit name - Fixed battery_level in Fineoffset-WH51 - Fixed type of battery_mv in Fineoffset-WH51 (#1274) - Added reflected LFSR util - Added support for TFA Drop 30.3233.01 (#1255) - Added Auriol AFW2A1 support (#1230) - Added Verisure Alarm config file - Added wmbus mode S support and KNX RF telegram support. - Added support for decoding Lansen and Bmeters wmbus based temperature/hygrometers - Improved Honeywell 2Gig support - Changed -a and -G option to discourage usage - Added support for WS2032 weather station (#1208) - Added timezone offset print option (#1207) - Added LaCrosse TX141W support - Added battery level to Fineoffset WH51 - Added Archos-TBH support (#1199) - Added Oregon ID_THGR810a ID_WGR800a version ids (#1258) - Improved OWL CM180 support (#1247) - Added Holman iWeather WS5029 older PWM (#947) - Added support for FineOffset/ECOWITT WH51 (#1242) - Added config for 21 key remote - Added rtlsdr_find_tuner_gain for exact gains - Improved fineoffset more heuristics to separate WH65B and WH24 - Fixed missing csv fields on default disabled - Improved Efergy Optical decoder (#1229) - Added TX-button to some decoders (#1205) - Improved for TFA pool temperature sensor (#1219) - Added pulse analyzer support for read OOK data (#1216) - Fixed ook input support bug from a9de888 (#1215) - Fixed missing hop_time when reading file (#1211) - Fixed Acurite 899 rain_mm conversion value (#1203) - Fixed build files (#1201) - Added more input format validation - Changed FSK pulse detector mode option - Fixed overlong msg in Radiohead (#1190) - Added optional CSA checker to tests - Added InfluxDB output (#1192) - Fixed Hondaremote for missing first bit - Fixed integer promotion for uint32_t fields (#1193) - Fixed data format in ELV (#1187) - Fixed closing brace bug in test bitbuffer (#1186) - Fixed issue where bt_rain decoder uses -1 as index - Changed if the set frequency is > 800MHz then set sample rate to 1MS/s - Added new minmax FSK pulse detector - Added InfluxDB relay example script - Fixed radiohead buffer underflow (#1181) - Fixed range clamping on RSSI (#1179) - Fixed unaligned sample buffer length (#1177) - Fixed bad event return value in elantra (#1176) - Fixed accounting if decoder misbehaves (#1175) - Fixed ge_coloreffects undef behav (#1173) - Added protocol selection to test bitbuffer input - Added streaming test bitbuffers (#1062) - Fixed parsing oversized bitbuffer (#1171) - Added length check for interlogix device and update return codes (#1169) - Added preamble check for microchip hcs200 to reduce false positives (#1170) - Added unboxed types for data - Added warnings on alloc failure - Added alloc checks, fixes #1156 - Improved Compact doubles in mqtt devices topics - Added Auriol-HG02832 support (#1166) - Improved Honeywell for 2Gig, RE208 (#747) - Changed Upgrade Mongoose 6.13+patches to 6.16+patches - Fixed expand Efergy-e2CT exp range (#1163) - Added RTL-SDR error code output - Added Hyundai Elantra 2012 TPMS support (#1158) - Added Norgo NGE101 support (#1042) - Improved Convert read OOK pulse_data to current sample rate (#1160) - Fixed Acurite 899 rain_mm format (#1154) - Added gt_tmbbq05 parity check - Changed GT-WT-03 added checksum (#1149) - Changed Updated QUIGG GT-TMBBQ-05 with MIC - Changed GT-TMBBQ-05 added ID, finetuned pulse lengths (#1152) - Added Sonoff RM433 conf example (#1150) - Added support for Globaltronics GT-WT-03 (#1149) - Added support for QUIGG GT-TMBBQ-05 (#1151) - Improved Reorder some keys, normalize some keys (#998) - Improved Oregon Scientific V3 preamble match - Added support for Oregon Scientific WGR800X (#1045) - Added Integration docs - Added RRD example script ## Release 19.08 (2019-08-29) ### Highlights - Added MQTT output (#1016) - Added stats reporting (#733) - Added SoapySDR general keyword settings option, e.g. antenna - Added new model keys option - Changed Normalize odd general keys on devices (#1010) - Changed Use battery_ok instead of battery for newmodel - Added report model description option (#987) - Added pulse data text file support (#967) - Added color to console help output - Fixed CF32 loader; addeded CS8, CF32 dumper ### Changed - Added CurrentCost EnviR support (#1115) - Added ESIC-EMT7170 power meter (#1132) - Added LaCrosse-TX141Bv3 support (#1134) - Added channel to inFactory-TH (#1133) - Added man page rtl_433.1 (#1121) - Added color to console help output - Added support for Philips AJ7010 (#1047) - Added frequency hopping signal support for win32 (#1128) - Added Holman WS5029 decoder - Added Acurite Rain 899 support - Added support for Oregon scientific THGR328N and RTGR328N (#1107) (#1109) - Added frequency hop on USR1 signal - Added '-E hop' option - Added option for multiple hop times - Added sensor similar to GT-WT-02 (#1080) - Added Rubicson 48659 Cooking Thermometer - Added TFA Dostmann 30.3196 decoder (#983) - Added support for HCS200 KeeLoq encoder (#1081) - Added channel output to lacrosse_TX141TH_Bv2 (#1097) - Added IKEA Sparsnäs decoder. - Added support for Eurochron weather station sensor (#1090) - Added MQTT topic format strings (#1079) - Added two EV1527 based sample configurations (#1087) - Added DirecTV RC66RX Remote Control - Added support for Ecowitt temperature sensor - Added Companion WTR001 decoder (#1055) - Changed Thermopro TP12 also supports TP20 (#1061) - Added configuration for PIR-EF4 sensor (#1049) - Added Alecto WS-1200 v1/v2/DCF decoders to Fineoffset (#975) - Added TS-FT002 decoder (#1015) - Added Fine Offset WH32B support (#1040) - Added LaCrosse-WS3600 support, change LaCrosse-WS to LaCrosse-WS2310 - Added LaCrosse WS7000 support (#1029) (#1030) - Changed Omit humidity on Prologue if invalid - Added MQTT output (#1016) - Added stats reporting (#733) - Added Interface Specification for data output (#827) - Added checksum to Ambient Weather TX-8300 - Added Interlogix glassbreak subtype - Added Jansite TPMS support (#1020) - Added Oregon Scientific RTHN129 support (#941) - Changed Use battery_ok instead of battery for newmodel - Changed Update battery_low, temperatureN keys - Changed Normalize odd general keys on devices (#1010) - Fixed Efergy-e2 current reading exponent - Added FS20 remote decoder (#999) - Added SoapySDR general keyword settings option - Added option to select antenna on SoapySDR devices (#968) - Fixed CF32 loader; added CS8, CF32 dumper - Added ASAN to Debug builds - Changed tfa_twin_plus_30.3049: Add mic to output - Added new model keys option - Enhanced Kedsum, S3318, Esperanza with MIC (#985) - Added support for XT300/XH300 soil moisture sensor (#946) - Changed Schrader unit from bar to kPa - Added report model description option (#987) - Added native scale for SDRplay - Added Chungear BCF-0019x2 example conf - Changed GT-WT-02 to support newer timings; changed model name - Added pulse data text file support (#967) - Added Digitech XC0346 support to Fine Offset WH1050 (#922) - Added bitbuffer NRZI(NRZS/NRZM) decodes - Added Rosenborg/WH5 quirk to Fineoffset - Added support for Silverline doorbells (#942) - Changed TPMS Toyota to match shorter preamble - Changed TPMS Citroen data readings - Changed TPMS Renault data readings - Added Digitech XC-0324 temperature sensor decoder (#849) - Added sample rate switching - Added Mongoose ## Release 18.12 (2018-12-16) ### Highlights - Added conf file support with examples in etc/rtl_433/ - Default KV output has pretty colors on console - Added meta data for levels, precision time, protocol, debug, tagging - Added rtl_tcp input (#894) - Added SoapySDR support with CU8/CS16/F32 input/output conversions (#842) - Added VCD output, Sigrok pulseview converter ### Changed - Install example conf files will to etc/rtl_433/ - Default output is terse with just the most important info - Deprecate option q and D for new v to set verbosity - Default KV output has pretty colors on console - Added debug bits output option - Added protocol number meta data option - Added precision time and time report options (#905) - Deprecate option t and I for new S none|all|unknown|known - Changed to use pulse detect to track and grab frames - Added rtl_tcp input (#894) - Added bitrow debugging output helper - Added bitbuffer_debug, bitrow_print, bitrow_debug - Changed flex to use keys for all values (#885) - Allow multiple input files, positional args are input files - Added option for output tagging - Added conf examples for generic SCV2260 and PT2260 - Added a conf file parser (#790) - Added negative protocol numbers to disable a device - Added Freq/RSSI/SNR output to data_acquired_handler (#865) - Added flex suggestion to analyzer output, switch to unit of us - Added null output option (suppress default KV) - Added option to skip the tests to be built. (#832) - Added SoapySDR support (#842) - Added CU8/CS16 output conversion - Improved dumpers to allow multiple dumpers - Removed rtlsdr sync mode - Added VCD output - Added Sigrok pulseview converter - Added f32 output modes - Added flex getter (#786) - Added version (-V) and help (-h) option (#810) - Added example MS Visual Studio 2015 project (#789) - Added CS16 input and output (#773) - Added preamble option to flex decoder ### Added and improved devices - Added Gust to Hideki, report proper mph (#891) - Changed raincounter_raw field to rain_inch for acurite (#893) - Removed EC3k, converted to flex conf - Removed Valeo, converted to flex conf - Removed Steffen, converted to flex conf - Changed ELV-EM1000, ELV-WS2000 to structured output - Changed X10-RF to structured output - Changed Lightwave-RF to structured output - Added confs ported from old devices - Improved Fine Offset WH-3080 to support new version Watts/m value calculation - Added support for Bresser Weather Center 5-in-1 - Added Biltema rain gauge protocol decoder, disabled by default - Added ESA 1000/2000 protocol decoder - Added support for Honeywell Wireless Doorbell - Improved inFactory with added checks, enabled by default - Added Maverick et73 - Added Ambient Weather WH31E (#882) - Added AmbientWeather-TX8300 (TFA 30.3211.02) support - Added Emos TTX201 (#782) - Added Hideki / Cresta temperature sensor (#858) - Added Fine Offset WH65B support (#845) - Added AcuRite 3-n-1 (#720) - Added PMV-107J TPMS (#825) - Added Fine Offset WH65b support - Added Fine Offset WH24 (#809) - Added TP08 remote thermometer (#750) - Added WT0124 Pool Thermometer - Added Hyundai WS sensor (#779) - Added M-Bus (EN 13757-4) - Data Link layer (#768) - Improved RadioHead to unify the applications - Added Sensible Living protocol (#742) - Added Oregon Scientific UVR128 UV sensor (#738) - Added Pacific PMV-C210 TMPS support (#717) - Added SimpliSafe Sensor (#721) ## Release 18.05 (2018-05-02) ### Highlights - Preparations for features like MQTT and SoapySDR - Syslog for simple network output - Rewritten demodulators to support a "precise" mode using a given tolerance and optional sync symbols - Simplified data output layers ### Changed - Added conversion hPA/inHG, kPa/PSI (#711) - Added remote syslog output - Added a flexible general purpose decoder (#647) - Added git version info to usage output if available - Added number suffixes on e.g. frequency, samplerate, duration, hoptime - Added Profile build type using GPerfTools - Changed grab file name to gNNN_FFFM_RRRk.cu8 (#642) - Added option to use receiver serial number -d :SERIAL (#648) - Added option to stop after outputting successful event(s) - Changed to new data API - Added option to verify simulated decoding of raw data ### Added and improved devices - Added decoder for Dish Network UHF Remote 6.3 (#700) - Added interlogix devices driver (#649) - Added Euroster 3000TX, Elro DB270 (#683) - Added x10_sec device for decoding X10 Security RF signals (#671) - Added device LaCrosse TX141 support to lacrosse_TX141TH_Bv2.c (#670) - Added GE Color Effects Remote indent and MAX_PROTOCOLS - Added support for Telldus variants of fineoffset (#639) - Added support to Oregon Scientific RTGN129 - Added device NEXA LMST-606 magnetic sensor - Added support for Philips outdoor temperature sensor - Added support for Ford car remote. - Added support for the Thermopro TP-12. - Added infactory sensor - Added Renault TPMS sensor - Added Ford TPMS sensor - Added Toyota TPMS sensor - Added GE Color Effects remote control - Added Generic off-brand wireless motion sensor and alarm system - Added Wireless Smoke and Heat Detector GS 558 - Added Solight TE44 wireless thermometer rtl_433-23.11/CMakeLists.txt000066400000000000000000000343541453136125300154660ustar00rootroot00000000000000######################################################################## # Project setup ######################################################################## cmake_minimum_required(VERSION 2.6) # Fix behavior of CMAKE_C_STANDARD when targeting macOS. if(POLICY CMP0025) cmake_policy(SET CMP0025 NEW) endif() # Only interpret if() arguments as variables or keywords when unquoted. if(POLICY CMP0054) cmake_policy(SET CMP0054 NEW) endif() project(rtl433 C) #select the release build type by default to get optimization flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") message(STATUS "Build type not specified: defaulting to release.") endif(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "") list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) ######################################################################## # Get version info from Git ######################################################################## include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_COMMIT) if(GIT_COMMIT) # is a git repo # shorten branch spec string(REGEX REPLACE ".*/" "" GIT_BRANCH "${GIT_REFSPEC}") # use lightweight (non-annotated) tags git_describe(GIT_VERSION "--tags" "--exclude=nightly") git_timestamp(GIT_TIMESTAMP) message(STATUS "Found Git version: ${GIT_REFSPEC} commit ${GIT_COMMIT} from ${GIT_TIMESTAMP_ISO}") message(STATUS "Using Git version tag: ${GIT_VERSION} on ${GIT_BRANCH} at ${GIT_TIMESTAMP}") ADD_DEFINITIONS(-DGIT_VERSION=${GIT_VERSION}) ADD_DEFINITIONS(-DGIT_BRANCH=${GIT_BRANCH}) ADD_DEFINITIONS(-DGIT_TIMESTAMP=${GIT_TIMESTAMP}) endif() ######################################################################## # Fallback to get release version info from Changelog ######################################################################## if(NOT GIT_COMMIT AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md") # parse the CHANGELOG.md, this is clever, i.e. might go wrong ;) file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md" CHANGELOG LIMIT_COUNT 42) # list(FILTER ...) needs CMake 3.6+ foreach(item ${CHANGELOG}) string(REGEX MATCH "^## Release (.+)" item ${item}) if(CMAKE_MATCH_1) list(APPEND RELEASE_VERSIONS ${CMAKE_MATCH_1}) endif() endforeach() if(RELEASE_VERSIONS) list(GET RELEASE_VERSIONS 0 RELEASE_VERSION) message(STATUS "Found Release version: ${RELEASE_VERSION}") ADD_DEFINITIONS(-DGIT_VERSION=${RELEASE_VERSION}) endif() endif() ######################################################################## # Compiler specific setup ######################################################################## set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_STANDARD 99) if(("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") AND NOT WIN32) ADD_DEFINITIONS(-Wall) ADD_DEFINITIONS(-Wextra) ADD_DEFINITIONS(-Wvla) ADD_DEFINITIONS(-Wsign-compare) ADD_DEFINITIONS(-std=c99) ADD_DEFINITIONS(-pedantic) ADD_DEFINITIONS(-Wshadow) ADD_DEFINITIONS(-Wmissing-prototypes) if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang" OR NOT "7.0.0" VERSION_GREATER CMAKE_C_COMPILER_VERSION) ADD_DEFINITIONS(-Wimplicit-fallthrough) endif() #ADD_DEFINITIONS(-Wfloat-equal) #ADD_DEFINITIONS(-Wbad-function-cast) #ADD_DEFINITIONS(-Wdocumentation) add_definitions(-Wno-deprecated-declarations) # for strdup, setenv, use either #ADD_DEFINITIONS(-D_POSIX_C_SOURCE=200809) # does not work with uClibc ADD_DEFINITIONS(-D_GNU_SOURCE) #http://gcc.gnu.org/wiki/Visibility add_definitions(-fvisibility=hidden) # CMake Release default for GCC/Clang is "-O3 -DNDEBUG" # set(CMAKE_C_FLAGS_RELEASE -O2) # CMake Debug default for GCC/Clang is "-g -DNDEBUG" # set(CMAKE_C_FLAGS_DEBUG -g3 -O0) # make use of ASAN set(CMAKE_C_FLAGS_DEBUG "-ggdb -fsanitize=undefined -fsanitize=address -fno-omit-frame-pointer") endif() if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") # make sure we don't accidentally copy more than an int ADD_DEFINITIONS(-Wlarge-by-value-copy=8) endif() # Enable Static analysis on GCC13.2.0+ if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "13.2.0") message(STATUS "Using GCC Static analysis") add_definitions(-fanalyzer) endif() # Shut MSVC up about strdup and strtok if(MSVC) ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) ADD_DEFINITIONS(-DNOMINMAX) # don't warn on type truncation add_compile_options("/wd4244") add_compile_options("/wd4267") add_compile_options("/wd4305") endif() # Fix printf %zu if(MINGW) add_definitions(-D__USE_MINGW_ANSI_STDIO) endif() # Make sure we get M_PI if(WIN32) add_definitions(-D_USE_MATH_DEFINES) endif() # On Unix pass the SYSCONFDIR through to conf file loader if(NOT WIN32) include(GNUInstallDirs) add_definitions(-DINSTALL_SYSCONFDIR=${CMAKE_INSTALL_FULL_SYSCONFDIR}) endif() ######################################################################## # Use pkg-config ######################################################################## find_package(PkgConfig) ######################################################################## # Option to force ANSI-colored build output (for Ninja) ######################################################################## option(FORCE_COLORED_BUILD "Always produce ANSI-colored build output (GNU/Clang only)." FALSE) if(FORCE_COLORED_BUILD) if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") add_compile_options(-fdiagnostics-color=always) elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") add_compile_options(-fcolor-diagnostics) endif() endif() ######################################################################## # Enable IPv6 support ######################################################################## option(ENABLE_IPV6 "Enable IPv6 support" TRUE) if(ENABLE_IPV6) message(STATUS "IPv6 support enabled.") ADD_DEFINITIONS(-DMG_ENABLE_IPV6=1) if(MINGW) # IPv6 requires at least Vista for inet_pton, inet_ntop add_definitions(-D_WIN32_WINNT=0x0600) endif() else() message(STATUS "IPv6 support disabled.") endif() ######################################################################## # Find Threads support build dependencies ######################################################################## set(ENABLE_THREADS AUTO CACHE STRING "Enable Threads support") set_property(CACHE ENABLE_THREADS PROPERTY STRINGS AUTO ON OFF) if(ENABLE_THREADS) # AUTO / ON find_package(Threads) if(Threads_FOUND) message(STATUS "Threads support will be compiled.") ADD_DEFINITIONS(-DTHREADS) elseif(ENABLE_THREADS STREQUAL "AUTO") message(STATUS "Threads support not found, some features will be disabled.") else() message(FATAL_ERROR "Threads support not found.") endif() else() message(STATUS "Threads support disabled.") endif() ######################################################################## # Find OpenSSL build dependencies ######################################################################## set(ENABLE_OPENSSL AUTO CACHE STRING "Enable OpenSSL TLS support") set_property(CACHE ENABLE_OPENSSL PROPERTY STRINGS AUTO ON OFF) if(ENABLE_OPENSSL) # AUTO / ON find_package(OpenSSL) # Get actual libs from pkg-config to support edge cases (static on Sparc) # This will break Win32 builds, exclude that platform pkg_check_modules(PC_OPENSSL QUIET openssl) if(PC_OPENSSL_FOUND AND NOT WIN32) set(OPENSSL_LIBRARIES ${PC_OPENSSL_LINK_LIBRARIES}) endif() if(OPENSSL_FOUND) message(STATUS "OpenSSL TLS support will be compiled. Found version ${OPENSSL_VERSION}") include_directories(${OPENSSL_INCLUDE_DIR}) list(APPEND SDR_LIBRARIES ${OPENSSL_LIBRARIES}) ADD_DEFINITIONS(-DOPENSSL) ADD_DEFINITIONS(-DMG_ENABLE_SSL) elseif(ENABLE_OPENSSL STREQUAL "AUTO") message(STATUS "OpenSSL development files not found, TLS won't be possible.") else() message(FATAL_ERROR "OpenSSL development files not found.") endif() else() message(STATUS "OpenSSL TLS disabled.") endif() ######################################################################## # Find LibRTLSDR build dependencies ######################################################################## set(ENABLE_RTLSDR ON CACHE STRING "Enable RTL-SDR (lbrtlsdr) driver support") set_property(CACHE ENABLE_RTLSDR PROPERTY STRINGS AUTO ON OFF) if(ENABLE_RTLSDR) # AUTO / ON find_package(LibRTLSDR) find_package(LibUSB) if(LibRTLSDR_FOUND) message(STATUS "RTL-SDR device input will be compiled. Found version ${LibRTLSDR_VERSION}") include_directories(${LibRTLSDR_INCLUDE_DIRS}) list(APPEND SDR_LIBRARIES ${LibRTLSDR_LIBRARIES}) ADD_DEFINITIONS(-DRTLSDR) if(LibUSB_FOUND) message(STATUS "libusb-1.0 error messages are available. Found version ${LibUSB_VERSION}") include_directories(${LibUSB_INCLUDE_DIRS}) list(APPEND SDR_LIBRARIES ${LibUSB_LIBRARIES}) ADD_DEFINITIONS(-DLIBUSB1) else() message(STATUS "libusb-1.0 error messages are not available.") endif() elseif(ENABLE_RTLSDR STREQUAL "AUTO") message(STATUS "RTL-SDR development files not found, RTL-SDR device input won't be possible.") else() message(FATAL_ERROR "RTL-SDR development files not found.") endif() else() message(STATUS "RTL-SDR device input disabled.") endif() ######################################################################## # Find SoapySDR build dependencies ######################################################################## set(ENABLE_SOAPYSDR AUTO CACHE STRING "Enable SoapySDR driver support") set_property(CACHE ENABLE_SOAPYSDR PROPERTY STRINGS AUTO ON OFF) if(ENABLE_SOAPYSDR) # AUTO / ON find_package(SoapySDR "0.6" NO_MODULE) if(SoapySDR_FOUND) message(STATUS "SoapySDR device input will be compiled. Found version ${SoapySDR_VERSION}") include_directories(${SoapySDR_INCLUDE_DIRS}) list(APPEND SDR_LIBRARIES ${SoapySDR_LIBRARIES}) ADD_DEFINITIONS(-DSOAPYSDR) elseif(ENABLE_SOAPYSDR STREQUAL "AUTO") message(STATUS "SoapySDR development files not found, SoapySDR device input won't be possible.") else() message(FATAL_ERROR "SoapySDR development files not found.") endif() else() message(STATUS "SoapySDR device input disabled.") endif() ######################################################################## # Setup optional Profiling with GPerfTools ######################################################################## # cmake -DCMAKE_BUILD_TYPE=Profile .. # CPUPROFILE=prof.out ./src/rtl_433 ... # pprof -text ./src/rtl_433 prof.out if("${CMAKE_BUILD_TYPE}" STREQUAL "Profile") message(STATUS "Build type set to Profile. Linking GPerfTools.") find_package(Gperftools REQUIRED) include_directories(${GPERFTOOLS_INCLUDE_DIR}) list(APPEND SDR_LIBRARIES ${GPERFTOOLS_LIBRARIES} -Wl,-no_pie) ADD_DEFINITIONS(-g) ADD_DEFINITIONS(-fno-builtin-malloc) ADD_DEFINITIONS(-fno-builtin-calloc) ADD_DEFINITIONS(-fno-builtin-realloc) ADD_DEFINITIONS(-fno-builtin-free) endif() ######################################################################## # Setup the include and linker paths ######################################################################## if(MINGW OR MSVC) list(APPEND NET_LIBRARIES ws2_32 mswsock netapi32) endif() include_directories( BEFORE ${PROJECT_SOURCE_DIR}/include ) ######################################################################## # Create uninstall target ######################################################################## configure_file( ${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake @ONLY) add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ######################################################################## # Build documentation with Doxygen ######################################################################## option(BUILD_DOCUMENTATION "Create and install the HTML based API documentation (requires Doxygen)" OFF) find_package(Doxygen) if(BUILD_DOCUMENTATION) if(NOT DOXYGEN_FOUND) message(FATAL_ERROR "Doxygen is needed to build the documentation.") endif() set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in) set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) if(DOXYGEN_DOT_FOUND) set(HAVE_DOT "YES") else() set(HAVE_DOT "NO") endif() configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) message(STATUS "Doxygen build started") # note the option ALL which allows to build the docs together with the application add_custom_target(doc_doxygen ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM) # install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION share/doc) endif() ######################################################################## # Build tests with analyzer ######################################################################## option(BUILD_TESTING_ANALYZER "Build the testing tree with static analyzer (requires Clang)" OFF) ######################################################################## # Build tests ######################################################################## include(CTest) # note: this adds a BUILD_TESTING which defaults to ON ######################################################################## # Add subdirectories ######################################################################## add_subdirectory(include) add_subdirectory(src) if(BUILD_TESTING) add_subdirectory(tests) endif(BUILD_TESTING) add_subdirectory(conf) # use space-separation format for the pc file STRING(REPLACE ";" " " RTL433_PC_CFLAGS "${RTL433_PC_CFLAGS}") STRING(REPLACE ";" " " RTL433_PC_LIBS "${RTL433_PC_LIBS}") # unset these vars to avoid hard-coded paths to cross environment IF(CMAKE_CROSSCOMPILING) UNSET(RTL433_PC_CFLAGS) UNSET(RTL433_PC_LIBS) ENDIF(CMAKE_CROSSCOMPILING) set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix \${prefix}) set(libdir \${exec_prefix}/lib) set(includedir \${prefix}/include) INSTALL( FILES DESTINATION lib/pkgconfig ) install(DIRECTORY man DESTINATION share PATTERN ".md" EXCLUDE) rtl_433-23.11/COPYING000066400000000000000000000431031453136125300137510ustar00rootroot00000000000000 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. rtl_433-23.11/Doxyfile.in000066400000000000000000003246231453136125300150420ustar00rootroot00000000000000# Doxyfile 1.8.16 # 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 configuration # 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 # https://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 = rtl433 # 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 = @VERSION@ # 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 = "RTL-433 utility" # 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 = @CMAKE_CURRENT_BINARY_DIR@/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 # The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all generated output in the proper direction. # Possible values are: None, LTR, RTL and Context. # The default value is: None. OUTPUT_TEXT_DIRECTION = None # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # 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 = # 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 = YES # If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be # interpreted by doxygen. # The default value is: NO. JAVADOC_BANNER = 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 = 8 # 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 (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. # When you need a literal { or } or , in the value part of an alias you have to # escape them by means of a backslash (\), this can lead to conflicts with the # commands \{ and \} for these it is advised to use the version @{ and @} or use # a double escape (\\{ and \\}) ALIASES = # 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 # Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice # sources only. Doxygen will then generate output that is more tailored for that # language. For instance, namespaces will be presented as modules, types will be # separated into more groups, etc. # The default value is: NO. OPTIMIZE_OUTPUT_SLICE = 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, # Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files), VHDL, tcl. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is # Fortran), use: inc=Fortran f=C. # # 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 https://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: 5. # 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: # https://www.riverbankcomputing.com/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 = YES # 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_PRIV_VIRTUAL tag is set to YES, documented private virtual # methods of a class will be included in the documentation. # The default value is: NO. EXTRACT_PRIV_VIRTUAL = 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 = YES # 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 = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # (including Cygwin) ands Mac users are advised to set this option to NO. # 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 https://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 = NO # 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 = YES # 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 = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. If # EXTRACT_ALL is set to YES then this flag will automatically be disabled. # 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 = YES # 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 = "$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 = @CMAKE_CURRENT_SOURCE_DIR@/include \ @CMAKE_CURRENT_SOURCE_DIR@/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: https://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, *.qsf and *.ice. FILE_PATTERNS = *.h *.c # 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 = mongoose.* # 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 # entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = YES # 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 = YES # 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 https://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 configuration 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 #--------------------------------------------------------------------------- # 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 = NO # 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 # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # 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 = YES # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via Javascript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML # page. Disable this option to support browsers that do not have Javascript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_MENUS = YES # 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: https://developer.apple.com/xcode/), introduced with OSX # 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. # 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: https://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: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- # folders). # 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: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- # filters). # 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: # https://doc.qt.io/archives/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_TRANSPARENT 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 # https://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # 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 https://www.mathjax.org before deployment. # The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # 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 # , /